diff --git a/dist/index.js b/dist/index.js
new file mode 100644
index 0000000..7531d74
--- /dev/null
+++ b/dist/index.js
@@ -0,0 +1,91220 @@
+require('./sourcemap-register.js');/******/ (() => { // webpackBootstrap
+/******/ var __webpack_modules__ = ({
+
+/***/ 39139:
+/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
+
+"use strict";
+
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ var desc = Object.getOwnPropertyDescriptor(m, k);
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+ desc = { enumerable: true, get: function() { return m[k]; } };
+ }
+ Object.defineProperty(o, k2, desc);
+}) : (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+ o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+ if (mod && mod.__esModule) return mod;
+ var result = {};
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+ __setModuleDefault(result, mod);
+ return result;
+};
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.run = void 0;
+const core_1 = __nccwpck_require__(42186);
+const github = __importStar(__nccwpck_require__(95438));
+const assembly_1 = __nccwpck_require__(99274);
+const comment_1 = __nccwpck_require__(21667);
+const diff_1 = __nccwpck_require__(32484);
+async function run() {
+ const inputs = {
+ allowedDestroyTypes: (0, core_1.getInput)('allowedDestroyTypes').split(','),
+ failOnDestructiveChanges: (0, core_1.getBooleanInput)('failOnDestructiveChanges'),
+ githubToken: (0, core_1.getInput)('githubToken'),
+ };
+ const octokit = github.getOctokit(inputs.githubToken);
+ const context = github.context;
+ const assembly = assembly_1.AssemblyManifestReader.fromPath('cdk.out');
+ let stages = assembly.stages;
+ if (!stages.length) {
+ stages = [{
+ name: 'DefaultStage',
+ stacks: assembly.stacks,
+ }];
+ }
+ const comments = new comment_1.Comments(octokit, context);
+ const processor = new diff_1.StageProcessor(stages, inputs.allowedDestroyTypes);
+ await processor.processStages();
+ await processor.commentStages(comments);
+ if (processor.hasDestructiveChanges && inputs.failOnDestructiveChanges) {
+ throw new Error('There are destructive changes! See PR comment for details.');
+ }
+ return;
+}
+exports.run = run;
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2FjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHdDQUEwRDtBQUMxRCx3REFBMEM7QUFDMUMseUNBQW9EO0FBQ3BELHVDQUFxQztBQUNyQyxpQ0FBd0M7QUFHakMsS0FBSyxVQUFVLEdBQUc7SUFDdkIsTUFBTSxNQUFNLEdBQVc7UUFDckIsbUJBQW1CLEVBQUUsSUFBQSxlQUFRLEVBQUMscUJBQXFCLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDO1FBQy9ELHdCQUF3QixFQUFFLElBQUEsc0JBQWUsRUFBQywwQkFBMEIsQ0FBQztRQUNyRSxXQUFXLEVBQUUsSUFBQSxlQUFRLEVBQUMsYUFBYSxDQUFDO0tBQ3JDLENBQUM7SUFDRixNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUN0RCxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDO0lBRS9CLE1BQU0sUUFBUSxHQUFHLGlDQUFzQixDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM1RCxJQUFJLE1BQU0sR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDO0lBQzdCLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFO1FBQ2xCLE1BQU0sR0FBRyxDQUFDO2dCQUNSLElBQUksRUFBRSxjQUFjO2dCQUNwQixNQUFNLEVBQUUsUUFBUSxDQUFDLE1BQU07YUFDeEIsQ0FBQyxDQUFDO0tBQ0o7SUFDRCxNQUFNLFFBQVEsR0FBRyxJQUFJLGtCQUFRLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ2hELE1BQU0sU0FBUyxHQUFHLElBQUkscUJBQWMsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFDekUsTUFBTSxTQUFTLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDaEMsTUFBTSxTQUFTLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3hDLElBQUksU0FBUyxDQUFDLHFCQUFxQixJQUFJLE1BQU0sQ0FBQyx3QkFBd0IsRUFBRTtRQUN0RSxNQUFNLElBQUksS0FBSyxDQUFDLDREQUE0RCxDQUFDLENBQUM7S0FDL0U7SUFDRCxPQUFPO0FBQ1QsQ0FBQztBQXpCRCxrQkF5QkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnZXRJbnB1dCwgZ2V0Qm9vbGVhbklucHV0IH0gZnJvbSAnQGFjdGlvbnMvY29yZSc7XG5pbXBvcnQgKiBhcyBnaXRodWIgZnJvbSAnQGFjdGlvbnMvZ2l0aHViJztcbmltcG9ydCB7IEFzc2VtYmx5TWFuaWZlc3RSZWFkZXIgfSBmcm9tICcuL2Fzc2VtYmx5JztcbmltcG9ydCB7IENvbW1lbnRzIH0gZnJvbSAnLi9jb21tZW50JztcbmltcG9ydCB7IFN0YWdlUHJvY2Vzc29yIH0gZnJvbSAnLi9kaWZmJztcbmltcG9ydCB7IElucHV0cyB9IGZyb20gJy4vaW5wdXRzJztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1bigpIHtcbiAgY29uc3QgaW5wdXRzOiBJbnB1dHMgPSB7XG4gICAgYWxsb3dlZERlc3Ryb3lUeXBlczogZ2V0SW5wdXQoJ2FsbG93ZWREZXN0cm95VHlwZXMnKS5zcGxpdCgnLCcpLFxuICAgIGZhaWxPbkRlc3RydWN0aXZlQ2hhbmdlczogZ2V0Qm9vbGVhbklucHV0KCdmYWlsT25EZXN0cnVjdGl2ZUNoYW5nZXMnKSxcbiAgICBnaXRodWJUb2tlbjogZ2V0SW5wdXQoJ2dpdGh1YlRva2VuJyksXG4gIH07XG4gIGNvbnN0IG9jdG9raXQgPSBnaXRodWIuZ2V0T2N0b2tpdChpbnB1dHMuZ2l0aHViVG9rZW4pO1xuICBjb25zdCBjb250ZXh0ID0gZ2l0aHViLmNvbnRleHQ7XG5cbiAgY29uc3QgYXNzZW1ibHkgPSBBc3NlbWJseU1hbmlmZXN0UmVhZGVyLmZyb21QYXRoKCdjZGsub3V0Jyk7XG4gIGxldCBzdGFnZXMgPSBhc3NlbWJseS5zdGFnZXM7XG4gIGlmICghc3RhZ2VzLmxlbmd0aCkge1xuICAgIHN0YWdlcyA9IFt7XG4gICAgICBuYW1lOiAnRGVmYXVsdFN0YWdlJyxcbiAgICAgIHN0YWNrczogYXNzZW1ibHkuc3RhY2tzLFxuICAgIH1dO1xuICB9XG4gIGNvbnN0IGNvbW1lbnRzID0gbmV3IENvbW1lbnRzKG9jdG9raXQsIGNvbnRleHQpO1xuICBjb25zdCBwcm9jZXNzb3IgPSBuZXcgU3RhZ2VQcm9jZXNzb3Ioc3RhZ2VzLCBpbnB1dHMuYWxsb3dlZERlc3Ryb3lUeXBlcyk7XG4gIGF3YWl0IHByb2Nlc3Nvci5wcm9jZXNzU3RhZ2VzKCk7XG4gIGF3YWl0IHByb2Nlc3Nvci5jb21tZW50U3RhZ2VzKGNvbW1lbnRzKTtcbiAgaWYgKHByb2Nlc3Nvci5oYXNEZXN0cnVjdGl2ZUNoYW5nZXMgJiYgaW5wdXRzLmZhaWxPbkRlc3RydWN0aXZlQ2hhbmdlcykge1xuICAgIHRocm93IG5ldyBFcnJvcignVGhlcmUgYXJlIGRlc3RydWN0aXZlIGNoYW5nZXMhIFNlZSBQUiBjb21tZW50IGZvciBkZXRhaWxzLicpO1xuICB9XG4gIHJldHVybjtcbn1cblxuIl19
+
+/***/ }),
+
+/***/ 99274:
+/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
+
+"use strict";
+
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ var desc = Object.getOwnPropertyDescriptor(m, k);
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+ desc = { enumerable: true, get: function() { return m[k]; } };
+ }
+ Object.defineProperty(o, k2, desc);
+}) : (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+ o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+ if (mod && mod.__esModule) return mod;
+ var result = {};
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+ __setModuleDefault(result, mod);
+ return result;
+};
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.AssemblyManifestReader = void 0;
+const path = __importStar(__nccwpck_require__(71017));
+const cloud_assembly_schema_1 = __nccwpck_require__(90001);
+const fs = __importStar(__nccwpck_require__(5630));
+/**
+ * Reads a Cloud Assembly manifest
+ */
+class AssemblyManifestReader {
+ /**
+ * Reads a Cloud Assembly manifest from a file
+ */
+ static fromFile(fileName) {
+ try {
+ const obj = cloud_assembly_schema_1.Manifest.loadAssemblyManifest(fileName);
+ return new AssemblyManifestReader(path.dirname(fileName), obj);
+ }
+ catch (e) {
+ throw new Error(`Cannot read integ manifest '${fileName}': ${e.message}`);
+ }
+ }
+ /**
+ * Reads a Cloud Assembly manifest from a file or a directory
+ * If the given filePath is a directory then it will look for
+ * a file within the directory with the DEFAULT_FILENAME
+ */
+ static fromPath(filePath) {
+ let st;
+ try {
+ st = fs.statSync(filePath);
+ }
+ catch (e) {
+ throw new Error(`Cannot read integ manifest at '${filePath}': ${e.message}`);
+ }
+ if (st.isDirectory()) {
+ return AssemblyManifestReader.fromFile(path.join(filePath, AssemblyManifestReader.DEFAULT_FILENAME));
+ }
+ return AssemblyManifestReader.fromFile(filePath);
+ }
+ constructor(directory, manifest) {
+ this.manifest = manifest;
+ this.directory = directory;
+ }
+ /**
+ * Get the stacks from the manifest
+ * returns a map of artifactId to CloudFormation template
+ */
+ get stacks() {
+ var _a, _b;
+ const stacks = [];
+ for (const [artifactId, artifact] of Object.entries((_a = this.manifest.artifacts) !== null && _a !== void 0 ? _a : {})) {
+ if (artifact.type !== cloud_assembly_schema_1.ArtifactType.AWS_CLOUDFORMATION_STACK) {
+ continue;
+ }
+ const props = artifact.properties;
+ const template = fs.readJSONSync(path.resolve(this.directory, props.templateFile));
+ stacks.push({
+ content: template,
+ lookupRole: props.lookupRole,
+ name: (_b = props.stackName) !== null && _b !== void 0 ? _b : artifactId,
+ });
+ }
+ return stacks;
+ }
+ get stages() {
+ var _a, _b;
+ const stages = [];
+ for (const [artifactId, artifact] of Object.entries((_a = this.manifest.artifacts) !== null && _a !== void 0 ? _a : {})) {
+ if (artifact.type !== cloud_assembly_schema_1.ArtifactType.NESTED_CLOUD_ASSEMBLY) {
+ continue;
+ }
+ const props = artifact.properties;
+ const nestedAssembly = AssemblyManifestReader.fromPath(path.join(this.directory, props.directoryName));
+ stages.push({
+ name: (_b = props.displayName) !== null && _b !== void 0 ? _b : artifactId,
+ stacks: nestedAssembly.stacks,
+ });
+ }
+ return stages;
+ }
+}
+exports.AssemblyManifestReader = AssemblyManifestReader;
+AssemblyManifestReader.DEFAULT_FILENAME = 'manifest.json';
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZW1ibHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvYXNzZW1ibHkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwyQ0FBNkI7QUFDN0IsMEVBQTBLO0FBQzFLLDZDQUErQjtBQWUvQjs7R0FFRztBQUNILE1BQWEsc0JBQXNCO0lBR2pDOztPQUVHO0lBQ0ksTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFnQjtRQUNyQyxJQUFJO1lBQ0YsTUFBTSxHQUFHLEdBQUcsZ0NBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNwRCxPQUFPLElBQUksc0JBQXNCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztTQUVoRTtRQUFDLE9BQU8sQ0FBTSxFQUFFO1lBQ2YsTUFBTSxJQUFJLEtBQUssQ0FBQywrQkFBK0IsUUFBUSxNQUFNLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1NBQzNFO0lBQ0gsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQWdCO1FBQ3JDLElBQUksRUFBRSxDQUFDO1FBQ1AsSUFBSTtZQUNGLEVBQUUsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQzVCO1FBQUMsT0FBTyxDQUFNLEVBQUU7WUFDZixNQUFNLElBQUksS0FBSyxDQUFDLGtDQUFrQyxRQUFRLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7U0FDOUU7UUFDRCxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsRUFBRTtZQUNwQixPQUFPLHNCQUFzQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxzQkFBc0IsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7U0FDdEc7UUFDRCxPQUFPLHNCQUFzQixDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBT0QsWUFBWSxTQUFpQixFQUFtQixRQUEwQjtRQUExQixhQUFRLEdBQVIsUUFBUSxDQUFrQjtRQUN4RSxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztJQUM3QixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsSUFBVyxNQUFNOztRQUNmLE1BQU0sTUFBTSxHQUFnQixFQUFFLENBQUM7UUFDL0IsS0FBSyxNQUFNLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBQSxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsbUNBQUksRUFBRSxDQUFDLEVBQUU7WUFDbEYsSUFBSSxRQUFRLENBQUMsSUFBSSxLQUFLLG9DQUFZLENBQUMsd0JBQXdCLEVBQUU7Z0JBQUUsU0FBUzthQUFFO1lBQzFFLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxVQUE4QyxDQUFDO1lBQ3RFLE1BQU0sUUFBUSxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO1lBQ25GLE1BQU0sQ0FBQyxJQUFJLENBQUM7Z0JBQ1YsT0FBTyxFQUFFLFFBQVE7Z0JBQ2pCLFVBQVUsRUFBRSxLQUFLLENBQUMsVUFBVTtnQkFDNUIsSUFBSSxFQUFFLE1BQUEsS0FBSyxDQUFDLFNBQVMsbUNBQUksVUFBVTthQUNwQyxDQUFDLENBQUM7U0FDSjtRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxJQUFXLE1BQU07O1FBQ2YsTUFBTSxNQUFNLEdBQWdCLEVBQUUsQ0FBQztRQUMvQixLQUFLLE1BQU0sQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFBLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxtQ0FBSSxFQUFFLENBQUMsRUFBRTtZQUNsRixJQUFJLFFBQVEsQ0FBQyxJQUFJLEtBQUssb0NBQVksQ0FBQyxxQkFBcUIsRUFBRTtnQkFBRSxTQUFTO2FBQUU7WUFDdkUsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLFVBQTJDLENBQUM7WUFDbkUsTUFBTSxjQUFjLEdBQUcsc0JBQXNCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztZQUN2RyxNQUFNLENBQUMsSUFBSSxDQUFDO2dCQUNWLElBQUksRUFBRSxNQUFBLEtBQUssQ0FBQyxXQUFXLG1DQUFJLFVBQVU7Z0JBQ3JDLE1BQU0sRUFBRSxjQUFjLENBQUMsTUFBTTthQUM5QixDQUFDLENBQUM7U0FDSjtRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7O0FBMUVILHdEQTJFQztBQTFFd0IsdUNBQWdCLEdBQUcsZUFBZSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IEFzc2VtYmx5TWFuaWZlc3QsIE1hbmlmZXN0LCBBcnRpZmFjdFR5cGUsIEF3c0Nsb3VkRm9ybWF0aW9uU3RhY2tQcm9wZXJ0aWVzLCBOZXN0ZWRDbG91ZEFzc2VtYmx5UHJvcGVydGllcywgQm9vdHN0cmFwUm9sZSB9IGZyb20gJ0Bhd3MtY2RrL2Nsb3VkLWFzc2VtYmx5LXNjaGVtYSc7XG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcy1leHRyYSc7XG5cbi8qKlxuICogVHJhY2UgaW5mb3JtYXRpb24gZm9yIHN0YWNrXG4gKiBtYXAgb2YgcmVzb3VyY2UgbG9naWNhbElkIHRvIHRyYWNlIG1lc3NhZ2VcbiAqL1xuZXhwb3J0IHR5cGUgU3RhY2tUcmFjZSA9IE1hcDxzdHJpbmcsIHN0cmluZz47XG5cbi8qKlxuICogVHJhY2UgaW5mb3JtYXRpb24gZm9yIGEgYXNzZW1ibHlcbiAqXG4gKiBtYXAgb2Ygc3RhY2tJZCB0byBTdGFja1RyYWNlXG4gKi9cbmV4cG9ydCB0eXBlIE1hbmlmZXN0VHJhY2UgPSBNYXA8c3RyaW5nLCBTdGFja1RyYWNlPjtcblxuLyoqXG4gKiBSZWFkcyBhIENsb3VkIEFzc2VtYmx5IG1hbmlmZXN0XG4gKi9cbmV4cG9ydCBjbGFzcyBBc3NlbWJseU1hbmlmZXN0UmVhZGVyIHtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBERUZBVUxUX0ZJTEVOQU1FID0gJ21hbmlmZXN0Lmpzb24nO1xuXG4gIC8qKlxuICAgKiBSZWFkcyBhIENsb3VkIEFzc2VtYmx5IG1hbmlmZXN0IGZyb20gYSBmaWxlXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21GaWxlKGZpbGVOYW1lOiBzdHJpbmcpOiBBc3NlbWJseU1hbmlmZXN0UmVhZGVyIHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgb2JqID0gTWFuaWZlc3QubG9hZEFzc2VtYmx5TWFuaWZlc3QoZmlsZU5hbWUpO1xuICAgICAgcmV0dXJuIG5ldyBBc3NlbWJseU1hbmlmZXN0UmVhZGVyKHBhdGguZGlybmFtZShmaWxlTmFtZSksIG9iaik7XG5cbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IHJlYWQgaW50ZWcgbWFuaWZlc3QgJyR7ZmlsZU5hbWV9JzogJHtlLm1lc3NhZ2V9YCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlYWRzIGEgQ2xvdWQgQXNzZW1ibHkgbWFuaWZlc3QgZnJvbSBhIGZpbGUgb3IgYSBkaXJlY3RvcnlcbiAgICogSWYgdGhlIGdpdmVuIGZpbGVQYXRoIGlzIGEgZGlyZWN0b3J5IHRoZW4gaXQgd2lsbCBsb29rIGZvclxuICAgKiBhIGZpbGUgd2l0aGluIHRoZSBkaXJlY3Rvcnkgd2l0aCB0aGUgREVGQVVMVF9GSUxFTkFNRVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tUGF0aChmaWxlUGF0aDogc3RyaW5nKTogQXNzZW1ibHlNYW5pZmVzdFJlYWRlciB7XG4gICAgbGV0IHN0O1xuICAgIHRyeSB7XG4gICAgICBzdCA9IGZzLnN0YXRTeW5jKGZpbGVQYXRoKTtcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IHJlYWQgaW50ZWcgbWFuaWZlc3QgYXQgJyR7ZmlsZVBhdGh9JzogJHtlLm1lc3NhZ2V9YCk7XG4gICAgfVxuICAgIGlmIChzdC5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICByZXR1cm4gQXNzZW1ibHlNYW5pZmVzdFJlYWRlci5mcm9tRmlsZShwYXRoLmpvaW4oZmlsZVBhdGgsIEFzc2VtYmx5TWFuaWZlc3RSZWFkZXIuREVGQVVMVF9GSUxFTkFNRSkpO1xuICAgIH1cbiAgICByZXR1cm4gQXNzZW1ibHlNYW5pZmVzdFJlYWRlci5mcm9tRmlsZShmaWxlUGF0aCk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGRpcmVjdG9yeSB3aGVyZSB0aGUgbWFuaWZlc3Qgd2FzIGZvdW5kXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZGlyZWN0b3J5OiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoZGlyZWN0b3J5OiBzdHJpbmcsIHByaXZhdGUgcmVhZG9ubHkgbWFuaWZlc3Q6IEFzc2VtYmx5TWFuaWZlc3QpIHtcbiAgICB0aGlzLmRpcmVjdG9yeSA9IGRpcmVjdG9yeTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHN0YWNrcyBmcm9tIHRoZSBtYW5pZmVzdFxuICAgKiByZXR1cm5zIGEgbWFwIG9mIGFydGlmYWN0SWQgdG8gQ2xvdWRGb3JtYXRpb24gdGVtcGxhdGVcbiAgICovXG4gIHB1YmxpYyBnZXQgc3RhY2tzKCk6IFN0YWNrSW5mb1tdIHtcbiAgICBjb25zdCBzdGFja3M6IFN0YWNrSW5mb1tdID0gW107XG4gICAgZm9yIChjb25zdCBbYXJ0aWZhY3RJZCwgYXJ0aWZhY3RdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMubWFuaWZlc3QuYXJ0aWZhY3RzID8/IHt9KSkge1xuICAgICAgaWYgKGFydGlmYWN0LnR5cGUgIT09IEFydGlmYWN0VHlwZS5BV1NfQ0xPVURGT1JNQVRJT05fU1RBQ0spIHsgY29udGludWU7IH1cbiAgICAgIGNvbnN0IHByb3BzID0gYXJ0aWZhY3QucHJvcGVydGllcyBhcyBBd3NDbG91ZEZvcm1hdGlvblN0YWNrUHJvcGVydGllcztcbiAgICAgIGNvbnN0IHRlbXBsYXRlID0gZnMucmVhZEpTT05TeW5jKHBhdGgucmVzb2x2ZSh0aGlzLmRpcmVjdG9yeSwgcHJvcHMudGVtcGxhdGVGaWxlKSk7XG4gICAgICBzdGFja3MucHVzaCh7XG4gICAgICAgIGNvbnRlbnQ6IHRlbXBsYXRlLFxuICAgICAgICBsb29rdXBSb2xlOiBwcm9wcy5sb29rdXBSb2xlLFxuICAgICAgICBuYW1lOiBwcm9wcy5zdGFja05hbWUgPz8gYXJ0aWZhY3RJZCxcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gc3RhY2tzO1xuICB9XG5cbiAgcHVibGljIGdldCBzdGFnZXMoKTogU3RhZ2VJbmZvW10ge1xuICAgIGNvbnN0IHN0YWdlczogU3RhZ2VJbmZvW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IFthcnRpZmFjdElkLCBhcnRpZmFjdF0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5tYW5pZmVzdC5hcnRpZmFjdHMgPz8ge30pKSB7XG4gICAgICBpZiAoYXJ0aWZhY3QudHlwZSAhPT0gQXJ0aWZhY3RUeXBlLk5FU1RFRF9DTE9VRF9BU1NFTUJMWSkgeyBjb250aW51ZTsgfVxuICAgICAgY29uc3QgcHJvcHMgPSBhcnRpZmFjdC5wcm9wZXJ0aWVzIGFzIE5lc3RlZENsb3VkQXNzZW1ibHlQcm9wZXJ0aWVzO1xuICAgICAgY29uc3QgbmVzdGVkQXNzZW1ibHkgPSBBc3NlbWJseU1hbmlmZXN0UmVhZGVyLmZyb21QYXRoKHBhdGguam9pbih0aGlzLmRpcmVjdG9yeSwgcHJvcHMuZGlyZWN0b3J5TmFtZSkpO1xuICAgICAgc3RhZ2VzLnB1c2goe1xuICAgICAgICBuYW1lOiBwcm9wcy5kaXNwbGF5TmFtZSA/PyBhcnRpZmFjdElkLFxuICAgICAgICBzdGFja3M6IG5lc3RlZEFzc2VtYmx5LnN0YWNrcyxcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gc3RhZ2VzO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RhZ2VJbmZvIHtcbiAgbmFtZTogc3RyaW5nO1xuICBzdGFja3M6IFN0YWNrSW5mb1tdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN0YWNrSW5mbyB7XG4gIG5hbWU6IHN0cmluZztcbiAgbG9va3VwUm9sZT86IEJvb3RzdHJhcFJvbGU7XG4gIGNvbnRlbnQ6IHN0cmluZztcbn1cbiJdfQ==
+
+/***/ }),
+
+/***/ 21667:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.Comments = void 0;
+class Comments {
+ constructor(octokit, context) {
+ var _a, _b;
+ this.octokit = octokit;
+ this.context = context;
+ if (!((_a = context.payload.pull_request) === null || _a === void 0 ? void 0 : _a.number)) {
+ throw new Error('Cannot find PR number, is this from a pull request?');
+ }
+ this.issueNumber = (_b = this.context.payload.pull_request) === null || _b === void 0 ? void 0 : _b.number;
+ }
+ async findPrevious(hash) {
+ var _a;
+ const comments = await this.octokit.rest.issues.listComments({
+ ...this.context.repo,
+ issue_number: this.issueNumber,
+ });
+ return (_a = comments.data.find(comment => { var _a; return (_a = comment.body_text) === null || _a === void 0 ? void 0 : _a.includes(hash); })) === null || _a === void 0 ? void 0 : _a.id;
+ }
+ async updateComment(commentId, hash, content) {
+ await this.octokit.rest.issues.updateComment({
+ ...this.context.repo,
+ body: [
+ ``,
+ ...content,
+ ].join('\n'),
+ comment_id: commentId,
+ });
+ }
+ async createComment(hash, content) {
+ await this.octokit.rest.issues.createComment({
+ ...this.context.repo,
+ body: [
+ ``,
+ ...content,
+ ].join('\n'),
+ issue_number: this.issueNumber,
+ });
+ }
+}
+exports.Comments = Comments;
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9jb21tZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUdBLE1BQWEsUUFBUTtJQUVuQixZQUNtQixPQUFvQyxFQUNwQyxPQUFnQjs7UUFEaEIsWUFBTyxHQUFQLE9BQU8sQ0FBNkI7UUFDcEMsWUFBTyxHQUFQLE9BQU8sQ0FBUztRQUVqQyxJQUFJLENBQUMsQ0FBQSxNQUFBLE9BQU8sQ0FBQyxPQUFPLENBQUMsWUFBWSwwQ0FBRSxNQUFNLENBQUEsRUFBRTtZQUN6QyxNQUFNLElBQUksS0FBSyxDQUFDLHFEQUFxRCxDQUFDLENBQUM7U0FDeEU7UUFDRCxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQUEsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsWUFBWSwwQ0FBRSxNQUFPLENBQUM7SUFDaEUsQ0FBQztJQUVNLEtBQUssQ0FBQyxZQUFZLENBQUMsSUFBWTs7UUFDcEMsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDO1lBQzNELEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJO1lBQ3BCLFlBQVksRUFBRSxJQUFJLENBQUMsV0FBVztTQUMvQixDQUFDLENBQUM7UUFDSCxPQUFPLE1BQUEsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsV0FBQyxPQUFBLE1BQUEsT0FBTyxDQUFDLFNBQVMsMENBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFBLEVBQUEsQ0FBQywwQ0FBRSxFQUFFLENBQUM7SUFDOUUsQ0FBQztJQUVNLEtBQUssQ0FBQyxhQUFhLENBQUMsU0FBaUIsRUFBRSxJQUFZLEVBQUUsT0FBaUI7UUFDM0UsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDO1lBQzNDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJO1lBQ3BCLElBQUksRUFBRTtnQkFDSixrQ0FBa0MsSUFBSSxNQUFNO2dCQUM1QyxHQUFHLE9BQU87YUFDWCxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDWixVQUFVLEVBQUUsU0FBUztTQUN0QixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU0sS0FBSyxDQUFDLGFBQWEsQ0FBQyxJQUFZLEVBQUUsT0FBaUI7UUFDeEQsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDO1lBQzNDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJO1lBQ3BCLElBQUksRUFBRTtnQkFDSixrQ0FBa0MsSUFBSSxNQUFNO2dCQUM1QyxHQUFHLE9BQU87YUFDWCxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDWixZQUFZLEVBQUUsSUFBSSxDQUFDLFdBQVc7U0FDL0IsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUVGO0FBMUNELDRCQTBDQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbnRleHQgfSBmcm9tICdAYWN0aW9ucy9naXRodWIvbGliL2NvbnRleHQnO1xuaW1wb3J0IHsgR2l0SHViIH0gZnJvbSAnQGFjdGlvbnMvZ2l0aHViL2xpYi91dGlscyc7XG5cbmV4cG9ydCBjbGFzcyBDb21tZW50cyB7XG4gIHByaXZhdGUgcmVhZG9ubHkgaXNzdWVOdW1iZXI6IG51bWJlcjtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBvY3Rva2l0OiBJbnN0YW5jZVR5cGU8dHlwZW9mIEdpdEh1Yj4sXG4gICAgcHJpdmF0ZSByZWFkb25seSBjb250ZXh0OiBDb250ZXh0LFxuICApIHtcbiAgICBpZiAoIWNvbnRleHQucGF5bG9hZC5wdWxsX3JlcXVlc3Q/Lm51bWJlcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgZmluZCBQUiBudW1iZXIsIGlzIHRoaXMgZnJvbSBhIHB1bGwgcmVxdWVzdD8nKTtcbiAgICB9XG4gICAgdGhpcy5pc3N1ZU51bWJlciA9IHRoaXMuY29udGV4dC5wYXlsb2FkLnB1bGxfcmVxdWVzdD8ubnVtYmVyITtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBmaW5kUHJldmlvdXMoaGFzaDogc3RyaW5nKTogUHJvbWlzZTxudW1iZXIgfCB1bmRlZmluZWQ+IHtcbiAgICBjb25zdCBjb21tZW50cyA9IGF3YWl0IHRoaXMub2N0b2tpdC5yZXN0Lmlzc3Vlcy5saXN0Q29tbWVudHMoe1xuICAgICAgLi4udGhpcy5jb250ZXh0LnJlcG8sXG4gICAgICBpc3N1ZV9udW1iZXI6IHRoaXMuaXNzdWVOdW1iZXIsXG4gICAgfSk7XG4gICAgcmV0dXJuIGNvbW1lbnRzLmRhdGEuZmluZChjb21tZW50ID0+IGNvbW1lbnQuYm9keV90ZXh0Py5pbmNsdWRlcyhoYXNoKSk/LmlkO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHVwZGF0ZUNvbW1lbnQoY29tbWVudElkOiBudW1iZXIsIGhhc2g6IHN0cmluZywgY29udGVudDogc3RyaW5nW10pIHtcbiAgICBhd2FpdCB0aGlzLm9jdG9raXQucmVzdC5pc3N1ZXMudXBkYXRlQ29tbWVudCh7XG4gICAgICAuLi50aGlzLmNvbnRleHQucmVwbyxcbiAgICAgIGJvZHk6IFtcbiAgICAgICAgYDwhLS0gY2RrIGRpZmYgYWN0aW9uIHdpdGggaGFzaCAke2hhc2h9IC0tPmAsXG4gICAgICAgIC4uLmNvbnRlbnQsXG4gICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgY29tbWVudF9pZDogY29tbWVudElkLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGNyZWF0ZUNvbW1lbnQoaGFzaDogc3RyaW5nLCBjb250ZW50OiBzdHJpbmdbXSkge1xuICAgIGF3YWl0IHRoaXMub2N0b2tpdC5yZXN0Lmlzc3Vlcy5jcmVhdGVDb21tZW50KHtcbiAgICAgIC4uLnRoaXMuY29udGV4dC5yZXBvLFxuICAgICAgYm9keTogW1xuICAgICAgICBgPCEtLSBjZGsgZGlmZiBhY3Rpb24gd2l0aCBoYXNoICR7aGFzaH0gLS0+YCxcbiAgICAgICAgLi4uY29udGVudCxcbiAgICAgIF0uam9pbignXFxuJyksXG4gICAgICBpc3N1ZV9udW1iZXI6IHRoaXMuaXNzdWVOdW1iZXIsXG4gICAgfSk7XG4gIH1cblxufVxuIl19
+
+/***/ }),
+
+/***/ 32484:
+/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
+
+"use strict";
+
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ var desc = Object.getOwnPropertyDescriptor(m, k);
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+ desc = { enumerable: true, get: function() { return m[k]; } };
+ }
+ Object.defineProperty(o, k2, desc);
+}) : (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+ o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+ if (mod && mod.__esModule) return mod;
+ var result = {};
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+ __setModuleDefault(result, mod);
+ return result;
+};
+var __importDefault = (this && this.__importDefault) || function (mod) {
+ return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.StageProcessor = exports.StackDiff = void 0;
+const crypto = __importStar(__nccwpck_require__(6113));
+const stream_1 = __nccwpck_require__(12781);
+const string_decoder_1 = __nccwpck_require__(71576);
+const cloudformation_diff_1 = __nccwpck_require__(40245);
+const client_cloudformation_1 = __nccwpck_require__(15650);
+const credential_providers_1 = __nccwpck_require__(37464);
+const chalk_1 = __importDefault(__nccwpck_require__(78818));
+class StackDiff {
+ constructor(stack, allowedDestroyTypes) {
+ this.stack = stack;
+ this.allowedDestroyTypes = allowedDestroyTypes;
+ let credentials;
+ credentials = stack.lookupRole ? (0, credential_providers_1.fromTemporaryCredentials)({
+ params: {
+ RoleArn: stack.lookupRole.arn.replace('${AWS::Partition}', 'aws'),
+ RoleSessionName: 'cdk-diff-action',
+ ExternalId: stack.lookupRole.assumeRoleExternalId,
+ DurationSeconds: 300,
+ },
+ }) : undefined;
+ this.client = new client_cloudformation_1.CloudFormationClient({
+ credentials,
+ });
+ }
+ async diffStack() {
+ const cmd = new client_cloudformation_1.GetTemplateCommand({
+ StackName: this.stack.name,
+ });
+ const res = await this.client.send(cmd);
+ const newTemplate = res.TemplateBody ?
+ JSON.parse(res.TemplateBody) : {};
+ const diff = (0, cloudformation_diff_1.diffTemplate)(newTemplate, JSON.parse(this.stack.content));
+ const changes = this.evaluateDiff(this.stack.name, diff);
+ return {
+ diff,
+ destructiveChanges: changes,
+ };
+ }
+ evaluateDiff(templateId, templateDiff) {
+ const destructiveChanges = [];
+ // go through all the resource differences and check for any
+ // "destructive" changes
+ templateDiff.resources.forEachDifference((logicalId, change) => {
+ var _a, _b, _c;
+ // if the change is a removal it will not show up as a 'changeImpact'
+ // so need to check for it separately, unless it is a resourceType that
+ // has been "allowed" to be destroyed
+ const resourceType = (_b = (_a = change.oldValue) === null || _a === void 0 ? void 0 : _a.Type) !== null && _b !== void 0 ? _b : (_c = change.newValue) === null || _c === void 0 ? void 0 : _c.Type;
+ if (resourceType && this.allowedDestroyTypes.includes(resourceType)) {
+ return;
+ }
+ if (change.isRemoval) {
+ destructiveChanges.push({
+ impact: cloudformation_diff_1.ResourceImpact.WILL_DESTROY,
+ logicalId,
+ stackName: templateId,
+ });
+ }
+ else {
+ switch (change.changeImpact) {
+ case cloudformation_diff_1.ResourceImpact.MAY_REPLACE:
+ case cloudformation_diff_1.ResourceImpact.WILL_ORPHAN:
+ case cloudformation_diff_1.ResourceImpact.WILL_DESTROY:
+ case cloudformation_diff_1.ResourceImpact.WILL_REPLACE:
+ destructiveChanges.push({
+ impact: change.changeImpact,
+ logicalId,
+ stackName: templateId,
+ });
+ break;
+ }
+ }
+ });
+ return destructiveChanges;
+ }
+}
+exports.StackDiff = StackDiff;
+function md5Hash(val) {
+ return crypto.createHash('md5').update(val).digest('hex');
+}
+;
+class StageProcessor {
+ constructor(stages, allowedDestroyTypes) {
+ this.stages = stages;
+ this.allowedDestroyTypes = allowedDestroyTypes;
+ this.stageComments = {};
+ this.stages.forEach(stage => {
+ this.stageComments[stage.name] = {
+ destructiveChanges: 0,
+ comment: [],
+ hash: md5Hash(JSON.stringify(stage)),
+ };
+ });
+ }
+ async processStages() {
+ for (const stage of this.stages) {
+ for (const stack of stage.stacks) {
+ const { comment, changes } = await this.diffStack(stack);
+ this.stageComments[stage.name].comment.push(...comment);
+ this.stageComments[stage.name].destructiveChanges += changes;
+ }
+ }
+ }
+ get hasDestructiveChanges() {
+ for (const comments of Object.values(this.stageComments)) {
+ if (comments.destructiveChanges) {
+ return true;
+ }
+ }
+ return false;
+ }
+ async diffStack(stack) {
+ const stackDiff = new StackDiff(stack, this.allowedDestroyTypes);
+ const { diff, destructiveChanges } = await stackDiff.diffStack();
+ return {
+ comment: this.formatStackComment(stack.name, diff, destructiveChanges),
+ changes: destructiveChanges.length,
+ };
+ }
+ formatStackComment(stackName, diff, changes) {
+ const output = [];
+ if (diff.isEmpty) {
+ return output;
+ }
+ output.push(`\nDiff for stack: ${stackName}
\n`);
+ if (changes.length) {
+ output.push(`${chalk_1.default.red('\n\n!!!Destructive Changes!!!\n')}`),
+ output.push('```shell\n');
+ changes.forEach(change => {
+ output.push(chalk_1.default.yellow(`Stack: ${change.stackName} - Resource: ${change.logicalId} - Impact: ${change.impact}\n`));
+ });
+ output.push('```');
+ output.push('\n\n');
+ }
+ const writable = new StringWritable({});
+ (0, cloudformation_diff_1.formatDifferences)(writable, diff);
+ output.push('```shell\n');
+ output.push(writable.data);
+ output.push('\n```\n');
+ output.push(' \n');
+ return output;
+ }
+ async commentStages(comments) {
+ for (const [stageName, info] of Object.entries(this.stageComments)) {
+ const stageComment = this.getCommentForStage(stageName);
+ const previous = await comments.findPrevious(info.hash);
+ if (previous) {
+ await comments.updateComment(previous, info.hash, stageComment);
+ }
+ else {
+ await comments.createComment(info.hash, stageComment);
+ }
+ }
+ }
+ getCommentForStage(stageName) {
+ const output = [];
+ const stageComments = this.stageComments[stageName];
+ if (!stageComments.comment.length) {
+ return output;
+ }
+ output.push(`### Diff for stage: ${stageName}\n`);
+ if (stageComments.destructiveChanges) {
+ output.push(`${chalk_1.default.red(`\n\n!!!Destructive Changes: ${chalk_1.default.bold(stageComments.destructiveChanges)}!!!\n`)}`);
+ }
+ return output.concat(stageComments.comment);
+ }
+}
+exports.StageProcessor = StageProcessor;
+class StringWritable extends stream_1.Writable {
+ constructor(options) {
+ super(options);
+ this._decoder = new string_decoder_1.StringDecoder();
+ this.data = '';
+ }
+ _write(chunk, encoding, callback) {
+ if (encoding === 'buffer') {
+ chunk = this._decoder.write(chunk);
+ }
+ this.data += chunk;
+ callback();
+ }
+ _final(callback) {
+ this.data += this._decoder.end();
+ callback();
+ }
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlmZi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9kaWZmLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsK0NBQWlDO0FBQ2pDLG1DQUFtRDtBQUNuRCxtREFBK0M7QUFDL0Msc0VBQWlJO0FBQ2pJLDBFQUEwRjtBQUMxRix3RUFBeUU7QUFFekUsa0RBQTBCO0FBd0IxQixNQUFhLFNBQVM7SUFFcEIsWUFDbUIsS0FBZ0IsRUFDaEIsbUJBQTZCO1FBRDdCLFVBQUssR0FBTCxLQUFLLENBQVc7UUFDaEIsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFVO1FBRTlDLElBQUksV0FBc0QsQ0FBQztRQUMzRCxXQUFXLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBQSwrQ0FBd0IsRUFBQztZQUN4RCxNQUFNLEVBQUU7Z0JBQ04sT0FBTyxFQUFFLEtBQUssQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsRUFBRSxLQUFLLENBQUM7Z0JBQ2pFLGVBQWUsRUFBRSxpQkFBaUI7Z0JBQ2xDLFVBQVUsRUFBRSxLQUFLLENBQUMsVUFBVSxDQUFDLG9CQUFvQjtnQkFDakQsZUFBZSxFQUFFLEdBQUc7YUFDckI7U0FDRixDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUNmLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSw0Q0FBb0IsQ0FBQztZQUNyQyxXQUFXO1NBQ1osQ0FBQyxDQUFDO0lBRUwsQ0FBQztJQUVNLEtBQUssQ0FBQyxTQUFTO1FBQ3BCLE1BQU0sR0FBRyxHQUFHLElBQUksMENBQWtCLENBQUM7WUFDakMsU0FBUyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSTtTQUMzQixDQUFDLENBQUM7UUFDSCxNQUFNLEdBQUcsR0FBRyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3hDLE1BQU0sV0FBVyxHQUFHLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUNwQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3BDLE1BQU0sSUFBSSxHQUFHLElBQUEsa0NBQVksRUFBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDdkUsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN6RCxPQUFPO1lBQ0wsSUFBSTtZQUNKLGtCQUFrQixFQUFFLE9BQU87U0FDNUIsQ0FBQztJQUNKLENBQUM7SUFFTyxZQUFZLENBQUMsVUFBa0IsRUFBRSxZQUEwQjtRQUNqRSxNQUFNLGtCQUFrQixHQUF3QixFQUFFLENBQUM7UUFDbkQsNERBQTREO1FBQzVELHdCQUF3QjtRQUN4QixZQUFZLENBQUMsU0FBUyxDQUFDLGlCQUFpQixDQUFDLENBQUMsU0FBaUIsRUFBRSxNQUEwQixFQUFFLEVBQUU7O1lBQzNGLHFFQUFxRTtZQUNyRSx1RUFBdUU7WUFDdkUscUNBQXFDO1lBQ25DLE1BQU0sWUFBWSxHQUFHLE1BQUEsTUFBQSxNQUFNLENBQUMsUUFBUSwwQ0FBRSxJQUFJLG1DQUFJLE1BQUEsTUFBTSxDQUFDLFFBQVEsMENBQUUsSUFBSSxDQUFDO1lBQ3BFLElBQUksWUFBWSxJQUFJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLEVBQUU7Z0JBQ25FLE9BQU87YUFDUjtZQUNELElBQUksTUFBTSxDQUFDLFNBQVMsRUFBRTtnQkFDcEIsa0JBQWtCLENBQUMsSUFBSSxDQUFDO29CQUN0QixNQUFNLEVBQUUsb0NBQWMsQ0FBQyxZQUFZO29CQUNuQyxTQUFTO29CQUNULFNBQVMsRUFBRSxVQUFVO2lCQUN0QixDQUFDLENBQUM7YUFDSjtpQkFBTTtnQkFDTCxRQUFRLE1BQU0sQ0FBQyxZQUFZLEVBQUU7b0JBQzNCLEtBQUssb0NBQWMsQ0FBQyxXQUFXLENBQUM7b0JBQ2hDLEtBQUssb0NBQWMsQ0FBQyxXQUFXLENBQUM7b0JBQ2hDLEtBQUssb0NBQWMsQ0FBQyxZQUFZLENBQUM7b0JBQ2pDLEtBQUssb0NBQWMsQ0FBQyxZQUFZO3dCQUM5QixrQkFBa0IsQ0FBQyxJQUFJLENBQUM7NEJBQ3RCLE1BQU0sRUFBRSxNQUFNLENBQUMsWUFBWTs0QkFDM0IsU0FBUzs0QkFDVCxTQUFTLEVBQUUsVUFBVTt5QkFDdEIsQ0FBQyxDQUFDO3dCQUNILE1BQU07aUJBQ1Q7YUFDRjtRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxrQkFBa0IsQ0FBQztJQUM1QixDQUFDO0NBQ0Y7QUF2RUQsOEJBdUVDO0FBU0QsU0FBUyxPQUFPLENBQUMsR0FBVztJQUMxQixPQUFPLE1BQU0sQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM1RCxDQUFDO0FBQUEsQ0FBQztBQUNGLE1BQWEsY0FBYztJQUV6QixZQUNtQixNQUFtQixFQUNuQixtQkFBNkI7UUFEN0IsV0FBTSxHQUFOLE1BQU0sQ0FBYTtRQUNuQix3QkFBbUIsR0FBbkIsbUJBQW1CLENBQVU7UUFIL0Isa0JBQWEsR0FBMEMsRUFBRSxDQUFDO1FBS3pFLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQzFCLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHO2dCQUMvQixrQkFBa0IsRUFBRSxDQUFDO2dCQUNyQixPQUFPLEVBQUUsRUFBRTtnQkFDWCxJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDckMsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVNLEtBQUssQ0FBQyxhQUFhO1FBQ3hCLEtBQUssTUFBTSxLQUFLLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUMvQixLQUFLLE1BQU0sS0FBSyxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUU7Z0JBQ2hDLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEdBQUcsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUN6RCxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUM7Z0JBQ3hELElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLGtCQUFrQixJQUFJLE9BQU8sQ0FBQzthQUM5RDtTQUNGO0lBQ0gsQ0FBQztJQUVELElBQVcscUJBQXFCO1FBQzlCLEtBQUssTUFBTSxRQUFRLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUU7WUFDeEQsSUFBSSxRQUFRLENBQUMsa0JBQWtCLEVBQUU7Z0JBQy9CLE9BQU8sSUFBSSxDQUFDO2FBQ2I7U0FDRjtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVPLEtBQUssQ0FBQyxTQUFTLENBQUMsS0FBZ0I7UUFDdEMsTUFBTSxTQUFTLEdBQUcsSUFBSSxTQUFTLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQ2pFLE1BQU0sRUFBRSxJQUFJLEVBQUUsa0JBQWtCLEVBQUUsR0FBRyxNQUFNLFNBQVMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNqRSxPQUFPO1lBQ0wsT0FBTyxFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxrQkFBa0IsQ0FBQztZQUN0RSxPQUFPLEVBQUUsa0JBQWtCLENBQUMsTUFBTTtTQUNuQyxDQUFDO0lBQ0osQ0FBQztJQUVPLGtCQUFrQixDQUFDLFNBQWlCLEVBQUUsSUFBa0IsRUFBRSxPQUE0QjtRQUM1RixNQUFNLE1BQU0sR0FBYSxFQUFFLENBQUM7UUFDNUIsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ2hCLE9BQU8sTUFBTSxDQUFDO1NBQ2Y7UUFDRCxNQUFNLENBQUMsSUFBSSxDQUFDLHVDQUF1QyxTQUFTLGNBQWMsQ0FBQyxDQUFDO1FBQzVFLElBQUksT0FBTyxDQUFDLE1BQU0sRUFBRTtZQUNsQixNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsZUFBSyxDQUFDLEdBQUcsQ0FBQyxpQ0FBaUMsQ0FBQyxFQUFFLENBQUM7Z0JBQzlELE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDMUIsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRTtnQkFDdkIsTUFBTSxDQUFDLElBQUksQ0FDVCxlQUFLLENBQUMsTUFBTSxDQUFDLFVBQVUsTUFBTSxDQUFDLFNBQVMsZ0JBQWdCLE1BQU0sQ0FBQyxTQUFTLGNBQWMsTUFBTSxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQ3hHLENBQUM7WUFDSixDQUFDLENBQUMsQ0FBQztZQUNILE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDbkIsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUNyQjtRQUNELE1BQU0sUUFBUSxHQUFHLElBQUksY0FBYyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3hDLElBQUEsdUNBQWlCLEVBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBRWxDLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDMUIsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDM0IsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN2QixNQUFNLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzVCLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFTSxLQUFLLENBQUMsYUFBYSxDQUFDLFFBQWtCO1FBQzNDLEtBQUssTUFBTSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRTtZQUNsRSxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDeEQsTUFBTSxRQUFRLEdBQUcsTUFBTSxRQUFRLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN4RCxJQUFJLFFBQVEsRUFBRTtnQkFDWixNQUFNLFFBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLENBQUM7YUFDakU7aUJBQU07Z0JBQ0wsTUFBTSxRQUFRLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLENBQUM7YUFDdkQ7U0FDRjtJQUNILENBQUM7SUFFTyxrQkFBa0IsQ0FBQyxTQUFpQjtRQUMxQyxNQUFNLE1BQU0sR0FBYSxFQUFFLENBQUM7UUFDNUIsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNwRCxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUU7WUFDakMsT0FBTyxNQUFNLENBQUM7U0FDZjtRQUNELE1BQU0sQ0FBQyxJQUFJLENBQUMsdUJBQXVCLFNBQVMsSUFBSSxDQUFDLENBQUM7UUFFbEQsSUFBSSxhQUFhLENBQUMsa0JBQWtCLEVBQUU7WUFDcEMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLGVBQUssQ0FBQyxHQUFHLENBQUMsK0JBQStCLGVBQUssQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUNqSDtRQUNELE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDOUMsQ0FBQztDQUNGO0FBL0ZELHdDQStGQztBQUVELE1BQU0sY0FBZSxTQUFRLGlCQUFRO0lBR25DLFlBQVksT0FBd0I7UUFDbEMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2YsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLDhCQUFhLEVBQUUsQ0FBQztRQUNwQyxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUNqQixDQUFDO0lBRUQsTUFBTSxDQUFDLEtBQVUsRUFBRSxRQUFnQixFQUFFLFFBQXdDO1FBQzNFLElBQUksUUFBUSxLQUFLLFFBQVEsRUFBRTtZQUN6QixLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDcEM7UUFFRCxJQUFJLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQztRQUNuQixRQUFRLEVBQUUsQ0FBQztJQUNiLENBQUM7SUFFRCxNQUFNLENBQUMsUUFBd0M7UUFDN0MsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ2pDLFFBQVEsRUFBRSxDQUFDO0lBQ2IsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgY3J5cHRvIGZyb20gJ2NyeXB0byc7XG5pbXBvcnQgeyBXcml0YWJsZSwgV3JpdGFibGVPcHRpb25zIH0gZnJvbSAnc3RyZWFtJztcbmltcG9ydCB7IFN0cmluZ0RlY29kZXIgfSBmcm9tICdzdHJpbmdfZGVjb2Rlcic7XG5pbXBvcnQgeyBSZXNvdXJjZURpZmZlcmVuY2UsIFJlc291cmNlSW1wYWN0LCBUZW1wbGF0ZURpZmYsIGRpZmZUZW1wbGF0ZSwgZm9ybWF0RGlmZmVyZW5jZXMgfSBmcm9tICdAYXdzLWNkay9jbG91ZGZvcm1hdGlvbi1kaWZmJztcbmltcG9ydCB7IENsb3VkRm9ybWF0aW9uQ2xpZW50LCBHZXRUZW1wbGF0ZUNvbW1hbmQgfSBmcm9tICdAYXdzLXNkay9jbGllbnQtY2xvdWRmb3JtYXRpb24nO1xuaW1wb3J0IHsgZnJvbVRlbXBvcmFyeUNyZWRlbnRpYWxzIH0gZnJvbSAnQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlcnMnO1xuaW1wb3J0IHsgQXdzQ3JlZGVudGlhbElkZW50aXR5UHJvdmlkZXIgfSBmcm9tICdAc21pdGh5L3R5cGVzJztcbmltcG9ydCBjaGFsayBmcm9tICdjaGFsayc7XG5pbXBvcnQgeyBTdGFja0luZm8sIFN0YWdlSW5mbyB9IGZyb20gJy4vYXNzZW1ibHknO1xuaW1wb3J0IHsgQ29tbWVudHMgfSBmcm9tICcuL2NvbW1lbnQnO1xuXG4vKipcbiAqIEluZm9ybWF0aW9uIG9uIGFueSBkZXN0cnVjdGl2ZSBjaGFuZ2VzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVzdHJ1Y3RpdmVDaGFuZ2Uge1xuICAvKipcbiAgICogVGhlIGxvZ2ljYWxJZCBvZiB0aGUgcmVzb3VyY2Ugd2l0aCBhIGRlc3RydWN0aXZlIGNoYW5nZVxuICAgKi9cbiAgcmVhZG9ubHkgbG9naWNhbElkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBzdGFjayB0aGF0IGNvbnRhaW5zIHRoZSBkZXN0cnVjdGl2ZSBjaGFuZ2VcbiAgICovXG4gIHJlYWRvbmx5IHN0YWNrTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgaW1wYWN0IG9mIHRoZSBkZXN0cnVjdGl2ZSBjaGFuZ2VcbiAgICovXG4gIHJlYWRvbmx5IGltcGFjdDogUmVzb3VyY2VJbXBhY3Q7XG59XG5cbmV4cG9ydCBjbGFzcyBTdGFja0RpZmYge1xuICBwcml2YXRlIHJlYWRvbmx5IGNsaWVudDogQ2xvdWRGb3JtYXRpb25DbGllbnQ7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgc3RhY2s6IFN0YWNrSW5mbyxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGFsbG93ZWREZXN0cm95VHlwZXM6IHN0cmluZ1tdLFxuICApIHtcbiAgICBsZXQgY3JlZGVudGlhbHM6IEF3c0NyZWRlbnRpYWxJZGVudGl0eVByb3ZpZGVyIHwgdW5kZWZpbmVkO1xuICAgIGNyZWRlbnRpYWxzID0gc3RhY2subG9va3VwUm9sZSA/IGZyb21UZW1wb3JhcnlDcmVkZW50aWFscyh7XG4gICAgICBwYXJhbXM6IHtcbiAgICAgICAgUm9sZUFybjogc3RhY2subG9va3VwUm9sZS5hcm4ucmVwbGFjZSgnJHtBV1M6OlBhcnRpdGlvbn0nLCAnYXdzJyksXG4gICAgICAgIFJvbGVTZXNzaW9uTmFtZTogJ2Nkay1kaWZmLWFjdGlvbicsXG4gICAgICAgIEV4dGVybmFsSWQ6IHN0YWNrLmxvb2t1cFJvbGUuYXNzdW1lUm9sZUV4dGVybmFsSWQsXG4gICAgICAgIER1cmF0aW9uU2Vjb25kczogMzAwLFxuICAgICAgfSxcbiAgICB9KSA6IHVuZGVmaW5lZDtcbiAgICB0aGlzLmNsaWVudCA9IG5ldyBDbG91ZEZvcm1hdGlvbkNsaWVudCh7XG4gICAgICBjcmVkZW50aWFscyxcbiAgICB9KTtcblxuICB9XG5cbiAgcHVibGljIGFzeW5jIGRpZmZTdGFjaygpOiBQcm9taXNlPHsgZGlmZjogVGVtcGxhdGVEaWZmOyBkZXN0cnVjdGl2ZUNoYW5nZXM6IERlc3RydWN0aXZlQ2hhbmdlW10gfT4ge1xuICAgIGNvbnN0IGNtZCA9IG5ldyBHZXRUZW1wbGF0ZUNvbW1hbmQoe1xuICAgICAgU3RhY2tOYW1lOiB0aGlzLnN0YWNrLm5hbWUsXG4gICAgfSk7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5jbGllbnQuc2VuZChjbWQpO1xuICAgIGNvbnN0IG5ld1RlbXBsYXRlID0gcmVzLlRlbXBsYXRlQm9keSA/XG4gICAgICBKU09OLnBhcnNlKHJlcy5UZW1wbGF0ZUJvZHkpIDoge307XG4gICAgY29uc3QgZGlmZiA9IGRpZmZUZW1wbGF0ZShuZXdUZW1wbGF0ZSwgSlNPTi5wYXJzZSh0aGlzLnN0YWNrLmNvbnRlbnQpKTtcbiAgICBjb25zdCBjaGFuZ2VzID0gdGhpcy5ldmFsdWF0ZURpZmYodGhpcy5zdGFjay5uYW1lLCBkaWZmKTtcbiAgICByZXR1cm4ge1xuICAgICAgZGlmZixcbiAgICAgIGRlc3RydWN0aXZlQ2hhbmdlczogY2hhbmdlcyxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBldmFsdWF0ZURpZmYodGVtcGxhdGVJZDogc3RyaW5nLCB0ZW1wbGF0ZURpZmY6IFRlbXBsYXRlRGlmZik6IERlc3RydWN0aXZlQ2hhbmdlW10ge1xuICAgIGNvbnN0IGRlc3RydWN0aXZlQ2hhbmdlczogRGVzdHJ1Y3RpdmVDaGFuZ2VbXSA9IFtdO1xuICAgIC8vIGdvIHRocm91Z2ggYWxsIHRoZSByZXNvdXJjZSBkaWZmZXJlbmNlcyBhbmQgY2hlY2sgZm9yIGFueVxuICAgIC8vIFwiZGVzdHJ1Y3RpdmVcIiBjaGFuZ2VzXG4gICAgdGVtcGxhdGVEaWZmLnJlc291cmNlcy5mb3JFYWNoRGlmZmVyZW5jZSgobG9naWNhbElkOiBzdHJpbmcsIGNoYW5nZTogUmVzb3VyY2VEaWZmZXJlbmNlKSA9PiB7XG4gICAgLy8gaWYgdGhlIGNoYW5nZSBpcyBhIHJlbW92YWwgaXQgd2lsbCBub3Qgc2hvdyB1cCBhcyBhICdjaGFuZ2VJbXBhY3QnXG4gICAgLy8gc28gbmVlZCB0byBjaGVjayBmb3IgaXQgc2VwYXJhdGVseSwgdW5sZXNzIGl0IGlzIGEgcmVzb3VyY2VUeXBlIHRoYXRcbiAgICAvLyBoYXMgYmVlbiBcImFsbG93ZWRcIiB0byBiZSBkZXN0cm95ZWRcbiAgICAgIGNvbnN0IHJlc291cmNlVHlwZSA9IGNoYW5nZS5vbGRWYWx1ZT8uVHlwZSA/PyBjaGFuZ2UubmV3VmFsdWU/LlR5cGU7XG4gICAgICBpZiAocmVzb3VyY2VUeXBlICYmIHRoaXMuYWxsb3dlZERlc3Ryb3lUeXBlcy5pbmNsdWRlcyhyZXNvdXJjZVR5cGUpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChjaGFuZ2UuaXNSZW1vdmFsKSB7XG4gICAgICAgIGRlc3RydWN0aXZlQ2hhbmdlcy5wdXNoKHtcbiAgICAgICAgICBpbXBhY3Q6IFJlc291cmNlSW1wYWN0LldJTExfREVTVFJPWSxcbiAgICAgICAgICBsb2dpY2FsSWQsXG4gICAgICAgICAgc3RhY2tOYW1lOiB0ZW1wbGF0ZUlkLFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN3aXRjaCAoY2hhbmdlLmNoYW5nZUltcGFjdCkge1xuICAgICAgICAgIGNhc2UgUmVzb3VyY2VJbXBhY3QuTUFZX1JFUExBQ0U6XG4gICAgICAgICAgY2FzZSBSZXNvdXJjZUltcGFjdC5XSUxMX09SUEhBTjpcbiAgICAgICAgICBjYXNlIFJlc291cmNlSW1wYWN0LldJTExfREVTVFJPWTpcbiAgICAgICAgICBjYXNlIFJlc291cmNlSW1wYWN0LldJTExfUkVQTEFDRTpcbiAgICAgICAgICAgIGRlc3RydWN0aXZlQ2hhbmdlcy5wdXNoKHtcbiAgICAgICAgICAgICAgaW1wYWN0OiBjaGFuZ2UuY2hhbmdlSW1wYWN0LFxuICAgICAgICAgICAgICBsb2dpY2FsSWQsXG4gICAgICAgICAgICAgIHN0YWNrTmFtZTogdGVtcGxhdGVJZCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gZGVzdHJ1Y3RpdmVDaGFuZ2VzO1xuICB9XG59XG5cbmludGVyZmFjZSBTdGFnZUNvbW1lbnQge1xuICBjb21tZW50OiBzdHJpbmdbXTtcbiAgaGFzaDogc3RyaW5nO1xuICBkZXN0cnVjdGl2ZUNoYW5nZXM6IG51bWJlcjtcbn1cblxuXG5mdW5jdGlvbiBtZDVIYXNoKHZhbDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGNyeXB0by5jcmVhdGVIYXNoKCdtZDUnKS51cGRhdGUodmFsKS5kaWdlc3QoJ2hleCcpO1xufTtcbmV4cG9ydCBjbGFzcyBTdGFnZVByb2Nlc3NvciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgc3RhZ2VDb21tZW50czogeyBbc3RhZ2VOYW1lOiBzdHJpbmddOiBTdGFnZUNvbW1lbnQgfSA9IHt9O1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IHN0YWdlczogU3RhZ2VJbmZvW10sXG4gICAgcHJpdmF0ZSByZWFkb25seSBhbGxvd2VkRGVzdHJveVR5cGVzOiBzdHJpbmdbXSxcbiAgKSB7XG4gICAgdGhpcy5zdGFnZXMuZm9yRWFjaChzdGFnZSA9PiB7XG4gICAgICB0aGlzLnN0YWdlQ29tbWVudHNbc3RhZ2UubmFtZV0gPSB7XG4gICAgICAgIGRlc3RydWN0aXZlQ2hhbmdlczogMCxcbiAgICAgICAgY29tbWVudDogW10sXG4gICAgICAgIGhhc2g6IG1kNUhhc2goSlNPTi5zdHJpbmdpZnkoc3RhZ2UpKSxcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcHJvY2Vzc1N0YWdlcygpIHtcbiAgICBmb3IgKGNvbnN0IHN0YWdlIG9mIHRoaXMuc3RhZ2VzKSB7XG4gICAgICBmb3IgKGNvbnN0IHN0YWNrIG9mIHN0YWdlLnN0YWNrcykge1xuICAgICAgICBjb25zdCB7IGNvbW1lbnQsIGNoYW5nZXMgfSA9IGF3YWl0IHRoaXMuZGlmZlN0YWNrKHN0YWNrKTtcbiAgICAgICAgdGhpcy5zdGFnZUNvbW1lbnRzW3N0YWdlLm5hbWVdLmNvbW1lbnQucHVzaCguLi5jb21tZW50KTtcbiAgICAgICAgdGhpcy5zdGFnZUNvbW1lbnRzW3N0YWdlLm5hbWVdLmRlc3RydWN0aXZlQ2hhbmdlcyArPSBjaGFuZ2VzO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXQgaGFzRGVzdHJ1Y3RpdmVDaGFuZ2VzKCk6IGJvb2xlYW4ge1xuICAgIGZvciAoY29uc3QgY29tbWVudHMgb2YgT2JqZWN0LnZhbHVlcyh0aGlzLnN0YWdlQ29tbWVudHMpKSB7XG4gICAgICBpZiAoY29tbWVudHMuZGVzdHJ1Y3RpdmVDaGFuZ2VzKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGRpZmZTdGFjayhzdGFjazogU3RhY2tJbmZvKTogUHJvbWlzZTx7Y29tbWVudDogc3RyaW5nW107IGNoYW5nZXM6IG51bWJlcn0+IHtcbiAgICBjb25zdCBzdGFja0RpZmYgPSBuZXcgU3RhY2tEaWZmKHN0YWNrLCB0aGlzLmFsbG93ZWREZXN0cm95VHlwZXMpO1xuICAgIGNvbnN0IHsgZGlmZiwgZGVzdHJ1Y3RpdmVDaGFuZ2VzIH0gPSBhd2FpdCBzdGFja0RpZmYuZGlmZlN0YWNrKCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbW1lbnQ6IHRoaXMuZm9ybWF0U3RhY2tDb21tZW50KHN0YWNrLm5hbWUsIGRpZmYsIGRlc3RydWN0aXZlQ2hhbmdlcyksXG4gICAgICBjaGFuZ2VzOiBkZXN0cnVjdGl2ZUNoYW5nZXMubGVuZ3RoLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGZvcm1hdFN0YWNrQ29tbWVudChzdGFja05hbWU6IHN0cmluZywgZGlmZjogVGVtcGxhdGVEaWZmLCBjaGFuZ2VzOiBEZXN0cnVjdGl2ZUNoYW5nZVtdKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IG91dHB1dDogc3RyaW5nW10gPSBbXTtcbiAgICBpZiAoZGlmZi5pc0VtcHR5KSB7XG4gICAgICByZXR1cm4gb3V0cHV0O1xuICAgIH1cbiAgICBvdXRwdXQucHVzaChgXFxuPGRldGFpbHM+PHN1bW1hcnk+RGlmZiBmb3Igc3RhY2s6ICR7c3RhY2tOYW1lfTwvc3VtbWFyeT5cXG5gKTtcbiAgICBpZiAoY2hhbmdlcy5sZW5ndGgpIHtcbiAgICAgIG91dHB1dC5wdXNoKGAke2NoYWxrLnJlZCgnXFxuXFxuISEhRGVzdHJ1Y3RpdmUgQ2hhbmdlcyEhIVxcbicpfWApLFxuICAgICAgb3V0cHV0LnB1c2goJ2BgYHNoZWxsXFxuJyk7XG4gICAgICBjaGFuZ2VzLmZvckVhY2goY2hhbmdlID0+IHtcbiAgICAgICAgb3V0cHV0LnB1c2goXG4gICAgICAgICAgY2hhbGsueWVsbG93KGBTdGFjazogJHtjaGFuZ2Uuc3RhY2tOYW1lfSAtIFJlc291cmNlOiAke2NoYW5nZS5sb2dpY2FsSWR9IC0gSW1wYWN0OiAke2NoYW5nZS5pbXBhY3R9XFxuYCksXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICAgIG91dHB1dC5wdXNoKCdgYGAnKTtcbiAgICAgIG91dHB1dC5wdXNoKCdcXG5cXG4nKTtcbiAgICB9XG4gICAgY29uc3Qgd3JpdGFibGUgPSBuZXcgU3RyaW5nV3JpdGFibGUoe30pO1xuICAgIGZvcm1hdERpZmZlcmVuY2VzKHdyaXRhYmxlLCBkaWZmKTtcblxuICAgIG91dHB1dC5wdXNoKCdgYGBzaGVsbFxcbicpO1xuICAgIG91dHB1dC5wdXNoKHdyaXRhYmxlLmRhdGEpO1xuICAgIG91dHB1dC5wdXNoKCdcXG5gYGBcXG4nKTtcbiAgICBvdXRwdXQucHVzaCgnPC9kZXRhaWxzPlxcbicpO1xuICAgIHJldHVybiBvdXRwdXQ7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgY29tbWVudFN0YWdlcyhjb21tZW50czogQ29tbWVudHMpIHtcbiAgICBmb3IgKGNvbnN0IFtzdGFnZU5hbWUsIGluZm9dIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuc3RhZ2VDb21tZW50cykpIHtcbiAgICAgIGNvbnN0IHN0YWdlQ29tbWVudCA9IHRoaXMuZ2V0Q29tbWVudEZvclN0YWdlKHN0YWdlTmFtZSk7XG4gICAgICBjb25zdCBwcmV2aW91cyA9IGF3YWl0IGNvbW1lbnRzLmZpbmRQcmV2aW91cyhpbmZvLmhhc2gpO1xuICAgICAgaWYgKHByZXZpb3VzKSB7XG4gICAgICAgIGF3YWl0IGNvbW1lbnRzLnVwZGF0ZUNvbW1lbnQocHJldmlvdXMsIGluZm8uaGFzaCwgc3RhZ2VDb21tZW50KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGF3YWl0IGNvbW1lbnRzLmNyZWF0ZUNvbW1lbnQoaW5mby5oYXNoLCBzdGFnZUNvbW1lbnQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q29tbWVudEZvclN0YWdlKHN0YWdlTmFtZTogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IG91dHB1dDogc3RyaW5nW10gPSBbXTtcbiAgICBjb25zdCBzdGFnZUNvbW1lbnRzID0gdGhpcy5zdGFnZUNvbW1lbnRzW3N0YWdlTmFtZV07XG4gICAgaWYgKCFzdGFnZUNvbW1lbnRzLmNvbW1lbnQubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gb3V0cHV0O1xuICAgIH1cbiAgICBvdXRwdXQucHVzaChgIyMjIERpZmYgZm9yIHN0YWdlOiAke3N0YWdlTmFtZX1cXG5gKTtcblxuICAgIGlmIChzdGFnZUNvbW1lbnRzLmRlc3RydWN0aXZlQ2hhbmdlcykge1xuICAgICAgb3V0cHV0LnB1c2goYCR7Y2hhbGsucmVkKGBcXG5cXG4hISFEZXN0cnVjdGl2ZSBDaGFuZ2VzOiAke2NoYWxrLmJvbGQoc3RhZ2VDb21tZW50cy5kZXN0cnVjdGl2ZUNoYW5nZXMpfSEhIVxcbmApfWApO1xuICAgIH1cbiAgICByZXR1cm4gb3V0cHV0LmNvbmNhdChzdGFnZUNvbW1lbnRzLmNvbW1lbnQpO1xuICB9XG59XG5cbmNsYXNzIFN0cmluZ1dyaXRhYmxlIGV4dGVuZHMgV3JpdGFibGUge1xuICBwdWJsaWMgZGF0YTogc3RyaW5nO1xuICBwcml2YXRlIF9kZWNvZGVyOiBTdHJpbmdEZWNvZGVyO1xuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBXcml0YWJsZU9wdGlvbnMpIHtcbiAgICBzdXBlcihvcHRpb25zKTtcbiAgICB0aGlzLl9kZWNvZGVyID0gbmV3IFN0cmluZ0RlY29kZXIoKTtcbiAgICB0aGlzLmRhdGEgPSAnJztcbiAgfVxuXG4gIF93cml0ZShjaHVuazogYW55LCBlbmNvZGluZzogc3RyaW5nLCBjYWxsYmFjazogKGVycm9yPzogRXJyb3IgfCBudWxsKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgaWYgKGVuY29kaW5nID09PSAnYnVmZmVyJykge1xuICAgICAgY2h1bmsgPSB0aGlzLl9kZWNvZGVyLndyaXRlKGNodW5rKTtcbiAgICB9XG5cbiAgICB0aGlzLmRhdGEgKz0gY2h1bms7XG4gICAgY2FsbGJhY2soKTtcbiAgfVxuXG4gIF9maW5hbChjYWxsYmFjazogKGVycm9yPzogRXJyb3IgfCBudWxsKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5kYXRhICs9IHRoaXMuX2RlY29kZXIuZW5kKCk7XG4gICAgY2FsbGJhY2soKTtcbiAgfVxufVxuIl19
+
+/***/ }),
+
+/***/ 94822:
+/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
+
+"use strict";
+
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ var desc = Object.getOwnPropertyDescriptor(m, k);
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+ desc = { enumerable: true, get: function() { return m[k]; } };
+ }
+ Object.defineProperty(o, k2, desc);
+}) : (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+ o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+ if (mod && mod.__esModule) return mod;
+ var result = {};
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+ __setModuleDefault(result, mod);
+ return result;
+};
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+const core = __importStar(__nccwpck_require__(42186));
+const action_1 = __nccwpck_require__(39139);
+(0, action_1.run)().catch((error) => {
+ core.setFailed(error.message);
+});
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG9EQUFzQztBQUN0QyxxQ0FBK0I7QUFFL0IsSUFBQSxZQUFHLEdBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFVLEVBQUUsRUFBRTtJQUN6QixJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNoQyxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGNvcmUgZnJvbSAnQGFjdGlvbnMvY29yZSc7XG5pbXBvcnQgeyBydW4gfSBmcm9tICcuL2FjdGlvbic7XG5cbnJ1bigpLmNhdGNoKChlcnJvcjogYW55KSA9PiB7XG4gIGNvcmUuc2V0RmFpbGVkKGVycm9yLm1lc3NhZ2UpO1xufSk7XG4iXX0=
+
+/***/ }),
+
+/***/ 87351:
+/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
+
+"use strict";
+
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+ o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+ if (mod && mod.__esModule) return mod;
+ var result = {};
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+ __setModuleDefault(result, mod);
+ return result;
+};
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.issue = exports.issueCommand = void 0;
+const os = __importStar(__nccwpck_require__(22037));
+const utils_1 = __nccwpck_require__(5278);
+/**
+ * Commands
+ *
+ * Command Format:
+ * ::name key=value,key=value::message
+ *
+ * Examples:
+ * ::warning::This is the message
+ * ::set-env name=MY_VAR::some value
+ */
+function issueCommand(command, properties, message) {
+ const cmd = new Command(command, properties, message);
+ process.stdout.write(cmd.toString() + os.EOL);
+}
+exports.issueCommand = issueCommand;
+function issue(name, message = '') {
+ issueCommand(name, {}, message);
+}
+exports.issue = issue;
+const CMD_STRING = '::';
+class Command {
+ constructor(command, properties, message) {
+ if (!command) {
+ command = 'missing.command';
+ }
+ this.command = command;
+ this.properties = properties;
+ this.message = message;
+ }
+ toString() {
+ let cmdStr = CMD_STRING + this.command;
+ if (this.properties && Object.keys(this.properties).length > 0) {
+ cmdStr += ' ';
+ let first = true;
+ for (const key in this.properties) {
+ if (this.properties.hasOwnProperty(key)) {
+ const val = this.properties[key];
+ if (val) {
+ if (first) {
+ first = false;
+ }
+ else {
+ cmdStr += ',';
+ }
+ cmdStr += `${key}=${escapeProperty(val)}`;
+ }
+ }
+ }
+ }
+ cmdStr += `${CMD_STRING}${escapeData(this.message)}`;
+ return cmdStr;
+ }
+}
+function escapeData(s) {
+ return utils_1.toCommandValue(s)
+ .replace(/%/g, '%25')
+ .replace(/\r/g, '%0D')
+ .replace(/\n/g, '%0A');
+}
+function escapeProperty(s) {
+ return utils_1.toCommandValue(s)
+ .replace(/%/g, '%25')
+ .replace(/\r/g, '%0D')
+ .replace(/\n/g, '%0A')
+ .replace(/:/g, '%3A')
+ .replace(/,/g, '%2C');
+}
+//# sourceMappingURL=command.js.map
+
+/***/ }),
+
+/***/ 42186:
+/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
+
+"use strict";
+
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+ o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+ if (mod && mod.__esModule) return mod;
+ var result = {};
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+ __setModuleDefault(result, mod);
+ return result;
+};
+var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
+ return new (P || (P = Promise))(function (resolve, reject) {
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
+ });
+};
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.getIDToken = exports.getState = exports.saveState = exports.group = exports.endGroup = exports.startGroup = exports.info = exports.notice = exports.warning = exports.error = exports.debug = exports.isDebug = exports.setFailed = exports.setCommandEcho = exports.setOutput = exports.getBooleanInput = exports.getMultilineInput = exports.getInput = exports.addPath = exports.setSecret = exports.exportVariable = exports.ExitCode = void 0;
+const command_1 = __nccwpck_require__(87351);
+const file_command_1 = __nccwpck_require__(717);
+const utils_1 = __nccwpck_require__(5278);
+const os = __importStar(__nccwpck_require__(22037));
+const path = __importStar(__nccwpck_require__(71017));
+const oidc_utils_1 = __nccwpck_require__(98041);
+/**
+ * The code to exit an action
+ */
+var ExitCode;
+(function (ExitCode) {
+ /**
+ * A code indicating that the action was successful
+ */
+ ExitCode[ExitCode["Success"] = 0] = "Success";
+ /**
+ * A code indicating that the action was a failure
+ */
+ ExitCode[ExitCode["Failure"] = 1] = "Failure";
+})(ExitCode = exports.ExitCode || (exports.ExitCode = {}));
+//-----------------------------------------------------------------------
+// Variables
+//-----------------------------------------------------------------------
+/**
+ * Sets env variable for this action and future actions in the job
+ * @param name the name of the variable to set
+ * @param val the value of the variable. Non-string values will be converted to a string via JSON.stringify
+ */
+// eslint-disable-next-line @typescript-eslint/no-explicit-any
+function exportVariable(name, val) {
+ const convertedVal = utils_1.toCommandValue(val);
+ process.env[name] = convertedVal;
+ const filePath = process.env['GITHUB_ENV'] || '';
+ if (filePath) {
+ return file_command_1.issueFileCommand('ENV', file_command_1.prepareKeyValueMessage(name, val));
+ }
+ command_1.issueCommand('set-env', { name }, convertedVal);
+}
+exports.exportVariable = exportVariable;
+/**
+ * Registers a secret which will get masked from logs
+ * @param secret value of the secret
+ */
+function setSecret(secret) {
+ command_1.issueCommand('add-mask', {}, secret);
+}
+exports.setSecret = setSecret;
+/**
+ * Prepends inputPath to the PATH (for this action and future actions)
+ * @param inputPath
+ */
+function addPath(inputPath) {
+ const filePath = process.env['GITHUB_PATH'] || '';
+ if (filePath) {
+ file_command_1.issueFileCommand('PATH', inputPath);
+ }
+ else {
+ command_1.issueCommand('add-path', {}, inputPath);
+ }
+ process.env['PATH'] = `${inputPath}${path.delimiter}${process.env['PATH']}`;
+}
+exports.addPath = addPath;
+/**
+ * Gets the value of an input.
+ * Unless trimWhitespace is set to false in InputOptions, the value is also trimmed.
+ * Returns an empty string if the value is not defined.
+ *
+ * @param name name of the input to get
+ * @param options optional. See InputOptions.
+ * @returns string
+ */
+function getInput(name, options) {
+ const val = process.env[`INPUT_${name.replace(/ /g, '_').toUpperCase()}`] || '';
+ if (options && options.required && !val) {
+ throw new Error(`Input required and not supplied: ${name}`);
+ }
+ if (options && options.trimWhitespace === false) {
+ return val;
+ }
+ return val.trim();
+}
+exports.getInput = getInput;
+/**
+ * Gets the values of an multiline input. Each value is also trimmed.
+ *
+ * @param name name of the input to get
+ * @param options optional. See InputOptions.
+ * @returns string[]
+ *
+ */
+function getMultilineInput(name, options) {
+ const inputs = getInput(name, options)
+ .split('\n')
+ .filter(x => x !== '');
+ if (options && options.trimWhitespace === false) {
+ return inputs;
+ }
+ return inputs.map(input => input.trim());
+}
+exports.getMultilineInput = getMultilineInput;
+/**
+ * Gets the input value of the boolean type in the YAML 1.2 "core schema" specification.
+ * Support boolean input list: `true | True | TRUE | false | False | FALSE` .
+ * The return value is also in boolean type.
+ * ref: https://yaml.org/spec/1.2/spec.html#id2804923
+ *
+ * @param name name of the input to get
+ * @param options optional. See InputOptions.
+ * @returns boolean
+ */
+function getBooleanInput(name, options) {
+ const trueValue = ['true', 'True', 'TRUE'];
+ const falseValue = ['false', 'False', 'FALSE'];
+ const val = getInput(name, options);
+ if (trueValue.includes(val))
+ return true;
+ if (falseValue.includes(val))
+ return false;
+ throw new TypeError(`Input does not meet YAML 1.2 "Core Schema" specification: ${name}\n` +
+ `Support boolean input list: \`true | True | TRUE | false | False | FALSE\``);
+}
+exports.getBooleanInput = getBooleanInput;
+/**
+ * Sets the value of an output.
+ *
+ * @param name name of the output to set
+ * @param value value to store. Non-string values will be converted to a string via JSON.stringify
+ */
+// eslint-disable-next-line @typescript-eslint/no-explicit-any
+function setOutput(name, value) {
+ const filePath = process.env['GITHUB_OUTPUT'] || '';
+ if (filePath) {
+ return file_command_1.issueFileCommand('OUTPUT', file_command_1.prepareKeyValueMessage(name, value));
+ }
+ process.stdout.write(os.EOL);
+ command_1.issueCommand('set-output', { name }, utils_1.toCommandValue(value));
+}
+exports.setOutput = setOutput;
+/**
+ * Enables or disables the echoing of commands into stdout for the rest of the step.
+ * Echoing is disabled by default if ACTIONS_STEP_DEBUG is not set.
+ *
+ */
+function setCommandEcho(enabled) {
+ command_1.issue('echo', enabled ? 'on' : 'off');
+}
+exports.setCommandEcho = setCommandEcho;
+//-----------------------------------------------------------------------
+// Results
+//-----------------------------------------------------------------------
+/**
+ * Sets the action status to failed.
+ * When the action exits it will be with an exit code of 1
+ * @param message add error issue message
+ */
+function setFailed(message) {
+ process.exitCode = ExitCode.Failure;
+ error(message);
+}
+exports.setFailed = setFailed;
+//-----------------------------------------------------------------------
+// Logging Commands
+//-----------------------------------------------------------------------
+/**
+ * Gets whether Actions Step Debug is on or not
+ */
+function isDebug() {
+ return process.env['RUNNER_DEBUG'] === '1';
+}
+exports.isDebug = isDebug;
+/**
+ * Writes debug message to user log
+ * @param message debug message
+ */
+function debug(message) {
+ command_1.issueCommand('debug', {}, message);
+}
+exports.debug = debug;
+/**
+ * Adds an error issue
+ * @param message error issue message. Errors will be converted to string via toString()
+ * @param properties optional properties to add to the annotation.
+ */
+function error(message, properties = {}) {
+ command_1.issueCommand('error', utils_1.toCommandProperties(properties), message instanceof Error ? message.toString() : message);
+}
+exports.error = error;
+/**
+ * Adds a warning issue
+ * @param message warning issue message. Errors will be converted to string via toString()
+ * @param properties optional properties to add to the annotation.
+ */
+function warning(message, properties = {}) {
+ command_1.issueCommand('warning', utils_1.toCommandProperties(properties), message instanceof Error ? message.toString() : message);
+}
+exports.warning = warning;
+/**
+ * Adds a notice issue
+ * @param message notice issue message. Errors will be converted to string via toString()
+ * @param properties optional properties to add to the annotation.
+ */
+function notice(message, properties = {}) {
+ command_1.issueCommand('notice', utils_1.toCommandProperties(properties), message instanceof Error ? message.toString() : message);
+}
+exports.notice = notice;
+/**
+ * Writes info to log with console.log.
+ * @param message info message
+ */
+function info(message) {
+ process.stdout.write(message + os.EOL);
+}
+exports.info = info;
+/**
+ * Begin an output group.
+ *
+ * Output until the next `groupEnd` will be foldable in this group
+ *
+ * @param name The name of the output group
+ */
+function startGroup(name) {
+ command_1.issue('group', name);
+}
+exports.startGroup = startGroup;
+/**
+ * End an output group.
+ */
+function endGroup() {
+ command_1.issue('endgroup');
+}
+exports.endGroup = endGroup;
+/**
+ * Wrap an asynchronous function call in a group.
+ *
+ * Returns the same type as the function itself.
+ *
+ * @param name The name of the group
+ * @param fn The function to wrap in the group
+ */
+function group(name, fn) {
+ return __awaiter(this, void 0, void 0, function* () {
+ startGroup(name);
+ let result;
+ try {
+ result = yield fn();
+ }
+ finally {
+ endGroup();
+ }
+ return result;
+ });
+}
+exports.group = group;
+//-----------------------------------------------------------------------
+// Wrapper action state
+//-----------------------------------------------------------------------
+/**
+ * Saves state for current action, the state can only be retrieved by this action's post job execution.
+ *
+ * @param name name of the state to store
+ * @param value value to store. Non-string values will be converted to a string via JSON.stringify
+ */
+// eslint-disable-next-line @typescript-eslint/no-explicit-any
+function saveState(name, value) {
+ const filePath = process.env['GITHUB_STATE'] || '';
+ if (filePath) {
+ return file_command_1.issueFileCommand('STATE', file_command_1.prepareKeyValueMessage(name, value));
+ }
+ command_1.issueCommand('save-state', { name }, utils_1.toCommandValue(value));
+}
+exports.saveState = saveState;
+/**
+ * Gets the value of an state set by this action's main execution.
+ *
+ * @param name name of the state to get
+ * @returns string
+ */
+function getState(name) {
+ return process.env[`STATE_${name}`] || '';
+}
+exports.getState = getState;
+function getIDToken(aud) {
+ return __awaiter(this, void 0, void 0, function* () {
+ return yield oidc_utils_1.OidcClient.getIDToken(aud);
+ });
+}
+exports.getIDToken = getIDToken;
+/**
+ * Summary exports
+ */
+var summary_1 = __nccwpck_require__(81327);
+Object.defineProperty(exports, "summary", ({ enumerable: true, get: function () { return summary_1.summary; } }));
+/**
+ * @deprecated use core.summary
+ */
+var summary_2 = __nccwpck_require__(81327);
+Object.defineProperty(exports, "markdownSummary", ({ enumerable: true, get: function () { return summary_2.markdownSummary; } }));
+/**
+ * Path exports
+ */
+var path_utils_1 = __nccwpck_require__(2981);
+Object.defineProperty(exports, "toPosixPath", ({ enumerable: true, get: function () { return path_utils_1.toPosixPath; } }));
+Object.defineProperty(exports, "toWin32Path", ({ enumerable: true, get: function () { return path_utils_1.toWin32Path; } }));
+Object.defineProperty(exports, "toPlatformPath", ({ enumerable: true, get: function () { return path_utils_1.toPlatformPath; } }));
+//# sourceMappingURL=core.js.map
+
+/***/ }),
+
+/***/ 717:
+/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
+
+"use strict";
+
+// For internal use, subject to change.
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+ o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+ if (mod && mod.__esModule) return mod;
+ var result = {};
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+ __setModuleDefault(result, mod);
+ return result;
+};
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.prepareKeyValueMessage = exports.issueFileCommand = void 0;
+// We use any as a valid input type
+/* eslint-disable @typescript-eslint/no-explicit-any */
+const fs = __importStar(__nccwpck_require__(57147));
+const os = __importStar(__nccwpck_require__(22037));
+const uuid_1 = __nccwpck_require__(75840);
+const utils_1 = __nccwpck_require__(5278);
+function issueFileCommand(command, message) {
+ const filePath = process.env[`GITHUB_${command}`];
+ if (!filePath) {
+ throw new Error(`Unable to find environment variable for file command ${command}`);
+ }
+ if (!fs.existsSync(filePath)) {
+ throw new Error(`Missing file at path: ${filePath}`);
+ }
+ fs.appendFileSync(filePath, `${utils_1.toCommandValue(message)}${os.EOL}`, {
+ encoding: 'utf8'
+ });
+}
+exports.issueFileCommand = issueFileCommand;
+function prepareKeyValueMessage(key, value) {
+ const delimiter = `ghadelimiter_${uuid_1.v4()}`;
+ const convertedValue = utils_1.toCommandValue(value);
+ // These should realistically never happen, but just in case someone finds a
+ // way to exploit uuid generation let's not allow keys or values that contain
+ // the delimiter.
+ if (key.includes(delimiter)) {
+ throw new Error(`Unexpected input: name should not contain the delimiter "${delimiter}"`);
+ }
+ if (convertedValue.includes(delimiter)) {
+ throw new Error(`Unexpected input: value should not contain the delimiter "${delimiter}"`);
+ }
+ return `${key}<<${delimiter}${os.EOL}${convertedValue}${os.EOL}${delimiter}`;
+}
+exports.prepareKeyValueMessage = prepareKeyValueMessage;
+//# sourceMappingURL=file-command.js.map
+
+/***/ }),
+
+/***/ 98041:
+/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
+
+"use strict";
+
+var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
+ return new (P || (P = Promise))(function (resolve, reject) {
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
+ });
+};
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.OidcClient = void 0;
+const http_client_1 = __nccwpck_require__(96255);
+const auth_1 = __nccwpck_require__(35526);
+const core_1 = __nccwpck_require__(42186);
+class OidcClient {
+ static createHttpClient(allowRetry = true, maxRetry = 10) {
+ const requestOptions = {
+ allowRetries: allowRetry,
+ maxRetries: maxRetry
+ };
+ return new http_client_1.HttpClient('actions/oidc-client', [new auth_1.BearerCredentialHandler(OidcClient.getRequestToken())], requestOptions);
+ }
+ static getRequestToken() {
+ const token = process.env['ACTIONS_ID_TOKEN_REQUEST_TOKEN'];
+ if (!token) {
+ throw new Error('Unable to get ACTIONS_ID_TOKEN_REQUEST_TOKEN env variable');
+ }
+ return token;
+ }
+ static getIDTokenUrl() {
+ const runtimeUrl = process.env['ACTIONS_ID_TOKEN_REQUEST_URL'];
+ if (!runtimeUrl) {
+ throw new Error('Unable to get ACTIONS_ID_TOKEN_REQUEST_URL env variable');
+ }
+ return runtimeUrl;
+ }
+ static getCall(id_token_url) {
+ var _a;
+ return __awaiter(this, void 0, void 0, function* () {
+ const httpclient = OidcClient.createHttpClient();
+ const res = yield httpclient
+ .getJson(id_token_url)
+ .catch(error => {
+ throw new Error(`Failed to get ID Token. \n
+ Error Code : ${error.statusCode}\n
+ Error Message: ${error.message}`);
+ });
+ const id_token = (_a = res.result) === null || _a === void 0 ? void 0 : _a.value;
+ if (!id_token) {
+ throw new Error('Response json body do not have ID Token field');
+ }
+ return id_token;
+ });
+ }
+ static getIDToken(audience) {
+ return __awaiter(this, void 0, void 0, function* () {
+ try {
+ // New ID Token is requested from action service
+ let id_token_url = OidcClient.getIDTokenUrl();
+ if (audience) {
+ const encodedAudience = encodeURIComponent(audience);
+ id_token_url = `${id_token_url}&audience=${encodedAudience}`;
+ }
+ core_1.debug(`ID token url is ${id_token_url}`);
+ const id_token = yield OidcClient.getCall(id_token_url);
+ core_1.setSecret(id_token);
+ return id_token;
+ }
+ catch (error) {
+ throw new Error(`Error message: ${error.message}`);
+ }
+ });
+ }
+}
+exports.OidcClient = OidcClient;
+//# sourceMappingURL=oidc-utils.js.map
+
+/***/ }),
+
+/***/ 2981:
+/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
+
+"use strict";
+
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+ o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+ if (mod && mod.__esModule) return mod;
+ var result = {};
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+ __setModuleDefault(result, mod);
+ return result;
+};
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.toPlatformPath = exports.toWin32Path = exports.toPosixPath = void 0;
+const path = __importStar(__nccwpck_require__(71017));
+/**
+ * toPosixPath converts the given path to the posix form. On Windows, \\ will be
+ * replaced with /.
+ *
+ * @param pth. Path to transform.
+ * @return string Posix path.
+ */
+function toPosixPath(pth) {
+ return pth.replace(/[\\]/g, '/');
+}
+exports.toPosixPath = toPosixPath;
+/**
+ * toWin32Path converts the given path to the win32 form. On Linux, / will be
+ * replaced with \\.
+ *
+ * @param pth. Path to transform.
+ * @return string Win32 path.
+ */
+function toWin32Path(pth) {
+ return pth.replace(/[/]/g, '\\');
+}
+exports.toWin32Path = toWin32Path;
+/**
+ * toPlatformPath converts the given path to a platform-specific path. It does
+ * this by replacing instances of / and \ with the platform-specific path
+ * separator.
+ *
+ * @param pth The path to platformize.
+ * @return string The platform-specific path.
+ */
+function toPlatformPath(pth) {
+ return pth.replace(/[/\\]/g, path.sep);
+}
+exports.toPlatformPath = toPlatformPath;
+//# sourceMappingURL=path-utils.js.map
+
+/***/ }),
+
+/***/ 81327:
+/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
+
+"use strict";
+
+var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
+ return new (P || (P = Promise))(function (resolve, reject) {
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
+ });
+};
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.summary = exports.markdownSummary = exports.SUMMARY_DOCS_URL = exports.SUMMARY_ENV_VAR = void 0;
+const os_1 = __nccwpck_require__(22037);
+const fs_1 = __nccwpck_require__(57147);
+const { access, appendFile, writeFile } = fs_1.promises;
+exports.SUMMARY_ENV_VAR = 'GITHUB_STEP_SUMMARY';
+exports.SUMMARY_DOCS_URL = 'https://docs.github.com/actions/using-workflows/workflow-commands-for-github-actions#adding-a-job-summary';
+class Summary {
+ constructor() {
+ this._buffer = '';
+ }
+ /**
+ * Finds the summary file path from the environment, rejects if env var is not found or file does not exist
+ * Also checks r/w permissions.
+ *
+ * @returns step summary file path
+ */
+ filePath() {
+ return __awaiter(this, void 0, void 0, function* () {
+ if (this._filePath) {
+ return this._filePath;
+ }
+ const pathFromEnv = process.env[exports.SUMMARY_ENV_VAR];
+ if (!pathFromEnv) {
+ throw new Error(`Unable to find environment variable for $${exports.SUMMARY_ENV_VAR}. Check if your runtime environment supports job summaries.`);
+ }
+ try {
+ yield access(pathFromEnv, fs_1.constants.R_OK | fs_1.constants.W_OK);
+ }
+ catch (_a) {
+ throw new Error(`Unable to access summary file: '${pathFromEnv}'. Check if the file has correct read/write permissions.`);
+ }
+ this._filePath = pathFromEnv;
+ return this._filePath;
+ });
+ }
+ /**
+ * Wraps content in an HTML tag, adding any HTML attributes
+ *
+ * @param {string} tag HTML tag to wrap
+ * @param {string | null} content content within the tag
+ * @param {[attribute: string]: string} attrs key-value list of HTML attributes to add
+ *
+ * @returns {string} content wrapped in HTML element
+ */
+ wrap(tag, content, attrs = {}) {
+ const htmlAttrs = Object.entries(attrs)
+ .map(([key, value]) => ` ${key}="${value}"`)
+ .join('');
+ if (!content) {
+ return `<${tag}${htmlAttrs}>`;
+ }
+ return `<${tag}${htmlAttrs}>${content}${tag}>`;
+ }
+ /**
+ * Writes text in the buffer to the summary buffer file and empties buffer. Will append by default.
+ *
+ * @param {SummaryWriteOptions} [options] (optional) options for write operation
+ *
+ * @returns {Promise} summary instance
+ */
+ write(options) {
+ return __awaiter(this, void 0, void 0, function* () {
+ const overwrite = !!(options === null || options === void 0 ? void 0 : options.overwrite);
+ const filePath = yield this.filePath();
+ const writeFunc = overwrite ? writeFile : appendFile;
+ yield writeFunc(filePath, this._buffer, { encoding: 'utf8' });
+ return this.emptyBuffer();
+ });
+ }
+ /**
+ * Clears the summary buffer and wipes the summary file
+ *
+ * @returns {Summary} summary instance
+ */
+ clear() {
+ return __awaiter(this, void 0, void 0, function* () {
+ return this.emptyBuffer().write({ overwrite: true });
+ });
+ }
+ /**
+ * Returns the current summary buffer as a string
+ *
+ * @returns {string} string of summary buffer
+ */
+ stringify() {
+ return this._buffer;
+ }
+ /**
+ * If the summary buffer is empty
+ *
+ * @returns {boolen} true if the buffer is empty
+ */
+ isEmptyBuffer() {
+ return this._buffer.length === 0;
+ }
+ /**
+ * Resets the summary buffer without writing to summary file
+ *
+ * @returns {Summary} summary instance
+ */
+ emptyBuffer() {
+ this._buffer = '';
+ return this;
+ }
+ /**
+ * Adds raw text to the summary buffer
+ *
+ * @param {string} text content to add
+ * @param {boolean} [addEOL=false] (optional) append an EOL to the raw text (default: false)
+ *
+ * @returns {Summary} summary instance
+ */
+ addRaw(text, addEOL = false) {
+ this._buffer += text;
+ return addEOL ? this.addEOL() : this;
+ }
+ /**
+ * Adds the operating system-specific end-of-line marker to the buffer
+ *
+ * @returns {Summary} summary instance
+ */
+ addEOL() {
+ return this.addRaw(os_1.EOL);
+ }
+ /**
+ * Adds an HTML codeblock to the summary buffer
+ *
+ * @param {string} code content to render within fenced code block
+ * @param {string} lang (optional) language to syntax highlight code
+ *
+ * @returns {Summary} summary instance
+ */
+ addCodeBlock(code, lang) {
+ const attrs = Object.assign({}, (lang && { lang }));
+ const element = this.wrap('pre', this.wrap('code', code), attrs);
+ return this.addRaw(element).addEOL();
+ }
+ /**
+ * Adds an HTML list to the summary buffer
+ *
+ * @param {string[]} items list of items to render
+ * @param {boolean} [ordered=false] (optional) if the rendered list should be ordered or not (default: false)
+ *
+ * @returns {Summary} summary instance
+ */
+ addList(items, ordered = false) {
+ const tag = ordered ? 'ol' : 'ul';
+ const listItems = items.map(item => this.wrap('li', item)).join('');
+ const element = this.wrap(tag, listItems);
+ return this.addRaw(element).addEOL();
+ }
+ /**
+ * Adds an HTML table to the summary buffer
+ *
+ * @param {SummaryTableCell[]} rows table rows
+ *
+ * @returns {Summary} summary instance
+ */
+ addTable(rows) {
+ const tableBody = rows
+ .map(row => {
+ const cells = row
+ .map(cell => {
+ if (typeof cell === 'string') {
+ return this.wrap('td', cell);
+ }
+ const { header, data, colspan, rowspan } = cell;
+ const tag = header ? 'th' : 'td';
+ const attrs = Object.assign(Object.assign({}, (colspan && { colspan })), (rowspan && { rowspan }));
+ return this.wrap(tag, data, attrs);
+ })
+ .join('');
+ return this.wrap('tr', cells);
+ })
+ .join('');
+ const element = this.wrap('table', tableBody);
+ return this.addRaw(element).addEOL();
+ }
+ /**
+ * Adds a collapsable HTML details element to the summary buffer
+ *
+ * @param {string} label text for the closed state
+ * @param {string} content collapsable content
+ *
+ * @returns {Summary} summary instance
+ */
+ addDetails(label, content) {
+ const element = this.wrap('details', this.wrap('summary', label) + content);
+ return this.addRaw(element).addEOL();
+ }
+ /**
+ * Adds an HTML image tag to the summary buffer
+ *
+ * @param {string} src path to the image you to embed
+ * @param {string} alt text description of the image
+ * @param {SummaryImageOptions} options (optional) addition image attributes
+ *
+ * @returns {Summary} summary instance
+ */
+ addImage(src, alt, options) {
+ const { width, height } = options || {};
+ const attrs = Object.assign(Object.assign({}, (width && { width })), (height && { height }));
+ const element = this.wrap('img', null, Object.assign({ src, alt }, attrs));
+ return this.addRaw(element).addEOL();
+ }
+ /**
+ * Adds an HTML section heading element
+ *
+ * @param {string} text heading text
+ * @param {number | string} [level=1] (optional) the heading level, default: 1
+ *
+ * @returns {Summary} summary instance
+ */
+ addHeading(text, level) {
+ const tag = `h${level}`;
+ const allowedTag = ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'].includes(tag)
+ ? tag
+ : 'h1';
+ const element = this.wrap(allowedTag, text);
+ return this.addRaw(element).addEOL();
+ }
+ /**
+ * Adds an HTML thematic break (
) to the summary buffer
+ *
+ * @returns {Summary} summary instance
+ */
+ addSeparator() {
+ const element = this.wrap('hr', null);
+ return this.addRaw(element).addEOL();
+ }
+ /**
+ * Adds an HTML line break (
) to the summary buffer
+ *
+ * @returns {Summary} summary instance
+ */
+ addBreak() {
+ const element = this.wrap('br', null);
+ return this.addRaw(element).addEOL();
+ }
+ /**
+ * Adds an HTML blockquote to the summary buffer
+ *
+ * @param {string} text quote text
+ * @param {string} cite (optional) citation url
+ *
+ * @returns {Summary} summary instance
+ */
+ addQuote(text, cite) {
+ const attrs = Object.assign({}, (cite && { cite }));
+ const element = this.wrap('blockquote', text, attrs);
+ return this.addRaw(element).addEOL();
+ }
+ /**
+ * Adds an HTML anchor tag to the summary buffer
+ *
+ * @param {string} text link text/content
+ * @param {string} href hyperlink
+ *
+ * @returns {Summary} summary instance
+ */
+ addLink(text, href) {
+ const element = this.wrap('a', text, { href });
+ return this.addRaw(element).addEOL();
+ }
+}
+const _summary = new Summary();
+/**
+ * @deprecated use `core.summary`
+ */
+exports.markdownSummary = _summary;
+exports.summary = _summary;
+//# sourceMappingURL=summary.js.map
+
+/***/ }),
+
+/***/ 5278:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+// We use any as a valid input type
+/* eslint-disable @typescript-eslint/no-explicit-any */
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.toCommandProperties = exports.toCommandValue = void 0;
+/**
+ * Sanitizes an input into a string so it can be passed into issueCommand safely
+ * @param input input to sanitize into a string
+ */
+function toCommandValue(input) {
+ if (input === null || input === undefined) {
+ return '';
+ }
+ else if (typeof input === 'string' || input instanceof String) {
+ return input;
+ }
+ return JSON.stringify(input);
+}
+exports.toCommandValue = toCommandValue;
+/**
+ *
+ * @param annotationProperties
+ * @returns The command properties to send with the actual annotation command
+ * See IssueCommandProperties: https://github.com/actions/runner/blob/main/src/Runner.Worker/ActionCommandManager.cs#L646
+ */
+function toCommandProperties(annotationProperties) {
+ if (!Object.keys(annotationProperties).length) {
+ return {};
+ }
+ return {
+ title: annotationProperties.title,
+ file: annotationProperties.file,
+ line: annotationProperties.startLine,
+ endLine: annotationProperties.endLine,
+ col: annotationProperties.startColumn,
+ endColumn: annotationProperties.endColumn
+ };
+}
+exports.toCommandProperties = toCommandProperties;
+//# sourceMappingURL=utils.js.map
+
+/***/ }),
+
+/***/ 74087:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.Context = void 0;
+const fs_1 = __nccwpck_require__(57147);
+const os_1 = __nccwpck_require__(22037);
+class Context {
+ /**
+ * Hydrate the context from the environment
+ */
+ constructor() {
+ var _a, _b, _c;
+ this.payload = {};
+ if (process.env.GITHUB_EVENT_PATH) {
+ if ((0, fs_1.existsSync)(process.env.GITHUB_EVENT_PATH)) {
+ this.payload = JSON.parse((0, fs_1.readFileSync)(process.env.GITHUB_EVENT_PATH, { encoding: 'utf8' }));
+ }
+ else {
+ const path = process.env.GITHUB_EVENT_PATH;
+ process.stdout.write(`GITHUB_EVENT_PATH ${path} does not exist${os_1.EOL}`);
+ }
+ }
+ this.eventName = process.env.GITHUB_EVENT_NAME;
+ this.sha = process.env.GITHUB_SHA;
+ this.ref = process.env.GITHUB_REF;
+ this.workflow = process.env.GITHUB_WORKFLOW;
+ this.action = process.env.GITHUB_ACTION;
+ this.actor = process.env.GITHUB_ACTOR;
+ this.job = process.env.GITHUB_JOB;
+ this.runNumber = parseInt(process.env.GITHUB_RUN_NUMBER, 10);
+ this.runId = parseInt(process.env.GITHUB_RUN_ID, 10);
+ this.apiUrl = (_a = process.env.GITHUB_API_URL) !== null && _a !== void 0 ? _a : `https://api.github.com`;
+ this.serverUrl = (_b = process.env.GITHUB_SERVER_URL) !== null && _b !== void 0 ? _b : `https://github.com`;
+ this.graphqlUrl =
+ (_c = process.env.GITHUB_GRAPHQL_URL) !== null && _c !== void 0 ? _c : `https://api.github.com/graphql`;
+ }
+ get issue() {
+ const payload = this.payload;
+ return Object.assign(Object.assign({}, this.repo), { number: (payload.issue || payload.pull_request || payload).number });
+ }
+ get repo() {
+ if (process.env.GITHUB_REPOSITORY) {
+ const [owner, repo] = process.env.GITHUB_REPOSITORY.split('/');
+ return { owner, repo };
+ }
+ if (this.payload.repository) {
+ return {
+ owner: this.payload.repository.owner.login,
+ repo: this.payload.repository.name
+ };
+ }
+ throw new Error("context.repo requires a GITHUB_REPOSITORY environment variable like 'owner/repo'");
+ }
+}
+exports.Context = Context;
+//# sourceMappingURL=context.js.map
+
+/***/ }),
+
+/***/ 95438:
+/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
+
+"use strict";
+
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ var desc = Object.getOwnPropertyDescriptor(m, k);
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+ desc = { enumerable: true, get: function() { return m[k]; } };
+ }
+ Object.defineProperty(o, k2, desc);
+}) : (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+ o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+ if (mod && mod.__esModule) return mod;
+ var result = {};
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+ __setModuleDefault(result, mod);
+ return result;
+};
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.getOctokit = exports.context = void 0;
+const Context = __importStar(__nccwpck_require__(74087));
+const utils_1 = __nccwpck_require__(73030);
+exports.context = new Context.Context();
+/**
+ * Returns a hydrated octokit ready to use for GitHub Actions
+ *
+ * @param token the repo PAT or GITHUB_TOKEN
+ * @param options other options to set
+ */
+function getOctokit(token, options, ...additionalPlugins) {
+ const GitHubWithPlugins = utils_1.GitHub.plugin(...additionalPlugins);
+ return new GitHubWithPlugins((0, utils_1.getOctokitOptions)(token, options));
+}
+exports.getOctokit = getOctokit;
+//# sourceMappingURL=github.js.map
+
+/***/ }),
+
+/***/ 47914:
+/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
+
+"use strict";
+
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ var desc = Object.getOwnPropertyDescriptor(m, k);
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+ desc = { enumerable: true, get: function() { return m[k]; } };
+ }
+ Object.defineProperty(o, k2, desc);
+}) : (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+ o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+ if (mod && mod.__esModule) return mod;
+ var result = {};
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+ __setModuleDefault(result, mod);
+ return result;
+};
+var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
+ return new (P || (P = Promise))(function (resolve, reject) {
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
+ });
+};
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.getApiBaseUrl = exports.getProxyFetch = exports.getProxyAgentDispatcher = exports.getProxyAgent = exports.getAuthString = void 0;
+const httpClient = __importStar(__nccwpck_require__(96255));
+const undici_1 = __nccwpck_require__(41773);
+function getAuthString(token, options) {
+ if (!token && !options.auth) {
+ throw new Error('Parameter token or opts.auth is required');
+ }
+ else if (token && options.auth) {
+ throw new Error('Parameters token and opts.auth may not both be specified');
+ }
+ return typeof options.auth === 'string' ? options.auth : `token ${token}`;
+}
+exports.getAuthString = getAuthString;
+function getProxyAgent(destinationUrl) {
+ const hc = new httpClient.HttpClient();
+ return hc.getAgent(destinationUrl);
+}
+exports.getProxyAgent = getProxyAgent;
+function getProxyAgentDispatcher(destinationUrl) {
+ const hc = new httpClient.HttpClient();
+ return hc.getAgentDispatcher(destinationUrl);
+}
+exports.getProxyAgentDispatcher = getProxyAgentDispatcher;
+function getProxyFetch(destinationUrl) {
+ const httpDispatcher = getProxyAgentDispatcher(destinationUrl);
+ const proxyFetch = (url, opts) => __awaiter(this, void 0, void 0, function* () {
+ return (0, undici_1.fetch)(url, Object.assign(Object.assign({}, opts), { dispatcher: httpDispatcher }));
+ });
+ return proxyFetch;
+}
+exports.getProxyFetch = getProxyFetch;
+function getApiBaseUrl() {
+ return process.env['GITHUB_API_URL'] || 'https://api.github.com';
+}
+exports.getApiBaseUrl = getApiBaseUrl;
+//# sourceMappingURL=utils.js.map
+
+/***/ }),
+
+/***/ 73030:
+/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
+
+"use strict";
+
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ var desc = Object.getOwnPropertyDescriptor(m, k);
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+ desc = { enumerable: true, get: function() { return m[k]; } };
+ }
+ Object.defineProperty(o, k2, desc);
+}) : (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+ o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+ if (mod && mod.__esModule) return mod;
+ var result = {};
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+ __setModuleDefault(result, mod);
+ return result;
+};
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.getOctokitOptions = exports.GitHub = exports.defaults = exports.context = void 0;
+const Context = __importStar(__nccwpck_require__(74087));
+const Utils = __importStar(__nccwpck_require__(47914));
+// octokit + plugins
+const core_1 = __nccwpck_require__(76762);
+const plugin_rest_endpoint_methods_1 = __nccwpck_require__(83044);
+const plugin_paginate_rest_1 = __nccwpck_require__(64193);
+exports.context = new Context.Context();
+const baseUrl = Utils.getApiBaseUrl();
+exports.defaults = {
+ baseUrl,
+ request: {
+ agent: Utils.getProxyAgent(baseUrl),
+ fetch: Utils.getProxyFetch(baseUrl)
+ }
+};
+exports.GitHub = core_1.Octokit.plugin(plugin_rest_endpoint_methods_1.restEndpointMethods, plugin_paginate_rest_1.paginateRest).defaults(exports.defaults);
+/**
+ * Convience function to correctly format Octokit Options to pass into the constructor.
+ *
+ * @param token the repo PAT or GITHUB_TOKEN
+ * @param options other options to set
+ */
+function getOctokitOptions(token, options) {
+ const opts = Object.assign({}, options || {}); // Shallow clone - don't mutate the object provided by the caller
+ // Auth
+ const auth = Utils.getAuthString(token, opts);
+ if (auth) {
+ opts.auth = auth;
+ }
+ return opts;
+}
+exports.getOctokitOptions = getOctokitOptions;
+//# sourceMappingURL=utils.js.map
+
+/***/ }),
+
+/***/ 35526:
+/***/ (function(__unused_webpack_module, exports) {
+
+"use strict";
+
+var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
+ return new (P || (P = Promise))(function (resolve, reject) {
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
+ });
+};
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.PersonalAccessTokenCredentialHandler = exports.BearerCredentialHandler = exports.BasicCredentialHandler = void 0;
+class BasicCredentialHandler {
+ constructor(username, password) {
+ this.username = username;
+ this.password = password;
+ }
+ prepareRequest(options) {
+ if (!options.headers) {
+ throw Error('The request has no headers');
+ }
+ options.headers['Authorization'] = `Basic ${Buffer.from(`${this.username}:${this.password}`).toString('base64')}`;
+ }
+ // This handler cannot handle 401
+ canHandleAuthentication() {
+ return false;
+ }
+ handleAuthentication() {
+ return __awaiter(this, void 0, void 0, function* () {
+ throw new Error('not implemented');
+ });
+ }
+}
+exports.BasicCredentialHandler = BasicCredentialHandler;
+class BearerCredentialHandler {
+ constructor(token) {
+ this.token = token;
+ }
+ // currently implements pre-authorization
+ // TODO: support preAuth = false where it hooks on 401
+ prepareRequest(options) {
+ if (!options.headers) {
+ throw Error('The request has no headers');
+ }
+ options.headers['Authorization'] = `Bearer ${this.token}`;
+ }
+ // This handler cannot handle 401
+ canHandleAuthentication() {
+ return false;
+ }
+ handleAuthentication() {
+ return __awaiter(this, void 0, void 0, function* () {
+ throw new Error('not implemented');
+ });
+ }
+}
+exports.BearerCredentialHandler = BearerCredentialHandler;
+class PersonalAccessTokenCredentialHandler {
+ constructor(token) {
+ this.token = token;
+ }
+ // currently implements pre-authorization
+ // TODO: support preAuth = false where it hooks on 401
+ prepareRequest(options) {
+ if (!options.headers) {
+ throw Error('The request has no headers');
+ }
+ options.headers['Authorization'] = `Basic ${Buffer.from(`PAT:${this.token}`).toString('base64')}`;
+ }
+ // This handler cannot handle 401
+ canHandleAuthentication() {
+ return false;
+ }
+ handleAuthentication() {
+ return __awaiter(this, void 0, void 0, function* () {
+ throw new Error('not implemented');
+ });
+ }
+}
+exports.PersonalAccessTokenCredentialHandler = PersonalAccessTokenCredentialHandler;
+//# sourceMappingURL=auth.js.map
+
+/***/ }),
+
+/***/ 96255:
+/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
+
+"use strict";
+
+/* eslint-disable @typescript-eslint/no-explicit-any */
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ var desc = Object.getOwnPropertyDescriptor(m, k);
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+ desc = { enumerable: true, get: function() { return m[k]; } };
+ }
+ Object.defineProperty(o, k2, desc);
+}) : (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+ o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+ if (mod && mod.__esModule) return mod;
+ var result = {};
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+ __setModuleDefault(result, mod);
+ return result;
+};
+var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
+ return new (P || (P = Promise))(function (resolve, reject) {
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
+ });
+};
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.HttpClient = exports.isHttps = exports.HttpClientResponse = exports.HttpClientError = exports.getProxyUrl = exports.MediaTypes = exports.Headers = exports.HttpCodes = void 0;
+const http = __importStar(__nccwpck_require__(13685));
+const https = __importStar(__nccwpck_require__(95687));
+const pm = __importStar(__nccwpck_require__(19835));
+const tunnel = __importStar(__nccwpck_require__(74294));
+const undici_1 = __nccwpck_require__(41773);
+var HttpCodes;
+(function (HttpCodes) {
+ HttpCodes[HttpCodes["OK"] = 200] = "OK";
+ HttpCodes[HttpCodes["MultipleChoices"] = 300] = "MultipleChoices";
+ HttpCodes[HttpCodes["MovedPermanently"] = 301] = "MovedPermanently";
+ HttpCodes[HttpCodes["ResourceMoved"] = 302] = "ResourceMoved";
+ HttpCodes[HttpCodes["SeeOther"] = 303] = "SeeOther";
+ HttpCodes[HttpCodes["NotModified"] = 304] = "NotModified";
+ HttpCodes[HttpCodes["UseProxy"] = 305] = "UseProxy";
+ HttpCodes[HttpCodes["SwitchProxy"] = 306] = "SwitchProxy";
+ HttpCodes[HttpCodes["TemporaryRedirect"] = 307] = "TemporaryRedirect";
+ HttpCodes[HttpCodes["PermanentRedirect"] = 308] = "PermanentRedirect";
+ HttpCodes[HttpCodes["BadRequest"] = 400] = "BadRequest";
+ HttpCodes[HttpCodes["Unauthorized"] = 401] = "Unauthorized";
+ HttpCodes[HttpCodes["PaymentRequired"] = 402] = "PaymentRequired";
+ HttpCodes[HttpCodes["Forbidden"] = 403] = "Forbidden";
+ HttpCodes[HttpCodes["NotFound"] = 404] = "NotFound";
+ HttpCodes[HttpCodes["MethodNotAllowed"] = 405] = "MethodNotAllowed";
+ HttpCodes[HttpCodes["NotAcceptable"] = 406] = "NotAcceptable";
+ HttpCodes[HttpCodes["ProxyAuthenticationRequired"] = 407] = "ProxyAuthenticationRequired";
+ HttpCodes[HttpCodes["RequestTimeout"] = 408] = "RequestTimeout";
+ HttpCodes[HttpCodes["Conflict"] = 409] = "Conflict";
+ HttpCodes[HttpCodes["Gone"] = 410] = "Gone";
+ HttpCodes[HttpCodes["TooManyRequests"] = 429] = "TooManyRequests";
+ HttpCodes[HttpCodes["InternalServerError"] = 500] = "InternalServerError";
+ HttpCodes[HttpCodes["NotImplemented"] = 501] = "NotImplemented";
+ HttpCodes[HttpCodes["BadGateway"] = 502] = "BadGateway";
+ HttpCodes[HttpCodes["ServiceUnavailable"] = 503] = "ServiceUnavailable";
+ HttpCodes[HttpCodes["GatewayTimeout"] = 504] = "GatewayTimeout";
+})(HttpCodes || (exports.HttpCodes = HttpCodes = {}));
+var Headers;
+(function (Headers) {
+ Headers["Accept"] = "accept";
+ Headers["ContentType"] = "content-type";
+})(Headers || (exports.Headers = Headers = {}));
+var MediaTypes;
+(function (MediaTypes) {
+ MediaTypes["ApplicationJson"] = "application/json";
+})(MediaTypes || (exports.MediaTypes = MediaTypes = {}));
+/**
+ * Returns the proxy URL, depending upon the supplied url and proxy environment variables.
+ * @param serverUrl The server URL where the request will be sent. For example, https://api.github.com
+ */
+function getProxyUrl(serverUrl) {
+ const proxyUrl = pm.getProxyUrl(new URL(serverUrl));
+ return proxyUrl ? proxyUrl.href : '';
+}
+exports.getProxyUrl = getProxyUrl;
+const HttpRedirectCodes = [
+ HttpCodes.MovedPermanently,
+ HttpCodes.ResourceMoved,
+ HttpCodes.SeeOther,
+ HttpCodes.TemporaryRedirect,
+ HttpCodes.PermanentRedirect
+];
+const HttpResponseRetryCodes = [
+ HttpCodes.BadGateway,
+ HttpCodes.ServiceUnavailable,
+ HttpCodes.GatewayTimeout
+];
+const RetryableHttpVerbs = ['OPTIONS', 'GET', 'DELETE', 'HEAD'];
+const ExponentialBackoffCeiling = 10;
+const ExponentialBackoffTimeSlice = 5;
+class HttpClientError extends Error {
+ constructor(message, statusCode) {
+ super(message);
+ this.name = 'HttpClientError';
+ this.statusCode = statusCode;
+ Object.setPrototypeOf(this, HttpClientError.prototype);
+ }
+}
+exports.HttpClientError = HttpClientError;
+class HttpClientResponse {
+ constructor(message) {
+ this.message = message;
+ }
+ readBody() {
+ return __awaiter(this, void 0, void 0, function* () {
+ return new Promise((resolve) => __awaiter(this, void 0, void 0, function* () {
+ let output = Buffer.alloc(0);
+ this.message.on('data', (chunk) => {
+ output = Buffer.concat([output, chunk]);
+ });
+ this.message.on('end', () => {
+ resolve(output.toString());
+ });
+ }));
+ });
+ }
+ readBodyBuffer() {
+ return __awaiter(this, void 0, void 0, function* () {
+ return new Promise((resolve) => __awaiter(this, void 0, void 0, function* () {
+ const chunks = [];
+ this.message.on('data', (chunk) => {
+ chunks.push(chunk);
+ });
+ this.message.on('end', () => {
+ resolve(Buffer.concat(chunks));
+ });
+ }));
+ });
+ }
+}
+exports.HttpClientResponse = HttpClientResponse;
+function isHttps(requestUrl) {
+ const parsedUrl = new URL(requestUrl);
+ return parsedUrl.protocol === 'https:';
+}
+exports.isHttps = isHttps;
+class HttpClient {
+ constructor(userAgent, handlers, requestOptions) {
+ this._ignoreSslError = false;
+ this._allowRedirects = true;
+ this._allowRedirectDowngrade = false;
+ this._maxRedirects = 50;
+ this._allowRetries = false;
+ this._maxRetries = 1;
+ this._keepAlive = false;
+ this._disposed = false;
+ this.userAgent = userAgent;
+ this.handlers = handlers || [];
+ this.requestOptions = requestOptions;
+ if (requestOptions) {
+ if (requestOptions.ignoreSslError != null) {
+ this._ignoreSslError = requestOptions.ignoreSslError;
+ }
+ this._socketTimeout = requestOptions.socketTimeout;
+ if (requestOptions.allowRedirects != null) {
+ this._allowRedirects = requestOptions.allowRedirects;
+ }
+ if (requestOptions.allowRedirectDowngrade != null) {
+ this._allowRedirectDowngrade = requestOptions.allowRedirectDowngrade;
+ }
+ if (requestOptions.maxRedirects != null) {
+ this._maxRedirects = Math.max(requestOptions.maxRedirects, 0);
+ }
+ if (requestOptions.keepAlive != null) {
+ this._keepAlive = requestOptions.keepAlive;
+ }
+ if (requestOptions.allowRetries != null) {
+ this._allowRetries = requestOptions.allowRetries;
+ }
+ if (requestOptions.maxRetries != null) {
+ this._maxRetries = requestOptions.maxRetries;
+ }
+ }
+ }
+ options(requestUrl, additionalHeaders) {
+ return __awaiter(this, void 0, void 0, function* () {
+ return this.request('OPTIONS', requestUrl, null, additionalHeaders || {});
+ });
+ }
+ get(requestUrl, additionalHeaders) {
+ return __awaiter(this, void 0, void 0, function* () {
+ return this.request('GET', requestUrl, null, additionalHeaders || {});
+ });
+ }
+ del(requestUrl, additionalHeaders) {
+ return __awaiter(this, void 0, void 0, function* () {
+ return this.request('DELETE', requestUrl, null, additionalHeaders || {});
+ });
+ }
+ post(requestUrl, data, additionalHeaders) {
+ return __awaiter(this, void 0, void 0, function* () {
+ return this.request('POST', requestUrl, data, additionalHeaders || {});
+ });
+ }
+ patch(requestUrl, data, additionalHeaders) {
+ return __awaiter(this, void 0, void 0, function* () {
+ return this.request('PATCH', requestUrl, data, additionalHeaders || {});
+ });
+ }
+ put(requestUrl, data, additionalHeaders) {
+ return __awaiter(this, void 0, void 0, function* () {
+ return this.request('PUT', requestUrl, data, additionalHeaders || {});
+ });
+ }
+ head(requestUrl, additionalHeaders) {
+ return __awaiter(this, void 0, void 0, function* () {
+ return this.request('HEAD', requestUrl, null, additionalHeaders || {});
+ });
+ }
+ sendStream(verb, requestUrl, stream, additionalHeaders) {
+ return __awaiter(this, void 0, void 0, function* () {
+ return this.request(verb, requestUrl, stream, additionalHeaders);
+ });
+ }
+ /**
+ * Gets a typed object from an endpoint
+ * Be aware that not found returns a null. Other errors (4xx, 5xx) reject the promise
+ */
+ getJson(requestUrl, additionalHeaders = {}) {
+ return __awaiter(this, void 0, void 0, function* () {
+ additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson);
+ const res = yield this.get(requestUrl, additionalHeaders);
+ return this._processResponse(res, this.requestOptions);
+ });
+ }
+ postJson(requestUrl, obj, additionalHeaders = {}) {
+ return __awaiter(this, void 0, void 0, function* () {
+ const data = JSON.stringify(obj, null, 2);
+ additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson);
+ additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson);
+ const res = yield this.post(requestUrl, data, additionalHeaders);
+ return this._processResponse(res, this.requestOptions);
+ });
+ }
+ putJson(requestUrl, obj, additionalHeaders = {}) {
+ return __awaiter(this, void 0, void 0, function* () {
+ const data = JSON.stringify(obj, null, 2);
+ additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson);
+ additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson);
+ const res = yield this.put(requestUrl, data, additionalHeaders);
+ return this._processResponse(res, this.requestOptions);
+ });
+ }
+ patchJson(requestUrl, obj, additionalHeaders = {}) {
+ return __awaiter(this, void 0, void 0, function* () {
+ const data = JSON.stringify(obj, null, 2);
+ additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson);
+ additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson);
+ const res = yield this.patch(requestUrl, data, additionalHeaders);
+ return this._processResponse(res, this.requestOptions);
+ });
+ }
+ /**
+ * Makes a raw http request.
+ * All other methods such as get, post, patch, and request ultimately call this.
+ * Prefer get, del, post and patch
+ */
+ request(verb, requestUrl, data, headers) {
+ return __awaiter(this, void 0, void 0, function* () {
+ if (this._disposed) {
+ throw new Error('Client has already been disposed.');
+ }
+ const parsedUrl = new URL(requestUrl);
+ let info = this._prepareRequest(verb, parsedUrl, headers);
+ // Only perform retries on reads since writes may not be idempotent.
+ const maxTries = this._allowRetries && RetryableHttpVerbs.includes(verb)
+ ? this._maxRetries + 1
+ : 1;
+ let numTries = 0;
+ let response;
+ do {
+ response = yield this.requestRaw(info, data);
+ // Check if it's an authentication challenge
+ if (response &&
+ response.message &&
+ response.message.statusCode === HttpCodes.Unauthorized) {
+ let authenticationHandler;
+ for (const handler of this.handlers) {
+ if (handler.canHandleAuthentication(response)) {
+ authenticationHandler = handler;
+ break;
+ }
+ }
+ if (authenticationHandler) {
+ return authenticationHandler.handleAuthentication(this, info, data);
+ }
+ else {
+ // We have received an unauthorized response but have no handlers to handle it.
+ // Let the response return to the caller.
+ return response;
+ }
+ }
+ let redirectsRemaining = this._maxRedirects;
+ while (response.message.statusCode &&
+ HttpRedirectCodes.includes(response.message.statusCode) &&
+ this._allowRedirects &&
+ redirectsRemaining > 0) {
+ const redirectUrl = response.message.headers['location'];
+ if (!redirectUrl) {
+ // if there's no location to redirect to, we won't
+ break;
+ }
+ const parsedRedirectUrl = new URL(redirectUrl);
+ if (parsedUrl.protocol === 'https:' &&
+ parsedUrl.protocol !== parsedRedirectUrl.protocol &&
+ !this._allowRedirectDowngrade) {
+ throw new Error('Redirect from HTTPS to HTTP protocol. This downgrade is not allowed for security reasons. If you want to allow this behavior, set the allowRedirectDowngrade option to true.');
+ }
+ // we need to finish reading the response before reassigning response
+ // which will leak the open socket.
+ yield response.readBody();
+ // strip authorization header if redirected to a different hostname
+ if (parsedRedirectUrl.hostname !== parsedUrl.hostname) {
+ for (const header in headers) {
+ // header names are case insensitive
+ if (header.toLowerCase() === 'authorization') {
+ delete headers[header];
+ }
+ }
+ }
+ // let's make the request with the new redirectUrl
+ info = this._prepareRequest(verb, parsedRedirectUrl, headers);
+ response = yield this.requestRaw(info, data);
+ redirectsRemaining--;
+ }
+ if (!response.message.statusCode ||
+ !HttpResponseRetryCodes.includes(response.message.statusCode)) {
+ // If not a retry code, return immediately instead of retrying
+ return response;
+ }
+ numTries += 1;
+ if (numTries < maxTries) {
+ yield response.readBody();
+ yield this._performExponentialBackoff(numTries);
+ }
+ } while (numTries < maxTries);
+ return response;
+ });
+ }
+ /**
+ * Needs to be called if keepAlive is set to true in request options.
+ */
+ dispose() {
+ if (this._agent) {
+ this._agent.destroy();
+ }
+ this._disposed = true;
+ }
+ /**
+ * Raw request.
+ * @param info
+ * @param data
+ */
+ requestRaw(info, data) {
+ return __awaiter(this, void 0, void 0, function* () {
+ return new Promise((resolve, reject) => {
+ function callbackForResult(err, res) {
+ if (err) {
+ reject(err);
+ }
+ else if (!res) {
+ // If `err` is not passed, then `res` must be passed.
+ reject(new Error('Unknown error'));
+ }
+ else {
+ resolve(res);
+ }
+ }
+ this.requestRawWithCallback(info, data, callbackForResult);
+ });
+ });
+ }
+ /**
+ * Raw request with callback.
+ * @param info
+ * @param data
+ * @param onResult
+ */
+ requestRawWithCallback(info, data, onResult) {
+ if (typeof data === 'string') {
+ if (!info.options.headers) {
+ info.options.headers = {};
+ }
+ info.options.headers['Content-Length'] = Buffer.byteLength(data, 'utf8');
+ }
+ let callbackCalled = false;
+ function handleResult(err, res) {
+ if (!callbackCalled) {
+ callbackCalled = true;
+ onResult(err, res);
+ }
+ }
+ const req = info.httpModule.request(info.options, (msg) => {
+ const res = new HttpClientResponse(msg);
+ handleResult(undefined, res);
+ });
+ let socket;
+ req.on('socket', sock => {
+ socket = sock;
+ });
+ // If we ever get disconnected, we want the socket to timeout eventually
+ req.setTimeout(this._socketTimeout || 3 * 60000, () => {
+ if (socket) {
+ socket.end();
+ }
+ handleResult(new Error(`Request timeout: ${info.options.path}`));
+ });
+ req.on('error', function (err) {
+ // err has statusCode property
+ // res should have headers
+ handleResult(err);
+ });
+ if (data && typeof data === 'string') {
+ req.write(data, 'utf8');
+ }
+ if (data && typeof data !== 'string') {
+ data.on('close', function () {
+ req.end();
+ });
+ data.pipe(req);
+ }
+ else {
+ req.end();
+ }
+ }
+ /**
+ * Gets an http agent. This function is useful when you need an http agent that handles
+ * routing through a proxy server - depending upon the url and proxy environment variables.
+ * @param serverUrl The server URL where the request will be sent. For example, https://api.github.com
+ */
+ getAgent(serverUrl) {
+ const parsedUrl = new URL(serverUrl);
+ return this._getAgent(parsedUrl);
+ }
+ getAgentDispatcher(serverUrl) {
+ const parsedUrl = new URL(serverUrl);
+ const proxyUrl = pm.getProxyUrl(parsedUrl);
+ const useProxy = proxyUrl && proxyUrl.hostname;
+ if (!useProxy) {
+ return;
+ }
+ return this._getProxyAgentDispatcher(parsedUrl, proxyUrl);
+ }
+ _prepareRequest(method, requestUrl, headers) {
+ const info = {};
+ info.parsedUrl = requestUrl;
+ const usingSsl = info.parsedUrl.protocol === 'https:';
+ info.httpModule = usingSsl ? https : http;
+ const defaultPort = usingSsl ? 443 : 80;
+ info.options = {};
+ info.options.host = info.parsedUrl.hostname;
+ info.options.port = info.parsedUrl.port
+ ? parseInt(info.parsedUrl.port)
+ : defaultPort;
+ info.options.path =
+ (info.parsedUrl.pathname || '') + (info.parsedUrl.search || '');
+ info.options.method = method;
+ info.options.headers = this._mergeHeaders(headers);
+ if (this.userAgent != null) {
+ info.options.headers['user-agent'] = this.userAgent;
+ }
+ info.options.agent = this._getAgent(info.parsedUrl);
+ // gives handlers an opportunity to participate
+ if (this.handlers) {
+ for (const handler of this.handlers) {
+ handler.prepareRequest(info.options);
+ }
+ }
+ return info;
+ }
+ _mergeHeaders(headers) {
+ if (this.requestOptions && this.requestOptions.headers) {
+ return Object.assign({}, lowercaseKeys(this.requestOptions.headers), lowercaseKeys(headers || {}));
+ }
+ return lowercaseKeys(headers || {});
+ }
+ _getExistingOrDefaultHeader(additionalHeaders, header, _default) {
+ let clientHeader;
+ if (this.requestOptions && this.requestOptions.headers) {
+ clientHeader = lowercaseKeys(this.requestOptions.headers)[header];
+ }
+ return additionalHeaders[header] || clientHeader || _default;
+ }
+ _getAgent(parsedUrl) {
+ let agent;
+ const proxyUrl = pm.getProxyUrl(parsedUrl);
+ const useProxy = proxyUrl && proxyUrl.hostname;
+ if (this._keepAlive && useProxy) {
+ agent = this._proxyAgent;
+ }
+ if (this._keepAlive && !useProxy) {
+ agent = this._agent;
+ }
+ // if agent is already assigned use that agent.
+ if (agent) {
+ return agent;
+ }
+ const usingSsl = parsedUrl.protocol === 'https:';
+ let maxSockets = 100;
+ if (this.requestOptions) {
+ maxSockets = this.requestOptions.maxSockets || http.globalAgent.maxSockets;
+ }
+ // This is `useProxy` again, but we need to check `proxyURl` directly for TypeScripts's flow analysis.
+ if (proxyUrl && proxyUrl.hostname) {
+ const agentOptions = {
+ maxSockets,
+ keepAlive: this._keepAlive,
+ proxy: Object.assign(Object.assign({}, ((proxyUrl.username || proxyUrl.password) && {
+ proxyAuth: `${proxyUrl.username}:${proxyUrl.password}`
+ })), { host: proxyUrl.hostname, port: proxyUrl.port })
+ };
+ let tunnelAgent;
+ const overHttps = proxyUrl.protocol === 'https:';
+ if (usingSsl) {
+ tunnelAgent = overHttps ? tunnel.httpsOverHttps : tunnel.httpsOverHttp;
+ }
+ else {
+ tunnelAgent = overHttps ? tunnel.httpOverHttps : tunnel.httpOverHttp;
+ }
+ agent = tunnelAgent(agentOptions);
+ this._proxyAgent = agent;
+ }
+ // if reusing agent across request and tunneling agent isn't assigned create a new agent
+ if (this._keepAlive && !agent) {
+ const options = { keepAlive: this._keepAlive, maxSockets };
+ agent = usingSsl ? new https.Agent(options) : new http.Agent(options);
+ this._agent = agent;
+ }
+ // if not using private agent and tunnel agent isn't setup then use global agent
+ if (!agent) {
+ agent = usingSsl ? https.globalAgent : http.globalAgent;
+ }
+ if (usingSsl && this._ignoreSslError) {
+ // we don't want to set NODE_TLS_REJECT_UNAUTHORIZED=0 since that will affect request for entire process
+ // http.RequestOptions doesn't expose a way to modify RequestOptions.agent.options
+ // we have to cast it to any and change it directly
+ agent.options = Object.assign(agent.options || {}, {
+ rejectUnauthorized: false
+ });
+ }
+ return agent;
+ }
+ _getProxyAgentDispatcher(parsedUrl, proxyUrl) {
+ let proxyAgent;
+ if (this._keepAlive) {
+ proxyAgent = this._proxyAgentDispatcher;
+ }
+ // if agent is already assigned use that agent.
+ if (proxyAgent) {
+ return proxyAgent;
+ }
+ const usingSsl = parsedUrl.protocol === 'https:';
+ proxyAgent = new undici_1.ProxyAgent(Object.assign({ uri: proxyUrl.href, pipelining: !this._keepAlive ? 0 : 1 }, ((proxyUrl.username || proxyUrl.password) && {
+ token: `${proxyUrl.username}:${proxyUrl.password}`
+ })));
+ this._proxyAgentDispatcher = proxyAgent;
+ if (usingSsl && this._ignoreSslError) {
+ // we don't want to set NODE_TLS_REJECT_UNAUTHORIZED=0 since that will affect request for entire process
+ // http.RequestOptions doesn't expose a way to modify RequestOptions.agent.options
+ // we have to cast it to any and change it directly
+ proxyAgent.options = Object.assign(proxyAgent.options.requestTls || {}, {
+ rejectUnauthorized: false
+ });
+ }
+ return proxyAgent;
+ }
+ _performExponentialBackoff(retryNumber) {
+ return __awaiter(this, void 0, void 0, function* () {
+ retryNumber = Math.min(ExponentialBackoffCeiling, retryNumber);
+ const ms = ExponentialBackoffTimeSlice * Math.pow(2, retryNumber);
+ return new Promise(resolve => setTimeout(() => resolve(), ms));
+ });
+ }
+ _processResponse(res, options) {
+ return __awaiter(this, void 0, void 0, function* () {
+ return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {
+ const statusCode = res.message.statusCode || 0;
+ const response = {
+ statusCode,
+ result: null,
+ headers: {}
+ };
+ // not found leads to null obj returned
+ if (statusCode === HttpCodes.NotFound) {
+ resolve(response);
+ }
+ // get the result from the body
+ function dateTimeDeserializer(key, value) {
+ if (typeof value === 'string') {
+ const a = new Date(value);
+ if (!isNaN(a.valueOf())) {
+ return a;
+ }
+ }
+ return value;
+ }
+ let obj;
+ let contents;
+ try {
+ contents = yield res.readBody();
+ if (contents && contents.length > 0) {
+ if (options && options.deserializeDates) {
+ obj = JSON.parse(contents, dateTimeDeserializer);
+ }
+ else {
+ obj = JSON.parse(contents);
+ }
+ response.result = obj;
+ }
+ response.headers = res.message.headers;
+ }
+ catch (err) {
+ // Invalid resource (contents not json); leaving result obj null
+ }
+ // note that 3xx redirects are handled by the http layer.
+ if (statusCode > 299) {
+ let msg;
+ // if exception/error in body, attempt to get better error
+ if (obj && obj.message) {
+ msg = obj.message;
+ }
+ else if (contents && contents.length > 0) {
+ // it may be the case that the exception is in the body message as string
+ msg = contents;
+ }
+ else {
+ msg = `Failed request: (${statusCode})`;
+ }
+ const err = new HttpClientError(msg, statusCode);
+ err.result = response.result;
+ reject(err);
+ }
+ else {
+ resolve(response);
+ }
+ }));
+ });
+ }
+}
+exports.HttpClient = HttpClient;
+const lowercaseKeys = (obj) => Object.keys(obj).reduce((c, k) => ((c[k.toLowerCase()] = obj[k]), c), {});
+//# sourceMappingURL=index.js.map
+
+/***/ }),
+
+/***/ 19835:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.checkBypass = exports.getProxyUrl = void 0;
+function getProxyUrl(reqUrl) {
+ const usingSsl = reqUrl.protocol === 'https:';
+ if (checkBypass(reqUrl)) {
+ return undefined;
+ }
+ const proxyVar = (() => {
+ if (usingSsl) {
+ return process.env['https_proxy'] || process.env['HTTPS_PROXY'];
+ }
+ else {
+ return process.env['http_proxy'] || process.env['HTTP_PROXY'];
+ }
+ })();
+ if (proxyVar) {
+ try {
+ return new URL(proxyVar);
+ }
+ catch (_a) {
+ if (!proxyVar.startsWith('http://') && !proxyVar.startsWith('https://'))
+ return new URL(`http://${proxyVar}`);
+ }
+ }
+ else {
+ return undefined;
+ }
+}
+exports.getProxyUrl = getProxyUrl;
+function checkBypass(reqUrl) {
+ if (!reqUrl.hostname) {
+ return false;
+ }
+ const reqHost = reqUrl.hostname;
+ if (isLoopbackAddress(reqHost)) {
+ return true;
+ }
+ const noProxy = process.env['no_proxy'] || process.env['NO_PROXY'] || '';
+ if (!noProxy) {
+ return false;
+ }
+ // Determine the request port
+ let reqPort;
+ if (reqUrl.port) {
+ reqPort = Number(reqUrl.port);
+ }
+ else if (reqUrl.protocol === 'http:') {
+ reqPort = 80;
+ }
+ else if (reqUrl.protocol === 'https:') {
+ reqPort = 443;
+ }
+ // Format the request hostname and hostname with port
+ const upperReqHosts = [reqUrl.hostname.toUpperCase()];
+ if (typeof reqPort === 'number') {
+ upperReqHosts.push(`${upperReqHosts[0]}:${reqPort}`);
+ }
+ // Compare request host against noproxy
+ for (const upperNoProxyItem of noProxy
+ .split(',')
+ .map(x => x.trim().toUpperCase())
+ .filter(x => x)) {
+ if (upperNoProxyItem === '*' ||
+ upperReqHosts.some(x => x === upperNoProxyItem ||
+ x.endsWith(`.${upperNoProxyItem}`) ||
+ (upperNoProxyItem.startsWith('.') &&
+ x.endsWith(`${upperNoProxyItem}`)))) {
+ return true;
+ }
+ }
+ return false;
+}
+exports.checkBypass = checkBypass;
+function isLoopbackAddress(host) {
+ const hostLower = host.toLowerCase();
+ return (hostLower === 'localhost' ||
+ hostLower.startsWith('127.') ||
+ hostLower.startsWith('[::1]') ||
+ hostLower.startsWith('[0:0:0:0:0:0:0:1]'));
+}
+//# sourceMappingURL=proxy.js.map
+
+/***/ }),
+
+/***/ 78694:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.cannedMetricsForService = void 0;
+const canned_metrics_schema_1 = __nccwpck_require__(59859);
+/**
+ * Return the list of canned metrics for the given service
+ */
+function cannedMetricsForService(cloudFormationNamespace) {
+ // One metricTemplate has a single set of dimensions, but the same metric NAME
+ // may occur in multiple metricTemplates (if it has multiple sets of dimensions)
+ const metricTemplates = cannedMetricsIndex()[cloudFormationNamespace] ?? [];
+ // First construct almost what we need, but with a single dimension per metric
+ const metricsWithDuplicates = flatMap(metricTemplates, metricSet => {
+ const dimensions = metricSet.dimensions.map(d => d.dimensionName);
+ return metricSet.metrics.map(metric => ({
+ namespace: metricSet.namespace,
+ dimensions,
+ metricName: metric.name,
+ defaultStat: metric.defaultStat,
+ }));
+ });
+ // Then combine the dimensions for the same metrics into a single list
+ return groupBy(metricsWithDuplicates, m => `${m.namespace}/${m.metricName}`).map(metrics => ({
+ namespace: metrics[0].namespace,
+ metricName: metrics[0].metricName,
+ defaultStat: metrics[0].defaultStat,
+ dimensions: Array.from(dedupeStringLists(metrics.map(m => m.dimensions))),
+ }));
+}
+exports.cannedMetricsForService = cannedMetricsForService;
+let cannedMetricsCache;
+/**
+ * Load the canned metrics file and process it into an index, grouped by service namespace
+ */
+function cannedMetricsIndex() {
+ if (cannedMetricsCache === undefined) {
+ cannedMetricsCache = {};
+ for (const group of (0, canned_metrics_schema_1.loadCannedMetricsFile)()) {
+ for (const metricTemplate of group.metricTemplates) {
+ const [aws, service] = metricTemplate.resourceType.split('::');
+ const serviceKey = [aws, service].join('::');
+ (cannedMetricsCache[serviceKey] ?? (cannedMetricsCache[serviceKey] = [])).push(metricTemplate);
+ }
+ }
+ }
+ return cannedMetricsCache;
+}
+function flatMap(xs, fn) {
+ return Array.prototype.concat.apply([], xs.map(fn));
+}
+function groupBy(xs, keyFn) {
+ const obj = {};
+ for (const x of xs) {
+ const key = keyFn(x);
+ if (key in obj) {
+ obj[key].push(x);
+ }
+ else {
+ obj[key] = [x];
+ }
+ }
+ return Object.values(obj);
+}
+function* dedupeStringLists(xs) {
+ const seen = new Set();
+ for (const x of xs) {
+ x.sort();
+ const key = `${x.join(',')}`;
+ if (!seen.has(key)) {
+ yield x;
+ }
+ seen.add(key);
+ }
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FubmVkLW1ldHJpY3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjYW5uZWQtbWV0cmljcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxrRkFBK0Y7QUE0Qy9GOztHQUVHO0FBQ0gsU0FBZ0IsdUJBQXVCLENBQUMsdUJBQStCO0lBQ3JFLDhFQUE4RTtJQUM5RSxnRkFBZ0Y7SUFDaEYsTUFBTSxlQUFlLEdBQUcsa0JBQWtCLEVBQUUsQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUU1RSw4RUFBOEU7SUFDOUUsTUFBTSxxQkFBcUIsR0FBRyxPQUFPLENBQUMsZUFBZSxFQUFFLFNBQVMsQ0FBQyxFQUFFO1FBQ2pFLE1BQU0sVUFBVSxHQUFHLFNBQVMsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ2xFLE9BQU8sU0FBUyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3RDLFNBQVMsRUFBRSxTQUFTLENBQUMsU0FBUztZQUM5QixVQUFVO1lBQ1YsVUFBVSxFQUFFLE1BQU0sQ0FBQyxJQUFJO1lBQ3ZCLFdBQVcsRUFBRSxNQUFNLENBQUMsV0FBVztTQUNoQyxDQUFDLENBQUMsQ0FBQztJQUNOLENBQUMsQ0FBQyxDQUFDO0lBRUgsc0VBQXNFO0lBQ3RFLE9BQU8sT0FBTyxDQUFDLHFCQUFxQixFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxJQUFJLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDM0YsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTO1FBQy9CLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVTtRQUNqQyxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVc7UUFDbkMsVUFBVSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFRO0tBQ2pGLENBQUMsQ0FBQyxDQUFDO0FBQ04sQ0FBQztBQXZCRCwwREF1QkM7QUFJRCxJQUFJLGtCQUFrRCxDQUFDO0FBRXZEOztHQUVHO0FBQ0gsU0FBUyxrQkFBa0I7SUFDekIsSUFBSSxrQkFBa0IsS0FBSyxTQUFTLEVBQUU7UUFDcEMsa0JBQWtCLEdBQUcsRUFBRSxDQUFDO1FBQ3hCLEtBQUssTUFBTSxLQUFLLElBQUksSUFBQSw2Q0FBcUIsR0FBRSxFQUFFO1lBQzNDLEtBQUssTUFBTSxjQUFjLElBQUksS0FBSyxDQUFDLGVBQWUsRUFBRTtnQkFDbEQsTUFBTSxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsR0FBRyxjQUFjLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDL0QsTUFBTSxVQUFVLEdBQUcsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUM3QyxDQUFDLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7YUFDaEc7U0FDRjtLQUNGO0lBQ0QsT0FBTyxrQkFBa0IsQ0FBQztBQUM1QixDQUFDO0FBRUQsU0FBUyxPQUFPLENBQU8sRUFBTyxFQUFFLEVBQWlCO0lBQy9DLE9BQU8sS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDdEQsQ0FBQztBQUVELFNBQVMsT0FBTyxDQUFJLEVBQU8sRUFBRSxLQUF1QjtJQUNsRCxNQUFNLEdBQUcsR0FBcUMsRUFBRSxDQUFDO0lBQ2pELEtBQUssTUFBTSxDQUFDLElBQUksRUFBRSxFQUFFO1FBQ2xCLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNyQixJQUFJLEdBQUcsSUFBSSxHQUFHLEVBQUU7WUFDZCxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ2xCO2FBQU07WUFDTCxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNoQjtLQUNGO0lBQ0QsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzVCLENBQUM7QUFFRCxRQUFRLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFjO0lBQ3hDLE1BQU0sSUFBSSxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7SUFDL0IsS0FBSyxNQUFNLENBQUMsSUFBSSxFQUFFLEVBQUU7UUFDbEIsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ1QsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDbEIsTUFBTSxDQUFDLENBQUM7U0FDVDtRQUNELElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7S0FDZjtBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBsb2FkQ2FubmVkTWV0cmljc0ZpbGUsIE1ldHJpY1RlbXBsYXRlIH0gZnJvbSAnLi9jYW5uZWQtbWV0cmljcy9jYW5uZWQtbWV0cmljcy1zY2hlbWEnO1xuXG5leHBvcnQgdHlwZSBOb25FbXB0eUFycmF5PFQ+ID0gW1QsIC4uLlRbXV07XG5cbi8qKlxuICogQSBzaW5nbGUgY2FubmVkIHNlcnZpY2UgbWV0cmljXG4gKlxuICogVGhlc2UgYXJlIGtpbmRseSBwcm92aWRlZCB0byB1cyBieSB0aGUgZ29vZCBwZW9wbGUgb2YgQ2xvdWRXYXRjaCBFeHBsb3Jlci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDYW5uZWRNZXRyaWMge1xuICAvKipcbiAgICogTWV0cmljIG5hbWVzcGFjZVxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZXNwYWNlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE1ldHJpYyBuYW1lXG4gICAqL1xuICByZWFkb25seSBtZXRyaWNOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIExpc3Qgb2YgYWxsIHBvc3NpYmxlIGRpbWVuc2lvbiBwZXJtdXRhdGlvbnMgZm9yIHRoaXMgbWV0cmljXG4gICAqXG4gICAqIE1vc3QgbWV0cmljcyB3aWxsIGhhdmUgYSBzaW5nbGUgbGlzdCBvZiBzdHJpbmdzIGFzIHRoZWlyIG9uZSBzZXQgb2ZcbiAgICogYWxsb3dlZCBkaW1lbnNpb25zLCBidXQgc29tZSBtZXRyaWNzIGFyZSBlbWl0dGVkIHVuZGVyIG11bHRpcGxlXG4gICAqIGNvbWJpbmF0aW9ucyBvZiBkaW1lbnNpb25zLlxuICAgKi9cbiAgcmVhZG9ubHkgZGltZW5zaW9uczogTm9uRW1wdHlBcnJheTxzdHJpbmdbXT47XG5cbiAgLyoqXG4gICAqIFN1Z2dlc3RlZCBkZWZhdWx0IGFnZ3JlZ3JhdGlvbiBzdGF0aXN0aWNcbiAgICpcbiAgICogTm90IGFsd2F5cyB0aGUgbW9zdCBhcHByb3ByaWF0ZSBvbmUgdG8gdXNlISBUaGVzZSBkZWZhdWx0cyBoYXZlXG4gICAqIGJlZW4gY2xhc3NpZmllZCBieSBwZW9wbGUgYW5kIHRoZXkgZ2VuZXJhbGx5IGp1c3QgcGljayBcIkF2ZXJhZ2VcIlxuICAgKiBhcyB0aGUgZGVmYXVsdCwgZXZlbiBpZiBpdCBkb2Vzbid0IG1ha2Ugc2Vuc2UuXG4gICAqXG4gICAqIEZvciBleGFtcGxlOiBmb3IgZXZlbnQtYmFzZWQgbWV0cmljcyB0aGF0IG9ubHkgZXZlciBlbWl0IGAxYFxuICAgKiAoYW5kIG5ldmVyIGAwYCkgdGhlIGJldHRlciBzdGF0aXN0aWMgd291bGQgYmUgYFN1bWAuXG4gICAqXG4gICAqIFVzZSB5b3VyIGp1ZGdlbWVudCBiYXNlZCBvbiB0aGUgdHlwZSBvZiBtZXRyaWMgdGhpcyBpcy5cbiAgICovXG4gIHJlYWRvbmx5IGRlZmF1bHRTdGF0OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmV0dXJuIHRoZSBsaXN0IG9mIGNhbm5lZCBtZXRyaWNzIGZvciB0aGUgZ2l2ZW4gc2VydmljZVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2FubmVkTWV0cmljc0ZvclNlcnZpY2UoY2xvdWRGb3JtYXRpb25OYW1lc3BhY2U6IHN0cmluZyk6IENhbm5lZE1ldHJpY1tdIHtcbiAgLy8gT25lIG1ldHJpY1RlbXBsYXRlIGhhcyBhIHNpbmdsZSBzZXQgb2YgZGltZW5zaW9ucywgYnV0IHRoZSBzYW1lIG1ldHJpYyBOQU1FXG4gIC8vIG1heSBvY2N1ciBpbiBtdWx0aXBsZSBtZXRyaWNUZW1wbGF0ZXMgKGlmIGl0IGhhcyBtdWx0aXBsZSBzZXRzIG9mIGRpbWVuc2lvbnMpXG4gIGNvbnN0IG1ldHJpY1RlbXBsYXRlcyA9IGNhbm5lZE1ldHJpY3NJbmRleCgpW2Nsb3VkRm9ybWF0aW9uTmFtZXNwYWNlXSA/PyBbXTtcblxuICAvLyBGaXJzdCBjb25zdHJ1Y3QgYWxtb3N0IHdoYXQgd2UgbmVlZCwgYnV0IHdpdGggYSBzaW5nbGUgZGltZW5zaW9uIHBlciBtZXRyaWNcbiAgY29uc3QgbWV0cmljc1dpdGhEdXBsaWNhdGVzID0gZmxhdE1hcChtZXRyaWNUZW1wbGF0ZXMsIG1ldHJpY1NldCA9PiB7XG4gICAgY29uc3QgZGltZW5zaW9ucyA9IG1ldHJpY1NldC5kaW1lbnNpb25zLm1hcChkID0+IGQuZGltZW5zaW9uTmFtZSk7XG4gICAgcmV0dXJuIG1ldHJpY1NldC5tZXRyaWNzLm1hcChtZXRyaWMgPT4gKHtcbiAgICAgIG5hbWVzcGFjZTogbWV0cmljU2V0Lm5hbWVzcGFjZSxcbiAgICAgIGRpbWVuc2lvbnMsXG4gICAgICBtZXRyaWNOYW1lOiBtZXRyaWMubmFtZSxcbiAgICAgIGRlZmF1bHRTdGF0OiBtZXRyaWMuZGVmYXVsdFN0YXQsXG4gICAgfSkpO1xuICB9KTtcblxuICAvLyBUaGVuIGNvbWJpbmUgdGhlIGRpbWVuc2lvbnMgZm9yIHRoZSBzYW1lIG1ldHJpY3MgaW50byBhIHNpbmdsZSBsaXN0XG4gIHJldHVybiBncm91cEJ5KG1ldHJpY3NXaXRoRHVwbGljYXRlcywgbSA9PiBgJHttLm5hbWVzcGFjZX0vJHttLm1ldHJpY05hbWV9YCkubWFwKG1ldHJpY3MgPT4gKHtcbiAgICBuYW1lc3BhY2U6IG1ldHJpY3NbMF0ubmFtZXNwYWNlLFxuICAgIG1ldHJpY05hbWU6IG1ldHJpY3NbMF0ubWV0cmljTmFtZSxcbiAgICBkZWZhdWx0U3RhdDogbWV0cmljc1swXS5kZWZhdWx0U3RhdCxcbiAgICBkaW1lbnNpb25zOiBBcnJheS5mcm9tKGRlZHVwZVN0cmluZ0xpc3RzKG1ldHJpY3MubWFwKG0gPT4gbS5kaW1lbnNpb25zKSkpIGFzIGFueSxcbiAgfSkpO1xufVxuXG50eXBlIENhbm5lZE1ldHJpY3NJbmRleCA9IFJlY29yZDxzdHJpbmcsIE1ldHJpY1RlbXBsYXRlW10+O1xuXG5sZXQgY2FubmVkTWV0cmljc0NhY2hlOiBDYW5uZWRNZXRyaWNzSW5kZXggfCB1bmRlZmluZWQ7XG5cbi8qKlxuICogTG9hZCB0aGUgY2FubmVkIG1ldHJpY3MgZmlsZSBhbmQgcHJvY2VzcyBpdCBpbnRvIGFuIGluZGV4LCBncm91cGVkIGJ5IHNlcnZpY2UgbmFtZXNwYWNlXG4gKi9cbmZ1bmN0aW9uIGNhbm5lZE1ldHJpY3NJbmRleCgpIHtcbiAgaWYgKGNhbm5lZE1ldHJpY3NDYWNoZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgY2FubmVkTWV0cmljc0NhY2hlID0ge307XG4gICAgZm9yIChjb25zdCBncm91cCBvZiBsb2FkQ2FubmVkTWV0cmljc0ZpbGUoKSkge1xuICAgICAgZm9yIChjb25zdCBtZXRyaWNUZW1wbGF0ZSBvZiBncm91cC5tZXRyaWNUZW1wbGF0ZXMpIHtcbiAgICAgICAgY29uc3QgW2F3cywgc2VydmljZV0gPSBtZXRyaWNUZW1wbGF0ZS5yZXNvdXJjZVR5cGUuc3BsaXQoJzo6Jyk7XG4gICAgICAgIGNvbnN0IHNlcnZpY2VLZXkgPSBbYXdzLCBzZXJ2aWNlXS5qb2luKCc6OicpO1xuICAgICAgICAoY2FubmVkTWV0cmljc0NhY2hlW3NlcnZpY2VLZXldID8/IChjYW5uZWRNZXRyaWNzQ2FjaGVbc2VydmljZUtleV0gPSBbXSkpLnB1c2gobWV0cmljVGVtcGxhdGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gY2FubmVkTWV0cmljc0NhY2hlO1xufVxuXG5mdW5jdGlvbiBmbGF0TWFwPEEsIEI+KHhzOiBBW10sIGZuOiAoeDogQSkgPT4gQltdKTogQltdIHtcbiAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5jb25jYXQuYXBwbHkoW10sIHhzLm1hcChmbikpO1xufVxuXG5mdW5jdGlvbiBncm91cEJ5PEE+KHhzOiBBW10sIGtleUZuOiAoeDogQSkgPT4gc3RyaW5nKTogQXJyYXk8Tm9uRW1wdHlBcnJheTxBPj4ge1xuICBjb25zdCBvYmo6IFJlY29yZDxzdHJpbmcsIE5vbkVtcHR5QXJyYXk8QT4+ID0ge307XG4gIGZvciAoY29uc3QgeCBvZiB4cykge1xuICAgIGNvbnN0IGtleSA9IGtleUZuKHgpO1xuICAgIGlmIChrZXkgaW4gb2JqKSB7XG4gICAgICBvYmpba2V5XS5wdXNoKHgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvYmpba2V5XSA9IFt4XTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIE9iamVjdC52YWx1ZXMob2JqKTtcbn1cblxuZnVuY3Rpb24qIGRlZHVwZVN0cmluZ0xpc3RzKHhzOiBzdHJpbmdbXVtdKTogSXRlcmFibGVJdGVyYXRvcjxzdHJpbmdbXT4ge1xuICBjb25zdCBzZWVuID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIGZvciAoY29uc3QgeCBvZiB4cykge1xuICAgIHguc29ydCgpO1xuICAgIGNvbnN0IGtleSA9IGAke3guam9pbignLCcpfWA7XG4gICAgaWYgKCFzZWVuLmhhcyhrZXkpKSB7XG4gICAgICB5aWVsZCB4O1xuICAgIH1cbiAgICBzZWVuLmFkZChrZXkpO1xuICB9XG59Il19
+
+/***/ }),
+
+/***/ 59859:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.loadCannedMetricsFile = void 0;
+/**
+ * Get the canned metrics source file
+ */
+function loadCannedMetricsFile() {
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
+ return __nccwpck_require__(33522);
+}
+exports.loadCannedMetricsFile = loadCannedMetricsFile;
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FubmVkLW1ldHJpY3Mtc2NoZW1hLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY2FubmVkLW1ldHJpY3Mtc2NoZW1hLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBOztHQUVHO0FBQ0gsU0FBZ0IscUJBQXFCO0lBQ25DLGlFQUFpRTtJQUNqRSxPQUFPLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0FBQ3BDLENBQUM7QUFIRCxzREFHQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2V0IHRoZSBjYW5uZWQgbWV0cmljcyBzb3VyY2UgZmlsZVxuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZENhbm5lZE1ldHJpY3NGaWxlKCk6IENhbm5lZE1ldHJpY3NGaWxlIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1yZXF1aXJlLWltcG9ydHNcbiAgcmV0dXJuIHJlcXVpcmUoJy4vc2VydmljZXMuanNvbicpO1xufVxuXG4vKipcbiAqIFNjaGVtYSBkZWZpbml0aW9ucyBmb3IgdGhlIGFjY29tcGFueWluZyBmaWxlIFwic2VydmljZXMuanNvblwiLlxuICovXG5leHBvcnQgdHlwZSBDYW5uZWRNZXRyaWNzRmlsZSA9IE1ldHJpY0luZm9Hcm91cFtdO1xuXG5leHBvcnQgaW50ZXJmYWNlIE1ldHJpY0luZm9Hcm91cCB7XG4gIC8qKlxuICAgKiBMaXN0IG9mIG1ldHJpYyB0ZW1wbGF0ZXNcbiAgICovXG4gIHJlYWRvbmx5IG1ldHJpY1RlbXBsYXRlczogTWV0cmljVGVtcGxhdGVbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNZXRyaWNUZW1wbGF0ZSB7XG4gIC8qKlxuICAgKiBDbG91ZEZvcm1hdGlvbiByZXNvdXJjZSBuYW1lXG4gICAqL1xuICByZWFkb25seSByZXNvdXJjZVR5cGU6IHN0cmluZztcblxuICAvKipcbiAgICogTWV0cmljIG5hbWVzcGFjZVxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZXNwYWNlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFNldCBvZiBkaW1lbnNpb25zIGZvciB0aGlzIHNldCBvZiBtZXRyaWNzXG4gICAqL1xuICByZWFkb25seSBkaW1lbnNpb25zOiBEaW1lbnNpb25bXTtcblxuICAvKipcbiAgICogU2V0IG9mIG1ldHJpY3MgdGhlc2UgZGltZW5zaW9ucyBhcHBseSB0b1xuICAgKi9cbiAgcmVhZG9ubHkgbWV0cmljczogTWV0cmljW107XG59XG5cbi8qKlxuICogRGltZW5zaW9uIGZvciB0aGlzIHNldCBvZiBtZXRyaWMgdGVtcGxhdGVzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGltZW5zaW9uIHtcbiAgLyoqXG4gICAqIE5hbWUgb2YgdGhlIGRpbWVuc2lvblxuICAgKi9cbiAgcmVhZG9ubHkgZGltZW5zaW9uTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIHBvdGVudGlhbCBmaXhlZCB2YWx1ZSBmb3IgdGhpcyBkaW1lbnNpb25cbiAgICpcbiAgICogKEN1cnJlbnRseSB1bnVzZWQgYnkgdGhlIHNwZWMgcmVhZGVyLCBidXQgY291bGQgYmUgdXNlZClcbiAgICovXG4gIHJlYWRvbmx5IGRpbWVuc2lvblZhbHVlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgZGVzY3JpcHRpb24gb2YgYW4gYXZhaWxhYmxlIG1ldHJpY1xuICovXG5leHBvcnQgaW50ZXJmYWNlIE1ldHJpYyB7XG4gIC8qKlxuICAgKiBOYW1lIG9mIHRoZSBtZXRyaWNcbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogRGVmYXVsdCAoc3VnZ2VzdGVkKSBzdGF0aXN0aWMgZm9yIHRoaXMgbWV0cmljXG4gICAqL1xuICByZWFkb25seSBkZWZhdWx0U3RhdDogc3RyaW5nO1xufSJdfQ==
+
+/***/ }),
+
+/***/ 72665:
+/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
+
+function __ncc_wildcard$0 (arg) {
+ if (arg === "AWS_EC2_VPNConnection") return __nccwpck_require__(3102);
+ else if (arg === "AWS_Lambda_Function") return __nccwpck_require__(15278);
+ else if (arg === "AWS_RDS_DBCluster") return __nccwpck_require__(46602);
+ else if (arg === "AWS_RDS_DBInstance") return __nccwpck_require__(48781);
+ else if (arg === "AWS_SNS_Topic") return __nccwpck_require__(49064);
+ else if (arg === "AWS_SQS_Queue") return __nccwpck_require__(27873);
+}
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ var desc = Object.getOwnPropertyDescriptor(m, k);
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+ desc = { enumerable: true, get: function() { return m[k]; } };
+ }
+ Object.defineProperty(o, k2, desc);
+}) : (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ o[k2] = m[k];
+}));
+var __exportStar = (this && this.__exportStar) || function(m, exports) {
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
+};
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.scrutinizableResourceTypes = exports.scrutinizablePropertyNames = exports.filteredSpecification = exports.namespaces = exports.resourceTypes = exports.propertySpecification = exports.cfnLintAnnotations = exports.resourceAugmentation = exports.typeDocs = exports.resourceSpecification = exports.docs = exports.specification = exports.schema = void 0;
+const crypto = __nccwpck_require__(6113);
+const schema = __nccwpck_require__(23841);
+exports.schema = schema;
+const schema_1 = __nccwpck_require__(23841);
+__exportStar(__nccwpck_require__(78694), exports);
+/**
+ * The complete AWS CloudFormation Resource specification, having any CDK patches and enhancements included in it.
+ */
+function specification() {
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
+ const spec = __nccwpck_require__(14081);
+ // Modify spec in place, remove complex attributes
+ for (const resource of Object.values(spec.ResourceTypes)) {
+ resource.Attributes = Object.fromEntries(Object.entries(resource.Attributes ?? [])
+ .filter(([_, attr]) => (0, schema_1.isPrimitiveAttribute)(attr) || (0, schema_1.isListAttribute)(attr) || (0, schema_1.isMapAttribute)(attr)));
+ }
+ return spec;
+}
+exports.specification = specification;
+/**
+ * The complete AWS CloudFormation Resource specification, having any CDK patches and enhancements included in it.
+ */
+function docs() {
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
+ return __nccwpck_require__(46510);
+}
+exports.docs = docs;
+/**
+ * Return the resource specification for the given typename
+ *
+ * Validates that the resource exists. If you don't want this validating behavior, read from
+ * specification() directly.
+ */
+function resourceSpecification(typeName) {
+ const ret = specification().ResourceTypes[typeName];
+ if (!ret) {
+ throw new Error(`No such resource type: ${typeName}`);
+ }
+ return ret;
+}
+exports.resourceSpecification = resourceSpecification;
+/**
+ * Return documentation for the given type
+ */
+function typeDocs(resourceName, propertyTypeName) {
+ const key = propertyTypeName ? `${resourceName}.${propertyTypeName}` : resourceName;
+ const ret = docs().Types[key];
+ if (!ret) {
+ return {
+ description: '',
+ properties: {},
+ };
+ }
+ return ret;
+}
+exports.typeDocs = typeDocs;
+/**
+ * Get the resource augmentations for a given type
+ */
+function resourceAugmentation(typeName) {
+ const fileName = typeName.replace(/::/g, '_');
+ try {
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
+ return __ncc_wildcard$0(fileName);
+ }
+ catch {
+ return {};
+ }
+}
+exports.resourceAugmentation = resourceAugmentation;
+/**
+ * Get the resource augmentations for a given type
+ */
+function cfnLintAnnotations(typeName) {
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
+ const allAnnotations = __nccwpck_require__(21507);
+ return {
+ stateful: !!allAnnotations.StatefulResources.ResourceTypes[typeName],
+ mustBeEmptyToDelete: allAnnotations.StatefulResources.ResourceTypes[typeName]?.DeleteRequiresEmptyResource ?? false,
+ };
+}
+exports.cfnLintAnnotations = cfnLintAnnotations;
+/**
+ * Return the property specification for the given resource's property
+ */
+function propertySpecification(typeName, propertyName) {
+ const ret = resourceSpecification(typeName).Properties[propertyName];
+ if (!ret) {
+ throw new Error(`Resource ${typeName} has no property: ${propertyName}`);
+ }
+ return ret;
+}
+exports.propertySpecification = propertySpecification;
+/**
+ * The list of resource type names defined in the ``specification``.
+ */
+function resourceTypes() {
+ return Object.keys(specification().ResourceTypes);
+}
+exports.resourceTypes = resourceTypes;
+/**
+ * The list of namespaces defined in the ``specification``, that is resource name prefixes down to the second ``::``.
+ */
+function namespaces() {
+ return Array.from(new Set(resourceTypes().map(n => n.split('::', 2).join('::'))));
+}
+exports.namespaces = namespaces;
+/**
+ * Obtain a filtered version of the AWS CloudFormation specification.
+ *
+ * @param filter the predicate to be used in order to filter which resource types from the ``Specification`` to extract.
+ * When passed as a ``string``, only the specified resource type will be extracted. When passed as a
+ * ``RegExp``, all matching resource types will be extracted. When passed as a ``function``, all resource
+ * types for which the function returned ``true`` will be extracted.
+ *
+ * @return a coherent sub-set of the AWS CloudFormation Resource specification, including all property types related
+ * to the selected resource types.
+ */
+function filteredSpecification(filter) {
+ const spec = specification();
+ const result = { ResourceTypes: {}, PropertyTypes: {}, Fingerprint: spec.Fingerprint };
+ const predicate = makePredicate(filter);
+ for (const type of resourceTypes()) {
+ if (!predicate(type)) {
+ continue;
+ }
+ result.ResourceTypes[type] = spec.ResourceTypes[type];
+ const prefix = `${type}.`;
+ for (const propType of Object.keys(spec.PropertyTypes).filter(n => n.startsWith(prefix))) {
+ result.PropertyTypes[propType] = spec.PropertyTypes[propType];
+ }
+ }
+ result.Fingerprint = crypto.createHash('sha256').update(JSON.stringify(result)).digest('base64');
+ return result;
+}
+exports.filteredSpecification = filteredSpecification;
+/**
+ * Creates a predicate function from a given filter.
+ *
+ * @param filter when provided as a ``string``, performs an exact match comparison.
+ * when provided as a ``RegExp``, performs uses ``str.match(RegExp)``.
+ * when provided as a ``function``, use the function as-is.
+ *
+ * @returns a predicate function.
+ */
+function makePredicate(filter) {
+ if (typeof filter === 'string') {
+ return s => s === filter;
+ }
+ else if (typeof filter === 'function') {
+ return filter;
+ }
+ else {
+ return s => s.match(filter) != null;
+ }
+}
+/**
+ * Return the properties of the given type that require the given scrutiny type
+ */
+function scrutinizablePropertyNames(resourceType, scrutinyTypes) {
+ const impl = specification().ResourceTypes[resourceType];
+ if (!impl) {
+ return [];
+ }
+ const ret = new Array();
+ for (const [propertyName, propertySpec] of Object.entries(impl.Properties || {})) {
+ if (scrutinyTypes.includes(propertySpec.ScrutinyType || schema.PropertyScrutinyType.None)) {
+ ret.push(propertyName);
+ }
+ }
+ return ret;
+}
+exports.scrutinizablePropertyNames = scrutinizablePropertyNames;
+/**
+ * Return the names of the resource types that need to be subjected to additional scrutiny
+ */
+function scrutinizableResourceTypes(scrutinyTypes) {
+ const ret = new Array();
+ for (const [resourceType, resourceSpec] of Object.entries(specification().ResourceTypes)) {
+ if (scrutinyTypes.includes(resourceSpec.ScrutinyType || schema.ResourceScrutinyType.None)) {
+ ret.push(resourceType);
+ }
+ }
+ return ret;
+}
+exports.scrutinizableResourceTypes = scrutinizableResourceTypes;
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGlDQUFpQztBQUVqQyxtQ0FBbUM7QUFFMUIsd0JBQU07QUFEZixxQ0FBaUY7QUFFakYsbURBQWlDO0FBRWpDOztHQUVHO0FBQ0gsU0FBZ0IsYUFBYTtJQUMzQixpRUFBaUU7SUFDakUsTUFBTSxJQUFJLEdBQXlCLE9BQU8sQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO0lBRXpFLGtEQUFrRDtJQUNsRCxLQUFLLE1BQU0sUUFBUSxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFO1FBQ3hELFFBQVEsQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxVQUFVLElBQUksRUFBRSxDQUFDO2FBQy9FLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFBLDZCQUFvQixFQUFDLElBQUksQ0FBQyxJQUFJLElBQUEsd0JBQWUsRUFBQyxJQUFJLENBQUMsSUFBSSxJQUFBLHVCQUFjLEVBQUMsSUFBSSxDQUFDLENBQUUsQ0FBQyxDQUFDO0tBQ3pHO0lBRUQsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBWEQsc0NBV0M7QUFFRDs7R0FFRztBQUNILFNBQWdCLElBQUk7SUFDbEIsaUVBQWlFO0lBQ2pFLE9BQU8sT0FBTyxDQUFDLHVCQUF1QixDQUFDLENBQUM7QUFDMUMsQ0FBQztBQUhELG9CQUdDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFnQixxQkFBcUIsQ0FBQyxRQUFnQjtJQUNwRCxNQUFNLEdBQUcsR0FBRyxhQUFhLEVBQUUsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDcEQsSUFBSSxDQUFDLEdBQUcsRUFBRTtRQUNSLE1BQU0sSUFBSSxL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IHsgQ2ZuTGludEZpbGVTY2hlbWEgfSBmcm9tICcuL19wcml2YXRlX3NjaGVtYS9jZm4tbGludCc7XG5pbXBvcnQgKiBhcyBzY2hlbWEgZnJvbSAnLi9zY2hlbWEnO1xuaW1wb3J0IHsgaXNQcmltaXRpdmVBdHRyaWJ1dGUsIGlzTGlzdEF0dHJpYnV0ZSwgaXNNYXBBdHRyaWJ1dGUgfSBmcm9tICcuL3NjaGVtYSc7XG5leHBvcnQgeyBzY2hlbWEgfTtcbmV4cG9ydCAqIGZyb20gJy4vY2FubmVkLW1ldHJpY3MnO1xuXG4vKipcbiAqIFRoZSBjb21wbGV0ZSBBV1MgQ2xvdWRGb3JtYXRpb24gUmVzb3VyY2Ugc3BlY2lmaWNhdGlvbiwgaGF2aW5nIGFueSBDREsgcGF0Y2hlcyBhbmQgZW5oYW5jZW1lbnRzIGluY2x1ZGVkIGluIGl0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gc3BlY2lmaWNhdGlvbigpOiBzY2hlbWEuU3BlY2lmaWNhdGlvbiB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVxdWlyZS1pbXBvcnRzXG4gIGNvbnN0IHNwZWM6IHNjaGVtYS5TcGVjaWZpY2F0aW9uID0gcmVxdWlyZSgnLi4vc3BlYy9zcGVjaWZpY2F0aW9uLmpzb24nKTtcblxuICAvLyBNb2RpZnkgc3BlYyBpbiBwbGFjZSwgcmVtb3ZlIGNvbXBsZXggYXR0cmlidXRlc1xuICBmb3IgKGNvbnN0IHJlc291cmNlIG9mIE9iamVjdC52YWx1ZXMoc3BlYy5SZXNvdXJjZVR5cGVzKSkge1xuICAgIHJlc291cmNlLkF0dHJpYnV0ZXMgPSBPYmplY3QuZnJvbUVudHJpZXMoT2JqZWN0LmVudHJpZXMocmVzb3VyY2UuQXR0cmlidXRlcyA/PyBbXSlcbiAgICAgIC5maWx0ZXIoKFtfLCBhdHRyXSkgPT4gaXNQcmltaXRpdmVBdHRyaWJ1dGUoYXR0cikgfHwgaXNMaXN0QXR0cmlidXRlKGF0dHIpIHx8IGlzTWFwQXR0cmlidXRlKGF0dHIpICkpO1xuICB9XG5cbiAgcmV0dXJuIHNwZWM7XG59XG5cbi8qKlxuICogVGhlIGNvbXBsZXRlIEFXUyBDbG91ZEZvcm1hdGlvbiBSZXNvdXJjZSBzcGVjaWZpY2F0aW9uLCBoYXZpbmcgYW55IENESyBwYXRjaGVzIGFuZCBlbmhhbmNlbWVudHMgaW5jbHVkZWQgaW4gaXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkb2NzKCk6IHNjaGVtYS5DbG91ZEZvcm1hdGlvbkRvY3NGaWxlIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1yZXF1aXJlLWltcG9ydHNcbiAgcmV0dXJuIHJlcXVpcmUoJy4uL3NwZWMvY2ZuLWRvY3MuanNvbicpO1xufVxuXG4vKipcbiAqIFJldHVybiB0aGUgcmVzb3VyY2Ugc3BlY2lmaWNhdGlvbiBmb3IgdGhlIGdpdmVuIHR5cGVuYW1lXG4gKlxuICogVmFsaWRhdGVzIHRoYXQgdGhlIHJlc291cmNlIGV4aXN0cy4gSWYgeW91IGRvbid0IHdhbnQgdGhpcyB2YWxpZGF0aW5nIGJlaGF2aW9yLCByZWFkIGZyb21cbiAqIHNwZWNpZmljYXRpb24oKSBkaXJlY3RseS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc291cmNlU3BlY2lmaWNhdGlvbih0eXBlTmFtZTogc3RyaW5nKTogc2NoZW1hLlJlc291cmNlVHlwZSB7XG4gIGNvbnN0IHJldCA9IHNwZWNpZmljYXRpb24oKS5SZXNvdXJjZVR5cGVzW3R5cGVOYW1lXTtcbiAgaWYgKCFyZXQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIHN1Y2ggcmVzb3VyY2UgdHlwZTogJHt0eXBlTmFtZX1gKTtcbiAgfVxuICByZXR1cm4gcmV0O1xufVxuXG4vKipcbiAqIFJldHVybiBkb2N1bWVudGF0aW9uIGZvciB0aGUgZ2l2ZW4gdHlwZVxuICovXG5leHBvcnQgZnVuY3Rpb24gdHlwZURvY3MocmVzb3VyY2VOYW1lOiBzdHJpbmcsIHByb3BlcnR5VHlwZU5hbWU/OiBzdHJpbmcpOiBzY2hlbWEuQ2xvdWRGb3JtYXRpb25UeXBlRG9jcyB7XG4gIGNvbnN0IGtleSA9IHByb3BlcnR5VHlwZU5hbWUgPyBgJHtyZXNvdXJjZU5hbWV9LiR7cHJvcGVydHlUeXBlTmFtZX1gIDogcmVzb3VyY2VOYW1lO1xuICBjb25zdCByZXQgPSBkb2NzKCkuVHlwZXNba2V5XTtcbiAgaWYgKCFyZXQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZGVzY3JpcHRpb246ICcnLFxuICAgICAgcHJvcGVydGllczoge30sXG4gICAgfTtcbiAgfVxuICByZXR1cm4gcmV0O1xufVxuXG4vKipcbiAqIEdldCB0aGUgcmVzb3VyY2UgYXVnbWVudGF0aW9ucyBmb3IgYSBnaXZlbiB0eXBlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvdXJjZUF1Z21lbnRhdGlvbih0eXBlTmFtZTogc3RyaW5nKTogc2NoZW1hLlJlc291cmNlQXVnbWVudGF0aW9uIHtcbiAgY29uc3QgZmlsZU5hbWUgPSB0eXBlTmFtZS5yZXBsYWNlKC86Oi9nLCAnXycpO1xuICB0cnkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVxdWlyZS1pbXBvcnRzXG4gICAgcmV0dXJuIHJlcXVpcmUoYC4vYXVnbWVudGF0aW9ucy8ke2ZpbGVOYW1lfS5qc29uYCk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB7fTtcbiAgfVxufVxuXG4vKipcbiAqIEdldCB0aGUgcmVzb3VyY2UgYXVnbWVudGF0aW9ucyBmb3IgYSBnaXZlbiB0eXBlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjZm5MaW50QW5ub3RhdGlvbnModHlwZU5hbWU6IHN0cmluZyk6IHNjaGVtYS5DZm5MaW50UmVzb3VyY2VBbm5vdGF0aW9ucyB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVxdWlyZS1pbXBvcnRzXG4gIGNvbnN0IGFsbEFubm90YXRpb25zOiBDZm5MaW50RmlsZVNjaGVtYSA9IHJlcXVpcmUoJy4uL3NwZWMvY2ZuLWxpbnQuanNvbicpO1xuXG4gIHJldHVybiB7XG4gICAgc3RhdGVmdWw6ICEhYWxsQW5ub3RhdGlvbnMuU3RhdGVmdWxSZXNvdXJjZXMuUmVzb3VyY2VUeXBlc1t0eXBlTmFtZV0sXG4gICAgbXVzdEJlRW1wdHlUb0RlbGV0ZTogYWxsQW5ub3RhdGlvbnMuU3RhdGVmdWxSZXNvdXJjZXMuUmVzb3VyY2VUeXBlc1t0eXBlTmFtZV0/LkRlbGV0ZVJlcXVpcmVzRW1wdHlSZXNvdXJjZSA/PyBmYWxzZSxcbiAgfTtcbn1cblxuLyoqXG4gKiBSZXR1cm4gdGhlIHByb3BlcnR5IHNwZWNpZmljYXRpb24gZm9yIHRoZSBnaXZlbiByZXNvdXJjZSdzIHByb3BlcnR5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0eVNwZWNpZmljYXRpb24odHlwZU5hbWU6IHN0cmluZywgcHJvcGVydHlOYW1lOiBzdHJpbmcpOiBzY2hlbWEuUHJvcGVydHkge1xuICBjb25zdCByZXQgPSByZXNvdXJjZVNwZWNpZmljYXRpb24odHlwZU5hbWUpLlByb3BlcnRpZXMhW3Byb3BlcnR5TmFtZV07XG4gIGlmICghcmV0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBSZXNvdXJjZSAke3R5cGVOYW1lfSBoYXMgbm8gcHJvcGVydHk6ICR7cHJvcGVydHlOYW1lfWApO1xuICB9XG4gIHJldHVybiByZXQ7XG59XG5cbi8qKlxuICogVGhlIGxpc3Qgb2YgcmVzb3VyY2UgdHlwZSBuYW1lcyBkZWZpbmVkIGluIHRoZSBgYHNwZWNpZmljYXRpb25gYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc291cmNlVHlwZXMoKSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhzcGVjaWZpY2F0aW9uKCkuUmVzb3VyY2VUeXBlcyk7XG59XG5cbi8qKlxuICogVGhlIGxpc3Qgb2YgbmFtZXNwYWNlcyBkZWZpbmVkIGluIHRoZSBgYHNwZWNpZmljYXRpb25gYCwgdGhhdCBpcyByZXNvdXJjZSBuYW1lIHByZWZpeGVzIGRvd24gdG8gdGhlIHNlY29uZCBgYDo6YGAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBuYW1lc3BhY2VzKCkge1xuICByZXR1cm4gQXJyYXkuZnJvbShuZXcgU2V0KHJlc291cmNlVHlwZXMoKS5tYXAobiA9PiBuLnNwbGl0KCc6OicsIDIpLmpvaW4oJzo6JykpKSk7XG59XG5cbi8qKlxuICogT2J0YWluIGEgZmlsdGVyZWQgdmVyc2lvbiBvZiB0aGUgQVdTIENsb3VkRm9ybWF0aW9uIHNwZWNpZmljYXRpb24uXG4gKlxuICogQHBhcmFtIGZpbHRlciB0aGUgcHJlZGljYXRlIHRvIGJlIHVzZWQgaW4gb3JkZXIgdG8gZmlsdGVyIHdoaWNoIHJlc291cmNlIHR5cGVzIGZyb20gdGhlIGBgU3BlY2lmaWNhdGlvbmBgIHRvIGV4dHJhY3QuXG4gKiAgICAgICAgIFdoZW4gcGFzc2VkIGFzIGEgYGBzdHJpbmdgYCwgb25seSB0aGUgc3BlY2lmaWVkIHJlc291cmNlIHR5cGUgd2lsbCBiZSBleHRyYWN0ZWQuIFdoZW4gcGFzc2VkIGFzIGFcbiAqICAgICAgICAgYGBSZWdFeHBgYCwgYWxsIG1hdGNoaW5nIHJlc291cmNlIHR5cGVzIHdpbGwgYmUgZXh0cmFjdGVkLiBXaGVuIHBhc3NlZCBhcyBhIGBgZnVuY3Rpb25gYCwgYWxsIHJlc291cmNlXG4gKiAgICAgICAgIHR5cGVzIGZvciB3aGljaCB0aGUgZnVuY3Rpb24gcmV0dXJuZWQgYGB0cnVlYGAgd2lsbCBiZSBleHRyYWN0ZWQuXG4gKlxuICogQHJldHVybiBhIGNvaGVyZW50IHN1Yi1zZXQgb2YgdGhlIEFXUyBDbG91ZEZvcm1hdGlvbiBSZXNvdXJjZSBzcGVjaWZpY2F0aW9uLCBpbmNsdWRpbmcgYWxsIHByb3BlcnR5IHR5cGVzIHJlbGF0ZWRcbiAqICAgICB0byB0aGUgc2VsZWN0ZWQgcmVzb3VyY2UgdHlwZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXJlZFNwZWNpZmljYXRpb24oZmlsdGVyOiBzdHJpbmcgfCBSZWdFeHAgfCBGaWx0ZXIpOiBzY2hlbWEuU3BlY2lmaWNhdGlvbiB7XG4gIGNvbnN0IHNwZWMgPSBzcGVjaWZpY2F0aW9uKCk7XG5cbiAgY29uc3QgcmVzdWx0OiBzY2hlbWEuU3BlY2lmaWNhdGlvbiA9IHsgUmVzb3VyY2VUeXBlczoge30sIFByb3BlcnR5VHlwZXM6IHt9LCBGaW5nZXJwcmludDogc3BlYy5GaW5nZXJwcmludCB9O1xuICBjb25zdCBwcmVkaWNhdGU6IEZpbHRlciA9IG1ha2VQcmVkaWNhdGUoZmlsdGVyKTtcbiAgZm9yIChjb25zdCB0eXBlIG9mIHJlc291cmNlVHlwZXMoKSkge1xuICAgIGlmICghcHJlZGljYXRlKHR5cGUpKSB7IGNvbnRpbnVlOyB9XG4gICAgcmVzdWx0LlJlc291cmNlVHlwZXNbdHlwZV0gPSBzcGVjLlJlc291cmNlVHlwZXNbdHlwZV07XG4gICAgY29uc3QgcHJlZml4ID0gYCR7dHlwZX0uYDtcbiAgICBmb3IgKGNvbnN0IHByb3BUeXBlIG9mIE9iamVjdC5rZXlzKHNwZWMuUHJvcGVydHlUeXBlcyEpLmZpbHRlcihuID0+IG4uc3RhcnRzV2l0aChwcmVmaXgpKSkge1xuICAgICAgcmVzdWx0LlByb3BlcnR5VHlwZXNbcHJvcFR5cGVdID0gc3BlYy5Qcm9wZXJ0eVR5cGVzIVtwcm9wVHlwZV07XG4gICAgfVxuICB9XG4gIHJlc3VsdC5GaW5nZXJwcmludCA9IGNyeXB0by5jcmVhdGVIYXNoKCdzaGEyNTYnKS51cGRhdGUoSlNPTi5zdHJpbmdpZnkocmVzdWx0KSkuZGlnZXN0KCdiYXNlNjQnKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IHR5cGUgRmlsdGVyID0gKG5hbWU6IHN0cmluZykgPT4gYm9vbGVhbjtcblxuLyoqXG4gKiBDcmVhdGVzIGEgcHJlZGljYXRlIGZ1bmN0aW9uIGZyb20gYSBnaXZlbiBmaWx0ZXIuXG4gKlxuICogQHBhcmFtIGZpbHRlciB3aGVuIHByb3ZpZGVkIGFzIGEgYGBzdHJpbmdgYCwgcGVyZm9ybXMgYW4gZXhhY3QgbWF0Y2ggY29tcGFyaXNvbi5cbiAqICAgICAgICAgd2hlbiBwcm92aWRlZCBhcyBhIGBgUmVnRXhwYGAsIHBlcmZvcm1zIHVzZXMgYGBzdHIubWF0Y2goUmVnRXhwKWBgLlxuICogICAgICAgICB3aGVuIHByb3ZpZGVkIGFzIGEgYGBmdW5jdGlvbmBgLCB1c2UgdGhlIGZ1bmN0aW9uIGFzLWlzLlxuICpcbiAqIEByZXR1cm5zIGEgcHJlZGljYXRlIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBtYWtlUHJlZGljYXRlKGZpbHRlcjogc3RyaW5nIHwgUmVnRXhwIHwgRmlsdGVyKTogRmlsdGVyIHtcbiAgaWYgKHR5cGVvZiBmaWx0ZXIgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHMgPT4gcyA9PT0gZmlsdGVyO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBmaWx0ZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gZmlsdGVyIGFzIEZpbHRlcjtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gcyA9PiBzLm1hdGNoKGZpbHRlcikgIT0gbnVsbDtcbiAgfVxufVxuXG4vKipcbiAqIFJldHVybiB0aGUgcHJvcGVydGllcyBvZiB0aGUgZ2l2ZW4gdHlwZSB0aGF0IHJlcXVpcmUgdGhlIGdpdmVuIHNjcnV0aW55IHR5cGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNjcnV0aW5pemFibGVQcm9wZXJ0eU5hbWVzKHJlc291cmNlVHlwZTogc3RyaW5nLCBzY3J1dGlueVR5cGVzOiBzY2hlbWEuUHJvcGVydHlTY3J1dGlueVR5cGVbXSk6IHN0cmluZ1tdIHtcbiAgY29uc3QgaW1wbCA9IHNwZWNpZmljYXRpb24oKS5SZXNvdXJjZVR5cGVzW3Jlc291cmNlVHlwZV07XG4gIGlmICghaW1wbCkgeyByZXR1cm4gW107IH1cblxuICBjb25zdCByZXQgPSBuZXcgQXJyYXk8c3RyaW5nPigpO1xuXG4gIGZvciAoY29uc3QgW3Byb3BlcnR5TmFtZSwgcHJvcGVydHlTcGVjXSBvZiBPYmplY3QuZW50cmllcyhpbXBsLlByb3BlcnRpZXMgfHwge30pKSB7XG4gICAgaWYgKHNjcnV0aW55VHlwZXMuaW5jbHVkZXMocHJvcGVydHlTcGVjLlNjcnV0aW55VHlwZSB8fCBzY2hlbWEuUHJvcGVydHlTY3J1dGlueVR5cGUuTm9uZSkpIHtcbiAgICAgIHJldC5wdXNoKHByb3BlcnR5TmFtZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJldDtcbn1cblxuLyoqXG4gKiBSZXR1cm4gdGhlIG5hbWVzIG9mIHRoZSByZXNvdXJjZSB0eXBlcyB0aGF0IG5lZWQgdG8gYmUgc3ViamVjdGVkIHRvIGFkZGl0aW9uYWwgc2NydXRpbnlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNjcnV0aW5pemFibGVSZXNvdXJjZVR5cGVzKHNjcnV0aW55VHlwZXM6IHNjaGVtYS5SZXNvdXJjZVNjcnV0aW55VHlwZVtdKTogc3RyaW5nW10ge1xuICBjb25zdCByZXQgPSBuZXcgQXJyYXk8c3RyaW5nPigpO1xuICBmb3IgKGNvbnN0IFtyZXNvdXJjZVR5cGUsIHJlc291cmNlU3BlY10gb2YgT2JqZWN0LmVudHJpZXMoc3BlY2lmaWNhdGlvbigpLlJlc291cmNlVHlwZXMpKSB7XG4gICAgaWYgKHNjcnV0aW55VHlwZXMuaW5jbHVkZXMocmVzb3VyY2VTcGVjLlNjcnV0aW55VHlwZSB8fCBzY2hlbWEuUmVzb3VyY2VTY3J1dGlueVR5cGUuTm9uZSkpIHtcbiAgICAgIHJldC5wdXNoKHJlc291cmNlVHlwZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJldDtcbn1cbiJdfQ==
+
+/***/ }),
+
+/***/ 61733:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.MetricType = void 0;
+var MetricType;
+(function (MetricType) {
+ /**
+ * This metric measures an attribute of events
+ *
+ * It could be time, or request size, or similar. The default
+ * aggregate for this type of event is "Avg".
+ */
+ MetricType["Attrib"] = "attrib";
+ /**
+ * This metric is counting events.
+ *
+ * This means the metric "1" is emitted every time an event occurs.
+ * Only "Sum" is a meaningful aggregate of this type of metric.
+ */
+ MetricType["Count"] = "count";
+ /**
+ * This metric is emitting a size.
+ *
+ * The metric is not event-based, but measures some global ever-changing
+ * property. The most useful aggregate of this type of metric is "Max".
+ */
+ MetricType["Gauge"] = "gauge";
+})(MetricType || (exports.MetricType = MetricType = {}));
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVnbWVudGF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYXVnbWVudGF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQXdFQSxJQUFZLFVBd0JYO0FBeEJELFdBQVksVUFBVTtJQUNwQjs7Ozs7T0FLRztJQUNILCtCQUFpQixDQUFBO0lBRWpCOzs7OztPQUtHO0lBQ0gsNkJBQWUsQ0FBQTtJQUVmOzs7OztPQUtHO0lBQ0gsNkJBQWUsQ0FBQTtBQUNqQixDQUFDLEVBeEJXLFVBQVUsMEJBQVYsVUFBVSxRQXdCckIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEF1Z21lbnRhdGlvbnMgZm9yIGEgQ2xvdWRGb3JtYXRpb24gcmVzb3VyY2UgdHlwZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc291cmNlQXVnbWVudGF0aW9uIHtcbiAgLyoqXG4gICAqIE1ldHJpYyBhdWdtZW50YXRpb25zIGZvciB0aGlzIHJlc291cmNlIHR5cGVcbiAgICovXG4gIG1ldHJpY3M/OiBSZXNvdXJjZU1ldHJpY0F1Z21lbnRhdGlvbnM7XG5cbiAgLyoqXG4gICAqIE9wdGlvbnMgZm9yIHRoaXMgcmVzb3VyY2UgYXVnbWVudGF0aW9uXG4gICAqXG4gICAqIEBkZWZhdWx0IG5vIG9wdGlvbnNcbiAgICovXG4gIG9wdGlvbnM/OiBBdWdtZW50YXRpb25PcHRpb25zO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEF1Z21lbnRhdGlvbk9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGZpbGUgY29udGFpbmluZyB0aGUgY2xhc3MgdG8gYmUgXCJhdWdtZW50ZWRcIi5cbiAgICpcbiAgICogQGRlZmF1bHQga2ViYWIgY2FzZWQgQ2xvdWRGb3JtYXRpb24gcmVzb3VyY2UgbmFtZSArICctYmFzZSdcbiAgICovXG4gIGNsYXNzRmlsZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGNsYXNzIHRvIGJlIFwiYXVnbWVudGVkXCIuXG4gICAqXG4gICAqIEBkZWZhdWx0IENsb3VkRm9ybWF0aW9uIHJlc291cmNlIG5hbWUgKyAnQmFzZSdcbiAgICovXG4gIGNsYXNzPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgZmlsZSBjb250YWluaW5nIHRoZSBpbnRlcmZhY2UgdG8gYmUgXCJhdWdtZW50ZWRcIi5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBzYW1lIGFzIGBgY2xhc3NGaWxlYGAuXG4gICAqL1xuICBpbnRlcmZhY2VGaWxlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgaW50ZXJmYWNlIHRvIGJlIFwiYXVnbWVudGVkXCIuXG4gICAqXG4gICAqIEBkZWZhdWx0ICdJJyArIENsb3VkRm9ybWF0aW9uIHJlc291cmNlIG5hbWVcbiAgICovXG4gIGludGVyZmFjZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZXNvdXJjZU1ldHJpY0F1Z21lbnRhdGlvbnMge1xuICBuYW1lc3BhY2U6IHN0cmluZztcbiAgZGltZW5zaW9uczoge1trZXk6IHN0cmluZ106IHN0cmluZ307XG4gIG1ldHJpY3M6IFJlc291cmNlTWV0cmljW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb3VyY2VNZXRyaWMge1xuICAvKipcbiAgICogVXBwZXJjYXNlLWZpcnN0IG1ldHJpYyBuYW1lXG4gICAqL1xuICBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIERvY3VtZW50YXRpb24gbGluZVxuICAgKi9cbiAgZG9jdW1lbnRhdGlvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoaXMgaXMgYW4gZXZlbiBjb3VudCAoMSBnZXRzIGVtaXR0ZWQgZXZlcnkgdGltZSBzb21ldGhpbmcgb2NjdXJzKVxuICAgKlxuICAgKiBAZGVmYXVsdCBNZXRyaWNUeXBlLkF0dHJpYlxuICAgKi9cbiAgdHlwZT86IE1ldHJpY1R5cGU7XG59XG5cbmV4cG9ydCBlbnVtIE1ldHJpY1R5cGUge1xuICAvKipcbiAgICogVGhpcyBtZXRyaWMgbWVhc3VyZXMgYW4gYXR0cmlidXRlIG9mIGV2ZW50c1xuICAgKlxuICAgKiBJdCBjb3VsZCBiZSB0aW1lLCBvciByZXF1ZXN0IHNpemUsIG9yIHNpbWlsYXIuIFRoZSBkZWZhdWx0XG4gICAqIGFnZ3JlZ2F0ZSBmb3IgdGhpcyB0eXBlIG9mIGV2ZW50IGlzIFwiQXZnXCIuXG4gICAqL1xuICBBdHRyaWIgPSAnYXR0cmliJyxcblxuICAvKipcbiAgICogVGhpcyBtZXRyaWMgaXMgY291bnRpbmcgZXZlbnRzLlxuICAgKlxuICAgKiBUaGlzIG1lYW5zIHRoZSBtZXRyaWMgXCIxXCIgaXMgZW1pdHRlZCBldmVyeSB0aW1lIGFuIGV2ZW50IG9jY3Vycy5cbiAgICogT25seSBcIlN1bVwiIGlzIGEgbWVhbmluZ2Z1bCBhZ2dyZWdhdGUgb2YgdGhpcyB0eXBlIG9mIG1ldHJpYy5cbiAgICovXG4gIENvdW50ID0gJ2NvdW50JyxcblxuICAvKipcbiAgICogVGhpcyBtZXRyaWMgaXMgZW1pdHRpbmcgYSBzaXplLlxuICAgKlxuICAgKiBUaGUgbWV0cmljIGlzIG5vdCBldmVudC1iYXNlZCwgYnV0IG1lYXN1cmVzIHNvbWUgZ2xvYmFsIGV2ZXItY2hhbmdpbmdcbiAgICogcHJvcGVydHkuIFRoZSBtb3N0IHVzZWZ1bCBhZ2dyZWdhdGUgb2YgdGhpcyB0eXBlIG9mIG1ldHJpYyBpcyBcIk1heFwiLlxuICAgKi9cbiAgR2F1Z2UgPSAnZ2F1Z2UnXG59XG4iXX0=
+
+/***/ }),
+
+/***/ 82294:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.isPrimitiveType = exports.PrimitiveType = void 0;
+var PrimitiveType;
+(function (PrimitiveType) {
+ PrimitiveType["String"] = "String";
+ PrimitiveType["Long"] = "Long";
+ PrimitiveType["Integer"] = "Integer";
+ PrimitiveType["Double"] = "Double";
+ PrimitiveType["Boolean"] = "Boolean";
+ PrimitiveType["Timestamp"] = "Timestamp";
+ PrimitiveType["Json"] = "Json";
+})(PrimitiveType || (exports.PrimitiveType = PrimitiveType = {}));
+function isPrimitiveType(str) {
+ switch (str) {
+ case PrimitiveType.String:
+ case PrimitiveType.Long:
+ case PrimitiveType.Integer:
+ case PrimitiveType.Double:
+ case PrimitiveType.Boolean:
+ case PrimitiveType.Timestamp:
+ case PrimitiveType.Json:
+ return true;
+ default:
+ return false;
+ }
+}
+exports.isPrimitiveType = isPrimitiveType;
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS10eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImJhc2UtdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBS0EsSUFBWSxhQVFYO0FBUkQsV0FBWSxhQUFhO0lBQ3ZCLGtDQUFpQixDQUFBO0lBQ2pCLDhCQUFhLENBQUE7SUFDYixvQ0FBbUIsQ0FBQTtJQUNuQixrQ0FBaUIsQ0FBQTtJQUNqQixvQ0FBbUIsQ0FBQTtJQUNuQix3Q0FBdUIsQ0FBQTtJQUN2Qiw4QkFBYSxDQUFBO0FBQ2YsQ0FBQyxFQVJXLGFBQWEsNkJBQWIsYUFBYSxRQVF4QjtBQUVELFNBQWdCLGVBQWUsQ0FBQyxHQUFXO0lBQ3pDLFFBQVEsR0FBRyxFQUFFO1FBQ1gsS0FBSyxhQUFhLENBQUMsTUFBTSxDQUFDO1FBQzFCLEtBQUssYUFBYSxDQUFDLElBQUksQ0FBQztRQUN4QixLQUFLLGFBQWEsQ0FBQyxPQUFPLENBQUM7UUFDM0IsS0FBSyxhQUFhLENBQUMsTUFBTSxDQUFDO1FBQzFCLEtBQUssYUFBYSxDQUFDLE9BQU8sQ0FBQztRQUMzQixLQUFLLGFBQWEsQ0FBQyxTQUFTLENBQUM7UUFDN0IsS0FBSyxhQUFhLENBQUMsSUFBSTtZQUNyQixPQUFPLElBQUksQ0FBQztRQUNkO1lBQ0UsT0FBTyxLQUFLLENBQUM7S0FDaEI7QUFDSCxDQUFDO0FBYkQsMENBYUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIERvY3VtZW50ZWQge1xuICAvKiogQSBsaW5rIHRvIHRoZSBBV1MgQ2xvdWRGb3JtYXRpb24gVXNlciBHdWlkZSB0aGF0IHByb3ZpZGVzIGluZm9ybWF0aW9ucyBhYm91dCB0aGUgZW50aXR5LiAqL1xuICBEb2N1bWVudGF0aW9uPzogc3RyaW5nO1xufVxuXG5leHBvcnQgZW51bSBQcmltaXRpdmVUeXBlIHtcbiAgU3RyaW5nID0gJ1N0cmluZycsXG4gIExvbmcgPSAnTG9uZycsXG4gIEludGVnZXIgPSAnSW50ZWdlcicsXG4gIERvdWJsZSA9ICdEb3VibGUnLFxuICBCb29sZWFuID0gJ0Jvb2xlYW4nLFxuICBUaW1lc3RhbXAgPSAnVGltZXN0YW1wJyxcbiAgSnNvbiA9ICdKc29uJ1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNQcmltaXRpdmVUeXBlKHN0cjogc3RyaW5nKTogc3RyIGlzIFByaW1pdGl2ZVR5cGUge1xuICBzd2l0Y2ggKHN0cikge1xuICAgIGNhc2UgUHJpbWl0aXZlVHlwZS5TdHJpbmc6XG4gICAgY2FzZSBQcmltaXRpdmVUeXBlLkxvbmc6XG4gICAgY2FzZSBQcmltaXRpdmVUeXBlLkludGVnZXI6XG4gICAgY2FzZSBQcmltaXRpdmVUeXBlLkRvdWJsZTpcbiAgICBjYXNlIFByaW1pdGl2ZVR5cGUuQm9vbGVhbjpcbiAgICBjYXNlIFByaW1pdGl2ZVR5cGUuVGltZXN0YW1wOlxuICAgIGNhc2UgUHJpbWl0aXZlVHlwZS5Kc29uOlxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuIl19
+
+/***/ }),
+
+/***/ 67263:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2ZuLWxpbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjZm4tbGludC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBBZGRpdGlvbmFsIHJlc291cmNlIGluZm9ybWF0aW9uIG9idGFpbmVkIGZyb20gY2ZuLWxpbnRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDZm5MaW50UmVzb3VyY2VBbm5vdGF0aW9ucyB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIG9yIG5vdCB0aGUgZ2l2ZW4gcmVzb3VyY2UgaXMgc3RhdGVmdWxcbiAgICovXG4gIHJlYWRvbmx5IHN0YXRlZnVsOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIG9yIG5vdCBhIERlbGV0ZSBvcGVyYXRpb24gcmVxdWlyZXMgdGhlIHJlc291cmNlIHRvIGJlIGVtcHR5XG4gICAqL1xuICByZWFkb25seSBtdXN0QmVFbXB0eVRvRGVsZXRlOiBib29sZWFuO1xufSJdfQ==
+
+/***/ }),
+
+/***/ 43621:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImRvY3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRG9jcyBmb3IgYSBDbG91ZEZvcm1hdGlvbiByZXNvdXJjZSBvciBwcm9wZXJ0eSB0eXBlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2xvdWRGb3JtYXRpb25UeXBlRG9jcyB7XG4gIC8qKlxuICAgKiBEZXNjcmlwdGlvbiBmb3IgdGhpcyB0eXBlXG4gICAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBEZXNjcmlwdGlvbnMgZm9yIGVhY2ggb2YgdGhlIHR5cGUncyBwcm9wZXJ0aWVzXG4gICAqL1xuICByZWFkb25seSBwcm9wZXJ0aWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuXG4gIC8qKlxuICAgKiBEZXNjcmlwdGlvbnMgZm9yIGVhY2ggb2YgdGhlIHJlc291cmNlJ3MgYXR0cmlidXRlc1xuICAgKi9cbiAgcmVhZG9ubHkgYXR0cmlidXRlcz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2xvdWRGb3JtYXRpb25Eb2NzRmlsZSB7XG4gIHJlYWRvbmx5IFR5cGVzOiBSZWNvcmQ8c3RyaW5nLCBDbG91ZEZvcm1hdGlvblR5cGVEb2NzPjtcbn0iXX0=
+
+/***/ }),
+
+/***/ 23841:
+/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
+
+"use strict";
+
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ var desc = Object.getOwnPropertyDescriptor(m, k);
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+ desc = { enumerable: true, get: function() { return m[k]; } };
+ }
+ Object.defineProperty(o, k2, desc);
+}) : (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ o[k2] = m[k];
+}));
+var __exportStar = (this && this.__exportStar) || function(m, exports) {
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
+};
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+__exportStar(__nccwpck_require__(82294), exports);
+__exportStar(__nccwpck_require__(13058), exports);
+__exportStar(__nccwpck_require__(74890), exports);
+__exportStar(__nccwpck_require__(96178), exports);
+__exportStar(__nccwpck_require__(61733), exports);
+__exportStar(__nccwpck_require__(67263), exports);
+__exportStar(__nccwpck_require__(43621), exports);
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsK0NBQTZCO0FBQzdCLDZDQUEyQjtBQUMzQixrREFBZ0M7QUFDaEMsa0RBQWdDO0FBQ2hDLGlEQUErQjtBQUMvQiw2Q0FBMkI7QUFDM0IseUNBQXVCIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9iYXNlLXR5cGVzJztcbmV4cG9ydCAqIGZyb20gJy4vcHJvcGVydHknO1xuZXhwb3J0ICogZnJvbSAnLi9yZXNvdXJjZS10eXBlJztcbmV4cG9ydCAqIGZyb20gJy4vc3BlY2lmaWNhdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL2F1Z21lbnRhdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL2Nmbi1saW50JztcbmV4cG9ydCAqIGZyb20gJy4vZG9jcyc7Il19
+
+/***/ }),
+
+/***/ 13058:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.isTagPropertyStringMap = exports.isTagPropertyJson = exports.isTagPropertyAutoScalingGroup = exports.isTagPropertyStandard = exports.isTagProperty = exports.isTagPropertyName = exports.isPropertyScrutinyType = exports.PropertyScrutinyType = exports.isUnionProperty = exports.isMapOfListsOfPrimitivesProperty = exports.isMapOfStructsProperty = exports.isPrimitiveMapProperty = exports.isMapProperty = exports.isComplexListProperty = exports.isPrimitiveListProperty = exports.isListProperty = exports.isCollectionProperty = exports.isComplexProperty = exports.isPrimitiveProperty = exports.isScalarProperty = exports.isUpdateType = exports.UpdateType = void 0;
+const base_types_1 = __nccwpck_require__(82294);
+var UpdateType;
+(function (UpdateType) {
+ UpdateType["Conditional"] = "Conditional";
+ UpdateType["Immutable"] = "Immutable";
+ UpdateType["Mutable"] = "Mutable";
+})(UpdateType || (exports.UpdateType = UpdateType = {}));
+function isUpdateType(str) {
+ switch (str) {
+ case UpdateType.Conditional:
+ case UpdateType.Immutable:
+ case UpdateType.Mutable:
+ return true;
+ default:
+ return false;
+ }
+}
+exports.isUpdateType = isUpdateType;
+function isScalarProperty(prop) {
+ return isPrimitiveProperty(prop)
+ || isComplexProperty(prop)
+ // A UnionProperty is only Scalar if it defines Types or PrimitiveTypes
+ || (isUnionProperty(prop) && !!(prop.Types || prop.PrimitiveTypes));
+}
+exports.isScalarProperty = isScalarProperty;
+function isPrimitiveProperty(prop) {
+ return !!prop.PrimitiveType;
+}
+exports.isPrimitiveProperty = isPrimitiveProperty;
+function isComplexProperty(prop) {
+ const propType = prop.Type;
+ return propType != null && propType !== 'Map' && propType !== 'List';
+}
+exports.isComplexProperty = isComplexProperty;
+function isCollectionProperty(prop) {
+ return isListProperty(prop)
+ || isMapProperty(prop)
+ // A UnionProperty is only Collection if it defines ItemTypes or PrimitiveItemTypes
+ || (isUnionProperty(prop) && !!(prop.ItemTypes || prop.PrimitiveItemTypes || prop.InclusiveItemTypes || prop.InclusivePrimitiveItemTypes));
+}
+exports.isCollectionProperty = isCollectionProperty;
+function isListProperty(prop) {
+ return prop.Type === 'List';
+}
+exports.isListProperty = isListProperty;
+function isPrimitiveListProperty(prop) {
+ return isListProperty(prop) && !!prop.PrimitiveItemType;
+}
+exports.isPrimitiveListProperty = isPrimitiveListProperty;
+function isComplexListProperty(prop) {
+ return isListProperty(prop) && !!prop.ItemType;
+}
+exports.isComplexListProperty = isComplexListProperty;
+function isMapProperty(prop) {
+ return prop.Type === 'Map';
+}
+exports.isMapProperty = isMapProperty;
+function isPrimitiveMapProperty(prop) {
+ return isMapProperty(prop) && !!prop.PrimitiveItemType;
+}
+exports.isPrimitiveMapProperty = isPrimitiveMapProperty;
+function isMapOfStructsProperty(prop) {
+ return isMapProperty(prop) &&
+ !isPrimitiveMapProperty(prop) &&
+ !isMapOfListsOfPrimitivesProperty(prop);
+}
+exports.isMapOfStructsProperty = isMapOfStructsProperty;
+// note: this (and the MapOfListsOfPrimitives type) are not actually valid in the CFN spec!
+// they are only here to support our patch of the CFN spec
+// to alleviate https://github.com/aws/aws-cdk/issues/3092
+function isMapOfListsOfPrimitivesProperty(prop) {
+ return isMapProperty(prop) && prop.ItemType === 'List';
+}
+exports.isMapOfListsOfPrimitivesProperty = isMapOfListsOfPrimitivesProperty;
+function isUnionProperty(prop) {
+ const castProp = prop;
+ return !!(castProp.ItemTypes ||
+ castProp.PrimitiveTypes ||
+ castProp.Types ||
+ castProp.PrimitiveItemTypes ||
+ castProp.InclusiveItemTypes ||
+ castProp.InclusivePrimitiveItemTypes);
+}
+exports.isUnionProperty = isUnionProperty;
+var PropertyScrutinyType;
+(function (PropertyScrutinyType) {
+ /**
+ * No additional scrutiny
+ */
+ PropertyScrutinyType["None"] = "None";
+ /**
+ * This is an IAM policy directly on a resource
+ */
+ PropertyScrutinyType["InlineResourcePolicy"] = "InlineResourcePolicy";
+ /**
+ * Either an AssumeRolePolicyDocument or a dictionary of policy documents
+ */
+ PropertyScrutinyType["InlineIdentityPolicies"] = "InlineIdentityPolicies";
+ /**
+ * A list of managed policies (on an identity resource)
+ */
+ PropertyScrutinyType["ManagedPolicies"] = "ManagedPolicies";
+ /**
+ * A set of ingress rules (on a security group)
+ */
+ PropertyScrutinyType["IngressRules"] = "IngressRules";
+ /**
+ * A set of egress rules (on a security group)
+ */
+ PropertyScrutinyType["EgressRules"] = "EgressRules";
+})(PropertyScrutinyType || (exports.PropertyScrutinyType = PropertyScrutinyType = {}));
+function isPropertyScrutinyType(str) {
+ return PropertyScrutinyType[str] !== undefined;
+}
+exports.isPropertyScrutinyType = isPropertyScrutinyType;
+const tagPropertyNames = {
+ FileSystemTags: '',
+ HostedZoneTags: '',
+ Tags: '',
+ UserPoolTags: '',
+ AccessPointTags: '',
+};
+function isTagPropertyName(name) {
+ if (undefined === name) {
+ return false;
+ }
+ return tagPropertyNames.hasOwnProperty(name);
+}
+exports.isTagPropertyName = isTagPropertyName;
+/**
+ * This function validates that the property **can** be a Tag Property
+ *
+ * The property is only a Tag if the name of this property is Tags, which is
+ * validated using `ResourceType.isTaggable(resource)`.
+ */
+function isTagProperty(prop) {
+ return (isTagPropertyStandard(prop) ||
+ isTagPropertyAutoScalingGroup(prop) ||
+ isTagPropertyJson(prop) ||
+ isTagPropertyStringMap(prop));
+}
+exports.isTagProperty = isTagProperty;
+function isTagPropertyStandard(prop) {
+ return (prop.ItemType === 'Tag' ||
+ prop.ItemType === 'TagsEntry' ||
+ prop.Type === 'Tags' ||
+ prop.ItemType === 'TagRef' ||
+ prop.ItemType === 'ElasticFileSystemTag' ||
+ prop.ItemType === 'HostedZoneTag' ||
+ prop.ItemType === 'AccessPointTag');
+}
+exports.isTagPropertyStandard = isTagPropertyStandard;
+function isTagPropertyAutoScalingGroup(prop) {
+ return prop.ItemType === 'TagProperty';
+}
+exports.isTagPropertyAutoScalingGroup = isTagPropertyAutoScalingGroup;
+function isTagPropertyJson(prop) {
+ return prop.PrimitiveType === base_types_1.PrimitiveType.Json;
+}
+exports.isTagPropertyJson = isTagPropertyJson;
+function isTagPropertyStringMap(prop) {
+ return prop.PrimitiveItemType === 'String';
+}
+exports.isTagPropertyStringMap = isTagPropertyStringMap;
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvcGVydHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJwcm9wZXJ0eS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2Q0FBeUQ7QUFvSXpELElBQVksVUFJWDtBQUpELFdBQVksVUFBVTtJQUNwQix5Q0FBMkIsQ0FBQTtJQUMzQixxQ0FBdUIsQ0FBQTtJQUN2QixpQ0FBbUIsQ0FBQTtBQUNyQixDQUFDLEVBSlcsVUFBVSwwQkFBVixVQUFVLFFBSXJCO0FBRUQsU0FBZ0IsWUFBWSxDQUFDLEdBQVc7SUFDdEMsUUFBUSxHQUFHLEVBQUU7UUFDWCxLQUFLLFVBQVUsQ0FBQyxXQUFXLENBQUM7UUFDNUIsS0FBSyxVQUFVLENBQUMsU0FBUyxDQUFDO1FBQzFCLEtBQUssVUFBVSxDQUFDLE9BQU87WUFDckIsT0FBTyxJQUFJLENBQUM7UUFDZDtZQUNFLE9BQU8sS0FBSyxDQUFDO0tBQ2hCO0FBQ0gsQ0FBQztBQVRELG9DQVNDO0FBRUQsU0FBZ0IsZ0JBQWdCLENBQUMsSUFBYztJQUM3QyxPQUFPLG1CQUFtQixDQUFDLElBQUksQ0FBQztXQUMzQixpQkFBaUIsQ0FBQyxJQUFJLENBQUM7UUFDMUIsdUVBQXVFO1dBQ3BFLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7QUFDeEUsQ0FBQztBQUxELDRDQUtDO0FBRUQsU0FBZ0IsbUJBQW1CLENBQUMsSUFBYztJQUNoRCxPQUFPLENBQUMsQ0FBRSxJQUEwQixDQUFDLGFBQWEsQ0FBQztBQUNyRCxDQUFDO0FBRkQsa0RBRUM7QUFFRCxTQUFnQixpQkFBaUIsQ0FBQyxJQUFjO0lBQzlDLE1BQU0sUUFBUSxHQUFJLElBQXdCLENBQUMsSUFBSSxDQUFDO0lBQ2hELE9BQU8sUUFBUSxJQUFJLElBQUksSUFBSSxRQUFRLEtBQUssS0FBSyxJQUFJLFFBQVEsS0FBSyxNQUFNLENB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QUVDO0FBRUQsU0FBZ0Isc0JBQXNCLENBQUMsSUFBYztJQUNuRCxPQUFRLElBQTZCLENBQUMsaUJBQWlCLEtBQUssUUFBUSxDQUFDO0FBQ3ZFLENBQUM7QUFGRCx3REFFQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERvY3VtZW50ZWQsIFByaW1pdGl2ZVR5cGUgfSBmcm9tICcuL2Jhc2UtdHlwZXMnO1xuXG5leHBvcnQgdHlwZSBQcm9wZXJ0eSA9IFNjYWxhclByb3BlcnR5IHwgQ29sbGVjdGlvblByb3BlcnR5O1xuZXhwb3J0IHR5cGUgU2NhbGFyUHJvcGVydHkgPSBQcmltaXRpdmVQcm9wZXJ0eSB8IENvbXBsZXhQcm9wZXJ0eSB8IFVuaW9uUHJvcGVydHk7XG5leHBvcnQgdHlwZSBDb2xsZWN0aW9uUHJvcGVydHkgPSBMaXN0UHJvcGVydHkgfCBNYXBQcm9wZXJ0eSB8IFVuaW9uUHJvcGVydHk7XG5leHBvcnQgdHlwZSBMaXN0UHJvcGVydHkgPSBQcmltaXRpdmVMaXN0UHJvcGVydHkgfCBDb21wbGV4TGlzdFByb3BlcnR5O1xuZXhwb3J0IHR5cGUgTWFwUHJvcGVydHkgPSBQcmltaXRpdmVNYXBQcm9wZXJ0eSB8IENvbXBsZXhNYXBQcm9wZXJ0eTtcbmV4cG9ydCB0eXBlIENvbXBsZXhNYXBQcm9wZXJ0eSA9IE1hcE9mU3RydWN0cyB8IE1hcE9mTGlzdHNPZlByaW1pdGl2ZXM7XG5leHBvcnQgdHlwZSBUYWdQcm9wZXJ0eSA9IFRhZ1Byb3BlcnR5U3RhbmRhcmQgfCBUYWdQcm9wZXJ0eUF1dG9TY2FsaW5nR3JvdXAgfCBUYWdQcm9wZXJ0eUpzb24gfCBUYWdQcm9wZXJ0eVN0cmluZ01hcDtcblxuZXhwb3J0IGludGVyZmFjZSBQcm9wZXJ0eUJhc2UgZXh0ZW5kcyBEb2N1bWVudGVkIHtcbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBwcm9wZXJ0eSBpcyByZXF1aXJlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIFJlcXVpcmVkPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIER1cmluZyBhIHN0YWNrIHVwZGF0ZSwgdGhlIHVwZGF0ZSBiZWhhdmlvciB3aGVuIHlvdSBhZGQsIHJlbW92ZSwgb3IgbW9kaWZ5IHRoZSBwcm9wZXJ0eS4gQVdTIENsb3VkRm9ybWF0aW9uXG4gICAqIHJlcGxhY2VzIHRoZSByZXNvdXJjZSB3aGVuIHlvdSBjaGFuZ2UgYMOMbW11dGFibGVgYHByb3BlcnRpZXMuIEFXUyBDbG91ZEZvcm1hdGlvbiBkb2Vzbid0IHJlcGxhY2UgdGhlIHJlc291cmNlXG4gICAqIHdoZW4geW91IGNoYW5nZSBgYE11dGFibGVgYCBwcm9wZXJ0aWVzLiBgYENvbmRpdGlvbmFsYGAgdXBkYXRlcyBjYW4gYmUgbXV0YWJsZSBvciBpbW11dGFibGUsIGRlcGVuZGluZyBvbiwgZm9yXG4gICAqIGV4YW1wbGUsIHdoaWNoIG90aGVyIHByb3BlcnRpZXMgeW91IHVwZGF0ZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IFVwZGF0ZVR5cGUuTXV0YWJsZVxuICAgKi9cbiAgVXBkYXRlVHlwZT86IFVwZGF0ZVR5cGU7XG5cbiAgLyoqXG4gICAqIER1cmluZyBhIHN0YWNrIHVwZGF0ZSwgd2hhdCBraW5kIG9mIGFkZGl0aW9uYWwgc2NydXRpbnkgY2hhbmdlcyB0byB0aGlzIHByb3BlcnR5IHNob3VsZCBiZSBzdWJqZWN0ZWQgdG9cbiAgICpcbiAgICogQGRlZmF1bHQgTm9uZVxuICAgKi9cbiAgU2NydXRpbnlUeXBlPzogUHJvcGVydHlTY3J1dGlueVR5cGU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJpbWl0aXZlUHJvcGVydHkgZXh0ZW5kcyBQcm9wZXJ0eUJhc2Uge1xuICAvKiogVGhlIHZhbGlkIHByaW1pdGl2ZSB0eXBlIGZvciB0aGUgcHJvcGVydHkuICovXG4gIFByaW1pdGl2ZVR5cGU6IFByaW1pdGl2ZVR5cGU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcGxleFByb3BlcnR5IGV4dGVuZHMgUHJvcGVydHlCYXNlIHtcbiAgLyoqIFRoZSB0eXBlIG9mIHZhbGlkIHZhbHVlcyBmb3IgdGhpcyBwcm9wZXJ0eSAqL1xuICBUeXBlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGlzdFByb3BlcnR5QmFzZSBleHRlbmRzIFByb3BlcnR5QmFzZSB7XG4gIC8qKlxuICAgKiBBIGxpc3QgaXMgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiB2YWx1ZXMuXG4gICAqL1xuICBUeXBlOiAnTGlzdCc7XG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciBBV1MgQ2xvdWRGb3JtYXRpb24gYWxsb3dzIGR1cGxpY2F0ZSB2YWx1ZXMuIElmIHRoZSB2YWx1ZSBpcyBgYHRydWVgYCwgQVdTIENsb3VkRm9ybWF0aW9uXG4gICAqIGlnbm9yZXMgZHVwbGljYXRlIHZhbHVlcy4gaWYgdGhlIHZhbHVlIGlzICBgYGZhbHNlYGAsIEFXUyBDbG91ZEZvcm1hdGlvbiByZXR1cm5zIGFuIGFycm9yIGlmIHlvdSBzdWJtaXQgZHVwbGljYXRlXG4gICAqIHZhbHVlcy5cbiAgICovXG4gIER1cGxpY2F0ZXNBbGxvd2VkPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQcmltaXRpdmVMaXN0UHJvcGVydHkgZXh0ZW5kcyBMaXN0UHJvcGVydHlCYXNlIHtcbiAgLyoqIFRoZSB2YWxpZCBwcmltaXRpdmUgdHlwZSBmb3IgdGhlIHByb3BlcnR5LiAqL1xuICBQcmltaXRpdmVJdGVtVHlwZTogUHJpbWl0aXZlVHlwZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb21wbGV4TGlzdFByb3BlcnR5IGV4dGVuZHMgTGlzdFByb3BlcnR5QmFzZSB7XG4gIC8qKiBWYWxpZCB2YWx1ZXMgZm9yIHRoZSBwcm9wZXJ0eSAqL1xuICBJdGVtVHlwZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1hcFByb3BlcnR5QmFzZSBleHRlbmRzIFByb3BlcnR5QmFzZSB7XG4gIC8qKiBBIG1hcCBpcyBhIHNldCBvZiBrZXktdmFsdWUgcGFpcnMsIHdoZXJlIHRoZSBrZXlzIGFyZSBhbHdheXMgc3RyaW5ncy4gKi9cbiAgVHlwZTogJ01hcCc7XG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciBBV1MgQ2xvdWRGb3JtYXRpb24gYWxsb3dzIGR1cGxpY2F0ZSB2YWx1ZXMuIElmIHRoZSB2YWx1ZSBpcyBgYHRydWVgYCwgQVdTIENsb3VkRm9ybWF0aW9uXG4gICAqIGlnbm9yZXMgZHVwbGljYXRlIHZhbHVlcy4gaWYgdGhlIHZhbHVlIGlzICBgYGZhbHNlYGAsIEFXUyBDbG91ZEZvcm1hdGlvbiByZXR1cm5zIGFuIGFycm9yIGlmIHlvdSBzdWJtaXQgZHVwbGljYXRlXG4gICAqIHZhbHVlcy5cbiAgICovXG4gIER1cGxpY2F0ZXNBbGxvd2VkPzogZmFsc2U7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJpbWl0aXZlTWFwUHJvcGVydHkgZXh0ZW5kcyBNYXBQcm9wZXJ0eUJhc2Uge1xuICAvKiogVGhlIHZhbGlkIHByaW1pdGl2ZSB0eXBlIGZvciB0aGUgcHJvcGVydHkuICovXG4gIFByaW1pdGl2ZUl0ZW1UeXBlOiBQcmltaXRpdmVUeXBlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1hcE9mU3RydWN0cyBleHRlbmRzIE1hcFByb3BlcnR5QmFzZSB7XG4gIC8qKiBWYWxpZCB2YWx1ZXMgZm9yIHRoZSBwcm9wZXJ0eSAqL1xuICBJdGVtVHlwZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1hcE9mTGlzdHNPZlByaW1pdGl2ZXMgZXh0ZW5kcyBNYXBQcm9wZXJ0eUJhc2Uge1xuICAvKiogVGhlIHR5cGUgb2YgdGhlIG1hcCB2YWx1ZXMsIHdoaWNoIGluIHRoaXMgY2FzZSBpcyBhbHdheXMgJ0xpc3QnLiAqL1xuICBJdGVtVHlwZTogc3RyaW5nO1xuXG4gIC8qKiBUaGUgdmFsaWQgcHJpbWl0aXZlIHR5cGUgZm9yIHRoZSBsaXN0cyB0aGF0IGFyZSB0aGUgdmFsdWVzIG9mIHRoaXMgbWFwLiAqL1xuICBQcmltaXRpdmVJdGVtSXRlbVR5cGU6IFByaW1pdGl2ZVR5cGU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGFnUHJvcGVydHlTdGFuZGFyZCBleHRlbmRzIFByb3BlcnR5QmFzZSB7XG4gIEl0ZW1UeXBlOiAnVGFnJyB8ICdUYWdzRW50cnknIHwgJ1RhZ1JlZicgfCAnRWxhc3RpY0ZpbGVTeXN0ZW1UYWcnIHwgJ0hvc3RlZFpvbmVUYWcnIHwgJ0FjY2Vzc1BvaW50VGFnJztcbiAgVHlwZTogJ1RhZ3MnO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRhZ1Byb3BlcnR5QXV0b1NjYWxpbmdHcm91cCBleHRlbmRzIFByb3BlcnR5QmFzZSB7XG4gIEl0ZW1UeXBlOiAnVGFnUHJvcGVydHknO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRhZ1Byb3BlcnR5SnNvbiBleHRlbmRzIFByb3BlcnR5QmFzZSB7XG4gIFByaW1pdGl2ZVR5cGU6IFByaW1pdGl2ZVR5cGUuSnNvbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUYWdQcm9wZXJ0eVN0cmluZ01hcCBleHRlbmRzIFByb3BlcnR5QmFzZSB7XG4gIFByaW1pdGl2ZUl0ZW1UeXBlOiAnU3RyaW5nJztcbn1cblxuLyoqXG4gKiBBIHByb3BlcnR5IHR5cGUgdGhhdCBjYW4gYmUgb25lIG9mIHNldmVyYWwgdHlwZXMuIEN1cnJlbnRseSB1c2VkIG9ubHkgaW4gU0FNLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVuaW9uUHJvcGVydHkgZXh0ZW5kcyBQcm9wZXJ0eUJhc2Uge1xuICAvKiogVmFsaWQgcHJpbWl0aXZlIHR5cGVzIGZvciB0aGUgcHJvcGVydHkgKi9cbiAgUHJpbWl0aXZlVHlwZXM/OiBQcmltaXRpdmVUeXBlW107XG4gIC8qKiBWYWxpZCBjb21wbGV4IHR5cGVzIGZvciB0aGUgcHJvcGVydHkgKi9cbiAgVHlwZXM/OiBzdHJpbmdbXVxuICAvKiogVmFsaWQgcHJpbWl0aXZlIGl0ZW0gdHlwZXMgZm9yIHRoaXMgcHJvcGVydHkgKi9cbiAgUHJpbWl0aXZlSXRlbVR5cGVzPzogUHJpbWl0aXZlVHlwZVtdO1xuICAvKiogVmFsaWQgbGlzdCBpdGVtIHR5cGVzIGZvciB0aGUgcHJvcGVydHkgKi9cbiAgSXRlbVR5cGVzPzogc3RyaW5nW107XG4gIC8qKiBWYWxpZCBjb21wbGV4IHR5cGVzIGZvciB0aGlzIHByb3BlcnR5ICovXG4gIEluY2x1c2l2ZUl0ZW1UeXBlcz86IHN0cmluZ1tdO1xuICAvKiogVmFsaWQgcHJpbWl0aXZlIGl0ZW0gdHlwZXMgZm9yIHRoaXMgcHJvcGVydHkgKi9cbiAgSW5jbHVzaXZlUHJpbWl0aXZlSXRlbVR5cGVzPzogUHJpbWl0aXZlVHlwZVtdO1xufVxuXG5leHBvcnQgZW51bSBVcGRhdGVUeXBlIHtcbiAgQ29uZGl0aW9uYWwgPSAnQ29uZGl0aW9uYWwnLFxuICBJbW11dGFibGUgPSAnSW1tdXRhYmxlJyxcbiAgTXV0YWJsZSA9ICdNdXRhYmxlJ1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNVcGRhdGVUeXBlKHN0cjogc3RyaW5nKTogc3RyIGlzIFVwZGF0ZVR5cGUge1xuICBzd2l0Y2ggKHN0cikge1xuICAgIGNhc2UgVXBkYXRlVHlwZS5Db25kaXRpb25hbDpcbiAgICBjYXNlIFVwZGF0ZVR5cGUuSW1tdXRhYmxlOlxuICAgIGNhc2UgVXBkYXRlVHlwZS5NdXRhYmxlOlxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNTY2FsYXJQcm9wZXJ0eShwcm9wOiBQcm9wZXJ0eSk6IHByb3AgaXMgU2NhbGFyUHJvcGVydHkge1xuICByZXR1cm4gaXNQcmltaXRpdmVQcm9wZXJ0eShwcm9wKVxuICAgIHx8IGlzQ29tcGxleFByb3BlcnR5KHByb3ApXG4gICAgLy8gQSBVbmlvblByb3BlcnR5IGlzIG9ubHkgU2NhbGFyIGlmIGl0IGRlZmluZXMgVHlwZXMgb3IgUHJpbWl0aXZlVHlwZXNcbiAgICB8fCAoaXNVbmlvblByb3BlcnR5KHByb3ApICYmICEhKHByb3AuVHlwZXMgfHwgcHJvcC5QcmltaXRpdmVUeXBlcykpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNQcmltaXRpdmVQcm9wZXJ0eShwcm9wOiBQcm9wZXJ0eSk6IHByb3AgaXMgUHJpbWl0aXZlUHJvcGVydHkge1xuICByZXR1cm4gISEocHJvcCBhcyBQcmltaXRpdmVQcm9wZXJ0eSkuUHJpbWl0aXZlVHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQ29tcGxleFByb3BlcnR5KHByb3A6IFByb3BlcnR5KTogcHJvcCBpcyBDb21wbGV4UHJvcGVydHkge1xuICBjb25zdCBwcm9wVHlwZSA9IChwcm9wIGFzIENvbXBsZXhQcm9wZXJ0eSkuVHlwZTtcbiAgcmV0dXJuIHByb3BUeXBlICE9IG51bGwgJiYgcHJvcFR5cGUgIT09ICdNYXAnICYmIHByb3BUeXBlICE9PSAnTGlzdCc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0NvbGxlY3Rpb25Qcm9wZXJ0eShwcm9wOiBQcm9wZXJ0eSk6IHByb3AgaXMgQ29sbGVjdGlvblByb3BlcnR5IHtcbiAgcmV0dXJuIGlzTGlzdFByb3BlcnR5KHByb3ApXG4gICAgfHwgaXNNYXBQcm9wZXJ0eShwcm9wKVxuICAgIC8vIEEgVW5pb25Qcm9wZXJ0eSBpcyBvbmx5IENvbGxlY3Rpb24gaWYgaXQgZGVmaW5lcyBJdGVtVHlwZXMgb3IgUHJpbWl0aXZlSXRlbVR5cGVzXG4gICAgfHwgKGlzVW5pb25Qcm9wZXJ0eShwcm9wKSAmJiAhIShwcm9wLkl0ZW1UeXBlcyB8fCBwcm9wLlByaW1pdGl2ZUl0ZW1UeXBlcyB8fCBwcm9wLkluY2x1c2l2ZUl0ZW1UeXBlcyB8fCBwcm9wLkluY2x1c2l2ZVByaW1pdGl2ZUl0ZW1UeXBlcykpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNMaXN0UHJvcGVydHkocHJvcDogUHJvcGVydHkpOiBwcm9wIGlzIExpc3RQcm9wZXJ0eSB7XG4gIHJldHVybiAocHJvcCBhcyBMaXN0UHJvcGVydHkpLlR5cGUgPT09ICdMaXN0Jztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUHJpbWl0aXZlTGlzdFByb3BlcnR5KHByb3A6IFByb3BlcnR5KTogcHJvcCBpcyBQcmltaXRpdmVMaXN0UHJvcGVydHkge1xuICByZXR1cm4gaXNMaXN0UHJvcGVydHkocHJvcCkgJiYgISEocHJvcCBhcyBQcmltaXRpdmVMaXN0UHJvcGVydHkpLlByaW1pdGl2ZUl0ZW1UeXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNDb21wbGV4TGlzdFByb3BlcnR5KHByb3A6IFByb3BlcnR5KTogcHJvcCBpcyBDb21wbGV4TGlzdFByb3BlcnR5IHtcbiAgcmV0dXJuIGlzTGlzdFByb3BlcnR5KHByb3ApICYmICEhKHByb3AgYXMgQ29tcGxleExpc3RQcm9wZXJ0eSkuSXRlbVR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc01hcFByb3BlcnR5KHByb3A6IFByb3BlcnR5KTogcHJvcCBpcyBNYXBQcm9wZXJ0eSB7XG4gIHJldHVybiAocHJvcCBhcyBNYXBQcm9wZXJ0eSkuVHlwZSA9PT0gJ01hcCc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1ByaW1pdGl2ZU1hcFByb3BlcnR5KHByb3A6IFByb3BlcnR5KTogcHJvcCBpcyBQcmltaXRpdmVNYXBQcm9wZXJ0eSB7XG4gIHJldHVybiBpc01hcFByb3BlcnR5KHByb3ApICYmICEhKHByb3AgYXMgUHJpbWl0aXZlTWFwUHJvcGVydHkpLlByaW1pdGl2ZUl0ZW1UeXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNNYXBPZlN0cnVjdHNQcm9wZXJ0eShwcm9wOiBQcm9wZXJ0eSk6IHByb3AgaXMgTWFwT2ZTdHJ1Y3RzIHtcbiAgcmV0dXJuIGlzTWFwUHJvcGVydHkocHJvcCkgJiZcbiAgICAhaXNQcmltaXRpdmVNYXBQcm9wZXJ0eShwcm9wKSAmJlxuICAgICFpc01hcE9mTGlzdHNPZlByaW1pdGl2ZXNQcm9wZXJ0eShwcm9wKTtcbn1cblxuLy8gbm90ZTogdGhpcyAoYW5kIHRoZSBNYXBPZkxpc3RzT2ZQcmltaXRpdmVzIHR5cGUpIGFyZSBub3QgYWN0dWFsbHkgdmFsaWQgaW4gdGhlIENGTiBzcGVjIVxuLy8gdGhleSBhcmUgb25seSBoZXJlIHRvIHN1cHBvcnQgb3VyIHBhdGNoIG9mIHRoZSBDRk4gc3BlY1xuLy8gdG8gYWxsZXZpYXRlIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9pc3N1ZXMvMzA5MlxuZXhwb3J0IGZ1bmN0aW9uIGlzTWFwT2ZMaXN0c09mUHJpbWl0aXZlc1Byb3BlcnR5KHByb3A6IFByb3BlcnR5KTogcHJvcCBpcyBNYXBPZkxpc3RzT2ZQcmltaXRpdmVzIHtcbiAgcmV0dXJuIGlzTWFwUHJvcGVydHkocHJvcCkgJiYgKHByb3AgYXMgQ29tcGxleE1hcFByb3BlcnR5KS5JdGVtVHlwZSA9PT0gJ0xpc3QnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNVbmlvblByb3BlcnR5KHByb3A6IFByb3BlcnR5KTogcHJvcCBpcyBVbmlvblByb3BlcnR5IHtcbiAgY29uc3QgY2FzdFByb3AgPSBwcm9wIGFzIFVuaW9uUHJvcGVydHk7XG4gIHJldHVybiAhIShcbiAgICBjYXN0UHJvcC5JdGVtVHlwZXMgfHxcbiAgICBjYXN0UHJvcC5QcmltaXRpdmVUeXBlcyB8fFxuICAgIGNhc3RQcm9wLlR5cGVzIHx8XG4gICAgY2FzdFByb3AuUHJpbWl0aXZlSXRlbVR5cGVzIHx8XG4gICAgY2FzdFByb3AuSW5jbHVzaXZlSXRlbVR5cGVzIHx8XG4gICAgY2FzdFByb3AuSW5jbHVzaXZlUHJpbWl0aXZlSXRlbVR5cGVzXG4gICk7XG59XG5cbmV4cG9ydCBlbnVtIFByb3BlcnR5U2NydXRpbnlUeXBlIHtcbiAgLyoqXG4gICAqIE5vIGFkZGl0aW9uYWwgc2NydXRpbnlcbiAgICovXG4gIE5vbmUgPSAnTm9uZScsXG5cbiAgLyoqXG4gICAqIFRoaXMgaXMgYW4gSUFNIHBvbGljeSBkaXJlY3RseSBvbiBhIHJlc291cmNlXG4gICAqL1xuICBJbmxpbmVSZXNvdXJjZVBvbGljeSA9ICdJbmxpbmVSZXNvdXJjZVBvbGljeScsXG5cbiAgLyoqXG4gICAqIEVpdGhlciBhbiBBc3N1bWVSb2xlUG9saWN5RG9jdW1lbnQgb3IgYSBkaWN0aW9uYXJ5IG9mIHBvbGljeSBkb2N1bWVudHNcbiAgICovXG4gIElubGluZUlkZW50aXR5UG9saWNpZXMgPSAnSW5saW5lSWRlbnRpdHlQb2xpY2llcycsXG5cbiAgLyoqXG4gICAqIEEgbGlzdCBvZiBtYW5hZ2VkIHBvbGljaWVzIChvbiBhbiBpZGVudGl0eSByZXNvdXJjZSlcbiAgICovXG4gIE1hbmFnZWRQb2xpY2llcyA9ICdNYW5hZ2VkUG9saWNpZXMnLFxuXG4gIC8qKlxuICAgKiBBIHNldCBvZiBpbmdyZXNzIHJ1bGVzIChvbiBhIHNlY3VyaXR5IGdyb3VwKVxuICAgKi9cbiAgSW5ncmVzc1J1bGVzID0gJ0luZ3Jlc3NSdWxlcycsXG5cbiAgLyoqXG4gICAqIEEgc2V0IG9mIGVncmVzcyBydWxlcyAob24gYSBzZWN1cml0eSBncm91cClcbiAgICovXG4gIEVncmVzc1J1bGVzID0gJ0VncmVzc1J1bGVzJyxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUHJvcGVydHlTY3J1dGlueVR5cGUoc3RyOiBzdHJpbmcpOiBzdHIgaXMgUHJvcGVydHlTY3J1dGlueVR5cGUge1xuICByZXR1cm4gKFByb3BlcnR5U2NydXRpbnlUeXBlIGFzIGFueSlbc3RyXSAhPT0gdW5kZWZpbmVkO1xufVxuXG5jb25zdCB0YWdQcm9wZXJ0eU5hbWVzID0ge1xuICBGaWxlU3lzdGVtVGFnczogJycsXG4gIEhvc3RlZFpvbmVUYWdzOiAnJyxcbiAgVGFnczogJycsXG4gIFVzZXJQb29sVGFnczogJycsXG4gIEFjY2Vzc1BvaW50VGFnczogJycsXG59O1xuXG5leHBvcnQgdHlwZSBUYWdQcm9wZXJ0eU5hbWUgPSBrZXlvZiB0eXBlb2YgdGFnUHJvcGVydHlOYW1lcztcblxuZXhwb3J0IGZ1bmN0aW9uIGlzVGFnUHJvcGVydHlOYW1lKG5hbWU/OiBzdHJpbmcpOiBuYW1lIGlzIFRhZ1Byb3BlcnR5TmFtZSB7XG4gIGlmICh1bmRlZmluZWQgPT09IG5hbWUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHRhZ1Byb3BlcnR5TmFtZXMuaGFzT3duUHJvcGVydHkobmFtZSk7XG59XG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gdmFsaWRhdGVzIHRoYXQgdGhlIHByb3BlcnR5ICoqY2FuKiogYmUgYSBUYWcgUHJvcGVydHlcbiAqXG4gKiBUaGUgcHJvcGVydHkgaXMgb25seSBhIFRhZyBpZiB0aGUgbmFtZSBvZiB0aGlzIHByb3BlcnR5IGlzIFRhZ3MsIHdoaWNoIGlzXG4gKiB2YWxpZGF0ZWQgdXNpbmcgYFJlc291cmNlVHlwZS5pc1RhZ2dhYmxlKHJlc291cmNlKWAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1RhZ1Byb3BlcnR5KHByb3A6IFByb3BlcnR5KTogcHJvcCBpcyBUYWdQcm9wZXJ0eSB7XG4gIHJldHVybiAoXG4gICAgaXNUYWdQcm9wZXJ0eVN0YW5kYXJkKHByb3ApIHx8XG4gICAgaXNUYWdQcm9wZXJ0eUF1dG9TY2FsaW5nR3JvdXAocHJvcCkgfHxcbiAgICBpc1RhZ1Byb3BlcnR5SnNvbihwcm9wKSB8fFxuICAgIGlzVGFnUHJvcGVydHlTdHJpbmdNYXAocHJvcClcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzVGFnUHJvcGVydHlTdGFuZGFyZChwcm9wOiBQcm9wZXJ0eSk6IHByb3AgaXMgVGFnUHJvcGVydHlTdGFuZGFyZCB7XG4gIHJldHVybiAoXG4gICAgKHByb3AgYXMgVGFnUHJvcGVydHlTdGFuZGFyZCkuSXRlbVR5cGUgPT09ICdUYWcnIHx8XG4gICAgKHByb3AgYXMgVGFnUHJvcGVydHlTdGFuZGFyZCkuSXRlbVR5cGUgPT09ICdUYWdzRW50cnknIHx8XG4gICAgKHByb3AgYXMgVGFnUHJvcGVydHlTdGFuZGFyZCkuVHlwZSA9PT0gJ1RhZ3MnIHx8XG4gICAgKHByb3AgYXMgVGFnUHJvcGVydHlTdGFuZGFyZCkuSXRlbVR5cGUgPT09ICdUYWdSZWYnIHx8XG4gICAgKHByb3AgYXMgVGFnUHJvcGVydHlTdGFuZGFyZCkuSXRlbVR5cGUgPT09ICdFbGFzdGljRmlsZVN5c3RlbVRhZycgfHxcbiAgICAocHJvcCBhcyBUYWdQcm9wZXJ0eVN0YW5kYXJkKS5JdGVtVHlwZSA9PT0gJ0hvc3RlZFpvbmVUYWcnIHx8XG4gICAgKHByb3AgYXMgVGFnUHJvcGVydHlTdGFuZGFyZCkuSXRlbVR5cGUgPT09ICdBY2Nlc3NQb2ludFRhZydcbiAgKTtcblxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNUYWdQcm9wZXJ0eUF1dG9TY2FsaW5nR3JvdXAocHJvcDogUHJvcGVydHkpOiBwcm9wIGlzIFRhZ1Byb3BlcnR5QXV0b1NjYWxpbmdHcm91cCB7XG4gIHJldHVybiAocHJvcCBhcyBUYWdQcm9wZXJ0eUF1dG9TY2FsaW5nR3JvdXApLkl0ZW1UeXBlID09PSAnVGFnUHJvcGVydHknO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNUYWdQcm9wZXJ0eUpzb24ocHJvcDogUHJvcGVydHkpOiBwcm9wIGlzIFRhZ1Byb3BlcnR5SnNvbiB7XG4gIHJldHVybiAocHJvcCBhcyBUYWdQcm9wZXJ0eUpzb24pLlByaW1pdGl2ZVR5cGUgPT09IFByaW1pdGl2ZVR5cGUuSnNvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzVGFnUHJvcGVydHlTdHJpbmdNYXAocHJvcDogUHJvcGVydHkpOiBwcm9wIGlzIFRhZ1Byb3BlcnR5U3RyaW5nTWFwIHtcbiAgcmV0dXJuIChwcm9wIGFzIFRhZ1Byb3BlcnR5U3RyaW5nTWFwKS5QcmltaXRpdmVJdGVtVHlwZSA9PT0gJ1N0cmluZyc7XG59XG4iXX0=
+
+/***/ }),
+
+/***/ 74890:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.isResourceScrutinyType = exports.ResourceScrutinyType = exports.SpecialRefKind = exports.isPrimitiveMapAttribute = exports.isComplexListAttribute = exports.isPrimitiveListAttribute = exports.isMapAttribute = exports.isListAttribute = exports.isPrimitiveAttribute = exports.isTaggableResource = void 0;
+const property_1 = __nccwpck_require__(13058);
+/**
+ * Determine if the resource supports tags
+ *
+ * This function combined with isTagProperty determines if the `cdk.TagManager`
+ * and `cdk.TaggableResource` can process these tags. If not, standard code
+ * generation of properties will be used.
+ */
+function isTaggableResource(spec) {
+ if (spec.Properties === undefined) {
+ return false;
+ }
+ for (const key of Object.keys(spec.Properties)) {
+ if ((0, property_1.isTagPropertyName)(key) && (0, property_1.isTagProperty)(spec.Properties[key])) {
+ return true;
+ }
+ }
+ return false;
+}
+exports.isTaggableResource = isTaggableResource;
+function isPrimitiveAttribute(spec) {
+ return !!spec.PrimitiveType;
+}
+exports.isPrimitiveAttribute = isPrimitiveAttribute;
+function isListAttribute(spec) {
+ return spec.Type === 'List';
+}
+exports.isListAttribute = isListAttribute;
+function isMapAttribute(spec) {
+ return spec.Type === 'Map';
+}
+exports.isMapAttribute = isMapAttribute;
+function isPrimitiveListAttribute(spec) {
+ return isListAttribute(spec) && !!spec.PrimitiveItemType;
+}
+exports.isPrimitiveListAttribute = isPrimitiveListAttribute;
+function isComplexListAttribute(spec) {
+ return isListAttribute(spec) && !!spec.ItemType;
+}
+exports.isComplexListAttribute = isComplexListAttribute;
+function isPrimitiveMapAttribute(spec) {
+ return isMapAttribute(spec) && !!spec.PrimitiveItemType;
+}
+exports.isPrimitiveMapAttribute = isPrimitiveMapAttribute;
+/**
+ * Type declaration for special values of the "Ref" attribute represents.
+ *
+ * The attribute can take on more values than these, but these are treated specially.
+ */
+var SpecialRefKind;
+(function (SpecialRefKind) {
+ /**
+ * No '.ref' member is generated for this type, because it doesn't have a meaningful value.
+ */
+ SpecialRefKind["None"] = "None";
+ /**
+ * The generated class will inherit from the built-in 'Arn' type.
+ */
+ SpecialRefKind["Arn"] = "Arn";
+})(SpecialRefKind || (exports.SpecialRefKind = SpecialRefKind = {}));
+var ResourceScrutinyType;
+(function (ResourceScrutinyType) {
+ /**
+ * No additional scrutiny
+ */
+ ResourceScrutinyType["None"] = "None";
+ /**
+ * An externally attached policy document to a resource
+ *
+ * (Common for SQS, SNS, S3, ...)
+ */
+ ResourceScrutinyType["ResourcePolicyResource"] = "ResourcePolicyResource";
+ /**
+ * This is an IAM policy on an identity resource
+ *
+ * (Basically saying: this is AWS::IAM::Policy)
+ */
+ ResourceScrutinyType["IdentityPolicyResource"] = "IdentityPolicyResource";
+ /**
+ * This is a Lambda Permission policy
+ */
+ ResourceScrutinyType["LambdaPermission"] = "LambdaPermission";
+ /**
+ * An ingress rule object
+ */
+ ResourceScrutinyType["IngressRuleResource"] = "IngressRuleResource";
+ /**
+ * A set of egress rules
+ */
+ ResourceScrutinyType["EgressRuleResource"] = "EgressRuleResource";
+})(ResourceScrutinyType || (exports.ResourceScrutinyType = ResourceScrutinyType = {}));
+function isResourceScrutinyType(str) {
+ return ResourceScrutinyType[str] !== undefined;
+}
+exports.isResourceScrutinyType = isResourceScrutinyType;
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb3VyY2UtdHlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInJlc291cmNlLXR5cGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EseUNBQXFGO0FBaUVyRjs7Ozs7O0dBTUc7QUFDSCxTQUFnQixrQkFBa0IsQ0FBQyxJQUFrQjtJQUNuRCxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssU0FBUyxFQUFFO1FBQ2pDLE9BQU8sS0FBSyxDQUFDO0tBQ2Q7SUFDRCxLQUFLLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFO1FBQzlDLElBQUksSUFBQSw0QkFBaUIsRUFBQyxHQUFHLENBQUMsSUFBSSxJQUFBLHdCQUFhLEVBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFO1lBQ2pFLE9BQU8sSUFBSSxDQUFDO1NBQ2I7S0FDRjtJQUNELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQztBQVZELGdEQVVDO0FBRUQsU0FBZ0Isb0JBQW9CLENBQUMsSUFBZTtJQUNsRCxPQUFPLENBQUMsQ0FBRSxJQUEyQixDQUFDLGFBQWEsQ0FBQztBQUN0RCxDQUFDO0FBRkQsb0RBRUM7QUFFRCxTQUFnQixlQUFlLENBQUMsSUFBZTtJQUM3QyxPQUFRLElBQXNCLENBQUMsSUFBSSxLQUFLLE1BQU0sQ0FBQztBQUNqRCxDQUFDO0FBRkQsMENBRUM7QUFFRCxTQUFnQixjQUFjLENBQUMsSUFBZTtJQUM1QyxPQUFRLElBQXFCLENBQUMsSUFBSSxLQUFLLEtBQUssQ0FBQztBQUMvQyxDQUFDO0FBRkQsd0NBRUM7QUFFRCxTQUFnQix3QkFBd0IsQ0FBQyxJQUFlO0lBQ3RELE9BQU8sZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBRSxJQUErQixDQUFDLGlCQUFpQixDQUFDO0FBQ3ZGLENBQUM7QUFGRCw0REFFQztBQUVELFNBQWdCLHNCQUFzQixDQUFDLElBQWU7SUFDcEQsT0FBTyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFFLElBQTZCLENBQUMsUUFBUSxDQUFDO0FBQzVFLENBQUM7QUFGRCx3REFFQztBQUVELFNBQWdCLHVCQUF1QixDQUFDLElBQWU7SUFDckQsT0FBTyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFFLElBQThCLENBQUMsaUJBQWlCLENBQUM7QUFDckYsQ0FBQztBQUZELDBEQUVDO0FBRUQ7Ozs7R0FJRztBQUNILElBQVksY0FVWDtBQVZELFdBQVksY0FBYztJQUN4Qjs7T0FFRztJQUNILCtCQUFhLENBQUE7SUFFYjs7T0FFRztJQUNILDZCQUFXLENBQUE7QUFDYixDQUFDLEVBVlcsY0FBYyw4QkFBZCxjQUFjLFFBVXpCO0FBRUQsSUFBWSxvQkFrQ1g7QUFsQ0QsV0FBWSxvQkFBb0I7SUFDOUI7O09BRUc7SUFDSCxxQ0FBYSxDQUFBO0lBRWI7Ozs7T0FJRztJQUNILHlFQUFpRCxDQUFBO0lBRWpEOzs7O09BSUc7SUFDSCx5RUFBaUQsQ0FBQTtJQUVqRDs7T0FFRztJQUNILDZEQUFxQyxDQUFBO0lBRXJDOztPQUVHO0lBQ0gsbUVBQTJDLENBQUE7SUFFM0M7O09BRUc7SUFDSCxpRUFBeUMsQ0FBQTtBQUMzQyxDQUFDLEVBbENXLG9CQUFvQixvQ0FBcEIsb0JBQW9CLFFBa0MvQjtBQUVELFNBQWdCLHNCQUFzQixDQUFDLEdBQVc7SUFDaEQsT0FBUSxvQkFBNEIsQ0FBQyxHQUFHLENBQUMsS0FBSyxTQUFTLENBQUM7QUFDMUQsQ0FBQztBQUZELHdEQUVDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRG9jdW1lbnRlZCwgUHJpbWl0aXZlVHlwZSB9IGZyb20gJy4vYmFzZS10eXBlcyc7XG5pbXBvcnQgeyBpc1RhZ1Byb3BlcnR5LCBpc1RhZ1Byb3BlcnR5TmFtZSwgUHJvcGVydHksIFRhZ1Byb3BlcnR5IH0gZnJvbSAnLi9wcm9wZXJ0eSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb3VyY2VUeXBlIGV4dGVuZHMgRG9jdW1lbnRlZCB7XG4gIC8qKlxuICAgKiBUaGUgYXR0cmlidXRlcyBleHBvc2VkIGJ5IHRoZSByZXNvdXJjZSB0eXBlLCBpZiBhbnkuXG4gICAqL1xuICBBdHRyaWJ1dGVzPzogeyBbbmFtZTogc3RyaW5nXTogQXR0cmlidXRlIH07XG4gIC8qKlxuICAgKiBUaGUgcHJvcGVydGllcyBhY2NlcHRlZCBieSB0aGUgcmVzb3VyY2UgdHlwZSwgaWYgYW55LlxuICAgKi9cbiAgUHJvcGVydGllcz86IHsgW25hbWU6IHN0cmluZ106IFByb3BlcnR5IH07XG4gIC8qKlxuICAgKiBUaGUgYGBUcmFuc2Zvcm1gYCByZXF1aXJlZCBieSB0aGUgcmVzb3VyY2UgdHlwZSwgaWYgYW55LlxuICAgKi9cbiAgUmVxdWlyZWRUcmFuc2Zvcm0/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoYXQga2luZCBvZiB2YWx1ZSB0aGUgJ1JlZicgb3BlcmF0b3IgcmVmZXJzIHRvLCBpZiBhbnkuXG4gICAqL1xuICBSZWZLaW5kPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBEdXJpbmcgYSBzdGFjayB1cGRhdGUsIHdoYXQga2luZCBvZiBhZGRpdGlvbmFsIHNjcnV0aW55IGNoYW5nZXMgdG8gdGhpcyByZXNvdXJjZSBzaG91bGQgYmUgc3ViamVjdGVkIHRvXG4gICAqXG4gICAqIEBkZWZhdWx0IE5vbmVcbiAgICovXG4gIFNjcnV0aW55VHlwZT86IFJlc291cmNlU2NydXRpbnlUeXBlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRhZ2dhYmxlUmVzb3VyY2UgZXh0ZW5kcyBSZXNvdXJjZVR5cGUge1xuICBQcm9wZXJ0aWVzOiB7XG4gICAgRmlsZVN5c3RlbVRhZ3M6IFRhZ1Byb3BlcnR5O1xuICAgIEhvc3RlZFpvbmVUYWdzOiBUYWdQcm9wZXJ0eTtcbiAgICBUYWdzOiBUYWdQcm9wZXJ0eTtcbiAgICBVc2VyUG9vbFRhZ3M6IFRhZ1Byb3BlcnR5O1xuICAgIEFjY2Vzc1BvaW50VGFnczogVGFnUHJvcGVydHk7XG4gICAgW25hbWU6IHN0cmluZ106IFByb3BlcnR5O1xuICB9XG59XG5cbmV4cG9ydCB0eXBlIEF0dHJpYnV0ZSA9IFByaW1pdGl2ZUF0dHJpYnV0ZSB8IExpc3RBdHRyaWJ1dGUgfCBNYXBBdHRyaWJ1dGU7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJpbWl0aXZlQXR0cmlidXRlIHtcbiAgUHJpbWl0aXZlVHlwZTogUHJpbWl0aXZlVHlwZTtcbn1cblxuZXhwb3J0IHR5cGUgTGlzdEF0dHJpYnV0ZSA9IFByaW1pdGl2ZUxpc3RBdHRyaWJ1dGUgfCBDb21wbGV4TGlzdEF0dHJpYnV0ZTtcblxuZXhwb3J0IGludGVyZmFjZSBQcmltaXRpdmVMaXN0QXR0cmlidXRlIHtcbiAgVHlwZTogJ0xpc3QnO1xuICBQcmltaXRpdmVJdGVtVHlwZTogUHJpbWl0aXZlVHlwZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb21wbGV4TGlzdEF0dHJpYnV0ZSB7XG4gIFR5cGU6ICdMaXN0JztcbiAgSXRlbVR5cGU6IHN0cmluZztcbn1cblxuZXhwb3J0IHR5cGUgTWFwQXR0cmlidXRlID0gUHJpbWl0aXZlTWFwQXR0cmlidXRlO1xuXG5leHBvcnQgaW50ZXJmYWNlIFByaW1pdGl2ZU1hcEF0dHJpYnV0ZSB7XG4gIFR5cGU6ICdNYXAnO1xuICBQcmltaXRpdmVJdGVtVHlwZTogUHJpbWl0aXZlVHlwZTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgdGhlIHJlc291cmNlIHN1cHBvcnRzIHRhZ3NcbiAqXG4gKiBUaGlzIGZ1bmN0aW9uIGNvbWJpbmVkIHdpdGggaXNUYWdQcm9wZXJ0eSBkZXRlcm1pbmVzIGlmIHRoZSBgY2RrLlRhZ01hbmFnZXJgXG4gKiBhbmQgYGNkay5UYWdnYWJsZVJlc291cmNlYCBjYW4gcHJvY2VzcyB0aGVzZSB0YWdzLiBJZiBub3QsIHN0YW5kYXJkIGNvZGVcbiAqIGdlbmVyYXRpb24gb2YgcHJvcGVydGllcyB3aWxsIGJlIHVzZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1RhZ2dhYmxlUmVzb3VyY2Uoc3BlYzogUmVzb3VyY2VUeXBlKTogc3BlYyBpcyBUYWdnYWJsZVJlc291cmNlIHtcbiAgaWYgKHNwZWMuUHJvcGVydGllcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHNwZWMuUHJvcGVydGllcykpIHtcbiAgICBpZiAoaXNUYWdQcm9wZXJ0eU5hbWUoa2V5KSAmJiBpc1RhZ1Byb3BlcnR5KHNwZWMuUHJvcGVydGllc1trZXldKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUHJpbWl0aXZlQXR0cmlidXRlKHNwZWM6IEF0dHJpYnV0ZSk6IHNwZWMgaXMgUHJpbWl0aXZlQXR0cmlidXRlIHtcbiAgcmV0dXJuICEhKHNwZWMgYXMgUHJpbWl0aXZlQXR0cmlidXRlKS5QcmltaXRpdmVUeXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNMaXN0QXR0cmlidXRlKHNwZWM6IEF0dHJpYnV0ZSk6IHNwZWMgaXMgTGlzdEF0dHJpYnV0ZSB7XG4gIHJldHVybiAoc3BlYyBhcyBMaXN0QXR0cmlidXRlKS5UeXBlID09PSAnTGlzdCc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc01hcEF0dHJpYnV0ZShzcGVjOiBBdHRyaWJ1dGUpOiBzcGVjIGlzIE1hcEF0dHJpYnV0ZSB7XG4gIHJldHVybiAoc3BlYyBhcyBNYXBBdHRyaWJ1dGUpLlR5cGUgPT09ICdNYXAnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNQcmltaXRpdmVMaXN0QXR0cmlidXRlKHNwZWM6IEF0dHJpYnV0ZSk6IHNwZWMgaXMgUHJpbWl0aXZlTGlzdEF0dHJpYnV0ZSB7XG4gIHJldHVybiBpc0xpc3RBdHRyaWJ1dGUoc3BlYykgJiYgISEoc3BlYyBhcyBQcmltaXRpdmVMaXN0QXR0cmlidXRlKS5QcmltaXRpdmVJdGVtVHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQ29tcGxleExpc3RBdHRyaWJ1dGUoc3BlYzogQXR0cmlidXRlKTogc3BlYyBpcyBDb21wbGV4TGlzdEF0dHJpYnV0ZSB7XG4gIHJldHVybiBpc0xpc3RBdHRyaWJ1dGUoc3BlYykgJiYgISEoc3BlYyBhcyBDb21wbGV4TGlzdEF0dHJpYnV0ZSkuSXRlbVR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1ByaW1pdGl2ZU1hcEF0dHJpYnV0ZShzcGVjOiBBdHRyaWJ1dGUpOiBzcGVjIGlzIFByaW1pdGl2ZU1hcEF0dHJpYnV0ZSB7XG4gIHJldHVybiBpc01hcEF0dHJpYnV0ZShzcGVjKSAmJiAhIShzcGVjIGFzIFByaW1pdGl2ZU1hcEF0dHJpYnV0ZSkuUHJpbWl0aXZlSXRlbVR5cGU7XG59XG5cbi8qKlxuICogVHlwZSBkZWNsYXJhdGlvbiBmb3Igc3BlY2lhbCB2YWx1ZXMgb2YgdGhlIFwiUmVmXCIgYXR0cmlidXRlIHJlcHJlc2VudHMuXG4gKlxuICogVGhlIGF0dHJpYnV0ZSBjYW4gdGFrZSBvbiBtb3JlIHZhbHVlcyB0aGFuIHRoZXNlLCBidXQgdGhlc2UgYXJlIHRyZWF0ZWQgc3BlY2lhbGx5LlxuICovXG5leHBvcnQgZW51bSBTcGVjaWFsUmVmS2luZCB7XG4gIC8qKlxuICAgKiBObyAnLnJlZicgbWVtYmVyIGlzIGdlbmVyYXRlZCBmb3IgdGhpcyB0eXBlLCBiZWNhdXNlIGl0IGRvZXNuJ3QgaGF2ZSBhIG1lYW5pbmdmdWwgdmFsdWUuXG4gICAqL1xuICBOb25lID0gJ05vbmUnLFxuXG4gIC8qKlxuICAgKiBUaGUgZ2VuZXJhdGVkIGNsYXNzIHdpbGwgaW5oZXJpdCBmcm9tIHRoZSBidWlsdC1pbiAnQXJuJyB0eXBlLlxuICAgKi9cbiAgQXJuID0gJ0Fybidcbn1cblxuZXhwb3J0IGVudW0gUmVzb3VyY2VTY3J1dGlueVR5cGUge1xuICAvKipcbiAgICogTm8gYWRkaXRpb25hbCBzY3J1dGlueVxuICAgKi9cbiAgTm9uZSA9ICdOb25lJyxcblxuICAvKipcbiAgICogQW4gZXh0ZXJuYWxseSBhdHRhY2hlZCBwb2xpY3kgZG9jdW1lbnQgdG8gYSByZXNvdXJjZVxuICAgKlxuICAgKiAoQ29tbW9uIGZvciBTUVMsIFNOUywgUzMsIC4uLilcbiAgICovXG4gIFJlc291cmNlUG9saWN5UmVzb3VyY2UgPSAnUmVzb3VyY2VQb2xpY3lSZXNvdXJjZScsXG5cbiAgLyoqXG4gICAqIFRoaXMgaXMgYW4gSUFNIHBvbGljeSBvbiBhbiBpZGVudGl0eSByZXNvdXJjZVxuICAgKlxuICAgKiAoQmFzaWNhbGx5IHNheWluZzogdGhpcyBpcyBBV1M6OklBTTo6UG9saWN5KVxuICAgKi9cbiAgSWRlbnRpdHlQb2xpY3lSZXNvdXJjZSA9ICdJZGVudGl0eVBvbGljeVJlc291cmNlJyxcblxuICAvKipcbiAgICogVGhpcyBpcyBhIExhbWJkYSBQZXJtaXNzaW9uIHBvbGljeVxuICAgKi9cbiAgTGFtYmRhUGVybWlzc2lvbiA9ICdMYW1iZGFQZXJtaXNzaW9uJyxcblxuICAvKipcbiAgICogQW4gaW5ncmVzcyBydWxlIG9iamVjdFxuICAgKi9cbiAgSW5ncmVzc1J1bGVSZXNvdXJjZSA9ICdJbmdyZXNzUnVsZVJlc291cmNlJyxcblxuICAvKipcbiAgICogQSBzZXQgb2YgZWdyZXNzIHJ1bGVzXG4gICAqL1xuICBFZ3Jlc3NSdWxlUmVzb3VyY2UgPSAnRWdyZXNzUnVsZVJlc291cmNlJyxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUmVzb3VyY2VTY3J1dGlueVR5cGUoc3RyOiBzdHJpbmcpOiBzdHIgaXMgUmVzb3VyY2VTY3J1dGlueVR5cGUge1xuICByZXR1cm4gKFJlc291cmNlU2NydXRpbnlUeXBlIGFzIGFueSlbc3RyXSAhPT0gdW5kZWZpbmVkO1xufVxuIl19
+
+/***/ }),
+
+/***/ 96178:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.isRecordType = void 0;
+/**
+ * Whether the given type definition is a Record property
+ */
+function isRecordType(propertyType) {
+ return 'Properties' in propertyType;
+}
+exports.isRecordType = isRecordType;
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BlY2lmaWNhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInNwZWNpZmljYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBa0RBOztHQUVHO0FBQ0gsU0FBZ0IsWUFBWSxDQUFDLFlBQTBCO0lBQ3JELE9BQU8sWUFBWSxJQUFJLFlBQVksQ0FBQztBQUN0QyxDQUFDO0FBRkQsb0NBRUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEb2N1bWVudGVkIH0gZnJvbSAnLi9iYXNlLXR5cGVzJztcbmltcG9ydCB7IFByb3BlcnR5IH0gZnJvbSAnLi9wcm9wZXJ0eSc7XG5pbXBvcnQgeyBSZXNvdXJjZVR5cGUgfSBmcm9tICcuL3Jlc291cmNlLXR5cGUnO1xuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvY2ZuLXJlc291cmNlLXNwZWNpZmljYXRpb24tZm9ybWF0Lmh0bWxcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTcGVjaWZpY2F0aW9uIHtcbiAgLyoqXG4gICAqIEEgZmluZ2VycHJpbnQgb2YgdGhlIHRlbXBsYXRlLCB0aGF0IGNhbiBiZSB1c2VkIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSB0ZW1wbGF0ZSBoYXMgY2hhbmdlZC5cbiAgICovXG4gIEZpbmdlcnByaW50OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBGb3IgcmVzb3VyY2VzIHRoYXQgaGF2ZSBwcm9wZXJ0aWVzIHdpdGhpbiBhIHByb3BlcnR5IChhbHNvIGtub3duIGFzIHN1YnByb3BlcnRpZXMpLCBhIGxpc3Qgb2Ygc3VicHJvcGVydHlcbiAgICogc3BlY2lmaWNhdGlvbnMsIHN1Y2ggYXMgd2hpY2ggcHJvcGVydGllcyBhcmUgcmVxdWlyZWQsIHRoZSB0eXBlIG9mIGFsbG93ZWQgdmFsdWUgZm9yIGVhY2ggcHJvcGVydHksIGFuZCB0aGVpclxuICAgKiB1cGRhdGUgYmVoYXZpb3IuXG4gICAqL1xuICBQcm9wZXJ0eVR5cGVzOiB7IFtuYW1lOiBzdHJpbmddOiBQcm9wZXJ0eVR5cGUgfTtcbiAgLyoqXG4gICAqIFRoZSBsaXN0IG9mIHJlc291cmNlcyBhbmQgaW5mb3JtYXRpb24gYWJvdXQgZWFjaCByZXNvdXJjZSdzIHByb3BlcnRpZXMsIHN1Y2ggYXMgaXQncyBwcm9wZXJ0eSBuYW1lcywgd2hpY2hcbiAgICogcHJvcGVydGllcyBhcmUgcmVxdWlyZWQsIGFuZCB0aGVpciB1cGRhdGUgYmVoYXZpb3IuXG4gICAqL1xuICBSZXNvdXJjZVR5cGVzOiB7IFtuYW1lOiBzdHJpbmddOiBSZXNvdXJjZVR5cGUgfTtcbn1cblxuLyoqXG4gKiBEZXNjcmliaW5nIGEgdXNlci1kZWZpbmVkIHByb3BlcnR5IHR5cGVcbiAqXG4gKiBFdmVuIHRob3VnaCBsb29rcyB3ZWlyZCwgdGhlIENsb3VkRm9ybWF0aW9uIHNwZWMgZG9lcyBub3QgbWFrZSBhIGRpc3RpbmN0aW9uIGJldHdlZW4gcHJvcGVydGllcyBhbmRcbiAqIHByb3BlcnR5IFRZUEVTOiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9jZm4tcmVzb3VyY2Utc3BlY2lmaWNhdGlvbi1mb3JtYXQuaHRtbFxuICpcbiAqIFRoYXQgbWVhbnMgdGhhdCBhIFwidHlwZVwiIGNvbWVzIHdpdGggZmllbGRzIHN1Y2ggYXMgXCJSZXF1aXJlZFwiLCBcIlVwZGF0ZVR5cGUgTXV0YWJsZVwiLCBldGNcbiAqIChldmVuIHRob3VnaCB0aG9zZSBvbmx5IG1ha2Ugc2Vuc2UgZm9yIGEgcGFydGljdWxhciBQUk9QRVJUWSBvZiB0aGF0IHR5cGUpLiBUaGV5IG9ubHkgc2VlbSB0byBvY2N1clxuICogb24gbm9uLVJlY29yZCBwcm9wZXJ0aWVzIHRob3VnaC5cbiAqXG4gKiBJbiBwcmFjdGljZSwgZXZlbiB0aG91Z2ggYWxpYXNlcyBmb3IgUHJpbWl0aXZlIHByb3BlcnRpZXMgYXJlIGFsbG93ZWQsIG9ubHkgUmVjb3JkUHJvcGVydGllc1xuICogYW5kIENvbGxlY3Rpb25Qcm9wZXJ0aWVzIHNlZW0gdG8gYWN0dWFsbHkgb2NjdXIgaW4gdGhlIHNwZWMgaW4gdGhlIFwidHlwZXNcIiBzZWN0aW9uLlxuICovXG5leHBvcnQgdHlwZSBQcm9wZXJ0eVR5cGUgPSBSZWNvcmRQcm9wZXJ0eSB8IFByb3BlcnR5O1xuXG4vKipcbiAqIFRoZSBzcGVjaWZpY2F0aW9ucyBvZiBhIHByb3BlcnR5IG9iamVjdCB0eXBlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlY29yZFByb3BlcnR5IGV4dGVuZHMgRG9jdW1lbnRlZCB7XG4gIC8qKlxuICAgKiBUaGUgcHJvcGVydGllcyBvZiB0aGUgUHJvcGVydHkgdHlwZS5cbiAgICovXG4gIFByb3BlcnRpZXM6IHsgW25hbWU6IHN0cmluZ106IFByb3BlcnR5IH07XG59XG5cbi8qKlxuICogV2hldGhlciB0aGUgZ2l2ZW4gdHlwZSBkZWZpbml0aW9uIGlzIGEgUmVjb3JkIHByb3BlcnR5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1JlY29yZFR5cGUocHJvcGVydHlUeXBlOiBQcm9wZXJ0eVR5cGUpOiBwcm9wZXJ0eVR5cGUgaXMgUmVjb3JkUHJvcGVydHkge1xuICByZXR1cm4gJ1Byb3BlcnRpZXMnIGluIHByb3BlcnR5VHlwZTtcbn1cbiJdfQ==
+
+/***/ }),
+
+/***/ 34146:
+/***/ ((module) => {
+
+function _aws_cdk_cloud_assembly_schema_ArtifactType(p) {
+}
+function _aws_cdk_cloud_assembly_schema_RuntimeInfo(p) {
+}
+function _aws_cdk_cloud_assembly_schema_MissingContext(p) {
+ if (p == null)
+ return;
+ visitedObjects.add(p);
+ try {
+ if (!visitedObjects.has(p.props))
+ _aws_cdk_cloud_assembly_schema_AmiContextQuery(p.props);
+ if (!visitedObjects.has(p.provider))
+ _aws_cdk_cloud_assembly_schema_ContextProvider(p.provider);
+ }
+ finally {
+ visitedObjects.delete(p);
+ }
+}
+function _aws_cdk_cloud_assembly_schema_ArtifactManifest(p) {
+ if (p == null)
+ return;
+ visitedObjects.add(p);
+ try {
+ if (!visitedObjects.has(p.type))
+ _aws_cdk_cloud_assembly_schema_ArtifactType(p.type);
+ if (!visitedObjects.has(p.properties))
+ _aws_cdk_cloud_assembly_schema_AwsCloudFormationStackProperties(p.properties);
+ }
+ finally {
+ visitedObjects.delete(p);
+ }
+}
+function _aws_cdk_cloud_assembly_schema_AssemblyManifest(p) {
+ if (p == null)
+ return;
+ visitedObjects.add(p);
+ try {
+ if (p.artifacts != null)
+ for (const o of Object.values(p.artifacts))
+ if (!visitedObjects.has(o))
+ _aws_cdk_cloud_assembly_schema_ArtifactManifest(o);
+ if (p.missing != null)
+ for (const o of p.missing)
+ if (!visitedObjects.has(o))
+ _aws_cdk_cloud_assembly_schema_MissingContext(o);
+ if (!visitedObjects.has(p.runtime))
+ _aws_cdk_cloud_assembly_schema_RuntimeInfo(p.runtime);
+ }
+ finally {
+ visitedObjects.delete(p);
+ }
+}
+function _aws_cdk_cloud_assembly_schema_FileAssetMetadataEntry(p) {
+}
+function _aws_cdk_cloud_assembly_schema_Tag(p) {
+}
+function _aws_cdk_cloud_assembly_schema_ContainerImageAssetCacheOption(p) {
+}
+function _aws_cdk_cloud_assembly_schema_ContainerImageAssetMetadataEntry(p) {
+ if (p == null)
+ return;
+ visitedObjects.add(p);
+ try {
+ if (p.cacheFrom != null)
+ for (const o of p.cacheFrom)
+ if (!visitedObjects.has(o))
+ _aws_cdk_cloud_assembly_schema_ContainerImageAssetCacheOption(o);
+ if (!visitedObjects.has(p.cacheTo))
+ _aws_cdk_cloud_assembly_schema_ContainerImageAssetCacheOption(p.cacheTo);
+ if ("imageNameParameter" in p)
+ print("@aws-cdk/cloud-assembly-schema.ContainerImageAssetMetadataEntry#imageNameParameter", "specify `repositoryName` and `imageTag` instead, and then you\nknow where the image will go.");
+ }
+ finally {
+ visitedObjects.delete(p);
+ }
+}
+function _aws_cdk_cloud_assembly_schema_ArtifactMetadataEntryType(p) {
+}
+function _aws_cdk_cloud_assembly_schema_MetadataEntry(p) {
+}
+function _aws_cdk_cloud_assembly_schema_BootstrapRole(p) {
+}
+function _aws_cdk_cloud_assembly_schema_AwsCloudFormationStackProperties(p) {
+ if (p == null)
+ return;
+ visitedObjects.add(p);
+ try {
+ if (!visitedObjects.has(p.lookupRole))
+ _aws_cdk_cloud_assembly_schema_BootstrapRole(p.lookupRole);
+ }
+ finally {
+ visitedObjects.delete(p);
+ }
+}
+function _aws_cdk_cloud_assembly_schema_AssetManifestOptions(p) {
+}
+function _aws_cdk_cloud_assembly_schema_AssetManifestProperties(p) {
+}
+function _aws_cdk_cloud_assembly_schema_TreeArtifactProperties(p) {
+}
+function _aws_cdk_cloud_assembly_schema_NestedCloudAssemblyProperties(p) {
+}
+function _aws_cdk_cloud_assembly_schema_ContextProvider(p) {
+}
+function _aws_cdk_cloud_assembly_schema_AmiContextQuery(p) {
+}
+function _aws_cdk_cloud_assembly_schema_AvailabilityZonesContextQuery(p) {
+}
+function _aws_cdk_cloud_assembly_schema_HostedZoneContextQuery(p) {
+}
+function _aws_cdk_cloud_assembly_schema_SSMParameterContextQuery(p) {
+}
+function _aws_cdk_cloud_assembly_schema_VpcContextQuery(p) {
+}
+function _aws_cdk_cloud_assembly_schema_EndpointServiceAvailabilityZonesContextQuery(p) {
+}
+function _aws_cdk_cloud_assembly_schema_LoadBalancerType(p) {
+}
+function _aws_cdk_cloud_assembly_schema_LoadBalancerFilter(p) {
+ if (p == null)
+ return;
+ visitedObjects.add(p);
+ try {
+ if (!visitedObjects.has(p.loadBalancerType))
+ _aws_cdk_cloud_assembly_schema_LoadBalancerType(p.loadBalancerType);
+ if (p.loadBalancerTags != null)
+ for (const o of p.loadBalancerTags)
+ if (!visitedObjects.has(o))
+ _aws_cdk_cloud_assembly_schema_Tag(o);
+ }
+ finally {
+ visitedObjects.delete(p);
+ }
+}
+function _aws_cdk_cloud_assembly_schema_LoadBalancerContextQuery(p) {
+ if (p == null)
+ return;
+ visitedObjects.add(p);
+ try {
+ if (!visitedObjects.has(p.loadBalancerType))
+ _aws_cdk_cloud_assembly_schema_LoadBalancerType(p.loadBalancerType);
+ if (p.loadBalancerTags != null)
+ for (const o of p.loadBalancerTags)
+ if (!visitedObjects.has(o))
+ _aws_cdk_cloud_assembly_schema_Tag(o);
+ }
+ finally {
+ visitedObjects.delete(p);
+ }
+}
+function _aws_cdk_cloud_assembly_schema_LoadBalancerListenerProtocol(p) {
+}
+function _aws_cdk_cloud_assembly_schema_LoadBalancerListenerContextQuery(p) {
+ if (p == null)
+ return;
+ visitedObjects.add(p);
+ try {
+ if (!visitedObjects.has(p.listenerProtocol))
+ _aws_cdk_cloud_assembly_schema_LoadBalancerListenerProtocol(p.listenerProtocol);
+ if (!visitedObjects.has(p.loadBalancerType))
+ _aws_cdk_cloud_assembly_schema_LoadBalancerType(p.loadBalancerType);
+ if (p.loadBalancerTags != null)
+ for (const o of p.loadBalancerTags)
+ if (!visitedObjects.has(o))
+ _aws_cdk_cloud_assembly_schema_Tag(o);
+ }
+ finally {
+ visitedObjects.delete(p);
+ }
+}
+function _aws_cdk_cloud_assembly_schema_SecurityGroupContextQuery(p) {
+}
+function _aws_cdk_cloud_assembly_schema_KeyContextQuery(p) {
+}
+function _aws_cdk_cloud_assembly_schema_PluginContextQuery(p) {
+}
+function _aws_cdk_cloud_assembly_schema_AssetManifest(p) {
+ if (p == null)
+ return;
+ visitedObjects.add(p);
+ try {
+ if (p.dockerImages != null)
+ for (const o of Object.values(p.dockerImages))
+ if (!visitedObjects.has(o))
+ _aws_cdk_cloud_assembly_schema_DockerImageAsset(o);
+ if (p.files != null)
+ for (const o of Object.values(p.files))
+ if (!visitedObjects.has(o))
+ _aws_cdk_cloud_assembly_schema_FileAsset(o);
+ }
+ finally {
+ visitedObjects.delete(p);
+ }
+}
+function _aws_cdk_cloud_assembly_schema_DockerImageAsset(p) {
+ if (p == null)
+ return;
+ visitedObjects.add(p);
+ try {
+ if (p.destinations != null)
+ for (const o of Object.values(p.destinations))
+ if (!visitedObjects.has(o))
+ _aws_cdk_cloud_assembly_schema_DockerImageDestination(o);
+ if (!visitedObjects.has(p.source))
+ _aws_cdk_cloud_assembly_schema_DockerImageSource(p.source);
+ }
+ finally {
+ visitedObjects.delete(p);
+ }
+}
+function _aws_cdk_cloud_assembly_schema_DockerImageSource(p) {
+ if (p == null)
+ return;
+ visitedObjects.add(p);
+ try {
+ if (p.cacheFrom != null)
+ for (const o of p.cacheFrom)
+ if (!visitedObjects.has(o))
+ _aws_cdk_cloud_assembly_schema_DockerCacheOption(o);
+ if (!visitedObjects.has(p.cacheTo))
+ _aws_cdk_cloud_assembly_schema_DockerCacheOption(p.cacheTo);
+ }
+ finally {
+ visitedObjects.delete(p);
+ }
+}
+function _aws_cdk_cloud_assembly_schema_DockerImageDestination(p) {
+}
+function _aws_cdk_cloud_assembly_schema_DockerCacheOption(p) {
+}
+function _aws_cdk_cloud_assembly_schema_FileAsset(p) {
+ if (p == null)
+ return;
+ visitedObjects.add(p);
+ try {
+ if (p.destinations != null)
+ for (const o of Object.values(p.destinations))
+ if (!visitedObjects.has(o))
+ _aws_cdk_cloud_assembly_schema_FileDestination(o);
+ if (!visitedObjects.has(p.source))
+ _aws_cdk_cloud_assembly_schema_FileSource(p.source);
+ }
+ finally {
+ visitedObjects.delete(p);
+ }
+}
+function _aws_cdk_cloud_assembly_schema_FileAssetPackaging(p) {
+}
+function _aws_cdk_cloud_assembly_schema_FileSource(p) {
+ if (p == null)
+ return;
+ visitedObjects.add(p);
+ try {
+ if (!visitedObjects.has(p.packaging))
+ _aws_cdk_cloud_assembly_schema_FileAssetPackaging(p.packaging);
+ }
+ finally {
+ visitedObjects.delete(p);
+ }
+}
+function _aws_cdk_cloud_assembly_schema_FileDestination(p) {
+}
+function _aws_cdk_cloud_assembly_schema_AwsDestination(p) {
+}
+function _aws_cdk_cloud_assembly_schema_LoadManifestOptions(p) {
+}
+function _aws_cdk_cloud_assembly_schema_Manifest(p) {
+}
+function _aws_cdk_cloud_assembly_schema_IntegManifest(p) {
+ if (p == null)
+ return;
+ visitedObjects.add(p);
+ try {
+ if (p.testCases != null)
+ for (const o of Object.values(p.testCases))
+ if (!visitedObjects.has(o))
+ _aws_cdk_cloud_assembly_schema_TestCase(o);
+ }
+ finally {
+ visitedObjects.delete(p);
+ }
+}
+function _aws_cdk_cloud_assembly_schema_RequireApproval(p) {
+}
+function _aws_cdk_cloud_assembly_schema_DefaultCdkOptions(p) {
+}
+function _aws_cdk_cloud_assembly_schema_DeployOptions(p) {
+ if (p == null)
+ return;
+ visitedObjects.add(p);
+ try {
+ if (!visitedObjects.has(p.requireApproval))
+ _aws_cdk_cloud_assembly_schema_RequireApproval(p.requireApproval);
+ }
+ finally {
+ visitedObjects.delete(p);
+ }
+}
+function _aws_cdk_cloud_assembly_schema_DestroyOptions(p) {
+}
+function _aws_cdk_cloud_assembly_schema_TestOptions(p) {
+ if (p == null)
+ return;
+ visitedObjects.add(p);
+ try {
+ if (!visitedObjects.has(p.cdkCommandOptions))
+ _aws_cdk_cloud_assembly_schema_CdkCommands(p.cdkCommandOptions);
+ if (!visitedObjects.has(p.hooks))
+ _aws_cdk_cloud_assembly_schema_Hooks(p.hooks);
+ }
+ finally {
+ visitedObjects.delete(p);
+ }
+}
+function _aws_cdk_cloud_assembly_schema_TestCase(p) {
+ if (p == null)
+ return;
+ visitedObjects.add(p);
+ try {
+ if (!visitedObjects.has(p.cdkCommandOptions))
+ _aws_cdk_cloud_assembly_schema_CdkCommands(p.cdkCommandOptions);
+ if (!visitedObjects.has(p.hooks))
+ _aws_cdk_cloud_assembly_schema_Hooks(p.hooks);
+ }
+ finally {
+ visitedObjects.delete(p);
+ }
+}
+function _aws_cdk_cloud_assembly_schema_Hooks(p) {
+}
+function _aws_cdk_cloud_assembly_schema_CdkCommand(p) {
+}
+function _aws_cdk_cloud_assembly_schema_DeployCommand(p) {
+ if (p == null)
+ return;
+ visitedObjects.add(p);
+ try {
+ if (!visitedObjects.has(p.args))
+ _aws_cdk_cloud_assembly_schema_DeployOptions(p.args);
+ }
+ finally {
+ visitedObjects.delete(p);
+ }
+}
+function _aws_cdk_cloud_assembly_schema_DestroyCommand(p) {
+ if (p == null)
+ return;
+ visitedObjects.add(p);
+ try {
+ if (!visitedObjects.has(p.args))
+ _aws_cdk_cloud_assembly_schema_DestroyOptions(p.args);
+ }
+ finally {
+ visitedObjects.delete(p);
+ }
+}
+function _aws_cdk_cloud_assembly_schema_CdkCommands(p) {
+ if (p == null)
+ return;
+ visitedObjects.add(p);
+ try {
+ if (!visitedObjects.has(p.deploy))
+ _aws_cdk_cloud_assembly_schema_DeployCommand(p.deploy);
+ if (!visitedObjects.has(p.destroy))
+ _aws_cdk_cloud_assembly_schema_DestroyCommand(p.destroy);
+ }
+ finally {
+ visitedObjects.delete(p);
+ }
+}
+function print(name, deprecationMessage) {
+ const deprecated = process.env.JSII_DEPRECATED;
+ const deprecationMode = ["warn", "fail", "quiet"].includes(deprecated) ? deprecated : "warn";
+ const message = `${name} is deprecated.\n ${deprecationMessage.trim()}\n This API will be removed in the next major release.`;
+ switch (deprecationMode) {
+ case "fail":
+ throw new DeprecationError(message);
+ case "warn":
+ console.warn("[WARNING]", message);
+ break;
+ }
+}
+function getPropertyDescriptor(obj, prop) {
+ const descriptor = Object.getOwnPropertyDescriptor(obj, prop);
+ if (descriptor) {
+ return descriptor;
+ }
+ const proto = Object.getPrototypeOf(obj);
+ const prototypeDescriptor = proto && getPropertyDescriptor(proto, prop);
+ if (prototypeDescriptor) {
+ return prototypeDescriptor;
+ }
+ return {};
+}
+const visitedObjects = new Set();
+class DeprecationError extends Error {
+ constructor(...args) {
+ super(...args);
+ Object.defineProperty(this, "name", {
+ configurable: false,
+ enumerable: true,
+ value: "DeprecationError",
+ writable: false,
+ });
+ }
+}
+module.exports = { print, getPropertyDescriptor, DeprecationError, _aws_cdk_cloud_assembly_schema_ArtifactType, _aws_cdk_cloud_assembly_schema_RuntimeInfo, _aws_cdk_cloud_assembly_schema_MissingContext, _aws_cdk_cloud_assembly_schema_ArtifactManifest, _aws_cdk_cloud_assembly_schema_AssemblyManifest, _aws_cdk_cloud_assembly_schema_FileAssetMetadataEntry, _aws_cdk_cloud_assembly_schema_Tag, _aws_cdk_cloud_assembly_schema_ContainerImageAssetCacheOption, _aws_cdk_cloud_assembly_schema_ContainerImageAssetMetadataEntry, _aws_cdk_cloud_assembly_schema_ArtifactMetadataEntryType, _aws_cdk_cloud_assembly_schema_MetadataEntry, _aws_cdk_cloud_assembly_schema_BootstrapRole, _aws_cdk_cloud_assembly_schema_AwsCloudFormationStackProperties, _aws_cdk_cloud_assembly_schema_AssetManifestOptions, _aws_cdk_cloud_assembly_schema_AssetManifestProperties, _aws_cdk_cloud_assembly_schema_TreeArtifactProperties, _aws_cdk_cloud_assembly_schema_NestedCloudAssemblyProperties, _aws_cdk_cloud_assembly_schema_ContextProvider, _aws_cdk_cloud_assembly_schema_AmiContextQuery, _aws_cdk_cloud_assembly_schema_AvailabilityZonesContextQuery, _aws_cdk_cloud_assembly_schema_HostedZoneContextQuery, _aws_cdk_cloud_assembly_schema_SSMParameterContextQuery, _aws_cdk_cloud_assembly_schema_VpcContextQuery, _aws_cdk_cloud_assembly_schema_EndpointServiceAvailabilityZonesContextQuery, _aws_cdk_cloud_assembly_schema_LoadBalancerType, _aws_cdk_cloud_assembly_schema_LoadBalancerFilter, _aws_cdk_cloud_assembly_schema_LoadBalancerContextQuery, _aws_cdk_cloud_assembly_schema_LoadBalancerListenerProtocol, _aws_cdk_cloud_assembly_schema_LoadBalancerListenerContextQuery, _aws_cdk_cloud_assembly_schema_SecurityGroupContextQuery, _aws_cdk_cloud_assembly_schema_KeyContextQuery, _aws_cdk_cloud_assembly_schema_PluginContextQuery, _aws_cdk_cloud_assembly_schema_AssetManifest, _aws_cdk_cloud_assembly_schema_DockerImageAsset, _aws_cdk_cloud_assembly_schema_DockerImageSource, _aws_cdk_cloud_assembly_schema_DockerImageDestination, _aws_cdk_cloud_assembly_schema_DockerCacheOption, _aws_cdk_cloud_assembly_schema_FileAsset, _aws_cdk_cloud_assembly_schema_FileAssetPackaging, _aws_cdk_cloud_assembly_schema_FileSource, _aws_cdk_cloud_assembly_schema_FileDestination, _aws_cdk_cloud_assembly_schema_AwsDestination, _aws_cdk_cloud_assembly_schema_LoadManifestOptions, _aws_cdk_cloud_assembly_schema_Manifest, _aws_cdk_cloud_assembly_schema_IntegManifest, _aws_cdk_cloud_assembly_schema_RequireApproval, _aws_cdk_cloud_assembly_schema_DefaultCdkOptions, _aws_cdk_cloud_assembly_schema_DeployOptions, _aws_cdk_cloud_assembly_schema_DestroyOptions, _aws_cdk_cloud_assembly_schema_TestOptions, _aws_cdk_cloud_assembly_schema_TestCase, _aws_cdk_cloud_assembly_schema_Hooks, _aws_cdk_cloud_assembly_schema_CdkCommand, _aws_cdk_cloud_assembly_schema_DeployCommand, _aws_cdk_cloud_assembly_schema_DestroyCommand, _aws_cdk_cloud_assembly_schema_CdkCommands };
+
+
+/***/ }),
+
+/***/ 12120:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLWRlc3RpbmF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYXdzLWRlc3RpbmF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIERlc3RpbmF0aW9uIGZvciBhc3NldHMgdGhhdCBuZWVkIHRvIGJlIHVwbG9hZGVkIHRvIEFXU1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEF3c0Rlc3RpbmF0aW9uIHtcbiAgLyoqXG4gICAqIFRoZSByZWdpb24gd2hlcmUgdGhpcyBhc3NldCB3aWxsIG5lZWQgdG8gYmUgcHVibGlzaGVkXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gQ3VycmVudCByZWdpb25cbiAgICovXG4gIHJlYWRvbmx5IHJlZ2lvbj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHJvbGUgdGhhdCBuZWVkcyB0byBiZSBhc3N1bWVkIHdoaWxlIHB1Ymxpc2hpbmcgdGhpcyBhc3NldFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIHJvbGUgd2lsbCBiZSBhc3N1bWVkXG4gICAqL1xuICByZWFkb25seSBhc3N1bWVSb2xlQXJuPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgRXh0ZXJuYWxJZCB0aGF0IG5lZWRzIHRvIGJlIHN1cHBsaWVkIHdoaWxlIGFzc3VtaW5nIHRoaXMgcm9sZVxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIEV4dGVybmFsSWQgd2lsbCBiZSBzdXBwbGllZFxuICAgKi9cbiAgcmVhZG9ubHkgYXNzdW1lUm9sZUV4dGVybmFsSWQ/OiBzdHJpbmc7XG59Il19
+
+/***/ }),
+
+/***/ 4793:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9ja2VyLWltYWdlLWFzc2V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZG9ja2VyLWltYWdlLWFzc2V0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBd3NEZXN0aW5hdGlvbiB9IGZyb20gJy4vYXdzLWRlc3RpbmF0aW9uJztcblxuLyoqXG4gKiBBIGZpbGUgYXNzZXRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEb2NrZXJJbWFnZUFzc2V0IHtcbiAgLyoqXG4gICAqIFNvdXJjZSBkZXNjcmlwdGlvbiBmb3IgZmlsZSBhc3NldHNcbiAgICovXG4gIHJlYWRvbmx5IHNvdXJjZTogRG9ja2VySW1hZ2VTb3VyY2U7XG5cbiAgLyoqXG4gICAqIERlc3RpbmF0aW9ucyBmb3IgdGhpcyBmaWxlIGFzc2V0XG4gICAqL1xuICByZWFkb25seSBkZXN0aW5hdGlvbnM6IHsgW2lkOiBzdHJpbmddOiBEb2NrZXJJbWFnZURlc3RpbmF0aW9uIH07XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgaG93IHRvIHByb2R1Y2UgYSBEb2NrZXIgaW1hZ2UgZnJvbSBhIHNvdXJjZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIERvY2tlckltYWdlU291cmNlIHtcbiAgLyoqXG4gICAqIFRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgRG9ja2VyIGltYWdlIGJ1aWxkIGluc3RydWN0aW9ucy5cbiAgICpcbiAgICogVGhpcyBwYXRoIGlzIHJlbGF0aXZlIHRvIHRoZSBhc3NldCBtYW5pZmVzdCBsb2NhdGlvbi5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBFeGFjdGx5IG9uZSBvZiBgZGlyZWN0b3J5YCBhbmQgYGV4ZWN1dGFibGVgIGlzIHJlcXVpcmVkXG4gICAqL1xuICByZWFkb25seSBkaXJlY3Rvcnk/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgY29tbWFuZC1saW5lIGV4ZWN1dGFibGUgdGhhdCByZXR1cm5zIHRoZSBuYW1lIG9mIGEgbG9jYWxcbiAgICogRG9ja2VyIGltYWdlIG9uIHN0ZG91dCBhZnRlciBiZWluZyBydW4uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gRXhhY3RseSBvbmUgb2YgYGRpcmVjdG9yeWAgYW5kIGBleGVjdXRhYmxlYCBpcyByZXF1aXJlZFxuICAgKi9cbiAgcmVhZG9ubHkgZXhlY3V0YWJsZT86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgZmlsZSB3aXRoIGJ1aWxkIGluc3RydWN0aW9uc1xuICAgKlxuICAgKiBPbmx5IGFsbG93ZWQgd2hlbiBgZGlyZWN0b3J5YCBpcyBzZXQuXG4gICAqXG4gICAqIEBkZWZhdWx0IFwiRG9ja2VyZmlsZVwiXG4gICAqL1xuICByZWFkb25seSBkb2NrZXJGaWxlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUYXJnZXQgYnVpbGQgc3RhZ2UgaW4gYSBEb2NrZXJmaWxlIHdpdGggbXVsdGlwbGUgYnVpbGQgc3RhZ2VzXG4gICAqXG4gICAqIE9ubHkgYWxsb3dlZCB3aGVuIGBkaXJlY3RvcnlgIGlzIHNldC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBUaGUgbGFzdCBzdGFnZSBpbiB0aGUgRG9ja2VyZmlsZVxuICAgKi9cbiAgcmVhZG9ubHkgZG9ja2VyQnVpbGRUYXJnZXQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEFkZGl0aW9uYWwgYnVpbGQgYXJndW1lbnRzXG4gICAqXG4gICAqIE9ubHkgYWxsb3dlZCB3aGVuIGBkaXJlY3RvcnlgIGlzIHNldC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBhZGRpdGlvbmFsIGJ1aWxkIGFyZ3VtZW50c1xuICAgKi9cbiAgcmVhZG9ubHkgZG9ja2VyQnVpbGRBcmdzPzogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nIH07XG5cbiAgLyoqXG4gICAqIFNTSCBhZ2VudCBzb2NrZXQgb3Iga2V5c1xuICAgKlxuICAgKiBSZXF1aXJlcyBidWlsZGluZyB3aXRoIGRvY2tlciBidWlsZGtpdC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBzc2ggZmxhZyBpcyBzZXRcbiAgICovXG4gIHJlYWRvbmx5IGRvY2tlckJ1aWxkU3NoPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIGJ1aWxkIHNlY3JldHNcbiAgICpcbiAgICogT25seSBhbGxvd2VkIHdoZW4gYGRpcmVjdG9yeWAgaXMgc2V0LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIGFkZGl0aW9uYWwgYnVpbGQgc2VjcmV0c1xuICAgKi9cbiAgcmVhZG9ubHkgZG9ja2VyQnVpbGRTZWNyZXRzPzogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nIH07XG5cbiAgLyoqXG4gICAqIE5ldHdvcmtpbmcgbW9kZSBmb3IgdGhlIFJVTiBjb21tYW5kcyBkdXJpbmcgYnVpbGQuIF9SZXF1aXJlcyBEb2NrZXIgRW5naW5lIEFQSSB2MS4yNStfLlxuICAgKlxuICAgKiBTcGVjaWZ5IHRoaXMgcHJvcGVydHkgdG8gYnVpbGQgaW1hZ2VzIG9uIGEgc3BlY2lmaWMgbmV0d29ya2luZyBtb2RlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIG5ldHdvcmtpbmcgbW9kZSBzcGVjaWZpZWRcbiAgICovXG4gIHJlYWRvbmx5IG5ldHdvcmtNb2RlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQbGF0Zm9ybSB0byBidWlsZCBmb3IuIF9SZXF1aXJlcyBEb2NrZXIgQnVpbGR4Xy5cbiAgICpcbiAgICogU3BlY2lmeSB0aGlzIHByb3BlcnR5IHRvIGJ1aWxkIGltYWdlcyBvbiBhIHNwZWNpZmljIHBsYXRmb3JtL2FyY2hpdGVjdHVyZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBjdXJyZW50IG1hY2hpbmUgcGxhdGZvcm1cbiAgICovXG4gIHJlYWRvbmx5IHBsYXRmb3JtPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBPdXRwdXRzXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gb3V0cHV0cyBhcmUgcGFzc2VkIHRvIHRoZSBidWlsZCBjb21tYW5kIChkZWZhdWx0IG91dHB1dHMgYXJlIHVzZWQpXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmRvY2tlci5jb20vZW5naW5lL3JlZmVyZW5jZS9jb21tYW5kbGluZS9idWlsZC8jY3VzdG9tLWJ1aWxkLW91dHB1dHNcbiAgICovXG4gIHJlYWRvbmx5IGRvY2tlck91dHB1dHM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogQ2FjaGUgZnJvbSBvcHRpb25zIHRvIHBhc3MgdG8gdGhlIGBkb2NrZXIgYnVpbGRgIGNvbW1hbmQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gY2FjaGUgZnJvbSBvcHRpb25zIGFyZSBwYXNzZWQgdG8gdGhlIGJ1aWxkIGNvbW1hbmRcbiAgICogQHNlZSBodHRwczovL2RvY3MuZG9ja2VyLmNvbS9idWlsZC9jYWNoZS9iYWNrZW5kcy9cbiAgICovXG4gIHJlYWRvbmx5IGNhY2hlRnJvbT86IERvY2tlckNhY2hlT3B0aW9uW107XG5cbiAgLyoqXG4gICAqIENhY2hlIHRvIG9wdGlvbnMgdG8gcGFzcyB0byB0aGUgYGRvY2tlciBidWlsZGAgY29tbWFuZC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBjYWNoZSB0byBvcHRpb25zIGFyZSBwYXNzZWQgdG8gdGhlIGJ1aWxkIGNvbW1hbmRcbiAgICogQHNlZSBodHRwczovL2RvY3MuZG9ja2VyLmNvbS9idWlsZC9jYWNoZS9iYWNrZW5kcy9cbiAgICovXG4gIHJlYWRvbmx5IGNhY2hlVG8/OiBEb2NrZXJDYWNoZU9wdGlvbjtcbn1cblxuLyoqXG4gKiBXaGVyZSB0byBwdWJsaXNoIGRvY2tlciBpbWFnZXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEb2NrZXJJbWFnZURlc3RpbmF0aW9uIGV4dGVuZHMgQXdzRGVzdGluYXRpb24ge1xuICAvKipcbiAgICogTmFtZSBvZiB0aGUgRUNSIHJlcG9zaXRvcnkgdG8gcHVibGlzaCB0b1xuICAgKi9cbiAgcmVhZG9ubHkgcmVwb3NpdG9yeU5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGFnIG9mIHRoZSBpbWFnZSB0byBwdWJsaXNoXG4gICAqL1xuICByZWFkb25seSBpbWFnZVRhZzogc3RyaW5nO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGNvbmZpZ3VyaW5nIHRoZSBEb2NrZXIgY2FjaGUgYmFja2VuZFxuICovXG5leHBvcnQgaW50ZXJmYWNlIERvY2tlckNhY2hlT3B0aW9uIHtcbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIGNhY2hlIHRvIHVzZS5cbiAgICogUmVmZXIgdG8gaHR0cHM6Ly9kb2NzLmRvY2tlci5jb20vYnVpbGQvY2FjaGUvYmFja2VuZHMvIGZvciBmdWxsIGxpc3Qgb2YgYmFja2VuZHMuXG4gICAqIEBkZWZhdWx0IC0gdW5zcGVjaWZpZWRcbiAgICpcbiAgICogQGV4YW1wbGUgJ3JlZ2lzdHJ5J1xuICAgKi9cbiAgcmVhZG9ubHkgdHlwZTogc3RyaW5nO1xuICAvKipcbiAgICogQW55IHBhcmFtZXRlcnMgdG8gcGFzcyBpbnRvIHRoZSBkb2NrZXIgY2FjaGUgYmFja2VuZCBjb25maWd1cmF0aW9uLlxuICAgKiBSZWZlciB0byBodHRwczovL2RvY3MuZG9ja2VyLmNvbS9idWlsZC9jYWNoZS9iYWNrZW5kcy8gZm9yIGNhY2hlIGJhY2tlbmQgY29uZmlndXJhdGlvbi5cbiAgICogQGRlZmF1bHQge30gTm8gb3B0aW9ucyBwcm92aWRlZFxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBkZWNsYXJlIGNvbnN0IGJyYW5jaDogc3RyaW5nO1xuICAgKlxuICAgKiBjb25zdCBwYXJhbXMgPSB7XG4gICAqICAgcmVmOiBgMTIzNDU2NzguZGtyLmVjci51cy13ZXN0LTIuYW1hem9uYXdzLmNvbS9jYWNoZToke2JyYW5jaH1gLFxuICAgKiAgIG1vZGU6IFwibWF4XCIsXG4gICAqIH07XG4gICAqL1xuICByZWFkb25seSBwYXJhbXM/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xufVxuIl19
+
+/***/ }),
+
+/***/ 98758:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.FileAssetPackaging = void 0;
+/**
+ * Packaging strategy for file assets
+ */
+var FileAssetPackaging;
+(function (FileAssetPackaging) {
+ /**
+ * Upload the given path as a file
+ */
+ FileAssetPackaging["FILE"] = "file";
+ /**
+ * The given path is a directory, zip it and upload
+ */
+ FileAssetPackaging["ZIP_DIRECTORY"] = "zip";
+})(FileAssetPackaging || (exports.FileAssetPackaging = FileAssetPackaging = {}));
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1hc3NldC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImZpbGUtYXNzZXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBaUJBOztHQUVHO0FBQ0gsSUFBWSxrQkFVWDtBQVZELFdBQVksa0JBQWtCO0lBQzVCOztPQUVHO0lBQ0gsbUNBQWEsQ0FBQTtJQUViOztPQUVHO0lBQ0gsMkNBQXFCLENBQUE7QUFDdkIsQ0FBQyxFQVZXLGtCQUFrQixrQ0FBbEIsa0JBQWtCLFFBVTdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXdzRGVzdGluYXRpb24gfSBmcm9tICcuL2F3cy1kZXN0aW5hdGlvbic7XG5cbi8qKlxuICogQSBmaWxlIGFzc2V0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlsZUFzc2V0IHtcbiAgLyoqXG4gICAqIFNvdXJjZSBkZXNjcmlwdGlvbiBmb3IgZmlsZSBhc3NldHNcbiAgICovXG4gIHJlYWRvbmx5IHNvdXJjZTogRmlsZVNvdXJjZTtcblxuICAvKipcbiAgICogRGVzdGluYXRpb25zIGZvciB0aGlzIGZpbGUgYXNzZXRcbiAgICovXG4gIHJlYWRvbmx5IGRlc3RpbmF0aW9uczogeyBbaWQ6IHN0cmluZ106IEZpbGVEZXN0aW5hdGlvbiB9O1xufVxuXG4vKipcbiAqIFBhY2thZ2luZyBzdHJhdGVneSBmb3IgZmlsZSBhc3NldHNcbiAqL1xuZXhwb3J0IGVudW0gRmlsZUFzc2V0UGFja2FnaW5nIHtcbiAgLyoqXG4gICAqIFVwbG9hZCB0aGUgZ2l2ZW4gcGF0aCBhcyBhIGZpbGVcbiAgICovXG4gIEZJTEUgPSAnZmlsZScsXG5cbiAgLyoqXG4gICAqIFRoZSBnaXZlbiBwYXRoIGlzIGEgZGlyZWN0b3J5LCB6aXAgaXQgYW5kIHVwbG9hZFxuICAgKi9cbiAgWklQX0RJUkVDVE9SWSA9ICd6aXAnLFxufVxuXG4vKipcbiAqIERlc2NyaWJlIHRoZSBzb3VyY2Ugb2YgYSBmaWxlIGFzc2V0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlsZVNvdXJjZSB7XG4gIC8qKlxuICAgKiBFeHRlcm5hbCBjb21tYW5kIHdoaWNoIHdpbGwgcHJvZHVjZSB0aGUgZmlsZSBhc3NldCB0byB1cGxvYWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gRXhhY3RseSBvbmUgb2YgYGV4ZWN1dGFibGVgIGFuZCBgcGF0aGAgaXMgcmVxdWlyZWQuXG4gICAqL1xuICByZWFkb25seSBleGVjdXRhYmxlPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBmaWxlc3lzdGVtIG9iamVjdCB0byB1cGxvYWRcbiAgICpcbiAgICogVGhpcyBwYXRoIGlzIHJlbGF0aXZlIHRvIHRoZSBhc3NldCBtYW5pZmVzdCBsb2NhdGlvbi5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBFeGFjdGx5IG9uZSBvZiBgZXhlY3V0YWJsZWAgYW5kIGBwYXRoYCBpcyByZXF1aXJlZC5cbiAgICovXG4gIHJlYWRvbmx5IHBhdGg/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBhY2thZ2luZyBtZXRob2RcbiAgICpcbiAgICogT25seSBhbGxvd2VkIHdoZW4gYHBhdGhgIGlzIHNwZWNpZmllZC5cbiAgICpcbiAgICogQGRlZmF1bHQgRklMRVxuICAgKi9cbiAgcmVhZG9ubHkgcGFja2FnaW5nPzogRmlsZUFzc2V0UGFja2FnaW5nO1xufVxuXG4vKipcbiAqIFdoZXJlIGluIFMzIGEgZmlsZSBhc3NldCBuZWVkcyB0byBiZSBwdWJsaXNoZWRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaWxlRGVzdGluYXRpb24gZXh0ZW5kcyBBd3NEZXN0aW5hdGlvbiB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgYnVja2V0XG4gICAqL1xuICByZWFkb25seSBidWNrZXROYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBkZXN0aW5hdGlvbiBvYmplY3Qga2V5XG4gICAqL1xuICByZWFkb25seSBvYmplY3RLZXk6IHN0cmluZztcbn1cbiJdfQ==
+
+/***/ }),
+
+/***/ 76875:
+/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
+
+"use strict";
+
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ var desc = Object.getOwnPropertyDescriptor(m, k);
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+ desc = { enumerable: true, get: function() { return m[k]; } };
+ }
+ Object.defineProperty(o, k2, desc);
+}) : (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ o[k2] = m[k];
+}));
+var __exportStar = (this && this.__exportStar) || function(m, exports) {
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
+};
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+__exportStar(__nccwpck_require__(87045), exports);
+__exportStar(__nccwpck_require__(4793), exports);
+__exportStar(__nccwpck_require__(98758), exports);
+__exportStar(__nccwpck_require__(12120), exports);
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsMkNBQXlCO0FBQ3pCLHVEQUFxQztBQUNyQywrQ0FBNkI7QUFDN0Isb0RBQWtDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9zY2hlbWEnO1xuZXhwb3J0ICogZnJvbSAnLi9kb2NrZXItaW1hZ2UtYXNzZXQnO1xuZXhwb3J0ICogZnJvbSAnLi9maWxlLWFzc2V0JztcbmV4cG9ydCAqIGZyb20gJy4vYXdzLWRlc3RpbmF0aW9uJztcbiJdfQ==
+
+/***/ }),
+
+/***/ 87045:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsic2NoZW1hLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEb2NrZXJJbWFnZUFzc2V0IH0gZnJvbSAnLi9kb2NrZXItaW1hZ2UtYXNzZXQnO1xuaW1wb3J0IHsgRmlsZUFzc2V0IH0gZnJvbSAnLi9maWxlLWFzc2V0JztcblxuLyoqXG4gKiBEZWZpbml0aW9ucyBmb3IgdGhlIGFzc2V0IG1hbmlmZXN0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXNzZXRNYW5pZmVzdCB7XG4gIC8qKlxuICAgKiBWZXJzaW9uIG9mIHRoZSBtYW5pZmVzdFxuICAgKi9cbiAgcmVhZG9ubHkgdmVyc2lvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZmlsZSBhc3NldHMgaW4gdGhpcyBtYW5pZmVzdFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIGZpbGVzXG4gICAqL1xuICByZWFkb25seSBmaWxlcz86IHsgW2lkOiBzdHJpbmddOiBGaWxlQXNzZXQgfTtcblxuICAvKipcbiAgICogVGhlIERvY2tlciBpbWFnZSBhc3NldHMgaW4gdGhpcyBtYW5pZmVzdFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIERvY2tlciBpbWFnZXNcbiAgICovXG4gIHJlYWRvbmx5IGRvY2tlckltYWdlcz86IHsgW2lkOiBzdHJpbmddOiBEb2NrZXJJbWFnZUFzc2V0IH07XG59XG4iXX0=
+
+/***/ }),
+
+/***/ 38516:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJ0aWZhY3Qtc2NoZW1hLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYXJ0aWZhY3Qtc2NoZW1hLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJcbi8qKlxuICogSW5mb3JtYXRpb24gbmVlZGVkIHRvIGFjY2VzcyBhbiBJQU0gcm9sZSBjcmVhdGVkXG4gKiBhcyBwYXJ0IG9mIHRoZSBib290c3RyYXAgcHJvY2Vzc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEJvb3RzdHJhcFJvbGUge1xuICAvKipcbiAgICogVGhlIEFSTiBvZiB0aGUgSUFNIHJvbGUgY3JlYXRlZCBhcyBwYXJ0IG9mIGJvb3RyYXBwaW5nXG4gICAqIGUuZy4gbG9va3VwUm9sZUFyblxuICAgKi9cbiAgcmVhZG9ubHkgYXJuOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEV4dGVybmFsIElEIHRvIHVzZSB3aGVuIGFzc3VtaW5nIHRoZSBib290c3RyYXAgcm9sZVxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIGV4dGVybmFsIElEXG4gICAqL1xuICByZWFkb25seSBhc3N1bWVSb2xlRXh0ZXJuYWxJZD86IHN0cmluZztcblxuICAvKipcbiAgICogVmVyc2lvbiBvZiBib290c3RyYXAgc3RhY2sgcmVxdWlyZWQgdG8gdXNlIHRoaXMgcm9sZVxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIGJvb3RzdHJhcCBzdGFjayByZXF1aXJlZFxuICAgKi9cbiAgcmVhZG9ubHkgcmVxdWlyZXNCb290c3RyYXBTdGFja1ZlcnNpb24/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIE5hbWUgb2YgU1NNIHBhcmFtZXRlciB3aXRoIGJvb3RzdHJhcCBzdGFjayB2ZXJzaW9uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gRGlzY292ZXIgU1NNIHBhcmFtZXRlciBieSByZWFkaW5nIHN0YWNrXG4gICAqL1xuICByZWFkb25seSBib290c3RyYXBTdGFja1ZlcnNpb25Tc21QYXJhbWV0ZXI/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQXJ0aWZhY3QgcHJvcGVydGllcyBmb3IgQ2xvdWRGb3JtYXRpb24gc3RhY2tzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEF3c0Nsb3VkRm9ybWF0aW9uU3RhY2tQcm9wZXJ0aWVzIHtcbiAgLyoqXG4gICAqIEEgZmlsZSByZWxhdGl2ZSB0byB0aGUgYXNzZW1ibHkgcm9vdCB3aGljaCBjb250YWlucyB0aGUgQ2xvdWRGb3JtYXRpb24gdGVtcGxhdGUgZm9yIHRoaXMgc3RhY2suXG4gICAqL1xuICByZWFkb25seSB0ZW1wbGF0ZUZpbGU6IHN0cmluZztcblxuICAvKipcbiAgICogVmFsdWVzIGZvciBDbG91ZEZvcm1hdGlvbiBzdGFjayBwYXJhbWV0ZXJzIHRoYXQgc2hvdWxkIGJlIHBhc3NlZCB3aGVuIHRoZSBzdGFjayBpcyBkZXBsb3llZC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBwYXJhbWV0ZXJzXG4gICAqL1xuICByZWFkb25seSBwYXJhbWV0ZXJzPzogeyBbaWQ6IHN0cmluZ106IHN0cmluZyB9O1xuXG4gIC8qKlxuICAgKiBWYWx1ZXMgZm9yIENsb3VkRm9ybWF0aW9uIHN0YWNrIHRhZ3MgdGhhdCBzaG91bGQgYmUgcGFzc2VkIHdoZW4gdGhlIHN0YWNrIGlzIGRlcGxveWVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIHRhZ3NcbiAgICovXG4gIHJlYWRvbmx5IHRhZ3M/OiB7IFtpZDogc3RyaW5nXTogc3RyaW5nIH07XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIHRvIHVzZSBmb3IgdGhlIENsb3VkRm9ybWF0aW9uIHN0YWNrLlxuICAgKiBAZGVmYXVsdCAtIG5hbWUgZGVyaXZlZCBmcm9tIGFydGlmYWN0IElEXG4gICAqL1xuICByZWFkb25seSBzdGFja05hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZW5hYmxlIHRlcm1pbmF0aW9uIHByb3RlY3Rpb24gZm9yIHRoaXMgc3RhY2suXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSB0ZXJtaW5hdGlvblByb3RlY3Rpb24/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgcm9sZSB0aGF0IG5lZWRzIHRvIGJlIGFzc3VtZWQgdG8gZGVwbG95IHRoZSBzdGFja1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIHJvbGUgaXMgYXNzdW1lZCAoY3VycmVudCBjcmVkZW50aWFscyBhcmUgdXNlZClcbiAgICovXG4gIHJlYWRvbmx5IGFzc3VtZVJvbGVBcm4/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEV4dGVybmFsIElEIHRvIHVzZSB3aGVuIGFzc3VtaW5nIHJvbGUgZm9yIGNsb3VkZm9ybWF0aW9uIGRlcGxveW1lbnRzXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gZXh0ZXJuYWwgSURcbiAgICovXG4gIHJlYWRvbmx5IGFzc3VtZVJvbGVFeHRlcm5hbElkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcm9sZSB0aGF0IGlzIHBhc3NlZCB0byBDbG91ZEZvcm1hdGlvbiB0byBleGVjdXRlIHRoZSBjaGFuZ2Ugc2V0XG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gcm9sZSBpcyBwYXNzZWQgKGN1cnJlbnRseSBhc3N1bWVkIHJvbGUvY3JlZGVudGlhbHMgYXJlIHVzZWQpXG4gICAqL1xuICByZWFkb25seSBjbG91ZEZvcm1hdGlvbkV4ZWN1dGlvblJvbGVBcm4/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSByb2xlIHRvIHVzZSB0byBsb29rIHVwIHZhbHVlcyBmcm9tIHRoZSB0YXJnZXQgQVdTIGFjY291bnRcbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyByb2xlIGlzIGFzc3VtZWQgKGN1cnJlbnQgY3JlZGVudGlhbHMgYXJlIHVzZWQpXG4gICAqL1xuICByZWFkb25seSBsb29rdXBSb2xlPzogQm9vdHN0cmFwUm9sZTtcblxuICAvKipcbiAgICogSWYgdGhlIHN0YWNrIHRlbXBsYXRlIGhhcyBhbHJlYWR5IGJlZW4gaW5jbHVkZWQgaW4gdGhlIGFzc2V0IG1hbmlmZXN0LCBpdHMgYXNzZXQgVVJMXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm90IHVwbG9hZGVkIHlldCwgdXBsb2FkIGp1c3QgYmVmb3JlIGRlcGxveWluZ1xuICAgKi9cbiAgcmVhZG9ubHkgc3RhY2tUZW1wbGF0ZUFzc2V0T2JqZWN0VXJsPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBWZXJzaW9uIG9mIGJvb3RzdHJhcCBzdGFjayByZXF1aXJlZCB0byBkZXBsb3kgdGhpcyBzdGFja1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIGJvb3RzdHJhcCBzdGFjayByZXF1aXJlZFxuICAgKi9cbiAgcmVhZG9ubHkgcmVxdWlyZXNCb290c3RyYXBTdGFja1ZlcnNpb24/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFNTTSBwYXJhbWV0ZXIgd2hlcmUgdGhlIGJvb3RzdHJhcCBzdGFjayB2ZXJzaW9uIG51bWJlciBjYW4gYmUgZm91bmRcbiAgICpcbiAgICogT25seSB1c2VkIGlmIGByZXF1aXJlc0Jvb3RzdHJhcFN0YWNrVmVyc2lvbmAgaXMgc2V0LlxuICAgKlxuICAgKiAtIElmIHRoaXMgdmFsdWUgaXMgbm90IHNldCwgdGhlIGJvb3RzdHJhcCBzdGFjayBuYW1lIG11c3QgYmUga25vd24gYXRcbiAgICogICBkZXBsb3ltZW50IHRpbWUgc28gdGhlIHN0YWNrIHZlcnNpb24gY2FuIGJlIGxvb2tlZCB1cCBmcm9tIHRoZSBzdGFja1xuICAgKiAgIG91dHB1dHMuXG4gICAqIC0gSWYgdGhpcyB2YWx1ZSBpcyBzZXQsIHRoZSBib290c3RyYXAgc3RhY2sgY2FuIGhhdmUgYW55IG5hbWUgYmVjYXVzZVxuICAgKiAgIHdlIHdvbid0IG5lZWQgdG8gbG9vayBpdCB1cC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBCb290c3RyYXAgc3RhY2sgdmVyc2lvbiBudW1iZXIgbG9va2VkIHVwXG4gICAqL1xuICByZWFkb25seSBib290c3RyYXBTdGFja1ZlcnNpb25Tc21QYXJhbWV0ZXI/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhpcyBzdGFjayBzaG91bGQgYmUgdmFsaWRhdGVkIGJ5IHRoZSBDTEkgYWZ0ZXIgc3ludGhlc2lzXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHZhbGlkYXRlT25TeW50aD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgQXNzZXQgTWFuaWZlc3RcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBc3NldE1hbmlmZXN0T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBWZXJzaW9uIG9mIGJvb3RzdHJhcCBzdGFjayByZXF1aXJlZCB0byBkZXBsb3kgdGhpcyBzdGFja1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIFZlcnNpb24gMSAoYmFzaWMgbW9kZXJuIGJvb3RzdHJhcCBzdGFjaylcbiAgICovXG4gIHJlYWRvbmx5IHJlcXVpcmVzQm9vdHN0cmFwU3RhY2tWZXJzaW9uPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBTU00gcGFyYW1ldGVyIHdoZXJlIHRoZSBib290c3RyYXAgc3RhY2sgdmVyc2lvbiBudW1iZXIgY2FuIGJlIGZvdW5kXG4gICAqXG4gICAqIC0gSWYgdGhpcyB2YWx1ZSBpcyBub3Qgc2V0LCB0aGUgYm9vdHN0cmFwIHN0YWNrIG5hbWUgbXVzdCBiZSBrbm93biBhdFxuICAgKiAgIGRlcGxveW1lbnQgdGltZSBzbyB0aGUgc3RhY2sgdmVyc2lvbiBjYW4gYmUgbG9va2VkIHVwIGZyb20gdGhlIHN0YWNrXG4gICAqICAgb3V0cHV0cy5cbiAgICogLSBJZiB0aGlzIHZhbHVlIGlzIHNldCwgdGhlIGJvb3RzdHJhcCBzdGFjayBjYW4gaGF2ZSBhbnkgbmFtZSBiZWNhdXNlXG4gICAqICAgd2Ugd29uJ3QgbmVlZCB0byBsb29rIGl0IHVwLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIEJvb3RzdHJhcCBzdGFjayB2ZXJzaW9uIG51bWJlciBsb29rZWQgdXBcbiAgICovXG4gIHJlYWRvbmx5IGJvb3RzdHJhcFN0YWNrVmVyc2lvblNzbVBhcmFtZXRlcj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBBcnRpZmFjdCBwcm9wZXJ0aWVzIGZvciB0aGUgQXNzZXQgTWFuaWZlc3RcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBc3NldE1hbmlmZXN0UHJvcGVydGllcyBleHRlbmRzIEFzc2V0TWFuaWZlc3RPcHRpb25zIHtcbiAgLyoqXG4gICAqIEZpbGVuYW1lIG9mIHRoZSBhc3NldCBtYW5pZmVzdFxuICAgKi9cbiAgcmVhZG9ubHkgZmlsZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIEFydGlmYWN0IHByb3BlcnRpZXMgZm9yIHRoZSBDb25zdHJ1Y3QgVHJlZSBBcnRpZmFjdFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRyZWVBcnRpZmFjdFByb3BlcnRpZXMge1xuICAvKipcbiAgICogRmlsZW5hbWUgb2YgdGhlIHRyZWUgYXJ0aWZhY3RcbiAgICovXG4gIHJlYWRvbmx5IGZpbGU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBBcnRpZmFjdCBwcm9wZXJ0aWVzIGZvciBuZXN0ZWQgY2xvdWQgYXNzZW1ibGllc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIE5lc3RlZENsb3VkQXNzZW1ibHlQcm9wZXJ0aWVzIHtcbiAgLyoqXG4gICAqIFJlbGF0aXZlIHBhdGggdG8gdGhlIG5lc3RlZCBjbG91ZCBhc3NlbWJseVxuICAgKi9cbiAgcmVhZG9ubHkgZGlyZWN0b3J5TmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBEaXNwbGF5IG5hbWUgZm9yIHRoZSBjbG91ZCBhc3NlbWJseVxuICAgKlxuICAgKiBAZGVmYXVsdCAtIFRoZSBhcnRpZmFjdCBJRFxuICAgKi9cbiAgcmVhZG9ubHkgZGlzcGxheU5hbWU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgbWFuaWZlc3QgYXJ0aWZhY3RzXG4gKi9cbmV4cG9ydCB0eXBlIEFydGlmYWN0UHJvcGVydGllcyA9IEF3c0Nsb3VkRm9ybWF0aW9uU3RhY2tQcm9wZXJ0aWVzXG58IEFzc2V0TWFuaWZlc3RQcm9wZXJ0aWVzXG58IFRyZWVBcnRpZmFjdFByb3BlcnRpZXNcbnwgTmVzdGVkQ2xvdWRBc3NlbWJseVByb3BlcnRpZXM7XG4iXX0=
+
+/***/ }),
+
+/***/ 91377:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.LoadBalancerListenerProtocol = exports.LoadBalancerType = exports.ContextProvider = void 0;
+/**
+ * Identifier for the context provider
+ */
+var ContextProvider;
+(function (ContextProvider) {
+ /**
+ * AMI provider
+ */
+ ContextProvider["AMI_PROVIDER"] = "ami";
+ /**
+ * AZ provider
+ */
+ ContextProvider["AVAILABILITY_ZONE_PROVIDER"] = "availability-zones";
+ /**
+ * Route53 Hosted Zone provider
+ */
+ ContextProvider["HOSTED_ZONE_PROVIDER"] = "hosted-zone";
+ /**
+ * SSM Parameter Provider
+ */
+ ContextProvider["SSM_PARAMETER_PROVIDER"] = "ssm";
+ /**
+ * VPC Provider
+ */
+ ContextProvider["VPC_PROVIDER"] = "vpc-provider";
+ /**
+ * VPC Endpoint Service AZ Provider
+ */
+ ContextProvider["ENDPOINT_SERVICE_AVAILABILITY_ZONE_PROVIDER"] = "endpoint-service-availability-zones";
+ /**
+ * Load balancer provider
+ */
+ ContextProvider["LOAD_BALANCER_PROVIDER"] = "load-balancer";
+ /**
+ * Load balancer listener provider
+ */
+ ContextProvider["LOAD_BALANCER_LISTENER_PROVIDER"] = "load-balancer-listener";
+ /**
+ * Security group provider
+ */
+ ContextProvider["SECURITY_GROUP_PROVIDER"] = "security-group";
+ /**
+ * KMS Key Provider
+ */
+ ContextProvider["KEY_PROVIDER"] = "key-provider";
+ /**
+ * A plugin provider (the actual plugin name will be in the properties)
+ */
+ ContextProvider["PLUGIN"] = "plugin";
+})(ContextProvider || (exports.ContextProvider = ContextProvider = {}));
+/**
+ * Type of load balancer
+ */
+var LoadBalancerType;
+(function (LoadBalancerType) {
+ /**
+ * Network load balancer
+ */
+ LoadBalancerType["NETWORK"] = "network";
+ /**
+ * Application load balancer
+ */
+ LoadBalancerType["APPLICATION"] = "application";
+})(LoadBalancerType || (exports.LoadBalancerType = LoadBalancerType = {}));
+/**
+ * The protocol for connections from clients to the load balancer
+ */
+var LoadBalancerListenerProtocol;
+(function (LoadBalancerListenerProtocol) {
+ /**
+ * HTTP protocol
+ */
+ LoadBalancerListenerProtocol["HTTP"] = "HTTP";
+ /**
+ * HTTPS protocol
+ */
+ LoadBalancerListenerProtocol["HTTPS"] = "HTTPS";
+ /**
+ * TCP protocol
+ */
+ LoadBalancerListenerProtocol["TCP"] = "TCP";
+ /**
+ * TLS protocol
+ */
+ LoadBalancerListenerProtocol["TLS"] = "TLS";
+ /**
+ * UDP protocol
+ * */
+ LoadBalancerListenerProtocol["UDP"] = "UDP";
+ /**
+ * TCP and UDP protocol
+ * */
+ LoadBalancerListenerProtocol["TCP_UDP"] = "TCP_UDP";
+})(LoadBalancerListenerProtocol || (exports.LoadBalancerListenerProtocol = LoadBalancerListenerProtocol = {}));
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC1xdWVyaWVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY29udGV4dC1xdWVyaWVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUVBOztHQUVHO0FBQ0gsSUFBWSxlQXVEWDtBQXZERCxXQUFZLGVBQWU7SUFDekI7O09BRUc7SUFDSCx1Q0FBb0IsQ0FBQTtJQUVwQjs7T0FFRztJQUNILG9FQUFpRCxDQUFBO0lBRWpEOztPQUVHO0lBQ0gsdURBQW9DLENBQUE7SUFFcEM7O09BRUc7SUFDSCxpREFBOEIsQ0FBQTtJQUU5Qjs7T0FFRztJQUNILGdEQUE2QixDQUFBO0lBRTdCOztPQUVHO0lBQ0gsc0dBQW1GLENBQUE7SUFFbkY7O09BRUc7SUFDSCwyREFBd0MsQ0FBQTtJQUV4Qzs7T0FFRztJQUNILDZFQUEwRCxDQUFBO0lBRTFEOztPQUVHO0lBQ0gsNkRBQTBDLENBQUE7SUFFMUM7O09BRUc7SUFDSCxnREFBNkIsQ0FBQTtJQUU3Qjs7T0FFRztJQUNILG9DQUFpQixDQUFBO0FBQ25CLENBQUMsRUF2RFcsZUFBZSwrQkFBZixlQUFlLFFBdUQxQjtBQXdORDs7R0FFRztBQUNILElBQVksZ0JBVVg7QUFWRCxXQUFZLGdCQUFnQjtJQUMxQjs7T0FFRztJQUNILHVDQUFtQixDQUFBO0lBRW5COztPQUVHO0lBQ0gsK0NBQTJCLENBQUE7QUFDN0IsQ0FBQyxFQVZXLGdCQUFnQixnQ0FBaEIsZ0JBQWdCLFFBVTNCO0FBOENEOztHQUVHO0FBQ0gsSUFBWSw0QkE4Qlg7QUE5QkQsV0FBWSw0QkFBNEI7SUFDdEM7O09BRUc7SUFDSCw2Q0FBYSxDQUFBO0lBRWI7O09BRUc7SUFDSCwrQ0FBZSxDQUFBO0lBRWY7O09BRUc7SUFDSCwyQ0FBVyxDQUFBO0lBRVg7O09BRUc7SUFDSCwyQ0FBVyxDQUFBO0lBRVg7O1NBRUs7SUFDTCwyQ0FBVyxDQUFBO0lBRVg7O1NBRUs7SUFDTCxtREFBbUIsQ0FBQTtBQUNyQixDQUFDLEVBOUJXLDRCQUE0Qiw0Q0FBNUIsNEJBQTRCLFFBOEJ2QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRhZyB9IGZyb20gJy4vbWV0YWRhdGEtc2NoZW1hJztcblxuLyoqXG4gKiBJZGVudGlmaWVyIGZvciB0aGUgY29udGV4dCBwcm92aWRlclxuICovXG5leHBvcnQgZW51bSBDb250ZXh0UHJvdmlkZXIge1xuICAvKipcbiAgICogQU1JIHByb3ZpZGVyXG4gICAqL1xuICBBTUlfUFJPVklERVIgPSAnYW1pJyxcblxuICAvKipcbiAgICogQVogcHJvdmlkZXJcbiAgICovXG4gIEFWQUlMQUJJTElUWV9aT05FX1BST1ZJREVSID0gJ2F2YWlsYWJpbGl0eS16b25lcycsXG5cbiAgLyoqXG4gICAqIFJvdXRlNTMgSG9zdGVkIFpvbmUgcHJvdmlkZXJcbiAgICovXG4gIEhPU1RFRF9aT05FX1BST1ZJREVSID0gJ2hvc3RlZC16b25lJyxcblxuICAvKipcbiAgICogU1NNIFBhcmFtZXRlciBQcm92aWRlclxuICAgKi9cbiAgU1NNX1BBUkFNRVRFUl9QUk9WSURFUiA9ICdzc20nLFxuXG4gIC8qKlxuICAgKiBWUEMgUHJvdmlkZXJcbiAgICovXG4gIFZQQ19QUk9WSURFUiA9ICd2cGMtcHJvdmlkZXInLFxuXG4gIC8qKlxuICAgKiBWUEMgRW5kcG9pbnQgU2VydmljZSBBWiBQcm92aWRlclxuICAgKi9cbiAgRU5EUE9JTlRfU0VSVklDRV9BVkFJTEFCSUxJVFlfWk9ORV9QUk9WSURFUiA9ICdlbmRwb2ludC1zZXJ2aWNlLWF2YWlsYWJpbGl0eS16b25lcycsXG5cbiAgLyoqXG4gICAqIExvYWQgYmFsYW5jZXIgcHJvdmlkZXJcbiAgICovXG4gIExPQURfQkFMQU5DRVJfUFJPVklERVIgPSAnbG9hZC1iYWxhbmNlcicsXG5cbiAgLyoqXG4gICAqIExvYWQgYmFsYW5jZXIgbGlzdGVuZXIgcHJvdmlkZXJcbiAgICovXG4gIExPQURfQkFMQU5DRVJfTElTVEVORVJfUFJPVklERVIgPSAnbG9hZC1iYWxhbmNlci1saXN0ZW5lcicsXG5cbiAgLyoqXG4gICAqIFNlY3VyaXR5IGdyb3VwIHByb3ZpZGVyXG4gICAqL1xuICBTRUNVUklUWV9HUk9VUF9QUk9WSURFUiA9ICdzZWN1cml0eS1ncm91cCcsXG5cbiAgLyoqXG4gICAqIEtNUyBLZXkgUHJvdmlkZXJcbiAgICovXG4gIEtFWV9QUk9WSURFUiA9ICdrZXktcHJvdmlkZXInLFxuXG4gIC8qKlxuICAgKiBBIHBsdWdpbiBwcm92aWRlciAodGhlIGFjdHVhbCBwbHVnaW4gbmFtZSB3aWxsIGJlIGluIHRoZSBwcm9wZXJ0aWVzKVxuICAgKi9cbiAgUExVR0lOID0gJ3BsdWdpbicsXG59XG5cbi8qKlxuICogUXVlcnkgdG8gQU1JIGNvbnRleHQgcHJvdmlkZXJcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBbWlDb250ZXh0UXVlcnkge1xuICAvKipcbiAgICogQWNjb3VudCB0byBxdWVyeVxuICAgKi9cbiAgcmVhZG9ubHkgYWNjb3VudDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBSZWdpb24gdG8gcXVlcnlcbiAgICovXG4gIHJlYWRvbmx5IHJlZ2lvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSByb2xlIHRoYXQgc2hvdWxkIGJlIHVzZWQgdG8gbG9vayB1cCB0aGUgbWlzc2luZyB2YWx1ZXNcbiAgICpcbiAgICogQGRlZmF1bHQgLSBOb25lXG4gICAqL1xuICByZWFkb25seSBsb29rdXBSb2xlQXJuPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBPd25lcnMgdG8gRGVzY3JpYmVJbWFnZXMgY2FsbFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIEFsbCBvd25lcnNcbiAgICovXG4gIHJlYWRvbmx5IG93bmVycz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBGaWx0ZXJzIHRvIERlc2NyaWJlSW1hZ2VzIGNhbGxcbiAgICovXG4gIHJlYWRvbmx5IGZpbHRlcnM6IHtba2V5OiBzdHJpbmddOiBzdHJpbmdbXX07XG59XG5cbi8qKlxuICogUXVlcnkgdG8gYXZhaWxhYmlsaXR5IHpvbmUgY29udGV4dCBwcm92aWRlclxuICovXG5leHBvcnQgaW50ZXJmYWNlIEF2YWlsYWJpbGl0eVpvbmVzQ29udGV4dFF1ZXJ5IHtcbiAgLyoqXG4gICAqIFF1ZXJ5IGFjY291bnRcbiAgICovXG4gIHJlYWRvbmx5IGFjY291bnQ6IHN0cmluZztcblxuICAvKipcbiAgICogUXVlcnkgcmVnaW9uXG4gICAqL1xuICByZWFkb25seSByZWdpb246IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIEFSTiBvZiB0aGUgcm9sZSB0aGF0IHNob3VsZCBiZSB1c2VkIHRvIGxvb2sgdXAgdGhlIG1pc3NpbmcgdmFsdWVzXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgbG9va3VwUm9sZUFybj86IHN0cmluZztcblxufVxuXG4vKipcbiAqIFF1ZXJ5IHRvIGhvc3RlZCB6b25lIGNvbnRleHQgcHJvdmlkZXJcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBIb3N0ZWRab25lQ29udGV4dFF1ZXJ5IHtcbiAgLyoqXG4gICAqIFF1ZXJ5IGFjY291bnRcbiAgICovXG4gIHJlYWRvbmx5IGFjY291bnQ6IHN0cmluZztcblxuICAvKipcbiAgICogUXVlcnkgcmVnaW9uXG4gICAqL1xuICByZWFkb25seSByZWdpb246IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIEFSTiBvZiB0aGUgcm9sZSB0aGF0IHNob3VsZCBiZSB1c2VkIHRvIGxvb2sgdXAgdGhlIG1pc3NpbmcgdmFsdWVzXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgbG9va3VwUm9sZUFybj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGRvbWFpbiBuYW1lIGUuZy4gZXhhbXBsZS5jb20gdG8gbG9va3VwXG4gICAqL1xuICByZWFkb25seSBkb21haW5OYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRydWUgaWYgdGhlIHpvbmUgeW91IHdhbnQgdG8gZmluZCBpcyBhIHByaXZhdGUgaG9zdGVkIHpvbmVcbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHByaXZhdGVab25lPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIFZQQyBJRCB0byB0aGF0IHRoZSBwcml2YXRlIHpvbmUgbXVzdCBiZSBhc3NvY2lhdGVkIHdpdGhcbiAgICpcbiAgICogSWYgeW91IHByb3ZpZGUgVlBDIElEIGFuZCBwcml2YXRlWm9uZSBpcyBmYWxzZSwgdGhpcyB3aWxsIHJldHVybiBubyByZXN1bHRzXG4gICAqIGFuZCByYWlzZSBhbiBlcnJvci5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBSZXF1aXJlZCBpZiBwcml2YXRlWm9uZT10cnVlXG4gICAqL1xuICByZWFkb25seSB2cGNJZD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBRdWVyeSB0byBTU00gUGFyYW1ldGVyIENvbnRleHQgUHJvdmlkZXJcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTU01QYXJhbWV0ZXJDb250ZXh0UXVlcnkge1xuICAvKipcbiAgICogUXVlcnkgYWNjb3VudFxuICAgKi9cbiAgcmVhZG9ubHkgYWNjb3VudDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBRdWVyeSByZWdpb25cbiAgICovXG4gIHJlYWRvbmx5IHJlZ2lvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSByb2xlIHRoYXQgc2hvdWxkIGJlIHVzZWQgdG8gbG9vayB1cCB0aGUgbWlzc2luZyB2YWx1ZXNcbiAgICpcbiAgICogQGRlZmF1bHQgLSBOb25lXG4gICAqL1xuICByZWFkb25seSBsb29rdXBSb2xlQXJuPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQYXJhbWV0ZXIgbmFtZSB0byBxdWVyeVxuICAgKi9cbiAgcmVhZG9ubHkgcGFyYW1ldGVyTmFtZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFF1ZXJ5IGlucHV0IGZvciBsb29raW5nIHVwIGEgVlBDXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVnBjQ29udGV4dFF1ZXJ5IHtcbiAgLyoqXG4gICAqIFF1ZXJ5IGFjY291bnRcbiAgICovXG4gIHJlYWRvbmx5IGFjY291bnQ6IHN0cmluZztcblxuICAvKipcbiAgICogUXVlcnkgcmVnaW9uXG4gICAqL1xuICByZWFkb25seSByZWdpb246IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIEFSTiBvZiB0aGUgcm9sZSB0aGF0IHNob3VsZCBiZSB1c2VkIHRvIGxvb2sgdXAgdGhlIG1pc3NpbmcgdmFsdWVzXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgbG9va3VwUm9sZUFybj86IHN0cmluZztcblxuICAvKipcbiAgICogRmlsdGVycyB0byBhcHBseSB0byB0aGUgVlBDXG4gICAqXG4gICAqIEZpbHRlciBwYXJhbWV0ZXJzIGFyZSB0aGUgc2FtZSBhcyBwYXNzZWQgdG8gRGVzY3JpYmVWcGNzLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfRGVzY3JpYmVWcGNzLmh0bWxcbiAgICovXG4gIHJlYWRvbmx5IGZpbHRlcjoge1trZXk6IHN0cmluZ106IHN0cmluZ307XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gcG9wdWxhdGUgdGhlIHN1Ym5ldEdyb3VwcyBmaWVsZCBvZiB0aGUgYFZwY0NvbnRleHRSZXNwb25zZWAsXG4gICAqIHdoaWNoIGNvbnRhaW5zIHBvdGVudGlhbGx5IGFzeW1tZXRyaWMgc3VibmV0IGdyb3Vwcy5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHJldHVybkFzeW1tZXRyaWNTdWJuZXRzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogT3B0aW9uYWwgdGFnIGZvciBzdWJuZXQgZ3JvdXAgbmFtZS5cbiAgICogSWYgbm90IHByb3ZpZGVkLCB3ZSdsbCBsb29rIGF0IHRoZSBhd3MtY2RrOnN1Ym5ldC1uYW1lIHRhZy5cbiAgICogSWYgdGhlIHN1Ym5ldCBkb2VzIG5vdCBoYXZlIHRoZSBzcGVjaWZpZWQgdGFnLFxuICAgKiB3ZSdsbCB1c2UgaXRzIHR5cGUgYXMgdGhlIG5hbWUuXG4gICAqXG4gICAqIEBkZWZhdWx0ICdhd3MtY2RrOnN1Ym5ldC1uYW1lJ1xuICAgKi9cbiAgcmVhZG9ubHkgc3VibmV0R3JvdXBOYW1lVGFnPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHBvcHVsYXRlIHRoZSBgdnBuR2F0ZXdheUlkYCBmaWVsZCBvZiB0aGUgYFZwY0NvbnRleHRSZXNwb25zZWAsXG4gICAqIHdoaWNoIGNvbnRhaW5zIHRoZSBWUE4gR2F0ZXdheSBJRCwgaWYgb25lIGV4aXN0cy4gWW91IGNhbiBleHBsaWNpdGx5XG4gICAqIGRpc2FibGUgdGhpcyBpbiBvcmRlciB0byBhdm9pZCB0aGUgbG9va3VwIGlmIHlvdSBrbm93IHRoZSBWUEMgZG9lcyBub3QgaGF2ZVxuICAgKiBhIFZQTiBHYXR3YXkgYXR0YWNoZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IHJldHVyblZwbkdhdGV3YXlzPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBRdWVyeSB0byBlbmRwb2ludCBzZXJ2aWNlIGNvbnRleHQgcHJvdmlkZXJcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbmRwb2ludFNlcnZpY2VBdmFpbGFiaWxpdHlab25lc0NvbnRleHRRdWVyeSB7XG4gIC8qKlxuICAgKiBRdWVyeSBhY2NvdW50XG4gICAqL1xuICByZWFkb25seSBhY2NvdW50OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFF1ZXJ5IHJlZ2lvblxuICAgKi9cbiAgcmVhZG9ubHkgcmVnaW9uOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBBUk4gb2YgdGhlIHJvbGUgdGhhdCBzaG91bGQgYmUgdXNlZCB0byBsb29rIHVwIHRoZSBtaXNzaW5nIHZhbHVlc1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vbmVcbiAgICovXG4gIHJlYWRvbmx5IGxvb2t1cFJvbGVBcm4/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFF1ZXJ5IHNlcnZpY2UgbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgc2VydmljZU5hbWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBUeXBlIG9mIGxvYWQgYmFsYW5jZXJcbiAqL1xuZXhwb3J0IGVudW0gTG9hZEJhbGFuY2VyVHlwZSB7XG4gIC8qKlxuICAgKiBOZXR3b3JrIGxvYWQgYmFsYW5jZXJcbiAgICovXG4gIE5FVFdPUksgPSAnbmV0d29yaycsXG5cbiAgLyoqXG4gICAqIEFwcGxpY2F0aW9uIGxvYWQgYmFsYW5jZXJcbiAgICovXG4gIEFQUExJQ0FUSU9OID0gJ2FwcGxpY2F0aW9uJyxcbn1cblxuLyoqXG4gKiBGaWx0ZXJzIGZvciBzZWxlY3RpbmcgbG9hZCBiYWxhbmNlcnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2FkQmFsYW5jZXJGaWx0ZXIge1xuICAvKipcbiAgICogRmlsdGVyIGxvYWQgYmFsYW5jZXJzIGJ5IHRoZWlyIHR5cGVcbiAgICovXG4gIHJlYWRvbmx5IGxvYWRCYWxhbmNlclR5cGU6IExvYWRCYWxhbmNlclR5cGU7XG5cbiAgLyoqXG4gICAqIEZpbmQgYnkgbG9hZCBiYWxhbmNlcidzIEFSTlxuICAgKiBAZGVmYXVsdCAtIGRvZXMgbm90IHNlYXJjaCBieSBsb2FkIGJhbGFuY2VyIGFyblxuICAgKi9cbiAgcmVhZG9ubHkgbG9hZEJhbGFuY2VyQXJuPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBNYXRjaCBsb2FkIGJhbGFuY2VyIHRhZ3NcbiAgICogQGRlZmF1bHQgLSBkb2VzIG5vdCBtYXRjaCBsb2FkIGJhbGFuY2VycyBieSB0YWdzXG4gICAqL1xuICByZWFkb25seSBsb2FkQmFsYW5jZXJUYWdzPzogVGFnW107XG59XG5cbi8qKlxuICogUXVlcnkgaW5wdXQgZm9yIGxvb2tpbmcgdXAgYSBsb2FkIGJhbGFuY2VyXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTG9hZEJhbGFuY2VyQ29udGV4dFF1ZXJ5IGV4dGVuZHMgTG9hZEJhbGFuY2VyRmlsdGVyIHtcbiAgLyoqXG4gICAqIFF1ZXJ5IGFjY291bnRcbiAgICovXG4gIHJlYWRvbmx5IGFjY291bnQ6IHN0cmluZztcblxuICAvKipcbiAgICogUXVlcnkgcmVnaW9uXG4gICAqL1xuICByZWFkb25seSByZWdpb246IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIEFSTiBvZiB0aGUgcm9sZSB0aGF0IHNob3VsZCBiZSB1c2VkIHRvIGxvb2sgdXAgdGhlIG1pc3NpbmcgdmFsdWVzXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgbG9va3VwUm9sZUFybj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGUgcHJvdG9jb2wgZm9yIGNvbm5lY3Rpb25zIGZyb20gY2xpZW50cyB0byB0aGUgbG9hZCBiYWxhbmNlclxuICovXG5leHBvcnQgZW51bSBMb2FkQmFsYW5jZXJMaXN0ZW5lclByb3RvY29sIHtcbiAgLyoqXG4gICAqIEhUVFAgcHJvdG9jb2xcbiAgICovXG4gIEhUVFAgPSAnSFRUUCcsXG5cbiAgLyoqXG4gICAqIEhUVFBTIHByb3RvY29sXG4gICAqL1xuICBIVFRQUyA9ICdIVFRQUycsXG5cbiAgLyoqXG4gICAqIFRDUCBwcm90b2NvbFxuICAgKi9cbiAgVENQID0gJ1RDUCcsXG5cbiAgLyoqXG4gICAqIFRMUyBwcm90b2NvbFxuICAgKi9cbiAgVExTID0gJ1RMUycsXG5cbiAgLyoqXG4gICAqIFVEUCBwcm90b2NvbFxuICAgKiAqL1xuICBVRFAgPSAnVURQJyxcblxuICAvKipcbiAgICogVENQIGFuZCBVRFAgcHJvdG9jb2xcbiAgICogKi9cbiAgVENQX1VEUCA9ICdUQ1BfVURQJyxcbn1cblxuLyoqXG4gKiBRdWVyeSBpbnB1dCBmb3IgbG9va2luZyB1cCBhIGxvYWQgYmFsYW5jZXIgbGlzdGVuZXJcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2FkQmFsYW5jZXJMaXN0ZW5lckNvbnRleHRRdWVyeSBleHRlbmRzIExvYWRCYWxhbmNlckZpbHRlciB7XG4gIC8qKlxuICAgKiBRdWVyeSBhY2NvdW50XG4gICAqL1xuICByZWFkb25seSBhY2NvdW50OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFF1ZXJ5IHJlZ2lvblxuICAgKi9cbiAgcmVhZG9ubHkgcmVnaW9uOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBBUk4gb2YgdGhlIHJvbGUgdGhhdCBzaG91bGQgYmUgdXNlZCB0byBsb29rIHVwIHRoZSBtaXNzaW5nIHZhbHVlc1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vbmVcbiAgICovXG4gIHJlYWRvbmx5IGxvb2t1cFJvbGVBcm4/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEZpbmQgYnkgbGlzdGVuZXIncyBhcm5cbiAgICogQGRlZmF1bHQgLSBkb2VzIG5vdCBmaW5kIGJ5IGxpc3RlbmVyIGFyblxuICAgKi9cbiAgcmVhZG9ubHkgbGlzdGVuZXJBcm4/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEZpbHRlciBieSBsaXN0ZW5lciBwcm90b2NvbFxuICAgKiBAZGVmYXVsdCAtIGRvZXMgbm90IGZpbHRlciBieSBsaXN0ZW5lciBwcm90b2NvbFxuICAgKi9cbiAgcmVhZG9ubHkgbGlzdGVuZXJQcm90b2NvbD86IExvYWRCYWxhbmNlckxpc3RlbmVyUHJvdG9jb2w7XG5cbiAgLyoqXG4gICAqIEZpbHRlciBsaXN0ZW5lcnMgYnkgbGlzdGVuZXIgcG9ydFxuICAgKiBAZGVmYXVsdCAtIGRvZXMgbm90IGZpbHRlciBieSBhIGxpc3RlbmVyIHBvcnRcbiAgICovXG4gIHJlYWRvbmx5IGxpc3RlbmVyUG9ydD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBRdWVyeSBpbnB1dCBmb3IgbG9va2luZyB1cCBhIHNlY3VyaXR5IGdyb3VwXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VjdXJpdHlHcm91cENvbnRleHRRdWVyeSB7XG4gIC8qKlxuICAgKiBRdWVyeSBhY2NvdW50XG4gICAqL1xuICByZWFkb25seSBhY2NvdW50OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFF1ZXJ5IHJlZ2lvblxuICAgKi9cbiAgcmVhZG9ubHkgcmVnaW9uOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBBUk4gb2YgdGhlIHJvbGUgdGhhdCBzaG91bGQgYmUgdXNlZCB0byBsb29rIHVwIHRoZSBtaXNzaW5nIHZhbHVlc1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vbmVcbiAgICovXG4gIHJlYWRvbmx5IGxvb2t1cFJvbGVBcm4/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFNlY3VyaXR5IGdyb3VwIGlkXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgc2VjdXJpdHlHcm91cElkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTZWN1cml0eSBncm91cCBuYW1lXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgc2VjdXJpdHlHcm91cE5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFZQQyBJRFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vbmVcbiAgICovXG4gIHJlYWRvbmx5IHZwY0lkPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFF1ZXJ5IGlucHV0IGZvciBsb29raW5nIHVwIGEgS01TIEtleVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEtleUNvbnRleHRRdWVyeSB7XG4gIC8qKlxuICAgKiBRdWVyeSBhY2NvdW50XG4gICAqL1xuICByZWFkb25seSBhY2NvdW50OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFF1ZXJ5IHJlZ2lvblxuICAgKi9cbiAgcmVhZG9ubHkgcmVnaW9uOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBBUk4gb2YgdGhlIHJvbGUgdGhhdCBzaG91bGQgYmUgdXNlZCB0byBsb29rIHVwIHRoZSBtaXNzaW5nIHZhbHVlc1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vbmVcbiAgICovXG4gIHJlYWRvbmx5IGxvb2t1cFJvbGVBcm4/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEFsaWFzIG5hbWUgdXNlZCB0byBzZWFyY2ggdGhlIEtleVxuICAgKi9cbiAgcmVhZG9ubHkgYWxpYXNOYW1lOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUXVlcnkgaW5wdXQgZm9yIHBsdWdpbnNcbiAqXG4gKiBUaGlzIGFsdGVybmF0ZSBicmFuY2ggaXMgbmVjZXNzYXJ5IGJlY2F1c2UgaXQgbmVlZHMgdG8gYmUgYWJsZSB0byBlc2NhcGUgYWxsIHR5cGUgY2hlY2tpbmdcbiAqIHdlIGRvIG9uIG9uIHRoZSBjbG91ZCBhc3NlbWJseSAtLSB3ZSBjYW5ub3Qga25vdyB0aGUgcHJvcGVydGllcyB0aGF0IHdpbGwgYmUgdXNlZCBhIHByaW9yaS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQbHVnaW5Db250ZXh0UXVlcnkge1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIHBsdWdpblxuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2luTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBcmJpdHJhcnkgb3RoZXIgYXJndW1lbnRzIGZvciB0aGUgcGx1Z2luLlxuICAgKlxuICAgKiBUaGlzIGluZGV4IHNpZ25hdHVyZSBpcyBub3QgdXNhYmxlIGluIG5vbi1UeXBlU2NyaXB0L0phdmFTY3JpcHQgbGFuZ3VhZ2VzLlxuICAgKlxuICAgKiBAanNpaSBpZ25vcmVcbiAgICovXG4gIFtrZXk6IHN0cmluZ106IGFueTtcbn1cblxuZXhwb3J0IHR5cGUgQ29udGV4dFF1ZXJ5UHJvcGVydGllcyA9IEFtaUNvbnRleHRRdWVyeVxufCBBdmFpbGFiaWxpdHlab25lc0NvbnRleHRRdWVyeVxufCBIb3N0ZWRab25lQ29udGV4dFF1ZXJ5XG58IFNTTVBhcmFtZXRlckNvbnRleHRRdWVyeVxufCBWcGNDb250ZXh0UXVlcnlcbnwgRW5kcG9pbnRTZXJ2aWNlQXZhaWxhYmlsaXR5Wm9uZXNDb250ZXh0UXVlcnlcbnwgTG9hZEJhbGFuY2VyQ29udGV4dFF1ZXJ5XG58IExvYWRCYWxhbmNlckxpc3RlbmVyQ29udGV4dFF1ZXJ5XG58IFNlY3VyaXR5R3JvdXBDb250ZXh0UXVlcnlcbnwgS2V5Q29udGV4dFF1ZXJ5XG58IFBsdWdpbkNvbnRleHRRdWVyeTtcblxuIl19
+
+/***/ }),
+
+/***/ 34823:
+/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
+
+"use strict";
+
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ var desc = Object.getOwnPropertyDescriptor(m, k);
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+ desc = { enumerable: true, get: function() { return m[k]; } };
+ }
+ Object.defineProperty(o, k2, desc);
+}) : (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ o[k2] = m[k];
+}));
+var __exportStar = (this && this.__exportStar) || function(m, exports) {
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
+};
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+__exportStar(__nccwpck_require__(66366), exports);
+__exportStar(__nccwpck_require__(8433), exports);
+__exportStar(__nccwpck_require__(38516), exports);
+__exportStar(__nccwpck_require__(91377), exports);
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsMkNBQXlCO0FBQ3pCLG9EQUFrQztBQUNsQyxvREFBa0M7QUFDbEMsb0RBQWtDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9zY2hlbWEnO1xuZXhwb3J0ICogZnJvbSAnLi9tZXRhZGF0YS1zY2hlbWEnO1xuZXhwb3J0ICogZnJvbSAnLi9hcnRpZmFjdC1zY2hlbWEnO1xuZXhwb3J0ICogZnJvbSAnLi9jb250ZXh0LXF1ZXJpZXMnO1xuIl19
+
+/***/ }),
+
+/***/ 8433:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.ArtifactMetadataEntryType = void 0;
+/**
+ * Type of artifact metadata entry.
+ */
+var ArtifactMetadataEntryType;
+(function (ArtifactMetadataEntryType) {
+ /**
+ * Asset in metadata.
+ */
+ ArtifactMetadataEntryType["ASSET"] = "aws:cdk:asset";
+ /**
+ * Metadata key used to print INFO-level messages by the toolkit when an app is syntheized.
+ */
+ ArtifactMetadataEntryType["INFO"] = "aws:cdk:info";
+ /**
+ * Metadata key used to print WARNING-level messages by the toolkit when an app is syntheized.
+ */
+ ArtifactMetadataEntryType["WARN"] = "aws:cdk:warning";
+ /**
+ * Metadata key used to print ERROR-level messages by the toolkit when an app is syntheized.
+ */
+ ArtifactMetadataEntryType["ERROR"] = "aws:cdk:error";
+ /**
+ * Represents the CloudFormation logical ID of a resource at a certain path.
+ */
+ ArtifactMetadataEntryType["LOGICAL_ID"] = "aws:cdk:logicalId";
+ /**
+ * Represents tags of a stack.
+ */
+ ArtifactMetadataEntryType["STACK_TAGS"] = "aws:cdk:stack-tags";
+})(ArtifactMetadataEntryType || (exports.ArtifactMetadataEntryType = ArtifactMetadataEntryType = {}));
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0YWRhdGEtc2NoZW1hLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsibWV0YWRhdGEtc2NoZW1hLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQW9RQTs7R0FFRztBQUNILElBQVkseUJBOEJYO0FBOUJELFdBQVkseUJBQXlCO0lBQ25DOztPQUVHO0lBQ0gsb0RBQXVCLENBQUE7SUFFdkI7O09BRUc7SUFDSCxrREFBcUIsQ0FBQTtJQUVyQjs7T0FFRztJQUNILHFEQUF3QixDQUFBO0lBRXhCOztPQUVHO0lBQ0gsb0RBQXVCLENBQUE7SUFFdkI7O09BRUc7SUFDSCw2REFBZ0MsQ0FBQTtJQUVoQzs7T0FFRztJQUNILDhEQUFpQyxDQUFBO0FBQ25DLENBQUMsRUE5QlcseUJBQXlCLHlDQUF6Qix5QkFBeUIsUUE4QnBDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb21tb24gcHJvcGVydGllcyBmb3IgYXNzZXQgbWV0YWRhdGEuXG4gKi9cbmludGVyZmFjZSBCYXNlQXNzZXRNZXRhZGF0YUVudHJ5IHtcbiAgLyoqXG4gICAqIFJlcXVlc3RlZCBwYWNrYWdpbmcgc3R5bGVcbiAgICovXG4gIHJlYWRvbmx5IHBhY2thZ2luZzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBMb2dpY2FsIGlkZW50aWZpZXIgZm9yIHRoZSBhc3NldFxuICAgKi9cbiAgcmVhZG9ubHkgaWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGhhc2ggb2YgdGhlIGFzc2V0IHNvdXJjZS5cbiAgICovXG4gIHJlYWRvbmx5IHNvdXJjZUhhc2g6IHN0cmluZztcblxuICAvKipcbiAgICogUGF0aCBvbiBkaXNrIHRvIHRoZSBhc3NldFxuICAgKi9cbiAgcmVhZG9ubHkgcGF0aDogc3RyaW5nO1xufVxuXG4vKipcbiAqIE1ldGFkYXRhIEVudHJ5IHNwZWMgZm9yIGZpbGVzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBlbnRyeSA9IHtcbiAqICAgcGFja2FnaW5nOiAnZmlsZScsXG4gKiAgIHMzQnVja2V0UGFyYW1ldGVyOiAnYnVja2V0LXBhcmFtZXRlcicsXG4gKiAgIHMzS2V5UGFyYW1lbnRlcjogJ2tleS1wYXJhbWV0ZXInLFxuICogICBhcnRpZmFjdEhhc2hQYXJhbWV0ZXI6ICdoYXNoLXBhcmFtZXRlcicsXG4gKiB9XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlsZUFzc2V0TWV0YWRhdGFFbnRyeSBleHRlbmRzIEJhc2VBc3NldE1ldGFkYXRhRW50cnkge1xuICAvKipcbiAgICogUmVxdWVzdGVkIHBhY2thZ2luZyBzdHlsZVxuICAgKi9cbiAgcmVhZG9ubHkgcGFja2FnaW5nOiAnemlwJyB8ICdmaWxlJztcblxuICAvKipcbiAgICogTmFtZSBvZiBwYXJhbWV0ZXIgd2hlcmUgUzMgYnVja2V0IHNob3VsZCBiZSBwYXNzZWQgaW5cbiAgICovXG4gIHJlYWRvbmx5IHMzQnVja2V0UGFyYW1ldGVyOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE5hbWUgb2YgcGFyYW1ldGVyIHdoZXJlIFMzIGtleSBzaG91bGQgYmUgcGFzc2VkIGluXG4gICAqL1xuICByZWFkb25seSBzM0tleVBhcmFtZXRlcjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgcGFyYW1ldGVyIHdoZXJlIHRoZSBoYXNoIG9mIHRoZSBidW5kbGVkIGFzc2V0IHNob3VsZCBiZSBwYXNzZWQgaW4uXG4gICAqL1xuICByZWFkb25seSBhcnRpZmFjdEhhc2hQYXJhbWV0ZXI6IHN0cmluZztcbn1cblxuLyoqXG4gKiBNZXRhZGF0YSBFbnRyeSBzcGVjIGZvciBzdGFjayB0YWcuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGFnIHtcbiAgLyoqXG4gICAqIFRhZyBrZXkuXG4gICAqXG4gICAqIChJbiB0aGUgYWN0dWFsIGZpbGUgb24gZGlzayB0aGlzIHdpbGwgYmUgY2FzZWQgYXMgXCJLZXlcIiwgYW5kIHRoZSBzdHJ1Y3R1cmUgaXNcbiAgICogcGF0Y2hlZCB0byBtYXRjaCB0aGlzIHN0cnVjdHVyZSB1cG9uIGxvYWRpbmc6XG4gICAqIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9ibG9iLzRhYWRhYTc3OWI0OGYzNTgzOGNjY2Q0ZTI1MTA3YjIzMzhmMDU1NDcvcGFja2FnZXMvJTQwYXdzLWNkay9jbG91ZC1hc3NlbWJseS1zY2hlbWEvbGliL21hbmlmZXN0LnRzI0wxMzcpXG4gICAqL1xuICByZWFkb25seSBrZXk6IHN0cmluZ1xuXG4gIC8qKlxuICAgKiBUYWcgdmFsdWUuXG4gICAqXG4gICAqIChJbiB0aGUgYWN0dWFsIGZpbGUgb24gZGlzayB0aGlzIHdpbGwgYmUgY2FzZWQgYXMgXCJWYWx1ZVwiLCBhbmQgdGhlIHN0cnVjdHVyZSBpc1xuICAgKiBwYXRjaGVkIHRvIG1hdGNoIHRoaXMgc3RydWN0dXJlIHVwb24gbG9hZGluZzpcbiAgICogaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2Jsb2IvNGFhZGFhNzc5YjQ4ZjM1ODM4Y2NjZDRlMjUxMDdiMjMzOGYwNTU0Ny9wYWNrYWdlcy8lNDBhd3MtY2RrL2Nsb3VkLWFzc2VtYmx5LXNjaGVtYS9saWIvbWFuaWZlc3QudHMjTDEzNylcbiAgICovXG4gIHJlYWRvbmx5IHZhbHVlOiBzdHJpbmdcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBjb25maWd1cmluZyB0aGUgRG9ja2VyIGNhY2hlIGJhY2tlbmRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb250YWluZXJJbWFnZUFzc2V0Q2FjaGVPcHRpb24ge1xuICAvKipcbiAgICogVGhlIHR5cGUgb2YgY2FjaGUgdG8gdXNlLlxuICAgKiBSZWZlciB0byBodHRwczovL2RvY3MuZG9ja2VyLmNvbS9idWlsZC9jYWNoZS9iYWNrZW5kcy8gZm9yIGZ1bGwgbGlzdCBvZiBiYWNrZW5kcy5cbiAgICogQGRlZmF1bHQgLSB1bnNwZWNpZmllZFxuICAgKlxuICAgKiBAZXhhbXBsZSAncmVnaXN0cnknXG4gICAqL1xuICByZWFkb25seSB0eXBlOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBBbnkgcGFyYW1ldGVycyB0byBwYXNzIGludG8gdGhlIGRvY2tlciBjYWNoZSBiYWNrZW5kIGNvbmZpZ3VyYXRpb24uXG4gICAqIFJlZmVyIHRvIGh0dHBzOi8vZG9jcy5kb2NrZXIuY29tL2J1aWxkL2NhY2hlL2JhY2tlbmRzLyBmb3IgY2FjaGUgYmFja2VuZCBjb25maWd1cmF0aW9uLlxuICAgKiBAZGVmYXVsdCB7fSBObyBvcHRpb25zIHByb3ZpZGVkXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGRlY2xhcmUgY29uc3QgYnJhbmNoOiBzdHJpbmc7XG4gICAqXG4gICAqIGNvbnN0IHBhcmFtcyA9IHtcbiAgICogICByZWY6IGAxMjM0NTY3OC5ka3IuZWNyLnVzLXdlc3QtMi5hbWF6b25hd3MuY29tL2NhY2hlOiR7YnJhbmNofWAsXG4gICAqICAgbW9kZTogXCJtYXhcIixcbiAgICogfTtcbiAgICovXG4gIHJlYWRvbmx5IHBhcmFtcz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG59XG5cbi8qKlxuICogTWV0YWRhdGEgRW50cnkgc3BlYyBmb3IgY29udGFpbmVyIGltYWdlcy5cbiAqXG4gKiBAZXhhbXBsZVxuICogY29uc3QgZW50cnkgPSB7XG4gKiAgIHBhY2thZ2luZzogJ2NvbnRhaW5lci1pbWFnZScsXG4gKiAgIHJlcG9zaXRvcnlOYW1lOiAncmVwb3NpdG9yeS1uYW1lJyxcbiAqICAgaW1hZ2VUYWc6ICd0YWcnLFxuICogfVxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbnRhaW5lckltYWdlQXNzZXRNZXRhZGF0YUVudHJ5IGV4dGVuZHMgQmFzZUFzc2V0TWV0YWRhdGFFbnRyeSB7XG4gIC8qKlxuICAgKiBUeXBlIG9mIGFzc2V0XG4gICAqL1xuICByZWFkb25seSBwYWNrYWdpbmc6ICdjb250YWluZXItaW1hZ2UnO1xuXG4gIC8qKlxuICAgKiBFQ1IgUmVwb3NpdG9yeSBuYW1lIGFuZCByZXBvIGRpZ2VzdCAoc2VwYXJhdGVkIGJ5IFwiQHNoYTI1NjpcIikgd2hlcmUgdGhpc1xuICAgKiBpbWFnZSBpcyBzdG9yZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IHVuZGVmaW5lZCBJZiBub3Qgc3BlY2lmaWVkLCBgcmVwb3NpdG9yeU5hbWVgIGFuZCBgaW1hZ2VUYWdgIGFyZVxuICAgKiByZXF1aXJlZCBiZWNhdXNlIG90aGVyd2lzZSBob3cgd2lsbCB0aGUgc3RhY2sga25vdyB3aGVyZSB0byBmaW5kIHRoZSBhc3NldCxcbiAgICogaGE/XG4gICAqIEBkZXByZWNhdGVkIHNwZWNpZnkgYHJlcG9zaXRvcnlOYW1lYCBhbmQgYGltYWdlVGFnYCBpbnN0ZWFkLCBhbmQgdGhlbiB5b3VcbiAgICoga25vdyB3aGVyZSB0aGUgaW1hZ2Ugd2lsbCBnby5cbiAgICovXG4gIHJlYWRvbmx5IGltYWdlTmFtZVBhcmFtZXRlcj86IHN0cmluZztcblxuICAvKipcbiAgICogRUNSIHJlcG9zaXRvcnkgbmFtZSwgaWYgb21pdHRlZCBhIGRlZmF1bHQgbmFtZSBiYXNlZCBvbiB0aGUgYXNzZXQncyBJRCBpc1xuICAgKiB1c2VkIGluc3RlYWQuIFNwZWNpZnkgdGhpcyBwcm9wZXJ0eSBpZiB5b3UgbmVlZCB0byBzdGF0aWNhbGx5IGFkZHJlc3MgdGhlXG4gICAqIGltYWdlLCBlLmcuIGZyb20gYSBLdWJlcm5ldGVzIFBvZC4gTm90ZSwgdGhpcyBpcyBvbmx5IHRoZSByZXBvc2l0b3J5IG5hbWUsXG4gICAqIHdpdGhvdXQgdGhlIHJlZ2lzdHJ5IGFuZCB0aGUgdGFnIHBhcnRzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHRoaXMgcGFyYW1ldGVyIGlzIFJFUVVJUkVEIGFmdGVyIDEuMjEuMFxuICAgKi9cbiAgcmVhZG9ubHkgcmVwb3NpdG9yeU5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBkb2NrZXIgaW1hZ2UgdGFnIHRvIHVzZSBmb3IgdGFnZ2luZyBwdXNoZWQgaW1hZ2VzLiBUaGlzIGZpZWxkIGlzXG4gICAqIHJlcXVpcmVkIGlmIGBpbWFnZVBhcmFtZXRlck5hbWVgIGlzIG9tbWl0ZWQgKG90aGVyd2lzZSwgdGhlIGFwcCB3b24ndCBiZVxuICAgKiBhYmxlIHRvIGZpbmQgdGhlIGltYWdlKS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSB0aGlzIHBhcmFtZXRlciBpcyBSRVFVSVJFRCBhZnRlciAxLjIxLjBcbiAgICovXG4gIHJlYWRvbmx5IGltYWdlVGFnPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBCdWlsZCBhcmdzIHRvIHBhc3MgdG8gdGhlIGBkb2NrZXIgYnVpbGRgIGNvbW1hbmRcbiAgICpcbiAgICogQGRlZmF1bHQgbm8gYnVpbGQgYXJncyBhcmUgcGFzc2VkXG4gICAqL1xuICByZWFkb25seSBidWlsZEFyZ3M/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuXG4gIC8qKlxuICAgKiBTU0ggYWdlbnQgc29ja2V0IG9yIGtleXMgdG8gcGFzcyB0byB0aGUgYGRvY2tlciBidWlsZGAgY29tbWFuZFxuICAgKlxuICAgKiBAZGVmYXVsdCBubyBzc2ggYXJnIGlzIHBhc3NlZFxuICAgKi9cbiAgcmVhZG9ubHkgYnVpbGRTc2g/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEJ1aWxkIHNlY3JldHMgdG8gcGFzcyB0byB0aGUgYGRvY2tlciBidWlsZGAgY29tbWFuZFxuICAgKlxuICAgKiBAZGVmYXVsdCBubyBidWlsZCBzZWNyZXRzIGFyZSBwYXNzZWRcbiAgICovXG4gIHJlYWRvbmx5IGJ1aWxkU2VjcmV0cz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG5cbiAgLyoqXG4gICAqIERvY2tlciB0YXJnZXQgdG8gYnVpbGQgdG9cbiAgICpcbiAgICogQGRlZmF1bHQgbm8gYnVpbGQgdGFyZ2V0XG4gICAqL1xuICByZWFkb25seSB0YXJnZXQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBhdGggdG8gdGhlIERvY2tlcmZpbGUgKHJlbGF0aXZlIHRvIHRoZSBkaXJlY3RvcnkpLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIGZpbGUgaXMgcGFzc2VkXG4gICAqL1xuICByZWFkb25seSBmaWxlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBOZXR3b3JraW5nIG1vZGUgZm9yIHRoZSBSVU4gY29tbWFuZHMgZHVyaW5nIGJ1aWxkLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIG5ldHdvcmtpbmcgbW9kZSBzcGVjaWZpZWRcbiAgICovXG4gIHJlYWRvbmx5IG5ldHdvcmtNb2RlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQbGF0Zm9ybSB0byBidWlsZCBmb3IuIF9SZXF1aXJlcyBEb2NrZXIgQnVpbGR4Xy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBjdXJyZW50IG1hY2hpbmUgcGxhdGZvcm1cbiAgICovXG4gIHJlYWRvbmx5IHBsYXRmb3JtPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBPdXRwdXRzIHRvIHBhc3MgdG8gdGhlIGBkb2NrZXIgYnVpbGRgIGNvbW1hbmQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gb3V0cHV0cyBhcmUgcGFzc2VkIHRvIHRoZSBidWlsZCBjb21tYW5kIChkZWZhdWx0IG91dHB1dHMgYXJlIHVzZWQpXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmRvY2tlci5jb20vZW5naW5lL3JlZmVyZW5jZS9jb21tYW5kbGluZS9idWlsZC8jY3VzdG9tLWJ1aWxkLW91dHB1dHNcbiAgICovXG4gIHJlYWRvbmx5IG91dHB1dHM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogQ2FjaGUgZnJvbSBvcHRpb25zIHRvIHBhc3MgdG8gdGhlIGBkb2NrZXIgYnVpbGRgIGNvbW1hbmQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gY2FjaGUgZnJvbSBvcHRpb25zIGFyZSBwYXNzZWQgdG8gdGhlIGJ1aWxkIGNvbW1hbmRcbiAgICogQHNlZSBodHRwczovL2RvY3MuZG9ja2VyLmNvbS9idWlsZC9jYWNoZS9iYWNrZW5kcy9cbiAgICovXG4gIHJlYWRvbmx5IGNhY2hlRnJvbT86IENvbnRhaW5lckltYWdlQXNzZXRDYWNoZU9wdGlvbltdO1xuXG4gIC8qKlxuICAgKiBDYWNoZSB0byBvcHRpb25zIHRvIHBhc3MgdG8gdGhlIGBkb2NrZXIgYnVpbGRgIGNvbW1hbmQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gY2FjaGUgdG8gb3B0aW9ucyBhcmUgcGFzc2VkIHRvIHRoZSBidWlsZCBjb21tYW5kXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmRvY2tlci5jb20vYnVpbGQvY2FjaGUvYmFja2VuZHMvXG4gICAqL1xuICByZWFkb25seSBjYWNoZVRvPzogQ29udGFpbmVySW1hZ2VBc3NldENhY2hlT3B0aW9uO1xufVxuXG4vKipcbiAqIEBzZWUgQXJ0aWZhY3RNZXRhZGF0YUVudHJ5VHlwZS5BU1NFVFxuICovXG5leHBvcnQgdHlwZSBBc3NldE1ldGFkYXRhRW50cnkgPSBGaWxlQXNzZXRNZXRhZGF0YUVudHJ5IHwgQ29udGFpbmVySW1hZ2VBc3NldE1ldGFkYXRhRW50cnk7XG5cbi8vIFR5cGUgYWxpYXNlcyBmb3IgbWV0YWRhdGEgZW50cmllcy5cbi8vIFVzZWQgc2ltcGx5IHRvIGFzc2lnbiBuYW1lcyB0byBkYXRhIHR5cGVzIGZvciBtb3JlIGNsYXJpdHkuXG5cbi8qKlxuICogQHNlZSBBcnRpZmFjdE1ldGFkYXRhRW50cnlUeXBlLklORk9cbiAqIEBzZWUgQXJ0aWZhY3RNZXRhZGF0YUVudHJ5VHlwZS5XQVJOXG4gKiBAc2VlIEFydGlmYWN0TWV0YWRhdGFFbnRyeVR5cGUuRVJST1JcbiAqL1xuZXhwb3J0IHR5cGUgTG9nTWVzc2FnZU1ldGFkYXRhRW50cnkgPSBzdHJpbmc7XG5cbi8qKlxuICogQHNlZSBBcnRpZmFjdE1ldGFkYXRhRW50cnlUeXBlLkxPR0lDQUxfSURcbiAqL1xuZXhwb3J0IHR5cGUgTG9naWNhbElkTWV0YWRhdGFFbnRyeSA9IHN0cmluZztcblxuLyoqXG4gKiBAc2VlIEFydGlmYWN0TWV0YWRhdGFFbnRyeVR5cGUuU1RBQ0tfVEFHU1xuICovXG5leHBvcnQgdHlwZSBTdGFja1RhZ3NNZXRhZGF0YUVudHJ5ID0gVGFnW107XG5cbi8qKlxuICogVW5pb24gdHlwZSBmb3IgYWxsIG1ldGFkYXRhIGVudHJpZXMgdGhhdCBtaWdodCBleGlzdCBpbiB0aGUgbWFuaWZlc3QuXG4gKi9cbmV4cG9ydCB0eXBlIE1ldGFkYXRhRW50cnlEYXRhID0gQXNzZXRNZXRhZGF0YUVudHJ5IHwgTG9nTWVzc2FnZU1ldGFkYXRhRW50cnkgfCBMb2dpY2FsSWRNZXRhZGF0YUVudHJ5IHwgU3RhY2tUYWdzTWV0YWRhdGFFbnRyeTtcblxuLyoqXG4gKiBUeXBlIG9mIGFydGlmYWN0IG1ldGFkYXRhIGVudHJ5LlxuICovXG5leHBvcnQgZW51bSBBcnRpZmFjdE1ldGFkYXRhRW50cnlUeXBlIHtcbiAgLyoqXG4gICAqIEFzc2V0IGluIG1ldGFkYXRhLlxuICAgKi9cbiAgQVNTRVQgPSAnYXdzOmNkazphc3NldCcsXG5cbiAgLyoqXG4gICAqIE1ldGFkYXRhIGtleSB1c2VkIHRvIHByaW50IElORk8tbGV2ZWwgbWVzc2FnZXMgYnkgdGhlIHRvb2xraXQgd2hlbiBhbiBhcHAgaXMgc3ludGhlaXplZC5cbiAgICovXG4gIElORk8gPSAnYXdzOmNkazppbmZvJyxcblxuICAvKipcbiAgICogTWV0YWRhdGEga2V5IHVzZWQgdG8gcHJpbnQgV0FSTklORy1sZXZlbCBtZXNzYWdlcyBieSB0aGUgdG9vbGtpdCB3aGVuIGFuIGFwcCBpcyBzeW50aGVpemVkLlxuICAgKi9cbiAgV0FSTiA9ICdhd3M6Y2RrOndhcm5pbmcnLFxuXG4gIC8qKlxuICAgKiBNZXRhZGF0YSBrZXkgdXNlZCB0byBwcmludCBFUlJPUi1sZXZlbCBtZXNzYWdlcyBieSB0aGUgdG9vbGtpdCB3aGVuIGFuIGFwcCBpcyBzeW50aGVpemVkLlxuICAgKi9cbiAgRVJST1IgPSAnYXdzOmNkazplcnJvcicsXG5cbiAgLyoqXG4gICAqIFJlcHJlc2VudHMgdGhlIENsb3VkRm9ybWF0aW9uIGxvZ2ljYWwgSUQgb2YgYSByZXNvdXJjZSBhdCBhIGNlcnRhaW4gcGF0aC5cbiAgICovXG4gIExPR0lDQUxfSUQgPSAnYXdzOmNkazpsb2dpY2FsSWQnLFxuXG4gIC8qKlxuICAgKiBSZXByZXNlbnRzIHRhZ3Mgb2YgYSBzdGFjay5cbiAgICovXG4gIFNUQUNLX1RBR1MgPSAnYXdzOmNkazpzdGFjay10YWdzJ1xufVxuXG4vKipcbiAqIEEgbWV0YWRhdGEgZW50cnkgaW4gYSBjbG91ZCBhc3NlbWJseSBhcnRpZmFjdC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNZXRhZGF0YUVudHJ5IHtcbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHRoZSBtZXRhZGF0YSBlbnRyeS5cbiAgICovXG4gIHJlYWRvbmx5IHR5cGU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGRhdGEuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gZGF0YS5cbiAgICovXG4gIHJlYWRvbmx5IGRhdGE/OiBNZXRhZGF0YUVudHJ5RGF0YTtcblxuICAvKipcbiAgICogQSBzdGFjayB0cmFjZSBmb3Igd2hlbiB0aGUgZW50cnkgd2FzIGNyZWF0ZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gdHJhY2UuXG4gICAqL1xuICByZWFkb25seSB0cmFjZT86IHN0cmluZ1tdO1xufVxuIl19
+
+/***/ }),
+
+/***/ 66366:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.ArtifactType = void 0;
+/**
+ * Type of cloud artifact.
+ */
+var ArtifactType;
+(function (ArtifactType) {
+ /**
+ * Stub required because of JSII.
+ */
+ ArtifactType["NONE"] = "none";
+ /**
+ * The artifact is an AWS CloudFormation stack.
+ */
+ ArtifactType["AWS_CLOUDFORMATION_STACK"] = "aws:cloudformation:stack";
+ /**
+ * The artifact contains the CDK application's construct tree.
+ */
+ ArtifactType["CDK_TREE"] = "cdk:tree";
+ /**
+ * Manifest for all assets in the Cloud Assembly
+ */
+ ArtifactType["ASSET_MANIFEST"] = "cdk:asset-manifest";
+ /**
+ * Nested Cloud Assembly
+ */
+ ArtifactType["NESTED_CLOUD_ASSEMBLY"] = "cdk:cloud-assembly";
+})(ArtifactType || (exports.ArtifactType = ArtifactType = {}));
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsic2NoZW1hLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUlBOztHQUVHO0FBQ0gsSUFBWSxZQXlCWDtBQXpCRCxXQUFZLFlBQVk7SUFDdEI7O09BRUc7SUFDSCw2QkFBYSxDQUFBO0lBRWI7O09BRUc7SUFDSCxxRUFBcUQsQ0FBQTtJQUVyRDs7T0FFRztJQUNILHFDQUFxQixDQUFBO0lBRXJCOztPQUVHO0lBQ0gscURBQXFDLENBQUE7SUFFckM7O09BRUc7SUFDSCw0REFBNEMsQ0FBQTtBQUM5QyxDQUFDLEVBekJXLFlBQVksNEJBQVosWUFBWSxRQXlCdkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBcnRpZmFjdFByb3BlcnRpZXMgfSBmcm9tICcuL2FydGlmYWN0LXNjaGVtYSc7XG5pbXBvcnQgeyBDb250ZXh0UHJvdmlkZXIsIENvbnRleHRRdWVyeVByb3BlcnRpZXMgfSBmcm9tICcuL2NvbnRleHQtcXVlcmllcyc7XG5pbXBvcnQgeyBNZXRhZGF0YUVudHJ5IH0gZnJvbSAnLi9tZXRhZGF0YS1zY2hlbWEnO1xuXG4vKipcbiAqIFR5cGUgb2YgY2xvdWQgYXJ0aWZhY3QuXG4gKi9cbmV4cG9ydCBlbnVtIEFydGlmYWN0VHlwZSB7XG4gIC8qKlxuICAgKiBTdHViIHJlcXVpcmVkIGJlY2F1c2Ugb2YgSlNJSS5cbiAgICovXG4gIE5PTkUgPSAnbm9uZScsIC8vIHJlcXVpcmVkIGR1ZSB0byBhIGpzaWkgYnVnXG5cbiAgLyoqXG4gICAqIFRoZSBhcnRpZmFjdCBpcyBhbiBBV1MgQ2xvdWRGb3JtYXRpb24gc3RhY2suXG4gICAqL1xuICBBV1NfQ0xPVURGT1JNQVRJT05fU1RBQ0sgPSAnYXdzOmNsb3VkZm9ybWF0aW9uOnN0YWNrJyxcblxuICAvKipcbiAgICogVGhlIGFydGlmYWN0IGNvbnRhaW5zIHRoZSBDREsgYXBwbGljYXRpb24ncyBjb25zdHJ1Y3QgdHJlZS5cbiAgICovXG4gIENES19UUkVFID0gJ2Nkazp0cmVlJyxcblxuICAvKipcbiAgICogTWFuaWZlc3QgZm9yIGFsbCBhc3NldHMgaW4gdGhlIENsb3VkIEFzc2VtYmx5XG4gICAqL1xuICBBU1NFVF9NQU5JRkVTVCA9ICdjZGs6YXNzZXQtbWFuaWZlc3QnLFxuXG4gIC8qKlxuICAgKiBOZXN0ZWQgQ2xvdWQgQXNzZW1ibHlcbiAgICovXG4gIE5FU1RFRF9DTE9VRF9BU1NFTUJMWSA9ICdjZGs6Y2xvdWQtYXNzZW1ibHknLFxufVxuXG4vKipcbiAqIEluZm9ybWF0aW9uIGFib3V0IHRoZSBhcHBsaWNhdGlvbidzIHJ1bnRpbWUgY29tcG9uZW50cy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSdW50aW1lSW5mbyB7XG4gIC8qKlxuICAgKiBUaGUgbGlzdCBvZiBsaWJyYXJpZXMgbG9hZGVkIGluIHRoZSBhcHBsaWNhdGlvbiwgYXNzb2NpYXRlZCB3aXRoIHRoZWlyIHZlcnNpb25zLlxuICAgKi9cbiAgcmVhZG9ubHkgbGlicmFyaWVzOiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmcgfTtcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgbWlzc2luZyBwaWVjZSBvZiBjb250ZXh0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1pc3NpbmdDb250ZXh0IHtcbiAgLyoqXG4gICAqIFRoZSBtaXNzaW5nIGNvbnRleHQga2V5LlxuICAgKi9cbiAgcmVhZG9ubHkga2V5OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBwcm92aWRlciBmcm9tIHdoaWNoIHdlIGV4cGVjdCB0aGlzIGNvbnRleHQga2V5IHRvIGJlIG9idGFpbmVkLlxuICAgKi9cbiAgcmVhZG9ubHkgcHJvdmlkZXI6IENvbnRleHRQcm92aWRlcjtcblxuICAvKipcbiAgICogQSBzZXQgb2YgcHJvdmlkZXItc3BlY2lmaWMgb3B0aW9ucy5cbiAgICovXG4gIHJlYWRvbmx5IHByb3BzOiBDb250ZXh0UXVlcnlQcm9wZXJ0aWVzO1xufVxuXG4vKipcbiAqIEEgbWFuaWZlc3QgZm9yIGEgc2luZ2xlIGFydGlmYWN0IHdpdGhpbiB0aGUgY2xvdWQgYXNzZW1ibHkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXJ0aWZhY3RNYW5pZmVzdCB7XG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiBhcnRpZmFjdC5cbiAgICovXG4gIHJlYWRvbmx5IHR5cGU6IEFydGlmYWN0VHlwZTtcblxuICAvKipcbiAgICogVGhlIGVudmlyb25tZW50IGludG8gd2hpY2ggdGhpcyBhcnRpZmFjdCBpcyBkZXBsb3llZC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBlbnZyaW9ubWVudC5cbiAgICovXG4gIHJlYWRvbmx5IGVudmlyb25tZW50Pzogc3RyaW5nOyAvLyBmb3JtYXQ6IGF3czovL2FjY291bnQvcmVnaW9uXG5cbiAgLyoqXG4gICAqIEFzc29jaWF0ZWQgbWV0YWRhdGEuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gbWV0YWRhdGEuXG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YT86IHsgW3BhdGg6IHN0cmluZ106IE1ldGFkYXRhRW50cnlbXSB9O1xuXG4gIC8qKlxuICAgKiBJRHMgb2YgYXJ0aWZhY3RzIHRoYXQgbXVzdCBiZSBkZXBsb3llZCBiZWZvcmUgdGhpcyBhcnRpZmFjdC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBkZXBlbmRlbmNpZXMuXG4gICAqL1xuICByZWFkb25seSBkZXBlbmRlbmNpZXM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIHNldCBvZiBwcm9wZXJ0aWVzIGZvciB0aGlzIGFydGlmYWN0IChkZXBlbmRzIG9uIHR5cGUpXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gcHJvcGVydGllcy5cbiAgICovXG4gIHJlYWRvbmx5IHByb3BlcnRpZXM/OiBBcnRpZmFjdFByb3BlcnRpZXM7XG5cbiAgLyoqXG4gICAqIEEgc3RyaW5nIHRoYXQgcmVwcmVzZW50cyB0aGlzIGFydGlmYWN0LiBTaG91bGQgb25seSBiZSB1c2VkIGluIHVzZXIgaW50ZXJmYWNlcy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBkaXNwbGF5IG5hbWVcbiAgICovXG4gIHJlYWRvbmx5IGRpc3BsYXlOYW1lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgbWFuaWZlc3Qgd2hpY2ggZGVzY3JpYmVzIHRoZSBjbG91ZCBhc3NlbWJseS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBc3NlbWJseU1hbmlmZXN0IHtcbiAgLyoqXG4gICAqIFByb3RvY29sIHZlcnNpb25cbiAgICovXG4gIHJlYWRvbmx5IHZlcnNpb246IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHNldCBvZiBhcnRpZmFjdHMgaW4gdGhpcyBhc3NlbWJseS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBhcnRpZmFjdHMuXG4gICAqL1xuICByZWFkb25seSBhcnRpZmFjdHM/OiB7IFtpZDogc3RyaW5nXTogQXJ0aWZhY3RNYW5pZmVzdCB9O1xuXG4gIC8qKlxuICAgKiBNaXNzaW5nIGNvbnRleHQgaW5mb3JtYXRpb24uIElmIHRoaXMgZmllbGQgaGFzIHZhbHVlcywgaXQgbWVhbnMgdGhhdCB0aGVcbiAgICogY2xvdWQgYXNzZW1ibHkgaXMgbm90IGNvbXBsZXRlIGFuZCBzaG91bGQgbm90IGJlIGRlcGxveWVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIG1pc3NpbmcgY29udGV4dC5cbiAgICovXG4gIHJlYWRvbmx5IG1pc3Npbmc/OiBNaXNzaW5nQ29udGV4dFtdO1xuXG4gIC8qKlxuICAgKiBSdW50aW1lIGluZm9ybWF0aW9uLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIGluZm8uXG4gICAqL1xuICByZWFkb25seSBydW50aW1lPzogUnVudGltZUluZm87XG59XG4iXX0=
+
+/***/ }),
+
+/***/ 90001:
+/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
+
+"use strict";
+
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ var desc = Object.getOwnPropertyDescriptor(m, k);
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+ desc = { enumerable: true, get: function() { return m[k]; } };
+ }
+ Object.defineProperty(o, k2, desc);
+}) : (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ o[k2] = m[k];
+}));
+var __exportStar = (this && this.__exportStar) || function(m, exports) {
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
+};
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+__exportStar(__nccwpck_require__(34823), exports);
+__exportStar(__nccwpck_require__(76875), exports);
+__exportStar(__nccwpck_require__(63303), exports);
+__exportStar(__nccwpck_require__(3499), exports);
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsbURBQWlDO0FBQ2pDLDJDQUF5QjtBQUN6Qiw2Q0FBMkI7QUFDM0IsZ0RBQThCIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9jbG91ZC1hc3NlbWJseSc7XG5leHBvcnQgKiBmcm9tICcuL2Fzc2V0cyc7XG5leHBvcnQgKiBmcm9tICcuL21hbmlmZXN0JztcbmV4cG9ydCAqIGZyb20gJy4vaW50ZWctdGVzdHMnO1xuIl19
+
+/***/ }),
+
+/***/ 85228:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.RequireApproval = void 0;
+/**
+ * In what scenarios should the CLI ask for approval
+ */
+var RequireApproval;
+(function (RequireApproval) {
+ /**
+ * Never ask for approval
+ */
+ RequireApproval["NEVER"] = "never";
+ /**
+ * Prompt for approval for any type of change to the stack
+ */
+ RequireApproval["ANYCHANGE"] = "any-change";
+ /**
+ * Only prompt for approval if there are security related changes
+ */
+ RequireApproval["BROADENING"] = "broadening";
+})(RequireApproval || (exports.RequireApproval = RequireApproval = {}));
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY29tbW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBOztHQUVHO0FBQ0gsSUFBWSxlQWVYO0FBZkQsV0FBWSxlQUFlO0lBQ3pCOztPQUVHO0lBQ0gsa0NBQWUsQ0FBQTtJQUVmOztPQUVHO0lBQ0gsMkNBQXdCLENBQUE7SUFFeEI7O09BRUc7SUFDSCw0Q0FBeUIsQ0FBQTtBQUMzQixDQUFDLEVBZlcsZUFBZSwrQkFBZixlQUFlLFFBZTFCIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBJbiB3aGF0IHNjZW5hcmlvcyBzaG91bGQgdGhlIENMSSBhc2sgZm9yIGFwcHJvdmFsXG4gKi9cbmV4cG9ydCBlbnVtIFJlcXVpcmVBcHByb3ZhbCB7XG4gIC8qKlxuICAgKiBOZXZlciBhc2sgZm9yIGFwcHJvdmFsXG4gICAqL1xuICBORVZFUiA9ICduZXZlcicsXG5cbiAgLyoqXG4gICAqIFByb21wdCBmb3IgYXBwcm92YWwgZm9yIGFueSB0eXBlICBvZiBjaGFuZ2UgdG8gdGhlIHN0YWNrXG4gICAqL1xuICBBTllDSEFOR0UgPSAnYW55LWNoYW5nZScsXG5cbiAgLyoqXG4gICAqIE9ubHkgcHJvbXB0IGZvciBhcHByb3ZhbCBpZiB0aGVyZSBhcmUgc2VjdXJpdHkgcmVsYXRlZCBjaGFuZ2VzXG4gICAqL1xuICBCUk9BREVOSU5HID0gJ2Jyb2FkZW5pbmcnXG59XG5cbi8qKlxuICogRGVmYXVsdCBDREsgQ0xJIG9wdGlvbnMgdGhhdCBhcHBseSB0byBhbGwgY29tbWFuZHNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZWZhdWx0Q2RrT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBMaXN0IG9mIHN0YWNrcyB0byBkZXBsb3lcbiAgICpcbiAgICogUmVxdXJpZWQgaWYgYGFsbGAgaXMgbm90IHNldFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIFtdXG4gICAqL1xuICByZWFkb25seSBzdGFja3M/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogRGVwbG95IGFsbCBzdGFja3NcbiAgICpcbiAgICogUmVxdXJpZWQgaWYgYHN0YWNrc2AgaXMgbm90IHNldFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGZhbHNlXG4gICAqL1xuICByZWFkb25seSBhbGw/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBjb21tYW5kLWxpbmUgZm9yIGV4ZWN1dGluZyB5b3VyIGFwcCBvciBhIGNsb3VkIGFzc2VtYmx5IGRpcmVjdG9yeVxuICAgKiBlLmcuIFwibm9kZSBiaW4vbXktYXBwLmpzXCJcbiAgICogb3JcbiAgICogXCJjZGsub3V0XCJcbiAgICpcbiAgICogQGRlZmF1bHQgLSByZWFkIGZyb20gY2RrLmpzb25cbiAgICovXG4gIHJlYWRvbmx5IGFwcD86IHN0cmluZztcblxuICAvKipcbiAgICogUm9sZSB0byBwYXNzIHRvIENsb3VkRm9ybWF0aW9uIGZvciBkZXBsb3ltZW50XG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdXNlIHRoZSBib290c3RyYXAgY2ZuLWV4ZWMgcm9sZVxuICAgKi9cbiAgcmVhZG9ubHkgcm9sZUFybj86IHN0cmluZztcblxuICAvKipcbiAgICogQWRkaXRpb25hbCBjb250ZXh0XG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gYWRkaXRpb25hbCBjb250ZXh0XG4gICAqL1xuICByZWFkb25seSBjb250ZXh0PzogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nIH07XG5cbiAgLyoqXG4gICAqIFByaW50IHRyYWNlIGZvciBzdGFjayB3YXJuaW5nc1xuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgdHJhY2U/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBEbyBub3QgY29uc3RydWN0IHN0YWNrcyB3aXRoIHdhcm5pbmdzXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBzdHJpY3Q/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBQZXJmb3JtIGNvbnRleHQgbG9va3Vwcy5cbiAgICpcbiAgICogU3ludGhlc2lzIGZhaWxzIGlmIHRoaXMgaXMgZGlzYWJsZWQgYW5kIGNvbnRleHQgbG9va3VwcyBuZWVkXG4gICAqIHRvIGJlIHBlcmZvcm1lZFxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBsb29rdXBzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICAqIElnbm9yZXMgc3ludGhlc2lzIGVycm9ycywgd2hpY2ggd2lsbCBsaWtlbHkgcHJvZHVjZSBhbiBpbnZhbGlkIG91dHB1dFxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgaWdub3JlRXJyb3JzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVXNlIEpTT04gb3V0cHV0IGluc3RlYWQgb2YgWUFNTCB3aGVuIHRlbXBsYXRlcyBhcmUgcHJpbnRlZFxuICAgKiB0byBTVERPVVRcbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGpzb24/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBzaG93IGRlYnVnIGxvZ3NcbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHZlcmJvc2U/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBlbmFibGUgZW1pc3Npb24gb2YgYWRkaXRpb25hbCBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24sIHN1Y2ggYXMgY3JlYXRpb24gc3RhY2tcbiAgICogdHJhY2VzIG9mIHRva2Vuc1xuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgZGVidWc/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBVc2UgdGhlIGluZGljYXRlZCBBV1MgcHJvZmlsZSBhcyB0aGUgZGVmYXVsdCBlbnZpcm9ubWVudFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIHByb2ZpbGUgaXMgdXNlZFxuICAgKi9cbiAgcmVhZG9ubHkgcHJvZmlsZT86IHN0cmluZztcblxuICAvKipcbiAgICogVXNlIHRoZSBpbmRpY2F0ZWQgcHJveHkuIFdpbGwgcmVhZCBmcm9tXG4gICAqIEhUVFBTX1BST1hZIGVudmlyb25tZW50IGlmIHNwZWNpZmllZFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIHByb3h5XG4gICAqL1xuICByZWFkb25seSBwcm94eT86IHN0cmluZztcblxuICAvKipcbiAgICogUGF0aCB0byBDQSBjZXJ0aWZpY2F0ZSB0byB1c2Ugd2hlbiB2YWxpZGF0aW5nIEhUVFBTXG4gICAqIHJlcXVlc3RzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHJlYWQgZnJvbSBBV1NfQ0FfQlVORExFIGVudmlyb25tZW50IHZhcmlhYmxlXG4gICAqL1xuICByZWFkb25seSBjYUJ1bmRsZVBhdGg/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEZvcmNlIHRyeWluZyB0byBmZXRjaCBFQzIgaW5zdGFuY2UgY3JlZGVudGlhbHNcbiAgICpcbiAgICogQGRlZmF1bHQgLSBndWVzcyBFQzIgaW5zdGFuY2Ugc3RhdHVzXG4gICAqL1xuICByZWFkb25seSBlYzJDcmVkcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEluY2x1ZGUgXCJBV1M6OkNESzo6TWV0YWRhdGFcIiByZXNvdXJjZSBpbiBzeW50aGVzaXplZCB0ZW1wbGF0ZXNcbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgdmVyc2lvblJlcG9ydGluZz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEluY2x1ZGUgXCJhd3M6Y2RrOnBhdGhcIiBDbG91ZEZvcm1hdGlvbiBtZXRhZGF0YSBmb3IgZWFjaCByZXNvdXJjZVxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBwYXRoTWV0YWRhdGE/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBJbmNsdWRlIFwiYXdzOmFzc2V0OipcIiBDbG91ZEZvcm1hdGlvbiBtZXRhZGF0YSBmb3IgcmVzb3VyY2VzIHRoYXQgdXNlIGFzc2V0c1xuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBhc3NldE1ldGFkYXRhPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQ29weSBhc3NldHMgdG8gdGhlIG91dHB1dCBkaXJlY3RvcnlcbiAgICpcbiAgICogTmVlZGVkIGZvciBsb2NhbCBkZWJ1Z2dpbmcgdGhlIHNvdXJjZSBmaWxlcyB3aXRoIFNBTSBDTElcbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHN0YWdpbmc/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBFbWl0cyB0aGUgc3ludGhlc2l6ZWQgY2xvdWQgYXNzZW1ibHkgaW50byBhIGRpcmVjdG9yeVxuICAgKlxuICAgKiBAZGVmYXVsdCBjZGsub3V0XG4gICAqL1xuICByZWFkb25seSBvdXRwdXQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFNob3cgcmVsZXZhbnQgbm90aWNlc1xuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBub3RpY2VzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogU2hvdyBjb2xvcnMgYW5kIG90aGVyIHN0eWxlIGZyb20gY29uc29sZSBvdXRwdXRcbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgY29sb3I/OiBib29sZWFuO1xufVxuIl19
+
+/***/ }),
+
+/***/ 77798:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwbG95LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZGVwbG95LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEZWZhdWx0Q2RrT3B0aW9ucywgUmVxdWlyZUFwcHJvdmFsIH0gZnJvbSAnLi9jb21tb24nO1xuXG4vKipcbiAqIE9wdGlvbnMgdG8gdXNlIHdpdGggY2RrIGRlcGxveVxuICovXG5leHBvcnQgaW50ZXJmYWNlIERlcGxveU9wdGlvbnMgZXh0ZW5kcyBEZWZhdWx0Q2RrT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBPbmx5IHBlcmZvcm0gYWN0aW9uIG9uIHRoZSBnaXZlbiBzdGFja1xuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgZXhjbHVzaXZlbHk/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBOYW1lIG9mIHRoZSB0b29sa2l0IHN0YWNrIHRvIHVzZS9kZXBsb3lcbiAgICpcbiAgICogQGRlZmF1bHQgQ0RLVG9vbGtpdFxuICAgKi9cbiAgcmVhZG9ubHkgdG9vbGtpdFN0YWNrTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogUmV1c2UgdGhlIGFzc2V0cyB3aXRoIHRoZSBnaXZlbiBhc3NldCBJRHNcbiAgICpcbiAgICogQGRlZmF1bHQgLSBkbyBub3QgcmV1c2UgYXNzZXRzXG4gICAqL1xuICByZWFkb25seSByZXVzZUFzc2V0cz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBuYW1lIHRvIHVzZSBmb3IgdGhlIENsb3VkRm9ybWF0aW9uIGNoYW5nZSBzZXQuXG4gICAqIElmIG5vdCBwcm92aWRlZCwgYSBuYW1lIHdpbGwgYmUgZ2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gYXV0byBnZW5lcmF0ZSBhIG5hbWVcbiAgICovXG4gIHJlYWRvbmx5IGNoYW5nZVNldE5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEFsd2F5cyBkZXBsb3ksIGV2ZW4gaWYgdGVtcGxhdGVzIGFyZSBpZGVudGljYWwuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBmb3JjZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFJvbGxiYWNrIGZhaWxlZCBkZXBsb3ltZW50c1xuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSByb2xsYmFjaz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEFSTnMgb2YgU05TIHRvcGljcyB0aGF0IENsb3VkRm9ybWF0aW9uIHdpbGwgbm90aWZ5IHdpdGggc3RhY2sgcmVsYXRlZCBldmVudHNcbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBub3RpZmljYXRpb25zXG4gICAqL1xuICByZWFkb25seSBub3RpZmljYXRpb25Bcm5zPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFdoYXQga2luZCBvZiBzZWN1cml0eSBjaGFuZ2VzIHJlcXVpcmUgYXBwcm92YWxcbiAgICpcbiAgICogQGRlZmF1bHQgUmVxdWlyZUFwcHJvdmFsLk5ldmVyXG4gICAqL1xuICByZWFkb25seSByZXF1aXJlQXBwcm92YWw/OiBSZXF1aXJlQXBwcm92YWw7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZXhlY3V0ZSB0aGUgQ2hhbmdlU2V0XG4gICAqIE5vdCBwcm92aWRpbmcgYGV4ZWN1dGVgIHBhcmFtZXRlciB3aWxsIHJlc3VsdCBpbiBleGVjdXRpb24gb2YgQ2hhbmdlU2V0XG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IGV4ZWN1dGU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIHBhcmFtZXRlcnMgZm9yIENsb3VkRm9ybWF0aW9uIGF0IGRlcGxveSB0aW1lXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICByZWFkb25seSBwYXJhbWV0ZXJzPzogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nIH07XG5cbiAgLyoqXG4gICAqIFVzZSBwcmV2aW91cyB2YWx1ZXMgZm9yIHVuc3BlY2lmaWVkIHBhcmFtZXRlcnNcbiAgICpcbiAgICogSWYgbm90IHNldCwgYWxsIHBhcmFtZXRlcnMgbXVzdCBiZSBzcGVjaWZpZWQgZm9yIGV2ZXJ5IGRlcGxveW1lbnQuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IHVzZVByZXZpb3VzUGFyYW1ldGVycz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFBhdGggdG8gZmlsZSB3aGVyZSBzdGFjayBvdXRwdXRzIHdpbGwgYmUgd3JpdHRlbiBhZnRlciBhIHN1Y2Nlc3NmdWwgZGVwbG95IGFzIEpTT05cbiAgICogQGRlZmF1bHQgLSBPdXRwdXRzIGFyZSBub3Qgd3JpdHRlbiB0byBhbnkgZmlsZVxuICAgKi9cbiAgcmVhZG9ubHkgb3V0cHV0c0ZpbGU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgd2UgYXJlIG9uIGEgQ0kgc3lzdGVtXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBjaT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIERlcGxveSBtdWx0aXBsZSBzdGFja3MgaW4gcGFyYWxsZWxcbiAgICpcbiAgICogQGRlZmF1bHQgMVxuICAgKi9cbiAgcmVhZG9ubHkgY29uY3VycmVuY3k/OiBudW1iZXI7XG59XG4iXX0=
+
+/***/ }),
+
+/***/ 86090:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVzdHJveS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImRlc3Ryb3kudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERlZmF1bHRDZGtPcHRpb25zIH0gZnJvbSAnLi9jb21tb24nO1xuXG4vKipcbiAqIE9wdGlvbnMgdG8gdXNlIHdpdGggY2RrIGRlc3Ryb3lcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZXN0cm95T3B0aW9ucyBleHRlbmRzIERlZmF1bHRDZGtPcHRpb25zIHtcbiAgLyoqXG4gICAqIERvIG5vdCBhc2sgZm9yIHBlcm1pc3Npb24gYmVmb3JlIGRlc3Ryb3lpbmcgc3RhY2tzXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBmb3JjZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIE9ubHkgZGVzdHJveSB0aGUgZ2l2ZW4gc3RhY2tcbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGV4Y2x1c2l2ZWx5PzogYm9vbGVhbjtcbn1cbiJdfQ==
+
+/***/ }),
+
+/***/ 34667:
+/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
+
+"use strict";
+
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ var desc = Object.getOwnPropertyDescriptor(m, k);
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+ desc = { enumerable: true, get: function() { return m[k]; } };
+ }
+ Object.defineProperty(o, k2, desc);
+}) : (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ o[k2] = m[k];
+}));
+var __exportStar = (this && this.__exportStar) || function(m, exports) {
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
+};
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+__exportStar(__nccwpck_require__(85228), exports);
+__exportStar(__nccwpck_require__(77798), exports);
+__exportStar(__nccwpck_require__(86090), exports);
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsMkNBQXlCO0FBQ3pCLDJDQUF5QjtBQUN6Qiw0Q0FBMEIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2NvbW1vbic7XG5leHBvcnQgKiBmcm9tICcuL2RlcGxveSc7XG5leHBvcnQgKiBmcm9tICcuL2Rlc3Ryb3knO1xuIl19
+
+/***/ }),
+
+/***/ 3499:
+/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
+
+"use strict";
+
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ var desc = Object.getOwnPropertyDescriptor(m, k);
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+ desc = { enumerable: true, get: function() { return m[k]; } };
+ }
+ Object.defineProperty(o, k2, desc);
+}) : (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ o[k2] = m[k];
+}));
+var __exportStar = (this && this.__exportStar) || function(m, exports) {
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
+};
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+__exportStar(__nccwpck_require__(59927), exports);
+__exportStar(__nccwpck_require__(34667), exports);
+__exportStar(__nccwpck_require__(93992), exports);
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsMkNBQXlCO0FBQ3pCLDZDQUEyQjtBQUMzQiw4Q0FBNEIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL3NjaGVtYSc7XG5leHBvcnQgKiBmcm9tICcuL2NvbW1hbmRzJztcbmV4cG9ydCAqIGZyb20gJy4vdGVzdC1jYXNlJztcbiJdfQ==
+
+/***/ }),
+
+/***/ 59927:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsic2NoZW1hLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUZXN0Q2FzZSB9IGZyb20gJy4vdGVzdC1jYXNlJztcbi8qKlxuICogRGVmaW5pdGlvbnMgZm9yIHRoZSBpbnRlZ3JhdGlvbiB0ZXN0aW5nIG1hbmlmZXN0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW50ZWdNYW5pZmVzdCB7XG4gIC8qKlxuICAgKiBWZXJzaW9uIG9mIHRoZSBtYW5pZmVzdFxuICAgKi9cbiAgcmVhZG9ubHkgdmVyc2lvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBFbmFibGUgbG9va3VwcyBmb3IgdGhpcyB0ZXN0LiBJZiBsb29rdXBzIGFyZSBlbmFibGVkXG4gICAqIHRoZW4gYHN0YWNrVXBkYXRlV29ya2Zsb3dgIG11c3QgYmUgc2V0IHRvIGZhbHNlLlxuICAgKiBMb29rdXBzIHNob3VsZCBvbmx5IGJlIGVuYWJsZWQgd2hlbiB5b3UgYXJlIGV4cGxpY2l0ZWx5IHRlc3RpbmdcbiAgICogbG9va3Vwcy5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGVuYWJsZUxvb2t1cHM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIGNvbnRleHQgdG8gdXNlIHdoZW4gcGVyZm9ybWluZ1xuICAgKiBhIHN5bnRoLiBBbnkgY29udGV4dCBwcm92aWRlZCBoZXJlIHdpbGwgb3ZlcnJpZGVcbiAgICogYW55IGRlZmF1bHQgY29udGV4dFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIGFkZGl0aW9uYWwgY29udGV4dFxuICAgKi9cbiAgcmVhZG9ubHkgc3ludGhDb250ZXh0PzogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nIH07XG5cbiAgLyoqXG4gICAqIHRlc3QgY2FzZXNcbiAgICovXG4gIHJlYWRvbmx5IHRlc3RDYXNlczogeyBbdGVzdE5hbWU6IHN0cmluZ106IFRlc3RDYXNlIH07XG59XG5cbiJdfQ==
+
+/***/ }),
+
+/***/ 93992:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC1jYXNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsidGVzdC1jYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEZXBsb3lPcHRpb25zLCBEZXN0cm95T3B0aW9ucyB9IGZyb20gJy4vY29tbWFuZHMnO1xuXG4vKipcbiAqIFRoZSBzZXQgb2Ygb3B0aW9ucyB0byBjb250cm9sIHRoZSB3b3JrZmxvdyBvZiB0aGUgdGVzdCBydW5uZXJcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZXN0T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBSdW4gdXBkYXRlIHdvcmtmbG93IG9uIHRoaXMgdGVzdCBjYXNlXG4gICAqIFRoaXMgc2hvdWxkIG9ubHkgYmUgc2V0IHRvIGZhbHNlIHRvIHRlc3Qgc2NlbmFyaW9zXG4gICAqIHRoYXQgYXJlIG5vdCBwb3NzaWJsZSB0byB0ZXN0IGFzIHBhcnQgb2YgdGhlIHVwZGF0ZSB3b3JrZmxvd1xuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBzdGFja1VwZGF0ZVdvcmtmbG93PzogYm9vbGVhbjtcblxuICAvKipcbiAgICAqIEFkZGl0aW9uYWwgb3B0aW9ucyB0byB1c2UgZm9yIGVhY2ggQ0RLIGNvbW1hbmRcbiAgICAqXG4gICAgKiBAZGVmYXVsdCAtIHJ1bm5lciBkZWZhdWx0IG9wdGlvbnNcbiAgICAqL1xuICByZWFkb25seSBjZGtDb21tYW5kT3B0aW9ucz86IENka0NvbW1hbmRzO1xuXG4gIC8qKlxuICAgICogQWRkaXRpb25hbCBjb21tYW5kcyB0byBydW4gYXQgcHJlZGVmaW5lZCBwb2ludHMgaW4gdGhlIHRlc3Qgd29ya2Zsb3dcbiAgICAqXG4gICAgKiBlLmcuIHsgcG9zdERlcGxveTogWyd5YXJuJywgJ3Rlc3QnXSB9XG4gICAgKlxuICAgICogQGRlZmF1bHQgLSBubyBob29rc1xuICAgICovXG4gIHJlYWRvbmx5IGhvb2tzPzogSG9va3M7XG5cbiAgLyoqXG4gICAgKiBXaGV0aGVyIG9yIG5vdCB0byBpbmNsdWRlIGFzc2V0IGhhc2hlcyBpbiB0aGUgZGlmZlxuICAgICogQXNzZXQgaGFzaGVzIGNhbiBpbnRyb2R1Y2VzIGEgbG90IG9mIHVubmVjY2Vzc2FyeSBub2lzZSBpbnRvIHRlc3RzLFxuICAgICogYnV0IHRoZXJlIGFyZSBzb21lIGNhc2VzIHdoZXJlIGFzc2V0IGhhc2hlcyBfc2hvdWxkXyBiZSBpbmNsdWRlZC4gRm9yIGV4YW1wbGVcbiAgICAqIGFueSB0ZXN0cyBpbnZvbHZpbmcgY3VzdG9tIHJlc291cmNlcyBvciBidW5kbGluZ1xuICAgICpcbiAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgKi9cbiAgcmVhZG9ubHkgZGlmZkFzc2V0cz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAgKiBMaXN0IG9mIENsb3VkRm9ybWF0aW9uIHJlc291cmNlIHR5cGVzIGluIHRoaXMgc3RhY2sgdGhhdCBjYW5cbiAgICAqIGJlIGRlc3Ryb3llZCBhcyBwYXJ0IG9mIGFuIHVwZGF0ZSB3aXRob3V0IGZhaWxpbmcgdGhlIHRlc3QuXG4gICAgKlxuICAgICogVGhpcyBsaXN0IHNob3VsZCBvbmx5IGluY2x1ZGUgcmVzb3VyY2VzIHRoYXQgZm9yIHRoaXMgc3BlY2lmaWNcbiAgICAqIGludGVncmF0aW9uIHRlc3Qgd2UgYXJlIHN1cmUgd2lsbCBub3QgY2F1c2UgZXJyb3JzIG9yIGFuIG91dGFnZSBpZlxuICAgICogZGVzdHJveWVkLiBGb3IgZXhhbXBsZSwgbWF5YmUgd2Uga25vdyB0aGF0IGEgbmV3IHJlc291cmNlIHdpbGwgYmUgY3JlYXRlZFxuICAgICogZmlyc3QgYmVmb3JlIHRoZSBvbGQgcmVzb3VyY2UgaXMgZGVzdHJveWVkIHdoaWNoIHByZXZlbnRzIGFueSBvdXRhZ2UuXG4gICAgKlxuICAgICogZS5nLiBbJ0FXUzo6SUFNOjpSb2xlJ11cbiAgICAqXG4gICAgKiBAZGVmYXVsdCAtIGRvIG5vdCBhbGxvdyBkZXN0cnVjdGlvbiBvZiBhbnkgcmVzb3VyY2VzIG9uIHVwZGF0ZVxuICAgICovXG4gIHJlYWRvbmx5IGFsbG93RGVzdHJveT86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgICogTGltaXQgZGVwbG95bWVudCB0byB0aGVzZSByZWdpb25zXG4gICAgKlxuICAgICogQGRlZmF1bHQgLSBjYW4gcnVuIGluIGFueSByZWdpb25cbiAgICAqL1xuICByZWFkb25seSByZWdpb25zPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhbiBpbnRlZ3JhdGlvbiB0ZXN0IGNhc2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZXN0Q2FzZSBleHRlbmRzIFRlc3RPcHRpb25zIHtcbiAgLyoqXG4gICAqIFN0YWNrcyB0aGF0IHNob3VsZCBiZSB0ZXN0ZWQgYXMgcGFydCBvZiB0aGlzIHRlc3QgY2FzZVxuICAgKiBUaGUgc3RhY2tOYW1lcyB3aWxsIGJlIHBhc3NlZCBhcyBhcmdzIHRvIHRoZSBjZGsgY29tbWFuZHNcbiAgICogc28gZGVwZW5kZW50IHN0YWNrcyB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgZGVwbG95ZWQgdW5sZXNzXG4gICAqIGBleGNsdXNpdmVseWAgaXMgcGFzc2VkXG4gICAqL1xuICByZWFkb25seSBzdGFja3M6IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgbm9kZSBpZCBvZiB0aGUgc3RhY2sgdGhhdCBjb250YWlucyBhc3NlcnRpb25zLlxuICAgKiBUaGlzIGlzIHRoZSB2YWx1ZSB0aGF0IGNhbiBiZSB1c2VkIHRvIGRlcGxveSB0aGUgc3RhY2sgd2l0aCB0aGUgQ0RLIENMSVxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIGFzc2VydGlvbiBzdGFja1xuICAgKi9cbiAgcmVhZG9ubHkgYXNzZXJ0aW9uU3RhY2s/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBzdGFjayB0aGF0IGNvbnRhaW5zIGFzc2VydGlvbnNcbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBhc3NlcnRpb24gc3RhY2tcbiAgICovXG4gIHJlYWRvbmx5IGFzc2VydGlvblN0YWNrTmFtZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBDb21tYW5kcyB0byBydW4gYXQgcHJlZGVmaW5lZCBwb2ludHMgZHVyaW5nIHRoZVxuICogaW50ZWdyYXRpb24gdGVzdCB3b3JrZmxvd1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEhvb2tzIHtcbiAgLyoqXG4gICAqIENvbW1hbmRzIHRvIHJ1biBwcmlvciB0byBkZXBsb3lpbmcgdGhlIGNkayBzdGFja3NcbiAgICogaW4gdGhlIGludGVncmF0aW9uIHRlc3RcbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBjb21tYW5kc1xuICAgKi9cbiAgcmVhZG9ubHkgcHJlRGVwbG95Pzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIENvbW1hbmRzIHRvIHJ1biBwcmlvciBhZnRlciBkZXBsb3lpbmcgdGhlIGNkayBzdGFja3NcbiAgICogaW4gdGhlIGludGVncmF0aW9uIHRlc3RcbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBjb21tYW5kc1xuICAgKi9cbiAgcmVhZG9ubHkgcG9zdERlcGxveT86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBDb21tYW5kcyB0byBydW4gcHJpb3IgdG8gZGVzdHJveWluZyB0aGUgY2RrIHN0YWNrc1xuICAgKiBpbiB0aGUgaW50ZWdyYXRpb24gdGVzdFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIGNvbW1hbmRzXG4gICAqL1xuICByZWFkb25seSBwcmVEZXN0cm95Pzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIENvbW1hbmRzIHRvIHJ1biBhZnRlciBkZXN0cm95aW5nIHRoZSBjZGsgc3RhY2tzXG4gICAqIGluIHRoZSBpbnRlZ3JhdGlvbiB0ZXN0XG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gY29tbWFuZHNcbiAgICovXG4gIHJlYWRvbmx5IHBvc3REZXN0cm95Pzogc3RyaW5nW107XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIGNkayBjb21tYW5kXG4gKiBpLmUuIGBzeW50aGAsIGBkZXBsb3lgLCAmIGBkZXN0cm95YFxuICovXG5leHBvcnQgaW50ZXJmYWNlIENka0NvbW1hbmQge1xuICAvKipcbiAgICogV2hldGhlciBvciBub3QgdG8gcnVuIHRoaXMgY29tbWFuZCBhcyBwYXJ0IG9mIHRoZSB3b3JrZmxvd1xuICAgKiBUaGlzIGNhbiBiZSB1c2VkIGlmIHlvdSBvbmx5IHdhbnQgdG8gdGVzdCBzb21lIG9mIHRoZSB3b3JrZmxvd1xuICAgKiBmb3IgZXhhbXBsZSBlbmFibGUgYHN5bnRoYCBhbmQgZGlzYWJsZSBgZGVwbG95YCAmIGBkZXN0cm95YCBpbiBvcmRlclxuICAgKiB0byBsaW1pdCB0aGUgdGVzdCB0byBzeW50aGVzaXNcbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgZW5hYmxlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIElmIHRoZSBydW5uZXIgc2hvdWxkIGV4cGVjdCB0aGlzIGNvbW1hbmQgdG8gZmFpbFxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgZXhwZWN0RXJyb3I/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGlzIGNhbiBiZSB1c2VkIGluIGNvbWJpbmF0aW9uIHdpdGggYGV4cGVjdGVkRXJyb3JgXG4gICAqIHRvIHZhbGlkYXRlIHRoYXQgYSBzcGVjaWZpYyBtZXNzYWdlIGlzIHJldHVybmVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGRvIG5vdCB2YWxpZGF0ZSBtZXNzYWdlXG4gICAqL1xuICByZWFkb25seSBleHBlY3RlZE1lc3NhZ2U/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIGNkayBkZXBsb3kgY29tbWFuZFxuICovXG5leHBvcnQgaW50ZXJmYWNlIERlcGxveUNvbW1hbmQgZXh0ZW5kcyBDZGtDb21tYW5kIHtcbiAgLyoqXG4gICAqIEFkZGl0aW9uYWwgYXJndW1lbnRzIHRvIHBhc3MgdG8gdGhlIGNvbW1hbmRcbiAgICogVGhpcyBjYW4gYmUgdXNlZCB0byB0ZXN0IHNwZWNpZmljIENMSSBmdW5jdGlvbmFsaXR5XG4gICAqXG4gICAqIEBkZWZhdWx0IC0gb25seSBkZWZhdWx0IGFyZ3MgYXJlIHVzZWRcbiAgICovXG4gIHJlYWRvbmx5IGFyZ3M/OiBEZXBsb3lPcHRpb25zO1xufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBjZGsgZGVzdHJveSBjb21tYW5kXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVzdHJveUNvbW1hbmQgZXh0ZW5kcyBDZGtDb21tYW5kIHtcbiAgLyoqXG4gICAqIEFkZGl0aW9uYWwgYXJndW1lbnRzIHRvIHBhc3MgdG8gdGhlIGNvbW1hbmRcbiAgICogVGhpcyBjYW4gYmUgdXNlZCB0byB0ZXN0IHNwZWNpZmljIENMSSBmdW5jdGlvbmFsaXR5XG4gICAqXG4gICAqIEBkZWZhdWx0IC0gb25seSBkZWZhdWx0IGFyZ3MgYXJlIHVzZWRcbiAgICovXG4gIHJlYWRvbmx5IGFyZ3M/OiBEZXN0cm95T3B0aW9ucztcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBzcGVjaWZpYyBjZGsgY29tbWFuZHMgdGhhdCBhcmUgcnVuXG4gKiBhcyBwYXJ0IG9mIHRoZSBpbnRlZ3JhdGlvbiB0ZXN0IHdvcmtmbG93XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2RrQ29tbWFuZHMge1xuICAvKipcbiAgICogT3B0aW9ucyB0byBmb3IgdGhlIGNkayBkZXBsb3kgY29tbWFuZFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGRlZmF1bHQgZGVwbG95IG9wdGlvbnNcbiAgICovXG4gIHJlYWRvbmx5IGRlcGxveT86IERlcGxveUNvbW1hbmQ7XG5cbiAgLyoqXG4gICAqIE9wdGlvbnMgdG8gZm9yIHRoZSBjZGsgZGVzdHJveSBjb21tYW5kXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZGVmYXVsdCBkZXN0cm95IG9wdGlvbnNcbiAgICovXG4gIHJlYWRvbmx5IGRlc3Ryb3k/OiBEZXN0cm95Q29tbWFuZDtcbn1cbiJdfQ==
+
+/***/ }),
+
+/***/ 63303:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+var _a;
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.Manifest = exports.VERSION_MISMATCH = void 0;
+const jsiiDeprecationWarnings = __nccwpck_require__(34146);
+const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
+const fs = __nccwpck_require__(57147);
+const jsonschema = __nccwpck_require__(62811);
+const semver = __nccwpck_require__(3179);
+const assembly = __nccwpck_require__(34823);
+/* eslint-disable @typescript-eslint/no-var-requires */
+/* eslint-disable @typescript-eslint/no-require-imports */
+// this prefix is used by the CLI to identify this specific error.
+// in which case we want to instruct the user to upgrade his CLI.
+// see exec.ts#createAssembly
+exports.VERSION_MISMATCH = 'Cloud assembly schema version mismatch';
+const ASSETS_SCHEMA = __nccwpck_require__(44311);
+const ASSEMBLY_SCHEMA = __nccwpck_require__(63995);
+/**
+ * Version is shared for both manifests
+ */
+const SCHEMA_VERSION = (__nccwpck_require__(9036)/* .version */ .i);
+const INTEG_SCHEMA = __nccwpck_require__(10883);
+/**
+ * Protocol utility class.
+ */
+class Manifest {
+ /**
+ * Validates and saves the cloud assembly manifest to file.
+ *
+ * @param manifest - manifest.
+ * @param filePath - output file path.
+ */
+ static saveAssemblyManifest(manifest, filePath) {
+ try {
+ jsiiDeprecationWarnings._aws_cdk_cloud_assembly_schema_AssemblyManifest(manifest);
+ }
+ catch (error) {
+ if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
+ Error.captureStackTrace(error, this.saveAssemblyManifest);
+ }
+ throw error;
+ }
+ Manifest.saveManifest(manifest, filePath, ASSEMBLY_SCHEMA, Manifest.patchStackTagsOnWrite);
+ }
+ /**
+ * Load and validates the cloud assembly manifest from file.
+ *
+ * @param filePath - path to the manifest file.
+ */
+ static loadAssemblyManifest(filePath, options) {
+ try {
+ jsiiDeprecationWarnings._aws_cdk_cloud_assembly_schema_LoadManifestOptions(options);
+ }
+ catch (error) {
+ if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
+ Error.captureStackTrace(error, this.loadAssemblyManifest);
+ }
+ throw error;
+ }
+ return Manifest.loadManifest(filePath, ASSEMBLY_SCHEMA, Manifest.patchStackTagsOnRead, options);
+ }
+ /**
+ * Validates and saves the asset manifest to file.
+ *
+ * @param manifest - manifest.
+ * @param filePath - output file path.
+ */
+ static saveAssetManifest(manifest, filePath) {
+ try {
+ jsiiDeprecationWarnings._aws_cdk_cloud_assembly_schema_AssetManifest(manifest);
+ }
+ catch (error) {
+ if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
+ Error.captureStackTrace(error, this.saveAssetManifest);
+ }
+ throw error;
+ }
+ Manifest.saveManifest(manifest, filePath, ASSETS_SCHEMA, Manifest.patchStackTagsOnRead);
+ }
+ /**
+ * Load and validates the asset manifest from file.
+ *
+ * @param filePath - path to the manifest file.
+ */
+ static loadAssetManifest(filePath) {
+ return this.loadManifest(filePath, ASSETS_SCHEMA);
+ }
+ /**
+ * Validates and saves the integ manifest to file.
+ *
+ * @param manifest - manifest.
+ * @param filePath - output file path.
+ */
+ static saveIntegManifest(manifest, filePath) {
+ try {
+ jsiiDeprecationWarnings._aws_cdk_cloud_assembly_schema_IntegManifest(manifest);
+ }
+ catch (error) {
+ if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
+ Error.captureStackTrace(error, this.saveIntegManifest);
+ }
+ throw error;
+ }
+ Manifest.saveManifest(manifest, filePath, INTEG_SCHEMA);
+ }
+ /**
+ * Load and validates the integ manifest from file.
+ *
+ * @param filePath - path to the manifest file.
+ */
+ static loadIntegManifest(filePath) {
+ return this.loadManifest(filePath, INTEG_SCHEMA);
+ }
+ /**
+ * Fetch the current schema version number.
+ */
+ static version() {
+ return SCHEMA_VERSION;
+ }
+ /**
+ * Deprecated
+ * @deprecated use `saveAssemblyManifest()`
+ */
+ static save(manifest, filePath) { try {
+ jsiiDeprecationWarnings.print("@aws-cdk/cloud-assembly-schema.Manifest#save", "use `saveAssemblyManifest()`");
+ jsiiDeprecationWarnings._aws_cdk_cloud_assembly_schema_AssemblyManifest(manifest);
+ }
+ catch (error) {
+ if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
+ Error.captureStackTrace(error, this.save);
+ }
+ throw error;
+ } return this.saveAssemblyManifest(manifest, filePath); }
+ /**
+ * Deprecated
+ * @deprecated use `loadAssemblyManifest()`
+ */
+ static load(filePath) { try {
+ jsiiDeprecationWarnings.print("@aws-cdk/cloud-assembly-schema.Manifest#load", "use `loadAssemblyManifest()`");
+ }
+ catch (error) {
+ if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
+ Error.captureStackTrace(error, this.load);
+ }
+ throw error;
+ } return this.loadAssemblyManifest(filePath); }
+ static validate(manifest, schema, options) {
+ function parseVersion(version) {
+ const ver = semver.valid(version);
+ if (!ver) {
+ throw new Error(`Invalid semver string: "${version}"`);
+ }
+ return ver;
+ }
+ const maxSupported = parseVersion(Manifest.version());
+ const actual = parseVersion(manifest.version);
+ // first validate the version should be accepted.
+ if (semver.gt(actual, maxSupported) && !options?.skipVersionCheck) {
+ // we use a well known error prefix so that the CLI can identify this specific error
+ // and print some more context to the user.
+ throw new Error(`${exports.VERSION_MISMATCH}: Maximum schema version supported is ${maxSupported}, but found ${actual}`);
+ }
+ // now validate the format is good.
+ const validator = new jsonschema.Validator();
+ const result = validator.validate(manifest, schema, {
+ // does exist but is not in the TypeScript definitions
+ nestedErrors: true,
+ allowUnknownAttributes: false,
+ });
+ let errors = result.errors;
+ if (options?.skipEnumCheck) {
+ // Enum validations aren't useful when
+ errors = stripEnumErrors(errors);
+ }
+ if (errors.length > 0) {
+ throw new Error(`Invalid assembly manifest:\n${errors.map(e => e.stack).join('\n')}`);
+ }
+ }
+ static saveManifest(manifest, filePath, schema, preprocess) {
+ let withVersion = { ...manifest, version: Manifest.version() };
+ Manifest.validate(withVersion, schema);
+ if (preprocess) {
+ withVersion = preprocess(withVersion);
+ }
+ fs.writeFileSync(filePath, JSON.stringify(withVersion, undefined, 2));
+ }
+ static loadManifest(filePath, schema, preprocess, options) {
+ const contents = fs.readFileSync(filePath, { encoding: 'utf-8' });
+ let obj;
+ try {
+ obj = JSON.parse(contents);
+ }
+ catch (e) {
+ throw new Error(`${e.message}, while parsing ${JSON.stringify(contents)}`);
+ }
+ if (preprocess) {
+ obj = preprocess(obj);
+ }
+ Manifest.validate(obj, schema, options);
+ return obj;
+ }
+ /**
+ * This requires some explaining...
+ *
+ * We previously used `{ Key, Value }` for the object that represents a stack tag. (Notice the casing)
+ * @link https://github.com/aws/aws-cdk/blob/v1.27.0/packages/aws-cdk/lib/api/cxapp/stacks.ts#L427.
+ *
+ * When that object moved to this package, it had to be JSII compliant, which meant the property
+ * names must be `camelCased`, and not `PascalCased`. This meant it no longer matches the structure in the `manifest.json` file.
+ * In order to support current manifest files, we have to translate the `PascalCased` representation to the new `camelCased` one.
+ *
+ * Note that the serialization itself still writes `PascalCased` because it relates to how CloudFormation expects it.
+ *
+ * Ideally, we would start writing the `camelCased` and translate to how CloudFormation expects it when needed. But this requires nasty
+ * backwards-compatibility code and it just doesn't seem to be worth the effort.
+ */
+ static patchStackTagsOnRead(manifest) {
+ return Manifest.replaceStackTags(manifest, tags => tags.map((diskTag) => ({
+ key: diskTag.Key,
+ value: diskTag.Value,
+ })));
+ }
+ /**
+ * See explanation on `patchStackTagsOnRead`
+ *
+ * Translate stack tags metadata if it has the "right" casing.
+ */
+ static patchStackTagsOnWrite(manifest) {
+ return Manifest.replaceStackTags(manifest, tags => tags.map(memTag =>
+ // Might already be uppercased (because stack synthesis generates it in final form yet)
+ ('Key' in memTag ? memTag : { Key: memTag.key, Value: memTag.value })));
+ }
+ /**
+ * Recursively replace stack tags in the stack metadata
+ */
+ static replaceStackTags(manifest, fn) {
+ // Need to add in the `noUndefined`s because otherwise jest snapshot tests are going to freak out
+ // about the keys with values that are `undefined` (even though they would never be JSON.stringified)
+ return noUndefined({
+ ...manifest,
+ artifacts: mapValues(manifest.artifacts, artifact => {
+ if (artifact.type !== assembly.ArtifactType.AWS_CLOUDFORMATION_STACK) {
+ return artifact;
+ }
+ return noUndefined({
+ ...artifact,
+ metadata: mapValues(artifact.metadata, metadataEntries => metadataEntries.map(metadataEntry => {
+ if (metadataEntry.type !== assembly.ArtifactMetadataEntryType.STACK_TAGS || !metadataEntry.data) {
+ return metadataEntry;
+ }
+ return {
+ ...metadataEntry,
+ data: fn(metadataEntry.data),
+ };
+ })),
+ });
+ }),
+ });
+ }
+ constructor() { }
+}
+exports.Manifest = Manifest;
+_a = JSII_RTTI_SYMBOL_1;
+Manifest[_a] = { fqn: "@aws-cdk/cloud-assembly-schema.Manifest", version: "2.103.1" };
+function mapValues(xs, fn) {
+ if (!xs) {
+ return undefined;
+ }
+ const ret = {};
+ for (const [k, v] of Object.entries(xs)) {
+ ret[k] = fn(v);
+ }
+ return ret;
+}
+function noUndefined(xs) {
+ const ret = {};
+ for (const [k, v] of Object.entries(xs)) {
+ if (v !== undefined) {
+ ret[k] = v;
+ }
+ }
+ return ret;
+}
+function stripEnumErrors(errors) {
+ return errors.filter(e => typeof e.schema === 'string' || !('enum' in e.schema));
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFuaWZlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJtYW5pZmVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSx5QkFBeUI7QUFDekIseUNBQXlDO0FBQ3pDLGlDQUFpQztBQUVqQyw2Q0FBNkM7QUFHN0MsdURBQXVEO0FBQ3ZELDBEQUEwRDtBQUUxRCxrRUFBa0U7QUFDbEUsaUVBQWlFO0FBQ2pFLDZCQUE2QjtBQUNoQixRQUFBLGdCQUFnQixHQUFXLHdDQUF3QyxDQUFDO0FBRWpGLE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO0FBRTlELE1BQU0sZUFBZSxHQUFHLE9BQU8sQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO0FBRXhFOztHQUVHO0FBQ0gsTUFBTSxjQUFjLEdBQUcsT0FBTyxDQUFDLHVDQUF1QyxDQUFDLENBQUMsT0FBTyxDQUFDO0FBRWhGLE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO0FBc0M1RDs7R0FFRztBQUNILE1BQWEsUUFBUTtJQUNuQjs7Ozs7T0FLRztJQUNJLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxRQUFtQyxFQUFFLFFBQWdCOzs7Ozs7Ozs7O1FBQ3RGLFFBQVEsQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUUsUUFBUSxDQUFDLHFCQUFxQixDQUFDLENBQUM7S0FDNUY7SUFFRDs7OztPQUlHO0lBQ0ksTUFBTSxDQUFDLG9CQUFvQixDQUFDLFFBQWdCLEVBQUUsT0FBNkI7Ozs7Ozs7Ozs7UUFDaEYsT0FBTyxRQUFRLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxlQUFlLEVBQUUsUUFBUSxDQUFDLG9CQUFvQixFQUFFLE9BQU8sQ0FBQyxDQUFDO0tBQ2pHO0lBRUQ7Ozs7O09BS0c7SUFDSSxNQUFNLENBQUMsaUJBQWlCLENBQUMsUUFBOEIsRUFBRSxRQUFnQjs7Ozs7Ozs7OztRQUM5RSxRQUFRLENBQUMsWUFB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UyxlQUFlLENBQUMsTUFBb0M7SUFDM0QsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxLQUFJLFFBQVEsSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ2xGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBmcyBmcm9tICdmcyc7XG5pbXBvcnQgKiBhcyBqc29uc2NoZW1hIGZyb20gJ2pzb25zY2hlbWEnO1xuaW1wb3J0ICogYXMgc2VtdmVyIGZyb20gJ3NlbXZlcic7XG5pbXBvcnQgKiBhcyBhc3NldHMgZnJvbSAnLi9hc3NldHMnO1xuaW1wb3J0ICogYXMgYXNzZW1ibHkgZnJvbSAnLi9jbG91ZC1hc3NlbWJseSc7XG5pbXBvcnQgKiBhcyBpbnRlZyBmcm9tICcuL2ludGVnLXRlc3RzJztcblxuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXZhci1yZXF1aXJlcyAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlcXVpcmUtaW1wb3J0cyAqL1xuXG4vLyB0aGlzIHByZWZpeCBpcyB1c2VkIGJ5IHRoZSBDTEkgdG8gaWRlbnRpZnkgdGhpcyBzcGVjaWZpYyBlcnJvci5cbi8vIGluIHdoaWNoIGNhc2Ugd2Ugd2FudCB0byBpbnN0cnVjdCB0aGUgdXNlciB0byB1cGdyYWRlIGhpcyBDTEkuXG4vLyBzZWUgZXhlYy50cyNjcmVhdGVBc3NlbWJseVxuZXhwb3J0IGNvbnN0IFZFUlNJT05fTUlTTUFUQ0g6IHN0cmluZyA9ICdDbG91ZCBhc3NlbWJseSBzY2hlbWEgdmVyc2lvbiBtaXNtYXRjaCc7XG5cbmNvbnN0IEFTU0VUU19TQ0hFTUEgPSByZXF1aXJlKCcuLi9zY2hlbWEvYXNzZXRzLnNjaGVtYS5qc29uJyk7XG5cbmNvbnN0IEFTU0VNQkxZX1NDSEVNQSA9IHJlcXVpcmUoJy4uL3NjaGVtYS9jbG91ZC1hc3NlbWJseS5zY2hlbWEuanNvbicpO1xuXG4vKipcbiAqIFZlcnNpb24gaXMgc2hhcmVkIGZvciBib3RoIG1hbmlmZXN0c1xuICovXG5jb25zdCBTQ0hFTUFfVkVSU0lPTiA9IHJlcXVpcmUoJy4uL3NjaGVtYS9jbG91ZC1hc3NlbWJseS52ZXJzaW9uLmpzb24nKS52ZXJzaW9uO1xuXG5jb25zdCBJTlRFR19TQ0hFTUEgPSByZXF1aXJlKCcuLi9zY2hlbWEvaW50ZWcuc2NoZW1hLmpzb24nKTtcblxuLyoqXG4gKiBPcHRpb25zIGZvciB0aGUgbG9hZE1hbmlmZXN0IG9wZXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIExvYWRNYW5pZmVzdE9wdGlvbnMge1xuICAvKipcbiAgICogU2tpcCB0aGUgdmVyc2lvbiBjaGVja1xuICAgKlxuICAgKiBUaGlzIG1lYW5zIHlvdSBtYXkgcmVhZCBhIG5ld2VyIGNsb3VkIGFzc2VtYmx5IHRoYW4gdGhlIENYIEFQSSBpcyBkZXNpZ25lZFxuICAgKiB0byBzdXBwb3J0LCBhbmQgeW91ciBhcHBsaWNhdGlvbiBtYXkgbm90IGJlIGF3YXJlIG9mIGFsbCBmZWF0dXJlcyB0aGF0IGluIHVzZVxuICAgKiBpbiB0aGUgQ2xvdWQgQXNzZW1ibHkuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBza2lwVmVyc2lvbkNoZWNrPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogU2tpcCBlbnVtIGNoZWNrc1xuICAgKlxuICAgKiBUaGlzIG1lYW5zIHlvdSBtYXkgcmVhZCBlbnVtIHZhbHVlcyB5b3UgZG9uJ3Qga25vdyBhYm91dCB5ZXQuIE1ha2Ugc3VyZSB0byBhbHdheXNcbiAgICogY2hlY2sgdGhlIHZhbHVlcyBvZiBlbnVtcyB5b3UgZW5jb3VudGVyIGluIHRoZSBtYW5pZmVzdC5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHNraXBFbnVtQ2hlY2s/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUb3BvbG9naWNhbGx5IHNvcnQgYWxsIGFydGlmYWN0c1xuICAgKlxuICAgKiBUaGlzIHBhcmFtZXRlciBpcyBvbmx5IHJlc3BlY3RlZCBieSB0aGUgY29uc3RydWN0b3Igb2YgYENsb3VkQXNzZW1ibHlgLiBUaGVcbiAgICogcHJvcGVydHkgbGl2ZXMgaGVyZSBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgcmVhc29ucy5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgdG9wb1NvcnQ/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFByb3RvY29sIHV0aWxpdHkgY2xhc3MuXG4gKi9cbmV4cG9ydCBjbGFzcyBNYW5pZmVzdCB7XG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgYW5kIHNhdmVzIHRoZSBjbG91ZCBhc3NlbWJseSBtYW5pZmVzdCB0byBmaWxlLlxuICAgKlxuICAgKiBAcGFyYW0gbWFuaWZlc3QgLSBtYW5pZmVzdC5cbiAgICogQHBhcmFtIGZpbGVQYXRoIC0gb3V0cHV0IGZpbGUgcGF0aC5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgc2F2ZUFzc2VtYmx5TWFuaWZlc3QobWFuaWZlc3Q6IGFzc2VtYmx5LkFzc2VtYmx5TWFuaWZlc3QsIGZpbGVQYXRoOiBzdHJpbmcpIHtcbiAgICBNYW5pZmVzdC5zYXZlTWFuaWZlc3QobWFuaWZlc3QsIGZpbGVQYXRoLCBBU1NFTUJMWV9TQ0hFTUEsIE1hbmlmZXN0LnBhdGNoU3RhY2tUYWdzT25Xcml0ZSk7XG4gIH1cblxuICAvKipcbiAgICogTG9hZCBhbmQgdmFsaWRhdGVzIHRoZSBjbG91ZCBhc3NlbWJseSBtYW5pZmVzdCBmcm9tIGZpbGUuXG4gICAqXG4gICAqIEBwYXJhbSBmaWxlUGF0aCAtIHBhdGggdG8gdGhlIG1hbmlmZXN0IGZpbGUuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGxvYWRBc3NlbWJseU1hbmlmZXN0KGZpbGVQYXRoOiBzdHJpbmcsIG9wdGlvbnM/OiBMb2FkTWFuaWZlc3RPcHRpb25zKTogYXNzZW1ibHkuQXNzZW1ibHlNYW5pZmVzdCB7XG4gICAgcmV0dXJuIE1hbmlmZXN0LmxvYWRNYW5pZmVzdChmaWxlUGF0aCwgQVNTRU1CTFlfU0NIRU1BLCBNYW5pZmVzdC5wYXRjaFN0YWNrVGFnc09uUmVhZCwgb3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIGFuZCBzYXZlcyB0aGUgYXNzZXQgbWFuaWZlc3QgdG8gZmlsZS5cbiAgICpcbiAgICogQHBhcmFtIG1hbmlmZXN0IC0gbWFuaWZlc3QuXG4gICAqIEBwYXJhbSBmaWxlUGF0aCAtIG91dHB1dCBmaWxlIHBhdGguXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHNhdmVBc3NldE1hbmlmZXN0KG1hbmlmZXN0OiBhc3NldHMuQXNzZXRNYW5pZmVzdCwgZmlsZVBhdGg6IHN0cmluZykge1xuICAgIE1hbmlmZXN0LnNhdmVNYW5pZmVzdChtYW5pZmVzdCwgZmlsZVBhdGgsIEFTU0VUU19TQ0hFTUEsIE1hbmlmZXN0LnBhdGNoU3RhY2tUYWdzT25SZWFkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkIGFuZCB2YWxpZGF0ZXMgdGhlIGFzc2V0IG1hbmlmZXN0IGZyb20gZmlsZS5cbiAgICpcbiAgICogQHBhcmFtIGZpbGVQYXRoIC0gcGF0aCB0byB0aGUgbWFuaWZlc3QgZmlsZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbG9hZEFzc2V0TWFuaWZlc3QoZmlsZVBhdGg6IHN0cmluZyk6IGFzc2V0cy5Bc3NldE1hbmlmZXN0IHtcbiAgICByZXR1cm4gdGhpcy5sb2FkTWFuaWZlc3QoZmlsZVBhdGgsIEFTU0VUU19TQ0hFTUEpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyBhbmQgc2F2ZXMgdGhlIGludGVnIG1hbmlmZXN0IHRvIGZpbGUuXG4gICAqXG4gICAqIEBwYXJhbSBtYW5pZmVzdCAtIG1hbmlmZXN0LlxuICAgKiBAcGFyYW0gZmlsZVBhdGggLSBvdXRwdXQgZmlsZSBwYXRoLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBzYXZlSW50ZWdNYW5pZmVzdChtYW5pZmVzdDogaW50ZWcuSW50ZWdNYW5pZmVzdCwgZmlsZVBhdGg6IHN0cmluZykge1xuICAgIE1hbmlmZXN0LnNhdmVNYW5pZmVzdChtYW5pZmVzdCwgZmlsZVBhdGgsIElOVEVHX1NDSEVNQSk7XG4gIH1cblxuICAvKipcbiAgICogTG9hZCBhbmQgdmFsaWRhdGVzIHRoZSBpbnRlZyBtYW5pZmVzdCBmcm9tIGZpbGUuXG4gICAqXG4gICAqIEBwYXJhbSBmaWxlUGF0aCAtIHBhdGggdG8gdGhlIG1hbmlmZXN0IGZpbGUuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGxvYWRJbnRlZ01hbmlmZXN0KGZpbGVQYXRoOiBzdHJpbmcpOiBpbnRlZy5JbnRlZ01hbmlmZXN0IHtcbiAgICByZXR1cm4gdGhpcy5sb2FkTWFuaWZlc3QoZmlsZVBhdGgsIElOVEVHX1NDSEVNQSk7XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2ggdGhlIGN1cnJlbnQgc2NoZW1hIHZlcnNpb24gbnVtYmVyLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyB2ZXJzaW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFNDSEVNQV9WRVJTSU9OO1xuICB9XG5cbiAgLyoqXG4gICAqIERlcHJlY2F0ZWRcbiAgICogQGRlcHJlY2F0ZWQgdXNlIGBzYXZlQXNzZW1ibHlNYW5pZmVzdCgpYFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBzYXZlKG1hbmlmZXN0OiBhc3NlbWJseS5Bc3NlbWJseU1hbmlmZXN0LCBmaWxlUGF0aDogc3RyaW5nKSB7IHJldHVybiB0aGlzLnNhdmVBc3NlbWJseU1hbmlmZXN0KG1hbmlmZXN0LCBmaWxlUGF0aCk7IH1cblxuICAvKipcbiAgICogRGVwcmVjYXRlZFxuICAgKiBAZGVwcmVjYXRlZCB1c2UgYGxvYWRBc3NlbWJseU1hbmlmZXN0KClgXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGxvYWQoZmlsZVBhdGg6IHN0cmluZyk6IGFzc2VtYmx5LkFzc2VtYmx5TWFuaWZlc3QgeyByZXR1cm4gdGhpcy5sb2FkQXNzZW1ibHlNYW5pZmVzdChmaWxlUGF0aCk7IH1cblxuICBwcml2YXRlIHN0YXRpYyB2YWxpZGF0ZShtYW5pZmVzdDogeyB2ZXJzaW9uOiBzdHJpbmcgfSwgc2NoZW1hOiBqc29uc2NoZW1hLlNjaGVtYSwgb3B0aW9ucz86IExvYWRNYW5pZmVzdE9wdGlvbnMpIHtcbiAgICBmdW5jdGlvbiBwYXJzZVZlcnNpb24odmVyc2lvbjogc3RyaW5nKSB7XG4gICAgICBjb25zdCB2ZXIgPSBzZW12ZXIudmFsaWQodmVyc2lvbik7XG4gICAgICBpZiAoIXZlcikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgc2VtdmVyIHN0cmluZzogXCIke3ZlcnNpb259XCJgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB2ZXI7XG4gICAgfVxuXG4gICAgY29uc3QgbWF4U3VwcG9ydGVkID0gcGFyc2VWZXJzaW9uKE1hbmlmZXN0LnZlcnNpb24oKSk7XG4gICAgY29uc3QgYWN0dWFsID0gcGFyc2VWZXJzaW9uKG1hbmlmZXN0LnZlcnNpb24pO1xuXG4gICAgLy8gZmlyc3QgdmFsaWRhdGUgdGhlIHZlcnNpb24gc2hvdWxkIGJlIGFjY2VwdGVkLlxuICAgIGlmIChzZW12ZXIuZ3QoYWN0dWFsLCBtYXhTdXBwb3J0ZWQpICYmICFvcHRpb25zPy5za2lwVmVyc2lvbkNoZWNrKSB7XG4gICAgICAvLyB3ZSB1c2UgYSB3ZWxsIGtub3duIGVycm9yIHByZWZpeCBzbyB0aGF0IHRoZSBDTEkgY2FuIGlkZW50aWZ5IHRoaXMgc3BlY2lmaWMgZXJyb3JcbiAgICAgIC8vIGFuZCBwcmludCBzb21lIG1vcmUgY29udGV4dCB0byB0aGUgdXNlci5cbiAgICAgIHRocm93IG5ldyBFcnJvcihgJHtWRVJTSU9OX01JU01BVENIfTogTWF4aW11bSBzY2hlbWEgdmVyc2lvbiBzdXBwb3J0ZWQgaXMgJHttYXhTdXBwb3J0ZWR9LCBidXQgZm91bmQgJHthY3R1YWx9YCk7XG4gICAgfVxuXG4gICAgLy8gbm93IHZhbGlkYXRlIHRoZSBmb3JtYXQgaXMgZ29vZC5cbiAgICBjb25zdCB2YWxpZGF0b3IgPSBuZXcganNvbnNjaGVtYS5WYWxpZGF0b3IoKTtcbiAgICBjb25zdCByZXN1bHQgPSB2YWxpZGF0b3IudmFsaWRhdGUobWFuaWZlc3QsIHNjaGVtYSwge1xuXG4gICAgICAvLyBkb2VzIGV4aXN0IGJ1dCBpcyBub3QgaW4gdGhlIFR5cGVTY3JpcHQgZGVmaW5pdGlvbnNcbiAgICAgIG5lc3RlZEVycm9yczogdHJ1ZSxcblxuICAgICAgYWxsb3dVbmtub3duQXR0cmlidXRlczogZmFsc2UsXG5cbiAgICB9IGFzIGFueSk7XG5cbiAgICBsZXQgZXJyb3JzID0gcmVzdWx0LmVycm9ycztcbiAgICBpZiAob3B0aW9ucz8uc2tpcEVudW1DaGVjaykge1xuICAgICAgLy8gRW51bSB2YWxpZGF0aW9ucyBhcmVuJ3QgdXNlZnVsIHdoZW5cbiAgICAgIGVycm9ycyA9IHN0cmlwRW51bUVycm9ycyhlcnJvcnMpO1xuICAgIH1cblxuICAgIGlmIChlcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGFzc2VtYmx5IG1hbmlmZXN0OlxcbiR7ZXJyb3JzLm1hcChlID0+IGUuc3RhY2spLmpvaW4oJ1xcbicpfWApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIHNhdmVNYW5pZmVzdChtYW5pZmVzdDogYW55LCBmaWxlUGF0aDogc3RyaW5nLCBzY2hlbWE6IGpzb25zY2hlbWEuU2NoZW1hLCBwcmVwcm9jZXNzPzogKG9iajogYW55KSA9PiBhbnkpIHtcbiAgICBsZXQgd2l0aFZlcnNpb24gPSB7IC4uLm1hbmlmZXN0LCB2ZXJzaW9uOiBNYW5pZmVzdC52ZXJzaW9uKCkgfTtcbiAgICBNYW5pZmVzdC52YWxpZGF0ZSh3aXRoVmVyc2lvbiwgc2NoZW1hKTtcbiAgICBpZiAocHJlcHJvY2Vzcykge1xuICAgICAgd2l0aFZlcnNpb24gPSBwcmVwcm9jZXNzKHdpdGhWZXJzaW9uKTtcbiAgICB9XG4gICAgZnMud3JpdGVGaWxlU3luYyhmaWxlUGF0aCwgSlNPTi5zdHJpbmdpZnkod2l0aFZlcnNpb24sIHVuZGVmaW5lZCwgMikpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgbG9hZE1hbmlmZXN0KGZpbGVQYXRoOiBzdHJpbmcsIHNjaGVtYToganNvbnNjaGVtYS5TY2hlbWEsIHByZXByb2Nlc3M/OiAob2JqOiBhbnkpID0+IGFueSwgb3B0aW9ucz86IExvYWRNYW5pZmVzdE9wdGlvbnMpIHtcbiAgICBjb25zdCBjb250ZW50cyA9IGZzLnJlYWRGaWxlU3luYyhmaWxlUGF0aCwgeyBlbmNvZGluZzogJ3V0Zi04JyB9KTtcbiAgICBsZXQgb2JqO1xuICAgIHRyeSB7XG4gICAgICBvYmogPSBKU09OLnBhcnNlKGNvbnRlbnRzKTtcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJHtlLm1lc3NhZ2V9LCB3aGlsZSBwYXJzaW5nICR7SlNPTi5zdHJpbmdpZnkoY29udGVudHMpfWApO1xuICAgIH1cbiAgICBpZiAocHJlcHJvY2Vzcykge1xuICAgICAgb2JqID0gcHJlcHJvY2VzcyhvYmopO1xuICAgIH1cbiAgICBNYW5pZmVzdC52YWxpZGF0ZShvYmosIHNjaGVtYSwgb3B0aW9ucyk7XG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIHJlcXVpcmVzIHNvbWUgZXhwbGFpbmluZy4uLlxuICAgKlxuICAgKiBXZSBwcmV2aW91c2x5IHVzZWQgYHsgS2V5LCBWYWx1ZSB9YCBmb3IgdGhlIG9iamVjdCB0aGF0IHJlcHJlc2VudHMgYSBzdGFjayB0YWcuIChOb3RpY2UgdGhlIGNhc2luZylcbiAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2Jsb2IvdjEuMjcuMC9wYWNrYWdlcy9hd3MtY2RrL2xpYi9hcGkvY3hhcHAvc3RhY2tzLnRzI0w0MjcuXG4gICAqXG4gICAqIFdoZW4gdGhhdCBvYmplY3QgbW92ZWQgdG8gdGhpcyBwYWNrYWdlLCBpdCBoYWQgdG8gYmUgSlNJSSBjb21wbGlhbnQsIHdoaWNoIG1lYW50IHRoZSBwcm9wZXJ0eVxuICAgKiBuYW1lcyBtdXN0IGJlIGBjYW1lbENhc2VkYCwgYW5kIG5vdCBgUGFzY2FsQ2FzZWRgLiBUaGlzIG1lYW50IGl0IG5vIGxvbmdlciBtYXRjaGVzIHRoZSBzdHJ1Y3R1cmUgaW4gdGhlIGBtYW5pZmVzdC5qc29uYCBmaWxlLlxuICAgKiBJbiBvcmRlciB0byBzdXBwb3J0IGN1cnJlbnQgbWFuaWZlc3QgZmlsZXMsIHdlIGhhdmUgdG8gdHJhbnNsYXRlIHRoZSBgUGFzY2FsQ2FzZWRgIHJlcHJlc2VudGF0aW9uIHRvIHRoZSBuZXcgYGNhbWVsQ2FzZWRgIG9uZS5cbiAgICpcbiAgICogTm90ZSB0aGF0IHRoZSBzZXJpYWxpemF0aW9uIGl0c2VsZiBzdGlsbCB3cml0ZXMgYFBhc2NhbENhc2VkYCBiZWNhdXNlIGl0IHJlbGF0ZXMgdG8gaG93IENsb3VkRm9ybWF0aW9uIGV4cGVjdHMgaXQuXG4gICAqXG4gICAqIElkZWFsbHksIHdlIHdvdWxkIHN0YXJ0IHdyaXRpbmcgdGhlIGBjYW1lbENhc2VkYCBhbmQgdHJhbnNsYXRlIHRvIGhvdyBDbG91ZEZvcm1hdGlvbiBleHBlY3RzIGl0IHdoZW4gbmVlZGVkLiBCdXQgdGhpcyByZXF1aXJlcyBuYXN0eVxuICAgKiBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBjb2RlIGFuZCBpdCBqdXN0IGRvZXNuJ3Qgc2VlbSB0byBiZSB3b3J0aCB0aGUgZWZmb3J0LlxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgcGF0Y2hTdGFja1RhZ3NPblJlYWQobWFuaWZlc3Q6IGFzc2VtYmx5LkFzc2VtYmx5TWFuaWZlc3QpIHtcbiAgICByZXR1cm4gTWFuaWZlc3QucmVwbGFjZVN0YWNrVGFncyhtYW5pZmVzdCwgdGFncyA9PiB0YWdzLm1hcCgoZGlza1RhZzogYW55KSA9PiAoe1xuICAgICAga2V5OiBkaXNrVGFnLktleSxcbiAgICAgIHZhbHVlOiBkaXNrVGFnLlZhbHVlLFxuICAgIH0pKSk7XG4gIH1cblxuICAvKipcbiAgICogU2VlIGV4cGxhbmF0aW9uIG9uIGBwYXRjaFN0YWNrVGFnc09uUmVhZGBcbiAgICpcbiAgICogVHJhbnNsYXRlIHN0YWNrIHRhZ3MgbWV0YWRhdGEgaWYgaXQgaGFzIHRoZSBcInJpZ2h0XCIgY2FzaW5nLlxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgcGF0Y2hTdGFja1RhZ3NPbldyaXRlKG1hbmlmZXN0OiBhc3NlbWJseS5Bc3NlbWJseU1hbmlmZXN0KSB7XG4gICAgcmV0dXJuIE1hbmlmZXN0LnJlcGxhY2VTdGFja1RhZ3MobWFuaWZlc3QsIHRhZ3MgPT4gdGFncy5tYXAobWVtVGFnID0+XG4gICAgICAvLyBNaWdodCBhbHJlYWR5IGJlIHVwcGVyY2FzZWQgKGJlY2F1c2Ugc3RhY2sgc3ludGhlc2lzIGdlbmVyYXRlcyBpdCBpbiBmaW5hbCBmb3JtIHlldClcbiAgICAgICgnS2V5JyBpbiBtZW1UYWcgPyBtZW1UYWcgOiB7IEtleTogbWVtVGFnLmtleSwgVmFsdWU6IG1lbVRhZy52YWx1ZSB9KSBhcyBhbnksXG4gICAgKSk7XG4gIH1cblxuICAvKipcbiAgICogUmVjdXJzaXZlbHkgcmVwbGFjZSBzdGFjayB0YWdzIGluIHRoZSBzdGFjayBtZXRhZGF0YVxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgcmVwbGFjZVN0YWNrVGFncyhtYW5pZmVzdDogYXNzZW1ibHkuQXNzZW1ibHlNYW5pZmVzdCwgZm46IEVuZG9mdW5jdG9yPGFzc2VtYmx5LlN0YWNrVGFnc01ldGFkYXRhRW50cnk+KTogYXNzZW1ibHkuQXNzZW1ibHlNYW5pZmVzdCB7XG4gICAgLy8gTmVlZCB0byBhZGQgaW4gdGhlIGBub1VuZGVmaW5lZGBzIGJlY2F1c2Ugb3RoZXJ3aXNlIGplc3Qgc25hcHNob3QgdGVzdHMgYXJlIGdvaW5nIHRvIGZyZWFrIG91dFxuICAgIC8vIGFib3V0IHRoZSBrZXlzIHdpdGggdmFsdWVzIHRoYXQgYXJlIGB1bmRlZmluZWRgIChldmVuIHRob3VnaCB0aGV5IHdvdWxkIG5ldmVyIGJlIEpTT04uc3RyaW5naWZpZWQpXG4gICAgcmV0dXJuIG5vVW5kZWZpbmVkKHtcbiAgICAgIC4uLm1hbmlmZXN0LFxuICAgICAgYXJ0aWZhY3RzOiBtYXBWYWx1ZXMobWFuaWZlc3QuYXJ0aWZhY3RzLCBhcnRpZmFjdCA9PiB7XG4gICAgICAgIGlmIChhcnRpZmFjdC50eXBlICE9PSBhc3NlbWJseS5BcnRpZmFjdFR5cGUuQVdTX0NMT1VERk9STUFUSU9OX1NUQUNLKSB7IHJldHVybiBhcnRpZmFjdDsgfVxuICAgICAgICByZXR1cm4gbm9VbmRlZmluZWQoe1xuICAgICAgICAgIC4uLmFydGlmYWN0LFxuICAgICAgICAgIG1ldGFkYXRhOiBtYXBWYWx1ZXMoYXJ0aWZhY3QubWV0YWRhdGEsIG1ldGFkYXRhRW50cmllcyA9PiBtZXRhZGF0YUVudHJpZXMubWFwKG1ldGFkYXRhRW50cnkgPT4ge1xuICAgICAgICAgICAgaWYgKG1ldGFkYXRhRW50cnkudHlwZSAhPT0gYXNzZW1ibHkuQXJ0aWZhY3RNZXRhZGF0YUVudHJ5VHlwZS5TVEFDS19UQUdTIHx8ICFtZXRhZGF0YUVudHJ5LmRhdGEpIHsgcmV0dXJuIG1ldGFkYXRhRW50cnk7IH1cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIC4uLm1ldGFkYXRhRW50cnksXG4gICAgICAgICAgICAgIGRhdGE6IGZuKG1ldGFkYXRhRW50cnkuZGF0YSBhcyBhc3NlbWJseS5TdGFja1RhZ3NNZXRhZGF0YUVudHJ5KSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSkpLFxuICAgICAgICB9IGFzIGFzc2VtYmx5LkFydGlmYWN0TWFuaWZlc3QpO1xuICAgICAgfSksXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge31cbn1cblxudHlwZSBFbmRvZnVuY3RvcjxBPiA9ICh4OiBBKSA9PiBBO1xuXG5mdW5jdGlvbiBtYXBWYWx1ZXM8QSwgQj4oeHM6IFJlY29yZDxzdHJpbmcsIEE+IHwgdW5kZWZpbmVkLCBmbjogKHg6IEEpID0+IEIpOiBSZWNvcmQ8c3RyaW5nLCBCPiB8IHVuZGVmaW5lZCB7XG4gIGlmICgheHMpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXQ6IFJlY29yZDxzdHJpbmcsIEI+IHwgdW5kZWZpbmVkID0ge307XG4gIGZvciAoY29uc3QgW2ssIHZdIG9mIE9iamVjdC5lbnRyaWVzKHhzKSkge1xuICAgIHJldFtrXSA9IGZuKHYpO1xuICB9XG4gIHJldHVybiByZXQ7XG59XG5cbmZ1bmN0aW9uIG5vVW5kZWZpbmVkPEEgZXh0ZW5kcyBvYmplY3Q+KHhzOiBBKTogQSB7XG4gIGNvbnN0IHJldDogYW55ID0ge307XG4gIGZvciAoY29uc3QgW2ssIHZdIG9mIE9iamVjdC5lbnRyaWVzKHhzKSkge1xuICAgIGlmICh2ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldFtrXSA9IHY7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXQ7XG59XG5cbmZ1bmN0aW9uIHN0cmlwRW51bUVycm9ycyhlcnJvcnM6IGpzb25zY2hlbWEuVmFsaWRhdGlvbkVycm9yW10pIHtcbiAgcmV0dXJuIGVycm9ycy5maWx0ZXIoZSA9PiB0eXBlb2YgZS5zY2hlbWEgPT09J3N0cmluZycgfHwgISgnZW51bScgaW4gZS5zY2hlbWEpKTtcbn1cbiJdfQ==
+
+/***/ }),
+
+/***/ 21415:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+"use strict";
+
+
+var helpers = __nccwpck_require__(52417);
+
+/** @type ValidatorResult */
+var ValidatorResult = helpers.ValidatorResult;
+/** @type SchemaError */
+var SchemaError = helpers.SchemaError;
+
+var attribute = {};
+
+attribute.ignoreProperties = {
+ // informative properties
+ 'id': true,
+ 'default': true,
+ 'description': true,
+ 'title': true,
+ // arguments to other properties
+ 'additionalItems': true,
+ 'then': true,
+ 'else': true,
+ // special-handled properties
+ '$schema': true,
+ '$ref': true,
+ 'extends': true,
+};
+
+/**
+ * @name validators
+ */
+var validators = attribute.validators = {};
+
+/**
+ * Validates whether the instance if of a certain type
+ * @param instance
+ * @param schema
+ * @param options
+ * @param ctx
+ * @return {ValidatorResult|null}
+ */
+validators.type = function validateType (instance, schema, options, ctx) {
+ // Ignore undefined instances
+ if (instance === undefined) {
+ return null;
+ }
+ var result = new ValidatorResult(instance, schema, options, ctx);
+ var types = Array.isArray(schema.type) ? schema.type : [schema.type];
+ if (!types.some(this.testType.bind(this, instance, schema, options, ctx))) {
+ var list = types.map(function (v) {
+ if(!v) return;
+ var id = v.$id || v.id;
+ return id ? ('<' + id + '>') : (v+'');
+ });
+ result.addError({
+ name: 'type',
+ argument: list,
+ message: "is not of a type(s) " + list,
+ });
+ }
+ return result;
+};
+
+function testSchemaNoThrow(instance, options, ctx, callback, schema){
+ var throwError = options.throwError;
+ var throwAll = options.throwAll;
+ options.throwError = false;
+ options.throwAll = false;
+ var res = this.validateSchema(instance, schema, options, ctx);
+ options.throwError = throwError;
+ options.throwAll = throwAll;
+
+ if (!res.valid && callback instanceof Function) {
+ callback(res);
+ }
+ return res.valid;
+}
+
+/**
+ * Validates whether the instance matches some of the given schemas
+ * @param instance
+ * @param schema
+ * @param options
+ * @param ctx
+ * @return {ValidatorResult|null}
+ */
+validators.anyOf = function validateAnyOf (instance, schema, options, ctx) {
+ // Ignore undefined instances
+ if (instance === undefined) {
+ return null;
+ }
+ var result = new ValidatorResult(instance, schema, options, ctx);
+ var inner = new ValidatorResult(instance, schema, options, ctx);
+ if (!Array.isArray(schema.anyOf)){
+ throw new SchemaError("anyOf must be an array");
+ }
+ if (!schema.anyOf.some(
+ testSchemaNoThrow.bind(
+ this, instance, options, ctx, function(res){inner.importErrors(res);}
+ ))) {
+ var list = schema.anyOf.map(function (v, i) {
+ var id = v.$id || v.id;
+ if(id) return '<' + id + '>';
+ return(v.title && JSON.stringify(v.title)) || (v['$ref'] && ('<' + v['$ref'] + '>')) || '[subschema '+i+']';
+ });
+ if (options.nestedErrors) {
+ result.importErrors(inner);
+ }
+ result.addError({
+ name: 'anyOf',
+ argument: list,
+ message: "is not any of " + list.join(','),
+ });
+ }
+ return result;
+};
+
+/**
+ * Validates whether the instance matches every given schema
+ * @param instance
+ * @param schema
+ * @param options
+ * @param ctx
+ * @return {String|null}
+ */
+validators.allOf = function validateAllOf (instance, schema, options, ctx) {
+ // Ignore undefined instances
+ if (instance === undefined) {
+ return null;
+ }
+ if (!Array.isArray(schema.allOf)){
+ throw new SchemaError("allOf must be an array");
+ }
+ var result = new ValidatorResult(instance, schema, options, ctx);
+ var self = this;
+ schema.allOf.forEach(function(v, i){
+ var valid = self.validateSchema(instance, v, options, ctx);
+ if(!valid.valid){
+ var id = v.$id || v.id;
+ var msg = id || (v.title && JSON.stringify(v.title)) || (v['$ref'] && ('<' + v['$ref'] + '>')) || '[subschema '+i+']';
+ result.addError({
+ name: 'allOf',
+ argument: { id: msg, length: valid.errors.length, valid: valid },
+ message: 'does not match allOf schema ' + msg + ' with ' + valid.errors.length + ' error[s]:',
+ });
+ result.importErrors(valid);
+ }
+ });
+ return result;
+};
+
+/**
+ * Validates whether the instance matches exactly one of the given schemas
+ * @param instance
+ * @param schema
+ * @param options
+ * @param ctx
+ * @return {String|null}
+ */
+validators.oneOf = function validateOneOf (instance, schema, options, ctx) {
+ // Ignore undefined instances
+ if (instance === undefined) {
+ return null;
+ }
+ if (!Array.isArray(schema.oneOf)){
+ throw new SchemaError("oneOf must be an array");
+ }
+ var result = new ValidatorResult(instance, schema, options, ctx);
+ var inner = new ValidatorResult(instance, schema, options, ctx);
+ var count = schema.oneOf.filter(
+ testSchemaNoThrow.bind(
+ this, instance, options, ctx, function(res) {inner.importErrors(res);}
+ ) ).length;
+ var list = schema.oneOf.map(function (v, i) {
+ var id = v.$id || v.id;
+ return id || (v.title && JSON.stringify(v.title)) || (v['$ref'] && ('<' + v['$ref'] + '>')) || '[subschema '+i+']';
+ });
+ if (count!==1) {
+ if (options.nestedErrors) {
+ result.importErrors(inner);
+ }
+ result.addError({
+ name: 'oneOf',
+ argument: list,
+ message: "is not exactly one from " + list.join(','),
+ });
+ }
+ return result;
+};
+
+/**
+ * Validates "then" or "else" depending on the result of validating "if"
+ * @param instance
+ * @param schema
+ * @param options
+ * @param ctx
+ * @return {String|null}
+ */
+validators.if = function validateIf (instance, schema, options, ctx) {
+ // Ignore undefined instances
+ if (instance === undefined) return null;
+ if (!helpers.isSchema(schema.if)) throw new Error('Expected "if" keyword to be a schema');
+ var ifValid = testSchemaNoThrow.call(this, instance, options, ctx, null, schema.if);
+ var result = new ValidatorResult(instance, schema, options, ctx);
+ var res;
+ if(ifValid){
+ if (schema.then === undefined) return;
+ if (!helpers.isSchema(schema.then)) throw new Error('Expected "then" keyword to be a schema');
+ res = this.validateSchema(instance, schema.then, options, ctx.makeChild(schema.then));
+ result.importErrors(res);
+ }else{
+ if (schema.else === undefined) return;
+ if (!helpers.isSchema(schema.else)) throw new Error('Expected "else" keyword to be a schema');
+ res = this.validateSchema(instance, schema.else, options, ctx.makeChild(schema.else));
+ result.importErrors(res);
+ }
+ return result;
+};
+
+function getEnumerableProperty(object, key){
+ // Determine if `key` shows up in `for(var key in object)`
+ // First test Object.hasOwnProperty.call as an optimization: that guarantees it does
+ if(Object.hasOwnProperty.call(object, key)) return object[key];
+ // Test `key in object` as an optimization; false means it won't
+ if(!(key in object)) return;
+ while( (object = Object.getPrototypeOf(object)) ){
+ if(Object.propertyIsEnumerable.call(object, key)) return object[key];
+ }
+}
+
+/**
+ * Validates propertyNames
+ * @param instance
+ * @param schema
+ * @param options
+ * @param ctx
+ * @return {String|null|ValidatorResult}
+ */
+validators.propertyNames = function validatePropertyNames (instance, schema, options, ctx) {
+ if(!this.types.object(instance)) return;
+ var result = new ValidatorResult(instance, schema, options, ctx);
+ var subschema = schema.propertyNames!==undefined ? schema.propertyNames : {};
+ if(!helpers.isSchema(subschema)) throw new SchemaError('Expected "propertyNames" to be a schema (object or boolean)');
+
+ for (var property in instance) {
+ if(getEnumerableProperty(instance, property) !== undefined){
+ var res = this.validateSchema(property, subschema, options, ctx.makeChild(subschema));
+ result.importErrors(res);
+ }
+ }
+
+ return result;
+};
+
+/**
+ * Validates properties
+ * @param instance
+ * @param schema
+ * @param options
+ * @param ctx
+ * @return {String|null|ValidatorResult}
+ */
+validators.properties = function validateProperties (instance, schema, options, ctx) {
+ if(!this.types.object(instance)) return;
+ var result = new ValidatorResult(instance, schema, options, ctx);
+ var properties = schema.properties || {};
+ for (var property in properties) {
+ var subschema = properties[property];
+ if(subschema===undefined){
+ continue;
+ }else if(subschema===null){
+ throw new SchemaError('Unexpected null, expected schema in "properties"');
+ }
+ if (typeof options.preValidateProperty == 'function') {
+ options.preValidateProperty(instance, property, subschema, options, ctx);
+ }
+ var prop = getEnumerableProperty(instance, property);
+ var res = this.validateSchema(prop, subschema, options, ctx.makeChild(subschema, property));
+ if(res.instance !== result.instance[property]) result.instance[property] = res.instance;
+ result.importErrors(res);
+ }
+ return result;
+};
+
+/**
+ * Test a specific property within in instance against the additionalProperties schema attribute
+ * This ignores properties with definitions in the properties schema attribute, but no other attributes.
+ * If too many more types of property-existence tests pop up they may need their own class of tests (like `type` has)
+ * @private
+ * @return {boolean}
+ */
+function testAdditionalProperty (instance, schema, options, ctx, property, result) {
+ if(!this.types.object(instance)) return;
+ if (schema.properties && schema.properties[property] !== undefined) {
+ return;
+ }
+ if (schema.additionalProperties === false) {
+ result.addError({
+ name: 'additionalProperties',
+ argument: property,
+ message: "is not allowed to have the additional property " + JSON.stringify(property),
+ });
+ } else {
+ var additionalProperties = schema.additionalProperties || {};
+
+ if (typeof options.preValidateProperty == 'function') {
+ options.preValidateProperty(instance, property, additionalProperties, options, ctx);
+ }
+
+ var res = this.validateSchema(instance[property], additionalProperties, options, ctx.makeChild(additionalProperties, property));
+ if(res.instance !== result.instance[property]) result.instance[property] = res.instance;
+ result.importErrors(res);
+ }
+}
+
+/**
+ * Validates patternProperties
+ * @param instance
+ * @param schema
+ * @param options
+ * @param ctx
+ * @return {String|null|ValidatorResult}
+ */
+validators.patternProperties = function validatePatternProperties (instance, schema, options, ctx) {
+ if(!this.types.object(instance)) return;
+ var result = new ValidatorResult(instance, schema, options, ctx);
+ var patternProperties = schema.patternProperties || {};
+
+ for (var property in instance) {
+ var test = true;
+ for (var pattern in patternProperties) {
+ var subschema = patternProperties[pattern];
+ if(subschema===undefined){
+ continue;
+ }else if(subschema===null){
+ throw new SchemaError('Unexpected null, expected schema in "patternProperties"');
+ }
+ try {
+ var regexp = new RegExp(pattern, 'u');
+ } catch(_e) {
+ // In the event the stricter handling causes an error, fall back on the forgiving handling
+ // DEPRECATED
+ regexp = new RegExp(pattern);
+ }
+ if (!regexp.test(property)) {
+ continue;
+ }
+ test = false;
+
+ if (typeof options.preValidateProperty == 'function') {
+ options.preValidateProperty(instance, property, subschema, options, ctx);
+ }
+
+ var res = this.validateSchema(instance[property], subschema, options, ctx.makeChild(subschema, property));
+ if(res.instance !== result.instance[property]) result.instance[property] = res.instance;
+ result.importErrors(res);
+ }
+ if (test) {
+ testAdditionalProperty.call(this, instance, schema, options, ctx, property, result);
+ }
+ }
+
+ return result;
+};
+
+/**
+ * Validates additionalProperties
+ * @param instance
+ * @param schema
+ * @param options
+ * @param ctx
+ * @return {String|null|ValidatorResult}
+ */
+validators.additionalProperties = function validateAdditionalProperties (instance, schema, options, ctx) {
+ if(!this.types.object(instance)) return;
+ // if patternProperties is defined then we'll test when that one is called instead
+ if (schema.patternProperties) {
+ return null;
+ }
+ var result = new ValidatorResult(instance, schema, options, ctx);
+ for (var property in instance) {
+ testAdditionalProperty.call(this, instance, schema, options, ctx, property, result);
+ }
+ return result;
+};
+
+/**
+ * Validates whether the instance value is at least of a certain length, when the instance value is a string.
+ * @param instance
+ * @param schema
+ * @return {String|null}
+ */
+validators.minProperties = function validateMinProperties (instance, schema, options, ctx) {
+ if (!this.types.object(instance)) return;
+ var result = new ValidatorResult(instance, schema, options, ctx);
+ var keys = Object.keys(instance);
+ if (!(keys.length >= schema.minProperties)) {
+ result.addError({
+ name: 'minProperties',
+ argument: schema.minProperties,
+ message: "does not meet minimum property length of " + schema.minProperties,
+ });
+ }
+ return result;
+};
+
+/**
+ * Validates whether the instance value is at most of a certain length, when the instance value is a string.
+ * @param instance
+ * @param schema
+ * @return {String|null}
+ */
+validators.maxProperties = function validateMaxProperties (instance, schema, options, ctx) {
+ if (!this.types.object(instance)) return;
+ var result = new ValidatorResult(instance, schema, options, ctx);
+ var keys = Object.keys(instance);
+ if (!(keys.length <= schema.maxProperties)) {
+ result.addError({
+ name: 'maxProperties',
+ argument: schema.maxProperties,
+ message: "does not meet maximum property length of " + schema.maxProperties,
+ });
+ }
+ return result;
+};
+
+/**
+ * Validates items when instance is an array
+ * @param instance
+ * @param schema
+ * @param options
+ * @param ctx
+ * @return {String|null|ValidatorResult}
+ */
+validators.items = function validateItems (instance, schema, options, ctx) {
+ var self = this;
+ if (!this.types.array(instance)) return;
+ if (schema.items===undefined) return;
+ var result = new ValidatorResult(instance, schema, options, ctx);
+ instance.every(function (value, i) {
+ if(Array.isArray(schema.items)){
+ var items = schema.items[i]===undefined ? schema.additionalItems : schema.items[i];
+ }else{
+ var items = schema.items;
+ }
+ if (items === undefined) {
+ return true;
+ }
+ if (items === false) {
+ result.addError({
+ name: 'items',
+ message: "additionalItems not permitted",
+ });
+ return false;
+ }
+ var res = self.validateSchema(value, items, options, ctx.makeChild(items, i));
+ if(res.instance !== result.instance[i]) result.instance[i] = res.instance;
+ result.importErrors(res);
+ return true;
+ });
+ return result;
+};
+
+/**
+ * Validates the "contains" keyword
+ * @param instance
+ * @param schema
+ * @param options
+ * @param ctx
+ * @return {String|null|ValidatorResult}
+ */
+validators.contains = function validateContains (instance, schema, options, ctx) {
+ var self = this;
+ if (!this.types.array(instance)) return;
+ if (schema.contains===undefined) return;
+ if (!helpers.isSchema(schema.contains)) throw new Error('Expected "contains" keyword to be a schema');
+ var result = new ValidatorResult(instance, schema, options, ctx);
+ var count = instance.some(function (value, i) {
+ var res = self.validateSchema(value, schema.contains, options, ctx.makeChild(schema.contains, i));
+ return res.errors.length===0;
+ });
+ if(count===false){
+ result.addError({
+ name: 'contains',
+ argument: schema.contains,
+ message: "must contain an item matching given schema",
+ });
+ }
+ return result;
+};
+
+/**
+ * Validates minimum and exclusiveMinimum when the type of the instance value is a number.
+ * @param instance
+ * @param schema
+ * @return {String|null}
+ */
+validators.minimum = function validateMinimum (instance, schema, options, ctx) {
+ if (!this.types.number(instance)) return;
+ var result = new ValidatorResult(instance, schema, options, ctx);
+ if (schema.exclusiveMinimum && schema.exclusiveMinimum === true) {
+ if(!(instance > schema.minimum)){
+ result.addError({
+ name: 'minimum',
+ argument: schema.minimum,
+ message: "must be greater than " + schema.minimum,
+ });
+ }
+ } else {
+ if(!(instance >= schema.minimum)){
+ result.addError({
+ name: 'minimum',
+ argument: schema.minimum,
+ message: "must be greater than or equal to " + schema.minimum,
+ });
+ }
+ }
+ return result;
+};
+
+/**
+ * Validates maximum and exclusiveMaximum when the type of the instance value is a number.
+ * @param instance
+ * @param schema
+ * @return {String|null}
+ */
+validators.maximum = function validateMaximum (instance, schema, options, ctx) {
+ if (!this.types.number(instance)) return;
+ var result = new ValidatorResult(instance, schema, options, ctx);
+ if (schema.exclusiveMaximum && schema.exclusiveMaximum === true) {
+ if(!(instance < schema.maximum)){
+ result.addError({
+ name: 'maximum',
+ argument: schema.maximum,
+ message: "must be less than " + schema.maximum,
+ });
+ }
+ } else {
+ if(!(instance <= schema.maximum)){
+ result.addError({
+ name: 'maximum',
+ argument: schema.maximum,
+ message: "must be less than or equal to " + schema.maximum,
+ });
+ }
+ }
+ return result;
+};
+
+/**
+ * Validates the number form of exclusiveMinimum when the type of the instance value is a number.
+ * @param instance
+ * @param schema
+ * @return {String|null}
+ */
+validators.exclusiveMinimum = function validateExclusiveMinimum (instance, schema, options, ctx) {
+ // Support the boolean form of exclusiveMinimum, which is handled by the "minimum" keyword.
+ if(typeof schema.exclusiveMinimum === 'boolean') return;
+ if (!this.types.number(instance)) return;
+ var result = new ValidatorResult(instance, schema, options, ctx);
+ var valid = instance > schema.exclusiveMinimum;
+ if (!valid) {
+ result.addError({
+ name: 'exclusiveMinimum',
+ argument: schema.exclusiveMinimum,
+ message: "must be strictly greater than " + schema.exclusiveMinimum,
+ });
+ }
+ return result;
+};
+
+/**
+ * Validates the number form of exclusiveMaximum when the type of the instance value is a number.
+ * @param instance
+ * @param schema
+ * @return {String|null}
+ */
+validators.exclusiveMaximum = function validateExclusiveMaximum (instance, schema, options, ctx) {
+ // Support the boolean form of exclusiveMaximum, which is handled by the "maximum" keyword.
+ if(typeof schema.exclusiveMaximum === 'boolean') return;
+ if (!this.types.number(instance)) return;
+ var result = new ValidatorResult(instance, schema, options, ctx);
+ var valid = instance < schema.exclusiveMaximum;
+ if (!valid) {
+ result.addError({
+ name: 'exclusiveMaximum',
+ argument: schema.exclusiveMaximum,
+ message: "must be strictly less than " + schema.exclusiveMaximum,
+ });
+ }
+ return result;
+};
+
+/**
+ * Perform validation for multipleOf and divisibleBy, which are essentially the same.
+ * @param instance
+ * @param schema
+ * @param validationType
+ * @param errorMessage
+ * @returns {String|null}
+ */
+var validateMultipleOfOrDivisbleBy = function validateMultipleOfOrDivisbleBy (instance, schema, options, ctx, validationType, errorMessage) {
+ if (!this.types.number(instance)) return;
+
+ var validationArgument = schema[validationType];
+ if (validationArgument == 0) {
+ throw new SchemaError(validationType + " cannot be zero");
+ }
+
+ var result = new ValidatorResult(instance, schema, options, ctx);
+
+ var instanceDecimals = helpers.getDecimalPlaces(instance);
+ var divisorDecimals = helpers.getDecimalPlaces(validationArgument);
+
+ var maxDecimals = Math.max(instanceDecimals , divisorDecimals);
+ var multiplier = Math.pow(10, maxDecimals);
+
+ if (Math.round(instance * multiplier) % Math.round(validationArgument * multiplier) !== 0) {
+ result.addError({
+ name: validationType,
+ argument: validationArgument,
+ message: errorMessage + JSON.stringify(validationArgument),
+ });
+ }
+
+ return result;
+};
+
+/**
+ * Validates divisibleBy when the type of the instance value is a number.
+ * @param instance
+ * @param schema
+ * @return {String|null}
+ */
+validators.multipleOf = function validateMultipleOf (instance, schema, options, ctx) {
+ return validateMultipleOfOrDivisbleBy.call(this, instance, schema, options, ctx, "multipleOf", "is not a multiple of (divisible by) ");
+};
+
+/**
+ * Validates multipleOf when the type of the instance value is a number.
+ * @param instance
+ * @param schema
+ * @return {String|null}
+ */
+validators.divisibleBy = function validateDivisibleBy (instance, schema, options, ctx) {
+ return validateMultipleOfOrDivisbleBy.call(this, instance, schema, options, ctx, "divisibleBy", "is not divisible by (multiple of) ");
+};
+
+/**
+ * Validates whether the instance value is present.
+ * @param instance
+ * @param schema
+ * @return {String|null}
+ */
+validators.required = function validateRequired (instance, schema, options, ctx) {
+ var result = new ValidatorResult(instance, schema, options, ctx);
+ if (instance === undefined && schema.required === true) {
+ // A boolean form is implemented for reverse-compatibility with schemas written against older drafts
+ result.addError({
+ name: 'required',
+ message: "is required",
+ });
+ } else if (this.types.object(instance) && Array.isArray(schema.required)) {
+ schema.required.forEach(function(n){
+ if(getEnumerableProperty(instance, n)===undefined){
+ result.addError({
+ name: 'required',
+ argument: n,
+ message: "requires property " + JSON.stringify(n),
+ });
+ }
+ });
+ }
+ return result;
+};
+
+/**
+ * Validates whether the instance value matches the regular expression, when the instance value is a string.
+ * @param instance
+ * @param schema
+ * @return {String|null}
+ */
+validators.pattern = function validatePattern (instance, schema, options, ctx) {
+ if (!this.types.string(instance)) return;
+ var result = new ValidatorResult(instance, schema, options, ctx);
+ var pattern = schema.pattern;
+ try {
+ var regexp = new RegExp(pattern, 'u');
+ } catch(_e) {
+ // In the event the stricter handling causes an error, fall back on the forgiving handling
+ // DEPRECATED
+ regexp = new RegExp(pattern);
+ }
+ if (!instance.match(regexp)) {
+ result.addError({
+ name: 'pattern',
+ argument: schema.pattern,
+ message: "does not match pattern " + JSON.stringify(schema.pattern.toString()),
+ });
+ }
+ return result;
+};
+
+/**
+ * Validates whether the instance value is of a certain defined format or a custom
+ * format.
+ * The following formats are supported for string types:
+ * - date-time
+ * - date
+ * - time
+ * - ip-address
+ * - ipv6
+ * - uri
+ * - color
+ * - host-name
+ * - alpha
+ * - alpha-numeric
+ * - utc-millisec
+ * @param instance
+ * @param schema
+ * @param [options]
+ * @param [ctx]
+ * @return {String|null}
+ */
+validators.format = function validateFormat (instance, schema, options, ctx) {
+ if (instance===undefined) return;
+ var result = new ValidatorResult(instance, schema, options, ctx);
+ if (!result.disableFormat && !helpers.isFormat(instance, schema.format, this)) {
+ result.addError({
+ name: 'format',
+ argument: schema.format,
+ message: "does not conform to the " + JSON.stringify(schema.format) + " format",
+ });
+ }
+ return result;
+};
+
+/**
+ * Validates whether the instance value is at least of a certain length, when the instance value is a string.
+ * @param instance
+ * @param schema
+ * @return {String|null}
+ */
+validators.minLength = function validateMinLength (instance, schema, options, ctx) {
+ if (!this.types.string(instance)) return;
+ var result = new ValidatorResult(instance, schema, options, ctx);
+ var hsp = instance.match(/[\uDC00-\uDFFF]/g);
+ var length = instance.length - (hsp ? hsp.length : 0);
+ if (!(length >= schema.minLength)) {
+ result.addError({
+ name: 'minLength',
+ argument: schema.minLength,
+ message: "does not meet minimum length of " + schema.minLength,
+ });
+ }
+ return result;
+};
+
+/**
+ * Validates whether the instance value is at most of a certain length, when the instance value is a string.
+ * @param instance
+ * @param schema
+ * @return {String|null}
+ */
+validators.maxLength = function validateMaxLength (instance, schema, options, ctx) {
+ if (!this.types.string(instance)) return;
+ var result = new ValidatorResult(instance, schema, options, ctx);
+ // TODO if this was already computed in "minLength", use that value instead of re-computing
+ var hsp = instance.match(/[\uDC00-\uDFFF]/g);
+ var length = instance.length - (hsp ? hsp.length : 0);
+ if (!(length <= schema.maxLength)) {
+ result.addError({
+ name: 'maxLength',
+ argument: schema.maxLength,
+ message: "does not meet maximum length of " + schema.maxLength,
+ });
+ }
+ return result;
+};
+
+/**
+ * Validates whether instance contains at least a minimum number of items, when the instance is an Array.
+ * @param instance
+ * @param schema
+ * @return {String|null}
+ */
+validators.minItems = function validateMinItems (instance, schema, options, ctx) {
+ if (!this.types.array(instance)) return;
+ var result = new ValidatorResult(instance, schema, options, ctx);
+ if (!(instance.length >= schema.minItems)) {
+ result.addError({
+ name: 'minItems',
+ argument: schema.minItems,
+ message: "does not meet minimum length of " + schema.minItems,
+ });
+ }
+ return result;
+};
+
+/**
+ * Validates whether instance contains no more than a maximum number of items, when the instance is an Array.
+ * @param instance
+ * @param schema
+ * @return {String|null}
+ */
+validators.maxItems = function validateMaxItems (instance, schema, options, ctx) {
+ if (!this.types.array(instance)) return;
+ var result = new ValidatorResult(instance, schema, options, ctx);
+ if (!(instance.length <= schema.maxItems)) {
+ result.addError({
+ name: 'maxItems',
+ argument: schema.maxItems,
+ message: "does not meet maximum length of " + schema.maxItems,
+ });
+ }
+ return result;
+};
+
+/**
+ * Deep compares arrays for duplicates
+ * @param v
+ * @param i
+ * @param a
+ * @private
+ * @return {boolean}
+ */
+function testArrays (v, i, a) {
+ var j, len = a.length;
+ for (j = i + 1, len; j < len; j++) {
+ if (helpers.deepCompareStrict(v, a[j])) {
+ return false;
+ }
+ }
+ return true;
+}
+
+/**
+ * Validates whether there are no duplicates, when the instance is an Array.
+ * @param instance
+ * @return {String|null}
+ */
+validators.uniqueItems = function validateUniqueItems (instance, schema, options, ctx) {
+ if (schema.uniqueItems!==true) return;
+ if (!this.types.array(instance)) return;
+ var result = new ValidatorResult(instance, schema, options, ctx);
+ if (!instance.every(testArrays)) {
+ result.addError({
+ name: 'uniqueItems',
+ message: "contains duplicate item",
+ });
+ }
+ return result;
+};
+
+/**
+ * Validate for the presence of dependency properties, if the instance is an object.
+ * @param instance
+ * @param schema
+ * @param options
+ * @param ctx
+ * @return {null|ValidatorResult}
+ */
+validators.dependencies = function validateDependencies (instance, schema, options, ctx) {
+ if (!this.types.object(instance)) return;
+ var result = new ValidatorResult(instance, schema, options, ctx);
+ for (var property in schema.dependencies) {
+ if (instance[property] === undefined) {
+ continue;
+ }
+ var dep = schema.dependencies[property];
+ var childContext = ctx.makeChild(dep, property);
+ if (typeof dep == 'string') {
+ dep = [dep];
+ }
+ if (Array.isArray(dep)) {
+ dep.forEach(function (prop) {
+ if (instance[prop] === undefined) {
+ result.addError({
+ // FIXME there's two different "dependencies" errors here with slightly different outputs
+ // Can we make these the same? Or should we create different error types?
+ name: 'dependencies',
+ argument: childContext.propertyPath,
+ message: "property " + prop + " not found, required by " + childContext.propertyPath,
+ });
+ }
+ });
+ } else {
+ var res = this.validateSchema(instance, dep, options, childContext);
+ if(result.instance !== res.instance) result.instance = res.instance;
+ if (res && res.errors.length) {
+ result.addError({
+ name: 'dependencies',
+ argument: childContext.propertyPath,
+ message: "does not meet dependency required by " + childContext.propertyPath,
+ });
+ result.importErrors(res);
+ }
+ }
+ }
+ return result;
+};
+
+/**
+ * Validates whether the instance value is one of the enumerated values.
+ *
+ * @param instance
+ * @param schema
+ * @return {ValidatorResult|null}
+ */
+validators['enum'] = function validateEnum (instance, schema, options, ctx) {
+ if (instance === undefined) {
+ return null;
+ }
+ if (!Array.isArray(schema['enum'])) {
+ throw new SchemaError("enum expects an array", schema);
+ }
+ var result = new ValidatorResult(instance, schema, options, ctx);
+ if (!schema['enum'].some(helpers.deepCompareStrict.bind(null, instance))) {
+ result.addError({
+ name: 'enum',
+ argument: schema['enum'],
+ message: "is not one of enum values: " + schema['enum'].map(String).join(','),
+ });
+ }
+ return result;
+};
+
+/**
+ * Validates whether the instance exactly matches a given value
+ *
+ * @param instance
+ * @param schema
+ * @return {ValidatorResult|null}
+ */
+validators['const'] = function validateEnum (instance, schema, options, ctx) {
+ if (instance === undefined) {
+ return null;
+ }
+ var result = new ValidatorResult(instance, schema, options, ctx);
+ if (!helpers.deepCompareStrict(schema['const'], instance)) {
+ result.addError({
+ name: 'const',
+ argument: schema['const'],
+ message: "does not exactly match expected constant: " + schema['const'],
+ });
+ }
+ return result;
+};
+
+/**
+ * Validates whether the instance if of a prohibited type.
+ * @param instance
+ * @param schema
+ * @param options
+ * @param ctx
+ * @return {null|ValidatorResult}
+ */
+validators.not = validators.disallow = function validateNot (instance, schema, options, ctx) {
+ var self = this;
+ if(instance===undefined) return null;
+ var result = new ValidatorResult(instance, schema, options, ctx);
+ var notTypes = schema.not || schema.disallow;
+ if(!notTypes) return null;
+ if(!Array.isArray(notTypes)) notTypes=[notTypes];
+ notTypes.forEach(function (type) {
+ if (self.testType(instance, schema, options, ctx, type)) {
+ var id = type && (type.$id || type.id);
+ var schemaId = id || type;
+ result.addError({
+ name: 'not',
+ argument: schemaId,
+ message: "is of prohibited type " + schemaId,
+ });
+ }
+ });
+ return result;
+};
+
+module.exports = attribute;
+
+
+/***/ }),
+
+/***/ 52417:
+/***/ ((module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+
+var uri = __nccwpck_require__(57310);
+
+var ValidationError = exports.ValidationError = function ValidationError (message, instance, schema, path, name, argument) {
+ if(Array.isArray(path)){
+ this.path = path;
+ this.property = path.reduce(function(sum, item){
+ return sum + makeSuffix(item);
+ }, 'instance');
+ }else if(path !== undefined){
+ this.property = path;
+ }
+ if (message) {
+ this.message = message;
+ }
+ if (schema) {
+ var id = schema.$id || schema.id;
+ this.schema = id || schema;
+ }
+ if (instance !== undefined) {
+ this.instance = instance;
+ }
+ this.name = name;
+ this.argument = argument;
+ this.stack = this.toString();
+};
+
+ValidationError.prototype.toString = function toString() {
+ return this.property + ' ' + this.message;
+};
+
+var ValidatorResult = exports.ValidatorResult = function ValidatorResult(instance, schema, options, ctx) {
+ this.instance = instance;
+ this.schema = schema;
+ this.options = options;
+ this.path = ctx.path;
+ this.propertyPath = ctx.propertyPath;
+ this.errors = [];
+ this.throwError = options && options.throwError;
+ this.throwFirst = options && options.throwFirst;
+ this.throwAll = options && options.throwAll;
+ this.disableFormat = options && options.disableFormat === true;
+};
+
+ValidatorResult.prototype.addError = function addError(detail) {
+ var err;
+ if (typeof detail == 'string') {
+ err = new ValidationError(detail, this.instance, this.schema, this.path);
+ } else {
+ if (!detail) throw new Error('Missing error detail');
+ if (!detail.message) throw new Error('Missing error message');
+ if (!detail.name) throw new Error('Missing validator type');
+ err = new ValidationError(detail.message, this.instance, this.schema, this.path, detail.name, detail.argument);
+ }
+
+ this.errors.push(err);
+ if (this.throwFirst) {
+ throw new ValidatorResultError(this);
+ }else if(this.throwError){
+ throw err;
+ }
+ return err;
+};
+
+ValidatorResult.prototype.importErrors = function importErrors(res) {
+ if (typeof res == 'string' || (res && res.validatorType)) {
+ this.addError(res);
+ } else if (res && res.errors) {
+ this.errors = this.errors.concat(res.errors);
+ }
+};
+
+function stringizer (v,i){
+ return i+': '+v.toString()+'\n';
+}
+ValidatorResult.prototype.toString = function toString(res) {
+ return this.errors.map(stringizer).join('');
+};
+
+Object.defineProperty(ValidatorResult.prototype, "valid", { get: function() {
+ return !this.errors.length;
+} });
+
+module.exports.ValidatorResultError = ValidatorResultError;
+function ValidatorResultError(result) {
+ if(Error.captureStackTrace){
+ Error.captureStackTrace(this, ValidatorResultError);
+ }
+ this.instance = result.instance;
+ this.schema = result.schema;
+ this.options = result.options;
+ this.errors = result.errors;
+}
+ValidatorResultError.prototype = new Error();
+ValidatorResultError.prototype.constructor = ValidatorResultError;
+ValidatorResultError.prototype.name = "Validation Error";
+
+/**
+ * Describes a problem with a Schema which prevents validation of an instance
+ * @name SchemaError
+ * @constructor
+ */
+var SchemaError = exports.SchemaError = function SchemaError (msg, schema) {
+ this.message = msg;
+ this.schema = schema;
+ Error.call(this, msg);
+ Error.captureStackTrace(this, SchemaError);
+};
+SchemaError.prototype = Object.create(Error.prototype,
+ {
+ constructor: {value: SchemaError, enumerable: false},
+ name: {value: 'SchemaError', enumerable: false},
+ });
+
+var SchemaContext = exports.SchemaContext = function SchemaContext (schema, options, path, base, schemas) {
+ this.schema = schema;
+ this.options = options;
+ if(Array.isArray(path)){
+ this.path = path;
+ this.propertyPath = path.reduce(function(sum, item){
+ return sum + makeSuffix(item);
+ }, 'instance');
+ }else{
+ this.propertyPath = path;
+ }
+ this.base = base;
+ this.schemas = schemas;
+};
+
+SchemaContext.prototype.resolve = function resolve (target) {
+ return uri.resolve(this.base, target);
+};
+
+SchemaContext.prototype.makeChild = function makeChild(schema, propertyName){
+ var path = (propertyName===undefined) ? this.path : this.path.concat([propertyName]);
+ var id = schema.$id || schema.id;
+ var base = uri.resolve(this.base, id||'');
+ var ctx = new SchemaContext(schema, this.options, path, base, Object.create(this.schemas));
+ if(id && !ctx.schemas[base]){
+ ctx.schemas[base] = schema;
+ }
+ return ctx;
+};
+
+var FORMAT_REGEXPS = exports.FORMAT_REGEXPS = {
+ // 7.3.1. Dates, Times, and Duration
+ 'date-time': /^\d{4}-(?:0[0-9]{1}|1[0-2]{1})-(3[01]|0[1-9]|[12][0-9])[tT ](2[0-4]|[01][0-9]):([0-5][0-9]):(60|[0-5][0-9])(\.\d+)?([zZ]|[+-]([0-5][0-9]):(60|[0-5][0-9]))$/,
+ 'date': /^\d{4}-(?:0[0-9]{1}|1[0-2]{1})-(3[01]|0[1-9]|[12][0-9])$/,
+ 'time': /^(2[0-4]|[01][0-9]):([0-5][0-9]):(60|[0-5][0-9])$/,
+ 'duration': /P(T\d+(H(\d+M(\d+S)?)?|M(\d+S)?|S)|\d+(D|M(\d+D)?|Y(\d+M(\d+D)?)?)(T\d+(H(\d+M(\d+S)?)?|M(\d+S)?|S))?|\d+W)/i,
+
+ // 7.3.2. Email Addresses
+ // TODO: fix the email production
+ 'email': /^(?:[\w\!\#\$\%\&\'\*\+\-\/\=\?\^\`\{\|\}\~]+\.)*[\w\!\#\$\%\&\'\*\+\-\/\=\?\^\`\{\|\}\~]+@(?:(?:(?:[a-zA-Z0-9](?:[a-zA-Z0-9\-](?!\.)){0,61}[a-zA-Z0-9]?\.)+[a-zA-Z0-9](?:[a-zA-Z0-9\-](?!$)){0,61}[a-zA-Z0-9]?)|(?:\[(?:(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\.){3}(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\]))$/,
+ 'idn-email': /^("(?:[!#-\[\]-\u{10FFFF}]|\\[\t -\u{10FFFF}])*"|[!#-'*+\-/-9=?A-Z\^-\u{10FFFF}](?:\.?[!#-'*+\-/-9=?A-Z\^-\u{10FFFF}])*)@([!#-'*+\-/-9=?A-Z\^-\u{10FFFF}](?:\.?[!#-'*+\-/-9=?A-Z\^-\u{10FFFF}])*|\[[!-Z\^-\u{10FFFF}]*\])$/u,
+
+ // 7.3.3. Hostnames
+
+ // 7.3.4. IP Addresses
+ 'ip-address': /^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/,
+ // FIXME whitespace is invalid
+ 'ipv6': /^\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(%.+)?\s*$/,
+
+ // 7.3.5. Resource Identifiers
+ // TODO: A more accurate regular expression for "uri" goes:
+ // [A-Za-z][+\-.0-9A-Za-z]*:((/(/((%[0-9A-Fa-f]{2}|[!$&-.0-9;=A-Z_a-z~])+|(\[(([Vv][0-9A-Fa-f]+\.[!$&-.0-;=A-Z_a-z~]+)?|[.0-:A-Fa-f]+)\])?)(:\d*)?)?)?#(%[0-9A-Fa-f]{2}|[!$&-;=?-Z_a-z~])*|(/(/((%[0-9A-Fa-f]{2}|[!$&-.0-9;=A-Z_a-z~])+|(\[(([Vv][0-9A-Fa-f]+\.[!$&-.0-;=A-Z_a-z~]+)?|[.0-:A-Fa-f]+)\])?)(:\d*)?[/?]|[!$&-.0-;=?-Z_a-z~])|/?%[0-9A-Fa-f]{2}|[!$&-.0-;=?-Z_a-z~])(%[0-9A-Fa-f]{2}|[!$&-;=?-Z_a-z~])*(#(%[0-9A-Fa-f]{2}|[!$&-;=?-Z_a-z~])*)?|/(/((%[0-9A-Fa-f]{2}|[!$&-.0-9;=A-Z_a-z~])+(:\d*)?|(\[(([Vv][0-9A-Fa-f]+\.[!$&-.0-;=A-Z_a-z~]+)?|[.0-:A-Fa-f]+)\])?:\d*|\[(([Vv][0-9A-Fa-f]+\.[!$&-.0-;=A-Z_a-z~]+)?|[.0-:A-Fa-f]+)\])?)?)?
+ 'uri': /^[a-zA-Z][a-zA-Z0-9+.-]*:[^\s]*$/,
+ 'uri-reference': /^(((([A-Za-z][+\-.0-9A-Za-z]*(:%[0-9A-Fa-f]{2}|:[!$&-.0-;=?-Z_a-z~]|[/?])|\?)(%[0-9A-Fa-f]{2}|[!$&-;=?-Z_a-z~])*|([A-Za-z][+\-.0-9A-Za-z]*:?)?)|([A-Za-z][+\-.0-9A-Za-z]*:)?\/((%[0-9A-Fa-f]{2}|\/((%[0-9A-Fa-f]{2}|[!$&-.0-9;=A-Z_a-z~])+|(\[(([Vv][0-9A-Fa-f]+\.[!$&-.0-;=A-Z_a-z~]+)?|[.0-:A-Fa-f]+)\])?)(:\d*)?[/?]|[!$&-.0-;=?-Z_a-z~])(%[0-9A-Fa-f]{2}|[!$&-;=?-Z_a-z~])*|(\/((%[0-9A-Fa-f]{2}|[!$&-.0-9;=A-Z_a-z~])+|(\[(([Vv][0-9A-Fa-f]+\.[!$&-.0-;=A-Z_a-z~]+)?|[.0-:A-Fa-f]+)\])?)(:\d*)?)?))#(%[0-9A-Fa-f]{2}|[!$&-;=?-Z_a-z~])*|(([A-Za-z][+\-.0-9A-Za-z]*)?%[0-9A-Fa-f]{2}|[!$&-.0-9;=@_~]|[A-Za-z][+\-.0-9A-Za-z]*[!$&-*,;=@_~])(%[0-9A-Fa-f]{2}|[!$&-.0-9;=@-Z_a-z~])*((([/?](%[0-9A-Fa-f]{2}|[!$&-;=?-Z_a-z~])*)?#|[/?])(%[0-9A-Fa-f]{2}|[!$&-;=?-Z_a-z~])*)?|([A-Za-z][+\-.0-9A-Za-z]*(:%[0-9A-Fa-f]{2}|:[!$&-.0-;=?-Z_a-z~]|[/?])|\?)(%[0-9A-Fa-f]{2}|[!$&-;=?-Z_a-z~])*|([A-Za-z][+\-.0-9A-Za-z]*:)?\/((%[0-9A-Fa-f]{2}|\/((%[0-9A-Fa-f]{2}|[!$&-.0-9;=A-Z_a-z~])+|(\[(([Vv][0-9A-Fa-f]+\.[!$&-.0-;=A-Z_a-z~]+)?|[.0-:A-Fa-f]+)\])?)(:\d*)?[/?]|[!$&-.0-;=?-Z_a-z~])(%[0-9A-Fa-f]{2}|[!$&-;=?-Z_a-z~])*|\/((%[0-9A-Fa-f]{2}|[!$&-.0-9;=A-Z_a-z~])+(:\d*)?|(\[(([Vv][0-9A-Fa-f]+\.[!$&-.0-;=A-Z_a-z~]+)?|[.0-:A-Fa-f]+)\])?:\d*|\[(([Vv][0-9A-Fa-f]+\.[!$&-.0-;=A-Z_a-z~]+)?|[.0-:A-Fa-f]+)\])?)?|[A-Za-z][+\-.0-9A-Za-z]*:?)?$/,
+ 'iri': /^[a-zA-Z][a-zA-Z0-9+.-]*:[^\s]*$/,
+ 'iri-reference': /^(((([A-Za-z][+\-.0-9A-Za-z]*(:%[0-9A-Fa-f]{2}|:[!$&-.0-;=?-Z_a-z~-\u{10FFFF}]|[/?])|\?)(%[0-9A-Fa-f]{2}|[!$&-;=?-Z_a-z~-\u{10FFFF}])*|([A-Za-z][+\-.0-9A-Za-z]*:?)?)|([A-Za-z][+\-.0-9A-Za-z]*:)?\/((%[0-9A-Fa-f]{2}|\/((%[0-9A-Fa-f]{2}|[!$&-.0-9;=A-Z_a-z~-\u{10FFFF}])+|(\[(([Vv][0-9A-Fa-f]+\.[!$&-.0-;=A-Z_a-z~-\u{10FFFF}]+)?|[.0-:A-Fa-f]+)\])?)(:\d*)?[/?]|[!$&-.0-;=?-Z_a-z~-\u{10FFFF}])(%[0-9A-Fa-f]{2}|[!$&-;=?-Z_a-z~-\u{10FFFF}])*|(\/((%[0-9A-Fa-f]{2}|[!$&-.0-9;=A-Z_a-z~-\u{10FFFF}])+|(\[(([Vv][0-9A-Fa-f]+\.[!$&-.0-;=A-Z_a-z~-\u{10FFFF}]+)?|[.0-:A-Fa-f]+)\])?)(:\d*)?)?))#(%[0-9A-Fa-f]{2}|[!$&-;=?-Z_a-z~-\u{10FFFF}])*|(([A-Za-z][+\-.0-9A-Za-z]*)?%[0-9A-Fa-f]{2}|[!$&-.0-9;=@_~-\u{10FFFF}]|[A-Za-z][+\-.0-9A-Za-z]*[!$&-*,;=@_~-\u{10FFFF}])(%[0-9A-Fa-f]{2}|[!$&-.0-9;=@-Z_a-z~-\u{10FFFF}])*((([/?](%[0-9A-Fa-f]{2}|[!$&-;=?-Z_a-z~-\u{10FFFF}])*)?#|[/?])(%[0-9A-Fa-f]{2}|[!$&-;=?-Z_a-z~-\u{10FFFF}])*)?|([A-Za-z][+\-.0-9A-Za-z]*(:%[0-9A-Fa-f]{2}|:[!$&-.0-;=?-Z_a-z~-\u{10FFFF}]|[/?])|\?)(%[0-9A-Fa-f]{2}|[!$&-;=?-Z_a-z~-\u{10FFFF}])*|([A-Za-z][+\-.0-9A-Za-z]*:)?\/((%[0-9A-Fa-f]{2}|\/((%[0-9A-Fa-f]{2}|[!$&-.0-9;=A-Z_a-z~-\u{10FFFF}])+|(\[(([Vv][0-9A-Fa-f]+\.[!$&-.0-;=A-Z_a-z~-\u{10FFFF}]+)?|[.0-:A-Fa-f]+)\])?)(:\d*)?[/?]|[!$&-.0-;=?-Z_a-z~-\u{10FFFF}])(%[0-9A-Fa-f]{2}|[!$&-;=?-Z_a-z~-\u{10FFFF}])*|\/((%[0-9A-Fa-f]{2}|[!$&-.0-9;=A-Z_a-z~-\u{10FFFF}])+(:\d*)?|(\[(([Vv][0-9A-Fa-f]+\.[!$&-.0-;=A-Z_a-z~-\u{10FFFF}]+)?|[.0-:A-Fa-f]+)\])?:\d*|\[(([Vv][0-9A-Fa-f]+\.[!$&-.0-;=A-Z_a-z~-\u{10FFFF}]+)?|[.0-:A-Fa-f]+)\])?)?|[A-Za-z][+\-.0-9A-Za-z]*:?)?$/u,
+ 'uuid': /^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$/i,
+
+ // 7.3.6. uri-template
+ 'uri-template': /(%[0-9a-f]{2}|[!#$&(-;=?@\[\]_a-z~]|\{[!#&+,./;=?@|]?(%[0-9a-f]{2}|[0-9_a-z])(\.?(%[0-9a-f]{2}|[0-9_a-z]))*(:[1-9]\d{0,3}|\*)?(,(%[0-9a-f]{2}|[0-9_a-z])(\.?(%[0-9a-f]{2}|[0-9_a-z]))*(:[1-9]\d{0,3}|\*)?)*\})*/iu,
+
+ // 7.3.7. JSON Pointers
+ 'json-pointer': /^(\/([\x00-\x2e0-@\[-}\x7f]|~[01])*)*$/iu,
+ 'relative-json-pointer': /^\d+(#|(\/([\x00-\x2e0-@\[-}\x7f]|~[01])*)*)$/iu,
+
+ // hostname regex from: http://stackoverflow.com/a/1420225/5628
+ 'hostname': /^(?=.{1,255}$)[0-9A-Za-z](?:(?:[0-9A-Za-z]|-){0,61}[0-9A-Za-z])?(?:\.[0-9A-Za-z](?:(?:[0-9A-Za-z]|-){0,61}[0-9A-Za-z])?)*\.?$/,
+ 'host-name': /^(?=.{1,255}$)[0-9A-Za-z](?:(?:[0-9A-Za-z]|-){0,61}[0-9A-Za-z])?(?:\.[0-9A-Za-z](?:(?:[0-9A-Za-z]|-){0,61}[0-9A-Za-z])?)*\.?$/,
+
+ 'utc-millisec': function (input) {
+ return (typeof input === 'string') && parseFloat(input) === parseInt(input, 10) && !isNaN(input);
+ },
+
+ // 7.3.8. regex
+ 'regex': function (input) {
+ var result = true;
+ try {
+ new RegExp(input);
+ } catch (e) {
+ result = false;
+ }
+ return result;
+ },
+
+ // Other definitions
+ // "style" was removed from JSON Schema in draft-4 and is deprecated
+ 'style': /[\r\n\t ]*[^\r\n\t ][^:]*:[\r\n\t ]*[^\r\n\t ;]*[\r\n\t ]*;?/,
+ // "color" was removed from JSON Schema in draft-4 and is deprecated
+ 'color': /^(#?([0-9A-Fa-f]{3}){1,2}\b|aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow|(rgb\(\s*\b([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\b\s*,\s*\b([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\b\s*,\s*\b([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\b\s*\))|(rgb\(\s*(\d?\d%|100%)+\s*,\s*(\d?\d%|100%)+\s*,\s*(\d?\d%|100%)+\s*\)))$/,
+ 'phone': /^\+(?:[0-9] ?){6,14}[0-9]$/,
+ 'alpha': /^[a-zA-Z]+$/,
+ 'alphanumeric': /^[a-zA-Z0-9]+$/,
+};
+
+FORMAT_REGEXPS.regexp = FORMAT_REGEXPS.regex;
+FORMAT_REGEXPS.pattern = FORMAT_REGEXPS.regex;
+FORMAT_REGEXPS.ipv4 = FORMAT_REGEXPS['ip-address'];
+
+exports.isFormat = function isFormat (input, format, validator) {
+ if (typeof input === 'string' && FORMAT_REGEXPS[format] !== undefined) {
+ if (FORMAT_REGEXPS[format] instanceof RegExp) {
+ return FORMAT_REGEXPS[format].test(input);
+ }
+ if (typeof FORMAT_REGEXPS[format] === 'function') {
+ return FORMAT_REGEXPS[format](input);
+ }
+ } else if (validator && validator.customFormats &&
+ typeof validator.customFormats[format] === 'function') {
+ return validator.customFormats[format](input);
+ }
+ return true;
+};
+
+var makeSuffix = exports.makeSuffix = function makeSuffix (key) {
+ key = key.toString();
+ // This function could be capable of outputting valid a ECMAScript string, but the
+ // resulting code for testing which form to use would be tens of thousands of characters long
+ // That means this will use the name form for some illegal forms
+ if (!key.match(/[.\s\[\]]/) && !key.match(/^[\d]/)) {
+ return '.' + key;
+ }
+ if (key.match(/^\d+$/)) {
+ return '[' + key + ']';
+ }
+ return '[' + JSON.stringify(key) + ']';
+};
+
+exports.deepCompareStrict = function deepCompareStrict (a, b) {
+ if (typeof a !== typeof b) {
+ return false;
+ }
+ if (Array.isArray(a)) {
+ if (!Array.isArray(b)) {
+ return false;
+ }
+ if (a.length !== b.length) {
+ return false;
+ }
+ return a.every(function (v, i) {
+ return deepCompareStrict(a[i], b[i]);
+ });
+ }
+ if (typeof a === 'object') {
+ if (!a || !b) {
+ return a === b;
+ }
+ var aKeys = Object.keys(a);
+ var bKeys = Object.keys(b);
+ if (aKeys.length !== bKeys.length) {
+ return false;
+ }
+ return aKeys.every(function (v) {
+ return deepCompareStrict(a[v], b[v]);
+ });
+ }
+ return a === b;
+};
+
+function deepMerger (target, dst, e, i) {
+ if (typeof e === 'object') {
+ dst[i] = deepMerge(target[i], e);
+ } else {
+ if (target.indexOf(e) === -1) {
+ dst.push(e);
+ }
+ }
+}
+
+function copyist (src, dst, key) {
+ dst[key] = src[key];
+}
+
+function copyistWithDeepMerge (target, src, dst, key) {
+ if (typeof src[key] !== 'object' || !src[key]) {
+ dst[key] = src[key];
+ }
+ else {
+ if (!target[key]) {
+ dst[key] = src[key];
+ } else {
+ dst[key] = deepMerge(target[key], src[key]);
+ }
+ }
+}
+
+function deepMerge (target, src) {
+ var array = Array.isArray(src);
+ var dst = array && [] || {};
+
+ if (array) {
+ target = target || [];
+ dst = dst.concat(target);
+ src.forEach(deepMerger.bind(null, target, dst));
+ } else {
+ if (target && typeof target === 'object') {
+ Object.keys(target).forEach(copyist.bind(null, target, dst));
+ }
+ Object.keys(src).forEach(copyistWithDeepMerge.bind(null, target, src, dst));
+ }
+
+ return dst;
+}
+
+module.exports.deepMerge = deepMerge;
+
+/**
+ * Validates instance against the provided schema
+ * Implements URI+JSON Pointer encoding, e.g. "%7e"="~0"=>"~", "~1"="%2f"=>"/"
+ * @param o
+ * @param s The path to walk o along
+ * @return any
+ */
+exports.objectGetPath = function objectGetPath(o, s) {
+ var parts = s.split('/').slice(1);
+ var k;
+ while (typeof (k=parts.shift()) == 'string') {
+ var n = decodeURIComponent(k.replace(/~0/,'~').replace(/~1/g,'/'));
+ if (!(n in o)) return;
+ o = o[n];
+ }
+ return o;
+};
+
+function pathEncoder (v) {
+ return '/'+encodeURIComponent(v).replace(/~/g,'%7E');
+}
+/**
+ * Accept an Array of property names and return a JSON Pointer URI fragment
+ * @param Array a
+ * @return {String}
+ */
+exports.encodePath = function encodePointer(a){
+ // ~ must be encoded explicitly because hacks
+ // the slash is encoded by encodeURIComponent
+ return a.map(pathEncoder).join('');
+};
+
+
+/**
+ * Calculate the number of decimal places a number uses
+ * We need this to get correct results out of multipleOf and divisibleBy
+ * when either figure is has decimal places, due to IEEE-754 float issues.
+ * @param number
+ * @returns {number}
+ */
+exports.getDecimalPlaces = function getDecimalPlaces(number) {
+
+ var decimalPlaces = 0;
+ if (isNaN(number)) return decimalPlaces;
+
+ if (typeof number !== 'number') {
+ number = Number(number);
+ }
+
+ var parts = number.toString().split('e');
+ if (parts.length === 2) {
+ if (parts[1][0] !== '-') {
+ return decimalPlaces;
+ } else {
+ decimalPlaces = Number(parts[1].slice(1));
+ }
+ }
+
+ var decimalParts = parts[0].split('.');
+ if (decimalParts.length === 2) {
+ decimalPlaces += decimalParts[1].length;
+ }
+
+ return decimalPlaces;
+};
+
+exports.isSchema = function isSchema(val){
+ return (typeof val === 'object' && val) || (typeof val === 'boolean');
+};
+
+
+
+/***/ }),
+
+/***/ 62811:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+"use strict";
+
+
+var Validator = module.exports.Validator = __nccwpck_require__(11113);
+
+module.exports.ValidatorResult = __nccwpck_require__(52417).ValidatorResult;
+module.exports.ValidatorResultError = __nccwpck_require__(52417).ValidatorResultError;
+module.exports.ValidationError = __nccwpck_require__(52417).ValidationError;
+module.exports.SchemaError = __nccwpck_require__(52417).SchemaError;
+module.exports.SchemaScanResult = __nccwpck_require__(46502).SchemaScanResult;
+module.exports.scan = __nccwpck_require__(46502).scan;
+
+module.exports.validate = function (instance, schema, options) {
+ var v = new Validator();
+ return v.validate(instance, schema, options);
+};
+
+
+/***/ }),
+
+/***/ 46502:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+"use strict";
+
+
+var urilib = __nccwpck_require__(57310);
+var helpers = __nccwpck_require__(52417);
+
+module.exports.SchemaScanResult = SchemaScanResult;
+function SchemaScanResult(found, ref){
+ this.id = found;
+ this.ref = ref;
+}
+
+/**
+ * Adds a schema with a certain urn to the Validator instance.
+ * @param string uri
+ * @param object schema
+ * @return {Object}
+ */
+module.exports.scan = function scan(base, schema){
+ function scanSchema(baseuri, schema){
+ if(!schema || typeof schema!='object') return;
+ // Mark all referenced schemas so we can tell later which schemas are referred to, but never defined
+ if(schema.$ref){
+ var resolvedUri = urilib.resolve(baseuri, schema.$ref);
+ ref[resolvedUri] = ref[resolvedUri] ? ref[resolvedUri]+1 : 0;
+ return;
+ }
+ var id = schema.$id || schema.id;
+ var ourBase = id ? urilib.resolve(baseuri, id) : baseuri;
+ if (ourBase) {
+ // If there's no fragment, append an empty one
+ if(ourBase.indexOf('#')<0) ourBase += '#';
+ if(found[ourBase]){
+ if(!helpers.deepCompareStrict(found[ourBase], schema)){
+ throw new Error('Schema <'+ourBase+'> already exists with different definition');
+ }
+ return found[ourBase];
+ }
+ found[ourBase] = schema;
+ // strip trailing fragment
+ if(ourBase[ourBase.length-1]=='#'){
+ found[ourBase.substring(0, ourBase.length-1)] = schema;
+ }
+ }
+ scanArray(ourBase+'/items', (Array.isArray(schema.items)?schema.items:[schema.items]));
+ scanArray(ourBase+'/extends', (Array.isArray(schema.extends)?schema.extends:[schema.extends]));
+ scanSchema(ourBase+'/additionalItems', schema.additionalItems);
+ scanObject(ourBase+'/properties', schema.properties);
+ scanSchema(ourBase+'/additionalProperties', schema.additionalProperties);
+ scanObject(ourBase+'/definitions', schema.definitions);
+ scanObject(ourBase+'/patternProperties', schema.patternProperties);
+ scanObject(ourBase+'/dependencies', schema.dependencies);
+ scanArray(ourBase+'/disallow', schema.disallow);
+ scanArray(ourBase+'/allOf', schema.allOf);
+ scanArray(ourBase+'/anyOf', schema.anyOf);
+ scanArray(ourBase+'/oneOf', schema.oneOf);
+ scanSchema(ourBase+'/not', schema.not);
+ }
+ function scanArray(baseuri, schemas){
+ if(!Array.isArray(schemas)) return;
+ for(var i=0; i {
+
+"use strict";
+
+
+var urilib = __nccwpck_require__(57310);
+
+var attribute = __nccwpck_require__(21415);
+var helpers = __nccwpck_require__(52417);
+var scanSchema = (__nccwpck_require__(46502).scan);
+var ValidatorResult = helpers.ValidatorResult;
+var ValidatorResultError = helpers.ValidatorResultError;
+var SchemaError = helpers.SchemaError;
+var SchemaContext = helpers.SchemaContext;
+//var anonymousBase = 'vnd.jsonschema:///';
+var anonymousBase = '/';
+
+/**
+ * Creates a new Validator object
+ * @name Validator
+ * @constructor
+ */
+var Validator = function Validator () {
+ // Allow a validator instance to override global custom formats or to have their
+ // own custom formats.
+ this.customFormats = Object.create(Validator.prototype.customFormats);
+ this.schemas = {};
+ this.unresolvedRefs = [];
+
+ // Use Object.create to make this extensible without Validator instances stepping on each other's toes.
+ this.types = Object.create(types);
+ this.attributes = Object.create(attribute.validators);
+};
+
+// Allow formats to be registered globally.
+Validator.prototype.customFormats = {};
+
+// Hint at the presence of a property
+Validator.prototype.schemas = null;
+Validator.prototype.types = null;
+Validator.prototype.attributes = null;
+Validator.prototype.unresolvedRefs = null;
+
+/**
+ * Adds a schema with a certain urn to the Validator instance.
+ * @param schema
+ * @param urn
+ * @return {Object}
+ */
+Validator.prototype.addSchema = function addSchema (schema, base) {
+ var self = this;
+ if (!schema) {
+ return null;
+ }
+ var scan = scanSchema(base||anonymousBase, schema);
+ var ourUri = base || schema.$id || schema.id;
+ for(var uri in scan.id){
+ this.schemas[uri] = scan.id[uri];
+ }
+ for(var uri in scan.ref){
+ // If this schema is already defined, it will be filtered out by the next step
+ this.unresolvedRefs.push(uri);
+ }
+ // Remove newly defined schemas from unresolvedRefs
+ this.unresolvedRefs = this.unresolvedRefs.filter(function(uri){
+ return typeof self.schemas[uri]==='undefined';
+ });
+ return this.schemas[ourUri];
+};
+
+Validator.prototype.addSubSchemaArray = function addSubSchemaArray(baseuri, schemas) {
+ if(!Array.isArray(schemas)) return;
+ for(var i=0; i", schema);
+ }
+ var subschema = helpers.objectGetPath(ctx.schemas[document], fragment.substr(1));
+ if(subschema===undefined){
+ throw new SchemaError("no such schema " + fragment + " located in <" + document + ">", schema);
+ }
+ return {subschema: subschema, switchSchema: switchSchema};
+};
+
+/**
+ * Tests whether the instance if of a certain type.
+ * @private
+ * @param instance
+ * @param schema
+ * @param options
+ * @param ctx
+ * @param type
+ * @return {boolean}
+ */
+Validator.prototype.testType = function validateType (instance, schema, options, ctx, type) {
+ if(type===undefined){
+ return;
+ }else if(type===null){
+ throw new SchemaError('Unexpected null in "type" keyword');
+ }
+ if (typeof this.types[type] == 'function') {
+ return this.types[type].call(this, instance);
+ }
+ if (type && typeof type == 'object') {
+ var res = this.validateSchema(instance, type, options, ctx);
+ return res === undefined || !(res && res.errors.length);
+ }
+ // Undefined or properties not on the list are acceptable, same as not being defined
+ return true;
+};
+
+var types = Validator.prototype.types = {};
+types.string = function testString (instance) {
+ return typeof instance == 'string';
+};
+types.number = function testNumber (instance) {
+ // isFinite returns false for NaN, Infinity, and -Infinity
+ return typeof instance == 'number' && isFinite(instance);
+};
+types.integer = function testInteger (instance) {
+ return (typeof instance == 'number') && instance % 1 === 0;
+};
+types.boolean = function testBoolean (instance) {
+ return typeof instance == 'boolean';
+};
+types.array = function testArray (instance) {
+ return Array.isArray(instance);
+};
+types['null'] = function testNull (instance) {
+ return instance === null;
+};
+types.date = function testDate (instance) {
+ return instance instanceof Date;
+};
+types.any = function testAny (instance) {
+ return true;
+};
+types.object = function testObject (instance) {
+ // TODO: fix this - see #15
+ return instance && (typeof instance === 'object') && !(Array.isArray(instance)) && !(instance instanceof Date);
+};
+
+module.exports = Validator;
+
+
+/***/ }),
+
+/***/ 32670:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+"use strict";
+
+
+// A linked list to keep track of recently-used-ness
+const Yallist = __nccwpck_require__(95948)
+
+const MAX = Symbol('max')
+const LENGTH = Symbol('length')
+const LENGTH_CALCULATOR = Symbol('lengthCalculator')
+const ALLOW_STALE = Symbol('allowStale')
+const MAX_AGE = Symbol('maxAge')
+const DISPOSE = Symbol('dispose')
+const NO_DISPOSE_ON_SET = Symbol('noDisposeOnSet')
+const LRU_LIST = Symbol('lruList')
+const CACHE = Symbol('cache')
+const UPDATE_AGE_ON_GET = Symbol('updateAgeOnGet')
+
+const naiveLength = () => 1
+
+// lruList is a yallist where the head is the youngest
+// item, and the tail is the oldest. the list contains the Hit
+// objects as the entries.
+// Each Hit object has a reference to its Yallist.Node. This
+// never changes.
+//
+// cache is a Map (or PseudoMap) that matches the keys to
+// the Yallist.Node object.
+class LRUCache {
+ constructor (options) {
+ if (typeof options === 'number')
+ options = { max: options }
+
+ if (!options)
+ options = {}
+
+ if (options.max && (typeof options.max !== 'number' || options.max < 0))
+ throw new TypeError('max must be a non-negative number')
+ // Kind of weird to have a default max of Infinity, but oh well.
+ const max = this[MAX] = options.max || Infinity
+
+ const lc = options.length || naiveLength
+ this[LENGTH_CALCULATOR] = (typeof lc !== 'function') ? naiveLength : lc
+ this[ALLOW_STALE] = options.stale || false
+ if (options.maxAge && typeof options.maxAge !== 'number')
+ throw new TypeError('maxAge must be a number')
+ this[MAX_AGE] = options.maxAge || 0
+ this[DISPOSE] = options.dispose
+ this[NO_DISPOSE_ON_SET] = options.noDisposeOnSet || false
+ this[UPDATE_AGE_ON_GET] = options.updateAgeOnGet || false
+ this.reset()
+ }
+
+ // resize the cache when the max changes.
+ set max (mL) {
+ if (typeof mL !== 'number' || mL < 0)
+ throw new TypeError('max must be a non-negative number')
+
+ this[MAX] = mL || Infinity
+ trim(this)
+ }
+ get max () {
+ return this[MAX]
+ }
+
+ set allowStale (allowStale) {
+ this[ALLOW_STALE] = !!allowStale
+ }
+ get allowStale () {
+ return this[ALLOW_STALE]
+ }
+
+ set maxAge (mA) {
+ if (typeof mA !== 'number')
+ throw new TypeError('maxAge must be a non-negative number')
+
+ this[MAX_AGE] = mA
+ trim(this)
+ }
+ get maxAge () {
+ return this[MAX_AGE]
+ }
+
+ // resize the cache when the lengthCalculator changes.
+ set lengthCalculator (lC) {
+ if (typeof lC !== 'function')
+ lC = naiveLength
+
+ if (lC !== this[LENGTH_CALCULATOR]) {
+ this[LENGTH_CALCULATOR] = lC
+ this[LENGTH] = 0
+ this[LRU_LIST].forEach(hit => {
+ hit.length = this[LENGTH_CALCULATOR](hit.value, hit.key)
+ this[LENGTH] += hit.length
+ })
+ }
+ trim(this)
+ }
+ get lengthCalculator () { return this[LENGTH_CALCULATOR] }
+
+ get length () { return this[LENGTH] }
+ get itemCount () { return this[LRU_LIST].length }
+
+ rforEach (fn, thisp) {
+ thisp = thisp || this
+ for (let walker = this[LRU_LIST].tail; walker !== null;) {
+ const prev = walker.prev
+ forEachStep(this, fn, walker, thisp)
+ walker = prev
+ }
+ }
+
+ forEach (fn, thisp) {
+ thisp = thisp || this
+ for (let walker = this[LRU_LIST].head; walker !== null;) {
+ const next = walker.next
+ forEachStep(this, fn, walker, thisp)
+ walker = next
+ }
+ }
+
+ keys () {
+ return this[LRU_LIST].toArray().map(k => k.key)
+ }
+
+ values () {
+ return this[LRU_LIST].toArray().map(k => k.value)
+ }
+
+ reset () {
+ if (this[DISPOSE] &&
+ this[LRU_LIST] &&
+ this[LRU_LIST].length) {
+ this[LRU_LIST].forEach(hit => this[DISPOSE](hit.key, hit.value))
+ }
+
+ this[CACHE] = new Map() // hash of items by key
+ this[LRU_LIST] = new Yallist() // list of items in order of use recency
+ this[LENGTH] = 0 // length of items in the list
+ }
+
+ dump () {
+ return this[LRU_LIST].map(hit =>
+ isStale(this, hit) ? false : {
+ k: hit.key,
+ v: hit.value,
+ e: hit.now + (hit.maxAge || 0)
+ }).toArray().filter(h => h)
+ }
+
+ dumpLru () {
+ return this[LRU_LIST]
+ }
+
+ set (key, value, maxAge) {
+ maxAge = maxAge || this[MAX_AGE]
+
+ if (maxAge && typeof maxAge !== 'number')
+ throw new TypeError('maxAge must be a number')
+
+ const now = maxAge ? Date.now() : 0
+ const len = this[LENGTH_CALCULATOR](value, key)
+
+ if (this[CACHE].has(key)) {
+ if (len > this[MAX]) {
+ del(this, this[CACHE].get(key))
+ return false
+ }
+
+ const node = this[CACHE].get(key)
+ const item = node.value
+
+ // dispose of the old one before overwriting
+ // split out into 2 ifs for better coverage tracking
+ if (this[DISPOSE]) {
+ if (!this[NO_DISPOSE_ON_SET])
+ this[DISPOSE](key, item.value)
+ }
+
+ item.now = now
+ item.maxAge = maxAge
+ item.value = value
+ this[LENGTH] += len - item.length
+ item.length = len
+ this.get(key)
+ trim(this)
+ return true
+ }
+
+ const hit = new Entry(key, value, len, now, maxAge)
+
+ // oversized objects fall out of cache automatically.
+ if (hit.length > this[MAX]) {
+ if (this[DISPOSE])
+ this[DISPOSE](key, value)
+
+ return false
+ }
+
+ this[LENGTH] += hit.length
+ this[LRU_LIST].unshift(hit)
+ this[CACHE].set(key, this[LRU_LIST].head)
+ trim(this)
+ return true
+ }
+
+ has (key) {
+ if (!this[CACHE].has(key)) return false
+ const hit = this[CACHE].get(key).value
+ return !isStale(this, hit)
+ }
+
+ get (key) {
+ return get(this, key, true)
+ }
+
+ peek (key) {
+ return get(this, key, false)
+ }
+
+ pop () {
+ const node = this[LRU_LIST].tail
+ if (!node)
+ return null
+
+ del(this, node)
+ return node.value
+ }
+
+ del (key) {
+ del(this, this[CACHE].get(key))
+ }
+
+ load (arr) {
+ // reset the cache
+ this.reset()
+
+ const now = Date.now()
+ // A previous serialized cache has the most recent items first
+ for (let l = arr.length - 1; l >= 0; l--) {
+ const hit = arr[l]
+ const expiresAt = hit.e || 0
+ if (expiresAt === 0)
+ // the item was created without expiration in a non aged cache
+ this.set(hit.k, hit.v)
+ else {
+ const maxAge = expiresAt - now
+ // dont add already expired items
+ if (maxAge > 0) {
+ this.set(hit.k, hit.v, maxAge)
+ }
+ }
+ }
+ }
+
+ prune () {
+ this[CACHE].forEach((value, key) => get(this, key, false))
+ }
+}
+
+const get = (self, key, doUse) => {
+ const node = self[CACHE].get(key)
+ if (node) {
+ const hit = node.value
+ if (isStale(self, hit)) {
+ del(self, node)
+ if (!self[ALLOW_STALE])
+ return undefined
+ } else {
+ if (doUse) {
+ if (self[UPDATE_AGE_ON_GET])
+ node.value.now = Date.now()
+ self[LRU_LIST].unshiftNode(node)
+ }
+ }
+ return hit.value
+ }
+}
+
+const isStale = (self, hit) => {
+ if (!hit || (!hit.maxAge && !self[MAX_AGE]))
+ return false
+
+ const diff = Date.now() - hit.now
+ return hit.maxAge ? diff > hit.maxAge
+ : self[MAX_AGE] && (diff > self[MAX_AGE])
+}
+
+const trim = self => {
+ if (self[LENGTH] > self[MAX]) {
+ for (let walker = self[LRU_LIST].tail;
+ self[LENGTH] > self[MAX] && walker !== null;) {
+ // We know that we're about to delete this one, and also
+ // what the next least recently used key will be, so just
+ // go ahead and set it now.
+ const prev = walker.prev
+ del(self, walker)
+ walker = prev
+ }
+ }
+}
+
+const del = (self, node) => {
+ if (node) {
+ const hit = node.value
+ if (self[DISPOSE])
+ self[DISPOSE](hit.key, hit.value)
+
+ self[LENGTH] -= hit.length
+ self[CACHE].delete(hit.key)
+ self[LRU_LIST].removeNode(node)
+ }
+}
+
+class Entry {
+ constructor (key, value, length, now, maxAge) {
+ this.key = key
+ this.value = value
+ this.length = length
+ this.now = now
+ this.maxAge = maxAge || 0
+ }
+}
+
+const forEachStep = (self, fn, node, thisp) => {
+ let hit = node.value
+ if (isStale(self, hit)) {
+ del(self, node)
+ if (!self[ALLOW_STALE])
+ hit = undefined
+ }
+ if (hit)
+ fn.call(thisp, hit.value, hit.key, self)
+}
+
+module.exports = LRUCache
+
+
+/***/ }),
+
+/***/ 69874:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+const ANY = Symbol('SemVer ANY')
+// hoisted class for cyclic dependency
+class Comparator {
+ static get ANY () {
+ return ANY
+ }
+
+ constructor (comp, options) {
+ options = parseOptions(options)
+
+ if (comp instanceof Comparator) {
+ if (comp.loose === !!options.loose) {
+ return comp
+ } else {
+ comp = comp.value
+ }
+ }
+
+ comp = comp.trim().split(/\s+/).join(' ')
+ debug('comparator', comp, options)
+ this.options = options
+ this.loose = !!options.loose
+ this.parse(comp)
+
+ if (this.semver === ANY) {
+ this.value = ''
+ } else {
+ this.value = this.operator + this.semver.version
+ }
+
+ debug('comp', this)
+ }
+
+ parse (comp) {
+ const r = this.options.loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR]
+ const m = comp.match(r)
+
+ if (!m) {
+ throw new TypeError(`Invalid comparator: ${comp}`)
+ }
+
+ this.operator = m[1] !== undefined ? m[1] : ''
+ if (this.operator === '=') {
+ this.operator = ''
+ }
+
+ // if it literally is just '>' or '' then allow anything.
+ if (!m[2]) {
+ this.semver = ANY
+ } else {
+ this.semver = new SemVer(m[2], this.options.loose)
+ }
+ }
+
+ toString () {
+ return this.value
+ }
+
+ test (version) {
+ debug('Comparator.test', version, this.options.loose)
+
+ if (this.semver === ANY || version === ANY) {
+ return true
+ }
+
+ if (typeof version === 'string') {
+ try {
+ version = new SemVer(version, this.options)
+ } catch (er) {
+ return false
+ }
+ }
+
+ return cmp(version, this.operator, this.semver, this.options)
+ }
+
+ intersects (comp, options) {
+ if (!(comp instanceof Comparator)) {
+ throw new TypeError('a Comparator is required')
+ }
+
+ if (this.operator === '') {
+ if (this.value === '') {
+ return true
+ }
+ return new Range(comp.value, options).test(this.value)
+ } else if (comp.operator === '') {
+ if (comp.value === '') {
+ return true
+ }
+ return new Range(this.value, options).test(comp.semver)
+ }
+
+ options = parseOptions(options)
+
+ // Special cases where nothing can possibly be lower
+ if (options.includePrerelease &&
+ (this.value === '<0.0.0-0' || comp.value === '<0.0.0-0')) {
+ return false
+ }
+ if (!options.includePrerelease &&
+ (this.value.startsWith('<0.0.0') || comp.value.startsWith('<0.0.0'))) {
+ return false
+ }
+
+ // Same direction increasing (> or >=)
+ if (this.operator.startsWith('>') && comp.operator.startsWith('>')) {
+ return true
+ }
+ // Same direction decreasing (< or <=)
+ if (this.operator.startsWith('<') && comp.operator.startsWith('<')) {
+ return true
+ }
+ // same SemVer and both sides are inclusive (<= or >=)
+ if (
+ (this.semver.version === comp.semver.version) &&
+ this.operator.includes('=') && comp.operator.includes('=')) {
+ return true
+ }
+ // opposite directions less than
+ if (cmp(this.semver, '<', comp.semver, options) &&
+ this.operator.startsWith('>') && comp.operator.startsWith('<')) {
+ return true
+ }
+ // opposite directions greater than
+ if (cmp(this.semver, '>', comp.semver, options) &&
+ this.operator.startsWith('<') && comp.operator.startsWith('>')) {
+ return true
+ }
+ return false
+ }
+}
+
+module.exports = Comparator
+
+const parseOptions = __nccwpck_require__(48985)
+const { safeRe: re, t } = __nccwpck_require__(27284)
+const cmp = __nccwpck_require__(66648)
+const debug = __nccwpck_require__(27881)
+const SemVer = __nccwpck_require__(25927)
+const Range = __nccwpck_require__(11644)
+
+
+/***/ }),
+
+/***/ 11644:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+// hoisted class for cyclic dependency
+class Range {
+ constructor (range, options) {
+ options = parseOptions(options)
+
+ if (range instanceof Range) {
+ if (
+ range.loose === !!options.loose &&
+ range.includePrerelease === !!options.includePrerelease
+ ) {
+ return range
+ } else {
+ return new Range(range.raw, options)
+ }
+ }
+
+ if (range instanceof Comparator) {
+ // just put it in the set and return
+ this.raw = range.value
+ this.set = [[range]]
+ this.format()
+ return this
+ }
+
+ this.options = options
+ this.loose = !!options.loose
+ this.includePrerelease = !!options.includePrerelease
+
+ // First reduce all whitespace as much as possible so we do not have to rely
+ // on potentially slow regexes like \s*. This is then stored and used for
+ // future error messages as well.
+ this.raw = range
+ .trim()
+ .split(/\s+/)
+ .join(' ')
+
+ // First, split on ||
+ this.set = this.raw
+ .split('||')
+ // map the range to a 2d array of comparators
+ .map(r => this.parseRange(r.trim()))
+ // throw out any comparator lists that are empty
+ // this generally means that it was not a valid range, which is allowed
+ // in loose mode, but will still throw if the WHOLE range is invalid.
+ .filter(c => c.length)
+
+ if (!this.set.length) {
+ throw new TypeError(`Invalid SemVer Range: ${this.raw}`)
+ }
+
+ // if we have any that are not the null set, throw out null sets.
+ if (this.set.length > 1) {
+ // keep the first one, in case they're all null sets
+ const first = this.set[0]
+ this.set = this.set.filter(c => !isNullSet(c[0]))
+ if (this.set.length === 0) {
+ this.set = [first]
+ } else if (this.set.length > 1) {
+ // if we have any that are *, then the range is just *
+ for (const c of this.set) {
+ if (c.length === 1 && isAny(c[0])) {
+ this.set = [c]
+ break
+ }
+ }
+ }
+ }
+
+ this.format()
+ }
+
+ format () {
+ this.range = this.set
+ .map((comps) => comps.join(' ').trim())
+ .join('||')
+ .trim()
+ return this.range
+ }
+
+ toString () {
+ return this.range
+ }
+
+ parseRange (range) {
+ // memoize range parsing for performance.
+ // this is a very hot path, and fully deterministic.
+ const memoOpts =
+ (this.options.includePrerelease && FLAG_INCLUDE_PRERELEASE) |
+ (this.options.loose && FLAG_LOOSE)
+ const memoKey = memoOpts + ':' + range
+ const cached = cache.get(memoKey)
+ if (cached) {
+ return cached
+ }
+
+ const loose = this.options.loose
+ // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4`
+ const hr = loose ? re[t.HYPHENRANGELOOSE] : re[t.HYPHENRANGE]
+ range = range.replace(hr, hyphenReplace(this.options.includePrerelease))
+ debug('hyphen replace', range)
+
+ // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5`
+ range = range.replace(re[t.COMPARATORTRIM], comparatorTrimReplace)
+ debug('comparator trim', range)
+
+ // `~ 1.2.3` => `~1.2.3`
+ range = range.replace(re[t.TILDETRIM], tildeTrimReplace)
+ debug('tilde trim', range)
+
+ // `^ 1.2.3` => `^1.2.3`
+ range = range.replace(re[t.CARETTRIM], caretTrimReplace)
+ debug('caret trim', range)
+
+ // At this point, the range is completely trimmed and
+ // ready to be split into comparators.
+
+ let rangeList = range
+ .split(' ')
+ .map(comp => parseComparator(comp, this.options))
+ .join(' ')
+ .split(/\s+/)
+ // >=0.0.0 is equivalent to *
+ .map(comp => replaceGTE0(comp, this.options))
+
+ if (loose) {
+ // in loose mode, throw out any that are not valid comparators
+ rangeList = rangeList.filter(comp => {
+ debug('loose invalid filter', comp, this.options)
+ return !!comp.match(re[t.COMPARATORLOOSE])
+ })
+ }
+ debug('range list', rangeList)
+
+ // if any comparators are the null set, then replace with JUST null set
+ // if more than one comparator, remove any * comparators
+ // also, don't include the same comparator more than once
+ const rangeMap = new Map()
+ const comparators = rangeList.map(comp => new Comparator(comp, this.options))
+ for (const comp of comparators) {
+ if (isNullSet(comp)) {
+ return [comp]
+ }
+ rangeMap.set(comp.value, comp)
+ }
+ if (rangeMap.size > 1 && rangeMap.has('')) {
+ rangeMap.delete('')
+ }
+
+ const result = [...rangeMap.values()]
+ cache.set(memoKey, result)
+ return result
+ }
+
+ intersects (range, options) {
+ if (!(range instanceof Range)) {
+ throw new TypeError('a Range is required')
+ }
+
+ return this.set.some((thisComparators) => {
+ return (
+ isSatisfiable(thisComparators, options) &&
+ range.set.some((rangeComparators) => {
+ return (
+ isSatisfiable(rangeComparators, options) &&
+ thisComparators.every((thisComparator) => {
+ return rangeComparators.every((rangeComparator) => {
+ return thisComparator.intersects(rangeComparator, options)
+ })
+ })
+ )
+ })
+ )
+ })
+ }
+
+ // if ANY of the sets match ALL of its comparators, then pass
+ test (version) {
+ if (!version) {
+ return false
+ }
+
+ if (typeof version === 'string') {
+ try {
+ version = new SemVer(version, this.options)
+ } catch (er) {
+ return false
+ }
+ }
+
+ for (let i = 0; i < this.set.length; i++) {
+ if (testSet(this.set[i], version, this.options)) {
+ return true
+ }
+ }
+ return false
+ }
+}
+
+module.exports = Range
+
+const LRU = __nccwpck_require__(32670)
+const cache = new LRU({ max: 1000 })
+
+const parseOptions = __nccwpck_require__(48985)
+const Comparator = __nccwpck_require__(69874)
+const debug = __nccwpck_require__(27881)
+const SemVer = __nccwpck_require__(25927)
+const {
+ safeRe: re,
+ t,
+ comparatorTrimReplace,
+ tildeTrimReplace,
+ caretTrimReplace,
+} = __nccwpck_require__(27284)
+const { FLAG_INCLUDE_PRERELEASE, FLAG_LOOSE } = __nccwpck_require__(40949)
+
+const isNullSet = c => c.value === '<0.0.0-0'
+const isAny = c => c.value === ''
+
+// take a set of comparators and determine whether there
+// exists a version which can satisfy it
+const isSatisfiable = (comparators, options) => {
+ let result = true
+ const remainingComparators = comparators.slice()
+ let testComparator = remainingComparators.pop()
+
+ while (result && remainingComparators.length) {
+ result = remainingComparators.every((otherComparator) => {
+ return testComparator.intersects(otherComparator, options)
+ })
+
+ testComparator = remainingComparators.pop()
+ }
+
+ return result
+}
+
+// comprised of xranges, tildes, stars, and gtlt's at this point.
+// already replaced the hyphen ranges
+// turn into a set of JUST comparators.
+const parseComparator = (comp, options) => {
+ debug('comp', comp, options)
+ comp = replaceCarets(comp, options)
+ debug('caret', comp)
+ comp = replaceTildes(comp, options)
+ debug('tildes', comp)
+ comp = replaceXRanges(comp, options)
+ debug('xrange', comp)
+ comp = replaceStars(comp, options)
+ debug('stars', comp)
+ return comp
+}
+
+const isX = id => !id || id.toLowerCase() === 'x' || id === '*'
+
+// ~, ~> --> * (any, kinda silly)
+// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0-0
+// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0-0
+// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0-0
+// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0-0
+// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0-0
+// ~0.0.1 --> >=0.0.1 <0.1.0-0
+const replaceTildes = (comp, options) => {
+ return comp
+ .trim()
+ .split(/\s+/)
+ .map((c) => replaceTilde(c, options))
+ .join(' ')
+}
+
+const replaceTilde = (comp, options) => {
+ const r = options.loose ? re[t.TILDELOOSE] : re[t.TILDE]
+ return comp.replace(r, (_, M, m, p, pr) => {
+ debug('tilde', comp, _, M, m, p, pr)
+ let ret
+
+ if (isX(M)) {
+ ret = ''
+ } else if (isX(m)) {
+ ret = `>=${M}.0.0 <${+M + 1}.0.0-0`
+ } else if (isX(p)) {
+ // ~1.2 == >=1.2.0 <1.3.0-0
+ ret = `>=${M}.${m}.0 <${M}.${+m + 1}.0-0`
+ } else if (pr) {
+ debug('replaceTilde pr', pr)
+ ret = `>=${M}.${m}.${p}-${pr
+ } <${M}.${+m + 1}.0-0`
+ } else {
+ // ~1.2.3 == >=1.2.3 <1.3.0-0
+ ret = `>=${M}.${m}.${p
+ } <${M}.${+m + 1}.0-0`
+ }
+
+ debug('tilde return', ret)
+ return ret
+ })
+}
+
+// ^ --> * (any, kinda silly)
+// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0-0
+// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0-0
+// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0-0
+// ^1.2.3 --> >=1.2.3 <2.0.0-0
+// ^1.2.0 --> >=1.2.0 <2.0.0-0
+// ^0.0.1 --> >=0.0.1 <0.0.2-0
+// ^0.1.0 --> >=0.1.0 <0.2.0-0
+const replaceCarets = (comp, options) => {
+ return comp
+ .trim()
+ .split(/\s+/)
+ .map((c) => replaceCaret(c, options))
+ .join(' ')
+}
+
+const replaceCaret = (comp, options) => {
+ debug('caret', comp, options)
+ const r = options.loose ? re[t.CARETLOOSE] : re[t.CARET]
+ const z = options.includePrerelease ? '-0' : ''
+ return comp.replace(r, (_, M, m, p, pr) => {
+ debug('caret', comp, _, M, m, p, pr)
+ let ret
+
+ if (isX(M)) {
+ ret = ''
+ } else if (isX(m)) {
+ ret = `>=${M}.0.0${z} <${+M + 1}.0.0-0`
+ } else if (isX(p)) {
+ if (M === '0') {
+ ret = `>=${M}.${m}.0${z} <${M}.${+m + 1}.0-0`
+ } else {
+ ret = `>=${M}.${m}.0${z} <${+M + 1}.0.0-0`
+ }
+ } else if (pr) {
+ debug('replaceCaret pr', pr)
+ if (M === '0') {
+ if (m === '0') {
+ ret = `>=${M}.${m}.${p}-${pr
+ } <${M}.${m}.${+p + 1}-0`
+ } else {
+ ret = `>=${M}.${m}.${p}-${pr
+ } <${M}.${+m + 1}.0-0`
+ }
+ } else {
+ ret = `>=${M}.${m}.${p}-${pr
+ } <${+M + 1}.0.0-0`
+ }
+ } else {
+ debug('no pr')
+ if (M === '0') {
+ if (m === '0') {
+ ret = `>=${M}.${m}.${p
+ }${z} <${M}.${m}.${+p + 1}-0`
+ } else {
+ ret = `>=${M}.${m}.${p
+ }${z} <${M}.${+m + 1}.0-0`
+ }
+ } else {
+ ret = `>=${M}.${m}.${p
+ } <${+M + 1}.0.0-0`
+ }
+ }
+
+ debug('caret return', ret)
+ return ret
+ })
+}
+
+const replaceXRanges = (comp, options) => {
+ debug('replaceXRanges', comp, options)
+ return comp
+ .split(/\s+/)
+ .map((c) => replaceXRange(c, options))
+ .join(' ')
+}
+
+const replaceXRange = (comp, options) => {
+ comp = comp.trim()
+ const r = options.loose ? re[t.XRANGELOOSE] : re[t.XRANGE]
+ return comp.replace(r, (ret, gtlt, M, m, p, pr) => {
+ debug('xRange', comp, ret, gtlt, M, m, p, pr)
+ const xM = isX(M)
+ const xm = xM || isX(m)
+ const xp = xm || isX(p)
+ const anyX = xp
+
+ if (gtlt === '=' && anyX) {
+ gtlt = ''
+ }
+
+ // if we're including prereleases in the match, then we need
+ // to fix this to -0, the lowest possible prerelease value
+ pr = options.includePrerelease ? '-0' : ''
+
+ if (xM) {
+ if (gtlt === '>' || gtlt === '<') {
+ // nothing is allowed
+ ret = '<0.0.0-0'
+ } else {
+ // nothing is forbidden
+ ret = '*'
+ }
+ } else if (gtlt && anyX) {
+ // we know patch is an x, because we have any x at all.
+ // replace X with 0
+ if (xm) {
+ m = 0
+ }
+ p = 0
+
+ if (gtlt === '>') {
+ // >1 => >=2.0.0
+ // >1.2 => >=1.3.0
+ gtlt = '>='
+ if (xm) {
+ M = +M + 1
+ m = 0
+ p = 0
+ } else {
+ m = +m + 1
+ p = 0
+ }
+ } else if (gtlt === '<=') {
+ // <=0.7.x is actually <0.8.0, since any 0.7.x should
+ // pass. Similarly, <=7.x is actually <8.0.0, etc.
+ gtlt = '<'
+ if (xm) {
+ M = +M + 1
+ } else {
+ m = +m + 1
+ }
+ }
+
+ if (gtlt === '<') {
+ pr = '-0'
+ }
+
+ ret = `${gtlt + M}.${m}.${p}${pr}`
+ } else if (xm) {
+ ret = `>=${M}.0.0${pr} <${+M + 1}.0.0-0`
+ } else if (xp) {
+ ret = `>=${M}.${m}.0${pr
+ } <${M}.${+m + 1}.0-0`
+ }
+
+ debug('xRange return', ret)
+
+ return ret
+ })
+}
+
+// Because * is AND-ed with everything else in the comparator,
+// and '' means "any version", just remove the *s entirely.
+const replaceStars = (comp, options) => {
+ debug('replaceStars', comp, options)
+ // Looseness is ignored here. star is always as loose as it gets!
+ return comp
+ .trim()
+ .replace(re[t.STAR], '')
+}
+
+const replaceGTE0 = (comp, options) => {
+ debug('replaceGTE0', comp, options)
+ return comp
+ .trim()
+ .replace(re[options.includePrerelease ? t.GTE0PRE : t.GTE0], '')
+}
+
+// This function is passed to string.replace(re[t.HYPHENRANGE])
+// M, m, patch, prerelease, build
+// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5
+// 1.2.3 - 3.4 => >=1.2.0 <3.5.0-0 Any 3.4.x will do
+// 1.2 - 3.4 => >=1.2.0 <3.5.0-0
+const hyphenReplace = incPr => ($0,
+ from, fM, fm, fp, fpr, fb,
+ to, tM, tm, tp, tpr, tb) => {
+ if (isX(fM)) {
+ from = ''
+ } else if (isX(fm)) {
+ from = `>=${fM}.0.0${incPr ? '-0' : ''}`
+ } else if (isX(fp)) {
+ from = `>=${fM}.${fm}.0${incPr ? '-0' : ''}`
+ } else if (fpr) {
+ from = `>=${from}`
+ } else {
+ from = `>=${from}${incPr ? '-0' : ''}`
+ }
+
+ if (isX(tM)) {
+ to = ''
+ } else if (isX(tm)) {
+ to = `<${+tM + 1}.0.0-0`
+ } else if (isX(tp)) {
+ to = `<${tM}.${+tm + 1}.0-0`
+ } else if (tpr) {
+ to = `<=${tM}.${tm}.${tp}-${tpr}`
+ } else if (incPr) {
+ to = `<${tM}.${tm}.${+tp + 1}-0`
+ } else {
+ to = `<=${to}`
+ }
+
+ return `${from} ${to}`.trim()
+}
+
+const testSet = (set, version, options) => {
+ for (let i = 0; i < set.length; i++) {
+ if (!set[i].test(version)) {
+ return false
+ }
+ }
+
+ if (version.prerelease.length && !options.includePrerelease) {
+ // Find the set of versions that are allowed to have prereleases
+ // For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0
+ // That should allow `1.2.3-pr.2` to pass.
+ // However, `1.2.4-alpha.notready` should NOT be allowed,
+ // even though it's within the range set by the comparators.
+ for (let i = 0; i < set.length; i++) {
+ debug(set[i].semver)
+ if (set[i].semver === Comparator.ANY) {
+ continue
+ }
+
+ if (set[i].semver.prerelease.length > 0) {
+ const allowed = set[i].semver
+ if (allowed.major === version.major &&
+ allowed.minor === version.minor &&
+ allowed.patch === version.patch) {
+ return true
+ }
+ }
+ }
+
+ // Version has a -pre, but it's not one of the ones we like.
+ return false
+ }
+
+ return true
+}
+
+
+/***/ }),
+
+/***/ 25927:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+const debug = __nccwpck_require__(27881)
+const { MAX_LENGTH, MAX_SAFE_INTEGER } = __nccwpck_require__(40949)
+const { safeRe: re, t } = __nccwpck_require__(27284)
+
+const parseOptions = __nccwpck_require__(48985)
+const { compareIdentifiers } = __nccwpck_require__(54943)
+class SemVer {
+ constructor (version, options) {
+ options = parseOptions(options)
+
+ if (version instanceof SemVer) {
+ if (version.loose === !!options.loose &&
+ version.includePrerelease === !!options.includePrerelease) {
+ return version
+ } else {
+ version = version.version
+ }
+ } else if (typeof version !== 'string') {
+ throw new TypeError(`Invalid version. Must be a string. Got type "${typeof version}".`)
+ }
+
+ if (version.length > MAX_LENGTH) {
+ throw new TypeError(
+ `version is longer than ${MAX_LENGTH} characters`
+ )
+ }
+
+ debug('SemVer', version, options)
+ this.options = options
+ this.loose = !!options.loose
+ // this isn't actually relevant for versions, but keep it so that we
+ // don't run into trouble passing this.options around.
+ this.includePrerelease = !!options.includePrerelease
+
+ const m = version.trim().match(options.loose ? re[t.LOOSE] : re[t.FULL])
+
+ if (!m) {
+ throw new TypeError(`Invalid Version: ${version}`)
+ }
+
+ this.raw = version
+
+ // these are actually numbers
+ this.major = +m[1]
+ this.minor = +m[2]
+ this.patch = +m[3]
+
+ if (this.major > MAX_SAFE_INTEGER || this.major < 0) {
+ throw new TypeError('Invalid major version')
+ }
+
+ if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) {
+ throw new TypeError('Invalid minor version')
+ }
+
+ if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) {
+ throw new TypeError('Invalid patch version')
+ }
+
+ // numberify any prerelease numeric ids
+ if (!m[4]) {
+ this.prerelease = []
+ } else {
+ this.prerelease = m[4].split('.').map((id) => {
+ if (/^[0-9]+$/.test(id)) {
+ const num = +id
+ if (num >= 0 && num < MAX_SAFE_INTEGER) {
+ return num
+ }
+ }
+ return id
+ })
+ }
+
+ this.build = m[5] ? m[5].split('.') : []
+ this.format()
+ }
+
+ format () {
+ this.version = `${this.major}.${this.minor}.${this.patch}`
+ if (this.prerelease.length) {
+ this.version += `-${this.prerelease.join('.')}`
+ }
+ return this.version
+ }
+
+ toString () {
+ return this.version
+ }
+
+ compare (other) {
+ debug('SemVer.compare', this.version, this.options, other)
+ if (!(other instanceof SemVer)) {
+ if (typeof other === 'string' && other === this.version) {
+ return 0
+ }
+ other = new SemVer(other, this.options)
+ }
+
+ if (other.version === this.version) {
+ return 0
+ }
+
+ return this.compareMain(other) || this.comparePre(other)
+ }
+
+ compareMain (other) {
+ if (!(other instanceof SemVer)) {
+ other = new SemVer(other, this.options)
+ }
+
+ return (
+ compareIdentifiers(this.major, other.major) ||
+ compareIdentifiers(this.minor, other.minor) ||
+ compareIdentifiers(this.patch, other.patch)
+ )
+ }
+
+ comparePre (other) {
+ if (!(other instanceof SemVer)) {
+ other = new SemVer(other, this.options)
+ }
+
+ // NOT having a prerelease is > having one
+ if (this.prerelease.length && !other.prerelease.length) {
+ return -1
+ } else if (!this.prerelease.length && other.prerelease.length) {
+ return 1
+ } else if (!this.prerelease.length && !other.prerelease.length) {
+ return 0
+ }
+
+ let i = 0
+ do {
+ const a = this.prerelease[i]
+ const b = other.prerelease[i]
+ debug('prerelease compare', i, a, b)
+ if (a === undefined && b === undefined) {
+ return 0
+ } else if (b === undefined) {
+ return 1
+ } else if (a === undefined) {
+ return -1
+ } else if (a === b) {
+ continue
+ } else {
+ return compareIdentifiers(a, b)
+ }
+ } while (++i)
+ }
+
+ compareBuild (other) {
+ if (!(other instanceof SemVer)) {
+ other = new SemVer(other, this.options)
+ }
+
+ let i = 0
+ do {
+ const a = this.build[i]
+ const b = other.build[i]
+ debug('prerelease compare', i, a, b)
+ if (a === undefined && b === undefined) {
+ return 0
+ } else if (b === undefined) {
+ return 1
+ } else if (a === undefined) {
+ return -1
+ } else if (a === b) {
+ continue
+ } else {
+ return compareIdentifiers(a, b)
+ }
+ } while (++i)
+ }
+
+ // preminor will bump the version up to the next minor release, and immediately
+ // down to pre-release. premajor and prepatch work the same way.
+ inc (release, identifier, identifierBase) {
+ switch (release) {
+ case 'premajor':
+ this.prerelease.length = 0
+ this.patch = 0
+ this.minor = 0
+ this.major++
+ this.inc('pre', identifier, identifierBase)
+ break
+ case 'preminor':
+ this.prerelease.length = 0
+ this.patch = 0
+ this.minor++
+ this.inc('pre', identifier, identifierBase)
+ break
+ case 'prepatch':
+ // If this is already a prerelease, it will bump to the next version
+ // drop any prereleases that might already exist, since they are not
+ // relevant at this point.
+ this.prerelease.length = 0
+ this.inc('patch', identifier, identifierBase)
+ this.inc('pre', identifier, identifierBase)
+ break
+ // If the input is a non-prerelease version, this acts the same as
+ // prepatch.
+ case 'prerelease':
+ if (this.prerelease.length === 0) {
+ this.inc('patch', identifier, identifierBase)
+ }
+ this.inc('pre', identifier, identifierBase)
+ break
+
+ case 'major':
+ // If this is a pre-major version, bump up to the same major version.
+ // Otherwise increment major.
+ // 1.0.0-5 bumps to 1.0.0
+ // 1.1.0 bumps to 2.0.0
+ if (
+ this.minor !== 0 ||
+ this.patch !== 0 ||
+ this.prerelease.length === 0
+ ) {
+ this.major++
+ }
+ this.minor = 0
+ this.patch = 0
+ this.prerelease = []
+ break
+ case 'minor':
+ // If this is a pre-minor version, bump up to the same minor version.
+ // Otherwise increment minor.
+ // 1.2.0-5 bumps to 1.2.0
+ // 1.2.1 bumps to 1.3.0
+ if (this.patch !== 0 || this.prerelease.length === 0) {
+ this.minor++
+ }
+ this.patch = 0
+ this.prerelease = []
+ break
+ case 'patch':
+ // If this is not a pre-release version, it will increment the patch.
+ // If it is a pre-release it will bump up to the same patch version.
+ // 1.2.0-5 patches to 1.2.0
+ // 1.2.0 patches to 1.2.1
+ if (this.prerelease.length === 0) {
+ this.patch++
+ }
+ this.prerelease = []
+ break
+ // This probably shouldn't be used publicly.
+ // 1.0.0 'pre' would become 1.0.0-0 which is the wrong direction.
+ case 'pre': {
+ const base = Number(identifierBase) ? 1 : 0
+
+ if (!identifier && identifierBase === false) {
+ throw new Error('invalid increment argument: identifier is empty')
+ }
+
+ if (this.prerelease.length === 0) {
+ this.prerelease = [base]
+ } else {
+ let i = this.prerelease.length
+ while (--i >= 0) {
+ if (typeof this.prerelease[i] === 'number') {
+ this.prerelease[i]++
+ i = -2
+ }
+ }
+ if (i === -1) {
+ // didn't increment anything
+ if (identifier === this.prerelease.join('.') && identifierBase === false) {
+ throw new Error('invalid increment argument: identifier already exists')
+ }
+ this.prerelease.push(base)
+ }
+ }
+ if (identifier) {
+ // 1.2.0-beta.1 bumps to 1.2.0-beta.2,
+ // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0
+ let prerelease = [identifier, base]
+ if (identifierBase === false) {
+ prerelease = [identifier]
+ }
+ if (compareIdentifiers(this.prerelease[0], identifier) === 0) {
+ if (isNaN(this.prerelease[1])) {
+ this.prerelease = prerelease
+ }
+ } else {
+ this.prerelease = prerelease
+ }
+ }
+ break
+ }
+ default:
+ throw new Error(`invalid increment argument: ${release}`)
+ }
+ this.raw = this.format()
+ if (this.build.length) {
+ this.raw += `+${this.build.join('.')}`
+ }
+ return this
+ }
+}
+
+module.exports = SemVer
+
+
+/***/ }),
+
+/***/ 35949:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+const parse = __nccwpck_require__(62535)
+const clean = (version, options) => {
+ const s = parse(version.trim().replace(/^[=v]+/, ''), options)
+ return s ? s.version : null
+}
+module.exports = clean
+
+
+/***/ }),
+
+/***/ 66648:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+const eq = __nccwpck_require__(43732)
+const neq = __nccwpck_require__(72135)
+const gt = __nccwpck_require__(15907)
+const gte = __nccwpck_require__(27636)
+const lt = __nccwpck_require__(91146)
+const lte = __nccwpck_require__(60912)
+
+const cmp = (a, op, b, loose) => {
+ switch (op) {
+ case '===':
+ if (typeof a === 'object') {
+ a = a.version
+ }
+ if (typeof b === 'object') {
+ b = b.version
+ }
+ return a === b
+
+ case '!==':
+ if (typeof a === 'object') {
+ a = a.version
+ }
+ if (typeof b === 'object') {
+ b = b.version
+ }
+ return a !== b
+
+ case '':
+ case '=':
+ case '==':
+ return eq(a, b, loose)
+
+ case '!=':
+ return neq(a, b, loose)
+
+ case '>':
+ return gt(a, b, loose)
+
+ case '>=':
+ return gte(a, b, loose)
+
+ case '<':
+ return lt(a, b, loose)
+
+ case '<=':
+ return lte(a, b, loose)
+
+ default:
+ throw new TypeError(`Invalid operator: ${op}`)
+ }
+}
+module.exports = cmp
+
+
+/***/ }),
+
+/***/ 71758:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+const SemVer = __nccwpck_require__(25927)
+const parse = __nccwpck_require__(62535)
+const { safeRe: re, t } = __nccwpck_require__(27284)
+
+const coerce = (version, options) => {
+ if (version instanceof SemVer) {
+ return version
+ }
+
+ if (typeof version === 'number') {
+ version = String(version)
+ }
+
+ if (typeof version !== 'string') {
+ return null
+ }
+
+ options = options || {}
+
+ let match = null
+ if (!options.rtl) {
+ match = version.match(re[t.COERCE])
+ } else {
+ // Find the right-most coercible string that does not share
+ // a terminus with a more left-ward coercible string.
+ // Eg, '1.2.3.4' wants to coerce '2.3.4', not '3.4' or '4'
+ //
+ // Walk through the string checking with a /g regexp
+ // Manually set the index so as to pick up overlapping matches.
+ // Stop when we get a match that ends at the string end, since no
+ // coercible string can be more right-ward without the same terminus.
+ let next
+ while ((next = re[t.COERCERTL].exec(version)) &&
+ (!match || match.index + match[0].length !== version.length)
+ ) {
+ if (!match ||
+ next.index + next[0].length !== match.index + match[0].length) {
+ match = next
+ }
+ re[t.COERCERTL].lastIndex = next.index + next[1].length + next[2].length
+ }
+ // leave it in a clean state
+ re[t.COERCERTL].lastIndex = -1
+ }
+
+ if (match === null) {
+ return null
+ }
+
+ return parse(`${match[2]}.${match[3] || '0'}.${match[4] || '0'}`, options)
+}
+module.exports = coerce
+
+
+/***/ }),
+
+/***/ 94084:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+const SemVer = __nccwpck_require__(25927)
+const compareBuild = (a, b, loose) => {
+ const versionA = new SemVer(a, loose)
+ const versionB = new SemVer(b, loose)
+ return versionA.compare(versionB) || versionA.compareBuild(versionB)
+}
+module.exports = compareBuild
+
+
+/***/ }),
+
+/***/ 4452:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+const compare = __nccwpck_require__(98678)
+const compareLoose = (a, b) => compare(a, b, true)
+module.exports = compareLoose
+
+
+/***/ }),
+
+/***/ 98678:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+const SemVer = __nccwpck_require__(25927)
+const compare = (a, b, loose) =>
+ new SemVer(a, loose).compare(new SemVer(b, loose))
+
+module.exports = compare
+
+
+/***/ }),
+
+/***/ 50628:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+const parse = __nccwpck_require__(62535)
+
+const diff = (version1, version2) => {
+ const v1 = parse(version1, null, true)
+ const v2 = parse(version2, null, true)
+ const comparison = v1.compare(v2)
+
+ if (comparison === 0) {
+ return null
+ }
+
+ const v1Higher = comparison > 0
+ const highVersion = v1Higher ? v1 : v2
+ const lowVersion = v1Higher ? v2 : v1
+ const highHasPre = !!highVersion.prerelease.length
+ const lowHasPre = !!lowVersion.prerelease.length
+
+ if (lowHasPre && !highHasPre) {
+ // Going from prerelease -> no prerelease requires some special casing
+
+ // If the low version has only a major, then it will always be a major
+ // Some examples:
+ // 1.0.0-1 -> 1.0.0
+ // 1.0.0-1 -> 1.1.1
+ // 1.0.0-1 -> 2.0.0
+ if (!lowVersion.patch && !lowVersion.minor) {
+ return 'major'
+ }
+
+ // Otherwise it can be determined by checking the high version
+
+ if (highVersion.patch) {
+ // anything higher than a patch bump would result in the wrong version
+ return 'patch'
+ }
+
+ if (highVersion.minor) {
+ // anything higher than a minor bump would result in the wrong version
+ return 'minor'
+ }
+
+ // bumping major/minor/patch all have same result
+ return 'major'
+ }
+
+ // add the `pre` prefix if we are going to a prerelease version
+ const prefix = highHasPre ? 'pre' : ''
+
+ if (v1.major !== v2.major) {
+ return prefix + 'major'
+ }
+
+ if (v1.minor !== v2.minor) {
+ return prefix + 'minor'
+ }
+
+ if (v1.patch !== v2.patch) {
+ return prefix + 'patch'
+ }
+
+ // high and low are preleases
+ return 'prerelease'
+}
+
+module.exports = diff
+
+
+/***/ }),
+
+/***/ 43732:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+const compare = __nccwpck_require__(98678)
+const eq = (a, b, loose) => compare(a, b, loose) === 0
+module.exports = eq
+
+
+/***/ }),
+
+/***/ 15907:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+const compare = __nccwpck_require__(98678)
+const gt = (a, b, loose) => compare(a, b, loose) > 0
+module.exports = gt
+
+
+/***/ }),
+
+/***/ 27636:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+const compare = __nccwpck_require__(98678)
+const gte = (a, b, loose) => compare(a, b, loose) >= 0
+module.exports = gte
+
+
+/***/ }),
+
+/***/ 76131:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+const SemVer = __nccwpck_require__(25927)
+
+const inc = (version, release, options, identifier, identifierBase) => {
+ if (typeof (options) === 'string') {
+ identifierBase = identifier
+ identifier = options
+ options = undefined
+ }
+
+ try {
+ return new SemVer(
+ version instanceof SemVer ? version.version : version,
+ options
+ ).inc(release, identifier, identifierBase).version
+ } catch (er) {
+ return null
+ }
+}
+module.exports = inc
+
+
+/***/ }),
+
+/***/ 91146:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+const compare = __nccwpck_require__(98678)
+const lt = (a, b, loose) => compare(a, b, loose) < 0
+module.exports = lt
+
+
+/***/ }),
+
+/***/ 60912:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+const compare = __nccwpck_require__(98678)
+const lte = (a, b, loose) => compare(a, b, loose) <= 0
+module.exports = lte
+
+
+/***/ }),
+
+/***/ 75917:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+const SemVer = __nccwpck_require__(25927)
+const major = (a, loose) => new SemVer(a, loose).major
+module.exports = major
+
+
+/***/ }),
+
+/***/ 21811:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+const SemVer = __nccwpck_require__(25927)
+const minor = (a, loose) => new SemVer(a, loose).minor
+module.exports = minor
+
+
+/***/ }),
+
+/***/ 72135:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+const compare = __nccwpck_require__(98678)
+const neq = (a, b, loose) => compare(a, b, loose) !== 0
+module.exports = neq
+
+
+/***/ }),
+
+/***/ 62535:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+const SemVer = __nccwpck_require__(25927)
+const parse = (version, options, throwErrors = false) => {
+ if (version instanceof SemVer) {
+ return version
+ }
+ try {
+ return new SemVer(version, options)
+ } catch (er) {
+ if (!throwErrors) {
+ return null
+ }
+ throw er
+ }
+}
+
+module.exports = parse
+
+
+/***/ }),
+
+/***/ 70978:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+const SemVer = __nccwpck_require__(25927)
+const patch = (a, loose) => new SemVer(a, loose).patch
+module.exports = patch
+
+
+/***/ }),
+
+/***/ 90229:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+const parse = __nccwpck_require__(62535)
+const prerelease = (version, options) => {
+ const parsed = parse(version, options)
+ return (parsed && parsed.prerelease.length) ? parsed.prerelease : null
+}
+module.exports = prerelease
+
+
+/***/ }),
+
+/***/ 19736:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+const compare = __nccwpck_require__(98678)
+const rcompare = (a, b, loose) => compare(b, a, loose)
+module.exports = rcompare
+
+
+/***/ }),
+
+/***/ 23183:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+const compareBuild = __nccwpck_require__(94084)
+const rsort = (list, loose) => list.sort((a, b) => compareBuild(b, a, loose))
+module.exports = rsort
+
+
+/***/ }),
+
+/***/ 2961:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+const Range = __nccwpck_require__(11644)
+const satisfies = (version, range, options) => {
+ try {
+ range = new Range(range, options)
+ } catch (er) {
+ return false
+ }
+ return range.test(version)
+}
+module.exports = satisfies
+
+
+/***/ }),
+
+/***/ 30272:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+const compareBuild = __nccwpck_require__(94084)
+const sort = (list, loose) => list.sort((a, b) => compareBuild(a, b, loose))
+module.exports = sort
+
+
+/***/ }),
+
+/***/ 2465:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+const parse = __nccwpck_require__(62535)
+const valid = (version, options) => {
+ const v = parse(version, options)
+ return v ? v.version : null
+}
+module.exports = valid
+
+
+/***/ }),
+
+/***/ 3179:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+// just pre-load all the stuff that index.js lazily exports
+const internalRe = __nccwpck_require__(27284)
+const constants = __nccwpck_require__(40949)
+const SemVer = __nccwpck_require__(25927)
+const identifiers = __nccwpck_require__(54943)
+const parse = __nccwpck_require__(62535)
+const valid = __nccwpck_require__(2465)
+const clean = __nccwpck_require__(35949)
+const inc = __nccwpck_require__(76131)
+const diff = __nccwpck_require__(50628)
+const major = __nccwpck_require__(75917)
+const minor = __nccwpck_require__(21811)
+const patch = __nccwpck_require__(70978)
+const prerelease = __nccwpck_require__(90229)
+const compare = __nccwpck_require__(98678)
+const rcompare = __nccwpck_require__(19736)
+const compareLoose = __nccwpck_require__(4452)
+const compareBuild = __nccwpck_require__(94084)
+const sort = __nccwpck_require__(30272)
+const rsort = __nccwpck_require__(23183)
+const gt = __nccwpck_require__(15907)
+const lt = __nccwpck_require__(91146)
+const eq = __nccwpck_require__(43732)
+const neq = __nccwpck_require__(72135)
+const gte = __nccwpck_require__(27636)
+const lte = __nccwpck_require__(60912)
+const cmp = __nccwpck_require__(66648)
+const coerce = __nccwpck_require__(71758)
+const Comparator = __nccwpck_require__(69874)
+const Range = __nccwpck_require__(11644)
+const satisfies = __nccwpck_require__(2961)
+const toComparators = __nccwpck_require__(77277)
+const maxSatisfying = __nccwpck_require__(93508)
+const minSatisfying = __nccwpck_require__(57225)
+const minVersion = __nccwpck_require__(76697)
+const validRange = __nccwpck_require__(93156)
+const outside = __nccwpck_require__(65946)
+const gtr = __nccwpck_require__(5262)
+const ltr = __nccwpck_require__(31037)
+const intersects = __nccwpck_require__(52372)
+const simplifyRange = __nccwpck_require__(29434)
+const subset = __nccwpck_require__(23770)
+module.exports = {
+ parse,
+ valid,
+ clean,
+ inc,
+ diff,
+ major,
+ minor,
+ patch,
+ prerelease,
+ compare,
+ rcompare,
+ compareLoose,
+ compareBuild,
+ sort,
+ rsort,
+ gt,
+ lt,
+ eq,
+ neq,
+ gte,
+ lte,
+ cmp,
+ coerce,
+ Comparator,
+ Range,
+ satisfies,
+ toComparators,
+ maxSatisfying,
+ minSatisfying,
+ minVersion,
+ validRange,
+ outside,
+ gtr,
+ ltr,
+ intersects,
+ simplifyRange,
+ subset,
+ SemVer,
+ re: internalRe.re,
+ src: internalRe.src,
+ tokens: internalRe.t,
+ SEMVER_SPEC_VERSION: constants.SEMVER_SPEC_VERSION,
+ RELEASE_TYPES: constants.RELEASE_TYPES,
+ compareIdentifiers: identifiers.compareIdentifiers,
+ rcompareIdentifiers: identifiers.rcompareIdentifiers,
+}
+
+
+/***/ }),
+
+/***/ 40949:
+/***/ ((module) => {
+
+// Note: this is the semver.org version of the spec that it implements
+// Not necessarily the package version of this code.
+const SEMVER_SPEC_VERSION = '2.0.0'
+
+const MAX_LENGTH = 256
+const MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER ||
+/* istanbul ignore next */ 9007199254740991
+
+// Max safe segment length for coercion.
+const MAX_SAFE_COMPONENT_LENGTH = 16
+
+// Max safe length for a build identifier. The max length minus 6 characters for
+// the shortest version with a build 0.0.0+BUILD.
+const MAX_SAFE_BUILD_LENGTH = MAX_LENGTH - 6
+
+const RELEASE_TYPES = [
+ 'major',
+ 'premajor',
+ 'minor',
+ 'preminor',
+ 'patch',
+ 'prepatch',
+ 'prerelease',
+]
+
+module.exports = {
+ MAX_LENGTH,
+ MAX_SAFE_COMPONENT_LENGTH,
+ MAX_SAFE_BUILD_LENGTH,
+ MAX_SAFE_INTEGER,
+ RELEASE_TYPES,
+ SEMVER_SPEC_VERSION,
+ FLAG_INCLUDE_PRERELEASE: 0b001,
+ FLAG_LOOSE: 0b010,
+}
+
+
+/***/ }),
+
+/***/ 27881:
+/***/ ((module) => {
+
+const debug = (
+ typeof process === 'object' &&
+ process.env &&
+ process.env.NODE_DEBUG &&
+ /\bsemver\b/i.test(process.env.NODE_DEBUG)
+) ? (...args) => console.error('SEMVER', ...args)
+ : () => {}
+
+module.exports = debug
+
+
+/***/ }),
+
+/***/ 54943:
+/***/ ((module) => {
+
+const numeric = /^[0-9]+$/
+const compareIdentifiers = (a, b) => {
+ const anum = numeric.test(a)
+ const bnum = numeric.test(b)
+
+ if (anum && bnum) {
+ a = +a
+ b = +b
+ }
+
+ return a === b ? 0
+ : (anum && !bnum) ? -1
+ : (bnum && !anum) ? 1
+ : a < b ? -1
+ : 1
+}
+
+const rcompareIdentifiers = (a, b) => compareIdentifiers(b, a)
+
+module.exports = {
+ compareIdentifiers,
+ rcompareIdentifiers,
+}
+
+
+/***/ }),
+
+/***/ 48985:
+/***/ ((module) => {
+
+// parse out just the options we care about
+const looseOption = Object.freeze({ loose: true })
+const emptyOpts = Object.freeze({ })
+const parseOptions = options => {
+ if (!options) {
+ return emptyOpts
+ }
+
+ if (typeof options !== 'object') {
+ return looseOption
+ }
+
+ return options
+}
+module.exports = parseOptions
+
+
+/***/ }),
+
+/***/ 27284:
+/***/ ((module, exports, __nccwpck_require__) => {
+
+const {
+ MAX_SAFE_COMPONENT_LENGTH,
+ MAX_SAFE_BUILD_LENGTH,
+ MAX_LENGTH,
+} = __nccwpck_require__(40949)
+const debug = __nccwpck_require__(27881)
+exports = module.exports = {}
+
+// The actual regexps go on exports.re
+const re = exports.re = []
+const safeRe = exports.safeRe = []
+const src = exports.src = []
+const t = exports.t = {}
+let R = 0
+
+const LETTERDASHNUMBER = '[a-zA-Z0-9-]'
+
+// Replace some greedy regex tokens to prevent regex dos issues. These regex are
+// used internally via the safeRe object since all inputs in this library get
+// normalized first to trim and collapse all extra whitespace. The original
+// regexes are exported for userland consumption and lower level usage. A
+// future breaking change could export the safer regex only with a note that
+// all input should have extra whitespace removed.
+const safeRegexReplacements = [
+ ['\\s', 1],
+ ['\\d', MAX_LENGTH],
+ [LETTERDASHNUMBER, MAX_SAFE_BUILD_LENGTH],
+]
+
+const makeSafeRegex = (value) => {
+ for (const [token, max] of safeRegexReplacements) {
+ value = value
+ .split(`${token}*`).join(`${token}{0,${max}}`)
+ .split(`${token}+`).join(`${token}{1,${max}}`)
+ }
+ return value
+}
+
+const createToken = (name, value, isGlobal) => {
+ const safe = makeSafeRegex(value)
+ const index = R++
+ debug(name, index, value)
+ t[name] = index
+ src[index] = value
+ re[index] = new RegExp(value, isGlobal ? 'g' : undefined)
+ safeRe[index] = new RegExp(safe, isGlobal ? 'g' : undefined)
+}
+
+// The following Regular Expressions can be used for tokenizing,
+// validating, and parsing SemVer version strings.
+
+// ## Numeric Identifier
+// A single `0`, or a non-zero digit followed by zero or more digits.
+
+createToken('NUMERICIDENTIFIER', '0|[1-9]\\d*')
+createToken('NUMERICIDENTIFIERLOOSE', '\\d+')
+
+// ## Non-numeric Identifier
+// Zero or more digits, followed by a letter or hyphen, and then zero or
+// more letters, digits, or hyphens.
+
+createToken('NONNUMERICIDENTIFIER', `\\d*[a-zA-Z-]${LETTERDASHNUMBER}*`)
+
+// ## Main Version
+// Three dot-separated numeric identifiers.
+
+createToken('MAINVERSION', `(${src[t.NUMERICIDENTIFIER]})\\.` +
+ `(${src[t.NUMERICIDENTIFIER]})\\.` +
+ `(${src[t.NUMERICIDENTIFIER]})`)
+
+createToken('MAINVERSIONLOOSE', `(${src[t.NUMERICIDENTIFIERLOOSE]})\\.` +
+ `(${src[t.NUMERICIDENTIFIERLOOSE]})\\.` +
+ `(${src[t.NUMERICIDENTIFIERLOOSE]})`)
+
+// ## Pre-release Version Identifier
+// A numeric identifier, or a non-numeric identifier.
+
+createToken('PRERELEASEIDENTIFIER', `(?:${src[t.NUMERICIDENTIFIER]
+}|${src[t.NONNUMERICIDENTIFIER]})`)
+
+createToken('PRERELEASEIDENTIFIERLOOSE', `(?:${src[t.NUMERICIDENTIFIERLOOSE]
+}|${src[t.NONNUMERICIDENTIFIER]})`)
+
+// ## Pre-release Version
+// Hyphen, followed by one or more dot-separated pre-release version
+// identifiers.
+
+createToken('PRERELEASE', `(?:-(${src[t.PRERELEASEIDENTIFIER]
+}(?:\\.${src[t.PRERELEASEIDENTIFIER]})*))`)
+
+createToken('PRERELEASELOOSE', `(?:-?(${src[t.PRERELEASEIDENTIFIERLOOSE]
+}(?:\\.${src[t.PRERELEASEIDENTIFIERLOOSE]})*))`)
+
+// ## Build Metadata Identifier
+// Any combination of digits, letters, or hyphens.
+
+createToken('BUILDIDENTIFIER', `${LETTERDASHNUMBER}+`)
+
+// ## Build Metadata
+// Plus sign, followed by one or more period-separated build metadata
+// identifiers.
+
+createToken('BUILD', `(?:\\+(${src[t.BUILDIDENTIFIER]
+}(?:\\.${src[t.BUILDIDENTIFIER]})*))`)
+
+// ## Full Version String
+// A main version, followed optionally by a pre-release version and
+// build metadata.
+
+// Note that the only major, minor, patch, and pre-release sections of
+// the version string are capturing groups. The build metadata is not a
+// capturing group, because it should not ever be used in version
+// comparison.
+
+createToken('FULLPLAIN', `v?${src[t.MAINVERSION]
+}${src[t.PRERELEASE]}?${
+ src[t.BUILD]}?`)
+
+createToken('FULL', `^${src[t.FULLPLAIN]}$`)
+
+// like full, but allows v1.2.3 and =1.2.3, which people do sometimes.
+// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty
+// common in the npm registry.
+createToken('LOOSEPLAIN', `[v=\\s]*${src[t.MAINVERSIONLOOSE]
+}${src[t.PRERELEASELOOSE]}?${
+ src[t.BUILD]}?`)
+
+createToken('LOOSE', `^${src[t.LOOSEPLAIN]}$`)
+
+createToken('GTLT', '((?:<|>)?=?)')
+
+// Something like "2.*" or "1.2.x".
+// Note that "x.x" is a valid xRange identifer, meaning "any version"
+// Only the first item is strictly required.
+createToken('XRANGEIDENTIFIERLOOSE', `${src[t.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`)
+createToken('XRANGEIDENTIFIER', `${src[t.NUMERICIDENTIFIER]}|x|X|\\*`)
+
+createToken('XRANGEPLAIN', `[v=\\s]*(${src[t.XRANGEIDENTIFIER]})` +
+ `(?:\\.(${src[t.XRANGEIDENTIFIER]})` +
+ `(?:\\.(${src[t.XRANGEIDENTIFIER]})` +
+ `(?:${src[t.PRERELEASE]})?${
+ src[t.BUILD]}?` +
+ `)?)?`)
+
+createToken('XRANGEPLAINLOOSE', `[v=\\s]*(${src[t.XRANGEIDENTIFIERLOOSE]})` +
+ `(?:\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` +
+ `(?:\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` +
+ `(?:${src[t.PRERELEASELOOSE]})?${
+ src[t.BUILD]}?` +
+ `)?)?`)
+
+createToken('XRANGE', `^${src[t.GTLT]}\\s*${src[t.XRANGEPLAIN]}$`)
+createToken('XRANGELOOSE', `^${src[t.GTLT]}\\s*${src[t.XRANGEPLAINLOOSE]}$`)
+
+// Coercion.
+// Extract anything that could conceivably be a part of a valid semver
+createToken('COERCE', `${'(^|[^\\d])' +
+ '(\\d{1,'}${MAX_SAFE_COMPONENT_LENGTH}})` +
+ `(?:\\.(\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?` +
+ `(?:\\.(\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?` +
+ `(?:$|[^\\d])`)
+createToken('COERCERTL', src[t.COERCE], true)
+
+// Tilde ranges.
+// Meaning is "reasonably at or greater than"
+createToken('LONETILDE', '(?:~>?)')
+
+createToken('TILDETRIM', `(\\s*)${src[t.LONETILDE]}\\s+`, true)
+exports.tildeTrimReplace = '$1~'
+
+createToken('TILDE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAIN]}$`)
+createToken('TILDELOOSE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAINLOOSE]}$`)
+
+// Caret ranges.
+// Meaning is "at least and backwards compatible with"
+createToken('LONECARET', '(?:\\^)')
+
+createToken('CARETTRIM', `(\\s*)${src[t.LONECARET]}\\s+`, true)
+exports.caretTrimReplace = '$1^'
+
+createToken('CARET', `^${src[t.LONECARET]}${src[t.XRANGEPLAIN]}$`)
+createToken('CARETLOOSE', `^${src[t.LONECARET]}${src[t.XRANGEPLAINLOOSE]}$`)
+
+// A simple gt/lt/eq thing, or just "" to indicate "any version"
+createToken('COMPARATORLOOSE', `^${src[t.GTLT]}\\s*(${src[t.LOOSEPLAIN]})$|^$`)
+createToken('COMPARATOR', `^${src[t.GTLT]}\\s*(${src[t.FULLPLAIN]})$|^$`)
+
+// An expression to strip any whitespace between the gtlt and the thing
+// it modifies, so that `> 1.2.3` ==> `>1.2.3`
+createToken('COMPARATORTRIM', `(\\s*)${src[t.GTLT]
+}\\s*(${src[t.LOOSEPLAIN]}|${src[t.XRANGEPLAIN]})`, true)
+exports.comparatorTrimReplace = '$1$2$3'
+
+// Something like `1.2.3 - 1.2.4`
+// Note that these all use the loose form, because they'll be
+// checked against either the strict or loose comparator form
+// later.
+createToken('HYPHENRANGE', `^\\s*(${src[t.XRANGEPLAIN]})` +
+ `\\s+-\\s+` +
+ `(${src[t.XRANGEPLAIN]})` +
+ `\\s*$`)
+
+createToken('HYPHENRANGELOOSE', `^\\s*(${src[t.XRANGEPLAINLOOSE]})` +
+ `\\s+-\\s+` +
+ `(${src[t.XRANGEPLAINLOOSE]})` +
+ `\\s*$`)
+
+// Star ranges basically just allow anything at all.
+createToken('STAR', '(<|>)?=?\\s*\\*')
+// >=0.0.0 is like a star
+createToken('GTE0', '^\\s*>=\\s*0\\.0\\.0\\s*$')
+createToken('GTE0PRE', '^\\s*>=\\s*0\\.0\\.0-0\\s*$')
+
+
+/***/ }),
+
+/***/ 5262:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+// Determine if version is greater than all the versions possible in the range.
+const outside = __nccwpck_require__(65946)
+const gtr = (version, range, options) => outside(version, range, '>', options)
+module.exports = gtr
+
+
+/***/ }),
+
+/***/ 52372:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+const Range = __nccwpck_require__(11644)
+const intersects = (r1, r2, options) => {
+ r1 = new Range(r1, options)
+ r2 = new Range(r2, options)
+ return r1.intersects(r2, options)
+}
+module.exports = intersects
+
+
+/***/ }),
+
+/***/ 31037:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+const outside = __nccwpck_require__(65946)
+// Determine if version is less than all the versions possible in the range
+const ltr = (version, range, options) => outside(version, range, '<', options)
+module.exports = ltr
+
+
+/***/ }),
+
+/***/ 93508:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+const SemVer = __nccwpck_require__(25927)
+const Range = __nccwpck_require__(11644)
+
+const maxSatisfying = (versions, range, options) => {
+ let max = null
+ let maxSV = null
+ let rangeObj = null
+ try {
+ rangeObj = new Range(range, options)
+ } catch (er) {
+ return null
+ }
+ versions.forEach((v) => {
+ if (rangeObj.test(v)) {
+ // satisfies(v, range, options)
+ if (!max || maxSV.compare(v) === -1) {
+ // compare(max, v, true)
+ max = v
+ maxSV = new SemVer(max, options)
+ }
+ }
+ })
+ return max
+}
+module.exports = maxSatisfying
+
+
+/***/ }),
+
+/***/ 57225:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+const SemVer = __nccwpck_require__(25927)
+const Range = __nccwpck_require__(11644)
+const minSatisfying = (versions, range, options) => {
+ let min = null
+ let minSV = null
+ let rangeObj = null
+ try {
+ rangeObj = new Range(range, options)
+ } catch (er) {
+ return null
+ }
+ versions.forEach((v) => {
+ if (rangeObj.test(v)) {
+ // satisfies(v, range, options)
+ if (!min || minSV.compare(v) === 1) {
+ // compare(min, v, true)
+ min = v
+ minSV = new SemVer(min, options)
+ }
+ }
+ })
+ return min
+}
+module.exports = minSatisfying
+
+
+/***/ }),
+
+/***/ 76697:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+const SemVer = __nccwpck_require__(25927)
+const Range = __nccwpck_require__(11644)
+const gt = __nccwpck_require__(15907)
+
+const minVersion = (range, loose) => {
+ range = new Range(range, loose)
+
+ let minver = new SemVer('0.0.0')
+ if (range.test(minver)) {
+ return minver
+ }
+
+ minver = new SemVer('0.0.0-0')
+ if (range.test(minver)) {
+ return minver
+ }
+
+ minver = null
+ for (let i = 0; i < range.set.length; ++i) {
+ const comparators = range.set[i]
+
+ let setMin = null
+ comparators.forEach((comparator) => {
+ // Clone to avoid manipulating the comparator's semver object.
+ const compver = new SemVer(comparator.semver.version)
+ switch (comparator.operator) {
+ case '>':
+ if (compver.prerelease.length === 0) {
+ compver.patch++
+ } else {
+ compver.prerelease.push(0)
+ }
+ compver.raw = compver.format()
+ /* fallthrough */
+ case '':
+ case '>=':
+ if (!setMin || gt(compver, setMin)) {
+ setMin = compver
+ }
+ break
+ case '<':
+ case '<=':
+ /* Ignore maximum versions */
+ break
+ /* istanbul ignore next */
+ default:
+ throw new Error(`Unexpected operation: ${comparator.operator}`)
+ }
+ })
+ if (setMin && (!minver || gt(minver, setMin))) {
+ minver = setMin
+ }
+ }
+
+ if (minver && range.test(minver)) {
+ return minver
+ }
+
+ return null
+}
+module.exports = minVersion
+
+
+/***/ }),
+
+/***/ 65946:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+const SemVer = __nccwpck_require__(25927)
+const Comparator = __nccwpck_require__(69874)
+const { ANY } = Comparator
+const Range = __nccwpck_require__(11644)
+const satisfies = __nccwpck_require__(2961)
+const gt = __nccwpck_require__(15907)
+const lt = __nccwpck_require__(91146)
+const lte = __nccwpck_require__(60912)
+const gte = __nccwpck_require__(27636)
+
+const outside = (version, range, hilo, options) => {
+ version = new SemVer(version, options)
+ range = new Range(range, options)
+
+ let gtfn, ltefn, ltfn, comp, ecomp
+ switch (hilo) {
+ case '>':
+ gtfn = gt
+ ltefn = lte
+ ltfn = lt
+ comp = '>'
+ ecomp = '>='
+ break
+ case '<':
+ gtfn = lt
+ ltefn = gte
+ ltfn = gt
+ comp = '<'
+ ecomp = '<='
+ break
+ default:
+ throw new TypeError('Must provide a hilo val of "<" or ">"')
+ }
+
+ // If it satisfies the range it is not outside
+ if (satisfies(version, range, options)) {
+ return false
+ }
+
+ // From now on, variable terms are as if we're in "gtr" mode.
+ // but note that everything is flipped for the "ltr" function.
+
+ for (let i = 0; i < range.set.length; ++i) {
+ const comparators = range.set[i]
+
+ let high = null
+ let low = null
+
+ comparators.forEach((comparator) => {
+ if (comparator.semver === ANY) {
+ comparator = new Comparator('>=0.0.0')
+ }
+ high = high || comparator
+ low = low || comparator
+ if (gtfn(comparator.semver, high.semver, options)) {
+ high = comparator
+ } else if (ltfn(comparator.semver, low.semver, options)) {
+ low = comparator
+ }
+ })
+
+ // If the edge version comparator has a operator then our version
+ // isn't outside it
+ if (high.operator === comp || high.operator === ecomp) {
+ return false
+ }
+
+ // If the lowest version comparator has an operator and our version
+ // is less than it then it isn't higher than the range
+ if ((!low.operator || low.operator === comp) &&
+ ltefn(version, low.semver)) {
+ return false
+ } else if (low.operator === ecomp && ltfn(version, low.semver)) {
+ return false
+ }
+ }
+ return true
+}
+
+module.exports = outside
+
+
+/***/ }),
+
+/***/ 29434:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+// given a set of versions and a range, create a "simplified" range
+// that includes the same versions that the original range does
+// If the original range is shorter than the simplified one, return that.
+const satisfies = __nccwpck_require__(2961)
+const compare = __nccwpck_require__(98678)
+module.exports = (versions, range, options) => {
+ const set = []
+ let first = null
+ let prev = null
+ const v = versions.sort((a, b) => compare(a, b, options))
+ for (const version of v) {
+ const included = satisfies(version, range, options)
+ if (included) {
+ prev = version
+ if (!first) {
+ first = version
+ }
+ } else {
+ if (prev) {
+ set.push([first, prev])
+ }
+ prev = null
+ first = null
+ }
+ }
+ if (first) {
+ set.push([first, null])
+ }
+
+ const ranges = []
+ for (const [min, max] of set) {
+ if (min === max) {
+ ranges.push(min)
+ } else if (!max && min === v[0]) {
+ ranges.push('*')
+ } else if (!max) {
+ ranges.push(`>=${min}`)
+ } else if (min === v[0]) {
+ ranges.push(`<=${max}`)
+ } else {
+ ranges.push(`${min} - ${max}`)
+ }
+ }
+ const simplified = ranges.join(' || ')
+ const original = typeof range.raw === 'string' ? range.raw : String(range)
+ return simplified.length < original.length ? simplified : range
+}
+
+
+/***/ }),
+
+/***/ 23770:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+const Range = __nccwpck_require__(11644)
+const Comparator = __nccwpck_require__(69874)
+const { ANY } = Comparator
+const satisfies = __nccwpck_require__(2961)
+const compare = __nccwpck_require__(98678)
+
+// Complex range `r1 || r2 || ...` is a subset of `R1 || R2 || ...` iff:
+// - Every simple range `r1, r2, ...` is a null set, OR
+// - Every simple range `r1, r2, ...` which is not a null set is a subset of
+// some `R1, R2, ...`
+//
+// Simple range `c1 c2 ...` is a subset of simple range `C1 C2 ...` iff:
+// - If c is only the ANY comparator
+// - If C is only the ANY comparator, return true
+// - Else if in prerelease mode, return false
+// - else replace c with `[>=0.0.0]`
+// - If C is only the ANY comparator
+// - if in prerelease mode, return true
+// - else replace C with `[>=0.0.0]`
+// - Let EQ be the set of = comparators in c
+// - If EQ is more than one, return true (null set)
+// - Let GT be the highest > or >= comparator in c
+// - Let LT be the lowest < or <= comparator in c
+// - If GT and LT, and GT.semver > LT.semver, return true (null set)
+// - If any C is a = range, and GT or LT are set, return false
+// - If EQ
+// - If GT, and EQ does not satisfy GT, return true (null set)
+// - If LT, and EQ does not satisfy LT, return true (null set)
+// - If EQ satisfies every C, return true
+// - Else return false
+// - If GT
+// - If GT.semver is lower than any > or >= comp in C, return false
+// - If GT is >=, and GT.semver does not satisfy every C, return false
+// - If GT.semver has a prerelease, and not in prerelease mode
+// - If no C has a prerelease and the GT.semver tuple, return false
+// - If LT
+// - If LT.semver is greater than any < or <= comp in C, return false
+// - If LT is <=, and LT.semver does not satisfy every C, return false
+// - If GT.semver has a prerelease, and not in prerelease mode
+// - If no C has a prerelease and the LT.semver tuple, return false
+// - Else return true
+
+const subset = (sub, dom, options = {}) => {
+ if (sub === dom) {
+ return true
+ }
+
+ sub = new Range(sub, options)
+ dom = new Range(dom, options)
+ let sawNonNull = false
+
+ OUTER: for (const simpleSub of sub.set) {
+ for (const simpleDom of dom.set) {
+ const isSub = simpleSubset(simpleSub, simpleDom, options)
+ sawNonNull = sawNonNull || isSub !== null
+ if (isSub) {
+ continue OUTER
+ }
+ }
+ // the null set is a subset of everything, but null simple ranges in
+ // a complex range should be ignored. so if we saw a non-null range,
+ // then we know this isn't a subset, but if EVERY simple range was null,
+ // then it is a subset.
+ if (sawNonNull) {
+ return false
+ }
+ }
+ return true
+}
+
+const minimumVersionWithPreRelease = [new Comparator('>=0.0.0-0')]
+const minimumVersion = [new Comparator('>=0.0.0')]
+
+const simpleSubset = (sub, dom, options) => {
+ if (sub === dom) {
+ return true
+ }
+
+ if (sub.length === 1 && sub[0].semver === ANY) {
+ if (dom.length === 1 && dom[0].semver === ANY) {
+ return true
+ } else if (options.includePrerelease) {
+ sub = minimumVersionWithPreRelease
+ } else {
+ sub = minimumVersion
+ }
+ }
+
+ if (dom.length === 1 && dom[0].semver === ANY) {
+ if (options.includePrerelease) {
+ return true
+ } else {
+ dom = minimumVersion
+ }
+ }
+
+ const eqSet = new Set()
+ let gt, lt
+ for (const c of sub) {
+ if (c.operator === '>' || c.operator === '>=') {
+ gt = higherGT(gt, c, options)
+ } else if (c.operator === '<' || c.operator === '<=') {
+ lt = lowerLT(lt, c, options)
+ } else {
+ eqSet.add(c.semver)
+ }
+ }
+
+ if (eqSet.size > 1) {
+ return null
+ }
+
+ let gtltComp
+ if (gt && lt) {
+ gtltComp = compare(gt.semver, lt.semver, options)
+ if (gtltComp > 0) {
+ return null
+ } else if (gtltComp === 0 && (gt.operator !== '>=' || lt.operator !== '<=')) {
+ return null
+ }
+ }
+
+ // will iterate one or zero times
+ for (const eq of eqSet) {
+ if (gt && !satisfies(eq, String(gt), options)) {
+ return null
+ }
+
+ if (lt && !satisfies(eq, String(lt), options)) {
+ return null
+ }
+
+ for (const c of dom) {
+ if (!satisfies(eq, String(c), options)) {
+ return false
+ }
+ }
+
+ return true
+ }
+
+ let higher, lower
+ let hasDomLT, hasDomGT
+ // if the subset has a prerelease, we need a comparator in the superset
+ // with the same tuple and a prerelease, or it's not a subset
+ let needDomLTPre = lt &&
+ !options.includePrerelease &&
+ lt.semver.prerelease.length ? lt.semver : false
+ let needDomGTPre = gt &&
+ !options.includePrerelease &&
+ gt.semver.prerelease.length ? gt.semver : false
+ // exception: <1.2.3-0 is the same as <1.2.3
+ if (needDomLTPre && needDomLTPre.prerelease.length === 1 &&
+ lt.operator === '<' && needDomLTPre.prerelease[0] === 0) {
+ needDomLTPre = false
+ }
+
+ for (const c of dom) {
+ hasDomGT = hasDomGT || c.operator === '>' || c.operator === '>='
+ hasDomLT = hasDomLT || c.operator === '<' || c.operator === '<='
+ if (gt) {
+ if (needDomGTPre) {
+ if (c.semver.prerelease && c.semver.prerelease.length &&
+ c.semver.major === needDomGTPre.major &&
+ c.semver.minor === needDomGTPre.minor &&
+ c.semver.patch === needDomGTPre.patch) {
+ needDomGTPre = false
+ }
+ }
+ if (c.operator === '>' || c.operator === '>=') {
+ higher = higherGT(gt, c, options)
+ if (higher === c && higher !== gt) {
+ return false
+ }
+ } else if (gt.operator === '>=' && !satisfies(gt.semver, String(c), options)) {
+ return false
+ }
+ }
+ if (lt) {
+ if (needDomLTPre) {
+ if (c.semver.prerelease && c.semver.prerelease.length &&
+ c.semver.major === needDomLTPre.major &&
+ c.semver.minor === needDomLTPre.minor &&
+ c.semver.patch === needDomLTPre.patch) {
+ needDomLTPre = false
+ }
+ }
+ if (c.operator === '<' || c.operator === '<=') {
+ lower = lowerLT(lt, c, options)
+ if (lower === c && lower !== lt) {
+ return false
+ }
+ } else if (lt.operator === '<=' && !satisfies(lt.semver, String(c), options)) {
+ return false
+ }
+ }
+ if (!c.operator && (lt || gt) && gtltComp !== 0) {
+ return false
+ }
+ }
+
+ // if there was a < or >, and nothing in the dom, then must be false
+ // UNLESS it was limited by another range in the other direction.
+ // Eg, >1.0.0 <1.0.1 is still a subset of <2.0.0
+ if (gt && hasDomLT && !lt && gtltComp !== 0) {
+ return false
+ }
+
+ if (lt && hasDomGT && !gt && gtltComp !== 0) {
+ return false
+ }
+
+ // we needed a prerelease range in a specific tuple, but didn't get one
+ // then this isn't a subset. eg >=1.2.3-pre is not a subset of >=1.0.0,
+ // because it includes prereleases in the 1.2.3 tuple
+ if (needDomGTPre || needDomLTPre) {
+ return false
+ }
+
+ return true
+}
+
+// >=1.2.3 is lower than >1.2.3
+const higherGT = (a, b, options) => {
+ if (!a) {
+ return b
+ }
+ const comp = compare(a.semver, b.semver, options)
+ return comp > 0 ? a
+ : comp < 0 ? b
+ : b.operator === '>' && a.operator === '>=' ? b
+ : a
+}
+
+// <=1.2.3 is higher than <1.2.3
+const lowerLT = (a, b, options) => {
+ if (!a) {
+ return b
+ }
+ const comp = compare(a.semver, b.semver, options)
+ return comp < 0 ? a
+ : comp > 0 ? b
+ : b.operator === '<' && a.operator === '<=' ? b
+ : a
+}
+
+module.exports = subset
+
+
+/***/ }),
+
+/***/ 77277:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+const Range = __nccwpck_require__(11644)
+
+// Mostly just for testing and legacy API reasons
+const toComparators = (range, options) =>
+ new Range(range, options).set
+ .map(comp => comp.map(c => c.value).join(' ').trim().split(' '))
+
+module.exports = toComparators
+
+
+/***/ }),
+
+/***/ 93156:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+const Range = __nccwpck_require__(11644)
+const validRange = (range, options) => {
+ try {
+ // Return '*' instead of '' so that truthiness works.
+ // This will throw if it's invalid anyway
+ return new Range(range, options).range || '*'
+ } catch (er) {
+ return null
+ }
+}
+module.exports = validRange
+
+
+/***/ }),
+
+/***/ 18244:
+/***/ ((module) => {
+
+"use strict";
+
+module.exports = function (Yallist) {
+ Yallist.prototype[Symbol.iterator] = function* () {
+ for (let walker = this.head; walker; walker = walker.next) {
+ yield walker.value
+ }
+ }
+}
+
+
+/***/ }),
+
+/***/ 95948:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+"use strict";
+
+module.exports = Yallist
+
+Yallist.Node = Node
+Yallist.create = Yallist
+
+function Yallist (list) {
+ var self = this
+ if (!(self instanceof Yallist)) {
+ self = new Yallist()
+ }
+
+ self.tail = null
+ self.head = null
+ self.length = 0
+
+ if (list && typeof list.forEach === 'function') {
+ list.forEach(function (item) {
+ self.push(item)
+ })
+ } else if (arguments.length > 0) {
+ for (var i = 0, l = arguments.length; i < l; i++) {
+ self.push(arguments[i])
+ }
+ }
+
+ return self
+}
+
+Yallist.prototype.removeNode = function (node) {
+ if (node.list !== this) {
+ throw new Error('removing node which does not belong to this list')
+ }
+
+ var next = node.next
+ var prev = node.prev
+
+ if (next) {
+ next.prev = prev
+ }
+
+ if (prev) {
+ prev.next = next
+ }
+
+ if (node === this.head) {
+ this.head = next
+ }
+ if (node === this.tail) {
+ this.tail = prev
+ }
+
+ node.list.length--
+ node.next = null
+ node.prev = null
+ node.list = null
+
+ return next
+}
+
+Yallist.prototype.unshiftNode = function (node) {
+ if (node === this.head) {
+ return
+ }
+
+ if (node.list) {
+ node.list.removeNode(node)
+ }
+
+ var head = this.head
+ node.list = this
+ node.next = head
+ if (head) {
+ head.prev = node
+ }
+
+ this.head = node
+ if (!this.tail) {
+ this.tail = node
+ }
+ this.length++
+}
+
+Yallist.prototype.pushNode = function (node) {
+ if (node === this.tail) {
+ return
+ }
+
+ if (node.list) {
+ node.list.removeNode(node)
+ }
+
+ var tail = this.tail
+ node.list = this
+ node.prev = tail
+ if (tail) {
+ tail.next = node
+ }
+
+ this.tail = node
+ if (!this.head) {
+ this.head = node
+ }
+ this.length++
+}
+
+Yallist.prototype.push = function () {
+ for (var i = 0, l = arguments.length; i < l; i++) {
+ push(this, arguments[i])
+ }
+ return this.length
+}
+
+Yallist.prototype.unshift = function () {
+ for (var i = 0, l = arguments.length; i < l; i++) {
+ unshift(this, arguments[i])
+ }
+ return this.length
+}
+
+Yallist.prototype.pop = function () {
+ if (!this.tail) {
+ return undefined
+ }
+
+ var res = this.tail.value
+ this.tail = this.tail.prev
+ if (this.tail) {
+ this.tail.next = null
+ } else {
+ this.head = null
+ }
+ this.length--
+ return res
+}
+
+Yallist.prototype.shift = function () {
+ if (!this.head) {
+ return undefined
+ }
+
+ var res = this.head.value
+ this.head = this.head.next
+ if (this.head) {
+ this.head.prev = null
+ } else {
+ this.tail = null
+ }
+ this.length--
+ return res
+}
+
+Yallist.prototype.forEach = function (fn, thisp) {
+ thisp = thisp || this
+ for (var walker = this.head, i = 0; walker !== null; i++) {
+ fn.call(thisp, walker.value, i, this)
+ walker = walker.next
+ }
+}
+
+Yallist.prototype.forEachReverse = function (fn, thisp) {
+ thisp = thisp || this
+ for (var walker = this.tail, i = this.length - 1; walker !== null; i--) {
+ fn.call(thisp, walker.value, i, this)
+ walker = walker.prev
+ }
+}
+
+Yallist.prototype.get = function (n) {
+ for (var i = 0, walker = this.head; walker !== null && i < n; i++) {
+ // abort out of the list early if we hit a cycle
+ walker = walker.next
+ }
+ if (i === n && walker !== null) {
+ return walker.value
+ }
+}
+
+Yallist.prototype.getReverse = function (n) {
+ for (var i = 0, walker = this.tail; walker !== null && i < n; i++) {
+ // abort out of the list early if we hit a cycle
+ walker = walker.prev
+ }
+ if (i === n && walker !== null) {
+ return walker.value
+ }
+}
+
+Yallist.prototype.map = function (fn, thisp) {
+ thisp = thisp || this
+ var res = new Yallist()
+ for (var walker = this.head; walker !== null;) {
+ res.push(fn.call(thisp, walker.value, this))
+ walker = walker.next
+ }
+ return res
+}
+
+Yallist.prototype.mapReverse = function (fn, thisp) {
+ thisp = thisp || this
+ var res = new Yallist()
+ for (var walker = this.tail; walker !== null;) {
+ res.push(fn.call(thisp, walker.value, this))
+ walker = walker.prev
+ }
+ return res
+}
+
+Yallist.prototype.reduce = function (fn, initial) {
+ var acc
+ var walker = this.head
+ if (arguments.length > 1) {
+ acc = initial
+ } else if (this.head) {
+ walker = this.head.next
+ acc = this.head.value
+ } else {
+ throw new TypeError('Reduce of empty list with no initial value')
+ }
+
+ for (var i = 0; walker !== null; i++) {
+ acc = fn(acc, walker.value, i)
+ walker = walker.next
+ }
+
+ return acc
+}
+
+Yallist.prototype.reduceReverse = function (fn, initial) {
+ var acc
+ var walker = this.tail
+ if (arguments.length > 1) {
+ acc = initial
+ } else if (this.tail) {
+ walker = this.tail.prev
+ acc = this.tail.value
+ } else {
+ throw new TypeError('Reduce of empty list with no initial value')
+ }
+
+ for (var i = this.length - 1; walker !== null; i--) {
+ acc = fn(acc, walker.value, i)
+ walker = walker.prev
+ }
+
+ return acc
+}
+
+Yallist.prototype.toArray = function () {
+ var arr = new Array(this.length)
+ for (var i = 0, walker = this.head; walker !== null; i++) {
+ arr[i] = walker.value
+ walker = walker.next
+ }
+ return arr
+}
+
+Yallist.prototype.toArrayReverse = function () {
+ var arr = new Array(this.length)
+ for (var i = 0, walker = this.tail; walker !== null; i++) {
+ arr[i] = walker.value
+ walker = walker.prev
+ }
+ return arr
+}
+
+Yallist.prototype.slice = function (from, to) {
+ to = to || this.length
+ if (to < 0) {
+ to += this.length
+ }
+ from = from || 0
+ if (from < 0) {
+ from += this.length
+ }
+ var ret = new Yallist()
+ if (to < from || to < 0) {
+ return ret
+ }
+ if (from < 0) {
+ from = 0
+ }
+ if (to > this.length) {
+ to = this.length
+ }
+ for (var i = 0, walker = this.head; walker !== null && i < from; i++) {
+ walker = walker.next
+ }
+ for (; walker !== null && i < to; i++, walker = walker.next) {
+ ret.push(walker.value)
+ }
+ return ret
+}
+
+Yallist.prototype.sliceReverse = function (from, to) {
+ to = to || this.length
+ if (to < 0) {
+ to += this.length
+ }
+ from = from || 0
+ if (from < 0) {
+ from += this.length
+ }
+ var ret = new Yallist()
+ if (to < from || to < 0) {
+ return ret
+ }
+ if (from < 0) {
+ from = 0
+ }
+ if (to > this.length) {
+ to = this.length
+ }
+ for (var i = this.length, walker = this.tail; walker !== null && i > to; i--) {
+ walker = walker.prev
+ }
+ for (; walker !== null && i > from; i--, walker = walker.prev) {
+ ret.push(walker.value)
+ }
+ return ret
+}
+
+Yallist.prototype.splice = function (start, deleteCount, ...nodes) {
+ if (start > this.length) {
+ start = this.length - 1
+ }
+ if (start < 0) {
+ start = this.length + start;
+ }
+
+ for (var i = 0, walker = this.head; walker !== null && i < start; i++) {
+ walker = walker.next
+ }
+
+ var ret = []
+ for (var i = 0; walker && i < deleteCount; i++) {
+ ret.push(walker.value)
+ walker = this.removeNode(walker)
+ }
+ if (walker === null) {
+ walker = this.tail
+ }
+
+ if (walker !== this.head && walker !== this.tail) {
+ walker = walker.prev
+ }
+
+ for (var i = 0; i < nodes.length; i++) {
+ walker = insert(this, walker, nodes[i])
+ }
+ return ret;
+}
+
+Yallist.prototype.reverse = function () {
+ var head = this.head
+ var tail = this.tail
+ for (var walker = head; walker !== null; walker = walker.prev) {
+ var p = walker.prev
+ walker.prev = walker.next
+ walker.next = p
+ }
+ this.head = tail
+ this.tail = head
+ return this
+}
+
+function insert (self, node, value) {
+ var inserted = node === self.head ?
+ new Node(value, null, node, self) :
+ new Node(value, node, node.next, self)
+
+ if (inserted.next === null) {
+ self.tail = inserted
+ }
+ if (inserted.prev === null) {
+ self.head = inserted
+ }
+
+ self.length++
+
+ return inserted
+}
+
+function push (self, item) {
+ self.tail = new Node(item, self.tail, null, self)
+ if (!self.head) {
+ self.head = self.tail
+ }
+ self.length++
+}
+
+function unshift (self, item) {
+ self.head = new Node(item, null, self.head, self)
+ if (!self.tail) {
+ self.tail = self.head
+ }
+ self.length++
+}
+
+function Node (value, prev, next, list) {
+ if (!(this instanceof Node)) {
+ return new Node(value, prev, next, list)
+ }
+
+ this.list = list
+ this.value = value
+
+ if (prev) {
+ prev.next = this
+ this.prev = prev
+ } else {
+ this.prev = null
+ }
+
+ if (next) {
+ next.prev = this
+ this.next = next
+ } else {
+ this.next = null
+ }
+}
+
+try {
+ // add if support for Symbol.iterator is present
+ __nccwpck_require__(18244)(Yallist)
+} catch (er) {}
+
+
+/***/ }),
+
+/***/ 46316:
+/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
+
+"use strict";
+
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ var desc = Object.getOwnPropertyDescriptor(m, k);
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+ desc = { enumerable: true, get: function() { return m[k]; } };
+ }
+ Object.defineProperty(o, k2, desc);
+}) : (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ o[k2] = m[k];
+}));
+var __exportStar = (this && this.__exportStar) || function(m, exports) {
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
+};
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.diffResource = exports.diffTemplate = void 0;
+const impl = __nccwpck_require__(36300);
+const types = __nccwpck_require__(9596);
+const util_1 = __nccwpck_require__(3089);
+__exportStar(__nccwpck_require__(9596), exports);
+const DIFF_HANDLERS = {
+ AWSTemplateFormatVersion: (diff, oldValue, newValue) => diff.awsTemplateFormatVersion = impl.diffAttribute(oldValue, newValue),
+ Description: (diff, oldValue, newValue) => diff.description = impl.diffAttribute(oldValue, newValue),
+ Metadata: (diff, oldValue, newValue) => diff.metadata = new types.DifferenceCollection((0, util_1.diffKeyedEntities)(oldValue, newValue, impl.diffMetadata)),
+ Parameters: (diff, oldValue, newValue) => diff.parameters = new types.DifferenceCollection((0, util_1.diffKeyedEntities)(oldValue, newValue, impl.diffParameter)),
+ Mappings: (diff, oldValue, newValue) => diff.mappings = new types.DifferenceCollection((0, util_1.diffKeyedEntities)(oldValue, newValue, impl.diffMapping)),
+ Conditions: (diff, oldValue, newValue) => diff.conditions = new types.DifferenceCollection((0, util_1.diffKeyedEntities)(oldValue, newValue, impl.diffCondition)),
+ Transform: (diff, oldValue, newValue) => diff.transform = impl.diffAttribute(oldValue, newValue),
+ Resources: (diff, oldValue, newValue) => diff.resources = new types.DifferenceCollection((0, util_1.diffKeyedEntities)(oldValue, newValue, impl.diffResource)),
+ Outputs: (diff, oldValue, newValue) => diff.outputs = new types.DifferenceCollection((0, util_1.diffKeyedEntities)(oldValue, newValue, impl.diffOutput)),
+};
+/**
+ * Compare two CloudFormation templates and return semantic differences between them.
+ *
+ * @param currentTemplate the current state of the stack.
+ * @param newTemplate the target state of the stack.
+ *
+ * @returns a +types.TemplateDiff+ object that represents the changes that will happen if
+ * a stack which current state is described by +currentTemplate+ is updated with
+ * the template +newTemplate+.
+ */
+function diffTemplate(currentTemplate, newTemplate) {
+ // Base diff
+ const theDiff = calculateTemplateDiff(currentTemplate, newTemplate);
+ // We're going to modify this in-place
+ const newTemplateCopy = deepCopy(newTemplate);
+ let didPropagateReferenceChanges;
+ let diffWithReplacements;
+ do {
+ diffWithReplacements = calculateTemplateDiff(currentTemplate, newTemplateCopy);
+ // Propagate replacements for replaced resources
+ didPropagateReferenceChanges = false;
+ if (diffWithReplacements.resources) {
+ diffWithReplacements.resources.forEachDifference((logicalId, change) => {
+ if (change.changeImpact === types.ResourceImpact.WILL_REPLACE) {
+ if (propagateReplacedReferences(newTemplateCopy, logicalId)) {
+ didPropagateReferenceChanges = true;
+ }
+ }
+ });
+ }
+ } while (didPropagateReferenceChanges);
+ // Copy "replaced" states from `diffWithReplacements` to `theDiff`.
+ diffWithReplacements.resources
+ .filter(r => isReplacement(r.changeImpact))
+ .forEachDifference((logicalId, downstreamReplacement) => {
+ const resource = theDiff.resources.get(logicalId);
+ if (resource.changeImpact !== downstreamReplacement.changeImpact) {
+ propagatePropertyReplacement(downstreamReplacement, resource);
+ }
+ });
+ return theDiff;
+}
+exports.diffTemplate = diffTemplate;
+function isReplacement(impact) {
+ return impact === types.ResourceImpact.MAY_REPLACE || impact === types.ResourceImpact.WILL_REPLACE;
+}
+/**
+ * For all properties in 'source' that have a "replacement" impact, propagate that impact to "dest"
+ */
+function propagatePropertyReplacement(source, dest) {
+ for (const [propertyName, diff] of Object.entries(source.propertyUpdates)) {
+ if (diff.changeImpact && isReplacement(diff.changeImpact)) {
+ // Use the propertydiff of source in target. The result of this happens to be clear enough.
+ dest.setPropertyChange(propertyName, diff);
+ }
+ }
+}
+function calculateTemplateDiff(currentTemplate, newTemplate) {
+ const differences = {};
+ const unknown = {};
+ for (const key of (0, util_1.unionOf)(Object.keys(currentTemplate), Object.keys(newTemplate)).sort()) {
+ const oldValue = currentTemplate[key];
+ const newValue = newTemplate[key];
+ if ((0, util_1.deepEqual)(oldValue, newValue)) {
+ continue;
+ }
+ const handler = DIFF_HANDLERS[key]
+ || ((_diff, oldV, newV) => unknown[key] = impl.diffUnknown(oldV, newV));
+ handler(differences, oldValue, newValue);
+ }
+ if (Object.keys(unknown).length > 0) {
+ differences.unknown = new types.DifferenceCollection(unknown);
+ }
+ return new types.TemplateDiff(differences);
+}
+/**
+ * Compare two CloudFormation resources and return semantic differences between them
+ */
+function diffResource(oldValue, newValue) {
+ return impl.diffResource(oldValue, newValue);
+}
+exports.diffResource = diffResource;
+/**
+ * Replace all references to the given logicalID on the given template, in-place
+ *
+ * Returns true iff any references were replaced.
+ */
+function propagateReplacedReferences(template, logicalId) {
+ let ret = false;
+ function recurse(obj) {
+ if (Array.isArray(obj)) {
+ obj.forEach(recurse);
+ }
+ if (typeof obj === 'object' && obj !== null) {
+ if (!replaceReference(obj)) {
+ Object.values(obj).forEach(recurse);
+ }
+ }
+ }
+ function replaceReference(obj) {
+ const keys = Object.keys(obj);
+ if (keys.length !== 1) {
+ return false;
+ }
+ const key = keys[0];
+ if (key === 'Ref') {
+ if (obj.Ref === logicalId) {
+ obj.Ref = logicalId + ' (replaced)';
+ ret = true;
+ }
+ return true;
+ }
+ if (key.startsWith('Fn::')) {
+ if (Array.isArray(obj[key]) && obj[key].length > 0 && obj[key][0] === logicalId) {
+ obj[key][0] = logicalId + '(replaced)';
+ ret = true;
+ }
+ return true;
+ }
+ return false;
+ }
+ recurse(template);
+ return ret;
+}
+function deepCopy(x) {
+ if (Array.isArray(x)) {
+ return x.map(deepCopy);
+ }
+ if (typeof x === 'object' && x !== null) {
+ const ret = {};
+ for (const key of Object.keys(x)) {
+ ret[key] = deepCopy(x[key]);
+ }
+ return ret;
+ }
+ return x;
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlmZi10ZW1wbGF0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImRpZmYtdGVtcGxhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwrQkFBK0I7QUFDL0Isc0NBQXNDO0FBQ3RDLHNDQUFvRTtBQUVwRSwrQ0FBNkI7QUFLN0IsTUFBTSxhQUFhLEdBQW9CO0lBQ3JDLHdCQUF3QixFQUFFLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUNyRCxJQUFJLENBQUMsd0JBQXdCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDO0lBQ3hFLFdBQVcsRUFBRSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FDeEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUM7SUFDM0QsUUFBUSxFQUFFLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUNyQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksS0FBSyxDQUFDLG9CQUFvQixDQUFDLElBQUEsd0JBQWlCLEVBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDMUcsVUFBVSxFQUFFLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUN2QyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksS0FBSyxDQUFDLG9CQUFvQixDQUFDLElBQUEsd0JBQWlCLEVBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDN0csUUFBUSxFQUFFLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUNyQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksS0FBSyxDQUFDLG9CQUFvQixDQUFDLElBQUEsd0JBQWlCLEVBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDekcsVUFBVSxFQUFFLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUN2QyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksS0FBSyxDQUFDLG9CQUFvQixDQUFDLElBQUEsd0JBQWlCLEVBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDN0csU0FBUyxFQUFFLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUN0QyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQztJQUN6RCxTQUFTLEVBQUUsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQ3RDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxLQUFLLENBQUMsb0JBQW9CLENBQUMsSUFBQSx3QkFBaUIsRUFBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUMzRyxPQUFPLEVBQUUsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQ3BDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxLQUFLLENBQUMsb0JBQW9CLENBQUMsSUFBQSx3QkFBaUIsRUFBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztDQUN4RyxDQUFDO0FBRUY7Ozs7Ozs7OztHQVNHO0FBQ0gsU0FBZ0IsWUFBWSxDQUFDLGVBQXVDLEVBQUUsV0FBbUM7SUFDdkcsWUFBWTtJQUNaLE1BQU0sT0FBTyxHQUFHLHFCQUFxQixDQUFDLGVBQWUsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUVwRSxzQ0FBc0M7SUFDdEMsTUFBTSxlQUFlLEdBQUcsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBRTlDLElBQUksNEJBQTRCLENBQUM7SUFDakMsSUFBSSxvQkFBb0IsQ0FBQztJQUN6QixHQUFHO1FBQ0Qsb0JBQW9CLEdBQUcscUJBQXFCLENBQUMsZUFBZSxFQUFFLGVBQWUsQ0FBQyxDQUFDO1FBRS9FLGdEQUFnRDtRQUNoRCw0QkFBNEIsR0FBRyxLQUFLLENBQUM7UUFDckMsSUFBSSxvQkFBb0IsQ0FBQyxTQUFTLEVBQUU7WUFDbEMsb0JBQW9CLENBQUMsU0FBUyxDQUFDLGlCQUFpQixDQUFDLENBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxFQUFFO2dCQUNyRSxJQUFJLE1BQU0sQ0FBQyxZQUFZLEtBQUssS0FBSyxDQUFDLGNBQWMsQ0FBQyxZQUFZLEVBQUU7b0JBQzdELElBQUksMkJBQTJCLENBQUMsZUFBZSxFQUFFLFNBQVMsQ0FBQyxFQUFFO3dCQUMzRCw0QkFBNEIsR0FBRyxJQUFJLENBQUM7cUJBQ3JDO2lCQUNGO1lBQ0gsQ0FBQyxDQUFDLENBQUM7U0FDSjtLQUNGLFFBQVEsNEJBQTRCLEVBQUU7SUFFdkMsbUVBQW1FO0lBQ25FLG9CQUFvQixDQUFDLFNBQVM7U0FDM0IsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLENBQUUsQ0FBQyxZQUFZLENBQUMsQ0FBQztTQUMzQyxpQkFBaUIsQ0FBQyxDQUFDLFNBQVMsRUFBRSxxQkFBcUIsRUFBRSxFQUFFO1FBQ3RELE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRWxELElBQUksUUFBUSxDQUFDLFlBQVksS0FBSyxxQkFBcUIsQ0FBQyxZQUFZLEVBQUU7WUFDaEUsNEJBQTRCLENBQUMscUJBQXFCLEVBQUUsUUFBUSxDQUFDLENBQUM7U0FDL0Q7SUFDSCxDQUFDLENBQUMsQ0FBQztJQUVMLE9BQU8sT0FBTyxDQUFDO0FBQ2pCLENBQUM7QUFyQ0Qsb0NBcUNDO0FBRUQsU0FBUyxhQUFhLENBQUMsTUFBNEI7SUFDakQsT0FBTyxNQUFNLEtBQUssS0FBSyxDQUFDLGNBQWMsQ0FBQyxXQUFXLElBQUksTUFBTSxLQUFLLEtBQUssQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDO0FBQ3JHLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQVMsNEJBQTRCLENBQUMsTUFBZ0MsRUFBRSxJQUE4QjtJQUNwRyxLQUFLLE1BQU0sQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLEVBQUU7UUFDekUsSUFBSSxJQUFJLENBQUMsWUFBWSxJQUFJLGFBQWEsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUU7WUFDekQsMkZBQTJGO1lBQzNGLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDNUM7S0FDRjtBQUNILENBQUM7QUFFRCxTQUFTLHFCQUFxQixDQUFDLGVBQXVDLEVBQUUsV0FBbUM7SUFDekcsTUFBTSxXQUFXLEdBQXdCLEVBQUUsQ0FBQztJQUM1QyxNQUFNLE9BQU8sR0FBNkMsRUFBRSxDQUFDO0lBQzdELEtBQUssTUFBTSxHQUFHLElBQUksSUFBQSxjQUFPLEVBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7UUFDeEYsTUFBTSxRQUFRLEdBQUcsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3RDLE1BQU0sUUFBUSxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNsQyxJQUFJLElBQUEsZ0JBQVMsRUFBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLEVBQUU7WUFDakMsU0FBUztTQUNWO1FBQ0QsTUFBTSxPQUFPLEdBQWdCLGFBQWEsQ0FBQyxHQUFHLENBQUM7ZUFDOUIsQ0FBQyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUN0RixPQUFPLENBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztLQUUxQztJQUNELElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1FBQ25DLFdBQVcsQ0FBQyxPQUFPLEdBQUcsSUFBSSxLQUFLLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLENBQUM7S0FDL0Q7SUFFRCxPQUFPLElBQUksS0FBSyxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUM3QyxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQixZQUFZLENBQUMsUUFBd0IsRUFBRSxRQUF3QjtJQUM3RSxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQy9DLENBQUM7QUFGRCxvQ0FFQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFTLDJCQUEyQixDQUFDLFFBQWdCLEVBQUUsU0FBaUI7SUFDdEUsSUFBSSxHQUFHLEdBQUcsS0FBSyxDQUFDO0lBRWhCLFNBQVMsT0FBTyxDQUFDLEdBQVE7UUFDdkIsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ3RCLEdBQUcsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDdEI7UUFFRCxJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVEsSUFBSSxHQUFHLEtBQUssSUFBSSxFQUFFO1lBQzNDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDMUIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7YUFDckM7U0FDRjtJQUNILENBQUM7SUFFRCxTQUFTLGdCQUFnQixDQUFDLEdBQVE7UUFDaEMsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM5QixJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQUUsT0FBTyxLQUFLLENBQUM7U0FBRTtRQUN4QyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFcEIsSUFBSSxHQUFHLEtBQUssS0FBSyxFQUFFO1lBQ2pCLElBQUksR0FBRyxDQUFDLEdBQUcsS0FBSyxTQUFTLEVBQUU7Z0JBQ3pCLEdBQUcsQ0FBQyxHQUFHLEdBQUcsU0FBUyxHQUFHLGFBQWEsQ0FBQztnQkFDcEMsR0FBRyxHQUFHLElBQUksQ0FBQzthQUNaO1lBQ0QsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUVELElBQUksR0FBRyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUMxQixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRTtnQkFDL0UsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsR0FBRyxZQUFZLENBQUM7Z0JBQ3ZDLEdBQUcsR0FBRyxJQUFJLENBQUM7YUFDWjtZQUNELE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDbEIsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQsU0FBUyxRQUFRLENBQUMsQ0FBTTtJQUN0QixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7UUFDcEIsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0tBQ3hCO0lBRUQsSUFBSSxPQUFPLENBQUMsS0FBSyxRQUFRLElBQUksQ0FBQyxLQUFLLElBQUksRUFBRTtRQUN2QyxNQUFNLEdBQUcsR0FBUSxFQUFFLENBQUM7UUFDcEIsS0FBSyxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ2hDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FDN0I7UUFDRCxPQUFPLEdBQUcsQ0FBQztLQUNaO0lBRUQsT0FBTyxDQUFDLENBQUM7QUFDWCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgaW1wbCBmcm9tICcuL2RpZmYnO1xuaW1wb3J0ICogYXMgdHlwZXMgZnJvbSAnLi9kaWZmL3R5cGVzJztcbmltcG9ydCB7IGRlZXBFcXVhbCwgZGlmZktleWVkRW50aXRpZXMsIHVuaW9uT2YgfSBmcm9tICcuL2RpZmYvdXRpbCc7XG5cbmV4cG9ydCAqIGZyb20gJy4vZGlmZi90eXBlcyc7XG5cbnR5cGUgRGlmZkhhbmRsZXIgPSAoZGlmZjogdHlwZXMuSVRlbXBsYXRlRGlmZiwgb2xkVmFsdWU6IGFueSwgbmV3VmFsdWU6IGFueSkgPT4gdm9pZDtcbnR5cGUgSGFuZGxlclJlZ2lzdHJ5ID0geyBbc2VjdGlvbjogc3RyaW5nXTogRGlmZkhhbmRsZXIgfTtcblxuY29uc3QgRElGRl9IQU5ETEVSUzogSGFuZGxlclJlZ2lzdHJ5ID0ge1xuICBBV1NUZW1wbGF0ZUZvcm1hdFZlcnNpb246IChkaWZmLCBvbGRWYWx1ZSwgbmV3VmFsdWUpID0+XG4gICAgZGlmZi5hd3NUZW1wbGF0ZUZvcm1hdFZlcnNpb24gPSBpbXBsLmRpZmZBdHRyaWJ1dGUob2xkVmFsdWUsIG5ld1ZhbHVlKSxcbiAgRGVzY3JpcHRpb246IChkaWZmLCBvbGRWYWx1ZSwgbmV3VmFsdWUpID0+XG4gICAgZGlmZi5kZXNjcmlwdGlvbiA9IGltcGwuZGlmZkF0dHJpYnV0ZShvbGRWYWx1ZSwgbmV3VmFsdWUpLFxuICBNZXRhZGF0YTogKGRpZmYsIG9sZFZhbHVlLCBuZXdWYWx1ZSkgPT5cbiAgICBkaWZmLm1ldGFkYXRhID0gbmV3IHR5cGVzLkRpZmZlcmVuY2VDb2xsZWN0aW9uKGRpZmZLZXllZEVudGl0aWVzKG9sZFZhbHVlLCBuZXdWYWx1ZSwgaW1wbC5kaWZmTWV0YWRhdGEpKSxcbiAgUGFyYW1ldGVyczogKGRpZmYsIG9sZFZhbHVlLCBuZXdWYWx1ZSkgPT5cbiAgICBkaWZmLnBhcmFtZXRlcnMgPSBuZXcgdHlwZXMuRGlmZmVyZW5jZUNvbGxlY3Rpb24oZGlmZktleWVkRW50aXRpZXMob2xkVmFsdWUsIG5ld1ZhbHVlLCBpbXBsLmRpZmZQYXJhbWV0ZXIpKSxcbiAgTWFwcGluZ3M6IChkaWZmLCBvbGRWYWx1ZSwgbmV3VmFsdWUpID0+XG4gICAgZGlmZi5tYXBwaW5ncyA9IG5ldyB0eXBlcy5EaWZmZXJlbmNlQ29sbGVjdGlvbihkaWZmS2V5ZWRFbnRpdGllcyhvbGRWYWx1ZSwgbmV3VmFsdWUsIGltcGwuZGlmZk1hcHBpbmcpKSxcbiAgQ29uZGl0aW9uczogKGRpZmYsIG9sZFZhbHVlLCBuZXdWYWx1ZSkgPT5cbiAgICBkaWZmLmNvbmRpdGlvbnMgPSBuZXcgdHlwZXMuRGlmZmVyZW5jZUNvbGxlY3Rpb24oZGlmZktleWVkRW50aXRpZXMob2xkVmFsdWUsIG5ld1ZhbHVlLCBpbXBsLmRpZmZDb25kaXRpb24pKSxcbiAgVHJhbnNmb3JtOiAoZGlmZiwgb2xkVmFsdWUsIG5ld1ZhbHVlKSA9PlxuICAgIGRpZmYudHJhbnNmb3JtID0gaW1wbC5kaWZmQXR0cmlidXRlKG9sZFZhbHVlLCBuZXdWYWx1ZSksXG4gIFJlc291cmNlczogKGRpZmYsIG9sZFZhbHVlLCBuZXdWYWx1ZSkgPT5cbiAgICBkaWZmLnJlc291cmNlcyA9IG5ldyB0eXBlcy5EaWZmZXJlbmNlQ29sbGVjdGlvbihkaWZmS2V5ZWRFbnRpdGllcyhvbGRWYWx1ZSwgbmV3VmFsdWUsIGltcGwuZGlmZlJlc291cmNlKSksXG4gIE91dHB1dHM6IChkaWZmLCBvbGRWYWx1ZSwgbmV3VmFsdWUpID0+XG4gICAgZGlmZi5vdXRwdXRzID0gbmV3IHR5cGVzLkRpZmZlcmVuY2VDb2xsZWN0aW9uKGRpZmZLZXllZEVudGl0aWVzKG9sZFZhbHVlLCBuZXdWYWx1ZSwgaW1wbC5kaWZmT3V0cHV0KSksXG59O1xuXG4vKipcbiAqIENvbXBhcmUgdHdvIENsb3VkRm9ybWF0aW9uIHRlbXBsYXRlcyBhbmQgcmV0dXJuIHNlbWFudGljIGRpZmZlcmVuY2VzIGJldHdlZW4gdGhlbS5cbiAqXG4gKiBAcGFyYW0gY3VycmVudFRlbXBsYXRlIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBzdGFjay5cbiAqIEBwYXJhbSBuZXdUZW1wbGF0ZSAgICAgdGhlIHRhcmdldCBzdGF0ZSBvZiB0aGUgc3RhY2suXG4gKlxuICogQHJldHVybnMgYSArdHlwZXMuVGVtcGxhdGVEaWZmKyBvYmplY3QgdGhhdCByZXByZXNlbnRzIHRoZSBjaGFuZ2VzIHRoYXQgd2lsbCBoYXBwZW4gaWZcbiAqICAgICAgYSBzdGFjayB3aGljaCBjdXJyZW50IHN0YXRlIGlzIGRlc2NyaWJlZCBieSArY3VycmVudFRlbXBsYXRlKyBpcyB1cGRhdGVkIHdpdGhcbiAqICAgICAgdGhlIHRlbXBsYXRlICtuZXdUZW1wbGF0ZSsuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkaWZmVGVtcGxhdGUoY3VycmVudFRlbXBsYXRlOiB7IFtrZXk6IHN0cmluZ106IGFueSB9LCBuZXdUZW1wbGF0ZTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSk6IHR5cGVzLlRlbXBsYXRlRGlmZiB7XG4gIC8vIEJhc2UgZGlmZlxuICBjb25zdCB0aGVEaWZmID0gY2FsY3VsYXRlVGVtcGxhdGVEaWZmKGN1cnJlbnRUZW1wbGF0ZSwgbmV3VGVtcGxhdGUpO1xuXG4gIC8vIFdlJ3JlIGdvaW5nIHRvIG1vZGlmeSB0aGlzIGluLXBsYWNlXG4gIGNvbnN0IG5ld1RlbXBsYXRlQ29weSA9IGRlZXBDb3B5KG5ld1RlbXBsYXRlKTtcblxuICBsZXQgZGlkUHJvcGFnYXRlUmVmZXJlbmNlQ2hhbmdlcztcbiAgbGV0IGRpZmZXaXRoUmVwbGFjZW1lbnRzO1xuICBkbyB7XG4gICAgZGlmZldpdGhSZXBsYWNlbWVudHMgPSBjYWxjdWxhdGVUZW1wbGF0ZURpZmYoY3VycmVudFRlbXBsYXRlLCBuZXdUZW1wbGF0ZUNvcHkpO1xuXG4gICAgLy8gUHJvcGFnYXRlIHJlcGxhY2VtZW50cyBmb3IgcmVwbGFjZWQgcmVzb3VyY2VzXG4gICAgZGlkUHJvcGFnYXRlUmVmZXJlbmNlQ2hhbmdlcyA9IGZhbHNlO1xuICAgIGlmIChkaWZmV2l0aFJlcGxhY2VtZW50cy5yZXNvdXJjZXMpIHtcbiAgICAgIGRpZmZXaXRoUmVwbGFjZW1lbnRzLnJlc291cmNlcy5mb3JFYWNoRGlmZmVyZW5jZSgobG9naWNhbElkLCBjaGFuZ2UpID0+IHtcbiAgICAgICAgaWYgKGNoYW5nZS5jaGFuZ2VJbXBhY3QgPT09IHR5cGVzLlJlc291cmNlSW1wYWN0LldJTExfUkVQTEFDRSkge1xuICAgICAgICAgIGlmIChwcm9wYWdhdGVSZXBsYWNlZFJlZmVyZW5jZXMobmV3VGVtcGxhdGVDb3B5LCBsb2dpY2FsSWQpKSB7XG4gICAgICAgICAgICBkaWRQcm9wYWdhdGVSZWZlcmVuY2VDaGFuZ2VzID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfSB3aGlsZSAoZGlkUHJvcGFnYXRlUmVmZXJlbmNlQ2hhbmdlcyk7XG5cbiAgLy8gQ29weSBcInJlcGxhY2VkXCIgc3RhdGVzIGZyb20gYGRpZmZXaXRoUmVwbGFjZW1lbnRzYCB0byBgdGhlRGlmZmAuXG4gIGRpZmZXaXRoUmVwbGFjZW1lbnRzLnJlc291cmNlc1xuICAgIC5maWx0ZXIociA9PiBpc1JlcGxhY2VtZW50KHIhLmNoYW5nZUltcGFjdCkpXG4gICAgLmZvckVhY2hEaWZmZXJlbmNlKChsb2dpY2FsSWQsIGRvd25zdHJlYW1SZXBsYWNlbWVudCkgPT4ge1xuICAgICAgY29uc3QgcmVzb3VyY2UgPSB0aGVEaWZmLnJlc291cmNlcy5nZXQobG9naWNhbElkKTtcblxuICAgICAgaWYgKHJlc291cmNlLmNoYW5nZUltcGFjdCAhPT0gZG93bnN0cmVhbVJlcGxhY2VtZW50LmNoYW5nZUltcGFjdCkge1xuICAgICAgICBwcm9wYWdhdGVQcm9wZXJ0eVJlcGxhY2VtZW50KGRvd25zdHJlYW1SZXBsYWNlbWVudCwgcmVzb3VyY2UpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gIHJldHVybiB0aGVEaWZmO1xufVxuXG5mdW5jdGlvbiBpc1JlcGxhY2VtZW50KGltcGFjdDogdHlwZXMuUmVzb3VyY2VJbXBhY3QpIHtcbiAgcmV0dXJuIGltcGFjdCA9PT0gdHlwZXMuUmVzb3VyY2VJbXBhY3QuTUFZX1JFUExBQ0UgfHwgaW1wYWN0ID09PSB0eXBlcy5SZXNvdXJjZUltcGFjdC5XSUxMX1JFUExBQ0U7XG59XG5cbi8qKlxuICogRm9yIGFsbCBwcm9wZXJ0aWVzIGluICdzb3VyY2UnIHRoYXQgaGF2ZSBhIFwicmVwbGFjZW1lbnRcIiBpbXBhY3QsIHByb3BhZ2F0ZSB0aGF0IGltcGFjdCB0byBcImRlc3RcIlxuICovXG5mdW5jdGlvbiBwcm9wYWdhdGVQcm9wZXJ0eVJlcGxhY2VtZW50KHNvdXJjZTogdHlwZXMuUmVzb3VyY2VEaWZmZXJlbmNlLCBkZXN0OiB0eXBlcy5SZXNvdXJjZURpZmZlcmVuY2UpIHtcbiAgZm9yIChjb25zdCBbcHJvcGVydHlOYW1lLCBkaWZmXSBvZiBPYmplY3QuZW50cmllcyhzb3VyY2UucHJvcGVydHlVcGRhdGVzKSkge1xuICAgIGlmIChkaWZmLmNoYW5nZUltcGFjdCAmJiBpc1JlcGxhY2VtZW50KGRpZmYuY2hhbmdlSW1wYWN0KSkge1xuICAgICAgLy8gVXNlIHRoZSBwcm9wZXJ0eWRpZmYgb2Ygc291cmNlIGluIHRhcmdldC4gVGhlIHJlc3VsdCBvZiB0aGlzIGhhcHBlbnMgdG8gYmUgY2xlYXIgZW5vdWdoLlxuICAgICAgZGVzdC5zZXRQcm9wZXJ0eUNoYW5nZShwcm9wZXJ0eU5hbWUsIGRpZmYpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjYWxjdWxhdGVUZW1wbGF0ZURpZmYoY3VycmVudFRlbXBsYXRlOiB7IFtrZXk6IHN0cmluZ106IGFueSB9LCBuZXdUZW1wbGF0ZTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSk6IHR5cGVzLlRlbXBsYXRlRGlmZiB7XG4gIGNvbnN0IGRpZmZlcmVuY2VzOiB0eXBlcy5JVGVtcGxhdGVEaWZmID0ge307XG4gIGNvbnN0IHVua25vd246IHsgW2tleTogc3RyaW5nXTogdHlwZXMuRGlmZmVyZW5jZTxhbnk+IH0gPSB7fTtcbiAgZm9yIChjb25zdCBrZXkgb2YgdW5pb25PZihPYmplY3Qua2V5cyhjdXJyZW50VGVtcGxhdGUpLCBPYmplY3Qua2V5cyhuZXdUZW1wbGF0ZSkpLnNvcnQoKSkge1xuICAgIGNvbnN0IG9sZFZhbHVlID0gY3VycmVudFRlbXBsYXRlW2tleV07XG4gICAgY29uc3QgbmV3VmFsdWUgPSBuZXdUZW1wbGF0ZVtrZXldO1xuICAgIGlmIChkZWVwRXF1YWwob2xkVmFsdWUsIG5ld1ZhbHVlKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IGhhbmRsZXI6IERpZmZIYW5kbGVyID0gRElGRl9IQU5ETEVSU1trZXldXG4gICAgICAgICAgICAgICAgICB8fCAoKF9kaWZmLCBvbGRWLCBuZXdWKSA9PiB1bmtub3duW2tleV0gPSBpbXBsLmRpZmZVbmtub3duKG9sZFYsIG5ld1YpKTtcbiAgICBoYW5kbGVyKGRpZmZlcmVuY2VzLCBvbGRWYWx1ZSwgbmV3VmFsdWUpO1xuXG4gIH1cbiAgaWYgKE9iamVjdC5rZXlzKHVua25vd24pLmxlbmd0aCA+IDApIHtcbiAgICBkaWZmZXJlbmNlcy51bmtub3duID0gbmV3IHR5cGVzLkRpZmZlcmVuY2VDb2xsZWN0aW9uKHVua25vd24pO1xuICB9XG5cbiAgcmV0dXJuIG5ldyB0eXBlcy5UZW1wbGF0ZURpZmYoZGlmZmVyZW5jZXMpO1xufVxuXG4vKipcbiAqIENvbXBhcmUgdHdvIENsb3VkRm9ybWF0aW9uIHJlc291cmNlcyBhbmQgcmV0dXJuIHNlbWFudGljIGRpZmZlcmVuY2VzIGJldHdlZW4gdGhlbVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGlmZlJlc291cmNlKG9sZFZhbHVlOiB0eXBlcy5SZXNvdXJjZSwgbmV3VmFsdWU6IHR5cGVzLlJlc291cmNlKTogdHlwZXMuUmVzb3VyY2VEaWZmZXJlbmNlIHtcbiAgcmV0dXJuIGltcGwuZGlmZlJlc291cmNlKG9sZFZhbHVlLCBuZXdWYWx1ZSk7XG59XG5cbi8qKlxuICogUmVwbGFjZSBhbGwgcmVmZXJlbmNlcyB0byB0aGUgZ2l2ZW4gbG9naWNhbElEIG9uIHRoZSBnaXZlbiB0ZW1wbGF0ZSwgaW4tcGxhY2VcbiAqXG4gKiBSZXR1cm5zIHRydWUgaWZmIGFueSByZWZlcmVuY2VzIHdlcmUgcmVwbGFjZWQuXG4gKi9cbmZ1bmN0aW9uIHByb3BhZ2F0ZVJlcGxhY2VkUmVmZXJlbmNlcyh0ZW1wbGF0ZTogb2JqZWN0LCBsb2dpY2FsSWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBsZXQgcmV0ID0gZmFsc2U7XG5cbiAgZnVuY3Rpb24gcmVjdXJzZShvYmo6IGFueSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICAgIG9iai5mb3JFYWNoKHJlY3Vyc2UpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiBvYmogIT09IG51bGwpIHtcbiAgICAgIGlmICghcmVwbGFjZVJlZmVyZW5jZShvYmopKSB7XG4gICAgICAgIE9iamVjdC52YWx1ZXMob2JqKS5mb3JFYWNoKHJlY3Vyc2UpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJlcGxhY2VSZWZlcmVuY2Uob2JqOiBhbnkpIHtcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMob2JqKTtcbiAgICBpZiAoa2V5cy5sZW5ndGggIT09IDEpIHsgcmV0dXJuIGZhbHNlOyB9XG4gICAgY29uc3Qga2V5ID0ga2V5c1swXTtcblxuICAgIGlmIChrZXkgPT09ICdSZWYnKSB7XG4gICAgICBpZiAob2JqLlJlZiA9PT0gbG9naWNhbElkKSB7XG4gICAgICAgIG9iai5SZWYgPSBsb2dpY2FsSWQgKyAnIChyZXBsYWNlZCknO1xuICAgICAgICByZXQgPSB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKGtleS5zdGFydHNXaXRoKCdGbjo6JykpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KG9ialtrZXldKSAmJiBvYmpba2V5XS5sZW5ndGggPiAwICYmIG9ialtrZXldWzBdID09PSBsb2dpY2FsSWQpIHtcbiAgICAgICAgb2JqW2tleV1bMF0gPSBsb2dpY2FsSWQgKyAnKHJlcGxhY2VkKSc7XG4gICAgICAgIHJldCA9IHRydWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZWN1cnNlKHRlbXBsYXRlKTtcbiAgcmV0dXJuIHJldDtcbn1cblxuZnVuY3Rpb24gZGVlcENvcHkoeDogYW55KTogYW55IHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoeCkpIHtcbiAgICByZXR1cm4geC5tYXAoZGVlcENvcHkpO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB4ID09PSAnb2JqZWN0JyAmJiB4ICE9PSBudWxsKSB7XG4gICAgY29uc3QgcmV0OiBhbnkgPSB7fTtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyh4KSkge1xuICAgICAgcmV0W2tleV0gPSBkZWVwQ29weSh4W2tleV0pO1xuICAgIH1cbiAgICByZXR1cm4gcmV0O1xuICB9XG5cbiAgcmV0dXJuIHg7XG59XG4iXX0=
+
+/***/ }),
+
+/***/ 36300:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.diffUnknown = exports.diffResource = exports.diffParameter = exports.diffOutput = exports.diffMetadata = exports.diffMapping = exports.diffCondition = exports.diffAttribute = void 0;
+const cfnspec = __nccwpck_require__(72665);
+const types = __nccwpck_require__(9596);
+const util_1 = __nccwpck_require__(3089);
+function diffAttribute(oldValue, newValue) {
+ return new types.Difference(_asString(oldValue), _asString(newValue));
+}
+exports.diffAttribute = diffAttribute;
+function diffCondition(oldValue, newValue) {
+ return new types.ConditionDifference(oldValue, newValue);
+}
+exports.diffCondition = diffCondition;
+function diffMapping(oldValue, newValue) {
+ return new types.MappingDifference(oldValue, newValue);
+}
+exports.diffMapping = diffMapping;
+function diffMetadata(oldValue, newValue) {
+ return new types.MetadataDifference(oldValue, newValue);
+}
+exports.diffMetadata = diffMetadata;
+function diffOutput(oldValue, newValue) {
+ return new types.OutputDifference(oldValue, newValue);
+}
+exports.diffOutput = diffOutput;
+function diffParameter(oldValue, newValue) {
+ return new types.ParameterDifference(oldValue, newValue);
+}
+exports.diffParameter = diffParameter;
+function diffResource(oldValue, newValue) {
+ const resourceType = {
+ oldType: oldValue && oldValue.Type,
+ newType: newValue && newValue.Type,
+ };
+ let propertyDiffs = {};
+ let otherDiffs = {};
+ if (resourceType.oldType !== undefined && resourceType.oldType === resourceType.newType) {
+ // Only makes sense to inspect deeper if the types stayed the same
+ const typeSpec = cfnspec.filteredSpecification(resourceType.oldType);
+ const impl = typeSpec.ResourceTypes[resourceType.oldType];
+ propertyDiffs = (0, util_1.diffKeyedEntities)(oldValue.Properties, newValue.Properties, (oldVal, newVal, key) => _diffProperty(oldVal, newVal, key, impl));
+ otherDiffs = (0, util_1.diffKeyedEntities)(oldValue, newValue, _diffOther);
+ delete otherDiffs.Properties;
+ }
+ return new types.ResourceDifference(oldValue, newValue, {
+ resourceType, propertyDiffs, otherDiffs,
+ });
+ function _diffProperty(oldV, newV, key, resourceSpec) {
+ let changeImpact = types.ResourceImpact.NO_CHANGE;
+ const spec = resourceSpec && resourceSpec.Properties && resourceSpec.Properties[key];
+ if (spec && !(0, util_1.deepEqual)(oldV, newV)) {
+ switch (spec.UpdateType) {
+ case cfnspec.schema.UpdateType.Immutable:
+ changeImpact = types.ResourceImpact.WILL_REPLACE;
+ break;
+ case cfnspec.schema.UpdateType.Conditional:
+ changeImpact = types.ResourceImpact.MAY_REPLACE;
+ break;
+ default:
+ // In those cases, whatever is the current value is what we should keep
+ changeImpact = types.ResourceImpact.WILL_UPDATE;
+ }
+ }
+ return new types.PropertyDifference(oldV, newV, { changeImpact });
+ }
+ function _diffOther(oldV, newV) {
+ return new types.Difference(oldV, newV);
+ }
+}
+exports.diffResource = diffResource;
+function diffUnknown(oldValue, newValue) {
+ return new types.Difference(oldValue, newValue);
+}
+exports.diffUnknown = diffUnknown;
+/**
+ * Coerces a given value to +string | undefined+.
+ *
+ * @param value the value to be coerced.
+ *
+ * @returns +undefined+ if +value+ is +null+ or +undefined+,
+ * +value+ if it is a +string+,
+ * a compact JSON representation of +value+ otherwise.
+ */
+function _asString(value) {
+ if (value == null) {
+ return undefined;
+ }
+ if (typeof value === 'string') {
+ return value;
+ }
+ return JSON.stringify(value);
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw0Q0FBNEM7QUFDNUMsaUNBQWlDO0FBQ2pDLGlDQUFzRDtBQUV0RCxTQUFnQixhQUFhLENBQUMsUUFBYSxFQUFFLFFBQWE7SUFDeEQsT0FBTyxJQUFJLEtBQUssQ0FBQyxVQUFVLENBQVMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0FBQ2hGLENBQUM7QUFGRCxzQ0FFQztBQUVELFNBQWdCLGFBQWEsQ0FBQyxRQUF5QixFQUFFLFFBQXlCO0lBQ2hGLE9BQU8sSUFBSSxLQUFLLENBQUMsbUJBQW1CLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQzNELENBQUM7QUFGRCxzQ0FFQztBQUVELFNBQWdCLFdBQVcsQ0FBQyxRQUF1QixFQUFFLFFBQXVCO0lBQzFFLE9BQU8sSUFBSSxLQUFLLENBQUMsaUJBQWlCLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ3pELENBQUM7QUFGRCxrQ0FFQztBQUVELFNBQWdCLFlBQVksQ0FBQyxRQUF3QixFQUFFLFFBQXdCO0lBQzdFLE9BQU8sSUFBSSxLQUFLLENBQUMsa0JBQWtCLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQzFELENBQUM7QUFGRCxvQ0FFQztBQUVELFNBQWdCLFVBQVUsQ0FBQyxRQUFzQixFQUFFLFFBQXNCO0lBQ3ZFLE9BQU8sSUFBSSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ3hELENBQUM7QUFGRCxnQ0FFQztBQUVELFNBQWdCLGFBQWEsQ0FBQyxRQUF5QixFQUFFLFFBQXlCO0lBQ2hGLE9BQU8sSUFBSSxLQUFLLENBQUMsbUJBQW1CLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQzNELENBQUM7QUFGRCxzQ0FFQztB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SUFBSSxLQUFLLElBQUksSUFBSSxFQUFFO1FBQ2pCLE9BQU8sU0FBUyxDQUFDO0tBQ2xCO0lBQ0QsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUU7UUFDN0IsT0FBTyxLQUFlLENBQUM7S0FDeEI7SUFDRCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDL0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGNmbnNwZWMgZnJvbSAnQGF3cy1jZGsvY2Zuc3BlYyc7XG5pbXBvcnQgKiBhcyB0eXBlcyBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IGRlZXBFcXVhbCwgZGlmZktleWVkRW50aXRpZXMgfSBmcm9tICcuL3V0aWwnO1xuXG5leHBvcnQgZnVuY3Rpb24gZGlmZkF0dHJpYnV0ZShvbGRWYWx1ZTogYW55LCBuZXdWYWx1ZTogYW55KTogdHlwZXMuRGlmZmVyZW5jZTxzdHJpbmc+IHtcbiAgcmV0dXJuIG5ldyB0eXBlcy5EaWZmZXJlbmNlPHN0cmluZz4oX2FzU3RyaW5nKG9sZFZhbHVlKSwgX2FzU3RyaW5nKG5ld1ZhbHVlKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkaWZmQ29uZGl0aW9uKG9sZFZhbHVlOiB0eXBlcy5Db25kaXRpb24sIG5ld1ZhbHVlOiB0eXBlcy5Db25kaXRpb24pOiB0eXBlcy5Db25kaXRpb25EaWZmZXJlbmNlIHtcbiAgcmV0dXJuIG5ldyB0eXBlcy5Db25kaXRpb25EaWZmZXJlbmNlKG9sZFZhbHVlLCBuZXdWYWx1ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkaWZmTWFwcGluZyhvbGRWYWx1ZTogdHlwZXMuTWFwcGluZywgbmV3VmFsdWU6IHR5cGVzLk1hcHBpbmcpOiB0eXBlcy5NYXBwaW5nRGlmZmVyZW5jZSB7XG4gIHJldHVybiBuZXcgdHlwZXMuTWFwcGluZ0RpZmZlcmVuY2Uob2xkVmFsdWUsIG5ld1ZhbHVlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRpZmZNZXRhZGF0YShvbGRWYWx1ZTogdHlwZXMuTWV0YWRhdGEsIG5ld1ZhbHVlOiB0eXBlcy5NZXRhZGF0YSk6IHR5cGVzLk1ldGFkYXRhRGlmZmVyZW5jZSB7XG4gIHJldHVybiBuZXcgdHlwZXMuTWV0YWRhdGFEaWZmZXJlbmNlKG9sZFZhbHVlLCBuZXdWYWx1ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkaWZmT3V0cHV0KG9sZFZhbHVlOiB0eXBlcy5PdXRwdXQsIG5ld1ZhbHVlOiB0eXBlcy5PdXRwdXQpOiB0eXBlcy5PdXRwdXREaWZmZXJlbmNlIHtcbiAgcmV0dXJuIG5ldyB0eXBlcy5PdXRwdXREaWZmZXJlbmNlKG9sZFZhbHVlLCBuZXdWYWx1ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkaWZmUGFyYW1ldGVyKG9sZFZhbHVlOiB0eXBlcy5QYXJhbWV0ZXIsIG5ld1ZhbHVlOiB0eXBlcy5QYXJhbWV0ZXIpOiB0eXBlcy5QYXJhbWV0ZXJEaWZmZXJlbmNlIHtcbiAgcmV0dXJuIG5ldyB0eXBlcy5QYXJhbWV0ZXJEaWZmZXJlbmNlKG9sZFZhbHVlLCBuZXdWYWx1ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkaWZmUmVzb3VyY2Uob2xkVmFsdWU/OiB0eXBlcy5SZXNvdXJjZSwgbmV3VmFsdWU/OiB0eXBlcy5SZXNvdXJjZSk6IHR5cGVzLlJlc291cmNlRGlmZmVyZW5jZSB7XG4gIGNvbnN0IHJlc291cmNlVHlwZSA9IHtcbiAgICBvbGRUeXBlOiBvbGRWYWx1ZSAmJiBvbGRWYWx1ZS5UeXBlLFxuICAgIG5ld1R5cGU6IG5ld1ZhbHVlICYmIG5ld1ZhbHVlLlR5cGUsXG4gIH07XG4gIGxldCBwcm9wZXJ0eURpZmZzOiB7IFtrZXk6IHN0cmluZ106IHR5cGVzLlByb3BlcnR5RGlmZmVyZW5jZTxhbnk+IH0gPSB7fTtcbiAgbGV0IG90aGVyRGlmZnM6IHsgW2tleTogc3RyaW5nXTogdHlwZXMuRGlmZmVyZW5jZTxhbnk+IH0gPSB7fTtcblxuICBpZiAocmVzb3VyY2VUeXBlLm9sZFR5cGUgIT09IHVuZGVmaW5lZCAmJiByZXNvdXJjZVR5cGUub2xkVHlwZSA9PT0gcmVzb3VyY2VUeXBlLm5ld1R5cGUpIHtcbiAgICAvLyBPbmx5IG1ha2VzIHNlbnNlIHRvIGluc3BlY3QgZGVlcGVyIGlmIHRoZSB0eXBlcyBzdGF5ZWQgdGhlIHNhbWVcbiAgICBjb25zdCB0eXBlU3BlYyA9IGNmbnNwZWMuZmlsdGVyZWRTcGVjaWZpY2F0aW9uKHJlc291cmNlVHlwZS5vbGRUeXBlKTtcbiAgICBjb25zdCBpbXBsID0gdHlwZVNwZWMuUmVzb3VyY2VUeXBlc1tyZXNvdXJjZVR5cGUub2xkVHlwZV07XG4gICAgcHJvcGVydHlEaWZmcyA9IGRpZmZLZXllZEVudGl0aWVzKG9sZFZhbHVlIS5Qcm9wZXJ0aWVzLFxuICAgICAgbmV3VmFsdWUhLlByb3BlcnRpZXMsXG4gICAgICAob2xkVmFsLCBuZXdWYWwsIGtleSkgPT4gX2RpZmZQcm9wZXJ0eShvbGRWYWwsIG5ld1ZhbCwga2V5LCBpbXBsKSk7XG5cbiAgICBvdGhlckRpZmZzID0gZGlmZktleWVkRW50aXRpZXMob2xkVmFsdWUsIG5ld1ZhbHVlLCBfZGlmZk90aGVyKTtcbiAgICBkZWxldGUgb3RoZXJEaWZmcy5Qcm9wZXJ0aWVzO1xuICB9XG5cbiAgcmV0dXJuIG5ldyB0eXBlcy5SZXNvdXJjZURpZmZlcmVuY2Uob2xkVmFsdWUsIG5ld1ZhbHVlLCB7XG4gICAgcmVzb3VyY2VUeXBlLCBwcm9wZXJ0eURpZmZzLCBvdGhlckRpZmZzLFxuICB9KTtcblxuICBmdW5jdGlvbiBfZGlmZlByb3BlcnR5KG9sZFY6IGFueSwgbmV3VjogYW55LCBrZXk6IHN0cmluZywgcmVzb3VyY2VTcGVjPzogY2Zuc3BlYy5zY2hlbWEuUmVzb3VyY2VUeXBlKSB7XG4gICAgbGV0IGNoYW5nZUltcGFjdCA9IHR5cGVzLlJlc291cmNlSW1wYWN0Lk5PX0NIQU5HRTtcblxuICAgIGNvbnN0IHNwZWMgPSByZXNvdXJjZVNwZWMgJiYgcmVzb3VyY2VTcGVjLlByb3BlcnRpZXMgJiYgcmVzb3VyY2VTcGVjLlByb3BlcnRpZXNba2V5XTtcbiAgICBpZiAoc3BlYyAmJiAhZGVlcEVxdWFsKG9sZFYsIG5ld1YpKSB7XG4gICAgICBzd2l0Y2ggKHNwZWMuVXBkYXRlVHlwZSkge1xuICAgICAgICBjYXNlIGNmbnNwZWMuc2NoZW1hLlVwZGF0ZVR5cGUuSW1tdXRhYmxlOlxuICAgICAgICAgIGNoYW5nZUltcGFjdCA9IHR5cGVzLlJlc291cmNlSW1wYWN0LldJTExfUkVQTEFDRTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBjZm5zcGVjLnNjaGVtYS5VcGRhdGVUeXBlLkNvbmRpdGlvbmFsOlxuICAgICAgICAgIGNoYW5nZUltcGFjdCA9IHR5cGVzLlJlc291cmNlSW1wYWN0Lk1BWV9SRVBMQUNFO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIC8vIEluIHRob3NlIGNhc2VzLCB3aGF0ZXZlciBpcyB0aGUgY3VycmVudCB2YWx1ZSBpcyB3aGF0IHdlIHNob3VsZCBrZWVwXG4gICAgICAgICAgY2hhbmdlSW1wYWN0ID0gdHlwZXMuUmVzb3VyY2VJbXBhY3QuV0lMTF9VUERBVEU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyB0eXBlcy5Qcm9wZXJ0eURpZmZlcmVuY2Uob2xkViwgbmV3ViwgeyBjaGFuZ2VJbXBhY3QgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBfZGlmZk90aGVyKG9sZFY6IGFueSwgbmV3VjogYW55KSB7XG4gICAgcmV0dXJuIG5ldyB0eXBlcy5EaWZmZXJlbmNlKG9sZFYsIG5ld1YpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkaWZmVW5rbm93bihvbGRWYWx1ZTogYW55LCBuZXdWYWx1ZTogYW55KTogdHlwZXMuRGlmZmVyZW5jZTxhbnk+IHtcbiAgcmV0dXJuIG5ldyB0eXBlcy5EaWZmZXJlbmNlKG9sZFZhbHVlLCBuZXdWYWx1ZSk7XG59XG5cbi8qKlxuICogQ29lcmNlcyBhIGdpdmVuIHZhbHVlIHRvICtzdHJpbmcgfCB1bmRlZmluZWQrLlxuICpcbiAqIEBwYXJhbSB2YWx1ZSB0aGUgdmFsdWUgdG8gYmUgY29lcmNlZC5cbiAqXG4gKiBAcmV0dXJucyArdW5kZWZpbmVkKyBpZiArdmFsdWUrIGlzICtudWxsKyBvciArdW5kZWZpbmVkKyxcbiAqICAgICAgK3ZhbHVlKyBpZiBpdCBpcyBhICtzdHJpbmcrLFxuICogICAgICBhIGNvbXBhY3QgSlNPTiByZXByZXNlbnRhdGlvbiBvZiArdmFsdWUrIG90aGVyd2lzZS5cbiAqL1xuZnVuY3Rpb24gX2FzU3RyaW5nKHZhbHVlOiBhbnkpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdmFsdWUgYXMgc3RyaW5nO1xuICB9XG4gIHJldHVybiBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG59XG4iXX0=
+
+/***/ }),
+
+/***/ 90544:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.mkUnparseable = exports.mkParsed = void 0;
+function mkParsed(value) {
+ return { type: 'parsed', value };
+}
+exports.mkParsed = mkParsed;
+function mkUnparseable(value) {
+ return {
+ type: 'unparseable',
+ repr: typeof value === 'string' ? value : JSON.stringify(value),
+ };
+}
+exports.mkUnparseable = mkUnparseable;
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF5YmUtcGFyc2VkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsibWF5YmUtcGFyc2VkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQWVBLFNBQWdCLFFBQVEsQ0FBSSxLQUFRO0lBQ2xDLE9BQU8sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDO0FBQ25DLENBQUM7QUFGRCw0QkFFQztBQUVELFNBQWdCLGFBQWEsQ0FBQyxLQUFVO0lBQ3RDLE9BQU87UUFDTCxJQUFJLEVBQUUsYUFBYTtRQUNuQixJQUFJLEVBQUUsT0FBTyxLQUFLLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDO0tBQ2hFLENBQUM7QUFDSixDQUFDO0FBTEQsc0NBS0MiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEEgdmFsdWUgdGhhdCBtYXkgb3IgbWF5IG5vdCBiZSBwYXJzZWFibGVcbiAqL1xuZXhwb3J0IHR5cGUgTWF5YmVQYXJzZWQ8QT4gPSBQYXJzZWQ8QT4gfCBVbnBhcnNlYWJsZUNmbjtcblxuZXhwb3J0IGludGVyZmFjZSBQYXJzZWQ8QT4ge1xuICByZWFkb25seSB0eXBlOiAncGFyc2VkJztcbiAgcmVhZG9ubHkgdmFsdWU6IEE7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVW5wYXJzZWFibGVDZm4ge1xuICByZWFkb25seSB0eXBlOiAndW5wYXJzZWFibGUnO1xuICByZWFkb25seSByZXByOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBta1BhcnNlZDxBPih2YWx1ZTogQSk6IFBhcnNlZDxBPiB7XG4gIHJldHVybiB7IHR5cGU6ICdwYXJzZWQnLCB2YWx1ZSB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWtVbnBhcnNlYWJsZSh2YWx1ZTogYW55KTogVW5wYXJzZWFibGVDZm4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6ICd1bnBhcnNlYWJsZScsXG4gICAgcmVwcjogdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IHZhbHVlIDogSlNPTi5zdHJpbmdpZnkodmFsdWUpLFxuICB9O1xufVxuIl19
+
+/***/ }),
+
+/***/ 9596:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.isPropertyDifference = exports.ResourceDifference = exports.ResourceImpact = exports.ParameterDifference = exports.OutputDifference = exports.MetadataDifference = exports.MappingDifference = exports.ConditionDifference = exports.DifferenceCollection = exports.PropertyDifference = exports.Difference = exports.TemplateDiff = void 0;
+const assert_1 = __nccwpck_require__(39491);
+const cfnspec = __nccwpck_require__(72665);
+const util_1 = __nccwpck_require__(3089);
+const iam_changes_1 = __nccwpck_require__(23154);
+const security_group_changes_1 = __nccwpck_require__(43847);
+/** Semantic differences between two CloudFormation templates. */
+class TemplateDiff {
+ constructor(args) {
+ if (args.awsTemplateFormatVersion !== undefined) {
+ this.awsTemplateFormatVersion = args.awsTemplateFormatVersion;
+ }
+ if (args.description !== undefined) {
+ this.description = args.description;
+ }
+ if (args.transform !== undefined) {
+ this.transform = args.transform;
+ }
+ this.conditions = args.conditions || new DifferenceCollection({});
+ this.mappings = args.mappings || new DifferenceCollection({});
+ this.metadata = args.metadata || new DifferenceCollection({});
+ this.outputs = args.outputs || new DifferenceCollection({});
+ this.parameters = args.parameters || new DifferenceCollection({});
+ this.resources = args.resources || new DifferenceCollection({});
+ this.unknown = args.unknown || new DifferenceCollection({});
+ this.iamChanges = new iam_changes_1.IamChanges({
+ propertyChanges: this.scrutinizablePropertyChanges(iam_changes_1.IamChanges.IamPropertyScrutinies),
+ resourceChanges: this.scrutinizableResourceChanges(iam_changes_1.IamChanges.IamResourceScrutinies),
+ });
+ this.securityGroupChanges = new security_group_changes_1.SecurityGroupChanges({
+ egressRulePropertyChanges: this.scrutinizablePropertyChanges([cfnspec.schema.PropertyScrutinyType.EgressRules]),
+ ingressRulePropertyChanges: this.scrutinizablePropertyChanges([cfnspec.schema.PropertyScrutinyType.IngressRules]),
+ egressRuleResourceChanges: this.scrutinizableResourceChanges([cfnspec.schema.ResourceScrutinyType.EgressRuleResource]),
+ ingressRuleResourceChanges: this.scrutinizableResourceChanges([cfnspec.schema.ResourceScrutinyType.IngressRuleResource]),
+ });
+ }
+ get differenceCount() {
+ let count = 0;
+ if (this.awsTemplateFormatVersion !== undefined) {
+ count += 1;
+ }
+ if (this.description !== undefined) {
+ count += 1;
+ }
+ if (this.transform !== undefined) {
+ count += 1;
+ }
+ count += this.conditions.differenceCount;
+ count += this.mappings.differenceCount;
+ count += this.metadata.differenceCount;
+ count += this.outputs.differenceCount;
+ count += this.parameters.differenceCount;
+ count += this.resources.differenceCount;
+ count += this.unknown.differenceCount;
+ return count;
+ }
+ get isEmpty() {
+ return this.differenceCount === 0;
+ }
+ /**
+ * Return true if any of the permissions objects involve a broadening of permissions
+ */
+ get permissionsBroadened() {
+ return this.iamChanges.permissionsBroadened || this.securityGroupChanges.rulesAdded;
+ }
+ /**
+ * Return true if any of the permissions objects have changed
+ */
+ get permissionsAnyChanges() {
+ return this.iamChanges.hasChanges || this.securityGroupChanges.hasChanges;
+ }
+ /**
+ * Return all property changes of a given scrutiny type
+ *
+ * We don't just look at property updates; we also look at resource additions and deletions (in which
+ * case there is no further detail on property values), and resource type changes.
+ */
+ scrutinizablePropertyChanges(scrutinyTypes) {
+ const ret = new Array();
+ for (const [resourceLogicalId, resourceChange] of Object.entries(this.resources.changes)) {
+ if (resourceChange.resourceTypeChanged) {
+ // we ignore resource type changes here, and handle them in scrutinizableResourceChanges()
+ continue;
+ }
+ const props = cfnspec.scrutinizablePropertyNames(resourceChange.newResourceType, scrutinyTypes);
+ for (const propertyName of props) {
+ ret.push({
+ resourceLogicalId,
+ propertyName,
+ resourceType: resourceChange.resourceType,
+ scrutinyType: cfnspec.propertySpecification(resourceChange.resourceType, propertyName).ScrutinyType,
+ oldValue: resourceChange.oldProperties && resourceChange.oldProperties[propertyName],
+ newValue: resourceChange.newProperties && resourceChange.newProperties[propertyName],
+ });
+ }
+ }
+ return ret;
+ }
+ /**
+ * Return all resource changes of a given scrutiny type
+ *
+ * We don't just look at resource updates; we also look at resource additions and deletions (in which
+ * case there is no further detail on property values), and resource type changes.
+ */
+ scrutinizableResourceChanges(scrutinyTypes) {
+ const ret = new Array();
+ const scrutinizableTypes = new Set(cfnspec.scrutinizableResourceTypes(scrutinyTypes));
+ for (const [resourceLogicalId, resourceChange] of Object.entries(this.resources.changes)) {
+ if (!resourceChange) {
+ continue;
+ }
+ const commonProps = {
+ oldProperties: resourceChange.oldProperties,
+ newProperties: resourceChange.newProperties,
+ resourceLogicalId,
+ };
+ // changes to the Type of resources can happen when migrating from CFN templates that use Transforms
+ if (resourceChange.resourceTypeChanged) {
+ // Treat as DELETE+ADD
+ if (scrutinizableTypes.has(resourceChange.oldResourceType)) {
+ ret.push({
+ ...commonProps,
+ newProperties: undefined,
+ resourceType: resourceChange.oldResourceType,
+ scrutinyType: cfnspec.resourceSpecification(resourceChange.oldResourceType).ScrutinyType,
+ });
+ }
+ if (scrutinizableTypes.has(resourceChange.newResourceType)) {
+ ret.push({
+ ...commonProps,
+ oldProperties: undefined,
+ resourceType: resourceChange.newResourceType,
+ scrutinyType: cfnspec.resourceSpecification(resourceChange.newResourceType).ScrutinyType,
+ });
+ }
+ }
+ else {
+ if (scrutinizableTypes.has(resourceChange.resourceType)) {
+ ret.push({
+ ...commonProps,
+ resourceType: resourceChange.resourceType,
+ scrutinyType: cfnspec.resourceSpecification(resourceChange.resourceType).ScrutinyType,
+ });
+ }
+ }
+ }
+ return ret;
+ }
+}
+exports.TemplateDiff = TemplateDiff;
+/**
+ * Models an entity that changed between two versions of a CloudFormation template.
+ */
+class Difference {
+ /**
+ * @param oldValue the old value, cannot be equal (to the sense of +deepEqual+) to +newValue+.
+ * @param newValue the new value, cannot be equal (to the sense of +deepEqual+) to +oldValue+.
+ */
+ constructor(oldValue, newValue) {
+ this.oldValue = oldValue;
+ this.newValue = newValue;
+ if (oldValue === undefined && newValue === undefined) {
+ throw new assert_1.AssertionError({ message: 'oldValue and newValue are both undefined!' });
+ }
+ this.isDifferent = !(0, util_1.deepEqual)(oldValue, newValue);
+ }
+ /** @returns +true+ if the element is new to the template. */
+ get isAddition() {
+ return this.oldValue === undefined;
+ }
+ /** @returns +true+ if the element was removed from the template. */
+ get isRemoval() {
+ return this.newValue === undefined;
+ }
+ /** @returns +true+ if the element was already in the template and is updated. */
+ get isUpdate() {
+ return this.oldValue !== undefined
+ && this.newValue !== undefined;
+ }
+}
+exports.Difference = Difference;
+class PropertyDifference extends Difference {
+ constructor(oldValue, newValue, args) {
+ super(oldValue, newValue);
+ this.changeImpact = args.changeImpact;
+ }
+}
+exports.PropertyDifference = PropertyDifference;
+class DifferenceCollection {
+ constructor(diffs) {
+ this.diffs = diffs;
+ }
+ get changes() {
+ return onlyChanges(this.diffs);
+ }
+ get differenceCount() {
+ return Object.values(this.changes).length;
+ }
+ get(logicalId) {
+ const ret = this.diffs[logicalId];
+ if (!ret) {
+ throw new Error(`No object with logical ID '${logicalId}'`);
+ }
+ return ret;
+ }
+ get logicalIds() {
+ return Object.keys(this.changes);
+ }
+ /**
+ * Returns a new TemplateDiff which only contains changes for which `predicate`
+ * returns `true`.
+ */
+ filter(predicate) {
+ const newChanges = {};
+ for (const id of Object.keys(this.changes)) {
+ const diff = this.changes[id];
+ if (predicate(diff)) {
+ newChanges[id] = diff;
+ }
+ }
+ return new DifferenceCollection(newChanges);
+ }
+ /**
+ * Invokes `cb` for all changes in this collection.
+ *
+ * Changes will be sorted as follows:
+ * - Removed
+ * - Added
+ * - Updated
+ * - Others
+ *
+ * @param cb
+ */
+ forEachDifference(cb) {
+ const removed = new Array();
+ const added = new Array();
+ const updated = new Array();
+ const others = new Array();
+ for (const logicalId of this.logicalIds) {
+ const change = this.changes[logicalId];
+ if (change.isAddition) {
+ added.push({ logicalId, change });
+ }
+ else if (change.isRemoval) {
+ removed.push({ logicalId, change });
+ }
+ else if (change.isUpdate) {
+ updated.push({ logicalId, change });
+ }
+ else if (change.isDifferent) {
+ others.push({ logicalId, change });
+ }
+ }
+ removed.forEach(v => cb(v.logicalId, v.change));
+ added.forEach(v => cb(v.logicalId, v.change));
+ updated.forEach(v => cb(v.logicalId, v.change));
+ others.forEach(v => cb(v.logicalId, v.change));
+ }
+}
+exports.DifferenceCollection = DifferenceCollection;
+class ConditionDifference extends Difference {
+}
+exports.ConditionDifference = ConditionDifference;
+class MappingDifference extends Difference {
+}
+exports.MappingDifference = MappingDifference;
+class MetadataDifference extends Difference {
+}
+exports.MetadataDifference = MetadataDifference;
+class OutputDifference extends Difference {
+}
+exports.OutputDifference = OutputDifference;
+class ParameterDifference extends Difference {
+}
+exports.ParameterDifference = ParameterDifference;
+var ResourceImpact;
+(function (ResourceImpact) {
+ /** The existing physical resource will be updated */
+ ResourceImpact["WILL_UPDATE"] = "WILL_UPDATE";
+ /** A new physical resource will be created */
+ ResourceImpact["WILL_CREATE"] = "WILL_CREATE";
+ /** The existing physical resource will be replaced */
+ ResourceImpact["WILL_REPLACE"] = "WILL_REPLACE";
+ /** The existing physical resource may be replaced */
+ ResourceImpact["MAY_REPLACE"] = "MAY_REPLACE";
+ /** The existing physical resource will be destroyed */
+ ResourceImpact["WILL_DESTROY"] = "WILL_DESTROY";
+ /** The existing physical resource will be removed from CloudFormation supervision */
+ ResourceImpact["WILL_ORPHAN"] = "WILL_ORPHAN";
+ /** There is no change in this resource */
+ ResourceImpact["NO_CHANGE"] = "NO_CHANGE";
+})(ResourceImpact || (exports.ResourceImpact = ResourceImpact = {}));
+/**
+ * This function can be used as a reducer to obtain the resource-level impact of a list
+ * of property-level impacts.
+ * @param one the current worst impact so far.
+ * @param two the new impact being considered (can be undefined, as we may not always be
+ * able to determine some peroperty's impact).
+ */
+function worstImpact(one, two) {
+ if (!two) {
+ return one;
+ }
+ const badness = {
+ [ResourceImpact.NO_CHANGE]: 0,
+ [ResourceImpact.WILL_UPDATE]: 1,
+ [ResourceImpact.WILL_CREATE]: 2,
+ [ResourceImpact.WILL_ORPHAN]: 3,
+ [ResourceImpact.MAY_REPLACE]: 4,
+ [ResourceImpact.WILL_REPLACE]: 5,
+ [ResourceImpact.WILL_DESTROY]: 6,
+ };
+ return badness[one] > badness[two] ? one : two;
+}
+/**
+ * Change to a single resource between two CloudFormation templates
+ *
+ * This class can be mutated after construction.
+ */
+class ResourceDifference {
+ constructor(oldValue, newValue, args) {
+ this.oldValue = oldValue;
+ this.newValue = newValue;
+ this.resourceTypes = args.resourceType;
+ this.propertyDiffs = args.propertyDiffs;
+ this.otherDiffs = args.otherDiffs;
+ this.isAddition = oldValue === undefined;
+ this.isRemoval = newValue === undefined;
+ }
+ get oldProperties() {
+ return this.oldValue && this.oldValue.Properties;
+ }
+ get newProperties() {
+ return this.newValue && this.newValue.Properties;
+ }
+ /**
+ * Whether this resource was modified at all
+ */
+ get isDifferent() {
+ return this.differenceCount > 0 || this.oldResourceType !== this.newResourceType;
+ }
+ /**
+ * Whether the resource was updated in-place
+ */
+ get isUpdate() {
+ return this.isDifferent && !this.isAddition && !this.isRemoval;
+ }
+ get oldResourceType() {
+ return this.resourceTypes.oldType;
+ }
+ get newResourceType() {
+ return this.resourceTypes.newType;
+ }
+ /**
+ * All actual property updates
+ */
+ get propertyUpdates() {
+ return onlyChanges(this.propertyDiffs);
+ }
+ /**
+ * All actual "other" updates
+ */
+ get otherChanges() {
+ return onlyChanges(this.otherDiffs);
+ }
+ /**
+ * Return whether the resource type was changed in this diff
+ *
+ * This is not a valid operation in CloudFormation but to be defensive we're going
+ * to be aware of it anyway.
+ */
+ get resourceTypeChanged() {
+ return (this.resourceTypes.oldType !== undefined
+ && this.resourceTypes.newType !== undefined
+ && this.resourceTypes.oldType !== this.resourceTypes.newType);
+ }
+ /**
+ * Return the resource type if it was unchanged
+ *
+ * If the resource type was changed, it's an error to call this.
+ */
+ get resourceType() {
+ if (this.resourceTypeChanged) {
+ throw new Error('Cannot get .resourceType, because the type was changed');
+ }
+ return this.resourceTypes.oldType || this.resourceTypes.newType;
+ }
+ /**
+ * Replace a PropertyChange in this object
+ *
+ * This affects the property diff as it is summarized to users, but it DOES
+ * NOT affect either the "oldValue" or "newValue" values; those still contain
+ * the actual template values as provided by the user (they might still be
+ * used for downstream processing).
+ */
+ setPropertyChange(propertyName, change) {
+ this.propertyDiffs[propertyName] = change;
+ }
+ get changeImpact() {
+ // Check the Type first
+ if (this.resourceTypes.oldType !== this.resourceTypes.newType) {
+ if (this.resourceTypes.oldType === undefined) {
+ return ResourceImpact.WILL_CREATE;
+ }
+ if (this.resourceTypes.newType === undefined) {
+ return this.oldValue.DeletionPolicy === 'Retain'
+ ? ResourceImpact.WILL_ORPHAN
+ : ResourceImpact.WILL_DESTROY;
+ }
+ return ResourceImpact.WILL_REPLACE;
+ }
+ // Base impact (before we mix in the worst of the property impacts);
+ // WILL_UPDATE if we have "other" changes, NO_CHANGE if there are no "other" changes.
+ const baseImpact = Object.keys(this.otherChanges).length > 0 ? ResourceImpact.WILL_UPDATE : ResourceImpact.NO_CHANGE;
+ return Object.values(this.propertyDiffs)
+ .map(elt => elt.changeImpact)
+ .reduce(worstImpact, baseImpact);
+ }
+ /**
+ * Count of actual differences (not of elements)
+ */
+ get differenceCount() {
+ return Object.values(this.propertyUpdates).length
+ + Object.values(this.otherChanges).length;
+ }
+ /**
+ * Invoke a callback for each actual difference
+ */
+ forEachDifference(cb) {
+ for (const key of Object.keys(this.propertyUpdates).sort()) {
+ cb('Property', key, this.propertyUpdates[key]);
+ }
+ for (const key of Object.keys(this.otherChanges).sort()) {
+ cb('Other', key, this.otherDiffs[key]);
+ }
+ }
+}
+exports.ResourceDifference = ResourceDifference;
+function isPropertyDifference(diff) {
+ return diff.changeImpact !== undefined;
+}
+exports.isPropertyDifference = isPropertyDifference;
+/**
+ * Filter a map of IDifferences down to only retain the actual changes
+ */
+function onlyChanges(xs) {
+ const ret = {};
+ for (const [key, diff] of Object.entries(xs)) {
+ if (diff.isDifferent) {
+ ret[key] = diff;
+ }
+ }
+ return ret;
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ0eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtQ0FBd0M7QUFDeEMsNENBQTRDO0FBQzVDLGlDQUFtQztBQUNuQyxvREFBZ0Q7QUFDaEQsOEVBQXlFO0FBSXpFLGlFQUFpRTtBQUNqRSxNQUFhLFlBQVk7SUF1QnZCLFlBQVksSUFBbUI7UUFDN0IsSUFBSSxJQUFJLENBQUMsd0JBQXdCLEtBQUssU0FBUyxFQUFFO1lBQy9DLElBQUksQ0FBQyx3QkFBd0IsR0FBRyxJQUFJLENBQUMsd0JBQXdCLENBQUM7U0FDL0Q7UUFDRCxJQUFJLElBQUksQ0FBQyxXQUFXLEtBQUssU0FBUyxFQUFFO1lBQ2xDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztTQUNyQztRQUNELElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxTQUFTLEVBQUU7WUFDaEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1NBQ2pDO1FBRUQsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksb0JBQW9CLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDbEUsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksb0JBQW9CLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDOUQsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksb0JBQW9CLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDOUQsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksb0JBQW9CLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDNUQsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksb0JBQW9CLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDbEUsSUFBSSxDQUFDLFNBQVMs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LE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQzlDLENBQUM7SUFFRDs7T0FFRztJQUNJLGlCQUFpQixDQUFDLEVBQXVHO1FBQzlILEtBQUssTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDMUQsRUFBRSxDQUFDLFVBQVUsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQ2hEO1FBQ0QsS0FBSyxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUN2RCxFQUFFLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FDeEM7SUFDSCxDQUFDO0NBQ0Y7QUE3SkQsZ0RBNkpDO0FBRUQsU0FBZ0Isb0JBQW9CLENBQUksSUFBbUI7SUFDekQsT0FBUSxJQUE4QixDQUFDLFlBQVksS0FBSyxTQUFTLENBQUM7QUFDcEUsQ0FBQztBQUZELG9EQUVDO0FBRUQ7O0dBRUc7QUFDSCxTQUFTLFdBQVcsQ0FBOEIsRUFBc0I7SUFDdEUsTUFBTSxHQUFHLEdBQXlCLEVBQUUsQ0FBQztJQUNyQyxLQUFLLE1BQU0sQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFBRTtRQUM1QyxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDcEIsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztTQUNqQjtLQUNGO0lBQ0QsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXNzZXJ0aW9uRXJyb3IgfSBmcm9tICdhc3NlcnQnO1xuaW1wb3J0ICogYXMgY2Zuc3BlYyBmcm9tICdAYXdzLWNkay9jZm5zcGVjJztcbmltcG9ydCB7IGRlZXBFcXVhbCB9IGZyb20gJy4vdXRpbCc7XG5pbXBvcnQgeyBJYW1DaGFuZ2VzIH0gZnJvbSAnLi4vaWFtL2lhbS1jaGFuZ2VzJztcbmltcG9ydCB7IFNlY3VyaXR5R3JvdXBDaGFuZ2VzIH0gZnJvbSAnLi4vbmV0d29yay9zZWN1cml0eS1ncm91cC1jaGFuZ2VzJztcblxuZXhwb3J0IHR5cGUgUHJvcGVydHlNYXAgPSB7W2tleTogc3RyaW5nXTogYW55IH07XG5cbi8qKiBTZW1hbnRpYyBkaWZmZXJlbmNlcyBiZXR3ZWVuIHR3byBDbG91ZEZvcm1hdGlvbiB0ZW1wbGF0ZXMuICovXG5leHBvcnQgY2xhc3MgVGVtcGxhdGVEaWZmIGltcGxlbWVudHMgSVRlbXBsYXRlRGlmZiB7XG4gIHB1YmxpYyBhd3NUZW1wbGF0ZUZvcm1hdFZlcnNpb24/OiBEaWZmZXJlbmNlPHN0cmluZz47XG4gIHB1YmxpYyBkZXNjcmlwdGlvbj86IERpZmZlcmVuY2U8c3RyaW5nPjtcbiAgcHVibGljIHRyYW5zZm9ybT86IERpZmZlcmVuY2U8c3RyaW5nPjtcbiAgcHVibGljIGNvbmRpdGlvbnM6IERpZmZlcmVuY2VDb2xsZWN0aW9uPENvbmRpdGlvbiwgQ29uZGl0aW9uRGlmZmVyZW5jZT47XG4gIHB1YmxpYyBtYXBwaW5nczogRGlmZmVyZW5jZUNvbGxlY3Rpb248TWFwcGluZywgTWFwcGluZ0RpZmZlcmVuY2U+O1xuICBwdWJsaWMgbWV0YWRhdGE6IERpZmZlcmVuY2VDb2xsZWN0aW9uPE1ldGFkYXRhLCBNZXRhZGF0YURpZmZlcmVuY2U+O1xuICBwdWJsaWMgb3V0cHV0czogRGlmZmVyZW5jZUNvbGxlY3Rpb248T3V0cHV0LCBPdXRwdXREaWZmZXJlbmNlPjtcbiAgcHVibGljIHBhcmFtZXRlcnM6IERpZmZlcmVuY2VDb2xsZWN0aW9uPFBhcmFtZXRlciwgUGFyYW1ldGVyRGlmZmVyZW5jZT47XG4gIHB1YmxpYyByZXNvdXJjZXM6IERpZmZlcmVuY2VDb2xsZWN0aW9uPFJlc291cmNlLCBSZXNvdXJjZURpZmZlcmVuY2U+O1xuICAvKiogVGhlIGRpZmZlcmVuY2VzIGluIHVua25vd24vdW5leHBlY3RlZCBwYXJ0cyBvZiB0aGUgdGVtcGxhdGUgKi9cbiAgcHVibGljIHVua25vd246IERpZmZlcmVuY2VDb2xsZWN0aW9uPGFueSwgRGlmZmVyZW5jZTxhbnk+PjtcblxuICAvKipcbiAgICogQ2hhbmdlcyB0byBJQU0gcG9saWNpZXNcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBpYW1DaGFuZ2VzOiBJYW1DaGFuZ2VzO1xuXG4gIC8qKlxuICAgKiBDaGFuZ2VzIHRvIFNlY3VyaXR5IEdyb3VwIGluZ3Jlc3MgYW5kIGVncmVzcyBydWxlc1xuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHNlY3VyaXR5R3JvdXBDaGFuZ2VzOiBTZWN1cml0eUdyb3VwQ2hhbmdlcztcblxuICBjb25zdHJ1Y3RvcihhcmdzOiBJVGVtcGxhdGVEaWZmKSB7XG4gICAgaWYgKGFyZ3MuYXdzVGVtcGxhdGVGb3JtYXRWZXJzaW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuYXdzVGVtcGxhdGVGb3JtYXRWZXJzaW9uID0gYXJncy5hd3NUZW1wbGF0ZUZvcm1hdFZlcnNpb247XG4gICAgfVxuICAgIGlmIChhcmdzLmRlc2NyaXB0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuZGVzY3JpcHRpb24gPSBhcmdzLmRlc2NyaXB0aW9uO1xuICAgIH1cbiAgICBpZiAoYXJncy50cmFuc2Zvcm0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy50cmFuc2Zvcm0gPSBhcmdzLnRyYW5zZm9ybTtcbiAgICB9XG5cbiAgICB0aGlzLmNvbmRpdGlvbnMgPSBhcmdzLmNvbmRpdGlvbnMgfHwgbmV3IERpZmZlcmVuY2VDb2xsZWN0aW9uKHt9KTtcbiAgICB0aGlzLm1hcHBpbmdzID0gYXJncy5tYXBwaW5ncyB8fCBuZXcgRGlmZmVyZW5jZUNvbGxlY3Rpb24oe30pO1xuICAgIHRoaXMubWV0YWRhdGEgPSBhcmdzLm1ldGFkYXRhIHx8IG5ldyBEaWZmZXJlbmNlQ29sbGVjdGlvbih7fSk7XG4gICAgdGhpcy5vdXRwdXRzID0gYXJncy5vdXRwdXRzIHx8IG5ldyBEaWZmZXJlbmNlQ29sbGVjdGlvbih7fSk7XG4gICAgdGhpcy5wYXJhbWV0ZXJzID0gYXJncy5wYXJhbWV0ZXJzIHx8IG5ldyBEaWZmZXJlbmNlQ29sbGVjdGlvbih7fSk7XG4gICAgdGhpcy5yZXNvdXJjZXMgPSBhcmdzLnJlc291cmNlcyB8fCBuZXcgRGlmZmVyZW5jZUNvbGxlY3Rpb24oe30pO1xuICAgIHRoaXMudW5rbm93biA9IGFyZ3MudW5rbm93biB8fCBuZXcgRGlmZmVyZW5jZUNvbGxlY3Rpb24oe30pO1xuXG4gICAgdGhpcy5pYW1DaGFuZ2VzID0gbmV3IElhbUNoYW5nZXMoe1xuICAgICAgcHJvcGVydHlDaGFuZ2VzOiB0aGlzLnNjcnV0aW5pemFibGVQcm9wZXJ0eUNoYW5nZXMoSWFtQ2hhbmdlcy5JYW1Qcm9wZXJ0eVNjcnV0aW5pZXMpLFxuICAgICAgcmVzb3VyY2VDaGFuZ2VzOiB0aGlzLnNjcnV0aW5pemFibGVSZXNvdXJjZUNoYW5nZXMoSWFtQ2hhbmdlcy5JYW1SZXNvdXJjZVNjcnV0aW5pZXMpLFxuICAgIH0pO1xuXG4gICAgdGhpcy5zZWN1cml0eUdyb3VwQ2hhbmdlcyA9IG5ldyBTZWN1cml0eUdyb3VwQ2hhbmdlcyh7XG4gICAgICBlZ3Jlc3NSdWxlUHJvcGVydHlDaGFuZ2VzOiB0aGlzLnNjcnV0aW5pemFibGVQcm9wZXJ0eUNoYW5nZXMoW2NmbnNwZWMuc2NoZW1hLlByb3BlcnR5U2NydXRpbnlUeXBlLkVncmVzc1J1bGVzXSksXG4gICAgICBpbmdyZXNzUnVsZVByb3BlcnR5Q2hhbmdlczogdGhpcy5zY3J1dGluaXphYmxlUHJvcGVydHlDaGFuZ2VzKFtjZm5zcGVjLnNjaGVtYS5Qcm9wZXJ0eVNjcnV0aW55VHlwZS5JbmdyZXNzUnVsZXNdKSxcbiAgICAgIGVncmVzc1J1bGVSZXNvdXJjZUNoYW5nZXM6IHRoaXMuc2NydXRpbml6YWJsZVJlc291cmNlQ2hhbmdlcyhbY2Zuc3BlYy5zY2hlbWEuUmVzb3VyY2VTY3J1dGlueVR5cGUuRWdyZXNzUnVsZVJlc291cmNlXSksXG4gICAgICBpbmdyZXNzUnVsZVJlc291cmNlQ2hhbmdlczogdGhpcy5zY3J1dGluaXphYmxlUmVzb3VyY2VDaGFuZ2VzKFtjZm5zcGVjLnNjaGVtYS5SZXNvdXJjZVNjcnV0aW55VHlwZS5JbmdyZXNzUnVsZVJlc291cmNlXSksXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGRpZmZlcmVuY2VDb3VudCgpIHtcbiAgICBsZXQgY291bnQgPSAwO1xuXG4gICAgaWYgKHRoaXMuYXdzVGVtcGxhdGVGb3JtYXRWZXJzaW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvdW50ICs9IDE7XG4gICAgfVxuICAgIGlmICh0aGlzLmRlc2NyaXB0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvdW50ICs9IDE7XG4gICAgfVxuICAgIGlmICh0aGlzLnRyYW5zZm9ybSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb3VudCArPSAxO1xuICAgIH1cblxuICAgIGNvdW50ICs9IHRoaXMuY29uZGl0aW9ucy5kaWZmZXJlbmNlQ291bnQ7XG4gICAgY291bnQgKz0gdGhpcy5tYXBwaW5ncy5kaWZmZXJlbmNlQ291bnQ7XG4gICAgY291bnQgKz0gdGhpcy5tZXRhZGF0YS5kaWZmZXJlbmNlQ291bnQ7XG4gICAgY291bnQgKz0gdGhpcy5vdXRwdXRzLmRpZmZlcmVuY2VDb3VudDtcbiAgICBjb3VudCArPSB0aGlzLnBhcmFtZXRlcnMuZGlmZmVyZW5jZUNvdW50O1xuICAgIGNvdW50ICs9IHRoaXMucmVzb3VyY2VzLmRpZmZlcmVuY2VDb3VudDtcbiAgICBjb3VudCArPSB0aGlzLnVua25vd24uZGlmZmVyZW5jZUNvdW50O1xuXG4gICAgcmV0dXJuIGNvdW50O1xuICB9XG5cbiAgcHVibGljIGdldCBpc0VtcHR5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmRpZmZlcmVuY2VDb3VudCA9PT0gMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdHJ1ZSBpZiBhbnkgb2YgdGhlIHBlcm1pc3Npb25zIG9iamVjdHMgaW52b2x2ZSBhIGJyb2FkZW5pbmcgb2YgcGVybWlzc2lvbnNcbiAgICovXG4gIHB1YmxpYyBnZXQgcGVybWlzc2lvbnNCcm9hZGVuZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaWFtQ2hhbmdlcy5wZXJtaXNzaW9uc0Jyb2FkZW5lZCB8fCB0aGlzLnNlY3VyaXR5R3JvdXBDaGFuZ2VzLnJ1bGVzQWRkZWQ7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRydWUgaWYgYW55IG9mIHRoZSBwZXJtaXNzaW9ucyBvYmplY3RzIGhhdmUgY2hhbmdlZFxuICAgKi9cbiAgcHVibGljIGdldCBwZXJtaXNzaW9uc0FueUNoYW5nZXMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaWFtQ2hhbmdlcy5oYXNDaGFuZ2VzIHx8IHRoaXMuc2VjdXJpdHlHcm91cENoYW5nZXMuaGFzQ2hhbmdlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYWxsIHByb3BlcnR5IGNoYW5nZXMgb2YgYSBnaXZlbiBzY3J1dGlueSB0eXBlXG4gICAqXG4gICAqIFdlIGRvbid0IGp1c3QgbG9vayBhdCBwcm9wZXJ0eSB1cGRhdGVzOyB3ZSBhbHNvIGxvb2sgYXQgcmVzb3VyY2UgYWRkaXRpb25zIGFuZCBkZWxldGlvbnMgKGluIHdoaWNoXG4gICAqIGNhc2UgdGhlcmUgaXMgbm8gZnVydGhlciBkZXRhaWwgb24gcHJvcGVydHkgdmFsdWVzKSwgYW5kIHJlc291cmNlIHR5cGUgY2hhbmdlcy5cbiAgICovXG4gIHByaXZhdGUgc2NydXRpbml6YWJsZVByb3BlcnR5Q2hhbmdlcyhzY3J1dGlueVR5cGVzOiBjZm5zcGVjLnNjaGVtYS5Qcm9wZXJ0eVNjcnV0aW55VHlwZVtdKTogUHJvcGVydHlDaGFuZ2VbXSB7XG4gICAgY29uc3QgcmV0ID0gbmV3IEFycmF5PFByb3BlcnR5Q2hhbmdlPigpO1xuXG4gICAgZm9yIChjb25zdCBbcmVzb3VyY2VMb2dpY2FsSWQsIHJlc291cmNlQ2hhbmdlXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLnJlc291cmNlcy5jaGFuZ2VzKSkge1xuICAgICAgaWYgKHJlc291cmNlQ2hhbmdlLnJlc291cmNlVHlwZUNoYW5nZWQpIHtcbiAgICAgICAgLy8gd2UgaWdub3JlIHJlc291cmNlIHR5cGUgY2hhbmdlcyBoZXJlLCBhbmQgaGFuZGxlIHRoZW0gaW4gc2NydXRpbml6YWJsZVJlc291cmNlQ2hhbmdlcygpXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBwcm9wcyA9IGNmbnNwZWMuc2NydXRpbml6YWJsZVByb3BlcnR5TmFtZXMocmVzb3VyY2VDaGFuZ2UubmV3UmVzb3VyY2VUeXBlISwgc2NydXRpbnlUeXBlcyk7XG4gICAgICBmb3IgKGNvbnN0IHByb3BlcnR5TmFtZSBvZiBwcm9wcykge1xuICAgICAgICByZXQucHVzaCh7XG4gICAgICAgICAgcmVzb3VyY2VMb2dpY2FsSWQsXG4gICAgICAgICAgcHJvcGVydHlOYW1lLFxuICAgICAgICAgIHJlc291cmNlVHlwZTogcmVzb3VyY2VDaGFuZ2UucmVzb3VyY2VUeXBlLFxuICAgICAgICAgIHNjcnV0aW55VHlwZTogY2Zuc3BlYy5wcm9wZXJ0eVNwZWNpZmljYXRpb24ocmVzb3VyY2VDaGFuZ2UucmVzb3VyY2VUeXBlLCBwcm9wZXJ0eU5hbWUpLlNjcnV0aW55VHlwZSEsXG4gICAgICAgICAgb2xkVmFsdWU6IHJlc291cmNlQ2hhbmdlLm9sZFByb3BlcnRpZXMgJiYgcmVzb3VyY2VDaGFuZ2Uub2xkUHJvcGVydGllc1twcm9wZXJ0eU5hbWVdLFxuICAgICAgICAgIG5ld1ZhbHVlOiByZXNvdXJjZUNoYW5nZS5uZXdQcm9wZXJ0aWVzICYmIHJlc291cmNlQ2hhbmdlLm5ld1Byb3BlcnRpZXNbcHJvcGVydHlOYW1lXSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJldDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYWxsIHJlc291cmNlIGNoYW5nZXMgb2YgYSBnaXZlbiBzY3J1dGlueSB0eXBlXG4gICAqXG4gICAqIFdlIGRvbid0IGp1c3QgbG9vayBhdCByZXNvdXJjZSB1cGRhdGVzOyB3ZSBhbHNvIGxvb2sgYXQgcmVzb3VyY2UgYWRkaXRpb25zIGFuZCBkZWxldGlvbnMgKGluIHdoaWNoXG4gICAqIGNhc2UgdGhlcmUgaXMgbm8gZnVydGhlciBkZXRhaWwgb24gcHJvcGVydHkgdmFsdWVzKSwgYW5kIHJlc291cmNlIHR5cGUgY2hhbmdlcy5cbiAgICovXG4gIHByaXZhdGUgc2NydXRpbml6YWJsZVJlc291cmNlQ2hhbmdlcyhzY3J1dGlueVR5cGVzOiBjZm5zcGVjLnNjaGVtYS5SZXNvdXJjZVNjcnV0aW55VHlwZVtdKTogUmVzb3VyY2VDaGFuZ2VbXSB7XG4gICAgY29uc3QgcmV0ID0gbmV3IEFycmF5PFJlc291cmNlQ2hhbmdlPigpO1xuXG4gICAgY29uc3Qgc2NydXRpbml6YWJsZVR5cGVzID0gbmV3IFNldChjZm5zcGVjLnNjcnV0aW5pemFibGVSZXNvdXJjZVR5cGVzKHNjcnV0aW55VHlwZXMpKTtcblxuICAgIGZvciAoY29uc3QgW3Jlc291cmNlTG9naWNhbElkLCByZXNvdXJjZUNoYW5nZV0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5yZXNvdXJjZXMuY2hhbmdlcykpIHtcbiAgICAgIGlmICghcmVzb3VyY2VDaGFuZ2UpIHsgY29udGludWU7IH1cblxuICAgICAgY29uc3QgY29tbW9uUHJvcHMgPSB7XG4gICAgICAgIG9sZFByb3BlcnRpZXM6IHJlc291cmNlQ2hhbmdlLm9sZFByb3BlcnRpZXMsXG4gICAgICAgIG5ld1Byb3BlcnRpZXM6IHJlc291cmNlQ2hhbmdlLm5ld1Byb3BlcnRpZXMsXG4gICAgICAgIHJlc291cmNlTG9naWNhbElkLFxuICAgICAgfTtcblxuICAgICAgLy8gY2hhbmdlcyB0byB0aGUgVHlwZSBvZiByZXNvdXJjZXMgY2FuIGhhcHBlbiB3aGVuIG1pZ3JhdGluZyBmcm9tIENGTiB0ZW1wbGF0ZXMgdGhhdCB1c2UgVHJhbnNmb3Jtc1xuICAgICAgaWYgKHJlc291cmNlQ2hhbmdlLnJlc291cmNlVHlwZUNoYW5nZWQpIHtcbiAgICAgICAgLy8gVHJlYXQgYXMgREVMRVRFK0FERFxuICAgICAgICBpZiAoc2NydXRpbml6YWJsZVR5cGVzLmhhcyhyZXNvdXJjZUNoYW5nZS5vbGRSZXNvdXJjZVR5cGUhKSkge1xuICAgICAgICAgIHJldC5wdXNoKHtcbiAgICAgICAgICAgIC4uLmNvbW1vblByb3BzLFxuICAgICAgICAgICAgbmV3UHJvcGVydGllczogdW5kZWZpbmVkLFxuICAgICAgICAgICAgcmVzb3VyY2VUeXBlOiByZXNvdXJjZUNoYW5nZS5vbGRSZXNvdXJjZVR5cGUhLFxuICAgICAgICAgICAgc2NydXRpbnlUeXBlOiBjZm5zcGVjLnJlc291cmNlU3BlY2lmaWNhdGlvbihyZXNvdXJjZUNoYW5nZS5vbGRSZXNvdXJjZVR5cGUhKS5TY3J1dGlueVR5cGUhLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzY3J1dGluaXphYmxlVHlwZXMuaGFzKHJlc291cmNlQ2hhbmdlLm5ld1Jlc291cmNlVHlwZSEpKSB7XG4gICAgICAgICAgcmV0LnB1c2goe1xuICAgICAgICAgICAgLi4uY29tbW9uUHJvcHMsXG4gICAgICAgICAgICBvbGRQcm9wZXJ0aWVzOiB1bmRlZmluZWQsXG4gICAgICAgICAgICByZXNvdXJjZVR5cGU6IHJlc291cmNlQ2hhbmdlLm5ld1Jlc291cmNlVHlwZSEsXG4gICAgICAgICAgICBzY3J1dGlueVR5cGU6IGNmbnNwZWMucmVzb3VyY2VTcGVjaWZpY2F0aW9uKHJlc291cmNlQ2hhbmdlLm5ld1Jlc291cmNlVHlwZSEpLlNjcnV0aW55VHlwZSEsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChzY3J1dGluaXphYmxlVHlwZXMuaGFzKHJlc291cmNlQ2hhbmdlLnJlc291cmNlVHlwZSkpIHtcbiAgICAgICAgICByZXQucHVzaCh7XG4gICAgICAgICAgICAuLi5jb21tb25Qcm9wcyxcbiAgICAgICAgICAgIHJlc291cmNlVHlwZTogcmVzb3VyY2VDaGFuZ2UucmVzb3VyY2VUeXBlLFxuICAgICAgICAgICAgc2NydXRpbnlUeXBlOiBjZm5zcGVjLnJlc291cmNlU3BlY2lmaWNhdGlvbihyZXNvdXJjZUNoYW5nZS5yZXNvdXJjZVR5cGUpLlNjcnV0aW55VHlwZSEsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmV0O1xuICB9XG59XG5cbi8qKlxuICogQSBjaGFuZ2UgaW4gcHJvcGVydHkgdmFsdWVzXG4gKlxuICogTm90IG5lY2Vzc2FyaWx5IGFuIHVwZGF0ZSwgaXQgY291bGQgYmUgdGhhdCB0aGVyZSB1c2VkIHRvIGJlIG5vIHZhbHVlIHRoZXJlXG4gKiBiZWNhdXNlIHRoZXJlIHdhcyBubyByZXNvdXJjZSwgYW5kIG5vdyB0aGVyZSBpcyAob3IgdmljZSB2ZXJzYSkuXG4gKlxuICogVGhlcmVmb3JlLCB3ZSBqdXN0IGNvbnRhaW4gcGxhaW4gdmFsdWVzIGFuZCBub3QgYSBQcm9wZXJ0eURpZmZlcmVuY2U8YW55Pi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQcm9wZXJ0eUNoYW5nZSB7XG4gIC8qKlxuICAgKiBMb2dpY2FsIElEIG9mIHRoZSByZXNvdXJjZSB3aGVyZSB0aGlzIHByb3BlcnR5IGNoYW5nZSB3YXMgZm91bmRcbiAgICovXG4gIHJlc291cmNlTG9naWNhbElkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFR5cGUgb2YgdGhlIHJlc291cmNlXG4gICAqL1xuICByZXNvdXJjZVR5cGU6IHN0cmluZztcblxuICAvKipcbiAgICogU2NydXRpbnkgdHlwZSBmb3IgdGhpcyBwcm9wZXJ0eSBjaGFuZ2VcbiAgICovXG4gIHNjcnV0aW55VHlwZTogY2Zuc3BlYy5zY2hlbWEuUHJvcGVydHlTY3J1dGlueVR5cGU7XG5cbiAgLyoqXG4gICAqIE5hbWUgb2YgdGhlIHByb3BlcnR5IHRoYXQgaXMgY2hhbmdpbmdcbiAgICovXG4gIHByb3BlcnR5TmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgb2xkIHByb3BlcnR5IHZhbHVlXG4gICAqL1xuICBvbGRWYWx1ZT86IGFueTtcblxuICAvKipcbiAgICogVGhlIG5ldyBwcm9wZXJ0eSB2YWx1ZVxuICAgKi9cbiAgbmV3VmFsdWU/OiBhbnk7XG59XG5cbi8qKlxuICogQSByZXNvdXJjZSBjaGFuZ2VcbiAqXG4gKiBFaXRoZXIgYSBjcmVhdGlvbiwgZGVsZXRpb24gb3IgdXBkYXRlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc291cmNlQ2hhbmdlIHtcbiAgLyoqXG4gICAqIExvZ2ljYWwgSUQgb2YgdGhlIHJlc291cmNlIHdoZXJlIHRoaXMgcHJvcGVydHkgY2hhbmdlIHdhcyBmb3VuZFxuICAgKi9cbiAgcmVzb3VyY2VMb2dpY2FsSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogU2NydXRpbnkgdHlwZSBmb3IgdGhpcyByZXNvdXJjZSBjaGFuZ2VcbiAgICovXG4gIHNjcnV0aW55VHlwZTogY2Zuc3BlYy5zY2hlbWEuUmVzb3VyY2VTY3J1dGlueVR5cGU7XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHRoZSByZXNvdXJjZVxuICAgKi9cbiAgcmVzb3VyY2VUeXBlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBvbGQgcHJvcGVydGllcyB2YWx1ZSAobWlnaHQgYmUgdW5kZWZpbmVkIGluIGNhc2Ugb2YgY3JlYXRpb24pXG4gICAqL1xuICBvbGRQcm9wZXJ0aWVzPzogUHJvcGVydHlNYXA7XG5cbiAgLyoqXG4gICAqIFRoZSBuZXcgcHJvcGVydGllcyB2YWx1ZSAobWlnaHQgYmUgdW5kZWZpbmVkIGluIGNhc2Ugb2YgZGVsZXRpb24pXG4gICAqL1xuICBuZXdQcm9wZXJ0aWVzPzogUHJvcGVydHlNYXA7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSURpZmZlcmVuY2U8VmFsdWVUeXBlPiB7XG4gIHJlYWRvbmx5IG9sZFZhbHVlOiBWYWx1ZVR5cGUgfCB1bmRlZmluZWQ7XG4gIHJlYWRvbmx5IG5ld1ZhbHVlOiBWYWx1ZVR5cGUgfCB1bmRlZmluZWQ7XG4gIHJlYWRvbmx5IGlzRGlmZmVyZW50OiBib29sZWFuO1xuICByZWFkb25seSBpc0FkZGl0aW9uOiBib29sZWFuO1xuICByZWFkb25seSBpc1JlbW92YWw6IGJvb2xlYW47XG4gIHJlYWRvbmx5IGlzVXBkYXRlOiBib29sZWFuO1xufVxuXG4vKipcbiAqIE1vZGVscyBhbiBlbnRpdHkgdGhhdCBjaGFuZ2VkIGJldHdlZW4gdHdvIHZlcnNpb25zIG9mIGEgQ2xvdWRGb3JtYXRpb24gdGVtcGxhdGUuXG4gKi9cbmV4cG9ydCBjbGFzcyBEaWZmZXJlbmNlPFZhbHVlVHlwZT4gaW1wbGVtZW50cyBJRGlmZmVyZW5jZTxWYWx1ZVR5cGU+IHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhpcyBpcyBhbiBhY3R1YWwgZGlmZmVyZW50IG9yIHRoZSB2YWx1ZXMgYXJlIGFjdHVhbGx5IHRoZSBzYW1lXG4gICAqXG4gICAqIGlzRGlmZmVyZW50ID0+IChpc1VwZGF0ZSB8IGlzUmVtb3ZlZCB8IGlzVXBkYXRlKVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGlzRGlmZmVyZW50OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAcGFyYW0gb2xkVmFsdWUgdGhlIG9sZCB2YWx1ZSwgY2Fubm90IGJlIGVxdWFsICh0byB0aGUgc2Vuc2Ugb2YgK2RlZXBFcXVhbCspIHRvICtuZXdWYWx1ZSsuXG4gICAqIEBwYXJhbSBuZXdWYWx1ZSB0aGUgbmV3IHZhbHVlLCBjYW5ub3QgYmUgZXF1YWwgKHRvIHRoZSBzZW5zZSBvZiArZGVlcEVxdWFsKykgdG8gK29sZFZhbHVlKy5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyByZWFkb25seSBvbGRWYWx1ZTogVmFsdWVUeXBlIHwgdW5kZWZpbmVkLCBwdWJsaWMgcmVhZG9ubHkgbmV3VmFsdWU6IFZhbHVlVHlwZSB8IHVuZGVmaW5lZCkge1xuICAgIGlmIChvbGRWYWx1ZSA9PT0gdW5kZWZpbmVkICYmIG5ld1ZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcih7IG1lc3NhZ2U6ICdvbGRWYWx1ZSBhbmQgbmV3VmFsdWUgYXJlIGJvdGggdW5kZWZpbmVkIScgfSk7XG4gICAgfVxuICAgIHRoaXMuaXNEaWZmZXJlbnQgPSAhZGVlcEVxdWFsKG9sZFZhbHVlLCBuZXdWYWx1ZSk7XG4gIH1cblxuICAvKiogQHJldHVybnMgK3RydWUrIGlmIHRoZSBlbGVtZW50IGlzIG5ldyB0byB0aGUgdGVtcGxhdGUuICovXG4gIHB1YmxpYyBnZXQgaXNBZGRpdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5vbGRWYWx1ZSA9PT0gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqIEByZXR1cm5zICt0cnVlKyBpZiB0aGUgZWxlbWVudCB3YXMgcmVtb3ZlZCBmcm9tIHRoZSB0ZW1wbGF0ZS4gKi9cbiAgcHVibGljIGdldCBpc1JlbW92YWwoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMubmV3VmFsdWUgPT09IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyArdHJ1ZSsgaWYgdGhlIGVsZW1lbnQgd2FzIGFscmVhZHkgaW4gdGhlIHRlbXBsYXRlIGFuZCBpcyB1cGRhdGVkLiAqL1xuICBwdWJsaWMgZ2V0IGlzVXBkYXRlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLm9sZFZhbHVlICE9PSB1bmRlZmluZWRcbiAgICAgICYmIHRoaXMubmV3VmFsdWUgIT09IHVuZGVmaW5lZDtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgUHJvcGVydHlEaWZmZXJlbmNlPFZhbHVlVHlwZT4gZXh0ZW5kcyBEaWZmZXJlbmNlPFZhbHVlVHlwZT4ge1xuICBwdWJsaWMgcmVhZG9ubHkgY2hhbmdlSW1wYWN0PzogUmVzb3VyY2VJbXBhY3Q7XG5cbiAgY29uc3RydWN0b3Iob2xkVmFsdWU6IFZhbHVlVHlwZSB8IHVuZGVmaW5lZCwgbmV3VmFsdWU6IFZhbHVlVHlwZSB8IHVuZGVmaW5lZCwgYXJnczogeyBjaGFuZ2VJbXBhY3Q/OiBSZXNvdXJjZUltcGFjdCB9KSB7XG4gICAgc3VwZXIob2xkVmFsdWUsIG5ld1ZhbHVlKTtcbiAgICB0aGlzLmNoYW5nZUltcGFjdCA9IGFyZ3MuY2hhbmdlSW1wYWN0O1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEaWZmZXJlbmNlQ29sbGVjdGlvbjxWLCBUIGV4dGVuZHMgSURpZmZlcmVuY2U8Vj4+IHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBkaWZmczogeyBbbG9naWNhbElkOiBzdHJpbmddOiBUIH0pIHt9XG5cbiAgcHVibGljIGdldCBjaGFuZ2VzKCk6IHsgW2xvZ2ljYWxJZDogc3RyaW5nXTogVCB9IHtcbiAgICByZXR1cm4gb25seUNoYW5nZXModGhpcy5kaWZmcyk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGRpZmZlcmVuY2VDb3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRoaXMuY2hhbmdlcykubGVuZ3RoO1xuICB9XG5cbiAgcHVibGljIGdldChsb2dpY2FsSWQ6IHN0cmluZyk6IFQge1xuICAgIGNvbnN0IHJldCA9IHRoaXMuZGlmZnNbbG9naWNhbElkXTtcbiAgICBpZiAoIXJldCkgeyB0aHJvdyBuZXcgRXJyb3IoYE5vIG9iamVjdCB3aXRoIGxvZ2ljYWwgSUQgJyR7bG9naWNhbElkfSdgKTsgfVxuICAgIHJldHVybiByZXQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGxvZ2ljYWxJZHMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLmNoYW5nZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBuZXcgVGVtcGxhdGVEaWZmIHdoaWNoIG9ubHkgY29udGFpbnMgY2hhbmdlcyBmb3Igd2hpY2ggYHByZWRpY2F0ZWBcbiAgICogcmV0dXJucyBgdHJ1ZWAuXG4gICAqL1xuICBwdWJsaWMgZmlsdGVyKHByZWRpY2F0ZTogKGRpZmY6IFQgfCB1bmRlZmluZWQpID0+IGJvb2xlYW4pOiBEaWZmZXJlbmNlQ29sbGVjdGlvbjxWLCBUPiB7XG4gICAgY29uc3QgbmV3Q2hhbmdlczogeyBbbG9naWNhbElkOiBzdHJpbmddOiBUIH0gPSB7IH07XG4gICAgZm9yIChjb25zdCBpZCBvZiBPYmplY3Qua2V5cyh0aGlzLmNoYW5nZXMpKSB7XG4gICAgICBjb25zdCBkaWZmID0gdGhpcy5jaGFuZ2VzW2lkXTtcblxuICAgICAgaWYgKHByZWRpY2F0ZShkaWZmKSkge1xuICAgICAgICBuZXdDaGFuZ2VzW2lkXSA9IGRpZmY7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBEaWZmZXJlbmNlQ29sbGVjdGlvbjxWLCBUPihuZXdDaGFuZ2VzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbnZva2VzIGBjYmAgZm9yIGFsbCBjaGFuZ2VzIGluIHRoaXMgY29sbGVjdGlvbi5cbiAgICpcbiAgICogQ2hhbmdlcyB3aWxsIGJlIHNvcnRlZCBhcyBmb2xsb3dzOlxuICAgKiAgLSBSZW1vdmVkXG4gICAqICAtIEFkZGVkXG4gICAqICAtIFVwZGF0ZWRcbiAgICogIC0gT3RoZXJzXG4gICAqXG4gICAqIEBwYXJhbSBjYlxuICAgKi9cbiAgcHVibGljIGZvckVhY2hEaWZmZXJlbmNlKGNiOiAobG9naWNhbElkOiBzdHJpbmcsIGNoYW5nZTogVCkgPT4gYW55KTogdm9pZCB7XG4gICAgY29uc3QgcmVtb3ZlZCA9IG5ldyBBcnJheTx7IGxvZ2ljYWxJZDogc3RyaW5nLCBjaGFuZ2U6IFQgfT4oKTtcbiAgICBjb25zdCBhZGRlZCA9IG5ldyBBcnJheTx7IGxvZ2ljYWxJZDogc3RyaW5nLCBjaGFuZ2U6IFQgfT4oKTtcbiAgICBjb25zdCB1cGRhdGVkID0gbmV3IEFycmF5PHsgbG9naWNhbElkOiBzdHJpbmcsIGNoYW5nZTogVCB9PigpO1xuICAgIGNvbnN0IG90aGVycyA9IG5ldyBBcnJheTx7IGxvZ2ljYWxJZDogc3RyaW5nLCBjaGFuZ2U6IFQgfT4oKTtcblxuICAgIGZvciAoY29uc3QgbG9naWNhbElkIG9mIHRoaXMubG9naWNhbElkcykge1xuICAgICAgY29uc3QgY2hhbmdlOiBUID0gdGhpcy5jaGFuZ2VzW2xvZ2ljYWxJZF0hO1xuICAgICAgaWYgKGNoYW5nZS5pc0FkZGl0aW9uKSB7XG4gICAgICAgIGFkZGVkLnB1c2goeyBsb2dpY2FsSWQsIGNoYW5nZSB9KTtcbiAgICAgIH0gZWxzZSBpZiAoY2hhbmdlLmlzUmVtb3ZhbCkge1xuICAgICAgICByZW1vdmVkLnB1c2goeyBsb2dpY2FsSWQsIGNoYW5nZSB9KTtcbiAgICAgIH0gZWxzZSBpZiAoY2hhbmdlLmlzVXBkYXRlKSB7XG4gICAgICAgIHVwZGF0ZWQucHVzaCh7IGxvZ2ljYWxJZCwgY2hhbmdlIH0pO1xuICAgICAgfSBlbHNlIGlmIChjaGFuZ2UuaXNEaWZmZXJlbnQpIHtcbiAgICAgICAgb3RoZXJzLnB1c2goeyBsb2dpY2FsSWQsIGNoYW5nZSB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZW1vdmVkLmZvckVhY2godiA9PiBjYih2LmxvZ2ljYWxJZCwgdi5jaGFuZ2UpKTtcbiAgICBhZGRlZC5mb3JFYWNoKHYgPT4gY2Iodi5sb2dpY2FsSWQsIHYuY2hhbmdlKSk7XG4gICAgdXBkYXRlZC5mb3JFYWNoKHYgPT4gY2Iodi5sb2dpY2FsSWQsIHYuY2hhbmdlKSk7XG4gICAgb3RoZXJzLmZvckVhY2godiA9PiBjYih2LmxvZ2ljYWxJZCwgdi5jaGFuZ2UpKTtcbiAgfVxufVxuXG4vKipcbiAqIEFyZ3VtZW50cyBleHBlY3RlZCBieSB0aGUgY29uc3RydWN0b3Igb2YgK1RlbXBsYXRlRGlmZissIGV4dHJhY3RlZCBhcyBhbiBpbnRlcmZhY2UgZm9yIHRoZSBzYWtlXG4gKiBvZiAocmVsYXRpdmUpIGNvbmNpc2VuZXNzIG9mIHRoZSBjb25zdHJ1Y3RvcidzIHNpZ25hdHVyZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJVGVtcGxhdGVEaWZmIHtcbiAgYXdzVGVtcGxhdGVGb3JtYXRWZXJzaW9uPzogSURpZmZlcmVuY2U8c3RyaW5nPjtcbiAgZGVzY3JpcHRpb24/OiBJRGlmZmVyZW5jZTxzdHJpbmc+O1xuICB0cmFuc2Zvcm0/OiBJRGlmZmVyZW5jZTxzdHJpbmc+O1xuXG4gIGNvbmRpdGlvbnM/OiBEaWZmZXJlbmNlQ29sbGVjdGlvbjxDb25kaXRpb24sIENvbmRpdGlvbkRpZmZlcmVuY2U+O1xuICBtYXBwaW5ncz86IERpZmZlcmVuY2VDb2xsZWN0aW9uPE1hcHBpbmcsIE1hcHBpbmdEaWZmZXJlbmNlPjtcbiAgbWV0YWRhdGE/OiBEaWZmZXJlbmNlQ29sbGVjdGlvbjxNZXRhZGF0YSwgTWV0YWRhdGFEaWZmZXJlbmNlPjtcbiAgb3V0cHV0cz86IERpZmZlcmVuY2VDb2xsZWN0aW9uPE91dHB1dCwgT3V0cHV0RGlmZmVyZW5jZT47XG4gIHBhcmFtZXRlcnM/OiBEaWZmZXJlbmNlQ29sbGVjdGlvbjxQYXJhbWV0ZXIsIFBhcmFtZXRlckRpZmZlcmVuY2U+O1xuICByZXNvdXJjZXM/OiBEaWZmZXJlbmNlQ29sbGVjdGlvbjxSZXNvdXJjZSwgUmVzb3VyY2VEaWZmZXJlbmNlPjtcblxuICB1bmtub3duPzogRGlmZmVyZW5jZUNvbGxlY3Rpb248YW55LCBJRGlmZmVyZW5jZTxhbnk+Pjtcbn1cblxuZXhwb3J0IHR5cGUgQ29uZGl0aW9uID0gYW55O1xuZXhwb3J0IGNsYXNzIENvbmRpdGlvbkRpZmZlcmVuY2UgZXh0ZW5kcyBEaWZmZXJlbmNlPENvbmRpdGlvbj4ge1xuICAvLyBUT0RPOiBkZWZpbmUgc3BlY2lmaWMgZGlmZmVyZW5jZSBhdHRyaWJ1dGVzXG59XG5cbmV4cG9ydCB0eXBlIE1hcHBpbmcgPSBhbnk7XG5leHBvcnQgY2xhc3MgTWFwcGluZ0RpZmZlcmVuY2UgZXh0ZW5kcyBEaWZmZXJlbmNlPE1hcHBpbmc+IHtcbiAgLy8gVE9ETzogZGVmaW5lIHNwZWNpZmljIGRpZmZlcmVuY2UgYXR0cmlidXRlc1xufVxuXG5leHBvcnQgdHlwZSBNZXRhZGF0YSA9IGFueTtcbmV4cG9ydCBjbGFzcyBNZXRhZGF0YURpZmZlcmVuY2UgZXh0ZW5kcyBEaWZmZXJlbmNlPE1ldGFkYXRhPiB7XG4gIC8vIFRPRE86IGRlZmluZSBzcGVjaWZpYyBkaWZmZXJlbmNlIGF0dHJpYnV0ZXNcbn1cblxuZXhwb3J0IHR5cGUgT3V0cHV0ID0gYW55O1xuZXhwb3J0IGNsYXNzIE91dHB1dERpZmZlcmVuY2UgZXh0ZW5kcyBEaWZmZXJlbmNlPE91dHB1dD4ge1xuICAvLyBUT0RPOiBkZWZpbmUgc3BlY2lmaWMgZGlmZmVyZW5jZSBhdHRyaWJ1dGVzXG59XG5cbmV4cG9ydCB0eXBlIFBhcmFtZXRlciA9IGFueTtcbmV4cG9ydCBjbGFzcyBQYXJhbWV0ZXJEaWZmZXJlbmNlIGV4dGVuZHMgRGlmZmVyZW5jZTxQYXJhbWV0ZXI+IHtcbiAgLy8gVE9ETzogZGVmaW5lIHNwZWNpZmljIGRpZmZlcmVuY2UgYXR0cmlidXRlc1xufVxuXG5leHBvcnQgZW51bSBSZXNvdXJjZUltcGFjdCB7XG4gIC8qKiBUaGUgZXhpc3RpbmcgcGh5c2ljYWwgcmVzb3VyY2Ugd2lsbCBiZSB1cGRhdGVkICovXG4gIFdJTExfVVBEQVRFID0gJ1dJTExfVVBEQVRFJyxcbiAgLyoqIEEgbmV3IHBoeXNpY2FsIHJlc291cmNlIHdpbGwgYmUgY3JlYXRlZCAqL1xuICBXSUxMX0NSRUFURSA9ICdXSUxMX0NSRUFURScsXG4gIC8qKiBUaGUgZXhpc3RpbmcgcGh5c2ljYWwgcmVzb3VyY2Ugd2lsbCBiZSByZXBsYWNlZCAqL1xuICBXSUxMX1JFUExBQ0UgPSAnV0lMTF9SRVBMQUNFJyxcbiAgLyoqIFRoZSBleGlzdGluZyBwaHlzaWNhbCByZXNvdXJjZSBtYXkgYmUgcmVwbGFjZWQgKi9cbiAgTUFZX1JFUExBQ0UgPSAnTUFZX1JFUExBQ0UnLFxuICAvKiogVGhlIGV4aXN0aW5nIHBoeXNpY2FsIHJlc291cmNlIHdpbGwgYmUgZGVzdHJveWVkICovXG4gIFdJTExfREVTVFJPWSA9ICdXSUxMX0RFU1RST1knLFxuICAvKiogVGhlIGV4aXN0aW5nIHBoeXNpY2FsIHJlc291cmNlIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIENsb3VkRm9ybWF0aW9uIHN1cGVydmlzaW9uICovXG4gIFdJTExfT1JQSEFOID0gJ1dJTExfT1JQSEFOJyxcbiAgLyoqIFRoZXJlIGlzIG5vIGNoYW5nZSBpbiB0aGlzIHJlc291cmNlICovXG4gIE5PX0NIQU5HRSA9ICdOT19DSEFOR0UnLFxufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgYXMgYSByZWR1Y2VyIHRvIG9idGFpbiB0aGUgcmVzb3VyY2UtbGV2ZWwgaW1wYWN0IG9mIGEgbGlzdFxuICogb2YgcHJvcGVydHktbGV2ZWwgaW1wYWN0cy5cbiAqIEBwYXJhbSBvbmUgdGhlIGN1cnJlbnQgd29yc3QgaW1wYWN0IHNvIGZhci5cbiAqIEBwYXJhbSB0d28gdGhlIG5ldyBpbXBhY3QgYmVpbmcgY29uc2lkZXJlZCAoY2FuIGJlIHVuZGVmaW5lZCwgYXMgd2UgbWF5IG5vdCBhbHdheXMgYmVcbiAqICAgICAgYWJsZSB0byBkZXRlcm1pbmUgc29tZSBwZXJvcGVydHkncyBpbXBhY3QpLlxuICovXG5mdW5jdGlvbiB3b3JzdEltcGFjdChvbmU6IFJlc291cmNlSW1wYWN0LCB0d28/OiBSZXNvdXJjZUltcGFjdCk6IFJlc291cmNlSW1wYWN0IHtcbiAgaWYgKCF0d28pIHsgcmV0dXJuIG9uZTsgfVxuICBjb25zdCBiYWRuZXNzID0ge1xuICAgIFtSZXNvdXJjZUltcGFjdC5OT19DSEFOR0VdOiAwLFxuICAgIFtSZXNvdXJjZUltcGFjdC5XSUxMX1VQREFURV06IDEsXG4gICAgW1Jlc291cmNlSW1wYWN0LldJTExfQ1JFQVRFXTogMixcbiAgICBbUmVzb3VyY2VJbXBhY3QuV0lMTF9PUlBIQU5dOiAzLFxuICAgIFtSZXNvdXJjZUltcGFjdC5NQVlfUkVQTEFDRV06IDQsXG4gICAgW1Jlc291cmNlSW1wYWN0LldJTExfUkVQTEFDRV06IDUsXG4gICAgW1Jlc291cmNlSW1wYWN0LldJTExfREVTVFJPWV06IDYsXG4gIH07XG4gIHJldHVybiBiYWRuZXNzW29uZV0gPiBiYWRuZXNzW3R3b10gPyBvbmUgOiB0d287XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb3VyY2Uge1xuICBUeXBlOiBzdHJpbmc7XG4gIFByb3BlcnRpZXM/OiB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfTtcblxuICBba2V5OiBzdHJpbmddOiBhbnk7XG59XG5cbi8qKlxuICogQ2hhbmdlIHRvIGEgc2luZ2xlIHJlc291cmNlIGJldHdlZW4gdHdvIENsb3VkRm9ybWF0aW9uIHRlbXBsYXRlc1xuICpcbiAqIFRoaXMgY2xhc3MgY2FuIGJlIG11dGF0ZWQgYWZ0ZXIgY29uc3RydWN0aW9uLlxuICovXG5leHBvcnQgY2xhc3MgUmVzb3VyY2VEaWZmZXJlbmNlIGltcGxlbWVudHMgSURpZmZlcmVuY2U8UmVzb3VyY2U+IHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhpcyByZXNvdXJjZSB3YXMgYWRkZWRcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBpc0FkZGl0aW9uOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoaXMgcmVzb3VyY2Ugd2FzIHJlbW92ZWRcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBpc1JlbW92YWw6IGJvb2xlYW47XG5cbiAgLyoqIFByb3BlcnR5LWxldmVsIGNoYW5nZXMgb24gdGhlIHJlc291cmNlICovXG4gIHByaXZhdGUgcmVhZG9ubHkgcHJvcGVydHlEaWZmczogeyBba2V5OiBzdHJpbmddOiBQcm9wZXJ0eURpZmZlcmVuY2U8YW55PiB9O1xuXG4gIC8qKiBDaGFuZ2VzIHRvIG5vbi1wcm9wZXJ0eSBsZXZlbCBhdHRyaWJ1dGVzIG9mIHRoZSByZXNvdXJjZSAqL1xuICBwcml2YXRlIHJlYWRvbmx5IG90aGVyRGlmZnM6IHsgW2tleTogc3RyaW5nXTogRGlmZmVyZW5jZTxhbnk+IH07XG5cbiAgLyoqIFRoZSByZXNvdXJjZSB0eXBlIChvciBvbGQgYW5kIG5ldyB0eXBlIGlmIGl0IGhhcyBjaGFuZ2VkKSAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHJlc291cmNlVHlwZXM6IHsgcmVhZG9ubHkgb2xkVHlwZT86IHN0cmluZywgcmVhZG9ubHkgbmV3VHlwZT86IHN0cmluZyB9O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyByZWFkb25seSBvbGRWYWx1ZTogUmVzb3VyY2UgfCB1bmRlZmluZWQsXG4gICAgcHVibGljIHJlYWRvbmx5IG5ld1ZhbHVlOiBSZXNvdXJjZSB8IHVuZGVmaW5lZCxcbiAgICBhcmdzOiB7XG4gICAgICByZXNvdXJjZVR5cGU6IHsgb2xkVHlwZT86IHN0cmluZywgbmV3VHlwZT86IHN0cmluZyB9LFxuICAgICAgcHJvcGVydHlEaWZmczogeyBba2V5OiBzdHJpbmddOiBQcm9wZXJ0eURpZmZlcmVuY2U8YW55PiB9LFxuICAgICAgb3RoZXJEaWZmczogeyBba2V5OiBzdHJpbmddOiBEaWZmZXJlbmNlPGFueT4gfVxuICAgIH0sXG4gICkge1xuICAgIHRoaXMucmVzb3VyY2VUeXBlcyA9IGFyZ3MucmVzb3VyY2VUeXBlO1xuICAgIHRoaXMucHJvcGVydHlEaWZmcyA9IGFyZ3MucHJvcGVydHlEaWZmcztcbiAgICB0aGlzLm90aGVyRGlmZnMgPSBhcmdzLm90aGVyRGlmZnM7XG5cbiAgICB0aGlzLmlzQWRkaXRpb24gPSBvbGRWYWx1ZSA9PT0gdW5kZWZpbmVkO1xuICAgIHRoaXMuaXNSZW1vdmFsID0gbmV3VmFsdWUgPT09IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgb2xkUHJvcGVydGllcygpOiBQcm9wZXJ0eU1hcCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMub2xkVmFsdWUgJiYgdGhpcy5vbGRWYWx1ZS5Qcm9wZXJ0aWVzO1xuICB9XG5cbiAgcHVibGljIGdldCBuZXdQcm9wZXJ0aWVzKCk6IFByb3BlcnR5TWFwIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5uZXdWYWx1ZSAmJiB0aGlzLm5ld1ZhbHVlLlByb3BlcnRpZXM7XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciB0aGlzIHJlc291cmNlIHdhcyBtb2RpZmllZCBhdCBhbGxcbiAgICovXG4gIHB1YmxpYyBnZXQgaXNEaWZmZXJlbnQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZGlmZmVyZW5jZUNvdW50ID4gMCB8fCB0aGlzLm9sZFJlc291cmNlVHlwZSAhPT0gdGhpcy5uZXdSZXNvdXJjZVR5cGU7XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciB0aGUgcmVzb3VyY2Ugd2FzIHVwZGF0ZWQgaW4tcGxhY2VcbiAgICovXG4gIHB1YmxpYyBnZXQgaXNVcGRhdGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNEaWZmZXJlbnQgJiYgIXRoaXMuaXNBZGRpdGlvbiAmJiAhdGhpcy5pc1JlbW92YWw7XG4gIH1cblxuICBwdWJsaWMgZ2V0IG9sZFJlc291cmNlVHlwZSgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnJlc291cmNlVHlwZXMub2xkVHlwZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgbmV3UmVzb3VyY2VUeXBlKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMucmVzb3VyY2VUeXBlcy5uZXdUeXBlO1xuICB9XG5cbiAgLyoqXG4gICAqIEFsbCBhY3R1YWwgcHJvcGVydHkgdXBkYXRlc1xuICAgKi9cbiAgcHVibGljIGdldCBwcm9wZXJ0eVVwZGF0ZXMoKTogeyBba2V5OiBzdHJpbmddOiBQcm9wZXJ0eURpZmZlcmVuY2U8YW55PiB9IHtcbiAgICByZXR1cm4gb25seUNoYW5nZXModGhpcy5wcm9wZXJ0eURpZmZzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbGwgYWN0dWFsIFwib3RoZXJcIiB1cGRhdGVzXG4gICAqL1xuICBwdWJsaWMgZ2V0IG90aGVyQ2hhbmdlcygpOiB7IFtrZXk6IHN0cmluZ106IERpZmZlcmVuY2U8YW55PiB9IHtcbiAgICByZXR1cm4gb25seUNoYW5nZXModGhpcy5vdGhlckRpZmZzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gd2hldGhlciB0aGUgcmVzb3VyY2UgdHlwZSB3YXMgY2hhbmdlZCBpbiB0aGlzIGRpZmZcbiAgICpcbiAgICogVGhpcyBpcyBub3QgYSB2YWxpZCBvcGVyYXRpb24gaW4gQ2xvdWRGb3JtYXRpb24gYnV0IHRvIGJlIGRlZmVuc2l2ZSB3ZSdyZSBnb2luZ1xuICAgKiB0byBiZSBhd2FyZSBvZiBpdCBhbnl3YXkuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHJlc291cmNlVHlwZUNoYW5nZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICh0aGlzLnJlc291cmNlVHlwZXMub2xkVHlwZSAhPT0gdW5kZWZpbmVkXG4gICAgICAgICYmIHRoaXMucmVzb3VyY2VUeXBlcy5uZXdUeXBlICE9PSB1bmRlZmluZWRcbiAgICAgICAgJiYgdGhpcy5yZXNvdXJjZVR5cGVzLm9sZFR5cGUgIT09IHRoaXMucmVzb3VyY2VUeXBlcy5uZXdUeXBlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIHJlc291cmNlIHR5cGUgaWYgaXQgd2FzIHVuY2hhbmdlZFxuICAgKlxuICAgKiBJZiB0aGUgcmVzb3VyY2UgdHlwZSB3YXMgY2hhbmdlZCwgaXQncyBhbiBlcnJvciB0byBjYWxsIHRoaXMuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHJlc291cmNlVHlwZSgpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLnJlc291cmNlVHlwZUNoYW5nZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGdldCAucmVzb3VyY2VUeXBlLCBiZWNhdXNlIHRoZSB0eXBlIHdhcyBjaGFuZ2VkJyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnJlc291cmNlVHlwZXMub2xkVHlwZSB8fCB0aGlzLnJlc291cmNlVHlwZXMubmV3VHlwZSE7XG4gIH1cblxuICAvKipcbiAgICogUmVwbGFjZSBhIFByb3BlcnR5Q2hhbmdlIGluIHRoaXMgb2JqZWN0XG4gICAqXG4gICAqIFRoaXMgYWZmZWN0cyB0aGUgcHJvcGVydHkgZGlmZiBhcyBpdCBpcyBzdW1tYXJpemVkIHRvIHVzZXJzLCBidXQgaXQgRE9FU1xuICAgKiBOT1QgYWZmZWN0IGVpdGhlciB0aGUgXCJvbGRWYWx1ZVwiIG9yIFwibmV3VmFsdWVcIiB2YWx1ZXM7IHRob3NlIHN0aWxsIGNvbnRhaW5cbiAgICogdGhlIGFjdHVhbCB0ZW1wbGF0ZSB2YWx1ZXMgYXMgcHJvdmlkZWQgYnkgdGhlIHVzZXIgKHRoZXkgbWlnaHQgc3RpbGwgYmVcbiAgICogdXNlZCBmb3IgZG93bnN0cmVhbSBwcm9jZXNzaW5nKS5cbiAgICovXG4gIHB1YmxpYyBzZXRQcm9wZXJ0eUNoYW5nZShwcm9wZXJ0eU5hbWU6IHN0cmluZywgY2hhbmdlOiBQcm9wZXJ0eURpZmZlcmVuY2U8YW55Pikge1xuICAgIHRoaXMucHJvcGVydHlEaWZmc1twcm9wZXJ0eU5hbWVdID0gY2hhbmdlO1xuICB9XG5cbiAgcHVibGljIGdldCBjaGFuZ2VJbXBhY3QoKTogUmVzb3VyY2VJbXBhY3Qge1xuICAgIC8vIENoZWNrIHRoZSBUeXBlIGZpcnN0XG4gICAgaWYgKHRoaXMucmVzb3VyY2VUeXBlcy5vbGRUeXBlICE9PSB0aGlzLnJlc291cmNlVHlwZXMubmV3VHlwZSkge1xuICAgICAgaWYgKHRoaXMucmVzb3VyY2VUeXBlcy5vbGRUeXBlID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIFJlc291cmNlSW1wYWN0LldJTExfQ1JFQVRFOyB9XG4gICAgICBpZiAodGhpcy5yZXNvdXJjZVR5cGVzLm5ld1R5cGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vbGRWYWx1ZSEuRGVsZXRpb25Qb2xpY3kgPT09ICdSZXRhaW4nXG4gICAgICAgICAgPyBSZXNvdXJjZUltcGFjdC5XSUxMX09SUEhBTlxuICAgICAgICAgIDogUmVzb3VyY2VJbXBhY3QuV0lMTF9ERVNUUk9ZO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFJlc291cmNlSW1wYWN0LldJTExfUkVQTEFDRTtcbiAgICB9XG5cbiAgICAvLyBCYXNlIGltcGFjdCAoYmVmb3JlIHdlIG1peCBpbiB0aGUgd29yc3Qgb2YgdGhlIHByb3BlcnR5IGltcGFjdHMpO1xuICAgIC8vIFdJTExfVVBEQVRFIGlmIHdlIGhhdmUgXCJvdGhlclwiIGNoYW5nZXMsIE5PX0NIQU5HRSBpZiB0aGVyZSBhcmUgbm8gXCJvdGhlclwiIGNoYW5nZXMuXG4gICAgY29uc3QgYmFzZUltcGFjdCA9IE9iamVjdC5rZXlzKHRoaXMub3RoZXJDaGFuZ2VzKS5sZW5ndGggPiAwID8gUmVzb3VyY2VJbXBhY3QuV0lMTF9VUERBVEUgOiBSZXNvdXJjZUltcGFjdC5OT19DSEFOR0U7XG5cbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLnByb3BlcnR5RGlmZnMpXG4gICAgICAubWFwKGVsdCA9PiBlbHQuY2hhbmdlSW1wYWN0KVxuICAgICAgLnJlZHVjZSh3b3JzdEltcGFjdCwgYmFzZUltcGFjdCk7XG4gIH1cblxuICAvKipcbiAgICogQ291bnQgb2YgYWN0dWFsIGRpZmZlcmVuY2VzIChub3Qgb2YgZWxlbWVudHMpXG4gICAqL1xuICBwdWJsaWMgZ2V0IGRpZmZlcmVuY2VDb3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRoaXMucHJvcGVydHlVcGRhdGVzKS5sZW5ndGhcbiAgICAgICsgT2JqZWN0LnZhbHVlcyh0aGlzLm90aGVyQ2hhbmdlcykubGVuZ3RoO1xuICB9XG5cbiAgLyoqXG4gICAqIEludm9rZSBhIGNhbGxiYWNrIGZvciBlYWNoIGFjdHVhbCBkaWZmZXJlbmNlXG4gICAqL1xuICBwdWJsaWMgZm9yRWFjaERpZmZlcmVuY2UoY2I6ICh0eXBlOiAnUHJvcGVydHknIHwgJ090aGVyJywgbmFtZTogc3RyaW5nLCB2YWx1ZTogRGlmZmVyZW5jZTxhbnk+IHwgUHJvcGVydHlEaWZmZXJlbmNlPGFueT4pID0+IGFueSkge1xuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHRoaXMucHJvcGVydHlVcGRhdGVzKS5zb3J0KCkpIHtcbiAgICAgIGNiKCdQcm9wZXJ0eScsIGtleSwgdGhpcy5wcm9wZXJ0eVVwZGF0ZXNba2V5XSk7XG4gICAgfVxuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHRoaXMub3RoZXJDaGFuZ2VzKS5zb3J0KCkpIHtcbiAgICAgIGNiKCdPdGhlcicsIGtleSwgdGhpcy5vdGhlckRpZmZzW2tleV0pO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNQcm9wZXJ0eURpZmZlcmVuY2U8VD4oZGlmZjogRGlmZmVyZW5jZTxUPik6IGRpZmYgaXMgUHJvcGVydHlEaWZmZXJlbmNlPFQ+IHtcbiAgcmV0dXJuIChkaWZmIGFzIFByb3BlcnR5RGlmZmVyZW5jZTxUPikuY2hhbmdlSW1wYWN0ICE9PSB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogRmlsdGVyIGEgbWFwIG9mIElEaWZmZXJlbmNlcyBkb3duIHRvIG9ubHkgcmV0YWluIHRoZSBhY3R1YWwgY2hhbmdlc1xuICovXG5mdW5jdGlvbiBvbmx5Q2hhbmdlczxWLCBUIGV4dGVuZHMgSURpZmZlcmVuY2U8Vj4+KHhzOiB7W2tleTogc3RyaW5nXTogVH0pOiB7W2tleTogc3RyaW5nXTogVH0ge1xuICBjb25zdCByZXQ6IHsgW2tleTogc3RyaW5nXTogVCB9ID0ge307XG4gIGZvciAoY29uc3QgW2tleSwgZGlmZl0gb2YgT2JqZWN0LmVudHJpZXMoeHMpKSB7XG4gICAgaWYgKGRpZmYuaXNEaWZmZXJlbnQpIHtcbiAgICAgIHJldFtrZXldID0gZGlmZjtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJldDtcbn1cbiJdfQ==
+
+/***/ }),
+
+/***/ 3089:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.mangleLikeCloudFormation = exports.unionOf = exports.diffKeyedEntities = exports.deepEqual = void 0;
+/**
+ * Compares two objects for equality, deeply. The function handles arguments that are
+ * +null+, +undefined+, arrays and objects. For objects, the function will not take the
+ * object prototype into account for the purpose of the comparison, only the values of
+ * properties reported by +Object.keys+.
+ *
+ * If both operands can be parsed to equivalent numbers, will return true.
+ * This makes diff consistent with CloudFormation, where a numeric 10 and a literal "10"
+ * are considered equivalent.
+ *
+ * @param lvalue the left operand of the equality comparison.
+ * @param rvalue the right operand of the equality comparison.
+ *
+ * @returns +true+ if both +lvalue+ and +rvalue+ are equivalent to each other.
+ */
+function deepEqual(lvalue, rvalue) {
+ if (lvalue === rvalue) {
+ return true;
+ }
+ // CloudFormation allows passing strings into boolean-typed fields
+ if (((typeof lvalue === 'string' && typeof rvalue === 'boolean') ||
+ (typeof lvalue === 'boolean' && typeof rvalue === 'string')) &&
+ lvalue.toString() === rvalue.toString()) {
+ return true;
+ }
+ // allows a numeric 10 and a literal "10" to be equivalent;
+ // this is consistent with CloudFormation.
+ if ((typeof lvalue === 'string' || typeof rvalue === 'string') &&
+ safeParseFloat(lvalue) === safeParseFloat(rvalue)) {
+ return true;
+ }
+ if (typeof lvalue !== typeof rvalue) {
+ return false;
+ }
+ if (Array.isArray(lvalue) !== Array.isArray(rvalue)) {
+ return false;
+ }
+ if (Array.isArray(lvalue) /* && Array.isArray(rvalue) */) {
+ if (lvalue.length !== rvalue.length) {
+ return false;
+ }
+ for (let i = 0; i < lvalue.length; i++) {
+ if (!deepEqual(lvalue[i], rvalue[i])) {
+ return false;
+ }
+ }
+ return true;
+ }
+ if (typeof lvalue === 'object' /* && typeof rvalue === 'object' */) {
+ if (lvalue === null || rvalue === null) {
+ // If both were null, they'd have been ===
+ return false;
+ }
+ const keys = Object.keys(lvalue);
+ if (keys.length !== Object.keys(rvalue).length) {
+ return false;
+ }
+ for (const key of keys) {
+ if (!rvalue.hasOwnProperty(key)) {
+ return false;
+ }
+ if (key === 'DependsOn') {
+ if (!dependsOnEqual(lvalue[key], rvalue[key])) {
+ return false;
+ }
+ ;
+ // check differences other than `DependsOn`
+ continue;
+ }
+ if (!deepEqual(lvalue[key], rvalue[key])) {
+ return false;
+ }
+ }
+ return true;
+ }
+ // Neither object, nor array: I deduce this is primitive type
+ // Primitive type and not ===, so I deduce not deepEqual
+ return false;
+}
+exports.deepEqual = deepEqual;
+/**
+ * Compares two arguments to DependsOn for equality.
+ *
+ * @param lvalue the left operand of the equality comparison.
+ * @param rvalue the right operand of the equality comparison.
+ *
+ * @returns +true+ if both +lvalue+ and +rvalue+ are equivalent to each other.
+ */
+function dependsOnEqual(lvalue, rvalue) {
+ // allows ['Value'] and 'Value' to be equal
+ if (Array.isArray(lvalue) !== Array.isArray(rvalue)) {
+ const array = Array.isArray(lvalue) ? lvalue : rvalue;
+ const nonArray = Array.isArray(lvalue) ? rvalue : lvalue;
+ if (array.length === 1 && deepEqual(array[0], nonArray)) {
+ return true;
+ }
+ return false;
+ }
+ // allows arrays passed to DependsOn to be equivalent irrespective of element order
+ if (Array.isArray(lvalue) && Array.isArray(rvalue)) {
+ if (lvalue.length !== rvalue.length) {
+ return false;
+ }
+ for (let i = 0; i < lvalue.length; i++) {
+ for (let j = 0; j < lvalue.length; j++) {
+ if ((!deepEqual(lvalue[i], rvalue[j])) && (j === lvalue.length - 1)) {
+ return false;
+ }
+ break;
+ }
+ }
+ return true;
+ }
+ return false;
+}
+/**
+ * Produce the differences between two maps, as a map, using a specified diff function.
+ *
+ * @param oldValue the old map.
+ * @param newValue the new map.
+ * @param elementDiff the diff function.
+ *
+ * @returns a map representing the differences between +oldValue+ and +newValue+.
+ */
+function diffKeyedEntities(oldValue, newValue, elementDiff) {
+ const result = {};
+ for (const logicalId of unionOf(Object.keys(oldValue || {}), Object.keys(newValue || {}))) {
+ const oldElement = oldValue && oldValue[logicalId];
+ const newElement = newValue && newValue[logicalId];
+ if (oldElement === undefined && newElement === undefined) {
+ // Shouldn't happen in reality, but may happen in tests. Skip.
+ continue;
+ }
+ result[logicalId] = elementDiff(oldElement, newElement, logicalId);
+ }
+ return result;
+}
+exports.diffKeyedEntities = diffKeyedEntities;
+/**
+ * Computes the union of two sets of strings.
+ *
+ * @param lv the left set of strings.
+ * @param rv the right set of strings.
+ *
+ * @returns a new array containing all elemebts from +lv+ and +rv+, with no duplicates.
+ */
+function unionOf(lv, rv) {
+ const result = new Set(lv);
+ for (const v of rv) {
+ result.add(v);
+ }
+ return new Array(...result);
+}
+exports.unionOf = unionOf;
+/**
+ * GetStackTemplate flattens any codepoint greater than "\u7f" to "?". This is
+ * true even for codepoints in the supplemental planes which are represented
+ * in JS as surrogate pairs, all the way up to "\u{10ffff}".
+ *
+ * This function implements the same mangling in order to provide diagnostic
+ * information in `cdk diff`.
+ */
+function mangleLikeCloudFormation(payload) {
+ return payload.replace(/[\u{80}-\u{10ffff}]/gu, '?');
+}
+exports.mangleLikeCloudFormation = mangleLikeCloudFormation;
+/**
+ * A parseFloat implementation that does the right thing for
+ * strings like '0.0.0'
+ * (for which JavaScript's parseFloat() returns 0).
+ * We return NaN for all of these strings that do not represent numbers,
+ * and so comparing them fails,
+ * and doesn't short-circuit the diff logic.
+ */
+function safeParseFloat(str) {
+ return Number(str);
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUE7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDSCxTQUFnQixTQUFTLENBQUMsTUFBVyxFQUFFLE1BQVc7SUFDaEQsSUFBSSxNQUFNLEtBQUssTUFBTSxFQUFFO1FBQUUsT0FBTyxJQUFJLENBQUM7S0FBRTtJQUN2QyxrRUFBa0U7SUFDbEUsSUFBSSxDQUFDLENBQUMsT0FBTyxNQUFNLEtBQUssUUFBUSxJQUFJLE9BQU8sTUFBTSxLQUFLLFNBQVMsQ0FBQztRQUM1RCxDQUFDLE9BQU8sTUFBTSxLQUFLLFNBQVMsSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRLENBQUMsQ0FBQztRQUM1RCxNQUFNLENBQUMsUUFBUSxFQUFFLEtBQUssTUFBTSxDQUFDLFFBQVEsRUFBRSxFQUFFO1FBQzNDLE9BQU8sSUFBSSxDQUFDO0tBQ2I7SUFDRCwyREFBMkQ7SUFDM0QsMENBQTBDO0lBQzFDLElBQUksQ0FBQyxPQUFPLE1BQU0sS0FBSyxRQUFRLElBQUksT0FBTyxNQUFNLEtBQUssUUFBUSxDQUFDO1FBQzFELGNBQWMsQ0FBQyxNQUFNLENBQUMsS0FBSyxjQUFjLENBQUMsTUFBTSxDQUFDLEVBQUU7UUFDckQsT0FBTyxJQUFJLENBQUM7S0FDYjtJQUNELElBQUksT0FBTyxNQUFNLEtBQUssT0FBTyxNQUFNLEVBQUU7UUFBRSxPQUFPLEtBQUssQ0FBQztLQUFFO0lBQ3RELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1FBQUUsT0FBTyxLQUFLLENBQUM7S0FBRTtJQUN0RSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsOEJBQThCLEVBQUU7UUFDeEQsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLE1BQU0sQ0FBQyxNQUFNLEVBQUU7WUFBRSxPQUFPLEtBQUssQ0FBQztTQUFFO1FBQ3RELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFHLENBQUMsRUFBRSxFQUFFO1lBQ3hDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUFFLE9BQU8sS0FBSyxDQUFDO2FBQUU7U0FDeEQ7UUFDRCxPQUFPLElBQUksQ0FBQztLQUNiO0lBQ0QsSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRLENBQUMsbUNBQW1DLEVBQUU7UUFDbEUsSUFBSSxNQUFNLEtBQUssSUFBSSxJQUFJLE1BQU0sS0FBSyxJQUFJLEVBQUU7WUFDdEMsMENBQTBDO1lBQzFDLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFDRCxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2pDLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRTtZQUFFLE9BQU8sS0FBSyxDQUFDO1NBQUU7UUFDakUsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLEVBQUU7WUFDdEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQUUsT0FBTyxLQUFLLENBQUM7YUFBRTtZQUNsRCxJQUFJLEdBQUcsS0FBSyxXQUFXLEVBQUU7Z0JBQ3ZCLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFO29CQUFFLE9BQU8sS0FBSyxDQUFDO2lCQUFFO2dCQUFBLENBQUM7Z0JBQ2pFLDJDQUEyQztnQkFDM0MsU0FBUzthQUNWO1lBQ0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7Z0JBQUUsT0FBTyxLQUFLLENBQUM7YUFBRTtTQUM1RDtRQUNELE9BQU8sSUFBSSxDQUFDO0tBQ2I7SUFDRCw2REFBNkQ7SUFDN0Qsd0RBQXdEO0lBQ3hELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQztBQTVDRCw4QkE0Q0M7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsU0FBUyxjQUFjLENBQUMsTUFBVyxFQUFFLE1BQVc7SUFDOUMsMkNBQTJDO0lBQzNDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1FBQ25ELE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO1FBQ3RELE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO1FBRXpELElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsRUFBRTtZQUN2RCxPQUFPLElBQUksQ0FBQztTQUNiO1FBQ0QsT0FBTyxLQUFLLENBQUM7S0FDZDtJQUVELG1GQUFtRjtJQUNuRixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRTtRQUNsRCxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssTUFBTSxDQUFDLE1BQU0sRUFBRTtZQUFFLE9BQU8sS0FBSyxDQUFDO1NBQUU7UUFDdEQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUcsQ0FBQyxFQUFFLEVBQUU7WUFDeEMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUcsQ0FBQyxFQUFFLEVBQUU7Z0JBQ3hDLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxFQUFFO29CQUNuRSxPQUFPLEtBQUssQ0FBQztpQkFDZDtnQkFDRCxNQUFNO2FBQ1A7U0FDRjtRQUNELE9BQU8sSUFBSSxDQUFDO0tBQ2I7SUFFRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILFNBQWdCLGlCQUFpQixDQUMvQixRQUE0QyxFQUM1QyxRQUE0QyxFQUM1QyxXQUFpRTtJQUNqRSxNQUFNLE1BQU0sR0FBMEIsRUFBRSxDQUFDO0lBQ3pDLEtBQUssTUFBTSxTQUFTLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUU7UUFDekYsTUFBTSxVQUFVLEdBQUcsUUFBUSxJQUFJLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNuRCxNQUFNLFVBQVUsR0FBRyxRQUFRLElBQUksUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRW5ELElBQUksVUFBVSxLQUFLLFNBQVMsSUFBSSxVQUFVLEtBQUssU0FBUyxFQUFFO1lBQ3hELDhEQUE4RDtZQUM5RCxTQUFTO1NBQ1Y7UUFFRCxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsV0FBVyxDQUFDLFVBQVUsRUFBRSxVQUFVLEVBQUUsU0FBUyxDQUFDLENBQUM7S0FDcEU7SUFDRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBakJELDhDQWlCQztBQUVEOzs7Ozs7O0dBT0c7QUFDSCxTQUFnQixPQUFPLENBQUMsRUFBMEIsRUFBRSxFQUEwQjtJQUM1RSxNQUFNLE1BQU0sR0FBRyxJQUFJLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMzQixLQUFLLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRTtRQUNsQixNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ2Y7SUFDRCxPQUFPLElBQUksS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUM7QUFDOUIsQ0FBQztBQU5ELDBCQU1DO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILFNBQWdCLHdCQUF3QixDQUFDLE9BQWU7SUFDdEQsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLHVCQUF1QixFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZELENBQUM7QUFGRCw0REFFQztBQUVEOzs7Ozs7O0dBT0c7QUFDSCxTQUFTLGNBQWMsQ0FBQyxHQUFXO0lBQ2pDLE9BQU8sTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3JCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvbXBhcmVzIHR3byBvYmplY3RzIGZvciBlcXVhbGl0eSwgZGVlcGx5LiBUaGUgZnVuY3Rpb24gaGFuZGxlcyBhcmd1bWVudHMgdGhhdCBhcmVcbiAqICtudWxsKywgK3VuZGVmaW5lZCssIGFycmF5cyBhbmQgb2JqZWN0cy4gRm9yIG9iamVjdHMsIHRoZSBmdW5jdGlvbiB3aWxsIG5vdCB0YWtlIHRoZVxuICogb2JqZWN0IHByb3RvdHlwZSBpbnRvIGFjY291bnQgZm9yIHRoZSBwdXJwb3NlIG9mIHRoZSBjb21wYXJpc29uLCBvbmx5IHRoZSB2YWx1ZXMgb2ZcbiAqIHByb3BlcnRpZXMgcmVwb3J0ZWQgYnkgK09iamVjdC5rZXlzKy5cbiAqXG4gKiBJZiBib3RoIG9wZXJhbmRzIGNhbiBiZSBwYXJzZWQgdG8gZXF1aXZhbGVudCBudW1iZXJzLCB3aWxsIHJldHVybiB0cnVlLlxuICogVGhpcyBtYWtlcyBkaWZmIGNvbnNpc3RlbnQgd2l0aCBDbG91ZEZvcm1hdGlvbiwgd2hlcmUgYSBudW1lcmljIDEwIGFuZCBhIGxpdGVyYWwgXCIxMFwiXG4gKiBhcmUgY29uc2lkZXJlZCBlcXVpdmFsZW50LlxuICpcbiAqIEBwYXJhbSBsdmFsdWUgdGhlIGxlZnQgb3BlcmFuZCBvZiB0aGUgZXF1YWxpdHkgY29tcGFyaXNvbi5cbiAqIEBwYXJhbSBydmFsdWUgdGhlIHJpZ2h0IG9wZXJhbmQgb2YgdGhlIGVxdWFsaXR5IGNvbXBhcmlzb24uXG4gKlxuICogQHJldHVybnMgK3RydWUrIGlmIGJvdGggK2x2YWx1ZSsgYW5kICtydmFsdWUrIGFyZSBlcXVpdmFsZW50IHRvIGVhY2ggb3RoZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWVwRXF1YWwobHZhbHVlOiBhbnksIHJ2YWx1ZTogYW55KTogYm9vbGVhbiB7XG4gIGlmIChsdmFsdWUgPT09IHJ2YWx1ZSkgeyByZXR1cm4gdHJ1ZTsgfVxuICAvLyBDbG91ZEZvcm1hdGlvbiBhbGxvd3MgcGFzc2luZyBzdHJpbmdzIGludG8gYm9vbGVhbi10eXBlZCBmaWVsZHNcbiAgaWYgKCgodHlwZW9mIGx2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdHlwZW9mIHJ2YWx1ZSA9PT0gJ2Jvb2xlYW4nKSB8fFxuICAgICAgKHR5cGVvZiBsdmFsdWUgPT09ICdib29sZWFuJyAmJiB0eXBlb2YgcnZhbHVlID09PSAnc3RyaW5nJykpICYmXG4gICAgICBsdmFsdWUudG9TdHJpbmcoKSA9PT0gcnZhbHVlLnRvU3RyaW5nKCkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICAvLyBhbGxvd3MgYSBudW1lcmljIDEwIGFuZCBhIGxpdGVyYWwgXCIxMFwiIHRvIGJlIGVxdWl2YWxlbnQ7XG4gIC8vIHRoaXMgaXMgY29uc2lzdGVudCB3aXRoIENsb3VkRm9ybWF0aW9uLlxuICBpZiAoKHR5cGVvZiBsdmFsdWUgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBydmFsdWUgPT09ICdzdHJpbmcnKSAmJlxuICAgICAgc2FmZVBhcnNlRmxvYXQobHZhbHVlKSA9PT0gc2FmZVBhcnNlRmxvYXQocnZhbHVlKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmICh0eXBlb2YgbHZhbHVlICE9PSB0eXBlb2YgcnZhbHVlKSB7IHJldHVybiBmYWxzZTsgfVxuICBpZiAoQXJyYXkuaXNBcnJheShsdmFsdWUpICE9PSBBcnJheS5pc0FycmF5KHJ2YWx1ZSkpIHsgcmV0dXJuIGZhbHNlOyB9XG4gIGlmIChBcnJheS5pc0FycmF5KGx2YWx1ZSkgLyogJiYgQXJyYXkuaXNBcnJheShydmFsdWUpICovKSB7XG4gICAgaWYgKGx2YWx1ZS5sZW5ndGggIT09IHJ2YWx1ZS5sZW5ndGgpIHsgcmV0dXJuIGZhbHNlOyB9XG4gICAgZm9yIChsZXQgaSA9IDAgOyBpIDwgbHZhbHVlLmxlbmd0aCA7IGkrKykge1xuICAgICAgaWYgKCFkZWVwRXF1YWwobHZhbHVlW2ldLCBydmFsdWVbaV0pKSB7IHJldHVybiBmYWxzZTsgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAodHlwZW9mIGx2YWx1ZSA9PT0gJ29iamVjdCcgLyogJiYgdHlwZW9mIHJ2YWx1ZSA9PT0gJ29iamVjdCcgKi8pIHtcbiAgICBpZiAobHZhbHVlID09PSBudWxsIHx8IHJ2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgLy8gSWYgYm90aCB3ZXJlIG51bGwsIHRoZXknZCBoYXZlIGJlZW4gPT09XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhsdmFsdWUpO1xuICAgIGlmIChrZXlzLmxlbmd0aCAhPT0gT2JqZWN0LmtleXMocnZhbHVlKS5sZW5ndGgpIHsgcmV0dXJuIGZhbHNlOyB9XG4gICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgICAgaWYgKCFydmFsdWUuaGFzT3duUHJvcGVydHkoa2V5KSkgeyByZXR1cm4gZmFsc2U7IH1cbiAgICAgIGlmIChrZXkgPT09ICdEZXBlbmRzT24nKSB7XG4gICAgICAgIGlmICghZGVwZW5kc09uRXF1YWwobHZhbHVlW2tleV0sIHJ2YWx1ZVtrZXldKSkgeyByZXR1cm4gZmFsc2U7IH07XG4gICAgICAgIC8vIGNoZWNrIGRpZmZlcmVuY2VzIG90aGVyIHRoYW4gYERlcGVuZHNPbmBcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoIWRlZXBFcXVhbChsdmFsdWVba2V5XSwgcnZhbHVlW2tleV0pKSB7IHJldHVybiBmYWxzZTsgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICAvLyBOZWl0aGVyIG9iamVjdCwgbm9yIGFycmF5OiBJIGRlZHVjZSB0aGlzIGlzIHByaW1pdGl2ZSB0eXBlXG4gIC8vIFByaW1pdGl2ZSB0eXBlIGFuZCBub3QgPT09LCBzbyBJIGRlZHVjZSBub3QgZGVlcEVxdWFsXG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBDb21wYXJlcyB0d28gYXJndW1lbnRzIHRvIERlcGVuZHNPbiBmb3IgZXF1YWxpdHkuXG4gKlxuICogQHBhcmFtIGx2YWx1ZSB0aGUgbGVmdCBvcGVyYW5kIG9mIHRoZSBlcXVhbGl0eSBjb21wYXJpc29uLlxuICogQHBhcmFtIHJ2YWx1ZSB0aGUgcmlnaHQgb3BlcmFuZCBvZiB0aGUgZXF1YWxpdHkgY29tcGFyaXNvbi5cbiAqXG4gKiBAcmV0dXJucyArdHJ1ZSsgaWYgYm90aCArbHZhbHVlKyBhbmQgK3J2YWx1ZSsgYXJlIGVxdWl2YWxlbnQgdG8gZWFjaCBvdGhlci5cbiAqL1xuZnVuY3Rpb24gZGVwZW5kc09uRXF1YWwobHZhbHVlOiBhbnksIHJ2YWx1ZTogYW55KTogYm9vbGVhbiB7XG4gIC8vIGFsbG93cyBbJ1ZhbHVlJ10gYW5kICdWYWx1ZScgdG8gYmUgZXF1YWxcbiAgaWYgKEFycmF5LmlzQXJyYXkobHZhbHVlKSAhPT0gQXJyYXkuaXNBcnJheShydmFsdWUpKSB7XG4gICAgY29uc3QgYXJyYXkgPSBBcnJheS5pc0FycmF5KGx2YWx1ZSkgPyBsdmFsdWUgOiBydmFsdWU7XG4gICAgY29uc3Qgbm9uQXJyYXkgPSBBcnJheS5pc0FycmF5KGx2YWx1ZSkgPyBydmFsdWUgOiBsdmFsdWU7XG5cbiAgICBpZiAoYXJyYXkubGVuZ3RoID09PSAxICYmIGRlZXBFcXVhbChhcnJheVswXSwgbm9uQXJyYXkpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gYWxsb3dzIGFycmF5cyBwYXNzZWQgdG8gRGVwZW5kc09uIHRvIGJlIGVxdWl2YWxlbnQgaXJyZXNwZWN0aXZlIG9mIGVsZW1lbnQgb3JkZXJcbiAgaWYgKEFycmF5LmlzQXJyYXkobHZhbHVlKSAmJiBBcnJheS5pc0FycmF5KHJ2YWx1ZSkpIHtcbiAgICBpZiAobHZhbHVlLmxlbmd0aCAhPT0gcnZhbHVlLmxlbmd0aCkgeyByZXR1cm4gZmFsc2U7IH1cbiAgICBmb3IgKGxldCBpID0gMCA7IGkgPCBsdmFsdWUubGVuZ3RoIDsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMCA7IGogPCBsdmFsdWUubGVuZ3RoIDsgaisrKSB7XG4gICAgICAgIGlmICgoIWRlZXBFcXVhbChsdmFsdWVbaV0sIHJ2YWx1ZVtqXSkpICYmIChqID09PSBsdmFsdWUubGVuZ3RoIC0gMSkpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIFByb2R1Y2UgdGhlIGRpZmZlcmVuY2VzIGJldHdlZW4gdHdvIG1hcHMsIGFzIGEgbWFwLCB1c2luZyBhIHNwZWNpZmllZCBkaWZmIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSBvbGRWYWx1ZSAgdGhlIG9sZCBtYXAuXG4gKiBAcGFyYW0gbmV3VmFsdWUgIHRoZSBuZXcgbWFwLlxuICogQHBhcmFtIGVsZW1lbnREaWZmIHRoZSBkaWZmIGZ1bmN0aW9uLlxuICpcbiAqIEByZXR1cm5zIGEgbWFwIHJlcHJlc2VudGluZyB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbiArb2xkVmFsdWUrIGFuZCArbmV3VmFsdWUrLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGlmZktleWVkRW50aXRpZXM8VD4oXG4gIG9sZFZhbHVlOiB7IFtrZXk6IHN0cmluZ106IGFueSB9IHwgdW5kZWZpbmVkLFxuICBuZXdWYWx1ZTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB8IHVuZGVmaW5lZCxcbiAgZWxlbWVudERpZmY6IChvbGRFbGVtZW50OiBhbnksIG5ld0VsZW1lbnQ6IGFueSwga2V5OiBzdHJpbmcpID0+IFQpOiB7IFtuYW1lOiBzdHJpbmddOiBUIH0ge1xuICBjb25zdCByZXN1bHQ6IHsgW25hbWU6IHN0cmluZ106IFQgfSA9IHt9O1xuICBmb3IgKGNvbnN0IGxvZ2ljYWxJZCBvZiB1bmlvbk9mKE9iamVjdC5rZXlzKG9sZFZhbHVlIHx8IHt9KSwgT2JqZWN0LmtleXMobmV3VmFsdWUgfHwge30pKSkge1xuICAgIGNvbnN0IG9sZEVsZW1lbnQgPSBvbGRWYWx1ZSAmJiBvbGRWYWx1ZVtsb2dpY2FsSWRdO1xuICAgIGNvbnN0IG5ld0VsZW1lbnQgPSBuZXdWYWx1ZSAmJiBuZXdWYWx1ZVtsb2dpY2FsSWRdO1xuXG4gICAgaWYgKG9sZEVsZW1lbnQgPT09IHVuZGVmaW5lZCAmJiBuZXdFbGVtZW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIFNob3VsZG4ndCBoYXBwZW4gaW4gcmVhbGl0eSwgYnV0IG1heSBoYXBwZW4gaW4gdGVzdHMuIFNraXAuXG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICByZXN1bHRbbG9naWNhbElkXSA9IGVsZW1lbnREaWZmKG9sZEVsZW1lbnQsIG5ld0VsZW1lbnQsIGxvZ2ljYWxJZCk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBDb21wdXRlcyB0aGUgdW5pb24gb2YgdHdvIHNldHMgb2Ygc3RyaW5ncy5cbiAqXG4gKiBAcGFyYW0gbHYgdGhlIGxlZnQgc2V0IG9mIHN0cmluZ3MuXG4gKiBAcGFyYW0gcnYgdGhlIHJpZ2h0IHNldCBvZiBzdHJpbmdzLlxuICpcbiAqIEByZXR1cm5zIGEgbmV3IGFycmF5IGNvbnRhaW5pbmcgYWxsIGVsZW1lYnRzIGZyb20gK2x2KyBhbmQgK3J2Kywgd2l0aCBubyBkdXBsaWNhdGVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdW5pb25PZihsdjogc3RyaW5nW10gfCBTZXQ8c3RyaW5nPiwgcnY6IHN0cmluZ1tdIHwgU2V0PHN0cmluZz4pOiBzdHJpbmdbXSB7XG4gIGNvbnN0IHJlc3VsdCA9IG5ldyBTZXQobHYpO1xuICBmb3IgKGNvbnN0IHYgb2YgcnYpIHtcbiAgICByZXN1bHQuYWRkKHYpO1xuICB9XG4gIHJldHVybiBuZXcgQXJyYXkoLi4ucmVzdWx0KTtcbn1cblxuLyoqXG4gKiBHZXRTdGFja1RlbXBsYXRlIGZsYXR0ZW5zIGFueSBjb2RlcG9pbnQgZ3JlYXRlciB0aGFuIFwiXFx1N2ZcIiB0byBcIj9cIi4gVGhpcyBpc1xuICogdHJ1ZSBldmVuIGZvciBjb2RlcG9pbnRzIGluIHRoZSBzdXBwbGVtZW50YWwgcGxhbmVzIHdoaWNoIGFyZSByZXByZXNlbnRlZFxuICogaW4gSlMgYXMgc3Vycm9nYXRlIHBhaXJzLCBhbGwgdGhlIHdheSB1cCB0byBcIlxcdXsxMGZmZmZ9XCIuXG4gKlxuICogVGhpcyBmdW5jdGlvbiBpbXBsZW1lbnRzIHRoZSBzYW1lIG1hbmdsaW5nIGluIG9yZGVyIHRvIHByb3ZpZGUgZGlhZ25vc3RpY1xuICogaW5mb3JtYXRpb24gaW4gYGNkayBkaWZmYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1hbmdsZUxpa2VDbG91ZEZvcm1hdGlvbihwYXlsb2FkOiBzdHJpbmcpIHtcbiAgcmV0dXJuIHBheWxvYWQucmVwbGFjZSgvW1xcdXs4MH0tXFx1ezEwZmZmZn1dL2d1LCAnPycpO1xufVxuXG4vKipcbiAqIEEgcGFyc2VGbG9hdCBpbXBsZW1lbnRhdGlvbiB0aGF0IGRvZXMgdGhlIHJpZ2h0IHRoaW5nIGZvclxuICogc3RyaW5ncyBsaWtlICcwLjAuMCdcbiAqIChmb3Igd2hpY2ggSmF2YVNjcmlwdCdzIHBhcnNlRmxvYXQoKSByZXR1cm5zIDApLlxuICogV2UgcmV0dXJuIE5hTiBmb3IgYWxsIG9mIHRoZXNlIHN0cmluZ3MgdGhhdCBkbyBub3QgcmVwcmVzZW50IG51bWJlcnMsXG4gKiBhbmQgc28gY29tcGFyaW5nIHRoZW0gZmFpbHMsXG4gKiBhbmQgZG9lc24ndCBzaG9ydC1jaXJjdWl0IHRoZSBkaWZmIGxvZ2ljLlxuICovXG5mdW5jdGlvbiBzYWZlUGFyc2VGbG9hdChzdHI6IHN0cmluZyk6IG51bWJlciB7XG4gIHJldHVybiBOdW1iZXIoc3RyKTtcbn1cbiJdfQ==
+
+/***/ }),
+
+/***/ 28805:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.DiffableCollection = void 0;
+/**
+ * Calculate differences of immutable elements
+ */
+class DiffableCollection {
+ constructor() {
+ this.additions = [];
+ this.removals = [];
+ this.oldElements = [];
+ this.newElements = [];
+ }
+ addOld(...elements) {
+ this.oldElements.push(...elements);
+ }
+ addNew(...elements) {
+ this.newElements.push(...elements);
+ }
+ calculateDiff() {
+ this.additions.push(...difference(this.newElements, this.oldElements));
+ this.removals.push(...difference(this.oldElements, this.newElements));
+ }
+ get hasChanges() {
+ return this.additions.length + this.removals.length > 0;
+ }
+ get hasAdditions() {
+ return this.additions.length > 0;
+ }
+ get hasRemovals() {
+ return this.removals.length > 0;
+ }
+}
+exports.DiffableCollection = DiffableCollection;
+/**
+ * Whether a collection contains some element (by value)
+ */
+function contains(element, xs) {
+ return xs.some(x => x.equal(element));
+}
+/**
+ * Return collection except for elements
+ */
+function difference(collection, elements) {
+ return collection.filter(x => !contains(x, elements));
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlmZmFibGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJkaWZmYWJsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQTs7R0FFRztBQUNILE1BQWEsa0JBQWtCO0lBQS9CO1FBQ2tCLGNBQVMsR0FBUSxFQUFFLENBQUM7UUFDcEIsYUFBUSxHQUFRLEVBQUUsQ0FBQztRQUVsQixnQkFBVyxHQUFRLEVBQUUsQ0FBQztRQUN0QixnQkFBVyxHQUFRLEVBQUUsQ0FBQztJQTBCekMsQ0FBQztJQXhCUSxNQUFNLENBQUMsR0FBRyxRQUFhO1FBQzVCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVNLE1BQU0sQ0FBQyxHQUFHLFFBQWE7UUFDNUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRU0sYUFBYTtRQUNsQixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO1FBQ3ZFLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7SUFDeEUsQ0FBQztJQUVELElBQVcsVUFBVTtRQUNuQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQsSUFBVyxZQUFZO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRCxJQUFXLFdBQVc7UUFDcEIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDbEMsQ0FBQztDQUNGO0FBL0JELGdEQStCQztBQVNEOztHQUVHO0FBQ0gsU0FBUyxRQUFRLENBQWtCLE9BQVUsRUFBRSxFQUFPO0lBQ3BELE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUN4QyxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFTLFVBQVUsQ0FBa0IsVUFBZSxFQUFFLFFBQWE7SUFDakUsT0FBTyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7QUFDeEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ2FsY3VsYXRlIGRpZmZlcmVuY2VzIG9mIGltbXV0YWJsZSBlbGVtZW50c1xuICovXG5leHBvcnQgY2xhc3MgRGlmZmFibGVDb2xsZWN0aW9uPFQgZXh0ZW5kcyBFcTxUPj4ge1xuICBwdWJsaWMgcmVhZG9ubHkgYWRkaXRpb25zOiBUW10gPSBbXTtcbiAgcHVibGljIHJlYWRvbmx5IHJlbW92YWxzOiBUW10gPSBbXTtcblxuICBwcml2YXRlIHJlYWRvbmx5IG9sZEVsZW1lbnRzOiBUW10gPSBbXTtcbiAgcHJpdmF0ZSByZWFkb25seSBuZXdFbGVtZW50czogVFtdID0gW107XG5cbiAgcHVibGljIGFkZE9sZCguLi5lbGVtZW50czogVFtdKSB7XG4gICAgdGhpcy5vbGRFbGVtZW50cy5wdXNoKC4uLmVsZW1lbnRzKTtcbiAgfVxuXG4gIHB1YmxpYyBhZGROZXcoLi4uZWxlbWVudHM6IFRbXSkge1xuICAgIHRoaXMubmV3RWxlbWVudHMucHVzaCguLi5lbGVtZW50cyk7XG4gIH1cblxuICBwdWJsaWMgY2FsY3VsYXRlRGlmZigpIHtcbiAgICB0aGlzLmFkZGl0aW9ucy5wdXNoKC4uLmRpZmZlcmVuY2UodGhpcy5uZXdFbGVtZW50cywgdGhpcy5vbGRFbGVtZW50cykpO1xuICAgIHRoaXMucmVtb3ZhbHMucHVzaCguLi5kaWZmZXJlbmNlKHRoaXMub2xkRWxlbWVudHMsIHRoaXMubmV3RWxlbWVudHMpKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaGFzQ2hhbmdlcygpIHtcbiAgICByZXR1cm4gdGhpcy5hZGRpdGlvbnMubGVuZ3RoICsgdGhpcy5yZW1vdmFscy5sZW5ndGggPiAwO1xuICB9XG5cbiAgcHVibGljIGdldCBoYXNBZGRpdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuYWRkaXRpb25zLmxlbmd0aCA+IDA7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGhhc1JlbW92YWxzKCkge1xuICAgIHJldHVybiB0aGlzLnJlbW92YWxzLmxlbmd0aCA+IDA7XG4gIH1cbn1cblxuLyoqXG4gKiBUaGluZ3MgdGhhdCBjYW4gYmUgY29tcGFyZWQgdG8gdGhlbXNlbHZlcyAoYnkgdmFsdWUpXG4gKi9cbmludGVyZmFjZSBFcTxUPiB7XG4gIGVxdWFsKG90aGVyOiBUKTogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBXaGV0aGVyIGEgY29sbGVjdGlvbiBjb250YWlucyBzb21lIGVsZW1lbnQgKGJ5IHZhbHVlKVxuICovXG5mdW5jdGlvbiBjb250YWluczxUIGV4dGVuZHMgRXE8VD4+KGVsZW1lbnQ6IFQsIHhzOiBUW10pOiBib29sZWFuIHtcbiAgcmV0dXJuIHhzLnNvbWUoeCA9PiB4LmVxdWFsKGVsZW1lbnQpKTtcbn1cblxuLyoqXG4gKiBSZXR1cm4gY29sbGVjdGlvbiBleGNlcHQgZm9yIGVsZW1lbnRzXG4gKi9cbmZ1bmN0aW9uIGRpZmZlcmVuY2U8VCBleHRlbmRzIEVxPFQ+Pihjb2xsZWN0aW9uOiBUW10sIGVsZW1lbnRzOiBUW10pOiBUW10ge1xuICByZXR1cm4gY29sbGVjdGlvbi5maWx0ZXIoeCA9PiAhY29udGFpbnMoeCwgZWxlbWVudHMpKTtcbn1cbiJdfQ==
+
+/***/ }),
+
+/***/ 96791:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.formatTable = void 0;
+const chalk = __nccwpck_require__(78818);
+const string_width_1 = __nccwpck_require__(42577);
+const table = __nccwpck_require__(13756);
+/**
+ * Render a two-dimensional array to a visually attractive table
+ *
+ * First row is considered the table header.
+ */
+function formatTable(cells, columns) {
+ return table.table(cells, {
+ border: TABLE_BORDER_CHARACTERS,
+ columns: buildColumnConfig(columns !== undefined ? calculateColumnWidths(cells, columns) : undefined),
+ drawHorizontalLine: (line) => {
+ // Numbering like this: [line 0] [header = row[0]] [line 1] [row 1] [line 2] [content 2] [line 3]
+ return (line < 2 || line === cells.length) || lineBetween(cells[line - 1], cells[line]);
+ },
+ }).trimRight();
+}
+exports.formatTable = formatTable;
+/**
+ * Whether we should draw a line between two rows
+ *
+ * Draw horizontal line if 2nd column values are different.
+ */
+function lineBetween(rowA, rowB) {
+ return rowA[1] !== rowB[1];
+}
+function buildColumnConfig(widths) {
+ if (widths === undefined) {
+ return undefined;
+ }
+ const ret = {};
+ widths.forEach((width, i) => {
+ if (width === undefined) {
+ return;
+ }
+ ret[i] = { width };
+ });
+ return ret;
+}
+/**
+ * Calculate column widths given a terminal width
+ *
+ * We do this by calculating a fair share for every column. Extra width smaller
+ * than the fair share is evenly distributed over all columns that exceed their
+ * fair share.
+ */
+function calculateColumnWidths(rows, terminalWidth) {
+ // The terminal is sometimes reported to be 0. Also if the terminal is VERY narrow,
+ // just assume a reasonable minimum size.
+ terminalWidth = Math.max(terminalWidth, 40);
+ // use 'string-width' to not count ANSI chars as actual character width
+ const columns = rows[0].map((_, i) => Math.max(...rows.map(row => (0, string_width_1.default)(String(row[i])))));
+ // If we have no terminal width, do nothing
+ const contentWidth = terminalWidth - 2 - columns.length * 3;
+ // If we don't exceed the terminal width, do nothing
+ if (sum(columns) <= contentWidth) {
+ return columns;
+ }
+ const fairShare = Math.min(contentWidth / columns.length);
+ const smallColumns = columns.filter(w => w < fairShare);
+ let distributableWidth = contentWidth - sum(smallColumns);
+ const fairDistributable = Math.floor(distributableWidth / (columns.length - smallColumns.length));
+ const ret = new Array();
+ for (const requestedWidth of columns) {
+ if (requestedWidth < fairShare) {
+ // Small column gets what they want
+ ret.push(requestedWidth);
+ }
+ else {
+ // Last column gets all remaining, otherwise get fair redist share
+ const width = distributableWidth < 2 * fairDistributable ? distributableWidth : fairDistributable;
+ ret.push(width);
+ distributableWidth -= width;
+ }
+ }
+ return ret;
+}
+function sum(xs) {
+ let total = 0;
+ for (const x of xs) {
+ total += x;
+ }
+ return total;
+}
+// What color the table is going to be
+const tableColor = chalk.gray;
+// Unicode table characters with a color
+const TABLE_BORDER_CHARACTERS = {
+ topBody: tableColor('─'),
+ topJoin: tableColor('┬'),
+ topLeft: tableColor('┌'),
+ topRight: tableColor('┐'),
+ bottomBody: tableColor('─'),
+ bottomJoin: tableColor('┴'),
+ bottomLeft: tableColor('└'),
+ bottomRight: tableColor('┘'),
+ bodyLeft: tableColor('│'),
+ bodyRight: tableColor('│'),
+ bodyJoin: tableColor('│'),
+ joinBody: tableColor('─'),
+ joinLeft: tableColor('├'),
+ joinRight: tableColor('┤'),
+ joinJoin: tableColor('┼'),
+};
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWF0LXRhYmxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZm9ybWF0LXRhYmxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLCtCQUErQjtBQUMvQiwrQ0FBdUM7QUFDdkMsK0JBQStCO0FBRS9COzs7O0dBSUc7QUFDSCxTQUFnQixXQUFXLENBQUMsS0FBaUIsRUFBRSxPQUEyQjtJQUN4RSxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFO1FBQ3hCLE1BQU0sRUFBRSx1QkFBdUI7UUFDL0IsT0FBTyxFQUFFLGlCQUFpQixDQUFDLE9BQU8sS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQ3JHLGtCQUFrQixFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDM0IsaUdBQWlHO1lBQ2pHLE9BQU8sQ0FBQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLElBQUksS0FBSyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksV0FBVyxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDMUYsQ0FBQztLQUNGLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUNqQixDQUFDO0FBVEQsa0NBU0M7QUFFRDs7OztHQUlHO0FBQ0gsU0FBUyxXQUFXLENBQUMsSUFBYyxFQUFFLElBQWM7SUFDakQsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdCLENBQUM7QUFFRCxTQUFTLGlCQUFpQixDQUFDLE1BQTRCO0lBQ3JELElBQUksTUFBTSxLQUFLLFNBQVMsRUFBRTtRQUFFLE9BQU8sU0FBUyxDQUFDO0tBQUU7SUFFL0MsTUFBTSxHQUFHLEdBQWdELEVBQUUsQ0FBQztJQUM1RCxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQzFCLElBQUksS0FBSyxLQUFLLFNBQVMsRUFBRTtZQUN2QixPQUFPO1NBQ1I7UUFDRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQztJQUNyQixDQUFDLENBQUMsQ0FBQztJQUVILE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILFNBQVMscUJBQXFCLENBQUMsSUFBZ0IsRUFBRSxhQUFxQjtJQUNwRSxtRkFBbUY7SUFDbkYseUNBQXlDO0lBQ3pDLGFBQWEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUU1Qyx1RUFBdUU7SUFDdkUsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBQSxzQkFBVyxFQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRWpHLDJDQUEyQztJQUMzQyxNQUFNLFlBQVksR0FBRyxhQUFhLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBRTVELG9EQUFvRDtJQUNwRCxJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxZQUFZLEVBQUU7UUFBRSxPQUFPLE9BQU8sQ0FBQztLQUFFO0lBRXJELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMxRCxNQUFNLFlBQVksR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDO0lBRXhELElBQUksa0JBQWtCLEdBQUcsWUFBWSxHQUFHLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUMxRCxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsa0JBQWtCLEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBRWxHLE1BQU0sR0FBRyxHQUFHLElBQUksS0FBSyxFQUFVLENBQUM7SUFDaEMsS0FBSyxNQUFNLGNBQWMsSUFBSSxPQUFPLEVBQUU7UUFDcEMsSUFBSSxjQUFjLEdBQUcsU0FBUyxFQUFFO1lBQzlCLG1DQUFtQztZQUNuQyxHQUFHLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1NBQzFCO2FBQU07WUFDTCxrRUFBa0U7WUFDbEUsTUFBTSxLQUFLLEdBQUcsa0JBQWtCLEdBQUcsQ0FBQyxHQUFHLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUM7WUFDbEcsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNoQixrQkFBa0IsSUFBSSxLQUFLLENBQUM7U0FDN0I7S0FDRjtJQUVELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUVELFNBQVMsR0FBRyxDQUFDLEVBQVk7SUFDdkIsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDO0lBQ2QsS0FBSyxNQUFNLENBQUMsSUFBSSxFQUFFLEVBQUU7UUFDbEIsS0FBSyxJQUFJLENBQUMsQ0FBQztLQUNaO0lBQ0QsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FBRUQsc0NBQXNDO0FBQ3RDLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7QUFFOUIsd0NBQXdDO0FBQ3hDLE1BQU0sdUJBQXVCLEdBQUc7SUFDOUIsT0FBTyxFQUFFLFVBQVUsQ0FBQyxHQUFHLENBQUM7SUFDeEIsT0FBTyxFQUFFLFVBQVUsQ0FBQyxHQUFHLENBQUM7SUFDeEIsT0FBTyxFQUFFLFVBQVUsQ0FBQyxHQUFHLENBQUM7SUFDeEIsUUFBUSxFQUFFLFVBQVUsQ0FBQyxHQUFHLENBQUM7SUFDekIsVUFBVSxFQUFFLFVBQVUsQ0FBQyxHQUFHLENBQUM7SUFDM0IsVUFBVSxFQUFFLFVBQVUsQ0FBQyxHQUFHLENBQUM7SUFDM0IsVUFBVSxFQUFFLFVBQVUsQ0FBQyxHQUFHLENBQUM7SUFDM0IsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLENBQUM7SUFDNUIsUUFBUSxFQUFFLFVBQVUsQ0FBQyxHQUFHLENBQUM7SUFDekIsU0FBUyxFQUFFLFVBQVUsQ0FBQyxHQUFHLENBQUM7SUFDMUIsUUFBUSxFQUFFLFVBQVUsQ0FBQyxHQUFHLENBQUM7SUFDekIsUUFBUSxFQUFFLFVBQVUsQ0FBQyxHQUFHLENBQUM7SUFDekIsUUFBUSxFQUFFLFVBQVUsQ0FBQyxHQUFHLENBQUM7SUFDekIsU0FBUyxFQUFFLFVBQVUsQ0FBQyxHQUFHLENBQUM7SUFDMUIsUUFBUSxFQUFFLFVBQVUsQ0FBQyxHQUFHLENBQUM7Q0FDMUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGNoYWxrIGZyb20gJ2NoYWxrJztcbmltcG9ydCBzdHJpbmdXaWR0aCBmcm9tICdzdHJpbmctd2lkdGgnO1xuaW1wb3J0ICogYXMgdGFibGUgZnJvbSAndGFibGUnO1xuXG4vKipcbiAqIFJlbmRlciBhIHR3by1kaW1lbnNpb25hbCBhcnJheSB0byBhIHZpc3VhbGx5IGF0dHJhY3RpdmUgdGFibGVcbiAqXG4gKiBGaXJzdCByb3cgaXMgY29uc2lkZXJlZCB0aGUgdGFibGUgaGVhZGVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0VGFibGUoY2VsbHM6IHN0cmluZ1tdW10sIGNvbHVtbnM6IG51bWJlciB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XG4gIHJldHVybiB0YWJsZS50YWJsZShjZWxscywge1xuICAgIGJvcmRlcjogVEFCTEVfQk9SREVSX0NIQVJBQ1RFUlMsXG4gICAgY29sdW1uczogYnVpbGRDb2x1bW5Db25maWcoY29sdW1ucyAhPT0gdW5kZWZpbmVkID8gY2FsY3VsYXRlQ29sdW1uV2lkdGhzKGNlbGxzLCBjb2x1bW5zKSA6IHVuZGVmaW5lZCksXG4gICAgZHJhd0hvcml6b250YWxMaW5lOiAobGluZSkgPT4ge1xuICAgICAgLy8gTnVtYmVyaW5nIGxpa2UgdGhpczogW2xpbmUgMF0gW2hlYWRlciA9IHJvd1swXV0gW2xpbmUgMV0gW3JvdyAxXSBbbGluZSAyXSBbY29udGVudCAyXSBbbGluZSAzXVxuICAgICAgcmV0dXJuIChsaW5lIDwgMiB8fCBsaW5lID09PSBjZWxscy5sZW5ndGgpIHx8IGxpbmVCZXR3ZWVuKGNlbGxzW2xpbmUgLSAxXSwgY2VsbHNbbGluZV0pO1xuICAgIH0sXG4gIH0pLnRyaW1SaWdodCgpO1xufVxuXG4vKipcbiAqIFdoZXRoZXIgd2Ugc2hvdWxkIGRyYXcgYSBsaW5lIGJldHdlZW4gdHdvIHJvd3NcbiAqXG4gKiBEcmF3IGhvcml6b250YWwgbGluZSBpZiAybmQgY29sdW1uIHZhbHVlcyBhcmUgZGlmZmVyZW50LlxuICovXG5mdW5jdGlvbiBsaW5lQmV0d2Vlbihyb3dBOiBzdHJpbmdbXSwgcm93Qjogc3RyaW5nW10pIHtcbiAgcmV0dXJuIHJvd0FbMV0gIT09IHJvd0JbMV07XG59XG5cbmZ1bmN0aW9uIGJ1aWxkQ29sdW1uQ29uZmlnKHdpZHRoczogbnVtYmVyW10gfCB1bmRlZmluZWQpOiB7IFtpbmRleDogbnVtYmVyXTogdGFibGUuQ29sdW1uVXNlckNvbmZpZyB9IHwgdW5kZWZpbmVkIHtcbiAgaWYgKHdpZHRocyA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cblxuICBjb25zdCByZXQ6IHsgW2luZGV4OiBudW1iZXJdOiB0YWJsZS5Db2x1bW5Vc2VyQ29uZmlnIH0gPSB7fTtcbiAgd2lkdGhzLmZvckVhY2goKHdpZHRoLCBpKSA9PiB7XG4gICAgaWYgKHdpZHRoID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcmV0W2ldID0geyB3aWR0aCB9O1xuICB9KTtcblxuICByZXR1cm4gcmV0O1xufVxuXG4vKipcbiAqIENhbGN1bGF0ZSBjb2x1bW4gd2lkdGhzIGdpdmVuIGEgdGVybWluYWwgd2lkdGhcbiAqXG4gKiBXZSBkbyB0aGlzIGJ5IGNhbGN1bGF0aW5nIGEgZmFpciBzaGFyZSBmb3IgZXZlcnkgY29sdW1uLiBFeHRyYSB3aWR0aCBzbWFsbGVyXG4gKiB0aGFuIHRoZSBmYWlyIHNoYXJlIGlzIGV2ZW5seSBkaXN0cmlidXRlZCBvdmVyIGFsbCBjb2x1bW5zIHRoYXQgZXhjZWVkIHRoZWlyXG4gKiBmYWlyIHNoYXJlLlxuICovXG5mdW5jdGlvbiBjYWxjdWxhdGVDb2x1bW5XaWR0aHMocm93czogc3RyaW5nW11bXSwgdGVybWluYWxXaWR0aDogbnVtYmVyKTogbnVtYmVyW10ge1xuICAvLyBUaGUgdGVybWluYWwgaXMgc29tZXRpbWVzIHJlcG9ydGVkIHRvIGJlIDAuIEFsc28gaWYgdGhlIHRlcm1pbmFsIGlzIFZFUlkgbmFycm93LFxuICAvLyBqdXN0IGFzc3VtZSBhIHJlYXNvbmFibGUgbWluaW11bSBzaXplLlxuICB0ZXJtaW5hbFdpZHRoID0gTWF0aC5tYXgodGVybWluYWxXaWR0aCwgNDApO1xuXG4gIC8vIHVzZSAnc3RyaW5nLXdpZHRoJyB0byBub3QgY291bnQgQU5TSSBjaGFycyBhcyBhY3R1YWwgY2hhcmFjdGVyIHdpZHRoXG4gIGNvbnN0IGNvbHVtbnMgPSByb3dzWzBdLm1hcCgoXywgaSkgPT4gTWF0aC5tYXgoLi4ucm93cy5tYXAocm93ID0+IHN0cmluZ1dpZHRoKFN0cmluZyhyb3dbaV0pKSkpKTtcblxuICAvLyBJZiB3ZSBoYXZlIG5vIHRlcm1pbmFsIHdpZHRoLCBkbyBub3RoaW5nXG4gIGNvbnN0IGNvbnRlbnRXaWR0aCA9IHRlcm1pbmFsV2lkdGggLSAyIC0gY29sdW1ucy5sZW5ndGggKiAzO1xuXG4gIC8vIElmIHdlIGRvbid0IGV4Y2VlZCB0aGUgdGVybWluYWwgd2lkdGgsIGRvIG5vdGhpbmdcbiAgaWYgKHN1bShjb2x1bW5zKSA8PSBjb250ZW50V2lkdGgpIHsgcmV0dXJuIGNvbHVtbnM7IH1cblxuICBjb25zdCBmYWlyU2hhcmUgPSBNYXRoLm1pbihjb250ZW50V2lkdGggLyBjb2x1bW5zLmxlbmd0aCk7XG4gIGNvbnN0IHNtYWxsQ29sdW1ucyA9IGNvbHVtbnMuZmlsdGVyKHcgPT4gdyA8IGZhaXJTaGFyZSk7XG5cbiAgbGV0IGRpc3RyaWJ1dGFibGVXaWR0aCA9IGNvbnRlbnRXaWR0aCAtIHN1bShzbWFsbENvbHVtbnMpO1xuICBjb25zdCBmYWlyRGlzdHJpYnV0YWJsZSA9IE1hdGguZmxvb3IoZGlzdHJpYnV0YWJsZVdpZHRoIC8gKGNvbHVtbnMubGVuZ3RoIC0gc21hbGxDb2x1bW5zLmxlbmd0aCkpO1xuXG4gIGNvbnN0IHJldCA9IG5ldyBBcnJheTxudW1iZXI+KCk7XG4gIGZvciAoY29uc3QgcmVxdWVzdGVkV2lkdGggb2YgY29sdW1ucykge1xuICAgIGlmIChyZXF1ZXN0ZWRXaWR0aCA8IGZhaXJTaGFyZSkge1xuICAgICAgLy8gU21hbGwgY29sdW1uIGdldHMgd2hhdCB0aGV5IHdhbnRcbiAgICAgIHJldC5wdXNoKHJlcXVlc3RlZFdpZHRoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTGFzdCBjb2x1bW4gZ2V0cyBhbGwgcmVtYWluaW5nLCBvdGhlcndpc2UgZ2V0IGZhaXIgcmVkaXN0IHNoYXJlXG4gICAgICBjb25zdCB3aWR0aCA9IGRpc3RyaWJ1dGFibGVXaWR0aCA8IDIgKiBmYWlyRGlzdHJpYnV0YWJsZSA/IGRpc3RyaWJ1dGFibGVXaWR0aCA6IGZhaXJEaXN0cmlidXRhYmxlO1xuICAgICAgcmV0LnB1c2god2lkdGgpO1xuICAgICAgZGlzdHJpYnV0YWJsZVdpZHRoIC09IHdpZHRoO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXQ7XG59XG5cbmZ1bmN0aW9uIHN1bSh4czogbnVtYmVyW10pOiBudW1iZXIge1xuICBsZXQgdG90YWwgPSAwO1xuICBmb3IgKGNvbnN0IHggb2YgeHMpIHtcbiAgICB0b3RhbCArPSB4O1xuICB9XG4gIHJldHVybiB0b3RhbDtcbn1cblxuLy8gV2hhdCBjb2xvciB0aGUgdGFibGUgaXMgZ29pbmcgdG8gYmVcbmNvbnN0IHRhYmxlQ29sb3IgPSBjaGFsay5ncmF5O1xuXG4vLyBVbmljb2RlIHRhYmxlIGNoYXJhY3RlcnMgd2l0aCBhIGNvbG9yXG5jb25zdCBUQUJMRV9CT1JERVJfQ0hBUkFDVEVSUyA9IHtcbiAgdG9wQm9keTogdGFibGVDb2xvcign4pSAJyksXG4gIHRvcEpvaW46IHRhYmxlQ29sb3IoJ+KUrCcpLFxuICB0b3BMZWZ0OiB0YWJsZUNvbG9yKCfilIwnKSxcbiAgdG9wUmlnaHQ6IHRhYmxlQ29sb3IoJ+KUkCcpLFxuICBib3R0b21Cb2R5OiB0YWJsZUNvbG9yKCfilIAnKSxcbiAgYm90dG9tSm9pbjogdGFibGVDb2xvcign4pS0JyksXG4gIGJvdHRvbUxlZnQ6IHRhYmxlQ29sb3IoJ+KUlCcpLFxuICBib3R0b21SaWdodDogdGFibGVDb2xvcign4pSYJyksXG4gIGJvZHlMZWZ0OiB0YWJsZUNvbG9yKCfilIInKSxcbiAgYm9keVJpZ2h0OiB0YWJsZUNvbG9yKCfilIInKSxcbiAgYm9keUpvaW46IHRhYmxlQ29sb3IoJ+KUgicpLFxuICBqb2luQm9keTogdGFibGVDb2xvcign4pSAJyksXG4gIGpvaW5MZWZ0OiB0YWJsZUNvbG9yKCfilJwnKSxcbiAgam9pblJpZ2h0OiB0YWJsZUNvbG9yKCfilKQnKSxcbiAgam9pbkpvaW46IHRhYmxlQ29sb3IoJ+KUvCcpLFxufTtcbiJdfQ==
+
+/***/ }),
+
+/***/ 66446:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.formatSecurityChanges = exports.formatDifferences = void 0;
+const util_1 = __nccwpck_require__(73837);
+const chalk = __nccwpck_require__(78818);
+const util_2 = __nccwpck_require__(3089);
+const diff_template_1 = __nccwpck_require__(46316);
+const format_table_1 = __nccwpck_require__(96791);
+// from cx-api
+const PATH_METADATA_KEY = 'aws:cdk:path';
+/* eslint-disable @typescript-eslint/no-require-imports */
+const { structuredPatch } = __nccwpck_require__(71672);
+/**
+ * Renders template differences to the process' console.
+ *
+ * @param stream The IO stream where to output the rendered diff.
+ * @param templateDiff TemplateDiff to be rendered to the console.
+ * @param logicalToPathMap A map from logical ID to construct path. Useful in
+ * case there is no aws:cdk:path metadata in the template.
+ * @param context the number of context lines to use in arbitrary JSON diff (defaults to 3).
+ */
+function formatDifferences(stream, templateDiff, logicalToPathMap = {}, context = 3) {
+ const formatter = new Formatter(stream, logicalToPathMap, templateDiff, context);
+ if (templateDiff.awsTemplateFormatVersion || templateDiff.transform || templateDiff.description) {
+ formatter.printSectionHeader('Template');
+ formatter.formatDifference('AWSTemplateFormatVersion', 'AWSTemplateFormatVersion', templateDiff.awsTemplateFormatVersion);
+ formatter.formatDifference('Transform', 'Transform', templateDiff.transform);
+ formatter.formatDifference('Description', 'Description', templateDiff.description);
+ formatter.printSectionFooter();
+ }
+ formatSecurityChangesWithBanner(formatter, templateDiff);
+ formatter.formatSection('Parameters', 'Parameter', templateDiff.parameters);
+ formatter.formatSection('Metadata', 'Metadata', templateDiff.metadata);
+ formatter.formatSection('Mappings', 'Mapping', templateDiff.mappings);
+ formatter.formatSection('Conditions', 'Condition', templateDiff.conditions);
+ formatter.formatSection('Resources', 'Resource', templateDiff.resources, formatter.formatResourceDifference.bind(formatter));
+ formatter.formatSection('Outputs', 'Output', templateDiff.outputs);
+ formatter.formatSection('Other Changes', 'Unknown', templateDiff.unknown);
+}
+exports.formatDifferences = formatDifferences;
+/**
+ * Renders a diff of security changes to the given stream
+ */
+function formatSecurityChanges(stream, templateDiff, logicalToPathMap = {}, context) {
+ const formatter = new Formatter(stream, logicalToPathMap, templateDiff, context);
+ formatSecurityChangesWithBanner(formatter, templateDiff);
+}
+exports.formatSecurityChanges = formatSecurityChanges;
+function formatSecurityChangesWithBanner(formatter, templateDiff) {
+ if (!templateDiff.iamChanges.hasChanges && !templateDiff.securityGroupChanges.hasChanges) {
+ return;
+ }
+ formatter.formatIamChanges(templateDiff.iamChanges);
+ formatter.formatSecurityGroupChanges(templateDiff.securityGroupChanges);
+ formatter.warning('(NOTE: There may be security-related changes not in this list. See https://github.com/aws/aws-cdk/issues/1299)');
+ formatter.printSectionFooter();
+}
+const ADDITION = chalk.green('[+]');
+const CONTEXT = chalk.grey('[ ]');
+const UPDATE = chalk.yellow('[~]');
+const REMOVAL = chalk.red('[-]');
+class Formatter {
+ constructor(stream, logicalToPathMap, diff, context = 3) {
+ this.stream = stream;
+ this.logicalToPathMap = logicalToPathMap;
+ this.context = context;
+ // Read additional construct paths from the diff if it is supplied
+ if (diff) {
+ this.readConstructPathsFrom(diff);
+ }
+ }
+ print(fmt, ...args) {
+ this.stream.write(chalk.white((0, util_1.format)(fmt, ...args)) + '\n');
+ }
+ warning(fmt, ...args) {
+ this.stream.write(chalk.yellow((0, util_1.format)(fmt, ...args)) + '\n');
+ }
+ formatSection(title, entryType, collection, formatter = this.formatDifference.bind(this)) {
+ if (collection.differenceCount === 0) {
+ return;
+ }
+ this.printSectionHeader(title);
+ collection.forEachDifference((id, diff) => formatter(entryType, id, diff));
+ this.printSectionFooter();
+ }
+ printSectionHeader(title) {
+ this.print(chalk.underline(chalk.bold(title)));
+ }
+ printSectionFooter() {
+ this.print('');
+ }
+ /**
+ * Print a simple difference for a given named entity.
+ *
+ * @param logicalId the name of the entity that is different.
+ * @param diff the difference to be rendered.
+ */
+ formatDifference(type, logicalId, diff) {
+ if (!diff || !diff.isDifferent) {
+ return;
+ }
+ let value;
+ const oldValue = this.formatValue(diff.oldValue, chalk.red);
+ const newValue = this.formatValue(diff.newValue, chalk.green);
+ if (diff.isAddition) {
+ value = newValue;
+ }
+ else if (diff.isUpdate) {
+ value = `${oldValue} to ${newValue}`;
+ }
+ else if (diff.isRemoval) {
+ value = oldValue;
+ }
+ this.print(`${this.formatPrefix(diff)} ${chalk.cyan(type)} ${this.formatLogicalId(logicalId)}: ${value}`);
+ }
+ /**
+ * Print a resource difference for a given logical ID.
+ *
+ * @param logicalId the logical ID of the resource that changed.
+ * @param diff the change to be rendered.
+ */
+ formatResourceDifference(_type, logicalId, diff) {
+ if (!diff.isDifferent) {
+ return;
+ }
+ const resourceType = diff.isRemoval ? diff.oldResourceType : diff.newResourceType;
+ // eslint-disable-next-line max-len
+ this.print(`${this.formatPrefix(diff)} ${this.formatValue(resourceType, chalk.cyan)} ${this.formatLogicalId(logicalId)} ${this.formatImpact(diff.changeImpact)}`);
+ if (diff.isUpdate) {
+ const differenceCount = diff.differenceCount;
+ let processedCount = 0;
+ diff.forEachDifference((_, name, values) => {
+ processedCount += 1;
+ this.formatTreeDiff(name, values, processedCount === differenceCount);
+ });
+ }
+ }
+ formatPrefix(diff) {
+ if (diff.isAddition) {
+ return ADDITION;
+ }
+ if (diff.isUpdate) {
+ return UPDATE;
+ }
+ if (diff.isRemoval) {
+ return REMOVAL;
+ }
+ return chalk.white('[?]');
+ }
+ /**
+ * @param value the value to be formatted.
+ * @param color the color to be used.
+ *
+ * @returns the formatted string, with color applied.
+ */
+ formatValue(value, color) {
+ if (value == null) {
+ return undefined;
+ }
+ if (typeof value === 'string') {
+ return color(value);
+ }
+ return color(JSON.stringify(value));
+ }
+ /**
+ * @param impact the impact to be formatted
+ * @returns a user-friendly, colored string representing the impact.
+ */
+ formatImpact(impact) {
+ switch (impact) {
+ case diff_template_1.ResourceImpact.MAY_REPLACE:
+ return chalk.italic(chalk.yellow('may be replaced'));
+ case diff_template_1.ResourceImpact.WILL_REPLACE:
+ return chalk.italic(chalk.bold(chalk.red('replace')));
+ case diff_template_1.ResourceImpact.WILL_DESTROY:
+ return chalk.italic(chalk.bold(chalk.red('destroy')));
+ case diff_template_1.ResourceImpact.WILL_ORPHAN:
+ return chalk.italic(chalk.yellow('orphan'));
+ case diff_template_1.ResourceImpact.WILL_UPDATE:
+ case diff_template_1.ResourceImpact.WILL_CREATE:
+ case diff_template_1.ResourceImpact.NO_CHANGE:
+ return ''; // no extra info is gained here
+ }
+ }
+ /**
+ * Renders a tree of differences under a particular name.
+ * @param name the name of the root of the tree.
+ * @param diff the difference on the tree.
+ * @param last whether this is the last node of a parent tree.
+ */
+ formatTreeDiff(name, diff, last) {
+ let additionalInfo = '';
+ if ((0, diff_template_1.isPropertyDifference)(diff)) {
+ if (diff.changeImpact === diff_template_1.ResourceImpact.MAY_REPLACE) {
+ additionalInfo = ' (may cause replacement)';
+ }
+ else if (diff.changeImpact === diff_template_1.ResourceImpact.WILL_REPLACE) {
+ additionalInfo = ' (requires replacement)';
+ }
+ }
+ this.print(' %s─ %s %s%s', last ? '└' : '├', this.changeTag(diff.oldValue, diff.newValue), name, additionalInfo);
+ return this.formatObjectDiff(diff.oldValue, diff.newValue, ` ${last ? ' ' : '│'}`);
+ }
+ /**
+ * Renders the difference between two objects, looking for the differences as deep as possible,
+ * and rendering a tree graph of the path until the difference is found.
+ *
+ * @param oldObject the old object.
+ * @param newObject the new object.
+ * @param linePrefix a prefix (indent-like) to be used on every line.
+ */
+ formatObjectDiff(oldObject, newObject, linePrefix) {
+ if ((typeof oldObject !== typeof newObject) || Array.isArray(oldObject) || typeof oldObject === 'string' || typeof oldObject === 'number') {
+ if (oldObject !== undefined && newObject !== undefined) {
+ if (typeof oldObject === 'object' || typeof newObject === 'object') {
+ const oldStr = JSON.stringify(oldObject, null, 2);
+ const newStr = JSON.stringify(newObject, null, 2);
+ const diff = _diffStrings(oldStr, newStr, this.context);
+ for (let i = 0; i < diff.length; i++) {
+ this.print('%s %s %s', linePrefix, i === 0 ? '└─' : ' ', diff[i]);
+ }
+ }
+ else {
+ this.print('%s ├─ %s %s', linePrefix, REMOVAL, this.formatValue(oldObject, chalk.red));
+ this.print('%s └─ %s %s', linePrefix, ADDITION, this.formatValue(newObject, chalk.green));
+ }
+ }
+ else if (oldObject !== undefined /* && newObject === undefined */) {
+ this.print('%s └─ %s', linePrefix, this.formatValue(oldObject, chalk.red));
+ }
+ else /* if (oldObject === undefined && newObject !== undefined) */ {
+ this.print('%s └─ %s', linePrefix, this.formatValue(newObject, chalk.green));
+ }
+ return;
+ }
+ const keySet = new Set(Object.keys(oldObject));
+ Object.keys(newObject).forEach(k => keySet.add(k));
+ const keys = new Array(...keySet).filter(k => !(0, util_2.deepEqual)(oldObject[k], newObject[k])).sort();
+ const lastKey = keys[keys.length - 1];
+ for (const key of keys) {
+ const oldValue = oldObject[key];
+ const newValue = newObject[key];
+ const treePrefix = key === lastKey ? '└' : '├';
+ if (oldValue !== undefined && newValue !== undefined) {
+ this.print('%s %s─ %s %s:', linePrefix, treePrefix, this.changeTag(oldValue, newValue), chalk.blue(`.${key}`));
+ this.formatObjectDiff(oldValue, newValue, `${linePrefix} ${key === lastKey ? ' ' : '│'}`);
+ }
+ else if (oldValue !== undefined /* && newValue === undefined */) {
+ this.print('%s %s─ %s Removed: %s', linePrefix, treePrefix, REMOVAL, chalk.blue(`.${key}`));
+ }
+ else /* if (oldValue === undefined && newValue !== undefined */ {
+ this.print('%s %s─ %s Added: %s', linePrefix, treePrefix, ADDITION, chalk.blue(`.${key}`));
+ }
+ }
+ }
+ /**
+ * @param oldValue the old value of a difference.
+ * @param newValue the new value of a difference.
+ *
+ * @returns a tag to be rendered in the diff, reflecting whether the difference
+ * was an ADDITION, UPDATE or REMOVAL.
+ */
+ changeTag(oldValue, newValue) {
+ if (oldValue !== undefined && newValue !== undefined) {
+ return UPDATE;
+ }
+ else if (oldValue !== undefined /* && newValue === undefined*/) {
+ return REMOVAL;
+ }
+ else /* if (oldValue === undefined && newValue !== undefined) */ {
+ return ADDITION;
+ }
+ }
+ /**
+ * Find 'aws:cdk:path' metadata in the diff and add it to the logicalToPathMap
+ *
+ * There are multiple sources of logicalID -> path mappings: synth metadata
+ * and resource metadata, and we combine all sources into a single map.
+ */
+ readConstructPathsFrom(templateDiff) {
+ for (const [logicalId, resourceDiff] of Object.entries(templateDiff.resources)) {
+ if (!resourceDiff) {
+ continue;
+ }
+ const oldPathMetadata = resourceDiff.oldValue && resourceDiff.oldValue.Metadata && resourceDiff.oldValue.Metadata[PATH_METADATA_KEY];
+ if (oldPathMetadata && !(logicalId in this.logicalToPathMap)) {
+ this.logicalToPathMap[logicalId] = oldPathMetadata;
+ }
+ const newPathMetadata = resourceDiff.newValue && resourceDiff.newValue.Metadata && resourceDiff.newValue.Metadata[PATH_METADATA_KEY];
+ if (newPathMetadata && !(logicalId in this.logicalToPathMap)) {
+ this.logicalToPathMap[logicalId] = newPathMetadata;
+ }
+ }
+ }
+ formatLogicalId(logicalId) {
+ // if we have a path in the map, return it
+ const normalized = this.normalizedLogicalIdPath(logicalId);
+ if (normalized) {
+ return `${normalized} ${chalk.gray(logicalId)}`;
+ }
+ return logicalId;
+ }
+ normalizedLogicalIdPath(logicalId) {
+ // if we have a path in the map, return it
+ const path = this.logicalToPathMap[logicalId];
+ return path ? normalizePath(path) : undefined;
+ /**
+ * Path is supposed to start with "/stack-name". If this is the case (i.e. path has more than
+ * two components, we remove the first part. Otherwise, we just use the full path.
+ * @param p
+ */
+ function normalizePath(p) {
+ if (p.startsWith('/')) {
+ p = p.slice(1);
+ }
+ let parts = p.split('/');
+ if (parts.length > 1) {
+ parts = parts.slice(1);
+ // remove the last component if it's "Resource" or "Default" (if we have more than a single component)
+ if (parts.length > 1) {
+ const last = parts[parts.length - 1];
+ if (last === 'Resource' || last === 'Default') {
+ parts = parts.slice(0, parts.length - 1);
+ }
+ }
+ p = parts.join('/');
+ }
+ return p;
+ }
+ }
+ formatIamChanges(changes) {
+ if (!changes.hasChanges) {
+ return;
+ }
+ if (changes.statements.hasChanges) {
+ this.printSectionHeader('IAM Statement Changes');
+ this.print((0, format_table_1.formatTable)(this.deepSubstituteBracedLogicalIds(changes.summarizeStatements()), this.stream.columns));
+ }
+ if (changes.managedPolicies.hasChanges) {
+ this.printSectionHeader('IAM Policy Changes');
+ this.print((0, format_table_1.formatTable)(this.deepSubstituteBracedLogicalIds(changes.summarizeManagedPolicies()), this.stream.columns));
+ }
+ }
+ formatSecurityGroupChanges(changes) {
+ if (!changes.hasChanges) {
+ return;
+ }
+ this.printSectionHeader('Security Group Changes');
+ this.print((0, format_table_1.formatTable)(this.deepSubstituteBracedLogicalIds(changes.summarize()), this.stream.columns));
+ }
+ deepSubstituteBracedLogicalIds(rows) {
+ return rows.map(row => row.map(this.substituteBracedLogicalIds.bind(this)));
+ }
+ /**
+ * Substitute all strings like ${LogId.xxx} with the path instead of the logical ID
+ */
+ substituteBracedLogicalIds(source) {
+ return source.replace(/\$\{([^.}]+)(.[^}]+)?\}/ig, (_match, logId, suffix) => {
+ return '${' + (this.normalizedLogicalIdPath(logId) || logId) + (suffix || '') + '}';
+ });
+ }
+}
+/**
+ * Creates a unified diff of two strings.
+ *
+ * @param oldStr the "old" version of the string.
+ * @param newStr the "new" version of the string.
+ * @param context the number of context lines to use in arbitrary JSON diff.
+ *
+ * @returns an array of diff lines.
+ */
+function _diffStrings(oldStr, newStr, context) {
+ const patch = structuredPatch(null, null, oldStr, newStr, null, null, { context });
+ const result = new Array();
+ for (const hunk of patch.hunks) {
+ result.push(chalk.magenta(`@@ -${hunk.oldStart},${hunk.oldLines} +${hunk.newStart},${hunk.newLines} @@`));
+ const baseIndent = _findIndent(hunk.lines);
+ for (const line of hunk.lines) {
+ // Don't care about termination newline.
+ if (line === '\\ No newline at end of file') {
+ continue;
+ }
+ const marker = line.charAt(0);
+ const text = line.slice(1 + baseIndent);
+ switch (marker) {
+ case ' ':
+ result.push(`${CONTEXT} ${text}`);
+ break;
+ case '+':
+ result.push(chalk.bold(`${ADDITION} ${chalk.green(text)}`));
+ break;
+ case '-':
+ result.push(chalk.bold(`${REMOVAL} ${chalk.red(text)}`));
+ break;
+ default:
+ throw new Error(`Unexpected diff marker: ${marker} (full line: ${line})`);
+ }
+ }
+ }
+ return result;
+ function _findIndent(lines) {
+ let indent = Number.MAX_SAFE_INTEGER;
+ for (const line of lines) {
+ for (let i = 1; i < line.length; i++) {
+ if (line.charAt(i) !== ' ') {
+ indent = indent > i - 1 ? i - 1 : indent;
+ break;
+ }
+ }
+ }
+ return indent;
+ }
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWF0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZm9ybWF0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLCtCQUE4QjtBQUM5QiwrQkFBK0I7QUFFL0Isc0NBQXdDO0FBQ3hDLG1EQUF1RztBQUN2RyxpREFBNkM7QUFJN0MsY0FBYztBQUNkLE1BQU0saUJBQWlCLEdBQUcsY0FBYyxDQUFDO0FBRXpDLDBEQUEwRDtBQUMxRCxNQUFNLEVBQUUsZUFBZSxFQUFFLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBTzVDOzs7Ozs7OztHQVFHO0FBQ0gsU0FBZ0IsaUJBQWlCLENBQy9CLE1BQW9CLEVBQ3BCLFlBQTBCLEVBQzFCLG1CQUFvRCxFQUFHLEVBQ3ZELFVBQWtCLENBQUM7SUFDbkIsTUFBTSxTQUFTLEdBQUcsSUFBSSxTQUFTLENBQUMsTUFBTSxFQUFFLGdCQUFnQixFQUFFLFlBQVksRUFBRSxPQUFPLENBQUMsQ0FBQztJQUVqRixJQUFJLFlBQVksQ0FBQyx3QkFBd0IsSUFBSSxZQUFZLENBQUMsU0FBUyxJQUFJLFlBQVksQ0FBQyxXQUFXLEVBQUU7UUFDL0YsU0FBUyxDQUFDLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3pDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQywwQkFBMEIsRUFBRSwwQkFBMEIsRUFBRSxZQUFZLENBQUMsd0JBQXdCLENBQUMsQ0FBQztRQUMxSCxTQUFTLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLFdBQVcsRUFBRSxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDN0UsU0FBUyxDQUFDLGdCQUFnQixDQUFDLGFBQWEsRUFBRSxhQUFhLEVBQUUsWUFBWSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ25GLFNBQVMsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO0tBQ2hDO0lBRUQsK0JBQStCLENBQUMsU0FBUyxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBRXpELFNBQVMsQ0FBQyxhQUFhLENBQUMs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QUFLLENBQUMsMkJBQTJCLE1BQU0sZ0JBQWdCLElBQUksR0FBRyxDQUFDLENBQUM7YUFDN0U7U0FDRjtLQUNGO0lBQ0QsT0FBTyxNQUFNLENBQUM7SUFFZCxTQUFTLFdBQVcsQ0FBQyxLQUFlO1FBQ2xDLElBQUksTUFBTSxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQztRQUNyQyxLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssRUFBRTtZQUN4QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRyxDQUFDLEVBQUUsRUFBRTtnQkFDdEMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRTtvQkFDMUIsTUFBTSxHQUFHLE1BQU0sR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7b0JBQ3pDLE1BQU07aUJBQ1A7YUFDRjtTQUNGO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBmb3JtYXQgfSBmcm9tICd1dGlsJztcbmltcG9ydCAqIGFzIGNoYWxrIGZyb20gJ2NoYWxrJztcbmltcG9ydCB7IERpZmZlcmVuY2VDb2xsZWN0aW9uLCBUZW1wbGF0ZURpZmYgfSBmcm9tICcuL2RpZmYvdHlwZXMnO1xuaW1wb3J0IHsgZGVlcEVxdWFsIH0gZnJvbSAnLi9kaWZmL3V0aWwnO1xuaW1wb3J0IHsgRGlmZmVyZW5jZSwgaXNQcm9wZXJ0eURpZmZlcmVuY2UsIFJlc291cmNlRGlmZmVyZW5jZSwgUmVzb3VyY2VJbXBhY3QgfSBmcm9tICcuL2RpZmYtdGVtcGxhdGUnO1xuaW1wb3J0IHsgZm9ybWF0VGFibGUgfSBmcm9tICcuL2Zvcm1hdC10YWJsZSc7XG5pbXBvcnQgeyBJYW1DaGFuZ2VzIH0gZnJvbSAnLi9pYW0vaWFtLWNoYW5nZXMnO1xuaW1wb3J0IHsgU2VjdXJpdHlHcm91cENoYW5nZXMgfSBmcm9tICcuL25ldHdvcmsvc2VjdXJpdHktZ3JvdXAtY2hhbmdlcyc7XG5cbi8vIGZyb20gY3gtYXBpXG5jb25zdCBQQVRIX01FVEFEQVRBX0tFWSA9ICdhd3M6Y2RrOnBhdGgnO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVxdWlyZS1pbXBvcnRzICovXG5jb25zdCB7IHN0cnVjdHVyZWRQYXRjaCB9ID0gcmVxdWlyZSgnZGlmZicpO1xuLyogZXNsaW50LWVuYWJsZSAqL1xuXG5leHBvcnQgaW50ZXJmYWNlIEZvcm1hdFN0cmVhbSBleHRlbmRzIE5vZGVKUy5Xcml0YWJsZVN0cmVhbSB7XG4gIGNvbHVtbnM/OiBudW1iZXI7XG59XG5cbi8qKlxuICogUmVuZGVycyB0ZW1wbGF0ZSBkaWZmZXJlbmNlcyB0byB0aGUgcHJvY2VzcycgY29uc29sZS5cbiAqXG4gKiBAcGFyYW0gc3RyZWFtICAgICAgICAgICBUaGUgSU8gc3RyZWFtIHdoZXJlIHRvIG91dHB1dCB0aGUgcmVuZGVyZWQgZGlmZi5cbiAqIEBwYXJhbSB0ZW1wbGF0ZURpZmYgICAgIFRlbXBsYXRlRGlmZiB0byBiZSByZW5kZXJlZCB0byB0aGUgY29uc29sZS5cbiAqIEBwYXJhbSBsb2dpY2FsVG9QYXRoTWFwIEEgbWFwIGZyb20gbG9naWNhbCBJRCB0byBjb25zdHJ1Y3QgcGF0aC4gVXNlZnVsIGluXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIHRoZXJlIGlzIG5vIGF3czpjZGs6cGF0aCBtZXRhZGF0YSBpbiB0aGUgdGVtcGxhdGUuXG4gKiBAcGFyYW0gY29udGV4dCAgICAgICAgICB0aGUgbnVtYmVyIG9mIGNvbnRleHQgbGluZXMgdG8gdXNlIGluIGFyYml0cmFyeSBKU09OIGRpZmYgKGRlZmF1bHRzIHRvIDMpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0RGlmZmVyZW5jZXMoXG4gIHN0cmVhbTogRm9ybWF0U3RyZWFtLFxuICB0ZW1wbGF0ZURpZmY6IFRlbXBsYXRlRGlmZixcbiAgbG9naWNhbFRvUGF0aE1hcDogeyBbbG9naWNhbElkOiBzdHJpbmddOiBzdHJpbmcgfSA9IHsgfSxcbiAgY29udGV4dDogbnVtYmVyID0gMykge1xuICBjb25zdCBmb3JtYXR0ZXIgPSBuZXcgRm9ybWF0dGVyKHN0cmVhbSwgbG9naWNhbFRvUGF0aE1hcCwgdGVtcGxhdGVEaWZmLCBjb250ZXh0KTtcblxuICBpZiAodGVtcGxhdGVEaWZmLmF3c1RlbXBsYXRlRm9ybWF0VmVyc2lvbiB8fCB0ZW1wbGF0ZURpZmYudHJhbnNmb3JtIHx8IHRlbXBsYXRlRGlmZi5kZXNjcmlwdGlvbikge1xuICAgIGZvcm1hdHRlci5wcmludFNlY3Rpb25IZWFkZXIoJ1RlbXBsYXRlJyk7XG4gICAgZm9ybWF0dGVyLmZvcm1hdERpZmZlcmVuY2UoJ0FXU1RlbXBsYXRlRm9ybWF0VmVyc2lvbicsICdBV1NUZW1wbGF0ZUZvcm1hdFZlcnNpb24nLCB0ZW1wbGF0ZURpZmYuYXdzVGVtcGxhdGVGb3JtYXRWZXJzaW9uKTtcbiAgICBmb3JtYXR0ZXIuZm9ybWF0RGlmZmVyZW5jZSgnVHJhbnNmb3JtJywgJ1RyYW5zZm9ybScsIHRlbXBsYXRlRGlmZi50cmFuc2Zvcm0pO1xuICAgIGZvcm1hdHRlci5mb3JtYXREaWZmZXJlbmNlKCdEZXNjcmlwdGlvbicsICdEZXNjcmlwdGlvbicsIHRlbXBsYXRlRGlmZi5kZXNjcmlwdGlvbik7XG4gICAgZm9ybWF0dGVyLnByaW50U2VjdGlvbkZvb3RlcigpO1xuICB9XG5cbiAgZm9ybWF0U2VjdXJpdHlDaGFuZ2VzV2l0aEJhbm5lcihmb3JtYXR0ZXIsIHRlbXBsYXRlRGlmZik7XG5cbiAgZm9ybWF0dGVyLmZvcm1hdFNlY3Rpb24oJ1BhcmFtZXRlcnMnLCAnUGFyYW1ldGVyJywgdGVtcGxhdGVEaWZmLnBhcmFtZXRlcnMpO1xuICBmb3JtYXR0ZXIuZm9ybWF0U2VjdGlvbignTWV0YWRhdGEnLCAnTWV0YWRhdGEnLCB0ZW1wbGF0ZURpZmYubWV0YWRhdGEpO1xuICBmb3JtYXR0ZXIuZm9ybWF0U2VjdGlvbignTWFwcGluZ3MnLCAnTWFwcGluZycsIHRlbXBsYXRlRGlmZi5tYXBwaW5ncyk7XG4gIGZvcm1hdHRlci5mb3JtYXRTZWN0aW9uKCdDb25kaXRpb25zJywgJ0NvbmRpdGlvbicsIHRlbXBsYXRlRGlmZi5jb25kaXRpb25zKTtcbiAgZm9ybWF0dGVyLmZvcm1hdFNlY3Rpb24oJ1Jlc291cmNlcycsICdSZXNvdXJjZScsIHRlbXBsYXRlRGlmZi5yZXNvdXJjZXMsIGZvcm1hdHRlci5mb3JtYXRSZXNvdXJjZURpZmZlcmVuY2UuYmluZChmb3JtYXR0ZXIpKTtcbiAgZm9ybWF0dGVyLmZvcm1hdFNlY3Rpb24oJ091dHB1dHMnLCAnT3V0cHV0JywgdGVtcGxhdGVEaWZmLm91dHB1dHMpO1xuICBmb3JtYXR0ZXIuZm9ybWF0U2VjdGlvbignT3RoZXIgQ2hhbmdlcycsICdVbmtub3duJywgdGVtcGxhdGVEaWZmLnVua25vd24pO1xufVxuXG4vKipcbiAqIFJlbmRlcnMgYSBkaWZmIG9mIHNlY3VyaXR5IGNoYW5nZXMgdG8gdGhlIGdpdmVuIHN0cmVhbVxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0U2VjdXJpdHlDaGFuZ2VzKFxuICBzdHJlYW06IE5vZGVKUy5Xcml0YWJsZVN0cmVhbSxcbiAgdGVtcGxhdGVEaWZmOiBUZW1wbGF0ZURpZmYsXG4gIGxvZ2ljYWxUb1BhdGhNYXA6IHtbbG9naWNhbElkOiBzdHJpbmddOiBzdHJpbmd9ID0ge30sXG4gIGNvbnRleHQ/OiBudW1iZXIpIHtcbiAgY29uc3QgZm9ybWF0dGVyID0gbmV3IEZvcm1hdHRlcihzdHJlYW0sIGxvZ2ljYWxUb1BhdGhNYXAsIHRlbXBsYXRlRGlmZiwgY29udGV4dCk7XG5cbiAgZm9ybWF0U2VjdXJpdHlDaGFuZ2VzV2l0aEJhbm5lcihmb3JtYXR0ZXIsIHRlbXBsYXRlRGlmZik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFNlY3VyaXR5Q2hhbmdlc1dpdGhCYW5uZXIoZm9ybWF0dGVyOiBGb3JtYXR0ZXIsIHRlbXBsYXRlRGlmZjogVGVtcGxhdGVEaWZmKSB7XG4gIGlmICghdGVtcGxhdGVEaWZmLmlhbUNoYW5nZXMuaGFzQ2hhbmdlcyAmJiAhdGVtcGxhdGVEaWZmLnNlY3VyaXR5R3JvdXBDaGFuZ2VzLmhhc0NoYW5nZXMpIHsgcmV0dXJuOyB9XG4gIGZvcm1hdHRlci5mb3JtYXRJYW1DaGFuZ2VzKHRlbXBsYXRlRGlmZi5pYW1DaGFuZ2VzKTtcbiAgZm9ybWF0dGVyLmZvcm1hdFNlY3VyaXR5R3JvdXBDaGFuZ2VzKHRlbXBsYXRlRGlmZi5zZWN1cml0eUdyb3VwQ2hhbmdlcyk7XG5cbiAgZm9ybWF0dGVyLndhcm5pbmcoJyhOT1RFOiBUaGVyZSBtYXkgYmUgc2VjdXJpdHktcmVsYXRlZCBjaGFuZ2VzIG5vdCBpbiB0aGlzIGxpc3QuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvaXNzdWVzLzEyOTkpJyk7XG4gIGZvcm1hdHRlci5wcmludFNlY3Rpb25Gb290ZXIoKTtcbn1cblxuY29uc3QgQURESVRJT04gPSBjaGFsay5ncmVlbignWytdJyk7XG5jb25zdCBDT05URVhUID0gY2hhbGsuZ3JleSgnWyBdJyk7XG5jb25zdCBVUERBVEUgPSBjaGFsay55ZWxsb3coJ1t+XScpO1xuY29uc3QgUkVNT1ZBTCA9IGNoYWxrLnJlZCgnWy1dJyk7XG5cbmNsYXNzIEZvcm1hdHRlciB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgc3RyZWFtOiBGb3JtYXRTdHJlYW0sXG4gICAgcHJpdmF0ZSByZWFkb25seSBsb2dpY2FsVG9QYXRoTWFwOiB7IFtsb2dpY2FsSWQ6IHN0cmluZ106IHN0cmluZyB9LFxuICAgIGRpZmY/OiBUZW1wbGF0ZURpZmYsXG4gICAgcHJpdmF0ZSByZWFkb25seSBjb250ZXh0OiBudW1iZXIgPSAzKSB7XG4gICAgLy8gUmVhZCBhZGRpdGlvbmFsIGNvbnN0cnVjdCBwYXRocyBmcm9tIHRoZSBkaWZmIGlmIGl0IGlzIHN1cHBsaWVkXG4gICAgaWYgKGRpZmYpIHtcbiAgICAgIHRoaXMucmVhZENvbnN0cnVjdFBhdGhzRnJvbShkaWZmKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgcHJpbnQoZm10OiBzdHJpbmcsIC4uLmFyZ3M6IGFueVtdKSB7XG4gICAgdGhpcy5zdHJlYW0ud3JpdGUoY2hhbGsud2hpdGUoZm9ybWF0KGZtdCwgLi4uYXJncykpICsgJ1xcbicpO1xuICB9XG5cbiAgcHVibGljIHdhcm5pbmcoZm10OiBzdHJpbmcsIC4uLmFyZ3M6IGFueVtdKSB7XG4gICAgdGhpcy5zdHJlYW0ud3JpdGUoY2hhbGsueWVsbG93KGZvcm1hdChmbXQsIC4uLmFyZ3MpKSArICdcXG4nKTtcbiAgfVxuXG4gIHB1YmxpYyBmb3JtYXRTZWN0aW9uPFYsIFQgZXh0ZW5kcyBEaWZmZXJlbmNlPFY+PihcbiAgICB0aXRsZTogc3RyaW5nLFxuICAgIGVudHJ5VHlwZTogc3RyaW5nLFxuICAgIGNvbGxlY3Rpb246IERpZmZlcmVuY2VDb2xsZWN0aW9uPFYsIFQ+LFxuICAgIGZvcm1hdHRlcjogKHR5cGU6IHN0cmluZywgaWQ6IHN0cmluZywgZGlmZjogVCkgPT4gdm9pZCA9IHRoaXMuZm9ybWF0RGlmZmVyZW5jZS5iaW5kKHRoaXMpKSB7XG5cbiAgICBpZiAoY29sbGVjdGlvbi5kaWZmZXJlbmNlQ291bnQgPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnByaW50U2VjdGlvbkhlYWRlcih0aXRsZSk7XG4gICAgY29sbGVjdGlvbi5mb3JFYWNoRGlmZmVyZW5jZSgoaWQsIGRpZmYpID0+IGZvcm1hdHRlcihlbnRyeVR5cGUsIGlkLCBkaWZmKSk7XG4gICAgdGhpcy5wcmludFNlY3Rpb25Gb290ZXIoKTtcbiAgfVxuXG4gIHB1YmxpYyBwcmludFNlY3Rpb25IZWFkZXIodGl0bGU6IHN0cmluZykge1xuICAgIHRoaXMucHJpbnQoY2hhbGsudW5kZXJsaW5lKGNoYWxrLmJvbGQodGl0bGUpKSk7XG4gIH1cblxuICBwdWJsaWMgcHJpbnRTZWN0aW9uRm9vdGVyKCkge1xuICAgIHRoaXMucHJpbnQoJycpO1xuICB9XG5cbiAgLyoqXG4gICAqIFByaW50IGEgc2ltcGxlIGRpZmZlcmVuY2UgZm9yIGEgZ2l2ZW4gbmFtZWQgZW50aXR5LlxuICAgKlxuICAgKiBAcGFyYW0gbG9naWNhbElkIHRoZSBuYW1lIG9mIHRoZSBlbnRpdHkgdGhhdCBpcyBkaWZmZXJlbnQuXG4gICAqIEBwYXJhbSBkaWZmIHRoZSBkaWZmZXJlbmNlIHRvIGJlIHJlbmRlcmVkLlxuICAgKi9cbiAgcHVibGljIGZvcm1hdERpZmZlcmVuY2UodHlwZTogc3RyaW5nLCBsb2dpY2FsSWQ6IHN0cmluZywgZGlmZjogRGlmZmVyZW5jZTxhbnk+IHwgdW5kZWZpbmVkKSB7XG4gICAgaWYgKCFkaWZmIHx8ICFkaWZmLmlzRGlmZmVyZW50KSB7IHJldHVybjsgfVxuXG4gICAgbGV0IHZhbHVlO1xuXG4gICAgY29uc3Qgb2xkVmFsdWUgPSB0aGlzLmZvcm1hdFZhbHVlKGRpZmYub2xkVmFsdWUsIGNoYWxrLnJlZCk7XG4gICAgY29uc3QgbmV3VmFsdWUgPSB0aGlzLmZvcm1hdFZhbHVlKGRpZmYubmV3VmFsdWUsIGNoYWxrLmdyZWVuKTtcbiAgICBpZiAoZGlmZi5pc0FkZGl0aW9uKSB7XG4gICAgICB2YWx1ZSA9IG5ld1ZhbHVlO1xuICAgIH0gZWxzZSBpZiAoZGlmZi5pc1VwZGF0ZSkge1xuICAgICAgdmFsdWUgPSBgJHtvbGRWYWx1ZX0gdG8gJHtuZXdWYWx1ZX1gO1xuICAgIH0gZWxzZSBpZiAoZGlmZi5pc1JlbW92YWwpIHtcbiAgICAgIHZhbHVlID0gb2xkVmFsdWU7XG4gICAgfVxuXG4gICAgdGhpcy5wcmludChgJHt0aGlzLmZvcm1hdFByZWZpeChkaWZmKX0gJHtjaGFsay5jeWFuKHR5cGUpfSAke3RoaXMuZm9ybWF0TG9naWNhbElkKGxvZ2ljYWxJZCl9OiAke3ZhbHVlfWApO1xuICB9XG5cbiAgLyoqXG4gICAqIFByaW50IGEgcmVzb3VyY2UgZGlmZmVyZW5jZSBmb3IgYSBnaXZlbiBsb2dpY2FsIElELlxuICAgKlxuICAgKiBAcGFyYW0gbG9naWNhbElkIHRoZSBsb2dpY2FsIElEIG9mIHRoZSByZXNvdXJjZSB0aGF0IGNoYW5nZWQuXG4gICAqIEBwYXJhbSBkaWZmICAgICAgdGhlIGNoYW5nZSB0byBiZSByZW5kZXJlZC5cbiAgICovXG4gIHB1YmxpYyBmb3JtYXRSZXNvdXJjZURpZmZlcmVuY2UoX3R5cGU6IHN0cmluZywgbG9naWNhbElkOiBzdHJpbmcsIGRpZmY6IFJlc291cmNlRGlmZmVyZW5jZSkge1xuICAgIGlmICghZGlmZi5pc0RpZmZlcmVudCkgeyByZXR1cm47IH1cblxuICAgIGNvbnN0IHJlc291cmNlVHlwZSA9IGRpZmYuaXNSZW1vdmFsID8gZGlmZi5vbGRSZXNvdXJjZVR5cGUgOiBkaWZmLm5ld1Jlc291cmNlVHlwZTtcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbGVuXG4gICAgdGhpcy5wcmludChgJHt0aGlzLmZvcm1hdFByZWZpeChkaWZmKX0gJHt0aGlzLmZvcm1hdFZhbHVlKHJlc291cmNlVHlwZSwgY2hhbGsuY3lhbil9ICR7dGhpcy5mb3JtYXRMb2dpY2FsSWQobG9naWNhbElkKX0gJHt0aGlzLmZvcm1hdEltcGFjdChkaWZmLmNoYW5nZUltcGFjdCl9YCk7XG5cbiAgICBpZiAoZGlmZi5pc1VwZGF0ZSkge1xuICAgICAgY29uc3QgZGlmZmVyZW5jZUNvdW50ID0gZGlmZi5kaWZmZXJlbmNlQ291bnQ7XG4gICAgICBsZXQgcHJvY2Vzc2VkQ291bnQgPSAwO1xuICAgICAgZGlmZi5mb3JFYWNoRGlmZmVyZW5jZSgoXywgbmFtZSwgdmFsdWVzKSA9PiB7XG4gICAgICAgIHByb2Nlc3NlZENvdW50ICs9IDE7XG4gICAgICAgIHRoaXMuZm9ybWF0VHJlZURpZmYobmFtZSwgdmFsdWVzLCBwcm9jZXNzZWRDb3VudCA9PT0gZGlmZmVyZW5jZUNvdW50KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBmb3JtYXRQcmVmaXg8VD4oZGlmZjogRGlmZmVyZW5jZTxUPikge1xuICAgIGlmIChkaWZmLmlzQWRkaXRpb24pIHsgcmV0dXJuIEFERElUSU9OOyB9XG4gICAgaWYgKGRpZmYuaXNVcGRhdGUpIHsgcmV0dXJuIFVQREFURTsgfVxuICAgIGlmIChkaWZmLmlzUmVtb3ZhbCkgeyByZXR1cm4gUkVNT1ZBTDsgfVxuICAgIHJldHVybiBjaGFsay53aGl0ZSgnWz9dJyk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHZhbHVlIHRoZSB2YWx1ZSB0byBiZSBmb3JtYXR0ZWQuXG4gICAqIEBwYXJhbSBjb2xvciB0aGUgY29sb3IgdG8gYmUgdXNlZC5cbiAgICpcbiAgICogQHJldHVybnMgdGhlIGZvcm1hdHRlZCBzdHJpbmcsIHdpdGggY29sb3IgYXBwbGllZC5cbiAgICovXG4gIHB1YmxpYyBmb3JtYXRWYWx1ZSh2YWx1ZTogYW55LCBjb2xvcjogKHN0cjogc3RyaW5nKSA9PiBzdHJpbmcpIHtcbiAgICBpZiAodmFsdWUgPT0gbnVsbCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHsgcmV0dXJuIGNvbG9yKHZhbHVlKTsgfVxuICAgIHJldHVybiBjb2xvcihKU09OLnN0cmluZ2lmeSh2YWx1ZSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBpbXBhY3QgdGhlIGltcGFjdCB0byBiZSBmb3JtYXR0ZWRcbiAgICogQHJldHVybnMgYSB1c2VyLWZyaWVuZGx5LCBjb2xvcmVkIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGltcGFjdC5cbiAgICovXG4gIHB1YmxpYyBmb3JtYXRJbXBhY3QoaW1wYWN0OiBSZXNvdXJjZUltcGFjdCkge1xuICAgIHN3aXRjaCAoaW1wYWN0KSB7XG4gICAgICBjYXNlIFJlc291cmNlSW1wYWN0Lk1BWV9SRVBMQUNFOlxuICAgICAgICByZXR1cm4gY2hhbGsuaXRhbGljKGNoYWxrLnllbGxvdygnbWF5IGJlIHJlcGxhY2VkJykpO1xuICAgICAgY2FzZSBSZXNvdXJjZUltcGFjdC5XSUxMX1JFUExBQ0U6XG4gICAgICAgIHJldHVybiBjaGFsay5pdGFsaWMoY2hhbGsuYm9sZChjaGFsay5yZWQoJ3JlcGxhY2UnKSkpO1xuICAgICAgY2FzZSBSZXNvdXJjZUltcGFjdC5XSUxMX0RFU1RST1k6XG4gICAgICAgIHJldHVybiBjaGFsay5pdGFsaWMoY2hhbGsuYm9sZChjaGFsay5yZWQoJ2Rlc3Ryb3knKSkpO1xuICAgICAgY2FzZSBSZXNvdXJjZUltcGFjdC5XSUxMX09SUEhBTjpcbiAgICAgICAgcmV0dXJuIGNoYWxrLml0YWxpYyhjaGFsay55ZWxsb3coJ29ycGhhbicpKTtcbiAgICAgIGNhc2UgUmVzb3VyY2VJbXBhY3QuV0lMTF9VUERBVEU6XG4gICAgICBjYXNlIFJlc291cmNlSW1wYWN0LldJTExfQ1JFQVRFOlxuICAgICAgY2FzZSBSZXNvdXJjZUltcGFjdC5OT19DSEFOR0U6XG4gICAgICAgIHJldHVybiAnJzsgLy8gbm8gZXh0cmEgaW5mbyBpcyBnYWluZWQgaGVyZVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXJzIGEgdHJlZSBvZiBkaWZmZXJlbmNlcyB1bmRlciBhIHBhcnRpY3VsYXIgbmFtZS5cbiAgICogQHBhcmFtIG5hbWUgICAgdGhlIG5hbWUgb2YgdGhlIHJvb3Qgb2YgdGhlIHRyZWUuXG4gICAqIEBwYXJhbSBkaWZmICAgIHRoZSBkaWZmZXJlbmNlIG9uIHRoZSB0cmVlLlxuICAgKiBAcGFyYW0gbGFzdCAgICB3aGV0aGVyIHRoaXMgaXMgdGhlIGxhc3Qgbm9kZSBvZiBhIHBhcmVudCB0cmVlLlxuICAgKi9cbiAgcHVibGljIGZvcm1hdFRyZWVEaWZmKG5hbWU6IHN0cmluZywgZGlmZjogRGlmZmVyZW5jZTxhbnk+LCBsYXN0OiBib29sZWFuKSB7XG4gICAgbGV0IGFkZGl0aW9uYWxJbmZvID0gJyc7XG4gICAgaWYgKGlzUHJvcGVydHlEaWZmZXJlbmNlKGRpZmYpKSB7XG4gICAgICBpZiAoZGlmZi5jaGFuZ2VJbXBhY3QgPT09IFJlc291cmNlSW1wYWN0Lk1BWV9SRVBMQUNFKSB7XG4gICAgICAgIGFkZGl0aW9uYWxJbmZvID0gJyAobWF5IGNhdXNlIHJlcGxhY2VtZW50KSc7XG4gICAgICB9IGVsc2UgaWYgKGRpZmYuY2hhbmdlSW1wYWN0ID09PSBSZXNvdXJjZUltcGFjdC5XSUxMX1JFUExBQ0UpIHtcbiAgICAgICAgYWRkaXRpb25hbEluZm8gPSAnIChyZXF1aXJlcyByZXBsYWNlbWVudCknO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnByaW50KCcgJXPilIAgJXMgJXMlcycsIGxhc3QgPyAn4pSUJyA6ICfilJwnLCB0aGlzLmNoYW5nZVRhZyhkaWZmLm9sZFZhbHVlLCBkaWZmLm5ld1ZhbHVlKSwgbmFtZSwgYWRkaXRpb25hbEluZm8pO1xuICAgIHJldHVybiB0aGlzLmZvcm1hdE9iamVjdERpZmYoZGlmZi5vbGRWYWx1ZSwgZGlmZi5uZXdWYWx1ZSwgYCAke2xhc3QgPyAnICcgOiAn4pSCJ31gKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXJzIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdHdvIG9iamVjdHMsIGxvb2tpbmcgZm9yIHRoZSBkaWZmZXJlbmNlcyBhcyBkZWVwIGFzIHBvc3NpYmxlLFxuICAgKiBhbmQgcmVuZGVyaW5nIGEgdHJlZSBncmFwaCBvZiB0aGUgcGF0aCB1bnRpbCB0aGUgZGlmZmVyZW5jZSBpcyBmb3VuZC5cbiAgICpcbiAgICogQHBhcmFtIG9sZE9iamVjdCAgdGhlIG9sZCBvYmplY3QuXG4gICAqIEBwYXJhbSBuZXdPYmplY3QgIHRoZSBuZXcgb2JqZWN0LlxuICAgKiBAcGFyYW0gbGluZVByZWZpeCBhIHByZWZpeCAoaW5kZW50LWxpa2UpIHRvIGJlIHVzZWQgb24gZXZlcnkgbGluZS5cbiAgICovXG4gIHB1YmxpYyBmb3JtYXRPYmplY3REaWZmKG9sZE9iamVjdDogYW55LCBuZXdPYmplY3Q6IGFueSwgbGluZVByZWZpeDogc3RyaW5nKSB7XG4gICAgaWYgKCh0eXBlb2Ygb2xkT2JqZWN0ICE9PSB0eXBlb2YgbmV3T2JqZWN0KSB8fCBBcnJheS5pc0FycmF5KG9sZE9iamVjdCkgfHwgdHlwZW9mIG9sZE9iamVjdCA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIG9sZE9iamVjdCA9PT0gJ251bWJlcicpIHtcbiAgICAgIGlmIChvbGRPYmplY3QgIT09IHVuZGVmaW5lZCAmJiBuZXdPYmplY3QgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAodHlwZW9mIG9sZE9iamVjdCA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIG5ld09iamVjdCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICBjb25zdCBvbGRTdHIgPSBKU09OLnN0cmluZ2lmeShvbGRPYmplY3QsIG51bGwsIDIpO1xuICAgICAgICAgIGNvbnN0IG5ld1N0ciA9IEpTT04uc3RyaW5naWZ5KG5ld09iamVjdCwgbnVsbCwgMik7XG4gICAgICAgICAgY29uc3QgZGlmZiA9IF9kaWZmU3RyaW5ncyhvbGRTdHIsIG5ld1N0ciwgdGhpcy5jb250ZXh0KTtcbiAgICAgICAgICBmb3IgKGxldCBpID0gMCA7IGkgPCBkaWZmLmxlbmd0aCA7IGkrKykge1xuICAgICAgICAgICAgdGhpcy5wcmludCgnJXMgICAlcyAlcycsIGxpbmVQcmVmaXgsIGkgPT09IDAgPyAn4pSU4pSAJyA6ICcgICcsIGRpZmZbaV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnByaW50KCclcyAgIOKUnOKUgCAlcyAlcycsIGxpbmVQcmVmaXgsIFJFTU9WQUwsIHRoaXMuZm9ybWF0VmFsdWUob2xkT2JqZWN0LCBjaGFsay5yZWQpKTtcbiAgICAgICAgICB0aGlzLnByaW50KCclcyAgIOKUlOKUgCAlcyAlcycsIGxpbmVQcmVmaXgsIEFERElUSU9OLCB0aGlzLmZvcm1hdFZhbHVlKG5ld09iamVjdCwgY2hhbGsuZ3JlZW4pKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChvbGRPYmplY3QgIT09IHVuZGVmaW5lZCAvKiAmJiBuZXdPYmplY3QgPT09IHVuZGVmaW5lZCAqLykge1xuICAgICAgICB0aGlzLnByaW50KCclcyAgIOKUlOKUgCAlcycsIGxpbmVQcmVmaXgsIHRoaXMuZm9ybWF0VmFsdWUob2xkT2JqZWN0LCBjaGFsay5yZWQpKTtcbiAgICAgIH0gZWxzZSAvKiBpZiAob2xkT2JqZWN0ID09PSB1bmRlZmluZWQgJiYgbmV3T2JqZWN0ICE9PSB1bmRlZmluZWQpICovIHtcbiAgICAgICAgdGhpcy5wcmludCgnJXMgICDilJTilIAgJXMnLCBsaW5lUHJlZml4LCB0aGlzLmZvcm1hdFZhbHVlKG5ld09iamVjdCwgY2hhbGsuZ3JlZW4pKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qga2V5U2V0ID0gbmV3IFNldChPYmplY3Qua2V5cyhvbGRPYmplY3QpKTtcbiAgICBPYmplY3Qua2V5cyhuZXdPYmplY3QpLmZvckVhY2goayA9PiBrZXlTZXQuYWRkKGspKTtcbiAgICBjb25zdCBrZXlzID0gbmV3IEFycmF5KC4uLmtleVNldCkuZmlsdGVyKGsgPT4gIWRlZXBFcXVhbChvbGRPYmplY3Rba10sIG5ld09iamVjdFtrXSkpLnNvcnQoKTtcbiAgICBjb25zdCBsYXN0S2V5ID0ga2V5c1trZXlzLmxlbmd0aCAtIDFdO1xuICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICAgIGNvbnN0IG9sZFZhbHVlID0gb2xkT2JqZWN0W2tleV07XG4gICAgICBjb25zdCBuZXdWYWx1ZSA9IG5ld09iamVjdFtrZXldO1xuICAgICAgY29uc3QgdHJlZVByZWZpeCA9IGtleSA9PT0gbGFzdEtleSA/ICfilJQnIDogJ+KUnCc7XG4gICAgICBpZiAob2xkVmFsdWUgIT09IHVuZGVmaW5lZCAmJiBuZXdWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMucHJpbnQoJyVzICAgJXPilIAgJXMgJXM6JywgbGluZVByZWZpeCwgdHJlZVByZWZpeCwgdGhpcy5jaGFuZ2VUYWcob2xkVmFsdWUsIG5ld1ZhbHVlKSwgY2hhbGsuYmx1ZShgLiR7a2V5fWApKTtcbiAgICAgICAgdGhpcy5mb3JtYXRPYmplY3REaWZmKG9sZFZhbHVlLCBuZXdWYWx1ZSwgYCR7bGluZVByZWZpeH0gICAke2tleSA9PT0gbGFzdEtleSA/ICcgJyA6ICfilIInfWApO1xuICAgICAgfSBlbHNlIGlmIChvbGRWYWx1ZSAhPT0gdW5kZWZpbmVkIC8qICYmIG5ld1ZhbHVlID09PSB1bmRlZmluZWQgKi8pIHtcbiAgICAgICAgdGhpcy5wcmludCgnJXMgICAlc+KUgCAlcyBSZW1vdmVkOiAlcycsIGxpbmVQcmVmaXgsIHRyZWVQcmVmaXgsIFJFTU9WQUwsIGNoYWxrLmJsdWUoYC4ke2tleX1gKSk7XG4gICAgICB9IGVsc2UgLyogaWYgKG9sZFZhbHVlID09PSB1bmRlZmluZWQgJiYgbmV3VmFsdWUgIT09IHVuZGVmaW5lZCAqLyB7XG4gICAgICAgIHRoaXMucHJpbnQoJyVzICAgJXPilIAgJXMgQWRkZWQ6ICVzJywgbGluZVByZWZpeCwgdHJlZVByZWZpeCwgQURESVRJT04sIGNoYWxrLmJsdWUoYC4ke2tleX1gKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBvbGRWYWx1ZSB0aGUgb2xkIHZhbHVlIG9mIGEgZGlmZmVyZW5jZS5cbiAgICogQHBhcmFtIG5ld1ZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgYSBkaWZmZXJlbmNlLlxuICAgKlxuICAgKiBAcmV0dXJucyBhIHRhZyB0byBiZSByZW5kZXJlZCBpbiB0aGUgZGlmZiwgcmVmbGVjdGluZyB3aGV0aGVyIHRoZSBkaWZmZXJlbmNlXG4gICAqICAgICAgd2FzIGFuIEFERElUSU9OLCBVUERBVEUgb3IgUkVNT1ZBTC5cbiAgICovXG4gIHB1YmxpYyBjaGFuZ2VUYWcob2xkVmFsdWU6IGFueSB8IHVuZGVmaW5lZCwgbmV3VmFsdWU6IGFueSB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XG4gICAgaWYgKG9sZFZhbHVlICE9PSB1bmRlZmluZWQgJiYgbmV3VmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIFVQREFURTtcbiAgICB9IGVsc2UgaWYgKG9sZFZhbHVlICE9PSB1bmRlZmluZWQgLyogJiYgbmV3VmFsdWUgPT09IHVuZGVmaW5lZCovKSB7XG4gICAgICByZXR1cm4gUkVNT1ZBTDtcbiAgICB9IGVsc2UgLyogaWYgKG9sZFZhbHVlID09PSB1bmRlZmluZWQgJiYgbmV3VmFsdWUgIT09IHVuZGVmaW5lZCkgKi8ge1xuICAgICAgcmV0dXJuIEFERElUSU9OO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kICdhd3M6Y2RrOnBhdGgnIG1ldGFkYXRhIGluIHRoZSBkaWZmIGFuZCBhZGQgaXQgdG8gdGhlIGxvZ2ljYWxUb1BhdGhNYXBcbiAgICpcbiAgICogVGhlcmUgYXJlIG11bHRpcGxlIHNvdXJjZXMgb2YgbG9naWNhbElEIC0+IHBhdGggbWFwcGluZ3M6IHN5bnRoIG1ldGFkYXRhXG4gICAqIGFuZCByZXNvdXJjZSBtZXRhZGF0YSwgYW5kIHdlIGNvbWJpbmUgYWxsIHNvdXJjZXMgaW50byBhIHNpbmdsZSBtYXAuXG4gICAqL1xuICBwdWJsaWMgcmVhZENvbnN0cnVjdFBhdGhzRnJvbSh0ZW1wbGF0ZURpZmY6IFRlbXBsYXRlRGlmZikge1xuICAgIGZvciAoY29uc3QgW2xvZ2ljYWxJZCwgcmVzb3VyY2VEaWZmXSBvZiBPYmplY3QuZW50cmllcyh0ZW1wbGF0ZURpZmYucmVzb3VyY2VzKSkge1xuICAgICAgaWYgKCFyZXNvdXJjZURpZmYpIHsgY29udGludWU7IH1cblxuICAgICAgY29uc3Qgb2xkUGF0aE1ldGFkYXRhID0gcmVzb3VyY2VEaWZmLm9sZFZhbHVlICYmIHJlc291cmNlRGlmZi5vbGRWYWx1ZS5NZXRhZGF0YSAmJiByZXNvdXJjZURpZmYub2xkVmFsdWUuTWV0YWRhdGFbUEFUSF9NRVRBREFUQV9LRVldO1xuICAgICAgaWYgKG9sZFBhdGhNZXRhZGF0YSAmJiAhKGxvZ2ljYWxJZCBpbiB0aGlzLmxvZ2ljYWxUb1BhdGhNYXApKSB7XG4gICAgICAgIHRoaXMubG9naWNhbFRvUGF0aE1hcFtsb2dpY2FsSWRdID0gb2xkUGF0aE1ldGFkYXRhO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBuZXdQYXRoTWV0YWRhdGEgPSByZXNvdXJjZURpZmYubmV3VmFsdWUgJiYgcmVzb3VyY2VEaWZmLm5ld1ZhbHVlLk1ldGFkYXRhICYmIHJlc291cmNlRGlmZi5uZXdWYWx1ZS5NZXRhZGF0YVtQQVRIX01FVEFEQVRBX0tFWV07XG4gICAgICBpZiAobmV3UGF0aE1ldGFkYXRhICYmICEobG9naWNhbElkIGluIHRoaXMubG9naWNhbFRvUGF0aE1hcCkpIHtcbiAgICAgICAgdGhpcy5sb2dpY2FsVG9QYXRoTWFwW2xvZ2ljYWxJZF0gPSBuZXdQYXRoTWV0YWRhdGE7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGZvcm1hdExvZ2ljYWxJZChsb2dpY2FsSWQ6IHN0cmluZykge1xuICAgIC8vIGlmIHdlIGhhdmUgYSBwYXRoIGluIHRoZSBtYXAsIHJldHVybiBpdFxuICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSB0aGlzLm5vcm1hbGl6ZWRMb2dpY2FsSWRQYXRoKGxvZ2ljYWxJZCk7XG5cbiAgICBpZiAobm9ybWFsaXplZCkge1xuICAgICAgcmV0dXJuIGAke25vcm1hbGl6ZWR9ICR7Y2hhbGsuZ3JheShsb2dpY2FsSWQpfWA7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxvZ2ljYWxJZDtcbiAgfVxuXG4gIHB1YmxpYyBub3JtYWxpemVkTG9naWNhbElkUGF0aChsb2dpY2FsSWQ6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgLy8gaWYgd2UgaGF2ZSBhIHBhdGggaW4gdGhlIG1hcCwgcmV0dXJuIGl0XG4gICAgY29uc3QgcGF0aCA9IHRoaXMubG9naWNhbFRvUGF0aE1hcFtsb2dpY2FsSWRdO1xuICAgIHJldHVybiBwYXRoID8gbm9ybWFsaXplUGF0aChwYXRoKSA6IHVuZGVmaW5lZDtcblxuICAgIC8qKlxuICAgICAqIFBhdGggaXMgc3VwcG9zZWQgdG8gc3RhcnQgd2l0aCBcIi9zdGFjay1uYW1lXCIuIElmIHRoaXMgaXMgdGhlIGNhc2UgKGkuZS4gcGF0aCBoYXMgbW9yZSB0aGFuXG4gICAgICogdHdvIGNvbXBvbmVudHMsIHdlIHJlbW92ZSB0aGUgZmlyc3QgcGFydC4gT3RoZXJ3aXNlLCB3ZSBqdXN0IHVzZSB0aGUgZnVsbCBwYXRoLlxuICAgICAqIEBwYXJhbSBwXG4gICAgICovXG4gICAgZnVuY3Rpb24gbm9ybWFsaXplUGF0aChwOiBzdHJpbmcpIHtcbiAgICAgIGlmIChwLnN0YXJ0c1dpdGgoJy8nKSkge1xuICAgICAgICBwID0gcC5zbGljZSgxKTtcbiAgICAgIH1cblxuICAgICAgbGV0IHBhcnRzID0gcC5zcGxpdCgnLycpO1xuICAgICAgaWYgKHBhcnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgcGFydHMgPSBwYXJ0cy5zbGljZSgxKTtcblxuICAgICAgICAvLyByZW1vdmUgdGhlIGxhc3QgY29tcG9uZW50IGlmIGl0J3MgXCJSZXNvdXJjZVwiIG9yIFwiRGVmYXVsdFwiIChpZiB3ZSBoYXZlIG1vcmUgdGhhbiBhIHNpbmdsZSBjb21wb25lbnQpXG4gICAgICAgIGlmIChwYXJ0cy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgY29uc3QgbGFzdCA9IHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdO1xuICAgICAgICAgIGlmIChsYXN0ID09PSAnUmVzb3VyY2UnIHx8IGxhc3QgPT09ICdEZWZhdWx0Jykge1xuICAgICAgICAgICAgcGFydHMgPSBwYXJ0cy5zbGljZSgwLCBwYXJ0cy5sZW5ndGggLSAxKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBwID0gcGFydHMuam9pbignLycpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHA7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGZvcm1hdElhbUNoYW5nZXMoY2hhbmdlczogSWFtQ2hhbmdlcykge1xuICAgIGlmICghY2hhbmdlcy5oYXNDaGFuZ2VzKSB7IHJldHVybjsgfVxuXG4gICAgaWYgKGNoYW5nZXMuc3RhdGVtZW50cy5oYXNDaGFuZ2VzKSB7XG4gICAgICB0aGlzLnByaW50U2VjdGlvbkhlYWRlcignSUFNIFN0YXRlbWVudCBDaGFuZ2VzJyk7XG4gICAgICB0aGlzLnByaW50KGZvcm1hdFRhYmxlKHRoaXMuZGVlcFN1YnN0aXR1dGVCcmFjZWRMb2dpY2FsSWRzKGNoYW5nZXMuc3VtbWFyaXplU3RhdGVtZW50cygpKSwgdGhpcy5zdHJlYW0uY29sdW1ucykpO1xuICAgIH1cblxuICAgIGlmIChjaGFuZ2VzLm1hbmFnZWRQb2xpY2llcy5oYXNDaGFuZ2VzKSB7XG4gICAgICB0aGlzLnByaW50U2VjdGlvbkhlYWRlcignSUFNIFBvbGljeSBDaGFuZ2VzJyk7XG4gICAgICB0aGlzLnByaW50KGZvcm1hdFRhYmxlKHRoaXMuZGVlcFN1YnN0aXR1dGVCcmFjZWRMb2dpY2FsSWRzKGNoYW5nZXMuc3VtbWFyaXplTWFuYWdlZFBvbGljaWVzKCkpLCB0aGlzLnN0cmVhbS5jb2x1bW5zKSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGZvcm1hdFNlY3VyaXR5R3JvdXBDaGFuZ2VzKGNoYW5nZXM6IFNlY3VyaXR5R3JvdXBDaGFuZ2VzKSB7XG4gICAgaWYgKCFjaGFuZ2VzLmhhc0NoYW5nZXMpIHsgcmV0dXJuOyB9XG5cbiAgICB0aGlzLnByaW50U2VjdGlvbkhlYWRlcignU2VjdXJpdHkgR3JvdXAgQ2hhbmdlcycpO1xuICAgIHRoaXMucHJpbnQoZm9ybWF0VGFibGUodGhpcy5kZWVwU3Vic3RpdHV0ZUJyYWNlZExvZ2ljYWxJZHMoY2hhbmdlcy5zdW1tYXJpemUoKSksIHRoaXMuc3RyZWFtLmNvbHVtbnMpKTtcbiAgfVxuXG4gIHB1YmxpYyBkZWVwU3Vic3RpdHV0ZUJyYWNlZExvZ2ljYWxJZHMocm93czogc3RyaW5nW11bXSk6IHN0cmluZ1tdW10ge1xuICAgIHJldHVybiByb3dzLm1hcChyb3cgPT4gcm93Lm1hcCh0aGlzLnN1YnN0aXR1dGVCcmFjZWRMb2dpY2FsSWRzLmJpbmQodGhpcykpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdWJzdGl0dXRlIGFsbCBzdHJpbmdzIGxpa2UgJHtMb2dJZC54eHh9IHdpdGggdGhlIHBhdGggaW5zdGVhZCBvZiB0aGUgbG9naWNhbCBJRFxuICAgKi9cbiAgcHVibGljIHN1YnN0aXR1dGVCcmFjZWRMb2dpY2FsSWRzKHNvdXJjZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gc291cmNlLnJlcGxhY2UoL1xcJFxceyhbXi59XSspKC5bXn1dKyk/XFx9L2lnLCAoX21hdGNoLCBsb2dJZCwgc3VmZml4KSA9PiB7XG4gICAgICByZXR1cm4gJyR7JyArICh0aGlzLm5vcm1hbGl6ZWRMb2dpY2FsSWRQYXRoKGxvZ0lkKSB8fCBsb2dJZCkgKyAoc3VmZml4IHx8ICcnKSArICd9JztcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIEEgcGF0Y2ggYXMgcmV0dXJuZWQgYnkgYGBkaWZmLnN0cnVjdHVyZWRQYXRjaGBgLlxuICovXG5pbnRlcmZhY2UgUGF0Y2gge1xuICAvKipcbiAgICogSHVua3MgaW4gdGhlIHBhdGNoLlxuICAgKi9cbiAgaHVua3M6IFJlYWRvbmx5QXJyYXk8UGF0Y2hIdW5rPjtcbn1cblxuLyoqXG4gKiBBIGh1bmsgaW4gYSBwYXRjaCBwcm9kdWNlZCBieSBgYGRpZmYuc3RydWN0dXJlZFBhdGNoYGAuXG4gKi9cbmludGVyZmFjZSBQYXRjaEh1bmsge1xuICBvbGRTdGFydDogbnVtYmVyO1xuICBvbGRMaW5lczogbnVtYmVyO1xuICBuZXdTdGFydDogbnVtYmVyO1xuICBuZXdMaW5lczogbnVtYmVyO1xuICBsaW5lczogc3RyaW5nW107XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHVuaWZpZWQgZGlmZiBvZiB0d28gc3RyaW5ncy5cbiAqXG4gKiBAcGFyYW0gb2xkU3RyICB0aGUgXCJvbGRcIiB2ZXJzaW9uIG9mIHRoZSBzdHJpbmcuXG4gKiBAcGFyYW0gbmV3U3RyICB0aGUgXCJuZXdcIiB2ZXJzaW9uIG9mIHRoZSBzdHJpbmcuXG4gKiBAcGFyYW0gY29udGV4dCB0aGUgbnVtYmVyIG9mIGNvbnRleHQgbGluZXMgdG8gdXNlIGluIGFyYml0cmFyeSBKU09OIGRpZmYuXG4gKlxuICogQHJldHVybnMgYW4gYXJyYXkgb2YgZGlmZiBsaW5lcy5cbiAqL1xuZnVuY3Rpb24gX2RpZmZTdHJpbmdzKG9sZFN0cjogc3RyaW5nLCBuZXdTdHI6IHN0cmluZywgY29udGV4dDogbnVtYmVyKTogc3RyaW5nW10ge1xuICBjb25zdCBwYXRjaDogUGF0Y2ggPSBzdHJ1Y3R1cmVkUGF0Y2gobnVsbCwgbnVsbCwgb2xkU3RyLCBuZXdTdHIsIG51bGwsIG51bGwsIHsgY29udGV4dCB9KTtcbiAgY29uc3QgcmVzdWx0ID0gbmV3IEFycmF5PHN0cmluZz4oKTtcbiAgZm9yIChjb25zdCBodW5rIG9mIHBhdGNoLmh1bmtzKSB7XG4gICAgcmVzdWx0LnB1c2goY2hhbGsubWFnZW50YShgQEAgLSR7aHVuay5vbGRTdGFydH0sJHtodW5rLm9sZExpbmVzfSArJHtodW5rLm5ld1N0YXJ0fSwke2h1bmsubmV3TGluZXN9IEBAYCkpO1xuICAgIGNvbnN0IGJhc2VJbmRlbnQgPSBfZmluZEluZGVudChodW5rLmxpbmVzKTtcbiAgICBmb3IgKGNvbnN0IGxpbmUgb2YgaHVuay5saW5lcykge1xuICAgICAgLy8gRG9uJ3QgY2FyZSBhYm91dCB0ZXJtaW5hdGlvbiBuZXdsaW5lLlxuICAgICAgaWYgKGxpbmUgPT09ICdcXFxcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUnKSB7IGNvbnRpbnVlOyB9XG4gICAgICBjb25zdCBtYXJrZXIgPSBsaW5lLmNoYXJBdCgwKTtcbiAgICAgIGNvbnN0IHRleHQgPSBsaW5lLnNsaWNlKDEgKyBiYXNlSW5kZW50KTtcbiAgICAgIHN3aXRjaCAobWFya2VyKSB7XG4gICAgICAgIGNhc2UgJyAnOlxuICAgICAgICAgIHJlc3VsdC5wdXNoKGAke0NPTlRFWFR9ICR7dGV4dH1gKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnKyc6XG4gICAgICAgICAgcmVzdWx0LnB1c2goY2hhbGsuYm9sZChgJHtBRERJVElPTn0gJHtjaGFsay5ncmVlbih0ZXh0KX1gKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJy0nOlxuICAgICAgICAgIHJlc3VsdC5wdXNoKGNoYWxrLmJvbGQoYCR7UkVNT1ZBTH0gJHtjaGFsay5yZWQodGV4dCl9YCkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5leHBlY3RlZCBkaWZmIG1hcmtlcjogJHttYXJrZXJ9IChmdWxsIGxpbmU6ICR7bGluZX0pYCk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG5cbiAgZnVuY3Rpb24gX2ZpbmRJbmRlbnQobGluZXM6IHN0cmluZ1tdKTogbnVtYmVyIHtcbiAgICBsZXQgaW5kZW50ID0gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVI7XG4gICAgZm9yIChjb25zdCBsaW5lIG9mIGxpbmVzKSB7XG4gICAgICBmb3IgKGxldCBpID0gMSA7IGkgPCBsaW5lLmxlbmd0aCA7IGkrKykge1xuICAgICAgICBpZiAobGluZS5jaGFyQXQoaSkgIT09ICcgJykge1xuICAgICAgICAgIGluZGVudCA9IGluZGVudCA+IGkgLSAxID8gaSAtIDEgOiBpbmRlbnQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGluZGVudDtcbiAgfVxufVxuIl19
+
+/***/ }),
+
+/***/ 23154:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.IamChanges = void 0;
+const cfnspec = __nccwpck_require__(72665);
+const chalk = __nccwpck_require__(78818);
+const managed_policy_1 = __nccwpck_require__(67116);
+const statement_1 = __nccwpck_require__(68434);
+const diffable_1 = __nccwpck_require__(28805);
+const render_intrinsics_1 = __nccwpck_require__(52317);
+const util_1 = __nccwpck_require__(72341);
+/**
+ * Changes to IAM statements
+ */
+class IamChanges {
+ constructor(props) {
+ this.statements = new diffable_1.DiffableCollection();
+ this.managedPolicies = new diffable_1.DiffableCollection();
+ for (const propertyChange of props.propertyChanges) {
+ this.readPropertyChange(propertyChange);
+ }
+ for (const resourceChange of props.resourceChanges) {
+ this.readResourceChange(resourceChange);
+ }
+ this.statements.calculateDiff();
+ this.managedPolicies.calculateDiff();
+ }
+ get hasChanges() {
+ return this.statements.hasChanges || this.managedPolicies.hasChanges;
+ }
+ /**
+ * Return whether the changes include broadened permissions
+ *
+ * Permissions are broadened if positive statements are added or
+ * negative statements are removed, or if managed policies are added.
+ */
+ get permissionsBroadened() {
+ return this.statements.additions.some(s => !s.isNegativeStatement)
+ || this.statements.removals.some(s => s.isNegativeStatement)
+ || this.managedPolicies.hasAdditions;
+ }
+ /**
+ * Return a summary table of changes
+ */
+ summarizeStatements() {
+ const ret = [];
+ const header = ['', 'Resource', 'Effect', 'Action', 'Principal', 'Condition'];
+ // First generate all lines, then sort on Resource so that similar resources are together
+ for (const statement of this.statements.additions) {
+ const renderedStatement = statement.render();
+ ret.push([
+ '+',
+ renderedStatement.resource,
+ renderedStatement.effect,
+ renderedStatement.action,
+ renderedStatement.principal,
+ renderedStatement.condition,
+ ].map(s => chalk.green(s)));
+ }
+ for (const statement of this.statements.removals) {
+ const renderedStatement = statement.render();
+ ret.push([
+ chalk.red('-'),
+ renderedStatement.resource,
+ renderedStatement.effect,
+ renderedStatement.action,
+ renderedStatement.principal,
+ renderedStatement.condition,
+ ].map(s => chalk.red(s)));
+ }
+ // Sort by 2nd column
+ ret.sort((0, util_1.makeComparator)((row) => [row[1]]));
+ ret.splice(0, 0, header);
+ return ret;
+ }
+ summarizeManagedPolicies() {
+ const ret = [];
+ const header = ['', 'Resource', 'Managed Policy ARN'];
+ for (const att of this.managedPolicies.additions) {
+ ret.push([
+ '+',
+ att.identityArn,
+ att.managedPolicyArn,
+ ].map(s => chalk.green(s)));
+ }
+ for (const att of this.managedPolicies.removals) {
+ ret.push([
+ '-',
+ att.identityArn,
+ att.managedPolicyArn,
+ ].map(s => chalk.red(s)));
+ }
+ // Sort by 2nd column
+ ret.sort((0, util_1.makeComparator)((row) => [row[1]]));
+ ret.splice(0, 0, header);
+ return ret;
+ }
+ /**
+ * Return a machine-readable version of the changes.
+ * This is only used in tests.
+ *
+ * @internal
+ */
+ _toJson() {
+ return (0, util_1.deepRemoveUndefined)({
+ statementAdditions: (0, util_1.dropIfEmpty)(this.statements.additions.map(s => s._toJson())),
+ statementRemovals: (0, util_1.dropIfEmpty)(this.statements.removals.map(s => s._toJson())),
+ managedPolicyAdditions: (0, util_1.dropIfEmpty)(this.managedPolicies.additions.map(s => s._toJson())),
+ managedPolicyRemovals: (0, util_1.dropIfEmpty)(this.managedPolicies.removals.map(s => s._toJson())),
+ });
+ }
+ readPropertyChange(propertyChange) {
+ switch (propertyChange.scrutinyType) {
+ case cfnspec.schema.PropertyScrutinyType.InlineIdentityPolicies:
+ // AWS::IAM::{ Role | User | Group }.Policies
+ this.statements.addOld(...this.readIdentityPolicies(propertyChange.oldValue, propertyChange.resourceLogicalId));
+ this.statements.addNew(...this.readIdentityPolicies(propertyChange.newValue, propertyChange.resourceLogicalId));
+ break;
+ case cfnspec.schema.PropertyScrutinyType.InlineResourcePolicy:
+ // Any PolicyDocument on a resource (including AssumeRolePolicyDocument)
+ this.statements.addOld(...this.readResourceStatements(propertyChange.oldValue, propertyChange.resourceLogicalId));
+ this.statements.addNew(...this.readResourceStatements(propertyChange.newValue, propertyChange.resourceLogicalId));
+ break;
+ case cfnspec.schema.PropertyScrutinyType.ManagedPolicies:
+ // Just a list of managed policies
+ this.managedPolicies.addOld(...this.readManagedPolicies(propertyChange.oldValue, propertyChange.resourceLogicalId));
+ this.managedPolicies.addNew(...this.readManagedPolicies(propertyChange.newValue, propertyChange.resourceLogicalId));
+ break;
+ }
+ }
+ readResourceChange(resourceChange) {
+ switch (resourceChange.scrutinyType) {
+ case cfnspec.schema.ResourceScrutinyType.IdentityPolicyResource:
+ // AWS::IAM::Policy
+ this.statements.addOld(...this.readIdentityPolicyResource(resourceChange.oldProperties));
+ this.statements.addNew(...this.readIdentityPolicyResource(resourceChange.newProperties));
+ break;
+ case cfnspec.schema.ResourceScrutinyType.ResourcePolicyResource:
+ // AWS::*::{Bucket,Queue,Topic}Policy
+ this.statements.addOld(...this.readResourcePolicyResource(resourceChange.oldProperties));
+ this.statements.addNew(...this.readResourcePolicyResource(resourceChange.newProperties));
+ break;
+ case cfnspec.schema.ResourceScrutinyType.LambdaPermission:
+ this.statements.addOld(...this.readLambdaStatements(resourceChange.oldProperties));
+ this.statements.addNew(...this.readLambdaStatements(resourceChange.newProperties));
+ break;
+ }
+ }
+ /**
+ * Parse a list of policies on an identity
+ */
+ readIdentityPolicies(policies, logicalId) {
+ if (policies === undefined || !Array.isArray(policies)) {
+ return [];
+ }
+ const appliesToPrincipal = 'AWS:${' + logicalId + '}';
+ return (0, util_1.flatMap)(policies, (policy) => {
+ // check if the Policy itself is not an intrinsic, like an Fn::If
+ const unparsedStatement = policy.PolicyDocument?.Statement
+ ? policy.PolicyDocument.Statement
+ : policy;
+ return defaultPrincipal(appliesToPrincipal, (0, statement_1.parseStatements)((0, render_intrinsics_1.renderIntrinsics)(unparsedStatement)));
+ });
+ }
+ /**
+ * Parse an IAM::Policy resource
+ */
+ readIdentityPolicyResource(properties) {
+ if (properties === undefined) {
+ return [];
+ }
+ properties = (0, render_intrinsics_1.renderIntrinsics)(properties);
+ const principals = (properties.Groups || []).concat(properties.Users || []).concat(properties.Roles || []);
+ return (0, util_1.flatMap)(principals, (principal) => {
+ const ref = 'AWS:' + principal;
+ return defaultPrincipal(ref, (0, statement_1.parseStatements)(properties.PolicyDocument.Statement));
+ });
+ }
+ readResourceStatements(policy, logicalId) {
+ if (policy === undefined) {
+ return [];
+ }
+ const appliesToResource = '${' + logicalId + '.Arn}';
+ return defaultResource(appliesToResource, (0, statement_1.parseStatements)((0, render_intrinsics_1.renderIntrinsics)(policy.Statement)));
+ }
+ /**
+ * Parse an AWS::*::{Bucket,Topic,Queue}policy
+ */
+ readResourcePolicyResource(properties) {
+ if (properties === undefined) {
+ return [];
+ }
+ properties = (0, render_intrinsics_1.renderIntrinsics)(properties);
+ const policyKeys = Object.keys(properties).filter(key => key.indexOf('Policy') > -1);
+ // Find the key that identifies the resource(s) this policy applies to
+ const resourceKeys = Object.keys(properties).filter(key => !policyKeys.includes(key) && !key.endsWith('Name'));
+ let resources = resourceKeys.length === 1 ? properties[resourceKeys[0]] : ['???'];
+ // For some resources, this is a singleton string, for some it's an array
+ if (!Array.isArray(resources)) {
+ resources = [resources];
+ }
+ return (0, util_1.flatMap)(resources, (resource) => {
+ return defaultResource(resource, (0, statement_1.parseStatements)(properties[policyKeys[0]].Statement));
+ });
+ }
+ readManagedPolicies(policyArns, logicalId) {
+ if (!policyArns) {
+ return [];
+ }
+ const rep = '${' + logicalId + '}';
+ return managed_policy_1.ManagedPolicyAttachment.parseManagedPolicies(rep, (0, render_intrinsics_1.renderIntrinsics)(policyArns));
+ }
+ readLambdaStatements(properties) {
+ if (!properties) {
+ return [];
+ }
+ return [(0, statement_1.parseLambdaPermission)((0, render_intrinsics_1.renderIntrinsics)(properties))];
+ }
+}
+exports.IamChanges = IamChanges;
+IamChanges.IamPropertyScrutinies = [
+ cfnspec.schema.PropertyScrutinyType.InlineIdentityPolicies,
+ cfnspec.schema.PropertyScrutinyType.InlineResourcePolicy,
+ cfnspec.schema.PropertyScrutinyType.ManagedPolicies,
+];
+IamChanges.IamResourceScrutinies = [
+ cfnspec.schema.ResourceScrutinyType.ResourcePolicyResource,
+ cfnspec.schema.ResourceScrutinyType.IdentityPolicyResource,
+ cfnspec.schema.ResourceScrutinyType.LambdaPermission,
+];
+/**
+ * Set an undefined or wildcarded principal on these statements
+ */
+function defaultPrincipal(principal, statements) {
+ statements.forEach(s => s.principals.replaceEmpty(principal));
+ statements.forEach(s => s.principals.replaceStar(principal));
+ return statements;
+}
+/**
+ * Set an undefined or wildcarded resource on these statements
+ */
+function defaultResource(resource, statements) {
+ statements.forEach(s => s.resources.replaceEmpty(resource));
+ statements.forEach(s => s.resources.replaceStar(resource));
+ return statements;
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWFtLWNoYW5nZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpYW0tY2hhbmdlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw0Q0FBNEM7QUFDNUMsK0JBQStCO0FBQy9CLHFEQUE4RTtBQUM5RSwyQ0FBK0Y7QUFHL0YsMENBQWlEO0FBQ2pELDREQUF3RDtBQUN4RCxrQ0FBb0Y7QUFPcEY7O0dBRUc7QUFDSCxNQUFhLFVBQVU7SUFnQnJCLFlBQVksS0FBc0I7UUFIbEIsZUFBVSxHQUFHLElBQUksNkJBQWtCLEVBQWEsQ0FBQztRQUNqRCxvQkFBZSxHQUFHLElBQUksNkJBQWtCLEVBQTJCLENBQUM7UUFHbEYsS0FBSyxNQUFNLGNBQWMsSUFBSSxLQUFLLENBQUMsZUFBZSxFQUFFO1lBQ2xELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxjQUFjLENBQUMsQ0FBQztTQUN6QztRQUNELEtBQUssTUFBTSxjQUFjLElBQUksS0FBSyxDQUFDLGVBQWUsRUFBRTtZQUNsRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsY0FBYyxDQUFDLENBQUM7U0FDekM7UUFFRCxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxlQUFlLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDdkMsQ0FBQztJQUVELElBQVcsVUFBVTtRQUNuQixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDO0lBQ3ZFLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILElBQVcsb0JBQW9CO1FBQzdCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsbUJBQW1CLENBQUM7ZUFDM0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxD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QyxNQUFNLENBQUMsb0JBQW9CLENBQUMsZ0JBQWdCO0NBQ3JELEFBSmtDLENBSWpDO0FBdU9KOztHQUVHO0FBQ0gsU0FBUyxnQkFBZ0IsQ0FBQyxTQUFpQixFQUFFLFVBQXVCO0lBQ2xFLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBQzlELFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBQzdELE9BQU8sVUFBVSxDQUFDO0FBQ3BCLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQVMsZUFBZSxDQUFDLFFBQWdCLEVBQUUsVUFBdUI7SUFDaEUsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDNUQsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDM0QsT0FBTyxVQUFVLENBQUM7QUFDcEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGNmbnNwZWMgZnJvbSAnQGF3cy1jZGsvY2Zuc3BlYyc7XG5pbXBvcnQgKiBhcyBjaGFsayBmcm9tICdjaGFsayc7XG5pbXBvcnQgeyBNYW5hZ2VkUG9saWN5QXR0YWNobWVudCwgTWFuYWdlZFBvbGljeUpzb24gfSBmcm9tICcuL21hbmFnZWQtcG9saWN5JztcbmltcG9ydCB7IHBhcnNlTGFtYmRhUGVybWlzc2lvbiwgcGFyc2VTdGF0ZW1lbnRzLCBTdGF0ZW1lbnQsIFN0YXRlbWVudEpzb24gfSBmcm9tICcuL3N0YXRlbWVudCc7XG5pbXBvcnQgeyBNYXliZVBhcnNlZCB9IGZyb20gJy4uL2RpZmYvbWF5YmUtcGFyc2VkJztcbmltcG9ydCB7IFByb3BlcnR5Q2hhbmdlLCBQcm9wZXJ0eU1hcCwgUmVzb3VyY2VDaGFuZ2UgfSBmcm9tICcuLi9kaWZmL3R5cGVzJztcbmltcG9ydCB7IERpZmZhYmxlQ29sbGVjdGlvbiB9IGZyb20gJy4uL2RpZmZhYmxlJztcbmltcG9ydCB7IHJlbmRlckludHJpbnNpY3MgfSBmcm9tICcuLi9yZW5kZXItaW50cmluc2ljcyc7XG5pbXBvcnQgeyBkZWVwUmVtb3ZlVW5kZWZpbmVkLCBkcm9wSWZFbXB0eSwgZmxhdE1hcCwgbWFrZUNvbXBhcmF0b3IgfSBmcm9tICcuLi91dGlsJztcblxuZXhwb3J0IGludGVyZmFjZSBJYW1DaGFuZ2VzUHJvcHMge1xuICBwcm9wZXJ0eUNoYW5nZXM6IFByb3BlcnR5Q2hhbmdlW107XG4gIHJlc291cmNlQ2hhbmdlczogUmVzb3VyY2VDaGFuZ2VbXTtcbn1cblxuLyoqXG4gKiBDaGFuZ2VzIHRvIElBTSBzdGF0ZW1lbnRzXG4gKi9cbmV4cG9ydCBjbGFzcyBJYW1DaGFuZ2VzIHtcbiAgcHVibGljIHN0YXRpYyBJYW1Qcm9wZXJ0eVNjcnV0aW5pZXMgPSBbXG4gICAgY2Zuc3BlYy5zY2hlbWEuUHJvcGVydHlTY3J1dGlueVR5cGUuSW5saW5lSWRlbnRpdHlQb2xpY2llcyxcbiAgICBjZm5zcGVjLnNjaGVtYS5Qcm9wZXJ0eVNjcnV0aW55VHlwZS5JbmxpbmVSZXNvdXJjZVBvbGljeSxcbiAgICBjZm5zcGVjLnNjaGVtYS5Qcm9wZXJ0eVNjcnV0aW55VHlwZS5NYW5hZ2VkUG9saWNpZXMsXG4gIF07XG5cbiAgcHVibGljIHN0YXRpYyBJYW1SZXNvdXJjZVNjcnV0aW5pZXMgPSBbXG4gICAgY2Zuc3BlYy5zY2hlbWEuUmVzb3VyY2VTY3J1dGlueVR5cGUuUmVzb3VyY2VQb2xpY3lSZXNvdXJjZSxcbiAgICBjZm5zcGVjLnNjaGVtYS5SZXNvdXJjZVNjcnV0aW55VHlwZS5JZGVudGl0eVBvbGljeVJlc291cmNlLFxuICAgIGNmbnNwZWMuc2NoZW1hLlJlc291cmNlU2NydXRpbnlUeXBlLkxhbWJkYVBlcm1pc3Npb24sXG4gIF07XG5cbiAgcHVibGljIHJlYWRvbmx5IHN0YXRlbWVudHMgPSBuZXcgRGlmZmFibGVDb2xsZWN0aW9uPFN0YXRlbWVudD4oKTtcbiAgcHVibGljIHJlYWRvbmx5IG1hbmFnZWRQb2xpY2llcyA9IG5ldyBEaWZmYWJsZUNvbGxlY3Rpb248TWFuYWdlZFBvbGljeUF0dGFjaG1lbnQ+KCk7XG5cbiAgY29uc3RydWN0b3IocHJvcHM6IElhbUNoYW5nZXNQcm9wcykge1xuICAgIGZvciAoY29uc3QgcHJvcGVydHlDaGFuZ2Ugb2YgcHJvcHMucHJvcGVydHlDaGFuZ2VzKSB7XG4gICAgICB0aGlzLnJlYWRQcm9wZXJ0eUNoYW5nZShwcm9wZXJ0eUNoYW5nZSk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgcmVzb3VyY2VDaGFuZ2Ugb2YgcHJvcHMucmVzb3VyY2VDaGFuZ2VzKSB7XG4gICAgICB0aGlzLnJlYWRSZXNvdXJjZUNoYW5nZShyZXNvdXJjZUNoYW5nZSk7XG4gICAgfVxuXG4gICAgdGhpcy5zdGF0ZW1lbnRzLmNhbGN1bGF0ZURpZmYoKTtcbiAgICB0aGlzLm1hbmFnZWRQb2xpY2llcy5jYWxjdWxhdGVEaWZmKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGhhc0NoYW5nZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGVtZW50cy5oYXNDaGFuZ2VzIHx8IHRoaXMubWFuYWdlZFBvbGljaWVzLmhhc0NoYW5nZXM7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHdoZXRoZXIgdGhlIGNoYW5nZXMgaW5jbHVkZSBicm9hZGVuZWQgcGVybWlzc2lvbnNcbiAgICpcbiAgICogUGVybWlzc2lvbnMgYXJlIGJyb2FkZW5lZCBpZiBwb3NpdGl2ZSBzdGF0ZW1lbnRzIGFyZSBhZGRlZCBvclxuICAgKiBuZWdhdGl2ZSBzdGF0ZW1lbnRzIGFyZSByZW1vdmVkLCBvciBpZiBtYW5hZ2VkIHBvbGljaWVzIGFyZSBhZGRlZC5cbiAgICovXG4gIHB1YmxpYyBnZXQgcGVybWlzc2lvbnNCcm9hZGVuZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGVtZW50cy5hZGRpdGlvbnMuc29tZShzID0+ICFzLmlzTmVnYXRpdmVTdGF0ZW1lbnQpXG4gICAgICAgIHx8IHRoaXMuc3RhdGVtZW50cy5yZW1vdmFscy5zb21lKHMgPT4gcy5pc05lZ2F0aXZlU3RhdGVtZW50KVxuICAgICAgICB8fCB0aGlzLm1hbmFnZWRQb2xpY2llcy5oYXNBZGRpdGlvbnM7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGEgc3VtbWFyeSB0YWJsZSBvZiBjaGFuZ2VzXG4gICAqL1xuICBwdWJsaWMgc3VtbWFyaXplU3RhdGVtZW50cygpOiBzdHJpbmdbXVtdIHtcbiAgICBjb25zdCByZXQ6IHN0cmluZ1tdW10gPSBbXTtcblxuICAgIGNvbnN0IGhlYWRlciA9IFsnJywgJ1Jlc291cmNlJywgJ0VmZmVjdCcsICdBY3Rpb24nLCAnUHJpbmNpcGFsJywgJ0NvbmRpdGlvbiddO1xuXG4gICAgLy8gRmlyc3QgZ2VuZXJhdGUgYWxsIGxpbmVzLCB0aGVuIHNvcnQgb24gUmVzb3VyY2Ugc28gdGhhdCBzaW1pbGFyIHJlc291cmNlcyBhcmUgdG9nZXRoZXJcbiAgICBmb3IgKGNvbnN0IHN0YXRlbWVudCBvZiB0aGlzLnN0YXRlbWVudHMuYWRkaXRpb25zKSB7XG4gICAgICBjb25zdCByZW5kZXJlZFN0YXRlbWVudCA9IHN0YXRlbWVudC5yZW5kZXIoKTtcbiAgICAgIHJldC5wdXNoKFtcbiAgICAgICAgJysnLFxuICAgICAgICByZW5kZXJlZFN0YXRlbWVudC5yZXNvdXJjZSxcbiAgICAgICAgcmVuZGVyZWRTdGF0ZW1lbnQuZWZmZWN0LFxuICAgICAgICByZW5kZXJlZFN0YXRlbWVudC5hY3Rpb24sXG4gICAgICAgIHJlbmRlcmVkU3RhdGVtZW50LnByaW5jaXBhbCxcbiAgICAgICAgcmVuZGVyZWRTdGF0ZW1lbnQuY29uZGl0aW9uLFxuICAgICAgXS5tYXAocyA9PiBjaGFsay5ncmVlbihzKSkpO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHN0YXRlbWVudCBvZiB0aGlzLnN0YXRlbWVudHMucmVtb3ZhbHMpIHtcbiAgICAgIGNvbnN0IHJlbmRlcmVkU3RhdGVtZW50ID0gc3RhdGVtZW50LnJlbmRlcigpO1xuICAgICAgcmV0LnB1c2goW1xuICAgICAgICBjaGFsay5yZWQoJy0nKSxcbiAgICAgICAgcmVuZGVyZWRTdGF0ZW1lbnQucmVzb3VyY2UsXG4gICAgICAgIHJlbmRlcmVkU3RhdGVtZW50LmVmZmVjdCxcbiAgICAgICAgcmVuZGVyZWRTdGF0ZW1lbnQuYWN0aW9uLFxuICAgICAgICByZW5kZXJlZFN0YXRlbWVudC5wcmluY2lwYWwsXG4gICAgICAgIHJlbmRlcmVkU3RhdGVtZW50LmNvbmRpdGlvbixcbiAgICAgIF0ubWFwKHMgPT4gY2hhbGsucmVkKHMpKSk7XG4gICAgfVxuXG4gICAgLy8gU29ydCBieSAybmQgY29sdW1uXG4gICAgcmV0LnNvcnQobWFrZUNvbXBhcmF0b3IoKHJvdzogc3RyaW5nW10pID0+IFtyb3dbMV1dKSk7XG5cbiAgICByZXQuc3BsaWNlKDAsIDAsIGhlYWRlcik7XG5cbiAgICByZXR1cm4gcmV0O1xuICB9XG5cbiAgcHVibGljIHN1bW1hcml6ZU1hbmFnZWRQb2xpY2llcygpOiBzdHJpbmdbXVtdIHtcbiAgICBjb25zdCByZXQ6IHN0cmluZ1tdW10gPSBbXTtcbiAgICBjb25zdCBoZWFkZXIgPSBbJycsICdSZXNvdXJjZScsICdNYW5hZ2VkIFBvbGljeSBBUk4nXTtcblxuICAgIGZvciAoY29uc3QgYXR0IG9mIHRoaXMubWFuYWdlZFBvbGljaWVzLmFkZGl0aW9ucykge1xuICAgICAgcmV0LnB1c2goW1xuICAgICAgICAnKycsXG4gICAgICAgIGF0dC5pZGVudGl0eUFybixcbiAgICAgICAgYXR0Lm1hbmFnZWRQb2xpY3lBcm4sXG4gICAgICBdLm1hcChzID0+IGNoYWxrLmdyZWVuKHMpKSk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgYXR0IG9mIHRoaXMubWFuYWdlZFBvbGljaWVzLnJlbW92YWxzKSB7XG4gICAgICByZXQucHVzaChbXG4gICAgICAgICctJyxcbiAgICAgICAgYXR0LmlkZW50aXR5QXJuLFxuICAgICAgICBhdHQubWFuYWdlZFBvbGljeUFybixcbiAgICAgIF0ubWFwKHMgPT4gY2hhbGsucmVkKHMpKSk7XG4gICAgfVxuXG4gICAgLy8gU29ydCBieSAybmQgY29sdW1uXG4gICAgcmV0LnNvcnQobWFrZUNvbXBhcmF0b3IoKHJvdzogc3RyaW5nW10pID0+IFtyb3dbMV1dKSk7XG5cbiAgICByZXQuc3BsaWNlKDAsIDAsIGhlYWRlcik7XG5cbiAgICByZXR1cm4gcmV0O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIG1hY2hpbmUtcmVhZGFibGUgdmVyc2lvbiBvZiB0aGUgY2hhbmdlcy5cbiAgICogVGhpcyBpcyBvbmx5IHVzZWQgaW4gdGVzdHMuXG4gICAqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHVibGljIF90b0pzb24oKTogSWFtQ2hhbmdlc0pzb24ge1xuICAgIHJldHVybiBkZWVwUmVtb3ZlVW5kZWZpbmVkKHtcbiAgICAgIHN0YXRlbWVudEFkZGl0aW9uczogZHJvcElmRW1wdHkodGhpcy5zdGF0ZW1lbnRzLmFkZGl0aW9ucy5tYXAocyA9PiBzLl90b0pzb24oKSkpLFxuICAgICAgc3RhdGVtZW50UmVtb3ZhbHM6IGRyb3BJZkVtcHR5KHRoaXMuc3RhdGVtZW50cy5yZW1vdmFscy5tYXAocyA9PiBzLl90b0pzb24oKSkpLFxuICAgICAgbWFuYWdlZFBvbGljeUFkZGl0aW9uczogZHJvcElmRW1wdHkodGhpcy5tYW5hZ2VkUG9saWNpZXMuYWRkaXRpb25zLm1hcChzID0+IHMuX3RvSnNvbigpKSksXG4gICAgICBtYW5hZ2VkUG9saWN5UmVtb3ZhbHM6IGRyb3BJZkVtcHR5KHRoaXMubWFuYWdlZFBvbGljaWVzLnJlbW92YWxzLm1hcChzID0+IHMuX3RvSnNvbigpKSksXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHJlYWRQcm9wZXJ0eUNoYW5nZShwcm9wZXJ0eUNoYW5nZTogUHJvcGVydHlDaGFuZ2UpIHtcbiAgICBzd2l0Y2ggKHByb3BlcnR5Q2hhbmdlLnNjcnV0aW55VHlwZSkge1xuICAgICAgY2FzZSBjZm5zcGVjLnNjaGVtYS5Qcm9wZXJ0eVNjcnV0aW55VHlwZS5JbmxpbmVJZGVudGl0eVBvbGljaWVzOlxuICAgICAgICAvLyBBV1M6OklBTTo6eyBSb2xlIHwgVXNlciB8IEdyb3VwIH0uUG9saWNpZXNcbiAgICAgICAgdGhpcy5zdGF0ZW1lbnRzLmFkZE9sZCguLi50aGlzLnJlYWRJZGVudGl0eVBvbGljaWVzKHByb3BlcnR5Q2hhbmdlLm9sZFZhbHVlLCBwcm9wZXJ0eUNoYW5nZS5yZXNvdXJjZUxvZ2ljYWxJZCkpO1xuICAgICAgICB0aGlzLnN0YXRlbWVudHMuYWRkTmV3KC4uLnRoaXMucmVhZElkZW50aXR5UG9saWNpZXMocHJvcGVydHlDaGFuZ2UubmV3VmFsdWUsIHByb3BlcnR5Q2hhbmdlLnJlc291cmNlTG9naWNhbElkKSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBjZm5zcGVjLnNjaGVtYS5Qcm9wZXJ0eVNjcnV0aW55VHlwZS5JbmxpbmVSZXNvdXJjZVBvbGljeTpcbiAgICAgICAgLy8gQW55IFBvbGljeURvY3VtZW50IG9uIGEgcmVzb3VyY2UgKGluY2x1ZGluZyBBc3N1bWVSb2xlUG9saWN5RG9jdW1lbnQpXG4gICAgICAgIHRoaXMuc3RhdGVtZW50cy5hZGRPbGQoLi4udGhpcy5yZWFkUmVzb3VyY2VTdGF0ZW1lbnRzKHByb3BlcnR5Q2hhbmdlLm9sZFZhbHVlLCBwcm9wZXJ0eUNoYW5nZS5yZXNvdXJjZUxvZ2ljYWxJZCkpO1xuICAgICAgICB0aGlzLnN0YXRlbWVudHMuYWRkTmV3KC4uLnRoaXMucmVhZFJlc291cmNlU3RhdGVtZW50cyhwcm9wZXJ0eUNoYW5nZS5uZXdWYWx1ZSwgcHJvcGVydHlDaGFuZ2UucmVzb3VyY2VMb2dpY2FsSWQpKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIGNmbnNwZWMuc2NoZW1hLlByb3BlcnR5U2NydXRpbnlUeXBlLk1hbmFnZWRQb2xpY2llczpcbiAgICAgICAgLy8gSnVzdCBhIGxpc3Qgb2YgbWFuYWdlZCBwb2xpY2llc1xuICAgICAgICB0aGlzLm1hbmFnZWRQb2xpY2llcy5hZGRPbGQoLi4udGhpcy5yZWFkTWFuYWdlZFBvbGljaWVzKHByb3BlcnR5Q2hhbmdlLm9sZFZhbHVlLCBwcm9wZXJ0eUNoYW5nZS5yZXNvdXJjZUxvZ2ljYWxJZCkpO1xuICAgICAgICB0aGlzLm1hbmFnZWRQb2xpY2llcy5hZGROZXcoLi4udGhpcy5yZWFkTWFuYWdlZFBvbGljaWVzKHByb3BlcnR5Q2hhbmdlLm5ld1ZhbHVlLCBwcm9wZXJ0eUNoYW5nZS5yZXNvdXJjZUxvZ2ljYWxJZCkpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlYWRSZXNvdXJjZUNoYW5nZShyZXNvdXJjZUNoYW5nZTogUmVzb3VyY2VDaGFuZ2UpIHtcbiAgICBzd2l0Y2ggKHJlc291cmNlQ2hhbmdlLnNjcnV0aW55VHlwZSkge1xuICAgICAgY2FzZSBjZm5zcGVjLnNjaGVtYS5SZXNvdXJjZVNjcnV0aW55VHlwZS5JZGVudGl0eVBvbGljeVJlc291cmNlOlxuICAgICAgICAvLyBBV1M6OklBTTo6UG9saWN5XG4gICAgICAgIHRoaXMuc3RhdGVtZW50cy5hZGRPbGQoLi4udGhpcy5yZWFkSWRlbnRpdHlQb2xpY3lSZXNvdXJjZShyZXNvdXJjZUNoYW5nZS5vbGRQcm9wZXJ0aWVzKSk7XG4gICAgICAgIHRoaXMuc3RhdGVtZW50cy5hZGROZXcoLi4udGhpcy5yZWFkSWRlbnRpdHlQb2xpY3lSZXNvdXJjZShyZXNvdXJjZUNoYW5nZS5uZXdQcm9wZXJ0aWVzKSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBjZm5zcGVjLnNjaGVtYS5SZXNvdXJjZVNjcnV0aW55VHlwZS5SZXNvdXJjZVBvbGljeVJlc291cmNlOlxuICAgICAgICAvLyBBV1M6Oio6OntCdWNrZXQsUXVldWUsVG9waWN9UG9saWN5XG4gICAgICAgIHRoaXMuc3RhdGVtZW50cy5hZGRPbGQoLi4udGhpcy5yZWFkUmVzb3VyY2VQb2xpY3lSZXNvdXJjZShyZXNvdXJjZUNoYW5nZS5vbGRQcm9wZXJ0aWVzKSk7XG4gICAgICAgIHRoaXMuc3RhdGVtZW50cy5hZGROZXcoLi4udGhpcy5yZWFkUmVzb3VyY2VQb2xpY3lSZXNvdXJjZShyZXNvdXJjZUNoYW5nZS5uZXdQcm9wZXJ0aWVzKSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBjZm5zcGVjLnNjaGVtYS5SZXNvdXJjZVNjcnV0aW55VHlwZS5MYW1iZGFQZXJtaXNzaW9uOlxuICAgICAgICB0aGlzLnN0YXRlbWVudHMuYWRkT2xkKC4uLnRoaXMucmVhZExhbWJkYVN0YXRlbWVudHMocmVzb3VyY2VDaGFuZ2Uub2xkUHJvcGVydGllcykpO1xuICAgICAgICB0aGlzLnN0YXRlbWVudHMuYWRkTmV3KC4uLnRoaXMucmVhZExhbWJkYVN0YXRlbWVudHMocmVzb3VyY2VDaGFuZ2UubmV3UHJvcGVydGllcykpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUGFyc2UgYSBsaXN0IG9mIHBvbGljaWVzIG9uIGFuIGlkZW50aXR5XG4gICAqL1xuICBwcml2YXRlIHJlYWRJZGVudGl0eVBvbGljaWVzKHBvbGljaWVzOiBhbnksIGxvZ2ljYWxJZDogc3RyaW5nKTogU3RhdGVtZW50W10ge1xuICAgIGlmIChwb2xpY2llcyA9PT0gdW5kZWZpbmVkIHx8ICFBcnJheS5pc0FycmF5KHBvbGljaWVzKSkgeyByZXR1cm4gW107IH1cblxuICAgIGNvbnN0IGFwcGxpZXNUb1ByaW5jaXBhbCA9ICdBV1M6JHsnICsgbG9naWNhbElkICsgJ30nO1xuXG4gICAgcmV0dXJuIGZsYXRNYXAocG9saWNpZXMsIChwb2xpY3k6IGFueSkgPT4ge1xuICAgICAgLy8gY2hlY2sgaWYgdGhlIFBvbGljeSBpdHNlbGYgaXMgbm90IGFuIGludHJpbnNpYywgbGlrZSBhbiBGbjo6SWZcbiAgICAgIGNvbnN0IHVucGFyc2VkU3RhdGVtZW50ID0gcG9saWN5LlBvbGljeURvY3VtZW50Py5TdGF0ZW1lbnRcbiAgICAgICAgPyBwb2xpY3kuUG9saWN5RG9jdW1lbnQuU3RhdGVtZW50XG4gICAgICAgIDogcG9saWN5O1xuICAgICAgcmV0dXJuIGRlZmF1bHRQcmluY2lwYWwoYXBwbGllc1RvUHJpbmNpcGFsLCBwYXJzZVN0YXRlbWVudHMocmVuZGVySW50cmluc2ljcyh1bnBhcnNlZFN0YXRlbWVudCkpKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJzZSBhbiBJQU06OlBvbGljeSByZXNvdXJjZVxuICAgKi9cbiAgcHJpdmF0ZSByZWFkSWRlbnRpdHlQb2xpY3lSZXNvdXJjZShwcm9wZXJ0aWVzOiBhbnkpOiBTdGF0ZW1lbnRbXSB7XG4gICAgaWYgKHByb3BlcnRpZXMgPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gW107IH1cblxuICAgIHByb3BlcnRpZXMgPSByZW5kZXJJbnRyaW5zaWNzKHByb3BlcnRpZXMpO1xuXG4gICAgY29uc3QgcHJpbmNpcGFscyA9IChwcm9wZXJ0aWVzLkdyb3VwcyB8fCBbXSkuY29uY2F0KHByb3BlcnRpZXMuVXNlcnMgfHwgW10pLmNvbmNhdChwcm9wZXJ0aWVzLlJvbGVzIHx8IFtdKTtcbiAgICByZXR1cm4gZmxhdE1hcChwcmluY2lwYWxzLCAocHJpbmNpcGFsOiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IHJlZiA9ICdBV1M6JyArIHByaW5jaXBhbDtcbiAgICAgIHJldHVybiBkZWZhdWx0UHJpbmNpcGFsKHJlZiwgcGFyc2VTdGF0ZW1lbnRzKHByb3BlcnRpZXMuUG9saWN5RG9jdW1lbnQuU3RhdGVtZW50KSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHJlYWRSZXNvdXJjZVN0YXRlbWVudHMocG9saWN5OiBhbnksIGxvZ2ljYWxJZDogc3RyaW5nKTogU3RhdGVtZW50W10ge1xuICAgIGlmIChwb2xpY3kgPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gW107IH1cblxuICAgIGNvbnN0IGFwcGxpZXNUb1Jlc291cmNlID0gJyR7JyArIGxvZ2ljYWxJZCArICcuQXJufSc7XG4gICAgcmV0dXJuIGRlZmF1bHRSZXNvdXJjZShhcHBsaWVzVG9SZXNvdXJjZSwgcGFyc2VTdGF0ZW1lbnRzKHJlbmRlckludHJpbnNpY3MocG9saWN5LlN0YXRlbWVudCkpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJzZSBhbiBBV1M6Oio6OntCdWNrZXQsVG9waWMsUXVldWV9cG9saWN5XG4gICAqL1xuICBwcml2YXRlIHJlYWRSZXNvdXJjZVBvbGljeVJlc291cmNlKHByb3BlcnRpZXM6IGFueSk6IFN0YXRlbWVudFtdIHtcbiAgICBpZiAocHJvcGVydGllcyA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiBbXTsgfVxuXG4gICAgcHJvcGVydGllcyA9IHJlbmRlckludHJpbnNpY3MocHJvcGVydGllcyk7XG5cbiAgICBjb25zdCBwb2xpY3lLZXlzID0gT2JqZWN0LmtleXMocHJvcGVydGllcykuZmlsdGVyKGtleSA9PiBrZXkuaW5kZXhPZignUG9saWN5JykgPiAtMSk7XG5cbiAgICAvLyBGaW5kIHRoZSBrZXkgdGhhdCBpZGVudGlmaWVzIHRoZSByZXNvdXJjZShzKSB0aGlzIHBvbGljeSBhcHBsaWVzIHRvXG4gICAgY29uc3QgcmVzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMocHJvcGVydGllcykuZmlsdGVyKGtleSA9PiAhcG9saWN5S2V5cy5pbmNsdWRlcyhrZXkpICYmICFrZXkuZW5kc1dpdGgoJ05hbWUnKSk7XG4gICAgbGV0IHJlc291cmNlcyA9IHJlc291cmNlS2V5cy5sZW5ndGggPT09IDEgPyBwcm9wZXJ0aWVzW3Jlc291cmNlS2V5c1swXV0gOiBbJz8/PyddO1xuXG4gICAgLy8gRm9yIHNvbWUgcmVzb3VyY2VzLCB0aGlzIGlzIGEgc2luZ2xldG9uIHN0cmluZywgZm9yIHNvbWUgaXQncyBhbiBhcnJheVxuICAgIGlmICghQXJyYXkuaXNBcnJheShyZXNvdXJjZXMpKSB7XG4gICAgICByZXNvdXJjZXMgPSBbcmVzb3VyY2VzXTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmxhdE1hcChyZXNvdXJjZXMsIChyZXNvdXJjZTogc3RyaW5nKSA9PiB7XG4gICAgICByZXR1cm4gZGVmYXVsdFJlc291cmNlKHJlc291cmNlLCBwYXJzZVN0YXRlbWVudHMocHJvcGVydGllc1twb2xpY3lLZXlzWzBdXS5TdGF0ZW1lbnQpKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZE1hbmFnZWRQb2xpY2llcyhwb2xpY3lBcm5zOiBhbnksIGxvZ2ljYWxJZDogc3RyaW5nKTogTWFuYWdlZFBvbGljeUF0dGFjaG1lbnRbXSB7XG4gICAgaWYgKCFwb2xpY3lBcm5zKSB7IHJldHVybiBbXTsgfVxuXG4gICAgY29uc3QgcmVwID0gJyR7JyArIGxvZ2ljYWxJZCArICd9JztcbiAgICByZXR1cm4gTWFuYWdlZFBvbGljeUF0dGFjaG1lbnQucGFyc2VNYW5hZ2VkUG9saWNpZXMocmVwLCByZW5kZXJJbnRyaW5zaWNzKHBvbGljeUFybnMpKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZExhbWJkYVN0YXRlbWVudHMocHJvcGVydGllcz86IFByb3BlcnR5TWFwKTogU3RhdGVtZW50W10ge1xuICAgIGlmICghcHJvcGVydGllcykgeyByZXR1cm4gW107IH1cblxuICAgIHJldHVybiBbcGFyc2VMYW1iZGFQZXJtaXNzaW9uKHJlbmRlckludHJpbnNpY3MocHJvcGVydGllcykpXTtcbiAgfVxufVxuXG4vKipcbiAqIFNldCBhbiB1bmRlZmluZWQgb3Igd2lsZGNhcmRlZCBwcmluY2lwYWwgb24gdGhlc2Ugc3RhdGVtZW50c1xuICovXG5mdW5jdGlvbiBkZWZhdWx0UHJpbmNpcGFsKHByaW5jaXBhbDogc3RyaW5nLCBzdGF0ZW1lbnRzOiBTdGF0ZW1lbnRbXSkge1xuICBzdGF0ZW1lbnRzLmZvckVhY2gocyA9PiBzLnByaW5jaXBhbHMucmVwbGFjZUVtcHR5KHByaW5jaXBhbCkpO1xuICBzdGF0ZW1lbnRzLmZvckVhY2gocyA9PiBzLnByaW5jaXBhbHMucmVwbGFjZVN0YXIocHJpbmNpcGFsKSk7XG4gIHJldHVybiBzdGF0ZW1lbnRzO1xufVxuXG4vKipcbiAqIFNldCBhbiB1bmRlZmluZWQgb3Igd2lsZGNhcmRlZCByZXNvdXJjZSBvbiB0aGVzZSBzdGF0ZW1lbnRzXG4gKi9cbmZ1bmN0aW9uIGRlZmF1bHRSZXNvdXJjZShyZXNvdXJjZTogc3RyaW5nLCBzdGF0ZW1lbnRzOiBTdGF0ZW1lbnRbXSkge1xuICBzdGF0ZW1lbnRzLmZvckVhY2gocyA9PiBzLnJlc291cmNlcy5yZXBsYWNlRW1wdHkocmVzb3VyY2UpKTtcbiAgc3RhdGVtZW50cy5mb3JFYWNoKHMgPT4gcy5yZXNvdXJjZXMucmVwbGFjZVN0YXIocmVzb3VyY2UpKTtcbiAgcmV0dXJuIHN0YXRlbWVudHM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSWFtQ2hhbmdlc0pzb24ge1xuICBzdGF0ZW1lbnRBZGRpdGlvbnM/OiBBcnJheTxNYXliZVBhcnNlZDxTdGF0ZW1lbnRKc29uPj47XG4gIHN0YXRlbWVudFJlbW92YWxzPzogQXJyYXk8TWF5YmVQYXJzZWQ8U3RhdGVtZW50SnNvbj4+O1xuICBtYW5hZ2VkUG9saWN5QWRkaXRpb25zPzogQXJyYXk8TWF5YmVQYXJzZWQ8TWFuYWdlZFBvbGljeUpzb24+PjtcbiAgbWFuYWdlZFBvbGljeVJlbW92YWxzPzogQXJyYXk8TWF5YmVQYXJzZWQ8TWFuYWdlZFBvbGljeUpzb24+Pjtcbn1cbiJdfQ==
+
+/***/ }),
+
+/***/ 67116:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.ManagedPolicyAttachment = void 0;
+const maybe_parsed_1 = __nccwpck_require__(90544);
+class ManagedPolicyAttachment {
+ static parseManagedPolicies(identityArn, arns) {
+ return typeof arns === 'string'
+ ? [new ManagedPolicyAttachment(identityArn, arns)]
+ : arns.map((arn) => new ManagedPolicyAttachment(identityArn, arn));
+ }
+ constructor(identityArn, managedPolicyArn) {
+ this.identityArn = identityArn;
+ this.managedPolicyArn = managedPolicyArn;
+ }
+ equal(other) {
+ return this.identityArn === other.identityArn
+ && this.managedPolicyArn === other.managedPolicyArn;
+ }
+ /**
+ * Return a machine-readable version of the changes.
+ * This is only used in tests.
+ *
+ * @internal
+ */
+ _toJson() {
+ return (0, maybe_parsed_1.mkParsed)({
+ identityArn: this.identityArn,
+ managedPolicyArn: this.managedPolicyArn,
+ });
+ }
+}
+exports.ManagedPolicyAttachment = ManagedPolicyAttachment;
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFuYWdlZC1wb2xpY3kuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJtYW5hZ2VkLXBvbGljeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx1REFBNkQ7QUFFN0QsTUFBYSx1QkFBdUI7SUFDM0IsTUFBTSxDQUFDLG9CQUFvQixDQUFDLFdBQW1CLEVBQUUsSUFBdUI7UUFDN0UsT0FBTyxPQUFPLElBQUksS0FBSyxRQUFRO1lBQzdCLENBQUMsQ0FBQyxDQUFDLElBQUksdUJBQXVCLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ2xELENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBVyxFQUFFLEVBQUUsQ0FBQyxJQUFJLHVCQUF1QixDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQy9FLENBQUM7SUFFRCxZQUE0QixXQUFtQixFQUFrQixnQkFBd0I7UUFBN0QsZ0JBQVcsR0FBWCxXQUFXLENBQVE7UUFBa0IscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFRO0lBQ3pGLENBQUM7SUFFTSxLQUFLLENBQUMsS0FBOEI7UUFDekMsT0FBTyxJQUFJLENBQUMsV0FBVyxLQUFLLEtBQUssQ0FBQyxXQUFXO2VBQ3RDLElBQUksQ0FBQyxnQkFBZ0IsS0FBSyxLQUFLLENBQUMsZ0JBQWdCLENBQUM7SUFDMUQsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksT0FBTztRQUNaLE9BQU8sSUFBQSx1QkFBUSxFQUFDO1lBQ2QsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXO1lBQzdCLGdCQUFnQixFQUFFLElBQUksQ0FBQyxnQkFBZ0I7U0FDeEMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBM0JELDBEQTJCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1heWJlUGFyc2VkLCBta1BhcnNlZCB9IGZyb20gJy4uL2RpZmYvbWF5YmUtcGFyc2VkJztcblxuZXhwb3J0IGNsYXNzIE1hbmFnZWRQb2xpY3lBdHRhY2htZW50IHtcbiAgcHVibGljIHN0YXRpYyBwYXJzZU1hbmFnZWRQb2xpY2llcyhpZGVudGl0eUFybjogc3RyaW5nLCBhcm5zOiBzdHJpbmcgfCBzdHJpbmdbXSk6IE1hbmFnZWRQb2xpY3lBdHRhY2htZW50W10ge1xuICAgIHJldHVybiB0eXBlb2YgYXJucyA9PT0gJ3N0cmluZydcbiAgICAgID8gW25ldyBNYW5hZ2VkUG9saWN5QXR0YWNobWVudChpZGVudGl0eUFybiwgYXJucyldXG4gICAgICA6IGFybnMubWFwKChhcm46IHN0cmluZykgPT4gbmV3IE1hbmFnZWRQb2xpY3lBdHRhY2htZW50KGlkZW50aXR5QXJuLCBhcm4pKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyByZWFkb25seSBpZGVudGl0eUFybjogc3RyaW5nLCBwdWJsaWMgcmVhZG9ubHkgbWFuYWdlZFBvbGljeUFybjogc3RyaW5nKSB7XG4gIH1cblxuICBwdWJsaWMgZXF1YWwob3RoZXI6IE1hbmFnZWRQb2xpY3lBdHRhY2htZW50KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaWRlbnRpdHlBcm4gPT09IG90aGVyLmlkZW50aXR5QXJuXG4gICAgICAgICYmIHRoaXMubWFuYWdlZFBvbGljeUFybiA9PT0gb3RoZXIubWFuYWdlZFBvbGljeUFybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSBtYWNoaW5lLXJlYWRhYmxlIHZlcnNpb24gb2YgdGhlIGNoYW5nZXMuXG4gICAqIFRoaXMgaXMgb25seSB1c2VkIGluIHRlc3RzLlxuICAgKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHB1YmxpYyBfdG9Kc29uKCk6IE1heWJlUGFyc2VkPE1hbmFnZWRQb2xpY3lKc29uPiB7XG4gICAgcmV0dXJuIG1rUGFyc2VkKHtcbiAgICAgIGlkZW50aXR5QXJuOiB0aGlzLmlkZW50aXR5QXJuLFxuICAgICAgbWFuYWdlZFBvbGljeUFybjogdGhpcy5tYW5hZ2VkUG9saWN5QXJuLFxuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWFuYWdlZFBvbGljeUpzb24ge1xuICBpZGVudGl0eUFybjogc3RyaW5nO1xuICBtYW5hZ2VkUG9saWN5QXJuOiBzdHJpbmc7XG59XG4iXX0=
+
+/***/ }),
+
+/***/ 68434:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.renderCondition = exports.Effect = exports.Targets = exports.parseLambdaPermission = exports.parseStatements = exports.Statement = void 0;
+const maybe_parsed_1 = __nccwpck_require__(90544);
+const util_1 = __nccwpck_require__(72341);
+// namespace object imports won't work in the bundle for function exports
+// eslint-disable-next-line @typescript-eslint/no-require-imports
+const deepEqual = __nccwpck_require__(28206);
+class Statement {
+ constructor(statement) {
+ if (typeof statement === 'string') {
+ this.sid = undefined;
+ this.effect = Effect.Unknown;
+ this.resources = new Targets({}, '', '');
+ this.actions = new Targets({}, '', '');
+ this.principals = new Targets({}, '', '');
+ this.condition = undefined;
+ this.serializedIntrinsic = statement;
+ }
+ else {
+ this.sid = expectString(statement.Sid);
+ this.effect = expectEffect(statement.Effect);
+ this.resources = new Targets(statement, 'Resource', 'NotResource');
+ this.actions = new Targets(statement, 'Action', 'NotAction');
+ this.principals = new Targets(statement, 'Principal', 'NotPrincipal');
+ this.condition = statement.Condition;
+ this.serializedIntrinsic = undefined;
+ }
+ }
+ /**
+ * Whether this statement is equal to the other statement
+ */
+ equal(other) {
+ return (this.sid === other.sid
+ && this.effect === other.effect
+ && this.serializedIntrinsic === other.serializedIntrinsic
+ && this.resources.equal(other.resources)
+ && this.actions.equal(other.actions)
+ && this.principals.equal(other.principals)
+ && deepEqual(this.condition, other.condition));
+ }
+ render() {
+ return this.serializedIntrinsic
+ ? {
+ resource: this.serializedIntrinsic,
+ effect: '',
+ action: '',
+ principal: this.principals.render(),
+ condition: '',
+ }
+ : {
+ resource: this.resources.render(),
+ effect: this.effect,
+ action: this.actions.render(),
+ principal: this.principals.render(),
+ condition: renderCondition(this.condition),
+ };
+ }
+ /**
+ * Return a machine-readable version of the changes.
+ * This is only used in tests.
+ *
+ * @internal
+ */
+ _toJson() {
+ return this.serializedIntrinsic
+ ? (0, maybe_parsed_1.mkUnparseable)(this.serializedIntrinsic)
+ : (0, maybe_parsed_1.mkParsed)((0, util_1.deepRemoveUndefined)({
+ sid: this.sid,
+ effect: this.effect,
+ resources: this.resources._toJson(),
+ principals: this.principals._toJson(),
+ actions: this.actions._toJson(),
+ condition: this.condition,
+ }));
+ }
+ /**
+ * Whether this is a negative statement
+ *
+ * A statement is negative if any of its targets are negative, inverted
+ * if the Effect is Deny.
+ */
+ get isNegativeStatement() {
+ const notTarget = this.actions.not || this.principals.not || this.resources.not;
+ return this.effect === Effect.Allow ? notTarget : !notTarget;
+ }
+}
+exports.Statement = Statement;
+/**
+ * Parse a list of statements from undefined, a Statement, or a list of statements
+ */
+function parseStatements(x) {
+ if (x === undefined) {
+ x = [];
+ }
+ if (!Array.isArray(x)) {
+ x = [x];
+ }
+ return x.map((s) => new Statement(s));
+}
+exports.parseStatements = parseStatements;
+/**
+ * Parse a Statement from a Lambda::Permission object
+ *
+ * This is actually what Lambda adds to the policy document if you call AddPermission.
+ */
+function parseLambdaPermission(x) {
+ // Construct a statement from
+ const statement = {
+ Effect: 'Allow',
+ Action: x.Action,
+ Resource: x.FunctionName,
+ };
+ if (x.Principal !== undefined) {
+ if (x.Principal === '*') {
+ // *
+ statement.Principal = '*';
+ }
+ else if (/^\d{12}$/.test(x.Principal)) {
+ // Account number
+ // eslint-disable-next-line @aws-cdk/no-literal-partition
+ statement.Principal = { AWS: `arn:aws:iam::${x.Principal}:root` };
+ }
+ else {
+ // Assume it's a service principal
+ // We might get this wrong vs. the previous one for tokens. Nothing to be done
+ // about that. It's only for human readable consumption after all.
+ statement.Principal = { Service: x.Principal };
+ }
+ }
+ if (x.SourceArn !== undefined) {
+ if (statement.Condition === undefined) {
+ statement.Condition = {};
+ }
+ statement.Condition.ArnLike = { 'AWS:SourceArn': x.SourceArn };
+ }
+ if (x.SourceAccount !== undefined) {
+ if (statement.Condition === undefined) {
+ statement.Condition = {};
+ }
+ statement.Condition.StringEquals = { 'AWS:SourceAccount': x.SourceAccount };
+ }
+ if (x.EventSourceToken !== undefined) {
+ if (statement.Condition === undefined) {
+ statement.Condition = {};
+ }
+ statement.Condition.StringEquals = { 'lambda:EventSourceToken': x.EventSourceToken };
+ }
+ return new Statement(statement);
+}
+exports.parseLambdaPermission = parseLambdaPermission;
+/**
+ * Targets for a field
+ */
+class Targets {
+ constructor(statement, positiveKey, negativeKey) {
+ if (negativeKey in statement) {
+ this.values = forceListOfStrings(statement[negativeKey]);
+ this.not = true;
+ }
+ else {
+ this.values = forceListOfStrings(statement[positiveKey]);
+ this.not = false;
+ }
+ this.values.sort();
+ }
+ get empty() {
+ return this.values.length === 0;
+ }
+ /**
+ * Whether this set of targets is equal to the other set of targets
+ */
+ equal(other) {
+ return this.not === other.not && deepEqual(this.values.sort(), other.values.sort());
+ }
+ /**
+ * If the current value set is empty, put this in it
+ */
+ replaceEmpty(replacement) {
+ if (this.empty) {
+ this.values.push(replacement);
+ }
+ }
+ /**
+ * If the actions contains a '*', replace with this string.
+ */
+ replaceStar(replacement) {
+ for (let i = 0; i < this.values.length; i++) {
+ if (this.values[i] === '*') {
+ this.values[i] = replacement;
+ }
+ }
+ this.values.sort();
+ }
+ /**
+ * Render into a summary table cell
+ */
+ render() {
+ return this.not
+ ? this.values.map(s => `NOT ${s}`).join('\n')
+ : this.values.join('\n');
+ }
+ /**
+ * Return a machine-readable version of the changes.
+ * This is only used in tests.
+ *
+ * @internal
+ */
+ _toJson() {
+ return { not: this.not, values: this.values };
+ }
+}
+exports.Targets = Targets;
+var Effect;
+(function (Effect) {
+ Effect["Unknown"] = "Unknown";
+ Effect["Allow"] = "Allow";
+ Effect["Deny"] = "Deny";
+})(Effect || (exports.Effect = Effect = {}));
+function expectString(x) {
+ return typeof x === 'string' ? x : undefined;
+}
+function expectEffect(x) {
+ if (x === Effect.Allow || x === Effect.Deny) {
+ return x;
+ }
+ return Effect.Unknown;
+}
+function forceListOfStrings(x) {
+ if (typeof x === 'string') {
+ return [x];
+ }
+ if (typeof x === 'undefined' || x === null) {
+ return [];
+ }
+ if (Array.isArray(x)) {
+ return x.map(e => forceListOfStrings(e).join(','));
+ }
+ if (typeof x === 'object' && x !== null) {
+ const ret = [];
+ for (const [key, value] of Object.entries(x)) {
+ ret.push(...forceListOfStrings(value).map(s => `${key}:${s}`));
+ }
+ return ret;
+ }
+ return [`${x}`];
+}
+/**
+ * Render the Condition column
+ */
+function renderCondition(condition) {
+ if (!condition || Object.keys(condition).length === 0) {
+ return '';
+ }
+ const jsonRepresentation = JSON.stringify(condition, undefined, 2);
+ // The JSON representation looks like this:
+ //
+ // {
+ // "ArnLike": {
+ // "AWS:SourceArn": "${MyTopic86869434}"
+ // }
+ // }
+ //
+ // We can make it more compact without losing information by getting rid of the outermost braces
+ // and the indentation.
+ const lines = jsonRepresentation.split('\n');
+ return lines.slice(1, lines.length - 1).map(s => s.slice(2)).join('\n');
+}
+exports.renderCondition = renderCondition;
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGVtZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsic3RhdGVtZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHVEQUE0RTtBQUM1RSxrQ0FBOEM7QUFFOUMseUVBQXlFO0FBQ3pFLGlFQUFpRTtBQUNqRSxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FBQztBQUU3QyxNQUFhLFNBQVM7SUFpQ3BCLFlBQVksU0FBOEI7UUFDeEMsSUFBSSxPQUFPLFNBQVMsS0FBSyxRQUFRLEVBQUU7WUFDakMsSUFBSSxDQUFDLEdBQUcsR0FBRyxTQUFTLENBQUM7WUFDckIsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDO1lBQzdCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxPQUFPLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUN6QyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksT0FBTyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDdkMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLE9BQU8sQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQzFDLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO1lBQzNCLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxTQUFTLENBQUM7U0FDdEM7YUFBTTtZQUNMLElBQUksQ0FBQyxHQUFHLEdBQUcsWUFBWSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN2QyxJQUFJLENBQUMsTUFBTSxHQUFHLFlBQVksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDN0MsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLE9BQU8sQ0FBQyxTQUFTLEVBQUUsVUFBVSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1lBQ25FLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxPQUFP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QUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMxRSxDQUFDO0FBaEJELDBDQWdCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1heWJlUGFyc2VkLCBta1BhcnNlZCwgbWtVbnBhcnNlYWJsZSB9IGZyb20gJy4uL2RpZmYvbWF5YmUtcGFyc2VkJztcbmltcG9ydCB7IGRlZXBSZW1vdmVVbmRlZmluZWQgfSBmcm9tICcuLi91dGlsJztcblxuLy8gbmFtZXNwYWNlIG9iamVjdCBpbXBvcnRzIHdvbid0IHdvcmsgaW4gdGhlIGJ1bmRsZSBmb3IgZnVuY3Rpb24gZXhwb3J0c1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1yZXF1aXJlLWltcG9ydHNcbmNvbnN0IGRlZXBFcXVhbCA9IHJlcXVpcmUoJ2Zhc3QtZGVlcC1lcXVhbCcpO1xuXG5leHBvcnQgY2xhc3MgU3RhdGVtZW50IHtcbiAgLyoqXG4gICAqIFN0YXRlbWVudCBJRFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHNpZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBTdGF0ZW1lbnQgZWZmZWN0XG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZWZmZWN0OiBFZmZlY3Q7XG5cbiAgLyoqXG4gICAqIFJlc291cmNlc1xuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHJlc291cmNlczogVGFyZ2V0cztcblxuICAvKipcbiAgICogUHJpbmNpcGFsc1xuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHByaW5jaXBhbHM6IFRhcmdldHM7XG5cbiAgLyoqXG4gICAqIEFjdGlvbnNcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBhY3Rpb25zOiBUYXJnZXRzO1xuXG4gIC8qKlxuICAgKiBPYmplY3Qgd2l0aCBjb25kaXRpb25zXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgY29uZGl0aW9uPzogYW55O1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgc2VyaWFsaXplZEludHJpbnNpYzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0cnVjdG9yKHN0YXRlbWVudDogVW5rbm93bk1hcCB8IHN0cmluZykge1xuICAgIGlmICh0eXBlb2Ygc3RhdGVtZW50ID09PSAnc3RyaW5nJykge1xuICAgICAgdGhpcy5zaWQgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLmVmZmVjdCA9IEVmZmVjdC5Vbmtub3duO1xuICAgICAgdGhpcy5yZXNvdXJjZXMgPSBuZXcgVGFyZ2V0cyh7fSwgJycsICcnKTtcbiAgICAgIHRoaXMuYWN0aW9ucyA9IG5ldyBUYXJnZXRzKHt9LCAnJywgJycpO1xuICAgICAgdGhpcy5wcmluY2lwYWxzID0gbmV3IFRhcmdldHMoe30sICcnLCAnJyk7XG4gICAgICB0aGlzLmNvbmRpdGlvbiA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuc2VyaWFsaXplZEludHJpbnNpYyA9IHN0YXRlbWVudDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zaWQgPSBleHBlY3RTdHJpbmcoc3RhdGVtZW50LlNpZCk7XG4gICAgICB0aGlzLmVmZmVjdCA9IGV4cGVjdEVmZmVjdChzdGF0ZW1lbnQuRWZmZWN0KTtcbiAgICAgIHRoaXMucmVzb3VyY2VzID0gbmV3IFRhcmdldHMoc3RhdGVtZW50LCAnUmVzb3VyY2UnLCAnTm90UmVzb3VyY2UnKTtcbiAgICAgIHRoaXMuYWN0aW9ucyA9IG5ldyBUYXJnZXRzKHN0YXRlbWVudCwgJ0FjdGlvbicsICdOb3RBY3Rpb24nKTtcbiAgICAgIHRoaXMucHJpbmNpcGFscyA9IG5ldyBUYXJnZXRzKHN0YXRlbWVudCwgJ1ByaW5jaXBhbCcsICdOb3RQcmluY2lwYWwnKTtcbiAgICAgIHRoaXMuY29uZGl0aW9uID0gc3RhdGVtZW50LkNvbmRpdGlvbjtcbiAgICAgIHRoaXMuc2VyaWFsaXplZEludHJpbnNpYyA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciB0aGlzIHN0YXRlbWVudCBpcyBlcXVhbCB0byB0aGUgb3RoZXIgc3RhdGVtZW50XG4gICAqL1xuICBwdWJsaWMgZXF1YWwob3RoZXI6IFN0YXRlbWVudCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAodGhpcy5zaWQgPT09IG90aGVyLnNpZFxuICAgICAgJiYgdGhpcy5lZmZlY3QgPT09IG90aGVyLmVmZmVjdFxuICAgICAgJiYgdGhpcy5zZXJpYWxpemVkSW50cmluc2ljID09PSBvdGhlci5zZXJpYWxpemVkSW50cmluc2ljXG4gICAgICAmJiB0aGlzLnJlc291cmNlcy5lcXVhbChvdGhlci5yZXNvdXJjZXMpXG4gICAgICAmJiB0aGlzLmFjdGlvbnMuZXF1YWwob3RoZXIuYWN0aW9ucylcbiAgICAgICYmIHRoaXMucHJpbmNpcGFscy5lcXVhbChvdGhlci5wcmluY2lwYWxzKVxuICAgICAgJiYgZGVlcEVxdWFsKHRoaXMuY29uZGl0aW9uLCBvdGhlci5jb25kaXRpb24pKTtcbiAgfVxuXG4gIHB1YmxpYyByZW5kZXIoKTogUmVuZGVyZWRTdGF0ZW1lbnQge1xuICAgIHJldHVybiB0aGlzLnNlcmlhbGl6ZWRJbnRyaW5zaWNcbiAgICAgID8ge1xuICAgICAgICByZXNvdXJjZTogdGhpcy5zZXJpYWxpemVkSW50cmluc2ljLFxuICAgICAgICBlZmZlY3Q6ICcnLFxuICAgICAgICBhY3Rpb246ICcnLFxuICAgICAgICBwcmluY2lwYWw6IHRoaXMucHJpbmNpcGFscy5yZW5kZXIoKSwgLy8gdGhlc2Ugd2lsbCBiZSByZXBsYWNlZCBieSB0aGUgY2FsbCB0byByZXBsYWNlRW1wdHkoKSBmcm9tIElhbUNoYW5nZXNcbiAgICAgICAgY29uZGl0aW9uOiAnJyxcbiAgICAgIH1cbiAgICAgIDoge1xuICAgICAgICByZXNvdXJjZTogdGhpcy5yZXNvdXJjZXMucmVuZGVyKCksXG4gICAgICAgIGVmZmVjdDogdGhpcy5lZmZlY3QsXG4gICAgICAgIGFjdGlvbjogdGhpcy5hY3Rpb25zLnJlbmRlcigpLFxuICAgICAgICBwcmluY2lwYWw6IHRoaXMucHJpbmNpcGFscy5yZW5kZXIoKSxcbiAgICAgICAgY29uZGl0aW9uOiByZW5kZXJDb25kaXRpb24odGhpcy5jb25kaXRpb24pLFxuICAgICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSBtYWNoaW5lLXJlYWRhYmxlIHZlcnNpb24gb2YgdGhlIGNoYW5nZXMuXG4gICAqIFRoaXMgaXMgb25seSB1c2VkIGluIHRlc3RzLlxuICAgKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHB1YmxpYyBfdG9Kc29uKCk6IE1heWJlUGFyc2VkPFN0YXRlbWVudEpzb24+IHtcbiAgICByZXR1cm4gdGhpcy5zZXJpYWxpemVkSW50cmluc2ljXG4gICAgICA/IG1rVW5wYXJzZWFibGUodGhpcy5zZXJpYWxpemVkSW50cmluc2ljKVxuICAgICAgOiBta1BhcnNlZChkZWVwUmVtb3ZlVW5kZWZpbmVkKHtcbiAgICAgICAgc2lkOiB0aGlzLnNpZCxcbiAgICAgICAgZWZmZWN0OiB0aGlzLmVmZmVjdCxcbiAgICAgICAgcmVzb3VyY2VzOiB0aGlzLnJlc291cmNlcy5fdG9Kc29uKCksXG4gICAgICAgIHByaW5jaXBhbHM6IHRoaXMucHJpbmNpcGFscy5fdG9Kc29uKCksXG4gICAgICAgIGFjdGlvbnM6IHRoaXMuYWN0aW9ucy5fdG9Kc29uKCksXG4gICAgICAgIGNvbmRpdGlvbjogdGhpcy5jb25kaXRpb24sXG4gICAgICB9KSk7XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciB0aGlzIGlzIGEgbmVnYXRpdmUgc3RhdGVtZW50XG4gICAqXG4gICAqIEEgc3RhdGVtZW50IGlzIG5lZ2F0aXZlIGlmIGFueSBvZiBpdHMgdGFyZ2V0cyBhcmUgbmVnYXRpdmUsIGludmVydGVkXG4gICAqIGlmIHRoZSBFZmZlY3QgaXMgRGVueS5cbiAgICovXG4gIHB1YmxpYyBnZXQgaXNOZWdhdGl2ZVN0YXRlbWVudCgpOiBib29sZWFuIHtcbiAgICBjb25zdCBub3RUYXJnZXQgPSB0aGlzLmFjdGlvbnMubm90IHx8IHRoaXMucHJpbmNpcGFscy5ub3QgfHwgdGhpcy5yZXNvdXJjZXMubm90O1xuICAgIHJldHVybiB0aGlzLmVmZmVjdCA9PT0gRWZmZWN0LkFsbG93ID8gbm90VGFyZ2V0IDogIW5vdFRhcmdldDtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlbmRlcmVkU3RhdGVtZW50IHtcbiAgcmVhZG9ubHkgcmVzb3VyY2U6IHN0cmluZztcbiAgcmVhZG9ubHkgZWZmZWN0OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGFjdGlvbjogc3RyaW5nO1xuICByZWFkb25seSBwcmluY2lwYWw6IHN0cmluZztcbiAgcmVhZG9ubHkgY29uZGl0aW9uOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RhdGVtZW50SnNvbiB7XG4gIHNpZD86IHN0cmluZztcbiAgZWZmZWN0OiBzdHJpbmc7XG4gIHJlc291cmNlczogVGFyZ2V0c0pzb247XG4gIGFjdGlvbnM6IFRhcmdldHNKc29uO1xuICBwcmluY2lwYWxzOiBUYXJnZXRzSnNvbjtcbiAgY29uZGl0aW9uPzogYW55O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRhcmdldHNKc29uIHtcbiAgbm90OiBib29sZWFuO1xuICB2YWx1ZXM6IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIFBhcnNlIGEgbGlzdCBvZiBzdGF0ZW1lbnRzIGZyb20gdW5kZWZpbmVkLCBhIFN0YXRlbWVudCwgb3IgYSBsaXN0IG9mIHN0YXRlbWVudHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlU3RhdGVtZW50cyh4OiBhbnkpOiBTdGF0ZW1lbnRbXSB7XG4gIGlmICh4ID09PSB1bmRlZmluZWQpIHsgeCA9IFtdOyB9XG4gIGlmICghQXJyYXkuaXNBcnJheSh4KSkgeyB4ID0gW3hdOyB9XG4gIHJldHVybiB4Lm1hcCgoczogYW55KSA9PiBuZXcgU3RhdGVtZW50KHMpKTtcbn1cblxuLyoqXG4gKiBQYXJzZSBhIFN0YXRlbWVudCBmcm9tIGEgTGFtYmRhOjpQZXJtaXNzaW9uIG9iamVjdFxuICpcbiAqIFRoaXMgaXMgYWN0dWFsbHkgd2hhdCBMYW1iZGEgYWRkcyB0byB0aGUgcG9saWN5IGRvY3VtZW50IGlmIHlvdSBjYWxsIEFkZFBlcm1pc3Npb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUxhbWJkYVBlcm1pc3Npb24oeDogYW55KTogU3RhdGVtZW50IHtcbiAgLy8gQ29uc3RydWN0IGEgc3RhdGVtZW50IGZyb21cbiAgY29uc3Qgc3RhdGVtZW50OiBhbnkgPSB7XG4gICAgRWZmZWN0OiAnQWxsb3cnLFxuICAgIEFjdGlvbjogeC5BY3Rpb24sXG4gICAgUmVzb3VyY2U6IHguRnVuY3Rpb25OYW1lLFxuICB9O1xuXG4gIGlmICh4LlByaW5jaXBhbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKHguUHJpbmNpcGFsID09PSAnKicpIHtcbiAgICAgIC8vICpcbiAgICAgIHN0YXRlbWVudC5QcmluY2lwYWwgPSAnKic7XG4gICAgfSBlbHNlIGlmICgvXlxcZHsxMn0kLy50ZXN0KHguUHJpbmNpcGFsKSkge1xuICAgICAgLy8gQWNjb3VudCBudW1iZXJcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYXdzLWNkay9uby1saXRlcmFsLXBhcnRpdGlvblxuICAgICAgc3RhdGVtZW50LlByaW5jaXBhbCA9IHsgQVdTOiBgYXJuOmF3czppYW06OiR7eC5QcmluY2lwYWx9OnJvb3RgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEFzc3VtZSBpdCdzIGEgc2VydmljZSBwcmluY2lwYWxcbiAgICAgIC8vIFdlIG1pZ2h0IGdldCB0aGlzIHdyb25nIHZzLiB0aGUgcHJldmlvdXMgb25lIGZvciB0b2tlbnMuIE5vdGhpbmcgdG8gYmUgZG9uZVxuICAgICAgLy8gYWJvdXQgdGhhdC4gSXQncyBvbmx5IGZvciBodW1hbiByZWFkYWJsZSBjb25zdW1wdGlvbiBhZnRlciBhbGwuXG4gICAgICBzdGF0ZW1lbnQuUHJpbmNpcGFsID0geyBTZXJ2aWNlOiB4LlByaW5jaXBhbCB9O1xuICAgIH1cbiAgfVxuICBpZiAoeC5Tb3VyY2VBcm4gIT09IHVuZGVmaW5lZCkge1xuICAgIGlmIChzdGF0ZW1lbnQuQ29uZGl0aW9uID09PSB1bmRlZmluZWQpIHsgc3RhdGVtZW50LkNvbmRpdGlvbiA9IHt9OyB9XG4gICAgc3RhdGVtZW50LkNvbmRpdGlvbi5Bcm5MaWtlID0geyAnQVdTOlNvdXJjZUFybic6IHguU291cmNlQXJuIH07XG4gIH1cbiAgaWYgKHguU291cmNlQWNjb3VudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKHN0YXRlbWVudC5Db25kaXRpb24gPT09IHVuZGVmaW5lZCkgeyBzdGF0ZW1lbnQuQ29uZGl0aW9uID0ge307IH1cbiAgICBzdGF0ZW1lbnQuQ29uZGl0aW9uLlN0cmluZ0VxdWFscyA9IHsgJ0FXUzpTb3VyY2VBY2NvdW50JzogeC5Tb3VyY2VBY2NvdW50IH07XG4gIH1cbiAgaWYgKHguRXZlbnRTb3VyY2VUb2tlbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKHN0YXRlbWVudC5Db25kaXRpb24gPT09IHVuZGVmaW5lZCkgeyBzdGF0ZW1lbnQuQ29uZGl0aW9uID0ge307IH1cbiAgICBzdGF0ZW1lbnQuQ29uZGl0aW9uLlN0cmluZ0VxdWFscyA9IHsgJ2xhbWJkYTpFdmVudFNvdXJjZVRva2VuJzogeC5FdmVudFNvdXJjZVRva2VuIH07XG4gIH1cblxuICByZXR1cm4gbmV3IFN0YXRlbWVudChzdGF0ZW1lbnQpO1xufVxuXG4vKipcbiAqIFRhcmdldHMgZm9yIGEgZmllbGRcbiAqL1xuZXhwb3J0IGNsYXNzIFRhcmdldHMge1xuICAvKipcbiAgICogVGhlIHZhbHVlcyBvZiB0aGUgdGFyZ2V0c1xuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHZhbHVlczogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgcG9zaXRpdmUgb3IgbmVnYXRpdmUgbWF0Y2hlcnNcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBub3Q6IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3Ioc3RhdGVtZW50OiBVbmtub3duTWFwLCBwb3NpdGl2ZUtleTogc3RyaW5nLCBuZWdhdGl2ZUtleTogc3RyaW5nKSB7XG4gICAgaWYgKG5lZ2F0aXZlS2V5IGluIHN0YXRlbWVudCkge1xuICAgICAgdGhpcy52YWx1ZXMgPSBmb3JjZUxpc3RPZlN0cmluZ3Moc3RhdGVtZW50W25lZ2F0aXZlS2V5XSk7XG4gICAgICB0aGlzLm5vdCA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudmFsdWVzID0gZm9yY2VMaXN0T2ZTdHJpbmdzKHN0YXRlbWVudFtwb3NpdGl2ZUtleV0pO1xuICAgICAgdGhpcy5ub3QgPSBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy52YWx1ZXMuc29ydCgpO1xuICB9XG5cbiAgcHVibGljIGdldCBlbXB0eSgpIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZXMubGVuZ3RoID09PSAwO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhpcyBzZXQgb2YgdGFyZ2V0cyBpcyBlcXVhbCB0byB0aGUgb3RoZXIgc2V0IG9mIHRhcmdldHNcbiAgICovXG4gIHB1YmxpYyBlcXVhbChvdGhlcjogVGFyZ2V0cykge1xuICAgIHJldHVybiB0aGlzLm5vdCA9PT0gb3RoZXIubm90ICYmIGRlZXBFcXVhbCh0aGlzLnZhbHVlcy5zb3J0KCksIG90aGVyLnZhbHVlcy5zb3J0KCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIElmIHRoZSBjdXJyZW50IHZhbHVlIHNldCBpcyBlbXB0eSwgcHV0IHRoaXMgaW4gaXRcbiAgICovXG4gIHB1YmxpYyByZXBsYWNlRW1wdHkocmVwbGFjZW1lbnQ6IHN0cmluZykge1xuICAgIGlmICh0aGlzLmVtcHR5KSB7XG4gICAgICB0aGlzLnZhbHVlcy5wdXNoKHJlcGxhY2VtZW50KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSWYgdGhlIGFjdGlvbnMgY29udGFpbnMgYSAnKicsIHJlcGxhY2Ugd2l0aCB0aGlzIHN0cmluZy5cbiAgICovXG4gIHB1YmxpYyByZXBsYWNlU3RhcihyZXBsYWNlbWVudDogc3RyaW5nKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHRoaXMudmFsdWVzW2ldID09PSAnKicpIHtcbiAgICAgICAgdGhpcy52YWx1ZXNbaV0gPSByZXBsYWNlbWVudDtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy52YWx1ZXMuc29ydCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlciBpbnRvIGEgc3VtbWFyeSB0YWJsZSBjZWxsXG4gICAqL1xuICBwdWJsaWMgcmVuZGVyKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMubm90XG4gICAgICA/IHRoaXMudmFsdWVzLm1hcChzID0+IGBOT1QgJHtzfWApLmpvaW4oJ1xcbicpXG4gICAgICA6IHRoaXMudmFsdWVzLmpvaW4oJ1xcbicpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIG1hY2hpbmUtcmVhZGFibGUgdmVyc2lvbiBvZiB0aGUgY2hhbmdlcy5cbiAgICogVGhpcyBpcyBvbmx5IHVzZWQgaW4gdGVzdHMuXG4gICAqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHVibGljIF90b0pzb24oKTogVGFyZ2V0c0pzb24ge1xuICAgIHJldHVybiB7IG5vdDogdGhpcy5ub3QsIHZhbHVlczogdGhpcy52YWx1ZXMgfTtcbiAgfVxufVxuXG50eXBlIFVua25vd25NYXAgPSB7W2tleTogc3RyaW5nXTogdW5rbm93bn07XG5cbmV4cG9ydCBlbnVtIEVmZmVjdCB7XG4gIFVua25vd24gPSAnVW5rbm93bicsXG4gIEFsbG93ID0gJ0FsbG93JyxcbiAgRGVueSA9ICdEZW55Jyxcbn1cblxuZnVuY3Rpb24gZXhwZWN0U3RyaW5nKHg6IHVua25vd24pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICByZXR1cm4gdHlwZW9mIHggPT09ICdzdHJpbmcnID8geCA6IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gZXhwZWN0RWZmZWN0KHg6IHVua25vd24pOiBFZmZlY3Qge1xuICBpZiAoeCA9PT0gRWZmZWN0LkFsbG93IHx8IHggPT09IEVmZmVjdC5EZW55KSB7IHJldHVybiB4IGFzIEVmZmVjdDsgfVxuICByZXR1cm4gRWZmZWN0LlVua25vd247XG59XG5cbmZ1bmN0aW9uIGZvcmNlTGlzdE9mU3RyaW5ncyh4OiB1bmtub3duKTogc3RyaW5nW10ge1xuICBpZiAodHlwZW9mIHggPT09ICdzdHJpbmcnKSB7IHJldHVybiBbeF07IH1cbiAgaWYgKHR5cGVvZiB4ID09PSAndW5kZWZpbmVkJyB8fCB4ID09PSBudWxsKSB7IHJldHVybiBbXTsgfVxuXG4gIGlmIChBcnJheS5pc0FycmF5KHgpKSB7XG4gICAgcmV0dXJuIHgubWFwKGUgPT4gZm9yY2VMaXN0T2ZTdHJpbmdzKGUpLmpvaW4oJywnKSk7XG4gIH1cblxuICBpZiAodHlwZW9mIHggPT09ICdvYmplY3QnICYmIHggIT09IG51bGwpIHtcbiAgICBjb25zdCByZXQ6IHN0cmluZ1tdID0gW107XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoeCkpIHtcbiAgICAgIHJldC5wdXNoKC4uLmZvcmNlTGlzdE9mU3RyaW5ncyh2YWx1ZSkubWFwKHMgPT4gYCR7a2V5fToke3N9YCkpO1xuICAgIH1cbiAgICByZXR1cm4gcmV0O1xuICB9XG5cbiAgcmV0dXJuIFtgJHt4fWBdO1xufVxuXG4vKipcbiAqIFJlbmRlciB0aGUgQ29uZGl0aW9uIGNvbHVtblxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyQ29uZGl0aW9uKGNvbmRpdGlvbjogYW55KTogc3RyaW5nIHtcbiAgaWYgKCFjb25kaXRpb24gfHwgT2JqZWN0LmtleXMoY29uZGl0aW9uKS5sZW5ndGggPT09IDApIHsgcmV0dXJuICcnOyB9XG4gIGNvbnN0IGpzb25SZXByZXNlbnRhdGlvbiA9IEpTT04uc3RyaW5naWZ5KGNvbmRpdGlvbiwgdW5kZWZpbmVkLCAyKTtcblxuICAvLyBUaGUgSlNPTiByZXByZXNlbnRhdGlvbiBsb29rcyBsaWtlIHRoaXM6XG4gIC8vXG4gIC8vICB7XG4gIC8vICAgIFwiQXJuTGlrZVwiOiB7XG4gIC8vICAgICAgXCJBV1M6U291cmNlQXJuXCI6IFwiJHtNeVRvcGljODY4Njk0MzR9XCJcbiAgLy8gICAgfVxuICAvLyAgfVxuICAvL1xuICAvLyBXZSBjYW4gbWFrZSBpdCBtb3JlIGNvbXBhY3Qgd2l0aG91dCBsb3NpbmcgaW5mb3JtYXRpb24gYnkgZ2V0dGluZyByaWQgb2YgdGhlIG91dGVybW9zdCBicmFjZXNcbiAgLy8gYW5kIHRoZSBpbmRlbnRhdGlvbi5cbiAgY29uc3QgbGluZXMgPSBqc29uUmVwcmVzZW50YXRpb24uc3BsaXQoJ1xcbicpO1xuICByZXR1cm4gbGluZXMuc2xpY2UoMSwgbGluZXMubGVuZ3RoIC0gMSkubWFwKHMgPT4gcy5zbGljZSgyKSkuam9pbignXFxuJyk7XG59XG4iXX0=
+
+/***/ }),
+
+/***/ 40245:
+/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
+
+"use strict";
+
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ var desc = Object.getOwnPropertyDescriptor(m, k);
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+ desc = { enumerable: true, get: function() { return m[k]; } };
+ }
+ Object.defineProperty(o, k2, desc);
+}) : (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ o[k2] = m[k];
+}));
+var __exportStar = (this && this.__exportStar) || function(m, exports) {
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
+};
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.mangleLikeCloudFormation = exports.deepEqual = void 0;
+__exportStar(__nccwpck_require__(46316), exports);
+__exportStar(__nccwpck_require__(66446), exports);
+__exportStar(__nccwpck_require__(96791), exports);
+var util_1 = __nccwpck_require__(3089);
+Object.defineProperty(exports, "deepEqual", ({ enumerable: true, get: function () { return util_1.deepEqual; } }));
+Object.defineProperty(exports, "mangleLikeCloudFormation", ({ enumerable: true, get: function () { return util_1.mangleLikeCloudFormation; } }));
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGtEQUFnQztBQUNoQywyQ0FBeUI7QUFDekIsaURBQStCO0FBQy9CLG9DQUFrRTtBQUF6RCxpR0FBQSxTQUFTLE9BQUE7QUFBRSxnSEFBQSx3QkFBd0IsT0FBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vZGlmZi10ZW1wbGF0ZSc7XG5leHBvcnQgKiBmcm9tICcuL2Zvcm1hdCc7XG5leHBvcnQgKiBmcm9tICcuL2Zvcm1hdC10YWJsZSc7XG5leHBvcnQgeyBkZWVwRXF1YWwsIG1hbmdsZUxpa2VDbG91ZEZvcm1hdGlvbiB9IGZyb20gJy4vZGlmZi91dGlsJztcbiJdfQ==
+
+/***/ }),
+
+/***/ 43847:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.SecurityGroupChanges = void 0;
+const chalk = __nccwpck_require__(78818);
+const security_group_rule_1 = __nccwpck_require__(89243);
+const diffable_1 = __nccwpck_require__(28805);
+const render_intrinsics_1 = __nccwpck_require__(52317);
+const util_1 = __nccwpck_require__(72341);
+/**
+ * Changes to IAM statements
+ */
+class SecurityGroupChanges {
+ constructor(props) {
+ this.ingress = new diffable_1.DiffableCollection();
+ this.egress = new diffable_1.DiffableCollection();
+ // Group rules
+ for (const ingressProp of props.ingressRulePropertyChanges) {
+ this.ingress.addOld(...this.readInlineRules(ingressProp.oldValue, ingressProp.resourceLogicalId));
+ this.ingress.addNew(...this.readInlineRules(ingressProp.newValue, ingressProp.resourceLogicalId));
+ }
+ for (const egressProp of props.egressRulePropertyChanges) {
+ this.egress.addOld(...this.readInlineRules(egressProp.oldValue, egressProp.resourceLogicalId));
+ this.egress.addNew(...this.readInlineRules(egressProp.newValue, egressProp.resourceLogicalId));
+ }
+ // Rule resources
+ for (const ingressRes of props.ingressRuleResourceChanges) {
+ this.ingress.addOld(...this.readRuleResource(ingressRes.oldProperties));
+ this.ingress.addNew(...this.readRuleResource(ingressRes.newProperties));
+ }
+ for (const egressRes of props.egressRuleResourceChanges) {
+ this.egress.addOld(...this.readRuleResource(egressRes.oldProperties));
+ this.egress.addNew(...this.readRuleResource(egressRes.newProperties));
+ }
+ this.ingress.calculateDiff();
+ this.egress.calculateDiff();
+ }
+ get hasChanges() {
+ return this.ingress.hasChanges || this.egress.hasChanges;
+ }
+ /**
+ * Return a summary table of changes
+ */
+ summarize() {
+ const ret = [];
+ const header = ['', 'Group', 'Dir', 'Protocol', 'Peer'];
+ const inWord = 'In';
+ const outWord = 'Out';
+ // Render a single rule to the table (curried function so we can map it across rules easily--thank you JavaScript!)
+ const renderRule = (plusMin, inOut) => (rule) => [
+ plusMin,
+ rule.groupId,
+ inOut,
+ rule.describeProtocol(),
+ rule.describePeer(),
+ ].map(s => plusMin === '+' ? chalk.green(s) : chalk.red(s));
+ // First generate all lines, sort later
+ ret.push(...this.ingress.additions.map(renderRule('+', inWord)));
+ ret.push(...this.egress.additions.map(renderRule('+', outWord)));
+ ret.push(...this.ingress.removals.map(renderRule('-', inWord)));
+ ret.push(...this.egress.removals.map(renderRule('-', outWord)));
+ // Sort by group name then ingress/egress (ingress first)
+ ret.sort((0, util_1.makeComparator)((row) => [row[1], row[2].indexOf(inWord) > -1 ? 0 : 1]));
+ ret.splice(0, 0, header);
+ return ret;
+ }
+ toJson() {
+ return (0, util_1.deepRemoveUndefined)({
+ ingressRuleAdditions: (0, util_1.dropIfEmpty)(this.ingress.additions.map(s => s.toJson())),
+ ingressRuleRemovals: (0, util_1.dropIfEmpty)(this.ingress.removals.map(s => s.toJson())),
+ egressRuleAdditions: (0, util_1.dropIfEmpty)(this.egress.additions.map(s => s.toJson())),
+ egressRuleRemovals: (0, util_1.dropIfEmpty)(this.egress.removals.map(s => s.toJson())),
+ });
+ }
+ get rulesAdded() {
+ return this.ingress.hasAdditions
+ || this.egress.hasAdditions;
+ }
+ readInlineRules(rules, logicalId) {
+ if (!rules || !Array.isArray(rules)) {
+ return [];
+ }
+ // UnCloudFormation so the parser works in an easier domain
+ const ref = '${' + logicalId + '.GroupId}';
+ return rules.flatMap((r) => {
+ const rendered = (0, render_intrinsics_1.renderIntrinsics)(r);
+ // SecurityGroupRule is not robust against unparsed objects
+ return typeof rendered === 'object' ? [new security_group_rule_1.SecurityGroupRule(rendered, ref)] : [];
+ });
+ }
+ readRuleResource(resource) {
+ if (!resource) {
+ return [];
+ }
+ // UnCloudFormation so the parser works in an easier domain
+ return [new security_group_rule_1.SecurityGroupRule((0, render_intrinsics_1.renderIntrinsics)(resource))];
+ }
+}
+exports.SecurityGroupChanges = SecurityGroupChanges;
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjdXJpdHktZ3JvdXAtY2hhbmdlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInNlY3VyaXR5LWdyb3VwLWNoYW5nZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsK0JBQStCO0FBQy9CLCtEQUFvRTtBQUVwRSwwQ0FBaUQ7QUFDakQsNERBQXdEO0FBQ3hELGtDQUEyRTtBQVMzRTs7R0FFRztBQUNILE1BQWEsb0JBQW9CO0lBSS9CLFlBQVksS0FBZ0M7UUFINUIsWUFBTyxHQUFHLElBQUksNkJBQWtCLEVBQXFCLENBQUM7UUFDdEQsV0FBTSxHQUFHLElBQUksNkJBQWtCLEVBQXFCLENBQUM7UUFHbkUsY0FBYztRQUNkLEtBQUssTUFBTSxXQUFXLElBQUksS0FBSyxDQUFDLDBCQUEwQixFQUFFO1lBQzFELElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7WUFDbEcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsV0FBVyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQztTQUNuRztRQUNELEtBQUssTUFBTSxVQUFVLElBQUksS0FBSyxDQUFDLHlCQUF5QixFQUFFO1lBQ3hELElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7WUFDL0YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQztTQUNoRztRQUVELGlCQUFpQjtR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QUFJLENBQUMsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUFFLE9BQU8sRUFBRSxDQUFDO1NBQUU7UUFFbkQsMkRBQTJEO1FBRTNELE1BQU0sR0FBRyxHQUFHLElBQUksR0FBRyxTQUFTLEdBQUcsV0FBVyxDQUFDO1FBQzNDLE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFO1lBQzlCLE1BQU0sUUFBUSxHQUFHLElBQUEsb0NBQWdCLEVBQUMsQ0FBQyxDQUFDLENBQUM7WUFDckMsMkRBQTJEO1lBQzNELE9BQU8sT0FBTyxRQUFRLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksdUNBQWlCLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNwRixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxRQUFhO1FBQ3BDLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFBRSxPQUFPLEVBQUUsQ0FBQztTQUFFO1FBRTdCLDJEQUEyRDtRQUUzRCxPQUFPLENBQUMsSUFBSSx1Q0FBaUIsQ0FBQyxJQUFBLG9DQUFnQixFQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM3RCxDQUFDO0NBQ0Y7QUFyR0Qsb0RBcUdDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgY2hhbGsgZnJvbSAnY2hhbGsnO1xuaW1wb3J0IHsgUnVsZUpzb24sIFNlY3VyaXR5R3JvdXBSdWxlIH0gZnJvbSAnLi9zZWN1cml0eS1ncm91cC1ydWxlJztcbmltcG9ydCB7IFByb3BlcnR5Q2hhbmdlLCBSZXNvdXJjZUNoYW5nZSB9IGZyb20gJy4uL2RpZmYvdHlwZXMnO1xuaW1wb3J0IHsgRGlmZmFibGVDb2xsZWN0aW9uIH0gZnJvbSAnLi4vZGlmZmFibGUnO1xuaW1wb3J0IHsgcmVuZGVySW50cmluc2ljcyB9IGZyb20gJy4uL3JlbmRlci1pbnRyaW5zaWNzJztcbmltcG9ydCB7IGRlZXBSZW1vdmVVbmRlZmluZWQsIGRyb3BJZkVtcHR5LCBtYWtlQ29tcGFyYXRvciB9IGZyb20gJy4uL3V0aWwnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNlY3VyaXR5R3JvdXBDaGFuZ2VzUHJvcHMge1xuICBpbmdyZXNzUnVsZVByb3BlcnR5Q2hhbmdlczogUHJvcGVydHlDaGFuZ2VbXTtcbiAgaW5ncmVzc1J1bGVSZXNvdXJjZUNoYW5nZXM6IFJlc291cmNlQ2hhbmdlW107XG4gIGVncmVzc1J1bGVSZXNvdXJjZUNoYW5nZXM6IFJlc291cmNlQ2hhbmdlW107XG4gIGVncmVzc1J1bGVQcm9wZXJ0eUNoYW5nZXM6IFByb3BlcnR5Q2hhbmdlW107XG59XG5cbi8qKlxuICogQ2hhbmdlcyB0byBJQU0gc3RhdGVtZW50c1xuICovXG5leHBvcnQgY2xhc3MgU2VjdXJpdHlHcm91cENoYW5nZXMge1xuICBwdWJsaWMgcmVhZG9ubHkgaW5ncmVzcyA9IG5ldyBEaWZmYWJsZUNvbGxlY3Rpb248U2VjdXJpdHlHcm91cFJ1bGU+KCk7XG4gIHB1YmxpYyByZWFkb25seSBlZ3Jlc3MgPSBuZXcgRGlmZmFibGVDb2xsZWN0aW9uPFNlY3VyaXR5R3JvdXBSdWxlPigpO1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBTZWN1cml0eUdyb3VwQ2hhbmdlc1Byb3BzKSB7XG4gICAgLy8gR3JvdXAgcnVsZXNcbiAgICBmb3IgKGNvbnN0IGluZ3Jlc3NQcm9wIG9mIHByb3BzLmluZ3Jlc3NSdWxlUHJvcGVydHlDaGFuZ2VzKSB7XG4gICAgICB0aGlzLmluZ3Jlc3MuYWRkT2xkKC4uLnRoaXMucmVhZElubGluZVJ1bGVzKGluZ3Jlc3NQcm9wLm9sZFZhbHVlLCBpbmdyZXNzUHJvcC5yZXNvdXJjZUxvZ2ljYWxJZCkpO1xuICAgICAgdGhpcy5pbmdyZXNzLmFkZE5ldyguLi50aGlzLnJlYWRJbmxpbmVSdWxlcyhpbmdyZXNzUHJvcC5uZXdWYWx1ZSwgaW5ncmVzc1Byb3AucmVzb3VyY2VMb2dpY2FsSWQpKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBlZ3Jlc3NQcm9wIG9mIHByb3BzLmVncmVzc1J1bGVQcm9wZXJ0eUNoYW5nZXMpIHtcbiAgICAgIHRoaXMuZWdyZXNzLmFkZE9sZCguLi50aGlzLnJlYWRJbmxpbmVSdWxlcyhlZ3Jlc3NQcm9wLm9sZFZhbHVlLCBlZ3Jlc3NQcm9wLnJlc291cmNlTG9naWNhbElkKSk7XG4gICAgICB0aGlzLmVncmVzcy5hZGROZXcoLi4udGhpcy5yZWFkSW5saW5lUnVsZXMoZWdyZXNzUHJvcC5uZXdWYWx1ZSwgZWdyZXNzUHJvcC5yZXNvdXJjZUxvZ2ljYWxJZCkpO1xuICAgIH1cblxuICAgIC8vIFJ1bGUgcmVzb3VyY2VzXG4gICAgZm9yIChjb25zdCBpbmdyZXNzUmVzIG9mIHByb3BzLmluZ3Jlc3NSdWxlUmVzb3VyY2VDaGFuZ2VzKSB7XG4gICAgICB0aGlzLmluZ3Jlc3MuYWRkT2xkKC4uLnRoaXMucmVhZFJ1bGVSZXNvdXJjZShpbmdyZXNzUmVzLm9sZFByb3BlcnRpZXMpKTtcbiAgICAgIHRoaXMuaW5ncmVzcy5hZGROZXcoLi4udGhpcy5yZWFkUnVsZVJlc291cmNlKGluZ3Jlc3NSZXMubmV3UHJvcGVydGllcykpO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGVncmVzc1JlcyBvZiBwcm9wcy5lZ3Jlc3NSdWxlUmVzb3VyY2VDaGFuZ2VzKSB7XG4gICAgICB0aGlzLmVncmVzcy5hZGRPbGQoLi4udGhpcy5yZWFkUnVsZVJlc291cmNlKGVncmVzc1Jlcy5vbGRQcm9wZXJ0aWVzKSk7XG4gICAgICB0aGlzLmVncmVzcy5hZGROZXcoLi4udGhpcy5yZWFkUnVsZVJlc291cmNlKGVncmVzc1Jlcy5uZXdQcm9wZXJ0aWVzKSk7XG4gICAgfVxuXG4gICAgdGhpcy5pbmdyZXNzLmNhbGN1bGF0ZURpZmYoKTtcbiAgICB0aGlzLmVncmVzcy5jYWxjdWxhdGVEaWZmKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGhhc0NoYW5nZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuaW5ncmVzcy5oYXNDaGFuZ2VzIHx8IHRoaXMuZWdyZXNzLmhhc0NoYW5nZXM7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGEgc3VtbWFyeSB0YWJsZSBvZiBjaGFuZ2VzXG4gICAqL1xuICBwdWJsaWMgc3VtbWFyaXplKCk6IHN0cmluZ1tdW10ge1xuICAgIGNvbnN0IHJldDogc3RyaW5nW11bXSA9IFtdO1xuXG4gICAgY29uc3QgaGVhZGVyID0gWycnLCAnR3JvdXAnLCAnRGlyJywgJ1Byb3RvY29sJywgJ1BlZXInXTtcblxuICAgIGNvbnN0IGluV29yZCA9ICdJbic7XG4gICAgY29uc3Qgb3V0V29yZCA9ICdPdXQnO1xuXG4gICAgLy8gUmVuZGVyIGEgc2luZ2xlIHJ1bGUgdG8gdGhlIHRhYmxlIChjdXJyaWVkIGZ1bmN0aW9uIHNvIHdlIGNhbiBtYXAgaXQgYWNyb3NzIHJ1bGVzIGVhc2lseS0tdGhhbmsgeW91IEphdmFTY3JpcHQhKVxuICAgIGNvbnN0IHJlbmRlclJ1bGUgPSAocGx1c01pbjogc3RyaW5nLCBpbk91dDogc3RyaW5nKSA9PiAocnVsZTogU2VjdXJpdHlHcm91cFJ1bGUpID0+IFtcbiAgICAgIHBsdXNNaW4sXG4gICAgICBydWxlLmdyb3VwSWQsXG4gICAgICBpbk91dCxcbiAgICAgIHJ1bGUuZGVzY3JpYmVQcm90b2NvbCgpLFxuICAgICAgcnVsZS5kZXNjcmliZVBlZXIoKSxcbiAgICBdLm1hcChzID0+IHBsdXNNaW4gPT09ICcrJyA/IGNoYWxrLmdyZWVuKHMpIDogY2hhbGsucmVkKHMpKTtcblxuICAgIC8vIEZpcnN0IGdlbmVyYXRlIGFsbCBsaW5lcywgc29ydCBsYXRlclxuICAgIHJldC5wdXNoKC4uLnRoaXMuaW5ncmVzcy5hZGRpdGlvbnMubWFwKHJlbmRlclJ1bGUoJysnLCBpbldvcmQpKSk7XG4gICAgcmV0LnB1c2goLi4udGhpcy5lZ3Jlc3MuYWRkaXRpb25zLm1hcChyZW5kZXJSdWxlKCcrJywgb3V0V29yZCkpKTtcbiAgICByZXQucHVzaCguLi50aGlzLmluZ3Jlc3MucmVtb3ZhbHMubWFwKHJlbmRlclJ1bGUoJy0nLCBpbldvcmQpKSk7XG4gICAgcmV0LnB1c2goLi4udGhpcy5lZ3Jlc3MucmVtb3ZhbHMubWFwKHJlbmRlclJ1bGUoJy0nLCBvdXRXb3JkKSkpO1xuXG4gICAgLy8gU29ydCBieSBncm91cCBuYW1lIHRoZW4gaW5ncmVzcy9lZ3Jlc3MgKGluZ3Jlc3MgZmlyc3QpXG4gICAgcmV0LnNvcnQobWFrZUNvbXBhcmF0b3IoKHJvdzogc3RyaW5nW10pID0+IFtyb3dbMV0sIHJvd1syXS5pbmRleE9mKGluV29yZCkgPiAtMSA/IDAgOiAxXSkpO1xuXG4gICAgcmV0LnNwbGljZSgwLCAwLCBoZWFkZXIpO1xuXG4gICAgcmV0dXJuIHJldDtcbiAgfVxuXG4gIHB1YmxpYyB0b0pzb24oKTogU2VjdXJpdHlHcm91cENoYW5nZXNKc29uIHtcbiAgICByZXR1cm4gZGVlcFJlbW92ZVVuZGVmaW5lZCh7XG4gICAgICBpbmdyZXNzUnVsZUFkZGl0aW9uczogZHJvcElmRW1wdHkodGhpcy5pbmdyZXNzLmFkZGl0aW9ucy5tYXAocyA9PiBzLnRvSnNvbigpKSksXG4gICAgICBpbmdyZXNzUnVsZVJlbW92YWxzOiBkcm9wSWZFbXB0eSh0aGlzLmluZ3Jlc3MucmVtb3ZhbHMubWFwKHMgPT4gcy50b0pzb24oKSkpLFxuICAgICAgZWdyZXNzUnVsZUFkZGl0aW9uczogZHJvcElmRW1wdHkodGhpcy5lZ3Jlc3MuYWRkaXRpb25zLm1hcChzID0+IHMudG9Kc29uKCkpKSxcbiAgICAgIGVncmVzc1J1bGVSZW1vdmFsczogZHJvcElmRW1wdHkodGhpcy5lZ3Jlc3MucmVtb3ZhbHMubWFwKHMgPT4gcy50b0pzb24oKSkpLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGdldCBydWxlc0FkZGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmluZ3Jlc3MuaGFzQWRkaXRpb25zXG4gICAgICAgIHx8IHRoaXMuZWdyZXNzLmhhc0FkZGl0aW9ucztcbiAgfVxuXG4gIHByaXZhdGUgcmVhZElubGluZVJ1bGVzKHJ1bGVzOiBhbnksIGxvZ2ljYWxJZDogc3RyaW5nKTogU2VjdXJpdHlHcm91cFJ1bGVbXSB7XG4gICAgaWYgKCFydWxlcyB8fCAhQXJyYXkuaXNBcnJheShydWxlcykpIHsgcmV0dXJuIFtdOyB9XG5cbiAgICAvLyBVbkNsb3VkRm9ybWF0aW9uIHNvIHRoZSBwYXJzZXIgd29ya3MgaW4gYW4gZWFzaWVyIGRvbWFpblxuXG4gICAgY29uc3QgcmVmID0gJyR7JyArIGxvZ2ljYWxJZCArICcuR3JvdXBJZH0nO1xuICAgIHJldHVybiBydWxlcy5mbGF0TWFwKChyOiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IHJlbmRlcmVkID0gcmVuZGVySW50cmluc2ljcyhyKTtcbiAgICAgIC8vIFNlY3VyaXR5R3JvdXBSdWxlIGlzIG5vdCByb2J1c3QgYWdhaW5zdCB1bnBhcnNlZCBvYmplY3RzXG4gICAgICByZXR1cm4gdHlwZW9mIHJlbmRlcmVkID09PSAnb2JqZWN0JyA/IFtuZXcgU2VjdXJpdHlHcm91cFJ1bGUocmVuZGVyZWQsIHJlZildIDogW107XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHJlYWRSdWxlUmVzb3VyY2UocmVzb3VyY2U6IGFueSk6IFNlY3VyaXR5R3JvdXBSdWxlW10ge1xuICAgIGlmICghcmVzb3VyY2UpIHsgcmV0dXJuIFtdOyB9XG5cbiAgICAvLyBVbkNsb3VkRm9ybWF0aW9uIHNvIHRoZSBwYXJzZXIgd29ya3MgaW4gYW4gZWFzaWVyIGRvbWFpblxuXG4gICAgcmV0dXJuIFtuZXcgU2VjdXJpdHlHcm91cFJ1bGUocmVuZGVySW50cmluc2ljcyhyZXNvdXJjZSkpXTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNlY3VyaXR5R3JvdXBDaGFuZ2VzSnNvbiB7XG4gIGluZ3Jlc3NSdWxlQWRkaXRpb25zPzogUnVsZUpzb25bXTtcbiAgaW5ncmVzc1J1bGVSZW1vdmFscz86IFJ1bGVKc29uW107XG4gIGVncmVzc1J1bGVBZGRpdGlvbnM/OiBSdWxlSnNvbltdO1xuICBlZ3Jlc3NSdWxlUmVtb3ZhbHM/OiBSdWxlSnNvbltdO1xufVxuIl19
+
+/***/ }),
+
+/***/ 89243:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.SecurityGroupRule = void 0;
+/**
+ * A single security group rule, either egress or ingress
+ */
+class SecurityGroupRule {
+ constructor(ruleObject, groupRef) {
+ this.ipProtocol = ruleObject.IpProtocol || '*unknown*';
+ this.fromPort = ruleObject.FromPort;
+ this.toPort = ruleObject.ToPort;
+ this.groupId = ruleObject.GroupId || groupRef || '*unknown*'; // In case of an inline rule
+ this.peer =
+ findFirst(ruleObject, ['CidrIp', 'CidrIpv6'], (ip) => ({ kind: 'cidr-ip', ip }))
+ ||
+ findFirst(ruleObject, ['DestinationSecurityGroupId', 'SourceSecurityGroupId'], (securityGroupId) => ({ kind: 'security-group', securityGroupId }))
+ ||
+ findFirst(ruleObject, ['DestinationPrefixListId', 'SourcePrefixListId'], (prefixListId) => ({ kind: 'prefix-list', prefixListId }));
+ }
+ equal(other) {
+ return this.ipProtocol === other.ipProtocol
+ && this.fromPort === other.fromPort
+ && this.toPort === other.toPort
+ && peerEqual(this.peer, other.peer);
+ }
+ describeProtocol() {
+ if (this.ipProtocol === '-1') {
+ return 'Everything';
+ }
+ const ipProtocol = this.ipProtocol.toUpperCase();
+ if (this.fromPort === -1) {
+ return `All ${ipProtocol}`;
+ }
+ if (this.fromPort === this.toPort) {
+ return `${ipProtocol} ${this.fromPort}`;
+ }
+ return `${ipProtocol} ${this.fromPort}-${this.toPort}`;
+ }
+ describePeer() {
+ if (this.peer) {
+ switch (this.peer.kind) {
+ case 'cidr-ip':
+ if (this.peer.ip === '0.0.0.0/0') {
+ return 'Everyone (IPv4)';
+ }
+ if (this.peer.ip === '::/0') {
+ return 'Everyone (IPv6)';
+ }
+ return `${this.peer.ip}`;
+ case 'prefix-list': return `${this.peer.prefixListId}`;
+ case 'security-group': return `${this.peer.securityGroupId}`;
+ }
+ }
+ return '?';
+ }
+ toJson() {
+ return {
+ groupId: this.groupId,
+ ipProtocol: this.ipProtocol,
+ fromPort: this.fromPort,
+ toPort: this.toPort,
+ peer: this.peer,
+ };
+ }
+}
+exports.SecurityGroupRule = SecurityGroupRule;
+function peerEqual(a, b) {
+ if ((a === undefined) !== (b === undefined)) {
+ return false;
+ }
+ if (a === undefined) {
+ return true;
+ }
+ if (a.kind !== b.kind) {
+ return false;
+ }
+ switch (a.kind) {
+ case 'cidr-ip': return a.ip === b.ip;
+ case 'security-group': return a.securityGroupId === b.securityGroupId;
+ case 'prefix-list': return a.prefixListId === b.prefixListId;
+ }
+}
+function findFirst(obj, keys, fn) {
+ for (const key of keys) {
+ try {
+ if (key in obj) {
+ return fn(obj[key]);
+ }
+ }
+ catch (e) {
+ debugger;
+ }
+ }
+ return undefined;
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjdXJpdHktZ3JvdXAtcnVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInNlY3VyaXR5LWdyb3VwLXJ1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUE7O0dBRUc7QUFDSCxNQUFhLGlCQUFpQjtJQTBCNUIsWUFBWSxVQUFlLEVBQUUsUUFBaUI7UUFDNUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUMsVUFBVSxJQUFJLFdBQVcsQ0FBQztRQUN2RCxJQUFJLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUM7UUFDcEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxPQUFPLEdBQUcsVUFBVSxDQUFDLE9BQU8sSUFBSSxRQUFRLElBQUksV0FBVyxDQUFDLENBQUMsNEJBQTRCO1FBRTFGLElBQUksQ0FBQyxJQUFJO1lBQ0wsU0FBUyxDQUFDLFVBQVUsRUFDbEIsQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLEVBQ3RCLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQWlCLENBQUEsQ0FBQzs7b0JBRWxELFNBQVMsQ0FBQyxVQUFVLEVBQ2xCLENBQUMsNEJBQTRCLEVBQUUsdUJBQXVCLENBQUMsRUFDdkQsQ0FBQyxlQUFlLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsZUFBZSxFQUF3QixDQUFBLENBQUM7O29CQUUxRixTQUFTLENBQUMsVUFBVSxFQUNsQixDQUFDLHlCQUF5QixFQUFFLG9CQUFvQixDQUFDLEVBQ2pELENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQXFCLENBQUEsQ0FBQyxDQUFDO0lBQ3JGLENBQUM7SUFFTSxLQUFLLENBQUMsS0FBd0I7UUFDbkMsT0FBTyxJQUFJLENBQUMs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QztLQUM1RTtBQUNILENBQUM7QUFFRCxTQUFTLFNBQVMsQ0FBSSxHQUFRLEVBQUUsSUFBYyxFQUFFLEVBQW9CO0lBQ2xFLEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxFQUFFO1FBQ3RCLElBQUk7WUFDRixJQUFJLEdBQUcsSUFBSSxHQUFHLEVBQUU7Z0JBQ2QsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7YUFDckI7U0FDRjtRQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ1YsUUFBUSxDQUFDO1NBQ1Y7S0FDRjtJQUNELE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEEgc2luZ2xlIHNlY3VyaXR5IGdyb3VwIHJ1bGUsIGVpdGhlciBlZ3Jlc3Mgb3IgaW5ncmVzc1xuICovXG5leHBvcnQgY2xhc3MgU2VjdXJpdHlHcm91cFJ1bGUge1xuICAvKipcbiAgICogR3JvdXAgSUQgb2YgdGhlIGdyb3VwIHRoaXMgcnVsZSBhcHBsaWVzIHRvXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZ3JvdXBJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJUCBwcm90b2NvbCB0aGlzIHJ1bGUgYXBwbGllcyB0b1xuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGlwUHJvdG9jb2w6IHN0cmluZztcblxuICAvKipcbiAgICogU3RhcnQgb2YgcG9ydCByYW5nZSB0aGlzIHJ1bGUgYXBwbGllcyB0bywgb3IgSUNNUCB0eXBlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZnJvbVBvcnQ/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEVuZCBvZiBwb3J0IHJhbmdlIHRoaXMgcnVsZSBhcHBsaWVzIHRvLCBvciBJQ01QIGNvZGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB0b1BvcnQ/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFBlZXIgb2YgdGhpcyBydWxlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcGVlcj86IFJ1bGVQZWVyO1xuXG4gIGNvbnN0cnVjdG9yKHJ1bGVPYmplY3Q6IGFueSwgZ3JvdXBSZWY/OiBzdHJpbmcpIHtcbiAgICB0aGlzLmlwUHJvdG9jb2wgPSBydWxlT2JqZWN0LklwUHJvdG9jb2wgfHwgJyp1bmtub3duKic7XG4gICAgdGhpcy5mcm9tUG9ydCA9IHJ1bGVPYmplY3QuRnJvbVBvcnQ7XG4gICAgdGhpcy50b1BvcnQgPSBydWxlT2JqZWN0LlRvUG9ydDtcbiAgICB0aGlzLmdyb3VwSWQgPSBydWxlT2JqZWN0Lkdyb3VwSWQgfHwgZ3JvdXBSZWYgfHwgJyp1bmtub3duKic7IC8vIEluIGNhc2Ugb2YgYW4gaW5saW5lIHJ1bGVcblxuICAgIHRoaXMucGVlciA9XG4gICAgICAgIGZpbmRGaXJzdChydWxlT2JqZWN0LFxuICAgICAgICAgIFsnQ2lkcklwJywgJ0NpZHJJcHY2J10sXG4gICAgICAgICAgKGlwKSA9PiAoeyBraW5kOiAnY2lkci1pcCcsIGlwIH0gYXMgQ2lkcklwUGVlcikpXG4gICAgICAgIHx8XG4gICAgICAgIGZpbmRGaXJzdChydWxlT2JqZWN0LFxuICAgICAgICAgIFsnRGVzdGluYXRpb25TZWN1cml0eUdyb3VwSWQnLCAnU291cmNlU2VjdXJpdHlHcm91cElkJ10sXG4gICAgICAgICAgKHNlY3VyaXR5R3JvdXBJZCkgPT4gKHsga2luZDogJ3NlY3VyaXR5LWdyb3VwJywgc2VjdXJpdHlHcm91cElkIH0gYXMgU2VjdXJpdHlHcm91cFBlZXIpKVxuICAgICAgICB8fFxuICAgICAgICBmaW5kRmlyc3QocnVsZU9iamVjdCxcbiAgICAgICAgICBbJ0Rlc3RpbmF0aW9uUHJlZml4TGlzdElkJywgJ1NvdXJjZVByZWZpeExpc3RJZCddLFxuICAgICAgICAgIChwcmVmaXhMaXN0SWQpID0+ICh7IGtpbmQ6ICdwcmVmaXgtbGlzdCcsIHByZWZpeExpc3RJZCB9IGFzIFByZWZpeExpc3RQZWVyKSk7XG4gIH1cblxuICBwdWJsaWMgZXF1YWwob3RoZXI6IFNlY3VyaXR5R3JvdXBSdWxlKSB7XG4gICAgcmV0dXJuIHRoaXMuaXBQcm90b2NvbCA9PT0gb3RoZXIuaXBQcm90b2NvbFxuICAgICAgICAmJiB0aGlzLmZyb21Qb3J0ID09PSBvdGhlci5mcm9tUG9ydFxuICAgICAgICAmJiB0aGlzLnRvUG9ydCA9PT0gb3RoZXIudG9Qb3J0XG4gICAgICAgICYmIHBlZXJFcXVhbCh0aGlzLnBlZXIsIG90aGVyLnBlZXIpO1xuICB9XG5cbiAgcHVibGljIGRlc2NyaWJlUHJvdG9jb2woKSB7XG4gICAgaWYgKHRoaXMuaXBQcm90b2NvbCA9PT0gJy0xJykgeyByZXR1cm4gJ0V2ZXJ5dGhpbmcnOyB9XG5cbiAgICBjb25zdCBpcFByb3RvY29sID0gdGhpcy5pcFByb3RvY29sLnRvVXBwZXJDYXNlKCk7XG5cbiAgICBpZiAodGhpcy5mcm9tUG9ydCA9PT0gLTEpIHsgcmV0dXJuIGBBbGwgJHtpcFByb3RvY29sfWA7IH1cbiAgICBpZiAodGhpcy5mcm9tUG9ydCA9PT0gdGhpcy50b1BvcnQpIHsgcmV0dXJuIGAke2lwUHJvdG9jb2x9ICR7dGhpcy5mcm9tUG9ydH1gOyB9XG4gICAgcmV0dXJuIGAke2lwUHJvdG9jb2x9ICR7dGhpcy5mcm9tUG9ydH0tJHt0aGlzLnRvUG9ydH1gO1xuICB9XG5cbiAgcHVibGljIGRlc2NyaWJlUGVlcigpIHtcbiAgICBpZiAodGhpcy5wZWVyKSB7XG4gICAgICBzd2l0Y2ggKHRoaXMucGVlci5raW5kKSB7XG4gICAgICAgIGNhc2UgJ2NpZHItaXAnOlxuICAgICAgICAgIGlmICh0aGlzLnBlZXIuaXAgPT09ICcwLjAuMC4wLzAnKSB7IHJldHVybiAnRXZlcnlvbmUgKElQdjQpJzsgfVxuICAgICAgICAgIGlmICh0aGlzLnBlZXIuaXAgPT09ICc6Oi8wJykgeyByZXR1cm4gJ0V2ZXJ5b25lIChJUHY2KSc7IH1cbiAgICAgICAgICByZXR1cm4gYCR7dGhpcy5wZWVyLmlwfWA7XG4gICAgICAgIGNhc2UgJ3ByZWZpeC1saXN0JzogcmV0dXJuIGAke3RoaXMucGVlci5wcmVmaXhMaXN0SWR9YDtcbiAgICAgICAgY2FzZSAnc2VjdXJpdHktZ3JvdXAnOiByZXR1cm4gYCR7dGhpcy5wZWVyLnNlY3VyaXR5R3JvdXBJZH1gO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiAnPyc7XG4gIH1cblxuICBwdWJsaWMgdG9Kc29uKCk6IFJ1bGVKc29uIHtcbiAgICByZXR1cm4ge1xuICAgICAgZ3JvdXBJZDogdGhpcy5ncm91cElkLFxuICAgICAgaXBQcm90b2NvbDogdGhpcy5pcFByb3RvY29sLFxuICAgICAgZnJvbVBvcnQ6IHRoaXMuZnJvbVBvcnQsXG4gICAgICB0b1BvcnQ6IHRoaXMudG9Qb3J0LFxuICAgICAgcGVlcjogdGhpcy5wZWVyLFxuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBDaWRySXBQZWVyIHtcbiAga2luZDogJ2NpZHItaXAnO1xuICBpcDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNlY3VyaXR5R3JvdXBQZWVyIHtcbiAga2luZDogJ3NlY3VyaXR5LWdyb3VwJztcbiAgc2VjdXJpdHlHcm91cElkOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJlZml4TGlzdFBlZXIge1xuICBraW5kOiAncHJlZml4LWxpc3QnO1xuICBwcmVmaXhMaXN0SWQ6IHN0cmluZztcbn1cblxuZXhwb3J0IHR5cGUgUnVsZVBlZXIgPSBDaWRySXBQZWVyIHwgU2VjdXJpdHlHcm91cFBlZXIgfCBQcmVmaXhMaXN0UGVlcjtcblxuZnVuY3Rpb24gcGVlckVxdWFsKGE/OiBSdWxlUGVlciwgYj86IFJ1bGVQZWVyKSB7XG4gIGlmICgoYSA9PT0gdW5kZWZpbmVkKSAhPT0gKGIgPT09IHVuZGVmaW5lZCkpIHsgcmV0dXJuIGZhbHNlOyB9XG4gIGlmIChhID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHRydWU7IH1cblxuICBpZiAoYS5raW5kICE9PSBiIS5raW5kKSB7IHJldHVybiBmYWxzZTsgfVxuICBzd2l0Y2ggKGEua2luZCkge1xuICAgIGNhc2UgJ2NpZHItaXAnOiByZXR1cm4gYS5pcCA9PT0gKGIgYXMgdHlwZW9mIGEpLmlwO1xuICAgIGNhc2UgJ3NlY3VyaXR5LWdyb3VwJzogcmV0dXJuIGEuc2VjdXJpdHlHcm91cElkID09PSAoYiBhcyB0eXBlb2YgYSkuc2VjdXJpdHlHcm91cElkO1xuICAgIGNhc2UgJ3ByZWZpeC1saXN0JzogcmV0dXJuIGEucHJlZml4TGlzdElkID09PSAoYiBhcyB0eXBlb2YgYSkucHJlZml4TGlzdElkO1xuICB9XG59XG5cbmZ1bmN0aW9uIGZpbmRGaXJzdDxUPihvYmo6IGFueSwga2V5czogc3RyaW5nW10sIGZuOiAoeDogc3RyaW5nKSA9PiBUKTogVCB8IHVuZGVmaW5lZCB7XG4gIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICB0cnkge1xuICAgICAgaWYgKGtleSBpbiBvYmopIHtcbiAgICAgICAgcmV0dXJuIGZuKG9ialtrZXldKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBkZWJ1Z2dlcjtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSdWxlSnNvbiB7XG4gIGdyb3VwSWQ6IHN0cmluZztcbiAgaXBQcm90b2NvbDogc3RyaW5nO1xuICBmcm9tUG9ydD86IG51bWJlcjtcbiAgdG9Qb3J0PzogbnVtYmVyO1xuICBwZWVyPzogUnVsZVBlZXI7XG59Il19
+
+/***/ }),
+
+/***/ 52317:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.renderIntrinsics = void 0;
+/**
+ * Turn CloudFormation intrinsics into strings
+ *
+ * ------
+ *
+ * This stringification is not intended to be mechanically reversible! It's intended
+ * to be understood by humans!
+ *
+ * ------
+ *
+ * Turns Fn::GetAtt and Fn::Ref objects into the same strings that can be
+ * parsed by Fn::Sub, but without the surrounding intrinsics.
+ *
+ * Evaluates Fn::Join directly if the second argument is a literal list of strings.
+ *
+ * Removes list and object values evaluating to { Ref: 'AWS::NoValue' }.
+ *
+ * For other intrinsics we choose a string representation that CloudFormation
+ * cannot actually parse, but is comprehensible to humans.
+ */
+function renderIntrinsics(x) {
+ if (Array.isArray(x)) {
+ return x.filter(el => !isNoValue(el)).map(renderIntrinsics);
+ }
+ if (isNoValue(x)) {
+ return undefined;
+ }
+ const intrinsic = getIntrinsic(x);
+ if (intrinsic) {
+ if (intrinsic.fn === 'Ref') {
+ return '${' + intrinsic.args + '}';
+ }
+ if (intrinsic.fn === 'Fn::GetAtt') {
+ return '${' + intrinsic.args[0] + '.' + intrinsic.args[1] + '}';
+ }
+ if (intrinsic.fn === 'Fn::Join') {
+ return unCloudFormationFnJoin(intrinsic.args[0], intrinsic.args[1]);
+ }
+ return stringifyIntrinsic(intrinsic.fn, intrinsic.args);
+ }
+ if (typeof x === 'object' && x !== null) {
+ const ret = {};
+ for (const [key, value] of Object.entries(x)) {
+ if (!isNoValue(value)) {
+ ret[key] = renderIntrinsics(value);
+ }
+ }
+ return ret;
+ }
+ return x;
+}
+exports.renderIntrinsics = renderIntrinsics;
+function unCloudFormationFnJoin(separator, args) {
+ if (Array.isArray(args)) {
+ return args.filter(el => !isNoValue(el)).map(renderIntrinsics).join(separator);
+ }
+ return stringifyIntrinsic('Fn::Join', [separator, args]);
+}
+function stringifyIntrinsic(fn, args) {
+ return JSON.stringify({ [fn]: renderIntrinsics(args) });
+}
+function getIntrinsic(x) {
+ if (x === undefined || x === null || Array.isArray(x)) {
+ return undefined;
+ }
+ if (typeof x !== 'object') {
+ return undefined;
+ }
+ const keys = Object.keys(x);
+ return keys.length === 1 && (keys[0] === 'Ref' || keys[0].startsWith('Fn::')) ? { fn: keys[0], args: x[keys[0]] } : undefined;
+}
+function isNoValue(x) {
+ const int = getIntrinsic(x);
+ return int && int.fn === 'Ref' && int.args === 'AWS::NoValue';
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyLWludHJpbnNpY3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJyZW5kZXItaW50cmluc2ljcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1CRztBQUNILFNBQWdCLGdCQUFnQixDQUFDLENBQU07SUFDckMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO1FBQ3BCLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUM7S0FDN0Q7SUFFRCxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRTtRQUFFLE9BQU8sU0FBUyxDQUFDO0tBQUU7SUFFdkMsTUFBTSxTQUFTLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xDLElBQUksU0FBUyxFQUFFO1FBQ2IsSUFBSSxTQUFTLENBQUMsRUFBRSxLQUFLLEtBQUssRUFBRTtZQUFFLE9BQU8sSUFBSSxHQUFHLFNBQVMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO1NBQUU7UUFDbkUsSUFBSSxTQUFTLENBQUMsRUFBRSxLQUFLLFlBQVksRUFBRTtZQUFFLE9BQU8sSUFBSSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO1NBQUU7UUFDdkcsSUFBSSxTQUFTLENBQUMsRUFBRSxLQUFLLFVBQVUsRUFBRTtZQUFFLE9BQU8sc0JBQXNCLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FBRTtRQUN6RyxPQUFPLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxFQUFFLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ3pEO0lBRUQsSUFBSSxPQUFPLENBQUMsS0FBSyxRQUFRLElBQUksQ0FBQyxLQUFLLElBQUksRUFBRTtRQUN2QyxNQUFNLEdBQUcsR0FBUSxFQUFFLENBQUM7UUFDcEIsS0FBSyxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDNUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDckIsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQ3BDO1NBQ0Y7UUFDRCxPQUFPLEdBQUcsQ0FBQztLQUNaO0lBQ0QsT0FBTyxDQUFDLENBQUM7QUFDWCxDQUFDO0FBekJELDRDQXlCQztBQUVELFNBQVMsc0JBQXNCLENBQUMsU0FBaUIsRUFBRSxJQUFTO0lBQzFELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUN2QixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztLQUNoRjtJQUNELE9BQU8sa0JBQWtCLENBQUMsVUFBVSxFQUFFLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDM0QsQ0FBQztBQUVELFNBQVMsa0JBQWtCLENBQUMsRUFBVSxFQUFFLElBQVM7SUFDL0MsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDMUQsQ0FBQztBQUVELFNBQVMsWUFBWSxDQUFDLENBQU07SUFDMUIsSUFBSSxDQUFDLEtBQUssU0FBUyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtRQUFFLE9BQU8sU0FBUyxDQUFDO0tBQUU7SUFDNUUsSUFBSSxPQUFPLENBQUMsS0FBSyxRQUFRLEVBQUU7UUFBRSxPQUFPLFNBQVMsQ0FBQztLQUFFO0lBQ2hELE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUIsT0FBTyxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7QUFDaEksQ0FBQztBQUVELFNBQVMsU0FBUyxDQUFDLENBQU07SUFDdkIsTUFBTSxHQUFHLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVCLE9BQU8sR0FBRyxJQUFJLEdBQUcsQ0FBQyxFQUFFLEtBQUssS0FBSyxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssY0FBYyxDQUFDO0FBQ2hFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFR1cm4gQ2xvdWRGb3JtYXRpb24gaW50cmluc2ljcyBpbnRvIHN0cmluZ3NcbiAqXG4gKiAtLS0tLS1cbiAqXG4gKiBUaGlzIHN0cmluZ2lmaWNhdGlvbiBpcyBub3QgaW50ZW5kZWQgdG8gYmUgbWVjaGFuaWNhbGx5IHJldmVyc2libGUhIEl0J3MgaW50ZW5kZWRcbiAqIHRvIGJlIHVuZGVyc3Rvb2QgYnkgaHVtYW5zIVxuICpcbiAqIC0tLS0tLVxuICpcbiAqIFR1cm5zIEZuOjpHZXRBdHQgYW5kIEZuOjpSZWYgb2JqZWN0cyBpbnRvIHRoZSBzYW1lIHN0cmluZ3MgdGhhdCBjYW4gYmVcbiAqIHBhcnNlZCBieSBGbjo6U3ViLCBidXQgd2l0aG91dCB0aGUgc3Vycm91bmRpbmcgaW50cmluc2ljcy5cbiAqXG4gKiBFdmFsdWF0ZXMgRm46OkpvaW4gZGlyZWN0bHkgaWYgdGhlIHNlY29uZCBhcmd1bWVudCBpcyBhIGxpdGVyYWwgbGlzdCBvZiBzdHJpbmdzLlxuICpcbiAqIFJlbW92ZXMgbGlzdCBhbmQgb2JqZWN0IHZhbHVlcyBldmFsdWF0aW5nIHRvIHsgUmVmOiAnQVdTOjpOb1ZhbHVlJyB9LlxuICpcbiAqIEZvciBvdGhlciBpbnRyaW5zaWNzIHdlIGNob29zZSBhIHN0cmluZyByZXByZXNlbnRhdGlvbiB0aGF0IENsb3VkRm9ybWF0aW9uXG4gKiBjYW5ub3QgYWN0dWFsbHkgcGFyc2UsIGJ1dCBpcyBjb21wcmVoZW5zaWJsZSB0byBodW1hbnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJJbnRyaW5zaWNzKHg6IGFueSk6IGFueSB7XG4gIGlmIChBcnJheS5pc0FycmF5KHgpKSB7XG4gICAgcmV0dXJuIHguZmlsdGVyKGVsID0+ICFpc05vVmFsdWUoZWwpKS5tYXAocmVuZGVySW50cmluc2ljcyk7XG4gIH1cblxuICBpZiAoaXNOb1ZhbHVlKHgpKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cblxuICBjb25zdCBpbnRyaW5zaWMgPSBnZXRJbnRyaW5zaWMoeCk7XG4gIGlmIChpbnRyaW5zaWMpIHtcbiAgICBpZiAoaW50cmluc2ljLmZuID09PSAnUmVmJykgeyByZXR1cm4gJyR7JyArIGludHJpbnNpYy5hcmdzICsgJ30nOyB9XG4gICAgaWYgKGludHJpbnNpYy5mbiA9PT0gJ0ZuOjpHZXRBdHQnKSB7IHJldHVybiAnJHsnICsgaW50cmluc2ljLmFyZ3NbMF0gKyAnLicgKyBpbnRyaW5zaWMuYXJnc1sxXSArICd9JzsgfVxuICAgIGlmIChpbnRyaW5zaWMuZm4gPT09ICdGbjo6Sm9pbicpIHsgcmV0dXJuIHVuQ2xvdWRGb3JtYXRpb25GbkpvaW4oaW50cmluc2ljLmFyZ3NbMF0sIGludHJpbnNpYy5hcmdzWzFdKTsgfVxuICAgIHJldHVybiBzdHJpbmdpZnlJbnRyaW5zaWMoaW50cmluc2ljLmZuLCBpbnRyaW5zaWMuYXJncyk7XG4gIH1cblxuICBpZiAodHlwZW9mIHggPT09ICdvYmplY3QnICYmIHggIT09IG51bGwpIHtcbiAgICBjb25zdCByZXQ6IGFueSA9IHt9O1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHgpKSB7XG4gICAgICBpZiAoIWlzTm9WYWx1ZSh2YWx1ZSkpIHtcbiAgICAgICAgcmV0W2tleV0gPSByZW5kZXJJbnRyaW5zaWNzKHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbiAgfVxuICByZXR1cm4geDtcbn1cblxuZnVuY3Rpb24gdW5DbG91ZEZvcm1hdGlvbkZuSm9pbihzZXBhcmF0b3I6IHN0cmluZywgYXJnczogYW55KSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGFyZ3MpKSB7XG4gICAgcmV0dXJuIGFyZ3MuZmlsdGVyKGVsID0+ICFpc05vVmFsdWUoZWwpKS5tYXAocmVuZGVySW50cmluc2ljcykuam9pbihzZXBhcmF0b3IpO1xuICB9XG4gIHJldHVybiBzdHJpbmdpZnlJbnRyaW5zaWMoJ0ZuOjpKb2luJywgW3NlcGFyYXRvciwgYXJnc10pO1xufVxuXG5mdW5jdGlvbiBzdHJpbmdpZnlJbnRyaW5zaWMoZm46IHN0cmluZywgYXJnczogYW55KSB7XG4gIHJldHVybiBKU09OLnN0cmluZ2lmeSh7IFtmbl06IHJlbmRlckludHJpbnNpY3MoYXJncykgfSk7XG59XG5cbmZ1bmN0aW9uIGdldEludHJpbnNpYyh4OiBhbnkpOiBJbnRyaW5zaWMgfCB1bmRlZmluZWQge1xuICBpZiAoeCA9PT0gdW5kZWZpbmVkIHx8IHggPT09IG51bGwgfHwgQXJyYXkuaXNBcnJheSh4KSkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGlmICh0eXBlb2YgeCAhPT0gJ29iamVjdCcpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoeCk7XG4gIHJldHVybiBrZXlzLmxlbmd0aCA9PT0gMSAmJiAoa2V5c1swXSA9PT0gJ1JlZicgfHwga2V5c1swXS5zdGFydHNXaXRoKCdGbjo6JykpID8geyBmbjoga2V5c1swXSwgYXJnczogeFtrZXlzWzBdXSB9IDogdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBpc05vVmFsdWUoeDogYW55KSB7XG4gIGNvbnN0IGludCA9IGdldEludHJpbnNpYyh4KTtcbiAgcmV0dXJuIGludCAmJiBpbnQuZm4gPT09ICdSZWYnICYmIGludC5hcmdzID09PSAnQVdTOjpOb1ZhbHVlJztcbn1cblxuaW50ZXJmYWNlIEludHJpbnNpYyB7XG4gIGZuOiBzdHJpbmc7XG4gIGFyZ3M6IGFueTtcbn0iXX0=
+
+/***/ }),
+
+/***/ 72341:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.flatMap = exports.deepRemoveUndefined = exports.dropIfEmpty = exports.makeComparator = void 0;
+/**
+ * Turn a (multi-key) extraction function into a comparator for use in Array.sort()
+ */
+function makeComparator(keyFn) {
+ return (a, b) => {
+ const keyA = keyFn(a);
+ const keyB = keyFn(b);
+ const len = Math.min(keyA.length, keyB.length);
+ for (let i = 0; i < len; i++) {
+ const c = compare(keyA[i], keyB[i]);
+ if (c !== 0) {
+ return c;
+ }
+ }
+ // Arrays are the same up to the min length -- shorter array sorts first
+ return keyA.length - keyB.length;
+ };
+}
+exports.makeComparator = makeComparator;
+function compare(a, b) {
+ if (a < b) {
+ return -1;
+ }
+ if (b < a) {
+ return 1;
+ }
+ return 0;
+}
+function dropIfEmpty(xs) {
+ return xs.length > 0 ? xs : undefined;
+}
+exports.dropIfEmpty = dropIfEmpty;
+function deepRemoveUndefined(x) {
+ if (typeof x === undefined || x === null) {
+ return x;
+ }
+ if (Array.isArray(x)) {
+ return x.map(deepRemoveUndefined);
+ }
+ if (typeof x === 'object') {
+ for (const [key, value] of Object.entries(x)) {
+ x[key] = deepRemoveUndefined(value);
+ if (x[key] === undefined) {
+ delete x[key];
+ }
+ }
+ return x;
+ }
+ return x;
+}
+exports.deepRemoveUndefined = deepRemoveUndefined;
+function flatMap(xs, f) {
+ const ret = new Array();
+ for (const x of xs) {
+ ret.push(...f(x));
+ }
+ return ret;
+}
+exports.flatMap = flatMap;
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUE7O0dBRUc7QUFDSCxTQUFnQixjQUFjLENBQU8sS0FBb0I7SUFDdkQsT0FBTyxDQUFDLENBQUksRUFBRSxDQUFJLEVBQUUsRUFBRTtRQUNwQixNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEIsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFL0MsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUM1QixNQUFNLENBQUMsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFBRSxPQUFPLENBQUMsQ0FBQzthQUFFO1NBQzNCO1FBRUQsd0VBQXdFO1FBQ3hFLE9BQU8sSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ25DLENBQUMsQ0FBQztBQUNKLENBQUM7QUFkRCx3Q0FjQztBQUVELFNBQVMsT0FBTyxDQUFJLENBQUksRUFBRSxDQUFJO0lBQzVCLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7S0FBRTtJQUN6QixJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFBRSxPQUFPLENBQUMsQ0FBQztLQUFFO0lBQ3hCLE9BQU8sQ0FBQyxDQUFDO0FBQ1gsQ0FBQztBQUVELFNBQWdCLFdBQVcsQ0FBSSxFQUFPO0lBQ3BDLE9BQU8sRUFBRSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0FBQ3hDLENBQUM7QUFGRCxrQ0FFQztBQUVELFNBQWdCLG1CQUFtQixDQUFDLENBQU07SUFDeEMsSUFBSSxPQUFPLENBQUMsS0FBSyxTQUFTLElBQUksQ0FBQyxLQUFLLElBQUksRUFBRTtRQUFFLE9BQU8sQ0FBQyxDQUFDO0tBQUU7SUFDdkQsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO1FBQUUsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFDLENBQUM7S0FBRTtJQUM1RCxJQUFJLE9BQU8sQ0FBQyxLQUFLLFFBQVEsRUFBRTtRQUN6QixLQUFLLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUM1QyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDcEMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssU0FBUyxFQUFFO2dCQUFFLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQUU7U0FDN0M7UUFDRCxPQUFPLENBQUMsQ0FBQztLQUNWO0lBQ0QsT0FBTyxDQUFDLENBQUM7QUFDWCxDQUFDO0FBWEQsa0RBV0M7QUFFRCxTQUFnQixPQUFPLENBQU8sRUFBTyxFQUFFLENBQWdCO0lBQ3JELE1BQU0sR0FBRyxHQUFHLElBQUksS0FBSyxFQUFLLENBQUM7SUFDM0IsS0FBSyxNQUFNLENBQUMsSUFBSSxFQUFFLEVBQUU7UUFDbEIsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ25CO0lBQ0QsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBTkQsMEJBTUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFR1cm4gYSAobXVsdGkta2V5KSBleHRyYWN0aW9uIGZ1bmN0aW9uIGludG8gYSBjb21wYXJhdG9yIGZvciB1c2UgaW4gQXJyYXkuc29ydCgpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYWtlQ29tcGFyYXRvcjxULCBVPihrZXlGbjogKHg6IFQpID0+IFVbXSkge1xuICByZXR1cm4gKGE6IFQsIGI6IFQpID0+IHtcbiAgICBjb25zdCBrZXlBID0ga2V5Rm4oYSk7XG4gICAgY29uc3Qga2V5QiA9IGtleUZuKGIpO1xuICAgIGNvbnN0IGxlbiA9IE1hdGgubWluKGtleUEubGVuZ3RoLCBrZXlCLmxlbmd0aCk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBjb25zdCBjID0gY29tcGFyZShrZXlBW2ldLCBrZXlCW2ldKTtcbiAgICAgIGlmIChjICE9PSAwKSB7IHJldHVybiBjOyB9XG4gICAgfVxuXG4gICAgLy8gQXJyYXlzIGFyZSB0aGUgc2FtZSB1cCB0byB0aGUgbWluIGxlbmd0aCAtLSBzaG9ydGVyIGFycmF5IHNvcnRzIGZpcnN0XG4gICAgcmV0dXJuIGtleUEubGVuZ3RoIC0ga2V5Qi5sZW5ndGg7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGNvbXBhcmU8VD4oYTogVCwgYjogVCkge1xuICBpZiAoYSA8IGIpIHsgcmV0dXJuIC0xOyB9XG4gIGlmIChiIDwgYSkgeyByZXR1cm4gMTsgfVxuICByZXR1cm4gMDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRyb3BJZkVtcHR5PFQ+KHhzOiBUW10pOiBUW10gfCB1bmRlZmluZWQge1xuICByZXR1cm4geHMubGVuZ3RoID4gMCA/IHhzIDogdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVlcFJlbW92ZVVuZGVmaW5lZCh4OiBhbnkpOiBhbnkge1xuICBpZiAodHlwZW9mIHggPT09IHVuZGVmaW5lZCB8fCB4ID09PSBudWxsKSB7IHJldHVybiB4OyB9XG4gIGlmIChBcnJheS5pc0FycmF5KHgpKSB7IHJldHVybiB4Lm1hcChkZWVwUmVtb3ZlVW5kZWZpbmVkKTsgfVxuICBpZiAodHlwZW9mIHggPT09ICdvYmplY3QnKSB7XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoeCkpIHtcbiAgICAgIHhba2V5XSA9IGRlZXBSZW1vdmVVbmRlZmluZWQodmFsdWUpO1xuICAgICAgaWYgKHhba2V5XSA9PT0gdW5kZWZpbmVkKSB7IGRlbGV0ZSB4W2tleV07IH1cbiAgICB9XG4gICAgcmV0dXJuIHg7XG4gIH1cbiAgcmV0dXJuIHg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmbGF0TWFwPFQsIFU+KHhzOiBUW10sIGY6ICh4OiBUKSA9PiBVW10pOiBVW10ge1xuICBjb25zdCByZXQgPSBuZXcgQXJyYXk8VT4oKTtcbiAgZm9yIChjb25zdCB4IG9mIHhzKSB7XG4gICAgcmV0LnB1c2goLi4uZih4KSk7XG4gIH1cbiAgcmV0dXJuIHJldDtcbn0iXX0=
+
+/***/ }),
+
+/***/ 32374:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+// Copyright Amazon.com Inc. or its affiliates. All Rights Reserved.
+// SPDX-License-Identifier: Apache-2.0
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.AwsCrc32 = void 0;
+var tslib_1 = __nccwpck_require__(5066);
+var util_1 = __nccwpck_require__(41236);
+var index_1 = __nccwpck_require__(47327);
+var AwsCrc32 = /** @class */ (function () {
+ function AwsCrc32() {
+ this.crc32 = new index_1.Crc32();
+ }
+ AwsCrc32.prototype.update = function (toHash) {
+ if ((0, util_1.isEmptyData)(toHash))
+ return;
+ this.crc32.update((0, util_1.convertToBuffer)(toHash));
+ };
+ AwsCrc32.prototype.digest = function () {
+ return tslib_1.__awaiter(this, void 0, void 0, function () {
+ return tslib_1.__generator(this, function (_a) {
+ return [2 /*return*/, (0, util_1.numToUint8)(this.crc32.digest())];
+ });
+ });
+ };
+ AwsCrc32.prototype.reset = function () {
+ this.crc32 = new index_1.Crc32();
+ };
+ return AwsCrc32;
+}());
+exports.AwsCrc32 = AwsCrc32;
+//# sourceMappingURL=aws_crc32.js.map
+
+/***/ }),
+
+/***/ 47327:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.AwsCrc32 = exports.Crc32 = exports.crc32 = void 0;
+var tslib_1 = __nccwpck_require__(5066);
+var util_1 = __nccwpck_require__(41236);
+function crc32(data) {
+ return new Crc32().update(data).digest();
+}
+exports.crc32 = crc32;
+var Crc32 = /** @class */ (function () {
+ function Crc32() {
+ this.checksum = 0xffffffff;
+ }
+ Crc32.prototype.update = function (data) {
+ var e_1, _a;
+ try {
+ for (var data_1 = tslib_1.__values(data), data_1_1 = data_1.next(); !data_1_1.done; data_1_1 = data_1.next()) {
+ var byte = data_1_1.value;
+ this.checksum =
+ (this.checksum >>> 8) ^ lookupTable[(this.checksum ^ byte) & 0xff];
+ }
+ }
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
+ finally {
+ try {
+ if (data_1_1 && !data_1_1.done && (_a = data_1.return)) _a.call(data_1);
+ }
+ finally { if (e_1) throw e_1.error; }
+ }
+ return this;
+ };
+ Crc32.prototype.digest = function () {
+ return (this.checksum ^ 0xffffffff) >>> 0;
+ };
+ return Crc32;
+}());
+exports.Crc32 = Crc32;
+// prettier-ignore
+var a_lookUpTable = [
+ 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA,
+ 0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3,
+ 0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988,
+ 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91,
+ 0x1DB71064, 0x6AB020F2, 0xF3B97148, 0x84BE41DE,
+ 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7,
+ 0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC,
+ 0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5,
+ 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172,
+ 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B,
+ 0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940,
+ 0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59,
+ 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116,
+ 0x21B4F4B5, 0x56B3C423, 0xCFBA9599, 0xB8BDA50F,
+ 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924,
+ 0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D,
+ 0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A,
+ 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433,
+ 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818,
+ 0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01,
+ 0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E,
+ 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457,
+ 0x65B0D9C6, 0x12B7E950, 0x8BBEB8EA, 0xFCB9887C,
+ 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65,
+ 0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2,
+ 0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB,
+ 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0,
+ 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9,
+ 0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086,
+ 0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F,
+ 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4,
+ 0x59B33D17, 0x2EB40D81, 0xB7BD5C3B, 0xC0BA6CAD,
+ 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A,
+ 0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683,
+ 0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8,
+ 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1,
+ 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE,
+ 0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7,
+ 0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC,
+ 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5,
+ 0xD6D6A3E8, 0xA1D1937E, 0x38D8C2C4, 0x4FDFF252,
+ 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B,
+ 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60,
+ 0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79,
+ 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236,
+ 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F,
+ 0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04,
+ 0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D,
+ 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A,
+ 0x9C0906A9, 0xEB0E363F, 0x72076785, 0x05005713,
+ 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38,
+ 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21,
+ 0x86D3D2D4, 0xF1D4E242, 0x68DDB3F8, 0x1FDA836E,
+ 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777,
+ 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C,
+ 0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45,
+ 0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2,
+ 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB,
+ 0xAED16A4A, 0xD9D65ADC, 0x40DF0B66, 0x37D83BF0,
+ 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9,
+ 0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6,
+ 0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF,
+ 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94,
+ 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D,
+];
+var lookupTable = (0, util_1.uint32ArrayFrom)(a_lookUpTable);
+var aws_crc32_1 = __nccwpck_require__(32374);
+Object.defineProperty(exports, "AwsCrc32", ({ enumerable: true, get: function () { return aws_crc32_1.AwsCrc32; } }));
+//# sourceMappingURL=index.js.map
+
+/***/ }),
+
+/***/ 5066:
+/***/ ((module) => {
+
+/*! *****************************************************************************
+Copyright (c) Microsoft Corporation.
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+PERFORMANCE OF THIS SOFTWARE.
+***************************************************************************** */
+
+/* global global, define, System, Reflect, Promise */
+var __extends;
+var __assign;
+var __rest;
+var __decorate;
+var __param;
+var __metadata;
+var __awaiter;
+var __generator;
+var __exportStar;
+var __values;
+var __read;
+var __spread;
+var __spreadArrays;
+var __await;
+var __asyncGenerator;
+var __asyncDelegator;
+var __asyncValues;
+var __makeTemplateObject;
+var __importStar;
+var __importDefault;
+var __classPrivateFieldGet;
+var __classPrivateFieldSet;
+var __createBinding;
+(function (factory) {
+ var root = typeof global === "object" ? global : typeof self === "object" ? self : typeof this === "object" ? this : {};
+ if (typeof define === "function" && define.amd) {
+ define("tslib", ["exports"], function (exports) { factory(createExporter(root, createExporter(exports))); });
+ }
+ else if ( true && typeof module.exports === "object") {
+ factory(createExporter(root, createExporter(module.exports)));
+ }
+ else {
+ factory(createExporter(root));
+ }
+ function createExporter(exports, previous) {
+ if (exports !== root) {
+ if (typeof Object.create === "function") {
+ Object.defineProperty(exports, "__esModule", { value: true });
+ }
+ else {
+ exports.__esModule = true;
+ }
+ }
+ return function (id, v) { return exports[id] = previous ? previous(id, v) : v; };
+ }
+})
+(function (exporter) {
+ var extendStatics = Object.setPrototypeOf ||
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
+ function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
+
+ __extends = function (d, b) {
+ extendStatics(d, b);
+ function __() { this.constructor = d; }
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+ };
+
+ __assign = Object.assign || function (t) {
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
+ s = arguments[i];
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
+ }
+ return t;
+ };
+
+ __rest = function (s, e) {
+ var t = {};
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
+ t[p] = s[p];
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
+ t[p[i]] = s[p[i]];
+ }
+ return t;
+ };
+
+ __decorate = function (decorators, target, key, desc) {
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
+ };
+
+ __param = function (paramIndex, decorator) {
+ return function (target, key) { decorator(target, key, paramIndex); }
+ };
+
+ __metadata = function (metadataKey, metadataValue) {
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(metadataKey, metadataValue);
+ };
+
+ __awaiter = function (thisArg, _arguments, P, generator) {
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
+ return new (P || (P = Promise))(function (resolve, reject) {
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
+ });
+ };
+
+ __generator = function (thisArg, body) {
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
+ function verb(n) { return function (v) { return step([n, v]); }; }
+ function step(op) {
+ if (f) throw new TypeError("Generator is already executing.");
+ while (_) try {
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
+ if (y = 0, t) op = [op[0] & 2, t.value];
+ switch (op[0]) {
+ case 0: case 1: t = op; break;
+ case 4: _.label++; return { value: op[1], done: false };
+ case 5: _.label++; y = op[1]; op = [0]; continue;
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
+ default:
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
+ if (t[2]) _.ops.pop();
+ _.trys.pop(); continue;
+ }
+ op = body.call(thisArg, _);
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
+ }
+ };
+
+ __createBinding = function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ o[k2] = m[k];
+ };
+
+ __exportStar = function (m, exports) {
+ for (var p in m) if (p !== "default" && !exports.hasOwnProperty(p)) exports[p] = m[p];
+ };
+
+ __values = function (o) {
+ var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
+ if (m) return m.call(o);
+ if (o && typeof o.length === "number") return {
+ next: function () {
+ if (o && i >= o.length) o = void 0;
+ return { value: o && o[i++], done: !o };
+ }
+ };
+ throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
+ };
+
+ __read = function (o, n) {
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
+ if (!m) return o;
+ var i = m.call(o), r, ar = [], e;
+ try {
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
+ }
+ catch (error) { e = { error: error }; }
+ finally {
+ try {
+ if (r && !r.done && (m = i["return"])) m.call(i);
+ }
+ finally { if (e) throw e.error; }
+ }
+ return ar;
+ };
+
+ __spread = function () {
+ for (var ar = [], i = 0; i < arguments.length; i++)
+ ar = ar.concat(__read(arguments[i]));
+ return ar;
+ };
+
+ __spreadArrays = function () {
+ for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
+ for (var r = Array(s), k = 0, i = 0; i < il; i++)
+ for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
+ r[k] = a[j];
+ return r;
+ };
+
+ __await = function (v) {
+ return this instanceof __await ? (this.v = v, this) : new __await(v);
+ };
+
+ __asyncGenerator = function (thisArg, _arguments, generator) {
+ if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
+ var g = generator.apply(thisArg, _arguments || []), i, q = [];
+ return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i;
+ function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }
+ function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }
+ function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }
+ function fulfill(value) { resume("next", value); }
+ function reject(value) { resume("throw", value); }
+ function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }
+ };
+
+ __asyncDelegator = function (o) {
+ var i, p;
+ return i = {}, verb("next"), verb("throw", function (e) { throw e; }), verb("return"), i[Symbol.iterator] = function () { return this; }, i;
+ function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : f ? f(v) : v; } : f; }
+ };
+
+ __asyncValues = function (o) {
+ if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
+ var m = o[Symbol.asyncIterator], i;
+ return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i);
+ function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }
+ function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
+ };
+
+ __makeTemplateObject = function (cooked, raw) {
+ if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; }
+ return cooked;
+ };
+
+ __importStar = function (mod) {
+ if (mod && mod.__esModule) return mod;
+ var result = {};
+ if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
+ result["default"] = mod;
+ return result;
+ };
+
+ __importDefault = function (mod) {
+ return (mod && mod.__esModule) ? mod : { "default": mod };
+ };
+
+ __classPrivateFieldGet = function (receiver, privateMap) {
+ if (!privateMap.has(receiver)) {
+ throw new TypeError("attempted to get private field on non-instance");
+ }
+ return privateMap.get(receiver);
+ };
+
+ __classPrivateFieldSet = function (receiver, privateMap, value) {
+ if (!privateMap.has(receiver)) {
+ throw new TypeError("attempted to set private field on non-instance");
+ }
+ privateMap.set(receiver, value);
+ return value;
+ };
+
+ exporter("__extends", __extends);
+ exporter("__assign", __assign);
+ exporter("__rest", __rest);
+ exporter("__decorate", __decorate);
+ exporter("__param", __param);
+ exporter("__metadata", __metadata);
+ exporter("__awaiter", __awaiter);
+ exporter("__generator", __generator);
+ exporter("__exportStar", __exportStar);
+ exporter("__createBinding", __createBinding);
+ exporter("__values", __values);
+ exporter("__read", __read);
+ exporter("__spread", __spread);
+ exporter("__spreadArrays", __spreadArrays);
+ exporter("__await", __await);
+ exporter("__asyncGenerator", __asyncGenerator);
+ exporter("__asyncDelegator", __asyncDelegator);
+ exporter("__asyncValues", __asyncValues);
+ exporter("__makeTemplateObject", __makeTemplateObject);
+ exporter("__importStar", __importStar);
+ exporter("__importDefault", __importDefault);
+ exporter("__classPrivateFieldGet", __classPrivateFieldGet);
+ exporter("__classPrivateFieldSet", __classPrivateFieldSet);
+});
+
+
+/***/ }),
+
+/***/ 43228:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+// Copyright Amazon.com Inc. or its affiliates. All Rights Reserved.
+// SPDX-License-Identifier: Apache-2.0
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.convertToBuffer = void 0;
+var util_utf8_browser_1 = __nccwpck_require__(28172);
+// Quick polyfill
+var fromUtf8 = typeof Buffer !== "undefined" && Buffer.from
+ ? function (input) { return Buffer.from(input, "utf8"); }
+ : util_utf8_browser_1.fromUtf8;
+function convertToBuffer(data) {
+ // Already a Uint8, do nothing
+ if (data instanceof Uint8Array)
+ return data;
+ if (typeof data === "string") {
+ return fromUtf8(data);
+ }
+ if (ArrayBuffer.isView(data)) {
+ return new Uint8Array(data.buffer, data.byteOffset, data.byteLength / Uint8Array.BYTES_PER_ELEMENT);
+ }
+ return new Uint8Array(data);
+}
+exports.convertToBuffer = convertToBuffer;
+//# sourceMappingURL=convertToBuffer.js.map
+
+/***/ }),
+
+/***/ 41236:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+// Copyright Amazon.com Inc. or its affiliates. All Rights Reserved.
+// SPDX-License-Identifier: Apache-2.0
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.uint32ArrayFrom = exports.numToUint8 = exports.isEmptyData = exports.convertToBuffer = void 0;
+var convertToBuffer_1 = __nccwpck_require__(43228);
+Object.defineProperty(exports, "convertToBuffer", ({ enumerable: true, get: function () { return convertToBuffer_1.convertToBuffer; } }));
+var isEmptyData_1 = __nccwpck_require__(18275);
+Object.defineProperty(exports, "isEmptyData", ({ enumerable: true, get: function () { return isEmptyData_1.isEmptyData; } }));
+var numToUint8_1 = __nccwpck_require__(93775);
+Object.defineProperty(exports, "numToUint8", ({ enumerable: true, get: function () { return numToUint8_1.numToUint8; } }));
+var uint32ArrayFrom_1 = __nccwpck_require__(39404);
+Object.defineProperty(exports, "uint32ArrayFrom", ({ enumerable: true, get: function () { return uint32ArrayFrom_1.uint32ArrayFrom; } }));
+//# sourceMappingURL=index.js.map
+
+/***/ }),
+
+/***/ 18275:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+// Copyright Amazon.com Inc. or its affiliates. All Rights Reserved.
+// SPDX-License-Identifier: Apache-2.0
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.isEmptyData = void 0;
+function isEmptyData(data) {
+ if (typeof data === "string") {
+ return data.length === 0;
+ }
+ return data.byteLength === 0;
+}
+exports.isEmptyData = isEmptyData;
+//# sourceMappingURL=isEmptyData.js.map
+
+/***/ }),
+
+/***/ 93775:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+// Copyright Amazon.com Inc. or its affiliates. All Rights Reserved.
+// SPDX-License-Identifier: Apache-2.0
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.numToUint8 = void 0;
+function numToUint8(num) {
+ return new Uint8Array([
+ (num & 0xff000000) >> 24,
+ (num & 0x00ff0000) >> 16,
+ (num & 0x0000ff00) >> 8,
+ num & 0x000000ff,
+ ]);
+}
+exports.numToUint8 = numToUint8;
+//# sourceMappingURL=numToUint8.js.map
+
+/***/ }),
+
+/***/ 39404:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+// Copyright Amazon.com Inc. or its affiliates. All Rights Reserved.
+// SPDX-License-Identifier: Apache-2.0
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.uint32ArrayFrom = void 0;
+// IE 11 does not support Array.from, so we do it manually
+function uint32ArrayFrom(a_lookUpTable) {
+ if (!Uint32Array.from) {
+ var return_array = new Uint32Array(a_lookUpTable.length);
+ var a_index = 0;
+ while (a_index < a_lookUpTable.length) {
+ return_array[a_index] = a_lookUpTable[a_index];
+ a_index += 1;
+ }
+ return return_array;
+ }
+ return Uint32Array.from(a_lookUpTable);
+}
+exports.uint32ArrayFrom = uint32ArrayFrom;
+//# sourceMappingURL=uint32ArrayFrom.js.map
+
+/***/ }),
+
+/***/ 86196:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.CloudFormation = void 0;
+const smithy_client_1 = __nccwpck_require__(63570);
+const CloudFormationClient_1 = __nccwpck_require__(10456);
+const ActivateOrganizationsAccessCommand_1 = __nccwpck_require__(15634);
+const ActivateTypeCommand_1 = __nccwpck_require__(48434);
+const BatchDescribeTypeConfigurationsCommand_1 = __nccwpck_require__(77385);
+const CancelUpdateStackCommand_1 = __nccwpck_require__(88544);
+const ContinueUpdateRollbackCommand_1 = __nccwpck_require__(96302);
+const CreateChangeSetCommand_1 = __nccwpck_require__(27066);
+const CreateStackCommand_1 = __nccwpck_require__(94382);
+const CreateStackInstancesCommand_1 = __nccwpck_require__(79648);
+const CreateStackSetCommand_1 = __nccwpck_require__(59691);
+const DeactivateOrganizationsAccessCommand_1 = __nccwpck_require__(24623);
+const DeactivateTypeCommand_1 = __nccwpck_require__(57493);
+const DeleteChangeSetCommand_1 = __nccwpck_require__(51096);
+const DeleteStackCommand_1 = __nccwpck_require__(38501);
+const DeleteStackInstancesCommand_1 = __nccwpck_require__(37302);
+const DeleteStackSetCommand_1 = __nccwpck_require__(80589);
+const DeregisterTypeCommand_1 = __nccwpck_require__(15931);
+const DescribeAccountLimitsCommand_1 = __nccwpck_require__(90664);
+const DescribeChangeSetCommand_1 = __nccwpck_require__(94895);
+const DescribeChangeSetHooksCommand_1 = __nccwpck_require__(76824);
+const DescribeOrganizationsAccessCommand_1 = __nccwpck_require__(54280);
+const DescribePublisherCommand_1 = __nccwpck_require__(27761);
+const DescribeStackDriftDetectionStatusCommand_1 = __nccwpck_require__(13680);
+const DescribeStackEventsCommand_1 = __nccwpck_require__(87929);
+const DescribeStackInstanceCommand_1 = __nccwpck_require__(3420);
+const DescribeStackResourceCommand_1 = __nccwpck_require__(20719);
+const DescribeStackResourceDriftsCommand_1 = __nccwpck_require__(22837);
+const DescribeStackResourcesCommand_1 = __nccwpck_require__(40897);
+const DescribeStacksCommand_1 = __nccwpck_require__(79769);
+const DescribeStackSetCommand_1 = __nccwpck_require__(64638);
+const DescribeStackSetOperationCommand_1 = __nccwpck_require__(50347);
+const DescribeTypeCommand_1 = __nccwpck_require__(78756);
+const DescribeTypeRegistrationCommand_1 = __nccwpck_require__(80130);
+const DetectStackDriftCommand_1 = __nccwpck_require__(67753);
+const DetectStackResourceDriftCommand_1 = __nccwpck_require__(75956);
+const DetectStackSetDriftCommand_1 = __nccwpck_require__(83591);
+const EstimateTemplateCostCommand_1 = __nccwpck_require__(71636);
+const ExecuteChangeSetCommand_1 = __nccwpck_require__(57399);
+const GetStackPolicyCommand_1 = __nccwpck_require__(9450);
+const GetTemplateCommand_1 = __nccwpck_require__(93644);
+const GetTemplateSummaryCommand_1 = __nccwpck_require__(97513);
+const ImportStacksToStackSetCommand_1 = __nccwpck_require__(92148);
+const ListChangeSetsCommand_1 = __nccwpck_require__(87882);
+const ListExportsCommand_1 = __nccwpck_require__(81426);
+const ListImportsCommand_1 = __nccwpck_require__(21574);
+const ListStackInstanceResourceDriftsCommand_1 = __nccwpck_require__(66194);
+const ListStackInstancesCommand_1 = __nccwpck_require__(70488);
+const ListStackResourcesCommand_1 = __nccwpck_require__(12602);
+const ListStacksCommand_1 = __nccwpck_require__(11276);
+const ListStackSetOperationResultsCommand_1 = __nccwpck_require__(12200);
+const ListStackSetOperationsCommand_1 = __nccwpck_require__(65603);
+const ListStackSetsCommand_1 = __nccwpck_require__(25005);
+const ListTypeRegistrationsCommand_1 = __nccwpck_require__(53280);
+const ListTypesCommand_1 = __nccwpck_require__(53520);
+const ListTypeVersionsCommand_1 = __nccwpck_require__(31414);
+const PublishTypeCommand_1 = __nccwpck_require__(60606);
+const RecordHandlerProgressCommand_1 = __nccwpck_require__(97403);
+const RegisterPublisherCommand_1 = __nccwpck_require__(95254);
+const RegisterTypeCommand_1 = __nccwpck_require__(25988);
+const RollbackStackCommand_1 = __nccwpck_require__(55529);
+const SetStackPolicyCommand_1 = __nccwpck_require__(66908);
+const SetTypeConfigurationCommand_1 = __nccwpck_require__(83725);
+const SetTypeDefaultVersionCommand_1 = __nccwpck_require__(60258);
+const SignalResourceCommand_1 = __nccwpck_require__(58003);
+const StopStackSetOperationCommand_1 = __nccwpck_require__(26499);
+const TestTypeCommand_1 = __nccwpck_require__(94162);
+const UpdateStackCommand_1 = __nccwpck_require__(14210);
+const UpdateStackInstancesCommand_1 = __nccwpck_require__(25455);
+const UpdateStackSetCommand_1 = __nccwpck_require__(70556);
+const UpdateTerminationProtectionCommand_1 = __nccwpck_require__(50917);
+const ValidateTemplateCommand_1 = __nccwpck_require__(11609);
+const commands = {
+ ActivateOrganizationsAccessCommand: ActivateOrganizationsAccessCommand_1.ActivateOrganizationsAccessCommand,
+ ActivateTypeCommand: ActivateTypeCommand_1.ActivateTypeCommand,
+ BatchDescribeTypeConfigurationsCommand: BatchDescribeTypeConfigurationsCommand_1.BatchDescribeTypeConfigurationsCommand,
+ CancelUpdateStackCommand: CancelUpdateStackCommand_1.CancelUpdateStackCommand,
+ ContinueUpdateRollbackCommand: ContinueUpdateRollbackCommand_1.ContinueUpdateRollbackCommand,
+ CreateChangeSetCommand: CreateChangeSetCommand_1.CreateChangeSetCommand,
+ CreateStackCommand: CreateStackCommand_1.CreateStackCommand,
+ CreateStackInstancesCommand: CreateStackInstancesCommand_1.CreateStackInstancesCommand,
+ CreateStackSetCommand: CreateStackSetCommand_1.CreateStackSetCommand,
+ DeactivateOrganizationsAccessCommand: DeactivateOrganizationsAccessCommand_1.DeactivateOrganizationsAccessCommand,
+ DeactivateTypeCommand: DeactivateTypeCommand_1.DeactivateTypeCommand,
+ DeleteChangeSetCommand: DeleteChangeSetCommand_1.DeleteChangeSetCommand,
+ DeleteStackCommand: DeleteStackCommand_1.DeleteStackCommand,
+ DeleteStackInstancesCommand: DeleteStackInstancesCommand_1.DeleteStackInstancesCommand,
+ DeleteStackSetCommand: DeleteStackSetCommand_1.DeleteStackSetCommand,
+ DeregisterTypeCommand: DeregisterTypeCommand_1.DeregisterTypeCommand,
+ DescribeAccountLimitsCommand: DescribeAccountLimitsCommand_1.DescribeAccountLimitsCommand,
+ DescribeChangeSetCommand: DescribeChangeSetCommand_1.DescribeChangeSetCommand,
+ DescribeChangeSetHooksCommand: DescribeChangeSetHooksCommand_1.DescribeChangeSetHooksCommand,
+ DescribeOrganizationsAccessCommand: DescribeOrganizationsAccessCommand_1.DescribeOrganizationsAccessCommand,
+ DescribePublisherCommand: DescribePublisherCommand_1.DescribePublisherCommand,
+ DescribeStackDriftDetectionStatusCommand: DescribeStackDriftDetectionStatusCommand_1.DescribeStackDriftDetectionStatusCommand,
+ DescribeStackEventsCommand: DescribeStackEventsCommand_1.DescribeStackEventsCommand,
+ DescribeStackInstanceCommand: DescribeStackInstanceCommand_1.DescribeStackInstanceCommand,
+ DescribeStackResourceCommand: DescribeStackResourceCommand_1.DescribeStackResourceCommand,
+ DescribeStackResourceDriftsCommand: DescribeStackResourceDriftsCommand_1.DescribeStackResourceDriftsCommand,
+ DescribeStackResourcesCommand: DescribeStackResourcesCommand_1.DescribeStackResourcesCommand,
+ DescribeStacksCommand: DescribeStacksCommand_1.DescribeStacksCommand,
+ DescribeStackSetCommand: DescribeStackSetCommand_1.DescribeStackSetCommand,
+ DescribeStackSetOperationCommand: DescribeStackSetOperationCommand_1.DescribeStackSetOperationCommand,
+ DescribeTypeCommand: DescribeTypeCommand_1.DescribeTypeCommand,
+ DescribeTypeRegistrationCommand: DescribeTypeRegistrationCommand_1.DescribeTypeRegistrationCommand,
+ DetectStackDriftCommand: DetectStackDriftCommand_1.DetectStackDriftCommand,
+ DetectStackResourceDriftCommand: DetectStackResourceDriftCommand_1.DetectStackResourceDriftCommand,
+ DetectStackSetDriftCommand: DetectStackSetDriftCommand_1.DetectStackSetDriftCommand,
+ EstimateTemplateCostCommand: EstimateTemplateCostCommand_1.EstimateTemplateCostCommand,
+ ExecuteChangeSetCommand: ExecuteChangeSetCommand_1.ExecuteChangeSetCommand,
+ GetStackPolicyCommand: GetStackPolicyCommand_1.GetStackPolicyCommand,
+ GetTemplateCommand: GetTemplateCommand_1.GetTemplateCommand,
+ GetTemplateSummaryCommand: GetTemplateSummaryCommand_1.GetTemplateSummaryCommand,
+ ImportStacksToStackSetCommand: ImportStacksToStackSetCommand_1.ImportStacksToStackSetCommand,
+ ListChangeSetsCommand: ListChangeSetsCommand_1.ListChangeSetsCommand,
+ ListExportsCommand: ListExportsCommand_1.ListExportsCommand,
+ ListImportsCommand: ListImportsCommand_1.ListImportsCommand,
+ ListStackInstanceResourceDriftsCommand: ListStackInstanceResourceDriftsCommand_1.ListStackInstanceResourceDriftsCommand,
+ ListStackInstancesCommand: ListStackInstancesCommand_1.ListStackInstancesCommand,
+ ListStackResourcesCommand: ListStackResourcesCommand_1.ListStackResourcesCommand,
+ ListStacksCommand: ListStacksCommand_1.ListStacksCommand,
+ ListStackSetOperationResultsCommand: ListStackSetOperationResultsCommand_1.ListStackSetOperationResultsCommand,
+ ListStackSetOperationsCommand: ListStackSetOperationsCommand_1.ListStackSetOperationsCommand,
+ ListStackSetsCommand: ListStackSetsCommand_1.ListStackSetsCommand,
+ ListTypeRegistrationsCommand: ListTypeRegistrationsCommand_1.ListTypeRegistrationsCommand,
+ ListTypesCommand: ListTypesCommand_1.ListTypesCommand,
+ ListTypeVersionsCommand: ListTypeVersionsCommand_1.ListTypeVersionsCommand,
+ PublishTypeCommand: PublishTypeCommand_1.PublishTypeCommand,
+ RecordHandlerProgressCommand: RecordHandlerProgressCommand_1.RecordHandlerProgressCommand,
+ RegisterPublisherCommand: RegisterPublisherCommand_1.RegisterPublisherCommand,
+ RegisterTypeCommand: RegisterTypeCommand_1.RegisterTypeCommand,
+ RollbackStackCommand: RollbackStackCommand_1.RollbackStackCommand,
+ SetStackPolicyCommand: SetStackPolicyCommand_1.SetStackPolicyCommand,
+ SetTypeConfigurationCommand: SetTypeConfigurationCommand_1.SetTypeConfigurationCommand,
+ SetTypeDefaultVersionCommand: SetTypeDefaultVersionCommand_1.SetTypeDefaultVersionCommand,
+ SignalResourceCommand: SignalResourceCommand_1.SignalResourceCommand,
+ StopStackSetOperationCommand: StopStackSetOperationCommand_1.StopStackSetOperationCommand,
+ TestTypeCommand: TestTypeCommand_1.TestTypeCommand,
+ UpdateStackCommand: UpdateStackCommand_1.UpdateStackCommand,
+ UpdateStackInstancesCommand: UpdateStackInstancesCommand_1.UpdateStackInstancesCommand,
+ UpdateStackSetCommand: UpdateStackSetCommand_1.UpdateStackSetCommand,
+ UpdateTerminationProtectionCommand: UpdateTerminationProtectionCommand_1.UpdateTerminationProtectionCommand,
+ ValidateTemplateCommand: ValidateTemplateCommand_1.ValidateTemplateCommand,
+};
+class CloudFormation extends CloudFormationClient_1.CloudFormationClient {
+}
+exports.CloudFormation = CloudFormation;
+(0, smithy_client_1.createAggregatedClient)(commands, CloudFormation);
+
+
+/***/ }),
+
+/***/ 10456:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.CloudFormationClient = exports.__Client = void 0;
+const middleware_host_header_1 = __nccwpck_require__(22545);
+const middleware_logger_1 = __nccwpck_require__(20014);
+const middleware_recursion_detection_1 = __nccwpck_require__(85525);
+const middleware_signing_1 = __nccwpck_require__(14935);
+const middleware_user_agent_1 = __nccwpck_require__(64688);
+const config_resolver_1 = __nccwpck_require__(53098);
+const middleware_content_length_1 = __nccwpck_require__(82800);
+const middleware_endpoint_1 = __nccwpck_require__(82918);
+const middleware_retry_1 = __nccwpck_require__(96039);
+const smithy_client_1 = __nccwpck_require__(63570);
+Object.defineProperty(exports, "__Client", ({ enumerable: true, get: function () { return smithy_client_1.Client; } }));
+const EndpointParameters_1 = __nccwpck_require__(49066);
+const runtimeConfig_1 = __nccwpck_require__(82643);
+const runtimeExtensions_1 = __nccwpck_require__(25898);
+class CloudFormationClient extends smithy_client_1.Client {
+ constructor(...[configuration]) {
+ const _config_0 = (0, runtimeConfig_1.getRuntimeConfig)(configuration || {});
+ const _config_1 = (0, EndpointParameters_1.resolveClientEndpointParameters)(_config_0);
+ const _config_2 = (0, config_resolver_1.resolveRegionConfig)(_config_1);
+ const _config_3 = (0, middleware_endpoint_1.resolveEndpointConfig)(_config_2);
+ const _config_4 = (0, middleware_retry_1.resolveRetryConfig)(_config_3);
+ const _config_5 = (0, middleware_host_header_1.resolveHostHeaderConfig)(_config_4);
+ const _config_6 = (0, middleware_signing_1.resolveAwsAuthConfig)(_config_5);
+ const _config_7 = (0, middleware_user_agent_1.resolveUserAgentConfig)(_config_6);
+ const _config_8 = (0, runtimeExtensions_1.resolveRuntimeExtensions)(_config_7, configuration?.extensions || []);
+ super(_config_8);
+ this.config = _config_8;
+ this.middlewareStack.use((0, middleware_retry_1.getRetryPlugin)(this.config));
+ this.middlewareStack.use((0, middleware_content_length_1.getContentLengthPlugin)(this.config));
+ this.middlewareStack.use((0, middleware_host_header_1.getHostHeaderPlugin)(this.config));
+ this.middlewareStack.use((0, middleware_logger_1.getLoggerPlugin)(this.config));
+ this.middlewareStack.use((0, middleware_recursion_detection_1.getRecursionDetectionPlugin)(this.config));
+ this.middlewareStack.use((0, middleware_signing_1.getAwsAuthPlugin)(this.config));
+ this.middlewareStack.use((0, middleware_user_agent_1.getUserAgentPlugin)(this.config));
+ }
+ destroy() {
+ super.destroy();
+ }
+}
+exports.CloudFormationClient = CloudFormationClient;
+
+
+/***/ }),
+
+/***/ 15634:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.ActivateOrganizationsAccessCommand = exports.$Command = void 0;
+const middleware_endpoint_1 = __nccwpck_require__(82918);
+const middleware_serde_1 = __nccwpck_require__(81238);
+const smithy_client_1 = __nccwpck_require__(63570);
+Object.defineProperty(exports, "$Command", ({ enumerable: true, get: function () { return smithy_client_1.Command; } }));
+const types_1 = __nccwpck_require__(55756);
+const Aws_query_1 = __nccwpck_require__(46110);
+class ActivateOrganizationsAccessCommand extends smithy_client_1.Command {
+ static getEndpointParameterInstructions() {
+ return {
+ UseFIPS: { type: "builtInParams", name: "useFipsEndpoint" },
+ Endpoint: { type: "builtInParams", name: "endpoint" },
+ Region: { type: "builtInParams", name: "region" },
+ UseDualStack: { type: "builtInParams", name: "useDualstackEndpoint" },
+ };
+ }
+ constructor(input) {
+ super();
+ this.input = input;
+ }
+ resolveMiddleware(clientStack, configuration, options) {
+ this.middlewareStack.use((0, middleware_serde_1.getSerdePlugin)(configuration, this.serialize, this.deserialize));
+ this.middlewareStack.use((0, middleware_endpoint_1.getEndpointPlugin)(configuration, ActivateOrganizationsAccessCommand.getEndpointParameterInstructions()));
+ const stack = clientStack.concat(this.middlewareStack);
+ const { logger } = configuration;
+ const clientName = "CloudFormationClient";
+ const commandName = "ActivateOrganizationsAccessCommand";
+ const handlerExecutionContext = {
+ logger,
+ clientName,
+ commandName,
+ inputFilterSensitiveLog: (_) => _,
+ outputFilterSensitiveLog: (_) => _,
+ [types_1.SMITHY_CONTEXT_KEY]: {
+ service: "CloudFormation",
+ operation: "ActivateOrganizationsAccess",
+ },
+ };
+ const { requestHandler } = configuration;
+ return stack.resolve((request) => requestHandler.handle(request.request, options || {}), handlerExecutionContext);
+ }
+ serialize(input, context) {
+ return (0, Aws_query_1.se_ActivateOrganizationsAccessCommand)(input, context);
+ }
+ deserialize(output, context) {
+ return (0, Aws_query_1.de_ActivateOrganizationsAccessCommand)(output, context);
+ }
+}
+exports.ActivateOrganizationsAccessCommand = ActivateOrganizationsAccessCommand;
+
+
+/***/ }),
+
+/***/ 48434:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.ActivateTypeCommand = exports.$Command = void 0;
+const middleware_endpoint_1 = __nccwpck_require__(82918);
+const middleware_serde_1 = __nccwpck_require__(81238);
+const smithy_client_1 = __nccwpck_require__(63570);
+Object.defineProperty(exports, "$Command", ({ enumerable: true, get: function () { return smithy_client_1.Command; } }));
+const types_1 = __nccwpck_require__(55756);
+const Aws_query_1 = __nccwpck_require__(46110);
+class ActivateTypeCommand extends smithy_client_1.Command {
+ static getEndpointParameterInstructions() {
+ return {
+ UseFIPS: { type: "builtInParams", name: "useFipsEndpoint" },
+ Endpoint: { type: "builtInParams", name: "endpoint" },
+ Region: { type: "builtInParams", name: "region" },
+ UseDualStack: { type: "builtInParams", name: "useDualstackEndpoint" },
+ };
+ }
+ constructor(input) {
+ super();
+ this.input = input;
+ }
+ resolveMiddleware(clientStack, configuration, options) {
+ this.middlewareStack.use((0, middleware_serde_1.getSerdePlugin)(configuration, this.serialize, this.deserialize));
+ this.middlewareStack.use((0, middleware_endpoint_1.getEndpointPlugin)(configuration, ActivateTypeCommand.getEndpointParameterInstructions()));
+ const stack = clientStack.concat(this.middlewareStack);
+ const { logger } = configuration;
+ const clientName = "CloudFormationClient";
+ const commandName = "ActivateTypeCommand";
+ const handlerExecutionContext = {
+ logger,
+ clientName,
+ commandName,
+ inputFilterSensitiveLog: (_) => _,
+ outputFilterSensitiveLog: (_) => _,
+ [types_1.SMITHY_CONTEXT_KEY]: {
+ service: "CloudFormation",
+ operation: "ActivateType",
+ },
+ };
+ const { requestHandler } = configuration;
+ return stack.resolve((request) => requestHandler.handle(request.request, options || {}), handlerExecutionContext);
+ }
+ serialize(input, context) {
+ return (0, Aws_query_1.se_ActivateTypeCommand)(input, context);
+ }
+ deserialize(output, context) {
+ return (0, Aws_query_1.de_ActivateTypeCommand)(output, context);
+ }
+}
+exports.ActivateTypeCommand = ActivateTypeCommand;
+
+
+/***/ }),
+
+/***/ 77385:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.BatchDescribeTypeConfigurationsCommand = exports.$Command = void 0;
+const middleware_endpoint_1 = __nccwpck_require__(82918);
+const middleware_serde_1 = __nccwpck_require__(81238);
+const smithy_client_1 = __nccwpck_require__(63570);
+Object.defineProperty(exports, "$Command", ({ enumerable: true, get: function () { return smithy_client_1.Command; } }));
+const types_1 = __nccwpck_require__(55756);
+const Aws_query_1 = __nccwpck_require__(46110);
+class BatchDescribeTypeConfigurationsCommand extends smithy_client_1.Command {
+ static getEndpointParameterInstructions() {
+ return {
+ UseFIPS: { type: "builtInParams", name: "useFipsEndpoint" },
+ Endpoint: { type: "builtInParams", name: "endpoint" },
+ Region: { type: "builtInParams", name: "region" },
+ UseDualStack: { type: "builtInParams", name: "useDualstackEndpoint" },
+ };
+ }
+ constructor(input) {
+ super();
+ this.input = input;
+ }
+ resolveMiddleware(clientStack, configuration, options) {
+ this.middlewareStack.use((0, middleware_serde_1.getSerdePlugin)(configuration, this.serialize, this.deserialize));
+ this.middlewareStack.use((0, middleware_endpoint_1.getEndpointPlugin)(configuration, BatchDescribeTypeConfigurationsCommand.getEndpointParameterInstructions()));
+ const stack = clientStack.concat(this.middlewareStack);
+ const { logger } = configuration;
+ const clientName = "CloudFormationClient";
+ const commandName = "BatchDescribeTypeConfigurationsCommand";
+ const handlerExecutionContext = {
+ logger,
+ clientName,
+ commandName,
+ inputFilterSensitiveLog: (_) => _,
+ outputFilterSensitiveLog: (_) => _,
+ [types_1.SMITHY_CONTEXT_KEY]: {
+ service: "CloudFormation",
+ operation: "BatchDescribeTypeConfigurations",
+ },
+ };
+ const { requestHandler } = configuration;
+ return stack.resolve((request) => requestHandler.handle(request.request, options || {}), handlerExecutionContext);
+ }
+ serialize(input, context) {
+ return (0, Aws_query_1.se_BatchDescribeTypeConfigurationsCommand)(input, context);
+ }
+ deserialize(output, context) {
+ return (0, Aws_query_1.de_BatchDescribeTypeConfigurationsCommand)(output, context);
+ }
+}
+exports.BatchDescribeTypeConfigurationsCommand = BatchDescribeTypeConfigurationsCommand;
+
+
+/***/ }),
+
+/***/ 88544:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.CancelUpdateStackCommand = exports.$Command = void 0;
+const middleware_endpoint_1 = __nccwpck_require__(82918);
+const middleware_serde_1 = __nccwpck_require__(81238);
+const smithy_client_1 = __nccwpck_require__(63570);
+Object.defineProperty(exports, "$Command", ({ enumerable: true, get: function () { return smithy_client_1.Command; } }));
+const types_1 = __nccwpck_require__(55756);
+const Aws_query_1 = __nccwpck_require__(46110);
+class CancelUpdateStackCommand extends smithy_client_1.Command {
+ static getEndpointParameterInstructions() {
+ return {
+ UseFIPS: { type: "builtInParams", name: "useFipsEndpoint" },
+ Endpoint: { type: "builtInParams", name: "endpoint" },
+ Region: { type: "builtInParams", name: "region" },
+ UseDualStack: { type: "builtInParams", name: "useDualstackEndpoint" },
+ };
+ }
+ constructor(input) {
+ super();
+ this.input = input;
+ }
+ resolveMiddleware(clientStack, configuration, options) {
+ this.middlewareStack.use((0, middleware_serde_1.getSerdePlugin)(configuration, this.serialize, this.deserialize));
+ this.middlewareStack.use((0, middleware_endpoint_1.getEndpointPlugin)(configuration, CancelUpdateStackCommand.getEndpointParameterInstructions()));
+ const stack = clientStack.concat(this.middlewareStack);
+ const { logger } = configuration;
+ const clientName = "CloudFormationClient";
+ const commandName = "CancelUpdateStackCommand";
+ const handlerExecutionContext = {
+ logger,
+ clientName,
+ commandName,
+ inputFilterSensitiveLog: (_) => _,
+ outputFilterSensitiveLog: (_) => _,
+ [types_1.SMITHY_CONTEXT_KEY]: {
+ service: "CloudFormation",
+ operation: "CancelUpdateStack",
+ },
+ };
+ const { requestHandler } = configuration;
+ return stack.resolve((request) => requestHandler.handle(request.request, options || {}), handlerExecutionContext);
+ }
+ serialize(input, context) {
+ return (0, Aws_query_1.se_CancelUpdateStackCommand)(input, context);
+ }
+ deserialize(output, context) {
+ return (0, Aws_query_1.de_CancelUpdateStackCommand)(output, context);
+ }
+}
+exports.CancelUpdateStackCommand = CancelUpdateStackCommand;
+
+
+/***/ }),
+
+/***/ 96302:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.ContinueUpdateRollbackCommand = exports.$Command = void 0;
+const middleware_endpoint_1 = __nccwpck_require__(82918);
+const middleware_serde_1 = __nccwpck_require__(81238);
+const smithy_client_1 = __nccwpck_require__(63570);
+Object.defineProperty(exports, "$Command", ({ enumerable: true, get: function () { return smithy_client_1.Command; } }));
+const types_1 = __nccwpck_require__(55756);
+const Aws_query_1 = __nccwpck_require__(46110);
+class ContinueUpdateRollbackCommand extends smithy_client_1.Command {
+ static getEndpointParameterInstructions() {
+ return {
+ UseFIPS: { type: "builtInParams", name: "useFipsEndpoint" },
+ Endpoint: { type: "builtInParams", name: "endpoint" },
+ Region: { type: "builtInParams", name: "region" },
+ UseDualStack: { type: "builtInParams", name: "useDualstackEndpoint" },
+ };
+ }
+ constructor(input) {
+ super();
+ this.input = input;
+ }
+ resolveMiddleware(clientStack, configuration, options) {
+ this.middlewareStack.use((0, middleware_serde_1.getSerdePlugin)(configuration, this.serialize, this.deserialize));
+ this.middlewareStack.use((0, middleware_endpoint_1.getEndpointPlugin)(configuration, ContinueUpdateRollbackCommand.getEndpointParameterInstructions()));
+ const stack = clientStack.concat(this.middlewareStack);
+ const { logger } = configuration;
+ const clientName = "CloudFormationClient";
+ const commandName = "ContinueUpdateRollbackCommand";
+ const handlerExecutionContext = {
+ logger,
+ clientName,
+ commandName,
+ inputFilterSensitiveLog: (_) => _,
+ outputFilterSensitiveLog: (_) => _,
+ [types_1.SMITHY_CONTEXT_KEY]: {
+ service: "CloudFormation",
+ operation: "ContinueUpdateRollback",
+ },
+ };
+ const { requestHandler } = configuration;
+ return stack.resolve((request) => requestHandler.handle(request.request, options || {}), handlerExecutionContext);
+ }
+ serialize(input, context) {
+ return (0, Aws_query_1.se_ContinueUpdateRollbackCommand)(input, context);
+ }
+ deserialize(output, context) {
+ return (0, Aws_query_1.de_ContinueUpdateRollbackCommand)(output, context);
+ }
+}
+exports.ContinueUpdateRollbackCommand = ContinueUpdateRollbackCommand;
+
+
+/***/ }),
+
+/***/ 27066:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.CreateChangeSetCommand = exports.$Command = void 0;
+const middleware_endpoint_1 = __nccwpck_require__(82918);
+const middleware_serde_1 = __nccwpck_require__(81238);
+const smithy_client_1 = __nccwpck_require__(63570);
+Object.defineProperty(exports, "$Command", ({ enumerable: true, get: function () { return smithy_client_1.Command; } }));
+const types_1 = __nccwpck_require__(55756);
+const Aws_query_1 = __nccwpck_require__(46110);
+class CreateChangeSetCommand extends smithy_client_1.Command {
+ static getEndpointParameterInstructions() {
+ return {
+ UseFIPS: { type: "builtInParams", name: "useFipsEndpoint" },
+ Endpoint: { type: "builtInParams", name: "endpoint" },
+ Region: { type: "builtInParams", name: "region" },
+ UseDualStack: { type: "builtInParams", name: "useDualstackEndpoint" },
+ };
+ }
+ constructor(input) {
+ super();
+ this.input = input;
+ }
+ resolveMiddleware(clientStack, configuration, options) {
+ this.middlewareStack.use((0, middleware_serde_1.getSerdePlugin)(configuration, this.serialize, this.deserialize));
+ this.middlewareStack.use((0, middleware_endpoint_1.getEndpointPlugin)(configuration, CreateChangeSetCommand.getEndpointParameterInstructions()));
+ const stack = clientStack.concat(this.middlewareStack);
+ const { logger } = configuration;
+ const clientName = "CloudFormationClient";
+ const commandName = "CreateChangeSetCommand";
+ const handlerExecutionContext = {
+ logger,
+ clientName,
+ commandName,
+ inputFilterSensitiveLog: (_) => _,
+ outputFilterSensitiveLog: (_) => _,
+ [types_1.SMITHY_CONTEXT_KEY]: {
+ service: "CloudFormation",
+ operation: "CreateChangeSet",
+ },
+ };
+ const { requestHandler } = configuration;
+ return stack.resolve((request) => requestHandler.handle(request.request, options || {}), handlerExecutionContext);
+ }
+ serialize(input, context) {
+ return (0, Aws_query_1.se_CreateChangeSetCommand)(input, context);
+ }
+ deserialize(output, context) {
+ return (0, Aws_query_1.de_CreateChangeSetCommand)(output, context);
+ }
+}
+exports.CreateChangeSetCommand = CreateChangeSetCommand;
+
+
+/***/ }),
+
+/***/ 94382:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.CreateStackCommand = exports.$Command = void 0;
+const middleware_endpoint_1 = __nccwpck_require__(82918);
+const middleware_serde_1 = __nccwpck_require__(81238);
+const smithy_client_1 = __nccwpck_require__(63570);
+Object.defineProperty(exports, "$Command", ({ enumerable: true, get: function () { return smithy_client_1.Command; } }));
+const types_1 = __nccwpck_require__(55756);
+const Aws_query_1 = __nccwpck_require__(46110);
+class CreateStackCommand extends smithy_client_1.Command {
+ static getEndpointParameterInstructions() {
+ return {
+ UseFIPS: { type: "builtInParams", name: "useFipsEndpoint" },
+ Endpoint: { type: "builtInParams", name: "endpoint" },
+ Region: { type: "builtInParams", name: "region" },
+ UseDualStack: { type: "builtInParams", name: "useDualstackEndpoint" },
+ };
+ }
+ constructor(input) {
+ super();
+ this.input = input;
+ }
+ resolveMiddleware(clientStack, configuration, options) {
+ this.middlewareStack.use((0, middleware_serde_1.getSerdePlugin)(configuration, this.serialize, this.deserialize));
+ this.middlewareStack.use((0, middleware_endpoint_1.getEndpointPlugin)(configuration, CreateStackCommand.getEndpointParameterInstructions()));
+ const stack = clientStack.concat(this.middlewareStack);
+ const { logger } = configuration;
+ const clientName = "CloudFormationClient";
+ const commandName = "CreateStackCommand";
+ const handlerExecutionContext = {
+ logger,
+ clientName,
+ commandName,
+ inputFilterSensitiveLog: (_) => _,
+ outputFilterSensitiveLog: (_) => _,
+ [types_1.SMITHY_CONTEXT_KEY]: {
+ service: "CloudFormation",
+ operation: "CreateStack",
+ },
+ };
+ const { requestHandler } = configuration;
+ return stack.resolve((request) => requestHandler.handle(request.request, options || {}), handlerExecutionContext);
+ }
+ serialize(input, context) {
+ return (0, Aws_query_1.se_CreateStackCommand)(input, context);
+ }
+ deserialize(output, context) {
+ return (0, Aws_query_1.de_CreateStackCommand)(output, context);
+ }
+}
+exports.CreateStackCommand = CreateStackCommand;
+
+
+/***/ }),
+
+/***/ 79648:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.CreateStackInstancesCommand = exports.$Command = void 0;
+const middleware_endpoint_1 = __nccwpck_require__(82918);
+const middleware_serde_1 = __nccwpck_require__(81238);
+const smithy_client_1 = __nccwpck_require__(63570);
+Object.defineProperty(exports, "$Command", ({ enumerable: true, get: function () { return smithy_client_1.Command; } }));
+const types_1 = __nccwpck_require__(55756);
+const Aws_query_1 = __nccwpck_require__(46110);
+class CreateStackInstancesCommand extends smithy_client_1.Command {
+ static getEndpointParameterInstructions() {
+ return {
+ UseFIPS: { type: "builtInParams", name: "useFipsEndpoint" },
+ Endpoint: { type: "builtInParams", name: "endpoint" },
+ Region: { type: "builtInParams", name: "region" },
+ UseDualStack: { type: "builtInParams", name: "useDualstackEndpoint" },
+ };
+ }
+ constructor(input) {
+ super();
+ this.input = input;
+ }
+ resolveMiddleware(clientStack, configuration, options) {
+ this.middlewareStack.use((0, middleware_serde_1.getSerdePlugin)(configuration, this.serialize, this.deserialize));
+ this.middlewareStack.use((0, middleware_endpoint_1.getEndpointPlugin)(configuration, CreateStackInstancesCommand.getEndpointParameterInstructions()));
+ const stack = clientStack.concat(this.middlewareStack);
+ const { logger } = configuration;
+ const clientName = "CloudFormationClient";
+ const commandName = "CreateStackInstancesCommand";
+ const handlerExecutionContext = {
+ logger,
+ clientName,
+ commandName,
+ inputFilterSensitiveLog: (_) => _,
+ outputFilterSensitiveLog: (_) => _,
+ [types_1.SMITHY_CONTEXT_KEY]: {
+ service: "CloudFormation",
+ operation: "CreateStackInstances",
+ },
+ };
+ const { requestHandler } = configuration;
+ return stack.resolve((request) => requestHandler.handle(request.request, options || {}), handlerExecutionContext);
+ }
+ serialize(input, context) {
+ return (0, Aws_query_1.se_CreateStackInstancesCommand)(input, context);
+ }
+ deserialize(output, context) {
+ return (0, Aws_query_1.de_CreateStackInstancesCommand)(output, context);
+ }
+}
+exports.CreateStackInstancesCommand = CreateStackInstancesCommand;
+
+
+/***/ }),
+
+/***/ 59691:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.CreateStackSetCommand = exports.$Command = void 0;
+const middleware_endpoint_1 = __nccwpck_require__(82918);
+const middleware_serde_1 = __nccwpck_require__(81238);
+const smithy_client_1 = __nccwpck_require__(63570);
+Object.defineProperty(exports, "$Command", ({ enumerable: true, get: function () { return smithy_client_1.Command; } }));
+const types_1 = __nccwpck_require__(55756);
+const Aws_query_1 = __nccwpck_require__(46110);
+class CreateStackSetCommand extends smithy_client_1.Command {
+ static getEndpointParameterInstructions() {
+ return {
+ UseFIPS: { type: "builtInParams", name: "useFipsEndpoint" },
+ Endpoint: { type: "builtInParams", name: "endpoint" },
+ Region: { type: "builtInParams", name: "region" },
+ UseDualStack: { type: "builtInParams", name: "useDualstackEndpoint" },
+ };
+ }
+ constructor(input) {
+ super();
+ this.input = input;
+ }
+ resolveMiddleware(clientStack, configuration, options) {
+ this.middlewareStack.use((0, middleware_serde_1.getSerdePlugin)(configuration, this.serialize, this.deserialize));
+ this.middlewareStack.use((0, middleware_endpoint_1.getEndpointPlugin)(configuration, CreateStackSetCommand.getEndpointParameterInstructions()));
+ const stack = clientStack.concat(this.middlewareStack);
+ const { logger } = configuration;
+ const clientName = "CloudFormationClient";
+ const commandName = "CreateStackSetCommand";
+ const handlerExecutionContext = {
+ logger,
+ clientName,
+ commandName,
+ inputFilterSensitiveLog: (_) => _,
+ outputFilterSensitiveLog: (_) => _,
+ [types_1.SMITHY_CONTEXT_KEY]: {
+ service: "CloudFormation",
+ operation: "CreateStackSet",
+ },
+ };
+ const { requestHandler } = configuration;
+ return stack.resolve((request) => requestHandler.handle(request.request, options || {}), handlerExecutionContext);
+ }
+ serialize(input, context) {
+ return (0, Aws_query_1.se_CreateStackSetCommand)(input, context);
+ }
+ deserialize(output, context) {
+ return (0, Aws_query_1.de_CreateStackSetCommand)(output, context);
+ }
+}
+exports.CreateStackSetCommand = CreateStackSetCommand;
+
+
+/***/ }),
+
+/***/ 24623:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.DeactivateOrganizationsAccessCommand = exports.$Command = void 0;
+const middleware_endpoint_1 = __nccwpck_require__(82918);
+const middleware_serde_1 = __nccwpck_require__(81238);
+const smithy_client_1 = __nccwpck_require__(63570);
+Object.defineProperty(exports, "$Command", ({ enumerable: true, get: function () { return smithy_client_1.Command; } }));
+const types_1 = __nccwpck_require__(55756);
+const Aws_query_1 = __nccwpck_require__(46110);
+class DeactivateOrganizationsAccessCommand extends smithy_client_1.Command {
+ static getEndpointParameterInstructions() {
+ return {
+ UseFIPS: { type: "builtInParams", name: "useFipsEndpoint" },
+ Endpoint: { type: "builtInParams", name: "endpoint" },
+ Region: { type: "builtInParams", name: "region" },
+ UseDualStack: { type: "builtInParams", name: "useDualstackEndpoint" },
+ };
+ }
+ constructor(input) {
+ super();
+ this.input = input;
+ }
+ resolveMiddleware(clientStack, configuration, options) {
+ this.middlewareStack.use((0, middleware_serde_1.getSerdePlugin)(configuration, this.serialize, this.deserialize));
+ this.middlewareStack.use((0, middleware_endpoint_1.getEndpointPlugin)(configuration, DeactivateOrganizationsAccessCommand.getEndpointParameterInstructions()));
+ const stack = clientStack.concat(this.middlewareStack);
+ const { logger } = configuration;
+ const clientName = "CloudFormationClient";
+ const commandName = "DeactivateOrganizationsAccessCommand";
+ const handlerExecutionContext = {
+ logger,
+ clientName,
+ commandName,
+ inputFilterSensitiveLog: (_) => _,
+ outputFilterSensitiveLog: (_) => _,
+ [types_1.SMITHY_CONTEXT_KEY]: {
+ service: "CloudFormation",
+ operation: "DeactivateOrganizationsAccess",
+ },
+ };
+ const { requestHandler } = configuration;
+ return stack.resolve((request) => requestHandler.handle(request.request, options || {}), handlerExecutionContext);
+ }
+ serialize(input, context) {
+ return (0, Aws_query_1.se_DeactivateOrganizationsAccessCommand)(input, context);
+ }
+ deserialize(output, context) {
+ return (0, Aws_query_1.de_DeactivateOrganizationsAccessCommand)(output, context);
+ }
+}
+exports.DeactivateOrganizationsAccessCommand = DeactivateOrganizationsAccessCommand;
+
+
+/***/ }),
+
+/***/ 57493:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.DeactivateTypeCommand = exports.$Command = void 0;
+const middleware_endpoint_1 = __nccwpck_require__(82918);
+const middleware_serde_1 = __nccwpck_require__(81238);
+const smithy_client_1 = __nccwpck_require__(63570);
+Object.defineProperty(exports, "$Command", ({ enumerable: true, get: function () { return smithy_client_1.Command; } }));
+const types_1 = __nccwpck_require__(55756);
+const Aws_query_1 = __nccwpck_require__(46110);
+class DeactivateTypeCommand extends smithy_client_1.Command {
+ static getEndpointParameterInstructions() {
+ return {
+ UseFIPS: { type: "builtInParams", name: "useFipsEndpoint" },
+ Endpoint: { type: "builtInParams", name: "endpoint" },
+ Region: { type: "builtInParams", name: "region" },
+ UseDualStack: { type: "builtInParams", name: "useDualstackEndpoint" },
+ };
+ }
+ constructor(input) {
+ super();
+ this.input = input;
+ }
+ resolveMiddleware(clientStack, configuration, options) {
+ this.middlewareStack.use((0, middleware_serde_1.getSerdePlugin)(configuration, this.serialize, this.deserialize));
+ this.middlewareStack.use((0, middleware_endpoint_1.getEndpointPlugin)(configuration, DeactivateTypeCommand.getEndpointParameterInstructions()));
+ const stack = clientStack.concat(this.middlewareStack);
+ const { logger } = configuration;
+ const clientName = "CloudFormationClient";
+ const commandName = "DeactivateTypeCommand";
+ const handlerExecutionContext = {
+ logger,
+ clientName,
+ commandName,
+ inputFilterSensitiveLog: (_) => _,
+ outputFilterSensitiveLog: (_) => _,
+ [types_1.SMITHY_CONTEXT_KEY]: {
+ service: "CloudFormation",
+ operation: "DeactivateType",
+ },
+ };
+ const { requestHandler } = configuration;
+ return stack.resolve((request) => requestHandler.handle(request.request, options || {}), handlerExecutionContext);
+ }
+ serialize(input, context) {
+ return (0, Aws_query_1.se_DeactivateTypeCommand)(input, context);
+ }
+ deserialize(output, context) {
+ return (0, Aws_query_1.de_DeactivateTypeCommand)(output, context);
+ }
+}
+exports.DeactivateTypeCommand = DeactivateTypeCommand;
+
+
+/***/ }),
+
+/***/ 51096:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.DeleteChangeSetCommand = exports.$Command = void 0;
+const middleware_endpoint_1 = __nccwpck_require__(82918);
+const middleware_serde_1 = __nccwpck_require__(81238);
+const smithy_client_1 = __nccwpck_require__(63570);
+Object.defineProperty(exports, "$Command", ({ enumerable: true, get: function () { return smithy_client_1.Command; } }));
+const types_1 = __nccwpck_require__(55756);
+const Aws_query_1 = __nccwpck_require__(46110);
+class DeleteChangeSetCommand extends smithy_client_1.Command {
+ static getEndpointParameterInstructions() {
+ return {
+ UseFIPS: { type: "builtInParams", name: "useFipsEndpoint" },
+ Endpoint: { type: "builtInParams", name: "endpoint" },
+ Region: { type: "builtInParams", name: "region" },
+ UseDualStack: { type: "builtInParams", name: "useDualstackEndpoint" },
+ };
+ }
+ constructor(input) {
+ super();
+ this.input = input;
+ }
+ resolveMiddleware(clientStack, configuration, options) {
+ this.middlewareStack.use((0, middleware_serde_1.getSerdePlugin)(configuration, this.serialize, this.deserialize));
+ this.middlewareStack.use((0, middleware_endpoint_1.getEndpointPlugin)(configuration, DeleteChangeSetCommand.getEndpointParameterInstructions()));
+ const stack = clientStack.concat(this.middlewareStack);
+ const { logger } = configuration;
+ const clientName = "CloudFormationClient";
+ const commandName = "DeleteChangeSetCommand";
+ const handlerExecutionContext = {
+ logger,
+ clientName,
+ commandName,
+ inputFilterSensitiveLog: (_) => _,
+ outputFilterSensitiveLog: (_) => _,
+ [types_1.SMITHY_CONTEXT_KEY]: {
+ service: "CloudFormation",
+ operation: "DeleteChangeSet",
+ },
+ };
+ const { requestHandler } = configuration;
+ return stack.resolve((request) => requestHandler.handle(request.request, options || {}), handlerExecutionContext);
+ }
+ serialize(input, context) {
+ return (0, Aws_query_1.se_DeleteChangeSetCommand)(input, context);
+ }
+ deserialize(output, context) {
+ return (0, Aws_query_1.de_DeleteChangeSetCommand)(output, context);
+ }
+}
+exports.DeleteChangeSetCommand = DeleteChangeSetCommand;
+
+
+/***/ }),
+
+/***/ 38501:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.DeleteStackCommand = exports.$Command = void 0;
+const middleware_endpoint_1 = __nccwpck_require__(82918);
+const middleware_serde_1 = __nccwpck_require__(81238);
+const smithy_client_1 = __nccwpck_require__(63570);
+Object.defineProperty(exports, "$Command", ({ enumerable: true, get: function () { return smithy_client_1.Command; } }));
+const types_1 = __nccwpck_require__(55756);
+const Aws_query_1 = __nccwpck_require__(46110);
+class DeleteStackCommand extends smithy_client_1.Command {
+ static getEndpointParameterInstructions() {
+ return {
+ UseFIPS: { type: "builtInParams", name: "useFipsEndpoint" },
+ Endpoint: { type: "builtInParams", name: "endpoint" },
+ Region: { type: "builtInParams", name: "region" },
+ UseDualStack: { type: "builtInParams", name: "useDualstackEndpoint" },
+ };
+ }
+ constructor(input) {
+ super();
+ this.input = input;
+ }
+ resolveMiddleware(clientStack, configuration, options) {
+ this.middlewareStack.use((0, middleware_serde_1.getSerdePlugin)(configuration, this.serialize, this.deserialize));
+ this.middlewareStack.use((0, middleware_endpoint_1.getEndpointPlugin)(configuration, DeleteStackCommand.getEndpointParameterInstructions()));
+ const stack = clientStack.concat(this.middlewareStack);
+ const { logger } = configuration;
+ const clientName = "CloudFormationClient";
+ const commandName = "DeleteStackCommand";
+ const handlerExecutionContext = {
+ logger,
+ clientName,
+ commandName,
+ inputFilterSensitiveLog: (_) => _,
+ outputFilterSensitiveLog: (_) => _,
+ [types_1.SMITHY_CONTEXT_KEY]: {
+ service: "CloudFormation",
+ operation: "DeleteStack",
+ },
+ };
+ const { requestHandler } = configuration;
+ return stack.resolve((request) => requestHandler.handle(request.request, options || {}), handlerExecutionContext);
+ }
+ serialize(input, context) {
+ return (0, Aws_query_1.se_DeleteStackCommand)(input, context);
+ }
+ deserialize(output, context) {
+ return (0, Aws_query_1.de_DeleteStackCommand)(output, context);
+ }
+}
+exports.DeleteStackCommand = DeleteStackCommand;
+
+
+/***/ }),
+
+/***/ 37302:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.DeleteStackInstancesCommand = exports.$Command = void 0;
+const middleware_endpoint_1 = __nccwpck_require__(82918);
+const middleware_serde_1 = __nccwpck_require__(81238);
+const smithy_client_1 = __nccwpck_require__(63570);
+Object.defineProperty(exports, "$Command", ({ enumerable: true, get: function () { return smithy_client_1.Command; } }));
+const types_1 = __nccwpck_require__(55756);
+const Aws_query_1 = __nccwpck_require__(46110);
+class DeleteStackInstancesCommand extends smithy_client_1.Command {
+ static getEndpointParameterInstructions() {
+ return {
+ UseFIPS: { type: "builtInParams", name: "useFipsEndpoint" },
+ Endpoint: { type: "builtInParams", name: "endpoint" },
+ Region: { type: "builtInParams", name: "region" },
+ UseDualStack: { type: "builtInParams", name: "useDualstackEndpoint" },
+ };
+ }
+ constructor(input) {
+ super();
+ this.input = input;
+ }
+ resolveMiddleware(clientStack, configuration, options) {
+ this.middlewareStack.use((0, middleware_serde_1.getSerdePlugin)(configuration, this.serialize, this.deserialize));
+ this.middlewareStack.use((0, middleware_endpoint_1.getEndpointPlugin)(configuration, DeleteStackInstancesCommand.getEndpointParameterInstructions()));
+ const stack = clientStack.concat(this.middlewareStack);
+ const { logger } = configuration;
+ const clientName = "CloudFormationClient";
+ const commandName = "DeleteStackInstancesCommand";
+ const handlerExecutionContext = {
+ logger,
+ clientName,
+ commandName,
+ inputFilterSensitiveLog: (_) => _,
+ outputFilterSensitiveLog: (_) => _,
+ [types_1.SMITHY_CONTEXT_KEY]: {
+ service: "CloudFormation",
+ operation: "DeleteStackInstances",
+ },
+ };
+ const { requestHandler } = configuration;
+ return stack.resolve((request) => requestHandler.handle(request.request, options || {}), handlerExecutionContext);
+ }
+ serialize(input, context) {
+ return (0, Aws_query_1.se_DeleteStackInstancesCommand)(input, context);
+ }
+ deserialize(output, context) {
+ return (0, Aws_query_1.de_DeleteStackInstancesCommand)(output, context);
+ }
+}
+exports.DeleteStackInstancesCommand = DeleteStackInstancesCommand;
+
+
+/***/ }),
+
+/***/ 80589:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.DeleteStackSetCommand = exports.$Command = void 0;
+const middleware_endpoint_1 = __nccwpck_require__(82918);
+const middleware_serde_1 = __nccwpck_require__(81238);
+const smithy_client_1 = __nccwpck_require__(63570);
+Object.defineProperty(exports, "$Command", ({ enumerable: true, get: function () { return smithy_client_1.Command; } }));
+const types_1 = __nccwpck_require__(55756);
+const Aws_query_1 = __nccwpck_require__(46110);
+class DeleteStackSetCommand extends smithy_client_1.Command {
+ static getEndpointParameterInstructions() {
+ return {
+ UseFIPS: { type: "builtInParams", name: "useFipsEndpoint" },
+ Endpoint: { type: "builtInParams", name: "endpoint" },
+ Region: { type: "builtInParams", name: "region" },
+ UseDualStack: { type: "builtInParams", name: "useDualstackEndpoint" },
+ };
+ }
+ constructor(input) {
+ super();
+ this.input = input;
+ }
+ resolveMiddleware(clientStack, configuration, options) {
+ this.middlewareStack.use((0, middleware_serde_1.getSerdePlugin)(configuration, this.serialize, this.deserialize));
+ this.middlewareStack.use((0, middleware_endpoint_1.getEndpointPlugin)(configuration, DeleteStackSetCommand.getEndpointParameterInstructions()));
+ const stack = clientStack.concat(this.middlewareStack);
+ const { logger } = configuration;
+ const clientName = "CloudFormationClient";
+ const commandName = "DeleteStackSetCommand";
+ const handlerExecutionContext = {
+ logger,
+ clientName,
+ commandName,
+ inputFilterSensitiveLog: (_) => _,
+ outputFilterSensitiveLog: (_) => _,
+ [types_1.SMITHY_CONTEXT_KEY]: {
+ service: "CloudFormation",
+ operation: "DeleteStackSet",
+ },
+ };
+ const { requestHandler } = configuration;
+ return stack.resolve((request) => requestHandler.handle(request.request, options || {}), handlerExecutionContext);
+ }
+ serialize(input, context) {
+ return (0, Aws_query_1.se_DeleteStackSetCommand)(input, context);
+ }
+ deserialize(output, context) {
+ return (0, Aws_query_1.de_DeleteStackSetCommand)(output, context);
+ }
+}
+exports.DeleteStackSetCommand = DeleteStackSetCommand;
+
+
+/***/ }),
+
+/***/ 15931:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.DeregisterTypeCommand = exports.$Command = void 0;
+const middleware_endpoint_1 = __nccwpck_require__(82918);
+const middleware_serde_1 = __nccwpck_require__(81238);
+const smithy_client_1 = __nccwpck_require__(63570);
+Object.defineProperty(exports, "$Command", ({ enumerable: true, get: function () { return smithy_client_1.Command; } }));
+const types_1 = __nccwpck_require__(55756);
+const Aws_query_1 = __nccwpck_require__(46110);
+class DeregisterTypeCommand extends smithy_client_1.Command {
+ static getEndpointParameterInstructions() {
+ return {
+ UseFIPS: { type: "builtInParams", name: "useFipsEndpoint" },
+ Endpoint: { type: "builtInParams", name: "endpoint" },
+ Region: { type: "builtInParams", name: "region" },
+ UseDualStack: { type: "builtInParams", name: "useDualstackEndpoint" },
+ };
+ }
+ constructor(input) {
+ super();
+ this.input = input;
+ }
+ resolveMiddleware(clientStack, configuration, options) {
+ this.middlewareStack.use((0, middleware_serde_1.getSerdePlugin)(configuration, this.serialize, this.deserialize));
+ this.middlewareStack.use((0, middleware_endpoint_1.getEndpointPlugin)(configuration, DeregisterTypeCommand.getEndpointParameterInstructions()));
+ const stack = clientStack.concat(this.middlewareStack);
+ const { logger } = configuration;
+ const clientName = "CloudFormationClient";
+ const commandName = "DeregisterTypeCommand";
+ const handlerExecutionContext = {
+ logger,
+ clientName,
+ commandName,
+ inputFilterSensitiveLog: (_) => _,
+ outputFilterSensitiveLog: (_) => _,
+ [types_1.SMITHY_CONTEXT_KEY]: {
+ service: "CloudFormation",
+ operation: "DeregisterType",
+ },
+ };
+ const { requestHandler } = configuration;
+ return stack.resolve((request) => requestHandler.handle(request.request, options || {}), handlerExecutionContext);
+ }
+ serialize(input, context) {
+ return (0, Aws_query_1.se_DeregisterTypeCommand)(input, context);
+ }
+ deserialize(output, context) {
+ return (0, Aws_query_1.de_DeregisterTypeCommand)(output, context);
+ }
+}
+exports.DeregisterTypeCommand = DeregisterTypeCommand;
+
+
+/***/ }),
+
+/***/ 90664:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.DescribeAccountLimitsCommand = exports.$Command = void 0;
+const middleware_endpoint_1 = __nccwpck_require__(82918);
+const middleware_serde_1 = __nccwpck_require__(81238);
+const smithy_client_1 = __nccwpck_require__(63570);
+Object.defineProperty(exports, "$Command", ({ enumerable: true, get: function () { return smithy_client_1.Command; } }));
+const types_1 = __nccwpck_require__(55756);
+const Aws_query_1 = __nccwpck_require__(46110);
+class DescribeAccountLimitsCommand extends smithy_client_1.Command {
+ static getEndpointParameterInstructions() {
+ return {
+ UseFIPS: { type: "builtInParams", name: "useFipsEndpoint" },
+ Endpoint: { type: "builtInParams", name: "endpoint" },
+ Region: { type: "builtInParams", name: "region" },
+ UseDualStack: { type: "builtInParams", name: "useDualstackEndpoint" },
+ };
+ }
+ constructor(input) {
+ super();
+ this.input = input;
+ }
+ resolveMiddleware(clientStack, configuration, options) {
+ this.middlewareStack.use((0, middleware_serde_1.getSerdePlugin)(configuration, this.serialize, this.deserialize));
+ this.middlewareStack.use((0, middleware_endpoint_1.getEndpointPlugin)(configuration, DescribeAccountLimitsCommand.getEndpointParameterInstructions()));
+ const stack = clientStack.concat(this.middlewareStack);
+ const { logger } = configuration;
+ const clientName = "CloudFormationClient";
+ const commandName = "DescribeAccountLimitsCommand";
+ const handlerExecutionContext = {
+ logger,
+ clientName,
+ commandName,
+ inputFilterSensitiveLog: (_) => _,
+ outputFilterSensitiveLog: (_) => _,
+ [types_1.SMITHY_CONTEXT_KEY]: {
+ service: "CloudFormation",
+ operation: "DescribeAccountLimits",
+ },
+ };
+ const { requestHandler } = configuration;
+ return stack.resolve((request) => requestHandler.handle(request.request, options || {}), handlerExecutionContext);
+ }
+ serialize(input, context) {
+ return (0, Aws_query_1.se_DescribeAccountLimitsCommand)(input, context);
+ }
+ deserialize(output, context) {
+ return (0, Aws_query_1.de_DescribeAccountLimitsCommand)(output, context);
+ }
+}
+exports.DescribeAccountLimitsCommand = DescribeAccountLimitsCommand;
+
+
+/***/ }),
+
+/***/ 94895:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.DescribeChangeSetCommand = exports.$Command = void 0;
+const middleware_endpoint_1 = __nccwpck_require__(82918);
+const middleware_serde_1 = __nccwpck_require__(81238);
+const smithy_client_1 = __nccwpck_require__(63570);
+Object.defineProperty(exports, "$Command", ({ enumerable: true, get: function () { return smithy_client_1.Command; } }));
+const types_1 = __nccwpck_require__(55756);
+const Aws_query_1 = __nccwpck_require__(46110);
+class DescribeChangeSetCommand extends smithy_client_1.Command {
+ static getEndpointParameterInstructions() {
+ return {
+ UseFIPS: { type: "builtInParams", name: "useFipsEndpoint" },
+ Endpoint: { type: "builtInParams", name: "endpoint" },
+ Region: { type: "builtInParams", name: "region" },
+ UseDualStack: { type: "builtInParams", name: "useDualstackEndpoint" },
+ };
+ }
+ constructor(input) {
+ super();
+ this.input = input;
+ }
+ resolveMiddleware(clientStack, configuration, options) {
+ this.middlewareStack.use((0, middleware_serde_1.getSerdePlugin)(configuration, this.serialize, this.deserialize));
+ this.middlewareStack.use((0, middleware_endpoint_1.getEndpointPlugin)(configuration, DescribeChangeSetCommand.getEndpointParameterInstructions()));
+ const stack = clientStack.concat(this.middlewareStack);
+ const { logger } = configuration;
+ const clientName = "CloudFormationClient";
+ const commandName = "DescribeChangeSetCommand";
+ const handlerExecutionContext = {
+ logger,
+ clientName,
+ commandName,
+ inputFilterSensitiveLog: (_) => _,
+ outputFilterSensitiveLog: (_) => _,
+ [types_1.SMITHY_CONTEXT_KEY]: {
+ service: "CloudFormation",
+ operation: "DescribeChangeSet",
+ },
+ };
+ const { requestHandler } = configuration;
+ return stack.resolve((request) => requestHandler.handle(request.request, options || {}), handlerExecutionContext);
+ }
+ serialize(input, context) {
+ return (0, Aws_query_1.se_DescribeChangeSetCommand)(input, context);
+ }
+ deserialize(output, context) {
+ return (0, Aws_query_1.de_DescribeChangeSetCommand)(output, context);
+ }
+}
+exports.DescribeChangeSetCommand = DescribeChangeSetCommand;
+
+
+/***/ }),
+
+/***/ 76824:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.DescribeChangeSetHooksCommand = exports.$Command = void 0;
+const middleware_endpoint_1 = __nccwpck_require__(82918);
+const middleware_serde_1 = __nccwpck_require__(81238);
+const smithy_client_1 = __nccwpck_require__(63570);
+Object.defineProperty(exports, "$Command", ({ enumerable: true, get: function () { return smithy_client_1.Command; } }));
+const types_1 = __nccwpck_require__(55756);
+const Aws_query_1 = __nccwpck_require__(46110);
+class DescribeChangeSetHooksCommand extends smithy_client_1.Command {
+ static getEndpointParameterInstructions() {
+ return {
+ UseFIPS: { type: "builtInParams", name: "useFipsEndpoint" },
+ Endpoint: { type: "builtInParams", name: "endpoint" },
+ Region: { type: "builtInParams", name: "region" },
+ UseDualStack: { type: "builtInParams", name: "useDualstackEndpoint" },
+ };
+ }
+ constructor(input) {
+ super();
+ this.input = input;
+ }
+ resolveMiddleware(clientStack, configuration, options) {
+ this.middlewareStack.use((0, middleware_serde_1.getSerdePlugin)(configuration, this.serialize, this.deserialize));
+ this.middlewareStack.use((0, middleware_endpoint_1.getEndpointPlugin)(configuration, DescribeChangeSetHooksCommand.getEndpointParameterInstructions()));
+ const stack = clientStack.concat(this.middlewareStack);
+ const { logger } = configuration;
+ const clientName = "CloudFormationClient";
+ const commandName = "DescribeChangeSetHooksCommand";
+ const handlerExecutionContext = {
+ logger,
+ clientName,
+ commandName,
+ inputFilterSensitiveLog: (_) => _,
+ outputFilterSensitiveLog: (_) => _,
+ [types_1.SMITHY_CONTEXT_KEY]: {
+ service: "CloudFormation",
+ operation: "DescribeChangeSetHooks",
+ },
+ };
+ const { requestHandler } = configuration;
+ return stack.resolve((request) => requestHandler.handle(request.request, options || {}), handlerExecutionContext);
+ }
+ serialize(input, context) {
+ return (0, Aws_query_1.se_DescribeChangeSetHooksCommand)(input, context);
+ }
+ deserialize(output, context) {
+ return (0, Aws_query_1.de_DescribeChangeSetHooksCommand)(output, context);
+ }
+}
+exports.DescribeChangeSetHooksCommand = DescribeChangeSetHooksCommand;
+
+
+/***/ }),
+
+/***/ 54280:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.DescribeOrganizationsAccessCommand = exports.$Command = void 0;
+const middleware_endpoint_1 = __nccwpck_require__(82918);
+const middleware_serde_1 = __nccwpck_require__(81238);
+const smithy_client_1 = __nccwpck_require__(63570);
+Object.defineProperty(exports, "$Command", ({ enumerable: true, get: function () { return smithy_client_1.Command; } }));
+const types_1 = __nccwpck_require__(55756);
+const Aws_query_1 = __nccwpck_require__(46110);
+class DescribeOrganizationsAccessCommand extends smithy_client_1.Command {
+ static getEndpointParameterInstructions() {
+ return {
+ UseFIPS: { type: "builtInParams", name: "useFipsEndpoint" },
+ Endpoint: { type: "builtInParams", name: "endpoint" },
+ Region: { type: "builtInParams", name: "region" },
+ UseDualStack: { type: "builtInParams", name: "useDualstackEndpoint" },
+ };
+ }
+ constructor(input) {
+ super();
+ this.input = input;
+ }
+ resolveMiddleware(clientStack, configuration, options) {
+ this.middlewareStack.use((0, middleware_serde_1.getSerdePlugin)(configuration, this.serialize, this.deserialize));
+ this.middlewareStack.use((0, middleware_endpoint_1.getEndpointPlugin)(configuration, DescribeOrganizationsAccessCommand.getEndpointParameterInstructions()));
+ const stack = clientStack.concat(this.middlewareStack);
+ const { logger } = configuration;
+ const clientName = "CloudFormationClient";
+ const commandName = "DescribeOrganizationsAccessCommand";
+ const handlerExecutionContext = {
+ logger,
+ clientName,
+ commandName,
+ inputFilterSensitiveLog: (_) => _,
+ outputFilterSensitiveLog: (_) => _,
+ [types_1.SMITHY_CONTEXT_KEY]: {
+ service: "CloudFormation",
+ operation: "DescribeOrganizationsAccess",
+ },
+ };
+ const { requestHandler } = configuration;
+ return stack.resolve((request) => requestHandler.handle(request.request, options || {}), handlerExecutionContext);
+ }
+ serialize(input, context) {
+ return (0, Aws_query_1.se_DescribeOrganizationsAccessCommand)(input, context);
+ }
+ deserialize(output, context) {
+ return (0, Aws_query_1.de_DescribeOrganizationsAccessCommand)(output, context);
+ }
+}
+exports.DescribeOrganizationsAccessCommand = DescribeOrganizationsAccessCommand;
+
+
+/***/ }),
+
+/***/ 27761:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.DescribePublisherCommand = exports.$Command = void 0;
+const middleware_endpoint_1 = __nccwpck_require__(82918);
+const middleware_serde_1 = __nccwpck_require__(81238);
+const smithy_client_1 = __nccwpck_require__(63570);
+Object.defineProperty(exports, "$Command", ({ enumerable: true, get: function () { return smithy_client_1.Command; } }));
+const types_1 = __nccwpck_require__(55756);
+const Aws_query_1 = __nccwpck_require__(46110);
+class DescribePublisherCommand extends smithy_client_1.Command {
+ static getEndpointParameterInstructions() {
+ return {
+ UseFIPS: { type: "builtInParams", name: "useFipsEndpoint" },
+ Endpoint: { type: "builtInParams", name: "endpoint" },
+ Region: { type: "builtInParams", name: "region" },
+ UseDualStack: { type: "builtInParams", name: "useDualstackEndpoint" },
+ };
+ }
+ constructor(input) {
+ super();
+ this.input = input;
+ }
+ resolveMiddleware(clientStack, configuration, options) {
+ this.middlewareStack.use((0, middleware_serde_1.getSerdePlugin)(configuration, this.serialize, this.deserialize));
+ this.middlewareStack.use((0, middleware_endpoint_1.getEndpointPlugin)(configuration, DescribePublisherCommand.getEndpointParameterInstructions()));
+ const stack = clientStack.concat(this.middlewareStack);
+ const { logger } = configuration;
+ const clientName = "CloudFormationClient";
+ const commandName = "DescribePublisherCommand";
+ const handlerExecutionContext = {
+ logger,
+ clientName,
+ commandName,
+ inputFilterSensitiveLog: (_) => _,
+ outputFilterSensitiveLog: (_) => _,
+ [types_1.SMITHY_CONTEXT_KEY]: {
+ service: "CloudFormation",
+ operation: "DescribePublisher",
+ },
+ };
+ const { requestHandler } = configuration;
+ return stack.resolve((request) => requestHandler.handle(request.request, options || {}), handlerExecutionContext);
+ }
+ serialize(input, context) {
+ return (0, Aws_query_1.se_DescribePublisherCommand)(input, context);
+ }
+ deserialize(output, context) {
+ return (0, Aws_query_1.de_DescribePublisherCommand)(output, context);
+ }
+}
+exports.DescribePublisherCommand = DescribePublisherCommand;
+
+
+/***/ }),
+
+/***/ 13680:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.DescribeStackDriftDetectionStatusCommand = exports.$Command = void 0;
+const middleware_endpoint_1 = __nccwpck_require__(82918);
+const middleware_serde_1 = __nccwpck_require__(81238);
+const smithy_client_1 = __nccwpck_require__(63570);
+Object.defineProperty(exports, "$Command", ({ enumerable: true, get: function () { return smithy_client_1.Command; } }));
+const types_1 = __nccwpck_require__(55756);
+const Aws_query_1 = __nccwpck_require__(46110);
+class DescribeStackDriftDetectionStatusCommand extends smithy_client_1.Command {
+ static getEndpointParameterInstructions() {
+ return {
+ UseFIPS: { type: "builtInParams", name: "useFipsEndpoint" },
+ Endpoint: { type: "builtInParams", name: "endpoint" },
+ Region: { type: "builtInParams", name: "region" },
+ UseDualStack: { type: "builtInParams", name: "useDualstackEndpoint" },
+ };
+ }
+ constructor(input) {
+ super();
+ this.input = input;
+ }
+ resolveMiddleware(clientStack, configuration, options) {
+ this.middlewareStack.use((0, middleware_serde_1.getSerdePlugin)(configuration, this.serialize, this.deserialize));
+ this.middlewareStack.use((0, middleware_endpoint_1.getEndpointPlugin)(configuration, DescribeStackDriftDetectionStatusCommand.getEndpointParameterInstructions()));
+ const stack = clientStack.concat(this.middlewareStack);
+ const { logger } = configuration;
+ const clientName = "CloudFormationClient";
+ const commandName = "DescribeStackDriftDetectionStatusCommand";
+ const handlerExecutionContext = {
+ logger,
+ clientName,
+ commandName,
+ inputFilterSensitiveLog: (_) => _,
+ outputFilterSensitiveLog: (_) => _,
+ [types_1.SMITHY_CONTEXT_KEY]: {
+ service: "CloudFormation",
+ operation: "DescribeStackDriftDetectionStatus",
+ },
+ };
+ const { requestHandler } = configuration;
+ return stack.resolve((request) => requestHandler.handle(request.request, options || {}), handlerExecutionContext);
+ }
+ serialize(input, context) {
+ return (0, Aws_query_1.se_DescribeStackDriftDetectionStatusCommand)(input, context);
+ }
+ deserialize(output, context) {
+ return (0, Aws_query_1.de_DescribeStackDriftDetectionStatusCommand)(output, context);
+ }
+}
+exports.DescribeStackDriftDetectionStatusCommand = DescribeStackDriftDetectionStatusCommand;
+
+
+/***/ }),
+
+/***/ 87929:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.DescribeStackEventsCommand = exports.$Command = void 0;
+const middleware_endpoint_1 = __nccwpck_require__(82918);
+const middleware_serde_1 = __nccwpck_require__(81238);
+const smithy_client_1 = __nccwpck_require__(63570);
+Object.defineProperty(exports, "$Command", ({ enumerable: true, get: function () { return smithy_client_1.Command; } }));
+const types_1 = __nccwpck_require__(55756);
+const Aws_query_1 = __nccwpck_require__(46110);
+class DescribeStackEventsCommand extends smithy_client_1.Command {
+ static getEndpointParameterInstructions() {
+ return {
+ UseFIPS: { type: "builtInParams", name: "useFipsEndpoint" },
+ Endpoint: { type: "builtInParams", name: "endpoint" },
+ Region: { type: "builtInParams", name: "region" },
+ UseDualStack: { type: "builtInParams", name: "useDualstackEndpoint" },
+ };
+ }
+ constructor(input) {
+ super();
+ this.input = input;
+ }
+ resolveMiddleware(clientStack, configuration, options) {
+ this.middlewareStack.use((0, middleware_serde_1.getSerdePlugin)(configuration, this.serialize, this.deserialize));
+ this.middlewareStack.use((0, middleware_endpoint_1.getEndpointPlugin)(configuration, DescribeStackEventsCommand.getEndpointParameterInstructions()));
+ const stack = clientStack.concat(this.middlewareStack);
+ const { logger } = configuration;
+ const clientName = "CloudFormationClient";
+ const commandName = "DescribeStackEventsCommand";
+ const handlerExecutionContext = {
+ logger,
+ clientName,
+ commandName,
+ inputFilterSensitiveLog: (_) => _,
+ outputFilterSensitiveLog: (_) => _,
+ [types_1.SMITHY_CONTEXT_KEY]: {
+ service: "CloudFormation",
+ operation: "DescribeStackEvents",
+ },
+ };
+ const { requestHandler } = configuration;
+ return stack.resolve((request) => requestHandler.handle(request.request, options || {}), handlerExecutionContext);
+ }
+ serialize(input, context) {
+ return (0, Aws_query_1.se_DescribeStackEventsCommand)(input, context);
+ }
+ deserialize(output, context) {
+ return (0, Aws_query_1.de_DescribeStackEventsCommand)(output, context);
+ }
+}
+exports.DescribeStackEventsCommand = DescribeStackEventsCommand;
+
+
+/***/ }),
+
+/***/ 3420:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.DescribeStackInstanceCommand = exports.$Command = void 0;
+const middleware_endpoint_1 = __nccwpck_require__(82918);
+const middleware_serde_1 = __nccwpck_require__(81238);
+const smithy_client_1 = __nccwpck_require__(63570);
+Object.defineProperty(exports, "$Command", ({ enumerable: true, get: function () { return smithy_client_1.Command; } }));
+const types_1 = __nccwpck_require__(55756);
+const Aws_query_1 = __nccwpck_require__(46110);
+class DescribeStackInstanceCommand extends smithy_client_1.Command {
+ static getEndpointParameterInstructions() {
+ return {
+ UseFIPS: { type: "builtInParams", name: "useFipsEndpoint" },
+ Endpoint: { type: "builtInParams", name: "endpoint" },
+ Region: { type: "builtInParams", name: "region" },
+ UseDualStack: { type: "builtInParams", name: "useDualstackEndpoint" },
+ };
+ }
+ constructor(input) {
+ super();
+ this.input = input;
+ }
+ resolveMiddleware(clientStack, configuration, options) {
+ this.middlewareStack.use((0, middleware_serde_1.getSerdePlugin)(configuration, this.serialize, this.deserialize));
+ this.middlewareStack.use((0, middleware_endpoint_1.getEndpointPlugin)(configuration, DescribeStackInstanceCommand.getEndpointParameterInstructions()));
+ const stack = clientStack.concat(this.middlewareStack);
+ const { logger } = configuration;
+ const clientName = "CloudFormationClient";
+ const commandName = "DescribeStackInstanceCommand";
+ const handlerExecutionContext = {
+ logger,
+ clientName,
+ commandName,
+ inputFilterSensitiveLog: (_) => _,
+ outputFilterSensitiveLog: (_) => _,
+ [types_1.SMITHY_CONTEXT_KEY]: {
+ service: "CloudFormation",
+ operation: "DescribeStackInstance",
+ },
+ };
+ const { requestHandler } = configuration;
+ return stack.resolve((request) => requestHandler.handle(request.request, options || {}), handlerExecutionContext);
+ }
+ serialize(input, context) {
+ return (0, Aws_query_1.se_DescribeStackInstanceCommand)(input, context);
+ }
+ deserialize(output, context) {
+ return (0, Aws_query_1.de_DescribeStackInstanceCommand)(output, context);
+ }
+}
+exports.DescribeStackInstanceCommand = DescribeStackInstanceCommand;
+
+
+/***/ }),
+
+/***/ 20719:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.DescribeStackResourceCommand = exports.$Command = void 0;
+const middleware_endpoint_1 = __nccwpck_require__(82918);
+const middleware_serde_1 = __nccwpck_require__(81238);
+const smithy_client_1 = __nccwpck_require__(63570);
+Object.defineProperty(exports, "$Command", ({ enumerable: true, get: function () { return smithy_client_1.Command; } }));
+const types_1 = __nccwpck_require__(55756);
+const Aws_query_1 = __nccwpck_require__(46110);
+class DescribeStackResourceCommand extends smithy_client_1.Command {
+ static getEndpointParameterInstructions() {
+ return {
+ UseFIPS: { type: "builtInParams", name: "useFipsEndpoint" },
+ Endpoint: { type: "builtInParams", name: "endpoint" },
+ Region: { type: "builtInParams", name: "region" },
+ UseDualStack: { type: "builtInParams", name: "useDualstackEndpoint" },
+ };
+ }
+ constructor(input) {
+ super();
+ this.input = input;
+ }
+ resolveMiddleware(clientStack, configuration, options) {
+ this.middlewareStack.use((0, middleware_serde_1.getSerdePlugin)(configuration, this.serialize, this.deserialize));
+ this.middlewareStack.use((0, middleware_endpoint_1.getEndpointPlugin)(configuration, DescribeStackResourceCommand.getEndpointParameterInstructions()));
+ const stack = clientStack.concat(this.middlewareStack);
+ const { logger } = configuration;
+ const clientName = "CloudFormationClient";
+ const commandName = "DescribeStackResourceCommand";
+ const handlerExecutionContext = {
+ logger,
+ clientName,
+ commandName,
+ inputFilterSensitiveLog: (_) => _,
+ outputFilterSensitiveLog: (_) => _,
+ [types_1.SMITHY_CONTEXT_KEY]: {
+ service: "CloudFormation",
+ operation: "DescribeStackResource",
+ },
+ };
+ const { requestHandler } = configuration;
+ return stack.resolve((request) => requestHandler.handle(request.request, options || {}), handlerExecutionContext);
+ }
+ serialize(input, context) {
+ return (0, Aws_query_1.se_DescribeStackResourceCommand)(input, context);
+ }
+ deserialize(output, context) {
+ return (0, Aws_query_1.de_DescribeStackResourceCommand)(output, context);
+ }
+}
+exports.DescribeStackResourceCommand = DescribeStackResourceCommand;
+
+
+/***/ }),
+
+/***/ 22837:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.DescribeStackResourceDriftsCommand = exports.$Command = void 0;
+const middleware_endpoint_1 = __nccwpck_require__(82918);
+const middleware_serde_1 = __nccwpck_require__(81238);
+const smithy_client_1 = __nccwpck_require__(63570);
+Object.defineProperty(exports, "$Command", ({ enumerable: true, get: function () { return smithy_client_1.Command; } }));
+const types_1 = __nccwpck_require__(55756);
+const Aws_query_1 = __nccwpck_require__(46110);
+class DescribeStackResourceDriftsCommand extends smithy_client_1.Command {
+ static getEndpointParameterInstructions() {
+ return {
+ UseFIPS: { type: "builtInParams", name: "useFipsEndpoint" },
+ Endpoint: { type: "builtInParams", name: "endpoint" },
+ Region: { type: "builtInParams", name: "region" },
+ UseDualStack: { type: "builtInParams", name: "useDualstackEndpoint" },
+ };
+ }
+ constructor(input) {
+ super();
+ this.input = input;
+ }
+ resolveMiddleware(clientStack, configuration, options) {
+ this.middlewareStack.use((0, middleware_serde_1.getSerdePlugin)(configuration, this.serialize, this.deserialize));
+ this.middlewareStack.use((0, middleware_endpoint_1.getEndpointPlugin)(configuration, DescribeStackResourceDriftsCommand.getEndpointParameterInstructions()));
+ const stack = clientStack.concat(this.middlewareStack);
+ const { logger } = configuration;
+ const clientName = "CloudFormationClient";
+ const commandName = "DescribeStackResourceDriftsCommand";
+ const handlerExecutionContext = {
+ logger,
+ clientName,
+ commandName,
+ inputFilterSensitiveLog: (_) => _,
+ outputFilterSensitiveLog: (_) => _,
+ [types_1.SMITHY_CONTEXT_KEY]: {
+ service: "CloudFormation",
+ operation: "DescribeStackResourceDrifts",
+ },
+ };
+ const { requestHandler } = configuration;
+ return stack.resolve((request) => requestHandler.handle(request.request, options || {}), handlerExecutionContext);
+ }
+ serialize(input, context) {
+ return (0, Aws_query_1.se_DescribeStackResourceDriftsCommand)(input, context);
+ }
+ deserialize(output, context) {
+ return (0, Aws_query_1.de_DescribeStackResourceDriftsCommand)(output, context);
+ }
+}
+exports.DescribeStackResourceDriftsCommand = DescribeStackResourceDriftsCommand;
+
+
+/***/ }),
+
+/***/ 40897:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.DescribeStackResourcesCommand = exports.$Command = void 0;
+const middleware_endpoint_1 = __nccwpck_require__(82918);
+const middleware_serde_1 = __nccwpck_require__(81238);
+const smithy_client_1 = __nccwpck_require__(63570);
+Object.defineProperty(exports, "$Command", ({ enumerable: true, get: function () { return smithy_client_1.Command; } }));
+const types_1 = __nccwpck_require__(55756);
+const Aws_query_1 = __nccwpck_require__(46110);
+class DescribeStackResourcesCommand extends smithy_client_1.Command {
+ static getEndpointParameterInstructions() {
+ return {
+ UseFIPS: { type: "builtInParams", name: "useFipsEndpoint" },
+ Endpoint: { type: "builtInParams", name: "endpoint" },
+ Region: { type: "builtInParams", name: "region" },
+ UseDualStack: { type: "builtInParams", name: "useDualstackEndpoint" },
+ };
+ }
+ constructor(input) {
+ super();
+ this.input = input;
+ }
+ resolveMiddleware(clientStack, configuration, options) {
+ this.middlewareStack.use((0, middleware_serde_1.getSerdePlugin)(configuration, this.serialize, this.deserialize));
+ this.middlewareStack.use((0, middleware_endpoint_1.getEndpointPlugin)(configuration, DescribeStackResourcesCommand.getEndpointParameterInstructions()));
+ const stack = clientStack.concat(this.middlewareStack);
+ const { logger } = configuration;
+ const clientName = "CloudFormationClient";
+ const commandName = "DescribeStackResourcesCommand";
+ const handlerExecutionContext = {
+ logger,
+ clientName,
+ commandName,
+ inputFilterSensitiveLog: (_) => _,
+ outputFilterSensitiveLog: (_) => _,
+ [types_1.SMITHY_CONTEXT_KEY]: {
+ service: "CloudFormation",
+ operation: "DescribeStackResources",
+ },
+ };
+ const { requestHandler } = configuration;
+ return stack.resolve((request) => requestHandler.handle(request.request, options || {}), handlerExecutionContext);
+ }
+ serialize(input, context) {
+ return (0, Aws_query_1.se_DescribeStackResourcesCommand)(input, context);
+ }
+ deserialize(output, context) {
+ return (0, Aws_query_1.de_DescribeStackResourcesCommand)(output, context);
+ }
+}
+exports.DescribeStackResourcesCommand = DescribeStackResourcesCommand;
+
+
+/***/ }),
+
+/***/ 64638:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.DescribeStackSetCommand = exports.$Command = void 0;
+const middleware_endpoint_1 = __nccwpck_require__(82918);
+const middleware_serde_1 = __nccwpck_require__(81238);
+const smithy_client_1 = __nccwpck_require__(63570);
+Object.defineProperty(exports, "$Command", ({ enumerable: true, get: function () { return smithy_client_1.Command; } }));
+const types_1 = __nccwpck_require__(55756);
+const Aws_query_1 = __nccwpck_require__(46110);
+class DescribeStackSetCommand extends smithy_client_1.Command {
+ static getEndpointParameterInstructions() {
+ return {
+ UseFIPS: { type: "builtInParams", name: "useFipsEndpoint" },
+ Endpoint: { type: "builtInParams", name: "endpoint" },
+ Region: { type: "builtInParams", name: "region" },
+ UseDualStack: { type: "builtInParams", name: "useDualstackEndpoint" },
+ };
+ }
+ constructor(input) {
+ super();
+ this.input = input;
+ }
+ resolveMiddleware(clientStack, configuration, options) {
+ this.middlewareStack.use((0, middleware_serde_1.getSerdePlugin)(configuration, this.serialize, this.deserialize));
+ this.middlewareStack.use((0, middleware_endpoint_1.getEndpointPlugin)(configuration, DescribeStackSetCommand.getEndpointParameterInstructions()));
+ const stack = clientStack.concat(this.middlewareStack);
+ const { logger } = configuration;
+ const clientName = "CloudFormationClient";
+ const commandName = "DescribeStackSetCommand";
+ const handlerExecutionContext = {
+ logger,
+ clientName,
+ commandName,
+ inputFilterSensitiveLog: (_) => _,
+ outputFilterSensitiveLog: (_) => _,
+ [types_1.SMITHY_CONTEXT_KEY]: {
+ service: "CloudFormation",
+ operation: "DescribeStackSet",
+ },
+ };
+ const { requestHandler } = configuration;
+ return stack.resolve((request) => requestHandler.handle(request.request, options || {}), handlerExecutionContext);
+ }
+ serialize(input, context) {
+ return (0, Aws_query_1.se_DescribeStackSetCommand)(input, context);
+ }
+ deserialize(output, context) {
+ return (0, Aws_query_1.de_DescribeStackSetCommand)(output, context);
+ }
+}
+exports.DescribeStackSetCommand = DescribeStackSetCommand;
+
+
+/***/ }),
+
+/***/ 50347:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.DescribeStackSetOperationCommand = exports.$Command = void 0;
+const middleware_endpoint_1 = __nccwpck_require__(82918);
+const middleware_serde_1 = __nccwpck_require__(81238);
+const smithy_client_1 = __nccwpck_require__(63570);
+Object.defineProperty(exports, "$Command", ({ enumerable: true, get: function () { return smithy_client_1.Command; } }));
+const types_1 = __nccwpck_require__(55756);
+const Aws_query_1 = __nccwpck_require__(46110);
+class DescribeStackSetOperationCommand extends smithy_client_1.Command {
+ static getEndpointParameterInstructions() {
+ return {
+ UseFIPS: { type: "builtInParams", name: "useFipsEndpoint" },
+ Endpoint: { type: "builtInParams", name: "endpoint" },
+ Region: { type: "builtInParams", name: "region" },
+ UseDualStack: { type: "builtInParams", name: "useDualstackEndpoint" },
+ };
+ }
+ constructor(input) {
+ super();
+ this.input = input;
+ }
+ resolveMiddleware(clientStack, configuration, options) {
+ this.middlewareStack.use((0, middleware_serde_1.getSerdePlugin)(configuration, this.serialize, this.deserialize));
+ this.middlewareStack.use((0, middleware_endpoint_1.getEndpointPlugin)(configuration, DescribeStackSetOperationCommand.getEndpointParameterInstructions()));
+ const stack = clientStack.concat(this.middlewareStack);
+ const { logger } = configuration;
+ const clientName = "CloudFormationClient";
+ const commandName = "DescribeStackSetOperationCommand";
+ const handlerExecutionContext = {
+ logger,
+ clientName,
+ commandName,
+ inputFilterSensitiveLog: (_) => _,
+ outputFilterSensitiveLog: (_) => _,
+ [types_1.SMITHY_CONTEXT_KEY]: {
+ service: "CloudFormation",
+ operation: "DescribeStackSetOperation",
+ },
+ };
+ const { requestHandler } = configuration;
+ return stack.resolve((request) => requestHandler.handle(request.request, options || {}), handlerExecutionContext);
+ }
+ serialize(input, context) {
+ return (0, Aws_query_1.se_DescribeStackSetOperationCommand)(input, context);
+ }
+ deserialize(output, context) {
+ return (0, Aws_query_1.de_DescribeStackSetOperationCommand)(output, context);
+ }
+}
+exports.DescribeStackSetOperationCommand = DescribeStackSetOperationCommand;
+
+
+/***/ }),
+
+/***/ 79769:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.DescribeStacksCommand = exports.$Command = void 0;
+const middleware_endpoint_1 = __nccwpck_require__(82918);
+const middleware_serde_1 = __nccwpck_require__(81238);
+const smithy_client_1 = __nccwpck_require__(63570);
+Object.defineProperty(exports, "$Command", ({ enumerable: true, get: function () { return smithy_client_1.Command; } }));
+const types_1 = __nccwpck_require__(55756);
+const Aws_query_1 = __nccwpck_require__(46110);
+class DescribeStacksCommand extends smithy_client_1.Command {
+ static getEndpointParameterInstructions() {
+ return {
+ UseFIPS: { type: "builtInParams", name: "useFipsEndpoint" },
+ Endpoint: { type: "builtInParams", name: "endpoint" },
+ Region: { type: "builtInParams", name: "region" },
+ UseDualStack: { type: "builtInParams", name: "useDualstackEndpoint" },
+ };
+ }
+ constructor(input) {
+ super();
+ this.input = input;
+ }
+ resolveMiddleware(clientStack, configuration, options) {
+ this.middlewareStack.use((0, middleware_serde_1.getSerdePlugin)(configuration, this.serialize, this.deserialize));
+ this.middlewareStack.use((0, middleware_endpoint_1.getEndpointPlugin)(configuration, DescribeStacksCommand.getEndpointParameterInstructions()));
+ const stack = clientStack.concat(this.middlewareStack);
+ const { logger } = configuration;
+ const clientName = "CloudFormationClient";
+ const commandName = "DescribeStacksCommand";
+ const handlerExecutionContext = {
+ logger,
+ clientName,
+ commandName,
+ inputFilterSensitiveLog: (_) => _,
+ outputFilterSensitiveLog: (_) => _,
+ [types_1.SMITHY_CONTEXT_KEY]: {
+ service: "CloudFormation",
+ operation: "DescribeStacks",
+ },
+ };
+ const { requestHandler } = configuration;
+ return stack.resolve((request) => requestHandler.handle(request.request, options || {}), handlerExecutionContext);
+ }
+ serialize(input, context) {
+ return (0, Aws_query_1.se_DescribeStacksCommand)(input, context);
+ }
+ deserialize(output, context) {
+ return (0, Aws_query_1.de_DescribeStacksCommand)(output, context);
+ }
+}
+exports.DescribeStacksCommand = DescribeStacksCommand;
+
+
+/***/ }),
+
+/***/ 78756:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.DescribeTypeCommand = exports.$Command = void 0;
+const middleware_endpoint_1 = __nccwpck_require__(82918);
+const middleware_serde_1 = __nccwpck_require__(81238);
+const smithy_client_1 = __nccwpck_require__(63570);
+Object.defineProperty(exports, "$Command", ({ enumerable: true, get: function () { return smithy_client_1.Command; } }));
+const types_1 = __nccwpck_require__(55756);
+const Aws_query_1 = __nccwpck_require__(46110);
+class DescribeTypeCommand extends smithy_client_1.Command {
+ static getEndpointParameterInstructions() {
+ return {
+ UseFIPS: { type: "builtInParams", name: "useFipsEndpoint" },
+ Endpoint: { type: "builtInParams", name: "endpoint" },
+ Region: { type: "builtInParams", name: "region" },
+ UseDualStack: { type: "builtInParams", name: "useDualstackEndpoint" },
+ };
+ }
+ constructor(input) {
+ super();
+ this.input = input;
+ }
+ resolveMiddleware(clientStack, configuration, options) {
+ this.middlewareStack.use((0, middleware_serde_1.getSerdePlugin)(configuration, this.serialize, this.deserialize));
+ this.middlewareStack.use((0, middleware_endpoint_1.getEndpointPlugin)(configuration, DescribeTypeCommand.getEndpointParameterInstructions()));
+ const stack = clientStack.concat(this.middlewareStack);
+ const { logger } = configuration;
+ const clientName = "CloudFormationClient";
+ const commandName = "DescribeTypeCommand";
+ const handlerExecutionContext = {
+ logger,
+ clientName,
+ commandName,
+ inputFilterSensitiveLog: (_) => _,
+ outputFilterSensitiveLog: (_) => _,
+ [types_1.SMITHY_CONTEXT_KEY]: {
+ service: "CloudFormation",
+ operation: "DescribeType",
+ },
+ };
+ const { requestHandler } = configuration;
+ return stack.resolve((request) => requestHandler.handle(request.request, options || {}), handlerExecutionContext);
+ }
+ serialize(input, context) {
+ return (0, Aws_query_1.se_DescribeTypeCommand)(input, context);
+ }
+ deserialize(output, context) {
+ return (0, Aws_query_1.de_DescribeTypeCommand)(output, context);
+ }
+}
+exports.DescribeTypeCommand = DescribeTypeCommand;
+
+
+/***/ }),
+
+/***/ 80130:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.DescribeTypeRegistrationCommand = exports.$Command = void 0;
+const middleware_endpoint_1 = __nccwpck_require__(82918);
+const middleware_serde_1 = __nccwpck_require__(81238);
+const smithy_client_1 = __nccwpck_require__(63570);
+Object.defineProperty(exports, "$Command", ({ enumerable: true, get: function () { return smithy_client_1.Command; } }));
+const types_1 = __nccwpck_require__(55756);
+const Aws_query_1 = __nccwpck_require__(46110);
+class DescribeTypeRegistrationCommand extends smithy_client_1.Command {
+ static getEndpointParameterInstructions() {
+ return {
+ UseFIPS: { type: "builtInParams", name: "useFipsEndpoint" },
+ Endpoint: { type: "builtInParams", name: "endpoint" },
+ Region: { type: "builtInParams", name: "region" },
+ UseDualStack: { type: "builtInParams", name: "useDualstackEndpoint" },
+ };
+ }
+ constructor(input) {
+ super();
+ this.input = input;
+ }
+ resolveMiddleware(clientStack, configuration, options) {
+ this.middlewareStack.use((0, middleware_serde_1.getSerdePlugin)(configuration, this.serialize, this.deserialize));
+ this.middlewareStack.use((0, middleware_endpoint_1.getEndpointPlugin)(configuration, DescribeTypeRegistrationCommand.getEndpointParameterInstructions()));
+ const stack = clientStack.concat(this.middlewareStack);
+ const { logger } = configuration;
+ const clientName = "CloudFormationClient";
+ const commandName = "DescribeTypeRegistrationCommand";
+ const handlerExecutionContext = {
+ logger,
+ clientName,
+ commandName,
+ inputFilterSensitiveLog: (_) => _,
+ outputFilterSensitiveLog: (_) => _,
+ [types_1.SMITHY_CONTEXT_KEY]: {
+ service: "CloudFormation",
+ operation: "DescribeTypeRegistration",
+ },
+ };
+ const { requestHandler } = configuration;
+ return stack.resolve((request) => requestHandler.handle(request.request, options || {}), handlerExecutionContext);
+ }
+ serialize(input, context) {
+ return (0, Aws_query_1.se_DescribeTypeRegistrationCommand)(input, context);
+ }
+ deserialize(output, context) {
+ return (0, Aws_query_1.de_DescribeTypeRegistrationCommand)(output, context);
+ }
+}
+exports.DescribeTypeRegistrationCommand = DescribeTypeRegistrationCommand;
+
+
+/***/ }),
+
+/***/ 67753:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.DetectStackDriftCommand = exports.$Command = void 0;
+const middleware_endpoint_1 = __nccwpck_require__(82918);
+const middleware_serde_1 = __nccwpck_require__(81238);
+const smithy_client_1 = __nccwpck_require__(63570);
+Object.defineProperty(exports, "$Command", ({ enumerable: true, get: function () { return smithy_client_1.Command; } }));
+const types_1 = __nccwpck_require__(55756);
+const Aws_query_1 = __nccwpck_require__(46110);
+class DetectStackDriftCommand extends smithy_client_1.Command {
+ static getEndpointParameterInstructions() {
+ return {
+ UseFIPS: { type: "builtInParams", name: "useFipsEndpoint" },
+ Endpoint: { type: "builtInParams", name: "endpoint" },
+ Region: { type: "builtInParams", name: "region" },
+ UseDualStack: { type: "builtInParams", name: "useDualstackEndpoint" },
+ };
+ }
+ constructor(input) {
+ super();
+ this.input = input;
+ }
+ resolveMiddleware(clientStack, configuration, options) {
+ this.middlewareStack.use((0, middleware_serde_1.getSerdePlugin)(configuration, this.serialize, this.deserialize));
+ this.middlewareStack.use((0, middleware_endpoint_1.getEndpointPlugin)(configuration, DetectStackDriftCommand.getEndpointParameterInstructions()));
+ const stack = clientStack.concat(this.middlewareStack);
+ const { logger } = configuration;
+ const clientName = "CloudFormationClient";
+ const commandName = "DetectStackDriftCommand";
+ const handlerExecutionContext = {
+ logger,
+ clientName,
+ commandName,
+ inputFilterSensitiveLog: (_) => _,
+ outputFilterSensitiveLog: (_) => _,
+ [types_1.SMITHY_CONTEXT_KEY]: {
+ service: "CloudFormation",
+ operation: "DetectStackDrift",
+ },
+ };
+ const { requestHandler } = configuration;
+ return stack.resolve((request) => requestHandler.handle(request.request, options || {}), handlerExecutionContext);
+ }
+ serialize(input, context) {
+ return (0, Aws_query_1.se_DetectStackDriftCommand)(input, context);
+ }
+ deserialize(output, context) {
+ return (0, Aws_query_1.de_DetectStackDriftCommand)(output, context);
+ }
+}
+exports.DetectStackDriftCommand = DetectStackDriftCommand;
+
+
+/***/ }),
+
+/***/ 75956:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.DetectStackResourceDriftCommand = exports.$Command = void 0;
+const middleware_endpoint_1 = __nccwpck_require__(82918);
+const middleware_serde_1 = __nccwpck_require__(81238);
+const smithy_client_1 = __nccwpck_require__(63570);
+Object.defineProperty(exports, "$Command", ({ enumerable: true, get: function () { return smithy_client_1.Command; } }));
+const types_1 = __nccwpck_require__(55756);
+const Aws_query_1 = __nccwpck_require__(46110);
+class DetectStackResourceDriftCommand extends smithy_client_1.Command {
+ static getEndpointParameterInstructions() {
+ return {
+ UseFIPS: { type: "builtInParams", name: "useFipsEndpoint" },
+ Endpoint: { type: "builtInParams", name: "endpoint" },
+ Region: { type: "builtInParams", name: "region" },
+ UseDualStack: { type: "builtInParams", name: "useDualstackEndpoint" },
+ };
+ }
+ constructor(input) {
+ super();
+ this.input = input;
+ }
+ resolveMiddleware(clientStack, configuration, options) {
+ this.middlewareStack.use((0, middleware_serde_1.getSerdePlugin)(configuration, this.serialize, this.deserialize));
+ this.middlewareStack.use((0, middleware_endpoint_1.getEndpointPlugin)(configuration, DetectStackResourceDriftCommand.getEndpointParameterInstructions()));
+ const stack = clientStack.concat(this.middlewareStack);
+ const { logger } = configuration;
+ const clientName = "CloudFormationClient";
+ const commandName = "DetectStackResourceDriftCommand";
+ const handlerExecutionContext = {
+ logger,
+ clientName,
+ commandName,
+ inputFilterSensitiveLog: (_) => _,
+ outputFilterSensitiveLog: (_) => _,
+ [types_1.SMITHY_CONTEXT_KEY]: {
+ service: "CloudFormation",
+ operation: "DetectStackResourceDrift",
+ },
+ };
+ const { requestHandler } = configuration;
+ return stack.resolve((request) => requestHandler.handle(request.request, options || {}), handlerExecutionContext);
+ }
+ serialize(input, context) {
+ return (0, Aws_query_1.se_DetectStackResourceDriftCommand)(input, context);
+ }
+ deserialize(output, context) {
+ return (0, Aws_query_1.de_DetectStackResourceDriftCommand)(output, context);
+ }
+}
+exports.DetectStackResourceDriftCommand = DetectStackResourceDriftCommand;
+
+
+/***/ }),
+
+/***/ 83591:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.DetectStackSetDriftCommand = exports.$Command = void 0;
+const middleware_endpoint_1 = __nccwpck_require__(82918);
+const middleware_serde_1 = __nccwpck_require__(81238);
+const smithy_client_1 = __nccwpck_require__(63570);
+Object.defineProperty(exports, "$Command", ({ enumerable: true, get: function () { return smithy_client_1.Command; } }));
+const types_1 = __nccwpck_require__(55756);
+const Aws_query_1 = __nccwpck_require__(46110);
+class DetectStackSetDriftCommand extends smithy_client_1.Command {
+ static getEndpointParameterInstructions() {
+ return {
+ UseFIPS: { type: "builtInParams", name: "useFipsEndpoint" },
+ Endpoint: { type: "builtInParams", name: "endpoint" },
+ Region: { type: "builtInParams", name: "region" },
+ UseDualStack: { type: "builtInParams", name: "useDualstackEndpoint" },
+ };
+ }
+ constructor(input) {
+ super();
+ this.input = input;
+ }
+ resolveMiddleware(clientStack, configuration, options) {
+ this.middlewareStack.use((0, middleware_serde_1.getSerdePlugin)(configuration, this.serialize, this.deserialize));
+ this.middlewareStack.use((0, middleware_endpoint_1.getEndpointPlugin)(configuration, DetectStackSetDriftCommand.getEndpointParameterInstructions()));
+ const stack = clientStack.concat(this.middlewareStack);
+ const { logger } = configuration;
+ const clientName = "CloudFormationClient";
+ const commandName = "DetectStackSetDriftCommand";
+ const handlerExecutionContext = {
+ logger,
+ clientName,
+ commandName,
+ inputFilterSensitiveLog: (_) => _,
+ outputFilterSensitiveLog: (_) => _,
+ [types_1.SMITHY_CONTEXT_KEY]: {
+ service: "CloudFormation",
+ operation: "DetectStackSetDrift",
+ },
+ };
+ const { requestHandler } = configuration;
+ return stack.resolve((request) => requestHandler.handle(request.request, options || {}), handlerExecutionContext);
+ }
+ serialize(input, context) {
+ return (0, Aws_query_1.se_DetectStackSetDriftCommand)(input, context);
+ }
+ deserialize(output, context) {
+ return (0, Aws_query_1.de_DetectStackSetDriftCommand)(output, context);
+ }
+}
+exports.DetectStackSetDriftCommand = DetectStackSetDriftCommand;
+
+
+/***/ }),
+
+/***/ 71636:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.EstimateTemplateCostCommand = exports.$Command = void 0;
+const middleware_endpoint_1 = __nccwpck_require__(82918);
+const middleware_serde_1 = __nccwpck_require__(81238);
+const smithy_client_1 = __nccwpck_require__(63570);
+Object.defineProperty(exports, "$Command", ({ enumerable: true, get: function () { return smithy_client_1.Command; } }));
+const types_1 = __nccwpck_require__(55756);
+const Aws_query_1 = __nccwpck_require__(46110);
+class EstimateTemplateCostCommand extends smithy_client_1.Command {
+ static getEndpointParameterInstructions() {
+ return {
+ UseFIPS: { type: "builtInParams", name: "useFipsEndpoint" },
+ Endpoint: { type: "builtInParams", name: "endpoint" },
+ Region: { type: "builtInParams", name: "region" },
+ UseDualStack: { type: "builtInParams", name: "useDualstackEndpoint" },
+ };
+ }
+ constructor(input) {
+ super();
+ this.input = input;
+ }
+ resolveMiddleware(clientStack, configuration, options) {
+ this.middlewareStack.use((0, middleware_serde_1.getSerdePlugin)(configuration, this.serialize, this.deserialize));
+ this.middlewareStack.use((0, middleware_endpoint_1.getEndpointPlugin)(configuration, EstimateTemplateCostCommand.getEndpointParameterInstructions()));
+ const stack = clientStack.concat(this.middlewareStack);
+ const { logger } = configuration;
+ const clientName = "CloudFormationClient";
+ const commandName = "EstimateTemplateCostCommand";
+ const handlerExecutionContext = {
+ logger,
+ clientName,
+ commandName,
+ inputFilterSensitiveLog: (_) => _,
+ outputFilterSensitiveLog: (_) => _,
+ [types_1.SMITHY_CONTEXT_KEY]: {
+ service: "CloudFormation",
+ operation: "EstimateTemplateCost",
+ },
+ };
+ const { requestHandler } = configuration;
+ return stack.resolve((request) => requestHandler.handle(request.request, options || {}), handlerExecutionContext);
+ }
+ serialize(input, context) {
+ return (0, Aws_query_1.se_EstimateTemplateCostCommand)(input, context);
+ }
+ deserialize(output, context) {
+ return (0, Aws_query_1.de_EstimateTemplateCostCommand)(output, context);
+ }
+}
+exports.EstimateTemplateCostCommand = EstimateTemplateCostCommand;
+
+
+/***/ }),
+
+/***/ 57399:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.ExecuteChangeSetCommand = exports.$Command = void 0;
+const middleware_endpoint_1 = __nccwpck_require__(82918);
+const middleware_serde_1 = __nccwpck_require__(81238);
+const smithy_client_1 = __nccwpck_require__(63570);
+Object.defineProperty(exports, "$Command", ({ enumerable: true, get: function () { return smithy_client_1.Command; } }));
+const types_1 = __nccwpck_require__(55756);
+const Aws_query_1 = __nccwpck_require__(46110);
+class ExecuteChangeSetCommand extends smithy_client_1.Command {
+ static getEndpointParameterInstructions() {
+ return {
+ UseFIPS: { type: "builtInParams", name: "useFipsEndpoint" },
+ Endpoint: { type: "builtInParams", name: "endpoint" },
+ Region: { type: "builtInParams", name: "region" },
+ UseDualStack: { type: "builtInParams", name: "useDualstackEndpoint" },
+ };
+ }
+ constructor(input) {
+ super();
+ this.input = input;
+ }
+ resolveMiddleware(clientStack, configuration, options) {
+ this.middlewareStack.use((0, middleware_serde_1.getSerdePlugin)(configuration, this.serialize, this.deserialize));
+ this.middlewareStack.use((0, middleware_endpoint_1.getEndpointPlugin)(configuration, ExecuteChangeSetCommand.getEndpointParameterInstructions()));
+ const stack = clientStack.concat(this.middlewareStack);
+ const { logger } = configuration;
+ const clientName = "CloudFormationClient";
+ const commandName = "ExecuteChangeSetCommand";
+ const handlerExecutionContext = {
+ logger,
+ clientName,
+ commandName,
+ inputFilterSensitiveLog: (_) => _,
+ outputFilterSensitiveLog: (_) => _,
+ [types_1.SMITHY_CONTEXT_KEY]: {
+ service: "CloudFormation",
+ operation: "ExecuteChangeSet",
+ },
+ };
+ const { requestHandler } = configuration;
+ return stack.resolve((request) => requestHandler.handle(request.request, options || {}), handlerExecutionContext);
+ }
+ serialize(input, context) {
+ return (0, Aws_query_1.se_ExecuteChangeSetCommand)(input, context);
+ }
+ deserialize(output, context) {
+ return (0, Aws_query_1.de_ExecuteChangeSetCommand)(output, context);
+ }
+}
+exports.ExecuteChangeSetCommand = ExecuteChangeSetCommand;
+
+
+/***/ }),
+
+/***/ 9450:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.GetStackPolicyCommand = exports.$Command = void 0;
+const middleware_endpoint_1 = __nccwpck_require__(82918);
+const middleware_serde_1 = __nccwpck_require__(81238);
+const smithy_client_1 = __nccwpck_require__(63570);
+Object.defineProperty(exports, "$Command", ({ enumerable: true, get: function () { return smithy_client_1.Command; } }));
+const types_1 = __nccwpck_require__(55756);
+const Aws_query_1 = __nccwpck_require__(46110);
+class GetStackPolicyCommand extends smithy_client_1.Command {
+ static getEndpointParameterInstructions() {
+ return {
+ UseFIPS: { type: "builtInParams", name: "useFipsEndpoint" },
+ Endpoint: { type: "builtInParams", name: "endpoint" },
+ Region: { type: "builtInParams", name: "region" },
+ UseDualStack: { type: "builtInParams", name: "useDualstackEndpoint" },
+ };
+ }
+ constructor(input) {
+ super();
+ this.input = input;
+ }
+ resolveMiddleware(clientStack, configuration, options) {
+ this.middlewareStack.use((0, middleware_serde_1.getSerdePlugin)(configuration, this.serialize, this.deserialize));
+ this.middlewareStack.use((0, middleware_endpoint_1.getEndpointPlugin)(configuration, GetStackPolicyCommand.getEndpointParameterInstructions()));
+ const stack = clientStack.concat(this.middlewareStack);
+ const { logger } = configuration;
+ const clientName = "CloudFormationClient";
+ const commandName = "GetStackPolicyCommand";
+ const handlerExecutionContext = {
+ logger,
+ clientName,
+ commandName,
+ inputFilterSensitiveLog: (_) => _,
+ outputFilterSensitiveLog: (_) => _,
+ [types_1.SMITHY_CONTEXT_KEY]: {
+ service: "CloudFormation",
+ operation: "GetStackPolicy",
+ },
+ };
+ const { requestHandler } = configuration;
+ return stack.resolve((request) => requestHandler.handle(request.request, options || {}), handlerExecutionContext);
+ }
+ serialize(input, context) {
+ return (0, Aws_query_1.se_GetStackPolicyCommand)(input, context);
+ }
+ deserialize(output, context) {
+ return (0, Aws_query_1.de_GetStackPolicyCommand)(output, context);
+ }
+}
+exports.GetStackPolicyCommand = GetStackPolicyCommand;
+
+
+/***/ }),
+
+/***/ 93644:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.GetTemplateCommand = exports.$Command = void 0;
+const middleware_endpoint_1 = __nccwpck_require__(82918);
+const middleware_serde_1 = __nccwpck_require__(81238);
+const smithy_client_1 = __nccwpck_require__(63570);
+Object.defineProperty(exports, "$Command", ({ enumerable: true, get: function () { return smithy_client_1.Command; } }));
+const types_1 = __nccwpck_require__(55756);
+const Aws_query_1 = __nccwpck_require__(46110);
+class GetTemplateCommand extends smithy_client_1.Command {
+ static getEndpointParameterInstructions() {
+ return {
+ UseFIPS: { type: "builtInParams", name: "useFipsEndpoint" },
+ Endpoint: { type: "builtInParams", name: "endpoint" },
+ Region: { type: "builtInParams", name: "region" },
+ UseDualStack: { type: "builtInParams", name: "useDualstackEndpoint" },
+ };
+ }
+ constructor(input) {
+ super();
+ this.input = input;
+ }
+ resolveMiddleware(clientStack, configuration, options) {
+ this.middlewareStack.use((0, middleware_serde_1.getSerdePlugin)(configuration, this.serialize, this.deserialize));
+ this.middlewareStack.use((0, middleware_endpoint_1.getEndpointPlugin)(configuration, GetTemplateCommand.getEndpointParameterInstructions()));
+ const stack = clientStack.concat(this.middlewareStack);
+ const { logger } = configuration;
+ const clientName = "CloudFormationClient";
+ const commandName = "GetTemplateCommand";
+ const handlerExecutionContext = {
+ logger,
+ clientName,
+ commandName,
+ inputFilterSensitiveLog: (_) => _,
+ outputFilterSensitiveLog: (_) => _,
+ [types_1.SMITHY_CONTEXT_KEY]: {
+ service: "CloudFormation",
+ operation: "GetTemplate",
+ },
+ };
+ const { requestHandler } = configuration;
+ return stack.resolve((request) => requestHandler.handle(request.request, options || {}), handlerExecutionContext);
+ }
+ serialize(input, context) {
+ return (0, Aws_query_1.se_GetTemplateCommand)(input, context);
+ }
+ deserialize(output, context) {
+ return (0, Aws_query_1.de_GetTemplateCommand)(output, context);
+ }
+}
+exports.GetTemplateCommand = GetTemplateCommand;
+
+
+/***/ }),
+
+/***/ 97513:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.GetTemplateSummaryCommand = exports.$Command = void 0;
+const middleware_endpoint_1 = __nccwpck_require__(82918);
+const middleware_serde_1 = __nccwpck_require__(81238);
+const smithy_client_1 = __nccwpck_require__(63570);
+Object.defineProperty(exports, "$Command", ({ enumerable: true, get: function () { return smithy_client_1.Command; } }));
+const types_1 = __nccwpck_require__(55756);
+const Aws_query_1 = __nccwpck_require__(46110);
+class GetTemplateSummaryCommand extends smithy_client_1.Command {
+ static getEndpointParameterInstructions() {
+ return {
+ UseFIPS: { type: "builtInParams", name: "useFipsEndpoint" },
+ Endpoint: { type: "builtInParams", name: "endpoint" },
+ Region: { type: "builtInParams", name: "region" },
+ UseDualStack: { type: "builtInParams", name: "useDualstackEndpoint" },
+ };
+ }
+ constructor(input) {
+ super();
+ this.input = input;
+ }
+ resolveMiddleware(clientStack, configuration, options) {
+ this.middlewareStack.use((0, middleware_serde_1.getSerdePlugin)(configuration, this.serialize, this.deserialize));
+ this.middlewareStack.use((0, middleware_endpoint_1.getEndpointPlugin)(configuration, GetTemplateSummaryCommand.getEndpointParameterInstructions()));
+ const stack = clientStack.concat(this.middlewareStack);
+ const { logger } = configuration;
+ const clientName = "CloudFormationClient";
+ const commandName = "GetTemplateSummaryCommand";
+ const handlerExecutionContext = {
+ logger,
+ clientName,
+ commandName,
+ inputFilterSensitiveLog: (_) => _,
+ outputFilterSensitiveLog: (_) => _,
+ [types_1.SMITHY_CONTEXT_KEY]: {
+ service: "CloudFormation",
+ operation: "GetTemplateSummary",
+ },
+ };
+ const { requestHandler } = configuration;
+ return stack.resolve((request) => requestHandler.handle(request.request, options || {}), handlerExecutionContext);
+ }
+ serialize(input, context) {
+ return (0, Aws_query_1.se_GetTemplateSummaryCommand)(input, context);
+ }
+ deserialize(output, context) {
+ return (0, Aws_query_1.de_GetTemplateSummaryCommand)(output, context);
+ }
+}
+exports.GetTemplateSummaryCommand = GetTemplateSummaryCommand;
+
+
+/***/ }),
+
+/***/ 92148:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.ImportStacksToStackSetCommand = exports.$Command = void 0;
+const middleware_endpoint_1 = __nccwpck_require__(82918);
+const middleware_serde_1 = __nccwpck_require__(81238);
+const smithy_client_1 = __nccwpck_require__(63570);
+Object.defineProperty(exports, "$Command", ({ enumerable: true, get: function () { return smithy_client_1.Command; } }));
+const types_1 = __nccwpck_require__(55756);
+const Aws_query_1 = __nccwpck_require__(46110);
+class ImportStacksToStackSetCommand extends smithy_client_1.Command {
+ static getEndpointParameterInstructions() {
+ return {
+ UseFIPS: { type: "builtInParams", name: "useFipsEndpoint" },
+ Endpoint: { type: "builtInParams", name: "endpoint" },
+ Region: { type: "builtInParams", name: "region" },
+ UseDualStack: { type: "builtInParams", name: "useDualstackEndpoint" },
+ };
+ }
+ constructor(input) {
+ super();
+ this.input = input;
+ }
+ resolveMiddleware(clientStack, configuration, options) {
+ this.middlewareStack.use((0, middleware_serde_1.getSerdePlugin)(configuration, this.serialize, this.deserialize));
+ this.middlewareStack.use((0, middleware_endpoint_1.getEndpointPlugin)(configuration, ImportStacksToStackSetCommand.getEndpointParameterInstructions()));
+ const stack = clientStack.concat(this.middlewareStack);
+ const { logger } = configuration;
+ const clientName = "CloudFormationClient";
+ const commandName = "ImportStacksToStackSetCommand";
+ const handlerExecutionContext = {
+ logger,
+ clientName,
+ commandName,
+ inputFilterSensitiveLog: (_) => _,
+ outputFilterSensitiveLog: (_) => _,
+ [types_1.SMITHY_CONTEXT_KEY]: {
+ service: "CloudFormation",
+ operation: "ImportStacksToStackSet",
+ },
+ };
+ const { requestHandler } = configuration;
+ return stack.resolve((request) => requestHandler.handle(request.request, options || {}), handlerExecutionContext);
+ }
+ serialize(input, context) {
+ return (0, Aws_query_1.se_ImportStacksToStackSetCommand)(input, context);
+ }
+ deserialize(output, context) {
+ return (0, Aws_query_1.de_ImportStacksToStackSetCommand)(output, context);
+ }
+}
+exports.ImportStacksToStackSetCommand = ImportStacksToStackSetCommand;
+
+
+/***/ }),
+
+/***/ 87882:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.ListChangeSetsCommand = exports.$Command = void 0;
+const middleware_endpoint_1 = __nccwpck_require__(82918);
+const middleware_serde_1 = __nccwpck_require__(81238);
+const smithy_client_1 = __nccwpck_require__(63570);
+Object.defineProperty(exports, "$Command", ({ enumerable: true, get: function () { return smithy_client_1.Command; } }));
+const types_1 = __nccwpck_require__(55756);
+const Aws_query_1 = __nccwpck_require__(46110);
+class ListChangeSetsCommand extends smithy_client_1.Command {
+ static getEndpointParameterInstructions() {
+ return {
+ UseFIPS: { type: "builtInParams", name: "useFipsEndpoint" },
+ Endpoint: { type: "builtInParams", name: "endpoint" },
+ Region: { type: "builtInParams", name: "region" },
+ UseDualStack: { type: "builtInParams", name: "useDualstackEndpoint" },
+ };
+ }
+ constructor(input) {
+ super();
+ this.input = input;
+ }
+ resolveMiddleware(clientStack, configuration, options) {
+ this.middlewareStack.use((0, middleware_serde_1.getSerdePlugin)(configuration, this.serialize, this.deserialize));
+ this.middlewareStack.use((0, middleware_endpoint_1.getEndpointPlugin)(configuration, ListChangeSetsCommand.getEndpointParameterInstructions()));
+ const stack = clientStack.concat(this.middlewareStack);
+ const { logger } = configuration;
+ const clientName = "CloudFormationClient";
+ const commandName = "ListChangeSetsCommand";
+ const handlerExecutionContext = {
+ logger,
+ clientName,
+ commandName,
+ inputFilterSensitiveLog: (_) => _,
+ outputFilterSensitiveLog: (_) => _,
+ [types_1.SMITHY_CONTEXT_KEY]: {
+ service: "CloudFormation",
+ operation: "ListChangeSets",
+ },
+ };
+ const { requestHandler } = configuration;
+ return stack.resolve((request) => requestHandler.handle(request.request, options || {}), handlerExecutionContext);
+ }
+ serialize(input, context) {
+ return (0, Aws_query_1.se_ListChangeSetsCommand)(input, context);
+ }
+ deserialize(output, context) {
+ return (0, Aws_query_1.de_ListChangeSetsCommand)(output, context);
+ }
+}
+exports.ListChangeSetsCommand = ListChangeSetsCommand;
+
+
+/***/ }),
+
+/***/ 81426:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.ListExportsCommand = exports.$Command = void 0;
+const middleware_endpoint_1 = __nccwpck_require__(82918);
+const middleware_serde_1 = __nccwpck_require__(81238);
+const smithy_client_1 = __nccwpck_require__(63570);
+Object.defineProperty(exports, "$Command", ({ enumerable: true, get: function () { return smithy_client_1.Command; } }));
+const types_1 = __nccwpck_require__(55756);
+const Aws_query_1 = __nccwpck_require__(46110);
+class ListExportsCommand extends smithy_client_1.Command {
+ static getEndpointParameterInstructions() {
+ return {
+ UseFIPS: { type: "builtInParams", name: "useFipsEndpoint" },
+ Endpoint: { type: "builtInParams", name: "endpoint" },
+ Region: { type: "builtInParams", name: "region" },
+ UseDualStack: { type: "builtInParams", name: "useDualstackEndpoint" },
+ };
+ }
+ constructor(input) {
+ super();
+ this.input = input;
+ }
+ resolveMiddleware(clientStack, configuration, options) {
+ this.middlewareStack.use((0, middleware_serde_1.getSerdePlugin)(configuration, this.serialize, this.deserialize));
+ this.middlewareStack.use((0, middleware_endpoint_1.getEndpointPlugin)(configuration, ListExportsCommand.getEndpointParameterInstructions()));
+ const stack = clientStack.concat(this.middlewareStack);
+ const { logger } = configuration;
+ const clientName = "CloudFormationClient";
+ const commandName = "ListExportsCommand";
+ const handlerExecutionContext = {
+ logger,
+ clientName,
+ commandName,
+ inputFilterSensitiveLog: (_) => _,
+ outputFilterSensitiveLog: (_) => _,
+ [types_1.SMITHY_CONTEXT_KEY]: {
+ service: "CloudFormation",
+ operation: "ListExports",
+ },
+ };
+ const { requestHandler } = configuration;
+ return stack.resolve((request) => requestHandler.handle(request.request, options || {}), handlerExecutionContext);
+ }
+ serialize(input, context) {
+ return (0, Aws_query_1.se_ListExportsCommand)(input, context);
+ }
+ deserialize(output, context) {
+ return (0, Aws_query_1.de_ListExportsCommand)(output, context);
+ }
+}
+exports.ListExportsCommand = ListExportsCommand;
+
+
+/***/ }),
+
+/***/ 21574:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.ListImportsCommand = exports.$Command = void 0;
+const middleware_endpoint_1 = __nccwpck_require__(82918);
+const middleware_serde_1 = __nccwpck_require__(81238);
+const smithy_client_1 = __nccwpck_require__(63570);
+Object.defineProperty(exports, "$Command", ({ enumerable: true, get: function () { return smithy_client_1.Command; } }));
+const types_1 = __nccwpck_require__(55756);
+const Aws_query_1 = __nccwpck_require__(46110);
+class ListImportsCommand extends smithy_client_1.Command {
+ static getEndpointParameterInstructions() {
+ return {
+ UseFIPS: { type: "builtInParams", name: "useFipsEndpoint" },
+ Endpoint: { type: "builtInParams", name: "endpoint" },
+ Region: { type: "builtInParams", name: "region" },
+ UseDualStack: { type: "builtInParams", name: "useDualstackEndpoint" },
+ };
+ }
+ constructor(input) {
+ super();
+ this.input = input;
+ }
+ resolveMiddleware(clientStack, configuration, options) {
+ this.middlewareStack.use((0, middleware_serde_1.getSerdePlugin)(configuration, this.serialize, this.deserialize));
+ this.middlewareStack.use((0, middleware_endpoint_1.getEndpointPlugin)(configuration, ListImportsCommand.getEndpointParameterInstructions()));
+ const stack = clientStack.concat(this.middlewareStack);
+ const { logger } = configuration;
+ const clientName = "CloudFormationClient";
+ const commandName = "ListImportsCommand";
+ const handlerExecutionContext = {
+ logger,
+ clientName,
+ commandName,
+ inputFilterSensitiveLog: (_) => _,
+ outputFilterSensitiveLog: (_) => _,
+ [types_1.SMITHY_CONTEXT_KEY]: {
+ service: "CloudFormation",
+ operation: "ListImports",
+ },
+ };
+ const { requestHandler } = configuration;
+ return stack.resolve((request) => requestHandler.handle(request.request, options || {}), handlerExecutionContext);
+ }
+ serialize(input, context) {
+ return (0, Aws_query_1.se_ListImportsCommand)(input, context);
+ }
+ deserialize(output, context) {
+ return (0, Aws_query_1.de_ListImportsCommand)(output, context);
+ }
+}
+exports.ListImportsCommand = ListImportsCommand;
+
+
+/***/ }),
+
+/***/ 66194:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.ListStackInstanceResourceDriftsCommand = exports.$Command = void 0;
+const middleware_endpoint_1 = __nccwpck_require__(82918);
+const middleware_serde_1 = __nccwpck_require__(81238);
+const smithy_client_1 = __nccwpck_require__(63570);
+Object.defineProperty(exports, "$Command", ({ enumerable: true, get: function () { return smithy_client_1.Command; } }));
+const types_1 = __nccwpck_require__(55756);
+const Aws_query_1 = __nccwpck_require__(46110);
+class ListStackInstanceResourceDriftsCommand extends smithy_client_1.Command {
+ static getEndpointParameterInstructions() {
+ return {
+ UseFIPS: { type: "builtInParams", name: "useFipsEndpoint" },
+ Endpoint: { type: "builtInParams", name: "endpoint" },
+ Region: { type: "builtInParams", name: "region" },
+ UseDualStack: { type: "builtInParams", name: "useDualstackEndpoint" },
+ };
+ }
+ constructor(input) {
+ super();
+ this.input = input;
+ }
+ resolveMiddleware(clientStack, configuration, options) {
+ this.middlewareStack.use((0, middleware_serde_1.getSerdePlugin)(configuration, this.serialize, this.deserialize));
+ this.middlewareStack.use((0, middleware_endpoint_1.getEndpointPlugin)(configuration, ListStackInstanceResourceDriftsCommand.getEndpointParameterInstructions()));
+ const stack = clientStack.concat(this.middlewareStack);
+ const { logger } = configuration;
+ const clientName = "CloudFormationClient";
+ const commandName = "ListStackInstanceResourceDriftsCommand";
+ const handlerExecutionContext = {
+ logger,
+ clientName,
+ commandName,
+ inputFilterSensitiveLog: (_) => _,
+ outputFilterSensitiveLog: (_) => _,
+ [types_1.SMITHY_CONTEXT_KEY]: {
+ service: "CloudFormation",
+ operation: "ListStackInstanceResourceDrifts",
+ },
+ };
+ const { requestHandler } = configuration;
+ return stack.resolve((request) => requestHandler.handle(request.request, options || {}), handlerExecutionContext);
+ }
+ serialize(input, context) {
+ return (0, Aws_query_1.se_ListStackInstanceResourceDriftsCommand)(input, context);
+ }
+ deserialize(output, context) {
+ return (0, Aws_query_1.de_ListStackInstanceResourceDriftsCommand)(output, context);
+ }
+}
+exports.ListStackInstanceResourceDriftsCommand = ListStackInstanceResourceDriftsCommand;
+
+
+/***/ }),
+
+/***/ 70488:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.ListStackInstancesCommand = exports.$Command = void 0;
+const middleware_endpoint_1 = __nccwpck_require__(82918);
+const middleware_serde_1 = __nccwpck_require__(81238);
+const smithy_client_1 = __nccwpck_require__(63570);
+Object.defineProperty(exports, "$Command", ({ enumerable: true, get: function () { return smithy_client_1.Command; } }));
+const types_1 = __nccwpck_require__(55756);
+const Aws_query_1 = __nccwpck_require__(46110);
+class ListStackInstancesCommand extends smithy_client_1.Command {
+ static getEndpointParameterInstructions() {
+ return {
+ UseFIPS: { type: "builtInParams", name: "useFipsEndpoint" },
+ Endpoint: { type: "builtInParams", name: "endpoint" },
+ Region: { type: "builtInParams", name: "region" },
+ UseDualStack: { type: "builtInParams", name: "useDualstackEndpoint" },
+ };
+ }
+ constructor(input) {
+ super();
+ this.input = input;
+ }
+ resolveMiddleware(clientStack, configuration, options) {
+ this.middlewareStack.use((0, middleware_serde_1.getSerdePlugin)(configuration, this.serialize, this.deserialize));
+ this.middlewareStack.use((0, middleware_endpoint_1.getEndpointPlugin)(configuration, ListStackInstancesCommand.getEndpointParameterInstructions()));
+ const stack = clientStack.concat(this.middlewareStack);
+ const { logger } = configuration;
+ const clientName = "CloudFormationClient";
+ const commandName = "ListStackInstancesCommand";
+ const handlerExecutionContext = {
+ logger,
+ clientName,
+ commandName,
+ inputFilterSensitiveLog: (_) => _,
+ outputFilterSensitiveLog: (_) => _,
+ [types_1.SMITHY_CONTEXT_KEY]: {
+ service: "CloudFormation",
+ operation: "ListStackInstances",
+ },
+ };
+ const { requestHandler } = configuration;
+ return stack.resolve((request) => requestHandler.handle(request.request, options || {}), handlerExecutionContext);
+ }
+ serialize(input, context) {
+ return (0, Aws_query_1.se_ListStackInstancesCommand)(input, context);
+ }
+ deserialize(output, context) {
+ return (0, Aws_query_1.de_ListStackInstancesCommand)(output, context);
+ }
+}
+exports.ListStackInstancesCommand = ListStackInstancesCommand;
+
+
+/***/ }),
+
+/***/ 12602:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.ListStackResourcesCommand = exports.$Command = void 0;
+const middleware_endpoint_1 = __nccwpck_require__(82918);
+const middleware_serde_1 = __nccwpck_require__(81238);
+const smithy_client_1 = __nccwpck_require__(63570);
+Object.defineProperty(exports, "$Command", ({ enumerable: true, get: function () { return smithy_client_1.Command; } }));
+const types_1 = __nccwpck_require__(55756);
+const Aws_query_1 = __nccwpck_require__(46110);
+class ListStackResourcesCommand extends smithy_client_1.Command {
+ static getEndpointParameterInstructions() {
+ return {
+ UseFIPS: { type: "builtInParams", name: "useFipsEndpoint" },
+ Endpoint: { type: "builtInParams", name: "endpoint" },
+ Region: { type: "builtInParams", name: "region" },
+ UseDualStack: { type: "builtInParams", name: "useDualstackEndpoint" },
+ };
+ }
+ constructor(input) {
+ super();
+ this.input = input;
+ }
+ resolveMiddleware(clientStack, configuration, options) {
+ this.middlewareStack.use((0, middleware_serde_1.getSerdePlugin)(configuration, this.serialize, this.deserialize));
+ this.middlewareStack.use((0, middleware_endpoint_1.getEndpointPlugin)(configuration, ListStackResourcesCommand.getEndpointParameterInstructions()));
+ const stack = clientStack.concat(this.middlewareStack);
+ const { logger } = configuration;
+ const clientName = "CloudFormationClient";
+ const commandName = "ListStackResourcesCommand";
+ const handlerExecutionContext = {
+ logger,
+ clientName,
+ commandName,
+ inputFilterSensitiveLog: (_) => _,
+ outputFilterSensitiveLog: (_) => _,
+ [types_1.SMITHY_CONTEXT_KEY]: {
+ service: "CloudFormation",
+ operation: "ListStackResources",
+ },
+ };
+ const { requestHandler } = configuration;
+ return stack.resolve((request) => requestHandler.handle(request.request, options || {}), handlerExecutionContext);
+ }
+ serialize(input, context) {
+ return (0, Aws_query_1.se_ListStackResourcesCommand)(input, context);
+ }
+ deserialize(output, context) {
+ return (0, Aws_query_1.de_ListStackResourcesCommand)(output, context);
+ }
+}
+exports.ListStackResourcesCommand = ListStackResourcesCommand;
+
+
+/***/ }),
+
+/***/ 12200:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.ListStackSetOperationResultsCommand = exports.$Command = void 0;
+const middleware_endpoint_1 = __nccwpck_require__(82918);
+const middleware_serde_1 = __nccwpck_require__(81238);
+const smithy_client_1 = __nccwpck_require__(63570);
+Object.defineProperty(exports, "$Command", ({ enumerable: true, get: function () { return smithy_client_1.Command; } }));
+const types_1 = __nccwpck_require__(55756);
+const Aws_query_1 = __nccwpck_require__(46110);
+class ListStackSetOperationResultsCommand extends smithy_client_1.Command {
+ static getEndpointParameterInstructions() {
+ return {
+ UseFIPS: { type: "builtInParams", name: "useFipsEndpoint" },
+ Endpoint: { type: "builtInParams", name: "endpoint" },
+ Region: { type: "builtInParams", name: "region" },
+ UseDualStack: { type: "builtInParams", name: "useDualstackEndpoint" },
+ };
+ }
+ constructor(input) {
+ super();
+ this.input = input;
+ }
+ resolveMiddleware(clientStack, configuration, options) {
+ this.middlewareStack.use((0, middleware_serde_1.getSerdePlugin)(configuration, this.serialize, this.deserialize));
+ this.middlewareStack.use((0, middleware_endpoint_1.getEndpointPlugin)(configuration, ListStackSetOperationResultsCommand.getEndpointParameterInstructions()));
+ const stack = clientStack.concat(this.middlewareStack);
+ const { logger } = configuration;
+ const clientName = "CloudFormationClient";
+ const commandName = "ListStackSetOperationResultsCommand";
+ const handlerExecutionContext = {
+ logger,
+ clientName,
+ commandName,
+ inputFilterSensitiveLog: (_) => _,
+ outputFilterSensitiveLog: (_) => _,
+ [types_1.SMITHY_CONTEXT_KEY]: {
+ service: "CloudFormation",
+ operation: "ListStackSetOperationResults",
+ },
+ };
+ const { requestHandler } = configuration;
+ return stack.resolve((request) => requestHandler.handle(request.request, options || {}), handlerExecutionContext);
+ }
+ serialize(input, context) {
+ return (0, Aws_query_1.se_ListStackSetOperationResultsCommand)(input, context);
+ }
+ deserialize(output, context) {
+ return (0, Aws_query_1.de_ListStackSetOperationResultsCommand)(output, context);
+ }
+}
+exports.ListStackSetOperationResultsCommand = ListStackSetOperationResultsCommand;
+
+
+/***/ }),
+
+/***/ 65603:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.ListStackSetOperationsCommand = exports.$Command = void 0;
+const middleware_endpoint_1 = __nccwpck_require__(82918);
+const middleware_serde_1 = __nccwpck_require__(81238);
+const smithy_client_1 = __nccwpck_require__(63570);
+Object.defineProperty(exports, "$Command", ({ enumerable: true, get: function () { return smithy_client_1.Command; } }));
+const types_1 = __nccwpck_require__(55756);
+const Aws_query_1 = __nccwpck_require__(46110);
+class ListStackSetOperationsCommand extends smithy_client_1.Command {
+ static getEndpointParameterInstructions() {
+ return {
+ UseFIPS: { type: "builtInParams", name: "useFipsEndpoint" },
+ Endpoint: { type: "builtInParams", name: "endpoint" },
+ Region: { type: "builtInParams", name: "region" },
+ UseDualStack: { type: "builtInParams", name: "useDualstackEndpoint" },
+ };
+ }
+ constructor(input) {
+ super();
+ this.input = input;
+ }
+ resolveMiddleware(clientStack, configuration, options) {
+ this.middlewareStack.use((0, middleware_serde_1.getSerdePlugin)(configuration, this.serialize, this.deserialize));
+ this.middlewareStack.use((0, middleware_endpoint_1.getEndpointPlugin)(configuration, ListStackSetOperationsCommand.getEndpointParameterInstructions()));
+ const stack = clientStack.concat(this.middlewareStack);
+ const { logger } = configuration;
+ const clientName = "CloudFormationClient";
+ const commandName = "ListStackSetOperationsCommand";
+ const handlerExecutionContext = {
+ logger,
+ clientName,
+ commandName,
+ inputFilterSensitiveLog: (_) => _,
+ outputFilterSensitiveLog: (_) => _,
+ [types_1.SMITHY_CONTEXT_KEY]: {
+ service: "CloudFormation",
+ operation: "ListStackSetOperations",
+ },
+ };
+ const { requestHandler } = configuration;
+ return stack.resolve((request) => requestHandler.handle(request.request, options || {}), handlerExecutionContext);
+ }
+ serialize(input, context) {
+ return (0, Aws_query_1.se_ListStackSetOperationsCommand)(input, context);
+ }
+ deserialize(output, context) {
+ return (0, Aws_query_1.de_ListStackSetOperationsCommand)(output, context);
+ }
+}
+exports.ListStackSetOperationsCommand = ListStackSetOperationsCommand;
+
+
+/***/ }),
+
+/***/ 25005:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.ListStackSetsCommand = exports.$Command = void 0;
+const middleware_endpoint_1 = __nccwpck_require__(82918);
+const middleware_serde_1 = __nccwpck_require__(81238);
+const smithy_client_1 = __nccwpck_require__(63570);
+Object.defineProperty(exports, "$Command", ({ enumerable: true, get: function () { return smithy_client_1.Command; } }));
+const types_1 = __nccwpck_require__(55756);
+const Aws_query_1 = __nccwpck_require__(46110);
+class ListStackSetsCommand extends smithy_client_1.Command {
+ static getEndpointParameterInstructions() {
+ return {
+ UseFIPS: { type: "builtInParams", name: "useFipsEndpoint" },
+ Endpoint: { type: "builtInParams", name: "endpoint" },
+ Region: { type: "builtInParams", name: "region" },
+ UseDualStack: { type: "builtInParams", name: "useDualstackEndpoint" },
+ };
+ }
+ constructor(input) {
+ super();
+ this.input = input;
+ }
+ resolveMiddleware(clientStack, configuration, options) {
+ this.middlewareStack.use((0, middleware_serde_1.getSerdePlugin)(configuration, this.serialize, this.deserialize));
+ this.middlewareStack.use((0, middleware_endpoint_1.getEndpointPlugin)(configuration, ListStackSetsCommand.getEndpointParameterInstructions()));
+ const stack = clientStack.concat(this.middlewareStack);
+ const { logger } = configuration;
+ const clientName = "CloudFormationClient";
+ const commandName = "ListStackSetsCommand";
+ const handlerExecutionContext = {
+ logger,
+ clientName,
+ commandName,
+ inputFilterSensitiveLog: (_) => _,
+ outputFilterSensitiveLog: (_) => _,
+ [types_1.SMITHY_CONTEXT_KEY]: {
+ service: "CloudFormation",
+ operation: "ListStackSets",
+ },
+ };
+ const { requestHandler } = configuration;
+ return stack.resolve((request) => requestHandler.handle(request.request, options || {}), handlerExecutionContext);
+ }
+ serialize(input, context) {
+ return (0, Aws_query_1.se_ListStackSetsCommand)(input, context);
+ }
+ deserialize(output, context) {
+ return (0, Aws_query_1.de_ListStackSetsCommand)(output, context);
+ }
+}
+exports.ListStackSetsCommand = ListStackSetsCommand;
+
+
+/***/ }),
+
+/***/ 11276:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.ListStacksCommand = exports.$Command = void 0;
+const middleware_endpoint_1 = __nccwpck_require__(82918);
+const middleware_serde_1 = __nccwpck_require__(81238);
+const smithy_client_1 = __nccwpck_require__(63570);
+Object.defineProperty(exports, "$Command", ({ enumerable: true, get: function () { return smithy_client_1.Command; } }));
+const types_1 = __nccwpck_require__(55756);
+const Aws_query_1 = __nccwpck_require__(46110);
+class ListStacksCommand extends smithy_client_1.Command {
+ static getEndpointParameterInstructions() {
+ return {
+ UseFIPS: { type: "builtInParams", name: "useFipsEndpoint" },
+ Endpoint: { type: "builtInParams", name: "endpoint" },
+ Region: { type: "builtInParams", name: "region" },
+ UseDualStack: { type: "builtInParams", name: "useDualstackEndpoint" },
+ };
+ }
+ constructor(input) {
+ super();
+ this.input = input;
+ }
+ resolveMiddleware(clientStack, configuration, options) {
+ this.middlewareStack.use((0, middleware_serde_1.getSerdePlugin)(configuration, this.serialize, this.deserialize));
+ this.middlewareStack.use((0, middleware_endpoint_1.getEndpointPlugin)(configuration, ListStacksCommand.getEndpointParameterInstructions()));
+ const stack = clientStack.concat(this.middlewareStack);
+ const { logger } = configuration;
+ const clientName = "CloudFormationClient";
+ const commandName = "ListStacksCommand";
+ const handlerExecutionContext = {
+ logger,
+ clientName,
+ commandName,
+ inputFilterSensitiveLog: (_) => _,
+ outputFilterSensitiveLog: (_) => _,
+ [types_1.SMITHY_CONTEXT_KEY]: {
+ service: "CloudFormation",
+ operation: "ListStacks",
+ },
+ };
+ const { requestHandler } = configuration;
+ return stack.resolve((request) => requestHandler.handle(request.request, options || {}), handlerExecutionContext);
+ }
+ serialize(input, context) {
+ return (0, Aws_query_1.se_ListStacksCommand)(input, context);
+ }
+ deserialize(output, context) {
+ return (0, Aws_query_1.de_ListStacksCommand)(output, context);
+ }
+}
+exports.ListStacksCommand = ListStacksCommand;
+
+
+/***/ }),
+
+/***/ 53280:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.ListTypeRegistrationsCommand = exports.$Command = void 0;
+const middleware_endpoint_1 = __nccwpck_require__(82918);
+const middleware_serde_1 = __nccwpck_require__(81238);
+const smithy_client_1 = __nccwpck_require__(63570);
+Object.defineProperty(exports, "$Command", ({ enumerable: true, get: function () { return smithy_client_1.Command; } }));
+const types_1 = __nccwpck_require__(55756);
+const Aws_query_1 = __nccwpck_require__(46110);
+class ListTypeRegistrationsCommand extends smithy_client_1.Command {
+ static getEndpointParameterInstructions() {
+ return {
+ UseFIPS: { type: "builtInParams", name: "useFipsEndpoint" },
+ Endpoint: { type: "builtInParams", name: "endpoint" },
+ Region: { type: "builtInParams", name: "region" },
+ UseDualStack: { type: "builtInParams", name: "useDualstackEndpoint" },
+ };
+ }
+ constructor(input) {
+ super();
+ this.input = input;
+ }
+ resolveMiddleware(clientStack, configuration, options) {
+ this.middlewareStack.use((0, middleware_serde_1.getSerdePlugin)(configuration, this.serialize, this.deserialize));
+ this.middlewareStack.use((0, middleware_endpoint_1.getEndpointPlugin)(configuration, ListTypeRegistrationsCommand.getEndpointParameterInstructions()));
+ const stack = clientStack.concat(this.middlewareStack);
+ const { logger } = configuration;
+ const clientName = "CloudFormationClient";
+ const commandName = "ListTypeRegistrationsCommand";
+ const handlerExecutionContext = {
+ logger,
+ clientName,
+ commandName,
+ inputFilterSensitiveLog: (_) => _,
+ outputFilterSensitiveLog: (_) => _,
+ [types_1.SMITHY_CONTEXT_KEY]: {
+ service: "CloudFormation",
+ operation: "ListTypeRegistrations",
+ },
+ };
+ const { requestHandler } = configuration;
+ return stack.resolve((request) => requestHandler.handle(request.request, options || {}), handlerExecutionContext);
+ }
+ serialize(input, context) {
+ return (0, Aws_query_1.se_ListTypeRegistrationsCommand)(input, context);
+ }
+ deserialize(output, context) {
+ return (0, Aws_query_1.de_ListTypeRegistrationsCommand)(output, context);
+ }
+}
+exports.ListTypeRegistrationsCommand = ListTypeRegistrationsCommand;
+
+
+/***/ }),
+
+/***/ 31414:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.ListTypeVersionsCommand = exports.$Command = void 0;
+const middleware_endpoint_1 = __nccwpck_require__(82918);
+const middleware_serde_1 = __nccwpck_require__(81238);
+const smithy_client_1 = __nccwpck_require__(63570);
+Object.defineProperty(exports, "$Command", ({ enumerable: true, get: function () { return smithy_client_1.Command; } }));
+const types_1 = __nccwpck_require__(55756);
+const Aws_query_1 = __nccwpck_require__(46110);
+class ListTypeVersionsCommand extends smithy_client_1.Command {
+ static getEndpointParameterInstructions() {
+ return {
+ UseFIPS: { type: "builtInParams", name: "useFipsEndpoint" },
+ Endpoint: { type: "builtInParams", name: "endpoint" },
+ Region: { type: "builtInParams", name: "region" },
+ UseDualStack: { type: "builtInParams", name: "useDualstackEndpoint" },
+ };
+ }
+ constructor(input) {
+ super();
+ this.input = input;
+ }
+ resolveMiddleware(clientStack, configuration, options) {
+ this.middlewareStack.use((0, middleware_serde_1.getSerdePlugin)(configuration, this.serialize, this.deserialize));
+ this.middlewareStack.use((0, middleware_endpoint_1.getEndpointPlugin)(configuration, ListTypeVersionsCommand.getEndpointParameterInstructions()));
+ const stack = clientStack.concat(this.middlewareStack);
+ const { logger } = configuration;
+ const clientName = "CloudFormationClient";
+ const commandName = "ListTypeVersionsCommand";
+ const handlerExecutionContext = {
+ logger,
+ clientName,
+ commandName,
+ inputFilterSensitiveLog: (_) => _,
+ outputFilterSensitiveLog: (_) => _,
+ [types_1.SMITHY_CONTEXT_KEY]: {
+ service: "CloudFormation",
+ operation: "ListTypeVersions",
+ },
+ };
+ const { requestHandler } = configuration;
+ return stack.resolve((request) => requestHandler.handle(request.request, options || {}), handlerExecutionContext);
+ }
+ serialize(input, context) {
+ return (0, Aws_query_1.se_ListTypeVersionsCommand)(input, context);
+ }
+ deserialize(output, context) {
+ return (0, Aws_query_1.de_ListTypeVersionsCommand)(output, context);
+ }
+}
+exports.ListTypeVersionsCommand = ListTypeVersionsCommand;
+
+
+/***/ }),
+
+/***/ 53520:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.ListTypesCommand = exports.$Command = void 0;
+const middleware_endpoint_1 = __nccwpck_require__(82918);
+const middleware_serde_1 = __nccwpck_require__(81238);
+const smithy_client_1 = __nccwpck_require__(63570);
+Object.defineProperty(exports, "$Command", ({ enumerable: true, get: function () { return smithy_client_1.Command; } }));
+const types_1 = __nccwpck_require__(55756);
+const Aws_query_1 = __nccwpck_require__(46110);
+class ListTypesCommand extends smithy_client_1.Command {
+ static getEndpointParameterInstructions() {
+ return {
+ UseFIPS: { type: "builtInParams", name: "useFipsEndpoint" },
+ Endpoint: { type: "builtInParams", name: "endpoint" },
+ Region: { type: "builtInParams", name: "region" },
+ UseDualStack: { type: "builtInParams", name: "useDualstackEndpoint" },
+ };
+ }
+ constructor(input) {
+ super();
+ this.input = input;
+ }
+ resolveMiddleware(clientStack, configuration, options) {
+ this.middlewareStack.use((0, middleware_serde_1.getSerdePlugin)(configuration, this.serialize, this.deserialize));
+ this.middlewareStack.use((0, middleware_endpoint_1.getEndpointPlugin)(configuration, ListTypesCommand.getEndpointParameterInstructions()));
+ const stack = clientStack.concat(this.middlewareStack);
+ const { logger } = configuration;
+ const clientName = "CloudFormationClient";
+ const commandName = "ListTypesCommand";
+ const handlerExecutionContext = {
+ logger,
+ clientName,
+ commandName,
+ inputFilterSensitiveLog: (_) => _,
+ outputFilterSensitiveLog: (_) => _,
+ [types_1.SMITHY_CONTEXT_KEY]: {
+ service: "CloudFormation",
+ operation: "ListTypes",
+ },
+ };
+ const { requestHandler } = configuration;
+ return stack.resolve((request) => requestHandler.handle(request.request, options || {}), handlerExecutionContext);
+ }
+ serialize(input, context) {
+ return (0, Aws_query_1.se_ListTypesCommand)(input, context);
+ }
+ deserialize(output, context) {
+ return (0, Aws_query_1.de_ListTypesCommand)(output, context);
+ }
+}
+exports.ListTypesCommand = ListTypesCommand;
+
+
+/***/ }),
+
+/***/ 60606:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.PublishTypeCommand = exports.$Command = void 0;
+const middleware_endpoint_1 = __nccwpck_require__(82918);
+const middleware_serde_1 = __nccwpck_require__(81238);
+const smithy_client_1 = __nccwpck_require__(63570);
+Object.defineProperty(exports, "$Command", ({ enumerable: true, get: function () { return smithy_client_1.Command; } }));
+const types_1 = __nccwpck_require__(55756);
+const Aws_query_1 = __nccwpck_require__(46110);
+class PublishTypeCommand extends smithy_client_1.Command {
+ static getEndpointParameterInstructions() {
+ return {
+ UseFIPS: { type: "builtInParams", name: "useFipsEndpoint" },
+ Endpoint: { type: "builtInParams", name: "endpoint" },
+ Region: { type: "builtInParams", name: "region" },
+ UseDualStack: { type: "builtInParams", name: "useDualstackEndpoint" },
+ };
+ }
+ constructor(input) {
+ super();
+ this.input = input;
+ }
+ resolveMiddleware(clientStack, configuration, options) {
+ this.middlewareStack.use((0, middleware_serde_1.getSerdePlugin)(configuration, this.serialize, this.deserialize));
+ this.middlewareStack.use((0, middleware_endpoint_1.getEndpointPlugin)(configuration, PublishTypeCommand.getEndpointParameterInstructions()));
+ const stack = clientStack.concat(this.middlewareStack);
+ const { logger } = configuration;
+ const clientName = "CloudFormationClient";
+ const commandName = "PublishTypeCommand";
+ const handlerExecutionContext = {
+ logger,
+ clientName,
+ commandName,
+ inputFilterSensitiveLog: (_) => _,
+ outputFilterSensitiveLog: (_) => _,
+ [types_1.SMITHY_CONTEXT_KEY]: {
+ service: "CloudFormation",
+ operation: "PublishType",
+ },
+ };
+ const { requestHandler } = configuration;
+ return stack.resolve((request) => requestHandler.handle(request.request, options || {}), handlerExecutionContext);
+ }
+ serialize(input, context) {
+ return (0, Aws_query_1.se_PublishTypeCommand)(input, context);
+ }
+ deserialize(output, context) {
+ return (0, Aws_query_1.de_PublishTypeCommand)(output, context);
+ }
+}
+exports.PublishTypeCommand = PublishTypeCommand;
+
+
+/***/ }),
+
+/***/ 97403:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.RecordHandlerProgressCommand = exports.$Command = void 0;
+const middleware_endpoint_1 = __nccwpck_require__(82918);
+const middleware_serde_1 = __nccwpck_require__(81238);
+const smithy_client_1 = __nccwpck_require__(63570);
+Object.defineProperty(exports, "$Command", ({ enumerable: true, get: function () { return smithy_client_1.Command; } }));
+const types_1 = __nccwpck_require__(55756);
+const Aws_query_1 = __nccwpck_require__(46110);
+class RecordHandlerProgressCommand extends smithy_client_1.Command {
+ static getEndpointParameterInstructions() {
+ return {
+ UseFIPS: { type: "builtInParams", name: "useFipsEndpoint" },
+ Endpoint: { type: "builtInParams", name: "endpoint" },
+ Region: { type: "builtInParams", name: "region" },
+ UseDualStack: { type: "builtInParams", name: "useDualstackEndpoint" },
+ };
+ }
+ constructor(input) {
+ super();
+ this.input = input;
+ }
+ resolveMiddleware(clientStack, configuration, options) {
+ this.middlewareStack.use((0, middleware_serde_1.getSerdePlugin)(configuration, this.serialize, this.deserialize));
+ this.middlewareStack.use((0, middleware_endpoint_1.getEndpointPlugin)(configuration, RecordHandlerProgressCommand.getEndpointParameterInstructions()));
+ const stack = clientStack.concat(this.middlewareStack);
+ const { logger } = configuration;
+ const clientName = "CloudFormationClient";
+ const commandName = "RecordHandlerProgressCommand";
+ const handlerExecutionContext = {
+ logger,
+ clientName,
+ commandName,
+ inputFilterSensitiveLog: (_) => _,
+ outputFilterSensitiveLog: (_) => _,
+ [types_1.SMITHY_CONTEXT_KEY]: {
+ service: "CloudFormation",
+ operation: "RecordHandlerProgress",
+ },
+ };
+ const { requestHandler } = configuration;
+ return stack.resolve((request) => requestHandler.handle(request.request, options || {}), handlerExecutionContext);
+ }
+ serialize(input, context) {
+ return (0, Aws_query_1.se_RecordHandlerProgressCommand)(input, context);
+ }
+ deserialize(output, context) {
+ return (0, Aws_query_1.de_RecordHandlerProgressCommand)(output, context);
+ }
+}
+exports.RecordHandlerProgressCommand = RecordHandlerProgressCommand;
+
+
+/***/ }),
+
+/***/ 95254:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.RegisterPublisherCommand = exports.$Command = void 0;
+const middleware_endpoint_1 = __nccwpck_require__(82918);
+const middleware_serde_1 = __nccwpck_require__(81238);
+const smithy_client_1 = __nccwpck_require__(63570);
+Object.defineProperty(exports, "$Command", ({ enumerable: true, get: function () { return smithy_client_1.Command; } }));
+const types_1 = __nccwpck_require__(55756);
+const Aws_query_1 = __nccwpck_require__(46110);
+class RegisterPublisherCommand extends smithy_client_1.Command {
+ static getEndpointParameterInstructions() {
+ return {
+ UseFIPS: { type: "builtInParams", name: "useFipsEndpoint" },
+ Endpoint: { type: "builtInParams", name: "endpoint" },
+ Region: { type: "builtInParams", name: "region" },
+ UseDualStack: { type: "builtInParams", name: "useDualstackEndpoint" },
+ };
+ }
+ constructor(input) {
+ super();
+ this.input = input;
+ }
+ resolveMiddleware(clientStack, configuration, options) {
+ this.middlewareStack.use((0, middleware_serde_1.getSerdePlugin)(configuration, this.serialize, this.deserialize));
+ this.middlewareStack.use((0, middleware_endpoint_1.getEndpointPlugin)(configuration, RegisterPublisherCommand.getEndpointParameterInstructions()));
+ const stack = clientStack.concat(this.middlewareStack);
+ const { logger } = configuration;
+ const clientName = "CloudFormationClient";
+ const commandName = "RegisterPublisherCommand";
+ const handlerExecutionContext = {
+ logger,
+ clientName,
+ commandName,
+ inputFilterSensitiveLog: (_) => _,
+ outputFilterSensitiveLog: (_) => _,
+ [types_1.SMITHY_CONTEXT_KEY]: {
+ service: "CloudFormation",
+ operation: "RegisterPublisher",
+ },
+ };
+ const { requestHandler } = configuration;
+ return stack.resolve((request) => requestHandler.handle(request.request, options || {}), handlerExecutionContext);
+ }
+ serialize(input, context) {
+ return (0, Aws_query_1.se_RegisterPublisherCommand)(input, context);
+ }
+ deserialize(output, context) {
+ return (0, Aws_query_1.de_RegisterPublisherCommand)(output, context);
+ }
+}
+exports.RegisterPublisherCommand = RegisterPublisherCommand;
+
+
+/***/ }),
+
+/***/ 25988:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.RegisterTypeCommand = exports.$Command = void 0;
+const middleware_endpoint_1 = __nccwpck_require__(82918);
+const middleware_serde_1 = __nccwpck_require__(81238);
+const smithy_client_1 = __nccwpck_require__(63570);
+Object.defineProperty(exports, "$Command", ({ enumerable: true, get: function () { return smithy_client_1.Command; } }));
+const types_1 = __nccwpck_require__(55756);
+const Aws_query_1 = __nccwpck_require__(46110);
+class RegisterTypeCommand extends smithy_client_1.Command {
+ static getEndpointParameterInstructions() {
+ return {
+ UseFIPS: { type: "builtInParams", name: "useFipsEndpoint" },
+ Endpoint: { type: "builtInParams", name: "endpoint" },
+ Region: { type: "builtInParams", name: "region" },
+ UseDualStack: { type: "builtInParams", name: "useDualstackEndpoint" },
+ };
+ }
+ constructor(input) {
+ super();
+ this.input = input;
+ }
+ resolveMiddleware(clientStack, configuration, options) {
+ this.middlewareStack.use((0, middleware_serde_1.getSerdePlugin)(configuration, this.serialize, this.deserialize));
+ this.middlewareStack.use((0, middleware_endpoint_1.getEndpointPlugin)(configuration, RegisterTypeCommand.getEndpointParameterInstructions()));
+ const stack = clientStack.concat(this.middlewareStack);
+ const { logger } = configuration;
+ const clientName = "CloudFormationClient";
+ const commandName = "RegisterTypeCommand";
+ const handlerExecutionContext = {
+ logger,
+ clientName,
+ commandName,
+ inputFilterSensitiveLog: (_) => _,
+ outputFilterSensitiveLog: (_) => _,
+ [types_1.SMITHY_CONTEXT_KEY]: {
+ service: "CloudFormation",
+ operation: "RegisterType",
+ },
+ };
+ const { requestHandler } = configuration;
+ return stack.resolve((request) => requestHandler.handle(request.request, options || {}), handlerExecutionContext);
+ }
+ serialize(input, context) {
+ return (0, Aws_query_1.se_RegisterTypeCommand)(input, context);
+ }
+ deserialize(output, context) {
+ return (0, Aws_query_1.de_RegisterTypeCommand)(output, context);
+ }
+}
+exports.RegisterTypeCommand = RegisterTypeCommand;
+
+
+/***/ }),
+
+/***/ 55529:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.RollbackStackCommand = exports.$Command = void 0;
+const middleware_endpoint_1 = __nccwpck_require__(82918);
+const middleware_serde_1 = __nccwpck_require__(81238);
+const smithy_client_1 = __nccwpck_require__(63570);
+Object.defineProperty(exports, "$Command", ({ enumerable: true, get: function () { return smithy_client_1.Command; } }));
+const types_1 = __nccwpck_require__(55756);
+const Aws_query_1 = __nccwpck_require__(46110);
+class RollbackStackCommand extends smithy_client_1.Command {
+ static getEndpointParameterInstructions() {
+ return {
+ UseFIPS: { type: "builtInParams", name: "useFipsEndpoint" },
+ Endpoint: { type: "builtInParams", name: "endpoint" },
+ Region: { type: "builtInParams", name: "region" },
+ UseDualStack: { type: "builtInParams", name: "useDualstackEndpoint" },
+ };
+ }
+ constructor(input) {
+ super();
+ this.input = input;
+ }
+ resolveMiddleware(clientStack, configuration, options) {
+ this.middlewareStack.use((0, middleware_serde_1.getSerdePlugin)(configuration, this.serialize, this.deserialize));
+ this.middlewareStack.use((0, middleware_endpoint_1.getEndpointPlugin)(configuration, RollbackStackCommand.getEndpointParameterInstructions()));
+ const stack = clientStack.concat(this.middlewareStack);
+ const { logger } = configuration;
+ const clientName = "CloudFormationClient";
+ const commandName = "RollbackStackCommand";
+ const handlerExecutionContext = {
+ logger,
+ clientName,
+ commandName,
+ inputFilterSensitiveLog: (_) => _,
+ outputFilterSensitiveLog: (_) => _,
+ [types_1.SMITHY_CONTEXT_KEY]: {
+ service: "CloudFormation",
+ operation: "RollbackStack",
+ },
+ };
+ const { requestHandler } = configuration;
+ return stack.resolve((request) => requestHandler.handle(request.request, options || {}), handlerExecutionContext);
+ }
+ serialize(input, context) {
+ return (0, Aws_query_1.se_RollbackStackCommand)(input, context);
+ }
+ deserialize(output, context) {
+ return (0, Aws_query_1.de_RollbackStackCommand)(output, context);
+ }
+}
+exports.RollbackStackCommand = RollbackStackCommand;
+
+
+/***/ }),
+
+/***/ 66908:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.SetStackPolicyCommand = exports.$Command = void 0;
+const middleware_endpoint_1 = __nccwpck_require__(82918);
+const middleware_serde_1 = __nccwpck_require__(81238);
+const smithy_client_1 = __nccwpck_require__(63570);
+Object.defineProperty(exports, "$Command", ({ enumerable: true, get: function () { return smithy_client_1.Command; } }));
+const types_1 = __nccwpck_require__(55756);
+const Aws_query_1 = __nccwpck_require__(46110);
+class SetStackPolicyCommand extends smithy_client_1.Command {
+ static getEndpointParameterInstructions() {
+ return {
+ UseFIPS: { type: "builtInParams", name: "useFipsEndpoint" },
+ Endpoint: { type: "builtInParams", name: "endpoint" },
+ Region: { type: "builtInParams", name: "region" },
+ UseDualStack: { type: "builtInParams", name: "useDualstackEndpoint" },
+ };
+ }
+ constructor(input) {
+ super();
+ this.input = input;
+ }
+ resolveMiddleware(clientStack, configuration, options) {
+ this.middlewareStack.use((0, middleware_serde_1.getSerdePlugin)(configuration, this.serialize, this.deserialize));
+ this.middlewareStack.use((0, middleware_endpoint_1.getEndpointPlugin)(configuration, SetStackPolicyCommand.getEndpointParameterInstructions()));
+ const stack = clientStack.concat(this.middlewareStack);
+ const { logger } = configuration;
+ const clientName = "CloudFormationClient";
+ const commandName = "SetStackPolicyCommand";
+ const handlerExecutionContext = {
+ logger,
+ clientName,
+ commandName,
+ inputFilterSensitiveLog: (_) => _,
+ outputFilterSensitiveLog: (_) => _,
+ [types_1.SMITHY_CONTEXT_KEY]: {
+ service: "CloudFormation",
+ operation: "SetStackPolicy",
+ },
+ };
+ const { requestHandler } = configuration;
+ return stack.resolve((request) => requestHandler.handle(request.request, options || {}), handlerExecutionContext);
+ }
+ serialize(input, context) {
+ return (0, Aws_query_1.se_SetStackPolicyCommand)(input, context);
+ }
+ deserialize(output, context) {
+ return (0, Aws_query_1.de_SetStackPolicyCommand)(output, context);
+ }
+}
+exports.SetStackPolicyCommand = SetStackPolicyCommand;
+
+
+/***/ }),
+
+/***/ 83725:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.SetTypeConfigurationCommand = exports.$Command = void 0;
+const middleware_endpoint_1 = __nccwpck_require__(82918);
+const middleware_serde_1 = __nccwpck_require__(81238);
+const smithy_client_1 = __nccwpck_require__(63570);
+Object.defineProperty(exports, "$Command", ({ enumerable: true, get: function () { return smithy_client_1.Command; } }));
+const types_1 = __nccwpck_require__(55756);
+const Aws_query_1 = __nccwpck_require__(46110);
+class SetTypeConfigurationCommand extends smithy_client_1.Command {
+ static getEndpointParameterInstructions() {
+ return {
+ UseFIPS: { type: "builtInParams", name: "useFipsEndpoint" },
+ Endpoint: { type: "builtInParams", name: "endpoint" },
+ Region: { type: "builtInParams", name: "region" },
+ UseDualStack: { type: "builtInParams", name: "useDualstackEndpoint" },
+ };
+ }
+ constructor(input) {
+ super();
+ this.input = input;
+ }
+ resolveMiddleware(clientStack, configuration, options) {
+ this.middlewareStack.use((0, middleware_serde_1.getSerdePlugin)(configuration, this.serialize, this.deserialize));
+ this.middlewareStack.use((0, middleware_endpoint_1.getEndpointPlugin)(configuration, SetTypeConfigurationCommand.getEndpointParameterInstructions()));
+ const stack = clientStack.concat(this.middlewareStack);
+ const { logger } = configuration;
+ const clientName = "CloudFormationClient";
+ const commandName = "SetTypeConfigurationCommand";
+ const handlerExecutionContext = {
+ logger,
+ clientName,
+ commandName,
+ inputFilterSensitiveLog: (_) => _,
+ outputFilterSensitiveLog: (_) => _,
+ [types_1.SMITHY_CONTEXT_KEY]: {
+ service: "CloudFormation",
+ operation: "SetTypeConfiguration",
+ },
+ };
+ const { requestHandler } = configuration;
+ return stack.resolve((request) => requestHandler.handle(request.request, options || {}), handlerExecutionContext);
+ }
+ serialize(input, context) {
+ return (0, Aws_query_1.se_SetTypeConfigurationCommand)(input, context);
+ }
+ deserialize(output, context) {
+ return (0, Aws_query_1.de_SetTypeConfigurationCommand)(output, context);
+ }
+}
+exports.SetTypeConfigurationCommand = SetTypeConfigurationCommand;
+
+
+/***/ }),
+
+/***/ 60258:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.SetTypeDefaultVersionCommand = exports.$Command = void 0;
+const middleware_endpoint_1 = __nccwpck_require__(82918);
+const middleware_serde_1 = __nccwpck_require__(81238);
+const smithy_client_1 = __nccwpck_require__(63570);
+Object.defineProperty(exports, "$Command", ({ enumerable: true, get: function () { return smithy_client_1.Command; } }));
+const types_1 = __nccwpck_require__(55756);
+const Aws_query_1 = __nccwpck_require__(46110);
+class SetTypeDefaultVersionCommand extends smithy_client_1.Command {
+ static getEndpointParameterInstructions() {
+ return {
+ UseFIPS: { type: "builtInParams", name: "useFipsEndpoint" },
+ Endpoint: { type: "builtInParams", name: "endpoint" },
+ Region: { type: "builtInParams", name: "region" },
+ UseDualStack: { type: "builtInParams", name: "useDualstackEndpoint" },
+ };
+ }
+ constructor(input) {
+ super();
+ this.input = input;
+ }
+ resolveMiddleware(clientStack, configuration, options) {
+ this.middlewareStack.use((0, middleware_serde_1.getSerdePlugin)(configuration, this.serialize, this.deserialize));
+ this.middlewareStack.use((0, middleware_endpoint_1.getEndpointPlugin)(configuration, SetTypeDefaultVersionCommand.getEndpointParameterInstructions()));
+ const stack = clientStack.concat(this.middlewareStack);
+ const { logger } = configuration;
+ const clientName = "CloudFormationClient";
+ const commandName = "SetTypeDefaultVersionCommand";
+ const handlerExecutionContext = {
+ logger,
+ clientName,
+ commandName,
+ inputFilterSensitiveLog: (_) => _,
+ outputFilterSensitiveLog: (_) => _,
+ [types_1.SMITHY_CONTEXT_KEY]: {
+ service: "CloudFormation",
+ operation: "SetTypeDefaultVersion",
+ },
+ };
+ const { requestHandler } = configuration;
+ return stack.resolve((request) => requestHandler.handle(request.request, options || {}), handlerExecutionContext);
+ }
+ serialize(input, context) {
+ return (0, Aws_query_1.se_SetTypeDefaultVersionCommand)(input, context);
+ }
+ deserialize(output, context) {
+ return (0, Aws_query_1.de_SetTypeDefaultVersionCommand)(output, context);
+ }
+}
+exports.SetTypeDefaultVersionCommand = SetTypeDefaultVersionCommand;
+
+
+/***/ }),
+
+/***/ 58003:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.SignalResourceCommand = exports.$Command = void 0;
+const middleware_endpoint_1 = __nccwpck_require__(82918);
+const middleware_serde_1 = __nccwpck_require__(81238);
+const smithy_client_1 = __nccwpck_require__(63570);
+Object.defineProperty(exports, "$Command", ({ enumerable: true, get: function () { return smithy_client_1.Command; } }));
+const types_1 = __nccwpck_require__(55756);
+const Aws_query_1 = __nccwpck_require__(46110);
+class SignalResourceCommand extends smithy_client_1.Command {
+ static getEndpointParameterInstructions() {
+ return {
+ UseFIPS: { type: "builtInParams", name: "useFipsEndpoint" },
+ Endpoint: { type: "builtInParams", name: "endpoint" },
+ Region: { type: "builtInParams", name: "region" },
+ UseDualStack: { type: "builtInParams", name: "useDualstackEndpoint" },
+ };
+ }
+ constructor(input) {
+ super();
+ this.input = input;
+ }
+ resolveMiddleware(clientStack, configuration, options) {
+ this.middlewareStack.use((0, middleware_serde_1.getSerdePlugin)(configuration, this.serialize, this.deserialize));
+ this.middlewareStack.use((0, middleware_endpoint_1.getEndpointPlugin)(configuration, SignalResourceCommand.getEndpointParameterInstructions()));
+ const stack = clientStack.concat(this.middlewareStack);
+ const { logger } = configuration;
+ const clientName = "CloudFormationClient";
+ const commandName = "SignalResourceCommand";
+ const handlerExecutionContext = {
+ logger,
+ clientName,
+ commandName,
+ inputFilterSensitiveLog: (_) => _,
+ outputFilterSensitiveLog: (_) => _,
+ [types_1.SMITHY_CONTEXT_KEY]: {
+ service: "CloudFormation",
+ operation: "SignalResource",
+ },
+ };
+ const { requestHandler } = configuration;
+ return stack.resolve((request) => requestHandler.handle(request.request, options || {}), handlerExecutionContext);
+ }
+ serialize(input, context) {
+ return (0, Aws_query_1.se_SignalResourceCommand)(input, context);
+ }
+ deserialize(output, context) {
+ return (0, Aws_query_1.de_SignalResourceCommand)(output, context);
+ }
+}
+exports.SignalResourceCommand = SignalResourceCommand;
+
+
+/***/ }),
+
+/***/ 26499:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.StopStackSetOperationCommand = exports.$Command = void 0;
+const middleware_endpoint_1 = __nccwpck_require__(82918);
+const middleware_serde_1 = __nccwpck_require__(81238);
+const smithy_client_1 = __nccwpck_require__(63570);
+Object.defineProperty(exports, "$Command", ({ enumerable: true, get: function () { return smithy_client_1.Command; } }));
+const types_1 = __nccwpck_require__(55756);
+const Aws_query_1 = __nccwpck_require__(46110);
+class StopStackSetOperationCommand extends smithy_client_1.Command {
+ static getEndpointParameterInstructions() {
+ return {
+ UseFIPS: { type: "builtInParams", name: "useFipsEndpoint" },
+ Endpoint: { type: "builtInParams", name: "endpoint" },
+ Region: { type: "builtInParams", name: "region" },
+ UseDualStack: { type: "builtInParams", name: "useDualstackEndpoint" },
+ };
+ }
+ constructor(input) {
+ super();
+ this.input = input;
+ }
+ resolveMiddleware(clientStack, configuration, options) {
+ this.middlewareStack.use((0, middleware_serde_1.getSerdePlugin)(configuration, this.serialize, this.deserialize));
+ this.middlewareStack.use((0, middleware_endpoint_1.getEndpointPlugin)(configuration, StopStackSetOperationCommand.getEndpointParameterInstructions()));
+ const stack = clientStack.concat(this.middlewareStack);
+ const { logger } = configuration;
+ const clientName = "CloudFormationClient";
+ const commandName = "StopStackSetOperationCommand";
+ const handlerExecutionContext = {
+ logger,
+ clientName,
+ commandName,
+ inputFilterSensitiveLog: (_) => _,
+ outputFilterSensitiveLog: (_) => _,
+ [types_1.SMITHY_CONTEXT_KEY]: {
+ service: "CloudFormation",
+ operation: "StopStackSetOperation",
+ },
+ };
+ const { requestHandler } = configuration;
+ return stack.resolve((request) => requestHandler.handle(request.request, options || {}), handlerExecutionContext);
+ }
+ serialize(input, context) {
+ return (0, Aws_query_1.se_StopStackSetOperationCommand)(input, context);
+ }
+ deserialize(output, context) {
+ return (0, Aws_query_1.de_StopStackSetOperationCommand)(output, context);
+ }
+}
+exports.StopStackSetOperationCommand = StopStackSetOperationCommand;
+
+
+/***/ }),
+
+/***/ 94162:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.TestTypeCommand = exports.$Command = void 0;
+const middleware_endpoint_1 = __nccwpck_require__(82918);
+const middleware_serde_1 = __nccwpck_require__(81238);
+const smithy_client_1 = __nccwpck_require__(63570);
+Object.defineProperty(exports, "$Command", ({ enumerable: true, get: function () { return smithy_client_1.Command; } }));
+const types_1 = __nccwpck_require__(55756);
+const Aws_query_1 = __nccwpck_require__(46110);
+class TestTypeCommand extends smithy_client_1.Command {
+ static getEndpointParameterInstructions() {
+ return {
+ UseFIPS: { type: "builtInParams", name: "useFipsEndpoint" },
+ Endpoint: { type: "builtInParams", name: "endpoint" },
+ Region: { type: "builtInParams", name: "region" },
+ UseDualStack: { type: "builtInParams", name: "useDualstackEndpoint" },
+ };
+ }
+ constructor(input) {
+ super();
+ this.input = input;
+ }
+ resolveMiddleware(clientStack, configuration, options) {
+ this.middlewareStack.use((0, middleware_serde_1.getSerdePlugin)(configuration, this.serialize, this.deserialize));
+ this.middlewareStack.use((0, middleware_endpoint_1.getEndpointPlugin)(configuration, TestTypeCommand.getEndpointParameterInstructions()));
+ const stack = clientStack.concat(this.middlewareStack);
+ const { logger } = configuration;
+ const clientName = "CloudFormationClient";
+ const commandName = "TestTypeCommand";
+ const handlerExecutionContext = {
+ logger,
+ clientName,
+ commandName,
+ inputFilterSensitiveLog: (_) => _,
+ outputFilterSensitiveLog: (_) => _,
+ [types_1.SMITHY_CONTEXT_KEY]: {
+ service: "CloudFormation",
+ operation: "TestType",
+ },
+ };
+ const { requestHandler } = configuration;
+ return stack.resolve((request) => requestHandler.handle(request.request, options || {}), handlerExecutionContext);
+ }
+ serialize(input, context) {
+ return (0, Aws_query_1.se_TestTypeCommand)(input, context);
+ }
+ deserialize(output, context) {
+ return (0, Aws_query_1.de_TestTypeCommand)(output, context);
+ }
+}
+exports.TestTypeCommand = TestTypeCommand;
+
+
+/***/ }),
+
+/***/ 14210:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.UpdateStackCommand = exports.$Command = void 0;
+const middleware_endpoint_1 = __nccwpck_require__(82918);
+const middleware_serde_1 = __nccwpck_require__(81238);
+const smithy_client_1 = __nccwpck_require__(63570);
+Object.defineProperty(exports, "$Command", ({ enumerable: true, get: function () { return smithy_client_1.Command; } }));
+const types_1 = __nccwpck_require__(55756);
+const Aws_query_1 = __nccwpck_require__(46110);
+class UpdateStackCommand extends smithy_client_1.Command {
+ static getEndpointParameterInstructions() {
+ return {
+ UseFIPS: { type: "builtInParams", name: "useFipsEndpoint" },
+ Endpoint: { type: "builtInParams", name: "endpoint" },
+ Region: { type: "builtInParams", name: "region" },
+ UseDualStack: { type: "builtInParams", name: "useDualstackEndpoint" },
+ };
+ }
+ constructor(input) {
+ super();
+ this.input = input;
+ }
+ resolveMiddleware(clientStack, configuration, options) {
+ this.middlewareStack.use((0, middleware_serde_1.getSerdePlugin)(configuration, this.serialize, this.deserialize));
+ this.middlewareStack.use((0, middleware_endpoint_1.getEndpointPlugin)(configuration, UpdateStackCommand.getEndpointParameterInstructions()));
+ const stack = clientStack.concat(this.middlewareStack);
+ const { logger } = configuration;
+ const clientName = "CloudFormationClient";
+ const commandName = "UpdateStackCommand";
+ const handlerExecutionContext = {
+ logger,
+ clientName,
+ commandName,
+ inputFilterSensitiveLog: (_) => _,
+ outputFilterSensitiveLog: (_) => _,
+ [types_1.SMITHY_CONTEXT_KEY]: {
+ service: "CloudFormation",
+ operation: "UpdateStack",
+ },
+ };
+ const { requestHandler } = configuration;
+ return stack.resolve((request) => requestHandler.handle(request.request, options || {}), handlerExecutionContext);
+ }
+ serialize(input, context) {
+ return (0, Aws_query_1.se_UpdateStackCommand)(input, context);
+ }
+ deserialize(output, context) {
+ return (0, Aws_query_1.de_UpdateStackCommand)(output, context);
+ }
+}
+exports.UpdateStackCommand = UpdateStackCommand;
+
+
+/***/ }),
+
+/***/ 25455:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.UpdateStackInstancesCommand = exports.$Command = void 0;
+const middleware_endpoint_1 = __nccwpck_require__(82918);
+const middleware_serde_1 = __nccwpck_require__(81238);
+const smithy_client_1 = __nccwpck_require__(63570);
+Object.defineProperty(exports, "$Command", ({ enumerable: true, get: function () { return smithy_client_1.Command; } }));
+const types_1 = __nccwpck_require__(55756);
+const Aws_query_1 = __nccwpck_require__(46110);
+class UpdateStackInstancesCommand extends smithy_client_1.Command {
+ static getEndpointParameterInstructions() {
+ return {
+ UseFIPS: { type: "builtInParams", name: "useFipsEndpoint" },
+ Endpoint: { type: "builtInParams", name: "endpoint" },
+ Region: { type: "builtInParams", name: "region" },
+ UseDualStack: { type: "builtInParams", name: "useDualstackEndpoint" },
+ };
+ }
+ constructor(input) {
+ super();
+ this.input = input;
+ }
+ resolveMiddleware(clientStack, configuration, options) {
+ this.middlewareStack.use((0, middleware_serde_1.getSerdePlugin)(configuration, this.serialize, this.deserialize));
+ this.middlewareStack.use((0, middleware_endpoint_1.getEndpointPlugin)(configuration, UpdateStackInstancesCommand.getEndpointParameterInstructions()));
+ const stack = clientStack.concat(this.middlewareStack);
+ const { logger } = configuration;
+ const clientName = "CloudFormationClient";
+ const commandName = "UpdateStackInstancesCommand";
+ const handlerExecutionContext = {
+ logger,
+ clientName,
+ commandName,
+ inputFilterSensitiveLog: (_) => _,
+ outputFilterSensitiveLog: (_) => _,
+ [types_1.SMITHY_CONTEXT_KEY]: {
+ service: "CloudFormation",
+ operation: "UpdateStackInstances",
+ },
+ };
+ const { requestHandler } = configuration;
+ return stack.resolve((request) => requestHandler.handle(request.request, options || {}), handlerExecutionContext);
+ }
+ serialize(input, context) {
+ return (0, Aws_query_1.se_UpdateStackInstancesCommand)(input, context);
+ }
+ deserialize(output, context) {
+ return (0, Aws_query_1.de_UpdateStackInstancesCommand)(output, context);
+ }
+}
+exports.UpdateStackInstancesCommand = UpdateStackInstancesCommand;
+
+
+/***/ }),
+
+/***/ 70556:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.UpdateStackSetCommand = exports.$Command = void 0;
+const middleware_endpoint_1 = __nccwpck_require__(82918);
+const middleware_serde_1 = __nccwpck_require__(81238);
+const smithy_client_1 = __nccwpck_require__(63570);
+Object.defineProperty(exports, "$Command", ({ enumerable: true, get: function () { return smithy_client_1.Command; } }));
+const types_1 = __nccwpck_require__(55756);
+const Aws_query_1 = __nccwpck_require__(46110);
+class UpdateStackSetCommand extends smithy_client_1.Command {
+ static getEndpointParameterInstructions() {
+ return {
+ UseFIPS: { type: "builtInParams", name: "useFipsEndpoint" },
+ Endpoint: { type: "builtInParams", name: "endpoint" },
+ Region: { type: "builtInParams", name: "region" },
+ UseDualStack: { type: "builtInParams", name: "useDualstackEndpoint" },
+ };
+ }
+ constructor(input) {
+ super();
+ this.input = input;
+ }
+ resolveMiddleware(clientStack, configuration, options) {
+ this.middlewareStack.use((0, middleware_serde_1.getSerdePlugin)(configuration, this.serialize, this.deserialize));
+ this.middlewareStack.use((0, middleware_endpoint_1.getEndpointPlugin)(configuration, UpdateStackSetCommand.getEndpointParameterInstructions()));
+ const stack = clientStack.concat(this.middlewareStack);
+ const { logger } = configuration;
+ const clientName = "CloudFormationClient";
+ const commandName = "UpdateStackSetCommand";
+ const handlerExecutionContext = {
+ logger,
+ clientName,
+ commandName,
+ inputFilterSensitiveLog: (_) => _,
+ outputFilterSensitiveLog: (_) => _,
+ [types_1.SMITHY_CONTEXT_KEY]: {
+ service: "CloudFormation",
+ operation: "UpdateStackSet",
+ },
+ };
+ const { requestHandler } = configuration;
+ return stack.resolve((request) => requestHandler.handle(request.request, options || {}), handlerExecutionContext);
+ }
+ serialize(input, context) {
+ return (0, Aws_query_1.se_UpdateStackSetCommand)(input, context);
+ }
+ deserialize(output, context) {
+ return (0, Aws_query_1.de_UpdateStackSetCommand)(output, context);
+ }
+}
+exports.UpdateStackSetCommand = UpdateStackSetCommand;
+
+
+/***/ }),
+
+/***/ 50917:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.UpdateTerminationProtectionCommand = exports.$Command = void 0;
+const middleware_endpoint_1 = __nccwpck_require__(82918);
+const middleware_serde_1 = __nccwpck_require__(81238);
+const smithy_client_1 = __nccwpck_require__(63570);
+Object.defineProperty(exports, "$Command", ({ enumerable: true, get: function () { return smithy_client_1.Command; } }));
+const types_1 = __nccwpck_require__(55756);
+const Aws_query_1 = __nccwpck_require__(46110);
+class UpdateTerminationProtectionCommand extends smithy_client_1.Command {
+ static getEndpointParameterInstructions() {
+ return {
+ UseFIPS: { type: "builtInParams", name: "useFipsEndpoint" },
+ Endpoint: { type: "builtInParams", name: "endpoint" },
+ Region: { type: "builtInParams", name: "region" },
+ UseDualStack: { type: "builtInParams", name: "useDualstackEndpoint" },
+ };
+ }
+ constructor(input) {
+ super();
+ this.input = input;
+ }
+ resolveMiddleware(clientStack, configuration, options) {
+ this.middlewareStack.use((0, middleware_serde_1.getSerdePlugin)(configuration, this.serialize, this.deserialize));
+ this.middlewareStack.use((0, middleware_endpoint_1.getEndpointPlugin)(configuration, UpdateTerminationProtectionCommand.getEndpointParameterInstructions()));
+ const stack = clientStack.concat(this.middlewareStack);
+ const { logger } = configuration;
+ const clientName = "CloudFormationClient";
+ const commandName = "UpdateTerminationProtectionCommand";
+ const handlerExecutionContext = {
+ logger,
+ clientName,
+ commandName,
+ inputFilterSensitiveLog: (_) => _,
+ outputFilterSensitiveLog: (_) => _,
+ [types_1.SMITHY_CONTEXT_KEY]: {
+ service: "CloudFormation",
+ operation: "UpdateTerminationProtection",
+ },
+ };
+ const { requestHandler } = configuration;
+ return stack.resolve((request) => requestHandler.handle(request.request, options || {}), handlerExecutionContext);
+ }
+ serialize(input, context) {
+ return (0, Aws_query_1.se_UpdateTerminationProtectionCommand)(input, context);
+ }
+ deserialize(output, context) {
+ return (0, Aws_query_1.de_UpdateTerminationProtectionCommand)(output, context);
+ }
+}
+exports.UpdateTerminationProtectionCommand = UpdateTerminationProtectionCommand;
+
+
+/***/ }),
+
+/***/ 11609:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.ValidateTemplateCommand = exports.$Command = void 0;
+const middleware_endpoint_1 = __nccwpck_require__(82918);
+const middleware_serde_1 = __nccwpck_require__(81238);
+const smithy_client_1 = __nccwpck_require__(63570);
+Object.defineProperty(exports, "$Command", ({ enumerable: true, get: function () { return smithy_client_1.Command; } }));
+const types_1 = __nccwpck_require__(55756);
+const Aws_query_1 = __nccwpck_require__(46110);
+class ValidateTemplateCommand extends smithy_client_1.Command {
+ static getEndpointParameterInstructions() {
+ return {
+ UseFIPS: { type: "builtInParams", name: "useFipsEndpoint" },
+ Endpoint: { type: "builtInParams", name: "endpoint" },
+ Region: { type: "builtInParams", name: "region" },
+ UseDualStack: { type: "builtInParams", name: "useDualstackEndpoint" },
+ };
+ }
+ constructor(input) {
+ super();
+ this.input = input;
+ }
+ resolveMiddleware(clientStack, configuration, options) {
+ this.middlewareStack.use((0, middleware_serde_1.getSerdePlugin)(configuration, this.serialize, this.deserialize));
+ this.middlewareStack.use((0, middleware_endpoint_1.getEndpointPlugin)(configuration, ValidateTemplateCommand.getEndpointParameterInstructions()));
+ const stack = clientStack.concat(this.middlewareStack);
+ const { logger } = configuration;
+ const clientName = "CloudFormationClient";
+ const commandName = "ValidateTemplateCommand";
+ const handlerExecutionContext = {
+ logger,
+ clientName,
+ commandName,
+ inputFilterSensitiveLog: (_) => _,
+ outputFilterSensitiveLog: (_) => _,
+ [types_1.SMITHY_CONTEXT_KEY]: {
+ service: "CloudFormation",
+ operation: "ValidateTemplate",
+ },
+ };
+ const { requestHandler } = configuration;
+ return stack.resolve((request) => requestHandler.handle(request.request, options || {}), handlerExecutionContext);
+ }
+ serialize(input, context) {
+ return (0, Aws_query_1.se_ValidateTemplateCommand)(input, context);
+ }
+ deserialize(output, context) {
+ return (0, Aws_query_1.de_ValidateTemplateCommand)(output, context);
+ }
+}
+exports.ValidateTemplateCommand = ValidateTemplateCommand;
+
+
+/***/ }),
+
+/***/ 50564:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+const tslib_1 = __nccwpck_require__(4351);
+tslib_1.__exportStar(__nccwpck_require__(15634), exports);
+tslib_1.__exportStar(__nccwpck_require__(48434), exports);
+tslib_1.__exportStar(__nccwpck_require__(77385), exports);
+tslib_1.__exportStar(__nccwpck_require__(88544), exports);
+tslib_1.__exportStar(__nccwpck_require__(96302), exports);
+tslib_1.__exportStar(__nccwpck_require__(27066), exports);
+tslib_1.__exportStar(__nccwpck_require__(94382), exports);
+tslib_1.__exportStar(__nccwpck_require__(79648), exports);
+tslib_1.__exportStar(__nccwpck_require__(59691), exports);
+tslib_1.__exportStar(__nccwpck_require__(24623), exports);
+tslib_1.__exportStar(__nccwpck_require__(57493), exports);
+tslib_1.__exportStar(__nccwpck_require__(51096), exports);
+tslib_1.__exportStar(__nccwpck_require__(38501), exports);
+tslib_1.__exportStar(__nccwpck_require__(37302), exports);
+tslib_1.__exportStar(__nccwpck_require__(80589), exports);
+tslib_1.__exportStar(__nccwpck_require__(15931), exports);
+tslib_1.__exportStar(__nccwpck_require__(90664), exports);
+tslib_1.__exportStar(__nccwpck_require__(94895), exports);
+tslib_1.__exportStar(__nccwpck_require__(76824), exports);
+tslib_1.__exportStar(__nccwpck_require__(54280), exports);
+tslib_1.__exportStar(__nccwpck_require__(27761), exports);
+tslib_1.__exportStar(__nccwpck_require__(13680), exports);
+tslib_1.__exportStar(__nccwpck_require__(87929), exports);
+tslib_1.__exportStar(__nccwpck_require__(3420), exports);
+tslib_1.__exportStar(__nccwpck_require__(20719), exports);
+tslib_1.__exportStar(__nccwpck_require__(22837), exports);
+tslib_1.__exportStar(__nccwpck_require__(40897), exports);
+tslib_1.__exportStar(__nccwpck_require__(64638), exports);
+tslib_1.__exportStar(__nccwpck_require__(50347), exports);
+tslib_1.__exportStar(__nccwpck_require__(79769), exports);
+tslib_1.__exportStar(__nccwpck_require__(78756), exports);
+tslib_1.__exportStar(__nccwpck_require__(80130), exports);
+tslib_1.__exportStar(__nccwpck_require__(67753), exports);
+tslib_1.__exportStar(__nccwpck_require__(75956), exports);
+tslib_1.__exportStar(__nccwpck_require__(83591), exports);
+tslib_1.__exportStar(__nccwpck_require__(71636), exports);
+tslib_1.__exportStar(__nccwpck_require__(57399), exports);
+tslib_1.__exportStar(__nccwpck_require__(9450), exports);
+tslib_1.__exportStar(__nccwpck_require__(93644), exports);
+tslib_1.__exportStar(__nccwpck_require__(97513), exports);
+tslib_1.__exportStar(__nccwpck_require__(92148), exports);
+tslib_1.__exportStar(__nccwpck_require__(87882), exports);
+tslib_1.__exportStar(__nccwpck_require__(81426), exports);
+tslib_1.__exportStar(__nccwpck_require__(21574), exports);
+tslib_1.__exportStar(__nccwpck_require__(66194), exports);
+tslib_1.__exportStar(__nccwpck_require__(70488), exports);
+tslib_1.__exportStar(__nccwpck_require__(12602), exports);
+tslib_1.__exportStar(__nccwpck_require__(12200), exports);
+tslib_1.__exportStar(__nccwpck_require__(65603), exports);
+tslib_1.__exportStar(__nccwpck_require__(25005), exports);
+tslib_1.__exportStar(__nccwpck_require__(11276), exports);
+tslib_1.__exportStar(__nccwpck_require__(53280), exports);
+tslib_1.__exportStar(__nccwpck_require__(31414), exports);
+tslib_1.__exportStar(__nccwpck_require__(53520), exports);
+tslib_1.__exportStar(__nccwpck_require__(60606), exports);
+tslib_1.__exportStar(__nccwpck_require__(97403), exports);
+tslib_1.__exportStar(__nccwpck_require__(95254), exports);
+tslib_1.__exportStar(__nccwpck_require__(25988), exports);
+tslib_1.__exportStar(__nccwpck_require__(55529), exports);
+tslib_1.__exportStar(__nccwpck_require__(66908), exports);
+tslib_1.__exportStar(__nccwpck_require__(83725), exports);
+tslib_1.__exportStar(__nccwpck_require__(60258), exports);
+tslib_1.__exportStar(__nccwpck_require__(58003), exports);
+tslib_1.__exportStar(__nccwpck_require__(26499), exports);
+tslib_1.__exportStar(__nccwpck_require__(94162), exports);
+tslib_1.__exportStar(__nccwpck_require__(14210), exports);
+tslib_1.__exportStar(__nccwpck_require__(25455), exports);
+tslib_1.__exportStar(__nccwpck_require__(70556), exports);
+tslib_1.__exportStar(__nccwpck_require__(50917), exports);
+tslib_1.__exportStar(__nccwpck_require__(11609), exports);
+
+
+/***/ }),
+
+/***/ 49066:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.resolveClientEndpointParameters = void 0;
+const resolveClientEndpointParameters = (options) => {
+ return {
+ ...options,
+ useDualstackEndpoint: options.useDualstackEndpoint ?? false,
+ useFipsEndpoint: options.useFipsEndpoint ?? false,
+ defaultSigningName: "cloudformation",
+ };
+};
+exports.resolveClientEndpointParameters = resolveClientEndpointParameters;
+
+
+/***/ }),
+
+/***/ 5640:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.defaultEndpointResolver = void 0;
+const util_endpoints_1 = __nccwpck_require__(13350);
+const ruleset_1 = __nccwpck_require__(58349);
+const defaultEndpointResolver = (endpointParams, context = {}) => {
+ return (0, util_endpoints_1.resolveEndpoint)(ruleset_1.ruleSet, {
+ endpointParams: endpointParams,
+ logger: context.logger,
+ });
+};
+exports.defaultEndpointResolver = defaultEndpointResolver;
+
+
+/***/ }),
+
+/***/ 58349:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.ruleSet = void 0;
+const u = "required", v = "fn", w = "argv", x = "ref";
+const a = true, b = "isSet", c = "booleanEquals", d = "error", e = "endpoint", f = "tree", g = "PartitionResult", h = "getAttr", i = { [u]: false, "type": "String" }, j = { [u]: true, "default": false, "type": "Boolean" }, k = { [x]: "Endpoint" }, l = { [v]: c, [w]: [{ [x]: "UseFIPS" }, true] }, m = { [v]: c, [w]: [{ [x]: "UseDualStack" }, true] }, n = {}, o = { [v]: h, [w]: [{ [x]: g }, "supportsFIPS"] }, p = { [x]: g }, q = { [v]: c, [w]: [true, { [v]: h, [w]: [p, "supportsDualStack"] }] }, r = [l], s = [m], t = [{ [x]: "Region" }];
+const _data = { version: "1.0", parameters: { Region: i, UseDualStack: j, UseFIPS: j, Endpoint: i }, rules: [{ conditions: [{ [v]: b, [w]: [k] }], rules: [{ conditions: r, error: "Invalid Configuration: FIPS and custom endpoint are not supported", type: d }, { conditions: s, error: "Invalid Configuration: Dualstack and custom endpoint are not supported", type: d }, { endpoint: { url: k, properties: n, headers: n }, type: e }], type: f }, { conditions: [{ [v]: b, [w]: t }], rules: [{ conditions: [{ [v]: "aws.partition", [w]: t, assign: g }], rules: [{ conditions: [l, m], rules: [{ conditions: [{ [v]: c, [w]: [a, o] }, q], rules: [{ endpoint: { url: "https://cloudformation-fips.{Region}.{PartitionResult#dualStackDnsSuffix}", properties: n, headers: n }, type: e }], type: f }, { error: "FIPS and DualStack are enabled, but this partition does not support one or both", type: d }], type: f }, { conditions: r, rules: [{ conditions: [{ [v]: c, [w]: [o, a] }], rules: [{ conditions: [{ [v]: "stringEquals", [w]: [{ [v]: h, [w]: [p, "name"] }, "aws-us-gov"] }], endpoint: { url: "https://cloudformation.{Region}.amazonaws.com", properties: n, headers: n }, type: e }, { endpoint: { url: "https://cloudformation-fips.{Region}.{PartitionResult#dnsSuffix}", properties: n, headers: n }, type: e }], type: f }, { error: "FIPS is enabled but this partition does not support FIPS", type: d }], type: f }, { conditions: s, rules: [{ conditions: [q], rules: [{ endpoint: { url: "https://cloudformation.{Region}.{PartitionResult#dualStackDnsSuffix}", properties: n, headers: n }, type: e }], type: f }, { error: "DualStack is enabled but this partition does not support DualStack", type: d }], type: f }, { endpoint: { url: "https://cloudformation.{Region}.{PartitionResult#dnsSuffix}", properties: n, headers: n }, type: e }], type: f }], type: f }, { error: "Invalid Configuration: Missing Region", type: d }] };
+exports.ruleSet = _data;
+
+
+/***/ }),
+
+/***/ 15650:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.CloudFormationServiceException = void 0;
+const tslib_1 = __nccwpck_require__(4351);
+tslib_1.__exportStar(__nccwpck_require__(10456), exports);
+tslib_1.__exportStar(__nccwpck_require__(86196), exports);
+tslib_1.__exportStar(__nccwpck_require__(50564), exports);
+tslib_1.__exportStar(__nccwpck_require__(69505), exports);
+tslib_1.__exportStar(__nccwpck_require__(23978), exports);
+tslib_1.__exportStar(__nccwpck_require__(19510), exports);
+var CloudFormationServiceException_1 = __nccwpck_require__(215);
+Object.defineProperty(exports, "CloudFormationServiceException", ({ enumerable: true, get: function () { return CloudFormationServiceException_1.CloudFormationServiceException; } }));
+
+
+/***/ }),
+
+/***/ 215:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.CloudFormationServiceException = exports.__ServiceException = void 0;
+const smithy_client_1 = __nccwpck_require__(63570);
+Object.defineProperty(exports, "__ServiceException", ({ enumerable: true, get: function () { return smithy_client_1.ServiceException; } }));
+class CloudFormationServiceException extends smithy_client_1.ServiceException {
+ constructor(options) {
+ super(options);
+ Object.setPrototypeOf(this, CloudFormationServiceException.prototype);
+ }
+}
+exports.CloudFormationServiceException = CloudFormationServiceException;
+
+
+/***/ }),
+
+/***/ 19510:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+const tslib_1 = __nccwpck_require__(4351);
+tslib_1.__exportStar(__nccwpck_require__(75378), exports);
+
+
+/***/ }),
+
+/***/ 75378:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.HookStatus = exports.StackDriftStatus = exports.StackDriftDetectionStatus = exports.PublisherStatus = exports.IdentityProvider = exports.OrganizationStatus = exports.RegistryType = exports.StackSetNotEmptyException = exports.InvalidChangeSetStatusException = exports.NameAlreadyExistsException = exports.PermissionModels = exports.CreatedButModifiedException = exports.StaleRequestException = exports.StackSetNotFoundException = exports.OperationInProgressException = exports.OperationIdAlreadyExistsException = exports.RegionConcurrencyType = exports.OnFailure = exports.LimitExceededException = exports.InsufficientCapabilitiesException = exports.OnStackFailure = exports.ChangeSetType = exports.ExecutionStatus = exports.ChangeSetStatus = exports.ChangeSetNotFoundException = exports.ChangeSetHooksStatus = exports.HookTargetType = exports.HookInvocationPoint = exports.HookFailureMode = exports.ChangeType = exports.Replacement = exports.RequiresRecreation = exports.ResourceAttribute = exports.EvaluationType = exports.ChangeSource = exports.ChangeAction = exports.Category = exports.Capability = exports.TokenAlreadyExistsException = exports.CallAs = exports.TypeConfigurationNotFoundException = exports.AlreadyExistsException = exports.TypeNotFoundException = exports.CFNRegistryException = exports.VersionBump = exports.ThirdPartyType = exports.OperationNotFoundException = exports.InvalidOperationException = exports.AccountGateStatus = exports.AccountFilterType = void 0;
+exports.ResourceSignalStatus = exports.HandlerErrorCode = exports.OperationStatus = exports.OperationStatusCheckFailedException = exports.InvalidStateTransitionException = exports.StackSetOperationResultStatus = exports.OperationResultFilterName = exports.StackInstanceFilterName = exports.StackNotFoundException = exports.TemplateStage = exports.RegistrationStatus = exports.Visibility = exports.TypeTestsStatus = exports.ProvisioningType = exports.DeprecatedStatus = exports.StackSetOperationStatus = exports.StackSetOperationAction = exports.StackSetStatus = exports.StackSetDriftStatus = exports.StackSetDriftDetectionStatus = exports.StackStatus = exports.DifferenceType = exports.StackResourceDriftStatus = exports.StackInstanceNotFoundException = exports.StackInstanceStatus = exports.StackInstanceDetailedStatus = exports.ResourceStatus = void 0;
+const CloudFormationServiceException_1 = __nccwpck_require__(215);
+exports.AccountFilterType = {
+ DIFFERENCE: "DIFFERENCE",
+ INTERSECTION: "INTERSECTION",
+ NONE: "NONE",
+ UNION: "UNION",
+};
+exports.AccountGateStatus = {
+ FAILED: "FAILED",
+ SKIPPED: "SKIPPED",
+ SUCCEEDED: "SUCCEEDED",
+};
+class InvalidOperationException extends CloudFormationServiceException_1.CloudFormationServiceException {
+ constructor(opts) {
+ super({
+ name: "InvalidOperationException",
+ $fault: "client",
+ ...opts,
+ });
+ this.name = "InvalidOperationException";
+ this.$fault = "client";
+ Object.setPrototypeOf(this, InvalidOperationException.prototype);
+ this.Message = opts.Message;
+ }
+}
+exports.InvalidOperationException = InvalidOperationException;
+class OperationNotFoundException extends CloudFormationServiceException_1.CloudFormationServiceException {
+ constructor(opts) {
+ super({
+ name: "OperationNotFoundException",
+ $fault: "client",
+ ...opts,
+ });
+ this.name = "OperationNotFoundException";
+ this.$fault = "client";
+ Object.setPrototypeOf(this, OperationNotFoundException.prototype);
+ this.Message = opts.Message;
+ }
+}
+exports.OperationNotFoundException = OperationNotFoundException;
+exports.ThirdPartyType = {
+ HOOK: "HOOK",
+ MODULE: "MODULE",
+ RESOURCE: "RESOURCE",
+};
+exports.VersionBump = {
+ MAJOR: "MAJOR",
+ MINOR: "MINOR",
+};
+class CFNRegistryException extends CloudFormationServiceException_1.CloudFormationServiceException {
+ constructor(opts) {
+ super({
+ name: "CFNRegistryException",
+ $fault: "client",
+ ...opts,
+ });
+ this.name = "CFNRegistryException";
+ this.$fault = "client";
+ Object.setPrototypeOf(this, CFNRegistryException.prototype);
+ this.Message = opts.Message;
+ }
+}
+exports.CFNRegistryException = CFNRegistryException;
+class TypeNotFoundException extends CloudFormationServiceException_1.CloudFormationServiceException {
+ constructor(opts) {
+ super({
+ name: "TypeNotFoundException",
+ $fault: "client",
+ ...opts,
+ });
+ this.name = "TypeNotFoundException";
+ this.$fault = "client";
+ Object.setPrototypeOf(this, TypeNotFoundException.prototype);
+ this.Message = opts.Message;
+ }
+}
+exports.TypeNotFoundException = TypeNotFoundException;
+class AlreadyExistsException extends CloudFormationServiceException_1.CloudFormationServiceException {
+ constructor(opts) {
+ super({
+ name: "AlreadyExistsException",
+ $fault: "client",
+ ...opts,
+ });
+ this.name = "AlreadyExistsException";
+ this.$fault = "client";
+ Object.setPrototypeOf(this, AlreadyExistsException.prototype);
+ this.Message = opts.Message;
+ }
+}
+exports.AlreadyExistsException = AlreadyExistsException;
+class TypeConfigurationNotFoundException extends CloudFormationServiceException_1.CloudFormationServiceException {
+ constructor(opts) {
+ super({
+ name: "TypeConfigurationNotFoundException",
+ $fault: "client",
+ ...opts,
+ });
+ this.name = "TypeConfigurationNotFoundException";
+ this.$fault = "client";
+ Object.setPrototypeOf(this, TypeConfigurationNotFoundException.prototype);
+ this.Message = opts.Message;
+ }
+}
+exports.TypeConfigurationNotFoundException = TypeConfigurationNotFoundException;
+exports.CallAs = {
+ DELEGATED_ADMIN: "DELEGATED_ADMIN",
+ SELF: "SELF",
+};
+class TokenAlreadyExistsException extends CloudFormationServiceException_1.CloudFormationServiceException {
+ constructor(opts) {
+ super({
+ name: "TokenAlreadyExistsException",
+ $fault: "client",
+ ...opts,
+ });
+ this.name = "TokenAlreadyExistsException";
+ this.$fault = "client";
+ Object.setPrototypeOf(this, TokenAlreadyExistsException.prototype);
+ this.Message = opts.Message;
+ }
+}
+exports.TokenAlreadyExistsException = TokenAlreadyExistsException;
+exports.Capability = {
+ CAPABILITY_AUTO_EXPAND: "CAPABILITY_AUTO_EXPAND",
+ CAPABILITY_IAM: "CAPABILITY_IAM",
+ CAPABILITY_NAMED_IAM: "CAPABILITY_NAMED_IAM",
+};
+exports.Category = {
+ ACTIVATED: "ACTIVATED",
+ AWS_TYPES: "AWS_TYPES",
+ REGISTERED: "REGISTERED",
+ THIRD_PARTY: "THIRD_PARTY",
+};
+exports.ChangeAction = {
+ Add: "Add",
+ Dynamic: "Dynamic",
+ Import: "Import",
+ Modify: "Modify",
+ Remove: "Remove",
+};
+exports.ChangeSource = {
+ Automatic: "Automatic",
+ DirectModification: "DirectModification",
+ ParameterReference: "ParameterReference",
+ ResourceAttribute: "ResourceAttribute",
+ ResourceReference: "ResourceReference",
+};
+exports.EvaluationType = {
+ Dynamic: "Dynamic",
+ Static: "Static",
+};
+exports.ResourceAttribute = {
+ CreationPolicy: "CreationPolicy",
+ DeletionPolicy: "DeletionPolicy",
+ Metadata: "Metadata",
+ Properties: "Properties",
+ Tags: "Tags",
+ UpdatePolicy: "UpdatePolicy",
+ UpdateReplacePolicy: "UpdateReplacePolicy",
+};
+exports.RequiresRecreation = {
+ Always: "Always",
+ Conditionally: "Conditionally",
+ Never: "Never",
+};
+exports.Replacement = {
+ Conditional: "Conditional",
+ False: "False",
+ True: "True",
+};
+exports.ChangeType = {
+ Resource: "Resource",
+};
+exports.HookFailureMode = {
+ FAIL: "FAIL",
+ WARN: "WARN",
+};
+exports.HookInvocationPoint = {
+ PRE_PROVISION: "PRE_PROVISION",
+};
+exports.HookTargetType = {
+ RESOURCE: "RESOURCE",
+};
+exports.ChangeSetHooksStatus = {
+ PLANNED: "PLANNED",
+ PLANNING: "PLANNING",
+ UNAVAILABLE: "UNAVAILABLE",
+};
+class ChangeSetNotFoundException extends CloudFormationServiceException_1.CloudFormationServiceException {
+ constructor(opts) {
+ super({
+ name: "ChangeSetNotFoundException",
+ $fault: "client",
+ ...opts,
+ });
+ this.name = "ChangeSetNotFoundException";
+ this.$fault = "client";
+ Object.setPrototypeOf(this, ChangeSetNotFoundException.prototype);
+ this.Message = opts.Message;
+ }
+}
+exports.ChangeSetNotFoundException = ChangeSetNotFoundException;
+exports.ChangeSetStatus = {
+ CREATE_COMPLETE: "CREATE_COMPLETE",
+ CREATE_IN_PROGRESS: "CREATE_IN_PROGRESS",
+ CREATE_PENDING: "CREATE_PENDING",
+ DELETE_COMPLETE: "DELETE_COMPLETE",
+ DELETE_FAILED: "DELETE_FAILED",
+ DELETE_IN_PROGRESS: "DELETE_IN_PROGRESS",
+ DELETE_PENDING: "DELETE_PENDING",
+ FAILED: "FAILED",
+};
+exports.ExecutionStatus = {
+ AVAILABLE: "AVAILABLE",
+ EXECUTE_COMPLETE: "EXECUTE_COMPLETE",
+ EXECUTE_FAILED: "EXECUTE_FAILED",
+ EXECUTE_IN_PROGRESS: "EXECUTE_IN_PROGRESS",
+ OBSOLETE: "OBSOLETE",
+ UNAVAILABLE: "UNAVAILABLE",
+};
+exports.ChangeSetType = {
+ CREATE: "CREATE",
+ IMPORT: "IMPORT",
+ UPDATE: "UPDATE",
+};
+exports.OnStackFailure = {
+ DELETE: "DELETE",
+ DO_NOTHING: "DO_NOTHING",
+ ROLLBACK: "ROLLBACK",
+};
+class InsufficientCapabilitiesException extends CloudFormationServiceException_1.CloudFormationServiceException {
+ constructor(opts) {
+ super({
+ name: "InsufficientCapabilitiesException",
+ $fault: "client",
+ ...opts,
+ });
+ this.name = "InsufficientCapabilitiesException";
+ this.$fault = "client";
+ Object.setPrototypeOf(this, InsufficientCapabilitiesException.prototype);
+ this.Message = opts.Message;
+ }
+}
+exports.InsufficientCapabilitiesException = InsufficientCapabilitiesException;
+class LimitExceededException extends CloudFormationServiceException_1.CloudFormationServiceException {
+ constructor(opts) {
+ super({
+ name: "LimitExceededException",
+ $fault: "client",
+ ...opts,
+ });
+ this.name = "LimitExceededException";
+ this.$fault = "client";
+ Object.setPrototypeOf(this, LimitExceededException.prototype);
+ this.Message = opts.Message;
+ }
+}
+exports.LimitExceededException = LimitExceededException;
+exports.OnFailure = {
+ DELETE: "DELETE",
+ DO_NOTHING: "DO_NOTHING",
+ ROLLBACK: "ROLLBACK",
+};
+exports.RegionConcurrencyType = {
+ PARALLEL: "PARALLEL",
+ SEQUENTIAL: "SEQUENTIAL",
+};
+class OperationIdAlreadyExistsException extends CloudFormationServiceException_1.CloudFormationServiceException {
+ constructor(opts) {
+ super({
+ name: "OperationIdAlreadyExistsException",
+ $fault: "client",
+ ...opts,
+ });
+ this.name = "OperationIdAlreadyExistsException";
+ this.$fault = "client";
+ Object.setPrototypeOf(this, OperationIdAlreadyExistsException.prototype);
+ this.Message = opts.Message;
+ }
+}
+exports.OperationIdAlreadyExistsException = OperationIdAlreadyExistsException;
+class OperationInProgressException extends CloudFormationServiceException_1.CloudFormationServiceException {
+ constructor(opts) {
+ super({
+ name: "OperationInProgressException",
+ $fault: "client",
+ ...opts,
+ });
+ this.name = "OperationInProgressException";
+ this.$fault = "client";
+ Object.setPrototypeOf(this, OperationInProgressException.prototype);
+ this.Message = opts.Message;
+ }
+}
+exports.OperationInProgressException = OperationInProgressException;
+class StackSetNotFoundException extends CloudFormationServiceException_1.CloudFormationServiceException {
+ constructor(opts) {
+ super({
+ name: "StackSetNotFoundException",
+ $fault: "client",
+ ...opts,
+ });
+ this.name = "StackSetNotFoundException";
+ this.$fault = "client";
+ Object.setPrototypeOf(this, StackSetNotFoundException.prototype);
+ this.Message = opts.Message;
+ }
+}
+exports.StackSetNotFoundException = StackSetNotFoundException;
+class StaleRequestException extends CloudFormationServiceException_1.CloudFormationServiceException {
+ constructor(opts) {
+ super({
+ name: "StaleRequestException",
+ $fault: "client",
+ ...opts,
+ });
+ this.name = "StaleRequestException";
+ this.$fault = "client";
+ Object.setPrototypeOf(this, StaleRequestException.prototype);
+ this.Message = opts.Message;
+ }
+}
+exports.StaleRequestException = StaleRequestException;
+class CreatedButModifiedException extends CloudFormationServiceException_1.CloudFormationServiceException {
+ constructor(opts) {
+ super({
+ name: "CreatedButModifiedException",
+ $fault: "client",
+ ...opts,
+ });
+ this.name = "CreatedButModifiedException";
+ this.$fault = "client";
+ Object.setPrototypeOf(this, CreatedButModifiedException.prototype);
+ this.Message = opts.Message;
+ }
+}
+exports.CreatedButModifiedException = CreatedButModifiedException;
+exports.PermissionModels = {
+ SELF_MANAGED: "SELF_MANAGED",
+ SERVICE_MANAGED: "SERVICE_MANAGED",
+};
+class NameAlreadyExistsException extends CloudFormationServiceException_1.CloudFormationServiceException {
+ constructor(opts) {
+ super({
+ name: "NameAlreadyExistsException",
+ $fault: "client",
+ ...opts,
+ });
+ this.name = "NameAlreadyExistsException";
+ this.$fault = "client";
+ Object.setPrototypeOf(this, NameAlreadyExistsException.prototype);
+ this.Message = opts.Message;
+ }
+}
+exports.NameAlreadyExistsException = NameAlreadyExistsException;
+class InvalidChangeSetStatusException extends CloudFormationServiceException_1.CloudFormationServiceException {
+ constructor(opts) {
+ super({
+ name: "InvalidChangeSetStatusException",
+ $fault: "client",
+ ...opts,
+ });
+ this.name = "InvalidChangeSetStatusException";
+ this.$fault = "client";
+ Object.setPrototypeOf(this, InvalidChangeSetStatusException.prototype);
+ this.Message = opts.Message;
+ }
+}
+exports.InvalidChangeSetStatusException = InvalidChangeSetStatusException;
+class StackSetNotEmptyException extends CloudFormationServiceException_1.CloudFormationServiceException {
+ constructor(opts) {
+ super({
+ name: "StackSetNotEmptyException",
+ $fault: "client",
+ ...opts,
+ });
+ this.name = "StackSetNotEmptyException";
+ this.$fault = "client";
+ Object.setPrototypeOf(this, StackSetNotEmptyException.prototype);
+ this.Message = opts.Message;
+ }
+}
+exports.StackSetNotEmptyException = StackSetNotEmptyException;
+exports.RegistryType = {
+ HOOK: "HOOK",
+ MODULE: "MODULE",
+ RESOURCE: "RESOURCE",
+};
+exports.OrganizationStatus = {
+ DISABLED: "DISABLED",
+ DISABLED_PERMANENTLY: "DISABLED_PERMANENTLY",
+ ENABLED: "ENABLED",
+};
+exports.IdentityProvider = {
+ AWS_Marketplace: "AWS_Marketplace",
+ Bitbucket: "Bitbucket",
+ GitHub: "GitHub",
+};
+exports.PublisherStatus = {
+ UNVERIFIED: "UNVERIFIED",
+ VERIFIED: "VERIFIED",
+};
+exports.StackDriftDetectionStatus = {
+ DETECTION_COMPLETE: "DETECTION_COMPLETE",
+ DETECTION_FAILED: "DETECTION_FAILED",
+ DETECTION_IN_PROGRESS: "DETECTION_IN_PROGRESS",
+};
+exports.StackDriftStatus = {
+ DRIFTED: "DRIFTED",
+ IN_SYNC: "IN_SYNC",
+ NOT_CHECKED: "NOT_CHECKED",
+ UNKNOWN: "UNKNOWN",
+};
+exports.HookStatus = {
+ HOOK_COMPLETE_FAILED: "HOOK_COMPLETE_FAILED",
+ HOOK_COMPLETE_SUCCEEDED: "HOOK_COMPLETE_SUCCEEDED",
+ HOOK_FAILED: "HOOK_FAILED",
+ HOOK_IN_PROGRESS: "HOOK_IN_PROGRESS",
+};
+exports.ResourceStatus = {
+ CREATE_COMPLETE: "CREATE_COMPLETE",
+ CREATE_FAILED: "CREATE_FAILED",
+ CREATE_IN_PROGRESS: "CREATE_IN_PROGRESS",
+ DELETE_COMPLETE: "DELETE_COMPLETE",
+ DELETE_FAILED: "DELETE_FAILED",
+ DELETE_IN_PROGRESS: "DELETE_IN_PROGRESS",
+ DELETE_SKIPPED: "DELETE_SKIPPED",
+ IMPORT_COMPLETE: "IMPORT_COMPLETE",
+ IMPORT_FAILED: "IMPORT_FAILED",
+ IMPORT_IN_PROGRESS: "IMPORT_IN_PROGRESS",
+ IMPORT_ROLLBACK_COMPLETE: "IMPORT_ROLLBACK_COMPLETE",
+ IMPORT_ROLLBACK_FAILED: "IMPORT_ROLLBACK_FAILED",
+ IMPORT_ROLLBACK_IN_PROGRESS: "IMPORT_ROLLBACK_IN_PROGRESS",
+ ROLLBACK_COMPLETE: "ROLLBACK_COMPLETE",
+ ROLLBACK_FAILED: "ROLLBACK_FAILED",
+ ROLLBACK_IN_PROGRESS: "ROLLBACK_IN_PROGRESS",
+ UPDATE_COMPLETE: "UPDATE_COMPLETE",
+ UPDATE_FAILED: "UPDATE_FAILED",
+ UPDATE_IN_PROGRESS: "UPDATE_IN_PROGRESS",
+ UPDATE_ROLLBACK_COMPLETE: "UPDATE_ROLLBACK_COMPLETE",
+ UPDATE_ROLLBACK_FAILED: "UPDATE_ROLLBACK_FAILED",
+ UPDATE_ROLLBACK_IN_PROGRESS: "UPDATE_ROLLBACK_IN_PROGRESS",
+};
+exports.StackInstanceDetailedStatus = {
+ CANCELLED: "CANCELLED",
+ FAILED: "FAILED",
+ INOPERABLE: "INOPERABLE",
+ PENDING: "PENDING",
+ RUNNING: "RUNNING",
+ SKIPPED_SUSPENDED_ACCOUNT: "SKIPPED_SUSPENDED_ACCOUNT",
+ SUCCEEDED: "SUCCEEDED",
+};
+exports.StackInstanceStatus = {
+ CURRENT: "CURRENT",
+ INOPERABLE: "INOPERABLE",
+ OUTDATED: "OUTDATED",
+};
+class StackInstanceNotFoundException extends CloudFormationServiceException_1.CloudFormationServiceException {
+ constructor(opts) {
+ super({
+ name: "StackInstanceNotFoundException",
+ $fault: "client",
+ ...opts,
+ });
+ this.name = "StackInstanceNotFoundException";
+ this.$fault = "client";
+ Object.setPrototypeOf(this, StackInstanceNotFoundException.prototype);
+ this.Message = opts.Message;
+ }
+}
+exports.StackInstanceNotFoundException = StackInstanceNotFoundException;
+exports.StackResourceDriftStatus = {
+ DELETED: "DELETED",
+ IN_SYNC: "IN_SYNC",
+ MODIFIED: "MODIFIED",
+ NOT_CHECKED: "NOT_CHECKED",
+};
+exports.DifferenceType = {
+ ADD: "ADD",
+ NOT_EQUAL: "NOT_EQUAL",
+ REMOVE: "REMOVE",
+};
+exports.StackStatus = {
+ CREATE_COMPLETE: "CREATE_COMPLETE",
+ CREATE_FAILED: "CREATE_FAILED",
+ CREATE_IN_PROGRESS: "CREATE_IN_PROGRESS",
+ DELETE_COMPLETE: "DELETE_COMPLETE",
+ DELETE_FAILED: "DELETE_FAILED",
+ DELETE_IN_PROGRESS: "DELETE_IN_PROGRESS",
+ IMPORT_COMPLETE: "IMPORT_COMPLETE",
+ IMPORT_IN_PROGRESS: "IMPORT_IN_PROGRESS",
+ IMPORT_ROLLBACK_COMPLETE: "IMPORT_ROLLBACK_COMPLETE",
+ IMPORT_ROLLBACK_FAILED: "IMPORT_ROLLBACK_FAILED",
+ IMPORT_ROLLBACK_IN_PROGRESS: "IMPORT_ROLLBACK_IN_PROGRESS",
+ REVIEW_IN_PROGRESS: "REVIEW_IN_PROGRESS",
+ ROLLBACK_COMPLETE: "ROLLBACK_COMPLETE",
+ ROLLBACK_FAILED: "ROLLBACK_FAILED",
+ ROLLBACK_IN_PROGRESS: "ROLLBACK_IN_PROGRESS",
+ UPDATE_COMPLETE: "UPDATE_COMPLETE",
+ UPDATE_COMPLETE_CLEANUP_IN_PROGRESS: "UPDATE_COMPLETE_CLEANUP_IN_PROGRESS",
+ UPDATE_FAILED: "UPDATE_FAILED",
+ UPDATE_IN_PROGRESS: "UPDATE_IN_PROGRESS",
+ UPDATE_ROLLBACK_COMPLETE: "UPDATE_ROLLBACK_COMPLETE",
+ UPDATE_ROLLBACK_COMPLETE_CLEANUP_IN_PROGRESS: "UPDATE_ROLLBACK_COMPLETE_CLEANUP_IN_PROGRESS",
+ UPDATE_ROLLBACK_FAILED: "UPDATE_ROLLBACK_FAILED",
+ UPDATE_ROLLBACK_IN_PROGRESS: "UPDATE_ROLLBACK_IN_PROGRESS",
+};
+exports.StackSetDriftDetectionStatus = {
+ COMPLETED: "COMPLETED",
+ FAILED: "FAILED",
+ IN_PROGRESS: "IN_PROGRESS",
+ PARTIAL_SUCCESS: "PARTIAL_SUCCESS",
+ STOPPED: "STOPPED",
+};
+exports.StackSetDriftStatus = {
+ DRIFTED: "DRIFTED",
+ IN_SYNC: "IN_SYNC",
+ NOT_CHECKED: "NOT_CHECKED",
+};
+exports.StackSetStatus = {
+ ACTIVE: "ACTIVE",
+ DELETED: "DELETED",
+};
+exports.StackSetOperationAction = {
+ CREATE: "CREATE",
+ DELETE: "DELETE",
+ DETECT_DRIFT: "DETECT_DRIFT",
+ UPDATE: "UPDATE",
+};
+exports.StackSetOperationStatus = {
+ FAILED: "FAILED",
+ QUEUED: "QUEUED",
+ RUNNING: "RUNNING",
+ STOPPED: "STOPPED",
+ STOPPING: "STOPPING",
+ SUCCEEDED: "SUCCEEDED",
+};
+exports.DeprecatedStatus = {
+ DEPRECATED: "DEPRECATED",
+ LIVE: "LIVE",
+};
+exports.ProvisioningType = {
+ FULLY_MUTABLE: "FULLY_MUTABLE",
+ IMMUTABLE: "IMMUTABLE",
+ NON_PROVISIONABLE: "NON_PROVISIONABLE",
+};
+exports.TypeTestsStatus = {
+ FAILED: "FAILED",
+ IN_PROGRESS: "IN_PROGRESS",
+ NOT_TESTED: "NOT_TESTED",
+ PASSED: "PASSED",
+};
+exports.Visibility = {
+ PRIVATE: "PRIVATE",
+ PUBLIC: "PUBLIC",
+};
+exports.RegistrationStatus = {
+ COMPLETE: "COMPLETE",
+ FAILED: "FAILED",
+ IN_PROGRESS: "IN_PROGRESS",
+};
+exports.TemplateStage = {
+ Original: "Original",
+ Processed: "Processed",
+};
+class StackNotFoundException extends CloudFormationServiceException_1.CloudFormationServiceException {
+ constructor(opts) {
+ super({
+ name: "StackNotFoundException",
+ $fault: "client",
+ ...opts,
+ });
+ this.name = "StackNotFoundException";
+ this.$fault = "client";
+ Object.setPrototypeOf(this, StackNotFoundException.prototype);
+ this.Message = opts.Message;
+ }
+}
+exports.StackNotFoundException = StackNotFoundException;
+exports.StackInstanceFilterName = {
+ DETAILED_STATUS: "DETAILED_STATUS",
+ DRIFT_STATUS: "DRIFT_STATUS",
+ LAST_OPERATION_ID: "LAST_OPERATION_ID",
+};
+exports.OperationResultFilterName = {
+ OPERATION_RESULT_STATUS: "OPERATION_RESULT_STATUS",
+};
+exports.StackSetOperationResultStatus = {
+ CANCELLED: "CANCELLED",
+ FAILED: "FAILED",
+ PENDING: "PENDING",
+ RUNNING: "RUNNING",
+ SUCCEEDED: "SUCCEEDED",
+};
+class InvalidStateTransitionException extends CloudFormationServiceException_1.CloudFormationServiceException {
+ constructor(opts) {
+ super({
+ name: "InvalidStateTransitionException",
+ $fault: "client",
+ ...opts,
+ });
+ this.name = "InvalidStateTransitionException";
+ this.$fault = "client";
+ Object.setPrototypeOf(this, InvalidStateTransitionException.prototype);
+ this.Message = opts.Message;
+ }
+}
+exports.InvalidStateTransitionException = InvalidStateTransitionException;
+class OperationStatusCheckFailedException extends CloudFormationServiceException_1.CloudFormationServiceException {
+ constructor(opts) {
+ super({
+ name: "OperationStatusCheckFailedException",
+ $fault: "client",
+ ...opts,
+ });
+ this.name = "OperationStatusCheckFailedException";
+ this.$fault = "client";
+ Object.setPrototypeOf(this, OperationStatusCheckFailedException.prototype);
+ this.Message = opts.Message;
+ }
+}
+exports.OperationStatusCheckFailedException = OperationStatusCheckFailedException;
+exports.OperationStatus = {
+ FAILED: "FAILED",
+ IN_PROGRESS: "IN_PROGRESS",
+ PENDING: "PENDING",
+ SUCCESS: "SUCCESS",
+};
+exports.HandlerErrorCode = {
+ AccessDenied: "AccessDenied",
+ AlreadyExists: "AlreadyExists",
+ GeneralServiceException: "GeneralServiceException",
+ HandlerInternalFailure: "HandlerInternalFailure",
+ InternalFailure: "InternalFailure",
+ InvalidCredentials: "InvalidCredentials",
+ InvalidRequest: "InvalidRequest",
+ InvalidTypeConfiguration: "InvalidTypeConfiguration",
+ NetworkFailure: "NetworkFailure",
+ NonCompliant: "NonCompliant",
+ NotFound: "NotFound",
+ NotUpdatable: "NotUpdatable",
+ ResourceConflict: "ResourceConflict",
+ ServiceInternalError: "ServiceInternalError",
+ ServiceLimitExceeded: "ServiceLimitExceeded",
+ ServiceTimeout: "NotStabilized",
+ Throttling: "Throttling",
+ Unknown: "Unknown",
+ UnsupportedTarget: "UnsupportedTarget",
+};
+exports.ResourceSignalStatus = {
+ FAILURE: "FAILURE",
+ SUCCESS: "SUCCESS",
+};
+
+
+/***/ }),
+
+/***/ 36402:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.paginateDescribeAccountLimits = void 0;
+const CloudFormationClient_1 = __nccwpck_require__(10456);
+const DescribeAccountLimitsCommand_1 = __nccwpck_require__(90664);
+const makePagedClientRequest = async (client, input, ...args) => {
+ return await client.send(new DescribeAccountLimitsCommand_1.DescribeAccountLimitsCommand(input), ...args);
+};
+async function* paginateDescribeAccountLimits(config, input, ...additionalArguments) {
+ let token = config.startingToken || undefined;
+ let hasNext = true;
+ let page;
+ while (hasNext) {
+ input.NextToken = token;
+ if (config.client instanceof CloudFormationClient_1.CloudFormationClient) {
+ page = await makePagedClientRequest(config.client, input, ...additionalArguments);
+ }
+ else {
+ throw new Error("Invalid client, expected CloudFormation | CloudFormationClient");
+ }
+ yield page;
+ const prevToken = token;
+ token = page.NextToken;
+ hasNext = !!(token && (!config.stopOnSameToken || token !== prevToken));
+ }
+ return undefined;
+}
+exports.paginateDescribeAccountLimits = paginateDescribeAccountLimits;
+
+
+/***/ }),
+
+/***/ 17892:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.paginateDescribeStackEvents = void 0;
+const CloudFormationClient_1 = __nccwpck_require__(10456);
+const DescribeStackEventsCommand_1 = __nccwpck_require__(87929);
+const makePagedClientRequest = async (client, input, ...args) => {
+ return await client.send(new DescribeStackEventsCommand_1.DescribeStackEventsCommand(input), ...args);
+};
+async function* paginateDescribeStackEvents(config, input, ...additionalArguments) {
+ let token = config.startingToken || undefined;
+ let hasNext = true;
+ let page;
+ while (hasNext) {
+ input.NextToken = token;
+ if (config.client instanceof CloudFormationClient_1.CloudFormationClient) {
+ page = await makePagedClientRequest(config.client, input, ...additionalArguments);
+ }
+ else {
+ throw new Error("Invalid client, expected CloudFormation | CloudFormationClient");
+ }
+ yield page;
+ const prevToken = token;
+ token = page.NextToken;
+ hasNext = !!(token && (!config.stopOnSameToken || token !== prevToken));
+ }
+ return undefined;
+}
+exports.paginateDescribeStackEvents = paginateDescribeStackEvents;
+
+
+/***/ }),
+
+/***/ 22664:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.paginateDescribeStackResourceDrifts = void 0;
+const CloudFormationClient_1 = __nccwpck_require__(10456);
+const DescribeStackResourceDriftsCommand_1 = __nccwpck_require__(22837);
+const makePagedClientRequest = async (client, input, ...args) => {
+ return await client.send(new DescribeStackResourceDriftsCommand_1.DescribeStackResourceDriftsCommand(input), ...args);
+};
+async function* paginateDescribeStackResourceDrifts(config, input, ...additionalArguments) {
+ let token = config.startingToken || undefined;
+ let hasNext = true;
+ let page;
+ while (hasNext) {
+ input.NextToken = token;
+ input["MaxResults"] = config.pageSize;
+ if (config.client instanceof CloudFormationClient_1.CloudFormationClient) {
+ page = await makePagedClientRequest(config.client, input, ...additionalArguments);
+ }
+ else {
+ throw new Error("Invalid client, expected CloudFormation | CloudFormationClient");
+ }
+ yield page;
+ const prevToken = token;
+ token = page.NextToken;
+ hasNext = !!(token && (!config.stopOnSameToken || token !== prevToken));
+ }
+ return undefined;
+}
+exports.paginateDescribeStackResourceDrifts = paginateDescribeStackResourceDrifts;
+
+
+/***/ }),
+
+/***/ 95282:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.paginateDescribeStacks = void 0;
+const CloudFormationClient_1 = __nccwpck_require__(10456);
+const DescribeStacksCommand_1 = __nccwpck_require__(79769);
+const makePagedClientRequest = async (client, input, ...args) => {
+ return await client.send(new DescribeStacksCommand_1.DescribeStacksCommand(input), ...args);
+};
+async function* paginateDescribeStacks(config, input, ...additionalArguments) {
+ let token = config.startingToken || undefined;
+ let hasNext = true;
+ let page;
+ while (hasNext) {
+ input.NextToken = token;
+ if (config.client instanceof CloudFormationClient_1.CloudFormationClient) {
+ page = await makePagedClientRequest(config.client, input, ...additionalArguments);
+ }
+ else {
+ throw new Error("Invalid client, expected CloudFormation | CloudFormationClient");
+ }
+ yield page;
+ const prevToken = token;
+ token = page.NextToken;
+ hasNext = !!(token && (!config.stopOnSameToken || token !== prevToken));
+ }
+ return undefined;
+}
+exports.paginateDescribeStacks = paginateDescribeStacks;
+
+
+/***/ }),
+
+/***/ 95222:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+
+
+/***/ }),
+
+/***/ 80092:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.paginateListChangeSets = void 0;
+const CloudFormationClient_1 = __nccwpck_require__(10456);
+const ListChangeSetsCommand_1 = __nccwpck_require__(87882);
+const makePagedClientRequest = async (client, input, ...args) => {
+ return await client.send(new ListChangeSetsCommand_1.ListChangeSetsCommand(input), ...args);
+};
+async function* paginateListChangeSets(config, input, ...additionalArguments) {
+ let token = config.startingToken || undefined;
+ let hasNext = true;
+ let page;
+ while (hasNext) {
+ input.NextToken = token;
+ if (config.client instanceof CloudFormationClient_1.CloudFormationClient) {
+ page = await makePagedClientRequest(config.client, input, ...additionalArguments);
+ }
+ else {
+ throw new Error("Invalid client, expected CloudFormation | CloudFormationClient");
+ }
+ yield page;
+ const prevToken = token;
+ token = page.NextToken;
+ hasNext = !!(token && (!config.stopOnSameToken || token !== prevToken));
+ }
+ return undefined;
+}
+exports.paginateListChangeSets = paginateListChangeSets;
+
+
+/***/ }),
+
+/***/ 13951:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.paginateListExports = void 0;
+const CloudFormationClient_1 = __nccwpck_require__(10456);
+const ListExportsCommand_1 = __nccwpck_require__(81426);
+const makePagedClientRequest = async (client, input, ...args) => {
+ return await client.send(new ListExportsCommand_1.ListExportsCommand(input), ...args);
+};
+async function* paginateListExports(config, input, ...additionalArguments) {
+ let token = config.startingToken || undefined;
+ let hasNext = true;
+ let page;
+ while (hasNext) {
+ input.NextToken = token;
+ if (config.client instanceof CloudFormationClient_1.CloudFormationClient) {
+ page = await makePagedClientRequest(config.client, input, ...additionalArguments);
+ }
+ else {
+ throw new Error("Invalid client, expected CloudFormation | CloudFormationClient");
+ }
+ yield page;
+ const prevToken = token;
+ token = page.NextToken;
+ hasNext = !!(token && (!config.stopOnSameToken || token !== prevToken));
+ }
+ return undefined;
+}
+exports.paginateListExports = paginateListExports;
+
+
+/***/ }),
+
+/***/ 34959:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.paginateListImports = void 0;
+const CloudFormationClient_1 = __nccwpck_require__(10456);
+const ListImportsCommand_1 = __nccwpck_require__(21574);
+const makePagedClientRequest = async (client, input, ...args) => {
+ return await client.send(new ListImportsCommand_1.ListImportsCommand(input), ...args);
+};
+async function* paginateListImports(config, input, ...additionalArguments) {
+ let token = config.startingToken || undefined;
+ let hasNext = true;
+ let page;
+ while (hasNext) {
+ input.NextToken = token;
+ if (config.client instanceof CloudFormationClient_1.CloudFormationClient) {
+ page = await makePagedClientRequest(config.client, input, ...additionalArguments);
+ }
+ else {
+ throw new Error("Invalid client, expected CloudFormation | CloudFormationClient");
+ }
+ yield page;
+ const prevToken = token;
+ token = page.NextToken;
+ hasNext = !!(token && (!config.stopOnSameToken || token !== prevToken));
+ }
+ return undefined;
+}
+exports.paginateListImports = paginateListImports;
+
+
+/***/ }),
+
+/***/ 12820:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.paginateListStackInstances = void 0;
+const CloudFormationClient_1 = __nccwpck_require__(10456);
+const ListStackInstancesCommand_1 = __nccwpck_require__(70488);
+const makePagedClientRequest = async (client, input, ...args) => {
+ return await client.send(new ListStackInstancesCommand_1.ListStackInstancesCommand(input), ...args);
+};
+async function* paginateListStackInstances(config, input, ...additionalArguments) {
+ let token = config.startingToken || undefined;
+ let hasNext = true;
+ let page;
+ while (hasNext) {
+ input.NextToken = token;
+ input["MaxResults"] = config.pageSize;
+ if (config.client instanceof CloudFormationClient_1.CloudFormationClient) {
+ page = await makePagedClientRequest(config.client, input, ...additionalArguments);
+ }
+ else {
+ throw new Error("Invalid client, expected CloudFormation | CloudFormationClient");
+ }
+ yield page;
+ const prevToken = token;
+ token = page.NextToken;
+ hasNext = !!(token && (!config.stopOnSameToken || token !== prevToken));
+ }
+ return undefined;
+}
+exports.paginateListStackInstances = paginateListStackInstances;
+
+
+/***/ }),
+
+/***/ 22947:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.paginateListStackResources = void 0;
+const CloudFormationClient_1 = __nccwpck_require__(10456);
+const ListStackResourcesCommand_1 = __nccwpck_require__(12602);
+const makePagedClientRequest = async (client, input, ...args) => {
+ return await client.send(new ListStackResourcesCommand_1.ListStackResourcesCommand(input), ...args);
+};
+async function* paginateListStackResources(config, input, ...additionalArguments) {
+ let token = config.startingToken || undefined;
+ let hasNext = true;
+ let page;
+ while (hasNext) {
+ input.NextToken = token;
+ if (config.client instanceof CloudFormationClient_1.CloudFormationClient) {
+ page = await makePagedClientRequest(config.client, input, ...additionalArguments);
+ }
+ else {
+ throw new Error("Invalid client, expected CloudFormation | CloudFormationClient");
+ }
+ yield page;
+ const prevToken = token;
+ token = page.NextToken;
+ hasNext = !!(token && (!config.stopOnSameToken || token !== prevToken));
+ }
+ return undefined;
+}
+exports.paginateListStackResources = paginateListStackResources;
+
+
+/***/ }),
+
+/***/ 10279:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.paginateListStackSetOperationResults = void 0;
+const CloudFormationClient_1 = __nccwpck_require__(10456);
+const ListStackSetOperationResultsCommand_1 = __nccwpck_require__(12200);
+const makePagedClientRequest = async (client, input, ...args) => {
+ return await client.send(new ListStackSetOperationResultsCommand_1.ListStackSetOperationResultsCommand(input), ...args);
+};
+async function* paginateListStackSetOperationResults(config, input, ...additionalArguments) {
+ let token = config.startingToken || undefined;
+ let hasNext = true;
+ let page;
+ while (hasNext) {
+ input.NextToken = token;
+ input["MaxResults"] = config.pageSize;
+ if (config.client instanceof CloudFormationClient_1.CloudFormationClient) {
+ page = await makePagedClientRequest(config.client, input, ...additionalArguments);
+ }
+ else {
+ throw new Error("Invalid client, expected CloudFormation | CloudFormationClient");
+ }
+ yield page;
+ const prevToken = token;
+ token = page.NextToken;
+ hasNext = !!(token && (!config.stopOnSameToken || token !== prevToken));
+ }
+ return undefined;
+}
+exports.paginateListStackSetOperationResults = paginateListStackSetOperationResults;
+
+
+/***/ }),
+
+/***/ 57369:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.paginateListStackSetOperations = void 0;
+const CloudFormationClient_1 = __nccwpck_require__(10456);
+const ListStackSetOperationsCommand_1 = __nccwpck_require__(65603);
+const makePagedClientRequest = async (client, input, ...args) => {
+ return await client.send(new ListStackSetOperationsCommand_1.ListStackSetOperationsCommand(input), ...args);
+};
+async function* paginateListStackSetOperations(config, input, ...additionalArguments) {
+ let token = config.startingToken || undefined;
+ let hasNext = true;
+ let page;
+ while (hasNext) {
+ input.NextToken = token;
+ input["MaxResults"] = config.pageSize;
+ if (config.client instanceof CloudFormationClient_1.CloudFormationClient) {
+ page = await makePagedClientRequest(config.client, input, ...additionalArguments);
+ }
+ else {
+ throw new Error("Invalid client, expected CloudFormation | CloudFormationClient");
+ }
+ yield page;
+ const prevToken = token;
+ token = page.NextToken;
+ hasNext = !!(token && (!config.stopOnSameToken || token !== prevToken));
+ }
+ return undefined;
+}
+exports.paginateListStackSetOperations = paginateListStackSetOperations;
+
+
+/***/ }),
+
+/***/ 12784:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.paginateListStackSets = void 0;
+const CloudFormationClient_1 = __nccwpck_require__(10456);
+const ListStackSetsCommand_1 = __nccwpck_require__(25005);
+const makePagedClientRequest = async (client, input, ...args) => {
+ return await client.send(new ListStackSetsCommand_1.ListStackSetsCommand(input), ...args);
+};
+async function* paginateListStackSets(config, input, ...additionalArguments) {
+ let token = config.startingToken || undefined;
+ let hasNext = true;
+ let page;
+ while (hasNext) {
+ input.NextToken = token;
+ input["MaxResults"] = config.pageSize;
+ if (config.client instanceof CloudFormationClient_1.CloudFormationClient) {
+ page = await makePagedClientRequest(config.client, input, ...additionalArguments);
+ }
+ else {
+ throw new Error("Invalid client, expected CloudFormation | CloudFormationClient");
+ }
+ yield page;
+ const prevToken = token;
+ token = page.NextToken;
+ hasNext = !!(token && (!config.stopOnSameToken || token !== prevToken));
+ }
+ return undefined;
+}
+exports.paginateListStackSets = paginateListStackSets;
+
+
+/***/ }),
+
+/***/ 8798:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.paginateListStacks = void 0;
+const CloudFormationClient_1 = __nccwpck_require__(10456);
+const ListStacksCommand_1 = __nccwpck_require__(11276);
+const makePagedClientRequest = async (client, input, ...args) => {
+ return await client.send(new ListStacksCommand_1.ListStacksCommand(input), ...args);
+};
+async function* paginateListStacks(config, input, ...additionalArguments) {
+ let token = config.startingToken || undefined;
+ let hasNext = true;
+ let page;
+ while (hasNext) {
+ input.NextToken = token;
+ if (config.client instanceof CloudFormationClient_1.CloudFormationClient) {
+ page = await makePagedClientRequest(config.client, input, ...additionalArguments);
+ }
+ else {
+ throw new Error("Invalid client, expected CloudFormation | CloudFormationClient");
+ }
+ yield page;
+ const prevToken = token;
+ token = page.NextToken;
+ hasNext = !!(token && (!config.stopOnSameToken || token !== prevToken));
+ }
+ return undefined;
+}
+exports.paginateListStacks = paginateListStacks;
+
+
+/***/ }),
+
+/***/ 52813:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.paginateListTypeRegistrations = void 0;
+const CloudFormationClient_1 = __nccwpck_require__(10456);
+const ListTypeRegistrationsCommand_1 = __nccwpck_require__(53280);
+const makePagedClientRequest = async (client, input, ...args) => {
+ return await client.send(new ListTypeRegistrationsCommand_1.ListTypeRegistrationsCommand(input), ...args);
+};
+async function* paginateListTypeRegistrations(config, input, ...additionalArguments) {
+ let token = config.startingToken || undefined;
+ let hasNext = true;
+ let page;
+ while (hasNext) {
+ input.NextToken = token;
+ input["MaxResults"] = config.pageSize;
+ if (config.client instanceof CloudFormationClient_1.CloudFormationClient) {
+ page = await makePagedClientRequest(config.client, input, ...additionalArguments);
+ }
+ else {
+ throw new Error("Invalid client, expected CloudFormation | CloudFormationClient");
+ }
+ yield page;
+ const prevToken = token;
+ token = page.NextToken;
+ hasNext = !!(token && (!config.stopOnSameToken || token !== prevToken));
+ }
+ return undefined;
+}
+exports.paginateListTypeRegistrations = paginateListTypeRegistrations;
+
+
+/***/ }),
+
+/***/ 61473:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.paginateListTypeVersions = void 0;
+const CloudFormationClient_1 = __nccwpck_require__(10456);
+const ListTypeVersionsCommand_1 = __nccwpck_require__(31414);
+const makePagedClientRequest = async (client, input, ...args) => {
+ return await client.send(new ListTypeVersionsCommand_1.ListTypeVersionsCommand(input), ...args);
+};
+async function* paginateListTypeVersions(config, input, ...additionalArguments) {
+ let token = config.startingToken || undefined;
+ let hasNext = true;
+ let page;
+ while (hasNext) {
+ input.NextToken = token;
+ input["MaxResults"] = config.pageSize;
+ if (config.client instanceof CloudFormationClient_1.CloudFormationClient) {
+ page = await makePagedClientRequest(config.client, input, ...additionalArguments);
+ }
+ else {
+ throw new Error("Invalid client, expected CloudFormation | CloudFormationClient");
+ }
+ yield page;
+ const prevToken = token;
+ token = page.NextToken;
+ hasNext = !!(token && (!config.stopOnSameToken || token !== prevToken));
+ }
+ return undefined;
+}
+exports.paginateListTypeVersions = paginateListTypeVersions;
+
+
+/***/ }),
+
+/***/ 60985:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.paginateListTypes = void 0;
+const CloudFormationClient_1 = __nccwpck_require__(10456);
+const ListTypesCommand_1 = __nccwpck_require__(53520);
+const makePagedClientRequest = async (client, input, ...args) => {
+ return await client.send(new ListTypesCommand_1.ListTypesCommand(input), ...args);
+};
+async function* paginateListTypes(config, input, ...additionalArguments) {
+ let token = config.startingToken || undefined;
+ let hasNext = true;
+ let page;
+ while (hasNext) {
+ input.NextToken = token;
+ input["MaxResults"] = config.pageSize;
+ if (config.client instanceof CloudFormationClient_1.CloudFormationClient) {
+ page = await makePagedClientRequest(config.client, input, ...additionalArguments);
+ }
+ else {
+ throw new Error("Invalid client, expected CloudFormation | CloudFormationClient");
+ }
+ yield page;
+ const prevToken = token;
+ token = page.NextToken;
+ hasNext = !!(token && (!config.stopOnSameToken || token !== prevToken));
+ }
+ return undefined;
+}
+exports.paginateListTypes = paginateListTypes;
+
+
+/***/ }),
+
+/***/ 69505:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+const tslib_1 = __nccwpck_require__(4351);
+tslib_1.__exportStar(__nccwpck_require__(36402), exports);
+tslib_1.__exportStar(__nccwpck_require__(17892), exports);
+tslib_1.__exportStar(__nccwpck_require__(22664), exports);
+tslib_1.__exportStar(__nccwpck_require__(95282), exports);
+tslib_1.__exportStar(__nccwpck_require__(95222), exports);
+tslib_1.__exportStar(__nccwpck_require__(80092), exports);
+tslib_1.__exportStar(__nccwpck_require__(13951), exports);
+tslib_1.__exportStar(__nccwpck_require__(34959), exports);
+tslib_1.__exportStar(__nccwpck_require__(12820), exports);
+tslib_1.__exportStar(__nccwpck_require__(22947), exports);
+tslib_1.__exportStar(__nccwpck_require__(10279), exports);
+tslib_1.__exportStar(__nccwpck_require__(57369), exports);
+tslib_1.__exportStar(__nccwpck_require__(12784), exports);
+tslib_1.__exportStar(__nccwpck_require__(8798), exports);
+tslib_1.__exportStar(__nccwpck_require__(52813), exports);
+tslib_1.__exportStar(__nccwpck_require__(61473), exports);
+tslib_1.__exportStar(__nccwpck_require__(60985), exports);
+
+
+/***/ }),
+
+/***/ 46110:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.se_ListStackSetOperationsCommand = exports.se_ListStackSetOperationResultsCommand = exports.se_ListStacksCommand = exports.se_ListStackResourcesCommand = exports.se_ListStackInstancesCommand = exports.se_ListStackInstanceResourceDriftsCommand = exports.se_ListImportsCommand = exports.se_ListExportsCommand = exports.se_ListChangeSetsCommand = exports.se_ImportStacksToStackSetCommand = exports.se_GetTemplateSummaryCommand = exports.se_GetTemplateCommand = exports.se_GetStackPolicyCommand = exports.se_ExecuteChangeSetCommand = exports.se_EstimateTemplateCostCommand = exports.se_DetectStackSetDriftCommand = exports.se_DetectStackResourceDriftCommand = exports.se_DetectStackDriftCommand = exports.se_DescribeTypeRegistrationCommand = exports.se_DescribeTypeCommand = exports.se_DescribeStackSetOperationCommand = exports.se_DescribeStackSetCommand = exports.se_DescribeStacksCommand = exports.se_DescribeStackResourcesCommand = exports.se_DescribeStackResourceDriftsCommand = exports.se_DescribeStackResourceCommand = exports.se_DescribeStackInstanceCommand = exports.se_DescribeStackEventsCommand = exports.se_DescribeStackDriftDetectionStatusCommand = exports.se_DescribePublisherCommand = exports.se_DescribeOrganizationsAccessCommand = exports.se_DescribeChangeSetHooksCommand = exports.se_DescribeChangeSetCommand = exports.se_DescribeAccountLimitsCommand = exports.se_DeregisterTypeCommand = exports.se_DeleteStackSetCommand = exports.se_DeleteStackInstancesCommand = exports.se_DeleteStackCommand = exports.se_DeleteChangeSetCommand = exports.se_DeactivateTypeCommand = exports.se_DeactivateOrganizationsAccessCommand = exports.se_CreateStackSetCommand = exports.se_CreateStackInstancesCommand = exports.se_CreateStackCommand = exports.se_CreateChangeSetCommand = exports.se_ContinueUpdateRollbackCommand = exports.se_CancelUpdateStackCommand = exports.se_BatchDescribeTypeConfigurationsCommand = exports.se_ActivateTypeCommand = exports.se_ActivateOrganizationsAccessCommand = void 0;
+exports.de_DescribeStackSetOperationCommand = exports.de_DescribeStackSetCommand = exports.de_DescribeStacksCommand = exports.de_DescribeStackResourcesCommand = exports.de_DescribeStackResourceDriftsCommand = exports.de_DescribeStackResourceCommand = exports.de_DescribeStackInstanceCommand = exports.de_DescribeStackEventsCommand = exports.de_DescribeStackDriftDetectionStatusCommand = exports.de_DescribePublisherCommand = exports.de_DescribeOrganizationsAccessCommand = exports.de_DescribeChangeSetHooksCommand = exports.de_DescribeChangeSetCommand = exports.de_DescribeAccountLimitsCommand = exports.de_DeregisterTypeCommand = exports.de_DeleteStackSetCommand = exports.de_DeleteStackInstancesCommand = exports.de_DeleteStackCommand = exports.de_DeleteChangeSetCommand = exports.de_DeactivateTypeCommand = exports.de_DeactivateOrganizationsAccessCommand = exports.de_CreateStackSetCommand = exports.de_CreateStackInstancesCommand = exports.de_CreateStackCommand = exports.de_CreateChangeSetCommand = exports.de_ContinueUpdateRollbackCommand = exports.de_CancelUpdateStackCommand = exports.de_BatchDescribeTypeConfigurationsCommand = exports.de_ActivateTypeCommand = exports.de_ActivateOrganizationsAccessCommand = exports.se_ValidateTemplateCommand = exports.se_UpdateTerminationProtectionCommand = exports.se_UpdateStackSetCommand = exports.se_UpdateStackInstancesCommand = exports.se_UpdateStackCommand = exports.se_TestTypeCommand = exports.se_StopStackSetOperationCommand = exports.se_SignalResourceCommand = exports.se_SetTypeDefaultVersionCommand = exports.se_SetTypeConfigurationCommand = exports.se_SetStackPolicyCommand = exports.se_RollbackStackCommand = exports.se_RegisterTypeCommand = exports.se_RegisterPublisherCommand = exports.se_RecordHandlerProgressCommand = exports.se_PublishTypeCommand = exports.se_ListTypeVersionsCommand = exports.se_ListTypesCommand = exports.se_ListTypeRegistrationsCommand = exports.se_ListStackSetsCommand = void 0;
+exports.de_ValidateTemplateCommand = exports.de_UpdateTerminationProtectionCommand = exports.de_UpdateStackSetCommand = exports.de_UpdateStackInstancesCommand = exports.de_UpdateStackCommand = exports.de_TestTypeCommand = exports.de_StopStackSetOperationCommand = exports.de_SignalResourceCommand = exports.de_SetTypeDefaultVersionCommand = exports.de_SetTypeConfigurationCommand = exports.de_SetStackPolicyCommand = exports.de_RollbackStackCommand = exports.de_RegisterTypeCommand = exports.de_RegisterPublisherCommand = exports.de_RecordHandlerProgressCommand = exports.de_PublishTypeCommand = exports.de_ListTypeVersionsCommand = exports.de_ListTypesCommand = exports.de_ListTypeRegistrationsCommand = exports.de_ListStackSetsCommand = exports.de_ListStackSetOperationsCommand = exports.de_ListStackSetOperationResultsCommand = exports.de_ListStacksCommand = exports.de_ListStackResourcesCommand = exports.de_ListStackInstancesCommand = exports.de_ListStackInstanceResourceDriftsCommand = exports.de_ListImportsCommand = exports.de_ListExportsCommand = exports.de_ListChangeSetsCommand = exports.de_ImportStacksToStackSetCommand = exports.de_GetTemplateSummaryCommand = exports.de_GetTemplateCommand = exports.de_GetStackPolicyCommand = exports.de_ExecuteChangeSetCommand = exports.de_EstimateTemplateCostCommand = exports.de_DetectStackSetDriftCommand = exports.de_DetectStackResourceDriftCommand = exports.de_DetectStackDriftCommand = exports.de_DescribeTypeRegistrationCommand = exports.de_DescribeTypeCommand = void 0;
+const protocol_http_1 = __nccwpck_require__(64418);
+const smithy_client_1 = __nccwpck_require__(63570);
+const fast_xml_parser_1 = __nccwpck_require__(12603);
+const uuid_1 = __nccwpck_require__(75840);
+const CloudFormationServiceException_1 = __nccwpck_require__(215);
+const models_0_1 = __nccwpck_require__(75378);
+const se_ActivateOrganizationsAccessCommand = async (input, context) => {
+ const headers = SHARED_HEADERS;
+ let body;
+ body = buildFormUrlencodedString({
+ ...se_ActivateOrganizationsAccessInput(input, context),
+ Action: "ActivateOrganizationsAccess",
+ Version: "2010-05-15",
+ });
+ return buildHttpRpcRequest(context, headers, "/", undefined, body);
+};
+exports.se_ActivateOrganizationsAccessCommand = se_ActivateOrganizationsAccessCommand;
+const se_ActivateTypeCommand = async (input, context) => {
+ const headers = SHARED_HEADERS;
+ let body;
+ body = buildFormUrlencodedString({
+ ...se_ActivateTypeInput(input, context),
+ Action: "ActivateType",
+ Version: "2010-05-15",
+ });
+ return buildHttpRpcRequest(context, headers, "/", undefined, body);
+};
+exports.se_ActivateTypeCommand = se_ActivateTypeCommand;
+const se_BatchDescribeTypeConfigurationsCommand = async (input, context) => {
+ const headers = SHARED_HEADERS;
+ let body;
+ body = buildFormUrlencodedString({
+ ...se_BatchDescribeTypeConfigurationsInput(input, context),
+ Action: "BatchDescribeTypeConfigurations",
+ Version: "2010-05-15",
+ });
+ return buildHttpRpcRequest(context, headers, "/", undefined, body);
+};
+exports.se_BatchDescribeTypeConfigurationsCommand = se_BatchDescribeTypeConfigurationsCommand;
+const se_CancelUpdateStackCommand = async (input, context) => {
+ const headers = SHARED_HEADERS;
+ let body;
+ body = buildFormUrlencodedString({
+ ...se_CancelUpdateStackInput(input, context),
+ Action: "CancelUpdateStack",
+ Version: "2010-05-15",
+ });
+ return buildHttpRpcRequest(context, headers, "/", undefined, body);
+};
+exports.se_CancelUpdateStackCommand = se_CancelUpdateStackCommand;
+const se_ContinueUpdateRollbackCommand = async (input, context) => {
+ const headers = SHARED_HEADERS;
+ let body;
+ body = buildFormUrlencodedString({
+ ...se_ContinueUpdateRollbackInput(input, context),
+ Action: "ContinueUpdateRollback",
+ Version: "2010-05-15",
+ });
+ return buildHttpRpcRequest(context, headers, "/", undefined, body);
+};
+exports.se_ContinueUpdateRollbackCommand = se_ContinueUpdateRollbackCommand;
+const se_CreateChangeSetCommand = async (input, context) => {
+ const headers = SHARED_HEADERS;
+ let body;
+ body = buildFormUrlencodedString({
+ ...se_CreateChangeSetInput(input, context),
+ Action: "CreateChangeSet",
+ Version: "2010-05-15",
+ });
+ return buildHttpRpcRequest(context, headers, "/", undefined, body);
+};
+exports.se_CreateChangeSetCommand = se_CreateChangeSetCommand;
+const se_CreateStackCommand = async (input, context) => {
+ const headers = SHARED_HEADERS;
+ let body;
+ body = buildFormUrlencodedString({
+ ...se_CreateStackInput(input, context),
+ Action: "CreateStack",
+ Version: "2010-05-15",
+ });
+ return buildHttpRpcRequest(context, headers, "/", undefined, body);
+};
+exports.se_CreateStackCommand = se_CreateStackCommand;
+const se_CreateStackInstancesCommand = async (input, context) => {
+ const headers = SHARED_HEADERS;
+ let body;
+ body = buildFormUrlencodedString({
+ ...se_CreateStackInstancesInput(input, context),
+ Action: "CreateStackInstances",
+ Version: "2010-05-15",
+ });
+ return buildHttpRpcRequest(context, headers, "/", undefined, body);
+};
+exports.se_CreateStackInstancesCommand = se_CreateStackInstancesCommand;
+const se_CreateStackSetCommand = async (input, context) => {
+ const headers = SHARED_HEADERS;
+ let body;
+ body = buildFormUrlencodedString({
+ ...se_CreateStackSetInput(input, context),
+ Action: "CreateStackSet",
+ Version: "2010-05-15",
+ });
+ return buildHttpRpcRequest(context, headers, "/", undefined, body);
+};
+exports.se_CreateStackSetCommand = se_CreateStackSetCommand;
+const se_DeactivateOrganizationsAccessCommand = async (input, context) => {
+ const headers = SHARED_HEADERS;
+ let body;
+ body = buildFormUrlencodedString({
+ ...se_DeactivateOrganizationsAccessInput(input, context),
+ Action: "DeactivateOrganizationsAccess",
+ Version: "2010-05-15",
+ });
+ return buildHttpRpcRequest(context, headers, "/", undefined, body);
+};
+exports.se_DeactivateOrganizationsAccessCommand = se_DeactivateOrganizationsAccessCommand;
+const se_DeactivateTypeCommand = async (input, context) => {
+ const headers = SHARED_HEADERS;
+ let body;
+ body = buildFormUrlencodedString({
+ ...se_DeactivateTypeInput(input, context),
+ Action: "DeactivateType",
+ Version: "2010-05-15",
+ });
+ return buildHttpRpcRequest(context, headers, "/", undefined, body);
+};
+exports.se_DeactivateTypeCommand = se_DeactivateTypeCommand;
+const se_DeleteChangeSetCommand = async (input, context) => {
+ const headers = SHARED_HEADERS;
+ let body;
+ body = buildFormUrlencodedString({
+ ...se_DeleteChangeSetInput(input, context),
+ Action: "DeleteChangeSet",
+ Version: "2010-05-15",
+ });
+ return buildHttpRpcRequest(context, headers, "/", undefined, body);
+};
+exports.se_DeleteChangeSetCommand = se_DeleteChangeSetCommand;
+const se_DeleteStackCommand = async (input, context) => {
+ const headers = SHARED_HEADERS;
+ let body;
+ body = buildFormUrlencodedString({
+ ...se_DeleteStackInput(input, context),
+ Action: "DeleteStack",
+ Version: "2010-05-15",
+ });
+ return buildHttpRpcRequest(context, headers, "/", undefined, body);
+};
+exports.se_DeleteStackCommand = se_DeleteStackCommand;
+const se_DeleteStackInstancesCommand = async (input, context) => {
+ const headers = SHARED_HEADERS;
+ let body;
+ body = buildFormUrlencodedString({
+ ...se_DeleteStackInstancesInput(input, context),
+ Action: "DeleteStackInstances",
+ Version: "2010-05-15",
+ });
+ return buildHttpRpcRequest(context, headers, "/", undefined, body);
+};
+exports.se_DeleteStackInstancesCommand = se_DeleteStackInstancesCommand;
+const se_DeleteStackSetCommand = async (input, context) => {
+ const headers = SHARED_HEADERS;
+ let body;
+ body = buildFormUrlencodedString({
+ ...se_DeleteStackSetInput(input, context),
+ Action: "DeleteStackSet",
+ Version: "2010-05-15",
+ });
+ return buildHttpRpcRequest(context, headers, "/", undefined, body);
+};
+exports.se_DeleteStackSetCommand = se_DeleteStackSetCommand;
+const se_DeregisterTypeCommand = async (input, context) => {
+ const headers = SHARED_HEADERS;
+ let body;
+ body = buildFormUrlencodedString({
+ ...se_DeregisterTypeInput(input, context),
+ Action: "DeregisterType",
+ Version: "2010-05-15",
+ });
+ return buildHttpRpcRequest(context, headers, "/", undefined, body);
+};
+exports.se_DeregisterTypeCommand = se_DeregisterTypeCommand;
+const se_DescribeAccountLimitsCommand = async (input, context) => {
+ const headers = SHARED_HEADERS;
+ let body;
+ body = buildFormUrlencodedString({
+ ...se_DescribeAccountLimitsInput(input, context),
+ Action: "DescribeAccountLimits",
+ Version: "2010-05-15",
+ });
+ return buildHttpRpcRequest(context, headers, "/", undefined, body);
+};
+exports.se_DescribeAccountLimitsCommand = se_DescribeAccountLimitsCommand;
+const se_DescribeChangeSetCommand = async (input, context) => {
+ const headers = SHARED_HEADERS;
+ let body;
+ body = buildFormUrlencodedString({
+ ...se_DescribeChangeSetInput(input, context),
+ Action: "DescribeChangeSet",
+ Version: "2010-05-15",
+ });
+ return buildHttpRpcRequest(context, headers, "/", undefined, body);
+};
+exports.se_DescribeChangeSetCommand = se_DescribeChangeSetCommand;
+const se_DescribeChangeSetHooksCommand = async (input, context) => {
+ const headers = SHARED_HEADERS;
+ let body;
+ body = buildFormUrlencodedString({
+ ...se_DescribeChangeSetHooksInput(input, context),
+ Action: "DescribeChangeSetHooks",
+ Version: "2010-05-15",
+ });
+ return buildHttpRpcRequest(context, headers, "/", undefined, body);
+};
+exports.se_DescribeChangeSetHooksCommand = se_DescribeChangeSetHooksCommand;
+const se_DescribeOrganizationsAccessCommand = async (input, context) => {
+ const headers = SHARED_HEADERS;
+ let body;
+ body = buildFormUrlencodedString({
+ ...se_DescribeOrganizationsAccessInput(input, context),
+ Action: "DescribeOrganizationsAccess",
+ Version: "2010-05-15",
+ });
+ return buildHttpRpcRequest(context, headers, "/", undefined, body);
+};
+exports.se_DescribeOrganizationsAccessCommand = se_DescribeOrganizationsAccessCommand;
+const se_DescribePublisherCommand = async (input, context) => {
+ const headers = SHARED_HEADERS;
+ let body;
+ body = buildFormUrlencodedString({
+ ...se_DescribePublisherInput(input, context),
+ Action: "DescribePublisher",
+ Version: "2010-05-15",
+ });
+ return buildHttpRpcRequest(context, headers, "/", undefined, body);
+};
+exports.se_DescribePublisherCommand = se_DescribePublisherCommand;
+const se_DescribeStackDriftDetectionStatusCommand = async (input, context) => {
+ const headers = SHARED_HEADERS;
+ let body;
+ body = buildFormUrlencodedString({
+ ...se_DescribeStackDriftDetectionStatusInput(input, context),
+ Action: "DescribeStackDriftDetectionStatus",
+ Version: "2010-05-15",
+ });
+ return buildHttpRpcRequest(context, headers, "/", undefined, body);
+};
+exports.se_DescribeStackDriftDetectionStatusCommand = se_DescribeStackDriftDetectionStatusCommand;
+const se_DescribeStackEventsCommand = async (input, context) => {
+ const headers = SHARED_HEADERS;
+ let body;
+ body = buildFormUrlencodedString({
+ ...se_DescribeStackEventsInput(input, context),
+ Action: "DescribeStackEvents",
+ Version: "2010-05-15",
+ });
+ return buildHttpRpcRequest(context, headers, "/", undefined, body);
+};
+exports.se_DescribeStackEventsCommand = se_DescribeStackEventsCommand;
+const se_DescribeStackInstanceCommand = async (input, context) => {
+ const headers = SHARED_HEADERS;
+ let body;
+ body = buildFormUrlencodedString({
+ ...se_DescribeStackInstanceInput(input, context),
+ Action: "DescribeStackInstance",
+ Version: "2010-05-15",
+ });
+ return buildHttpRpcRequest(context, headers, "/", undefined, body);
+};
+exports.se_DescribeStackInstanceCommand = se_DescribeStackInstanceCommand;
+const se_DescribeStackResourceCommand = async (input, context) => {
+ const headers = SHARED_HEADERS;
+ let body;
+ body = buildFormUrlencodedString({
+ ...se_DescribeStackResourceInput(input, context),
+ Action: "DescribeStackResource",
+ Version: "2010-05-15",
+ });
+ return buildHttpRpcRequest(context, headers, "/", undefined, body);
+};
+exports.se_DescribeStackResourceCommand = se_DescribeStackResourceCommand;
+const se_DescribeStackResourceDriftsCommand = async (input, context) => {
+ const headers = SHARED_HEADERS;
+ let body;
+ body = buildFormUrlencodedString({
+ ...se_DescribeStackResourceDriftsInput(input, context),
+ Action: "DescribeStackResourceDrifts",
+ Version: "2010-05-15",
+ });
+ return buildHttpRpcRequest(context, headers, "/", undefined, body);
+};
+exports.se_DescribeStackResourceDriftsCommand = se_DescribeStackResourceDriftsCommand;
+const se_DescribeStackResourcesCommand = async (input, context) => {
+ const headers = SHARED_HEADERS;
+ let body;
+ body = buildFormUrlencodedString({
+ ...se_DescribeStackResourcesInput(input, context),
+ Action: "DescribeStackResources",
+ Version: "2010-05-15",
+ });
+ return buildHttpRpcRequest(context, headers, "/", undefined, body);
+};
+exports.se_DescribeStackResourcesCommand = se_DescribeStackResourcesCommand;
+const se_DescribeStacksCommand = async (input, context) => {
+ const headers = SHARED_HEADERS;
+ let body;
+ body = buildFormUrlencodedString({
+ ...se_DescribeStacksInput(input, context),
+ Action: "DescribeStacks",
+ Version: "2010-05-15",
+ });
+ return buildHttpRpcRequest(context, headers, "/", undefined, body);
+};
+exports.se_DescribeStacksCommand = se_DescribeStacksCommand;
+const se_DescribeStackSetCommand = async (input, context) => {
+ const headers = SHARED_HEADERS;
+ let body;
+ body = buildFormUrlencodedString({
+ ...se_DescribeStackSetInput(input, context),
+ Action: "DescribeStackSet",
+ Version: "2010-05-15",
+ });
+ return buildHttpRpcRequest(context, headers, "/", undefined, body);
+};
+exports.se_DescribeStackSetCommand = se_DescribeStackSetCommand;
+const se_DescribeStackSetOperationCommand = async (input, context) => {
+ const headers = SHARED_HEADERS;
+ let body;
+ body = buildFormUrlencodedString({
+ ...se_DescribeStackSetOperationInput(input, context),
+ Action: "DescribeStackSetOperation",
+ Version: "2010-05-15",
+ });
+ return buildHttpRpcRequest(context, headers, "/", undefined, body);
+};
+exports.se_DescribeStackSetOperationCommand = se_DescribeStackSetOperationCommand;
+const se_DescribeTypeCommand = async (input, context) => {
+ const headers = SHARED_HEADERS;
+ let body;
+ body = buildFormUrlencodedString({
+ ...se_DescribeTypeInput(input, context),
+ Action: "DescribeType",
+ Version: "2010-05-15",
+ });
+ return buildHttpRpcRequest(context, headers, "/", undefined, body);
+};
+exports.se_DescribeTypeCommand = se_DescribeTypeCommand;
+const se_DescribeTypeRegistrationCommand = async (input, context) => {
+ const headers = SHARED_HEADERS;
+ let body;
+ body = buildFormUrlencodedString({
+ ...se_DescribeTypeRegistrationInput(input, context),
+ Action: "DescribeTypeRegistration",
+ Version: "2010-05-15",
+ });
+ return buildHttpRpcRequest(context, headers, "/", undefined, body);
+};
+exports.se_DescribeTypeRegistrationCommand = se_DescribeTypeRegistrationCommand;
+const se_DetectStackDriftCommand = async (input, context) => {
+ const headers = SHARED_HEADERS;
+ let body;
+ body = buildFormUrlencodedString({
+ ...se_DetectStackDriftInput(input, context),
+ Action: "DetectStackDrift",
+ Version: "2010-05-15",
+ });
+ return buildHttpRpcRequest(context, headers, "/", undefined, body);
+};
+exports.se_DetectStackDriftCommand = se_DetectStackDriftCommand;
+const se_DetectStackResourceDriftCommand = async (input, context) => {
+ const headers = SHARED_HEADERS;
+ let body;
+ body = buildFormUrlencodedString({
+ ...se_DetectStackResourceDriftInput(input, context),
+ Action: "DetectStackResourceDrift",
+ Version: "2010-05-15",
+ });
+ return buildHttpRpcRequest(context, headers, "/", undefined, body);
+};
+exports.se_DetectStackResourceDriftCommand = se_DetectStackResourceDriftCommand;
+const se_DetectStackSetDriftCommand = async (input, context) => {
+ const headers = SHARED_HEADERS;
+ let body;
+ body = buildFormUrlencodedString({
+ ...se_DetectStackSetDriftInput(input, context),
+ Action: "DetectStackSetDrift",
+ Version: "2010-05-15",
+ });
+ return buildHttpRpcRequest(context, headers, "/", undefined, body);
+};
+exports.se_DetectStackSetDriftCommand = se_DetectStackSetDriftCommand;
+const se_EstimateTemplateCostCommand = async (input, context) => {
+ const headers = SHARED_HEADERS;
+ let body;
+ body = buildFormUrlencodedString({
+ ...se_EstimateTemplateCostInput(input, context),
+ Action: "EstimateTemplateCost",
+ Version: "2010-05-15",
+ });
+ return buildHttpRpcRequest(context, headers, "/", undefined, body);
+};
+exports.se_EstimateTemplateCostCommand = se_EstimateTemplateCostCommand;
+const se_ExecuteChangeSetCommand = async (input, context) => {
+ const headers = SHARED_HEADERS;
+ let body;
+ body = buildFormUrlencodedString({
+ ...se_ExecuteChangeSetInput(input, context),
+ Action: "ExecuteChangeSet",
+ Version: "2010-05-15",
+ });
+ return buildHttpRpcRequest(context, headers, "/", undefined, body);
+};
+exports.se_ExecuteChangeSetCommand = se_ExecuteChangeSetCommand;
+const se_GetStackPolicyCommand = async (input, context) => {
+ const headers = SHARED_HEADERS;
+ let body;
+ body = buildFormUrlencodedString({
+ ...se_GetStackPolicyInput(input, context),
+ Action: "GetStackPolicy",
+ Version: "2010-05-15",
+ });
+ return buildHttpRpcRequest(context, headers, "/", undefined, body);
+};
+exports.se_GetStackPolicyCommand = se_GetStackPolicyCommand;
+const se_GetTemplateCommand = async (input, context) => {
+ const headers = SHARED_HEADERS;
+ let body;
+ body = buildFormUrlencodedString({
+ ...se_GetTemplateInput(input, context),
+ Action: "GetTemplate",
+ Version: "2010-05-15",
+ });
+ return buildHttpRpcRequest(context, headers, "/", undefined, body);
+};
+exports.se_GetTemplateCommand = se_GetTemplateCommand;
+const se_GetTemplateSummaryCommand = async (input, context) => {
+ const headers = SHARED_HEADERS;
+ let body;
+ body = buildFormUrlencodedString({
+ ...se_GetTemplateSummaryInput(input, context),
+ Action: "GetTemplateSummary",
+ Version: "2010-05-15",
+ });
+ return buildHttpRpcRequest(context, headers, "/", undefined, body);
+};
+exports.se_GetTemplateSummaryCommand = se_GetTemplateSummaryCommand;
+const se_ImportStacksToStackSetCommand = async (input, context) => {
+ const headers = SHARED_HEADERS;
+ let body;
+ body = buildFormUrlencodedString({
+ ...se_ImportStacksToStackSetInput(input, context),
+ Action: "ImportStacksToStackSet",
+ Version: "2010-05-15",
+ });
+ return buildHttpRpcRequest(context, headers, "/", undefined, body);
+};
+exports.se_ImportStacksToStackSetCommand = se_ImportStacksToStackSetCommand;
+const se_ListChangeSetsCommand = async (input, context) => {
+ const headers = SHARED_HEADERS;
+ let body;
+ body = buildFormUrlencodedString({
+ ...se_ListChangeSetsInput(input, context),
+ Action: "ListChangeSets",
+ Version: "2010-05-15",
+ });
+ return buildHttpRpcRequest(context, headers, "/", undefined, body);
+};
+exports.se_ListChangeSetsCommand = se_ListChangeSetsCommand;
+const se_ListExportsCommand = async (input, context) => {
+ const headers = SHARED_HEADERS;
+ let body;
+ body = buildFormUrlencodedString({
+ ...se_ListExportsInput(input, context),
+ Action: "ListExports",
+ Version: "2010-05-15",
+ });
+ return buildHttpRpcRequest(context, headers, "/", undefined, body);
+};
+exports.se_ListExportsCommand = se_ListExportsCommand;
+const se_ListImportsCommand = async (input, context) => {
+ const headers = SHARED_HEADERS;
+ let body;
+ body = buildFormUrlencodedString({
+ ...se_ListImportsInput(input, context),
+ Action: "ListImports",
+ Version: "2010-05-15",
+ });
+ return buildHttpRpcRequest(context, headers, "/", undefined, body);
+};
+exports.se_ListImportsCommand = se_ListImportsCommand;
+const se_ListStackInstanceResourceDriftsCommand = async (input, context) => {
+ const headers = SHARED_HEADERS;
+ let body;
+ body = buildFormUrlencodedString({
+ ...se_ListStackInstanceResourceDriftsInput(input, context),
+ Action: "ListStackInstanceResourceDrifts",
+ Version: "2010-05-15",
+ });
+ return buildHttpRpcRequest(context, headers, "/", undefined, body);
+};
+exports.se_ListStackInstanceResourceDriftsCommand = se_ListStackInstanceResourceDriftsCommand;
+const se_ListStackInstancesCommand = async (input, context) => {
+ const headers = SHARED_HEADERS;
+ let body;
+ body = buildFormUrlencodedString({
+ ...se_ListStackInstancesInput(input, context),
+ Action: "ListStackInstances",
+ Version: "2010-05-15",
+ });
+ return buildHttpRpcRequest(context, headers, "/", undefined, body);
+};
+exports.se_ListStackInstancesCommand = se_ListStackInstancesCommand;
+const se_ListStackResourcesCommand = async (input, context) => {
+ const headers = SHARED_HEADERS;
+ let body;
+ body = buildFormUrlencodedString({
+ ...se_ListStackResourcesInput(input, context),
+ Action: "ListStackResources",
+ Version: "2010-05-15",
+ });
+ return buildHttpRpcRequest(context, headers, "/", undefined, body);
+};
+exports.se_ListStackResourcesCommand = se_ListStackResourcesCommand;
+const se_ListStacksCommand = async (input, context) => {
+ const headers = SHARED_HEADERS;
+ let body;
+ body = buildFormUrlencodedString({
+ ...se_ListStacksInput(input, context),
+ Action: "ListStacks",
+ Version: "2010-05-15",
+ });
+ return buildHttpRpcRequest(context, headers, "/", undefined, body);
+};
+exports.se_ListStacksCommand = se_ListStacksCommand;
+const se_ListStackSetOperationResultsCommand = async (input, context) => {
+ const headers = SHARED_HEADERS;
+ let body;
+ body = buildFormUrlencodedString({
+ ...se_ListStackSetOperationResultsInput(input, context),
+ Action: "ListStackSetOperationResults",
+ Version: "2010-05-15",
+ });
+ return buildHttpRpcRequest(context, headers, "/", undefined, body);
+};
+exports.se_ListStackSetOperationResultsCommand = se_ListStackSetOperationResultsCommand;
+const se_ListStackSetOperationsCommand = async (input, context) => {
+ const headers = SHARED_HEADERS;
+ let body;
+ body = buildFormUrlencodedString({
+ ...se_ListStackSetOperationsInput(input, context),
+ Action: "ListStackSetOperations",
+ Version: "2010-05-15",
+ });
+ return buildHttpRpcRequest(context, headers, "/", undefined, body);
+};
+exports.se_ListStackSetOperationsCommand = se_ListStackSetOperationsCommand;
+const se_ListStackSetsCommand = async (input, context) => {
+ const headers = SHARED_HEADERS;
+ let body;
+ body = buildFormUrlencodedString({
+ ...se_ListStackSetsInput(input, context),
+ Action: "ListStackSets",
+ Version: "2010-05-15",
+ });
+ return buildHttpRpcRequest(context, headers, "/", undefined, body);
+};
+exports.se_ListStackSetsCommand = se_ListStackSetsCommand;
+const se_ListTypeRegistrationsCommand = async (input, context) => {
+ const headers = SHARED_HEADERS;
+ let body;
+ body = buildFormUrlencodedString({
+ ...se_ListTypeRegistrationsInput(input, context),
+ Action: "ListTypeRegistrations",
+ Version: "2010-05-15",
+ });
+ return buildHttpRpcRequest(context, headers, "/", undefined, body);
+};
+exports.se_ListTypeRegistrationsCommand = se_ListTypeRegistrationsCommand;
+const se_ListTypesCommand = async (input, context) => {
+ const headers = SHARED_HEADERS;
+ let body;
+ body = buildFormUrlencodedString({
+ ...se_ListTypesInput(input, context),
+ Action: "ListTypes",
+ Version: "2010-05-15",
+ });
+ return buildHttpRpcRequest(context, headers, "/", undefined, body);
+};
+exports.se_ListTypesCommand = se_ListTypesCommand;
+const se_ListTypeVersionsCommand = async (input, context) => {
+ const headers = SHARED_HEADERS;
+ let body;
+ body = buildFormUrlencodedString({
+ ...se_ListTypeVersionsInput(input, context),
+ Action: "ListTypeVersions",
+ Version: "2010-05-15",
+ });
+ return buildHttpRpcRequest(context, headers, "/", undefined, body);
+};
+exports.se_ListTypeVersionsCommand = se_ListTypeVersionsCommand;
+const se_PublishTypeCommand = async (input, context) => {
+ const headers = SHARED_HEADERS;
+ let body;
+ body = buildFormUrlencodedString({
+ ...se_PublishTypeInput(input, context),
+ Action: "PublishType",
+ Version: "2010-05-15",
+ });
+ return buildHttpRpcRequest(context, headers, "/", undefined, body);
+};
+exports.se_PublishTypeCommand = se_PublishTypeCommand;
+const se_RecordHandlerProgressCommand = async (input, context) => {
+ const headers = SHARED_HEADERS;
+ let body;
+ body = buildFormUrlencodedString({
+ ...se_RecordHandlerProgressInput(input, context),
+ Action: "RecordHandlerProgress",
+ Version: "2010-05-15",
+ });
+ return buildHttpRpcRequest(context, headers, "/", undefined, body);
+};
+exports.se_RecordHandlerProgressCommand = se_RecordHandlerProgressCommand;
+const se_RegisterPublisherCommand = async (input, context) => {
+ const headers = SHARED_HEADERS;
+ let body;
+ body = buildFormUrlencodedString({
+ ...se_RegisterPublisherInput(input, context),
+ Action: "RegisterPublisher",
+ Version: "2010-05-15",
+ });
+ return buildHttpRpcRequest(context, headers, "/", undefined, body);
+};
+exports.se_RegisterPublisherCommand = se_RegisterPublisherCommand;
+const se_RegisterTypeCommand = async (input, context) => {
+ const headers = SHARED_HEADERS;
+ let body;
+ body = buildFormUrlencodedString({
+ ...se_RegisterTypeInput(input, context),
+ Action: "RegisterType",
+ Version: "2010-05-15",
+ });
+ return buildHttpRpcRequest(context, headers, "/", undefined, body);
+};
+exports.se_RegisterTypeCommand = se_RegisterTypeCommand;
+const se_RollbackStackCommand = async (input, context) => {
+ const headers = SHARED_HEADERS;
+ let body;
+ body = buildFormUrlencodedString({
+ ...se_RollbackStackInput(input, context),
+ Action: "RollbackStack",
+ Version: "2010-05-15",
+ });
+ return buildHttpRpcRequest(context, headers, "/", undefined, body);
+};
+exports.se_RollbackStackCommand = se_RollbackStackCommand;
+const se_SetStackPolicyCommand = async (input, context) => {
+ const headers = SHARED_HEADERS;
+ let body;
+ body = buildFormUrlencodedString({
+ ...se_SetStackPolicyInput(input, context),
+ Action: "SetStackPolicy",
+ Version: "2010-05-15",
+ });
+ return buildHttpRpcRequest(context, headers, "/", undefined, body);
+};
+exports.se_SetStackPolicyCommand = se_SetStackPolicyCommand;
+const se_SetTypeConfigurationCommand = async (input, context) => {
+ const headers = SHARED_HEADERS;
+ let body;
+ body = buildFormUrlencodedString({
+ ...se_SetTypeConfigurationInput(input, context),
+ Action: "SetTypeConfiguration",
+ Version: "2010-05-15",
+ });
+ return buildHttpRpcRequest(context, headers, "/", undefined, body);
+};
+exports.se_SetTypeConfigurationCommand = se_SetTypeConfigurationCommand;
+const se_SetTypeDefaultVersionCommand = async (input, context) => {
+ const headers = SHARED_HEADERS;
+ let body;
+ body = buildFormUrlencodedString({
+ ...se_SetTypeDefaultVersionInput(input, context),
+ Action: "SetTypeDefaultVersion",
+ Version: "2010-05-15",
+ });
+ return buildHttpRpcRequest(context, headers, "/", undefined, body);
+};
+exports.se_SetTypeDefaultVersionCommand = se_SetTypeDefaultVersionCommand;
+const se_SignalResourceCommand = async (input, context) => {
+ const headers = SHARED_HEADERS;
+ let body;
+ body = buildFormUrlencodedString({
+ ...se_SignalResourceInput(input, context),
+ Action: "SignalResource",
+ Version: "2010-05-15",
+ });
+ return buildHttpRpcRequest(context, headers, "/", undefined, body);
+};
+exports.se_SignalResourceCommand = se_SignalResourceCommand;
+const se_StopStackSetOperationCommand = async (input, context) => {
+ const headers = SHARED_HEADERS;
+ let body;
+ body = buildFormUrlencodedString({
+ ...se_StopStackSetOperationInput(input, context),
+ Action: "StopStackSetOperation",
+ Version: "2010-05-15",
+ });
+ return buildHttpRpcRequest(context, headers, "/", undefined, body);
+};
+exports.se_StopStackSetOperationCommand = se_StopStackSetOperationCommand;
+const se_TestTypeCommand = async (input, context) => {
+ const headers = SHARED_HEADERS;
+ let body;
+ body = buildFormUrlencodedString({
+ ...se_TestTypeInput(input, context),
+ Action: "TestType",
+ Version: "2010-05-15",
+ });
+ return buildHttpRpcRequest(context, headers, "/", undefined, body);
+};
+exports.se_TestTypeCommand = se_TestTypeCommand;
+const se_UpdateStackCommand = async (input, context) => {
+ const headers = SHARED_HEADERS;
+ let body;
+ body = buildFormUrlencodedString({
+ ...se_UpdateStackInput(input, context),
+ Action: "UpdateStack",
+ Version: "2010-05-15",
+ });
+ return buildHttpRpcRequest(context, headers, "/", undefined, body);
+};
+exports.se_UpdateStackCommand = se_UpdateStackCommand;
+const se_UpdateStackInstancesCommand = async (input, context) => {
+ const headers = SHARED_HEADERS;
+ let body;
+ body = buildFormUrlencodedString({
+ ...se_UpdateStackInstancesInput(input, context),
+ Action: "UpdateStackInstances",
+ Version: "2010-05-15",
+ });
+ return buildHttpRpcRequest(context, headers, "/", undefined, body);
+};
+exports.se_UpdateStackInstancesCommand = se_UpdateStackInstancesCommand;
+const se_UpdateStackSetCommand = async (input, context) => {
+ const headers = SHARED_HEADERS;
+ let body;
+ body = buildFormUrlencodedString({
+ ...se_UpdateStackSetInput(input, context),
+ Action: "UpdateStackSet",
+ Version: "2010-05-15",
+ });
+ return buildHttpRpcRequest(context, headers, "/", undefined, body);
+};
+exports.se_UpdateStackSetCommand = se_UpdateStackSetCommand;
+const se_UpdateTerminationProtectionCommand = async (input, context) => {
+ const headers = SHARED_HEADERS;
+ let body;
+ body = buildFormUrlencodedString({
+ ...se_UpdateTerminationProtectionInput(input, context),
+ Action: "UpdateTerminationProtection",
+ Version: "2010-05-15",
+ });
+ return buildHttpRpcRequest(context, headers, "/", undefined, body);
+};
+exports.se_UpdateTerminationProtectionCommand = se_UpdateTerminationProtectionCommand;
+const se_ValidateTemplateCommand = async (input, context) => {
+ const headers = SHARED_HEADERS;
+ let body;
+ body = buildFormUrlencodedString({
+ ...se_ValidateTemplateInput(input, context),
+ Action: "ValidateTemplate",
+ Version: "2010-05-15",
+ });
+ return buildHttpRpcRequest(context, headers, "/", undefined, body);
+};
+exports.se_ValidateTemplateCommand = se_ValidateTemplateCommand;
+const de_ActivateOrganizationsAccessCommand = async (output, context) => {
+ if (output.statusCode >= 300) {
+ return de_ActivateOrganizationsAccessCommandError(output, context);
+ }
+ const data = await parseBody(output.body, context);
+ let contents = {};
+ contents = de_ActivateOrganizationsAccessOutput(data.ActivateOrganizationsAccessResult, context);
+ const response = {
+ $metadata: deserializeMetadata(output),
+ ...contents,
+ };
+ return response;
+};
+exports.de_ActivateOrganizationsAccessCommand = de_ActivateOrganizationsAccessCommand;
+const de_ActivateOrganizationsAccessCommandError = async (output, context) => {
+ const parsedOutput = {
+ ...output,
+ body: await parseErrorBody(output.body, context),
+ };
+ const errorCode = loadQueryErrorCode(output, parsedOutput.body);
+ switch (errorCode) {
+ case "InvalidOperationException":
+ case "com.amazonaws.cloudformation#InvalidOperationException":
+ throw await de_InvalidOperationExceptionRes(parsedOutput, context);
+ case "OperationNotFoundException":
+ case "com.amazonaws.cloudformation#OperationNotFoundException":
+ throw await de_OperationNotFoundExceptionRes(parsedOutput, context);
+ default:
+ const parsedBody = parsedOutput.body;
+ return throwDefaultError({
+ output,
+ parsedBody: parsedBody.Error,
+ errorCode,
+ });
+ }
+};
+const de_ActivateTypeCommand = async (output, context) => {
+ if (output.statusCode >= 300) {
+ return de_ActivateTypeCommandError(output, context);
+ }
+ const data = await parseBody(output.body, context);
+ let contents = {};
+ contents = de_ActivateTypeOutput(data.ActivateTypeResult, context);
+ const response = {
+ $metadata: deserializeMetadata(output),
+ ...contents,
+ };
+ return response;
+};
+exports.de_ActivateTypeCommand = de_ActivateTypeCommand;
+const de_ActivateTypeCommandError = async (output, context) => {
+ const parsedOutput = {
+ ...output,
+ body: await parseErrorBody(output.body, context),
+ };
+ const errorCode = loadQueryErrorCode(output, parsedOutput.body);
+ switch (errorCode) {
+ case "CFNRegistryException":
+ case "com.amazonaws.cloudformation#CFNRegistryException":
+ throw await de_CFNRegistryExceptionRes(parsedOutput, context);
+ case "TypeNotFoundException":
+ case "com.amazonaws.cloudformation#TypeNotFoundException":
+ throw await de_TypeNotFoundExceptionRes(parsedOutput, context);
+ default:
+ const parsedBody = parsedOutput.body;
+ return throwDefaultError({
+ output,
+ parsedBody: parsedBody.Error,
+ errorCode,
+ });
+ }
+};
+const de_BatchDescribeTypeConfigurationsCommand = async (output, context) => {
+ if (output.statusCode >= 300) {
+ return de_BatchDescribeTypeConfigurationsCommandError(output, context);
+ }
+ const data = await parseBody(output.body, context);
+ let contents = {};
+ contents = de_BatchDescribeTypeConfigurationsOutput(data.BatchDescribeTypeConfigurationsResult, context);
+ const response = {
+ $metadata: deserializeMetadata(output),
+ ...contents,
+ };
+ return response;
+};
+exports.de_BatchDescribeTypeConfigurationsCommand = de_BatchDescribeTypeConfigurationsCommand;
+const de_BatchDescribeTypeConfigurationsCommandError = async (output, context) => {
+ const parsedOutput = {
+ ...output,
+ body: await parseErrorBody(output.body, context),
+ };
+ const errorCode = loadQueryErrorCode(output, parsedOutput.body);
+ switch (errorCode) {
+ case "CFNRegistryException":
+ case "com.amazonaws.cloudformation#CFNRegistryException":
+ throw await de_CFNRegistryExceptionRes(parsedOutput, context);
+ case "TypeConfigurationNotFoundException":
+ case "com.amazonaws.cloudformation#TypeConfigurationNotFoundException":
+ throw await de_TypeConfigurationNotFoundExceptionRes(parsedOutput, context);
+ default:
+ const parsedBody = parsedOutput.body;
+ return throwDefaultError({
+ output,
+ parsedBody: parsedBody.Error,
+ errorCode,
+ });
+ }
+};
+const de_CancelUpdateStackCommand = async (output, context) => {
+ if (output.statusCode >= 300) {
+ return de_CancelUpdateStackCommandError(output, context);
+ }
+ await (0, smithy_client_1.collectBody)(output.body, context);
+ const response = {
+ $metadata: deserializeMetadata(output),
+ };
+ return response;
+};
+exports.de_CancelUpdateStackCommand = de_CancelUpdateStackCommand;
+const de_CancelUpdateStackCommandError = async (output, context) => {
+ const parsedOutput = {
+ ...output,
+ body: await parseErrorBody(output.body, context),
+ };
+ const errorCode = loadQueryErrorCode(output, parsedOutput.body);
+ switch (errorCode) {
+ case "TokenAlreadyExistsException":
+ case "com.amazonaws.cloudformation#TokenAlreadyExistsException":
+ throw await de_TokenAlreadyExistsExceptionRes(parsedOutput, context);
+ default:
+ const parsedBody = parsedOutput.body;
+ return throwDefaultError({
+ output,
+ parsedBody: parsedBody.Error,
+ errorCode,
+ });
+ }
+};
+const de_ContinueUpdateRollbackCommand = async (output, context) => {
+ if (output.statusCode >= 300) {
+ return de_ContinueUpdateRollbackCommandError(output, context);
+ }
+ const data = await parseBody(output.body, context);
+ let contents = {};
+ contents = de_ContinueUpdateRollbackOutput(data.ContinueUpdateRollbackResult, context);
+ const response = {
+ $metadata: deserializeMetadata(output),
+ ...contents,
+ };
+ return response;
+};
+exports.de_ContinueUpdateRollbackCommand = de_ContinueUpdateRollbackCommand;
+const de_ContinueUpdateRollbackCommandError = async (output, context) => {
+ const parsedOutput = {
+ ...output,
+ body: await parseErrorBody(output.body, context),
+ };
+ const errorCode = loadQueryErrorCode(output, parsedOutput.body);
+ switch (errorCode) {
+ case "TokenAlreadyExistsException":
+ case "com.amazonaws.cloudformation#TokenAlreadyExistsException":
+ throw await de_TokenAlreadyExistsExceptionRes(parsedOutput, context);
+ default:
+ const parsedBody = parsedOutput.body;
+ return throwDefaultError({
+ output,
+ parsedBody: parsedBody.Error,
+ errorCode,
+ });
+ }
+};
+const de_CreateChangeSetCommand = async (output, context) => {
+ if (output.statusCode >= 300) {
+ return de_CreateChangeSetCommandError(output, context);
+ }
+ const data = await parseBody(output.body, context);
+ let contents = {};
+ contents = de_CreateChangeSetOutput(data.CreateChangeSetResult, context);
+ const response = {
+ $metadata: deserializeMetadata(output),
+ ...contents,
+ };
+ return response;
+};
+exports.de_CreateChangeSetCommand = de_CreateChangeSetCommand;
+const de_CreateChangeSetCommandError = async (output, context) => {
+ const parsedOutput = {
+ ...output,
+ body: await parseErrorBody(output.body, context),
+ };
+ const errorCode = loadQueryErrorCode(output, parsedOutput.body);
+ switch (errorCode) {
+ case "AlreadyExistsException":
+ case "com.amazonaws.cloudformation#AlreadyExistsException":
+ throw await de_AlreadyExistsExceptionRes(parsedOutput, context);
+ case "InsufficientCapabilitiesException":
+ case "com.amazonaws.cloudformation#InsufficientCapabilitiesException":
+ throw await de_InsufficientCapabilitiesExceptionRes(parsedOutput, context);
+ case "LimitExceededException":
+ case "com.amazonaws.cloudformation#LimitExceededException":
+ throw await de_LimitExceededExceptionRes(parsedOutput, context);
+ default:
+ const parsedBody = parsedOutput.body;
+ return throwDefaultError({
+ output,
+ parsedBody: parsedBody.Error,
+ errorCode,
+ });
+ }
+};
+const de_CreateStackCommand = async (output, context) => {
+ if (output.statusCode >= 300) {
+ return de_CreateStackCommandError(output, context);
+ }
+ const data = await parseBody(output.body, context);
+ let contents = {};
+ contents = de_CreateStackOutput(data.CreateStackResult, context);
+ const response = {
+ $metadata: deserializeMetadata(output),
+ ...contents,
+ };
+ return response;
+};
+exports.de_CreateStackCommand = de_CreateStackCommand;
+const de_CreateStackCommandError = async (output, context) => {
+ const parsedOutput = {
+ ...output,
+ body: await parseErrorBody(output.body, context),
+ };
+ const errorCode = loadQueryErrorCode(output, parsedOutput.body);
+ switch (errorCode) {
+ case "AlreadyExistsException":
+ case "com.amazonaws.cloudformation#AlreadyExistsException":
+ throw await de_AlreadyExistsExceptionRes(parsedOutput, context);
+ case "InsufficientCapabilitiesException":
+ case "com.amazonaws.cloudformation#InsufficientCapabilitiesException":
+ throw await de_InsufficientCapabilitiesExceptionRes(parsedOutput, context);
+ case "LimitExceededException":
+ case "com.amazonaws.cloudformation#LimitExceededException":
+ throw await de_LimitExceededExceptionRes(parsedOutput, context);
+ case "TokenAlreadyExistsException":
+ case "com.amazonaws.cloudformation#TokenAlreadyExistsException":
+ throw await de_TokenAlreadyExistsExceptionRes(parsedOutput, context);
+ default:
+ const parsedBody = parsedOutput.body;
+ return throwDefaultError({
+ output,
+ parsedBody: parsedBody.Error,
+ errorCode,
+ });
+ }
+};
+const de_CreateStackInstancesCommand = async (output, context) => {
+ if (output.statusCode >= 300) {
+ return de_CreateStackInstancesCommandError(output, context);
+ }
+ const data = await parseBody(output.body, context);
+ let contents = {};
+ contents = de_CreateStackInstancesOutput(data.CreateStackInstancesResult, context);
+ const response = {
+ $metadata: deserializeMetadata(output),
+ ...contents,
+ };
+ return response;
+};
+exports.de_CreateStackInstancesCommand = de_CreateStackInstancesCommand;
+const de_CreateStackInstancesCommandError = async (output, context) => {
+ const parsedOutput = {
+ ...output,
+ body: await parseErrorBody(output.body, context),
+ };
+ const errorCode = loadQueryErrorCode(output, parsedOutput.body);
+ switch (errorCode) {
+ case "InvalidOperationException":
+ case "com.amazonaws.cloudformation#InvalidOperationException":
+ throw await de_InvalidOperationExceptionRes(parsedOutput, context);
+ case "LimitExceededException":
+ case "com.amazonaws.cloudformation#LimitExceededException":
+ throw await de_LimitExceededExceptionRes(parsedOutput, context);
+ case "OperationIdAlreadyExistsException":
+ case "com.amazonaws.cloudformation#OperationIdAlreadyExistsException":
+ throw await de_OperationIdAlreadyExistsExceptionRes(parsedOutput, context);
+ case "OperationInProgressException":
+ case "com.amazonaws.cloudformation#OperationInProgressException":
+ throw await de_OperationInProgressExceptionRes(parsedOutput, context);
+ case "StackSetNotFoundException":
+ case "com.amazonaws.cloudformation#StackSetNotFoundException":
+ throw await de_StackSetNotFoundExceptionRes(parsedOutput, context);
+ case "StaleRequestException":
+ case "com.amazonaws.cloudformation#StaleRequestException":
+ throw await de_StaleRequestExceptionRes(parsedOutput, context);
+ default:
+ const parsedBody = parsedOutput.body;
+ return throwDefaultError({
+ output,
+ parsedBody: parsedBody.Error,
+ errorCode,
+ });
+ }
+};
+const de_CreateStackSetCommand = async (output, context) => {
+ if (output.statusCode >= 300) {
+ return de_CreateStackSetCommandError(output, context);
+ }
+ const data = await parseBody(output.body, context);
+ let contents = {};
+ contents = de_CreateStackSetOutput(data.CreateStackSetResult, context);
+ const response = {
+ $metadata: deserializeMetadata(output),
+ ...contents,
+ };
+ return response;
+};
+exports.de_CreateStackSetCommand = de_CreateStackSetCommand;
+const de_CreateStackSetCommandError = async (output, context) => {
+ const parsedOutput = {
+ ...output,
+ body: await parseErrorBody(output.body, context),
+ };
+ const errorCode = loadQueryErrorCode(output, parsedOutput.body);
+ switch (errorCode) {
+ case "CreatedButModifiedException":
+ case "com.amazonaws.cloudformation#CreatedButModifiedException":
+ throw await de_CreatedButModifiedExceptionRes(parsedOutput, context);
+ case "LimitExceededException":
+ case "com.amazonaws.cloudformation#LimitExceededException":
+ throw await de_LimitExceededExceptionRes(parsedOutput, context);
+ case "NameAlreadyExistsException":
+ case "com.amazonaws.cloudformation#NameAlreadyExistsException":
+ throw await de_NameAlreadyExistsExceptionRes(parsedOutput, context);
+ default:
+ const parsedBody = parsedOutput.body;
+ return throwDefaultError({
+ output,
+ parsedBody: parsedBody.Error,
+ errorCode,
+ });
+ }
+};
+const de_DeactivateOrganizationsAccessCommand = async (output, context) => {
+ if (output.statusCode >= 300) {
+ return de_DeactivateOrganizationsAccessCommandError(output, context);
+ }
+ const data = await parseBody(output.body, context);
+ let contents = {};
+ contents = de_DeactivateOrganizationsAccessOutput(data.DeactivateOrganizationsAccessResult, context);
+ const response = {
+ $metadata: deserializeMetadata(output),
+ ...contents,
+ };
+ return response;
+};
+exports.de_DeactivateOrganizationsAccessCommand = de_DeactivateOrganizationsAccessCommand;
+const de_DeactivateOrganizationsAccessCommandError = async (output, context) => {
+ const parsedOutput = {
+ ...output,
+ body: await parseErrorBody(output.body, context),
+ };
+ const errorCode = loadQueryErrorCode(output, parsedOutput.body);
+ switch (errorCode) {
+ case "InvalidOperationException":
+ case "com.amazonaws.cloudformation#InvalidOperationException":
+ throw await de_InvalidOperationExceptionRes(parsedOutput, context);
+ case "OperationNotFoundException":
+ case "com.amazonaws.cloudformation#OperationNotFoundException":
+ throw await de_OperationNotFoundExceptionRes(parsedOutput, context);
+ default:
+ const parsedBody = parsedOutput.body;
+ return throwDefaultError({
+ output,
+ parsedBody: parsedBody.Error,
+ errorCode,
+ });
+ }
+};
+const de_DeactivateTypeCommand = async (output, context) => {
+ if (output.statusCode >= 300) {
+ return de_DeactivateTypeCommandError(output, context);
+ }
+ const data = await parseBody(output.body, context);
+ let contents = {};
+ contents = de_DeactivateTypeOutput(data.DeactivateTypeResult, context);
+ const response = {
+ $metadata: deserializeMetadata(output),
+ ...contents,
+ };
+ return response;
+};
+exports.de_DeactivateTypeCommand = de_DeactivateTypeCommand;
+const de_DeactivateTypeCommandError = async (output, context) => {
+ const parsedOutput = {
+ ...output,
+ body: await parseErrorBody(output.body, context),
+ };
+ const errorCode = loadQueryErrorCode(output, parsedOutput.body);
+ switch (errorCode) {
+ case "CFNRegistryException":
+ case "com.amazonaws.cloudformation#CFNRegistryException":
+ throw await de_CFNRegistryExceptionRes(parsedOutput, context);
+ case "TypeNotFoundException":
+ case "com.amazonaws.cloudformation#TypeNotFoundException":
+ throw await de_TypeNotFoundExceptionRes(parsedOutput, context);
+ default:
+ const parsedBody = parsedOutput.body;
+ return throwDefaultError({
+ output,
+ parsedBody: parsedBody.Error,
+ errorCode,
+ });
+ }
+};
+const de_DeleteChangeSetCommand = async (output, context) => {
+ if (output.statusCode >= 300) {
+ return de_DeleteChangeSetCommandError(output, context);
+ }
+ const data = await parseBody(output.body, context);
+ let contents = {};
+ contents = de_DeleteChangeSetOutput(data.DeleteChangeSetResult, context);
+ const response = {
+ $metadata: deserializeMetadata(output),
+ ...contents,
+ };
+ return response;
+};
+exports.de_DeleteChangeSetCommand = de_DeleteChangeSetCommand;
+const de_DeleteChangeSetCommandError = async (output, context) => {
+ const parsedOutput = {
+ ...output,
+ body: await parseErrorBody(output.body, context),
+ };
+ const errorCode = loadQueryErrorCode(output, parsedOutput.body);
+ switch (errorCode) {
+ case "InvalidChangeSetStatus":
+ case "com.amazonaws.cloudformation#InvalidChangeSetStatusException":
+ throw await de_InvalidChangeSetStatusExceptionRes(parsedOutput, context);
+ default:
+ const parsedBody = parsedOutput.body;
+ return throwDefaultError({
+ output,
+ parsedBody: parsedBody.Error,
+ errorCode,
+ });
+ }
+};
+const de_DeleteStackCommand = async (output, context) => {
+ if (output.statusCode >= 300) {
+ return de_DeleteStackCommandError(output, context);
+ }
+ await (0, smithy_client_1.collectBody)(output.body, context);
+ const response = {
+ $metadata: deserializeMetadata(output),
+ };
+ return response;
+};
+exports.de_DeleteStackCommand = de_DeleteStackCommand;
+const de_DeleteStackCommandError = async (output, context) => {
+ const parsedOutput = {
+ ...output,
+ body: await parseErrorBody(output.body, context),
+ };
+ const errorCode = loadQueryErrorCode(output, parsedOutput.body);
+ switch (errorCode) {
+ case "TokenAlreadyExistsException":
+ case "com.amazonaws.cloudformation#TokenAlreadyExistsException":
+ throw await de_TokenAlreadyExistsExceptionRes(parsedOutput, context);
+ default:
+ const parsedBody = parsedOutput.body;
+ return throwDefaultError({
+ output,
+ parsedBody: parsedBody.Error,
+ errorCode,
+ });
+ }
+};
+const de_DeleteStackInstancesCommand = async (output, context) => {
+ if (output.statusCode >= 300) {
+ return de_DeleteStackInstancesCommandError(output, context);
+ }
+ const data = await parseBody(output.body, context);
+ let contents = {};
+ contents = de_DeleteStackInstancesOutput(data.DeleteStackInstancesResult, context);
+ const response = {
+ $metadata: deserializeMetadata(output),
+ ...contents,
+ };
+ return response;
+};
+exports.de_DeleteStackInstancesCommand = de_DeleteStackInstancesCommand;
+const de_DeleteStackInstancesCommandError = async (output, context) => {
+ const parsedOutput = {
+ ...output,
+ body: await parseErrorBody(output.body, context),
+ };
+ const errorCode = loadQueryErrorCode(output, parsedOutput.body);
+ switch (errorCode) {
+ case "InvalidOperationException":
+ case "com.amazonaws.cloudformation#InvalidOperationException":
+ throw await de_InvalidOperationExceptionRes(parsedOutput, context);
+ case "OperationIdAlreadyExistsException":
+ case "com.amazonaws.cloudformation#OperationIdAlreadyExistsException":
+ throw await de_OperationIdAlreadyExistsExceptionRes(parsedOutput, context);
+ case "OperationInProgressException":
+ case "com.amazonaws.cloudformation#OperationInProgressException":
+ throw await de_OperationInProgressExceptionRes(parsedOutput, context);
+ case "StackSetNotFoundException":
+ case "com.amazonaws.cloudformation#StackSetNotFoundException":
+ throw await de_StackSetNotFoundExceptionRes(parsedOutput, context);
+ case "StaleRequestException":
+ case "com.amazonaws.cloudformation#StaleRequestException":
+ throw await de_StaleRequestExceptionRes(parsedOutput, context);
+ default:
+ const parsedBody = parsedOutput.body;
+ return throwDefaultError({
+ output,
+ parsedBody: parsedBody.Error,
+ errorCode,
+ });
+ }
+};
+const de_DeleteStackSetCommand = async (output, context) => {
+ if (output.statusCode >= 300) {
+ return de_DeleteStackSetCommandError(output, context);
+ }
+ const data = await parseBody(output.body, context);
+ let contents = {};
+ contents = de_DeleteStackSetOutput(data.DeleteStackSetResult, context);
+ const response = {
+ $metadata: deserializeMetadata(output),
+ ...contents,
+ };
+ return response;
+};
+exports.de_DeleteStackSetCommand = de_DeleteStackSetCommand;
+const de_DeleteStackSetCommandError = async (output, context) => {
+ const parsedOutput = {
+ ...output,
+ body: await parseErrorBody(output.body, context),
+ };
+ const errorCode = loadQueryErrorCode(output, parsedOutput.body);
+ switch (errorCode) {
+ case "OperationInProgressException":
+ case "com.amazonaws.cloudformation#OperationInProgressException":
+ throw await de_OperationInProgressExceptionRes(parsedOutput, context);
+ case "StackSetNotEmptyException":
+ case "com.amazonaws.cloudformation#StackSetNotEmptyException":
+ throw await de_StackSetNotEmptyExceptionRes(parsedOutput, context);
+ default:
+ const parsedBody = parsedOutput.body;
+ return throwDefaultError({
+ output,
+ parsedBody: parsedBody.Error,
+ errorCode,
+ });
+ }
+};
+const de_DeregisterTypeCommand = async (output, context) => {
+ if (output.statusCode >= 300) {
+ return de_DeregisterTypeCommandError(output, context);
+ }
+ const data = await parseBody(output.body, context);
+ let contents = {};
+ contents = de_DeregisterTypeOutput(data.DeregisterTypeResult, context);
+ const response = {
+ $metadata: deserializeMetadata(output),
+ ...contents,
+ };
+ return response;
+};
+exports.de_DeregisterTypeCommand = de_DeregisterTypeCommand;
+const de_DeregisterTypeCommandError = async (output, context) => {
+ const parsedOutput = {
+ ...output,
+ body: await parseErrorBody(output.body, context),
+ };
+ const errorCode = loadQueryErrorCode(output, parsedOutput.body);
+ switch (errorCode) {
+ case "CFNRegistryException":
+ case "com.amazonaws.cloudformation#CFNRegistryException":
+ throw await de_CFNRegistryExceptionRes(parsedOutput, context);
+ case "TypeNotFoundException":
+ case "com.amazonaws.cloudformation#TypeNotFoundException":
+ throw await de_TypeNotFoundExceptionRes(parsedOutput, context);
+ default:
+ const parsedBody = parsedOutput.body;
+ return throwDefaultError({
+ output,
+ parsedBody: parsedBody.Error,
+ errorCode,
+ });
+ }
+};
+const de_DescribeAccountLimitsCommand = async (output, context) => {
+ if (output.statusCode >= 300) {
+ return de_DescribeAccountLimitsCommandError(output, context);
+ }
+ const data = await parseBody(output.body, context);
+ let contents = {};
+ contents = de_DescribeAccountLimitsOutput(data.DescribeAccountLimitsResult, context);
+ const response = {
+ $metadata: deserializeMetadata(output),
+ ...contents,
+ };
+ return response;
+};
+exports.de_DescribeAccountLimitsCommand = de_DescribeAccountLimitsCommand;
+const de_DescribeAccountLimitsCommandError = async (output, context) => {
+ const parsedOutput = {
+ ...output,
+ body: await parseErrorBody(output.body, context),
+ };
+ const errorCode = loadQueryErrorCode(output, parsedOutput.body);
+ const parsedBody = parsedOutput.body;
+ return throwDefaultError({
+ output,
+ parsedBody: parsedBody.Error,
+ errorCode,
+ });
+};
+const de_DescribeChangeSetCommand = async (output, context) => {
+ if (output.statusCode >= 300) {
+ return de_DescribeChangeSetCommandError(output, context);
+ }
+ const data = await parseBody(output.body, context);
+ let contents = {};
+ contents = de_DescribeChangeSetOutput(data.DescribeChangeSetResult, context);
+ const response = {
+ $metadata: deserializeMetadata(output),
+ ...contents,
+ };
+ return response;
+};
+exports.de_DescribeChangeSetCommand = de_DescribeChangeSetCommand;
+const de_DescribeChangeSetCommandError = async (output, context) => {
+ const parsedOutput = {
+ ...output,
+ body: await parseErrorBody(output.body, context),
+ };
+ const errorCode = loadQueryErrorCode(output, parsedOutput.body);
+ switch (errorCode) {
+ case "ChangeSetNotFound":
+ case "com.amazonaws.cloudformation#ChangeSetNotFoundException":
+ throw await de_ChangeSetNotFoundExceptionRes(parsedOutput, context);
+ default:
+ const parsedBody = parsedOutput.body;
+ return throwDefaultError({
+ output,
+ parsedBody: parsedBody.Error,
+ errorCode,
+ });
+ }
+};
+const de_DescribeChangeSetHooksCommand = async (output, context) => {
+ if (output.statusCode >= 300) {
+ return de_DescribeChangeSetHooksCommandError(output, context);
+ }
+ const data = await parseBody(output.body, context);
+ let contents = {};
+ contents = de_DescribeChangeSetHooksOutput(data.DescribeChangeSetHooksResult, context);
+ const response = {
+ $metadata: deserializeMetadata(output),
+ ...contents,
+ };
+ return response;
+};
+exports.de_DescribeChangeSetHooksCommand = de_DescribeChangeSetHooksCommand;
+const de_DescribeChangeSetHooksCommandError = async (output, context) => {
+ const parsedOutput = {
+ ...output,
+ body: await parseErrorBody(output.body, context),
+ };
+ const errorCode = loadQueryErrorCode(output, parsedOutput.body);
+ switch (errorCode) {
+ case "ChangeSetNotFound":
+ case "com.amazonaws.cloudformation#ChangeSetNotFoundException":
+ throw await de_ChangeSetNotFoundExceptionRes(parsedOutput, context);
+ default:
+ const parsedBody = parsedOutput.body;
+ return throwDefaultError({
+ output,
+ parsedBody: parsedBody.Error,
+ errorCode,
+ });
+ }
+};
+const de_DescribeOrganizationsAccessCommand = async (output, context) => {
+ if (output.statusCode >= 300) {
+ return de_DescribeOrganizationsAccessCommandError(output, context);
+ }
+ const data = await parseBody(output.body, context);
+ let contents = {};
+ contents = de_DescribeOrganizationsAccessOutput(data.DescribeOrganizationsAccessResult, context);
+ const response = {
+ $metadata: deserializeMetadata(output),
+ ...contents,
+ };
+ return response;
+};
+exports.de_DescribeOrganizationsAccessCommand = de_DescribeOrganizationsAccessCommand;
+const de_DescribeOrganizationsAccessCommandError = async (output, context) => {
+ const parsedOutput = {
+ ...output,
+ body: await parseErrorBody(output.body, context),
+ };
+ const errorCode = loadQueryErrorCode(output, parsedOutput.body);
+ switch (errorCode) {
+ case "InvalidOperationException":
+ case "com.amazonaws.cloudformation#InvalidOperationException":
+ throw await de_InvalidOperationExceptionRes(parsedOutput, context);
+ case "OperationNotFoundException":
+ case "com.amazonaws.cloudformation#OperationNotFoundException":
+ throw await de_OperationNotFoundExceptionRes(parsedOutput, context);
+ default:
+ const parsedBody = parsedOutput.body;
+ return throwDefaultError({
+ output,
+ parsedBody: parsedBody.Error,
+ errorCode,
+ });
+ }
+};
+const de_DescribePublisherCommand = async (output, context) => {
+ if (output.statusCode >= 300) {
+ return de_DescribePublisherCommandError(output, context);
+ }
+ const data = await parseBody(output.body, context);
+ let contents = {};
+ contents = de_DescribePublisherOutput(data.DescribePublisherResult, context);
+ const response = {
+ $metadata: deserializeMetadata(output),
+ ...contents,
+ };
+ return response;
+};
+exports.de_DescribePublisherCommand = de_DescribePublisherCommand;
+const de_DescribePublisherCommandError = async (output, context) => {
+ const parsedOutput = {
+ ...output,
+ body: await parseErrorBody(output.body, context),
+ };
+ const errorCode = loadQueryErrorCode(output, parsedOutput.body);
+ switch (errorCode) {
+ case "CFNRegistryException":
+ case "com.amazonaws.cloudformation#CFNRegistryException":
+ throw await de_CFNRegistryExceptionRes(parsedOutput, context);
+ default:
+ const parsedBody = parsedOutput.body;
+ return throwDefaultError({
+ output,
+ parsedBody: parsedBody.Error,
+ errorCode,
+ });
+ }
+};
+const de_DescribeStackDriftDetectionStatusCommand = async (output, context) => {
+ if (output.statusCode >= 300) {
+ return de_DescribeStackDriftDetectionStatusCommandError(output, context);
+ }
+ const data = await parseBody(output.body, context);
+ let contents = {};
+ contents = de_DescribeStackDriftDetectionStatusOutput(data.DescribeStackDriftDetectionStatusResult, context);
+ const response = {
+ $metadata: deserializeMetadata(output),
+ ...contents,
+ };
+ return response;
+};
+exports.de_DescribeStackDriftDetectionStatusCommand = de_DescribeStackDriftDetectionStatusCommand;
+const de_DescribeStackDriftDetectionStatusCommandError = async (output, context) => {
+ const parsedOutput = {
+ ...output,
+ body: await parseErrorBody(output.body, context),
+ };
+ const errorCode = loadQueryErrorCode(output, parsedOutput.body);
+ const parsedBody = parsedOutput.body;
+ return throwDefaultError({
+ output,
+ parsedBody: parsedBody.Error,
+ errorCode,
+ });
+};
+const de_DescribeStackEventsCommand = async (output, context) => {
+ if (output.statusCode >= 300) {
+ return de_DescribeStackEventsCommandError(output, context);
+ }
+ const data = await parseBody(output.body, context);
+ let contents = {};
+ contents = de_DescribeStackEventsOutput(data.DescribeStackEventsResult, context);
+ const response = {
+ $metadata: deserializeMetadata(output),
+ ...contents,
+ };
+ return response;
+};
+exports.de_DescribeStackEventsCommand = de_DescribeStackEventsCommand;
+const de_DescribeStackEventsCommandError = async (output, context) => {
+ const parsedOutput = {
+ ...output,
+ body: await parseErrorBody(output.body, context),
+ };
+ const errorCode = loadQueryErrorCode(output, parsedOutput.body);
+ const parsedBody = parsedOutput.body;
+ return throwDefaultError({
+ output,
+ parsedBody: parsedBody.Error,
+ errorCode,
+ });
+};
+const de_DescribeStackInstanceCommand = async (output, context) => {
+ if (output.statusCode >= 300) {
+ return de_DescribeStackInstanceCommandError(output, context);
+ }
+ const data = await parseBody(output.body, context);
+ let contents = {};
+ contents = de_DescribeStackInstanceOutput(data.DescribeStackInstanceResult, context);
+ const response = {
+ $metadata: deserializeMetadata(output),
+ ...contents,
+ };
+ return response;
+};
+exports.de_DescribeStackInstanceCommand = de_DescribeStackInstanceCommand;
+const de_DescribeStackInstanceCommandError = async (output, context) => {
+ const parsedOutput = {
+ ...output,
+ body: await parseErrorBody(output.body, context),
+ };
+ const errorCode = loadQueryErrorCode(output, parsedOutput.body);
+ switch (errorCode) {
+ case "StackInstanceNotFoundException":
+ case "com.amazonaws.cloudformation#StackInstanceNotFoundException":
+ throw await de_StackInstanceNotFoundExceptionRes(parsedOutput, context);
+ case "StackSetNotFoundException":
+ case "com.amazonaws.cloudformation#StackSetNotFoundException":
+ throw await de_StackSetNotFoundExceptionRes(parsedOutput, context);
+ default:
+ const parsedBody = parsedOutput.body;
+ return throwDefaultError({
+ output,
+ parsedBody: parsedBody.Error,
+ errorCode,
+ });
+ }
+};
+const de_DescribeStackResourceCommand = async (output, context) => {
+ if (output.statusCode >= 300) {
+ return de_DescribeStackResourceCommandError(output, context);
+ }
+ const data = await parseBody(output.body, context);
+ let contents = {};
+ contents = de_DescribeStackResourceOutput(data.DescribeStackResourceResult, context);
+ const response = {
+ $metadata: deserializeMetadata(output),
+ ...contents,
+ };
+ return response;
+};
+exports.de_DescribeStackResourceCommand = de_DescribeStackResourceCommand;
+const de_DescribeStackResourceCommandError = async (output, context) => {
+ const parsedOutput = {
+ ...output,
+ body: await parseErrorBody(output.body, context),
+ };
+ const errorCode = loadQueryErrorCode(output, parsedOutput.body);
+ const parsedBody = parsedOutput.body;
+ return throwDefaultError({
+ output,
+ parsedBody: parsedBody.Error,
+ errorCode,
+ });
+};
+const de_DescribeStackResourceDriftsCommand = async (output, context) => {
+ if (output.statusCode >= 300) {
+ return de_DescribeStackResourceDriftsCommandError(output, context);
+ }
+ const data = await parseBody(output.body, context);
+ let contents = {};
+ contents = de_DescribeStackResourceDriftsOutput(data.DescribeStackResourceDriftsResult, context);
+ const response = {
+ $metadata: deserializeMetadata(output),
+ ...contents,
+ };
+ return response;
+};
+exports.de_DescribeStackResourceDriftsCommand = de_DescribeStackResourceDriftsCommand;
+const de_DescribeStackResourceDriftsCommandError = async (output, context) => {
+ const parsedOutput = {
+ ...output,
+ body: await parseErrorBody(output.body, context),
+ };
+ const errorCode = loadQueryErrorCode(output, parsedOutput.body);
+ const parsedBody = parsedOutput.body;
+ return throwDefaultError({
+ output,
+ parsedBody: parsedBody.Error,
+ errorCode,
+ });
+};
+const de_DescribeStackResourcesCommand = async (output, context) => {
+ if (output.statusCode >= 300) {
+ return de_DescribeStackResourcesCommandError(output, context);
+ }
+ const data = await parseBody(output.body, context);
+ let contents = {};
+ contents = de_DescribeStackResourcesOutput(data.DescribeStackResourcesResult, context);
+ const response = {
+ $metadata: deserializeMetadata(output),
+ ...contents,
+ };
+ return response;
+};
+exports.de_DescribeStackResourcesCommand = de_DescribeStackResourcesCommand;
+const de_DescribeStackResourcesCommandError = async (output, context) => {
+ const parsedOutput = {
+ ...output,
+ body: await parseErrorBody(output.body, context),
+ };
+ const errorCode = loadQueryErrorCode(output, parsedOutput.body);
+ const parsedBody = parsedOutput.body;
+ return throwDefaultError({
+ output,
+ parsedBody: parsedBody.Error,
+ errorCode,
+ });
+};
+const de_DescribeStacksCommand = async (output, context) => {
+ if (output.statusCode >= 300) {
+ return de_DescribeStacksCommandError(output, context);
+ }
+ const data = await parseBody(output.body, context);
+ let contents = {};
+ contents = de_DescribeStacksOutput(data.DescribeStacksResult, context);
+ const response = {
+ $metadata: deserializeMetadata(output),
+ ...contents,
+ };
+ return response;
+};
+exports.de_DescribeStacksCommand = de_DescribeStacksCommand;
+const de_DescribeStacksCommandError = async (output, context) => {
+ const parsedOutput = {
+ ...output,
+ body: await parseErrorBody(output.body, context),
+ };
+ const errorCode = loadQueryErrorCode(output, parsedOutput.body);
+ const parsedBody = parsedOutput.body;
+ return throwDefaultError({
+ output,
+ parsedBody: parsedBody.Error,
+ errorCode,
+ });
+};
+const de_DescribeStackSetCommand = async (output, context) => {
+ if (output.statusCode >= 300) {
+ return de_DescribeStackSetCommandError(output, context);
+ }
+ const data = await parseBody(output.body, context);
+ let contents = {};
+ contents = de_DescribeStackSetOutput(data.DescribeStackSetResult, context);
+ const response = {
+ $metadata: deserializeMetadata(output),
+ ...contents,
+ };
+ return response;
+};
+exports.de_DescribeStackSetCommand = de_DescribeStackSetCommand;
+const de_DescribeStackSetCommandError = async (output, context) => {
+ const parsedOutput = {
+ ...output,
+ body: await parseErrorBody(output.body, context),
+ };
+ const errorCode = loadQueryErrorCode(output, parsedOutput.body);
+ switch (errorCode) {
+ case "StackSetNotFoundException":
+ case "com.amazonaws.cloudformation#StackSetNotFoundException":
+ throw await de_StackSetNotFoundExceptionRes(parsedOutput, context);
+ default:
+ const parsedBody = parsedOutput.body;
+ return throwDefaultError({
+ output,
+ parsedBody: parsedBody.Error,
+ errorCode,
+ });
+ }
+};
+const de_DescribeStackSetOperationCommand = async (output, context) => {
+ if (output.statusCode >= 300) {
+ return de_DescribeStackSetOperationCommandError(output, context);
+ }
+ const data = await parseBody(output.body, context);
+ let contents = {};
+ contents = de_DescribeStackSetOperationOutput(data.DescribeStackSetOperationResult, context);
+ const response = {
+ $metadata: deserializeMetadata(output),
+ ...contents,
+ };
+ return response;
+};
+exports.de_DescribeStackSetOperationCommand = de_DescribeStackSetOperationCommand;
+const de_DescribeStackSetOperationCommandError = async (output, context) => {
+ const parsedOutput = {
+ ...output,
+ body: await parseErrorBody(output.body, context),
+ };
+ const errorCode = loadQueryErrorCode(output, parsedOutput.body);
+ switch (errorCode) {
+ case "OperationNotFoundException":
+ case "com.amazonaws.cloudformation#OperationNotFoundException":
+ throw await de_OperationNotFoundExceptionRes(parsedOutput, context);
+ case "StackSetNotFoundException":
+ case "com.amazonaws.cloudformation#StackSetNotFoundException":
+ throw await de_StackSetNotFoundExceptionRes(parsedOutput, context);
+ default:
+ const parsedBody = parsedOutput.body;
+ return throwDefaultError({
+ output,
+ parsedBody: parsedBody.Error,
+ errorCode,
+ });
+ }
+};
+const de_DescribeTypeCommand = async (output, context) => {
+ if (output.statusCode >= 300) {
+ return de_DescribeTypeCommandError(output, context);
+ }
+ const data = await parseBody(output.body, context);
+ let contents = {};
+ contents = de_DescribeTypeOutput(data.DescribeTypeResult, context);
+ const response = {
+ $metadata: deserializeMetadata(output),
+ ...contents,
+ };
+ return response;
+};
+exports.de_DescribeTypeCommand = de_DescribeTypeCommand;
+const de_DescribeTypeCommandError = async (output, context) => {
+ const parsedOutput = {
+ ...output,
+ body: await parseErrorBody(output.body, context),
+ };
+ const errorCode = loadQueryErrorCode(output, parsedOutput.body);
+ switch (errorCode) {
+ case "CFNRegistryException":
+ case "com.amazonaws.cloudformation#CFNRegistryException":
+ throw await de_CFNRegistryExceptionRes(parsedOutput, context);
+ case "TypeNotFoundException":
+ case "com.amazonaws.cloudformation#TypeNotFoundException":
+ throw await de_TypeNotFoundExceptionRes(parsedOutput, context);
+ default:
+ const parsedBody = parsedOutput.body;
+ return throwDefaultError({
+ output,
+ parsedBody: parsedBody.Error,
+ errorCode,
+ });
+ }
+};
+const de_DescribeTypeRegistrationCommand = async (output, context) => {
+ if (output.statusCode >= 300) {
+ return de_DescribeTypeRegistrationCommandError(output, context);
+ }
+ const data = await parseBody(output.body, context);
+ let contents = {};
+ contents = de_DescribeTypeRegistrationOutput(data.DescribeTypeRegistrationResult, context);
+ const response = {
+ $metadata: deserializeMetadata(output),
+ ...contents,
+ };
+ return response;
+};
+exports.de_DescribeTypeRegistrationCommand = de_DescribeTypeRegistrationCommand;
+const de_DescribeTypeRegistrationCommandError = async (output, context) => {
+ const parsedOutput = {
+ ...output,
+ body: await parseErrorBody(output.body, context),
+ };
+ const errorCode = loadQueryErrorCode(output, parsedOutput.body);
+ switch (errorCode) {
+ case "CFNRegistryException":
+ case "com.amazonaws.cloudformation#CFNRegistryException":
+ throw await de_CFNRegistryExceptionRes(parsedOutput, context);
+ default:
+ const parsedBody = parsedOutput.body;
+ return throwDefaultError({
+ output,
+ parsedBody: parsedBody.Error,
+ errorCode,
+ });
+ }
+};
+const de_DetectStackDriftCommand = async (output, context) => {
+ if (output.statusCode >= 300) {
+ return de_DetectStackDriftCommandError(output, context);
+ }
+ const data = await parseBody(output.body, context);
+ let contents = {};
+ contents = de_DetectStackDriftOutput(data.DetectStackDriftResult, context);
+ const response = {
+ $metadata: deserializeMetadata(output),
+ ...contents,
+ };
+ return response;
+};
+exports.de_DetectStackDriftCommand = de_DetectStackDriftCommand;
+const de_DetectStackDriftCommandError = async (output, context) => {
+ const parsedOutput = {
+ ...output,
+ body: await parseErrorBody(output.body, context),
+ };
+ const errorCode = loadQueryErrorCode(output, parsedOutput.body);
+ const parsedBody = parsedOutput.body;
+ return throwDefaultError({
+ output,
+ parsedBody: parsedBody.Error,
+ errorCode,
+ });
+};
+const de_DetectStackResourceDriftCommand = async (output, context) => {
+ if (output.statusCode >= 300) {
+ return de_DetectStackResourceDriftCommandError(output, context);
+ }
+ const data = await parseBody(output.body, context);
+ let contents = {};
+ contents = de_DetectStackResourceDriftOutput(data.DetectStackResourceDriftResult, context);
+ const response = {
+ $metadata: deserializeMetadata(output),
+ ...contents,
+ };
+ return response;
+};
+exports.de_DetectStackResourceDriftCommand = de_DetectStackResourceDriftCommand;
+const de_DetectStackResourceDriftCommandError = async (output, context) => {
+ const parsedOutput = {
+ ...output,
+ body: await parseErrorBody(output.body, context),
+ };
+ const errorCode = loadQueryErrorCode(output, parsedOutput.body);
+ const parsedBody = parsedOutput.body;
+ return throwDefaultError({
+ output,
+ parsedBody: parsedBody.Error,
+ errorCode,
+ });
+};
+const de_DetectStackSetDriftCommand = async (output, context) => {
+ if (output.statusCode >= 300) {
+ return de_DetectStackSetDriftCommandError(output, context);
+ }
+ const data = await parseBody(output.body, context);
+ let contents = {};
+ contents = de_DetectStackSetDriftOutput(data.DetectStackSetDriftResult, context);
+ const response = {
+ $metadata: deserializeMetadata(output),
+ ...contents,
+ };
+ return response;
+};
+exports.de_DetectStackSetDriftCommand = de_DetectStackSetDriftCommand;
+const de_DetectStackSetDriftCommandError = async (output, context) => {
+ const parsedOutput = {
+ ...output,
+ body: await parseErrorBody(output.body, context),
+ };
+ const errorCode = loadQueryErrorCode(output, parsedOutput.body);
+ switch (errorCode) {
+ case "InvalidOperationException":
+ case "com.amazonaws.cloudformation#InvalidOperationException":
+ throw await de_InvalidOperationExceptionRes(parsedOutput, context);
+ case "OperationInProgressException":
+ case "com.amazonaws.cloudformation#OperationInProgressException":
+ throw await de_OperationInProgressExceptionRes(parsedOutput, context);
+ case "StackSetNotFoundException":
+ case "com.amazonaws.cloudformation#StackSetNotFoundException":
+ throw await de_StackSetNotFoundExceptionRes(parsedOutput, context);
+ default:
+ const parsedBody = parsedOutput.body;
+ return throwDefaultError({
+ output,
+ parsedBody: parsedBody.Error,
+ errorCode,
+ });
+ }
+};
+const de_EstimateTemplateCostCommand = async (output, context) => {
+ if (output.statusCode >= 300) {
+ return de_EstimateTemplateCostCommandError(output, context);
+ }
+ const data = await parseBody(output.body, context);
+ let contents = {};
+ contents = de_EstimateTemplateCostOutput(data.EstimateTemplateCostResult, context);
+ const response = {
+ $metadata: deserializeMetadata(output),
+ ...contents,
+ };
+ return response;
+};
+exports.de_EstimateTemplateCostCommand = de_EstimateTemplateCostCommand;
+const de_EstimateTemplateCostCommandError = async (output, context) => {
+ const parsedOutput = {
+ ...output,
+ body: await parseErrorBody(output.body, context),
+ };
+ const errorCode = loadQueryErrorCode(output, parsedOutput.body);
+ const parsedBody = parsedOutput.body;
+ return throwDefaultError({
+ output,
+ parsedBody: parsedBody.Error,
+ errorCode,
+ });
+};
+const de_ExecuteChangeSetCommand = async (output, context) => {
+ if (output.statusCode >= 300) {
+ return de_ExecuteChangeSetCommandError(output, context);
+ }
+ const data = await parseBody(output.body, context);
+ let contents = {};
+ contents = de_ExecuteChangeSetOutput(data.ExecuteChangeSetResult, context);
+ const response = {
+ $metadata: deserializeMetadata(output),
+ ...contents,
+ };
+ return response;
+};
+exports.de_ExecuteChangeSetCommand = de_ExecuteChangeSetCommand;
+const de_ExecuteChangeSetCommandError = async (output, context) => {
+ const parsedOutput = {
+ ...output,
+ body: await parseErrorBody(output.body, context),
+ };
+ const errorCode = loadQueryErrorCode(output, parsedOutput.body);
+ switch (errorCode) {
+ case "ChangeSetNotFound":
+ case "com.amazonaws.cloudformation#ChangeSetNotFoundException":
+ throw await de_ChangeSetNotFoundExceptionRes(parsedOutput, context);
+ case "InsufficientCapabilitiesException":
+ case "com.amazonaws.cloudformation#InsufficientCapabilitiesException":
+ throw await de_InsufficientCapabilitiesExceptionRes(parsedOutput, context);
+ case "InvalidChangeSetStatus":
+ case "com.amazonaws.cloudformation#InvalidChangeSetStatusException":
+ throw await de_InvalidChangeSetStatusExceptionRes(parsedOutput, context);
+ case "TokenAlreadyExistsException":
+ case "com.amazonaws.cloudformation#TokenAlreadyExistsException":
+ throw await de_TokenAlreadyExistsExceptionRes(parsedOutput, context);
+ default:
+ const parsedBody = parsedOutput.body;
+ return throwDefaultError({
+ output,
+ parsedBody: parsedBody.Error,
+ errorCode,
+ });
+ }
+};
+const de_GetStackPolicyCommand = async (output, context) => {
+ if (output.statusCode >= 300) {
+ return de_GetStackPolicyCommandError(output, context);
+ }
+ const data = await parseBody(output.body, context);
+ let contents = {};
+ contents = de_GetStackPolicyOutput(data.GetStackPolicyResult, context);
+ const response = {
+ $metadata: deserializeMetadata(output),
+ ...contents,
+ };
+ return response;
+};
+exports.de_GetStackPolicyCommand = de_GetStackPolicyCommand;
+const de_GetStackPolicyCommandError = async (output, context) => {
+ const parsedOutput = {
+ ...output,
+ body: await parseErrorBody(output.body, context),
+ };
+ const errorCode = loadQueryErrorCode(output, parsedOutput.body);
+ const parsedBody = parsedOutput.body;
+ return throwDefaultError({
+ output,
+ parsedBody: parsedBody.Error,
+ errorCode,
+ });
+};
+const de_GetTemplateCommand = async (output, context) => {
+ if (output.statusCode >= 300) {
+ return de_GetTemplateCommandError(output, context);
+ }
+ const data = await parseBody(output.body, context);
+ let contents = {};
+ contents = de_GetTemplateOutput(data.GetTemplateResult, context);
+ const response = {
+ $metadata: deserializeMetadata(output),
+ ...contents,
+ };
+ return response;
+};
+exports.de_GetTemplateCommand = de_GetTemplateCommand;
+const de_GetTemplateCommandError = async (output, context) => {
+ const parsedOutput = {
+ ...output,
+ body: await parseErrorBody(output.body, context),
+ };
+ const errorCode = loadQueryErrorCode(output, parsedOutput.body);
+ switch (errorCode) {
+ case "ChangeSetNotFound":
+ case "com.amazonaws.cloudformation#ChangeSetNotFoundException":
+ throw await de_ChangeSetNotFoundExceptionRes(parsedOutput, context);
+ default:
+ const parsedBody = parsedOutput.body;
+ return throwDefaultError({
+ output,
+ parsedBody: parsedBody.Error,
+ errorCode,
+ });
+ }
+};
+const de_GetTemplateSummaryCommand = async (output, context) => {
+ if (output.statusCode >= 300) {
+ return de_GetTemplateSummaryCommandError(output, context);
+ }
+ const data = await parseBody(output.body, context);
+ let contents = {};
+ contents = de_GetTemplateSummaryOutput(data.GetTemplateSummaryResult, context);
+ const response = {
+ $metadata: deserializeMetadata(output),
+ ...contents,
+ };
+ return response;
+};
+exports.de_GetTemplateSummaryCommand = de_GetTemplateSummaryCommand;
+const de_GetTemplateSummaryCommandError = async (output, context) => {
+ const parsedOutput = {
+ ...output,
+ body: await parseErrorBody(output.body, context),
+ };
+ const errorCode = loadQueryErrorCode(output, parsedOutput.body);
+ switch (errorCode) {
+ case "StackSetNotFoundException":
+ case "com.amazonaws.cloudformation#StackSetNotFoundException":
+ throw await de_StackSetNotFoundExceptionRes(parsedOutput, context);
+ default:
+ const parsedBody = parsedOutput.body;
+ return throwDefaultError({
+ output,
+ parsedBody: parsedBody.Error,
+ errorCode,
+ });
+ }
+};
+const de_ImportStacksToStackSetCommand = async (output, context) => {
+ if (output.statusCode >= 300) {
+ return de_ImportStacksToStackSetCommandError(output, context);
+ }
+ const data = await parseBody(output.body, context);
+ let contents = {};
+ contents = de_ImportStacksToStackSetOutput(data.ImportStacksToStackSetResult, context);
+ const response = {
+ $metadata: deserializeMetadata(output),
+ ...contents,
+ };
+ return response;
+};
+exports.de_ImportStacksToStackSetCommand = de_ImportStacksToStackSetCommand;
+const de_ImportStacksToStackSetCommandError = async (output, context) => {
+ const parsedOutput = {
+ ...output,
+ body: await parseErrorBody(output.body, context),
+ };
+ const errorCode = loadQueryErrorCode(output, parsedOutput.body);
+ switch (errorCode) {
+ case "InvalidOperationException":
+ case "com.amazonaws.cloudformation#InvalidOperationException":
+ throw await de_InvalidOperationExceptionRes(parsedOutput, context);
+ case "LimitExceededException":
+ case "com.amazonaws.cloudformation#LimitExceededException":
+ throw await de_LimitExceededExceptionRes(parsedOutput, context);
+ case "OperationIdAlreadyExistsException":
+ case "com.amazonaws.cloudformation#OperationIdAlreadyExistsException":
+ throw await de_OperationIdAlreadyExistsExceptionRes(parsedOutput, context);
+ case "OperationInProgressException":
+ case "com.amazonaws.cloudformation#OperationInProgressException":
+ throw await de_OperationInProgressExceptionRes(parsedOutput, context);
+ case "StackNotFoundException":
+ case "com.amazonaws.cloudformation#StackNotFoundException":
+ throw await de_StackNotFoundExceptionRes(parsedOutput, context);
+ case "StackSetNotFoundException":
+ case "com.amazonaws.cloudformation#StackSetNotFoundException":
+ throw await de_StackSetNotFoundExceptionRes(parsedOutput, context);
+ case "StaleRequestException":
+ case "com.amazonaws.cloudformation#StaleRequestException":
+ throw await de_StaleRequestExceptionRes(parsedOutput, context);
+ default:
+ const parsedBody = parsedOutput.body;
+ return throwDefaultError({
+ output,
+ parsedBody: parsedBody.Error,
+ errorCode,
+ });
+ }
+};
+const de_ListChangeSetsCommand = async (output, context) => {
+ if (output.statusCode >= 300) {
+ return de_ListChangeSetsCommandError(output, context);
+ }
+ const data = await parseBody(output.body, context);
+ let contents = {};
+ contents = de_ListChangeSetsOutput(data.ListChangeSetsResult, context);
+ const response = {
+ $metadata: deserializeMetadata(output),
+ ...contents,
+ };
+ return response;
+};
+exports.de_ListChangeSetsCommand = de_ListChangeSetsCommand;
+const de_ListChangeSetsCommandError = async (output, context) => {
+ const parsedOutput = {
+ ...output,
+ body: await parseErrorBody(output.body, context),
+ };
+ const errorCode = loadQueryErrorCode(output, parsedOutput.body);
+ const parsedBody = parsedOutput.body;
+ return throwDefaultError({
+ output,
+ parsedBody: parsedBody.Error,
+ errorCode,
+ });
+};
+const de_ListExportsCommand = async (output, context) => {
+ if (output.statusCode >= 300) {
+ return de_ListExportsCommandError(output, context);
+ }
+ const data = await parseBody(output.body, context);
+ let contents = {};
+ contents = de_ListExportsOutput(data.ListExportsResult, context);
+ const response = {
+ $metadata: deserializeMetadata(output),
+ ...contents,
+ };
+ return response;
+};
+exports.de_ListExportsCommand = de_ListExportsCommand;
+const de_ListExportsCommandError = async (output, context) => {
+ const parsedOutput = {
+ ...output,
+ body: await parseErrorBody(output.body, context),
+ };
+ const errorCode = loadQueryErrorCode(output, parsedOutput.body);
+ const parsedBody = parsedOutput.body;
+ return throwDefaultError({
+ output,
+ parsedBody: parsedBody.Error,
+ errorCode,
+ });
+};
+const de_ListImportsCommand = async (output, context) => {
+ if (output.statusCode >= 300) {
+ return de_ListImportsCommandError(output, context);
+ }
+ const data = await parseBody(output.body, context);
+ let contents = {};
+ contents = de_ListImportsOutput(data.ListImportsResult, context);
+ const response = {
+ $metadata: deserializeMetadata(output),
+ ...contents,
+ };
+ return response;
+};
+exports.de_ListImportsCommand = de_ListImportsCommand;
+const de_ListImportsCommandError = async (output, context) => {
+ const parsedOutput = {
+ ...output,
+ body: await parseErrorBody(output.body, context),
+ };
+ const errorCode = loadQueryErrorCode(output, parsedOutput.body);
+ const parsedBody = parsedOutput.body;
+ return throwDefaultError({
+ output,
+ parsedBody: parsedBody.Error,
+ errorCode,
+ });
+};
+const de_ListStackInstanceResourceDriftsCommand = async (output, context) => {
+ if (output.statusCode >= 300) {
+ return de_ListStackInstanceResourceDriftsCommandError(output, context);
+ }
+ const data = await parseBody(output.body, context);
+ let contents = {};
+ contents = de_ListStackInstanceResourceDriftsOutput(data.ListStackInstanceResourceDriftsResult, context);
+ const response = {
+ $metadata: deserializeMetadata(output),
+ ...contents,
+ };
+ return response;
+};
+exports.de_ListStackInstanceResourceDriftsCommand = de_ListStackInstanceResourceDriftsCommand;
+const de_ListStackInstanceResourceDriftsCommandError = async (output, context) => {
+ const parsedOutput = {
+ ...output,
+ body: await parseErrorBody(output.body, context),
+ };
+ const errorCode = loadQueryErrorCode(output, parsedOutput.body);
+ switch (errorCode) {
+ case "OperationNotFoundException":
+ case "com.amazonaws.cloudformation#OperationNotFoundException":
+ throw await de_OperationNotFoundExceptionRes(parsedOutput, context);
+ case "StackInstanceNotFoundException":
+ case "com.amazonaws.cloudformation#StackInstanceNotFoundException":
+ throw await de_StackInstanceNotFoundExceptionRes(parsedOutput, context);
+ case "StackSetNotFoundException":
+ case "com.amazonaws.cloudformation#StackSetNotFoundException":
+ throw await de_StackSetNotFoundExceptionRes(parsedOutput, context);
+ default:
+ const parsedBody = parsedOutput.body;
+ return throwDefaultError({
+ output,
+ parsedBody: parsedBody.Error,
+ errorCode,
+ });
+ }
+};
+const de_ListStackInstancesCommand = async (output, context) => {
+ if (output.statusCode >= 300) {
+ return de_ListStackInstancesCommandError(output, context);
+ }
+ const data = await parseBody(output.body, context);
+ let contents = {};
+ contents = de_ListStackInstancesOutput(data.ListStackInstancesResult, context);
+ const response = {
+ $metadata: deserializeMetadata(output),
+ ...contents,
+ };
+ return response;
+};
+exports.de_ListStackInstancesCommand = de_ListStackInstancesCommand;
+const de_ListStackInstancesCommandError = async (output, context) => {
+ const parsedOutput = {
+ ...output,
+ body: await parseErrorBody(output.body, context),
+ };
+ const errorCode = loadQueryErrorCode(output, parsedOutput.body);
+ switch (errorCode) {
+ case "StackSetNotFoundException":
+ case "com.amazonaws.cloudformation#StackSetNotFoundException":
+ throw await de_StackSetNotFoundExceptionRes(parsedOutput, context);
+ default:
+ const parsedBody = parsedOutput.body;
+ return throwDefaultError({
+ output,
+ parsedBody: parsedBody.Error,
+ errorCode,
+ });
+ }
+};
+const de_ListStackResourcesCommand = async (output, context) => {
+ if (output.statusCode >= 300) {
+ return de_ListStackResourcesCommandError(output, context);
+ }
+ const data = await parseBody(output.body, context);
+ let contents = {};
+ contents = de_ListStackResourcesOutput(data.ListStackResourcesResult, context);
+ const response = {
+ $metadata: deserializeMetadata(output),
+ ...contents,
+ };
+ return response;
+};
+exports.de_ListStackResourcesCommand = de_ListStackResourcesCommand;
+const de_ListStackResourcesCommandError = async (output, context) => {
+ const parsedOutput = {
+ ...output,
+ body: await parseErrorBody(output.body, context),
+ };
+ const errorCode = loadQueryErrorCode(output, parsedOutput.body);
+ const parsedBody = parsedOutput.body;
+ return throwDefaultError({
+ output,
+ parsedBody: parsedBody.Error,
+ errorCode,
+ });
+};
+const de_ListStacksCommand = async (output, context) => {
+ if (output.statusCode >= 300) {
+ return de_ListStacksCommandError(output, context);
+ }
+ const data = await parseBody(output.body, context);
+ let contents = {};
+ contents = de_ListStacksOutput(data.ListStacksResult, context);
+ const response = {
+ $metadata: deserializeMetadata(output),
+ ...contents,
+ };
+ return response;
+};
+exports.de_ListStacksCommand = de_ListStacksCommand;
+const de_ListStacksCommandError = async (output, context) => {
+ const parsedOutput = {
+ ...output,
+ body: await parseErrorBody(output.body, context),
+ };
+ const errorCode = loadQueryErrorCode(output, parsedOutput.body);
+ const parsedBody = parsedOutput.body;
+ return throwDefaultError({
+ output,
+ parsedBody: parsedBody.Error,
+ errorCode,
+ });
+};
+const de_ListStackSetOperationResultsCommand = async (output, context) => {
+ if (output.statusCode >= 300) {
+ return de_ListStackSetOperationResultsCommandError(output, context);
+ }
+ const data = await parseBody(output.body, context);
+ let contents = {};
+ contents = de_ListStackSetOperationResultsOutput(data.ListStackSetOperationResultsResult, context);
+ const response = {
+ $metadata: deserializeMetadata(output),
+ ...contents,
+ };
+ return response;
+};
+exports.de_ListStackSetOperationResultsCommand = de_ListStackSetOperationResultsCommand;
+const de_ListStackSetOperationResultsCommandError = async (output, context) => {
+ const parsedOutput = {
+ ...output,
+ body: await parseErrorBody(output.body, context),
+ };
+ const errorCode = loadQueryErrorCode(output, parsedOutput.body);
+ switch (errorCode) {
+ case "OperationNotFoundException":
+ case "com.amazonaws.cloudformation#OperationNotFoundException":
+ throw await de_OperationNotFoundExceptionRes(parsedOutput, context);
+ case "StackSetNotFoundException":
+ case "com.amazonaws.cloudformation#StackSetNotFoundException":
+ throw await de_StackSetNotFoundExceptionRes(parsedOutput, context);
+ default:
+ const parsedBody = parsedOutput.body;
+ return throwDefaultError({
+ output,
+ parsedBody: parsedBody.Error,
+ errorCode,
+ });
+ }
+};
+const de_ListStackSetOperationsCommand = async (output, context) => {
+ if (output.statusCode >= 300) {
+ return de_ListStackSetOperationsCommandError(output, context);
+ }
+ const data = await parseBody(output.body, context);
+ let contents = {};
+ contents = de_ListStackSetOperationsOutput(data.ListStackSetOperationsResult, context);
+ const response = {
+ $metadata: deserializeMetadata(output),
+ ...contents,
+ };
+ return response;
+};
+exports.de_ListStackSetOperationsCommand = de_ListStackSetOperationsCommand;
+const de_ListStackSetOperationsCommandError = async (output, context) => {
+ const parsedOutput = {
+ ...output,
+ body: await parseErrorBody(output.body, context),
+ };
+ const errorCode = loadQueryErrorCode(output, parsedOutput.body);
+ switch (errorCode) {
+ case "StackSetNotFoundException":
+ case "com.amazonaws.cloudformation#StackSetNotFoundException":
+ throw await de_StackSetNotFoundExceptionRes(parsedOutput, context);
+ default:
+ const parsedBody = parsedOutput.body;
+ return throwDefaultError({
+ output,
+ parsedBody: parsedBody.Error,
+ errorCode,
+ });
+ }
+};
+const de_ListStackSetsCommand = async (output, context) => {
+ if (output.statusCode >= 300) {
+ return de_ListStackSetsCommandError(output, context);
+ }
+ const data = await parseBody(output.body, context);
+ let contents = {};
+ contents = de_ListStackSetsOutput(data.ListStackSetsResult, context);
+ const response = {
+ $metadata: deserializeMetadata(output),
+ ...contents,
+ };
+ return response;
+};
+exports.de_ListStackSetsCommand = de_ListStackSetsCommand;
+const de_ListStackSetsCommandError = async (output, context) => {
+ const parsedOutput = {
+ ...output,
+ body: await parseErrorBody(output.body, context),
+ };
+ const errorCode = loadQueryErrorCode(output, parsedOutput.body);
+ const parsedBody = parsedOutput.body;
+ return throwDefaultError({
+ output,
+ parsedBody: parsedBody.Error,
+ errorCode,
+ });
+};
+const de_ListTypeRegistrationsCommand = async (output, context) => {
+ if (output.statusCode >= 300) {
+ return de_ListTypeRegistrationsCommandError(output, context);
+ }
+ const data = await parseBody(output.body, context);
+ let contents = {};
+ contents = de_ListTypeRegistrationsOutput(data.ListTypeRegistrationsResult, context);
+ const response = {
+ $metadata: deserializeMetadata(output),
+ ...contents,
+ };
+ return response;
+};
+exports.de_ListTypeRegistrationsCommand = de_ListTypeRegistrationsCommand;
+const de_ListTypeRegistrationsCommandError = async (output, context) => {
+ const parsedOutput = {
+ ...output,
+ body: await parseErrorBody(output.body, context),
+ };
+ const errorCode = loadQueryErrorCode(output, parsedOutput.body);
+ switch (errorCode) {
+ case "CFNRegistryException":
+ case "com.amazonaws.cloudformation#CFNRegistryException":
+ throw await de_CFNRegistryExceptionRes(parsedOutput, context);
+ default:
+ const parsedBody = parsedOutput.body;
+ return throwDefaultError({
+ output,
+ parsedBody: parsedBody.Error,
+ errorCode,
+ });
+ }
+};
+const de_ListTypesCommand = async (output, context) => {
+ if (output.statusCode >= 300) {
+ return de_ListTypesCommandError(output, context);
+ }
+ const data = await parseBody(output.body, context);
+ let contents = {};
+ contents = de_ListTypesOutput(data.ListTypesResult, context);
+ const response = {
+ $metadata: deserializeMetadata(output),
+ ...contents,
+ };
+ return response;
+};
+exports.de_ListTypesCommand = de_ListTypesCommand;
+const de_ListTypesCommandError = async (output, context) => {
+ const parsedOutput = {
+ ...output,
+ body: await parseErrorBody(output.body, context),
+ };
+ const errorCode = loadQueryErrorCode(output, parsedOutput.body);
+ switch (errorCode) {
+ case "CFNRegistryException":
+ case "com.amazonaws.cloudformation#CFNRegistryException":
+ throw await de_CFNRegistryExceptionRes(parsedOutput, context);
+ default:
+ const parsedBody = parsedOutput.body;
+ return throwDefaultError({
+ output,
+ parsedBody: parsedBody.Error,
+ errorCode,
+ });
+ }
+};
+const de_ListTypeVersionsCommand = async (output, context) => {
+ if (output.statusCode >= 300) {
+ return de_ListTypeVersionsCommandError(output, context);
+ }
+ const data = await parseBody(output.body, context);
+ let contents = {};
+ contents = de_ListTypeVersionsOutput(data.ListTypeVersionsResult, context);
+ const response = {
+ $metadata: deserializeMetadata(output),
+ ...contents,
+ };
+ return response;
+};
+exports.de_ListTypeVersionsCommand = de_ListTypeVersionsCommand;
+const de_ListTypeVersionsCommandError = async (output, context) => {
+ const parsedOutput = {
+ ...output,
+ body: await parseErrorBody(output.body, context),
+ };
+ const errorCode = loadQueryErrorCode(output, parsedOutput.body);
+ switch (errorCode) {
+ case "CFNRegistryException":
+ case "com.amazonaws.cloudformation#CFNRegistryException":
+ throw await de_CFNRegistryExceptionRes(parsedOutput, context);
+ default:
+ const parsedBody = parsedOutput.body;
+ return throwDefaultError({
+ output,
+ parsedBody: parsedBody.Error,
+ errorCode,
+ });
+ }
+};
+const de_PublishTypeCommand = async (output, context) => {
+ if (output.statusCode >= 300) {
+ return de_PublishTypeCommandError(output, context);
+ }
+ const data = await parseBody(output.body, context);
+ let contents = {};
+ contents = de_PublishTypeOutput(data.PublishTypeResult, context);
+ const response = {
+ $metadata: deserializeMetadata(output),
+ ...contents,
+ };
+ return response;
+};
+exports.de_PublishTypeCommand = de_PublishTypeCommand;
+const de_PublishTypeCommandError = async (output, context) => {
+ const parsedOutput = {
+ ...output,
+ body: await parseErrorBody(output.body, context),
+ };
+ const errorCode = loadQueryErrorCode(output, parsedOutput.body);
+ switch (errorCode) {
+ case "CFNRegistryException":
+ case "com.amazonaws.cloudformation#CFNRegistryException":
+ throw await de_CFNRegistryExceptionRes(parsedOutput, context);
+ case "TypeNotFoundException":
+ case "com.amazonaws.cloudformation#TypeNotFoundException":
+ throw await de_TypeNotFoundExceptionRes(parsedOutput, context);
+ default:
+ const parsedBody = parsedOutput.body;
+ return throwDefaultError({
+ output,
+ parsedBody: parsedBody.Error,
+ errorCode,
+ });
+ }
+};
+const de_RecordHandlerProgressCommand = async (output, context) => {
+ if (output.statusCode >= 300) {
+ return de_RecordHandlerProgressCommandError(output, context);
+ }
+ const data = await parseBody(output.body, context);
+ let contents = {};
+ contents = de_RecordHandlerProgressOutput(data.RecordHandlerProgressResult, context);
+ const response = {
+ $metadata: deserializeMetadata(output),
+ ...contents,
+ };
+ return response;
+};
+exports.de_RecordHandlerProgressCommand = de_RecordHandlerProgressCommand;
+const de_RecordHandlerProgressCommandError = async (output, context) => {
+ const parsedOutput = {
+ ...output,
+ body: await parseErrorBody(output.body, context),
+ };
+ const errorCode = loadQueryErrorCode(output, parsedOutput.body);
+ switch (errorCode) {
+ case "ConditionalCheckFailed":
+ case "com.amazonaws.cloudformation#OperationStatusCheckFailedException":
+ throw await de_OperationStatusCheckFailedExceptionRes(parsedOutput, context);
+ case "InvalidStateTransition":
+ case "com.amazonaws.cloudformation#InvalidStateTransitionException":
+ throw await de_InvalidStateTransitionExceptionRes(parsedOutput, context);
+ default:
+ const parsedBody = parsedOutput.body;
+ return throwDefaultError({
+ output,
+ parsedBody: parsedBody.Error,
+ errorCode,
+ });
+ }
+};
+const de_RegisterPublisherCommand = async (output, context) => {
+ if (output.statusCode >= 300) {
+ return de_RegisterPublisherCommandError(output, context);
+ }
+ const data = await parseBody(output.body, context);
+ let contents = {};
+ contents = de_RegisterPublisherOutput(data.RegisterPublisherResult, context);
+ const response = {
+ $metadata: deserializeMetadata(output),
+ ...contents,
+ };
+ return response;
+};
+exports.de_RegisterPublisherCommand = de_RegisterPublisherCommand;
+const de_RegisterPublisherCommandError = async (output, context) => {
+ const parsedOutput = {
+ ...output,
+ body: await parseErrorBody(output.body, context),
+ };
+ const errorCode = loadQueryErrorCode(output, parsedOutput.body);
+ switch (errorCode) {
+ case "CFNRegistryException":
+ case "com.amazonaws.cloudformation#CFNRegistryException":
+ throw await de_CFNRegistryExceptionRes(parsedOutput, context);
+ default:
+ const parsedBody = parsedOutput.body;
+ return throwDefaultError({
+ output,
+ parsedBody: parsedBody.Error,
+ errorCode,
+ });
+ }
+};
+const de_RegisterTypeCommand = async (output, context) => {
+ if (output.statusCode >= 300) {
+ return de_RegisterTypeCommandError(output, context);
+ }
+ const data = await parseBody(output.body, context);
+ let contents = {};
+ contents = de_RegisterTypeOutput(data.RegisterTypeResult, context);
+ const response = {
+ $metadata: deserializeMetadata(output),
+ ...contents,
+ };
+ return response;
+};
+exports.de_RegisterTypeCommand = de_RegisterTypeCommand;
+const de_RegisterTypeCommandError = async (output, context) => {
+ const parsedOutput = {
+ ...output,
+ body: await parseErrorBody(output.body, context),
+ };
+ const errorCode = loadQueryErrorCode(output, parsedOutput.body);
+ switch (errorCode) {
+ case "CFNRegistryException":
+ case "com.amazonaws.cloudformation#CFNRegistryException":
+ throw await de_CFNRegistryExceptionRes(parsedOutput, context);
+ default:
+ const parsedBody = parsedOutput.body;
+ return throwDefaultError({
+ output,
+ parsedBody: parsedBody.Error,
+ errorCode,
+ });
+ }
+};
+const de_RollbackStackCommand = async (output, context) => {
+ if (output.statusCode >= 300) {
+ return de_RollbackStackCommandError(output, context);
+ }
+ const data = await parseBody(output.body, context);
+ let contents = {};
+ contents = de_RollbackStackOutput(data.RollbackStackResult, context);
+ const response = {
+ $metadata: deserializeMetadata(output),
+ ...contents,
+ };
+ return response;
+};
+exports.de_RollbackStackCommand = de_RollbackStackCommand;
+const de_RollbackStackCommandError = async (output, context) => {
+ const parsedOutput = {
+ ...output,
+ body: await parseErrorBody(output.body, context),
+ };
+ const errorCode = loadQueryErrorCode(output, parsedOutput.body);
+ switch (errorCode) {
+ case "TokenAlreadyExistsException":
+ case "com.amazonaws.cloudformation#TokenAlreadyExistsException":
+ throw await de_TokenAlreadyExistsExceptionRes(parsedOutput, context);
+ default:
+ const parsedBody = parsedOutput.body;
+ return throwDefaultError({
+ output,
+ parsedBody: parsedBody.Error,
+ errorCode,
+ });
+ }
+};
+const de_SetStackPolicyCommand = async (output, context) => {
+ if (output.statusCode >= 300) {
+ return de_SetStackPolicyCommandError(output, context);
+ }
+ await (0, smithy_client_1.collectBody)(output.body, context);
+ const response = {
+ $metadata: deserializeMetadata(output),
+ };
+ return response;
+};
+exports.de_SetStackPolicyCommand = de_SetStackPolicyCommand;
+const de_SetStackPolicyCommandError = async (output, context) => {
+ const parsedOutput = {
+ ...output,
+ body: await parseErrorBody(output.body, context),
+ };
+ const errorCode = loadQueryErrorCode(output, parsedOutput.body);
+ const parsedBody = parsedOutput.body;
+ return throwDefaultError({
+ output,
+ parsedBody: parsedBody.Error,
+ errorCode,
+ });
+};
+const de_SetTypeConfigurationCommand = async (output, context) => {
+ if (output.statusCode >= 300) {
+ return de_SetTypeConfigurationCommandError(output, context);
+ }
+ const data = await parseBody(output.body, context);
+ let contents = {};
+ contents = de_SetTypeConfigurationOutput(data.SetTypeConfigurationResult, context);
+ const response = {
+ $metadata: deserializeMetadata(output),
+ ...contents,
+ };
+ return response;
+};
+exports.de_SetTypeConfigurationCommand = de_SetTypeConfigurationCommand;
+const de_SetTypeConfigurationCommandError = async (output, context) => {
+ const parsedOutput = {
+ ...output,
+ body: await parseErrorBody(output.body, context),
+ };
+ const errorCode = loadQueryErrorCode(output, parsedOutput.body);
+ switch (errorCode) {
+ case "CFNRegistryException":
+ case "com.amazonaws.cloudformation#CFNRegistryException":
+ throw await de_CFNRegistryExceptionRes(parsedOutput, context);
+ case "TypeNotFoundException":
+ case "com.amazonaws.cloudformation#TypeNotFoundException":
+ throw await de_TypeNotFoundExceptionRes(parsedOutput, context);
+ default:
+ const parsedBody = parsedOutput.body;
+ return throwDefaultError({
+ output,
+ parsedBody: parsedBody.Error,
+ errorCode,
+ });
+ }
+};
+const de_SetTypeDefaultVersionCommand = async (output, context) => {
+ if (output.statusCode >= 300) {
+ return de_SetTypeDefaultVersionCommandError(output, context);
+ }
+ const data = await parseBody(output.body, context);
+ let contents = {};
+ contents = de_SetTypeDefaultVersionOutput(data.SetTypeDefaultVersionResult, context);
+ const response = {
+ $metadata: deserializeMetadata(output),
+ ...contents,
+ };
+ return response;
+};
+exports.de_SetTypeDefaultVersionCommand = de_SetTypeDefaultVersionCommand;
+const de_SetTypeDefaultVersionCommandError = async (output, context) => {
+ const parsedOutput = {
+ ...output,
+ body: await parseErrorBody(output.body, context),
+ };
+ const errorCode = loadQueryErrorCode(output, parsedOutput.body);
+ switch (errorCode) {
+ case "CFNRegistryException":
+ case "com.amazonaws.cloudformation#CFNRegistryException":
+ throw await de_CFNRegistryExceptionRes(parsedOutput, context);
+ case "TypeNotFoundException":
+ case "com.amazonaws.cloudformation#TypeNotFoundException":
+ throw await de_TypeNotFoundExceptionRes(parsedOutput, context);
+ default:
+ const parsedBody = parsedOutput.body;
+ return throwDefaultError({
+ output,
+ parsedBody: parsedBody.Error,
+ errorCode,
+ });
+ }
+};
+const de_SignalResourceCommand = async (output, context) => {
+ if (output.statusCode >= 300) {
+ return de_SignalResourceCommandError(output, context);
+ }
+ await (0, smithy_client_1.collectBody)(output.body, context);
+ const response = {
+ $metadata: deserializeMetadata(output),
+ };
+ return response;
+};
+exports.de_SignalResourceCommand = de_SignalResourceCommand;
+const de_SignalResourceCommandError = async (output, context) => {
+ const parsedOutput = {
+ ...output,
+ body: await parseErrorBody(output.body, context),
+ };
+ const errorCode = loadQueryErrorCode(output, parsedOutput.body);
+ const parsedBody = parsedOutput.body;
+ return throwDefaultError({
+ output,
+ parsedBody: parsedBody.Error,
+ errorCode,
+ });
+};
+const de_StopStackSetOperationCommand = async (output, context) => {
+ if (output.statusCode >= 300) {
+ return de_StopStackSetOperationCommandError(output, context);
+ }
+ const data = await parseBody(output.body, context);
+ let contents = {};
+ contents = de_StopStackSetOperationOutput(data.StopStackSetOperationResult, context);
+ const response = {
+ $metadata: deserializeMetadata(output),
+ ...contents,
+ };
+ return response;
+};
+exports.de_StopStackSetOperationCommand = de_StopStackSetOperationCommand;
+const de_StopStackSetOperationCommandError = async (output, context) => {
+ const parsedOutput = {
+ ...output,
+ body: await parseErrorBody(output.body, context),
+ };
+ const errorCode = loadQueryErrorCode(output, parsedOutput.body);
+ switch (errorCode) {
+ case "InvalidOperationException":
+ case "com.amazonaws.cloudformation#InvalidOperationException":
+ throw await de_InvalidOperationExceptionRes(parsedOutput, context);
+ case "OperationNotFoundException":
+ case "com.amazonaws.cloudformation#OperationNotFoundException":
+ throw await de_OperationNotFoundExceptionRes(parsedOutput, context);
+ case "StackSetNotFoundException":
+ case "com.amazonaws.cloudformation#StackSetNotFoundException":
+ throw await de_StackSetNotFoundExceptionRes(parsedOutput, context);
+ default:
+ const parsedBody = parsedOutput.body;
+ return throwDefaultError({
+ output,
+ parsedBody: parsedBody.Error,
+ errorCode,
+ });
+ }
+};
+const de_TestTypeCommand = async (output, context) => {
+ if (output.statusCode >= 300) {
+ return de_TestTypeCommandError(output, context);
+ }
+ const data = await parseBody(output.body, context);
+ let contents = {};
+ contents = de_TestTypeOutput(data.TestTypeResult, context);
+ const response = {
+ $metadata: deserializeMetadata(output),
+ ...contents,
+ };
+ return response;
+};
+exports.de_TestTypeCommand = de_TestTypeCommand;
+const de_TestTypeCommandError = async (output, context) => {
+ const parsedOutput = {
+ ...output,
+ body: await parseErrorBody(output.body, context),
+ };
+ const errorCode = loadQueryErrorCode(output, parsedOutput.body);
+ switch (errorCode) {
+ case "CFNRegistryException":
+ case "com.amazonaws.cloudformation#CFNRegistryException":
+ throw await de_CFNRegistryExceptionRes(parsedOutput, context);
+ case "TypeNotFoundException":
+ case "com.amazonaws.cloudformation#TypeNotFoundException":
+ throw await de_TypeNotFoundExceptionRes(parsedOutput, context);
+ default:
+ const parsedBody = parsedOutput.body;
+ return throwDefaultError({
+ output,
+ parsedBody: parsedBody.Error,
+ errorCode,
+ });
+ }
+};
+const de_UpdateStackCommand = async (output, context) => {
+ if (output.statusCode >= 300) {
+ return de_UpdateStackCommandError(output, context);
+ }
+ const data = await parseBody(output.body, context);
+ let contents = {};
+ contents = de_UpdateStackOutput(data.UpdateStackResult, context);
+ const response = {
+ $metadata: deserializeMetadata(output),
+ ...contents,
+ };
+ return response;
+};
+exports.de_UpdateStackCommand = de_UpdateStackCommand;
+const de_UpdateStackCommandError = async (output, context) => {
+ const parsedOutput = {
+ ...output,
+ body: await parseErrorBody(output.body, context),
+ };
+ const errorCode = loadQueryErrorCode(output, parsedOutput.body);
+ switch (errorCode) {
+ case "InsufficientCapabilitiesException":
+ case "com.amazonaws.cloudformation#InsufficientCapabilitiesException":
+ throw await de_InsufficientCapabilitiesExceptionRes(parsedOutput, context);
+ case "TokenAlreadyExistsException":
+ case "com.amazonaws.cloudformation#TokenAlreadyExistsException":
+ throw await de_TokenAlreadyExistsExceptionRes(parsedOutput, context);
+ default:
+ const parsedBody = parsedOutput.body;
+ return throwDefaultError({
+ output,
+ parsedBody: parsedBody.Error,
+ errorCode,
+ });
+ }
+};
+const de_UpdateStackInstancesCommand = async (output, context) => {
+ if (output.statusCode >= 300) {
+ return de_UpdateStackInstancesCommandError(output, context);
+ }
+ const data = await parseBody(output.body, context);
+ let contents = {};
+ contents = de_UpdateStackInstancesOutput(data.UpdateStackInstancesResult, context);
+ const response = {
+ $metadata: deserializeMetadata(output),
+ ...contents,
+ };
+ return response;
+};
+exports.de_UpdateStackInstancesCommand = de_UpdateStackInstancesCommand;
+const de_UpdateStackInstancesCommandError = async (output, context) => {
+ const parsedOutput = {
+ ...output,
+ body: await parseErrorBody(output.body, context),
+ };
+ const errorCode = loadQueryErrorCode(output, parsedOutput.body);
+ switch (errorCode) {
+ case "InvalidOperationException":
+ case "com.amazonaws.cloudformation#InvalidOperationException":
+ throw await de_InvalidOperationExceptionRes(parsedOutput, context);
+ case "OperationIdAlreadyExistsException":
+ case "com.amazonaws.cloudformation#OperationIdAlreadyExistsException":
+ throw await de_OperationIdAlreadyExistsExceptionRes(parsedOutput, context);
+ case "OperationInProgressException":
+ case "com.amazonaws.cloudformation#OperationInProgressException":
+ throw await de_OperationInProgressExceptionRes(parsedOutput, context);
+ case "StackInstanceNotFoundException":
+ case "com.amazonaws.cloudformation#StackInstanceNotFoundException":
+ throw await de_StackInstanceNotFoundExceptionRes(parsedOutput, context);
+ case "StackSetNotFoundException":
+ case "com.amazonaws.cloudformation#StackSetNotFoundException":
+ throw await de_StackSetNotFoundExceptionRes(parsedOutput, context);
+ case "StaleRequestException":
+ case "com.amazonaws.cloudformation#StaleRequestException":
+ throw await de_StaleRequestExceptionRes(parsedOutput, context);
+ default:
+ const parsedBody = parsedOutput.body;
+ return throwDefaultError({
+ output,
+ parsedBody: parsedBody.Error,
+ errorCode,
+ });
+ }
+};
+const de_UpdateStackSetCommand = async (output, context) => {
+ if (output.statusCode >= 300) {
+ return de_UpdateStackSetCommandError(output, context);
+ }
+ const data = await parseBody(output.body, context);
+ let contents = {};
+ contents = de_UpdateStackSetOutput(data.UpdateStackSetResult, context);
+ const response = {
+ $metadata: deserializeMetadata(output),
+ ...contents,
+ };
+ return response;
+};
+exports.de_UpdateStackSetCommand = de_UpdateStackSetCommand;
+const de_UpdateStackSetCommandError = async (output, context) => {
+ const parsedOutput = {
+ ...output,
+ body: await parseErrorBody(output.body, context),
+ };
+ const errorCode = loadQueryErrorCode(output, parsedOutput.body);
+ switch (errorCode) {
+ case "InvalidOperationException":
+ case "com.amazonaws.cloudformation#InvalidOperationException":
+ throw await de_InvalidOperationExceptionRes(parsedOutput, context);
+ case "OperationIdAlreadyExistsException":
+ case "com.amazonaws.cloudformation#OperationIdAlreadyExistsException":
+ throw await de_OperationIdAlreadyExistsExceptionRes(parsedOutput, context);
+ case "OperationInProgressException":
+ case "com.amazonaws.cloudformation#OperationInProgressException":
+ throw await de_OperationInProgressExceptionRes(parsedOutput, context);
+ case "StackInstanceNotFoundException":
+ case "com.amazonaws.cloudformation#StackInstanceNotFoundException":
+ throw await de_StackInstanceNotFoundExceptionRes(parsedOutput, context);
+ case "StackSetNotFoundException":
+ case "com.amazonaws.cloudformation#StackSetNotFoundException":
+ throw await de_StackSetNotFoundExceptionRes(parsedOutput, context);
+ case "StaleRequestException":
+ case "com.amazonaws.cloudformation#StaleRequestException":
+ throw await de_StaleRequestExceptionRes(parsedOutput, context);
+ default:
+ const parsedBody = parsedOutput.body;
+ return throwDefaultError({
+ output,
+ parsedBody: parsedBody.Error,
+ errorCode,
+ });
+ }
+};
+const de_UpdateTerminationProtectionCommand = async (output, context) => {
+ if (output.statusCode >= 300) {
+ return de_UpdateTerminationProtectionCommandError(output, context);
+ }
+ const data = await parseBody(output.body, context);
+ let contents = {};
+ contents = de_UpdateTerminationProtectionOutput(data.UpdateTerminationProtectionResult, context);
+ const response = {
+ $metadata: deserializeMetadata(output),
+ ...contents,
+ };
+ return response;
+};
+exports.de_UpdateTerminationProtectionCommand = de_UpdateTerminationProtectionCommand;
+const de_UpdateTerminationProtectionCommandError = async (output, context) => {
+ const parsedOutput = {
+ ...output,
+ body: await parseErrorBody(output.body, context),
+ };
+ const errorCode = loadQueryErrorCode(output, parsedOutput.body);
+ const parsedBody = parsedOutput.body;
+ return throwDefaultError({
+ output,
+ parsedBody: parsedBody.Error,
+ errorCode,
+ });
+};
+const de_ValidateTemplateCommand = async (output, context) => {
+ if (output.statusCode >= 300) {
+ return de_ValidateTemplateCommandError(output, context);
+ }
+ const data = await parseBody(output.body, context);
+ let contents = {};
+ contents = de_ValidateTemplateOutput(data.ValidateTemplateResult, context);
+ const response = {
+ $metadata: deserializeMetadata(output),
+ ...contents,
+ };
+ return response;
+};
+exports.de_ValidateTemplateCommand = de_ValidateTemplateCommand;
+const de_ValidateTemplateCommandError = async (output, context) => {
+ const parsedOutput = {
+ ...output,
+ body: await parseErrorBody(output.body, context),
+ };
+ const errorCode = loadQueryErrorCode(output, parsedOutput.body);
+ const parsedBody = parsedOutput.body;
+ return throwDefaultError({
+ output,
+ parsedBody: parsedBody.Error,
+ errorCode,
+ });
+};
+const de_AlreadyExistsExceptionRes = async (parsedOutput, context) => {
+ const body = parsedOutput.body;
+ const deserialized = de_AlreadyExistsException(body.Error, context);
+ const exception = new models_0_1.AlreadyExistsException({
+ $metadata: deserializeMetadata(parsedOutput),
+ ...deserialized,
+ });
+ return (0, smithy_client_1.decorateServiceException)(exception, body);
+};
+const de_CFNRegistryExceptionRes = async (parsedOutput, context) => {
+ const body = parsedOutput.body;
+ const deserialized = de_CFNRegistryException(body.Error, context);
+ const exception = new models_0_1.CFNRegistryException({
+ $metadata: deserializeMetadata(parsedOutput),
+ ...deserialized,
+ });
+ return (0, smithy_client_1.decorateServiceException)(exception, body);
+};
+const de_ChangeSetNotFoundExceptionRes = async (parsedOutput, context) => {
+ const body = parsedOutput.body;
+ const deserialized = de_ChangeSetNotFoundException(body.Error, context);
+ const exception = new models_0_1.ChangeSetNotFoundException({
+ $metadata: deserializeMetadata(parsedOutput),
+ ...deserialized,
+ });
+ return (0, smithy_client_1.decorateServiceException)(exception, body);
+};
+const de_CreatedButModifiedExceptionRes = async (parsedOutput, context) => {
+ const body = parsedOutput.body;
+ const deserialized = de_CreatedButModifiedException(body.Error, context);
+ const exception = new models_0_1.CreatedButModifiedException({
+ $metadata: deserializeMetadata(parsedOutput),
+ ...deserialized,
+ });
+ return (0, smithy_client_1.decorateServiceException)(exception, body);
+};
+const de_InsufficientCapabilitiesExceptionRes = async (parsedOutput, context) => {
+ const body = parsedOutput.body;
+ const deserialized = de_InsufficientCapabilitiesException(body.Error, context);
+ const exception = new models_0_1.InsufficientCapabilitiesException({
+ $metadata: deserializeMetadata(parsedOutput),
+ ...deserialized,
+ });
+ return (0, smithy_client_1.decorateServiceException)(exception, body);
+};
+const de_InvalidChangeSetStatusExceptionRes = async (parsedOutput, context) => {
+ const body = parsedOutput.body;
+ const deserialized = de_InvalidChangeSetStatusException(body.Error, context);
+ const exception = new models_0_1.InvalidChangeSetStatusException({
+ $metadata: deserializeMetadata(parsedOutput),
+ ...deserialized,
+ });
+ return (0, smithy_client_1.decorateServiceException)(exception, body);
+};
+const de_InvalidOperationExceptionRes = async (parsedOutput, context) => {
+ const body = parsedOutput.body;
+ const deserialized = de_InvalidOperationException(body.Error, context);
+ const exception = new models_0_1.InvalidOperationException({
+ $metadata: deserializeMetadata(parsedOutput),
+ ...deserialized,
+ });
+ return (0, smithy_client_1.decorateServiceException)(exception, body);
+};
+const de_InvalidStateTransitionExceptionRes = async (parsedOutput, context) => {
+ const body = parsedOutput.body;
+ const deserialized = de_InvalidStateTransitionException(body.Error, context);
+ const exception = new models_0_1.InvalidStateTransitionException({
+ $metadata: deserializeMetadata(parsedOutput),
+ ...deserialized,
+ });
+ return (0, smithy_client_1.decorateServiceException)(exception, body);
+};
+const de_LimitExceededExceptionRes = async (parsedOutput, context) => {
+ const body = parsedOutput.body;
+ const deserialized = de_LimitExceededException(body.Error, context);
+ const exception = new models_0_1.LimitExceededException({
+ $metadata: deserializeMetadata(parsedOutput),
+ ...deserialized,
+ });
+ return (0, smithy_client_1.decorateServiceException)(exception, body);
+};
+const de_NameAlreadyExistsExceptionRes = async (parsedOutput, context) => {
+ const body = parsedOutput.body;
+ const deserialized = de_NameAlreadyExistsException(body.Error, context);
+ const exception = new models_0_1.NameAlreadyExistsException({
+ $metadata: deserializeMetadata(parsedOutput),
+ ...deserialized,
+ });
+ return (0, smithy_client_1.decorateServiceException)(exception, body);
+};
+const de_OperationIdAlreadyExistsExceptionRes = async (parsedOutput, context) => {
+ const body = parsedOutput.body;
+ const deserialized = de_OperationIdAlreadyExistsException(body.Error, context);
+ const exception = new models_0_1.OperationIdAlreadyExistsException({
+ $metadata: deserializeMetadata(parsedOutput),
+ ...deserialized,
+ });
+ return (0, smithy_client_1.decorateServiceException)(exception, body);
+};
+const de_OperationInProgressExceptionRes = async (parsedOutput, context) => {
+ const body = parsedOutput.body;
+ const deserialized = de_OperationInProgressException(body.Error, context);
+ const exception = new models_0_1.OperationInProgressException({
+ $metadata: deserializeMetadata(parsedOutput),
+ ...deserialized,
+ });
+ return (0, smithy_client_1.decorateServiceException)(exception, body);
+};
+const de_OperationNotFoundExceptionRes = async (parsedOutput, context) => {
+ const body = parsedOutput.body;
+ const deserialized = de_OperationNotFoundException(body.Error, context);
+ const exception = new models_0_1.OperationNotFoundException({
+ $metadata: deserializeMetadata(parsedOutput),
+ ...deserialized,
+ });
+ return (0, smithy_client_1.decorateServiceException)(exception, body);
+};
+const de_OperationStatusCheckFailedExceptionRes = async (parsedOutput, context) => {
+ const body = parsedOutput.body;
+ const deserialized = de_OperationStatusCheckFailedException(body.Error, context);
+ const exception = new models_0_1.OperationStatusCheckFailedException({
+ $metadata: deserializeMetadata(parsedOutput),
+ ...deserialized,
+ });
+ return (0, smithy_client_1.decorateServiceException)(exception, body);
+};
+const de_StackInstanceNotFoundExceptionRes = async (parsedOutput, context) => {
+ const body = parsedOutput.body;
+ const deserialized = de_StackInstanceNotFoundException(body.Error, context);
+ const exception = new models_0_1.StackInstanceNotFoundException({
+ $metadata: deserializeMetadata(parsedOutput),
+ ...deserialized,
+ });
+ return (0, smithy_client_1.decorateServiceException)(exception, body);
+};
+const de_StackNotFoundExceptionRes = async (parsedOutput, context) => {
+ const body = parsedOutput.body;
+ const deserialized = de_StackNotFoundException(body.Error, context);
+ const exception = new models_0_1.StackNotFoundException({
+ $metadata: deserializeMetadata(parsedOutput),
+ ...deserialized,
+ });
+ return (0, smithy_client_1.decorateServiceException)(exception, body);
+};
+const de_StackSetNotEmptyExceptionRes = async (parsedOutput, context) => {
+ const body = parsedOutput.body;
+ const deserialized = de_StackSetNotEmptyException(body.Error, context);
+ const exception = new models_0_1.StackSetNotEmptyException({
+ $metadata: deserializeMetadata(parsedOutput),
+ ...deserialized,
+ });
+ return (0, smithy_client_1.decorateServiceException)(exception, body);
+};
+const de_StackSetNotFoundExceptionRes = async (parsedOutput, context) => {
+ const body = parsedOutput.body;
+ const deserialized = de_StackSetNotFoundException(body.Error, context);
+ const exception = new models_0_1.StackSetNotFoundException({
+ $metadata: deserializeMetadata(parsedOutput),
+ ...deserialized,
+ });
+ return (0, smithy_client_1.decorateServiceException)(exception, body);
+};
+const de_StaleRequestExceptionRes = async (parsedOutput, context) => {
+ const body = parsedOutput.body;
+ const deserialized = de_StaleRequestException(body.Error, context);
+ const exception = new models_0_1.StaleRequestException({
+ $metadata: deserializeMetadata(parsedOutput),
+ ...deserialized,
+ });
+ return (0, smithy_client_1.decorateServiceException)(exception, body);
+};
+const de_TokenAlreadyExistsExceptionRes = async (parsedOutput, context) => {
+ const body = parsedOutput.body;
+ const deserialized = de_TokenAlreadyExistsException(body.Error, context);
+ const exception = new models_0_1.TokenAlreadyExistsException({
+ $metadata: deserializeMetadata(parsedOutput),
+ ...deserialized,
+ });
+ return (0, smithy_client_1.decorateServiceException)(exception, body);
+};
+const de_TypeConfigurationNotFoundExceptionRes = async (parsedOutput, context) => {
+ const body = parsedOutput.body;
+ const deserialized = de_TypeConfigurationNotFoundException(body.Error, context);
+ const exception = new models_0_1.TypeConfigurationNotFoundException({
+ $metadata: deserializeMetadata(parsedOutput),
+ ...deserialized,
+ });
+ return (0, smithy_client_1.decorateServiceException)(exception, body);
+};
+const de_TypeNotFoundExceptionRes = async (parsedOutput, context) => {
+ const body = parsedOutput.body;
+ const deserialized = de_TypeNotFoundException(body.Error, context);
+ const exception = new models_0_1.TypeNotFoundException({
+ $metadata: deserializeMetadata(parsedOutput),
+ ...deserialized,
+ });
+ return (0, smithy_client_1.decorateServiceException)(exception, body);
+};
+const se_AccountList = (input, context) => {
+ const entries = {};
+ let counter = 1;
+ for (const entry of input) {
+ if (entry === null) {
+ continue;
+ }
+ entries[`member.${counter}`] = entry;
+ counter++;
+ }
+ return entries;
+};
+const se_ActivateOrganizationsAccessInput = (input, context) => {
+ const entries = {};
+ return entries;
+};
+const se_ActivateTypeInput = (input, context) => {
+ const entries = {};
+ if (input.Type != null) {
+ entries["Type"] = input.Type;
+ }
+ if (input.PublicTypeArn != null) {
+ entries["PublicTypeArn"] = input.PublicTypeArn;
+ }
+ if (input.PublisherId != null) {
+ entries["PublisherId"] = input.PublisherId;
+ }
+ if (input.TypeName != null) {
+ entries["TypeName"] = input.TypeName;
+ }
+ if (input.TypeNameAlias != null) {
+ entries["TypeNameAlias"] = input.TypeNameAlias;
+ }
+ if (input.AutoUpdate != null) {
+ entries["AutoUpdate"] = input.AutoUpdate;
+ }
+ if (input.LoggingConfig != null) {
+ const memberEntries = se_LoggingConfig(input.LoggingConfig, context);
+ Object.entries(memberEntries).forEach(([key, value]) => {
+ const loc = `LoggingConfig.${key}`;
+ entries[loc] = value;
+ });
+ }
+ if (input.ExecutionRoleArn != null) {
+ entries["ExecutionRoleArn"] = input.ExecutionRoleArn;
+ }
+ if (input.VersionBump != null) {
+ entries["VersionBump"] = input.VersionBump;
+ }
+ if (input.MajorVersion != null) {
+ entries["MajorVersion"] = input.MajorVersion;
+ }
+ return entries;
+};
+const se_AutoDeployment = (input, context) => {
+ const entries = {};
+ if (input.Enabled != null) {
+ entries["Enabled"] = input.Enabled;
+ }
+ if (input.RetainStacksOnAccountRemoval != null) {
+ entries["RetainStacksOnAccountRemoval"] = input.RetainStacksOnAccountRemoval;
+ }
+ return entries;
+};
+const se_BatchDescribeTypeConfigurationsInput = (input, context) => {
+ const entries = {};
+ if (input.TypeConfigurationIdentifiers != null) {
+ const memberEntries = se_TypeConfigurationIdentifiers(input.TypeConfigurationIdentifiers, context);
+ if (input.TypeConfigurationIdentifiers?.length === 0) {
+ entries.TypeConfigurationIdentifiers = [];
+ }
+ Object.entries(memberEntries).forEach(([key, value]) => {
+ const loc = `TypeConfigurationIdentifiers.${key}`;
+ entries[loc] = value;
+ });
+ }
+ return entries;
+};
+const se_CancelUpdateStackInput = (input, context) => {
+ const entries = {};
+ if (input.StackName != null) {
+ entries["StackName"] = input.StackName;
+ }
+ if (input.ClientRequestToken != null) {
+ entries["ClientRequestToken"] = input.ClientRequestToken;
+ }
+ return entries;
+};
+const se_Capabilities = (input, context) => {
+ const entries = {};
+ let counter = 1;
+ for (const entry of input) {
+ if (entry === null) {
+ continue;
+ }
+ entries[`member.${counter}`] = entry;
+ counter++;
+ }
+ return entries;
+};
+const se_ContinueUpdateRollbackInput = (input, context) => {
+ const entries = {};
+ if (input.StackName != null) {
+ entries["StackName"] = input.StackName;
+ }
+ if (input.RoleARN != null) {
+ entries["RoleARN"] = input.RoleARN;
+ }
+ if (input.ResourcesToSkip != null) {
+ const memberEntries = se_ResourcesToSkip(input.ResourcesToSkip, context);
+ if (input.ResourcesToSkip?.length === 0) {
+ entries.ResourcesToSkip = [];
+ }
+ Object.entries(memberEntries).forEach(([key, value]) => {
+ const loc = `ResourcesToSkip.${key}`;
+ entries[loc] = value;
+ });
+ }
+ if (input.ClientRequestToken != null) {
+ entries["ClientRequestToken"] = input.ClientRequestToken;
+ }
+ return entries;
+};
+const se_CreateChangeSetInput = (input, context) => {
+ const entries = {};
+ if (input.StackName != null) {
+ entries["StackName"] = input.StackName;
+ }
+ if (input.TemplateBody != null) {
+ entries["TemplateBody"] = input.TemplateBody;
+ }
+ if (input.TemplateURL != null) {
+ entries["TemplateURL"] = input.TemplateURL;
+ }
+ if (input.UsePreviousTemplate != null) {
+ entries["UsePreviousTemplate"] = input.UsePreviousTemplate;
+ }
+ if (input.Parameters != null) {
+ const memberEntries = se_Parameters(input.Parameters, context);
+ if (input.Parameters?.length === 0) {
+ entries.Parameters = [];
+ }
+ Object.entries(memberEntries).forEach(([key, value]) => {
+ const loc = `Parameters.${key}`;
+ entries[loc] = value;
+ });
+ }
+ if (input.Capabilities != null) {
+ const memberEntries = se_Capabilities(input.Capabilities, context);
+ if (input.Capabilities?.length === 0) {
+ entries.Capabilities = [];
+ }
+ Object.entries(memberEntries).forEach(([key, value]) => {
+ const loc = `Capabilities.${key}`;
+ entries[loc] = value;
+ });
+ }
+ if (input.ResourceTypes != null) {
+ const memberEntries = se_ResourceTypes(input.ResourceTypes, context);
+ if (input.ResourceTypes?.length === 0) {
+ entries.ResourceTypes = [];
+ }
+ Object.entries(memberEntries).forEach(([key, value]) => {
+ const loc = `ResourceTypes.${key}`;
+ entries[loc] = value;
+ });
+ }
+ if (input.RoleARN != null) {
+ entries["RoleARN"] = input.RoleARN;
+ }
+ if (input.RollbackConfiguration != null) {
+ const memberEntries = se_RollbackConfiguration(input.RollbackConfiguration, context);
+ Object.entries(memberEntries).forEach(([key, value]) => {
+ const loc = `RollbackConfiguration.${key}`;
+ entries[loc] = value;
+ });
+ }
+ if (input.NotificationARNs != null) {
+ const memberEntries = se_NotificationARNs(input.NotificationARNs, context);
+ if (input.NotificationARNs?.length === 0) {
+ entries.NotificationARNs = [];
+ }
+ Object.entries(memberEntries).forEach(([key, value]) => {
+ const loc = `NotificationARNs.${key}`;
+ entries[loc] = value;
+ });
+ }
+ if (input.Tags != null) {
+ const memberEntries = se_Tags(input.Tags, context);
+ if (input.Tags?.length === 0) {
+ entries.Tags = [];
+ }
+ Object.entries(memberEntries).forEach(([key, value]) => {
+ const loc = `Tags.${key}`;
+ entries[loc] = value;
+ });
+ }
+ if (input.ChangeSetName != null) {
+ entries["ChangeSetName"] = input.ChangeSetName;
+ }
+ if (input.ClientToken != null) {
+ entries["ClientToken"] = input.ClientToken;
+ }
+ if (input.Description != null) {
+ entries["Description"] = input.Description;
+ }
+ if (input.ChangeSetType != null) {
+ entries["ChangeSetType"] = input.ChangeSetType;
+ }
+ if (input.ResourcesToImport != null) {
+ const memberEntries = se_ResourcesToImport(input.ResourcesToImport, context);
+ if (input.ResourcesToImport?.length === 0) {
+ entries.ResourcesToImport = [];
+ }
+ Object.entries(memberEntries).forEach(([key, value]) => {
+ const loc = `ResourcesToImport.${key}`;
+ entries[loc] = value;
+ });
+ }
+ if (input.IncludeNestedStacks != null) {
+ entries["IncludeNestedStacks"] = input.IncludeNestedStacks;
+ }
+ if (input.OnStackFailure != null) {
+ entries["OnStackFailure"] = input.OnStackFailure;
+ }
+ return entries;
+};
+const se_CreateStackInput = (input, context) => {
+ const entries = {};
+ if (input.StackName != null) {
+ entries["StackName"] = input.StackName;
+ }
+ if (input.TemplateBody != null) {
+ entries["TemplateBody"] = input.TemplateBody;
+ }
+ if (input.TemplateURL != null) {
+ entries["TemplateURL"] = input.TemplateURL;
+ }
+ if (input.Parameters != null) {
+ const memberEntries = se_Parameters(input.Parameters, context);
+ if (input.Parameters?.length === 0) {
+ entries.Parameters = [];
+ }
+ Object.entries(memberEntries).forEach(([key, value]) => {
+ const loc = `Parameters.${key}`;
+ entries[loc] = value;
+ });
+ }
+ if (input.DisableRollback != null) {
+ entries["DisableRollback"] = input.DisableRollback;
+ }
+ if (input.RollbackConfiguration != null) {
+ const memberEntries = se_RollbackConfiguration(input.RollbackConfiguration, context);
+ Object.entries(memberEntries).forEach(([key, value]) => {
+ const loc = `RollbackConfiguration.${key}`;
+ entries[loc] = value;
+ });
+ }
+ if (input.TimeoutInMinutes != null) {
+ entries["TimeoutInMinutes"] = input.TimeoutInMinutes;
+ }
+ if (input.NotificationARNs != null) {
+ const memberEntries = se_NotificationARNs(input.NotificationARNs, context);
+ if (input.NotificationARNs?.length === 0) {
+ entries.NotificationARNs = [];
+ }
+ Object.entries(memberEntries).forEach(([key, value]) => {
+ const loc = `NotificationARNs.${key}`;
+ entries[loc] = value;
+ });
+ }
+ if (input.Capabilities != null) {
+ const memberEntries = se_Capabilities(input.Capabilities, context);
+ if (input.Capabilities?.length === 0) {
+ entries.Capabilities = [];
+ }
+ Object.entries(memberEntries).forEach(([key, value]) => {
+ const loc = `Capabilities.${key}`;
+ entries[loc] = value;
+ });
+ }
+ if (input.ResourceTypes != null) {
+ const memberEntries = se_ResourceTypes(input.ResourceTypes, context);
+ if (input.ResourceTypes?.length === 0) {
+ entries.ResourceTypes = [];
+ }
+ Object.entries(memberEntries).forEach(([key, value]) => {
+ const loc = `ResourceTypes.${key}`;
+ entries[loc] = value;
+ });
+ }
+ if (input.RoleARN != null) {
+ entries["RoleARN"] = input.RoleARN;
+ }
+ if (input.OnFailure != null) {
+ entries["OnFailure"] = input.OnFailure;
+ }
+ if (input.StackPolicyBody != null) {
+ entries["StackPolicyBody"] = input.StackPolicyBody;
+ }
+ if (input.StackPolicyURL != null) {
+ entries["StackPolicyURL"] = input.StackPolicyURL;
+ }
+ if (input.Tags != null) {
+ const memberEntries = se_Tags(input.Tags, context);
+ if (input.Tags?.length === 0) {
+ entries.Tags = [];
+ }
+ Object.entries(memberEntries).forEach(([key, value]) => {
+ const loc = `Tags.${key}`;
+ entries[loc] = value;
+ });
+ }
+ if (input.ClientRequestToken != null) {
+ entries["ClientRequestToken"] = input.ClientRequestToken;
+ }
+ if (input.EnableTerminationProtection != null) {
+ entries["EnableTerminationProtection"] = input.EnableTerminationProtection;
+ }
+ if (input.RetainExceptOnCreate != null) {
+ entries["RetainExceptOnCreate"] = input.RetainExceptOnCreate;
+ }
+ return entries;
+};
+const se_CreateStackInstancesInput = (input, context) => {
+ const entries = {};
+ if (input.StackSetName != null) {
+ entries["StackSetName"] = input.StackSetName;
+ }
+ if (input.Accounts != null) {
+ const memberEntries = se_AccountList(input.Accounts, context);
+ if (input.Accounts?.length === 0) {
+ entries.Accounts = [];
+ }
+ Object.entries(memberEntries).forEach(([key, value]) => {
+ const loc = `Accounts.${key}`;
+ entries[loc] = value;
+ });
+ }
+ if (input.DeploymentTargets != null) {
+ const memberEntries = se_DeploymentTargets(input.DeploymentTargets, context);
+ Object.entries(memberEntries).forEach(([key, value]) => {
+ const loc = `DeploymentTargets.${key}`;
+ entries[loc] = value;
+ });
+ }
+ if (input.Regions != null) {
+ const memberEntries = se_RegionList(input.Regions, context);
+ if (input.Regions?.length === 0) {
+ entries.Regions = [];
+ }
+ Object.entries(memberEntries).forEach(([key, value]) => {
+ const loc = `Regions.${key}`;
+ entries[loc] = value;
+ });
+ }
+ if (input.ParameterOverrides != null) {
+ const memberEntries = se_Parameters(input.ParameterOverrides, context);
+ if (input.ParameterOverrides?.length === 0) {
+ entries.ParameterOverrides = [];
+ }
+ Object.entries(memberEntries).forEach(([key, value]) => {
+ const loc = `ParameterOverrides.${key}`;
+ entries[loc] = value;
+ });
+ }
+ if (input.OperationPreferences != null) {
+ const memberEntries = se_StackSetOperationPreferences(input.OperationPreferences, context);
+ Object.entries(memberEntries).forEach(([key, value]) => {
+ const loc = `OperationPreferences.${key}`;
+ entries[loc] = value;
+ });
+ }
+ if (input.OperationId === undefined) {
+ input.OperationId = (0, uuid_1.v4)();
+ }
+ if (input.OperationId != null) {
+ entries["OperationId"] = input.OperationId;
+ }
+ if (input.CallAs != null) {
+ entries["CallAs"] = input.CallAs;
+ }
+ return entries;
+};
+const se_CreateStackSetInput = (input, context) => {
+ const entries = {};
+ if (input.StackSetName != null) {
+ entries["StackSetName"] = input.StackSetName;
+ }
+ if (input.Description != null) {
+ entries["Description"] = input.Description;
+ }
+ if (input.TemplateBody != null) {
+ entries["TemplateBody"] = input.TemplateBody;
+ }
+ if (input.TemplateURL != null) {
+ entries["TemplateURL"] = input.TemplateURL;
+ }
+ if (input.StackId != null) {
+ entries["StackId"] = input.StackId;
+ }
+ if (input.Parameters != null) {
+ const memberEntries = se_Parameters(input.Parameters, context);
+ if (input.Parameters?.length === 0) {
+ entries.Parameters = [];
+ }
+ Object.entries(memberEntries).forEach(([key, value]) => {
+ const loc = `Parameters.${key}`;
+ entries[loc] = value;
+ });
+ }
+ if (input.Capabilities != null) {
+ const memberEntries = se_Capabilities(input.Capabilities, context);
+ if (input.Capabilities?.length === 0) {
+ entries.Capabilities = [];
+ }
+ Object.entries(memberEntries).forEach(([key, value]) => {
+ const loc = `Capabilities.${key}`;
+ entries[loc] = value;
+ });
+ }
+ if (input.Tags != null) {
+ const memberEntries = se_Tags(input.Tags, context);
+ if (input.Tags?.length === 0) {
+ entries.Tags = [];
+ }
+ Object.entries(memberEntries).forEach(([key, value]) => {
+ const loc = `Tags.${key}`;
+ entries[loc] = value;
+ });
+ }
+ if (input.AdministrationRoleARN != null) {
+ entries["AdministrationRoleARN"] = input.AdministrationRoleARN;
+ }
+ if (input.ExecutionRoleName != null) {
+ entries["ExecutionRoleName"] = input.ExecutionRoleName;
+ }
+ if (input.PermissionModel != null) {
+ entries["PermissionModel"] = input.PermissionModel;
+ }
+ if (input.AutoDeployment != null) {
+ const memberEntries = se_AutoDeployment(input.AutoDeployment, context);
+ Object.entries(memberEntries).forEach(([key, value]) => {
+ const loc = `AutoDeployment.${key}`;
+ entries[loc] = value;
+ });
+ }
+ if (input.CallAs != null) {
+ entries["CallAs"] = input.CallAs;
+ }
+ if (input.ClientRequestToken === undefined) {
+ input.ClientRequestToken = (0, uuid_1.v4)();
+ }
+ if (input.ClientRequestToken != null) {
+ entries["ClientRequestToken"] = input.ClientRequestToken;
+ }
+ if (input.ManagedExecution != null) {
+ const memberEntries = se_ManagedExecution(input.ManagedExecution, context);
+ Object.entries(memberEntries).forEach(([key, value]) => {
+ const loc = `ManagedExecution.${key}`;
+ entries[loc] = value;
+ });
+ }
+ return entries;
+};
+const se_DeactivateOrganizationsAccessInput = (input, context) => {
+ const entries = {};
+ return entries;
+};
+const se_DeactivateTypeInput = (input, context) => {
+ const entries = {};
+ if (input.TypeName != null) {
+ entries["TypeName"] = input.TypeName;
+ }
+ if (input.Type != null) {
+ entries["Type"] = input.Type;
+ }
+ if (input.Arn != null) {
+ entries["Arn"] = input.Arn;
+ }
+ return entries;
+};
+const se_DeleteChangeSetInput = (input, context) => {
+ const entries = {};
+ if (input.ChangeSetName != null) {
+ entries["ChangeSetName"] = input.ChangeSetName;
+ }
+ if (input.StackName != null) {
+ entries["StackName"] = input.StackName;
+ }
+ return entries;
+};
+const se_DeleteStackInput = (input, context) => {
+ const entries = {};
+ if (input.StackName != null) {
+ entries["StackName"] = input.StackName;
+ }
+ if (input.RetainResources != null) {
+ const memberEntries = se_RetainResources(input.RetainResources, context);
+ if (input.RetainResources?.length === 0) {
+ entries.RetainResources = [];
+ }
+ Object.entries(memberEntries).forEach(([key, value]) => {
+ const loc = `RetainResources.${key}`;
+ entries[loc] = value;
+ });
+ }
+ if (input.RoleARN != null) {
+ entries["RoleARN"] = input.RoleARN;
+ }
+ if (input.ClientRequestToken != null) {
+ entries["ClientRequestToken"] = input.ClientRequestToken;
+ }
+ return entries;
+};
+const se_DeleteStackInstancesInput = (input, context) => {
+ const entries = {};
+ if (input.StackSetName != null) {
+ entries["StackSetName"] = input.StackSetName;
+ }
+ if (input.Accounts != null) {
+ const memberEntries = se_AccountList(input.Accounts, context);
+ if (input.Accounts?.length === 0) {
+ entries.Accounts = [];
+ }
+ Object.entries(memberEntries).forEach(([key, value]) => {
+ const loc = `Accounts.${key}`;
+ entries[loc] = value;
+ });
+ }
+ if (input.DeploymentTargets != null) {
+ const memberEntries = se_DeploymentTargets(input.DeploymentTargets, context);
+ Object.entries(memberEntries).forEach(([key, value]) => {
+ const loc = `DeploymentTargets.${key}`;
+ entries[loc] = value;
+ });
+ }
+ if (input.Regions != null) {
+ const memberEntries = se_RegionList(input.Regions, context);
+ if (input.Regions?.length === 0) {
+ entries.Regions = [];
+ }
+ Object.entries(memberEntries).forEach(([key, value]) => {
+ const loc = `Regions.${key}`;
+ entries[loc] = value;
+ });
+ }
+ if (input.OperationPreferences != null) {
+ const memberEntries = se_StackSetOperationPreferences(input.OperationPreferences, context);
+ Object.entries(memberEntries).forEach(([key, value]) => {
+ const loc = `OperationPreferences.${key}`;
+ entries[loc] = value;
+ });
+ }
+ if (input.RetainStacks != null) {
+ entries["RetainStacks"] = input.RetainStacks;
+ }
+ if (input.OperationId === undefined) {
+ input.OperationId = (0, uuid_1.v4)();
+ }
+ if (input.OperationId != null) {
+ entries["OperationId"] = input.OperationId;
+ }
+ if (input.CallAs != null) {
+ entries["CallAs"] = input.CallAs;
+ }
+ return entries;
+};
+const se_DeleteStackSetInput = (input, context) => {
+ const entries = {};
+ if (input.StackSetName != null) {
+ entries["StackSetName"] = input.StackSetName;
+ }
+ if (input.CallAs != null) {
+ entries["CallAs"] = input.CallAs;
+ }
+ return entries;
+};
+const se_DeploymentTargets = (input, context) => {
+ const entries = {};
+ if (input.Accounts != null) {
+ const memberEntries = se_AccountList(input.Accounts, context);
+ if (input.Accounts?.length === 0) {
+ entries.Accounts = [];
+ }
+ Object.entries(memberEntries).forEach(([key, value]) => {
+ const loc = `Accounts.${key}`;
+ entries[loc] = value;
+ });
+ }
+ if (input.AccountsUrl != null) {
+ entries["AccountsUrl"] = input.AccountsUrl;
+ }
+ if (input.OrganizationalUnitIds != null) {
+ const memberEntries = se_OrganizationalUnitIdList(input.OrganizationalUnitIds, context);
+ if (input.OrganizationalUnitIds?.length === 0) {
+ entries.OrganizationalUnitIds = [];
+ }
+ Object.entries(memberEntries).forEach(([key, value]) => {
+ const loc = `OrganizationalUnitIds.${key}`;
+ entries[loc] = value;
+ });
+ }
+ if (input.AccountFilterType != null) {
+ entries["AccountFilterType"] = input.AccountFilterType;
+ }
+ return entries;
+};
+const se_DeregisterTypeInput = (input, context) => {
+ const entries = {};
+ if (input.Arn != null) {
+ entries["Arn"] = input.Arn;
+ }
+ if (input.Type != null) {
+ entries["Type"] = input.Type;
+ }
+ if (input.TypeName != null) {
+ entries["TypeName"] = input.TypeName;
+ }
+ if (input.VersionId != null) {
+ entries["VersionId"] = input.VersionId;
+ }
+ return entries;
+};
+const se_DescribeAccountLimitsInput = (input, context) => {
+ const entries = {};
+ if (input.NextToken != null) {
+ entries["NextToken"] = input.NextToken;
+ }
+ return entries;
+};
+const se_DescribeChangeSetHooksInput = (input, context) => {
+ const entries = {};
+ if (input.ChangeSetName != null) {
+ entries["ChangeSetName"] = input.ChangeSetName;
+ }
+ if (input.StackName != null) {
+ entries["StackName"] = input.StackName;
+ }
+ if (input.NextToken != null) {
+ entries["NextToken"] = input.NextToken;
+ }
+ if (input.LogicalResourceId != null) {
+ entries["LogicalResourceId"] = input.LogicalResourceId;
+ }
+ return entries;
+};
+const se_DescribeChangeSetInput = (input, context) => {
+ const entries = {};
+ if (input.ChangeSetName != null) {
+ entries["ChangeSetName"] = input.ChangeSetName;
+ }
+ if (input.StackName != null) {
+ entries["StackName"] = input.StackName;
+ }
+ if (input.NextToken != null) {
+ entries["NextToken"] = input.NextToken;
+ }
+ return entries;
+};
+const se_DescribeOrganizationsAccessInput = (input, context) => {
+ const entries = {};
+ if (input.CallAs != null) {
+ entries["CallAs"] = input.CallAs;
+ }
+ return entries;
+};
+const se_DescribePublisherInput = (input, context) => {
+ const entries = {};
+ if (input.PublisherId != null) {
+ entries["PublisherId"] = input.PublisherId;
+ }
+ return entries;
+};
+const se_DescribeStackDriftDetectionStatusInput = (input, context) => {
+ const entries = {};
+ if (input.StackDriftDetectionId != null) {
+ entries["StackDriftDetectionId"] = input.StackDriftDetectionId;
+ }
+ return entries;
+};
+const se_DescribeStackEventsInput = (input, context) => {
+ const entries = {};
+ if (input.StackName != null) {
+ entries["StackName"] = input.StackName;
+ }
+ if (input.NextToken != null) {
+ entries["NextToken"] = input.NextToken;
+ }
+ return entries;
+};
+const se_DescribeStackInstanceInput = (input, context) => {
+ const entries = {};
+ if (input.StackSetName != null) {
+ entries["StackSetName"] = input.StackSetName;
+ }
+ if (input.StackInstanceAccount != null) {
+ entries["StackInstanceAccount"] = input.StackInstanceAccount;
+ }
+ if (input.StackInstanceRegion != null) {
+ entries["StackInstanceRegion"] = input.StackInstanceRegion;
+ }
+ if (input.CallAs != null) {
+ entries["CallAs"] = input.CallAs;
+ }
+ return entries;
+};
+const se_DescribeStackResourceDriftsInput = (input, context) => {
+ const entries = {};
+ if (input.StackName != null) {
+ entries["StackName"] = input.StackName;
+ }
+ if (input.StackResourceDriftStatusFilters != null) {
+ const memberEntries = se_StackResourceDriftStatusFilters(input.StackResourceDriftStatusFilters, context);
+ if (input.StackResourceDriftStatusFilters?.length === 0) {
+ entries.StackResourceDriftStatusFilters = [];
+ }
+ Object.entries(memberEntries).forEach(([key, value]) => {
+ const loc = `StackResourceDriftStatusFilters.${key}`;
+ entries[loc] = value;
+ });
+ }
+ if (input.NextToken != null) {
+ entries["NextToken"] = input.NextToken;
+ }
+ if (input.MaxResults != null) {
+ entries["MaxResults"] = input.MaxResults;
+ }
+ return entries;
+};
+const se_DescribeStackResourceInput = (input, context) => {
+ const entries = {};
+ if (input.StackName != null) {
+ entries["StackName"] = input.StackName;
+ }
+ if (input.LogicalResourceId != null) {
+ entries["LogicalResourceId"] = input.LogicalResourceId;
+ }
+ return entries;
+};
+const se_DescribeStackResourcesInput = (input, context) => {
+ const entries = {};
+ if (input.StackName != null) {
+ entries["StackName"] = input.StackName;
+ }
+ if (input.LogicalResourceId != null) {
+ entries["LogicalResourceId"] = input.LogicalResourceId;
+ }
+ if (input.PhysicalResourceId != null) {
+ entries["PhysicalResourceId"] = input.PhysicalResourceId;
+ }
+ return entries;
+};
+const se_DescribeStackSetInput = (input, context) => {
+ const entries = {};
+ if (input.StackSetName != null) {
+ entries["StackSetName"] = input.StackSetName;
+ }
+ if (input.CallAs != null) {
+ entries["CallAs"] = input.CallAs;
+ }
+ return entries;
+};
+const se_DescribeStackSetOperationInput = (input, context) => {
+ const entries = {};
+ if (input.StackSetName != null) {
+ entries["StackSetName"] = input.StackSetName;
+ }
+ if (input.OperationId != null) {
+ entries["OperationId"] = input.OperationId;
+ }
+ if (input.CallAs != null) {
+ entries["CallAs"] = input.CallAs;
+ }
+ return entries;
+};
+const se_DescribeStacksInput = (input, context) => {
+ const entries = {};
+ if (input.StackName != null) {
+ entries["StackName"] = input.StackName;
+ }
+ if (input.NextToken != null) {
+ entries["NextToken"] = input.NextToken;
+ }
+ return entries;
+};
+const se_DescribeTypeInput = (input, context) => {
+ const entries = {};
+ if (input.Type != null) {
+ entries["Type"] = input.Type;
+ }
+ if (input.TypeName != null) {
+ entries["TypeName"] = input.TypeName;
+ }
+ if (input.Arn != null) {
+ entries["Arn"] = input.Arn;
+ }
+ if (input.VersionId != null) {
+ entries["VersionId"] = input.VersionId;
+ }
+ if (input.PublisherId != null) {
+ entries["PublisherId"] = input.PublisherId;
+ }
+ if (input.PublicVersionNumber != null) {
+ entries["PublicVersionNumber"] = input.PublicVersionNumber;
+ }
+ return entries;
+};
+const se_DescribeTypeRegistrationInput = (input, context) => {
+ const entries = {};
+ if (input.RegistrationToken != null) {
+ entries["RegistrationToken"] = input.RegistrationToken;
+ }
+ return entries;
+};
+const se_DetectStackDriftInput = (input, context) => {
+ const entries = {};
+ if (input.StackName != null) {
+ entries["StackName"] = input.StackName;
+ }
+ if (input.LogicalResourceIds != null) {
+ const memberEntries = se_LogicalResourceIds(input.LogicalResourceIds, context);
+ if (input.LogicalResourceIds?.length === 0) {
+ entries.LogicalResourceIds = [];
+ }
+ Object.entries(memberEntries).forEach(([key, value]) => {
+ const loc = `LogicalResourceIds.${key}`;
+ entries[loc] = value;
+ });
+ }
+ return entries;
+};
+const se_DetectStackResourceDriftInput = (input, context) => {
+ const entries = {};
+ if (input.StackName != null) {
+ entries["StackName"] = input.StackName;
+ }
+ if (input.LogicalResourceId != null) {
+ entries["LogicalResourceId"] = input.LogicalResourceId;
+ }
+ return entries;
+};
+const se_DetectStackSetDriftInput = (input, context) => {
+ const entries = {};
+ if (input.StackSetName != null) {
+ entries["StackSetName"] = input.StackSetName;
+ }
+ if (input.OperationPreferences != null) {
+ const memberEntries = se_StackSetOperationPreferences(input.OperationPreferences, context);
+ Object.entries(memberEntries).forEach(([key, value]) => {
+ const loc = `OperationPreferences.${key}`;
+ entries[loc] = value;
+ });
+ }
+ if (input.OperationId === undefined) {
+ input.OperationId = (0, uuid_1.v4)();
+ }
+ if (input.OperationId != null) {
+ entries["OperationId"] = input.OperationId;
+ }
+ if (input.CallAs != null) {
+ entries["CallAs"] = input.CallAs;
+ }
+ return entries;
+};
+const se_EstimateTemplateCostInput = (input, context) => {
+ const entries = {};
+ if (input.TemplateBody != null) {
+ entries["TemplateBody"] = input.TemplateBody;
+ }
+ if (input.TemplateURL != null) {
+ entries["TemplateURL"] = input.TemplateURL;
+ }
+ if (input.Parameters != null) {
+ const memberEntries = se_Parameters(input.Parameters, context);
+ if (input.Parameters?.length === 0) {
+ entries.Parameters = [];
+ }
+ Object.entries(memberEntries).forEach(([key, value]) => {
+ const loc = `Parameters.${key}`;
+ entries[loc] = value;
+ });
+ }
+ return entries;
+};
+const se_ExecuteChangeSetInput = (input, context) => {
+ const entries = {};
+ if (input.ChangeSetName != null) {
+ entries["ChangeSetName"] = input.ChangeSetName;
+ }
+ if (input.StackName != null) {
+ entries["StackName"] = input.StackName;
+ }
+ if (input.ClientRequestToken != null) {
+ entries["ClientRequestToken"] = input.ClientRequestToken;
+ }
+ if (input.DisableRollback != null) {
+ entries["DisableRollback"] = input.DisableRollback;
+ }
+ if (input.RetainExceptOnCreate != null) {
+ entries["RetainExceptOnCreate"] = input.RetainExceptOnCreate;
+ }
+ return entries;
+};
+const se_GetStackPolicyInput = (input, context) => {
+ const entries = {};
+ if (input.StackName != null) {
+ entries["StackName"] = input.StackName;
+ }
+ return entries;
+};
+const se_GetTemplateInput = (input, context) => {
+ const entries = {};
+ if (input.StackName != null) {
+ entries["StackName"] = input.StackName;
+ }
+ if (input.ChangeSetName != null) {
+ entries["ChangeSetName"] = input.ChangeSetName;
+ }
+ if (input.TemplateStage != null) {
+ entries["TemplateStage"] = input.TemplateStage;
+ }
+ return entries;
+};
+const se_GetTemplateSummaryInput = (input, context) => {
+ const entries = {};
+ if (input.TemplateBody != null) {
+ entries["TemplateBody"] = input.TemplateBody;
+ }
+ if (input.TemplateURL != null) {
+ entries["TemplateURL"] = input.TemplateURL;
+ }
+ if (input.StackName != null) {
+ entries["StackName"] = input.StackName;
+ }
+ if (input.StackSetName != null) {
+ entries["StackSetName"] = input.StackSetName;
+ }
+ if (input.CallAs != null) {
+ entries["CallAs"] = input.CallAs;
+ }
+ if (input.TemplateSummaryConfig != null) {
+ const memberEntries = se_TemplateSummaryConfig(input.TemplateSummaryConfig, context);
+ Object.entries(memberEntries).forEach(([key, value]) => {
+ const loc = `TemplateSummaryConfig.${key}`;
+ entries[loc] = value;
+ });
+ }
+ return entries;
+};
+const se_ImportStacksToStackSetInput = (input, context) => {
+ const entries = {};
+ if (input.StackSetName != null) {
+ entries["StackSetName"] = input.StackSetName;
+ }
+ if (input.StackIds != null) {
+ const memberEntries = se_StackIdList(input.StackIds, context);
+ if (input.StackIds?.length === 0) {
+ entries.StackIds = [];
+ }
+ Object.entries(memberEntries).forEach(([key, value]) => {
+ const loc = `StackIds.${key}`;
+ entries[loc] = value;
+ });
+ }
+ if (input.StackIdsUrl != null) {
+ entries["StackIdsUrl"] = input.StackIdsUrl;
+ }
+ if (input.OrganizationalUnitIds != null) {
+ const memberEntries = se_OrganizationalUnitIdList(input.OrganizationalUnitIds, context);
+ if (input.OrganizationalUnitIds?.length === 0) {
+ entries.OrganizationalUnitIds = [];
+ }
+ Object.entries(memberEntries).forEach(([key, value]) => {
+ const loc = `OrganizationalUnitIds.${key}`;
+ entries[loc] = value;
+ });
+ }
+ if (input.OperationPreferences != null) {
+ const memberEntries = se_StackSetOperationPreferences(input.OperationPreferences, context);
+ Object.entries(memberEntries).forEach(([key, value]) => {
+ const loc = `OperationPreferences.${key}`;
+ entries[loc] = value;
+ });
+ }
+ if (input.OperationId === undefined) {
+ input.OperationId = (0, uuid_1.v4)();
+ }
+ if (input.OperationId != null) {
+ entries["OperationId"] = input.OperationId;
+ }
+ if (input.CallAs != null) {
+ entries["CallAs"] = input.CallAs;
+ }
+ return entries;
+};
+const se_ListChangeSetsInput = (input, context) => {
+ const entries = {};
+ if (input.StackName != null) {
+ entries["StackName"] = input.StackName;
+ }
+ if (input.NextToken != null) {
+ entries["NextToken"] = input.NextToken;
+ }
+ return entries;
+};
+const se_ListExportsInput = (input, context) => {
+ const entries = {};
+ if (input.NextToken != null) {
+ entries["NextToken"] = input.NextToken;
+ }
+ return entries;
+};
+const se_ListImportsInput = (input, context) => {
+ const entries = {};
+ if (input.ExportName != null) {
+ entries["ExportName"] = input.ExportName;
+ }
+ if (input.NextToken != null) {
+ entries["NextToken"] = input.NextToken;
+ }
+ return entries;
+};
+const se_ListStackInstanceResourceDriftsInput = (input, context) => {
+ const entries = {};
+ if (input.StackSetName != null) {
+ entries["StackSetName"] = input.StackSetName;
+ }
+ if (input.NextToken != null) {
+ entries["NextToken"] = input.NextToken;
+ }
+ if (input.MaxResults != null) {
+ entries["MaxResults"] = input.MaxResults;
+ }
+ if (input.StackInstanceResourceDriftStatuses != null) {
+ const memberEntries = se_StackResourceDriftStatusFilters(input.StackInstanceResourceDriftStatuses, context);
+ if (input.StackInstanceResourceDriftStatuses?.length === 0) {
+ entries.StackInstanceResourceDriftStatuses = [];
+ }
+ Object.entries(memberEntries).forEach(([key, value]) => {
+ const loc = `StackInstanceResourceDriftStatuses.${key}`;
+ entries[loc] = value;
+ });
+ }
+ if (input.StackInstanceAccount != null) {
+ entries["StackInstanceAccount"] = input.StackInstanceAccount;
+ }
+ if (input.StackInstanceRegion != null) {
+ entries["StackInstanceRegion"] = input.StackInstanceRegion;
+ }
+ if (input.OperationId != null) {
+ entries["OperationId"] = input.OperationId;
+ }
+ if (input.CallAs != null) {
+ entries["CallAs"] = input.CallAs;
+ }
+ return entries;
+};
+const se_ListStackInstancesInput = (input, context) => {
+ const entries = {};
+ if (input.StackSetName != null) {
+ entries["StackSetName"] = input.StackSetName;
+ }
+ if (input.NextToken != null) {
+ entries["NextToken"] = input.NextToken;
+ }
+ if (input.MaxResults != null) {
+ entries["MaxResults"] = input.MaxResults;
+ }
+ if (input.Filters != null) {
+ const memberEntries = se_StackInstanceFilters(input.Filters, context);
+ if (input.Filters?.length === 0) {
+ entries.Filters = [];
+ }
+ Object.entries(memberEntries).forEach(([key, value]) => {
+ const loc = `Filters.${key}`;
+ entries[loc] = value;
+ });
+ }
+ if (input.StackInstanceAccount != null) {
+ entries["StackInstanceAccount"] = input.StackInstanceAccount;
+ }
+ if (input.StackInstanceRegion != null) {
+ entries["StackInstanceRegion"] = input.StackInstanceRegion;
+ }
+ if (input.CallAs != null) {
+ entries["CallAs"] = input.CallAs;
+ }
+ return entries;
+};
+const se_ListStackResourcesInput = (input, context) => {
+ const entries = {};
+ if (input.StackName != null) {
+ entries["StackName"] = input.StackName;
+ }
+ if (input.NextToken != null) {
+ entries["NextToken"] = input.NextToken;
+ }
+ return entries;
+};
+const se_ListStackSetOperationResultsInput = (input, context) => {
+ const entries = {};
+ if (input.StackSetName != null) {
+ entries["StackSetName"] = input.StackSetName;
+ }
+ if (input.OperationId != null) {
+ entries["OperationId"] = input.OperationId;
+ }
+ if (input.NextToken != null) {
+ entries["NextToken"] = input.NextToken;
+ }
+ if (input.MaxResults != null) {
+ entries["MaxResults"] = input.MaxResults;
+ }
+ if (input.CallAs != null) {
+ entries["CallAs"] = input.CallAs;
+ }
+ if (input.Filters != null) {
+ const memberEntries = se_OperationResultFilters(input.Filters, context);
+ if (input.Filters?.length === 0) {
+ entries.Filters = [];
+ }
+ Object.entries(memberEntries).forEach(([key, value]) => {
+ const loc = `Filters.${key}`;
+ entries[loc] = value;
+ });
+ }
+ return entries;
+};
+const se_ListStackSetOperationsInput = (input, context) => {
+ const entries = {};
+ if (input.StackSetName != null) {
+ entries["StackSetName"] = input.StackSetName;
+ }
+ if (input.NextToken != null) {
+ entries["NextToken"] = input.NextToken;
+ }
+ if (input.MaxResults != null) {
+ entries["MaxResults"] = input.MaxResults;
+ }
+ if (input.CallAs != null) {
+ entries["CallAs"] = input.CallAs;
+ }
+ return entries;
+};
+const se_ListStackSetsInput = (input, context) => {
+ const entries = {};
+ if (input.NextToken != null) {
+ entries["NextToken"] = input.NextToken;
+ }
+ if (input.MaxResults != null) {
+ entries["MaxResults"] = input.MaxResults;
+ }
+ if (input.Status != null) {
+ entries["Status"] = input.Status;
+ }
+ if (input.CallAs != null) {
+ entries["CallAs"] = input.CallAs;
+ }
+ return entries;
+};
+const se_ListStacksInput = (input, context) => {
+ const entries = {};
+ if (input.NextToken != null) {
+ entries["NextToken"] = input.NextToken;
+ }
+ if (input.StackStatusFilter != null) {
+ const memberEntries = se_StackStatusFilter(input.StackStatusFilter, context);
+ if (input.StackStatusFilter?.length === 0) {
+ entries.StackStatusFilter = [];
+ }
+ Object.entries(memberEntries).forEach(([key, value]) => {
+ const loc = `StackStatusFilter.${key}`;
+ entries[loc] = value;
+ });
+ }
+ return entries;
+};
+const se_ListTypeRegistrationsInput = (input, context) => {
+ const entries = {};
+ if (input.Type != null) {
+ entries["Type"] = input.Type;
+ }
+ if (input.TypeName != null) {
+ entries["TypeName"] = input.TypeName;
+ }
+ if (input.TypeArn != null) {
+ entries["TypeArn"] = input.TypeArn;
+ }
+ if (input.RegistrationStatusFilter != null) {
+ entries["RegistrationStatusFilter"] = input.RegistrationStatusFilter;
+ }
+ if (input.MaxResults != null) {
+ entries["MaxResults"] = input.MaxResults;
+ }
+ if (input.NextToken != null) {
+ entries["NextToken"] = input.NextToken;
+ }
+ return entries;
+};
+const se_ListTypesInput = (input, context) => {
+ const entries = {};
+ if (input.Visibility != null) {
+ entries["Visibility"] = input.Visibility;
+ }
+ if (input.ProvisioningType != null) {
+ entries["ProvisioningType"] = input.ProvisioningType;
+ }
+ if (input.DeprecatedStatus != null) {
+ entries["DeprecatedStatus"] = input.DeprecatedStatus;
+ }
+ if (input.Type != null) {
+ entries["Type"] = input.Type;
+ }
+ if (input.Filters != null) {
+ const memberEntries = se_TypeFilters(input.Filters, context);
+ Object.entries(memberEntries).forEach(([key, value]) => {
+ const loc = `Filters.${key}`;
+ entries[loc] = value;
+ });
+ }
+ if (input.MaxResults != null) {
+ entries["MaxResults"] = input.MaxResults;
+ }
+ if (input.NextToken != null) {
+ entries["NextToken"] = input.NextToken;
+ }
+ return entries;
+};
+const se_ListTypeVersionsInput = (input, context) => {
+ const entries = {};
+ if (input.Type != null) {
+ entries["Type"] = input.Type;
+ }
+ if (input.TypeName != null) {
+ entries["TypeName"] = input.TypeName;
+ }
+ if (input.Arn != null) {
+ entries["Arn"] = input.Arn;
+ }
+ if (input.MaxResults != null) {
+ entries["MaxResults"] = input.MaxResults;
+ }
+ if (input.NextToken != null) {
+ entries["NextToken"] = input.NextToken;
+ }
+ if (input.DeprecatedStatus != null) {
+ entries["DeprecatedStatus"] = input.DeprecatedStatus;
+ }
+ if (input.PublisherId != null) {
+ entries["PublisherId"] = input.PublisherId;
+ }
+ return entries;
+};
+const se_LoggingConfig = (input, context) => {
+ const entries = {};
+ if (input.LogRoleArn != null) {
+ entries["LogRoleArn"] = input.LogRoleArn;
+ }
+ if (input.LogGroupName != null) {
+ entries["LogGroupName"] = input.LogGroupName;
+ }
+ return entries;
+};
+const se_LogicalResourceIds = (input, context) => {
+ const entries = {};
+ let counter = 1;
+ for (const entry of input) {
+ if (entry === null) {
+ continue;
+ }
+ entries[`member.${counter}`] = entry;
+ counter++;
+ }
+ return entries;
+};
+const se_ManagedExecution = (input, context) => {
+ const entries = {};
+ if (input.Active != null) {
+ entries["Active"] = input.Active;
+ }
+ return entries;
+};
+const se_NotificationARNs = (input, context) => {
+ const entries = {};
+ let counter = 1;
+ for (const entry of input) {
+ if (entry === null) {
+ continue;
+ }
+ entries[`member.${counter}`] = entry;
+ counter++;
+ }
+ return entries;
+};
+const se_OperationResultFilter = (input, context) => {
+ const entries = {};
+ if (input.Name != null) {
+ entries["Name"] = input.Name;
+ }
+ if (input.Values != null) {
+ entries["Values"] = input.Values;
+ }
+ return entries;
+};
+const se_OperationResultFilters = (input, context) => {
+ const entries = {};
+ let counter = 1;
+ for (const entry of input) {
+ if (entry === null) {
+ continue;
+ }
+ const memberEntries = se_OperationResultFilter(entry, context);
+ Object.entries(memberEntries).forEach(([key, value]) => {
+ entries[`member.${counter}.${key}`] = value;
+ });
+ counter++;
+ }
+ return entries;
+};
+const se_OrganizationalUnitIdList = (input, context) => {
+ const entries = {};
+ let counter = 1;
+ for (const entry of input) {
+ if (entry === null) {
+ continue;
+ }
+ entries[`member.${counter}`] = entry;
+ counter++;
+ }
+ return entries;
+};
+const se_Parameter = (input, context) => {
+ const entries = {};
+ if (input.ParameterKey != null) {
+ entries["ParameterKey"] = input.ParameterKey;
+ }
+ if (input.ParameterValue != null) {
+ entries["ParameterValue"] = input.ParameterValue;
+ }
+ if (input.UsePreviousValue != null) {
+ entries["UsePreviousValue"] = input.UsePreviousValue;
+ }
+ if (input.ResolvedValue != null) {
+ entries["ResolvedValue"] = input.ResolvedValue;
+ }
+ return entries;
+};
+const se_Parameters = (input, context) => {
+ const entries = {};
+ let counter = 1;
+ for (const entry of input) {
+ if (entry === null) {
+ continue;
+ }
+ const memberEntries = se_Parameter(entry, context);
+ Object.entries(memberEntries).forEach(([key, value]) => {
+ entries[`member.${counter}.${key}`] = value;
+ });
+ counter++;
+ }
+ return entries;
+};
+const se_PublishTypeInput = (input, context) => {
+ const entries = {};
+ if (input.Type != null) {
+ entries["Type"] = input.Type;
+ }
+ if (input.Arn != null) {
+ entries["Arn"] = input.Arn;
+ }
+ if (input.TypeName != null) {
+ entries["TypeName"] = input.TypeName;
+ }
+ if (input.PublicVersionNumber != null) {
+ entries["PublicVersionNumber"] = input.PublicVersionNumber;
+ }
+ return entries;
+};
+const se_RecordHandlerProgressInput = (input, context) => {
+ const entries = {};
+ if (input.BearerToken != null) {
+ entries["BearerToken"] = input.BearerToken;
+ }
+ if (input.OperationStatus != null) {
+ entries["OperationStatus"] = input.OperationStatus;
+ }
+ if (input.CurrentOperationStatus != null) {
+ entries["CurrentOperationStatus"] = input.CurrentOperationStatus;
+ }
+ if (input.StatusMessage != null) {
+ entries["StatusMessage"] = input.StatusMessage;
+ }
+ if (input.ErrorCode != null) {
+ entries["ErrorCode"] = input.ErrorCode;
+ }
+ if (input.ResourceModel != null) {
+ entries["ResourceModel"] = input.ResourceModel;
+ }
+ if (input.ClientRequestToken != null) {
+ entries["ClientRequestToken"] = input.ClientRequestToken;
+ }
+ return entries;
+};
+const se_RegionList = (input, context) => {
+ const entries = {};
+ let counter = 1;
+ for (const entry of input) {
+ if (entry === null) {
+ continue;
+ }
+ entries[`member.${counter}`] = entry;
+ counter++;
+ }
+ return entries;
+};
+const se_RegisterPublisherInput = (input, context) => {
+ const entries = {};
+ if (input.AcceptTermsAndConditions != null) {
+ entries["AcceptTermsAndConditions"] = input.AcceptTermsAndConditions;
+ }
+ if (input.ConnectionArn != null) {
+ entries["ConnectionArn"] = input.ConnectionArn;
+ }
+ return entries;
+};
+const se_RegisterTypeInput = (input, context) => {
+ const entries = {};
+ if (input.Type != null) {
+ entries["Type"] = input.Type;
+ }
+ if (input.TypeName != null) {
+ entries["TypeName"] = input.TypeName;
+ }
+ if (input.SchemaHandlerPackage != null) {
+ entries["SchemaHandlerPackage"] = input.SchemaHandlerPackage;
+ }
+ if (input.LoggingConfig != null) {
+ const memberEntries = se_LoggingConfig(input.LoggingConfig, context);
+ Object.entries(memberEntries).forEach(([key, value]) => {
+ const loc = `LoggingConfig.${key}`;
+ entries[loc] = value;
+ });
+ }
+ if (input.ExecutionRoleArn != null) {
+ entries["ExecutionRoleArn"] = input.ExecutionRoleArn;
+ }
+ if (input.ClientRequestToken != null) {
+ entries["ClientRequestToken"] = input.ClientRequestToken;
+ }
+ return entries;
+};
+const se_ResourceIdentifierProperties = (input, context) => {
+ const entries = {};
+ let counter = 1;
+ Object.keys(input)
+ .filter((key) => input[key] != null)
+ .forEach((key) => {
+ entries[`entry.${counter}.key`] = key;
+ entries[`entry.${counter}.value`] = input[key];
+ counter++;
+ });
+ return entries;
+};
+const se_ResourcesToImport = (input, context) => {
+ const entries = {};
+ let counter = 1;
+ for (const entry of input) {
+ if (entry === null) {
+ continue;
+ }
+ const memberEntries = se_ResourceToImport(entry, context);
+ Object.entries(memberEntries).forEach(([key, value]) => {
+ entries[`member.${counter}.${key}`] = value;
+ });
+ counter++;
+ }
+ return entries;
+};
+const se_ResourcesToSkip = (input, context) => {
+ const entries = {};
+ let counter = 1;
+ for (const entry of input) {
+ if (entry === null) {
+ continue;
+ }
+ entries[`member.${counter}`] = entry;
+ counter++;
+ }
+ return entries;
+};
+const se_ResourceToImport = (input, context) => {
+ const entries = {};
+ if (input.ResourceType != null) {
+ entries["ResourceType"] = input.ResourceType;
+ }
+ if (input.LogicalResourceId != null) {
+ entries["LogicalResourceId"] = input.LogicalResourceId;
+ }
+ if (input.ResourceIdentifier != null) {
+ const memberEntries = se_ResourceIdentifierProperties(input.ResourceIdentifier, context);
+ Object.entries(memberEntries).forEach(([key, value]) => {
+ const loc = `ResourceIdentifier.${key}`;
+ entries[loc] = value;
+ });
+ }
+ return entries;
+};
+const se_ResourceTypes = (input, context) => {
+ const entries = {};
+ let counter = 1;
+ for (const entry of input) {
+ if (entry === null) {
+ continue;
+ }
+ entries[`member.${counter}`] = entry;
+ counter++;
+ }
+ return entries;
+};
+const se_RetainResources = (input, context) => {
+ const entries = {};
+ let counter = 1;
+ for (const entry of input) {
+ if (entry === null) {
+ continue;
+ }
+ entries[`member.${counter}`] = entry;
+ counter++;
+ }
+ return entries;
+};
+const se_RollbackConfiguration = (input, context) => {
+ const entries = {};
+ if (input.RollbackTriggers != null) {
+ const memberEntries = se_RollbackTriggers(input.RollbackTriggers, context);
+ if (input.RollbackTriggers?.length === 0) {
+ entries.RollbackTriggers = [];
+ }
+ Object.entries(memberEntries).forEach(([key, value]) => {
+ const loc = `RollbackTriggers.${key}`;
+ entries[loc] = value;
+ });
+ }
+ if (input.MonitoringTimeInMinutes != null) {
+ entries["MonitoringTimeInMinutes"] = input.MonitoringTimeInMinutes;
+ }
+ return entries;
+};
+const se_RollbackStackInput = (input, context) => {
+ const entries = {};
+ if (input.StackName != null) {
+ entries["StackName"] = input.StackName;
+ }
+ if (input.RoleARN != null) {
+ entries["RoleARN"] = input.RoleARN;
+ }
+ if (input.ClientRequestToken != null) {
+ entries["ClientRequestToken"] = input.ClientRequestToken;
+ }
+ if (input.RetainExceptOnCreate != null) {
+ entries["RetainExceptOnCreate"] = input.RetainExceptOnCreate;
+ }
+ return entries;
+};
+const se_RollbackTrigger = (input, context) => {
+ const entries = {};
+ if (input.Arn != null) {
+ entries["Arn"] = input.Arn;
+ }
+ if (input.Type != null) {
+ entries["Type"] = input.Type;
+ }
+ return entries;
+};
+const se_RollbackTriggers = (input, context) => {
+ const entries = {};
+ let counter = 1;
+ for (const entry of input) {
+ if (entry === null) {
+ continue;
+ }
+ const memberEntries = se_RollbackTrigger(entry, context);
+ Object.entries(memberEntries).forEach(([key, value]) => {
+ entries[`member.${counter}.${key}`] = value;
+ });
+ counter++;
+ }
+ return entries;
+};
+const se_SetStackPolicyInput = (input, context) => {
+ const entries = {};
+ if (input.StackName != null) {
+ entries["StackName"] = input.StackName;
+ }
+ if (input.StackPolicyBody != null) {
+ entries["StackPolicyBody"] = input.StackPolicyBody;
+ }
+ if (input.StackPolicyURL != null) {
+ entries["StackPolicyURL"] = input.StackPolicyURL;
+ }
+ return entries;
+};
+const se_SetTypeConfigurationInput = (input, context) => {
+ const entries = {};
+ if (input.TypeArn != null) {
+ entries["TypeArn"] = input.TypeArn;
+ }
+ if (input.Configuration != null) {
+ entries["Configuration"] = input.Configuration;
+ }
+ if (input.ConfigurationAlias != null) {
+ entries["ConfigurationAlias"] = input.ConfigurationAlias;
+ }
+ if (input.TypeName != null) {
+ entries["TypeName"] = input.TypeName;
+ }
+ if (input.Type != null) {
+ entries["Type"] = input.Type;
+ }
+ return entries;
+};
+const se_SetTypeDefaultVersionInput = (input, context) => {
+ const entries = {};
+ if (input.Arn != null) {
+ entries["Arn"] = input.Arn;
+ }
+ if (input.Type != null) {
+ entries["Type"] = input.Type;
+ }
+ if (input.TypeName != null) {
+ entries["TypeName"] = input.TypeName;
+ }
+ if (input.VersionId != null) {
+ entries["VersionId"] = input.VersionId;
+ }
+ return entries;
+};
+const se_SignalResourceInput = (input, context) => {
+ const entries = {};
+ if (input.StackName != null) {
+ entries["StackName"] = input.StackName;
+ }
+ if (input.LogicalResourceId != null) {
+ entries["LogicalResourceId"] = input.LogicalResourceId;
+ }
+ if (input.UniqueId != null) {
+ entries["UniqueId"] = input.UniqueId;
+ }
+ if (input.Status != null) {
+ entries["Status"] = input.Status;
+ }
+ return entries;
+};
+const se_StackIdList = (input, context) => {
+ const entries = {};
+ let counter = 1;
+ for (const entry of input) {
+ if (entry === null) {
+ continue;
+ }
+ entries[`member.${counter}`] = entry;
+ counter++;
+ }
+ return entries;
+};
+const se_StackInstanceFilter = (input, context) => {
+ const entries = {};
+ if (input.Name != null) {
+ entries["Name"] = input.Name;
+ }
+ if (input.Values != null) {
+ entries["Values"] = input.Values;
+ }
+ return entries;
+};
+const se_StackInstanceFilters = (input, context) => {
+ const entries = {};
+ let counter = 1;
+ for (const entry of input) {
+ if (entry === null) {
+ continue;
+ }
+ const memberEntries = se_StackInstanceFilter(entry, context);
+ Object.entries(memberEntries).forEach(([key, value]) => {
+ entries[`member.${counter}.${key}`] = value;
+ });
+ counter++;
+ }
+ return entries;
+};
+const se_StackResourceDriftStatusFilters = (input, context) => {
+ const entries = {};
+ let counter = 1;
+ for (const entry of input) {
+ if (entry === null) {
+ continue;
+ }
+ entries[`member.${counter}`] = entry;
+ counter++;
+ }
+ return entries;
+};
+const se_StackSetOperationPreferences = (input, context) => {
+ const entries = {};
+ if (input.RegionConcurrencyType != null) {
+ entries["RegionConcurrencyType"] = input.RegionConcurrencyType;
+ }
+ if (input.RegionOrder != null) {
+ const memberEntries = se_RegionList(input.RegionOrder, context);
+ if (input.RegionOrder?.length === 0) {
+ entries.RegionOrder = [];
+ }
+ Object.entries(memberEntries).forEach(([key, value]) => {
+ const loc = `RegionOrder.${key}`;
+ entries[loc] = value;
+ });
+ }
+ if (input.FailureToleranceCount != null) {
+ entries["FailureToleranceCount"] = input.FailureToleranceCount;
+ }
+ if (input.FailureTolerancePercentage != null) {
+ entries["FailureTolerancePercentage"] = input.FailureTolerancePercentage;
+ }
+ if (input.MaxConcurrentCount != null) {
+ entries["MaxConcurrentCount"] = input.MaxConcurrentCount;
+ }
+ if (input.MaxConcurrentPercentage != null) {
+ entries["MaxConcurrentPercentage"] = input.MaxConcurrentPercentage;
+ }
+ return entries;
+};
+const se_StackStatusFilter = (input, context) => {
+ const entries = {};
+ let counter = 1;
+ for (const entry of input) {
+ if (entry === null) {
+ continue;
+ }
+ entries[`member.${counter}`] = entry;
+ counter++;
+ }
+ return entries;
+};
+const se_StopStackSetOperationInput = (input, context) => {
+ const entries = {};
+ if (input.StackSetName != null) {
+ entries["StackSetName"] = input.StackSetName;
+ }
+ if (input.OperationId != null) {
+ entries["OperationId"] = input.OperationId;
+ }
+ if (input.CallAs != null) {
+ entries["CallAs"] = input.CallAs;
+ }
+ return entries;
+};
+const se_Tag = (input, context) => {
+ const entries = {};
+ if (input.Key != null) {
+ entries["Key"] = input.Key;
+ }
+ if (input.Value != null) {
+ entries["Value"] = input.Value;
+ }
+ return entries;
+};
+const se_Tags = (input, context) => {
+ const entries = {};
+ let counter = 1;
+ for (const entry of input) {
+ if (entry === null) {
+ continue;
+ }
+ const memberEntries = se_Tag(entry, context);
+ Object.entries(memberEntries).forEach(([key, value]) => {
+ entries[`member.${counter}.${key}`] = value;
+ });
+ counter++;
+ }
+ return entries;
+};
+const se_TemplateSummaryConfig = (input, context) => {
+ const entries = {};
+ if (input.TreatUnrecognizedResourceTypesAsWarnings != null) {
+ entries["TreatUnrecognizedResourceTypesAsWarnings"] = input.TreatUnrecognizedResourceTypesAsWarnings;
+ }
+ return entries;
+};
+const se_TestTypeInput = (input, context) => {
+ const entries = {};
+ if (input.Arn != null) {
+ entries["Arn"] = input.Arn;
+ }
+ if (input.Type != null) {
+ entries["Type"] = input.Type;
+ }
+ if (input.TypeName != null) {
+ entries["TypeName"] = input.TypeName;
+ }
+ if (input.VersionId != null) {
+ entries["VersionId"] = input.VersionId;
+ }
+ if (input.LogDeliveryBucket != null) {
+ entries["LogDeliveryBucket"] = input.LogDeliveryBucket;
+ }
+ return entries;
+};
+const se_TypeConfigurationIdentifier = (input, context) => {
+ const entries = {};
+ if (input.TypeArn != null) {
+ entries["TypeArn"] = input.TypeArn;
+ }
+ if (input.TypeConfigurationAlias != null) {
+ entries["TypeConfigurationAlias"] = input.TypeConfigurationAlias;
+ }
+ if (input.TypeConfigurationArn != null) {
+ entries["TypeConfigurationArn"] = input.TypeConfigurationArn;
+ }
+ if (input.Type != null) {
+ entries["Type"] = input.Type;
+ }
+ if (input.TypeName != null) {
+ entries["TypeName"] = input.TypeName;
+ }
+ return entries;
+};
+const se_TypeConfigurationIdentifiers = (input, context) => {
+ const entries = {};
+ let counter = 1;
+ for (const entry of input) {
+ if (entry === null) {
+ continue;
+ }
+ const memberEntries = se_TypeConfigurationIdentifier(entry, context);
+ Object.entries(memberEntries).forEach(([key, value]) => {
+ entries[`member.${counter}.${key}`] = value;
+ });
+ counter++;
+ }
+ return entries;
+};
+const se_TypeFilters = (input, context) => {
+ const entries = {};
+ if (input.Category != null) {
+ entries["Category"] = input.Category;
+ }
+ if (input.PublisherId != null) {
+ entries["PublisherId"] = input.PublisherId;
+ }
+ if (input.TypeNamePrefix != null) {
+ entries["TypeNamePrefix"] = input.TypeNamePrefix;
+ }
+ return entries;
+};
+const se_UpdateStackInput = (input, context) => {
+ const entries = {};
+ if (input.StackName != null) {
+ entries["StackName"] = input.StackName;
+ }
+ if (input.TemplateBody != null) {
+ entries["TemplateBody"] = input.TemplateBody;
+ }
+ if (input.TemplateURL != null) {
+ entries["TemplateURL"] = input.TemplateURL;
+ }
+ if (input.UsePreviousTemplate != null) {
+ entries["UsePreviousTemplate"] = input.UsePreviousTemplate;
+ }
+ if (input.StackPolicyDuringUpdateBody != null) {
+ entries["StackPolicyDuringUpdateBody"] = input.StackPolicyDuringUpdateBody;
+ }
+ if (input.StackPolicyDuringUpdateURL != null) {
+ entries["StackPolicyDuringUpdateURL"] = input.StackPolicyDuringUpdateURL;
+ }
+ if (input.Parameters != null) {
+ const memberEntries = se_Parameters(input.Parameters, context);
+ if (input.Parameters?.length === 0) {
+ entries.Parameters = [];
+ }
+ Object.entries(memberEntries).forEach(([key, value]) => {
+ const loc = `Parameters.${key}`;
+ entries[loc] = value;
+ });
+ }
+ if (input.Capabilities != null) {
+ const memberEntries = se_Capabilities(input.Capabilities, context);
+ if (input.Capabilities?.length === 0) {
+ entries.Capabilities = [];
+ }
+ Object.entries(memberEntries).forEach(([key, value]) => {
+ const loc = `Capabilities.${key}`;
+ entries[loc] = value;
+ });
+ }
+ if (input.ResourceTypes != null) {
+ const memberEntries = se_ResourceTypes(input.ResourceTypes, context);
+ if (input.ResourceTypes?.length === 0) {
+ entries.ResourceTypes = [];
+ }
+ Object.entries(memberEntries).forEach(([key, value]) => {
+ const loc = `ResourceTypes.${key}`;
+ entries[loc] = value;
+ });
+ }
+ if (input.RoleARN != null) {
+ entries["RoleARN"] = input.RoleARN;
+ }
+ if (input.RollbackConfiguration != null) {
+ const memberEntries = se_RollbackConfiguration(input.RollbackConfiguration, context);
+ Object.entries(memberEntries).forEach(([key, value]) => {
+ const loc = `RollbackConfiguration.${key}`;
+ entries[loc] = value;
+ });
+ }
+ if (input.StackPolicyBody != null) {
+ entries["StackPolicyBody"] = input.StackPolicyBody;
+ }
+ if (input.StackPolicyURL != null) {
+ entries["StackPolicyURL"] = input.StackPolicyURL;
+ }
+ if (input.NotificationARNs != null) {
+ const memberEntries = se_NotificationARNs(input.NotificationARNs, context);
+ if (input.NotificationARNs?.length === 0) {
+ entries.NotificationARNs = [];
+ }
+ Object.entries(memberEntries).forEach(([key, value]) => {
+ const loc = `NotificationARNs.${key}`;
+ entries[loc] = value;
+ });
+ }
+ if (input.Tags != null) {
+ const memberEntries = se_Tags(input.Tags, context);
+ if (input.Tags?.length === 0) {
+ entries.Tags = [];
+ }
+ Object.entries(memberEntries).forEach(([key, value]) => {
+ const loc = `Tags.${key}`;
+ entries[loc] = value;
+ });
+ }
+ if (input.DisableRollback != null) {
+ entries["DisableRollback"] = input.DisableRollback;
+ }
+ if (input.ClientRequestToken != null) {
+ entries["ClientRequestToken"] = input.ClientRequestToken;
+ }
+ if (input.RetainExceptOnCreate != null) {
+ entries["RetainExceptOnCreate"] = input.RetainExceptOnCreate;
+ }
+ return entries;
+};
+const se_UpdateStackInstancesInput = (input, context) => {
+ const entries = {};
+ if (input.StackSetName != null) {
+ entries["StackSetName"] = input.StackSetName;
+ }
+ if (input.Accounts != null) {
+ const memberEntries = se_AccountList(input.Accounts, context);
+ if (input.Accounts?.length === 0) {
+ entries.Accounts = [];
+ }
+ Object.entries(memberEntries).forEach(([key, value]) => {
+ const loc = `Accounts.${key}`;
+ entries[loc] = value;
+ });
+ }
+ if (input.DeploymentTargets != null) {
+ const memberEntries = se_DeploymentTargets(input.DeploymentTargets, context);
+ Object.entries(memberEntries).forEach(([key, value]) => {
+ const loc = `DeploymentTargets.${key}`;
+ entries[loc] = value;
+ });
+ }
+ if (input.Regions != null) {
+ const memberEntries = se_RegionList(input.Regions, context);
+ if (input.Regions?.length === 0) {
+ entries.Regions = [];
+ }
+ Object.entries(memberEntries).forEach(([key, value]) => {
+ const loc = `Regions.${key}`;
+ entries[loc] = value;
+ });
+ }
+ if (input.ParameterOverrides != null) {
+ const memberEntries = se_Parameters(input.ParameterOverrides, context);
+ if (input.ParameterOverrides?.length === 0) {
+ entries.ParameterOverrides = [];
+ }
+ Object.entries(memberEntries).forEach(([key, value]) => {
+ const loc = `ParameterOverrides.${key}`;
+ entries[loc] = value;
+ });
+ }
+ if (input.OperationPreferences != null) {
+ const memberEntries = se_StackSetOperationPreferences(input.OperationPreferences, context);
+ Object.entries(memberEntries).forEach(([key, value]) => {
+ const loc = `OperationPreferences.${key}`;
+ entries[loc] = value;
+ });
+ }
+ if (input.OperationId === undefined) {
+ input.OperationId = (0, uuid_1.v4)();
+ }
+ if (input.OperationId != null) {
+ entries["OperationId"] = input.OperationId;
+ }
+ if (input.CallAs != null) {
+ entries["CallAs"] = input.CallAs;
+ }
+ return entries;
+};
+const se_UpdateStackSetInput = (input, context) => {
+ const entries = {};
+ if (input.StackSetName != null) {
+ entries["StackSetName"] = input.StackSetName;
+ }
+ if (input.Description != null) {
+ entries["Description"] = input.Description;
+ }
+ if (input.TemplateBody != null) {
+ entries["TemplateBody"] = input.TemplateBody;
+ }
+ if (input.TemplateURL != null) {
+ entries["TemplateURL"] = input.TemplateURL;
+ }
+ if (input.UsePreviousTemplate != null) {
+ entries["UsePreviousTemplate"] = input.UsePreviousTemplate;
+ }
+ if (input.Parameters != null) {
+ const memberEntries = se_Parameters(input.Parameters, context);
+ if (input.Parameters?.length === 0) {
+ entries.Parameters = [];
+ }
+ Object.entries(memberEntries).forEach(([key, value]) => {
+ const loc = `Parameters.${key}`;
+ entries[loc] = value;
+ });
+ }
+ if (input.Capabilities != null) {
+ const memberEntries = se_Capabilities(input.Capabilities, context);
+ if (input.Capabilities?.length === 0) {
+ entries.Capabilities = [];
+ }
+ Object.entries(memberEntries).forEach(([key, value]) => {
+ const loc = `Capabilities.${key}`;
+ entries[loc] = value;
+ });
+ }
+ if (input.Tags != null) {
+ const memberEntries = se_Tags(input.Tags, context);
+ if (input.Tags?.length === 0) {
+ entries.Tags = [];
+ }
+ Object.entries(memberEntries).forEach(([key, value]) => {
+ const loc = `Tags.${key}`;
+ entries[loc] = value;
+ });
+ }
+ if (input.OperationPreferences != null) {
+ const memberEntries = se_StackSetOperationPreferences(input.OperationPreferences, context);
+ Object.entries(memberEntries).forEach(([key, value]) => {
+ const loc = `OperationPreferences.${key}`;
+ entries[loc] = value;
+ });
+ }
+ if (input.AdministrationRoleARN != null) {
+ entries["AdministrationRoleARN"] = input.AdministrationRoleARN;
+ }
+ if (input.ExecutionRoleName != null) {
+ entries["ExecutionRoleName"] = input.ExecutionRoleName;
+ }
+ if (input.DeploymentTargets != null) {
+ const memberEntries = se_DeploymentTargets(input.DeploymentTargets, context);
+ Object.entries(memberEntries).forEach(([key, value]) => {
+ const loc = `DeploymentTargets.${key}`;
+ entries[loc] = value;
+ });
+ }
+ if (input.PermissionModel != null) {
+ entries["PermissionModel"] = input.PermissionModel;
+ }
+ if (input.AutoDeployment != null) {
+ const memberEntries = se_AutoDeployment(input.AutoDeployment, context);
+ Object.entries(memberEntries).forEach(([key, value]) => {
+ const loc = `AutoDeployment.${key}`;
+ entries[loc] = value;
+ });
+ }
+ if (input.OperationId === undefined) {
+ input.OperationId = (0, uuid_1.v4)();
+ }
+ if (input.OperationId != null) {
+ entries["OperationId"] = input.OperationId;
+ }
+ if (input.Accounts != null) {
+ const memberEntries = se_AccountList(input.Accounts, context);
+ if (input.Accounts?.length === 0) {
+ entries.Accounts = [];
+ }
+ Object.entries(memberEntries).forEach(([key, value]) => {
+ const loc = `Accounts.${key}`;
+ entries[loc] = value;
+ });
+ }
+ if (input.Regions != null) {
+ const memberEntries = se_RegionList(input.Regions, context);
+ if (input.Regions?.length === 0) {
+ entries.Regions = [];
+ }
+ Object.entries(memberEntries).forEach(([key, value]) => {
+ const loc = `Regions.${key}`;
+ entries[loc] = value;
+ });
+ }
+ if (input.CallAs != null) {
+ entries["CallAs"] = input.CallAs;
+ }
+ if (input.ManagedExecution != null) {
+ const memberEntries = se_ManagedExecution(input.ManagedExecution, context);
+ Object.entries(memberEntries).forEach(([key, value]) => {
+ const loc = `ManagedExecution.${key}`;
+ entries[loc] = value;
+ });
+ }
+ return entries;
+};
+const se_UpdateTerminationProtectionInput = (input, context) => {
+ const entries = {};
+ if (input.EnableTerminationProtection != null) {
+ entries["EnableTerminationProtection"] = input.EnableTerminationProtection;
+ }
+ if (input.StackName != null) {
+ entries["StackName"] = input.StackName;
+ }
+ return entries;
+};
+const se_ValidateTemplateInput = (input, context) => {
+ const entries = {};
+ if (input.TemplateBody != null) {
+ entries["TemplateBody"] = input.TemplateBody;
+ }
+ if (input.TemplateURL != null) {
+ entries["TemplateURL"] = input.TemplateURL;
+ }
+ return entries;
+};
+const de_AccountGateResult = (output, context) => {
+ const contents = {};
+ if (output["Status"] !== undefined) {
+ contents.Status = (0, smithy_client_1.expectString)(output["Status"]);
+ }
+ if (output["StatusReason"] !== undefined) {
+ contents.StatusReason = (0, smithy_client_1.expectString)(output["StatusReason"]);
+ }
+ return contents;
+};
+const de_AccountLimit = (output, context) => {
+ const contents = {};
+ if (output["Name"] !== undefined) {
+ contents.Name = (0, smithy_client_1.expectString)(output["Name"]);
+ }
+ if (output["Value"] !== undefined) {
+ contents.Value = (0, smithy_client_1.strictParseInt32)(output["Value"]);
+ }
+ return contents;
+};
+const de_AccountLimitList = (output, context) => {
+ return (output || [])
+ .filter((e) => e != null)
+ .map((entry) => {
+ return de_AccountLimit(entry, context);
+ });
+};
+const de_AccountList = (output, context) => {
+ return (output || [])
+ .filter((e) => e != null)
+ .map((entry) => {
+ return (0, smithy_client_1.expectString)(entry);
+ });
+};
+const de_ActivateOrganizationsAccessOutput = (output, context) => {
+ const contents = {};
+ return contents;
+};
+const de_ActivateTypeOutput = (output, context) => {
+ const contents = {};
+ if (output["Arn"] !== undefined) {
+ contents.Arn = (0, smithy_client_1.expectString)(output["Arn"]);
+ }
+ return contents;
+};
+const de_AllowedValues = (output, context) => {
+ return (output || [])
+ .filter((e) => e != null)
+ .map((entry) => {
+ return (0, smithy_client_1.expectString)(entry);
+ });
+};
+const de_AlreadyExistsException = (output, context) => {
+ const contents = {};
+ if (output["Message"] !== undefined) {
+ contents.Message = (0, smithy_client_1.expectString)(output["Message"]);
+ }
+ return contents;
+};
+const de_AutoDeployment = (output, context) => {
+ const contents = {};
+ if (output["Enabled"] !== undefined) {
+ contents.Enabled = (0, smithy_client_1.parseBoolean)(output["Enabled"]);
+ }
+ if (output["RetainStacksOnAccountRemoval"] !== undefined) {
+ contents.RetainStacksOnAccountRemoval = (0, smithy_client_1.parseBoolean)(output["RetainStacksOnAccountRemoval"]);
+ }
+ return contents;
+};
+const de_BatchDescribeTypeConfigurationsError = (output, context) => {
+ const contents = {};
+ if (output["ErrorCode"] !== undefined) {
+ contents.ErrorCode = (0, smithy_client_1.expectString)(output["ErrorCode"]);
+ }
+ if (output["ErrorMessage"] !== undefined) {
+ contents.ErrorMessage = (0, smithy_client_1.expectString)(output["ErrorMessage"]);
+ }
+ if (output["TypeConfigurationIdentifier"] !== undefined) {
+ contents.TypeConfigurationIdentifier = de_TypeConfigurationIdentifier(output["TypeConfigurationIdentifier"], context);
+ }
+ return contents;
+};
+const de_BatchDescribeTypeConfigurationsErrors = (output, context) => {
+ return (output || [])
+ .filter((e) => e != null)
+ .map((entry) => {
+ return de_BatchDescribeTypeConfigurationsError(entry, context);
+ });
+};
+const de_BatchDescribeTypeConfigurationsOutput = (output, context) => {
+ const contents = {};
+ if (output.Errors === "") {
+ contents.Errors = [];
+ }
+ else if (output["Errors"] !== undefined && output["Errors"]["member"] !== undefined) {
+ contents.Errors = de_BatchDescribeTypeConfigurationsErrors((0, smithy_client_1.getArrayIfSingleItem)(output["Errors"]["member"]), context);
+ }
+ if (output.UnprocessedTypeConfigurations === "") {
+ contents.UnprocessedTypeConfigurations = [];
+ }
+ else if (output["UnprocessedTypeConfigurations"] !== undefined &&
+ output["UnprocessedTypeConfigurations"]["member"] !== undefined) {
+ contents.UnprocessedTypeConfigurations = de_UnprocessedTypeConfigurations((0, smithy_client_1.getArrayIfSingleItem)(output["UnprocessedTypeConfigurations"]["member"]), context);
+ }
+ if (output.TypeConfigurations === "") {
+ contents.TypeConfigurations = [];
+ }
+ else if (output["TypeConfigurations"] !== undefined && output["TypeConfigurations"]["member"] !== undefined) {
+ contents.TypeConfigurations = de_TypeConfigurationDetailsList((0, smithy_client_1.getArrayIfSingleItem)(output["TypeConfigurations"]["member"]), context);
+ }
+ return contents;
+};
+const de_Capabilities = (output, context) => {
+ return (output || [])
+ .filter((e) => e != null)
+ .map((entry) => {
+ return (0, smithy_client_1.expectString)(entry);
+ });
+};
+const de_CFNRegistryException = (output, context) => {
+ const contents = {};
+ if (output["Message"] !== undefined) {
+ contents.Message = (0, smithy_client_1.expectString)(output["Message"]);
+ }
+ return contents;
+};
+const de_Change = (output, context) => {
+ const contents = {};
+ if (output["Type"] !== undefined) {
+ contents.Type = (0, smithy_client_1.expectString)(output["Type"]);
+ }
+ if (output["HookInvocationCount"] !== undefined) {
+ contents.HookInvocationCount = (0, smithy_client_1.strictParseInt32)(output["HookInvocationCount"]);
+ }
+ if (output["ResourceChange"] !== undefined) {
+ contents.ResourceChange = de_ResourceChange(output["ResourceChange"], context);
+ }
+ return contents;
+};
+const de_Changes = (output, context) => {
+ return (output || [])
+ .filter((e) => e != null)
+ .map((entry) => {
+ return de_Change(entry, context);
+ });
+};
+const de_ChangeSetHook = (output, context) => {
+ const contents = {};
+ if (output["InvocationPoint"] !== undefined) {
+ contents.InvocationPoint = (0, smithy_client_1.expectString)(output["InvocationPoint"]);
+ }
+ if (output["FailureMode"] !== undefined) {
+ contents.FailureMode = (0, smithy_client_1.expectString)(output["FailureMode"]);
+ }
+ if (output["TypeName"] !== undefined) {
+ contents.TypeName = (0, smithy_client_1.expectString)(output["TypeName"]);
+ }
+ if (output["TypeVersionId"] !== undefined) {
+ contents.TypeVersionId = (0, smithy_client_1.expectString)(output["TypeVersionId"]);
+ }
+ if (output["TypeConfigurationVersionId"] !== undefined) {
+ contents.TypeConfigurationVersionId = (0, smithy_client_1.expectString)(output["TypeConfigurationVersionId"]);
+ }
+ if (output["TargetDetails"] !== undefined) {
+ contents.TargetDetails = de_ChangeSetHookTargetDetails(output["TargetDetails"], context);
+ }
+ return contents;
+};
+const de_ChangeSetHookResourceTargetDetails = (output, context) => {
+ const contents = {};
+ if (output["LogicalResourceId"] !== undefined) {
+ contents.LogicalResourceId = (0, smithy_client_1.expectString)(output["LogicalResourceId"]);
+ }
+ if (output["ResourceType"] !== undefined) {
+ contents.ResourceType = (0, smithy_client_1.expectString)(output["ResourceType"]);
+ }
+ if (output["ResourceAction"] !== undefined) {
+ contents.ResourceAction = (0, smithy_client_1.expectString)(output["ResourceAction"]);
+ }
+ return contents;
+};
+const de_ChangeSetHooks = (output, context) => {
+ return (output || [])
+ .filter((e) => e != null)
+ .map((entry) => {
+ return de_ChangeSetHook(entry, context);
+ });
+};
+const de_ChangeSetHookTargetDetails = (output, context) => {
+ const contents = {};
+ if (output["TargetType"] !== undefined) {
+ contents.TargetType = (0, smithy_client_1.expectString)(output["TargetType"]);
+ }
+ if (output["ResourceTargetDetails"] !== undefined) {
+ contents.ResourceTargetDetails = de_ChangeSetHookResourceTargetDetails(output["ResourceTargetDetails"], context);
+ }
+ return contents;
+};
+const de_ChangeSetNotFoundException = (output, context) => {
+ const contents = {};
+ if (output["Message"] !== undefined) {
+ contents.Message = (0, smithy_client_1.expectString)(output["Message"]);
+ }
+ return contents;
+};
+const de_ChangeSetSummaries = (output, context) => {
+ return (output || [])
+ .filter((e) => e != null)
+ .map((entry) => {
+ return de_ChangeSetSummary(entry, context);
+ });
+};
+const de_ChangeSetSummary = (output, context) => {
+ const contents = {};
+ if (output["StackId"] !== undefined) {
+ contents.StackId = (0, smithy_client_1.expectString)(output["StackId"]);
+ }
+ if (output["StackName"] !== undefined) {
+ contents.StackName = (0, smithy_client_1.expectString)(output["StackName"]);
+ }
+ if (output["ChangeSetId"] !== undefined) {
+ contents.ChangeSetId = (0, smithy_client_1.expectString)(output["ChangeSetId"]);
+ }
+ if (output["ChangeSetName"] !== undefined) {
+ contents.ChangeSetName = (0, smithy_client_1.expectString)(output["ChangeSetName"]);
+ }
+ if (output["ExecutionStatus"] !== undefined) {
+ contents.ExecutionStatus = (0, smithy_client_1.expectString)(output["ExecutionStatus"]);
+ }
+ if (output["Status"] !== undefined) {
+ contents.Status = (0, smithy_client_1.expectString)(output["Status"]);
+ }
+ if (output["StatusReason"] !== undefined) {
+ contents.StatusReason = (0, smithy_client_1.expectString)(output["StatusReason"]);
+ }
+ if (output["CreationTime"] !== undefined) {
+ contents.CreationTime = (0, smithy_client_1.expectNonNull)((0, smithy_client_1.parseRfc3339DateTimeWithOffset)(output["CreationTime"]));
+ }
+ if (output["Description"] !== undefined) {
+ contents.Description = (0, smithy_client_1.expectString)(output["Description"]);
+ }
+ if (output["IncludeNestedStacks"] !== undefined) {
+ contents.IncludeNestedStacks = (0, smithy_client_1.parseBoolean)(output["IncludeNestedStacks"]);
+ }
+ if (output["ParentChangeSetId"] !== undefined) {
+ contents.ParentChangeSetId = (0, smithy_client_1.expectString)(output["ParentChangeSetId"]);
+ }
+ if (output["RootChangeSetId"] !== undefined) {
+ contents.RootChangeSetId = (0, smithy_client_1.expectString)(output["RootChangeSetId"]);
+ }
+ return contents;
+};
+const de_ContinueUpdateRollbackOutput = (output, context) => {
+ const contents = {};
+ return contents;
+};
+const de_CreateChangeSetOutput = (output, context) => {
+ const contents = {};
+ if (output["Id"] !== undefined) {
+ contents.Id = (0, smithy_client_1.expectString)(output["Id"]);
+ }
+ if (output["StackId"] !== undefined) {
+ contents.StackId = (0, smithy_client_1.expectString)(output["StackId"]);
+ }
+ return contents;
+};
+const de_CreatedButModifiedException = (output, context) => {
+ const contents = {};
+ if (output["Message"] !== undefined) {
+ contents.Message = (0, smithy_client_1.expectString)(output["Message"]);
+ }
+ return contents;
+};
+const de_CreateStackInstancesOutput = (output, context) => {
+ const contents = {};
+ if (output["OperationId"] !== undefined) {
+ contents.OperationId = (0, smithy_client_1.expectString)(output["OperationId"]);
+ }
+ return contents;
+};
+const de_CreateStackOutput = (output, context) => {
+ const contents = {};
+ if (output["StackId"] !== undefined) {
+ contents.StackId = (0, smithy_client_1.expectString)(output["StackId"]);
+ }
+ return contents;
+};
+const de_CreateStackSetOutput = (output, context) => {
+ const contents = {};
+ if (output["StackSetId"] !== undefined) {
+ contents.StackSetId = (0, smithy_client_1.expectString)(output["StackSetId"]);
+ }
+ return contents;
+};
+const de_DeactivateOrganizationsAccessOutput = (output, context) => {
+ const contents = {};
+ return contents;
+};
+const de_DeactivateTypeOutput = (output, context) => {
+ const contents = {};
+ return contents;
+};
+const de_DeleteChangeSetOutput = (output, context) => {
+ const contents = {};
+ return contents;
+};
+const de_DeleteStackInstancesOutput = (output, context) => {
+ const contents = {};
+ if (output["OperationId"] !== undefined) {
+ contents.OperationId = (0, smithy_client_1.expectString)(output["OperationId"]);
+ }
+ return contents;
+};
+const de_DeleteStackSetOutput = (output, context) => {
+ const contents = {};
+ return contents;
+};
+const de_DeploymentTargets = (output, context) => {
+ const contents = {};
+ if (output.Accounts === "") {
+ contents.Accounts = [];
+ }
+ else if (output["Accounts"] !== undefined && output["Accounts"]["member"] !== undefined) {
+ contents.Accounts = de_AccountList((0, smithy_client_1.getArrayIfSingleItem)(output["Accounts"]["member"]), context);
+ }
+ if (output["AccountsUrl"] !== undefined) {
+ contents.AccountsUrl = (0, smithy_client_1.expectString)(output["AccountsUrl"]);
+ }
+ if (output.OrganizationalUnitIds === "") {
+ contents.OrganizationalUnitIds = [];
+ }
+ else if (output["OrganizationalUnitIds"] !== undefined && output["OrganizationalUnitIds"]["member"] !== undefined) {
+ contents.OrganizationalUnitIds = de_OrganizationalUnitIdList((0, smithy_client_1.getArrayIfSingleItem)(output["OrganizationalUnitIds"]["member"]), context);
+ }
+ if (output["AccountFilterType"] !== undefined) {
+ contents.AccountFilterType = (0, smithy_client_1.expectString)(output["AccountFilterType"]);
+ }
+ return contents;
+};
+const de_DeregisterTypeOutput = (output, context) => {
+ const contents = {};
+ return contents;
+};
+const de_DescribeAccountLimitsOutput = (output, context) => {
+ const contents = {};
+ if (output.AccountLimits === "") {
+ contents.AccountLimits = [];
+ }
+ else if (output["AccountLimits"] !== undefined && output["AccountLimits"]["member"] !== undefined) {
+ contents.AccountLimits = de_AccountLimitList((0, smithy_client_1.getArrayIfSingleItem)(output["AccountLimits"]["member"]), context);
+ }
+ if (output["NextToken"] !== undefined) {
+ contents.NextToken = (0, smithy_client_1.expectString)(output["NextToken"]);
+ }
+ return contents;
+};
+const de_DescribeChangeSetHooksOutput = (output, context) => {
+ const contents = {};
+ if (output["ChangeSetId"] !== undefined) {
+ contents.ChangeSetId = (0, smithy_client_1.expectString)(output["ChangeSetId"]);
+ }
+ if (output["ChangeSetName"] !== undefined) {
+ contents.ChangeSetName = (0, smithy_client_1.expectString)(output["ChangeSetName"]);
+ }
+ if (output.Hooks === "") {
+ contents.Hooks = [];
+ }
+ else if (output["Hooks"] !== undefined && output["Hooks"]["member"] !== undefined) {
+ contents.Hooks = de_ChangeSetHooks((0, smithy_client_1.getArrayIfSingleItem)(output["Hooks"]["member"]), context);
+ }
+ if (output["Status"] !== undefined) {
+ contents.Status = (0, smithy_client_1.expectString)(output["Status"]);
+ }
+ if (output["NextToken"] !== undefined) {
+ contents.NextToken = (0, smithy_client_1.expectString)(output["NextToken"]);
+ }
+ if (output["StackId"] !== undefined) {
+ contents.StackId = (0, smithy_client_1.expectString)(output["StackId"]);
+ }
+ if (output["StackName"] !== undefined) {
+ contents.StackName = (0, smithy_client_1.expectString)(output["StackName"]);
+ }
+ return contents;
+};
+const de_DescribeChangeSetOutput = (output, context) => {
+ const contents = {};
+ if (output["ChangeSetName"] !== undefined) {
+ contents.ChangeSetName = (0, smithy_client_1.expectString)(output["ChangeSetName"]);
+ }
+ if (output["ChangeSetId"] !== undefined) {
+ contents.ChangeSetId = (0, smithy_client_1.expectString)(output["ChangeSetId"]);
+ }
+ if (output["StackId"] !== undefined) {
+ contents.StackId = (0, smithy_client_1.expectString)(output["StackId"]);
+ }
+ if (output["StackName"] !== undefined) {
+ contents.StackName = (0, smithy_client_1.expectString)(output["StackName"]);
+ }
+ if (output["Description"] !== undefined) {
+ contents.Description = (0, smithy_client_1.expectString)(output["Description"]);
+ }
+ if (output.Parameters === "") {
+ contents.Parameters = [];
+ }
+ else if (output["Parameters"] !== undefined && output["Parameters"]["member"] !== undefined) {
+ contents.Parameters = de_Parameters((0, smithy_client_1.getArrayIfSingleItem)(output["Parameters"]["member"]), context);
+ }
+ if (output["CreationTime"] !== undefined) {
+ contents.CreationTime = (0, smithy_client_1.expectNonNull)((0, smithy_client_1.parseRfc3339DateTimeWithOffset)(output["CreationTime"]));
+ }
+ if (output["ExecutionStatus"] !== undefined) {
+ contents.ExecutionStatus = (0, smithy_client_1.expectString)(output["ExecutionStatus"]);
+ }
+ if (output["Status"] !== undefined) {
+ contents.Status = (0, smithy_client_1.expectString)(output["Status"]);
+ }
+ if (output["StatusReason"] !== undefined) {
+ contents.StatusReason = (0, smithy_client_1.expectString)(output["StatusReason"]);
+ }
+ if (output.NotificationARNs === "") {
+ contents.NotificationARNs = [];
+ }
+ else if (output["NotificationARNs"] !== undefined && output["NotificationARNs"]["member"] !== undefined) {
+ contents.NotificationARNs = de_NotificationARNs((0, smithy_client_1.getArrayIfSingleItem)(output["NotificationARNs"]["member"]), context);
+ }
+ if (output["RollbackConfiguration"] !== undefined) {
+ contents.RollbackConfiguration = de_RollbackConfiguration(output["RollbackConfiguration"], context);
+ }
+ if (output.Capabilities === "") {
+ contents.Capabilities = [];
+ }
+ else if (output["Capabilities"] !== undefined && output["Capabilities"]["member"] !== undefined) {
+ contents.Capabilities = de_Capabilities((0, smithy_client_1.getArrayIfSingleItem)(output["Capabilities"]["member"]), context);
+ }
+ if (output.Tags === "") {
+ contents.Tags = [];
+ }
+ else if (output["Tags"] !== undefined && output["Tags"]["member"] !== undefined) {
+ contents.Tags = de_Tags((0, smithy_client_1.getArrayIfSingleItem)(output["Tags"]["member"]), context);
+ }
+ if (output.Changes === "") {
+ contents.Changes = [];
+ }
+ else if (output["Changes"] !== undefined && output["Changes"]["member"] !== undefined) {
+ contents.Changes = de_Changes((0, smithy_client_1.getArrayIfSingleItem)(output["Changes"]["member"]), context);
+ }
+ if (output["NextToken"] !== undefined) {
+ contents.NextToken = (0, smithy_client_1.expectString)(output["NextToken"]);
+ }
+ if (output["IncludeNestedStacks"] !== undefined) {
+ contents.IncludeNestedStacks = (0, smithy_client_1.parseBoolean)(output["IncludeNestedStacks"]);
+ }
+ if (output["ParentChangeSetId"] !== undefined) {
+ contents.ParentChangeSetId = (0, smithy_client_1.expectString)(output["ParentChangeSetId"]);
+ }
+ if (output["RootChangeSetId"] !== undefined) {
+ contents.RootChangeSetId = (0, smithy_client_1.expectString)(output["RootChangeSetId"]);
+ }
+ if (output["OnStackFailure"] !== undefined) {
+ contents.OnStackFailure = (0, smithy_client_1.expectString)(output["OnStackFailure"]);
+ }
+ return contents;
+};
+const de_DescribeOrganizationsAccessOutput = (output, context) => {
+ const contents = {};
+ if (output["Status"] !== undefined) {
+ contents.Status = (0, smithy_client_1.expectString)(output["Status"]);
+ }
+ return contents;
+};
+const de_DescribePublisherOutput = (output, context) => {
+ const contents = {};
+ if (output["PublisherId"] !== undefined) {
+ contents.PublisherId = (0, smithy_client_1.expectString)(output["PublisherId"]);
+ }
+ if (output["PublisherStatus"] !== undefined) {
+ contents.PublisherStatus = (0, smithy_client_1.expectString)(output["PublisherStatus"]);
+ }
+ if (output["IdentityProvider"] !== undefined) {
+ contents.IdentityProvider = (0, smithy_client_1.expectString)(output["IdentityProvider"]);
+ }
+ if (output["PublisherProfile"] !== undefined) {
+ contents.PublisherProfile = (0, smithy_client_1.expectString)(output["PublisherProfile"]);
+ }
+ return contents;
+};
+const de_DescribeStackDriftDetectionStatusOutput = (output, context) => {
+ const contents = {};
+ if (output["StackId"] !== undefined) {
+ contents.StackId = (0, smithy_client_1.expectString)(output["StackId"]);
+ }
+ if (output["StackDriftDetectionId"] !== undefined) {
+ contents.StackDriftDetectionId = (0, smithy_client_1.expectString)(output["StackDriftDetectionId"]);
+ }
+ if (output["StackDriftStatus"] !== undefined) {
+ contents.StackDriftStatus = (0, smithy_client_1.expectString)(output["StackDriftStatus"]);
+ }
+ if (output["DetectionStatus"] !== undefined) {
+ contents.DetectionStatus = (0, smithy_client_1.expectString)(output["DetectionStatus"]);
+ }
+ if (output["DetectionStatusReason"] !== undefined) {
+ contents.DetectionStatusReason = (0, smithy_client_1.expectString)(output["DetectionStatusReason"]);
+ }
+ if (output["DriftedStackResourceCount"] !== undefined) {
+ contents.DriftedStackResourceCount = (0, smithy_client_1.strictParseInt32)(output["DriftedStackResourceCount"]);
+ }
+ if (output["Timestamp"] !== undefined) {
+ contents.Timestamp = (0, smithy_client_1.expectNonNull)((0, smithy_client_1.parseRfc3339DateTimeWithOffset)(output["Timestamp"]));
+ }
+ return contents;
+};
+const de_DescribeStackEventsOutput = (output, context) => {
+ const contents = {};
+ if (output.StackEvents === "") {
+ contents.StackEvents = [];
+ }
+ else if (output["StackEvents"] !== undefined && output["StackEvents"]["member"] !== undefined) {
+ contents.StackEvents = de_StackEvents((0, smithy_client_1.getArrayIfSingleItem)(output["StackEvents"]["member"]), context);
+ }
+ if (output["NextToken"] !== undefined) {
+ contents.NextToken = (0, smithy_client_1.expectString)(output["NextToken"]);
+ }
+ return contents;
+};
+const de_DescribeStackInstanceOutput = (output, context) => {
+ const contents = {};
+ if (output["StackInstance"] !== undefined) {
+ contents.StackInstance = de_StackInstance(output["StackInstance"], context);
+ }
+ return contents;
+};
+const de_DescribeStackResourceDriftsOutput = (output, context) => {
+ const contents = {};
+ if (output.StackResourceDrifts === "") {
+ contents.StackResourceDrifts = [];
+ }
+ else if (output["StackResourceDrifts"] !== undefined && output["StackResourceDrifts"]["member"] !== undefined) {
+ contents.StackResourceDrifts = de_StackResourceDrifts((0, smithy_client_1.getArrayIfSingleItem)(output["StackResourceDrifts"]["member"]), context);
+ }
+ if (output["NextToken"] !== undefined) {
+ contents.NextToken = (0, smithy_client_1.expectString)(output["NextToken"]);
+ }
+ return contents;
+};
+const de_DescribeStackResourceOutput = (output, context) => {
+ const contents = {};
+ if (output["StackResourceDetail"] !== undefined) {
+ contents.StackResourceDetail = de_StackResourceDetail(output["StackResourceDetail"], context);
+ }
+ return contents;
+};
+const de_DescribeStackResourcesOutput = (output, context) => {
+ const contents = {};
+ if (output.StackResources === "") {
+ contents.StackResources = [];
+ }
+ else if (output["StackResources"] !== undefined && output["StackResources"]["member"] !== undefined) {
+ contents.StackResources = de_StackResources((0, smithy_client_1.getArrayIfSingleItem)(output["StackResources"]["member"]), context);
+ }
+ return contents;
+};
+const de_DescribeStackSetOperationOutput = (output, context) => {
+ const contents = {};
+ if (output["StackSetOperation"] !== undefined) {
+ contents.StackSetOperation = de_StackSetOperation(output["StackSetOperation"], context);
+ }
+ return contents;
+};
+const de_DescribeStackSetOutput = (output, context) => {
+ const contents = {};
+ if (output["StackSet"] !== undefined) {
+ contents.StackSet = de_StackSet(output["StackSet"], context);
+ }
+ return contents;
+};
+const de_DescribeStacksOutput = (output, context) => {
+ const contents = {};
+ if (output.Stacks === "") {
+ contents.Stacks = [];
+ }
+ else if (output["Stacks"] !== undefined && output["Stacks"]["member"] !== undefined) {
+ contents.Stacks = de_Stacks((0, smithy_client_1.getArrayIfSingleItem)(output["Stacks"]["member"]), context);
+ }
+ if (output["NextToken"] !== undefined) {
+ contents.NextToken = (0, smithy_client_1.expectString)(output["NextToken"]);
+ }
+ return contents;
+};
+const de_DescribeTypeOutput = (output, context) => {
+ const contents = {};
+ if (output["Arn"] !== undefined) {
+ contents.Arn = (0, smithy_client_1.expectString)(output["Arn"]);
+ }
+ if (output["Type"] !== undefined) {
+ contents.Type = (0, smithy_client_1.expectString)(output["Type"]);
+ }
+ if (output["TypeName"] !== undefined) {
+ contents.TypeName = (0, smithy_client_1.expectString)(output["TypeName"]);
+ }
+ if (output["DefaultVersionId"] !== undefined) {
+ contents.DefaultVersionId = (0, smithy_client_1.expectString)(output["DefaultVersionId"]);
+ }
+ if (output["IsDefaultVersion"] !== undefined) {
+ contents.IsDefaultVersion = (0, smithy_client_1.parseBoolean)(output["IsDefaultVersion"]);
+ }
+ if (output["TypeTestsStatus"] !== undefined) {
+ contents.TypeTestsStatus = (0, smithy_client_1.expectString)(output["TypeTestsStatus"]);
+ }
+ if (output["TypeTestsStatusDescription"] !== undefined) {
+ contents.TypeTestsStatusDescription = (0, smithy_client_1.expectString)(output["TypeTestsStatusDescription"]);
+ }
+ if (output["Description"] !== undefined) {
+ contents.Description = (0, smithy_client_1.expectString)(output["Description"]);
+ }
+ if (output["Schema"] !== undefined) {
+ contents.Schema = (0, smithy_client_1.expectString)(output["Schema"]);
+ }
+ if (output["ProvisioningType"] !== undefined) {
+ contents.ProvisioningType = (0, smithy_client_1.expectString)(output["ProvisioningType"]);
+ }
+ if (output["DeprecatedStatus"] !== undefined) {
+ contents.DeprecatedStatus = (0, smithy_client_1.expectString)(output["DeprecatedStatus"]);
+ }
+ if (output["LoggingConfig"] !== undefined) {
+ contents.LoggingConfig = de_LoggingConfig(output["LoggingConfig"], context);
+ }
+ if (output.RequiredActivatedTypes === "") {
+ contents.RequiredActivatedTypes = [];
+ }
+ else if (output["RequiredActivatedTypes"] !== undefined &&
+ output["RequiredActivatedTypes"]["member"] !== undefined) {
+ contents.RequiredActivatedTypes = de_RequiredActivatedTypes((0, smithy_client_1.getArrayIfSingleItem)(output["RequiredActivatedTypes"]["member"]), context);
+ }
+ if (output["ExecutionRoleArn"] !== undefined) {
+ contents.ExecutionRoleArn = (0, smithy_client_1.expectString)(output["ExecutionRoleArn"]);
+ }
+ if (output["Visibility"] !== undefined) {
+ contents.Visibility = (0, smithy_client_1.expectString)(output["Visibility"]);
+ }
+ if (output["SourceUrl"] !== undefined) {
+ contents.SourceUrl = (0, smithy_client_1.expectString)(output["SourceUrl"]);
+ }
+ if (output["DocumentationUrl"] !== undefined) {
+ contents.DocumentationUrl = (0, smithy_client_1.expectString)(output["DocumentationUrl"]);
+ }
+ if (output["LastUpdated"] !== undefined) {
+ contents.LastUpdated = (0, smithy_client_1.expectNonNull)((0, smithy_client_1.parseRfc3339DateTimeWithOffset)(output["LastUpdated"]));
+ }
+ if (output["TimeCreated"] !== undefined) {
+ contents.TimeCreated = (0, smithy_client_1.expectNonNull)((0, smithy_client_1.parseRfc3339DateTimeWithOffset)(output["TimeCreated"]));
+ }
+ if (output["ConfigurationSchema"] !== undefined) {
+ contents.ConfigurationSchema = (0, smithy_client_1.expectString)(output["ConfigurationSchema"]);
+ }
+ if (output["PublisherId"] !== undefined) {
+ contents.PublisherId = (0, smithy_client_1.expectString)(output["PublisherId"]);
+ }
+ if (output["OriginalTypeName"] !== undefined) {
+ contents.OriginalTypeName = (0, smithy_client_1.expectString)(output["OriginalTypeName"]);
+ }
+ if (output["OriginalTypeArn"] !== undefined) {
+ contents.OriginalTypeArn = (0, smithy_client_1.expectString)(output["OriginalTypeArn"]);
+ }
+ if (output["PublicVersionNumber"] !== undefined) {
+ contents.PublicVersionNumber = (0, smithy_client_1.expectString)(output["PublicVersionNumber"]);
+ }
+ if (output["LatestPublicVersion"] !== undefined) {
+ contents.LatestPublicVersion = (0, smithy_client_1.expectString)(output["LatestPublicVersion"]);
+ }
+ if (output["IsActivated"] !== undefined) {
+ contents.IsActivated = (0, smithy_client_1.parseBoolean)(output["IsActivated"]);
+ }
+ if (output["AutoUpdate"] !== undefined) {
+ contents.AutoUpdate = (0, smithy_client_1.parseBoolean)(output["AutoUpdate"]);
+ }
+ return contents;
+};
+const de_DescribeTypeRegistrationOutput = (output, context) => {
+ const contents = {};
+ if (output["ProgressStatus"] !== undefined) {
+ contents.ProgressStatus = (0, smithy_client_1.expectString)(output["ProgressStatus"]);
+ }
+ if (output["Description"] !== undefined) {
+ contents.Description = (0, smithy_client_1.expectString)(output["Description"]);
+ }
+ if (output["TypeArn"] !== undefined) {
+ contents.TypeArn = (0, smithy_client_1.expectString)(output["TypeArn"]);
+ }
+ if (output["TypeVersionArn"] !== undefined) {
+ contents.TypeVersionArn = (0, smithy_client_1.expectString)(output["TypeVersionArn"]);
+ }
+ return contents;
+};
+const de_DetectStackDriftOutput = (output, context) => {
+ const contents = {};
+ if (output["StackDriftDetectionId"] !== undefined) {
+ contents.StackDriftDetectionId = (0, smithy_client_1.expectString)(output["StackDriftDetectionId"]);
+ }
+ return contents;
+};
+const de_DetectStackResourceDriftOutput = (output, context) => {
+ const contents = {};
+ if (output["StackResourceDrift"] !== undefined) {
+ contents.StackResourceDrift = de_StackResourceDrift(output["StackResourceDrift"], context);
+ }
+ return contents;
+};
+const de_DetectStackSetDriftOutput = (output, context) => {
+ const contents = {};
+ if (output["OperationId"] !== undefined) {
+ contents.OperationId = (0, smithy_client_1.expectString)(output["OperationId"]);
+ }
+ return contents;
+};
+const de_EstimateTemplateCostOutput = (output, context) => {
+ const contents = {};
+ if (output["Url"] !== undefined) {
+ contents.Url = (0, smithy_client_1.expectString)(output["Url"]);
+ }
+ return contents;
+};
+const de_ExecuteChangeSetOutput = (output, context) => {
+ const contents = {};
+ return contents;
+};
+const de_Export = (output, context) => {
+ const contents = {};
+ if (output["ExportingStackId"] !== undefined) {
+ contents.ExportingStackId = (0, smithy_client_1.expectString)(output["ExportingStackId"]);
+ }
+ if (output["Name"] !== undefined) {
+ contents.Name = (0, smithy_client_1.expectString)(output["Name"]);
+ }
+ if (output["Value"] !== undefined) {
+ contents.Value = (0, smithy_client_1.expectString)(output["Value"]);
+ }
+ return contents;
+};
+const de_Exports = (output, context) => {
+ return (output || [])
+ .filter((e) => e != null)
+ .map((entry) => {
+ return de_Export(entry, context);
+ });
+};
+const de_GetStackPolicyOutput = (output, context) => {
+ const contents = {};
+ if (output["StackPolicyBody"] !== undefined) {
+ contents.StackPolicyBody = (0, smithy_client_1.expectString)(output["StackPolicyBody"]);
+ }
+ return contents;
+};
+const de_GetTemplateOutput = (output, context) => {
+ const contents = {};
+ if (output["TemplateBody"] !== undefined) {
+ contents.TemplateBody = (0, smithy_client_1.expectString)(output["TemplateBody"]);
+ }
+ if (output.StagesAvailable === "") {
+ contents.StagesAvailable = [];
+ }
+ else if (output["StagesAvailable"] !== undefined && output["StagesAvailable"]["member"] !== undefined) {
+ contents.StagesAvailable = de_StageList((0, smithy_client_1.getArrayIfSingleItem)(output["StagesAvailable"]["member"]), context);
+ }
+ return contents;
+};
+const de_GetTemplateSummaryOutput = (output, context) => {
+ const contents = {};
+ if (output.Parameters === "") {
+ contents.Parameters = [];
+ }
+ else if (output["Parameters"] !== undefined && output["Parameters"]["member"] !== undefined) {
+ contents.Parameters = de_ParameterDeclarations((0, smithy_client_1.getArrayIfSingleItem)(output["Parameters"]["member"]), context);
+ }
+ if (output["Description"] !== undefined) {
+ contents.Description = (0, smithy_client_1.expectString)(output["Description"]);
+ }
+ if (output.Capabilities === "") {
+ contents.Capabilities = [];
+ }
+ else if (output["Capabilities"] !== undefined && output["Capabilities"]["member"] !== undefined) {
+ contents.Capabilities = de_Capabilities((0, smithy_client_1.getArrayIfSingleItem)(output["Capabilities"]["member"]), context);
+ }
+ if (output["CapabilitiesReason"] !== undefined) {
+ contents.CapabilitiesReason = (0, smithy_client_1.expectString)(output["CapabilitiesReason"]);
+ }
+ if (output.ResourceTypes === "") {
+ contents.ResourceTypes = [];
+ }
+ else if (output["ResourceTypes"] !== undefined && output["ResourceTypes"]["member"] !== undefined) {
+ contents.ResourceTypes = de_ResourceTypes((0, smithy_client_1.getArrayIfSingleItem)(output["ResourceTypes"]["member"]), context);
+ }
+ if (output["Version"] !== undefined) {
+ contents.Version = (0, smithy_client_1.expectString)(output["Version"]);
+ }
+ if (output["Metadata"] !== undefined) {
+ contents.Metadata = (0, smithy_client_1.expectString)(output["Metadata"]);
+ }
+ if (output.DeclaredTransforms === "") {
+ contents.DeclaredTransforms = [];
+ }
+ else if (output["DeclaredTransforms"] !== undefined && output["DeclaredTransforms"]["member"] !== undefined) {
+ contents.DeclaredTransforms = de_TransformsList((0, smithy_client_1.getArrayIfSingleItem)(output["DeclaredTransforms"]["member"]), context);
+ }
+ if (output.ResourceIdentifierSummaries === "") {
+ contents.ResourceIdentifierSummaries = [];
+ }
+ else if (output["ResourceIdentifierSummaries"] !== undefined &&
+ output["ResourceIdentifierSummaries"]["member"] !== undefined) {
+ contents.ResourceIdentifierSummaries = de_ResourceIdentifierSummaries((0, smithy_client_1.getArrayIfSingleItem)(output["ResourceIdentifierSummaries"]["member"]), context);
+ }
+ if (output["Warnings"] !== undefined) {
+ contents.Warnings = de_Warnings(output["Warnings"], context);
+ }
+ return contents;
+};
+const de_Imports = (output, context) => {
+ return (output || [])
+ .filter((e) => e != null)
+ .map((entry) => {
+ return (0, smithy_client_1.expectString)(entry);
+ });
+};
+const de_ImportStacksToStackSetOutput = (output, context) => {
+ const contents = {};
+ if (output["OperationId"] !== undefined) {
+ contents.OperationId = (0, smithy_client_1.expectString)(output["OperationId"]);
+ }
+ return contents;
+};
+const de_InsufficientCapabilitiesException = (output, context) => {
+ const contents = {};
+ if (output["Message"] !== undefined) {
+ contents.Message = (0, smithy_client_1.expectString)(output["Message"]);
+ }
+ return contents;
+};
+const de_InvalidChangeSetStatusException = (output, context) => {
+ const contents = {};
+ if (output["Message"] !== undefined) {
+ contents.Message = (0, smithy_client_1.expectString)(output["Message"]);
+ }
+ return contents;
+};
+const de_InvalidOperationException = (output, context) => {
+ const contents = {};
+ if (output["Message"] !== undefined) {
+ contents.Message = (0, smithy_client_1.expectString)(output["Message"]);
+ }
+ return contents;
+};
+const de_InvalidStateTransitionException = (output, context) => {
+ const contents = {};
+ if (output["Message"] !== undefined) {
+ contents.Message = (0, smithy_client_1.expectString)(output["Message"]);
+ }
+ return contents;
+};
+const de_LimitExceededException = (output, context) => {
+ const contents = {};
+ if (output["Message"] !== undefined) {
+ contents.Message = (0, smithy_client_1.expectString)(output["Message"]);
+ }
+ return contents;
+};
+const de_ListChangeSetsOutput = (output, context) => {
+ const contents = {};
+ if (output.Summaries === "") {
+ contents.Summaries = [];
+ }
+ else if (output["Summaries"] !== undefined && output["Summaries"]["member"] !== undefined) {
+ contents.Summaries = de_ChangeSetSummaries((0, smithy_client_1.getArrayIfSingleItem)(output["Summaries"]["member"]), context);
+ }
+ if (output["NextToken"] !== undefined) {
+ contents.NextToken = (0, smithy_client_1.expectString)(output["NextToken"]);
+ }
+ return contents;
+};
+const de_ListExportsOutput = (output, context) => {
+ const contents = {};
+ if (output.Exports === "") {
+ contents.Exports = [];
+ }
+ else if (output["Exports"] !== undefined && output["Exports"]["member"] !== undefined) {
+ contents.Exports = de_Exports((0, smithy_client_1.getArrayIfSingleItem)(output["Exports"]["member"]), context);
+ }
+ if (output["NextToken"] !== undefined) {
+ contents.NextToken = (0, smithy_client_1.expectString)(output["NextToken"]);
+ }
+ return contents;
+};
+const de_ListImportsOutput = (output, context) => {
+ const contents = {};
+ if (output.Imports === "") {
+ contents.Imports = [];
+ }
+ else if (output["Imports"] !== undefined && output["Imports"]["member"] !== undefined) {
+ contents.Imports = de_Imports((0, smithy_client_1.getArrayIfSingleItem)(output["Imports"]["member"]), context);
+ }
+ if (output["NextToken"] !== undefined) {
+ contents.NextToken = (0, smithy_client_1.expectString)(output["NextToken"]);
+ }
+ return contents;
+};
+const de_ListStackInstanceResourceDriftsOutput = (output, context) => {
+ const contents = {};
+ if (output.Summaries === "") {
+ contents.Summaries = [];
+ }
+ else if (output["Summaries"] !== undefined && output["Summaries"]["member"] !== undefined) {
+ contents.Summaries = de_StackInstanceResourceDriftsSummaries((0, smithy_client_1.getArrayIfSingleItem)(output["Summaries"]["member"]), context);
+ }
+ if (output["NextToken"] !== undefined) {
+ contents.NextToken = (0, smithy_client_1.expectString)(output["NextToken"]);
+ }
+ return contents;
+};
+const de_ListStackInstancesOutput = (output, context) => {
+ const contents = {};
+ if (output.Summaries === "") {
+ contents.Summaries = [];
+ }
+ else if (output["Summaries"] !== undefined && output["Summaries"]["member"] !== undefined) {
+ contents.Summaries = de_StackInstanceSummaries((0, smithy_client_1.getArrayIfSingleItem)(output["Summaries"]["member"]), context);
+ }
+ if (output["NextToken"] !== undefined) {
+ contents.NextToken = (0, smithy_client_1.expectString)(output["NextToken"]);
+ }
+ return contents;
+};
+const de_ListStackResourcesOutput = (output, context) => {
+ const contents = {};
+ if (output.StackResourceSummaries === "") {
+ contents.StackResourceSummaries = [];
+ }
+ else if (output["StackResourceSummaries"] !== undefined &&
+ output["StackResourceSummaries"]["member"] !== undefined) {
+ contents.StackResourceSummaries = de_StackResourceSummaries((0, smithy_client_1.getArrayIfSingleItem)(output["StackResourceSummaries"]["member"]), context);
+ }
+ if (output["NextToken"] !== undefined) {
+ contents.NextToken = (0, smithy_client_1.expectString)(output["NextToken"]);
+ }
+ return contents;
+};
+const de_ListStackSetOperationResultsOutput = (output, context) => {
+ const contents = {};
+ if (output.Summaries === "") {
+ contents.Summaries = [];
+ }
+ else if (output["Summaries"] !== undefined && output["Summaries"]["member"] !== undefined) {
+ contents.Summaries = de_StackSetOperationResultSummaries((0, smithy_client_1.getArrayIfSingleItem)(output["Summaries"]["member"]), context);
+ }
+ if (output["NextToken"] !== undefined) {
+ contents.NextToken = (0, smithy_client_1.expectString)(output["NextToken"]);
+ }
+ return contents;
+};
+const de_ListStackSetOperationsOutput = (output, context) => {
+ const contents = {};
+ if (output.Summaries === "") {
+ contents.Summaries = [];
+ }
+ else if (output["Summaries"] !== undefined && output["Summaries"]["member"] !== undefined) {
+ contents.Summaries = de_StackSetOperationSummaries((0, smithy_client_1.getArrayIfSingleItem)(output["Summaries"]["member"]), context);
+ }
+ if (output["NextToken"] !== undefined) {
+ contents.NextToken = (0, smithy_client_1.expectString)(output["NextToken"]);
+ }
+ return contents;
+};
+const de_ListStackSetsOutput = (output, context) => {
+ const contents = {};
+ if (output.Summaries === "") {
+ contents.Summaries = [];
+ }
+ else if (output["Summaries"] !== undefined && output["Summaries"]["member"] !== undefined) {
+ contents.Summaries = de_StackSetSummaries((0, smithy_client_1.getArrayIfSingleItem)(output["Summaries"]["member"]), context);
+ }
+ if (output["NextToken"] !== undefined) {
+ contents.NextToken = (0, smithy_client_1.expectString)(output["NextToken"]);
+ }
+ return contents;
+};
+const de_ListStacksOutput = (output, context) => {
+ const contents = {};
+ if (output.StackSummaries === "") {
+ contents.StackSummaries = [];
+ }
+ else if (output["StackSummaries"] !== undefined && output["StackSummaries"]["member"] !== undefined) {
+ contents.StackSummaries = de_StackSummaries((0, smithy_client_1.getArrayIfSingleItem)(output["StackSummaries"]["member"]), context);
+ }
+ if (output["NextToken"] !== undefined) {
+ contents.NextToken = (0, smithy_client_1.expectString)(output["NextToken"]);
+ }
+ return contents;
+};
+const de_ListTypeRegistrationsOutput = (output, context) => {
+ const contents = {};
+ if (output.RegistrationTokenList === "") {
+ contents.RegistrationTokenList = [];
+ }
+ else if (output["RegistrationTokenList"] !== undefined && output["RegistrationTokenList"]["member"] !== undefined) {
+ contents.RegistrationTokenList = de_RegistrationTokenList((0, smithy_client_1.getArrayIfSingleItem)(output["RegistrationTokenList"]["member"]), context);
+ }
+ if (output["NextToken"] !== undefined) {
+ contents.NextToken = (0, smithy_client_1.expectString)(output["NextToken"]);
+ }
+ return contents;
+};
+const de_ListTypesOutput = (output, context) => {
+ const contents = {};
+ if (output.TypeSummaries === "") {
+ contents.TypeSummaries = [];
+ }
+ else if (output["TypeSummaries"] !== undefined && output["TypeSummaries"]["member"] !== undefined) {
+ contents.TypeSummaries = de_TypeSummaries((0, smithy_client_1.getArrayIfSingleItem)(output["TypeSummaries"]["member"]), context);
+ }
+ if (output["NextToken"] !== undefined) {
+ contents.NextToken = (0, smithy_client_1.expectString)(output["NextToken"]);
+ }
+ return contents;
+};
+const de_ListTypeVersionsOutput = (output, context) => {
+ const contents = {};
+ if (output.TypeVersionSummaries === "") {
+ contents.TypeVersionSummaries = [];
+ }
+ else if (output["TypeVersionSummaries"] !== undefined && output["TypeVersionSummaries"]["member"] !== undefined) {
+ contents.TypeVersionSummaries = de_TypeVersionSummaries((0, smithy_client_1.getArrayIfSingleItem)(output["TypeVersionSummaries"]["member"]), context);
+ }
+ if (output["NextToken"] !== undefined) {
+ contents.NextToken = (0, smithy_client_1.expectString)(output["NextToken"]);
+ }
+ return contents;
+};
+const de_LoggingConfig = (output, context) => {
+ const contents = {};
+ if (output["LogRoleArn"] !== undefined) {
+ contents.LogRoleArn = (0, smithy_client_1.expectString)(output["LogRoleArn"]);
+ }
+ if (output["LogGroupName"] !== undefined) {
+ contents.LogGroupName = (0, smithy_client_1.expectString)(output["LogGroupName"]);
+ }
+ return contents;
+};
+const de_LogicalResourceIds = (output, context) => {
+ return (output || [])
+ .filter((e) => e != null)
+ .map((entry) => {
+ return (0, smithy_client_1.expectString)(entry);
+ });
+};
+const de_ManagedExecution = (output, context) => {
+ const contents = {};
+ if (output["Active"] !== undefined) {
+ contents.Active = (0, smithy_client_1.parseBoolean)(output["Active"]);
+ }
+ return contents;
+};
+const de_ModuleInfo = (output, context) => {
+ const contents = {};
+ if (output["TypeHierarchy"] !== undefined) {
+ contents.TypeHierarchy = (0, smithy_client_1.expectString)(output["TypeHierarchy"]);
+ }
+ if (output["LogicalIdHierarchy"] !== undefined) {
+ contents.LogicalIdHierarchy = (0, smithy_client_1.expectString)(output["LogicalIdHierarchy"]);
+ }
+ return contents;
+};
+const de_NameAlreadyExistsException = (output, context) => {
+ const contents = {};
+ if (output["Message"] !== undefined) {
+ contents.Message = (0, smithy_client_1.expectString)(output["Message"]);
+ }
+ return contents;
+};
+const de_NotificationARNs = (output, context) => {
+ return (output || [])
+ .filter((e) => e != null)
+ .map((entry) => {
+ return (0, smithy_client_1.expectString)(entry);
+ });
+};
+const de_OperationIdAlreadyExistsException = (output, context) => {
+ const contents = {};
+ if (output["Message"] !== undefined) {
+ contents.Message = (0, smithy_client_1.expectString)(output["Message"]);
+ }
+ return contents;
+};
+const de_OperationInProgressException = (output, context) => {
+ const contents = {};
+ if (output["Message"] !== undefined) {
+ contents.Message = (0, smithy_client_1.expectString)(output["Message"]);
+ }
+ return contents;
+};
+const de_OperationNotFoundException = (output, context) => {
+ const contents = {};
+ if (output["Message"] !== undefined) {
+ contents.Message = (0, smithy_client_1.expectString)(output["Message"]);
+ }
+ return contents;
+};
+const de_OperationStatusCheckFailedException = (output, context) => {
+ const contents = {};
+ if (output["Message"] !== undefined) {
+ contents.Message = (0, smithy_client_1.expectString)(output["Message"]);
+ }
+ return contents;
+};
+const de_OrganizationalUnitIdList = (output, context) => {
+ return (output || [])
+ .filter((e) => e != null)
+ .map((entry) => {
+ return (0, smithy_client_1.expectString)(entry);
+ });
+};
+const de_Output = (output, context) => {
+ const contents = {};
+ if (output["OutputKey"] !== undefined) {
+ contents.OutputKey = (0, smithy_client_1.expectString)(output["OutputKey"]);
+ }
+ if (output["OutputValue"] !== undefined) {
+ contents.OutputValue = (0, smithy_client_1.expectString)(output["OutputValue"]);
+ }
+ if (output["Description"] !== undefined) {
+ contents.Description = (0, smithy_client_1.expectString)(output["Description"]);
+ }
+ if (output["ExportName"] !== undefined) {
+ contents.ExportName = (0, smithy_client_1.expectString)(output["ExportName"]);
+ }
+ return contents;
+};
+const de_Outputs = (output, context) => {
+ return (output || [])
+ .filter((e) => e != null)
+ .map((entry) => {
+ return de_Output(entry, context);
+ });
+};
+const de_Parameter = (output, context) => {
+ const contents = {};
+ if (output["ParameterKey"] !== undefined) {
+ contents.ParameterKey = (0, smithy_client_1.expectString)(output["ParameterKey"]);
+ }
+ if (output["ParameterValue"] !== undefined) {
+ contents.ParameterValue = (0, smithy_client_1.expectString)(output["ParameterValue"]);
+ }
+ if (output["UsePreviousValue"] !== undefined) {
+ contents.UsePreviousValue = (0, smithy_client_1.parseBoolean)(output["UsePreviousValue"]);
+ }
+ if (output["ResolvedValue"] !== undefined) {
+ contents.ResolvedValue = (0, smithy_client_1.expectString)(output["ResolvedValue"]);
+ }
+ return contents;
+};
+const de_ParameterConstraints = (output, context) => {
+ const contents = {};
+ if (output.AllowedValues === "") {
+ contents.AllowedValues = [];
+ }
+ else if (output["AllowedValues"] !== undefined && output["AllowedValues"]["member"] !== undefined) {
+ contents.AllowedValues = de_AllowedValues((0, smithy_client_1.getArrayIfSingleItem)(output["AllowedValues"]["member"]), context);
+ }
+ return contents;
+};
+const de_ParameterDeclaration = (output, context) => {
+ const contents = {};
+ if (output["ParameterKey"] !== undefined) {
+ contents.ParameterKey = (0, smithy_client_1.expectString)(output["ParameterKey"]);
+ }
+ if (output["DefaultValue"] !== undefined) {
+ contents.DefaultValue = (0, smithy_client_1.expectString)(output["DefaultValue"]);
+ }
+ if (output["ParameterType"] !== undefined) {
+ contents.ParameterType = (0, smithy_client_1.expectString)(output["ParameterType"]);
+ }
+ if (output["NoEcho"] !== undefined) {
+ contents.NoEcho = (0, smithy_client_1.parseBoolean)(output["NoEcho"]);
+ }
+ if (output["Description"] !== undefined) {
+ contents.Description = (0, smithy_client_1.expectString)(output["Description"]);
+ }
+ if (output["ParameterConstraints"] !== undefined) {
+ contents.ParameterConstraints = de_ParameterConstraints(output["ParameterConstraints"], context);
+ }
+ return contents;
+};
+const de_ParameterDeclarations = (output, context) => {
+ return (output || [])
+ .filter((e) => e != null)
+ .map((entry) => {
+ return de_ParameterDeclaration(entry, context);
+ });
+};
+const de_Parameters = (output, context) => {
+ return (output || [])
+ .filter((e) => e != null)
+ .map((entry) => {
+ return de_Parameter(entry, context);
+ });
+};
+const de_PhysicalResourceIdContext = (output, context) => {
+ return (output || [])
+ .filter((e) => e != null)
+ .map((entry) => {
+ return de_PhysicalResourceIdContextKeyValuePair(entry, context);
+ });
+};
+const de_PhysicalResourceIdContextKeyValuePair = (output, context) => {
+ const contents = {};
+ if (output["Key"] !== undefined) {
+ contents.Key = (0, smithy_client_1.expectString)(output["Key"]);
+ }
+ if (output["Value"] !== undefined) {
+ contents.Value = (0, smithy_client_1.expectString)(output["Value"]);
+ }
+ return contents;
+};
+const de_PropertyDifference = (output, context) => {
+ const contents = {};
+ if (output["PropertyPath"] !== undefined) {
+ contents.PropertyPath = (0, smithy_client_1.expectString)(output["PropertyPath"]);
+ }
+ if (output["ExpectedValue"] !== undefined) {
+ contents.ExpectedValue = (0, smithy_client_1.expectString)(output["ExpectedValue"]);
+ }
+ if (output["ActualValue"] !== undefined) {
+ contents.ActualValue = (0, smithy_client_1.expectString)(output["ActualValue"]);
+ }
+ if (output["DifferenceType"] !== undefined) {
+ contents.DifferenceType = (0, smithy_client_1.expectString)(output["DifferenceType"]);
+ }
+ return contents;
+};
+const de_PropertyDifferences = (output, context) => {
+ return (output || [])
+ .filter((e) => e != null)
+ .map((entry) => {
+ return de_PropertyDifference(entry, context);
+ });
+};
+const de_PublishTypeOutput = (output, context) => {
+ const contents = {};
+ if (output["PublicTypeArn"] !== undefined) {
+ contents.PublicTypeArn = (0, smithy_client_1.expectString)(output["PublicTypeArn"]);
+ }
+ return contents;
+};
+const de_RecordHandlerProgressOutput = (output, context) => {
+ const contents = {};
+ return contents;
+};
+const de_RegionList = (output, context) => {
+ return (output || [])
+ .filter((e) => e != null)
+ .map((entry) => {
+ return (0, smithy_client_1.expectString)(entry);
+ });
+};
+const de_RegisterPublisherOutput = (output, context) => {
+ const contents = {};
+ if (output["PublisherId"] !== undefined) {
+ contents.PublisherId = (0, smithy_client_1.expectString)(output["PublisherId"]);
+ }
+ return contents;
+};
+const de_RegisterTypeOutput = (output, context) => {
+ const contents = {};
+ if (output["RegistrationToken"] !== undefined) {
+ contents.RegistrationToken = (0, smithy_client_1.expectString)(output["RegistrationToken"]);
+ }
+ return contents;
+};
+const de_RegistrationTokenList = (output, context) => {
+ return (output || [])
+ .filter((e) => e != null)
+ .map((entry) => {
+ return (0, smithy_client_1.expectString)(entry);
+ });
+};
+const de_RequiredActivatedType = (output, context) => {
+ const contents = {};
+ if (output["TypeNameAlias"] !== undefined) {
+ contents.TypeNameAlias = (0, smithy_client_1.expectString)(output["TypeNameAlias"]);
+ }
+ if (output["OriginalTypeName"] !== undefined) {
+ contents.OriginalTypeName = (0, smithy_client_1.expectString)(output["OriginalTypeName"]);
+ }
+ if (output["PublisherId"] !== undefined) {
+ contents.PublisherId = (0, smithy_client_1.expectString)(output["PublisherId"]);
+ }
+ if (output.SupportedMajorVersions === "") {
+ contents.SupportedMajorVersions = [];
+ }
+ else if (output["SupportedMajorVersions"] !== undefined &&
+ output["SupportedMajorVersions"]["member"] !== undefined) {
+ contents.SupportedMajorVersions = de_SupportedMajorVersions((0, smithy_client_1.getArrayIfSingleItem)(output["SupportedMajorVersions"]["member"]), context);
+ }
+ return contents;
+};
+const de_RequiredActivatedTypes = (output, context) => {
+ return (output || [])
+ .filter((e) => e != null)
+ .map((entry) => {
+ return de_RequiredActivatedType(entry, context);
+ });
+};
+const de_ResourceChange = (output, context) => {
+ const contents = {};
+ if (output["Action"] !== undefined) {
+ contents.Action = (0, smithy_client_1.expectString)(output["Action"]);
+ }
+ if (output["LogicalResourceId"] !== undefined) {
+ contents.LogicalResourceId = (0, smithy_client_1.expectString)(output["LogicalResourceId"]);
+ }
+ if (output["PhysicalResourceId"] !== undefined) {
+ contents.PhysicalResourceId = (0, smithy_client_1.expectString)(output["PhysicalResourceId"]);
+ }
+ if (output["ResourceType"] !== undefined) {
+ contents.ResourceType = (0, smithy_client_1.expectString)(output["ResourceType"]);
+ }
+ if (output["Replacement"] !== undefined) {
+ contents.Replacement = (0, smithy_client_1.expectString)(output["Replacement"]);
+ }
+ if (output.Scope === "") {
+ contents.Scope = [];
+ }
+ else if (output["Scope"] !== undefined && output["Scope"]["member"] !== undefined) {
+ contents.Scope = de_Scope((0, smithy_client_1.getArrayIfSingleItem)(output["Scope"]["member"]), context);
+ }
+ if (output.Details === "") {
+ contents.Details = [];
+ }
+ else if (output["Details"] !== undefined && output["Details"]["member"] !== undefined) {
+ contents.Details = de_ResourceChangeDetails((0, smithy_client_1.getArrayIfSingleItem)(output["Details"]["member"]), context);
+ }
+ if (output["ChangeSetId"] !== undefined) {
+ contents.ChangeSetId = (0, smithy_client_1.expectString)(output["ChangeSetId"]);
+ }
+ if (output["ModuleInfo"] !== undefined) {
+ contents.ModuleInfo = de_ModuleInfo(output["ModuleInfo"], context);
+ }
+ return contents;
+};
+const de_ResourceChangeDetail = (output, context) => {
+ const contents = {};
+ if (output["Target"] !== undefined) {
+ contents.Target = de_ResourceTargetDefinition(output["Target"], context);
+ }
+ if (output["Evaluation"] !== undefined) {
+ contents.Evaluation = (0, smithy_client_1.expectString)(output["Evaluation"]);
+ }
+ if (output["ChangeSource"] !== undefined) {
+ contents.ChangeSource = (0, smithy_client_1.expectString)(output["ChangeSource"]);
+ }
+ if (output["CausingEntity"] !== undefined) {
+ contents.CausingEntity = (0, smithy_client_1.expectString)(output["CausingEntity"]);
+ }
+ return contents;
+};
+const de_ResourceChangeDetails = (output, context) => {
+ return (output || [])
+ .filter((e) => e != null)
+ .map((entry) => {
+ return de_ResourceChangeDetail(entry, context);
+ });
+};
+const de_ResourceIdentifiers = (output, context) => {
+ return (output || [])
+ .filter((e) => e != null)
+ .map((entry) => {
+ return (0, smithy_client_1.expectString)(entry);
+ });
+};
+const de_ResourceIdentifierSummaries = (output, context) => {
+ return (output || [])
+ .filter((e) => e != null)
+ .map((entry) => {
+ return de_ResourceIdentifierSummary(entry, context);
+ });
+};
+const de_ResourceIdentifierSummary = (output, context) => {
+ const contents = {};
+ if (output["ResourceType"] !== undefined) {
+ contents.ResourceType = (0, smithy_client_1.expectString)(output["ResourceType"]);
+ }
+ if (output.LogicalResourceIds === "") {
+ contents.LogicalResourceIds = [];
+ }
+ else if (output["LogicalResourceIds"] !== undefined && output["LogicalResourceIds"]["member"] !== undefined) {
+ contents.LogicalResourceIds = de_LogicalResourceIds((0, smithy_client_1.getArrayIfSingleItem)(output["LogicalResourceIds"]["member"]), context);
+ }
+ if (output.ResourceIdentifiers === "") {
+ contents.ResourceIdentifiers = [];
+ }
+ else if (output["ResourceIdentifiers"] !== undefined && output["ResourceIdentifiers"]["member"] !== undefined) {
+ contents.ResourceIdentifiers = de_ResourceIdentifiers((0, smithy_client_1.getArrayIfSingleItem)(output["ResourceIdentifiers"]["member"]), context);
+ }
+ return contents;
+};
+const de_ResourceTargetDefinition = (output, context) => {
+ const contents = {};
+ if (output["Attribute"] !== undefined) {
+ contents.Attribute = (0, smithy_client_1.expectString)(output["Attribute"]);
+ }
+ if (output["Name"] !== undefined) {
+ contents.Name = (0, smithy_client_1.expectString)(output["Name"]);
+ }
+ if (output["RequiresRecreation"] !== undefined) {
+ contents.RequiresRecreation = (0, smithy_client_1.expectString)(output["RequiresRecreation"]);
+ }
+ return contents;
+};
+const de_ResourceTypes = (output, context) => {
+ return (output || [])
+ .filter((e) => e != null)
+ .map((entry) => {
+ return (0, smithy_client_1.expectString)(entry);
+ });
+};
+const de_RollbackConfiguration = (output, context) => {
+ const contents = {};
+ if (output.RollbackTriggers === "") {
+ contents.RollbackTriggers = [];
+ }
+ else if (output["RollbackTriggers"] !== undefined && output["RollbackTriggers"]["member"] !== undefined) {
+ contents.RollbackTriggers = de_RollbackTriggers((0, smithy_client_1.getArrayIfSingleItem)(output["RollbackTriggers"]["member"]), context);
+ }
+ if (output["MonitoringTimeInMinutes"] !== undefined) {
+ contents.MonitoringTimeInMinutes = (0, smithy_client_1.strictParseInt32)(output["MonitoringTimeInMinutes"]);
+ }
+ return contents;
+};
+const de_RollbackStackOutput = (output, context) => {
+ const contents = {};
+ if (output["StackId"] !== undefined) {
+ contents.StackId = (0, smithy_client_1.expectString)(output["StackId"]);
+ }
+ return contents;
+};
+const de_RollbackTrigger = (output, context) => {
+ const contents = {};
+ if (output["Arn"] !== undefined) {
+ contents.Arn = (0, smithy_client_1.expectString)(output["Arn"]);
+ }
+ if (output["Type"] !== undefined) {
+ contents.Type = (0, smithy_client_1.expectString)(output["Type"]);
+ }
+ return contents;
+};
+const de_RollbackTriggers = (output, context) => {
+ return (output || [])
+ .filter((e) => e != null)
+ .map((entry) => {
+ return de_RollbackTrigger(entry, context);
+ });
+};
+const de_Scope = (output, context) => {
+ return (output || [])
+ .filter((e) => e != null)
+ .map((entry) => {
+ return (0, smithy_client_1.expectString)(entry);
+ });
+};
+const de_SetTypeConfigurationOutput = (output, context) => {
+ const contents = {};
+ if (output["ConfigurationArn"] !== undefined) {
+ contents.ConfigurationArn = (0, smithy_client_1.expectString)(output["ConfigurationArn"]);
+ }
+ return contents;
+};
+const de_SetTypeDefaultVersionOutput = (output, context) => {
+ const contents = {};
+ return contents;
+};
+const de_Stack = (output, context) => {
+ const contents = {};
+ if (output["StackId"] !== undefined) {
+ contents.StackId = (0, smithy_client_1.expectString)(output["StackId"]);
+ }
+ if (output["StackName"] !== undefined) {
+ contents.StackName = (0, smithy_client_1.expectString)(output["StackName"]);
+ }
+ if (output["ChangeSetId"] !== undefined) {
+ contents.ChangeSetId = (0, smithy_client_1.expectString)(output["ChangeSetId"]);
+ }
+ if (output["Description"] !== undefined) {
+ contents.Description = (0, smithy_client_1.expectString)(output["Description"]);
+ }
+ if (output.Parameters === "") {
+ contents.Parameters = [];
+ }
+ else if (output["Parameters"] !== undefined && output["Parameters"]["member"] !== undefined) {
+ contents.Parameters = de_Parameters((0, smithy_client_1.getArrayIfSingleItem)(output["Parameters"]["member"]), context);
+ }
+ if (output["CreationTime"] !== undefined) {
+ contents.CreationTime = (0, smithy_client_1.expectNonNull)((0, smithy_client_1.parseRfc3339DateTimeWithOffset)(output["CreationTime"]));
+ }
+ if (output["DeletionTime"] !== undefined) {
+ contents.DeletionTime = (0, smithy_client_1.expectNonNull)((0, smithy_client_1.parseRfc3339DateTimeWithOffset)(output["DeletionTime"]));
+ }
+ if (output["LastUpdatedTime"] !== undefined) {
+ contents.LastUpdatedTime = (0, smithy_client_1.expectNonNull)((0, smithy_client_1.parseRfc3339DateTimeWithOffset)(output["LastUpdatedTime"]));
+ }
+ if (output["RollbackConfiguration"] !== undefined) {
+ contents.RollbackConfiguration = de_RollbackConfiguration(output["RollbackConfiguration"], context);
+ }
+ if (output["StackStatus"] !== undefined) {
+ contents.StackStatus = (0, smithy_client_1.expectString)(output["StackStatus"]);
+ }
+ if (output["StackStatusReason"] !== undefined) {
+ contents.StackStatusReason = (0, smithy_client_1.expectString)(output["StackStatusReason"]);
+ }
+ if (output["DisableRollback"] !== undefined) {
+ contents.DisableRollback = (0, smithy_client_1.parseBoolean)(output["DisableRollback"]);
+ }
+ if (output.NotificationARNs === "") {
+ contents.NotificationARNs = [];
+ }
+ else if (output["NotificationARNs"] !== undefined && output["NotificationARNs"]["member"] !== undefined) {
+ contents.NotificationARNs = de_NotificationARNs((0, smithy_client_1.getArrayIfSingleItem)(output["NotificationARNs"]["member"]), context);
+ }
+ if (output["TimeoutInMinutes"] !== undefined) {
+ contents.TimeoutInMinutes = (0, smithy_client_1.strictParseInt32)(output["TimeoutInMinutes"]);
+ }
+ if (output.Capabilities === "") {
+ contents.Capabilities = [];
+ }
+ else if (output["Capabilities"] !== undefined && output["Capabilities"]["member"] !== undefined) {
+ contents.Capabilities = de_Capabilities((0, smithy_client_1.getArrayIfSingleItem)(output["Capabilities"]["member"]), context);
+ }
+ if (output.Outputs === "") {
+ contents.Outputs = [];
+ }
+ else if (output["Outputs"] !== undefined && output["Outputs"]["member"] !== undefined) {
+ contents.Outputs = de_Outputs((0, smithy_client_1.getArrayIfSingleItem)(output["Outputs"]["member"]), context);
+ }
+ if (output["RoleARN"] !== undefined) {
+ contents.RoleARN = (0, smithy_client_1.expectString)(output["RoleARN"]);
+ }
+ if (output.Tags === "") {
+ contents.Tags = [];
+ }
+ else if (output["Tags"] !== undefined && output["Tags"]["member"] !== undefined) {
+ contents.Tags = de_Tags((0, smithy_client_1.getArrayIfSingleItem)(output["Tags"]["member"]), context);
+ }
+ if (output["EnableTerminationProtection"] !== undefined) {
+ contents.EnableTerminationProtection = (0, smithy_client_1.parseBoolean)(output["EnableTerminationProtection"]);
+ }
+ if (output["ParentId"] !== undefined) {
+ contents.ParentId = (0, smithy_client_1.expectString)(output["ParentId"]);
+ }
+ if (output["RootId"] !== undefined) {
+ contents.RootId = (0, smithy_client_1.expectString)(output["RootId"]);
+ }
+ if (output["DriftInformation"] !== undefined) {
+ contents.DriftInformation = de_StackDriftInformation(output["DriftInformation"], context);
+ }
+ if (output["RetainExceptOnCreate"] !== undefined) {
+ contents.RetainExceptOnCreate = (0, smithy_client_1.parseBoolean)(output["RetainExceptOnCreate"]);
+ }
+ return contents;
+};
+const de_StackDriftInformation = (output, context) => {
+ const contents = {};
+ if (output["StackDriftStatus"] !== undefined) {
+ contents.StackDriftStatus = (0, smithy_client_1.expectString)(output["StackDriftStatus"]);
+ }
+ if (output["LastCheckTimestamp"] !== undefined) {
+ contents.LastCheckTimestamp = (0, smithy_client_1.expectNonNull)((0, smithy_client_1.parseRfc3339DateTimeWithOffset)(output["LastCheckTimestamp"]));
+ }
+ return contents;
+};
+const de_StackDriftInformationSummary = (output, context) => {
+ const contents = {};
+ if (output["StackDriftStatus"] !== undefined) {
+ contents.StackDriftStatus = (0, smithy_client_1.expectString)(output["StackDriftStatus"]);
+ }
+ if (output["LastCheckTimestamp"] !== undefined) {
+ contents.LastCheckTimestamp = (0, smithy_client_1.expectNonNull)((0, smithy_client_1.parseRfc3339DateTimeWithOffset)(output["LastCheckTimestamp"]));
+ }
+ return contents;
+};
+const de_StackEvent = (output, context) => {
+ const contents = {};
+ if (output["StackId"] !== undefined) {
+ contents.StackId = (0, smithy_client_1.expectString)(output["StackId"]);
+ }
+ if (output["EventId"] !== undefined) {
+ contents.EventId = (0, smithy_client_1.expectString)(output["EventId"]);
+ }
+ if (output["StackName"] !== undefined) {
+ contents.StackName = (0, smithy_client_1.expectString)(output["StackName"]);
+ }
+ if (output["LogicalResourceId"] !== undefined) {
+ contents.LogicalResourceId = (0, smithy_client_1.expectString)(output["LogicalResourceId"]);
+ }
+ if (output["PhysicalResourceId"] !== undefined) {
+ contents.PhysicalResourceId = (0, smithy_client_1.expectString)(output["PhysicalResourceId"]);
+ }
+ if (output["ResourceType"] !== undefined) {
+ contents.ResourceType = (0, smithy_client_1.expectString)(output["ResourceType"]);
+ }
+ if (output["Timestamp"] !== undefined) {
+ contents.Timestamp = (0, smithy_client_1.expectNonNull)((0, smithy_client_1.parseRfc3339DateTimeWithOffset)(output["Timestamp"]));
+ }
+ if (output["ResourceStatus"] !== undefined) {
+ contents.ResourceStatus = (0, smithy_client_1.expectString)(output["ResourceStatus"]);
+ }
+ if (output["ResourceStatusReason"] !== undefined) {
+ contents.ResourceStatusReason = (0, smithy_client_1.expectString)(output["ResourceStatusReason"]);
+ }
+ if (output["ResourceProperties"] !== undefined) {
+ contents.ResourceProperties = (0, smithy_client_1.expectString)(output["ResourceProperties"]);
+ }
+ if (output["ClientRequestToken"] !== undefined) {
+ contents.ClientRequestToken = (0, smithy_client_1.expectString)(output["ClientRequestToken"]);
+ }
+ if (output["HookType"] !== undefined) {
+ contents.HookType = (0, smithy_client_1.expectString)(output["HookType"]);
+ }
+ if (output["HookStatus"] !== undefined) {
+ contents.HookStatus = (0, smithy_client_1.expectString)(output["HookStatus"]);
+ }
+ if (output["HookStatusReason"] !== undefined) {
+ contents.HookStatusReason = (0, smithy_client_1.expectString)(output["HookStatusReason"]);
+ }
+ if (output["HookInvocationPoint"] !== undefined) {
+ contents.HookInvocationPoint = (0, smithy_client_1.expectString)(output["HookInvocationPoint"]);
+ }
+ if (output["HookFailureMode"] !== undefined) {
+ contents.HookFailureMode = (0, smithy_client_1.expectString)(output["HookFailureMode"]);
+ }
+ return contents;
+};
+const de_StackEvents = (output, context) => {
+ return (output || [])
+ .filter((e) => e != null)
+ .map((entry) => {
+ return de_StackEvent(entry, context);
+ });
+};
+const de_StackInstance = (output, context) => {
+ const contents = {};
+ if (output["StackSetId"] !== undefined) {
+ contents.StackSetId = (0, smithy_client_1.expectString)(output["StackSetId"]);
+ }
+ if (output["Region"] !== undefined) {
+ contents.Region = (0, smithy_client_1.expectString)(output["Region"]);
+ }
+ if (output["Account"] !== undefined) {
+ contents.Account = (0, smithy_client_1.expectString)(output["Account"]);
+ }
+ if (output["StackId"] !== undefined) {
+ contents.StackId = (0, smithy_client_1.expectString)(output["StackId"]);
+ }
+ if (output.ParameterOverrides === "") {
+ contents.ParameterOverrides = [];
+ }
+ else if (output["ParameterOverrides"] !== undefined && output["ParameterOverrides"]["member"] !== undefined) {
+ contents.ParameterOverrides = de_Parameters((0, smithy_client_1.getArrayIfSingleItem)(output["ParameterOverrides"]["member"]), context);
+ }
+ if (output["Status"] !== undefined) {
+ contents.Status = (0, smithy_client_1.expectString)(output["Status"]);
+ }
+ if (output["StackInstanceStatus"] !== undefined) {
+ contents.StackInstanceStatus = de_StackInstanceComprehensiveStatus(output["StackInstanceStatus"], context);
+ }
+ if (output["StatusReason"] !== undefined) {
+ contents.StatusReason = (0, smithy_client_1.expectString)(output["StatusReason"]);
+ }
+ if (output["OrganizationalUnitId"] !== undefined) {
+ contents.OrganizationalUnitId = (0, smithy_client_1.expectString)(output["OrganizationalUnitId"]);
+ }
+ if (output["DriftStatus"] !== undefined) {
+ contents.DriftStatus = (0, smithy_client_1.expectString)(output["DriftStatus"]);
+ }
+ if (output["LastDriftCheckTimestamp"] !== undefined) {
+ contents.LastDriftCheckTimestamp = (0, smithy_client_1.expectNonNull)((0, smithy_client_1.parseRfc3339DateTimeWithOffset)(output["LastDriftCheckTimestamp"]));
+ }
+ if (output["LastOperationId"] !== undefined) {
+ contents.LastOperationId = (0, smithy_client_1.expectString)(output["LastOperationId"]);
+ }
+ return contents;
+};
+const de_StackInstanceComprehensiveStatus = (output, context) => {
+ const contents = {};
+ if (output["DetailedStatus"] !== undefined) {
+ contents.DetailedStatus = (0, smithy_client_1.expectString)(output["DetailedStatus"]);
+ }
+ return contents;
+};
+const de_StackInstanceNotFoundException = (output, context) => {
+ const contents = {};
+ if (output["Message"] !== undefined) {
+ contents.Message = (0, smithy_client_1.expectString)(output["Message"]);
+ }
+ return contents;
+};
+const de_StackInstanceResourceDriftsSummaries = (output, context) => {
+ return (output || [])
+ .filter((e) => e != null)
+ .map((entry) => {
+ return de_StackInstanceResourceDriftsSummary(entry, context);
+ });
+};
+const de_StackInstanceResourceDriftsSummary = (output, context) => {
+ const contents = {};
+ if (output["StackId"] !== undefined) {
+ contents.StackId = (0, smithy_client_1.expectString)(output["StackId"]);
+ }
+ if (output["LogicalResourceId"] !== undefined) {
+ contents.LogicalResourceId = (0, smithy_client_1.expectString)(output["LogicalResourceId"]);
+ }
+ if (output["PhysicalResourceId"] !== undefined) {
+ contents.PhysicalResourceId = (0, smithy_client_1.expectString)(output["PhysicalResourceId"]);
+ }
+ if (output.PhysicalResourceIdContext === "") {
+ contents.PhysicalResourceIdContext = [];
+ }
+ else if (output["PhysicalResourceIdContext"] !== undefined &&
+ output["PhysicalResourceIdContext"]["member"] !== undefined) {
+ contents.PhysicalResourceIdContext = de_PhysicalResourceIdContext((0, smithy_client_1.getArrayIfSingleItem)(output["PhysicalResourceIdContext"]["member"]), context);
+ }
+ if (output["ResourceType"] !== undefined) {
+ contents.ResourceType = (0, smithy_client_1.expectString)(output["ResourceType"]);
+ }
+ if (output.PropertyDifferences === "") {
+ contents.PropertyDifferences = [];
+ }
+ else if (output["PropertyDifferences"] !== undefined && output["PropertyDifferences"]["member"] !== undefined) {
+ contents.PropertyDifferences = de_PropertyDifferences((0, smithy_client_1.getArrayIfSingleItem)(output["PropertyDifferences"]["member"]), context);
+ }
+ if (output["StackResourceDriftStatus"] !== undefined) {
+ contents.StackResourceDriftStatus = (0, smithy_client_1.expectString)(output["StackResourceDriftStatus"]);
+ }
+ if (output["Timestamp"] !== undefined) {
+ contents.Timestamp = (0, smithy_client_1.expectNonNull)((0, smithy_client_1.parseRfc3339DateTimeWithOffset)(output["Timestamp"]));
+ }
+ return contents;
+};
+const de_StackInstanceSummaries = (output, context) => {
+ return (output || [])
+ .filter((e) => e != null)
+ .map((entry) => {
+ return de_StackInstanceSummary(entry, context);
+ });
+};
+const de_StackInstanceSummary = (output, context) => {
+ const contents = {};
+ if (output["StackSetId"] !== undefined) {
+ contents.StackSetId = (0, smithy_client_1.expectString)(output["StackSetId"]);
+ }
+ if (output["Region"] !== undefined) {
+ contents.Region = (0, smithy_client_1.expectString)(output["Region"]);
+ }
+ if (output["Account"] !== undefined) {
+ contents.Account = (0, smithy_client_1.expectString)(output["Account"]);
+ }
+ if (output["StackId"] !== undefined) {
+ contents.StackId = (0, smithy_client_1.expectString)(output["StackId"]);
+ }
+ if (output["Status"] !== undefined) {
+ contents.Status = (0, smithy_client_1.expectString)(output["Status"]);
+ }
+ if (output["StatusReason"] !== undefined) {
+ contents.StatusReason = (0, smithy_client_1.expectString)(output["StatusReason"]);
+ }
+ if (output["StackInstanceStatus"] !== undefined) {
+ contents.StackInstanceStatus = de_StackInstanceComprehensiveStatus(output["StackInstanceStatus"], context);
+ }
+ if (output["OrganizationalUnitId"] !== undefined) {
+ contents.OrganizationalUnitId = (0, smithy_client_1.expectString)(output["OrganizationalUnitId"]);
+ }
+ if (output["DriftStatus"] !== undefined) {
+ contents.DriftStatus = (0, smithy_client_1.expectString)(output["DriftStatus"]);
+ }
+ if (output["LastDriftCheckTimestamp"] !== undefined) {
+ contents.LastDriftCheckTimestamp = (0, smithy_client_1.expectNonNull)((0, smithy_client_1.parseRfc3339DateTimeWithOffset)(output["LastDriftCheckTimestamp"]));
+ }
+ if (output["LastOperationId"] !== undefined) {
+ contents.LastOperationId = (0, smithy_client_1.expectString)(output["LastOperationId"]);
+ }
+ return contents;
+};
+const de_StackNotFoundException = (output, context) => {
+ const contents = {};
+ if (output["Message"] !== undefined) {
+ contents.Message = (0, smithy_client_1.expectString)(output["Message"]);
+ }
+ return contents;
+};
+const de_StackResource = (output, context) => {
+ const contents = {};
+ if (output["StackName"] !== undefined) {
+ contents.StackName = (0, smithy_client_1.expectString)(output["StackName"]);
+ }
+ if (output["StackId"] !== undefined) {
+ contents.StackId = (0, smithy_client_1.expectString)(output["StackId"]);
+ }
+ if (output["LogicalResourceId"] !== undefined) {
+ contents.LogicalResourceId = (0, smithy_client_1.expectString)(output["LogicalResourceId"]);
+ }
+ if (output["PhysicalResourceId"] !== undefined) {
+ contents.PhysicalResourceId = (0, smithy_client_1.expectString)(output["PhysicalResourceId"]);
+ }
+ if (output["ResourceType"] !== undefined) {
+ contents.ResourceType = (0, smithy_client_1.expectString)(output["ResourceType"]);
+ }
+ if (output["Timestamp"] !== undefined) {
+ contents.Timestamp = (0, smithy_client_1.expectNonNull)((0, smithy_client_1.parseRfc3339DateTimeWithOffset)(output["Timestamp"]));
+ }
+ if (output["ResourceStatus"] !== undefined) {
+ contents.ResourceStatus = (0, smithy_client_1.expectString)(output["ResourceStatus"]);
+ }
+ if (output["ResourceStatusReason"] !== undefined) {
+ contents.ResourceStatusReason = (0, smithy_client_1.expectString)(output["ResourceStatusReason"]);
+ }
+ if (output["Description"] !== undefined) {
+ contents.Description = (0, smithy_client_1.expectString)(output["Description"]);
+ }
+ if (output["DriftInformation"] !== undefined) {
+ contents.DriftInformation = de_StackResourceDriftInformation(output["DriftInformation"], context);
+ }
+ if (output["ModuleInfo"] !== undefined) {
+ contents.ModuleInfo = de_ModuleInfo(output["ModuleInfo"], context);
+ }
+ return contents;
+};
+const de_StackResourceDetail = (output, context) => {
+ const contents = {};
+ if (output["StackName"] !== undefined) {
+ contents.StackName = (0, smithy_client_1.expectString)(output["StackName"]);
+ }
+ if (output["StackId"] !== undefined) {
+ contents.StackId = (0, smithy_client_1.expectString)(output["StackId"]);
+ }
+ if (output["LogicalResourceId"] !== undefined) {
+ contents.LogicalResourceId = (0, smithy_client_1.expectString)(output["LogicalResourceId"]);
+ }
+ if (output["PhysicalResourceId"] !== undefined) {
+ contents.PhysicalResourceId = (0, smithy_client_1.expectString)(output["PhysicalResourceId"]);
+ }
+ if (output["ResourceType"] !== undefined) {
+ contents.ResourceType = (0, smithy_client_1.expectString)(output["ResourceType"]);
+ }
+ if (output["LastUpdatedTimestamp"] !== undefined) {
+ contents.LastUpdatedTimestamp = (0, smithy_client_1.expectNonNull)((0, smithy_client_1.parseRfc3339DateTimeWithOffset)(output["LastUpdatedTimestamp"]));
+ }
+ if (output["ResourceStatus"] !== undefined) {
+ contents.ResourceStatus = (0, smithy_client_1.expectString)(output["ResourceStatus"]);
+ }
+ if (output["ResourceStatusReason"] !== undefined) {
+ contents.ResourceStatusReason = (0, smithy_client_1.expectString)(output["ResourceStatusReason"]);
+ }
+ if (output["Description"] !== undefined) {
+ contents.Description = (0, smithy_client_1.expectString)(output["Description"]);
+ }
+ if (output["Metadata"] !== undefined) {
+ contents.Metadata = (0, smithy_client_1.expectString)(output["Metadata"]);
+ }
+ if (output["DriftInformation"] !== undefined) {
+ contents.DriftInformation = de_StackResourceDriftInformation(output["DriftInformation"], context);
+ }
+ if (output["ModuleInfo"] !== undefined) {
+ contents.ModuleInfo = de_ModuleInfo(output["ModuleInfo"], context);
+ }
+ return contents;
+};
+const de_StackResourceDrift = (output, context) => {
+ const contents = {};
+ if (output["StackId"] !== undefined) {
+ contents.StackId = (0, smithy_client_1.expectString)(output["StackId"]);
+ }
+ if (output["LogicalResourceId"] !== undefined) {
+ contents.LogicalResourceId = (0, smithy_client_1.expectString)(output["LogicalResourceId"]);
+ }
+ if (output["PhysicalResourceId"] !== undefined) {
+ contents.PhysicalResourceId = (0, smithy_client_1.expectString)(output["PhysicalResourceId"]);
+ }
+ if (output.PhysicalResourceIdContext === "") {
+ contents.PhysicalResourceIdContext = [];
+ }
+ else if (output["PhysicalResourceIdContext"] !== undefined &&
+ output["PhysicalResourceIdContext"]["member"] !== undefined) {
+ contents.PhysicalResourceIdContext = de_PhysicalResourceIdContext((0, smithy_client_1.getArrayIfSingleItem)(output["PhysicalResourceIdContext"]["member"]), context);
+ }
+ if (output["ResourceType"] !== undefined) {
+ contents.ResourceType = (0, smithy_client_1.expectString)(output["ResourceType"]);
+ }
+ if (output["ExpectedProperties"] !== undefined) {
+ contents.ExpectedProperties = (0, smithy_client_1.expectString)(output["ExpectedProperties"]);
+ }
+ if (output["ActualProperties"] !== undefined) {
+ contents.ActualProperties = (0, smithy_client_1.expectString)(output["ActualProperties"]);
+ }
+ if (output.PropertyDifferences === "") {
+ contents.PropertyDifferences = [];
+ }
+ else if (output["PropertyDifferences"] !== undefined && output["PropertyDifferences"]["member"] !== undefined) {
+ contents.PropertyDifferences = de_PropertyDifferences((0, smithy_client_1.getArrayIfSingleItem)(output["PropertyDifferences"]["member"]), context);
+ }
+ if (output["StackResourceDriftStatus"] !== undefined) {
+ contents.StackResourceDriftStatus = (0, smithy_client_1.expectString)(output["StackResourceDriftStatus"]);
+ }
+ if (output["Timestamp"] !== undefined) {
+ contents.Timestamp = (0, smithy_client_1.expectNonNull)((0, smithy_client_1.parseRfc3339DateTimeWithOffset)(output["Timestamp"]));
+ }
+ if (output["ModuleInfo"] !== undefined) {
+ contents.ModuleInfo = de_ModuleInfo(output["ModuleInfo"], context);
+ }
+ return contents;
+};
+const de_StackResourceDriftInformation = (output, context) => {
+ const contents = {};
+ if (output["StackResourceDriftStatus"] !== undefined) {
+ contents.StackResourceDriftStatus = (0, smithy_client_1.expectString)(output["StackResourceDriftStatus"]);
+ }
+ if (output["LastCheckTimestamp"] !== undefined) {
+ contents.LastCheckTimestamp = (0, smithy_client_1.expectNonNull)((0, smithy_client_1.parseRfc3339DateTimeWithOffset)(output["LastCheckTimestamp"]));
+ }
+ return contents;
+};
+const de_StackResourceDriftInformationSummary = (output, context) => {
+ const contents = {};
+ if (output["StackResourceDriftStatus"] !== undefined) {
+ contents.StackResourceDriftStatus = (0, smithy_client_1.expectString)(output["StackResourceDriftStatus"]);
+ }
+ if (output["LastCheckTimestamp"] !== undefined) {
+ contents.LastCheckTimestamp = (0, smithy_client_1.expectNonNull)((0, smithy_client_1.parseRfc3339DateTimeWithOffset)(output["LastCheckTimestamp"]));
+ }
+ return contents;
+};
+const de_StackResourceDrifts = (output, context) => {
+ return (output || [])
+ .filter((e) => e != null)
+ .map((entry) => {
+ return de_StackResourceDrift(entry, context);
+ });
+};
+const de_StackResources = (output, context) => {
+ return (output || [])
+ .filter((e) => e != null)
+ .map((entry) => {
+ return de_StackResource(entry, context);
+ });
+};
+const de_StackResourceSummaries = (output, context) => {
+ return (output || [])
+ .filter((e) => e != null)
+ .map((entry) => {
+ return de_StackResourceSummary(entry, context);
+ });
+};
+const de_StackResourceSummary = (output, context) => {
+ const contents = {};
+ if (output["LogicalResourceId"] !== undefined) {
+ contents.LogicalResourceId = (0, smithy_client_1.expectString)(output["LogicalResourceId"]);
+ }
+ if (output["PhysicalResourceId"] !== undefined) {
+ contents.PhysicalResourceId = (0, smithy_client_1.expectString)(output["PhysicalResourceId"]);
+ }
+ if (output["ResourceType"] !== undefined) {
+ contents.ResourceType = (0, smithy_client_1.expectString)(output["ResourceType"]);
+ }
+ if (output["LastUpdatedTimestamp"] !== undefined) {
+ contents.LastUpdatedTimestamp = (0, smithy_client_1.expectNonNull)((0, smithy_client_1.parseRfc3339DateTimeWithOffset)(output["LastUpdatedTimestamp"]));
+ }
+ if (output["ResourceStatus"] !== undefined) {
+ contents.ResourceStatus = (0, smithy_client_1.expectString)(output["ResourceStatus"]);
+ }
+ if (output["ResourceStatusReason"] !== undefined) {
+ contents.ResourceStatusReason = (0, smithy_client_1.expectString)(output["ResourceStatusReason"]);
+ }
+ if (output["DriftInformation"] !== undefined) {
+ contents.DriftInformation = de_StackResourceDriftInformationSummary(output["DriftInformation"], context);
+ }
+ if (output["ModuleInfo"] !== undefined) {
+ contents.ModuleInfo = de_ModuleInfo(output["ModuleInfo"], context);
+ }
+ return contents;
+};
+const de_Stacks = (output, context) => {
+ return (output || [])
+ .filter((e) => e != null)
+ .map((entry) => {
+ return de_Stack(entry, context);
+ });
+};
+const de_StackSet = (output, context) => {
+ const contents = {};
+ if (output["StackSetName"] !== undefined) {
+ contents.StackSetName = (0, smithy_client_1.expectString)(output["StackSetName"]);
+ }
+ if (output["StackSetId"] !== undefined) {
+ contents.StackSetId = (0, smithy_client_1.expectString)(output["StackSetId"]);
+ }
+ if (output["Description"] !== undefined) {
+ contents.Description = (0, smithy_client_1.expectString)(output["Description"]);
+ }
+ if (output["Status"] !== undefined) {
+ contents.Status = (0, smithy_client_1.expectString)(output["Status"]);
+ }
+ if (output["TemplateBody"] !== undefined) {
+ contents.TemplateBody = (0, smithy_client_1.expectString)(output["TemplateBody"]);
+ }
+ if (output.Parameters === "") {
+ contents.Parameters = [];
+ }
+ else if (output["Parameters"] !== undefined && output["Parameters"]["member"] !== undefined) {
+ contents.Parameters = de_Parameters((0, smithy_client_1.getArrayIfSingleItem)(output["Parameters"]["member"]), context);
+ }
+ if (output.Capabilities === "") {
+ contents.Capabilities = [];
+ }
+ else if (output["Capabilities"] !== undefined && output["Capabilities"]["member"] !== undefined) {
+ contents.Capabilities = de_Capabilities((0, smithy_client_1.getArrayIfSingleItem)(output["Capabilities"]["member"]), context);
+ }
+ if (output.Tags === "") {
+ contents.Tags = [];
+ }
+ else if (output["Tags"] !== undefined && output["Tags"]["member"] !== undefined) {
+ contents.Tags = de_Tags((0, smithy_client_1.getArrayIfSingleItem)(output["Tags"]["member"]), context);
+ }
+ if (output["StackSetARN"] !== undefined) {
+ contents.StackSetARN = (0, smithy_client_1.expectString)(output["StackSetARN"]);
+ }
+ if (output["AdministrationRoleARN"] !== undefined) {
+ contents.AdministrationRoleARN = (0, smithy_client_1.expectString)(output["AdministrationRoleARN"]);
+ }
+ if (output["ExecutionRoleName"] !== undefined) {
+ contents.ExecutionRoleName = (0, smithy_client_1.expectString)(output["ExecutionRoleName"]);
+ }
+ if (output["StackSetDriftDetectionDetails"] !== undefined) {
+ contents.StackSetDriftDetectionDetails = de_StackSetDriftDetectionDetails(output["StackSetDriftDetectionDetails"], context);
+ }
+ if (output["AutoDeployment"] !== undefined) {
+ contents.AutoDeployment = de_AutoDeployment(output["AutoDeployment"], context);
+ }
+ if (output["PermissionModel"] !== undefined) {
+ contents.PermissionModel = (0, smithy_client_1.expectString)(output["PermissionModel"]);
+ }
+ if (output.OrganizationalUnitIds === "") {
+ contents.OrganizationalUnitIds = [];
+ }
+ else if (output["OrganizationalUnitIds"] !== undefined && output["OrganizationalUnitIds"]["member"] !== undefined) {
+ contents.OrganizationalUnitIds = de_OrganizationalUnitIdList((0, smithy_client_1.getArrayIfSingleItem)(output["OrganizationalUnitIds"]["member"]), context);
+ }
+ if (output["ManagedExecution"] !== undefined) {
+ contents.ManagedExecution = de_ManagedExecution(output["ManagedExecution"], context);
+ }
+ if (output.Regions === "") {
+ contents.Regions = [];
+ }
+ else if (output["Regions"] !== undefined && output["Regions"]["member"] !== undefined) {
+ contents.Regions = de_RegionList((0, smithy_client_1.getArrayIfSingleItem)(output["Regions"]["member"]), context);
+ }
+ return contents;
+};
+const de_StackSetDriftDetectionDetails = (output, context) => {
+ const contents = {};
+ if (output["DriftStatus"] !== undefined) {
+ contents.DriftStatus = (0, smithy_client_1.expectString)(output["DriftStatus"]);
+ }
+ if (output["DriftDetectionStatus"] !== undefined) {
+ contents.DriftDetectionStatus = (0, smithy_client_1.expectString)(output["DriftDetectionStatus"]);
+ }
+ if (output["LastDriftCheckTimestamp"] !== undefined) {
+ contents.LastDriftCheckTimestamp = (0, smithy_client_1.expectNonNull)((0, smithy_client_1.parseRfc3339DateTimeWithOffset)(output["LastDriftCheckTimestamp"]));
+ }
+ if (output["TotalStackInstancesCount"] !== undefined) {
+ contents.TotalStackInstancesCount = (0, smithy_client_1.strictParseInt32)(output["TotalStackInstancesCount"]);
+ }
+ if (output["DriftedStackInstancesCount"] !== undefined) {
+ contents.DriftedStackInstancesCount = (0, smithy_client_1.strictParseInt32)(output["DriftedStackInstancesCount"]);
+ }
+ if (output["InSyncStackInstancesCount"] !== undefined) {
+ contents.InSyncStackInstancesCount = (0, smithy_client_1.strictParseInt32)(output["InSyncStackInstancesCount"]);
+ }
+ if (output["InProgressStackInstancesCount"] !== undefined) {
+ contents.InProgressStackInstancesCount = (0, smithy_client_1.strictParseInt32)(output["InProgressStackInstancesCount"]);
+ }
+ if (output["FailedStackInstancesCount"] !== undefined) {
+ contents.FailedStackInstancesCount = (0, smithy_client_1.strictParseInt32)(output["FailedStackInstancesCount"]);
+ }
+ return contents;
+};
+const de_StackSetNotEmptyException = (output, context) => {
+ const contents = {};
+ if (output["Message"] !== undefined) {
+ contents.Message = (0, smithy_client_1.expectString)(output["Message"]);
+ }
+ return contents;
+};
+const de_StackSetNotFoundException = (output, context) => {
+ const contents = {};
+ if (output["Message"] !== undefined) {
+ contents.Message = (0, smithy_client_1.expectString)(output["Message"]);
+ }
+ return contents;
+};
+const de_StackSetOperation = (output, context) => {
+ const contents = {};
+ if (output["OperationId"] !== undefined) {
+ contents.OperationId = (0, smithy_client_1.expectString)(output["OperationId"]);
+ }
+ if (output["StackSetId"] !== undefined) {
+ contents.StackSetId = (0, smithy_client_1.expectString)(output["StackSetId"]);
+ }
+ if (output["Action"] !== undefined) {
+ contents.Action = (0, smithy_client_1.expectString)(output["Action"]);
+ }
+ if (output["Status"] !== undefined) {
+ contents.Status = (0, smithy_client_1.expectString)(output["Status"]);
+ }
+ if (output["OperationPreferences"] !== undefined) {
+ contents.OperationPreferences = de_StackSetOperationPreferences(output["OperationPreferences"], context);
+ }
+ if (output["RetainStacks"] !== undefined) {
+ contents.RetainStacks = (0, smithy_client_1.parseBoolean)(output["RetainStacks"]);
+ }
+ if (output["AdministrationRoleARN"] !== undefined) {
+ contents.AdministrationRoleARN = (0, smithy_client_1.expectString)(output["AdministrationRoleARN"]);
+ }
+ if (output["ExecutionRoleName"] !== undefined) {
+ contents.ExecutionRoleName = (0, smithy_client_1.expectString)(output["ExecutionRoleName"]);
+ }
+ if (output["CreationTimestamp"] !== undefined) {
+ contents.CreationTimestamp = (0, smithy_client_1.expectNonNull)((0, smithy_client_1.parseRfc3339DateTimeWithOffset)(output["CreationTimestamp"]));
+ }
+ if (output["EndTimestamp"] !== undefined) {
+ contents.EndTimestamp = (0, smithy_client_1.expectNonNull)((0, smithy_client_1.parseRfc3339DateTimeWithOffset)(output["EndTimestamp"]));
+ }
+ if (output["DeploymentTargets"] !== undefined) {
+ contents.DeploymentTargets = de_DeploymentTargets(output["DeploymentTargets"], context);
+ }
+ if (output["StackSetDriftDetectionDetails"] !== undefined) {
+ contents.StackSetDriftDetectionDetails = de_StackSetDriftDetectionDetails(output["StackSetDriftDetectionDetails"], context);
+ }
+ if (output["StatusReason"] !== undefined) {
+ contents.StatusReason = (0, smithy_client_1.expectString)(output["StatusReason"]);
+ }
+ if (output["StatusDetails"] !== undefined) {
+ contents.StatusDetails = de_StackSetOperationStatusDetails(output["StatusDetails"], context);
+ }
+ return contents;
+};
+const de_StackSetOperationPreferences = (output, context) => {
+ const contents = {};
+ if (output["RegionConcurrencyType"] !== undefined) {
+ contents.RegionConcurrencyType = (0, smithy_client_1.expectString)(output["RegionConcurrencyType"]);
+ }
+ if (output.RegionOrder === "") {
+ contents.RegionOrder = [];
+ }
+ else if (output["RegionOrder"] !== undefined && output["RegionOrder"]["member"] !== undefined) {
+ contents.RegionOrder = de_RegionList((0, smithy_client_1.getArrayIfSingleItem)(output["RegionOrder"]["member"]), context);
+ }
+ if (output["FailureToleranceCount"] !== undefined) {
+ contents.FailureToleranceCount = (0, smithy_client_1.strictParseInt32)(output["FailureToleranceCount"]);
+ }
+ if (output["FailureTolerancePercentage"] !== undefined) {
+ contents.FailureTolerancePercentage = (0, smithy_client_1.strictParseInt32)(output["FailureTolerancePercentage"]);
+ }
+ if (output["MaxConcurrentCount"] !== undefined) {
+ contents.MaxConcurrentCount = (0, smithy_client_1.strictParseInt32)(output["MaxConcurrentCount"]);
+ }
+ if (output["MaxConcurrentPercentage"] !== undefined) {
+ contents.MaxConcurrentPercentage = (0, smithy_client_1.strictParseInt32)(output["MaxConcurrentPercentage"]);
+ }
+ return contents;
+};
+const de_StackSetOperationResultSummaries = (output, context) => {
+ return (output || [])
+ .filter((e) => e != null)
+ .map((entry) => {
+ return de_StackSetOperationResultSummary(entry, context);
+ });
+};
+const de_StackSetOperationResultSummary = (output, context) => {
+ const contents = {};
+ if (output["Account"] !== undefined) {
+ contents.Account = (0, smithy_client_1.expectString)(output["Account"]);
+ }
+ if (output["Region"] !== undefined) {
+ contents.Region = (0, smithy_client_1.expectString)(output["Region"]);
+ }
+ if (output["Status"] !== undefined) {
+ contents.Status = (0, smithy_client_1.expectString)(output["Status"]);
+ }
+ if (output["StatusReason"] !== undefined) {
+ contents.StatusReason = (0, smithy_client_1.expectString)(output["StatusReason"]);
+ }
+ if (output["AccountGateResult"] !== undefined) {
+ contents.AccountGateResult = de_AccountGateResult(output["AccountGateResult"], context);
+ }
+ if (output["OrganizationalUnitId"] !== undefined) {
+ contents.OrganizationalUnitId = (0, smithy_client_1.expectString)(output["OrganizationalUnitId"]);
+ }
+ return contents;
+};
+const de_StackSetOperationStatusDetails = (output, context) => {
+ const contents = {};
+ if (output["FailedStackInstancesCount"] !== undefined) {
+ contents.FailedStackInstancesCount = (0, smithy_client_1.strictParseInt32)(output["FailedStackInstancesCount"]);
+ }
+ return contents;
+};
+const de_StackSetOperationSummaries = (output, context) => {
+ return (output || [])
+ .filter((e) => e != null)
+ .map((entry) => {
+ return de_StackSetOperationSummary(entry, context);
+ });
+};
+const de_StackSetOperationSummary = (output, context) => {
+ const contents = {};
+ if (output["OperationId"] !== undefined) {
+ contents.OperationId = (0, smithy_client_1.expectString)(output["OperationId"]);
+ }
+ if (output["Action"] !== undefined) {
+ contents.Action = (0, smithy_client_1.expectString)(output["Action"]);
+ }
+ if (output["Status"] !== undefined) {
+ contents.Status = (0, smithy_client_1.expectString)(output["Status"]);
+ }
+ if (output["CreationTimestamp"] !== undefined) {
+ contents.CreationTimestamp = (0, smithy_client_1.expectNonNull)((0, smithy_client_1.parseRfc3339DateTimeWithOffset)(output["CreationTimestamp"]));
+ }
+ if (output["EndTimestamp"] !== undefined) {
+ contents.EndTimestamp = (0, smithy_client_1.expectNonNull)((0, smithy_client_1.parseRfc3339DateTimeWithOffset)(output["EndTimestamp"]));
+ }
+ if (output["StatusReason"] !== undefined) {
+ contents.StatusReason = (0, smithy_client_1.expectString)(output["StatusReason"]);
+ }
+ if (output["StatusDetails"] !== undefined) {
+ contents.StatusDetails = de_StackSetOperationStatusDetails(output["StatusDetails"], context);
+ }
+ if (output["OperationPreferences"] !== undefined) {
+ contents.OperationPreferences = de_StackSetOperationPreferences(output["OperationPreferences"], context);
+ }
+ return contents;
+};
+const de_StackSetSummaries = (output, context) => {
+ return (output || [])
+ .filter((e) => e != null)
+ .map((entry) => {
+ return de_StackSetSummary(entry, context);
+ });
+};
+const de_StackSetSummary = (output, context) => {
+ const contents = {};
+ if (output["StackSetName"] !== undefined) {
+ contents.StackSetName = (0, smithy_client_1.expectString)(output["StackSetName"]);
+ }
+ if (output["StackSetId"] !== undefined) {
+ contents.StackSetId = (0, smithy_client_1.expectString)(output["StackSetId"]);
+ }
+ if (output["Description"] !== undefined) {
+ contents.Description = (0, smithy_client_1.expectString)(output["Description"]);
+ }
+ if (output["Status"] !== undefined) {
+ contents.Status = (0, smithy_client_1.expectString)(output["Status"]);
+ }
+ if (output["AutoDeployment"] !== undefined) {
+ contents.AutoDeployment = de_AutoDeployment(output["AutoDeployment"], context);
+ }
+ if (output["PermissionModel"] !== undefined) {
+ contents.PermissionModel = (0, smithy_client_1.expectString)(output["PermissionModel"]);
+ }
+ if (output["DriftStatus"] !== undefined) {
+ contents.DriftStatus = (0, smithy_client_1.expectString)(output["DriftStatus"]);
+ }
+ if (output["LastDriftCheckTimestamp"] !== undefined) {
+ contents.LastDriftCheckTimestamp = (0, smithy_client_1.expectNonNull)((0, smithy_client_1.parseRfc3339DateTimeWithOffset)(output["LastDriftCheckTimestamp"]));
+ }
+ if (output["ManagedExecution"] !== undefined) {
+ contents.ManagedExecution = de_ManagedExecution(output["ManagedExecution"], context);
+ }
+ return contents;
+};
+const de_StackSummaries = (output, context) => {
+ return (output || [])
+ .filter((e) => e != null)
+ .map((entry) => {
+ return de_StackSummary(entry, context);
+ });
+};
+const de_StackSummary = (output, context) => {
+ const contents = {};
+ if (output["StackId"] !== undefined) {
+ contents.StackId = (0, smithy_client_1.expectString)(output["StackId"]);
+ }
+ if (output["StackName"] !== undefined) {
+ contents.StackName = (0, smithy_client_1.expectString)(output["StackName"]);
+ }
+ if (output["TemplateDescription"] !== undefined) {
+ contents.TemplateDescription = (0, smithy_client_1.expectString)(output["TemplateDescription"]);
+ }
+ if (output["CreationTime"] !== undefined) {
+ contents.CreationTime = (0, smithy_client_1.expectNonNull)((0, smithy_client_1.parseRfc3339DateTimeWithOffset)(output["CreationTime"]));
+ }
+ if (output["LastUpdatedTime"] !== undefined) {
+ contents.LastUpdatedTime = (0, smithy_client_1.expectNonNull)((0, smithy_client_1.parseRfc3339DateTimeWithOffset)(output["LastUpdatedTime"]));
+ }
+ if (output["DeletionTime"] !== undefined) {
+ contents.DeletionTime = (0, smithy_client_1.expectNonNull)((0, smithy_client_1.parseRfc3339DateTimeWithOffset)(output["DeletionTime"]));
+ }
+ if (output["StackStatus"] !== undefined) {
+ contents.StackStatus = (0, smithy_client_1.expectString)(output["StackStatus"]);
+ }
+ if (output["StackStatusReason"] !== undefined) {
+ contents.StackStatusReason = (0, smithy_client_1.expectString)(output["StackStatusReason"]);
+ }
+ if (output["ParentId"] !== undefined) {
+ contents.ParentId = (0, smithy_client_1.expectString)(output["ParentId"]);
+ }
+ if (output["RootId"] !== undefined) {
+ contents.RootId = (0, smithy_client_1.expectString)(output["RootId"]);
+ }
+ if (output["DriftInformation"] !== undefined) {
+ contents.DriftInformation = de_StackDriftInformationSummary(output["DriftInformation"], context);
+ }
+ return contents;
+};
+const de_StageList = (output, context) => {
+ return (output || [])
+ .filter((e) => e != null)
+ .map((entry) => {
+ return (0, smithy_client_1.expectString)(entry);
+ });
+};
+const de_StaleRequestException = (output, context) => {
+ const contents = {};
+ if (output["Message"] !== undefined) {
+ contents.Message = (0, smithy_client_1.expectString)(output["Message"]);
+ }
+ return contents;
+};
+const de_StopStackSetOperationOutput = (output, context) => {
+ const contents = {};
+ return contents;
+};
+const de_SupportedMajorVersions = (output, context) => {
+ return (output || [])
+ .filter((e) => e != null)
+ .map((entry) => {
+ return (0, smithy_client_1.strictParseInt32)(entry);
+ });
+};
+const de_Tag = (output, context) => {
+ const contents = {};
+ if (output["Key"] !== undefined) {
+ contents.Key = (0, smithy_client_1.expectString)(output["Key"]);
+ }
+ if (output["Value"] !== undefined) {
+ contents.Value = (0, smithy_client_1.expectString)(output["Value"]);
+ }
+ return contents;
+};
+const de_Tags = (output, context) => {
+ return (output || [])
+ .filter((e) => e != null)
+ .map((entry) => {
+ return de_Tag(entry, context);
+ });
+};
+const de_TemplateParameter = (output, context) => {
+ const contents = {};
+ if (output["ParameterKey"] !== undefined) {
+ contents.ParameterKey = (0, smithy_client_1.expectString)(output["ParameterKey"]);
+ }
+ if (output["DefaultValue"] !== undefined) {
+ contents.DefaultValue = (0, smithy_client_1.expectString)(output["DefaultValue"]);
+ }
+ if (output["NoEcho"] !== undefined) {
+ contents.NoEcho = (0, smithy_client_1.parseBoolean)(output["NoEcho"]);
+ }
+ if (output["Description"] !== undefined) {
+ contents.Description = (0, smithy_client_1.expectString)(output["Description"]);
+ }
+ return contents;
+};
+const de_TemplateParameters = (output, context) => {
+ return (output || [])
+ .filter((e) => e != null)
+ .map((entry) => {
+ return de_TemplateParameter(entry, context);
+ });
+};
+const de_TestTypeOutput = (output, context) => {
+ const contents = {};
+ if (output["TypeVersionArn"] !== undefined) {
+ contents.TypeVersionArn = (0, smithy_client_1.expectString)(output["TypeVersionArn"]);
+ }
+ return contents;
+};
+const de_TokenAlreadyExistsException = (output, context) => {
+ const contents = {};
+ if (output["Message"] !== undefined) {
+ contents.Message = (0, smithy_client_1.expectString)(output["Message"]);
+ }
+ return contents;
+};
+const de_TransformsList = (output, context) => {
+ return (output || [])
+ .filter((e) => e != null)
+ .map((entry) => {
+ return (0, smithy_client_1.expectString)(entry);
+ });
+};
+const de_TypeConfigurationDetails = (output, context) => {
+ const contents = {};
+ if (output["Arn"] !== undefined) {
+ contents.Arn = (0, smithy_client_1.expectString)(output["Arn"]);
+ }
+ if (output["Alias"] !== undefined) {
+ contents.Alias = (0, smithy_client_1.expectString)(output["Alias"]);
+ }
+ if (output["Configuration"] !== undefined) {
+ contents.Configuration = (0, smithy_client_1.expectString)(output["Configuration"]);
+ }
+ if (output["LastUpdated"] !== undefined) {
+ contents.LastUpdated = (0, smithy_client_1.expectNonNull)((0, smithy_client_1.parseRfc3339DateTimeWithOffset)(output["LastUpdated"]));
+ }
+ if (output["TypeArn"] !== undefined) {
+ contents.TypeArn = (0, smithy_client_1.expectString)(output["TypeArn"]);
+ }
+ if (output["TypeName"] !== undefined) {
+ contents.TypeName = (0, smithy_client_1.expectString)(output["TypeName"]);
+ }
+ if (output["IsDefaultConfiguration"] !== undefined) {
+ contents.IsDefaultConfiguration = (0, smithy_client_1.parseBoolean)(output["IsDefaultConfiguration"]);
+ }
+ return contents;
+};
+const de_TypeConfigurationDetailsList = (output, context) => {
+ return (output || [])
+ .filter((e) => e != null)
+ .map((entry) => {
+ return de_TypeConfigurationDetails(entry, context);
+ });
+};
+const de_TypeConfigurationIdentifier = (output, context) => {
+ const contents = {};
+ if (output["TypeArn"] !== undefined) {
+ contents.TypeArn = (0, smithy_client_1.expectString)(output["TypeArn"]);
+ }
+ if (output["TypeConfigurationAlias"] !== undefined) {
+ contents.TypeConfigurationAlias = (0, smithy_client_1.expectString)(output["TypeConfigurationAlias"]);
+ }
+ if (output["TypeConfigurationArn"] !== undefined) {
+ contents.TypeConfigurationArn = (0, smithy_client_1.expectString)(output["TypeConfigurationArn"]);
+ }
+ if (output["Type"] !== undefined) {
+ contents.Type = (0, smithy_client_1.expectString)(output["Type"]);
+ }
+ if (output["TypeName"] !== undefined) {
+ contents.TypeName = (0, smithy_client_1.expectString)(output["TypeName"]);
+ }
+ return contents;
+};
+const de_TypeConfigurationNotFoundException = (output, context) => {
+ const contents = {};
+ if (output["Message"] !== undefined) {
+ contents.Message = (0, smithy_client_1.expectString)(output["Message"]);
+ }
+ return contents;
+};
+const de_TypeNotFoundException = (output, context) => {
+ const contents = {};
+ if (output["Message"] !== undefined) {
+ contents.Message = (0, smithy_client_1.expectString)(output["Message"]);
+ }
+ return contents;
+};
+const de_TypeSummaries = (output, context) => {
+ return (output || [])
+ .filter((e) => e != null)
+ .map((entry) => {
+ return de_TypeSummary(entry, context);
+ });
+};
+const de_TypeSummary = (output, context) => {
+ const contents = {};
+ if (output["Type"] !== undefined) {
+ contents.Type = (0, smithy_client_1.expectString)(output["Type"]);
+ }
+ if (output["TypeName"] !== undefined) {
+ contents.TypeName = (0, smithy_client_1.expectString)(output["TypeName"]);
+ }
+ if (output["DefaultVersionId"] !== undefined) {
+ contents.DefaultVersionId = (0, smithy_client_1.expectString)(output["DefaultVersionId"]);
+ }
+ if (output["TypeArn"] !== undefined) {
+ contents.TypeArn = (0, smithy_client_1.expectString)(output["TypeArn"]);
+ }
+ if (output["LastUpdated"] !== undefined) {
+ contents.LastUpdated = (0, smithy_client_1.expectNonNull)((0, smithy_client_1.parseRfc3339DateTimeWithOffset)(output["LastUpdated"]));
+ }
+ if (output["Description"] !== undefined) {
+ contents.Description = (0, smithy_client_1.expectString)(output["Description"]);
+ }
+ if (output["PublisherId"] !== undefined) {
+ contents.PublisherId = (0, smithy_client_1.expectString)(output["PublisherId"]);
+ }
+ if (output["OriginalTypeName"] !== undefined) {
+ contents.OriginalTypeName = (0, smithy_client_1.expectString)(output["OriginalTypeName"]);
+ }
+ if (output["PublicVersionNumber"] !== undefined) {
+ contents.PublicVersionNumber = (0, smithy_client_1.expectString)(output["PublicVersionNumber"]);
+ }
+ if (output["LatestPublicVersion"] !== undefined) {
+ contents.LatestPublicVersion = (0, smithy_client_1.expectString)(output["LatestPublicVersion"]);
+ }
+ if (output["PublisherIdentity"] !== undefined) {
+ contents.PublisherIdentity = (0, smithy_client_1.expectString)(output["PublisherIdentity"]);
+ }
+ if (output["PublisherName"] !== undefined) {
+ contents.PublisherName = (0, smithy_client_1.expectString)(output["PublisherName"]);
+ }
+ if (output["IsActivated"] !== undefined) {
+ contents.IsActivated = (0, smithy_client_1.parseBoolean)(output["IsActivated"]);
+ }
+ return contents;
+};
+const de_TypeVersionSummaries = (output, context) => {
+ return (output || [])
+ .filter((e) => e != null)
+ .map((entry) => {
+ return de_TypeVersionSummary(entry, context);
+ });
+};
+const de_TypeVersionSummary = (output, context) => {
+ const contents = {};
+ if (output["Type"] !== undefined) {
+ contents.Type = (0, smithy_client_1.expectString)(output["Type"]);
+ }
+ if (output["TypeName"] !== undefined) {
+ contents.TypeName = (0, smithy_client_1.expectString)(output["TypeName"]);
+ }
+ if (output["VersionId"] !== undefined) {
+ contents.VersionId = (0, smithy_client_1.expectString)(output["VersionId"]);
+ }
+ if (output["IsDefaultVersion"] !== undefined) {
+ contents.IsDefaultVersion = (0, smithy_client_1.parseBoolean)(output["IsDefaultVersion"]);
+ }
+ if (output["Arn"] !== undefined) {
+ contents.Arn = (0, smithy_client_1.expectString)(output["Arn"]);
+ }
+ if (output["TimeCreated"] !== undefined) {
+ contents.TimeCreated = (0, smithy_client_1.expectNonNull)((0, smithy_client_1.parseRfc3339DateTimeWithOffset)(output["TimeCreated"]));
+ }
+ if (output["Description"] !== undefined) {
+ contents.Description = (0, smithy_client_1.expectString)(output["Description"]);
+ }
+ if (output["PublicVersionNumber"] !== undefined) {
+ contents.PublicVersionNumber = (0, smithy_client_1.expectString)(output["PublicVersionNumber"]);
+ }
+ return contents;
+};
+const de_UnprocessedTypeConfigurations = (output, context) => {
+ return (output || [])
+ .filter((e) => e != null)
+ .map((entry) => {
+ return de_TypeConfigurationIdentifier(entry, context);
+ });
+};
+const de_UpdateStackInstancesOutput = (output, context) => {
+ const contents = {};
+ if (output["OperationId"] !== undefined) {
+ contents.OperationId = (0, smithy_client_1.expectString)(output["OperationId"]);
+ }
+ return contents;
+};
+const de_UpdateStackOutput = (output, context) => {
+ const contents = {};
+ if (output["StackId"] !== undefined) {
+ contents.StackId = (0, smithy_client_1.expectString)(output["StackId"]);
+ }
+ return contents;
+};
+const de_UpdateStackSetOutput = (output, context) => {
+ const contents = {};
+ if (output["OperationId"] !== undefined) {
+ contents.OperationId = (0, smithy_client_1.expectString)(output["OperationId"]);
+ }
+ return contents;
+};
+const de_UpdateTerminationProtectionOutput = (output, context) => {
+ const contents = {};
+ if (output["StackId"] !== undefined) {
+ contents.StackId = (0, smithy_client_1.expectString)(output["StackId"]);
+ }
+ return contents;
+};
+const de_ValidateTemplateOutput = (output, context) => {
+ const contents = {};
+ if (output.Parameters === "") {
+ contents.Parameters = [];
+ }
+ else if (output["Parameters"] !== undefined && output["Parameters"]["member"] !== undefined) {
+ contents.Parameters = de_TemplateParameters((0, smithy_client_1.getArrayIfSingleItem)(output["Parameters"]["member"]), context);
+ }
+ if (output["Description"] !== undefined) {
+ contents.Description = (0, smithy_client_1.expectString)(output["Description"]);
+ }
+ if (output.Capabilities === "") {
+ contents.Capabilities = [];
+ }
+ else if (output["Capabilities"] !== undefined && output["Capabilities"]["member"] !== undefined) {
+ contents.Capabilities = de_Capabilities((0, smithy_client_1.getArrayIfSingleItem)(output["Capabilities"]["member"]), context);
+ }
+ if (output["CapabilitiesReason"] !== undefined) {
+ contents.CapabilitiesReason = (0, smithy_client_1.expectString)(output["CapabilitiesReason"]);
+ }
+ if (output.DeclaredTransforms === "") {
+ contents.DeclaredTransforms = [];
+ }
+ else if (output["DeclaredTransforms"] !== undefined && output["DeclaredTransforms"]["member"] !== undefined) {
+ contents.DeclaredTransforms = de_TransformsList((0, smithy_client_1.getArrayIfSingleItem)(output["DeclaredTransforms"]["member"]), context);
+ }
+ return contents;
+};
+const de_Warnings = (output, context) => {
+ const contents = {};
+ if (output.UnrecognizedResourceTypes === "") {
+ contents.UnrecognizedResourceTypes = [];
+ }
+ else if (output["UnrecognizedResourceTypes"] !== undefined &&
+ output["UnrecognizedResourceTypes"]["member"] !== undefined) {
+ contents.UnrecognizedResourceTypes = de_ResourceTypes((0, smithy_client_1.getArrayIfSingleItem)(output["UnrecognizedResourceTypes"]["member"]), context);
+ }
+ return contents;
+};
+const deserializeMetadata = (output) => ({
+ httpStatusCode: output.statusCode,
+ requestId: output.headers["x-amzn-requestid"] ?? output.headers["x-amzn-request-id"] ?? output.headers["x-amz-request-id"],
+ extendedRequestId: output.headers["x-amz-id-2"],
+ cfId: output.headers["x-amz-cf-id"],
+});
+const collectBodyString = (streamBody, context) => (0, smithy_client_1.collectBody)(streamBody, context).then((body) => context.utf8Encoder(body));
+const throwDefaultError = (0, smithy_client_1.withBaseException)(CloudFormationServiceException_1.CloudFormationServiceException);
+const buildHttpRpcRequest = async (context, headers, path, resolvedHostname, body) => {
+ const { hostname, protocol = "https", port, path: basePath } = await context.endpoint();
+ const contents = {
+ protocol,
+ hostname,
+ port,
+ method: "POST",
+ path: basePath.endsWith("/") ? basePath.slice(0, -1) + path : basePath + path,
+ headers,
+ };
+ if (resolvedHostname !== undefined) {
+ contents.hostname = resolvedHostname;
+ }
+ if (body !== undefined) {
+ contents.body = body;
+ }
+ return new protocol_http_1.HttpRequest(contents);
+};
+const SHARED_HEADERS = {
+ "content-type": "application/x-www-form-urlencoded",
+};
+const parseBody = (streamBody, context) => collectBodyString(streamBody, context).then((encoded) => {
+ if (encoded.length) {
+ const parser = new fast_xml_parser_1.XMLParser({
+ attributeNamePrefix: "",
+ htmlEntities: true,
+ ignoreAttributes: false,
+ ignoreDeclaration: true,
+ parseTagValue: false,
+ trimValues: false,
+ tagValueProcessor: (_, val) => (val.trim() === "" && val.includes("\n") ? "" : undefined),
+ });
+ parser.addEntity("#xD", "\r");
+ parser.addEntity("#10", "\n");
+ const parsedObj = parser.parse(encoded);
+ const textNodeName = "#text";
+ const key = Object.keys(parsedObj)[0];
+ const parsedObjToReturn = parsedObj[key];
+ if (parsedObjToReturn[textNodeName]) {
+ parsedObjToReturn[key] = parsedObjToReturn[textNodeName];
+ delete parsedObjToReturn[textNodeName];
+ }
+ return (0, smithy_client_1.getValueFromTextNode)(parsedObjToReturn);
+ }
+ return {};
+});
+const parseErrorBody = async (errorBody, context) => {
+ const value = await parseBody(errorBody, context);
+ if (value.Error) {
+ value.Error.message = value.Error.message ?? value.Error.Message;
+ }
+ return value;
+};
+const buildFormUrlencodedString = (formEntries) => Object.entries(formEntries)
+ .map(([key, value]) => (0, smithy_client_1.extendedEncodeURIComponent)(key) + "=" + (0, smithy_client_1.extendedEncodeURIComponent)(value))
+ .join("&");
+const loadQueryErrorCode = (output, data) => {
+ if (data.Error?.Code !== undefined) {
+ return data.Error.Code;
+ }
+ if (output.statusCode == 404) {
+ return "NotFound";
+ }
+};
+
+
+/***/ }),
+
+/***/ 82643:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.getRuntimeConfig = void 0;
+const tslib_1 = __nccwpck_require__(4351);
+const package_json_1 = tslib_1.__importDefault(__nccwpck_require__(43713));
+const client_sts_1 = __nccwpck_require__(52209);
+const core_1 = __nccwpck_require__(59963);
+const credential_provider_node_1 = __nccwpck_require__(75531);
+const util_user_agent_node_1 = __nccwpck_require__(98095);
+const config_resolver_1 = __nccwpck_require__(53098);
+const hash_node_1 = __nccwpck_require__(3081);
+const middleware_retry_1 = __nccwpck_require__(96039);
+const node_config_provider_1 = __nccwpck_require__(33461);
+const node_http_handler_1 = __nccwpck_require__(20258);
+const util_body_length_node_1 = __nccwpck_require__(68075);
+const util_retry_1 = __nccwpck_require__(84902);
+const runtimeConfig_shared_1 = __nccwpck_require__(37328);
+const smithy_client_1 = __nccwpck_require__(63570);
+const util_defaults_mode_node_1 = __nccwpck_require__(72429);
+const smithy_client_2 = __nccwpck_require__(63570);
+const getRuntimeConfig = (config) => {
+ (0, smithy_client_2.emitWarningIfUnsupportedVersion)(process.version);
+ const defaultsMode = (0, util_defaults_mode_node_1.resolveDefaultsModeConfig)(config);
+ const defaultConfigProvider = () => defaultsMode().then(smithy_client_1.loadConfigsForDefaultMode);
+ const clientSharedValues = (0, runtimeConfig_shared_1.getRuntimeConfig)(config);
+ (0, core_1.emitWarningIfUnsupportedVersion)(process.version);
+ return {
+ ...clientSharedValues,
+ ...config,
+ runtime: "node",
+ defaultsMode,
+ bodyLengthChecker: config?.bodyLengthChecker ?? util_body_length_node_1.calculateBodyLength,
+ credentialDefaultProvider: config?.credentialDefaultProvider ?? (0, client_sts_1.decorateDefaultCredentialProvider)(credential_provider_node_1.defaultProvider),
+ defaultUserAgentProvider: config?.defaultUserAgentProvider ??
+ (0, util_user_agent_node_1.defaultUserAgent)({ serviceId: clientSharedValues.serviceId, clientVersion: package_json_1.default.version }),
+ maxAttempts: config?.maxAttempts ?? (0, node_config_provider_1.loadConfig)(middleware_retry_1.NODE_MAX_ATTEMPT_CONFIG_OPTIONS),
+ region: config?.region ?? (0, node_config_provider_1.loadConfig)(config_resolver_1.NODE_REGION_CONFIG_OPTIONS, config_resolver_1.NODE_REGION_CONFIG_FILE_OPTIONS),
+ requestHandler: config?.requestHandler ?? new node_http_handler_1.NodeHttpHandler(defaultConfigProvider),
+ retryMode: config?.retryMode ??
+ (0, node_config_provider_1.loadConfig)({
+ ...middleware_retry_1.NODE_RETRY_MODE_CONFIG_OPTIONS,
+ default: async () => (await defaultConfigProvider()).retryMode || util_retry_1.DEFAULT_RETRY_MODE,
+ }),
+ sha256: config?.sha256 ?? hash_node_1.Hash.bind(null, "sha256"),
+ streamCollector: config?.streamCollector ?? node_http_handler_1.streamCollector,
+ useDualstackEndpoint: config?.useDualstackEndpoint ?? (0, node_config_provider_1.loadConfig)(config_resolver_1.NODE_USE_DUALSTACK_ENDPOINT_CONFIG_OPTIONS),
+ useFipsEndpoint: config?.useFipsEndpoint ?? (0, node_config_provider_1.loadConfig)(config_resolver_1.NODE_USE_FIPS_ENDPOINT_CONFIG_OPTIONS),
+ };
+};
+exports.getRuntimeConfig = getRuntimeConfig;
+
+
+/***/ }),
+
+/***/ 37328:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.getRuntimeConfig = void 0;
+const smithy_client_1 = __nccwpck_require__(63570);
+const url_parser_1 = __nccwpck_require__(14681);
+const util_base64_1 = __nccwpck_require__(75600);
+const util_utf8_1 = __nccwpck_require__(41895);
+const endpointResolver_1 = __nccwpck_require__(5640);
+const getRuntimeConfig = (config) => {
+ return {
+ apiVersion: "2010-05-15",
+ base64Decoder: config?.base64Decoder ?? util_base64_1.fromBase64,
+ base64Encoder: config?.base64Encoder ?? util_base64_1.toBase64,
+ disableHostPrefix: config?.disableHostPrefix ?? false,
+ endpointProvider: config?.endpointProvider ?? endpointResolver_1.defaultEndpointResolver,
+ extensions: config?.extensions ?? [],
+ logger: config?.logger ?? new smithy_client_1.NoOpLogger(),
+ serviceId: config?.serviceId ?? "CloudFormation",
+ urlParser: config?.urlParser ?? url_parser_1.parseUrl,
+ utf8Decoder: config?.utf8Decoder ?? util_utf8_1.fromUtf8,
+ utf8Encoder: config?.utf8Encoder ?? util_utf8_1.toUtf8,
+ };
+};
+exports.getRuntimeConfig = getRuntimeConfig;
+
+
+/***/ }),
+
+/***/ 25898:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.resolveRuntimeExtensions = void 0;
+const region_config_resolver_1 = __nccwpck_require__(18156);
+const protocol_http_1 = __nccwpck_require__(64418);
+const smithy_client_1 = __nccwpck_require__(63570);
+const asPartial = (t) => t;
+const resolveRuntimeExtensions = (runtimeConfig, extensions) => {
+ const extensionConfiguration = {
+ ...asPartial((0, region_config_resolver_1.getAwsRegionExtensionConfiguration)(runtimeConfig)),
+ ...asPartial((0, smithy_client_1.getDefaultExtensionConfiguration)(runtimeConfig)),
+ ...asPartial((0, protocol_http_1.getHttpHandlerExtensionConfiguration)(runtimeConfig)),
+ };
+ extensions.forEach((extension) => extension.configure(extensionConfiguration));
+ return {
+ ...runtimeConfig,
+ ...(0, region_config_resolver_1.resolveAwsRegionExtensionConfiguration)(extensionConfiguration),
+ ...(0, smithy_client_1.resolveDefaultRuntimeConfig)(extensionConfiguration),
+ ...(0, protocol_http_1.resolveHttpHandlerRuntimeConfig)(extensionConfiguration),
+ };
+};
+exports.resolveRuntimeExtensions = resolveRuntimeExtensions;
+
+
+/***/ }),
+
+/***/ 23978:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+const tslib_1 = __nccwpck_require__(4351);
+tslib_1.__exportStar(__nccwpck_require__(82879), exports);
+tslib_1.__exportStar(__nccwpck_require__(67310), exports);
+tslib_1.__exportStar(__nccwpck_require__(89570), exports);
+tslib_1.__exportStar(__nccwpck_require__(20641), exports);
+tslib_1.__exportStar(__nccwpck_require__(62477), exports);
+tslib_1.__exportStar(__nccwpck_require__(21225), exports);
+tslib_1.__exportStar(__nccwpck_require__(44786), exports);
+tslib_1.__exportStar(__nccwpck_require__(97707), exports);
+
+
+/***/ }),
+
+/***/ 82879:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.waitUntilChangeSetCreateComplete = exports.waitForChangeSetCreateComplete = void 0;
+const util_waiter_1 = __nccwpck_require__(78011);
+const DescribeChangeSetCommand_1 = __nccwpck_require__(94895);
+const checkState = async (client, input) => {
+ let reason;
+ try {
+ const result = await client.send(new DescribeChangeSetCommand_1.DescribeChangeSetCommand(input));
+ reason = result;
+ try {
+ const returnComparator = () => {
+ return result.Status;
+ };
+ if (returnComparator() === "CREATE_COMPLETE") {
+ return { state: util_waiter_1.WaiterState.SUCCESS, reason };
+ }
+ }
+ catch (e) { }
+ try {
+ const returnComparator = () => {
+ return result.Status;
+ };
+ if (returnComparator() === "FAILED") {
+ return { state: util_waiter_1.WaiterState.FAILURE, reason };
+ }
+ }
+ catch (e) { }
+ }
+ catch (exception) {
+ reason = exception;
+ if (exception.name && exception.name == "ValidationError") {
+ return { state: util_waiter_1.WaiterState.FAILURE, reason };
+ }
+ }
+ return { state: util_waiter_1.WaiterState.RETRY, reason };
+};
+const waitForChangeSetCreateComplete = async (params, input) => {
+ const serviceDefaults = { minDelay: 30, maxDelay: 120 };
+ return (0, util_waiter_1.createWaiter)({ ...serviceDefaults, ...params }, input, checkState);
+};
+exports.waitForChangeSetCreateComplete = waitForChangeSetCreateComplete;
+const waitUntilChangeSetCreateComplete = async (params, input) => {
+ const serviceDefaults = { minDelay: 30, maxDelay: 120 };
+ const result = await (0, util_waiter_1.createWaiter)({ ...serviceDefaults, ...params }, input, checkState);
+ return (0, util_waiter_1.checkExceptions)(result);
+};
+exports.waitUntilChangeSetCreateComplete = waitUntilChangeSetCreateComplete;
+
+
+/***/ }),
+
+/***/ 67310:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.waitUntilStackCreateComplete = exports.waitForStackCreateComplete = void 0;
+const util_waiter_1 = __nccwpck_require__(78011);
+const DescribeStacksCommand_1 = __nccwpck_require__(79769);
+const checkState = async (client, input) => {
+ let reason;
+ try {
+ const result = await client.send(new DescribeStacksCommand_1.DescribeStacksCommand(input));
+ reason = result;
+ try {
+ const returnComparator = () => {
+ const flat_1 = [].concat(...result.Stacks);
+ const projection_3 = flat_1.map((element_2) => {
+ return element_2.StackStatus;
+ });
+ return projection_3;
+ };
+ let allStringEq_5 = returnComparator().length > 0;
+ for (const element_4 of returnComparator()) {
+ allStringEq_5 = allStringEq_5 && element_4 == "CREATE_COMPLETE";
+ }
+ if (allStringEq_5) {
+ return { state: util_waiter_1.WaiterState.SUCCESS, reason };
+ }
+ }
+ catch (e) { }
+ try {
+ const returnComparator = () => {
+ const flat_1 = [].concat(...result.Stacks);
+ const projection_3 = flat_1.map((element_2) => {
+ return element_2.StackStatus;
+ });
+ return projection_3;
+ };
+ for (const anyStringEq_4 of returnComparator()) {
+ if (anyStringEq_4 == "CREATE_FAILED") {
+ return { state: util_waiter_1.WaiterState.FAILURE, reason };
+ }
+ }
+ }
+ catch (e) { }
+ try {
+ const returnComparator = () => {
+ const flat_1 = [].concat(...result.Stacks);
+ const projection_3 = flat_1.map((element_2) => {
+ return element_2.StackStatus;
+ });
+ return projection_3;
+ };
+ for (const anyStringEq_4 of returnComparator()) {
+ if (anyStringEq_4 == "DELETE_COMPLETE") {
+ return { state: util_waiter_1.WaiterState.FAILURE, reason };
+ }
+ }
+ }
+ catch (e) { }
+ try {
+ const returnComparator = () => {
+ const flat_1 = [].concat(...result.Stacks);
+ const projection_3 = flat_1.map((element_2) => {
+ return element_2.StackStatus;
+ });
+ return projection_3;
+ };
+ for (const anyStringEq_4 of returnComparator()) {
+ if (anyStringEq_4 == "DELETE_FAILED") {
+ return { state: util_waiter_1.WaiterState.FAILURE, reason };
+ }
+ }
+ }
+ catch (e) { }
+ try {
+ const returnComparator = () => {
+ const flat_1 = [].concat(...result.Stacks);
+ const projection_3 = flat_1.map((element_2) => {
+ return element_2.StackStatus;
+ });
+ return projection_3;
+ };
+ for (const anyStringEq_4 of returnComparator()) {
+ if (anyStringEq_4 == "ROLLBACK_FAILED") {
+ return { state: util_waiter_1.WaiterState.FAILURE, reason };
+ }
+ }
+ }
+ catch (e) { }
+ try {
+ const returnComparator = () => {
+ const flat_1 = [].concat(...result.Stacks);
+ const projection_3 = flat_1.map((element_2) => {
+ return element_2.StackStatus;
+ });
+ return projection_3;
+ };
+ for (const anyStringEq_4 of returnComparator()) {
+ if (anyStringEq_4 == "ROLLBACK_COMPLETE") {
+ return { state: util_waiter_1.WaiterState.FAILURE, reason };
+ }
+ }
+ }
+ catch (e) { }
+ }
+ catch (exception) {
+ reason = exception;
+ if (exception.name && exception.name == "ValidationError") {
+ return { state: util_waiter_1.WaiterState.FAILURE, reason };
+ }
+ }
+ return { state: util_waiter_1.WaiterState.RETRY, reason };
+};
+const waitForStackCreateComplete = async (params, input) => {
+ const serviceDefaults = { minDelay: 30, maxDelay: 120 };
+ return (0, util_waiter_1.createWaiter)({ ...serviceDefaults, ...params }, input, checkState);
+};
+exports.waitForStackCreateComplete = waitForStackCreateComplete;
+const waitUntilStackCreateComplete = async (params, input) => {
+ const serviceDefaults = { minDelay: 30, maxDelay: 120 };
+ const result = await (0, util_waiter_1.createWaiter)({ ...serviceDefaults, ...params }, input, checkState);
+ return (0, util_waiter_1.checkExceptions)(result);
+};
+exports.waitUntilStackCreateComplete = waitUntilStackCreateComplete;
+
+
+/***/ }),
+
+/***/ 89570:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.waitUntilStackDeleteComplete = exports.waitForStackDeleteComplete = void 0;
+const util_waiter_1 = __nccwpck_require__(78011);
+const DescribeStacksCommand_1 = __nccwpck_require__(79769);
+const checkState = async (client, input) => {
+ let reason;
+ try {
+ const result = await client.send(new DescribeStacksCommand_1.DescribeStacksCommand(input));
+ reason = result;
+ try {
+ const returnComparator = () => {
+ const flat_1 = [].concat(...result.Stacks);
+ const projection_3 = flat_1.map((element_2) => {
+ return element_2.StackStatus;
+ });
+ return projection_3;
+ };
+ let allStringEq_5 = returnComparator().length > 0;
+ for (const element_4 of returnComparator()) {
+ allStringEq_5 = allStringEq_5 && element_4 == "DELETE_COMPLETE";
+ }
+ if (allStringEq_5) {
+ return { state: util_waiter_1.WaiterState.SUCCESS, reason };
+ }
+ }
+ catch (e) { }
+ try {
+ const returnComparator = () => {
+ const flat_1 = [].concat(...result.Stacks);
+ const projection_3 = flat_1.map((element_2) => {
+ return element_2.StackStatus;
+ });
+ return projection_3;
+ };
+ for (const anyStringEq_4 of returnComparator()) {
+ if (anyStringEq_4 == "DELETE_FAILED") {
+ return { state: util_waiter_1.WaiterState.FAILURE, reason };
+ }
+ }
+ }
+ catch (e) { }
+ try {
+ const returnComparator = () => {
+ const flat_1 = [].concat(...result.Stacks);
+ const projection_3 = flat_1.map((element_2) => {
+ return element_2.StackStatus;
+ });
+ return projection_3;
+ };
+ for (const anyStringEq_4 of returnComparator()) {
+ if (anyStringEq_4 == "CREATE_FAILED") {
+ return { state: util_waiter_1.WaiterState.FAILURE, reason };
+ }
+ }
+ }
+ catch (e) { }
+ try {
+ const returnComparator = () => {
+ const flat_1 = [].concat(...result.Stacks);
+ const projection_3 = flat_1.map((element_2) => {
+ return element_2.StackStatus;
+ });
+ return projection_3;
+ };
+ for (const anyStringEq_4 of returnComparator()) {
+ if (anyStringEq_4 == "ROLLBACK_FAILED") {
+ return { state: util_waiter_1.WaiterState.FAILURE, reason };
+ }
+ }
+ }
+ catch (e) { }
+ try {
+ const returnComparator = () => {
+ const flat_1 = [].concat(...result.Stacks);
+ const projection_3 = flat_1.map((element_2) => {
+ return element_2.StackStatus;
+ });
+ return projection_3;
+ };
+ for (const anyStringEq_4 of returnComparator()) {
+ if (anyStringEq_4 == "UPDATE_ROLLBACK_IN_PROGRESS") {
+ return { state: util_waiter_1.WaiterState.FAILURE, reason };
+ }
+ }
+ }
+ catch (e) { }
+ try {
+ const returnComparator = () => {
+ const flat_1 = [].concat(...result.Stacks);
+ const projection_3 = flat_1.map((element_2) => {
+ return element_2.StackStatus;
+ });
+ return projection_3;
+ };
+ for (const anyStringEq_4 of returnComparator()) {
+ if (anyStringEq_4 == "UPDATE_ROLLBACK_FAILED") {
+ return { state: util_waiter_1.WaiterState.FAILURE, reason };
+ }
+ }
+ }
+ catch (e) { }
+ try {
+ const returnComparator = () => {
+ const flat_1 = [].concat(...result.Stacks);
+ const projection_3 = flat_1.map((element_2) => {
+ return element_2.StackStatus;
+ });
+ return projection_3;
+ };
+ for (const anyStringEq_4 of returnComparator()) {
+ if (anyStringEq_4 == "UPDATE_ROLLBACK_COMPLETE") {
+ return { state: util_waiter_1.WaiterState.FAILURE, reason };
+ }
+ }
+ }
+ catch (e) { }
+ try {
+ const returnComparator = () => {
+ const flat_1 = [].concat(...result.Stacks);
+ const projection_3 = flat_1.map((element_2) => {
+ return element_2.StackStatus;
+ });
+ return projection_3;
+ };
+ for (const anyStringEq_4 of returnComparator()) {
+ if (anyStringEq_4 == "UPDATE_COMPLETE") {
+ return { state: util_waiter_1.WaiterState.FAILURE, reason };
+ }
+ }
+ }
+ catch (e) { }
+ }
+ catch (exception) {
+ reason = exception;
+ if (exception.name && exception.name == "ValidationError") {
+ return { state: util_waiter_1.WaiterState.SUCCESS, reason };
+ }
+ }
+ return { state: util_waiter_1.WaiterState.RETRY, reason };
+};
+const waitForStackDeleteComplete = async (params, input) => {
+ const serviceDefaults = { minDelay: 30, maxDelay: 120 };
+ return (0, util_waiter_1.createWaiter)({ ...serviceDefaults, ...params }, input, checkState);
+};
+exports.waitForStackDeleteComplete = waitForStackDeleteComplete;
+const waitUntilStackDeleteComplete = async (params, input) => {
+ const serviceDefaults = { minDelay: 30, maxDelay: 120 };
+ const result = await (0, util_waiter_1.createWaiter)({ ...serviceDefaults, ...params }, input, checkState);
+ return (0, util_waiter_1.checkExceptions)(result);
+};
+exports.waitUntilStackDeleteComplete = waitUntilStackDeleteComplete;
+
+
+/***/ }),
+
+/***/ 20641:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.waitUntilStackExists = exports.waitForStackExists = void 0;
+const util_waiter_1 = __nccwpck_require__(78011);
+const DescribeStacksCommand_1 = __nccwpck_require__(79769);
+const checkState = async (client, input) => {
+ let reason;
+ try {
+ const result = await client.send(new DescribeStacksCommand_1.DescribeStacksCommand(input));
+ reason = result;
+ return { state: util_waiter_1.WaiterState.SUCCESS, reason };
+ }
+ catch (exception) {
+ reason = exception;
+ if (exception.name && exception.name == "ValidationError") {
+ return { state: util_waiter_1.WaiterState.RETRY, reason };
+ }
+ }
+ return { state: util_waiter_1.WaiterState.RETRY, reason };
+};
+const waitForStackExists = async (params, input) => {
+ const serviceDefaults = { minDelay: 5, maxDelay: 120 };
+ return (0, util_waiter_1.createWaiter)({ ...serviceDefaults, ...params }, input, checkState);
+};
+exports.waitForStackExists = waitForStackExists;
+const waitUntilStackExists = async (params, input) => {
+ const serviceDefaults = { minDelay: 5, maxDelay: 120 };
+ const result = await (0, util_waiter_1.createWaiter)({ ...serviceDefaults, ...params }, input, checkState);
+ return (0, util_waiter_1.checkExceptions)(result);
+};
+exports.waitUntilStackExists = waitUntilStackExists;
+
+
+/***/ }),
+
+/***/ 62477:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.waitUntilStackImportComplete = exports.waitForStackImportComplete = void 0;
+const util_waiter_1 = __nccwpck_require__(78011);
+const DescribeStacksCommand_1 = __nccwpck_require__(79769);
+const checkState = async (client, input) => {
+ let reason;
+ try {
+ const result = await client.send(new DescribeStacksCommand_1.DescribeStacksCommand(input));
+ reason = result;
+ try {
+ const returnComparator = () => {
+ const flat_1 = [].concat(...result.Stacks);
+ const projection_3 = flat_1.map((element_2) => {
+ return element_2.StackStatus;
+ });
+ return projection_3;
+ };
+ let allStringEq_5 = returnComparator().length > 0;
+ for (const element_4 of returnComparator()) {
+ allStringEq_5 = allStringEq_5 && element_4 == "IMPORT_COMPLETE";
+ }
+ if (allStringEq_5) {
+ return { state: util_waiter_1.WaiterState.SUCCESS, reason };
+ }
+ }
+ catch (e) { }
+ try {
+ const returnComparator = () => {
+ const flat_1 = [].concat(...result.Stacks);
+ const projection_3 = flat_1.map((element_2) => {
+ return element_2.StackStatus;
+ });
+ return projection_3;
+ };
+ for (const anyStringEq_4 of returnComparator()) {
+ if (anyStringEq_4 == "ROLLBACK_COMPLETE") {
+ return { state: util_waiter_1.WaiterState.FAILURE, reason };
+ }
+ }
+ }
+ catch (e) { }
+ try {
+ const returnComparator = () => {
+ const flat_1 = [].concat(...result.Stacks);
+ const projection_3 = flat_1.map((element_2) => {
+ return element_2.StackStatus;
+ });
+ return projection_3;
+ };
+ for (const anyStringEq_4 of returnComparator()) {
+ if (anyStringEq_4 == "ROLLBACK_FAILED") {
+ return { state: util_waiter_1.WaiterState.FAILURE, reason };
+ }
+ }
+ }
+ catch (e) { }
+ try {
+ const returnComparator = () => {
+ const flat_1 = [].concat(...result.Stacks);
+ const projection_3 = flat_1.map((element_2) => {
+ return element_2.StackStatus;
+ });
+ return projection_3;
+ };
+ for (const anyStringEq_4 of returnComparator()) {
+ if (anyStringEq_4 == "IMPORT_ROLLBACK_IN_PROGRESS") {
+ return { state: util_waiter_1.WaiterState.FAILURE, reason };
+ }
+ }
+ }
+ catch (e) { }
+ try {
+ const returnComparator = () => {
+ const flat_1 = [].concat(...result.Stacks);
+ const projection_3 = flat_1.map((element_2) => {
+ return element_2.StackStatus;
+ });
+ return projection_3;
+ };
+ for (const anyStringEq_4 of returnComparator()) {
+ if (anyStringEq_4 == "IMPORT_ROLLBACK_FAILED") {
+ return { state: util_waiter_1.WaiterState.FAILURE, reason };
+ }
+ }
+ }
+ catch (e) { }
+ try {
+ const returnComparator = () => {
+ const flat_1 = [].concat(...result.Stacks);
+ const projection_3 = flat_1.map((element_2) => {
+ return element_2.StackStatus;
+ });
+ return projection_3;
+ };
+ for (const anyStringEq_4 of returnComparator()) {
+ if (anyStringEq_4 == "IMPORT_ROLLBACK_COMPLETE") {
+ return { state: util_waiter_1.WaiterState.FAILURE, reason };
+ }
+ }
+ }
+ catch (e) { }
+ }
+ catch (exception) {
+ reason = exception;
+ if (exception.name && exception.name == "ValidationError") {
+ return { state: util_waiter_1.WaiterState.FAILURE, reason };
+ }
+ }
+ return { state: util_waiter_1.WaiterState.RETRY, reason };
+};
+const waitForStackImportComplete = async (params, input) => {
+ const serviceDefaults = { minDelay: 30, maxDelay: 120 };
+ return (0, util_waiter_1.createWaiter)({ ...serviceDefaults, ...params }, input, checkState);
+};
+exports.waitForStackImportComplete = waitForStackImportComplete;
+const waitUntilStackImportComplete = async (params, input) => {
+ const serviceDefaults = { minDelay: 30, maxDelay: 120 };
+ const result = await (0, util_waiter_1.createWaiter)({ ...serviceDefaults, ...params }, input, checkState);
+ return (0, util_waiter_1.checkExceptions)(result);
+};
+exports.waitUntilStackImportComplete = waitUntilStackImportComplete;
+
+
+/***/ }),
+
+/***/ 21225:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.waitUntilStackRollbackComplete = exports.waitForStackRollbackComplete = void 0;
+const util_waiter_1 = __nccwpck_require__(78011);
+const DescribeStacksCommand_1 = __nccwpck_require__(79769);
+const checkState = async (client, input) => {
+ let reason;
+ try {
+ const result = await client.send(new DescribeStacksCommand_1.DescribeStacksCommand(input));
+ reason = result;
+ try {
+ const returnComparator = () => {
+ const flat_1 = [].concat(...result.Stacks);
+ const projection_3 = flat_1.map((element_2) => {
+ return element_2.StackStatus;
+ });
+ return projection_3;
+ };
+ let allStringEq_5 = returnComparator().length > 0;
+ for (const element_4 of returnComparator()) {
+ allStringEq_5 = allStringEq_5 && element_4 == "UPDATE_ROLLBACK_COMPLETE";
+ }
+ if (allStringEq_5) {
+ return { state: util_waiter_1.WaiterState.SUCCESS, reason };
+ }
+ }
+ catch (e) { }
+ try {
+ const returnComparator = () => {
+ const flat_1 = [].concat(...result.Stacks);
+ const projection_3 = flat_1.map((element_2) => {
+ return element_2.StackStatus;
+ });
+ return projection_3;
+ };
+ for (const anyStringEq_4 of returnComparator()) {
+ if (anyStringEq_4 == "UPDATE_FAILED") {
+ return { state: util_waiter_1.WaiterState.FAILURE, reason };
+ }
+ }
+ }
+ catch (e) { }
+ try {
+ const returnComparator = () => {
+ const flat_1 = [].concat(...result.Stacks);
+ const projection_3 = flat_1.map((element_2) => {
+ return element_2.StackStatus;
+ });
+ return projection_3;
+ };
+ for (const anyStringEq_4 of returnComparator()) {
+ if (anyStringEq_4 == "UPDATE_ROLLBACK_FAILED") {
+ return { state: util_waiter_1.WaiterState.FAILURE, reason };
+ }
+ }
+ }
+ catch (e) { }
+ try {
+ const returnComparator = () => {
+ const flat_1 = [].concat(...result.Stacks);
+ const projection_3 = flat_1.map((element_2) => {
+ return element_2.StackStatus;
+ });
+ return projection_3;
+ };
+ for (const anyStringEq_4 of returnComparator()) {
+ if (anyStringEq_4 == "DELETE_FAILED") {
+ return { state: util_waiter_1.WaiterState.FAILURE, reason };
+ }
+ }
+ }
+ catch (e) { }
+ }
+ catch (exception) {
+ reason = exception;
+ if (exception.name && exception.name == "ValidationError") {
+ return { state: util_waiter_1.WaiterState.FAILURE, reason };
+ }
+ }
+ return { state: util_waiter_1.WaiterState.RETRY, reason };
+};
+const waitForStackRollbackComplete = async (params, input) => {
+ const serviceDefaults = { minDelay: 30, maxDelay: 120 };
+ return (0, util_waiter_1.createWaiter)({ ...serviceDefaults, ...params }, input, checkState);
+};
+exports.waitForStackRollbackComplete = waitForStackRollbackComplete;
+const waitUntilStackRollbackComplete = async (params, input) => {
+ const serviceDefaults = { minDelay: 30, maxDelay: 120 };
+ const result = await (0, util_waiter_1.createWaiter)({ ...serviceDefaults, ...params }, input, checkState);
+ return (0, util_waiter_1.checkExceptions)(result);
+};
+exports.waitUntilStackRollbackComplete = waitUntilStackRollbackComplete;
+
+
+/***/ }),
+
+/***/ 44786:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.waitUntilStackUpdateComplete = exports.waitForStackUpdateComplete = void 0;
+const util_waiter_1 = __nccwpck_require__(78011);
+const DescribeStacksCommand_1 = __nccwpck_require__(79769);
+const checkState = async (client, input) => {
+ let reason;
+ try {
+ const result = await client.send(new DescribeStacksCommand_1.DescribeStacksCommand(input));
+ reason = result;
+ try {
+ const returnComparator = () => {
+ const flat_1 = [].concat(...result.Stacks);
+ const projection_3 = flat_1.map((element_2) => {
+ return element_2.StackStatus;
+ });
+ return projection_3;
+ };
+ let allStringEq_5 = returnComparator().length > 0;
+ for (const element_4 of returnComparator()) {
+ allStringEq_5 = allStringEq_5 && element_4 == "UPDATE_COMPLETE";
+ }
+ if (allStringEq_5) {
+ return { state: util_waiter_1.WaiterState.SUCCESS, reason };
+ }
+ }
+ catch (e) { }
+ try {
+ const returnComparator = () => {
+ const flat_1 = [].concat(...result.Stacks);
+ const projection_3 = flat_1.map((element_2) => {
+ return element_2.StackStatus;
+ });
+ return projection_3;
+ };
+ for (const anyStringEq_4 of returnComparator()) {
+ if (anyStringEq_4 == "UPDATE_FAILED") {
+ return { state: util_waiter_1.WaiterState.FAILURE, reason };
+ }
+ }
+ }
+ catch (e) { }
+ try {
+ const returnComparator = () => {
+ const flat_1 = [].concat(...result.Stacks);
+ const projection_3 = flat_1.map((element_2) => {
+ return element_2.StackStatus;
+ });
+ return projection_3;
+ };
+ for (const anyStringEq_4 of returnComparator()) {
+ if (anyStringEq_4 == "UPDATE_ROLLBACK_FAILED") {
+ return { state: util_waiter_1.WaiterState.FAILURE, reason };
+ }
+ }
+ }
+ catch (e) { }
+ try {
+ const returnComparator = () => {
+ const flat_1 = [].concat(...result.Stacks);
+ const projection_3 = flat_1.map((element_2) => {
+ return element_2.StackStatus;
+ });
+ return projection_3;
+ };
+ for (const anyStringEq_4 of returnComparator()) {
+ if (anyStringEq_4 == "UPDATE_ROLLBACK_COMPLETE") {
+ return { state: util_waiter_1.WaiterState.FAILURE, reason };
+ }
+ }
+ }
+ catch (e) { }
+ }
+ catch (exception) {
+ reason = exception;
+ if (exception.name && exception.name == "ValidationError") {
+ return { state: util_waiter_1.WaiterState.FAILURE, reason };
+ }
+ }
+ return { state: util_waiter_1.WaiterState.RETRY, reason };
+};
+const waitForStackUpdateComplete = async (params, input) => {
+ const serviceDefaults = { minDelay: 30, maxDelay: 120 };
+ return (0, util_waiter_1.createWaiter)({ ...serviceDefaults, ...params }, input, checkState);
+};
+exports.waitForStackUpdateComplete = waitForStackUpdateComplete;
+const waitUntilStackUpdateComplete = async (params, input) => {
+ const serviceDefaults = { minDelay: 30, maxDelay: 120 };
+ const result = await (0, util_waiter_1.createWaiter)({ ...serviceDefaults, ...params }, input, checkState);
+ return (0, util_waiter_1.checkExceptions)(result);
+};
+exports.waitUntilStackUpdateComplete = waitUntilStackUpdateComplete;
+
+
+/***/ }),
+
+/***/ 97707:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.waitUntilTypeRegistrationComplete = exports.waitForTypeRegistrationComplete = void 0;
+const util_waiter_1 = __nccwpck_require__(78011);
+const DescribeTypeRegistrationCommand_1 = __nccwpck_require__(80130);
+const checkState = async (client, input) => {
+ let reason;
+ try {
+ const result = await client.send(new DescribeTypeRegistrationCommand_1.DescribeTypeRegistrationCommand(input));
+ reason = result;
+ try {
+ const returnComparator = () => {
+ return result.ProgressStatus;
+ };
+ if (returnComparator() === "COMPLETE") {
+ return { state: util_waiter_1.WaiterState.SUCCESS, reason };
+ }
+ }
+ catch (e) { }
+ try {
+ const returnComparator = () => {
+ return result.ProgressStatus;
+ };
+ if (returnComparator() === "FAILED") {
+ return { state: util_waiter_1.WaiterState.FAILURE, reason };
+ }
+ }
+ catch (e) { }
+ }
+ catch (exception) {
+ reason = exception;
+ }
+ return { state: util_waiter_1.WaiterState.RETRY, reason };
+};
+const waitForTypeRegistrationComplete = async (params, input) => {
+ const serviceDefaults = { minDelay: 30, maxDelay: 120 };
+ return (0, util_waiter_1.createWaiter)({ ...serviceDefaults, ...params }, input, checkState);
+};
+exports.waitForTypeRegistrationComplete = waitForTypeRegistrationComplete;
+const waitUntilTypeRegistrationComplete = async (params, input) => {
+ const serviceDefaults = { minDelay: 30, maxDelay: 120 };
+ const result = await (0, util_waiter_1.createWaiter)({ ...serviceDefaults, ...params }, input, checkState);
+ return (0, util_waiter_1.checkExceptions)(result);
+};
+exports.waitUntilTypeRegistrationComplete = waitUntilTypeRegistrationComplete;
+
+
+/***/ }),
+
+/***/ 18427:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.CognitoIdentity = void 0;
+const smithy_client_1 = __nccwpck_require__(63570);
+const CognitoIdentityClient_1 = __nccwpck_require__(4864);
+const CreateIdentityPoolCommand_1 = __nccwpck_require__(31085);
+const DeleteIdentitiesCommand_1 = __nccwpck_require__(35483);
+const DeleteIdentityPoolCommand_1 = __nccwpck_require__(76149);
+const DescribeIdentityCommand_1 = __nccwpck_require__(49605);
+const DescribeIdentityPoolCommand_1 = __nccwpck_require__(89524);
+const GetCredentialsForIdentityCommand_1 = __nccwpck_require__(60681);
+const GetIdCommand_1 = __nccwpck_require__(73201);
+const GetIdentityPoolRolesCommand_1 = __nccwpck_require__(30874);
+const GetOpenIdTokenCommand_1 = __nccwpck_require__(41282);
+const GetOpenIdTokenForDeveloperIdentityCommand_1 = __nccwpck_require__(39946);
+const GetPrincipalTagAttributeMapCommand_1 = __nccwpck_require__(27419);
+const ListIdentitiesCommand_1 = __nccwpck_require__(59634);
+const ListIdentityPoolsCommand_1 = __nccwpck_require__(1530);
+const ListTagsForResourceCommand_1 = __nccwpck_require__(74716);
+const LookupDeveloperIdentityCommand_1 = __nccwpck_require__(58942);
+const MergeDeveloperIdentitiesCommand_1 = __nccwpck_require__(14253);
+const SetIdentityPoolRolesCommand_1 = __nccwpck_require__(30823);
+const SetPrincipalTagAttributeMapCommand_1 = __nccwpck_require__(76004);
+const TagResourceCommand_1 = __nccwpck_require__(96042);
+const UnlinkDeveloperIdentityCommand_1 = __nccwpck_require__(48284);
+const UnlinkIdentityCommand_1 = __nccwpck_require__(11710);
+const UntagResourceCommand_1 = __nccwpck_require__(70081);
+const UpdateIdentityPoolCommand_1 = __nccwpck_require__(99983);
+const commands = {
+ CreateIdentityPoolCommand: CreateIdentityPoolCommand_1.CreateIdentityPoolCommand,
+ DeleteIdentitiesCommand: DeleteIdentitiesCommand_1.DeleteIdentitiesCommand,
+ DeleteIdentityPoolCommand: DeleteIdentityPoolCommand_1.DeleteIdentityPoolCommand,
+ DescribeIdentityCommand: DescribeIdentityCommand_1.DescribeIdentityCommand,
+ DescribeIdentityPoolCommand: DescribeIdentityPoolCommand_1.DescribeIdentityPoolCommand,
+ GetCredentialsForIdentityCommand: GetCredentialsForIdentityCommand_1.GetCredentialsForIdentityCommand,
+ GetIdCommand: GetIdCommand_1.GetIdCommand,
+ GetIdentityPoolRolesCommand: GetIdentityPoolRolesCommand_1.GetIdentityPoolRolesCommand,
+ GetOpenIdTokenCommand: GetOpenIdTokenCommand_1.GetOpenIdTokenCommand,
+ GetOpenIdTokenForDeveloperIdentityCommand: GetOpenIdTokenForDeveloperIdentityCommand_1.GetOpenIdTokenForDeveloperIdentityCommand,
+ GetPrincipalTagAttributeMapCommand: GetPrincipalTagAttributeMapCommand_1.GetPrincipalTagAttributeMapCommand,
+ ListIdentitiesCommand: ListIdentitiesCommand_1.ListIdentitiesCommand,
+ ListIdentityPoolsCommand: ListIdentityPoolsCommand_1.ListIdentityPoolsCommand,
+ ListTagsForResourceCommand: ListTagsForResourceCommand_1.ListTagsForResourceCommand,
+ LookupDeveloperIdentityCommand: LookupDeveloperIdentityCommand_1.LookupDeveloperIdentityCommand,
+ MergeDeveloperIdentitiesCommand: MergeDeveloperIdentitiesCommand_1.MergeDeveloperIdentitiesCommand,
+ SetIdentityPoolRolesCommand: SetIdentityPoolRolesCommand_1.SetIdentityPoolRolesCommand,
+ SetPrincipalTagAttributeMapCommand: SetPrincipalTagAttributeMapCommand_1.SetPrincipalTagAttributeMapCommand,
+ TagResourceCommand: TagResourceCommand_1.TagResourceCommand,
+ UnlinkDeveloperIdentityCommand: UnlinkDeveloperIdentityCommand_1.UnlinkDeveloperIdentityCommand,
+ UnlinkIdentityCommand: UnlinkIdentityCommand_1.UnlinkIdentityCommand,
+ UntagResourceCommand: UntagResourceCommand_1.UntagResourceCommand,
+ UpdateIdentityPoolCommand: UpdateIdentityPoolCommand_1.UpdateIdentityPoolCommand,
+};
+class CognitoIdentity extends CognitoIdentityClient_1.CognitoIdentityClient {
+}
+exports.CognitoIdentity = CognitoIdentity;
+(0, smithy_client_1.createAggregatedClient)(commands, CognitoIdentity);
+
+
+/***/ }),
+
+/***/ 4864:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.CognitoIdentityClient = exports.__Client = void 0;
+const middleware_host_header_1 = __nccwpck_require__(22545);
+const middleware_logger_1 = __nccwpck_require__(20014);
+const middleware_recursion_detection_1 = __nccwpck_require__(85525);
+const middleware_signing_1 = __nccwpck_require__(14935);
+const middleware_user_agent_1 = __nccwpck_require__(64688);
+const config_resolver_1 = __nccwpck_require__(53098);
+const middleware_content_length_1 = __nccwpck_require__(82800);
+const middleware_endpoint_1 = __nccwpck_require__(82918);
+const middleware_retry_1 = __nccwpck_require__(96039);
+const smithy_client_1 = __nccwpck_require__(63570);
+Object.defineProperty(exports, "__Client", ({ enumerable: true, get: function () { return smithy_client_1.Client; } }));
+const EndpointParameters_1 = __nccwpck_require__(72987);
+const runtimeConfig_1 = __nccwpck_require__(26042);
+const runtimeExtensions_1 = __nccwpck_require__(48062);
+class CognitoIdentityClient extends smithy_client_1.Client {
+ constructor(...[configuration]) {
+ const _config_0 = (0, runtimeConfig_1.getRuntimeConfig)(configuration || {});
+ const _config_1 = (0, EndpointParameters_1.resolveClientEndpointParameters)(_config_0);
+ const _config_2 = (0, config_resolver_1.resolveRegionConfig)(_config_1);
+ const _config_3 = (0, middleware_endpoint_1.resolveEndpointConfig)(_config_2);
+ const _config_4 = (0, middleware_retry_1.resolveRetryConfig)(_config_3);
+ const _config_5 = (0, middleware_host_header_1.resolveHostHeaderConfig)(_config_4);
+ const _config_6 = (0, middleware_signing_1.resolveAwsAuthConfig)(_config_5);
+ const _config_7 = (0, middleware_user_agent_1.resolveUserAgentConfig)(_config_6);
+ const _config_8 = (0, runtimeExtensions_1.resolveRuntimeExtensions)(_config_7, configuration?.extensions || []);
+ super(_config_8);
+ this.config = _config_8;
+ this.middlewareStack.use((0, middleware_retry_1.getRetryPlugin)(this.config));
+ this.middlewareStack.use((0, middleware_content_length_1.getContentLengthPlugin)(this.config));
+ this.middlewareStack.use((0, middleware_host_header_1.getHostHeaderPlugin)(this.config));
+ this.middlewareStack.use((0, middleware_logger_1.getLoggerPlugin)(this.config));
+ this.middlewareStack.use((0, middleware_recursion_detection_1.getRecursionDetectionPlugin)(this.config));
+ this.middlewareStack.use((0, middleware_user_agent_1.getUserAgentPlugin)(this.config));
+ }
+ destroy() {
+ super.destroy();
+ }
+}
+exports.CognitoIdentityClient = CognitoIdentityClient;
+
+
+/***/ }),
+
+/***/ 31085:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.CreateIdentityPoolCommand = exports.$Command = void 0;
+const middleware_signing_1 = __nccwpck_require__(14935);
+const middleware_endpoint_1 = __nccwpck_require__(82918);
+const middleware_serde_1 = __nccwpck_require__(81238);
+const smithy_client_1 = __nccwpck_require__(63570);
+Object.defineProperty(exports, "$Command", ({ enumerable: true, get: function () { return smithy_client_1.Command; } }));
+const types_1 = __nccwpck_require__(55756);
+const Aws_json1_1_1 = __nccwpck_require__(85087);
+class CreateIdentityPoolCommand extends smithy_client_1.Command {
+ static getEndpointParameterInstructions() {
+ return {
+ UseFIPS: { type: "builtInParams", name: "useFipsEndpoint" },
+ Endpoint: { type: "builtInParams", name: "endpoint" },
+ Region: { type: "builtInParams", name: "region" },
+ UseDualStack: { type: "builtInParams", name: "useDualstackEndpoint" },
+ };
+ }
+ constructor(input) {
+ super();
+ this.input = input;
+ }
+ resolveMiddleware(clientStack, configuration, options) {
+ this.middlewareStack.use((0, middleware_serde_1.getSerdePlugin)(configuration, this.serialize, this.deserialize));
+ this.middlewareStack.use((0, middleware_endpoint_1.getEndpointPlugin)(configuration, CreateIdentityPoolCommand.getEndpointParameterInstructions()));
+ this.middlewareStack.use((0, middleware_signing_1.getAwsAuthPlugin)(configuration));
+ const stack = clientStack.concat(this.middlewareStack);
+ const { logger } = configuration;
+ const clientName = "CognitoIdentityClient";
+ const commandName = "CreateIdentityPoolCommand";
+ const handlerExecutionContext = {
+ logger,
+ clientName,
+ commandName,
+ inputFilterSensitiveLog: (_) => _,
+ outputFilterSensitiveLog: (_) => _,
+ [types_1.SMITHY_CONTEXT_KEY]: {
+ service: "AWSCognitoIdentityService",
+ operation: "CreateIdentityPool",
+ },
+ };
+ const { requestHandler } = configuration;
+ return stack.resolve((request) => requestHandler.handle(request.request, options || {}), handlerExecutionContext);
+ }
+ serialize(input, context) {
+ return (0, Aws_json1_1_1.se_CreateIdentityPoolCommand)(input, context);
+ }
+ deserialize(output, context) {
+ return (0, Aws_json1_1_1.de_CreateIdentityPoolCommand)(output, context);
+ }
+}
+exports.CreateIdentityPoolCommand = CreateIdentityPoolCommand;
+
+
+/***/ }),
+
+/***/ 35483:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.DeleteIdentitiesCommand = exports.$Command = void 0;
+const middleware_signing_1 = __nccwpck_require__(14935);
+const middleware_endpoint_1 = __nccwpck_require__(82918);
+const middleware_serde_1 = __nccwpck_require__(81238);
+const smithy_client_1 = __nccwpck_require__(63570);
+Object.defineProperty(exports, "$Command", ({ enumerable: true, get: function () { return smithy_client_1.Command; } }));
+const types_1 = __nccwpck_require__(55756);
+const Aws_json1_1_1 = __nccwpck_require__(85087);
+class DeleteIdentitiesCommand extends smithy_client_1.Command {
+ static getEndpointParameterInstructions() {
+ return {
+ UseFIPS: { type: "builtInParams", name: "useFipsEndpoint" },
+ Endpoint: { type: "builtInParams", name: "endpoint" },
+ Region: { type: "builtInParams", name: "region" },
+ UseDualStack: { type: "builtInParams", name: "useDualstackEndpoint" },
+ };
+ }
+ constructor(input) {
+ super();
+ this.input = input;
+ }
+ resolveMiddleware(clientStack, configuration, options) {
+ this.middlewareStack.use((0, middleware_serde_1.getSerdePlugin)(configuration, this.serialize, this.deserialize));
+ this.middlewareStack.use((0, middleware_endpoint_1.getEndpointPlugin)(configuration, DeleteIdentitiesCommand.getEndpointParameterInstructions()));
+ this.middlewareStack.use((0, middleware_signing_1.getAwsAuthPlugin)(configuration));
+ const stack = clientStack.concat(this.middlewareStack);
+ const { logger } = configuration;
+ const clientName = "CognitoIdentityClient";
+ const commandName = "DeleteIdentitiesCommand";
+ const handlerExecutionContext = {
+ logger,
+ clientName,
+ commandName,
+ inputFilterSensitiveLog: (_) => _,
+ outputFilterSensitiveLog: (_) => _,
+ [types_1.SMITHY_CONTEXT_KEY]: {
+ service: "AWSCognitoIdentityService",
+ operation: "DeleteIdentities",
+ },
+ };
+ const { requestHandler } = configuration;
+ return stack.resolve((request) => requestHandler.handle(request.request, options || {}), handlerExecutionContext);
+ }
+ serialize(input, context) {
+ return (0, Aws_json1_1_1.se_DeleteIdentitiesCommand)(input, context);
+ }
+ deserialize(output, context) {
+ return (0, Aws_json1_1_1.de_DeleteIdentitiesCommand)(output, context);
+ }
+}
+exports.DeleteIdentitiesCommand = DeleteIdentitiesCommand;
+
+
+/***/ }),
+
+/***/ 76149:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.DeleteIdentityPoolCommand = exports.$Command = void 0;
+const middleware_signing_1 = __nccwpck_require__(14935);
+const middleware_endpoint_1 = __nccwpck_require__(82918);
+const middleware_serde_1 = __nccwpck_require__(81238);
+const smithy_client_1 = __nccwpck_require__(63570);
+Object.defineProperty(exports, "$Command", ({ enumerable: true, get: function () { return smithy_client_1.Command; } }));
+const types_1 = __nccwpck_require__(55756);
+const Aws_json1_1_1 = __nccwpck_require__(85087);
+class DeleteIdentityPoolCommand extends smithy_client_1.Command {
+ static getEndpointParameterInstructions() {
+ return {
+ UseFIPS: { type: "builtInParams", name: "useFipsEndpoint" },
+ Endpoint: { type: "builtInParams", name: "endpoint" },
+ Region: { type: "builtInParams", name: "region" },
+ UseDualStack: { type: "builtInParams", name: "useDualstackEndpoint" },
+ };
+ }
+ constructor(input) {
+ super();
+ this.input = input;
+ }
+ resolveMiddleware(clientStack, configuration, options) {
+ this.middlewareStack.use((0, middleware_serde_1.getSerdePlugin)(configuration, this.serialize, this.deserialize));
+ this.middlewareStack.use((0, middleware_endpoint_1.getEndpointPlugin)(configuration, DeleteIdentityPoolCommand.getEndpointParameterInstructions()));
+ this.middlewareStack.use((0, middleware_signing_1.getAwsAuthPlugin)(configuration));
+ const stack = clientStack.concat(this.middlewareStack);
+ const { logger } = configuration;
+ const clientName = "CognitoIdentityClient";
+ const commandName = "DeleteIdentityPoolCommand";
+ const handlerExecutionContext = {
+ logger,
+ clientName,
+ commandName,
+ inputFilterSensitiveLog: (_) => _,
+ outputFilterSensitiveLog: (_) => _,
+ [types_1.SMITHY_CONTEXT_KEY]: {
+ service: "AWSCognitoIdentityService",
+ operation: "DeleteIdentityPool",
+ },
+ };
+ const { requestHandler } = configuration;
+ return stack.resolve((request) => requestHandler.handle(request.request, options || {}), handlerExecutionContext);
+ }
+ serialize(input, context) {
+ return (0, Aws_json1_1_1.se_DeleteIdentityPoolCommand)(input, context);
+ }
+ deserialize(output, context) {
+ return (0, Aws_json1_1_1.de_DeleteIdentityPoolCommand)(output, context);
+ }
+}
+exports.DeleteIdentityPoolCommand = DeleteIdentityPoolCommand;
+
+
+/***/ }),
+
+/***/ 49605:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.DescribeIdentityCommand = exports.$Command = void 0;
+const middleware_signing_1 = __nccwpck_require__(14935);
+const middleware_endpoint_1 = __nccwpck_require__(82918);
+const middleware_serde_1 = __nccwpck_require__(81238);
+const smithy_client_1 = __nccwpck_require__(63570);
+Object.defineProperty(exports, "$Command", ({ enumerable: true, get: function () { return smithy_client_1.Command; } }));
+const types_1 = __nccwpck_require__(55756);
+const Aws_json1_1_1 = __nccwpck_require__(85087);
+class DescribeIdentityCommand extends smithy_client_1.Command {
+ static getEndpointParameterInstructions() {
+ return {
+ UseFIPS: { type: "builtInParams", name: "useFipsEndpoint" },
+ Endpoint: { type: "builtInParams", name: "endpoint" },
+ Region: { type: "builtInParams", name: "region" },
+ UseDualStack: { type: "builtInParams", name: "useDualstackEndpoint" },
+ };
+ }
+ constructor(input) {
+ super();
+ this.input = input;
+ }
+ resolveMiddleware(clientStack, configuration, options) {
+ this.middlewareStack.use((0, middleware_serde_1.getSerdePlugin)(configuration, this.serialize, this.deserialize));
+ this.middlewareStack.use((0, middleware_endpoint_1.getEndpointPlugin)(configuration, DescribeIdentityCommand.getEndpointParameterInstructions()));
+ this.middlewareStack.use((0, middleware_signing_1.getAwsAuthPlugin)(configuration));
+ const stack = clientStack.concat(this.middlewareStack);
+ const { logger } = configuration;
+ const clientName = "CognitoIdentityClient";
+ const commandName = "DescribeIdentityCommand";
+ const handlerExecutionContext = {
+ logger,
+ clientName,
+ commandName,
+ inputFilterSensitiveLog: (_) => _,
+ outputFilterSensitiveLog: (_) => _,
+ [types_1.SMITHY_CONTEXT_KEY]: {
+ service: "AWSCognitoIdentityService",
+ operation: "DescribeIdentity",
+ },
+ };
+ const { requestHandler } = configuration;
+ return stack.resolve((request) => requestHandler.handle(request.request, options || {}), handlerExecutionContext);
+ }
+ serialize(input, context) {
+ return (0, Aws_json1_1_1.se_DescribeIdentityCommand)(input, context);
+ }
+ deserialize(output, context) {
+ return (0, Aws_json1_1_1.de_DescribeIdentityCommand)(output, context);
+ }
+}
+exports.DescribeIdentityCommand = DescribeIdentityCommand;
+
+
+/***/ }),
+
+/***/ 89524:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.DescribeIdentityPoolCommand = exports.$Command = void 0;
+const middleware_signing_1 = __nccwpck_require__(14935);
+const middleware_endpoint_1 = __nccwpck_require__(82918);
+const middleware_serde_1 = __nccwpck_require__(81238);
+const smithy_client_1 = __nccwpck_require__(63570);
+Object.defineProperty(exports, "$Command", ({ enumerable: true, get: function () { return smithy_client_1.Command; } }));
+const types_1 = __nccwpck_require__(55756);
+const Aws_json1_1_1 = __nccwpck_require__(85087);
+class DescribeIdentityPoolCommand extends smithy_client_1.Command {
+ static getEndpointParameterInstructions() {
+ return {
+ UseFIPS: { type: "builtInParams", name: "useFipsEndpoint" },
+ Endpoint: { type: "builtInParams", name: "endpoint" },
+ Region: { type: "builtInParams", name: "region" },
+ UseDualStack: { type: "builtInParams", name: "useDualstackEndpoint" },
+ };
+ }
+ constructor(input) {
+ super();
+ this.input = input;
+ }
+ resolveMiddleware(clientStack, configuration, options) {
+ this.middlewareStack.use((0, middleware_serde_1.getSerdePlugin)(configuration, this.serialize, this.deserialize));
+ this.middlewareStack.use((0, middleware_endpoint_1.getEndpointPlugin)(configuration, DescribeIdentityPoolCommand.getEndpointParameterInstructions()));
+ this.middlewareStack.use((0, middleware_signing_1.getAwsAuthPlugin)(configuration));
+ const stack = clientStack.concat(this.middlewareStack);
+ const { logger } = configuration;
+ const clientName = "CognitoIdentityClient";
+ const commandName = "DescribeIdentityPoolCommand";
+ const handlerExecutionContext = {
+ logger,
+ clientName,
+ commandName,
+ inputFilterSensitiveLog: (_) => _,
+ outputFilterSensitiveLog: (_) => _,
+ [types_1.SMITHY_CONTEXT_KEY]: {
+ service: "AWSCognitoIdentityService",
+ operation: "DescribeIdentityPool",
+ },
+ };
+ const { requestHandler } = configuration;
+ return stack.resolve((request) => requestHandler.handle(request.request, options || {}), handlerExecutionContext);
+ }
+ serialize(input, context) {
+ return (0, Aws_json1_1_1.se_DescribeIdentityPoolCommand)(input, context);
+ }
+ deserialize(output, context) {
+ return (0, Aws_json1_1_1.de_DescribeIdentityPoolCommand)(output, context);
+ }
+}
+exports.DescribeIdentityPoolCommand = DescribeIdentityPoolCommand;
+
+
+/***/ }),
+
+/***/ 60681:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.GetCredentialsForIdentityCommand = exports.$Command = void 0;
+const middleware_endpoint_1 = __nccwpck_require__(82918);
+const middleware_serde_1 = __nccwpck_require__(81238);
+const smithy_client_1 = __nccwpck_require__(63570);
+Object.defineProperty(exports, "$Command", ({ enumerable: true, get: function () { return smithy_client_1.Command; } }));
+const types_1 = __nccwpck_require__(55756);
+const Aws_json1_1_1 = __nccwpck_require__(85087);
+class GetCredentialsForIdentityCommand extends smithy_client_1.Command {
+ static getEndpointParameterInstructions() {
+ return {
+ UseFIPS: { type: "builtInParams", name: "useFipsEndpoint" },
+ Endpoint: { type: "builtInParams", name: "endpoint" },
+ Region: { type: "builtInParams", name: "region" },
+ UseDualStack: { type: "builtInParams", name: "useDualstackEndpoint" },
+ };
+ }
+ constructor(input) {
+ super();
+ this.input = input;
+ }
+ resolveMiddleware(clientStack, configuration, options) {
+ this.middlewareStack.use((0, middleware_serde_1.getSerdePlugin)(configuration, this.serialize, this.deserialize));
+ this.middlewareStack.use((0, middleware_endpoint_1.getEndpointPlugin)(configuration, GetCredentialsForIdentityCommand.getEndpointParameterInstructions()));
+ const stack = clientStack.concat(this.middlewareStack);
+ const { logger } = configuration;
+ const clientName = "CognitoIdentityClient";
+ const commandName = "GetCredentialsForIdentityCommand";
+ const handlerExecutionContext = {
+ logger,
+ clientName,
+ commandName,
+ inputFilterSensitiveLog: (_) => _,
+ outputFilterSensitiveLog: (_) => _,
+ [types_1.SMITHY_CONTEXT_KEY]: {
+ service: "AWSCognitoIdentityService",
+ operation: "GetCredentialsForIdentity",
+ },
+ };
+ const { requestHandler } = configuration;
+ return stack.resolve((request) => requestHandler.handle(request.request, options || {}), handlerExecutionContext);
+ }
+ serialize(input, context) {
+ return (0, Aws_json1_1_1.se_GetCredentialsForIdentityCommand)(input, context);
+ }
+ deserialize(output, context) {
+ return (0, Aws_json1_1_1.de_GetCredentialsForIdentityCommand)(output, context);
+ }
+}
+exports.GetCredentialsForIdentityCommand = GetCredentialsForIdentityCommand;
+
+
+/***/ }),
+
+/***/ 73201:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.GetIdCommand = exports.$Command = void 0;
+const middleware_endpoint_1 = __nccwpck_require__(82918);
+const middleware_serde_1 = __nccwpck_require__(81238);
+const smithy_client_1 = __nccwpck_require__(63570);
+Object.defineProperty(exports, "$Command", ({ enumerable: true, get: function () { return smithy_client_1.Command; } }));
+const types_1 = __nccwpck_require__(55756);
+const Aws_json1_1_1 = __nccwpck_require__(85087);
+class GetIdCommand extends smithy_client_1.Command {
+ static getEndpointParameterInstructions() {
+ return {
+ UseFIPS: { type: "builtInParams", name: "useFipsEndpoint" },
+ Endpoint: { type: "builtInParams", name: "endpoint" },
+ Region: { type: "builtInParams", name: "region" },
+ UseDualStack: { type: "builtInParams", name: "useDualstackEndpoint" },
+ };
+ }
+ constructor(input) {
+ super();
+ this.input = input;
+ }
+ resolveMiddleware(clientStack, configuration, options) {
+ this.middlewareStack.use((0, middleware_serde_1.getSerdePlugin)(configuration, this.serialize, this.deserialize));
+ this.middlewareStack.use((0, middleware_endpoint_1.getEndpointPlugin)(configuration, GetIdCommand.getEndpointParameterInstructions()));
+ const stack = clientStack.concat(this.middlewareStack);
+ const { logger } = configuration;
+ const clientName = "CognitoIdentityClient";
+ const commandName = "GetIdCommand";
+ const handlerExecutionContext = {
+ logger,
+ clientName,
+ commandName,
+ inputFilterSensitiveLog: (_) => _,
+ outputFilterSensitiveLog: (_) => _,
+ [types_1.SMITHY_CONTEXT_KEY]: {
+ service: "AWSCognitoIdentityService",
+ operation: "GetId",
+ },
+ };
+ const { requestHandler } = configuration;
+ return stack.resolve((request) => requestHandler.handle(request.request, options || {}), handlerExecutionContext);
+ }
+ serialize(input, context) {
+ return (0, Aws_json1_1_1.se_GetIdCommand)(input, context);
+ }
+ deserialize(output, context) {
+ return (0, Aws_json1_1_1.de_GetIdCommand)(output, context);
+ }
+}
+exports.GetIdCommand = GetIdCommand;
+
+
+/***/ }),
+
+/***/ 30874:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.GetIdentityPoolRolesCommand = exports.$Command = void 0;
+const middleware_signing_1 = __nccwpck_require__(14935);
+const middleware_endpoint_1 = __nccwpck_require__(82918);
+const middleware_serde_1 = __nccwpck_require__(81238);
+const smithy_client_1 = __nccwpck_require__(63570);
+Object.defineProperty(exports, "$Command", ({ enumerable: true, get: function () { return smithy_client_1.Command; } }));
+const types_1 = __nccwpck_require__(55756);
+const Aws_json1_1_1 = __nccwpck_require__(85087);
+class GetIdentityPoolRolesCommand extends smithy_client_1.Command {
+ static getEndpointParameterInstructions() {
+ return {
+ UseFIPS: { type: "builtInParams", name: "useFipsEndpoint" },
+ Endpoint: { type: "builtInParams", name: "endpoint" },
+ Region: { type: "builtInParams", name: "region" },
+ UseDualStack: { type: "builtInParams", name: "useDualstackEndpoint" },
+ };
+ }
+ constructor(input) {
+ super();
+ this.input = input;
+ }
+ resolveMiddleware(clientStack, configuration, options) {
+ this.middlewareStack.use((0, middleware_serde_1.getSerdePlugin)(configuration, this.serialize, this.deserialize));
+ this.middlewareStack.use((0, middleware_endpoint_1.getEndpointPlugin)(configuration, GetIdentityPoolRolesCommand.getEndpointParameterInstructions()));
+ this.middlewareStack.use((0, middleware_signing_1.getAwsAuthPlugin)(configuration));
+ const stack = clientStack.concat(this.middlewareStack);
+ const { logger } = configuration;
+ const clientName = "CognitoIdentityClient";
+ const commandName = "GetIdentityPoolRolesCommand";
+ const handlerExecutionContext = {
+ logger,
+ clientName,
+ commandName,
+ inputFilterSensitiveLog: (_) => _,
+ outputFilterSensitiveLog: (_) => _,
+ [types_1.SMITHY_CONTEXT_KEY]: {
+ service: "AWSCognitoIdentityService",
+ operation: "GetIdentityPoolRoles",
+ },
+ };
+ const { requestHandler } = configuration;
+ return stack.resolve((request) => requestHandler.handle(request.request, options || {}), handlerExecutionContext);
+ }
+ serialize(input, context) {
+ return (0, Aws_json1_1_1.se_GetIdentityPoolRolesCommand)(input, context);
+ }
+ deserialize(output, context) {
+ return (0, Aws_json1_1_1.de_GetIdentityPoolRolesCommand)(output, context);
+ }
+}
+exports.GetIdentityPoolRolesCommand = GetIdentityPoolRolesCommand;
+
+
+/***/ }),
+
+/***/ 41282:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.GetOpenIdTokenCommand = exports.$Command = void 0;
+const middleware_endpoint_1 = __nccwpck_require__(82918);
+const middleware_serde_1 = __nccwpck_require__(81238);
+const smithy_client_1 = __nccwpck_require__(63570);
+Object.defineProperty(exports, "$Command", ({ enumerable: true, get: function () { return smithy_client_1.Command; } }));
+const types_1 = __nccwpck_require__(55756);
+const Aws_json1_1_1 = __nccwpck_require__(85087);
+class GetOpenIdTokenCommand extends smithy_client_1.Command {
+ static getEndpointParameterInstructions() {
+ return {
+ UseFIPS: { type: "builtInParams", name: "useFipsEndpoint" },
+ Endpoint: { type: "builtInParams", name: "endpoint" },
+ Region: { type: "builtInParams", name: "region" },
+ UseDualStack: { type: "builtInParams", name: "useDualstackEndpoint" },
+ };
+ }
+ constructor(input) {
+ super();
+ this.input = input;
+ }
+ resolveMiddleware(clientStack, configuration, options) {
+ this.middlewareStack.use((0, middleware_serde_1.getSerdePlugin)(configuration, this.serialize, this.deserialize));
+ this.middlewareStack.use((0, middleware_endpoint_1.getEndpointPlugin)(configuration, GetOpenIdTokenCommand.getEndpointParameterInstructions()));
+ const stack = clientStack.concat(this.middlewareStack);
+ const { logger } = configuration;
+ const clientName = "CognitoIdentityClient";
+ const commandName = "GetOpenIdTokenCommand";
+ const handlerExecutionContext = {
+ logger,
+ clientName,
+ commandName,
+ inputFilterSensitiveLog: (_) => _,
+ outputFilterSensitiveLog: (_) => _,
+ [types_1.SMITHY_CONTEXT_KEY]: {
+ service: "AWSCognitoIdentityService",
+ operation: "GetOpenIdToken",
+ },
+ };
+ const { requestHandler } = configuration;
+ return stack.resolve((request) => requestHandler.handle(request.request, options || {}), handlerExecutionContext);
+ }
+ serialize(input, context) {
+ return (0, Aws_json1_1_1.se_GetOpenIdTokenCommand)(input, context);
+ }
+ deserialize(output, context) {
+ return (0, Aws_json1_1_1.de_GetOpenIdTokenCommand)(output, context);
+ }
+}
+exports.GetOpenIdTokenCommand = GetOpenIdTokenCommand;
+
+
+/***/ }),
+
+/***/ 39946:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.GetOpenIdTokenForDeveloperIdentityCommand = exports.$Command = void 0;
+const middleware_signing_1 = __nccwpck_require__(14935);
+const middleware_endpoint_1 = __nccwpck_require__(82918);
+const middleware_serde_1 = __nccwpck_require__(81238);
+const smithy_client_1 = __nccwpck_require__(63570);
+Object.defineProperty(exports, "$Command", ({ enumerable: true, get: function () { return smithy_client_1.Command; } }));
+const types_1 = __nccwpck_require__(55756);
+const Aws_json1_1_1 = __nccwpck_require__(85087);
+class GetOpenIdTokenForDeveloperIdentityCommand extends smithy_client_1.Command {
+ static getEndpointParameterInstructions() {
+ return {
+ UseFIPS: { type: "builtInParams", name: "useFipsEndpoint" },
+ Endpoint: { type: "builtInParams", name: "endpoint" },
+ Region: { type: "builtInParams", name: "region" },
+ UseDualStack: { type: "builtInParams", name: "useDualstackEndpoint" },
+ };
+ }
+ constructor(input) {
+ super();
+ this.input = input;
+ }
+ resolveMiddleware(clientStack, configuration, options) {
+ this.middlewareStack.use((0, middleware_serde_1.getSerdePlugin)(configuration, this.serialize, this.deserialize));
+ this.middlewareStack.use((0, middleware_endpoint_1.getEndpointPlugin)(configuration, GetOpenIdTokenForDeveloperIdentityCommand.getEndpointParameterInstructions()));
+ this.middlewareStack.use((0, middleware_signing_1.getAwsAuthPlugin)(configuration));
+ const stack = clientStack.concat(this.middlewareStack);
+ const { logger } = configuration;
+ const clientName = "CognitoIdentityClient";
+ const commandName = "GetOpenIdTokenForDeveloperIdentityCommand";
+ const handlerExecutionContext = {
+ logger,
+ clientName,
+ commandName,
+ inputFilterSensitiveLog: (_) => _,
+ outputFilterSensitiveLog: (_) => _,
+ [types_1.SMITHY_CONTEXT_KEY]: {
+ service: "AWSCognitoIdentityService",
+ operation: "GetOpenIdTokenForDeveloperIdentity",
+ },
+ };
+ const { requestHandler } = configuration;
+ return stack.resolve((request) => requestHandler.handle(request.request, options || {}), handlerExecutionContext);
+ }
+ serialize(input, context) {
+ return (0, Aws_json1_1_1.se_GetOpenIdTokenForDeveloperIdentityCommand)(input, context);
+ }
+ deserialize(output, context) {
+ return (0, Aws_json1_1_1.de_GetOpenIdTokenForDeveloperIdentityCommand)(output, context);
+ }
+}
+exports.GetOpenIdTokenForDeveloperIdentityCommand = GetOpenIdTokenForDeveloperIdentityCommand;
+
+
+/***/ }),
+
+/***/ 27419:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.GetPrincipalTagAttributeMapCommand = exports.$Command = void 0;
+const middleware_signing_1 = __nccwpck_require__(14935);
+const middleware_endpoint_1 = __nccwpck_require__(82918);
+const middleware_serde_1 = __nccwpck_require__(81238);
+const smithy_client_1 = __nccwpck_require__(63570);
+Object.defineProperty(exports, "$Command", ({ enumerable: true, get: function () { return smithy_client_1.Command; } }));
+const types_1 = __nccwpck_require__(55756);
+const Aws_json1_1_1 = __nccwpck_require__(85087);
+class GetPrincipalTagAttributeMapCommand extends smithy_client_1.Command {
+ static getEndpointParameterInstructions() {
+ return {
+ UseFIPS: { type: "builtInParams", name: "useFipsEndpoint" },
+ Endpoint: { type: "builtInParams", name: "endpoint" },
+ Region: { type: "builtInParams", name: "region" },
+ UseDualStack: { type: "builtInParams", name: "useDualstackEndpoint" },
+ };
+ }
+ constructor(input) {
+ super();
+ this.input = input;
+ }
+ resolveMiddleware(clientStack, configuration, options) {
+ this.middlewareStack.use((0, middleware_serde_1.getSerdePlugin)(configuration, this.serialize, this.deserialize));
+ this.middlewareStack.use((0, middleware_endpoint_1.getEndpointPlugin)(configuration, GetPrincipalTagAttributeMapCommand.getEndpointParameterInstructions()));
+ this.middlewareStack.use((0, middleware_signing_1.getAwsAuthPlugin)(configuration));
+ const stack = clientStack.concat(this.middlewareStack);
+ const { logger } = configuration;
+ const clientName = "CognitoIdentityClient";
+ const commandName = "GetPrincipalTagAttributeMapCommand";
+ const handlerExecutionContext = {
+ logger,
+ clientName,
+ commandName,
+ inputFilterSensitiveLog: (_) => _,
+ outputFilterSensitiveLog: (_) => _,
+ [types_1.SMITHY_CONTEXT_KEY]: {
+ service: "AWSCognitoIdentityService",
+ operation: "GetPrincipalTagAttributeMap",
+ },
+ };
+ const { requestHandler } = configuration;
+ return stack.resolve((request) => requestHandler.handle(request.request, options || {}), handlerExecutionContext);
+ }
+ serialize(input, context) {
+ return (0, Aws_json1_1_1.se_GetPrincipalTagAttributeMapCommand)(input, context);
+ }
+ deserialize(output, context) {
+ return (0, Aws_json1_1_1.de_GetPrincipalTagAttributeMapCommand)(output, context);
+ }
+}
+exports.GetPrincipalTagAttributeMapCommand = GetPrincipalTagAttributeMapCommand;
+
+
+/***/ }),
+
+/***/ 59634:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.ListIdentitiesCommand = exports.$Command = void 0;
+const middleware_signing_1 = __nccwpck_require__(14935);
+const middleware_endpoint_1 = __nccwpck_require__(82918);
+const middleware_serde_1 = __nccwpck_require__(81238);
+const smithy_client_1 = __nccwpck_require__(63570);
+Object.defineProperty(exports, "$Command", ({ enumerable: true, get: function () { return smithy_client_1.Command; } }));
+const types_1 = __nccwpck_require__(55756);
+const Aws_json1_1_1 = __nccwpck_require__(85087);
+class ListIdentitiesCommand extends smithy_client_1.Command {
+ static getEndpointParameterInstructions() {
+ return {
+ UseFIPS: { type: "builtInParams", name: "useFipsEndpoint" },
+ Endpoint: { type: "builtInParams", name: "endpoint" },
+ Region: { type: "builtInParams", name: "region" },
+ UseDualStack: { type: "builtInParams", name: "useDualstackEndpoint" },
+ };
+ }
+ constructor(input) {
+ super();
+ this.input = input;
+ }
+ resolveMiddleware(clientStack, configuration, options) {
+ this.middlewareStack.use((0, middleware_serde_1.getSerdePlugin)(configuration, this.serialize, this.deserialize));
+ this.middlewareStack.use((0, middleware_endpoint_1.getEndpointPlugin)(configuration, ListIdentitiesCommand.getEndpointParameterInstructions()));
+ this.middlewareStack.use((0, middleware_signing_1.getAwsAuthPlugin)(configuration));
+ const stack = clientStack.concat(this.middlewareStack);
+ const { logger } = configuration;
+ const clientName = "CognitoIdentityClient";
+ const commandName = "ListIdentitiesCommand";
+ const handlerExecutionContext = {
+ logger,
+ clientName,
+ commandName,
+ inputFilterSensitiveLog: (_) => _,
+ outputFilterSensitiveLog: (_) => _,
+ [types_1.SMITHY_CONTEXT_KEY]: {
+ service: "AWSCognitoIdentityService",
+ operation: "ListIdentities",
+ },
+ };
+ const { requestHandler } = configuration;
+ return stack.resolve((request) => requestHandler.handle(request.request, options || {}), handlerExecutionContext);
+ }
+ serialize(input, context) {
+ return (0, Aws_json1_1_1.se_ListIdentitiesCommand)(input, context);
+ }
+ deserialize(output, context) {
+ return (0, Aws_json1_1_1.de_ListIdentitiesCommand)(output, context);
+ }
+}
+exports.ListIdentitiesCommand = ListIdentitiesCommand;
+
+
+/***/ }),
+
+/***/ 1530:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.ListIdentityPoolsCommand = exports.$Command = void 0;
+const middleware_signing_1 = __nccwpck_require__(14935);
+const middleware_endpoint_1 = __nccwpck_require__(82918);
+const middleware_serde_1 = __nccwpck_require__(81238);
+const smithy_client_1 = __nccwpck_require__(63570);
+Object.defineProperty(exports, "$Command", ({ enumerable: true, get: function () { return smithy_client_1.Command; } }));
+const types_1 = __nccwpck_require__(55756);
+const Aws_json1_1_1 = __nccwpck_require__(85087);
+class ListIdentityPoolsCommand extends smithy_client_1.Command {
+ static getEndpointParameterInstructions() {
+ return {
+ UseFIPS: { type: "builtInParams", name: "useFipsEndpoint" },
+ Endpoint: { type: "builtInParams", name: "endpoint" },
+ Region: { type: "builtInParams", name: "region" },
+ UseDualStack: { type: "builtInParams", name: "useDualstackEndpoint" },
+ };
+ }
+ constructor(input) {
+ super();
+ this.input = input;
+ }
+ resolveMiddleware(clientStack, configuration, options) {
+ this.middlewareStack.use((0, middleware_serde_1.getSerdePlugin)(configuration, this.serialize, this.deserialize));
+ this.middlewareStack.use((0, middleware_endpoint_1.getEndpointPlugin)(configuration, ListIdentityPoolsCommand.getEndpointParameterInstructions()));
+ this.middlewareStack.use((0, middleware_signing_1.getAwsAuthPlugin)(configuration));
+ const stack = clientStack.concat(this.middlewareStack);
+ const { logger } = configuration;
+ const clientName = "CognitoIdentityClient";
+ const commandName = "ListIdentityPoolsCommand";
+ const handlerExecutionContext = {
+ logger,
+ clientName,
+ commandName,
+ inputFilterSensitiveLog: (_) => _,
+ outputFilterSensitiveLog: (_) => _,
+ [types_1.SMITHY_CONTEXT_KEY]: {
+ service: "AWSCognitoIdentityService",
+ operation: "ListIdentityPools",
+ },
+ };
+ const { requestHandler } = configuration;
+ return stack.resolve((request) => requestHandler.handle(request.request, options || {}), handlerExecutionContext);
+ }
+ serialize(input, context) {
+ return (0, Aws_json1_1_1.se_ListIdentityPoolsCommand)(input, context);
+ }
+ deserialize(output, context) {
+ return (0, Aws_json1_1_1.de_ListIdentityPoolsCommand)(output, context);
+ }
+}
+exports.ListIdentityPoolsCommand = ListIdentityPoolsCommand;
+
+
+/***/ }),
+
+/***/ 74716:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.ListTagsForResourceCommand = exports.$Command = void 0;
+const middleware_signing_1 = __nccwpck_require__(14935);
+const middleware_endpoint_1 = __nccwpck_require__(82918);
+const middleware_serde_1 = __nccwpck_require__(81238);
+const smithy_client_1 = __nccwpck_require__(63570);
+Object.defineProperty(exports, "$Command", ({ enumerable: true, get: function () { return smithy_client_1.Command; } }));
+const types_1 = __nccwpck_require__(55756);
+const Aws_json1_1_1 = __nccwpck_require__(85087);
+class ListTagsForResourceCommand extends smithy_client_1.Command {
+ static getEndpointParameterInstructions() {
+ return {
+ UseFIPS: { type: "builtInParams", name: "useFipsEndpoint" },
+ Endpoint: { type: "builtInParams", name: "endpoint" },
+ Region: { type: "builtInParams", name: "region" },
+ UseDualStack: { type: "builtInParams", name: "useDualstackEndpoint" },
+ };
+ }
+ constructor(input) {
+ super();
+ this.input = input;
+ }
+ resolveMiddleware(clientStack, configuration, options) {
+ this.middlewareStack.use((0, middleware_serde_1.getSerdePlugin)(configuration, this.serialize, this.deserialize));
+ this.middlewareStack.use((0, middleware_endpoint_1.getEndpointPlugin)(configuration, ListTagsForResourceCommand.getEndpointParameterInstructions()));
+ this.middlewareStack.use((0, middleware_signing_1.getAwsAuthPlugin)(configuration));
+ const stack = clientStack.concat(this.middlewareStack);
+ const { logger } = configuration;
+ const clientName = "CognitoIdentityClient";
+ const commandName = "ListTagsForResourceCommand";
+ const handlerExecutionContext = {
+ logger,
+ clientName,
+ commandName,
+ inputFilterSensitiveLog: (_) => _,
+ outputFilterSensitiveLog: (_) => _,
+ [types_1.SMITHY_CONTEXT_KEY]: {
+ service: "AWSCognitoIdentityService",
+ operation: "ListTagsForResource",
+ },
+ };
+ const { requestHandler } = configuration;
+ return stack.resolve((request) => requestHandler.handle(request.request, options || {}), handlerExecutionContext);
+ }
+ serialize(input, context) {
+ return (0, Aws_json1_1_1.se_ListTagsForResourceCommand)(input, context);
+ }
+ deserialize(output, context) {
+ return (0, Aws_json1_1_1.de_ListTagsForResourceCommand)(output, context);
+ }
+}
+exports.ListTagsForResourceCommand = ListTagsForResourceCommand;
+
+
+/***/ }),
+
+/***/ 58942:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.LookupDeveloperIdentityCommand = exports.$Command = void 0;
+const middleware_signing_1 = __nccwpck_require__(14935);
+const middleware_endpoint_1 = __nccwpck_require__(82918);
+const middleware_serde_1 = __nccwpck_require__(81238);
+const smithy_client_1 = __nccwpck_require__(63570);
+Object.defineProperty(exports, "$Command", ({ enumerable: true, get: function () { return smithy_client_1.Command; } }));
+const types_1 = __nccwpck_require__(55756);
+const Aws_json1_1_1 = __nccwpck_require__(85087);
+class LookupDeveloperIdentityCommand extends smithy_client_1.Command {
+ static getEndpointParameterInstructions() {
+ return {
+ UseFIPS: { type: "builtInParams", name: "useFipsEndpoint" },
+ Endpoint: { type: "builtInParams", name: "endpoint" },
+ Region: { type: "builtInParams", name: "region" },
+ UseDualStack: { type: "builtInParams", name: "useDualstackEndpoint" },
+ };
+ }
+ constructor(input) {
+ super();
+ this.input = input;
+ }
+ resolveMiddleware(clientStack, configuration, options) {
+ this.middlewareStack.use((0, middleware_serde_1.getSerdePlugin)(configuration, this.serialize, this.deserialize));
+ this.middlewareStack.use((0, middleware_endpoint_1.getEndpointPlugin)(configuration, LookupDeveloperIdentityCommand.getEndpointParameterInstructions()));
+ this.middlewareStack.use((0, middleware_signing_1.getAwsAuthPlugin)(configuration));
+ const stack = clientStack.concat(this.middlewareStack);
+ const { logger } = configuration;
+ const clientName = "CognitoIdentityClient";
+ const commandName = "LookupDeveloperIdentityCommand";
+ const handlerExecutionContext = {
+ logger,
+ clientName,
+ commandName,
+ inputFilterSensitiveLog: (_) => _,
+ outputFilterSensitiveLog: (_) => _,
+ [types_1.SMITHY_CONTEXT_KEY]: {
+ service: "AWSCognitoIdentityService",
+ operation: "LookupDeveloperIdentity",
+ },
+ };
+ const { requestHandler } = configuration;
+ return stack.resolve((request) => requestHandler.handle(request.request, options || {}), handlerExecutionContext);
+ }
+ serialize(input, context) {
+ return (0, Aws_json1_1_1.se_LookupDeveloperIdentityCommand)(input, context);
+ }
+ deserialize(output, context) {
+ return (0, Aws_json1_1_1.de_LookupDeveloperIdentityCommand)(output, context);
+ }
+}
+exports.LookupDeveloperIdentityCommand = LookupDeveloperIdentityCommand;
+
+
+/***/ }),
+
+/***/ 14253:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.MergeDeveloperIdentitiesCommand = exports.$Command = void 0;
+const middleware_signing_1 = __nccwpck_require__(14935);
+const middleware_endpoint_1 = __nccwpck_require__(82918);
+const middleware_serde_1 = __nccwpck_require__(81238);
+const smithy_client_1 = __nccwpck_require__(63570);
+Object.defineProperty(exports, "$Command", ({ enumerable: true, get: function () { return smithy_client_1.Command; } }));
+const types_1 = __nccwpck_require__(55756);
+const Aws_json1_1_1 = __nccwpck_require__(85087);
+class MergeDeveloperIdentitiesCommand extends smithy_client_1.Command {
+ static getEndpointParameterInstructions() {
+ return {
+ UseFIPS: { type: "builtInParams", name: "useFipsEndpoint" },
+ Endpoint: { type: "builtInParams", name: "endpoint" },
+ Region: { type: "builtInParams", name: "region" },
+ UseDualStack: { type: "builtInParams", name: "useDualstackEndpoint" },
+ };
+ }
+ constructor(input) {
+ super();
+ this.input = input;
+ }
+ resolveMiddleware(clientStack, configuration, options) {
+ this.middlewareStack.use((0, middleware_serde_1.getSerdePlugin)(configuration, this.serialize, this.deserialize));
+ this.middlewareStack.use((0, middleware_endpoint_1.getEndpointPlugin)(configuration, MergeDeveloperIdentitiesCommand.getEndpointParameterInstructions()));
+ this.middlewareStack.use((0, middleware_signing_1.getAwsAuthPlugin)(configuration));
+ const stack = clientStack.concat(this.middlewareStack);
+ const { logger } = configuration;
+ const clientName = "CognitoIdentityClient";
+ const commandName = "MergeDeveloperIdentitiesCommand";
+ const handlerExecutionContext = {
+ logger,
+ clientName,
+ commandName,
+ inputFilterSensitiveLog: (_) => _,
+ outputFilterSensitiveLog: (_) => _,
+ [types_1.SMITHY_CONTEXT_KEY]: {
+ service: "AWSCognitoIdentityService",
+ operation: "MergeDeveloperIdentities",
+ },
+ };
+ const { requestHandler } = configuration;
+ return stack.resolve((request) => requestHandler.handle(request.request, options || {}), handlerExecutionContext);
+ }
+ serialize(input, context) {
+ return (0, Aws_json1_1_1.se_MergeDeveloperIdentitiesCommand)(input, context);
+ }
+ deserialize(output, context) {
+ return (0, Aws_json1_1_1.de_MergeDeveloperIdentitiesCommand)(output, context);
+ }
+}
+exports.MergeDeveloperIdentitiesCommand = MergeDeveloperIdentitiesCommand;
+
+
+/***/ }),
+
+/***/ 30823:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.SetIdentityPoolRolesCommand = exports.$Command = void 0;
+const middleware_signing_1 = __nccwpck_require__(14935);
+const middleware_endpoint_1 = __nccwpck_require__(82918);
+const middleware_serde_1 = __nccwpck_require__(81238);
+const smithy_client_1 = __nccwpck_require__(63570);
+Object.defineProperty(exports, "$Command", ({ enumerable: true, get: function () { return smithy_client_1.Command; } }));
+const types_1 = __nccwpck_require__(55756);
+const Aws_json1_1_1 = __nccwpck_require__(85087);
+class SetIdentityPoolRolesCommand extends smithy_client_1.Command {
+ static getEndpointParameterInstructions() {
+ return {
+ UseFIPS: { type: "builtInParams", name: "useFipsEndpoint" },
+ Endpoint: { type: "builtInParams", name: "endpoint" },
+ Region: { type: "builtInParams", name: "region" },
+ UseDualStack: { type: "builtInParams", name: "useDualstackEndpoint" },
+ };
+ }
+ constructor(input) {
+ super();
+ this.input = input;
+ }
+ resolveMiddleware(clientStack, configuration, options) {
+ this.middlewareStack.use((0, middleware_serde_1.getSerdePlugin)(configuration, this.serialize, this.deserialize));
+ this.middlewareStack.use((0, middleware_endpoint_1.getEndpointPlugin)(configuration, SetIdentityPoolRolesCommand.getEndpointParameterInstructions()));
+ this.middlewareStack.use((0, middleware_signing_1.getAwsAuthPlugin)(configuration));
+ const stack = clientStack.concat(this.middlewareStack);
+ const { logger } = configuration;
+ const clientName = "CognitoIdentityClient";
+ const commandName = "SetIdentityPoolRolesCommand";
+ const handlerExecutionContext = {
+ logger,
+ clientName,
+ commandName,
+ inputFilterSensitiveLog: (_) => _,
+ outputFilterSensitiveLog: (_) => _,
+ [types_1.SMITHY_CONTEXT_KEY]: {
+ service: "AWSCognitoIdentityService",
+ operation: "SetIdentityPoolRoles",
+ },
+ };
+ const { requestHandler } = configuration;
+ return stack.resolve((request) => requestHandler.handle(request.request, options || {}), handlerExecutionContext);
+ }
+ serialize(input, context) {
+ return (0, Aws_json1_1_1.se_SetIdentityPoolRolesCommand)(input, context);
+ }
+ deserialize(output, context) {
+ return (0, Aws_json1_1_1.de_SetIdentityPoolRolesCommand)(output, context);
+ }
+}
+exports.SetIdentityPoolRolesCommand = SetIdentityPoolRolesCommand;
+
+
+/***/ }),
+
+/***/ 76004:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.SetPrincipalTagAttributeMapCommand = exports.$Command = void 0;
+const middleware_signing_1 = __nccwpck_require__(14935);
+const middleware_endpoint_1 = __nccwpck_require__(82918);
+const middleware_serde_1 = __nccwpck_require__(81238);
+const smithy_client_1 = __nccwpck_require__(63570);
+Object.defineProperty(exports, "$Command", ({ enumerable: true, get: function () { return smithy_client_1.Command; } }));
+const types_1 = __nccwpck_require__(55756);
+const Aws_json1_1_1 = __nccwpck_require__(85087);
+class SetPrincipalTagAttributeMapCommand extends smithy_client_1.Command {
+ static getEndpointParameterInstructions() {
+ return {
+ UseFIPS: { type: "builtInParams", name: "useFipsEndpoint" },
+ Endpoint: { type: "builtInParams", name: "endpoint" },
+ Region: { type: "builtInParams", name: "region" },
+ UseDualStack: { type: "builtInParams", name: "useDualstackEndpoint" },
+ };
+ }
+ constructor(input) {
+ super();
+ this.input = input;
+ }
+ resolveMiddleware(clientStack, configuration, options) {
+ this.middlewareStack.use((0, middleware_serde_1.getSerdePlugin)(configuration, this.serialize, this.deserialize));
+ this.middlewareStack.use((0, middleware_endpoint_1.getEndpointPlugin)(configuration, SetPrincipalTagAttributeMapCommand.getEndpointParameterInstructions()));
+ this.middlewareStack.use((0, middleware_signing_1.getAwsAuthPlugin)(configuration));
+ const stack = clientStack.concat(this.middlewareStack);
+ const { logger } = configuration;
+ const clientName = "CognitoIdentityClient";
+ const commandName = "SetPrincipalTagAttributeMapCommand";
+ const handlerExecutionContext = {
+ logger,
+ clientName,
+ commandName,
+ inputFilterSensitiveLog: (_) => _,
+ outputFilterSensitiveLog: (_) => _,
+ [types_1.SMITHY_CONTEXT_KEY]: {
+ service: "AWSCognitoIdentityService",
+ operation: "SetPrincipalTagAttributeMap",
+ },
+ };
+ const { requestHandler } = configuration;
+ return stack.resolve((request) => requestHandler.handle(request.request, options || {}), handlerExecutionContext);
+ }
+ serialize(input, context) {
+ return (0, Aws_json1_1_1.se_SetPrincipalTagAttributeMapCommand)(input, context);
+ }
+ deserialize(output, context) {
+ return (0, Aws_json1_1_1.de_SetPrincipalTagAttributeMapCommand)(output, context);
+ }
+}
+exports.SetPrincipalTagAttributeMapCommand = SetPrincipalTagAttributeMapCommand;
+
+
+/***/ }),
+
+/***/ 96042:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.TagResourceCommand = exports.$Command = void 0;
+const middleware_signing_1 = __nccwpck_require__(14935);
+const middleware_endpoint_1 = __nccwpck_require__(82918);
+const middleware_serde_1 = __nccwpck_require__(81238);
+const smithy_client_1 = __nccwpck_require__(63570);
+Object.defineProperty(exports, "$Command", ({ enumerable: true, get: function () { return smithy_client_1.Command; } }));
+const types_1 = __nccwpck_require__(55756);
+const Aws_json1_1_1 = __nccwpck_require__(85087);
+class TagResourceCommand extends smithy_client_1.Command {
+ static getEndpointParameterInstructions() {
+ return {
+ UseFIPS: { type: "builtInParams", name: "useFipsEndpoint" },
+ Endpoint: { type: "builtInParams", name: "endpoint" },
+ Region: { type: "builtInParams", name: "region" },
+ UseDualStack: { type: "builtInParams", name: "useDualstackEndpoint" },
+ };
+ }
+ constructor(input) {
+ super();
+ this.input = input;
+ }
+ resolveMiddleware(clientStack, configuration, options) {
+ this.middlewareStack.use((0, middleware_serde_1.getSerdePlugin)(configuration, this.serialize, this.deserialize));
+ this.middlewareStack.use((0, middleware_endpoint_1.getEndpointPlugin)(configuration, TagResourceCommand.getEndpointParameterInstructions()));
+ this.middlewareStack.use((0, middleware_signing_1.getAwsAuthPlugin)(configuration));
+ const stack = clientStack.concat(this.middlewareStack);
+ const { logger } = configuration;
+ const clientName = "CognitoIdentityClient";
+ const commandName = "TagResourceCommand";
+ const handlerExecutionContext = {
+ logger,
+ clientName,
+ commandName,
+ inputFilterSensitiveLog: (_) => _,
+ outputFilterSensitiveLog: (_) => _,
+ [types_1.SMITHY_CONTEXT_KEY]: {
+ service: "AWSCognitoIdentityService",
+ operation: "TagResource",
+ },
+ };
+ const { requestHandler } = configuration;
+ return stack.resolve((request) => requestHandler.handle(request.request, options || {}), handlerExecutionContext);
+ }
+ serialize(input, context) {
+ return (0, Aws_json1_1_1.se_TagResourceCommand)(input, context);
+ }
+ deserialize(output, context) {
+ return (0, Aws_json1_1_1.de_TagResourceCommand)(output, context);
+ }
+}
+exports.TagResourceCommand = TagResourceCommand;
+
+
+/***/ }),
+
+/***/ 48284:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.UnlinkDeveloperIdentityCommand = exports.$Command = void 0;
+const middleware_signing_1 = __nccwpck_require__(14935);
+const middleware_endpoint_1 = __nccwpck_require__(82918);
+const middleware_serde_1 = __nccwpck_require__(81238);
+const smithy_client_1 = __nccwpck_require__(63570);
+Object.defineProperty(exports, "$Command", ({ enumerable: true, get: function () { return smithy_client_1.Command; } }));
+const types_1 = __nccwpck_require__(55756);
+const Aws_json1_1_1 = __nccwpck_require__(85087);
+class UnlinkDeveloperIdentityCommand extends smithy_client_1.Command {
+ static getEndpointParameterInstructions() {
+ return {
+ UseFIPS: { type: "builtInParams", name: "useFipsEndpoint" },
+ Endpoint: { type: "builtInParams", name: "endpoint" },
+ Region: { type: "builtInParams", name: "region" },
+ UseDualStack: { type: "builtInParams", name: "useDualstackEndpoint" },
+ };
+ }
+ constructor(input) {
+ super();
+ this.input = input;
+ }
+ resolveMiddleware(clientStack, configuration, options) {
+ this.middlewareStack.use((0, middleware_serde_1.getSerdePlugin)(configuration, this.serialize, this.deserialize));
+ this.middlewareStack.use((0, middleware_endpoint_1.getEndpointPlugin)(configuration, UnlinkDeveloperIdentityCommand.getEndpointParameterInstructions()));
+ this.middlewareStack.use((0, middleware_signing_1.getAwsAuthPlugin)(configuration));
+ const stack = clientStack.concat(this.middlewareStack);
+ const { logger } = configuration;
+ const clientName = "CognitoIdentityClient";
+ const commandName = "UnlinkDeveloperIdentityCommand";
+ const handlerExecutionContext = {
+ logger,
+ clientName,
+ commandName,
+ inputFilterSensitiveLog: (_) => _,
+ outputFilterSensitiveLog: (_) => _,
+ [types_1.SMITHY_CONTEXT_KEY]: {
+ service: "AWSCognitoIdentityService",
+ operation: "UnlinkDeveloperIdentity",
+ },
+ };
+ const { requestHandler } = configuration;
+ return stack.resolve((request) => requestHandler.handle(request.request, options || {}), handlerExecutionContext);
+ }
+ serialize(input, context) {
+ return (0, Aws_json1_1_1.se_UnlinkDeveloperIdentityCommand)(input, context);
+ }
+ deserialize(output, context) {
+ return (0, Aws_json1_1_1.de_UnlinkDeveloperIdentityCommand)(output, context);
+ }
+}
+exports.UnlinkDeveloperIdentityCommand = UnlinkDeveloperIdentityCommand;
+
+
+/***/ }),
+
+/***/ 11710:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.UnlinkIdentityCommand = exports.$Command = void 0;
+const middleware_endpoint_1 = __nccwpck_require__(82918);
+const middleware_serde_1 = __nccwpck_require__(81238);
+const smithy_client_1 = __nccwpck_require__(63570);
+Object.defineProperty(exports, "$Command", ({ enumerable: true, get: function () { return smithy_client_1.Command; } }));
+const types_1 = __nccwpck_require__(55756);
+const Aws_json1_1_1 = __nccwpck_require__(85087);
+class UnlinkIdentityCommand extends smithy_client_1.Command {
+ static getEndpointParameterInstructions() {
+ return {
+ UseFIPS: { type: "builtInParams", name: "useFipsEndpoint" },
+ Endpoint: { type: "builtInParams", name: "endpoint" },
+ Region: { type: "builtInParams", name: "region" },
+ UseDualStack: { type: "builtInParams", name: "useDualstackEndpoint" },
+ };
+ }
+ constructor(input) {
+ super();
+ this.input = input;
+ }
+ resolveMiddleware(clientStack, configuration, options) {
+ this.middlewareStack.use((0, middleware_serde_1.getSerdePlugin)(configuration, this.serialize, this.deserialize));
+ this.middlewareStack.use((0, middleware_endpoint_1.getEndpointPlugin)(configuration, UnlinkIdentityCommand.getEndpointParameterInstructions()));
+ const stack = clientStack.concat(this.middlewareStack);
+ const { logger } = configuration;
+ const clientName = "CognitoIdentityClient";
+ const commandName = "UnlinkIdentityCommand";
+ const handlerExecutionContext = {
+ logger,
+ clientName,
+ commandName,
+ inputFilterSensitiveLog: (_) => _,
+ outputFilterSensitiveLog: (_) => _,
+ [types_1.SMITHY_CONTEXT_KEY]: {
+ service: "AWSCognitoIdentityService",
+ operation: "UnlinkIdentity",
+ },
+ };
+ const { requestHandler } = configuration;
+ return stack.resolve((request) => requestHandler.handle(request.request, options || {}), handlerExecutionContext);
+ }
+ serialize(input, context) {
+ return (0, Aws_json1_1_1.se_UnlinkIdentityCommand)(input, context);
+ }
+ deserialize(output, context) {
+ return (0, Aws_json1_1_1.de_UnlinkIdentityCommand)(output, context);
+ }
+}
+exports.UnlinkIdentityCommand = UnlinkIdentityCommand;
+
+
+/***/ }),
+
+/***/ 70081:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.UntagResourceCommand = exports.$Command = void 0;
+const middleware_signing_1 = __nccwpck_require__(14935);
+const middleware_endpoint_1 = __nccwpck_require__(82918);
+const middleware_serde_1 = __nccwpck_require__(81238);
+const smithy_client_1 = __nccwpck_require__(63570);
+Object.defineProperty(exports, "$Command", ({ enumerable: true, get: function () { return smithy_client_1.Command; } }));
+const types_1 = __nccwpck_require__(55756);
+const Aws_json1_1_1 = __nccwpck_require__(85087);
+class UntagResourceCommand extends smithy_client_1.Command {
+ static getEndpointParameterInstructions() {
+ return {
+ UseFIPS: { type: "builtInParams", name: "useFipsEndpoint" },
+ Endpoint: { type: "builtInParams", name: "endpoint" },
+ Region: { type: "builtInParams", name: "region" },
+ UseDualStack: { type: "builtInParams", name: "useDualstackEndpoint" },
+ };
+ }
+ constructor(input) {
+ super();
+ this.input = input;
+ }
+ resolveMiddleware(clientStack, configuration, options) {
+ this.middlewareStack.use((0, middleware_serde_1.getSerdePlugin)(configuration, this.serialize, this.deserialize));
+ this.middlewareStack.use((0, middleware_endpoint_1.getEndpointPlugin)(configuration, UntagResourceCommand.getEndpointParameterInstructions()));
+ this.middlewareStack.use((0, middleware_signing_1.getAwsAuthPlugin)(configuration));
+ const stack = clientStack.concat(this.middlewareStack);
+ const { logger } = configuration;
+ const clientName = "CognitoIdentityClient";
+ const commandName = "UntagResourceCommand";
+ const handlerExecutionContext = {
+ logger,
+ clientName,
+ commandName,
+ inputFilterSensitiveLog: (_) => _,
+ outputFilterSensitiveLog: (_) => _,
+ [types_1.SMITHY_CONTEXT_KEY]: {
+ service: "AWSCognitoIdentityService",
+ operation: "UntagResource",
+ },
+ };
+ const { requestHandler } = configuration;
+ return stack.resolve((request) => requestHandler.handle(request.request, options || {}), handlerExecutionContext);
+ }
+ serialize(input, context) {
+ return (0, Aws_json1_1_1.se_UntagResourceCommand)(input, context);
+ }
+ deserialize(output, context) {
+ return (0, Aws_json1_1_1.de_UntagResourceCommand)(output, context);
+ }
+}
+exports.UntagResourceCommand = UntagResourceCommand;
+
+
+/***/ }),
+
+/***/ 99983:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.UpdateIdentityPoolCommand = exports.$Command = void 0;
+const middleware_signing_1 = __nccwpck_require__(14935);
+const middleware_endpoint_1 = __nccwpck_require__(82918);
+const middleware_serde_1 = __nccwpck_require__(81238);
+const smithy_client_1 = __nccwpck_require__(63570);
+Object.defineProperty(exports, "$Command", ({ enumerable: true, get: function () { return smithy_client_1.Command; } }));
+const types_1 = __nccwpck_require__(55756);
+const Aws_json1_1_1 = __nccwpck_require__(85087);
+class UpdateIdentityPoolCommand extends smithy_client_1.Command {
+ static getEndpointParameterInstructions() {
+ return {
+ UseFIPS: { type: "builtInParams", name: "useFipsEndpoint" },
+ Endpoint: { type: "builtInParams", name: "endpoint" },
+ Region: { type: "builtInParams", name: "region" },
+ UseDualStack: { type: "builtInParams", name: "useDualstackEndpoint" },
+ };
+ }
+ constructor(input) {
+ super();
+ this.input = input;
+ }
+ resolveMiddleware(clientStack, configuration, options) {
+ this.middlewareStack.use((0, middleware_serde_1.getSerdePlugin)(configuration, this.serialize, this.deserialize));
+ this.middlewareStack.use((0, middleware_endpoint_1.getEndpointPlugin)(configuration, UpdateIdentityPoolCommand.getEndpointParameterInstructions()));
+ this.middlewareStack.use((0, middleware_signing_1.getAwsAuthPlugin)(configuration));
+ const stack = clientStack.concat(this.middlewareStack);
+ const { logger } = configuration;
+ const clientName = "CognitoIdentityClient";
+ const commandName = "UpdateIdentityPoolCommand";
+ const handlerExecutionContext = {
+ logger,
+ clientName,
+ commandName,
+ inputFilterSensitiveLog: (_) => _,
+ outputFilterSensitiveLog: (_) => _,
+ [types_1.SMITHY_CONTEXT_KEY]: {
+ service: "AWSCognitoIdentityService",
+ operation: "UpdateIdentityPool",
+ },
+ };
+ const { requestHandler } = configuration;
+ return stack.resolve((request) => requestHandler.handle(request.request, options || {}), handlerExecutionContext);
+ }
+ serialize(input, context) {
+ return (0, Aws_json1_1_1.se_UpdateIdentityPoolCommand)(input, context);
+ }
+ deserialize(output, context) {
+ return (0, Aws_json1_1_1.de_UpdateIdentityPoolCommand)(output, context);
+ }
+}
+exports.UpdateIdentityPoolCommand = UpdateIdentityPoolCommand;
+
+
+/***/ }),
+
+/***/ 13608:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+const tslib_1 = __nccwpck_require__(4351);
+tslib_1.__exportStar(__nccwpck_require__(31085), exports);
+tslib_1.__exportStar(__nccwpck_require__(35483), exports);
+tslib_1.__exportStar(__nccwpck_require__(76149), exports);
+tslib_1.__exportStar(__nccwpck_require__(49605), exports);
+tslib_1.__exportStar(__nccwpck_require__(89524), exports);
+tslib_1.__exportStar(__nccwpck_require__(60681), exports);
+tslib_1.__exportStar(__nccwpck_require__(73201), exports);
+tslib_1.__exportStar(__nccwpck_require__(30874), exports);
+tslib_1.__exportStar(__nccwpck_require__(41282), exports);
+tslib_1.__exportStar(__nccwpck_require__(39946), exports);
+tslib_1.__exportStar(__nccwpck_require__(27419), exports);
+tslib_1.__exportStar(__nccwpck_require__(59634), exports);
+tslib_1.__exportStar(__nccwpck_require__(1530), exports);
+tslib_1.__exportStar(__nccwpck_require__(74716), exports);
+tslib_1.__exportStar(__nccwpck_require__(58942), exports);
+tslib_1.__exportStar(__nccwpck_require__(14253), exports);
+tslib_1.__exportStar(__nccwpck_require__(30823), exports);
+tslib_1.__exportStar(__nccwpck_require__(76004), exports);
+tslib_1.__exportStar(__nccwpck_require__(96042), exports);
+tslib_1.__exportStar(__nccwpck_require__(48284), exports);
+tslib_1.__exportStar(__nccwpck_require__(11710), exports);
+tslib_1.__exportStar(__nccwpck_require__(70081), exports);
+tslib_1.__exportStar(__nccwpck_require__(99983), exports);
+
+
+/***/ }),
+
+/***/ 72987:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.resolveClientEndpointParameters = void 0;
+const resolveClientEndpointParameters = (options) => {
+ return {
+ ...options,
+ useDualstackEndpoint: options.useDualstackEndpoint ?? false,
+ useFipsEndpoint: options.useFipsEndpoint ?? false,
+ defaultSigningName: "cognito-identity",
+ };
+};
+exports.resolveClientEndpointParameters = resolveClientEndpointParameters;
+
+
+/***/ }),
+
+/***/ 58554:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.defaultEndpointResolver = void 0;
+const util_endpoints_1 = __nccwpck_require__(13350);
+const ruleset_1 = __nccwpck_require__(6845);
+const defaultEndpointResolver = (endpointParams, context = {}) => {
+ return (0, util_endpoints_1.resolveEndpoint)(ruleset_1.ruleSet, {
+ endpointParams: endpointParams,
+ logger: context.logger,
+ });
+};
+exports.defaultEndpointResolver = defaultEndpointResolver;
+
+
+/***/ }),
+
+/***/ 6845:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.ruleSet = void 0;
+const s = "required", t = "fn", u = "argv", v = "ref";
+const a = true, b = "isSet", c = "booleanEquals", d = "error", e = "endpoint", f = "tree", g = "PartitionResult", h = { [s]: false, "type": "String" }, i = { [s]: true, "default": false, "type": "Boolean" }, j = { [v]: "Endpoint" }, k = { [t]: c, [u]: [{ [v]: "UseFIPS" }, true] }, l = { [t]: c, [u]: [{ [v]: "UseDualStack" }, true] }, m = {}, n = { [t]: "getAttr", [u]: [{ [v]: g }, "supportsFIPS"] }, o = { [t]: c, [u]: [true, { [t]: "getAttr", [u]: [{ [v]: g }, "supportsDualStack"] }] }, p = [k], q = [l], r = [{ [v]: "Region" }];
+const _data = { version: "1.0", parameters: { Region: h, UseDualStack: i, UseFIPS: i, Endpoint: h }, rules: [{ conditions: [{ [t]: b, [u]: [j] }], rules: [{ conditions: p, error: "Invalid Configuration: FIPS and custom endpoint are not supported", type: d }, { conditions: q, error: "Invalid Configuration: Dualstack and custom endpoint are not supported", type: d }, { endpoint: { url: j, properties: m, headers: m }, type: e }], type: f }, { conditions: [{ [t]: b, [u]: r }], rules: [{ conditions: [{ [t]: "aws.partition", [u]: r, assign: g }], rules: [{ conditions: [k, l], rules: [{ conditions: [{ [t]: c, [u]: [a, n] }, o], rules: [{ endpoint: { url: "https://cognito-identity-fips.{Region}.{PartitionResult#dualStackDnsSuffix}", properties: m, headers: m }, type: e }], type: f }, { error: "FIPS and DualStack are enabled, but this partition does not support one or both", type: d }], type: f }, { conditions: p, rules: [{ conditions: [{ [t]: c, [u]: [n, a] }], rules: [{ endpoint: { url: "https://cognito-identity-fips.{Region}.{PartitionResult#dnsSuffix}", properties: m, headers: m }, type: e }], type: f }, { error: "FIPS is enabled but this partition does not support FIPS", type: d }], type: f }, { conditions: q, rules: [{ conditions: [o], rules: [{ endpoint: { url: "https://cognito-identity.{Region}.{PartitionResult#dualStackDnsSuffix}", properties: m, headers: m }, type: e }], type: f }, { error: "DualStack is enabled but this partition does not support DualStack", type: d }], type: f }, { endpoint: { url: "https://cognito-identity.{Region}.{PartitionResult#dnsSuffix}", properties: m, headers: m }, type: e }], type: f }], type: f }, { error: "Invalid Configuration: Missing Region", type: d }] };
+exports.ruleSet = _data;
+
+
+/***/ }),
+
+/***/ 45880:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.CognitoIdentityServiceException = void 0;
+const tslib_1 = __nccwpck_require__(4351);
+tslib_1.__exportStar(__nccwpck_require__(4864), exports);
+tslib_1.__exportStar(__nccwpck_require__(18427), exports);
+tslib_1.__exportStar(__nccwpck_require__(13608), exports);
+tslib_1.__exportStar(__nccwpck_require__(27405), exports);
+tslib_1.__exportStar(__nccwpck_require__(2572), exports);
+var CognitoIdentityServiceException_1 = __nccwpck_require__(61760);
+Object.defineProperty(exports, "CognitoIdentityServiceException", ({ enumerable: true, get: function () { return CognitoIdentityServiceException_1.CognitoIdentityServiceException; } }));
+
+
+/***/ }),
+
+/***/ 61760:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.CognitoIdentityServiceException = exports.__ServiceException = void 0;
+const smithy_client_1 = __nccwpck_require__(63570);
+Object.defineProperty(exports, "__ServiceException", ({ enumerable: true, get: function () { return smithy_client_1.ServiceException; } }));
+class CognitoIdentityServiceException extends smithy_client_1.ServiceException {
+ constructor(options) {
+ super(options);
+ Object.setPrototypeOf(this, CognitoIdentityServiceException.prototype);
+ }
+}
+exports.CognitoIdentityServiceException = CognitoIdentityServiceException;
+
+
+/***/ }),
+
+/***/ 2572:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+const tslib_1 = __nccwpck_require__(4351);
+tslib_1.__exportStar(__nccwpck_require__(98001), exports);
+
+
+/***/ }),
+
+/***/ 98001:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.ConcurrentModificationException = exports.DeveloperUserAlreadyRegisteredException = exports.RoleMappingType = exports.MappingRuleMatchType = exports.InvalidIdentityPoolConfigurationException = exports.ExternalServiceException = exports.ResourceNotFoundException = exports.ErrorCode = exports.TooManyRequestsException = exports.ResourceConflictException = exports.NotAuthorizedException = exports.LimitExceededException = exports.InvalidParameterException = exports.InternalErrorException = exports.AmbiguousRoleResolutionType = void 0;
+const CognitoIdentityServiceException_1 = __nccwpck_require__(61760);
+exports.AmbiguousRoleResolutionType = {
+ AUTHENTICATED_ROLE: "AuthenticatedRole",
+ DENY: "Deny",
+};
+class InternalErrorException extends CognitoIdentityServiceException_1.CognitoIdentityServiceException {
+ constructor(opts) {
+ super({
+ name: "InternalErrorException",
+ $fault: "server",
+ ...opts,
+ });
+ this.name = "InternalErrorException";
+ this.$fault = "server";
+ Object.setPrototypeOf(this, InternalErrorException.prototype);
+ }
+}
+exports.InternalErrorException = InternalErrorException;
+class InvalidParameterException extends CognitoIdentityServiceException_1.CognitoIdentityServiceException {
+ constructor(opts) {
+ super({
+ name: "InvalidParameterException",
+ $fault: "client",
+ ...opts,
+ });
+ this.name = "InvalidParameterException";
+ this.$fault = "client";
+ Object.setPrototypeOf(this, InvalidParameterException.prototype);
+ }
+}
+exports.InvalidParameterException = InvalidParameterException;
+class LimitExceededException extends CognitoIdentityServiceException_1.CognitoIdentityServiceException {
+ constructor(opts) {
+ super({
+ name: "LimitExceededException",
+ $fault: "client",
+ ...opts,
+ });
+ this.name = "LimitExceededException";
+ this.$fault = "client";
+ Object.setPrototypeOf(this, LimitExceededException.prototype);
+ }
+}
+exports.LimitExceededException = LimitExceededException;
+class NotAuthorizedException extends CognitoIdentityServiceException_1.CognitoIdentityServiceException {
+ constructor(opts) {
+ super({
+ name: "NotAuthorizedException",
+ $fault: "client",
+ ...opts,
+ });
+ this.name = "NotAuthorizedException";
+ this.$fault = "client";
+ Object.setPrototypeOf(this, NotAuthorizedException.prototype);
+ }
+}
+exports.NotAuthorizedException = NotAuthorizedException;
+class ResourceConflictException extends CognitoIdentityServiceException_1.CognitoIdentityServiceException {
+ constructor(opts) {
+ super({
+ name: "ResourceConflictException",
+ $fault: "client",
+ ...opts,
+ });
+ this.name = "ResourceConflictException";
+ this.$fault = "client";
+ Object.setPrototypeOf(this, ResourceConflictException.prototype);
+ }
+}
+exports.ResourceConflictException = ResourceConflictException;
+class TooManyRequestsException extends CognitoIdentityServiceException_1.CognitoIdentityServiceException {
+ constructor(opts) {
+ super({
+ name: "TooManyRequestsException",
+ $fault: "client",
+ ...opts,
+ });
+ this.name = "TooManyRequestsException";
+ this.$fault = "client";
+ Object.setPrototypeOf(this, TooManyRequestsException.prototype);
+ }
+}
+exports.TooManyRequestsException = TooManyRequestsException;
+exports.ErrorCode = {
+ ACCESS_DENIED: "AccessDenied",
+ INTERNAL_SERVER_ERROR: "InternalServerError",
+};
+class ResourceNotFoundException extends CognitoIdentityServiceException_1.CognitoIdentityServiceException {
+ constructor(opts) {
+ super({
+ name: "ResourceNotFoundException",
+ $fault: "client",
+ ...opts,
+ });
+ this.name = "ResourceNotFoundException";
+ this.$fault = "client";
+ Object.setPrototypeOf(this, ResourceNotFoundException.prototype);
+ }
+}
+exports.ResourceNotFoundException = ResourceNotFoundException;
+class ExternalServiceException extends CognitoIdentityServiceException_1.CognitoIdentityServiceException {
+ constructor(opts) {
+ super({
+ name: "ExternalServiceException",
+ $fault: "client",
+ ...opts,
+ });
+ this.name = "ExternalServiceException";
+ this.$fault = "client";
+ Object.setPrototypeOf(this, ExternalServiceException.prototype);
+ }
+}
+exports.ExternalServiceException = ExternalServiceException;
+class InvalidIdentityPoolConfigurationException extends CognitoIdentityServiceException_1.CognitoIdentityServiceException {
+ constructor(opts) {
+ super({
+ name: "InvalidIdentityPoolConfigurationException",
+ $fault: "client",
+ ...opts,
+ });
+ this.name = "InvalidIdentityPoolConfigurationException";
+ this.$fault = "client";
+ Object.setPrototypeOf(this, InvalidIdentityPoolConfigurationException.prototype);
+ }
+}
+exports.InvalidIdentityPoolConfigurationException = InvalidIdentityPoolConfigurationException;
+exports.MappingRuleMatchType = {
+ CONTAINS: "Contains",
+ EQUALS: "Equals",
+ NOT_EQUAL: "NotEqual",
+ STARTS_WITH: "StartsWith",
+};
+exports.RoleMappingType = {
+ RULES: "Rules",
+ TOKEN: "Token",
+};
+class DeveloperUserAlreadyRegisteredException extends CognitoIdentityServiceException_1.CognitoIdentityServiceException {
+ constructor(opts) {
+ super({
+ name: "DeveloperUserAlreadyRegisteredException",
+ $fault: "client",
+ ...opts,
+ });
+ this.name = "DeveloperUserAlreadyRegisteredException";
+ this.$fault = "client";
+ Object.setPrototypeOf(this, DeveloperUserAlreadyRegisteredException.prototype);
+ }
+}
+exports.DeveloperUserAlreadyRegisteredException = DeveloperUserAlreadyRegisteredException;
+class ConcurrentModificationException extends CognitoIdentityServiceException_1.CognitoIdentityServiceException {
+ constructor(opts) {
+ super({
+ name: "ConcurrentModificationException",
+ $fault: "client",
+ ...opts,
+ });
+ this.name = "ConcurrentModificationException";
+ this.$fault = "client";
+ Object.setPrototypeOf(this, ConcurrentModificationException.prototype);
+ }
+}
+exports.ConcurrentModificationException = ConcurrentModificationException;
+
+
+/***/ }),
+
+/***/ 45620:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+
+
+/***/ }),
+
+/***/ 79644:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.paginateListIdentityPools = void 0;
+const CognitoIdentityClient_1 = __nccwpck_require__(4864);
+const ListIdentityPoolsCommand_1 = __nccwpck_require__(1530);
+const makePagedClientRequest = async (client, input, ...args) => {
+ return await client.send(new ListIdentityPoolsCommand_1.ListIdentityPoolsCommand(input), ...args);
+};
+async function* paginateListIdentityPools(config, input, ...additionalArguments) {
+ let token = config.startingToken || undefined;
+ let hasNext = true;
+ let page;
+ while (hasNext) {
+ input.NextToken = token;
+ input["MaxResults"] = config.pageSize;
+ if (config.client instanceof CognitoIdentityClient_1.CognitoIdentityClient) {
+ page = await makePagedClientRequest(config.client, input, ...additionalArguments);
+ }
+ else {
+ throw new Error("Invalid client, expected CognitoIdentity | CognitoIdentityClient");
+ }
+ yield page;
+ const prevToken = token;
+ token = page.NextToken;
+ hasNext = !!(token && (!config.stopOnSameToken || token !== prevToken));
+ }
+ return undefined;
+}
+exports.paginateListIdentityPools = paginateListIdentityPools;
+
+
+/***/ }),
+
+/***/ 27405:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+const tslib_1 = __nccwpck_require__(4351);
+tslib_1.__exportStar(__nccwpck_require__(45620), exports);
+tslib_1.__exportStar(__nccwpck_require__(79644), exports);
+
+
+/***/ }),
+
+/***/ 85087:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.de_UpdateIdentityPoolCommand = exports.de_UntagResourceCommand = exports.de_UnlinkIdentityCommand = exports.de_UnlinkDeveloperIdentityCommand = exports.de_TagResourceCommand = exports.de_SetPrincipalTagAttributeMapCommand = exports.de_SetIdentityPoolRolesCommand = exports.de_MergeDeveloperIdentitiesCommand = exports.de_LookupDeveloperIdentityCommand = exports.de_ListTagsForResourceCommand = exports.de_ListIdentityPoolsCommand = exports.de_ListIdentitiesCommand = exports.de_GetPrincipalTagAttributeMapCommand = exports.de_GetOpenIdTokenForDeveloperIdentityCommand = exports.de_GetOpenIdTokenCommand = exports.de_GetIdentityPoolRolesCommand = exports.de_GetIdCommand = exports.de_GetCredentialsForIdentityCommand = exports.de_DescribeIdentityPoolCommand = exports.de_DescribeIdentityCommand = exports.de_DeleteIdentityPoolCommand = exports.de_DeleteIdentitiesCommand = exports.de_CreateIdentityPoolCommand = exports.se_UpdateIdentityPoolCommand = exports.se_UntagResourceCommand = exports.se_UnlinkIdentityCommand = exports.se_UnlinkDeveloperIdentityCommand = exports.se_TagResourceCommand = exports.se_SetPrincipalTagAttributeMapCommand = exports.se_SetIdentityPoolRolesCommand = exports.se_MergeDeveloperIdentitiesCommand = exports.se_LookupDeveloperIdentityCommand = exports.se_ListTagsForResourceCommand = exports.se_ListIdentityPoolsCommand = exports.se_ListIdentitiesCommand = exports.se_GetPrincipalTagAttributeMapCommand = exports.se_GetOpenIdTokenForDeveloperIdentityCommand = exports.se_GetOpenIdTokenCommand = exports.se_GetIdentityPoolRolesCommand = exports.se_GetIdCommand = exports.se_GetCredentialsForIdentityCommand = exports.se_DescribeIdentityPoolCommand = exports.se_DescribeIdentityCommand = exports.se_DeleteIdentityPoolCommand = exports.se_DeleteIdentitiesCommand = exports.se_CreateIdentityPoolCommand = void 0;
+const protocol_http_1 = __nccwpck_require__(64418);
+const smithy_client_1 = __nccwpck_require__(63570);
+const CognitoIdentityServiceException_1 = __nccwpck_require__(61760);
+const models_0_1 = __nccwpck_require__(98001);
+const se_CreateIdentityPoolCommand = async (input, context) => {
+ const headers = sharedHeaders("CreateIdentityPool");
+ let body;
+ body = JSON.stringify((0, smithy_client_1._json)(input));
+ return buildHttpRpcRequest(context, headers, "/", undefined, body);
+};
+exports.se_CreateIdentityPoolCommand = se_CreateIdentityPoolCommand;
+const se_DeleteIdentitiesCommand = async (input, context) => {
+ const headers = sharedHeaders("DeleteIdentities");
+ let body;
+ body = JSON.stringify((0, smithy_client_1._json)(input));
+ return buildHttpRpcRequest(context, headers, "/", undefined, body);
+};
+exports.se_DeleteIdentitiesCommand = se_DeleteIdentitiesCommand;
+const se_DeleteIdentityPoolCommand = async (input, context) => {
+ const headers = sharedHeaders("DeleteIdentityPool");
+ let body;
+ body = JSON.stringify((0, smithy_client_1._json)(input));
+ return buildHttpRpcRequest(context, headers, "/", undefined, body);
+};
+exports.se_DeleteIdentityPoolCommand = se_DeleteIdentityPoolCommand;
+const se_DescribeIdentityCommand = async (input, context) => {
+ const headers = sharedHeaders("DescribeIdentity");
+ let body;
+ body = JSON.stringify((0, smithy_client_1._json)(input));
+ return buildHttpRpcRequest(context, headers, "/", undefined, body);
+};
+exports.se_DescribeIdentityCommand = se_DescribeIdentityCommand;
+const se_DescribeIdentityPoolCommand = async (input, context) => {
+ const headers = sharedHeaders("DescribeIdentityPool");
+ let body;
+ body = JSON.stringify((0, smithy_client_1._json)(input));
+ return buildHttpRpcRequest(context, headers, "/", undefined, body);
+};
+exports.se_DescribeIdentityPoolCommand = se_DescribeIdentityPoolCommand;
+const se_GetCredentialsForIdentityCommand = async (input, context) => {
+ const headers = sharedHeaders("GetCredentialsForIdentity");
+ let body;
+ body = JSON.stringify((0, smithy_client_1._json)(input));
+ return buildHttpRpcRequest(context, headers, "/", undefined, body);
+};
+exports.se_GetCredentialsForIdentityCommand = se_GetCredentialsForIdentityCommand;
+const se_GetIdCommand = async (input, context) => {
+ const headers = sharedHeaders("GetId");
+ let body;
+ body = JSON.stringify((0, smithy_client_1._json)(input));
+ return buildHttpRpcRequest(context, headers, "/", undefined, body);
+};
+exports.se_GetIdCommand = se_GetIdCommand;
+const se_GetIdentityPoolRolesCommand = async (input, context) => {
+ const headers = sharedHeaders("GetIdentityPoolRoles");
+ let body;
+ body = JSON.stringify((0, smithy_client_1._json)(input));
+ return buildHttpRpcRequest(context, headers, "/", undefined, body);
+};
+exports.se_GetIdentityPoolRolesCommand = se_GetIdentityPoolRolesCommand;
+const se_GetOpenIdTokenCommand = async (input, context) => {
+ const headers = sharedHeaders("GetOpenIdToken");
+ let body;
+ body = JSON.stringify((0, smithy_client_1._json)(input));
+ return buildHttpRpcRequest(context, headers, "/", undefined, body);
+};
+exports.se_GetOpenIdTokenCommand = se_GetOpenIdTokenCommand;
+const se_GetOpenIdTokenForDeveloperIdentityCommand = async (input, context) => {
+ const headers = sharedHeaders("GetOpenIdTokenForDeveloperIdentity");
+ let body;
+ body = JSON.stringify((0, smithy_client_1._json)(input));
+ return buildHttpRpcRequest(context, headers, "/", undefined, body);
+};
+exports.se_GetOpenIdTokenForDeveloperIdentityCommand = se_GetOpenIdTokenForDeveloperIdentityCommand;
+const se_GetPrincipalTagAttributeMapCommand = async (input, context) => {
+ const headers = sharedHeaders("GetPrincipalTagAttributeMap");
+ let body;
+ body = JSON.stringify((0, smithy_client_1._json)(input));
+ return buildHttpRpcRequest(context, headers, "/", undefined, body);
+};
+exports.se_GetPrincipalTagAttributeMapCommand = se_GetPrincipalTagAttributeMapCommand;
+const se_ListIdentitiesCommand = async (input, context) => {
+ const headers = sharedHeaders("ListIdentities");
+ let body;
+ body = JSON.stringify((0, smithy_client_1._json)(input));
+ return buildHttpRpcRequest(context, headers, "/", undefined, body);
+};
+exports.se_ListIdentitiesCommand = se_ListIdentitiesCommand;
+const se_ListIdentityPoolsCommand = async (input, context) => {
+ const headers = sharedHeaders("ListIdentityPools");
+ let body;
+ body = JSON.stringify((0, smithy_client_1._json)(input));
+ return buildHttpRpcRequest(context, headers, "/", undefined, body);
+};
+exports.se_ListIdentityPoolsCommand = se_ListIdentityPoolsCommand;
+const se_ListTagsForResourceCommand = async (input, context) => {
+ const headers = sharedHeaders("ListTagsForResource");
+ let body;
+ body = JSON.stringify((0, smithy_client_1._json)(input));
+ return buildHttpRpcRequest(context, headers, "/", undefined, body);
+};
+exports.se_ListTagsForResourceCommand = se_ListTagsForResourceCommand;
+const se_LookupDeveloperIdentityCommand = async (input, context) => {
+ const headers = sharedHeaders("LookupDeveloperIdentity");
+ let body;
+ body = JSON.stringify((0, smithy_client_1._json)(input));
+ return buildHttpRpcRequest(context, headers, "/", undefined, body);
+};
+exports.se_LookupDeveloperIdentityCommand = se_LookupDeveloperIdentityCommand;
+const se_MergeDeveloperIdentitiesCommand = async (input, context) => {
+ const headers = sharedHeaders("MergeDeveloperIdentities");
+ let body;
+ body = JSON.stringify((0, smithy_client_1._json)(input));
+ return buildHttpRpcRequest(context, headers, "/", undefined, body);
+};
+exports.se_MergeDeveloperIdentitiesCommand = se_MergeDeveloperIdentitiesCommand;
+const se_SetIdentityPoolRolesCommand = async (input, context) => {
+ const headers = sharedHeaders("SetIdentityPoolRoles");
+ let body;
+ body = JSON.stringify((0, smithy_client_1._json)(input));
+ return buildHttpRpcRequest(context, headers, "/", undefined, body);
+};
+exports.se_SetIdentityPoolRolesCommand = se_SetIdentityPoolRolesCommand;
+const se_SetPrincipalTagAttributeMapCommand = async (input, context) => {
+ const headers = sharedHeaders("SetPrincipalTagAttributeMap");
+ let body;
+ body = JSON.stringify((0, smithy_client_1._json)(input));
+ return buildHttpRpcRequest(context, headers, "/", undefined, body);
+};
+exports.se_SetPrincipalTagAttributeMapCommand = se_SetPrincipalTagAttributeMapCommand;
+const se_TagResourceCommand = async (input, context) => {
+ const headers = sharedHeaders("TagResource");
+ let body;
+ body = JSON.stringify((0, smithy_client_1._json)(input));
+ return buildHttpRpcRequest(context, headers, "/", undefined, body);
+};
+exports.se_TagResourceCommand = se_TagResourceCommand;
+const se_UnlinkDeveloperIdentityCommand = async (input, context) => {
+ const headers = sharedHeaders("UnlinkDeveloperIdentity");
+ let body;
+ body = JSON.stringify((0, smithy_client_1._json)(input));
+ return buildHttpRpcRequest(context, headers, "/", undefined, body);
+};
+exports.se_UnlinkDeveloperIdentityCommand = se_UnlinkDeveloperIdentityCommand;
+const se_UnlinkIdentityCommand = async (input, context) => {
+ const headers = sharedHeaders("UnlinkIdentity");
+ let body;
+ body = JSON.stringify((0, smithy_client_1._json)(input));
+ return buildHttpRpcRequest(context, headers, "/", undefined, body);
+};
+exports.se_UnlinkIdentityCommand = se_UnlinkIdentityCommand;
+const se_UntagResourceCommand = async (input, context) => {
+ const headers = sharedHeaders("UntagResource");
+ let body;
+ body = JSON.stringify((0, smithy_client_1._json)(input));
+ return buildHttpRpcRequest(context, headers, "/", undefined, body);
+};
+exports.se_UntagResourceCommand = se_UntagResourceCommand;
+const se_UpdateIdentityPoolCommand = async (input, context) => {
+ const headers = sharedHeaders("UpdateIdentityPool");
+ let body;
+ body = JSON.stringify((0, smithy_client_1._json)(input));
+ return buildHttpRpcRequest(context, headers, "/", undefined, body);
+};
+exports.se_UpdateIdentityPoolCommand = se_UpdateIdentityPoolCommand;
+const de_CreateIdentityPoolCommand = async (output, context) => {
+ if (output.statusCode >= 300) {
+ return de_CreateIdentityPoolCommandError(output, context);
+ }
+ const data = await parseBody(output.body, context);
+ let contents = {};
+ contents = (0, smithy_client_1._json)(data);
+ const response = {
+ $metadata: deserializeMetadata(output),
+ ...contents,
+ };
+ return response;
+};
+exports.de_CreateIdentityPoolCommand = de_CreateIdentityPoolCommand;
+const de_CreateIdentityPoolCommandError = async (output, context) => {
+ const parsedOutput = {
+ ...output,
+ body: await parseErrorBody(output.body, context),
+ };
+ const errorCode = loadRestJsonErrorCode(output, parsedOutput.body);
+ switch (errorCode) {
+ case "InternalErrorException":
+ case "com.amazonaws.cognitoidentity#InternalErrorException":
+ throw await de_InternalErrorExceptionRes(parsedOutput, context);
+ case "InvalidParameterException":
+ case "com.amazonaws.cognitoidentity#InvalidParameterException":
+ throw await de_InvalidParameterExceptionRes(parsedOutput, context);
+ case "LimitExceededException":
+ case "com.amazonaws.cognitoidentity#LimitExceededException":
+ throw await de_LimitExceededExceptionRes(parsedOutput, context);
+ case "NotAuthorizedException":
+ case "com.amazonaws.cognitoidentity#NotAuthorizedException":
+ throw await de_NotAuthorizedExceptionRes(parsedOutput, context);
+ case "ResourceConflictException":
+ case "com.amazonaws.cognitoidentity#ResourceConflictException":
+ throw await de_ResourceConflictExceptionRes(parsedOutput, context);
+ case "TooManyRequestsException":
+ case "com.amazonaws.cognitoidentity#TooManyRequestsException":
+ throw await de_TooManyRequestsExceptionRes(parsedOutput, context);
+ default:
+ const parsedBody = parsedOutput.body;
+ return throwDefaultError({
+ output,
+ parsedBody,
+ errorCode,
+ });
+ }
+};
+const de_DeleteIdentitiesCommand = async (output, context) => {
+ if (output.statusCode >= 300) {
+ return de_DeleteIdentitiesCommandError(output, context);
+ }
+ const data = await parseBody(output.body, context);
+ let contents = {};
+ contents = (0, smithy_client_1._json)(data);
+ const response = {
+ $metadata: deserializeMetadata(output),
+ ...contents,
+ };
+ return response;
+};
+exports.de_DeleteIdentitiesCommand = de_DeleteIdentitiesCommand;
+const de_DeleteIdentitiesCommandError = async (output, context) => {
+ const parsedOutput = {
+ ...output,
+ body: await parseErrorBody(output.body, context),
+ };
+ const errorCode = loadRestJsonErrorCode(output, parsedOutput.body);
+ switch (errorCode) {
+ case "InternalErrorException":
+ case "com.amazonaws.cognitoidentity#InternalErrorException":
+ throw await de_InternalErrorExceptionRes(parsedOutput, context);
+ case "InvalidParameterException":
+ case "com.amazonaws.cognitoidentity#InvalidParameterException":
+ throw await de_InvalidParameterExceptionRes(parsedOutput, context);
+ case "TooManyRequestsException":
+ case "com.amazonaws.cognitoidentity#TooManyRequestsException":
+ throw await de_TooManyRequestsExceptionRes(parsedOutput, context);
+ default:
+ const parsedBody = parsedOutput.body;
+ return throwDefaultError({
+ output,
+ parsedBody,
+ errorCode,
+ });
+ }
+};
+const de_DeleteIdentityPoolCommand = async (output, context) => {
+ if (output.statusCode >= 300) {
+ return de_DeleteIdentityPoolCommandError(output, context);
+ }
+ await (0, smithy_client_1.collectBody)(output.body, context);
+ const response = {
+ $metadata: deserializeMetadata(output),
+ };
+ return response;
+};
+exports.de_DeleteIdentityPoolCommand = de_DeleteIdentityPoolCommand;
+const de_DeleteIdentityPoolCommandError = async (output, context) => {
+ const parsedOutput = {
+ ...output,
+ body: await parseErrorBody(output.body, context),
+ };
+ const errorCode = loadRestJsonErrorCode(output, parsedOutput.body);
+ switch (errorCode) {
+ case "InternalErrorException":
+ case "com.amazonaws.cognitoidentity#InternalErrorException":
+ throw await de_InternalErrorExceptionRes(parsedOutput, context);
+ case "InvalidParameterException":
+ case "com.amazonaws.cognitoidentity#InvalidParameterException":
+ throw await de_InvalidParameterExceptionRes(parsedOutput, context);
+ case "NotAuthorizedException":
+ case "com.amazonaws.cognitoidentity#NotAuthorizedException":
+ throw await de_NotAuthorizedExceptionRes(parsedOutput, context);
+ case "ResourceNotFoundException":
+ case "com.amazonaws.cognitoidentity#ResourceNotFoundException":
+ throw await de_ResourceNotFoundExceptionRes(parsedOutput, context);
+ case "TooManyRequestsException":
+ case "com.amazonaws.cognitoidentity#TooManyRequestsException":
+ throw await de_TooManyRequestsExceptionRes(parsedOutput, context);
+ default:
+ const parsedBody = parsedOutput.body;
+ return throwDefaultError({
+ output,
+ parsedBody,
+ errorCode,
+ });
+ }
+};
+const de_DescribeIdentityCommand = async (output, context) => {
+ if (output.statusCode >= 300) {
+ return de_DescribeIdentityCommandError(output, context);
+ }
+ const data = await parseBody(output.body, context);
+ let contents = {};
+ contents = de_IdentityDescription(data, context);
+ const response = {
+ $metadata: deserializeMetadata(output),
+ ...contents,
+ };
+ return response;
+};
+exports.de_DescribeIdentityCommand = de_DescribeIdentityCommand;
+const de_DescribeIdentityCommandError = async (output, context) => {
+ const parsedOutput = {
+ ...output,
+ body: await parseErrorBody(output.body, context),
+ };
+ const errorCode = loadRestJsonErrorCode(output, parsedOutput.body);
+ switch (errorCode) {
+ case "InternalErrorException":
+ case "com.amazonaws.cognitoidentity#InternalErrorException":
+ throw await de_InternalErrorExceptionRes(parsedOutput, context);
+ case "InvalidParameterException":
+ case "com.amazonaws.cognitoidentity#InvalidParameterException":
+ throw await de_InvalidParameterExceptionRes(parsedOutput, context);
+ case "NotAuthorizedException":
+ case "com.amazonaws.cognitoidentity#NotAuthorizedException":
+ throw await de_NotAuthorizedExceptionRes(parsedOutput, context);
+ case "ResourceNotFoundException":
+ case "com.amazonaws.cognitoidentity#ResourceNotFoundException":
+ throw await de_ResourceNotFoundExceptionRes(parsedOutput, context);
+ case "TooManyRequestsException":
+ case "com.amazonaws.cognitoidentity#TooManyRequestsException":
+ throw await de_TooManyRequestsExceptionRes(parsedOutput, context);
+ default:
+ const parsedBody = parsedOutput.body;
+ return throwDefaultError({
+ output,
+ parsedBody,
+ errorCode,
+ });
+ }
+};
+const de_DescribeIdentityPoolCommand = async (output, context) => {
+ if (output.statusCode >= 300) {
+ return de_DescribeIdentityPoolCommandError(output, context);
+ }
+ const data = await parseBody(output.body, context);
+ let contents = {};
+ contents = (0, smithy_client_1._json)(data);
+ const response = {
+ $metadata: deserializeMetadata(output),
+ ...contents,
+ };
+ return response;
+};
+exports.de_DescribeIdentityPoolCommand = de_DescribeIdentityPoolCommand;
+const de_DescribeIdentityPoolCommandError = async (output, context) => {
+ const parsedOutput = {
+ ...output,
+ body: await parseErrorBody(output.body, context),
+ };
+ const errorCode = loadRestJsonErrorCode(output, parsedOutput.body);
+ switch (errorCode) {
+ case "InternalErrorException":
+ case "com.amazonaws.cognitoidentity#InternalErrorException":
+ throw await de_InternalErrorExceptionRes(parsedOutput, context);
+ case "InvalidParameterException":
+ case "com.amazonaws.cognitoidentity#InvalidParameterException":
+ throw await de_InvalidParameterExceptionRes(parsedOutput, context);
+ case "NotAuthorizedException":
+ case "com.amazonaws.cognitoidentity#NotAuthorizedException":
+ throw await de_NotAuthorizedExceptionRes(parsedOutput, context);
+ case "ResourceNotFoundException":
+ case "com.amazonaws.cognitoidentity#ResourceNotFoundException":
+ throw await de_ResourceNotFoundExceptionRes(parsedOutput, context);
+ case "TooManyRequestsException":
+ case "com.amazonaws.cognitoidentity#TooManyRequestsException":
+ throw await de_TooManyRequestsExceptionRes(parsedOutput, context);
+ default:
+ const parsedBody = parsedOutput.body;
+ return throwDefaultError({
+ output,
+ parsedBody,
+ errorCode,
+ });
+ }
+};
+const de_GetCredentialsForIdentityCommand = async (output, context) => {
+ if (output.statusCode >= 300) {
+ return de_GetCredentialsForIdentityCommandError(output, context);
+ }
+ const data = await parseBody(output.body, context);
+ let contents = {};
+ contents = de_GetCredentialsForIdentityResponse(data, context);
+ const response = {
+ $metadata: deserializeMetadata(output),
+ ...contents,
+ };
+ return response;
+};
+exports.de_GetCredentialsForIdentityCommand = de_GetCredentialsForIdentityCommand;
+const de_GetCredentialsForIdentityCommandError = async (output, context) => {
+ const parsedOutput = {
+ ...output,
+ body: await parseErrorBody(output.body, context),
+ };
+ const errorCode = loadRestJsonErrorCode(output, parsedOutput.body);
+ switch (errorCode) {
+ case "ExternalServiceException":
+ case "com.amazonaws.cognitoidentity#ExternalServiceException":
+ throw await de_ExternalServiceExceptionRes(parsedOutput, context);
+ case "InternalErrorException":
+ case "com.amazonaws.cognitoidentity#InternalErrorException":
+ throw await de_InternalErrorExceptionRes(parsedOutput, context);
+ case "InvalidIdentityPoolConfigurationException":
+ case "com.amazonaws.cognitoidentity#InvalidIdentityPoolConfigurationException":
+ throw await de_InvalidIdentityPoolConfigurationExceptionRes(parsedOutput, context);
+ case "InvalidParameterException":
+ case "com.amazonaws.cognitoidentity#InvalidParameterException":
+ throw await de_InvalidParameterExceptionRes(parsedOutput, context);
+ case "NotAuthorizedException":
+ case "com.amazonaws.cognitoidentity#NotAuthorizedException":
+ throw await de_NotAuthorizedExceptionRes(parsedOutput, context);
+ case "ResourceConflictException":
+ case "com.amazonaws.cognitoidentity#ResourceConflictException":
+ throw await de_ResourceConflictExceptionRes(parsedOutput, context);
+ case "ResourceNotFoundException":
+ case "com.amazonaws.cognitoidentity#ResourceNotFoundException":
+ throw await de_ResourceNotFoundExceptionRes(parsedOutput, context);
+ case "TooManyRequestsException":
+ case "com.amazonaws.cognitoidentity#TooManyRequestsException":
+ throw await de_TooManyRequestsExceptionRes(parsedOutput, context);
+ default:
+ const parsedBody = parsedOutput.body;
+ return throwDefaultError({
+ output,
+ parsedBody,
+ errorCode,
+ });
+ }
+};
+const de_GetIdCommand = async (output, context) => {
+ if (output.statusCode >= 300) {
+ return de_GetIdCommandError(output, context);
+ }
+ const data = await parseBody(output.body, context);
+ let contents = {};
+ contents = (0, smithy_client_1._json)(data);
+ const response = {
+ $metadata: deserializeMetadata(output),
+ ...contents,
+ };
+ return response;
+};
+exports.de_GetIdCommand = de_GetIdCommand;
+const de_GetIdCommandError = async (output, context) => {
+ const parsedOutput = {
+ ...output,
+ body: await parseErrorBody(output.body, context),
+ };
+ const errorCode = loadRestJsonErrorCode(output, parsedOutput.body);
+ switch (errorCode) {
+ case "ExternalServiceException":
+ case "com.amazonaws.cognitoidentity#ExternalServiceException":
+ throw await de_ExternalServiceExceptionRes(parsedOutput, context);
+ case "InternalErrorException":
+ case "com.amazonaws.cognitoidentity#InternalErrorException":
+ throw await de_InternalErrorExceptionRes(parsedOutput, context);
+ case "InvalidParameterException":
+ case "com.amazonaws.cognitoidentity#InvalidParameterException":
+ throw await de_InvalidParameterExceptionRes(parsedOutput, context);
+ case "LimitExceededException":
+ case "com.amazonaws.cognitoidentity#LimitExceededException":
+ throw await de_LimitExceededExceptionRes(parsedOutput, context);
+ case "NotAuthorizedException":
+ case "com.amazonaws.cognitoidentity#NotAuthorizedException":
+ throw await de_NotAuthorizedExceptionRes(parsedOutput, context);
+ case "ResourceConflictException":
+ case "com.amazonaws.cognitoidentity#ResourceConflictException":
+ throw await de_ResourceConflictExceptionRes(parsedOutput, context);
+ case "ResourceNotFoundException":
+ case "com.amazonaws.cognitoidentity#ResourceNotFoundException":
+ throw await de_ResourceNotFoundExceptionRes(parsedOutput, context);
+ case "TooManyRequestsException":
+ case "com.amazonaws.cognitoidentity#TooManyRequestsException":
+ throw await de_TooManyRequestsExceptionRes(parsedOutput, context);
+ default:
+ const parsedBody = parsedOutput.body;
+ return throwDefaultError({
+ output,
+ parsedBody,
+ errorCode,
+ });
+ }
+};
+const de_GetIdentityPoolRolesCommand = async (output, context) => {
+ if (output.statusCode >= 300) {
+ return de_GetIdentityPoolRolesCommandError(output, context);
+ }
+ const data = await parseBody(output.body, context);
+ let contents = {};
+ contents = (0, smithy_client_1._json)(data);
+ const response = {
+ $metadata: deserializeMetadata(output),
+ ...contents,
+ };
+ return response;
+};
+exports.de_GetIdentityPoolRolesCommand = de_GetIdentityPoolRolesCommand;
+const de_GetIdentityPoolRolesCommandError = async (output, context) => {
+ const parsedOutput = {
+ ...output,
+ body: await parseErrorBody(output.body, context),
+ };
+ const errorCode = loadRestJsonErrorCode(output, parsedOutput.body);
+ switch (errorCode) {
+ case "InternalErrorException":
+ case "com.amazonaws.cognitoidentity#InternalErrorException":
+ throw await de_InternalErrorExceptionRes(parsedOutput, context);
+ case "InvalidParameterException":
+ case "com.amazonaws.cognitoidentity#InvalidParameterException":
+ throw await de_InvalidParameterExceptionRes(parsedOutput, context);
+ case "NotAuthorizedException":
+ case "com.amazonaws.cognitoidentity#NotAuthorizedException":
+ throw await de_NotAuthorizedExceptionRes(parsedOutput, context);
+ case "ResourceConflictException":
+ case "com.amazonaws.cognitoidentity#ResourceConflictException":
+ throw await de_ResourceConflictExceptionRes(parsedOutput, context);
+ case "ResourceNotFoundException":
+ case "com.amazonaws.cognitoidentity#ResourceNotFoundException":
+ throw await de_ResourceNotFoundExceptionRes(parsedOutput, context);
+ case "TooManyRequestsException":
+ case "com.amazonaws.cognitoidentity#TooManyRequestsException":
+ throw await de_TooManyRequestsExceptionRes(parsedOutput, context);
+ default:
+ const parsedBody = parsedOutput.body;
+ return throwDefaultError({
+ output,
+ parsedBody,
+ errorCode,
+ });
+ }
+};
+const de_GetOpenIdTokenCommand = async (output, context) => {
+ if (output.statusCode >= 300) {
+ return de_GetOpenIdTokenCommandError(output, context);
+ }
+ const data = await parseBody(output.body, context);
+ let contents = {};
+ contents = (0, smithy_client_1._json)(data);
+ const response = {
+ $metadata: deserializeMetadata(output),
+ ...contents,
+ };
+ return response;
+};
+exports.de_GetOpenIdTokenCommand = de_GetOpenIdTokenCommand;
+const de_GetOpenIdTokenCommandError = async (output, context) => {
+ const parsedOutput = {
+ ...output,
+ body: await parseErrorBody(output.body, context),
+ };
+ const errorCode = loadRestJsonErrorCode(output, parsedOutput.body);
+ switch (errorCode) {
+ case "ExternalServiceException":
+ case "com.amazonaws.cognitoidentity#ExternalServiceException":
+ throw await de_ExternalServiceExceptionRes(parsedOutput, context);
+ case "InternalErrorException":
+ case "com.amazonaws.cognitoidentity#InternalErrorException":
+ throw await de_InternalErrorExceptionRes(parsedOutput, context);
+ case "InvalidParameterException":
+ case "com.amazonaws.cognitoidentity#InvalidParameterException":
+ throw await de_InvalidParameterExceptionRes(parsedOutput, context);
+ case "NotAuthorizedException":
+ case "com.amazonaws.cognitoidentity#NotAuthorizedException":
+ throw await de_NotAuthorizedExceptionRes(parsedOutput, context);
+ case "ResourceConflictException":
+ case "com.amazonaws.cognitoidentity#ResourceConflictException":
+ throw await de_ResourceConflictExceptionRes(parsedOutput, context);
+ case "ResourceNotFoundException":
+ case "com.amazonaws.cognitoidentity#ResourceNotFoundException":
+ throw await de_ResourceNotFoundExceptionRes(parsedOutput, context);
+ case "TooManyRequestsException":
+ case "com.amazonaws.cognitoidentity#TooManyRequestsException":
+ throw await de_TooManyRequestsExceptionRes(parsedOutput, context);
+ default:
+ const parsedBody = parsedOutput.body;
+ return throwDefaultError({
+ output,
+ parsedBody,
+ errorCode,
+ });
+ }
+};
+const de_GetOpenIdTokenForDeveloperIdentityCommand = async (output, context) => {
+ if (output.statusCode >= 300) {
+ return de_GetOpenIdTokenForDeveloperIdentityCommandError(output, context);
+ }
+ const data = await parseBody(output.body, context);
+ let contents = {};
+ contents = (0, smithy_client_1._json)(data);
+ const response = {
+ $metadata: deserializeMetadata(output),
+ ...contents,
+ };
+ return response;
+};
+exports.de_GetOpenIdTokenForDeveloperIdentityCommand = de_GetOpenIdTokenForDeveloperIdentityCommand;
+const de_GetOpenIdTokenForDeveloperIdentityCommandError = async (output, context) => {
+ const parsedOutput = {
+ ...output,
+ body: await parseErrorBody(output.body, context),
+ };
+ const errorCode = loadRestJsonErrorCode(output, parsedOutput.body);
+ switch (errorCode) {
+ case "DeveloperUserAlreadyRegisteredException":
+ case "com.amazonaws.cognitoidentity#DeveloperUserAlreadyRegisteredException":
+ throw await de_DeveloperUserAlreadyRegisteredExceptionRes(parsedOutput, context);
+ case "InternalErrorException":
+ case "com.amazonaws.cognitoidentity#InternalErrorException":
+ throw await de_InternalErrorExceptionRes(parsedOutput, context);
+ case "InvalidParameterException":
+ case "com.amazonaws.cognitoidentity#InvalidParameterException":
+ throw await de_InvalidParameterExceptionRes(parsedOutput, context);
+ case "NotAuthorizedException":
+ case "com.amazonaws.cognitoidentity#NotAuthorizedException":
+ throw await de_NotAuthorizedExceptionRes(parsedOutput, context);
+ case "ResourceConflictException":
+ case "com.amazonaws.cognitoidentity#ResourceConflictException":
+ throw await de_ResourceConflictExceptionRes(parsedOutput, context);
+ case "ResourceNotFoundException":
+ case "com.amazonaws.cognitoidentity#ResourceNotFoundException":
+ throw await de_ResourceNotFoundExceptionRes(parsedOutput, context);
+ case "TooManyRequestsException":
+ case "com.amazonaws.cognitoidentity#TooManyRequestsException":
+ throw await de_TooManyRequestsExceptionRes(parsedOutput, context);
+ default:
+ const parsedBody = parsedOutput.body;
+ return throwDefaultError({
+ output,
+ parsedBody,
+ errorCode,
+ });
+ }
+};
+const de_GetPrincipalTagAttributeMapCommand = async (output, context) => {
+ if (output.statusCode >= 300) {
+ return de_GetPrincipalTagAttributeMapCommandError(output, context);
+ }
+ const data = await parseBody(output.body, context);
+ let contents = {};
+ contents = (0, smithy_client_1._json)(data);
+ const response = {
+ $metadata: deserializeMetadata(output),
+ ...contents,
+ };
+ return response;
+};
+exports.de_GetPrincipalTagAttributeMapCommand = de_GetPrincipalTagAttributeMapCommand;
+const de_GetPrincipalTagAttributeMapCommandError = async (output, context) => {
+ const parsedOutput = {
+ ...output,
+ body: await parseErrorBody(output.body, context),
+ };
+ const errorCode = loadRestJsonErrorCode(output, parsedOutput.body);
+ switch (errorCode) {
+ case "InternalErrorException":
+ case "com.amazonaws.cognitoidentity#InternalErrorException":
+ throw await de_InternalErrorExceptionRes(parsedOutput, context);
+ case "InvalidParameterException":
+ case "com.amazonaws.cognitoidentity#InvalidParameterException":
+ throw await de_InvalidParameterExceptionRes(parsedOutput, context);
+ case "NotAuthorizedException":
+ case "com.amazonaws.cognitoidentity#NotAuthorizedException":
+ throw await de_NotAuthorizedExceptionRes(parsedOutput, context);
+ case "ResourceNotFoundException":
+ case "com.amazonaws.cognitoidentity#ResourceNotFoundException":
+ throw await de_ResourceNotFoundExceptionRes(parsedOutput, context);
+ case "TooManyRequestsException":
+ case "com.amazonaws.cognitoidentity#TooManyRequestsException":
+ throw await de_TooManyRequestsExceptionRes(parsedOutput, context);
+ default:
+ const parsedBody = parsedOutput.body;
+ return throwDefaultError({
+ output,
+ parsedBody,
+ errorCode,
+ });
+ }
+};
+const de_ListIdentitiesCommand = async (output, context) => {
+ if (output.statusCode >= 300) {
+ return de_ListIdentitiesCommandError(output, context);
+ }
+ const data = await parseBody(output.body, context);
+ let contents = {};
+ contents = de_ListIdentitiesResponse(data, context);
+ const response = {
+ $metadata: deserializeMetadata(output),
+ ...contents,
+ };
+ return response;
+};
+exports.de_ListIdentitiesCommand = de_ListIdentitiesCommand;
+const de_ListIdentitiesCommandError = async (output, context) => {
+ const parsedOutput = {
+ ...output,
+ body: await parseErrorBody(output.body, context),
+ };
+ const errorCode = loadRestJsonErrorCode(output, parsedOutput.body);
+ switch (errorCode) {
+ case "InternalErrorException":
+ case "com.amazonaws.cognitoidentity#InternalErrorException":
+ throw await de_InternalErrorExceptionRes(parsedOutput, context);
+ case "InvalidParameterException":
+ case "com.amazonaws.cognitoidentity#InvalidParameterException":
+ throw await de_InvalidParameterExceptionRes(parsedOutput, context);
+ case "NotAuthorizedException":
+ case "com.amazonaws.cognitoidentity#NotAuthorizedException":
+ throw await de_NotAuthorizedExceptionRes(parsedOutput, context);
+ case "ResourceNotFoundException":
+ case "com.amazonaws.cognitoidentity#ResourceNotFoundException":
+ throw await de_ResourceNotFoundExceptionRes(parsedOutput, context);
+ case "TooManyRequestsException":
+ case "com.amazonaws.cognitoidentity#TooManyRequestsException":
+ throw await de_TooManyRequestsExceptionRes(parsedOutput, context);
+ default:
+ const parsedBody = parsedOutput.body;
+ return throwDefaultError({
+ output,
+ parsedBody,
+ errorCode,
+ });
+ }
+};
+const de_ListIdentityPoolsCommand = async (output, context) => {
+ if (output.statusCode >= 300) {
+ return de_ListIdentityPoolsCommandError(output, context);
+ }
+ const data = await parseBody(output.body, context);
+ let contents = {};
+ contents = (0, smithy_client_1._json)(data);
+ const response = {
+ $metadata: deserializeMetadata(output),
+ ...contents,
+ };
+ return response;
+};
+exports.de_ListIdentityPoolsCommand = de_ListIdentityPoolsCommand;
+const de_ListIdentityPoolsCommandError = async (output, context) => {
+ const parsedOutput = {
+ ...output,
+ body: await parseErrorBody(output.body, context),
+ };
+ const errorCode = loadRestJsonErrorCode(output, parsedOutput.body);
+ switch (errorCode) {
+ case "InternalErrorException":
+ case "com.amazonaws.cognitoidentity#InternalErrorException":
+ throw await de_InternalErrorExceptionRes(parsedOutput, context);
+ case "InvalidParameterException":
+ case "com.amazonaws.cognitoidentity#InvalidParameterException":
+ throw await de_InvalidParameterExceptionRes(parsedOutput, context);
+ case "NotAuthorizedException":
+ case "com.amazonaws.cognitoidentity#NotAuthorizedException":
+ throw await de_NotAuthorizedExceptionRes(parsedOutput, context);
+ case "ResourceNotFoundException":
+ case "com.amazonaws.cognitoidentity#ResourceNotFoundException":
+ throw await de_ResourceNotFoundExceptionRes(parsedOutput, context);
+ case "TooManyRequestsException":
+ case "com.amazonaws.cognitoidentity#TooManyRequestsException":
+ throw await de_TooManyRequestsExceptionRes(parsedOutput, context);
+ default:
+ const parsedBody = parsedOutput.body;
+ return throwDefaultError({
+ output,
+ parsedBody,
+ errorCode,
+ });
+ }
+};
+const de_ListTagsForResourceCommand = async (output, context) => {
+ if (output.statusCode >= 300) {
+ return de_ListTagsForResourceCommandError(output, context);
+ }
+ const data = await parseBody(output.body, context);
+ let contents = {};
+ contents = (0, smithy_client_1._json)(data);
+ const response = {
+ $metadata: deserializeMetadata(output),
+ ...contents,
+ };
+ return response;
+};
+exports.de_ListTagsForResourceCommand = de_ListTagsForResourceCommand;
+const de_ListTagsForResourceCommandError = async (output, context) => {
+ const parsedOutput = {
+ ...output,
+ body: await parseErrorBody(output.body, context),
+ };
+ const errorCode = loadRestJsonErrorCode(output, parsedOutput.body);
+ switch (errorCode) {
+ case "InternalErrorException":
+ case "com.amazonaws.cognitoidentity#InternalErrorException":
+ throw await de_InternalErrorExceptionRes(parsedOutput, context);
+ case "InvalidParameterException":
+ case "com.amazonaws.cognitoidentity#InvalidParameterException":
+ throw await de_InvalidParameterExceptionRes(parsedOutput, context);
+ case "NotAuthorizedException":
+ case "com.amazonaws.cognitoidentity#NotAuthorizedException":
+ throw await de_NotAuthorizedExceptionRes(parsedOutput, context);
+ case "ResourceNotFoundException":
+ case "com.amazonaws.cognitoidentity#ResourceNotFoundException":
+ throw await de_ResourceNotFoundExceptionRes(parsedOutput, context);
+ case "TooManyRequestsException":
+ case "com.amazonaws.cognitoidentity#TooManyRequestsException":
+ throw await de_TooManyRequestsExceptionRes(parsedOutput, context);
+ default:
+ const parsedBody = parsedOutput.body;
+ return throwDefaultError({
+ output,
+ parsedBody,
+ errorCode,
+ });
+ }
+};
+const de_LookupDeveloperIdentityCommand = async (output, context) => {
+ if (output.statusCode >= 300) {
+ return de_LookupDeveloperIdentityCommandError(output, context);
+ }
+ const data = await parseBody(output.body, context);
+ let contents = {};
+ contents = (0, smithy_client_1._json)(data);
+ const response = {
+ $metadata: deserializeMetadata(output),
+ ...contents,
+ };
+ return response;
+};
+exports.de_LookupDeveloperIdentityCommand = de_LookupDeveloperIdentityCommand;
+const de_LookupDeveloperIdentityCommandError = async (output, context) => {
+ const parsedOutput = {
+ ...output,
+ body: await parseErrorBody(output.body, context),
+ };
+ const errorCode = loadRestJsonErrorCode(output, parsedOutput.body);
+ switch (errorCode) {
+ case "InternalErrorException":
+ case "com.amazonaws.cognitoidentity#InternalErrorException":
+ throw await de_InternalErrorExceptionRes(parsedOutput, context);
+ case "InvalidParameterException":
+ case "com.amazonaws.cognitoidentity#InvalidParameterException":
+ throw await de_InvalidParameterExceptionRes(parsedOutput, context);
+ case "NotAuthorizedException":
+ case "com.amazonaws.cognitoidentity#NotAuthorizedException":
+ throw await de_NotAuthorizedExceptionRes(parsedOutput, context);
+ case "ResourceConflictException":
+ case "com.amazonaws.cognitoidentity#ResourceConflictException":
+ throw await de_ResourceConflictExceptionRes(parsedOutput, context);
+ case "ResourceNotFoundException":
+ case "com.amazonaws.cognitoidentity#ResourceNotFoundException":
+ throw await de_ResourceNotFoundExceptionRes(parsedOutput, context);
+ case "TooManyRequestsException":
+ case "com.amazonaws.cognitoidentity#TooManyRequestsException":
+ throw await de_TooManyRequestsExceptionRes(parsedOutput, context);
+ default:
+ const parsedBody = parsedOutput.body;
+ return throwDefaultError({
+ output,
+ parsedBody,
+ errorCode,
+ });
+ }
+};
+const de_MergeDeveloperIdentitiesCommand = async (output, context) => {
+ if (output.statusCode >= 300) {
+ return de_MergeDeveloperIdentitiesCommandError(output, context);
+ }
+ const data = await parseBody(output.body, context);
+ let contents = {};
+ contents = (0, smithy_client_1._json)(data);
+ const response = {
+ $metadata: deserializeMetadata(output),
+ ...contents,
+ };
+ return response;
+};
+exports.de_MergeDeveloperIdentitiesCommand = de_MergeDeveloperIdentitiesCommand;
+const de_MergeDeveloperIdentitiesCommandError = async (output, context) => {
+ const parsedOutput = {
+ ...output,
+ body: await parseErrorBody(output.body, context),
+ };
+ const errorCode = loadRestJsonErrorCode(output, parsedOutput.body);
+ switch (errorCode) {
+ case "InternalErrorException":
+ case "com.amazonaws.cognitoidentity#InternalErrorException":
+ throw await de_InternalErrorExceptionRes(parsedOutput, context);
+ case "InvalidParameterException":
+ case "com.amazonaws.cognitoidentity#InvalidParameterException":
+ throw await de_InvalidParameterExceptionRes(parsedOutput, context);
+ case "NotAuthorizedException":
+ case "com.amazonaws.cognitoidentity#NotAuthorizedException":
+ throw await de_NotAuthorizedExceptionRes(parsedOutput, context);
+ case "ResourceConflictException":
+ case "com.amazonaws.cognitoidentity#ResourceConflictException":
+ throw await de_ResourceConflictExceptionRes(parsedOutput, context);
+ case "ResourceNotFoundException":
+ case "com.amazonaws.cognitoidentity#ResourceNotFoundException":
+ throw await de_ResourceNotFoundExceptionRes(parsedOutput, context);
+ case "TooManyRequestsException":
+ case "com.amazonaws.cognitoidentity#TooManyRequestsException":
+ throw await de_TooManyRequestsExceptionRes(parsedOutput, context);
+ default:
+ const parsedBody = parsedOutput.body;
+ return throwDefaultError({
+ output,
+ parsedBody,
+ errorCode,
+ });
+ }
+};
+const de_SetIdentityPoolRolesCommand = async (output, context) => {
+ if (output.statusCode >= 300) {
+ return de_SetIdentityPoolRolesCommandError(output, context);
+ }
+ await (0, smithy_client_1.collectBody)(output.body, context);
+ const response = {
+ $metadata: deserializeMetadata(output),
+ };
+ return response;
+};
+exports.de_SetIdentityPoolRolesCommand = de_SetIdentityPoolRolesCommand;
+const de_SetIdentityPoolRolesCommandError = async (output, context) => {
+ const parsedOutput = {
+ ...output,
+ body: await parseErrorBody(output.body, context),
+ };
+ const errorCode = loadRestJsonErrorCode(output, parsedOutput.body);
+ switch (errorCode) {
+ case "ConcurrentModificationException":
+ case "com.amazonaws.cognitoidentity#ConcurrentModificationException":
+ throw await de_ConcurrentModificationExceptionRes(parsedOutput, context);
+ case "InternalErrorException":
+ case "com.amazonaws.cognitoidentity#InternalErrorException":
+ throw await de_InternalErrorExceptionRes(parsedOutput, context);
+ case "InvalidParameterException":
+ case "com.amazonaws.cognitoidentity#InvalidParameterException":
+ throw await de_InvalidParameterExceptionRes(parsedOutput, context);
+ case "NotAuthorizedException":
+ case "com.amazonaws.cognitoidentity#NotAuthorizedException":
+ throw await de_NotAuthorizedExceptionRes(parsedOutput, context);
+ case "ResourceConflictException":
+ case "com.amazonaws.cognitoidentity#ResourceConflictException":
+ throw await de_ResourceConflictExceptionRes(parsedOutput, context);
+ case "ResourceNotFoundException":
+ case "com.amazonaws.cognitoidentity#ResourceNotFoundException":
+ throw await de_ResourceNotFoundExceptionRes(parsedOutput, context);
+ case "TooManyRequestsException":
+ case "com.amazonaws.cognitoidentity#TooManyRequestsException":
+ throw await de_TooManyRequestsExceptionRes(parsedOutput, context);
+ default:
+ const parsedBody = parsedOutput.body;
+ return throwDefaultError({
+ output,
+ parsedBody,
+ errorCode,
+ });
+ }
+};
+const de_SetPrincipalTagAttributeMapCommand = async (output, context) => {
+ if (output.statusCode >= 300) {
+ return de_SetPrincipalTagAttributeMapCommandError(output, context);
+ }
+ const data = await parseBody(output.body, context);
+ let contents = {};
+ contents = (0, smithy_client_1._json)(data);
+ const response = {
+ $metadata: deserializeMetadata(output),
+ ...contents,
+ };
+ return response;
+};
+exports.de_SetPrincipalTagAttributeMapCommand = de_SetPrincipalTagAttributeMapCommand;
+const de_SetPrincipalTagAttributeMapCommandError = async (output, context) => {
+ const parsedOutput = {
+ ...output,
+ body: await parseErrorBody(output.body, context),
+ };
+ const errorCode = loadRestJsonErrorCode(output, parsedOutput.body);
+ switch (errorCode) {
+ case "InternalErrorException":
+ case "com.amazonaws.cognitoidentity#InternalErrorException":
+ throw await de_InternalErrorExceptionRes(parsedOutput, context);
+ case "InvalidParameterException":
+ case "com.amazonaws.cognitoidentity#InvalidParameterException":
+ throw await de_InvalidParameterExceptionRes(parsedOutput, context);
+ case "NotAuthorizedException":
+ case "com.amazonaws.cognitoidentity#NotAuthorizedException":
+ throw await de_NotAuthorizedExceptionRes(parsedOutput, context);
+ case "ResourceNotFoundException":
+ case "com.amazonaws.cognitoidentity#ResourceNotFoundException":
+ throw await de_ResourceNotFoundExceptionRes(parsedOutput, context);
+ case "TooManyRequestsException":
+ case "com.amazonaws.cognitoidentity#TooManyRequestsException":
+ throw await de_TooManyRequestsExceptionRes(parsedOutput, context);
+ default:
+ const parsedBody = parsedOutput.body;
+ return throwDefaultError({
+ output,
+ parsedBody,
+ errorCode,
+ });
+ }
+};
+const de_TagResourceCommand = async (output, context) => {
+ if (output.statusCode >= 300) {
+ return de_TagResourceCommandError(output, context);
+ }
+ const data = await parseBody(output.body, context);
+ let contents = {};
+ contents = (0, smithy_client_1._json)(data);
+ const response = {
+ $metadata: deserializeMetadata(output),
+ ...contents,
+ };
+ return response;
+};
+exports.de_TagResourceCommand = de_TagResourceCommand;
+const de_TagResourceCommandError = async (output, context) => {
+ const parsedOutput = {
+ ...output,
+ body: await parseErrorBody(output.body, context),
+ };
+ const errorCode = loadRestJsonErrorCode(output, parsedOutput.body);
+ switch (errorCode) {
+ case "InternalErrorException":
+ case "com.amazonaws.cognitoidentity#InternalErrorException":
+ throw await de_InternalErrorExceptionRes(parsedOutput, context);
+ case "InvalidParameterException":
+ case "com.amazonaws.cognitoidentity#InvalidParameterException":
+ throw await de_InvalidParameterExceptionRes(parsedOutput, context);
+ case "NotAuthorizedException":
+ case "com.amazonaws.cognitoidentity#NotAuthorizedException":
+ throw await de_NotAuthorizedExceptionRes(parsedOutput, context);
+ case "ResourceNotFoundException":
+ case "com.amazonaws.cognitoidentity#ResourceNotFoundException":
+ throw await de_ResourceNotFoundExceptionRes(parsedOutput, context);
+ case "TooManyRequestsException":
+ case "com.amazonaws.cognitoidentity#TooManyRequestsException":
+ throw await de_TooManyRequestsExceptionRes(parsedOutput, context);
+ default:
+ const parsedBody = parsedOutput.body;
+ return throwDefaultError({
+ output,
+ parsedBody,
+ errorCode,
+ });
+ }
+};
+const de_UnlinkDeveloperIdentityCommand = async (output, context) => {
+ if (output.statusCode >= 300) {
+ return de_UnlinkDeveloperIdentityCommandError(output, context);
+ }
+ await (0, smithy_client_1.collectBody)(output.body, context);
+ const response = {
+ $metadata: deserializeMetadata(output),
+ };
+ return response;
+};
+exports.de_UnlinkDeveloperIdentityCommand = de_UnlinkDeveloperIdentityCommand;
+const de_UnlinkDeveloperIdentityCommandError = async (output, context) => {
+ const parsedOutput = {
+ ...output,
+ body: await parseErrorBody(output.body, context),
+ };
+ const errorCode = loadRestJsonErrorCode(output, parsedOutput.body);
+ switch (errorCode) {
+ case "InternalErrorException":
+ case "com.amazonaws.cognitoidentity#InternalErrorException":
+ throw await de_InternalErrorExceptionRes(parsedOutput, context);
+ case "InvalidParameterException":
+ case "com.amazonaws.cognitoidentity#InvalidParameterException":
+ throw await de_InvalidParameterExceptionRes(parsedOutput, context);
+ case "NotAuthorizedException":
+ case "com.amazonaws.cognitoidentity#NotAuthorizedException":
+ throw await de_NotAuthorizedExceptionRes(parsedOutput, context);
+ case "ResourceConflictException":
+ case "com.amazonaws.cognitoidentity#ResourceConflictException":
+ throw await de_ResourceConflictExceptionRes(parsedOutput, context);
+ case "ResourceNotFoundException":
+ case "com.amazonaws.cognitoidentity#ResourceNotFoundException":
+ throw await de_ResourceNotFoundExceptionRes(parsedOutput, context);
+ case "TooManyRequestsException":
+ case "com.amazonaws.cognitoidentity#TooManyRequestsException":
+ throw await de_TooManyRequestsExceptionRes(parsedOutput, context);
+ default:
+ const parsedBody = parsedOutput.body;
+ return throwDefaultError({
+ output,
+ parsedBody,
+ errorCode,
+ });
+ }
+};
+const de_UnlinkIdentityCommand = async (output, context) => {
+ if (output.statusCode >= 300) {
+ return de_UnlinkIdentityCommandError(output, context);
+ }
+ await (0, smithy_client_1.collectBody)(output.body, context);
+ const response = {
+ $metadata: deserializeMetadata(output),
+ };
+ return response;
+};
+exports.de_UnlinkIdentityCommand = de_UnlinkIdentityCommand;
+const de_UnlinkIdentityCommandError = async (output, context) => {
+ const parsedOutput = {
+ ...output,
+ body: await parseErrorBody(output.body, context),
+ };
+ const errorCode = loadRestJsonErrorCode(output, parsedOutput.body);
+ switch (errorCode) {
+ case "ExternalServiceException":
+ case "com.amazonaws.cognitoidentity#ExternalServiceException":
+ throw await de_ExternalServiceExceptionRes(parsedOutput, context);
+ case "InternalErrorException":
+ case "com.amazonaws.cognitoidentity#InternalErrorException":
+ throw await de_InternalErrorExceptionRes(parsedOutput, context);
+ case "InvalidParameterException":
+ case "com.amazonaws.cognitoidentity#InvalidParameterException":
+ throw await de_InvalidParameterExceptionRes(parsedOutput, context);
+ case "NotAuthorizedException":
+ case "com.amazonaws.cognitoidentity#NotAuthorizedException":
+ throw await de_NotAuthorizedExceptionRes(parsedOutput, context);
+ case "ResourceConflictException":
+ case "com.amazonaws.cognitoidentity#ResourceConflictException":
+ throw await de_ResourceConflictExceptionRes(parsedOutput, context);
+ case "ResourceNotFoundException":
+ case "com.amazonaws.cognitoidentity#ResourceNotFoundException":
+ throw await de_ResourceNotFoundExceptionRes(parsedOutput, context);
+ case "TooManyRequestsException":
+ case "com.amazonaws.cognitoidentity#TooManyRequestsException":
+ throw await de_TooManyRequestsExceptionRes(parsedOutput, context);
+ default:
+ const parsedBody = parsedOutput.body;
+ return throwDefaultError({
+ output,
+ parsedBody,
+ errorCode,
+ });
+ }
+};
+const de_UntagResourceCommand = async (output, context) => {
+ if (output.statusCode >= 300) {
+ return de_UntagResourceCommandError(output, context);
+ }
+ const data = await parseBody(output.body, context);
+ let contents = {};
+ contents = (0, smithy_client_1._json)(data);
+ const response = {
+ $metadata: deserializeMetadata(output),
+ ...contents,
+ };
+ return response;
+};
+exports.de_UntagResourceCommand = de_UntagResourceCommand;
+const de_UntagResourceCommandError = async (output, context) => {
+ const parsedOutput = {
+ ...output,
+ body: await parseErrorBody(output.body, context),
+ };
+ const errorCode = loadRestJsonErrorCode(output, parsedOutput.body);
+ switch (errorCode) {
+ case "InternalErrorException":
+ case "com.amazonaws.cognitoidentity#InternalErrorException":
+ throw await de_InternalErrorExceptionRes(parsedOutput, context);
+ case "InvalidParameterException":
+ case "com.amazonaws.cognitoidentity#InvalidParameterException":
+ throw await de_InvalidParameterExceptionRes(parsedOutput, context);
+ case "NotAuthorizedException":
+ case "com.amazonaws.cognitoidentity#NotAuthorizedException":
+ throw await de_NotAuthorizedExceptionRes(parsedOutput, context);
+ case "ResourceNotFoundException":
+ case "com.amazonaws.cognitoidentity#ResourceNotFoundException":
+ throw await de_ResourceNotFoundExceptionRes(parsedOutput, context);
+ case "TooManyRequestsException":
+ case "com.amazonaws.cognitoidentity#TooManyRequestsException":
+ throw await de_TooManyRequestsExceptionRes(parsedOutput, context);
+ default:
+ const parsedBody = parsedOutput.body;
+ return throwDefaultError({
+ output,
+ parsedBody,
+ errorCode,
+ });
+ }
+};
+const de_UpdateIdentityPoolCommand = async (output, context) => {
+ if (output.statusCode >= 300) {
+ return de_UpdateIdentityPoolCommandError(output, context);
+ }
+ const data = await parseBody(output.body, context);
+ let contents = {};
+ contents = (0, smithy_client_1._json)(data);
+ const response = {
+ $metadata: deserializeMetadata(output),
+ ...contents,
+ };
+ return response;
+};
+exports.de_UpdateIdentityPoolCommand = de_UpdateIdentityPoolCommand;
+const de_UpdateIdentityPoolCommandError = async (output, context) => {
+ const parsedOutput = {
+ ...output,
+ body: await parseErrorBody(output.body, context),
+ };
+ const errorCode = loadRestJsonErrorCode(output, parsedOutput.body);
+ switch (errorCode) {
+ case "ConcurrentModificationException":
+ case "com.amazonaws.cognitoidentity#ConcurrentModificationException":
+ throw await de_ConcurrentModificationExceptionRes(parsedOutput, context);
+ case "InternalErrorException":
+ case "com.amazonaws.cognitoidentity#InternalErrorException":
+ throw await de_InternalErrorExceptionRes(parsedOutput, context);
+ case "InvalidParameterException":
+ case "com.amazonaws.cognitoidentity#InvalidParameterException":
+ throw await de_InvalidParameterExceptionRes(parsedOutput, context);
+ case "LimitExceededException":
+ case "com.amazonaws.cognitoidentity#LimitExceededException":
+ throw await de_LimitExceededExceptionRes(parsedOutput, context);
+ case "NotAuthorizedException":
+ case "com.amazonaws.cognitoidentity#NotAuthorizedException":
+ throw await de_NotAuthorizedExceptionRes(parsedOutput, context);
+ case "ResourceConflictException":
+ case "com.amazonaws.cognitoidentity#ResourceConflictException":
+ throw await de_ResourceConflictExceptionRes(parsedOutput, context);
+ case "ResourceNotFoundException":
+ case "com.amazonaws.cognitoidentity#ResourceNotFoundException":
+ throw await de_ResourceNotFoundExceptionRes(parsedOutput, context);
+ case "TooManyRequestsException":
+ case "com.amazonaws.cognitoidentity#TooManyRequestsException":
+ throw await de_TooManyRequestsExceptionRes(parsedOutput, context);
+ default:
+ const parsedBody = parsedOutput.body;
+ return throwDefaultError({
+ output,
+ parsedBody,
+ errorCode,
+ });
+ }
+};
+const de_ConcurrentModificationExceptionRes = async (parsedOutput, context) => {
+ const body = parsedOutput.body;
+ const deserialized = (0, smithy_client_1._json)(body);
+ const exception = new models_0_1.ConcurrentModificationException({
+ $metadata: deserializeMetadata(parsedOutput),
+ ...deserialized,
+ });
+ return (0, smithy_client_1.decorateServiceException)(exception, body);
+};
+const de_DeveloperUserAlreadyRegisteredExceptionRes = async (parsedOutput, context) => {
+ const body = parsedOutput.body;
+ const deserialized = (0, smithy_client_1._json)(body);
+ const exception = new models_0_1.DeveloperUserAlreadyRegisteredException({
+ $metadata: deserializeMetadata(parsedOutput),
+ ...deserialized,
+ });
+ return (0, smithy_client_1.decorateServiceException)(exception, body);
+};
+const de_ExternalServiceExceptionRes = async (parsedOutput, context) => {
+ const body = parsedOutput.body;
+ const deserialized = (0, smithy_client_1._json)(body);
+ const exception = new models_0_1.ExternalServiceException({
+ $metadata: deserializeMetadata(parsedOutput),
+ ...deserialized,
+ });
+ return (0, smithy_client_1.decorateServiceException)(exception, body);
+};
+const de_InternalErrorExceptionRes = async (parsedOutput, context) => {
+ const body = parsedOutput.body;
+ const deserialized = (0, smithy_client_1._json)(body);
+ const exception = new models_0_1.InternalErrorException({
+ $metadata: deserializeMetadata(parsedOutput),
+ ...deserialized,
+ });
+ return (0, smithy_client_1.decorateServiceException)(exception, body);
+};
+const de_InvalidIdentityPoolConfigurationExceptionRes = async (parsedOutput, context) => {
+ const body = parsedOutput.body;
+ const deserialized = (0, smithy_client_1._json)(body);
+ const exception = new models_0_1.InvalidIdentityPoolConfigurationException({
+ $metadata: deserializeMetadata(parsedOutput),
+ ...deserialized,
+ });
+ return (0, smithy_client_1.decorateServiceException)(exception, body);
+};
+const de_InvalidParameterExceptionRes = async (parsedOutput, context) => {
+ const body = parsedOutput.body;
+ const deserialized = (0, smithy_client_1._json)(body);
+ const exception = new models_0_1.InvalidParameterException({
+ $metadata: deserializeMetadata(parsedOutput),
+ ...deserialized,
+ });
+ return (0, smithy_client_1.decorateServiceException)(exception, body);
+};
+const de_LimitExceededExceptionRes = async (parsedOutput, context) => {
+ const body = parsedOutput.body;
+ const deserialized = (0, smithy_client_1._json)(body);
+ const exception = new models_0_1.LimitExceededException({
+ $metadata: deserializeMetadata(parsedOutput),
+ ...deserialized,
+ });
+ return (0, smithy_client_1.decorateServiceException)(exception, body);
+};
+const de_NotAuthorizedExceptionRes = async (parsedOutput, context) => {
+ const body = parsedOutput.body;
+ const deserialized = (0, smithy_client_1._json)(body);
+ const exception = new models_0_1.NotAuthorizedException({
+ $metadata: deserializeMetadata(parsedOutput),
+ ...deserialized,
+ });
+ return (0, smithy_client_1.decorateServiceException)(exception, body);
+};
+const de_ResourceConflictExceptionRes = async (parsedOutput, context) => {
+ const body = parsedOutput.body;
+ const deserialized = (0, smithy_client_1._json)(body);
+ const exception = new models_0_1.ResourceConflictException({
+ $metadata: deserializeMetadata(parsedOutput),
+ ...deserialized,
+ });
+ return (0, smithy_client_1.decorateServiceException)(exception, body);
+};
+const de_ResourceNotFoundExceptionRes = async (parsedOutput, context) => {
+ const body = parsedOutput.body;
+ const deserialized = (0, smithy_client_1._json)(body);
+ const exception = new models_0_1.ResourceNotFoundException({
+ $metadata: deserializeMetadata(parsedOutput),
+ ...deserialized,
+ });
+ return (0, smithy_client_1.decorateServiceException)(exception, body);
+};
+const de_TooManyRequestsExceptionRes = async (parsedOutput, context) => {
+ const body = parsedOutput.body;
+ const deserialized = (0, smithy_client_1._json)(body);
+ const exception = new models_0_1.TooManyRequestsException({
+ $metadata: deserializeMetadata(parsedOutput),
+ ...deserialized,
+ });
+ return (0, smithy_client_1.decorateServiceException)(exception, body);
+};
+const de_Credentials = (output, context) => {
+ return (0, smithy_client_1.take)(output, {
+ AccessKeyId: smithy_client_1.expectString,
+ Expiration: (_) => (0, smithy_client_1.expectNonNull)((0, smithy_client_1.parseEpochTimestamp)((0, smithy_client_1.expectNumber)(_))),
+ SecretKey: smithy_client_1.expectString,
+ SessionToken: smithy_client_1.expectString,
+ });
+};
+const de_GetCredentialsForIdentityResponse = (output, context) => {
+ return (0, smithy_client_1.take)(output, {
+ Credentials: (_) => de_Credentials(_, context),
+ IdentityId: smithy_client_1.expectString,
+ });
+};
+const de_IdentitiesList = (output, context) => {
+ const retVal = (output || [])
+ .filter((e) => e != null)
+ .map((entry) => {
+ return de_IdentityDescription(entry, context);
+ });
+ return retVal;
+};
+const de_IdentityDescription = (output, context) => {
+ return (0, smithy_client_1.take)(output, {
+ CreationDate: (_) => (0, smithy_client_1.expectNonNull)((0, smithy_client_1.parseEpochTimestamp)((0, smithy_client_1.expectNumber)(_))),
+ IdentityId: smithy_client_1.expectString,
+ LastModifiedDate: (_) => (0, smithy_client_1.expectNonNull)((0, smithy_client_1.parseEpochTimestamp)((0, smithy_client_1.expectNumber)(_))),
+ Logins: smithy_client_1._json,
+ });
+};
+const de_ListIdentitiesResponse = (output, context) => {
+ return (0, smithy_client_1.take)(output, {
+ Identities: (_) => de_IdentitiesList(_, context),
+ IdentityPoolId: smithy_client_1.expectString,
+ NextToken: smithy_client_1.expectString,
+ });
+};
+const deserializeMetadata = (output) => ({
+ httpStatusCode: output.statusCode,
+ requestId: output.headers["x-amzn-requestid"] ?? output.headers["x-amzn-request-id"] ?? output.headers["x-amz-request-id"],
+ extendedRequestId: output.headers["x-amz-id-2"],
+ cfId: output.headers["x-amz-cf-id"],
+});
+const collectBodyString = (streamBody, context) => (0, smithy_client_1.collectBody)(streamBody, context).then((body) => context.utf8Encoder(body));
+const throwDefaultError = (0, smithy_client_1.withBaseException)(CognitoIdentityServiceException_1.CognitoIdentityServiceException);
+const buildHttpRpcRequest = async (context, headers, path, resolvedHostname, body) => {
+ const { hostname, protocol = "https", port, path: basePath } = await context.endpoint();
+ const contents = {
+ protocol,
+ hostname,
+ port,
+ method: "POST",
+ path: basePath.endsWith("/") ? basePath.slice(0, -1) + path : basePath + path,
+ headers,
+ };
+ if (resolvedHostname !== undefined) {
+ contents.hostname = resolvedHostname;
+ }
+ if (body !== undefined) {
+ contents.body = body;
+ }
+ return new protocol_http_1.HttpRequest(contents);
+};
+function sharedHeaders(operation) {
+ return {
+ "content-type": "application/x-amz-json-1.1",
+ "x-amz-target": `AWSCognitoIdentityService.${operation}`,
+ };
+}
+const parseBody = (streamBody, context) => collectBodyString(streamBody, context).then((encoded) => {
+ if (encoded.length) {
+ return JSON.parse(encoded);
+ }
+ return {};
+});
+const parseErrorBody = async (errorBody, context) => {
+ const value = await parseBody(errorBody, context);
+ value.message = value.message ?? value.Message;
+ return value;
+};
+const loadRestJsonErrorCode = (output, data) => {
+ const findKey = (object, key) => Object.keys(object).find((k) => k.toLowerCase() === key.toLowerCase());
+ const sanitizeErrorCode = (rawValue) => {
+ let cleanValue = rawValue;
+ if (typeof cleanValue === "number") {
+ cleanValue = cleanValue.toString();
+ }
+ if (cleanValue.indexOf(",") >= 0) {
+ cleanValue = cleanValue.split(",")[0];
+ }
+ if (cleanValue.indexOf(":") >= 0) {
+ cleanValue = cleanValue.split(":")[0];
+ }
+ if (cleanValue.indexOf("#") >= 0) {
+ cleanValue = cleanValue.split("#")[1];
+ }
+ return cleanValue;
+ };
+ const headerKey = findKey(output.headers, "x-amzn-errortype");
+ if (headerKey !== undefined) {
+ return sanitizeErrorCode(output.headers[headerKey]);
+ }
+ if (data.code !== undefined) {
+ return sanitizeErrorCode(data.code);
+ }
+ if (data["__type"] !== undefined) {
+ return sanitizeErrorCode(data["__type"]);
+ }
+};
+
+
+/***/ }),
+
+/***/ 26042:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.getRuntimeConfig = void 0;
+const tslib_1 = __nccwpck_require__(4351);
+const package_json_1 = tslib_1.__importDefault(__nccwpck_require__(63239));
+const client_sts_1 = __nccwpck_require__(52209);
+const core_1 = __nccwpck_require__(59963);
+const credential_provider_node_1 = __nccwpck_require__(75531);
+const util_user_agent_node_1 = __nccwpck_require__(98095);
+const config_resolver_1 = __nccwpck_require__(53098);
+const hash_node_1 = __nccwpck_require__(3081);
+const middleware_retry_1 = __nccwpck_require__(96039);
+const node_config_provider_1 = __nccwpck_require__(33461);
+const node_http_handler_1 = __nccwpck_require__(20258);
+const util_body_length_node_1 = __nccwpck_require__(68075);
+const util_retry_1 = __nccwpck_require__(84902);
+const runtimeConfig_shared_1 = __nccwpck_require__(22434);
+const smithy_client_1 = __nccwpck_require__(63570);
+const util_defaults_mode_node_1 = __nccwpck_require__(72429);
+const smithy_client_2 = __nccwpck_require__(63570);
+const getRuntimeConfig = (config) => {
+ (0, smithy_client_2.emitWarningIfUnsupportedVersion)(process.version);
+ const defaultsMode = (0, util_defaults_mode_node_1.resolveDefaultsModeConfig)(config);
+ const defaultConfigProvider = () => defaultsMode().then(smithy_client_1.loadConfigsForDefaultMode);
+ const clientSharedValues = (0, runtimeConfig_shared_1.getRuntimeConfig)(config);
+ (0, core_1.emitWarningIfUnsupportedVersion)(process.version);
+ return {
+ ...clientSharedValues,
+ ...config,
+ runtime: "node",
+ defaultsMode,
+ bodyLengthChecker: config?.bodyLengthChecker ?? util_body_length_node_1.calculateBodyLength,
+ credentialDefaultProvider: config?.credentialDefaultProvider ?? (0, client_sts_1.decorateDefaultCredentialProvider)(credential_provider_node_1.defaultProvider),
+ defaultUserAgentProvider: config?.defaultUserAgentProvider ??
+ (0, util_user_agent_node_1.defaultUserAgent)({ serviceId: clientSharedValues.serviceId, clientVersion: package_json_1.default.version }),
+ maxAttempts: config?.maxAttempts ?? (0, node_config_provider_1.loadConfig)(middleware_retry_1.NODE_MAX_ATTEMPT_CONFIG_OPTIONS),
+ region: config?.region ?? (0, node_config_provider_1.loadConfig)(config_resolver_1.NODE_REGION_CONFIG_OPTIONS, config_resolver_1.NODE_REGION_CONFIG_FILE_OPTIONS),
+ requestHandler: config?.requestHandler ?? new node_http_handler_1.NodeHttpHandler(defaultConfigProvider),
+ retryMode: config?.retryMode ??
+ (0, node_config_provider_1.loadConfig)({
+ ...middleware_retry_1.NODE_RETRY_MODE_CONFIG_OPTIONS,
+ default: async () => (await defaultConfigProvider()).retryMode || util_retry_1.DEFAULT_RETRY_MODE,
+ }),
+ sha256: config?.sha256 ?? hash_node_1.Hash.bind(null, "sha256"),
+ streamCollector: config?.streamCollector ?? node_http_handler_1.streamCollector,
+ useDualstackEndpoint: config?.useDualstackEndpoint ?? (0, node_config_provider_1.loadConfig)(config_resolver_1.NODE_USE_DUALSTACK_ENDPOINT_CONFIG_OPTIONS),
+ useFipsEndpoint: config?.useFipsEndpoint ?? (0, node_config_provider_1.loadConfig)(config_resolver_1.NODE_USE_FIPS_ENDPOINT_CONFIG_OPTIONS),
+ };
+};
+exports.getRuntimeConfig = getRuntimeConfig;
+
+
+/***/ }),
+
+/***/ 22434:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.getRuntimeConfig = void 0;
+const smithy_client_1 = __nccwpck_require__(63570);
+const url_parser_1 = __nccwpck_require__(14681);
+const util_base64_1 = __nccwpck_require__(75600);
+const util_utf8_1 = __nccwpck_require__(41895);
+const endpointResolver_1 = __nccwpck_require__(58554);
+const getRuntimeConfig = (config) => {
+ return {
+ apiVersion: "2014-06-30",
+ base64Decoder: config?.base64Decoder ?? util_base64_1.fromBase64,
+ base64Encoder: config?.base64Encoder ?? util_base64_1.toBase64,
+ disableHostPrefix: config?.disableHostPrefix ?? false,
+ endpointProvider: config?.endpointProvider ?? endpointResolver_1.defaultEndpointResolver,
+ extensions: config?.extensions ?? [],
+ logger: config?.logger ?? new smithy_client_1.NoOpLogger(),
+ serviceId: config?.serviceId ?? "Cognito Identity",
+ urlParser: config?.urlParser ?? url_parser_1.parseUrl,
+ utf8Decoder: config?.utf8Decoder ?? util_utf8_1.fromUtf8,
+ utf8Encoder: config?.utf8Encoder ?? util_utf8_1.toUtf8,
+ };
+};
+exports.getRuntimeConfig = getRuntimeConfig;
+
+
+/***/ }),
+
+/***/ 48062:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.resolveRuntimeExtensions = void 0;
+const region_config_resolver_1 = __nccwpck_require__(18156);
+const protocol_http_1 = __nccwpck_require__(64418);
+const smithy_client_1 = __nccwpck_require__(63570);
+const asPartial = (t) => t;
+const resolveRuntimeExtensions = (runtimeConfig, extensions) => {
+ const extensionConfiguration = {
+ ...asPartial((0, region_config_resolver_1.getAwsRegionExtensionConfiguration)(runtimeConfig)),
+ ...asPartial((0, smithy_client_1.getDefaultExtensionConfiguration)(runtimeConfig)),
+ ...asPartial((0, protocol_http_1.getHttpHandlerExtensionConfiguration)(runtimeConfig)),
+ };
+ extensions.forEach((extension) => extension.configure(extensionConfiguration));
+ return {
+ ...runtimeConfig,
+ ...(0, region_config_resolver_1.resolveAwsRegionExtensionConfiguration)(extensionConfiguration),
+ ...(0, smithy_client_1.resolveDefaultRuntimeConfig)(extensionConfiguration),
+ ...(0, protocol_http_1.resolveHttpHandlerRuntimeConfig)(extensionConfiguration),
+ };
+};
+exports.resolveRuntimeExtensions = resolveRuntimeExtensions;
+
+
+/***/ }),
+
+/***/ 69838:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.SSO = void 0;
+const smithy_client_1 = __nccwpck_require__(63570);
+const GetRoleCredentialsCommand_1 = __nccwpck_require__(18972);
+const ListAccountRolesCommand_1 = __nccwpck_require__(1513);
+const ListAccountsCommand_1 = __nccwpck_require__(64296);
+const LogoutCommand_1 = __nccwpck_require__(12586);
+const SSOClient_1 = __nccwpck_require__(71057);
+const commands = {
+ GetRoleCredentialsCommand: GetRoleCredentialsCommand_1.GetRoleCredentialsCommand,
+ ListAccountRolesCommand: ListAccountRolesCommand_1.ListAccountRolesCommand,
+ ListAccountsCommand: ListAccountsCommand_1.ListAccountsCommand,
+ LogoutCommand: LogoutCommand_1.LogoutCommand,
+};
+class SSO extends SSOClient_1.SSOClient {
+}
+exports.SSO = SSO;
+(0, smithy_client_1.createAggregatedClient)(commands, SSO);
+
+
+/***/ }),
+
+/***/ 71057:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.SSOClient = exports.__Client = void 0;
+const middleware_host_header_1 = __nccwpck_require__(22545);
+const middleware_logger_1 = __nccwpck_require__(20014);
+const middleware_recursion_detection_1 = __nccwpck_require__(85525);
+const middleware_user_agent_1 = __nccwpck_require__(64688);
+const config_resolver_1 = __nccwpck_require__(53098);
+const middleware_content_length_1 = __nccwpck_require__(82800);
+const middleware_endpoint_1 = __nccwpck_require__(82918);
+const middleware_retry_1 = __nccwpck_require__(96039);
+const smithy_client_1 = __nccwpck_require__(63570);
+Object.defineProperty(exports, "__Client", ({ enumerable: true, get: function () { return smithy_client_1.Client; } }));
+const EndpointParameters_1 = __nccwpck_require__(34214);
+const runtimeConfig_1 = __nccwpck_require__(19756);
+const runtimeExtensions_1 = __nccwpck_require__(63398);
+class SSOClient extends smithy_client_1.Client {
+ constructor(...[configuration]) {
+ const _config_0 = (0, runtimeConfig_1.getRuntimeConfig)(configuration || {});
+ const _config_1 = (0, EndpointParameters_1.resolveClientEndpointParameters)(_config_0);
+ const _config_2 = (0, config_resolver_1.resolveRegionConfig)(_config_1);
+ const _config_3 = (0, middleware_endpoint_1.resolveEndpointConfig)(_config_2);
+ const _config_4 = (0, middleware_retry_1.resolveRetryConfig)(_config_3);
+ const _config_5 = (0, middleware_host_header_1.resolveHostHeaderConfig)(_config_4);
+ const _config_6 = (0, middleware_user_agent_1.resolveUserAgentConfig)(_config_5);
+ const _config_7 = (0, runtimeExtensions_1.resolveRuntimeExtensions)(_config_6, configuration?.extensions || []);
+ super(_config_7);
+ this.config = _config_7;
+ this.middlewareStack.use((0, middleware_retry_1.getRetryPlugin)(this.config));
+ this.middlewareStack.use((0, middleware_content_length_1.getContentLengthPlugin)(this.config));
+ this.middlewareStack.use((0, middleware_host_header_1.getHostHeaderPlugin)(this.config));
+ this.middlewareStack.use((0, middleware_logger_1.getLoggerPlugin)(this.config));
+ this.middlewareStack.use((0, middleware_recursion_detection_1.getRecursionDetectionPlugin)(this.config));
+ this.middlewareStack.use((0, middleware_user_agent_1.getUserAgentPlugin)(this.config));
+ }
+ destroy() {
+ super.destroy();
+ }
+}
+exports.SSOClient = SSOClient;
+
+
+/***/ }),
+
+/***/ 18972:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.GetRoleCredentialsCommand = exports.$Command = void 0;
+const middleware_endpoint_1 = __nccwpck_require__(82918);
+const middleware_serde_1 = __nccwpck_require__(81238);
+const smithy_client_1 = __nccwpck_require__(63570);
+Object.defineProperty(exports, "$Command", ({ enumerable: true, get: function () { return smithy_client_1.Command; } }));
+const types_1 = __nccwpck_require__(55756);
+const models_0_1 = __nccwpck_require__(66390);
+const Aws_restJson1_1 = __nccwpck_require__(98507);
+class GetRoleCredentialsCommand extends smithy_client_1.Command {
+ static getEndpointParameterInstructions() {
+ return {
+ UseFIPS: { type: "builtInParams", name: "useFipsEndpoint" },
+ Endpoint: { type: "builtInParams", name: "endpoint" },
+ Region: { type: "builtInParams", name: "region" },
+ UseDualStack: { type: "builtInParams", name: "useDualstackEndpoint" },
+ };
+ }
+ constructor(input) {
+ super();
+ this.input = input;
+ }
+ resolveMiddleware(clientStack, configuration, options) {
+ this.middlewareStack.use((0, middleware_serde_1.getSerdePlugin)(configuration, this.serialize, this.deserialize));
+ this.middlewareStack.use((0, middleware_endpoint_1.getEndpointPlugin)(configuration, GetRoleCredentialsCommand.getEndpointParameterInstructions()));
+ const stack = clientStack.concat(this.middlewareStack);
+ const { logger } = configuration;
+ const clientName = "SSOClient";
+ const commandName = "GetRoleCredentialsCommand";
+ const handlerExecutionContext = {
+ logger,
+ clientName,
+ commandName,
+ inputFilterSensitiveLog: models_0_1.GetRoleCredentialsRequestFilterSensitiveLog,
+ outputFilterSensitiveLog: models_0_1.GetRoleCredentialsResponseFilterSensitiveLog,
+ [types_1.SMITHY_CONTEXT_KEY]: {
+ service: "SWBPortalService",
+ operation: "GetRoleCredentials",
+ },
+ };
+ const { requestHandler } = configuration;
+ return stack.resolve((request) => requestHandler.handle(request.request, options || {}), handlerExecutionContext);
+ }
+ serialize(input, context) {
+ return (0, Aws_restJson1_1.se_GetRoleCredentialsCommand)(input, context);
+ }
+ deserialize(output, context) {
+ return (0, Aws_restJson1_1.de_GetRoleCredentialsCommand)(output, context);
+ }
+}
+exports.GetRoleCredentialsCommand = GetRoleCredentialsCommand;
+
+
+/***/ }),
+
+/***/ 1513:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.ListAccountRolesCommand = exports.$Command = void 0;
+const middleware_endpoint_1 = __nccwpck_require__(82918);
+const middleware_serde_1 = __nccwpck_require__(81238);
+const smithy_client_1 = __nccwpck_require__(63570);
+Object.defineProperty(exports, "$Command", ({ enumerable: true, get: function () { return smithy_client_1.Command; } }));
+const types_1 = __nccwpck_require__(55756);
+const models_0_1 = __nccwpck_require__(66390);
+const Aws_restJson1_1 = __nccwpck_require__(98507);
+class ListAccountRolesCommand extends smithy_client_1.Command {
+ static getEndpointParameterInstructions() {
+ return {
+ UseFIPS: { type: "builtInParams", name: "useFipsEndpoint" },
+ Endpoint: { type: "builtInParams", name: "endpoint" },
+ Region: { type: "builtInParams", name: "region" },
+ UseDualStack: { type: "builtInParams", name: "useDualstackEndpoint" },
+ };
+ }
+ constructor(input) {
+ super();
+ this.input = input;
+ }
+ resolveMiddleware(clientStack, configuration, options) {
+ this.middlewareStack.use((0, middleware_serde_1.getSerdePlugin)(configuration, this.serialize, this.deserialize));
+ this.middlewareStack.use((0, middleware_endpoint_1.getEndpointPlugin)(configuration, ListAccountRolesCommand.getEndpointParameterInstructions()));
+ const stack = clientStack.concat(this.middlewareStack);
+ const { logger } = configuration;
+ const clientName = "SSOClient";
+ const commandName = "ListAccountRolesCommand";
+ const handlerExecutionContext = {
+ logger,
+ clientName,
+ commandName,
+ inputFilterSensitiveLog: models_0_1.ListAccountRolesRequestFilterSensitiveLog,
+ outputFilterSensitiveLog: (_) => _,
+ [types_1.SMITHY_CONTEXT_KEY]: {
+ service: "SWBPortalService",
+ operation: "ListAccountRoles",
+ },
+ };
+ const { requestHandler } = configuration;
+ return stack.resolve((request) => requestHandler.handle(request.request, options || {}), handlerExecutionContext);
+ }
+ serialize(input, context) {
+ return (0, Aws_restJson1_1.se_ListAccountRolesCommand)(input, context);
+ }
+ deserialize(output, context) {
+ return (0, Aws_restJson1_1.de_ListAccountRolesCommand)(output, context);
+ }
+}
+exports.ListAccountRolesCommand = ListAccountRolesCommand;
+
+
+/***/ }),
+
+/***/ 64296:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.ListAccountsCommand = exports.$Command = void 0;
+const middleware_endpoint_1 = __nccwpck_require__(82918);
+const middleware_serde_1 = __nccwpck_require__(81238);
+const smithy_client_1 = __nccwpck_require__(63570);
+Object.defineProperty(exports, "$Command", ({ enumerable: true, get: function () { return smithy_client_1.Command; } }));
+const types_1 = __nccwpck_require__(55756);
+const models_0_1 = __nccwpck_require__(66390);
+const Aws_restJson1_1 = __nccwpck_require__(98507);
+class ListAccountsCommand extends smithy_client_1.Command {
+ static getEndpointParameterInstructions() {
+ return {
+ UseFIPS: { type: "builtInParams", name: "useFipsEndpoint" },
+ Endpoint: { type: "builtInParams", name: "endpoint" },
+ Region: { type: "builtInParams", name: "region" },
+ UseDualStack: { type: "builtInParams", name: "useDualstackEndpoint" },
+ };
+ }
+ constructor(input) {
+ super();
+ this.input = input;
+ }
+ resolveMiddleware(clientStack, configuration, options) {
+ this.middlewareStack.use((0, middleware_serde_1.getSerdePlugin)(configuration, this.serialize, this.deserialize));
+ this.middlewareStack.use((0, middleware_endpoint_1.getEndpointPlugin)(configuration, ListAccountsCommand.getEndpointParameterInstructions()));
+ const stack = clientStack.concat(this.middlewareStack);
+ const { logger } = configuration;
+ const clientName = "SSOClient";
+ const commandName = "ListAccountsCommand";
+ const handlerExecutionContext = {
+ logger,
+ clientName,
+ commandName,
+ inputFilterSensitiveLog: models_0_1.ListAccountsRequestFilterSensitiveLog,
+ outputFilterSensitiveLog: (_) => _,
+ [types_1.SMITHY_CONTEXT_KEY]: {
+ service: "SWBPortalService",
+ operation: "ListAccounts",
+ },
+ };
+ const { requestHandler } = configuration;
+ return stack.resolve((request) => requestHandler.handle(request.request, options || {}), handlerExecutionContext);
+ }
+ serialize(input, context) {
+ return (0, Aws_restJson1_1.se_ListAccountsCommand)(input, context);
+ }
+ deserialize(output, context) {
+ return (0, Aws_restJson1_1.de_ListAccountsCommand)(output, context);
+ }
+}
+exports.ListAccountsCommand = ListAccountsCommand;
+
+
+/***/ }),
+
+/***/ 12586:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.LogoutCommand = exports.$Command = void 0;
+const middleware_endpoint_1 = __nccwpck_require__(82918);
+const middleware_serde_1 = __nccwpck_require__(81238);
+const smithy_client_1 = __nccwpck_require__(63570);
+Object.defineProperty(exports, "$Command", ({ enumerable: true, get: function () { return smithy_client_1.Command; } }));
+const types_1 = __nccwpck_require__(55756);
+const models_0_1 = __nccwpck_require__(66390);
+const Aws_restJson1_1 = __nccwpck_require__(98507);
+class LogoutCommand extends smithy_client_1.Command {
+ static getEndpointParameterInstructions() {
+ return {
+ UseFIPS: { type: "builtInParams", name: "useFipsEndpoint" },
+ Endpoint: { type: "builtInParams", name: "endpoint" },
+ Region: { type: "builtInParams", name: "region" },
+ UseDualStack: { type: "builtInParams", name: "useDualstackEndpoint" },
+ };
+ }
+ constructor(input) {
+ super();
+ this.input = input;
+ }
+ resolveMiddleware(clientStack, configuration, options) {
+ this.middlewareStack.use((0, middleware_serde_1.getSerdePlugin)(configuration, this.serialize, this.deserialize));
+ this.middlewareStack.use((0, middleware_endpoint_1.getEndpointPlugin)(configuration, LogoutCommand.getEndpointParameterInstructions()));
+ const stack = clientStack.concat(this.middlewareStack);
+ const { logger } = configuration;
+ const clientName = "SSOClient";
+ const commandName = "LogoutCommand";
+ const handlerExecutionContext = {
+ logger,
+ clientName,
+ commandName,
+ inputFilterSensitiveLog: models_0_1.LogoutRequestFilterSensitiveLog,
+ outputFilterSensitiveLog: (_) => _,
+ [types_1.SMITHY_CONTEXT_KEY]: {
+ service: "SWBPortalService",
+ operation: "Logout",
+ },
+ };
+ const { requestHandler } = configuration;
+ return stack.resolve((request) => requestHandler.handle(request.request, options || {}), handlerExecutionContext);
+ }
+ serialize(input, context) {
+ return (0, Aws_restJson1_1.se_LogoutCommand)(input, context);
+ }
+ deserialize(output, context) {
+ return (0, Aws_restJson1_1.de_LogoutCommand)(output, context);
+ }
+}
+exports.LogoutCommand = LogoutCommand;
+
+
+/***/ }),
+
+/***/ 65706:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+const tslib_1 = __nccwpck_require__(4351);
+tslib_1.__exportStar(__nccwpck_require__(18972), exports);
+tslib_1.__exportStar(__nccwpck_require__(1513), exports);
+tslib_1.__exportStar(__nccwpck_require__(64296), exports);
+tslib_1.__exportStar(__nccwpck_require__(12586), exports);
+
+
+/***/ }),
+
+/***/ 34214:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.resolveClientEndpointParameters = void 0;
+const resolveClientEndpointParameters = (options) => {
+ return {
+ ...options,
+ useDualstackEndpoint: options.useDualstackEndpoint ?? false,
+ useFipsEndpoint: options.useFipsEndpoint ?? false,
+ defaultSigningName: "awsssoportal",
+ };
+};
+exports.resolveClientEndpointParameters = resolveClientEndpointParameters;
+
+
+/***/ }),
+
+/***/ 30898:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.defaultEndpointResolver = void 0;
+const util_endpoints_1 = __nccwpck_require__(13350);
+const ruleset_1 = __nccwpck_require__(13341);
+const defaultEndpointResolver = (endpointParams, context = {}) => {
+ return (0, util_endpoints_1.resolveEndpoint)(ruleset_1.ruleSet, {
+ endpointParams: endpointParams,
+ logger: context.logger,
+ });
+};
+exports.defaultEndpointResolver = defaultEndpointResolver;
+
+
+/***/ }),
+
+/***/ 13341:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.ruleSet = void 0;
+const u = "required", v = "fn", w = "argv", x = "ref";
+const a = true, b = "isSet", c = "booleanEquals", d = "error", e = "endpoint", f = "tree", g = "PartitionResult", h = "getAttr", i = { [u]: false, "type": "String" }, j = { [u]: true, "default": false, "type": "Boolean" }, k = { [x]: "Endpoint" }, l = { [v]: c, [w]: [{ [x]: "UseFIPS" }, true] }, m = { [v]: c, [w]: [{ [x]: "UseDualStack" }, true] }, n = {}, o = { [v]: h, [w]: [{ [x]: g }, "supportsFIPS"] }, p = { [x]: g }, q = { [v]: c, [w]: [true, { [v]: h, [w]: [p, "supportsDualStack"] }] }, r = [l], s = [m], t = [{ [x]: "Region" }];
+const _data = { version: "1.0", parameters: { Region: i, UseDualStack: j, UseFIPS: j, Endpoint: i }, rules: [{ conditions: [{ [v]: b, [w]: [k] }], rules: [{ conditions: r, error: "Invalid Configuration: FIPS and custom endpoint are not supported", type: d }, { conditions: s, error: "Invalid Configuration: Dualstack and custom endpoint are not supported", type: d }, { endpoint: { url: k, properties: n, headers: n }, type: e }], type: f }, { conditions: [{ [v]: b, [w]: t }], rules: [{ conditions: [{ [v]: "aws.partition", [w]: t, assign: g }], rules: [{ conditions: [l, m], rules: [{ conditions: [{ [v]: c, [w]: [a, o] }, q], rules: [{ endpoint: { url: "https://portal.sso-fips.{Region}.{PartitionResult#dualStackDnsSuffix}", properties: n, headers: n }, type: e }], type: f }, { error: "FIPS and DualStack are enabled, but this partition does not support one or both", type: d }], type: f }, { conditions: r, rules: [{ conditions: [{ [v]: c, [w]: [o, a] }], rules: [{ conditions: [{ [v]: "stringEquals", [w]: [{ [v]: h, [w]: [p, "name"] }, "aws-us-gov"] }], endpoint: { url: "https://portal.sso.{Region}.amazonaws.com", properties: n, headers: n }, type: e }, { endpoint: { url: "https://portal.sso-fips.{Region}.{PartitionResult#dnsSuffix}", properties: n, headers: n }, type: e }], type: f }, { error: "FIPS is enabled but this partition does not support FIPS", type: d }], type: f }, { conditions: s, rules: [{ conditions: [q], rules: [{ endpoint: { url: "https://portal.sso.{Region}.{PartitionResult#dualStackDnsSuffix}", properties: n, headers: n }, type: e }], type: f }, { error: "DualStack is enabled but this partition does not support DualStack", type: d }], type: f }, { endpoint: { url: "https://portal.sso.{Region}.{PartitionResult#dnsSuffix}", properties: n, headers: n }, type: e }], type: f }], type: f }, { error: "Invalid Configuration: Missing Region", type: d }] };
+exports.ruleSet = _data;
+
+
+/***/ }),
+
+/***/ 82666:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.SSOServiceException = void 0;
+const tslib_1 = __nccwpck_require__(4351);
+tslib_1.__exportStar(__nccwpck_require__(71057), exports);
+tslib_1.__exportStar(__nccwpck_require__(69838), exports);
+tslib_1.__exportStar(__nccwpck_require__(65706), exports);
+tslib_1.__exportStar(__nccwpck_require__(36773), exports);
+tslib_1.__exportStar(__nccwpck_require__(14952), exports);
+var SSOServiceException_1 = __nccwpck_require__(81517);
+Object.defineProperty(exports, "SSOServiceException", ({ enumerable: true, get: function () { return SSOServiceException_1.SSOServiceException; } }));
+
+
+/***/ }),
+
+/***/ 81517:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.SSOServiceException = exports.__ServiceException = void 0;
+const smithy_client_1 = __nccwpck_require__(63570);
+Object.defineProperty(exports, "__ServiceException", ({ enumerable: true, get: function () { return smithy_client_1.ServiceException; } }));
+class SSOServiceException extends smithy_client_1.ServiceException {
+ constructor(options) {
+ super(options);
+ Object.setPrototypeOf(this, SSOServiceException.prototype);
+ }
+}
+exports.SSOServiceException = SSOServiceException;
+
+
+/***/ }),
+
+/***/ 14952:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+const tslib_1 = __nccwpck_require__(4351);
+tslib_1.__exportStar(__nccwpck_require__(66390), exports);
+
+
+/***/ }),
+
+/***/ 66390:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.LogoutRequestFilterSensitiveLog = exports.ListAccountsRequestFilterSensitiveLog = exports.ListAccountRolesRequestFilterSensitiveLog = exports.GetRoleCredentialsResponseFilterSensitiveLog = exports.RoleCredentialsFilterSensitiveLog = exports.GetRoleCredentialsRequestFilterSensitiveLog = exports.UnauthorizedException = exports.TooManyRequestsException = exports.ResourceNotFoundException = exports.InvalidRequestException = void 0;
+const smithy_client_1 = __nccwpck_require__(63570);
+const SSOServiceException_1 = __nccwpck_require__(81517);
+class InvalidRequestException extends SSOServiceException_1.SSOServiceException {
+ constructor(opts) {
+ super({
+ name: "InvalidRequestException",
+ $fault: "client",
+ ...opts,
+ });
+ this.name = "InvalidRequestException";
+ this.$fault = "client";
+ Object.setPrototypeOf(this, InvalidRequestException.prototype);
+ }
+}
+exports.InvalidRequestException = InvalidRequestException;
+class ResourceNotFoundException extends SSOServiceException_1.SSOServiceException {
+ constructor(opts) {
+ super({
+ name: "ResourceNotFoundException",
+ $fault: "client",
+ ...opts,
+ });
+ this.name = "ResourceNotFoundException";
+ this.$fault = "client";
+ Object.setPrototypeOf(this, ResourceNotFoundException.prototype);
+ }
+}
+exports.ResourceNotFoundException = ResourceNotFoundException;
+class TooManyRequestsException extends SSOServiceException_1.SSOServiceException {
+ constructor(opts) {
+ super({
+ name: "TooManyRequestsException",
+ $fault: "client",
+ ...opts,
+ });
+ this.name = "TooManyRequestsException";
+ this.$fault = "client";
+ Object.setPrototypeOf(this, TooManyRequestsException.prototype);
+ }
+}
+exports.TooManyRequestsException = TooManyRequestsException;
+class UnauthorizedException extends SSOServiceException_1.SSOServiceException {
+ constructor(opts) {
+ super({
+ name: "UnauthorizedException",
+ $fault: "client",
+ ...opts,
+ });
+ this.name = "UnauthorizedException";
+ this.$fault = "client";
+ Object.setPrototypeOf(this, UnauthorizedException.prototype);
+ }
+}
+exports.UnauthorizedException = UnauthorizedException;
+const GetRoleCredentialsRequestFilterSensitiveLog = (obj) => ({
+ ...obj,
+ ...(obj.accessToken && { accessToken: smithy_client_1.SENSITIVE_STRING }),
+});
+exports.GetRoleCredentialsRequestFilterSensitiveLog = GetRoleCredentialsRequestFilterSensitiveLog;
+const RoleCredentialsFilterSensitiveLog = (obj) => ({
+ ...obj,
+ ...(obj.secretAccessKey && { secretAccessKey: smithy_client_1.SENSITIVE_STRING }),
+ ...(obj.sessionToken && { sessionToken: smithy_client_1.SENSITIVE_STRING }),
+});
+exports.RoleCredentialsFilterSensitiveLog = RoleCredentialsFilterSensitiveLog;
+const GetRoleCredentialsResponseFilterSensitiveLog = (obj) => ({
+ ...obj,
+ ...(obj.roleCredentials && { roleCredentials: (0, exports.RoleCredentialsFilterSensitiveLog)(obj.roleCredentials) }),
+});
+exports.GetRoleCredentialsResponseFilterSensitiveLog = GetRoleCredentialsResponseFilterSensitiveLog;
+const ListAccountRolesRequestFilterSensitiveLog = (obj) => ({
+ ...obj,
+ ...(obj.accessToken && { accessToken: smithy_client_1.SENSITIVE_STRING }),
+});
+exports.ListAccountRolesRequestFilterSensitiveLog = ListAccountRolesRequestFilterSensitiveLog;
+const ListAccountsRequestFilterSensitiveLog = (obj) => ({
+ ...obj,
+ ...(obj.accessToken && { accessToken: smithy_client_1.SENSITIVE_STRING }),
+});
+exports.ListAccountsRequestFilterSensitiveLog = ListAccountsRequestFilterSensitiveLog;
+const LogoutRequestFilterSensitiveLog = (obj) => ({
+ ...obj,
+ ...(obj.accessToken && { accessToken: smithy_client_1.SENSITIVE_STRING }),
+});
+exports.LogoutRequestFilterSensitiveLog = LogoutRequestFilterSensitiveLog;
+
+
+/***/ }),
+
+/***/ 80849:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+
+
+/***/ }),
+
+/***/ 88460:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.paginateListAccountRoles = void 0;
+const ListAccountRolesCommand_1 = __nccwpck_require__(1513);
+const SSOClient_1 = __nccwpck_require__(71057);
+const makePagedClientRequest = async (client, input, ...args) => {
+ return await client.send(new ListAccountRolesCommand_1.ListAccountRolesCommand(input), ...args);
+};
+async function* paginateListAccountRoles(config, input, ...additionalArguments) {
+ let token = config.startingToken || undefined;
+ let hasNext = true;
+ let page;
+ while (hasNext) {
+ input.nextToken = token;
+ input["maxResults"] = config.pageSize;
+ if (config.client instanceof SSOClient_1.SSOClient) {
+ page = await makePagedClientRequest(config.client, input, ...additionalArguments);
+ }
+ else {
+ throw new Error("Invalid client, expected SSO | SSOClient");
+ }
+ yield page;
+ const prevToken = token;
+ token = page.nextToken;
+ hasNext = !!(token && (!config.stopOnSameToken || token !== prevToken));
+ }
+ return undefined;
+}
+exports.paginateListAccountRoles = paginateListAccountRoles;
+
+
+/***/ }),
+
+/***/ 50938:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.paginateListAccounts = void 0;
+const ListAccountsCommand_1 = __nccwpck_require__(64296);
+const SSOClient_1 = __nccwpck_require__(71057);
+const makePagedClientRequest = async (client, input, ...args) => {
+ return await client.send(new ListAccountsCommand_1.ListAccountsCommand(input), ...args);
+};
+async function* paginateListAccounts(config, input, ...additionalArguments) {
+ let token = config.startingToken || undefined;
+ let hasNext = true;
+ let page;
+ while (hasNext) {
+ input.nextToken = token;
+ input["maxResults"] = config.pageSize;
+ if (config.client instanceof SSOClient_1.SSOClient) {
+ page = await makePagedClientRequest(config.client, input, ...additionalArguments);
+ }
+ else {
+ throw new Error("Invalid client, expected SSO | SSOClient");
+ }
+ yield page;
+ const prevToken = token;
+ token = page.nextToken;
+ hasNext = !!(token && (!config.stopOnSameToken || token !== prevToken));
+ }
+ return undefined;
+}
+exports.paginateListAccounts = paginateListAccounts;
+
+
+/***/ }),
+
+/***/ 36773:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+const tslib_1 = __nccwpck_require__(4351);
+tslib_1.__exportStar(__nccwpck_require__(80849), exports);
+tslib_1.__exportStar(__nccwpck_require__(88460), exports);
+tslib_1.__exportStar(__nccwpck_require__(50938), exports);
+
+
+/***/ }),
+
+/***/ 98507:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.de_LogoutCommand = exports.de_ListAccountsCommand = exports.de_ListAccountRolesCommand = exports.de_GetRoleCredentialsCommand = exports.se_LogoutCommand = exports.se_ListAccountsCommand = exports.se_ListAccountRolesCommand = exports.se_GetRoleCredentialsCommand = void 0;
+const protocol_http_1 = __nccwpck_require__(64418);
+const smithy_client_1 = __nccwpck_require__(63570);
+const models_0_1 = __nccwpck_require__(66390);
+const SSOServiceException_1 = __nccwpck_require__(81517);
+const se_GetRoleCredentialsCommand = async (input, context) => {
+ const { hostname, protocol = "https", port, path: basePath } = await context.endpoint();
+ const headers = (0, smithy_client_1.map)({}, isSerializableHeaderValue, {
+ "x-amz-sso_bearer_token": input.accessToken,
+ });
+ const resolvedPath = `${basePath?.endsWith("/") ? basePath.slice(0, -1) : basePath || ""}` + "/federation/credentials";
+ const query = (0, smithy_client_1.map)({
+ role_name: [, (0, smithy_client_1.expectNonNull)(input.roleName, `roleName`)],
+ account_id: [, (0, smithy_client_1.expectNonNull)(input.accountId, `accountId`)],
+ });
+ let body;
+ return new protocol_http_1.HttpRequest({
+ protocol,
+ hostname,
+ port,
+ method: "GET",
+ headers,
+ path: resolvedPath,
+ query,
+ body,
+ });
+};
+exports.se_GetRoleCredentialsCommand = se_GetRoleCredentialsCommand;
+const se_ListAccountRolesCommand = async (input, context) => {
+ const { hostname, protocol = "https", port, path: basePath } = await context.endpoint();
+ const headers = (0, smithy_client_1.map)({}, isSerializableHeaderValue, {
+ "x-amz-sso_bearer_token": input.accessToken,
+ });
+ const resolvedPath = `${basePath?.endsWith("/") ? basePath.slice(0, -1) : basePath || ""}` + "/assignment/roles";
+ const query = (0, smithy_client_1.map)({
+ next_token: [, input.nextToken],
+ max_result: [() => input.maxResults !== void 0, () => input.maxResults.toString()],
+ account_id: [, (0, smithy_client_1.expectNonNull)(input.accountId, `accountId`)],
+ });
+ let body;
+ return new protocol_http_1.HttpRequest({
+ protocol,
+ hostname,
+ port,
+ method: "GET",
+ headers,
+ path: resolvedPath,
+ query,
+ body,
+ });
+};
+exports.se_ListAccountRolesCommand = se_ListAccountRolesCommand;
+const se_ListAccountsCommand = async (input, context) => {
+ const { hostname, protocol = "https", port, path: basePath } = await context.endpoint();
+ const headers = (0, smithy_client_1.map)({}, isSerializableHeaderValue, {
+ "x-amz-sso_bearer_token": input.accessToken,
+ });
+ const resolvedPath = `${basePath?.endsWith("/") ? basePath.slice(0, -1) : basePath || ""}` + "/assignment/accounts";
+ const query = (0, smithy_client_1.map)({
+ next_token: [, input.nextToken],
+ max_result: [() => input.maxResults !== void 0, () => input.maxResults.toString()],
+ });
+ let body;
+ return new protocol_http_1.HttpRequest({
+ protocol,
+ hostname,
+ port,
+ method: "GET",
+ headers,
+ path: resolvedPath,
+ query,
+ body,
+ });
+};
+exports.se_ListAccountsCommand = se_ListAccountsCommand;
+const se_LogoutCommand = async (input, context) => {
+ const { hostname, protocol = "https", port, path: basePath } = await context.endpoint();
+ const headers = (0, smithy_client_1.map)({}, isSerializableHeaderValue, {
+ "x-amz-sso_bearer_token": input.accessToken,
+ });
+ const resolvedPath = `${basePath?.endsWith("/") ? basePath.slice(0, -1) : basePath || ""}` + "/logout";
+ let body;
+ return new protocol_http_1.HttpRequest({
+ protocol,
+ hostname,
+ port,
+ method: "POST",
+ headers,
+ path: resolvedPath,
+ body,
+ });
+};
+exports.se_LogoutCommand = se_LogoutCommand;
+const de_GetRoleCredentialsCommand = async (output, context) => {
+ if (output.statusCode !== 200 && output.statusCode >= 300) {
+ return de_GetRoleCredentialsCommandError(output, context);
+ }
+ const contents = (0, smithy_client_1.map)({
+ $metadata: deserializeMetadata(output),
+ });
+ const data = (0, smithy_client_1.expectNonNull)((0, smithy_client_1.expectObject)(await parseBody(output.body, context)), "body");
+ const doc = (0, smithy_client_1.take)(data, {
+ roleCredentials: smithy_client_1._json,
+ });
+ Object.assign(contents, doc);
+ return contents;
+};
+exports.de_GetRoleCredentialsCommand = de_GetRoleCredentialsCommand;
+const de_GetRoleCredentialsCommandError = async (output, context) => {
+ const parsedOutput = {
+ ...output,
+ body: await parseErrorBody(output.body, context),
+ };
+ const errorCode = loadRestJsonErrorCode(output, parsedOutput.body);
+ switch (errorCode) {
+ case "InvalidRequestException":
+ case "com.amazonaws.sso#InvalidRequestException":
+ throw await de_InvalidRequestExceptionRes(parsedOutput, context);
+ case "ResourceNotFoundException":
+ case "com.amazonaws.sso#ResourceNotFoundException":
+ throw await de_ResourceNotFoundExceptionRes(parsedOutput, context);
+ case "TooManyRequestsException":
+ case "com.amazonaws.sso#TooManyRequestsException":
+ throw await de_TooManyRequestsExceptionRes(parsedOutput, context);
+ case "UnauthorizedException":
+ case "com.amazonaws.sso#UnauthorizedException":
+ throw await de_UnauthorizedExceptionRes(parsedOutput, context);
+ default:
+ const parsedBody = parsedOutput.body;
+ return throwDefaultError({
+ output,
+ parsedBody,
+ errorCode,
+ });
+ }
+};
+const de_ListAccountRolesCommand = async (output, context) => {
+ if (output.statusCode !== 200 && output.statusCode >= 300) {
+ return de_ListAccountRolesCommandError(output, context);
+ }
+ const contents = (0, smithy_client_1.map)({
+ $metadata: deserializeMetadata(output),
+ });
+ const data = (0, smithy_client_1.expectNonNull)((0, smithy_client_1.expectObject)(await parseBody(output.body, context)), "body");
+ const doc = (0, smithy_client_1.take)(data, {
+ nextToken: smithy_client_1.expectString,
+ roleList: smithy_client_1._json,
+ });
+ Object.assign(contents, doc);
+ return contents;
+};
+exports.de_ListAccountRolesCommand = de_ListAccountRolesCommand;
+const de_ListAccountRolesCommandError = async (output, context) => {
+ const parsedOutput = {
+ ...output,
+ body: await parseErrorBody(output.body, context),
+ };
+ const errorCode = loadRestJsonErrorCode(output, parsedOutput.body);
+ switch (errorCode) {
+ case "InvalidRequestException":
+ case "com.amazonaws.sso#InvalidRequestException":
+ throw await de_InvalidRequestExceptionRes(parsedOutput, context);
+ case "ResourceNotFoundException":
+ case "com.amazonaws.sso#ResourceNotFoundException":
+ throw await de_ResourceNotFoundExceptionRes(parsedOutput, context);
+ case "TooManyRequestsException":
+ case "com.amazonaws.sso#TooManyRequestsException":
+ throw await de_TooManyRequestsExceptionRes(parsedOutput, context);
+ case "UnauthorizedException":
+ case "com.amazonaws.sso#UnauthorizedException":
+ throw await de_UnauthorizedExceptionRes(parsedOutput, context);
+ default:
+ const parsedBody = parsedOutput.body;
+ return throwDefaultError({
+ output,
+ parsedBody,
+ errorCode,
+ });
+ }
+};
+const de_ListAccountsCommand = async (output, context) => {
+ if (output.statusCode !== 200 && output.statusCode >= 300) {
+ return de_ListAccountsCommandError(output, context);
+ }
+ const contents = (0, smithy_client_1.map)({
+ $metadata: deserializeMetadata(output),
+ });
+ const data = (0, smithy_client_1.expectNonNull)((0, smithy_client_1.expectObject)(await parseBody(output.body, context)), "body");
+ const doc = (0, smithy_client_1.take)(data, {
+ accountList: smithy_client_1._json,
+ nextToken: smithy_client_1.expectString,
+ });
+ Object.assign(contents, doc);
+ return contents;
+};
+exports.de_ListAccountsCommand = de_ListAccountsCommand;
+const de_ListAccountsCommandError = async (output, context) => {
+ const parsedOutput = {
+ ...output,
+ body: await parseErrorBody(output.body, context),
+ };
+ const errorCode = loadRestJsonErrorCode(output, parsedOutput.body);
+ switch (errorCode) {
+ case "InvalidRequestException":
+ case "com.amazonaws.sso#InvalidRequestException":
+ throw await de_InvalidRequestExceptionRes(parsedOutput, context);
+ case "ResourceNotFoundException":
+ case "com.amazonaws.sso#ResourceNotFoundException":
+ throw await de_ResourceNotFoundExceptionRes(parsedOutput, context);
+ case "TooManyRequestsException":
+ case "com.amazonaws.sso#TooManyRequestsException":
+ throw await de_TooManyRequestsExceptionRes(parsedOutput, context);
+ case "UnauthorizedException":
+ case "com.amazonaws.sso#UnauthorizedException":
+ throw await de_UnauthorizedExceptionRes(parsedOutput, context);
+ default:
+ const parsedBody = parsedOutput.body;
+ return throwDefaultError({
+ output,
+ parsedBody,
+ errorCode,
+ });
+ }
+};
+const de_LogoutCommand = async (output, context) => {
+ if (output.statusCode !== 200 && output.statusCode >= 300) {
+ return de_LogoutCommandError(output, context);
+ }
+ const contents = (0, smithy_client_1.map)({
+ $metadata: deserializeMetadata(output),
+ });
+ await (0, smithy_client_1.collectBody)(output.body, context);
+ return contents;
+};
+exports.de_LogoutCommand = de_LogoutCommand;
+const de_LogoutCommandError = async (output, context) => {
+ const parsedOutput = {
+ ...output,
+ body: await parseErrorBody(output.body, context),
+ };
+ const errorCode = loadRestJsonErrorCode(output, parsedOutput.body);
+ switch (errorCode) {
+ case "InvalidRequestException":
+ case "com.amazonaws.sso#InvalidRequestException":
+ throw await de_InvalidRequestExceptionRes(parsedOutput, context);
+ case "TooManyRequestsException":
+ case "com.amazonaws.sso#TooManyRequestsException":
+ throw await de_TooManyRequestsExceptionRes(parsedOutput, context);
+ case "UnauthorizedException":
+ case "com.amazonaws.sso#UnauthorizedException":
+ throw await de_UnauthorizedExceptionRes(parsedOutput, context);
+ default:
+ const parsedBody = parsedOutput.body;
+ return throwDefaultError({
+ output,
+ parsedBody,
+ errorCode,
+ });
+ }
+};
+const throwDefaultError = (0, smithy_client_1.withBaseException)(SSOServiceException_1.SSOServiceException);
+const de_InvalidRequestExceptionRes = async (parsedOutput, context) => {
+ const contents = (0, smithy_client_1.map)({});
+ const data = parsedOutput.body;
+ const doc = (0, smithy_client_1.take)(data, {
+ message: smithy_client_1.expectString,
+ });
+ Object.assign(contents, doc);
+ const exception = new models_0_1.InvalidRequestException({
+ $metadata: deserializeMetadata(parsedOutput),
+ ...contents,
+ });
+ return (0, smithy_client_1.decorateServiceException)(exception, parsedOutput.body);
+};
+const de_ResourceNotFoundExceptionRes = async (parsedOutput, context) => {
+ const contents = (0, smithy_client_1.map)({});
+ const data = parsedOutput.body;
+ const doc = (0, smithy_client_1.take)(data, {
+ message: smithy_client_1.expectString,
+ });
+ Object.assign(contents, doc);
+ const exception = new models_0_1.ResourceNotFoundException({
+ $metadata: deserializeMetadata(parsedOutput),
+ ...contents,
+ });
+ return (0, smithy_client_1.decorateServiceException)(exception, parsedOutput.body);
+};
+const de_TooManyRequestsExceptionRes = async (parsedOutput, context) => {
+ const contents = (0, smithy_client_1.map)({});
+ const data = parsedOutput.body;
+ const doc = (0, smithy_client_1.take)(data, {
+ message: smithy_client_1.expectString,
+ });
+ Object.assign(contents, doc);
+ const exception = new models_0_1.TooManyRequestsException({
+ $metadata: deserializeMetadata(parsedOutput),
+ ...contents,
+ });
+ return (0, smithy_client_1.decorateServiceException)(exception, parsedOutput.body);
+};
+const de_UnauthorizedExceptionRes = async (parsedOutput, context) => {
+ const contents = (0, smithy_client_1.map)({});
+ const data = parsedOutput.body;
+ const doc = (0, smithy_client_1.take)(data, {
+ message: smithy_client_1.expectString,
+ });
+ Object.assign(contents, doc);
+ const exception = new models_0_1.UnauthorizedException({
+ $metadata: deserializeMetadata(parsedOutput),
+ ...contents,
+ });
+ return (0, smithy_client_1.decorateServiceException)(exception, parsedOutput.body);
+};
+const deserializeMetadata = (output) => ({
+ httpStatusCode: output.statusCode,
+ requestId: output.headers["x-amzn-requestid"] ?? output.headers["x-amzn-request-id"] ?? output.headers["x-amz-request-id"],
+ extendedRequestId: output.headers["x-amz-id-2"],
+ cfId: output.headers["x-amz-cf-id"],
+});
+const collectBodyString = (streamBody, context) => (0, smithy_client_1.collectBody)(streamBody, context).then((body) => context.utf8Encoder(body));
+const isSerializableHeaderValue = (value) => value !== undefined &&
+ value !== null &&
+ value !== "" &&
+ (!Object.getOwnPropertyNames(value).includes("length") || value.length != 0) &&
+ (!Object.getOwnPropertyNames(value).includes("size") || value.size != 0);
+const parseBody = (streamBody, context) => collectBodyString(streamBody, context).then((encoded) => {
+ if (encoded.length) {
+ return JSON.parse(encoded);
+ }
+ return {};
+});
+const parseErrorBody = async (errorBody, context) => {
+ const value = await parseBody(errorBody, context);
+ value.message = value.message ?? value.Message;
+ return value;
+};
+const loadRestJsonErrorCode = (output, data) => {
+ const findKey = (object, key) => Object.keys(object).find((k) => k.toLowerCase() === key.toLowerCase());
+ const sanitizeErrorCode = (rawValue) => {
+ let cleanValue = rawValue;
+ if (typeof cleanValue === "number") {
+ cleanValue = cleanValue.toString();
+ }
+ if (cleanValue.indexOf(",") >= 0) {
+ cleanValue = cleanValue.split(",")[0];
+ }
+ if (cleanValue.indexOf(":") >= 0) {
+ cleanValue = cleanValue.split(":")[0];
+ }
+ if (cleanValue.indexOf("#") >= 0) {
+ cleanValue = cleanValue.split("#")[1];
+ }
+ return cleanValue;
+ };
+ const headerKey = findKey(output.headers, "x-amzn-errortype");
+ if (headerKey !== undefined) {
+ return sanitizeErrorCode(output.headers[headerKey]);
+ }
+ if (data.code !== undefined) {
+ return sanitizeErrorCode(data.code);
+ }
+ if (data["__type"] !== undefined) {
+ return sanitizeErrorCode(data["__type"]);
+ }
+};
+
+
+/***/ }),
+
+/***/ 19756:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.getRuntimeConfig = void 0;
+const tslib_1 = __nccwpck_require__(4351);
+const package_json_1 = tslib_1.__importDefault(__nccwpck_require__(91092));
+const core_1 = __nccwpck_require__(59963);
+const util_user_agent_node_1 = __nccwpck_require__(98095);
+const config_resolver_1 = __nccwpck_require__(53098);
+const hash_node_1 = __nccwpck_require__(3081);
+const middleware_retry_1 = __nccwpck_require__(96039);
+const node_config_provider_1 = __nccwpck_require__(33461);
+const node_http_handler_1 = __nccwpck_require__(20258);
+const util_body_length_node_1 = __nccwpck_require__(68075);
+const util_retry_1 = __nccwpck_require__(84902);
+const runtimeConfig_shared_1 = __nccwpck_require__(44809);
+const smithy_client_1 = __nccwpck_require__(63570);
+const util_defaults_mode_node_1 = __nccwpck_require__(72429);
+const smithy_client_2 = __nccwpck_require__(63570);
+const getRuntimeConfig = (config) => {
+ (0, smithy_client_2.emitWarningIfUnsupportedVersion)(process.version);
+ const defaultsMode = (0, util_defaults_mode_node_1.resolveDefaultsModeConfig)(config);
+ const defaultConfigProvider = () => defaultsMode().then(smithy_client_1.loadConfigsForDefaultMode);
+ const clientSharedValues = (0, runtimeConfig_shared_1.getRuntimeConfig)(config);
+ (0, core_1.emitWarningIfUnsupportedVersion)(process.version);
+ return {
+ ...clientSharedValues,
+ ...config,
+ runtime: "node",
+ defaultsMode,
+ bodyLengthChecker: config?.bodyLengthChecker ?? util_body_length_node_1.calculateBodyLength,
+ defaultUserAgentProvider: config?.defaultUserAgentProvider ??
+ (0, util_user_agent_node_1.defaultUserAgent)({ serviceId: clientSharedValues.serviceId, clientVersion: package_json_1.default.version }),
+ maxAttempts: config?.maxAttempts ?? (0, node_config_provider_1.loadConfig)(middleware_retry_1.NODE_MAX_ATTEMPT_CONFIG_OPTIONS),
+ region: config?.region ?? (0, node_config_provider_1.loadConfig)(config_resolver_1.NODE_REGION_CONFIG_OPTIONS, config_resolver_1.NODE_REGION_CONFIG_FILE_OPTIONS),
+ requestHandler: config?.requestHandler ?? new node_http_handler_1.NodeHttpHandler(defaultConfigProvider),
+ retryMode: config?.retryMode ??
+ (0, node_config_provider_1.loadConfig)({
+ ...middleware_retry_1.NODE_RETRY_MODE_CONFIG_OPTIONS,
+ default: async () => (await defaultConfigProvider()).retryMode || util_retry_1.DEFAULT_RETRY_MODE,
+ }),
+ sha256: config?.sha256 ?? hash_node_1.Hash.bind(null, "sha256"),
+ streamCollector: config?.streamCollector ?? node_http_handler_1.streamCollector,
+ useDualstackEndpoint: config?.useDualstackEndpoint ?? (0, node_config_provider_1.loadConfig)(config_resolver_1.NODE_USE_DUALSTACK_ENDPOINT_CONFIG_OPTIONS),
+ useFipsEndpoint: config?.useFipsEndpoint ?? (0, node_config_provider_1.loadConfig)(config_resolver_1.NODE_USE_FIPS_ENDPOINT_CONFIG_OPTIONS),
+ };
+};
+exports.getRuntimeConfig = getRuntimeConfig;
+
+
+/***/ }),
+
+/***/ 44809:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.getRuntimeConfig = void 0;
+const smithy_client_1 = __nccwpck_require__(63570);
+const url_parser_1 = __nccwpck_require__(14681);
+const util_base64_1 = __nccwpck_require__(75600);
+const util_utf8_1 = __nccwpck_require__(41895);
+const endpointResolver_1 = __nccwpck_require__(30898);
+const getRuntimeConfig = (config) => {
+ return {
+ apiVersion: "2019-06-10",
+ base64Decoder: config?.base64Decoder ?? util_base64_1.fromBase64,
+ base64Encoder: config?.base64Encoder ?? util_base64_1.toBase64,
+ disableHostPrefix: config?.disableHostPrefix ?? false,
+ endpointProvider: config?.endpointProvider ?? endpointResolver_1.defaultEndpointResolver,
+ extensions: config?.extensions ?? [],
+ logger: config?.logger ?? new smithy_client_1.NoOpLogger(),
+ serviceId: config?.serviceId ?? "SSO",
+ urlParser: config?.urlParser ?? url_parser_1.parseUrl,
+ utf8Decoder: config?.utf8Decoder ?? util_utf8_1.fromUtf8,
+ utf8Encoder: config?.utf8Encoder ?? util_utf8_1.toUtf8,
+ };
+};
+exports.getRuntimeConfig = getRuntimeConfig;
+
+
+/***/ }),
+
+/***/ 63398:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.resolveRuntimeExtensions = void 0;
+const region_config_resolver_1 = __nccwpck_require__(18156);
+const protocol_http_1 = __nccwpck_require__(64418);
+const smithy_client_1 = __nccwpck_require__(63570);
+const asPartial = (t) => t;
+const resolveRuntimeExtensions = (runtimeConfig, extensions) => {
+ const extensionConfiguration = {
+ ...asPartial((0, region_config_resolver_1.getAwsRegionExtensionConfiguration)(runtimeConfig)),
+ ...asPartial((0, smithy_client_1.getDefaultExtensionConfiguration)(runtimeConfig)),
+ ...asPartial((0, protocol_http_1.getHttpHandlerExtensionConfiguration)(runtimeConfig)),
+ };
+ extensions.forEach((extension) => extension.configure(extensionConfiguration));
+ return {
+ ...runtimeConfig,
+ ...(0, region_config_resolver_1.resolveAwsRegionExtensionConfiguration)(extensionConfiguration),
+ ...(0, smithy_client_1.resolveDefaultRuntimeConfig)(extensionConfiguration),
+ ...(0, protocol_http_1.resolveHttpHandlerRuntimeConfig)(extensionConfiguration),
+ };
+};
+exports.resolveRuntimeExtensions = resolveRuntimeExtensions;
+
+
+/***/ }),
+
+/***/ 32605:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.STS = void 0;
+const smithy_client_1 = __nccwpck_require__(63570);
+const AssumeRoleCommand_1 = __nccwpck_require__(59802);
+const AssumeRoleWithSAMLCommand_1 = __nccwpck_require__(72865);
+const AssumeRoleWithWebIdentityCommand_1 = __nccwpck_require__(37451);
+const DecodeAuthorizationMessageCommand_1 = __nccwpck_require__(74150);
+const GetAccessKeyInfoCommand_1 = __nccwpck_require__(49804);
+const GetCallerIdentityCommand_1 = __nccwpck_require__(24278);
+const GetFederationTokenCommand_1 = __nccwpck_require__(57552);
+const GetSessionTokenCommand_1 = __nccwpck_require__(43285);
+const STSClient_1 = __nccwpck_require__(64195);
+const commands = {
+ AssumeRoleCommand: AssumeRoleCommand_1.AssumeRoleCommand,
+ AssumeRoleWithSAMLCommand: AssumeRoleWithSAMLCommand_1.AssumeRoleWithSAMLCommand,
+ AssumeRoleWithWebIdentityCommand: AssumeRoleWithWebIdentityCommand_1.AssumeRoleWithWebIdentityCommand,
+ DecodeAuthorizationMessageCommand: DecodeAuthorizationMessageCommand_1.DecodeAuthorizationMessageCommand,
+ GetAccessKeyInfoCommand: GetAccessKeyInfoCommand_1.GetAccessKeyInfoCommand,
+ GetCallerIdentityCommand: GetCallerIdentityCommand_1.GetCallerIdentityCommand,
+ GetFederationTokenCommand: GetFederationTokenCommand_1.GetFederationTokenCommand,
+ GetSessionTokenCommand: GetSessionTokenCommand_1.GetSessionTokenCommand,
+};
+class STS extends STSClient_1.STSClient {
+}
+exports.STS = STS;
+(0, smithy_client_1.createAggregatedClient)(commands, STS);
+
+
+/***/ }),
+
+/***/ 64195:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.STSClient = exports.__Client = void 0;
+const middleware_host_header_1 = __nccwpck_require__(22545);
+const middleware_logger_1 = __nccwpck_require__(20014);
+const middleware_recursion_detection_1 = __nccwpck_require__(85525);
+const middleware_sdk_sts_1 = __nccwpck_require__(55959);
+const middleware_user_agent_1 = __nccwpck_require__(64688);
+const config_resolver_1 = __nccwpck_require__(53098);
+const middleware_content_length_1 = __nccwpck_require__(82800);
+const middleware_endpoint_1 = __nccwpck_require__(82918);
+const middleware_retry_1 = __nccwpck_require__(96039);
+const smithy_client_1 = __nccwpck_require__(63570);
+Object.defineProperty(exports, "__Client", ({ enumerable: true, get: function () { return smithy_client_1.Client; } }));
+const EndpointParameters_1 = __nccwpck_require__(20510);
+const runtimeConfig_1 = __nccwpck_require__(83405);
+const runtimeExtensions_1 = __nccwpck_require__(32053);
+class STSClient extends smithy_client_1.Client {
+ constructor(...[configuration]) {
+ const _config_0 = (0, runtimeConfig_1.getRuntimeConfig)(configuration || {});
+ const _config_1 = (0, EndpointParameters_1.resolveClientEndpointParameters)(_config_0);
+ const _config_2 = (0, config_resolver_1.resolveRegionConfig)(_config_1);
+ const _config_3 = (0, middleware_endpoint_1.resolveEndpointConfig)(_config_2);
+ const _config_4 = (0, middleware_retry_1.resolveRetryConfig)(_config_3);
+ const _config_5 = (0, middleware_host_header_1.resolveHostHeaderConfig)(_config_4);
+ const _config_6 = (0, middleware_sdk_sts_1.resolveStsAuthConfig)(_config_5, { stsClientCtor: STSClient });
+ const _config_7 = (0, middleware_user_agent_1.resolveUserAgentConfig)(_config_6);
+ const _config_8 = (0, runtimeExtensions_1.resolveRuntimeExtensions)(_config_7, configuration?.extensions || []);
+ super(_config_8);
+ this.config = _config_8;
+ this.middlewareStack.use((0, middleware_retry_1.getRetryPlugin)(this.config));
+ this.middlewareStack.use((0, middleware_content_length_1.getContentLengthPlugin)(this.config));
+ this.middlewareStack.use((0, middleware_host_header_1.getHostHeaderPlugin)(this.config));
+ this.middlewareStack.use((0, middleware_logger_1.getLoggerPlugin)(this.config));
+ this.middlewareStack.use((0, middleware_recursion_detection_1.getRecursionDetectionPlugin)(this.config));
+ this.middlewareStack.use((0, middleware_user_agent_1.getUserAgentPlugin)(this.config));
+ }
+ destroy() {
+ super.destroy();
+ }
+}
+exports.STSClient = STSClient;
+
+
+/***/ }),
+
+/***/ 59802:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.AssumeRoleCommand = exports.$Command = void 0;
+const middleware_signing_1 = __nccwpck_require__(14935);
+const middleware_endpoint_1 = __nccwpck_require__(82918);
+const middleware_serde_1 = __nccwpck_require__(81238);
+const smithy_client_1 = __nccwpck_require__(63570);
+Object.defineProperty(exports, "$Command", ({ enumerable: true, get: function () { return smithy_client_1.Command; } }));
+const types_1 = __nccwpck_require__(55756);
+const models_0_1 = __nccwpck_require__(21780);
+const Aws_query_1 = __nccwpck_require__(10740);
+class AssumeRoleCommand extends smithy_client_1.Command {
+ static getEndpointParameterInstructions() {
+ return {
+ UseGlobalEndpoint: { type: "builtInParams", name: "useGlobalEndpoint" },
+ UseFIPS: { type: "builtInParams", name: "useFipsEndpoint" },
+ Endpoint: { type: "builtInParams", name: "endpoint" },
+ Region: { type: "builtInParams", name: "region" },
+ UseDualStack: { type: "builtInParams", name: "useDualstackEndpoint" },
+ };
+ }
+ constructor(input) {
+ super();
+ this.input = input;
+ }
+ resolveMiddleware(clientStack, configuration, options) {
+ this.middlewareStack.use((0, middleware_serde_1.getSerdePlugin)(configuration, this.serialize, this.deserialize));
+ this.middlewareStack.use((0, middleware_endpoint_1.getEndpointPlugin)(configuration, AssumeRoleCommand.getEndpointParameterInstructions()));
+ this.middlewareStack.use((0, middleware_signing_1.getAwsAuthPlugin)(configuration));
+ const stack = clientStack.concat(this.middlewareStack);
+ const { logger } = configuration;
+ const clientName = "STSClient";
+ const commandName = "AssumeRoleCommand";
+ const handlerExecutionContext = {
+ logger,
+ clientName,
+ commandName,
+ inputFilterSensitiveLog: (_) => _,
+ outputFilterSensitiveLog: models_0_1.AssumeRoleResponseFilterSensitiveLog,
+ [types_1.SMITHY_CONTEXT_KEY]: {
+ service: "AWSSecurityTokenServiceV20110615",
+ operation: "AssumeRole",
+ },
+ };
+ const { requestHandler } = configuration;
+ return stack.resolve((request) => requestHandler.handle(request.request, options || {}), handlerExecutionContext);
+ }
+ serialize(input, context) {
+ return (0, Aws_query_1.se_AssumeRoleCommand)(input, context);
+ }
+ deserialize(output, context) {
+ return (0, Aws_query_1.de_AssumeRoleCommand)(output, context);
+ }
+}
+exports.AssumeRoleCommand = AssumeRoleCommand;
+
+
+/***/ }),
+
+/***/ 72865:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.AssumeRoleWithSAMLCommand = exports.$Command = void 0;
+const middleware_endpoint_1 = __nccwpck_require__(82918);
+const middleware_serde_1 = __nccwpck_require__(81238);
+const smithy_client_1 = __nccwpck_require__(63570);
+Object.defineProperty(exports, "$Command", ({ enumerable: true, get: function () { return smithy_client_1.Command; } }));
+const types_1 = __nccwpck_require__(55756);
+const models_0_1 = __nccwpck_require__(21780);
+const Aws_query_1 = __nccwpck_require__(10740);
+class AssumeRoleWithSAMLCommand extends smithy_client_1.Command {
+ static getEndpointParameterInstructions() {
+ return {
+ UseGlobalEndpoint: { type: "builtInParams", name: "useGlobalEndpoint" },
+ UseFIPS: { type: "builtInParams", name: "useFipsEndpoint" },
+ Endpoint: { type: "builtInParams", name: "endpoint" },
+ Region: { type: "builtInParams", name: "region" },
+ UseDualStack: { type: "builtInParams", name: "useDualstackEndpoint" },
+ };
+ }
+ constructor(input) {
+ super();
+ this.input = input;
+ }
+ resolveMiddleware(clientStack, configuration, options) {
+ this.middlewareStack.use((0, middleware_serde_1.getSerdePlugin)(configuration, this.serialize, this.deserialize));
+ this.middlewareStack.use((0, middleware_endpoint_1.getEndpointPlugin)(configuration, AssumeRoleWithSAMLCommand.getEndpointParameterInstructions()));
+ const stack = clientStack.concat(this.middlewareStack);
+ const { logger } = configuration;
+ const clientName = "STSClient";
+ const commandName = "AssumeRoleWithSAMLCommand";
+ const handlerExecutionContext = {
+ logger,
+ clientName,
+ commandName,
+ inputFilterSensitiveLog: models_0_1.AssumeRoleWithSAMLRequestFilterSensitiveLog,
+ outputFilterSensitiveLog: models_0_1.AssumeRoleWithSAMLResponseFilterSensitiveLog,
+ [types_1.SMITHY_CONTEXT_KEY]: {
+ service: "AWSSecurityTokenServiceV20110615",
+ operation: "AssumeRoleWithSAML",
+ },
+ };
+ const { requestHandler } = configuration;
+ return stack.resolve((request) => requestHandler.handle(request.request, options || {}), handlerExecutionContext);
+ }
+ serialize(input, context) {
+ return (0, Aws_query_1.se_AssumeRoleWithSAMLCommand)(input, context);
+ }
+ deserialize(output, context) {
+ return (0, Aws_query_1.de_AssumeRoleWithSAMLCommand)(output, context);
+ }
+}
+exports.AssumeRoleWithSAMLCommand = AssumeRoleWithSAMLCommand;
+
+
+/***/ }),
+
+/***/ 37451:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.AssumeRoleWithWebIdentityCommand = exports.$Command = void 0;
+const middleware_endpoint_1 = __nccwpck_require__(82918);
+const middleware_serde_1 = __nccwpck_require__(81238);
+const smithy_client_1 = __nccwpck_require__(63570);
+Object.defineProperty(exports, "$Command", ({ enumerable: true, get: function () { return smithy_client_1.Command; } }));
+const types_1 = __nccwpck_require__(55756);
+const models_0_1 = __nccwpck_require__(21780);
+const Aws_query_1 = __nccwpck_require__(10740);
+class AssumeRoleWithWebIdentityCommand extends smithy_client_1.Command {
+ static getEndpointParameterInstructions() {
+ return {
+ UseGlobalEndpoint: { type: "builtInParams", name: "useGlobalEndpoint" },
+ UseFIPS: { type: "builtInParams", name: "useFipsEndpoint" },
+ Endpoint: { type: "builtInParams", name: "endpoint" },
+ Region: { type: "builtInParams", name: "region" },
+ UseDualStack: { type: "builtInParams", name: "useDualstackEndpoint" },
+ };
+ }
+ constructor(input) {
+ super();
+ this.input = input;
+ }
+ resolveMiddleware(clientStack, configuration, options) {
+ this.middlewareStack.use((0, middleware_serde_1.getSerdePlugin)(configuration, this.serialize, this.deserialize));
+ this.middlewareStack.use((0, middleware_endpoint_1.getEndpointPlugin)(configuration, AssumeRoleWithWebIdentityCommand.getEndpointParameterInstructions()));
+ const stack = clientStack.concat(this.middlewareStack);
+ const { logger } = configuration;
+ const clientName = "STSClient";
+ const commandName = "AssumeRoleWithWebIdentityCommand";
+ const handlerExecutionContext = {
+ logger,
+ clientName,
+ commandName,
+ inputFilterSensitiveLog: models_0_1.AssumeRoleWithWebIdentityRequestFilterSensitiveLog,
+ outputFilterSensitiveLog: models_0_1.AssumeRoleWithWebIdentityResponseFilterSensitiveLog,
+ [types_1.SMITHY_CONTEXT_KEY]: {
+ service: "AWSSecurityTokenServiceV20110615",
+ operation: "AssumeRoleWithWebIdentity",
+ },
+ };
+ const { requestHandler } = configuration;
+ return stack.resolve((request) => requestHandler.handle(request.request, options || {}), handlerExecutionContext);
+ }
+ serialize(input, context) {
+ return (0, Aws_query_1.se_AssumeRoleWithWebIdentityCommand)(input, context);
+ }
+ deserialize(output, context) {
+ return (0, Aws_query_1.de_AssumeRoleWithWebIdentityCommand)(output, context);
+ }
+}
+exports.AssumeRoleWithWebIdentityCommand = AssumeRoleWithWebIdentityCommand;
+
+
+/***/ }),
+
+/***/ 74150:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.DecodeAuthorizationMessageCommand = exports.$Command = void 0;
+const middleware_signing_1 = __nccwpck_require__(14935);
+const middleware_endpoint_1 = __nccwpck_require__(82918);
+const middleware_serde_1 = __nccwpck_require__(81238);
+const smithy_client_1 = __nccwpck_require__(63570);
+Object.defineProperty(exports, "$Command", ({ enumerable: true, get: function () { return smithy_client_1.Command; } }));
+const types_1 = __nccwpck_require__(55756);
+const Aws_query_1 = __nccwpck_require__(10740);
+class DecodeAuthorizationMessageCommand extends smithy_client_1.Command {
+ static getEndpointParameterInstructions() {
+ return {
+ UseGlobalEndpoint: { type: "builtInParams", name: "useGlobalEndpoint" },
+ UseFIPS: { type: "builtInParams", name: "useFipsEndpoint" },
+ Endpoint: { type: "builtInParams", name: "endpoint" },
+ Region: { type: "builtInParams", name: "region" },
+ UseDualStack: { type: "builtInParams", name: "useDualstackEndpoint" },
+ };
+ }
+ constructor(input) {
+ super();
+ this.input = input;
+ }
+ resolveMiddleware(clientStack, configuration, options) {
+ this.middlewareStack.use((0, middleware_serde_1.getSerdePlugin)(configuration, this.serialize, this.deserialize));
+ this.middlewareStack.use((0, middleware_endpoint_1.getEndpointPlugin)(configuration, DecodeAuthorizationMessageCommand.getEndpointParameterInstructions()));
+ this.middlewareStack.use((0, middleware_signing_1.getAwsAuthPlugin)(configuration));
+ const stack = clientStack.concat(this.middlewareStack);
+ const { logger } = configuration;
+ const clientName = "STSClient";
+ const commandName = "DecodeAuthorizationMessageCommand";
+ const handlerExecutionContext = {
+ logger,
+ clientName,
+ commandName,
+ inputFilterSensitiveLog: (_) => _,
+ outputFilterSensitiveLog: (_) => _,
+ [types_1.SMITHY_CONTEXT_KEY]: {
+ service: "AWSSecurityTokenServiceV20110615",
+ operation: "DecodeAuthorizationMessage",
+ },
+ };
+ const { requestHandler } = configuration;
+ return stack.resolve((request) => requestHandler.handle(request.request, options || {}), handlerExecutionContext);
+ }
+ serialize(input, context) {
+ return (0, Aws_query_1.se_DecodeAuthorizationMessageCommand)(input, context);
+ }
+ deserialize(output, context) {
+ return (0, Aws_query_1.de_DecodeAuthorizationMessageCommand)(output, context);
+ }
+}
+exports.DecodeAuthorizationMessageCommand = DecodeAuthorizationMessageCommand;
+
+
+/***/ }),
+
+/***/ 49804:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.GetAccessKeyInfoCommand = exports.$Command = void 0;
+const middleware_signing_1 = __nccwpck_require__(14935);
+const middleware_endpoint_1 = __nccwpck_require__(82918);
+const middleware_serde_1 = __nccwpck_require__(81238);
+const smithy_client_1 = __nccwpck_require__(63570);
+Object.defineProperty(exports, "$Command", ({ enumerable: true, get: function () { return smithy_client_1.Command; } }));
+const types_1 = __nccwpck_require__(55756);
+const Aws_query_1 = __nccwpck_require__(10740);
+class GetAccessKeyInfoCommand extends smithy_client_1.Command {
+ static getEndpointParameterInstructions() {
+ return {
+ UseGlobalEndpoint: { type: "builtInParams", name: "useGlobalEndpoint" },
+ UseFIPS: { type: "builtInParams", name: "useFipsEndpoint" },
+ Endpoint: { type: "builtInParams", name: "endpoint" },
+ Region: { type: "builtInParams", name: "region" },
+ UseDualStack: { type: "builtInParams", name: "useDualstackEndpoint" },
+ };
+ }
+ constructor(input) {
+ super();
+ this.input = input;
+ }
+ resolveMiddleware(clientStack, configuration, options) {
+ this.middlewareStack.use((0, middleware_serde_1.getSerdePlugin)(configuration, this.serialize, this.deserialize));
+ this.middlewareStack.use((0, middleware_endpoint_1.getEndpointPlugin)(configuration, GetAccessKeyInfoCommand.getEndpointParameterInstructions()));
+ this.middlewareStack.use((0, middleware_signing_1.getAwsAuthPlugin)(configuration));
+ const stack = clientStack.concat(this.middlewareStack);
+ const { logger } = configuration;
+ const clientName = "STSClient";
+ const commandName = "GetAccessKeyInfoCommand";
+ const handlerExecutionContext = {
+ logger,
+ clientName,
+ commandName,
+ inputFilterSensitiveLog: (_) => _,
+ outputFilterSensitiveLog: (_) => _,
+ [types_1.SMITHY_CONTEXT_KEY]: {
+ service: "AWSSecurityTokenServiceV20110615",
+ operation: "GetAccessKeyInfo",
+ },
+ };
+ const { requestHandler } = configuration;
+ return stack.resolve((request) => requestHandler.handle(request.request, options || {}), handlerExecutionContext);
+ }
+ serialize(input, context) {
+ return (0, Aws_query_1.se_GetAccessKeyInfoCommand)(input, context);
+ }
+ deserialize(output, context) {
+ return (0, Aws_query_1.de_GetAccessKeyInfoCommand)(output, context);
+ }
+}
+exports.GetAccessKeyInfoCommand = GetAccessKeyInfoCommand;
+
+
+/***/ }),
+
+/***/ 24278:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.GetCallerIdentityCommand = exports.$Command = void 0;
+const middleware_signing_1 = __nccwpck_require__(14935);
+const middleware_endpoint_1 = __nccwpck_require__(82918);
+const middleware_serde_1 = __nccwpck_require__(81238);
+const smithy_client_1 = __nccwpck_require__(63570);
+Object.defineProperty(exports, "$Command", ({ enumerable: true, get: function () { return smithy_client_1.Command; } }));
+const types_1 = __nccwpck_require__(55756);
+const Aws_query_1 = __nccwpck_require__(10740);
+class GetCallerIdentityCommand extends smithy_client_1.Command {
+ static getEndpointParameterInstructions() {
+ return {
+ UseGlobalEndpoint: { type: "builtInParams", name: "useGlobalEndpoint" },
+ UseFIPS: { type: "builtInParams", name: "useFipsEndpoint" },
+ Endpoint: { type: "builtInParams", name: "endpoint" },
+ Region: { type: "builtInParams", name: "region" },
+ UseDualStack: { type: "builtInParams", name: "useDualstackEndpoint" },
+ };
+ }
+ constructor(input) {
+ super();
+ this.input = input;
+ }
+ resolveMiddleware(clientStack, configuration, options) {
+ this.middlewareStack.use((0, middleware_serde_1.getSerdePlugin)(configuration, this.serialize, this.deserialize));
+ this.middlewareStack.use((0, middleware_endpoint_1.getEndpointPlugin)(configuration, GetCallerIdentityCommand.getEndpointParameterInstructions()));
+ this.middlewareStack.use((0, middleware_signing_1.getAwsAuthPlugin)(configuration));
+ const stack = clientStack.concat(this.middlewareStack);
+ const { logger } = configuration;
+ const clientName = "STSClient";
+ const commandName = "GetCallerIdentityCommand";
+ const handlerExecutionContext = {
+ logger,
+ clientName,
+ commandName,
+ inputFilterSensitiveLog: (_) => _,
+ outputFilterSensitiveLog: (_) => _,
+ [types_1.SMITHY_CONTEXT_KEY]: {
+ service: "AWSSecurityTokenServiceV20110615",
+ operation: "GetCallerIdentity",
+ },
+ };
+ const { requestHandler } = configuration;
+ return stack.resolve((request) => requestHandler.handle(request.request, options || {}), handlerExecutionContext);
+ }
+ serialize(input, context) {
+ return (0, Aws_query_1.se_GetCallerIdentityCommand)(input, context);
+ }
+ deserialize(output, context) {
+ return (0, Aws_query_1.de_GetCallerIdentityCommand)(output, context);
+ }
+}
+exports.GetCallerIdentityCommand = GetCallerIdentityCommand;
+
+
+/***/ }),
+
+/***/ 57552:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.GetFederationTokenCommand = exports.$Command = void 0;
+const middleware_signing_1 = __nccwpck_require__(14935);
+const middleware_endpoint_1 = __nccwpck_require__(82918);
+const middleware_serde_1 = __nccwpck_require__(81238);
+const smithy_client_1 = __nccwpck_require__(63570);
+Object.defineProperty(exports, "$Command", ({ enumerable: true, get: function () { return smithy_client_1.Command; } }));
+const types_1 = __nccwpck_require__(55756);
+const models_0_1 = __nccwpck_require__(21780);
+const Aws_query_1 = __nccwpck_require__(10740);
+class GetFederationTokenCommand extends smithy_client_1.Command {
+ static getEndpointParameterInstructions() {
+ return {
+ UseGlobalEndpoint: { type: "builtInParams", name: "useGlobalEndpoint" },
+ UseFIPS: { type: "builtInParams", name: "useFipsEndpoint" },
+ Endpoint: { type: "builtInParams", name: "endpoint" },
+ Region: { type: "builtInParams", name: "region" },
+ UseDualStack: { type: "builtInParams", name: "useDualstackEndpoint" },
+ };
+ }
+ constructor(input) {
+ super();
+ this.input = input;
+ }
+ resolveMiddleware(clientStack, configuration, options) {
+ this.middlewareStack.use((0, middleware_serde_1.getSerdePlugin)(configuration, this.serialize, this.deserialize));
+ this.middlewareStack.use((0, middleware_endpoint_1.getEndpointPlugin)(configuration, GetFederationTokenCommand.getEndpointParameterInstructions()));
+ this.middlewareStack.use((0, middleware_signing_1.getAwsAuthPlugin)(configuration));
+ const stack = clientStack.concat(this.middlewareStack);
+ const { logger } = configuration;
+ const clientName = "STSClient";
+ const commandName = "GetFederationTokenCommand";
+ const handlerExecutionContext = {
+ logger,
+ clientName,
+ commandName,
+ inputFilterSensitiveLog: (_) => _,
+ outputFilterSensitiveLog: models_0_1.GetFederationTokenResponseFilterSensitiveLog,
+ [types_1.SMITHY_CONTEXT_KEY]: {
+ service: "AWSSecurityTokenServiceV20110615",
+ operation: "GetFederationToken",
+ },
+ };
+ const { requestHandler } = configuration;
+ return stack.resolve((request) => requestHandler.handle(request.request, options || {}), handlerExecutionContext);
+ }
+ serialize(input, context) {
+ return (0, Aws_query_1.se_GetFederationTokenCommand)(input, context);
+ }
+ deserialize(output, context) {
+ return (0, Aws_query_1.de_GetFederationTokenCommand)(output, context);
+ }
+}
+exports.GetFederationTokenCommand = GetFederationTokenCommand;
+
+
+/***/ }),
+
+/***/ 43285:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.GetSessionTokenCommand = exports.$Command = void 0;
+const middleware_signing_1 = __nccwpck_require__(14935);
+const middleware_endpoint_1 = __nccwpck_require__(82918);
+const middleware_serde_1 = __nccwpck_require__(81238);
+const smithy_client_1 = __nccwpck_require__(63570);
+Object.defineProperty(exports, "$Command", ({ enumerable: true, get: function () { return smithy_client_1.Command; } }));
+const types_1 = __nccwpck_require__(55756);
+const models_0_1 = __nccwpck_require__(21780);
+const Aws_query_1 = __nccwpck_require__(10740);
+class GetSessionTokenCommand extends smithy_client_1.Command {
+ static getEndpointParameterInstructions() {
+ return {
+ UseGlobalEndpoint: { type: "builtInParams", name: "useGlobalEndpoint" },
+ UseFIPS: { type: "builtInParams", name: "useFipsEndpoint" },
+ Endpoint: { type: "builtInParams", name: "endpoint" },
+ Region: { type: "builtInParams", name: "region" },
+ UseDualStack: { type: "builtInParams", name: "useDualstackEndpoint" },
+ };
+ }
+ constructor(input) {
+ super();
+ this.input = input;
+ }
+ resolveMiddleware(clientStack, configuration, options) {
+ this.middlewareStack.use((0, middleware_serde_1.getSerdePlugin)(configuration, this.serialize, this.deserialize));
+ this.middlewareStack.use((0, middleware_endpoint_1.getEndpointPlugin)(configuration, GetSessionTokenCommand.getEndpointParameterInstructions()));
+ this.middlewareStack.use((0, middleware_signing_1.getAwsAuthPlugin)(configuration));
+ const stack = clientStack.concat(this.middlewareStack);
+ const { logger } = configuration;
+ const clientName = "STSClient";
+ const commandName = "GetSessionTokenCommand";
+ const handlerExecutionContext = {
+ logger,
+ clientName,
+ commandName,
+ inputFilterSensitiveLog: (_) => _,
+ outputFilterSensitiveLog: models_0_1.GetSessionTokenResponseFilterSensitiveLog,
+ [types_1.SMITHY_CONTEXT_KEY]: {
+ service: "AWSSecurityTokenServiceV20110615",
+ operation: "GetSessionToken",
+ },
+ };
+ const { requestHandler } = configuration;
+ return stack.resolve((request) => requestHandler.handle(request.request, options || {}), handlerExecutionContext);
+ }
+ serialize(input, context) {
+ return (0, Aws_query_1.se_GetSessionTokenCommand)(input, context);
+ }
+ deserialize(output, context) {
+ return (0, Aws_query_1.de_GetSessionTokenCommand)(output, context);
+ }
+}
+exports.GetSessionTokenCommand = GetSessionTokenCommand;
+
+
+/***/ }),
+
+/***/ 55716:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+const tslib_1 = __nccwpck_require__(4351);
+tslib_1.__exportStar(__nccwpck_require__(59802), exports);
+tslib_1.__exportStar(__nccwpck_require__(72865), exports);
+tslib_1.__exportStar(__nccwpck_require__(37451), exports);
+tslib_1.__exportStar(__nccwpck_require__(74150), exports);
+tslib_1.__exportStar(__nccwpck_require__(49804), exports);
+tslib_1.__exportStar(__nccwpck_require__(24278), exports);
+tslib_1.__exportStar(__nccwpck_require__(57552), exports);
+tslib_1.__exportStar(__nccwpck_require__(43285), exports);
+
+
+/***/ }),
+
+/***/ 88028:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.decorateDefaultCredentialProvider = exports.getDefaultRoleAssumerWithWebIdentity = exports.getDefaultRoleAssumer = void 0;
+const defaultStsRoleAssumers_1 = __nccwpck_require__(90048);
+const STSClient_1 = __nccwpck_require__(64195);
+const getCustomizableStsClientCtor = (baseCtor, customizations) => {
+ if (!customizations)
+ return baseCtor;
+ else
+ return class CustomizableSTSClient extends baseCtor {
+ constructor(config) {
+ super(config);
+ for (const customization of customizations) {
+ this.middlewareStack.use(customization);
+ }
+ }
+ };
+};
+const getDefaultRoleAssumer = (stsOptions = {}, stsPlugins) => (0, defaultStsRoleAssumers_1.getDefaultRoleAssumer)(stsOptions, getCustomizableStsClientCtor(STSClient_1.STSClient, stsPlugins));
+exports.getDefaultRoleAssumer = getDefaultRoleAssumer;
+const getDefaultRoleAssumerWithWebIdentity = (stsOptions = {}, stsPlugins) => (0, defaultStsRoleAssumers_1.getDefaultRoleAssumerWithWebIdentity)(stsOptions, getCustomizableStsClientCtor(STSClient_1.STSClient, stsPlugins));
+exports.getDefaultRoleAssumerWithWebIdentity = getDefaultRoleAssumerWithWebIdentity;
+const decorateDefaultCredentialProvider = (provider) => (input) => provider({
+ roleAssumer: (0, exports.getDefaultRoleAssumer)(input),
+ roleAssumerWithWebIdentity: (0, exports.getDefaultRoleAssumerWithWebIdentity)(input),
+ ...input,
+});
+exports.decorateDefaultCredentialProvider = decorateDefaultCredentialProvider;
+
+
+/***/ }),
+
+/***/ 90048:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.decorateDefaultCredentialProvider = exports.getDefaultRoleAssumerWithWebIdentity = exports.getDefaultRoleAssumer = void 0;
+const AssumeRoleCommand_1 = __nccwpck_require__(59802);
+const AssumeRoleWithWebIdentityCommand_1 = __nccwpck_require__(37451);
+const ASSUME_ROLE_DEFAULT_REGION = "us-east-1";
+const decorateDefaultRegion = (region) => {
+ if (typeof region !== "function") {
+ return region === undefined ? ASSUME_ROLE_DEFAULT_REGION : region;
+ }
+ return async () => {
+ try {
+ return await region();
+ }
+ catch (e) {
+ return ASSUME_ROLE_DEFAULT_REGION;
+ }
+ };
+};
+const getDefaultRoleAssumer = (stsOptions, stsClientCtor) => {
+ let stsClient;
+ let closureSourceCreds;
+ return async (sourceCreds, params) => {
+ closureSourceCreds = sourceCreds;
+ if (!stsClient) {
+ const { logger, region, requestHandler } = stsOptions;
+ stsClient = new stsClientCtor({
+ logger,
+ credentialDefaultProvider: () => async () => closureSourceCreds,
+ region: decorateDefaultRegion(region || stsOptions.region),
+ ...(requestHandler ? { requestHandler } : {}),
+ });
+ }
+ const { Credentials } = await stsClient.send(new AssumeRoleCommand_1.AssumeRoleCommand(params));
+ if (!Credentials || !Credentials.AccessKeyId || !Credentials.SecretAccessKey) {
+ throw new Error(`Invalid response from STS.assumeRole call with role ${params.RoleArn}`);
+ }
+ return {
+ accessKeyId: Credentials.AccessKeyId,
+ secretAccessKey: Credentials.SecretAccessKey,
+ sessionToken: Credentials.SessionToken,
+ expiration: Credentials.Expiration,
+ };
+ };
+};
+exports.getDefaultRoleAssumer = getDefaultRoleAssumer;
+const getDefaultRoleAssumerWithWebIdentity = (stsOptions, stsClientCtor) => {
+ let stsClient;
+ return async (params) => {
+ if (!stsClient) {
+ const { logger, region, requestHandler } = stsOptions;
+ stsClient = new stsClientCtor({
+ logger,
+ region: decorateDefaultRegion(region || stsOptions.region),
+ ...(requestHandler ? { requestHandler } : {}),
+ });
+ }
+ const { Credentials } = await stsClient.send(new AssumeRoleWithWebIdentityCommand_1.AssumeRoleWithWebIdentityCommand(params));
+ if (!Credentials || !Credentials.AccessKeyId || !Credentials.SecretAccessKey) {
+ throw new Error(`Invalid response from STS.assumeRoleWithWebIdentity call with role ${params.RoleArn}`);
+ }
+ return {
+ accessKeyId: Credentials.AccessKeyId,
+ secretAccessKey: Credentials.SecretAccessKey,
+ sessionToken: Credentials.SessionToken,
+ expiration: Credentials.Expiration,
+ };
+ };
+};
+exports.getDefaultRoleAssumerWithWebIdentity = getDefaultRoleAssumerWithWebIdentity;
+const decorateDefaultCredentialProvider = (provider) => (input) => provider({
+ roleAssumer: (0, exports.getDefaultRoleAssumer)(input, input.stsClientCtor),
+ roleAssumerWithWebIdentity: (0, exports.getDefaultRoleAssumerWithWebIdentity)(input, input.stsClientCtor),
+ ...input,
+});
+exports.decorateDefaultCredentialProvider = decorateDefaultCredentialProvider;
+
+
+/***/ }),
+
+/***/ 20510:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.resolveClientEndpointParameters = void 0;
+const resolveClientEndpointParameters = (options) => {
+ return {
+ ...options,
+ useDualstackEndpoint: options.useDualstackEndpoint ?? false,
+ useFipsEndpoint: options.useFipsEndpoint ?? false,
+ useGlobalEndpoint: options.useGlobalEndpoint ?? false,
+ defaultSigningName: "sts",
+ };
+};
+exports.resolveClientEndpointParameters = resolveClientEndpointParameters;
+
+
+/***/ }),
+
+/***/ 41203:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.defaultEndpointResolver = void 0;
+const util_endpoints_1 = __nccwpck_require__(13350);
+const ruleset_1 = __nccwpck_require__(86882);
+const defaultEndpointResolver = (endpointParams, context = {}) => {
+ return (0, util_endpoints_1.resolveEndpoint)(ruleset_1.ruleSet, {
+ endpointParams: endpointParams,
+ logger: context.logger,
+ });
+};
+exports.defaultEndpointResolver = defaultEndpointResolver;
+
+
+/***/ }),
+
+/***/ 86882:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.ruleSet = void 0;
+const F = "required", G = "type", H = "fn", I = "argv", J = "ref";
+const a = false, b = true, c = "booleanEquals", d = "stringEquals", e = "sigv4", f = "sts", g = "us-east-1", h = "endpoint", i = "https://sts.{Region}.{PartitionResult#dnsSuffix}", j = "tree", k = "error", l = "getAttr", m = { [F]: false, [G]: "String" }, n = { [F]: true, "default": false, [G]: "Boolean" }, o = { [J]: "Endpoint" }, p = { [H]: "isSet", [I]: [{ [J]: "Region" }] }, q = { [J]: "Region" }, r = { [H]: "aws.partition", [I]: [q], "assign": "PartitionResult" }, s = { [J]: "UseFIPS" }, t = { [J]: "UseDualStack" }, u = { "url": "https://sts.amazonaws.com", "properties": { "authSchemes": [{ "name": e, "signingName": f, "signingRegion": g }] }, "headers": {} }, v = {}, w = { "conditions": [{ [H]: d, [I]: [q, "aws-global"] }], [h]: u, [G]: h }, x = { [H]: c, [I]: [s, true] }, y = { [H]: c, [I]: [t, true] }, z = { [H]: l, [I]: [{ [J]: "PartitionResult" }, "supportsFIPS"] }, A = { [J]: "PartitionResult" }, B = { [H]: c, [I]: [true, { [H]: l, [I]: [A, "supportsDualStack"] }] }, C = [{ [H]: "isSet", [I]: [o] }], D = [x], E = [y];
+const _data = { version: "1.0", parameters: { Region: m, UseDualStack: n, UseFIPS: n, Endpoint: m, UseGlobalEndpoint: n }, rules: [{ conditions: [{ [H]: c, [I]: [{ [J]: "UseGlobalEndpoint" }, b] }, { [H]: "not", [I]: C }, p, r, { [H]: c, [I]: [s, a] }, { [H]: c, [I]: [t, a] }], rules: [{ conditions: [{ [H]: d, [I]: [q, "ap-northeast-1"] }], endpoint: u, [G]: h }, { conditions: [{ [H]: d, [I]: [q, "ap-south-1"] }], endpoint: u, [G]: h }, { conditions: [{ [H]: d, [I]: [q, "ap-southeast-1"] }], endpoint: u, [G]: h }, { conditions: [{ [H]: d, [I]: [q, "ap-southeast-2"] }], endpoint: u, [G]: h }, w, { conditions: [{ [H]: d, [I]: [q, "ca-central-1"] }], endpoint: u, [G]: h }, { conditions: [{ [H]: d, [I]: [q, "eu-central-1"] }], endpoint: u, [G]: h }, { conditions: [{ [H]: d, [I]: [q, "eu-north-1"] }], endpoint: u, [G]: h }, { conditions: [{ [H]: d, [I]: [q, "eu-west-1"] }], endpoint: u, [G]: h }, { conditions: [{ [H]: d, [I]: [q, "eu-west-2"] }], endpoint: u, [G]: h }, { conditions: [{ [H]: d, [I]: [q, "eu-west-3"] }], endpoint: u, [G]: h }, { conditions: [{ [H]: d, [I]: [q, "sa-east-1"] }], endpoint: u, [G]: h }, { conditions: [{ [H]: d, [I]: [q, g] }], endpoint: u, [G]: h }, { conditions: [{ [H]: d, [I]: [q, "us-east-2"] }], endpoint: u, [G]: h }, { conditions: [{ [H]: d, [I]: [q, "us-west-1"] }], endpoint: u, [G]: h }, { conditions: [{ [H]: d, [I]: [q, "us-west-2"] }], endpoint: u, [G]: h }, { endpoint: { url: i, properties: { authSchemes: [{ name: e, signingName: f, signingRegion: "{Region}" }] }, headers: v }, [G]: h }], [G]: j }, { conditions: C, rules: [{ conditions: D, error: "Invalid Configuration: FIPS and custom endpoint are not supported", [G]: k }, { conditions: E, error: "Invalid Configuration: Dualstack and custom endpoint are not supported", [G]: k }, { endpoint: { url: o, properties: v, headers: v }, [G]: h }], [G]: j }, { conditions: [p], rules: [{ conditions: [r], rules: [{ conditions: [x, y], rules: [{ conditions: [{ [H]: c, [I]: [b, z] }, B], rules: [{ endpoint: { url: "https://sts-fips.{Region}.{PartitionResult#dualStackDnsSuffix}", properties: v, headers: v }, [G]: h }], [G]: j }, { error: "FIPS and DualStack are enabled, but this partition does not support one or both", [G]: k }], [G]: j }, { conditions: D, rules: [{ conditions: [{ [H]: c, [I]: [z, b] }], rules: [{ conditions: [{ [H]: d, [I]: [{ [H]: l, [I]: [A, "name"] }, "aws-us-gov"] }], endpoint: { url: "https://sts.{Region}.amazonaws.com", properties: v, headers: v }, [G]: h }, { endpoint: { url: "https://sts-fips.{Region}.{PartitionResult#dnsSuffix}", properties: v, headers: v }, [G]: h }], [G]: j }, { error: "FIPS is enabled but this partition does not support FIPS", [G]: k }], [G]: j }, { conditions: E, rules: [{ conditions: [B], rules: [{ endpoint: { url: "https://sts.{Region}.{PartitionResult#dualStackDnsSuffix}", properties: v, headers: v }, [G]: h }], [G]: j }, { error: "DualStack is enabled but this partition does not support DualStack", [G]: k }], [G]: j }, w, { endpoint: { url: i, properties: v, headers: v }, [G]: h }], [G]: j }], [G]: j }, { error: "Invalid Configuration: Missing Region", [G]: k }] };
+exports.ruleSet = _data;
+
+
+/***/ }),
+
+/***/ 52209:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.STSServiceException = void 0;
+const tslib_1 = __nccwpck_require__(4351);
+tslib_1.__exportStar(__nccwpck_require__(64195), exports);
+tslib_1.__exportStar(__nccwpck_require__(32605), exports);
+tslib_1.__exportStar(__nccwpck_require__(55716), exports);
+tslib_1.__exportStar(__nccwpck_require__(20106), exports);
+tslib_1.__exportStar(__nccwpck_require__(88028), exports);
+var STSServiceException_1 = __nccwpck_require__(26450);
+Object.defineProperty(exports, "STSServiceException", ({ enumerable: true, get: function () { return STSServiceException_1.STSServiceException; } }));
+
+
+/***/ }),
+
+/***/ 26450:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.STSServiceException = exports.__ServiceException = void 0;
+const smithy_client_1 = __nccwpck_require__(63570);
+Object.defineProperty(exports, "__ServiceException", ({ enumerable: true, get: function () { return smithy_client_1.ServiceException; } }));
+class STSServiceException extends smithy_client_1.ServiceException {
+ constructor(options) {
+ super(options);
+ Object.setPrototypeOf(this, STSServiceException.prototype);
+ }
+}
+exports.STSServiceException = STSServiceException;
+
+
+/***/ }),
+
+/***/ 20106:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+const tslib_1 = __nccwpck_require__(4351);
+tslib_1.__exportStar(__nccwpck_require__(21780), exports);
+
+
+/***/ }),
+
+/***/ 21780:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.GetSessionTokenResponseFilterSensitiveLog = exports.GetFederationTokenResponseFilterSensitiveLog = exports.AssumeRoleWithWebIdentityResponseFilterSensitiveLog = exports.AssumeRoleWithWebIdentityRequestFilterSensitiveLog = exports.AssumeRoleWithSAMLResponseFilterSensitiveLog = exports.AssumeRoleWithSAMLRequestFilterSensitiveLog = exports.AssumeRoleResponseFilterSensitiveLog = exports.CredentialsFilterSensitiveLog = exports.InvalidAuthorizationMessageException = exports.IDPCommunicationErrorException = exports.InvalidIdentityTokenException = exports.IDPRejectedClaimException = exports.RegionDisabledException = exports.PackedPolicyTooLargeException = exports.MalformedPolicyDocumentException = exports.ExpiredTokenException = void 0;
+const smithy_client_1 = __nccwpck_require__(63570);
+const STSServiceException_1 = __nccwpck_require__(26450);
+class ExpiredTokenException extends STSServiceException_1.STSServiceException {
+ constructor(opts) {
+ super({
+ name: "ExpiredTokenException",
+ $fault: "client",
+ ...opts,
+ });
+ this.name = "ExpiredTokenException";
+ this.$fault = "client";
+ Object.setPrototypeOf(this, ExpiredTokenException.prototype);
+ }
+}
+exports.ExpiredTokenException = ExpiredTokenException;
+class MalformedPolicyDocumentException extends STSServiceException_1.STSServiceException {
+ constructor(opts) {
+ super({
+ name: "MalformedPolicyDocumentException",
+ $fault: "client",
+ ...opts,
+ });
+ this.name = "MalformedPolicyDocumentException";
+ this.$fault = "client";
+ Object.setPrototypeOf(this, MalformedPolicyDocumentException.prototype);
+ }
+}
+exports.MalformedPolicyDocumentException = MalformedPolicyDocumentException;
+class PackedPolicyTooLargeException extends STSServiceException_1.STSServiceException {
+ constructor(opts) {
+ super({
+ name: "PackedPolicyTooLargeException",
+ $fault: "client",
+ ...opts,
+ });
+ this.name = "PackedPolicyTooLargeException";
+ this.$fault = "client";
+ Object.setPrototypeOf(this, PackedPolicyTooLargeException.prototype);
+ }
+}
+exports.PackedPolicyTooLargeException = PackedPolicyTooLargeException;
+class RegionDisabledException extends STSServiceException_1.STSServiceException {
+ constructor(opts) {
+ super({
+ name: "RegionDisabledException",
+ $fault: "client",
+ ...opts,
+ });
+ this.name = "RegionDisabledException";
+ this.$fault = "client";
+ Object.setPrototypeOf(this, RegionDisabledException.prototype);
+ }
+}
+exports.RegionDisabledException = RegionDisabledException;
+class IDPRejectedClaimException extends STSServiceException_1.STSServiceException {
+ constructor(opts) {
+ super({
+ name: "IDPRejectedClaimException",
+ $fault: "client",
+ ...opts,
+ });
+ this.name = "IDPRejectedClaimException";
+ this.$fault = "client";
+ Object.setPrototypeOf(this, IDPRejectedClaimException.prototype);
+ }
+}
+exports.IDPRejectedClaimException = IDPRejectedClaimException;
+class InvalidIdentityTokenException extends STSServiceException_1.STSServiceException {
+ constructor(opts) {
+ super({
+ name: "InvalidIdentityTokenException",
+ $fault: "client",
+ ...opts,
+ });
+ this.name = "InvalidIdentityTokenException";
+ this.$fault = "client";
+ Object.setPrototypeOf(this, InvalidIdentityTokenException.prototype);
+ }
+}
+exports.InvalidIdentityTokenException = InvalidIdentityTokenException;
+class IDPCommunicationErrorException extends STSServiceException_1.STSServiceException {
+ constructor(opts) {
+ super({
+ name: "IDPCommunicationErrorException",
+ $fault: "client",
+ ...opts,
+ });
+ this.name = "IDPCommunicationErrorException";
+ this.$fault = "client";
+ Object.setPrototypeOf(this, IDPCommunicationErrorException.prototype);
+ }
+}
+exports.IDPCommunicationErrorException = IDPCommunicationErrorException;
+class InvalidAuthorizationMessageException extends STSServiceException_1.STSServiceException {
+ constructor(opts) {
+ super({
+ name: "InvalidAuthorizationMessageException",
+ $fault: "client",
+ ...opts,
+ });
+ this.name = "InvalidAuthorizationMessageException";
+ this.$fault = "client";
+ Object.setPrototypeOf(this, InvalidAuthorizationMessageException.prototype);
+ }
+}
+exports.InvalidAuthorizationMessageException = InvalidAuthorizationMessageException;
+const CredentialsFilterSensitiveLog = (obj) => ({
+ ...obj,
+ ...(obj.SecretAccessKey && { SecretAccessKey: smithy_client_1.SENSITIVE_STRING }),
+});
+exports.CredentialsFilterSensitiveLog = CredentialsFilterSensitiveLog;
+const AssumeRoleResponseFilterSensitiveLog = (obj) => ({
+ ...obj,
+ ...(obj.Credentials && { Credentials: (0, exports.CredentialsFilterSensitiveLog)(obj.Credentials) }),
+});
+exports.AssumeRoleResponseFilterSensitiveLog = AssumeRoleResponseFilterSensitiveLog;
+const AssumeRoleWithSAMLRequestFilterSensitiveLog = (obj) => ({
+ ...obj,
+ ...(obj.SAMLAssertion && { SAMLAssertion: smithy_client_1.SENSITIVE_STRING }),
+});
+exports.AssumeRoleWithSAMLRequestFilterSensitiveLog = AssumeRoleWithSAMLRequestFilterSensitiveLog;
+const AssumeRoleWithSAMLResponseFilterSensitiveLog = (obj) => ({
+ ...obj,
+ ...(obj.Credentials && { Credentials: (0, exports.CredentialsFilterSensitiveLog)(obj.Credentials) }),
+});
+exports.AssumeRoleWithSAMLResponseFilterSensitiveLog = AssumeRoleWithSAMLResponseFilterSensitiveLog;
+const AssumeRoleWithWebIdentityRequestFilterSensitiveLog = (obj) => ({
+ ...obj,
+ ...(obj.WebIdentityToken && { WebIdentityToken: smithy_client_1.SENSITIVE_STRING }),
+});
+exports.AssumeRoleWithWebIdentityRequestFilterSensitiveLog = AssumeRoleWithWebIdentityRequestFilterSensitiveLog;
+const AssumeRoleWithWebIdentityResponseFilterSensitiveLog = (obj) => ({
+ ...obj,
+ ...(obj.Credentials && { Credentials: (0, exports.CredentialsFilterSensitiveLog)(obj.Credentials) }),
+});
+exports.AssumeRoleWithWebIdentityResponseFilterSensitiveLog = AssumeRoleWithWebIdentityResponseFilterSensitiveLog;
+const GetFederationTokenResponseFilterSensitiveLog = (obj) => ({
+ ...obj,
+ ...(obj.Credentials && { Credentials: (0, exports.CredentialsFilterSensitiveLog)(obj.Credentials) }),
+});
+exports.GetFederationTokenResponseFilterSensitiveLog = GetFederationTokenResponseFilterSensitiveLog;
+const GetSessionTokenResponseFilterSensitiveLog = (obj) => ({
+ ...obj,
+ ...(obj.Credentials && { Credentials: (0, exports.CredentialsFilterSensitiveLog)(obj.Credentials) }),
+});
+exports.GetSessionTokenResponseFilterSensitiveLog = GetSessionTokenResponseFilterSensitiveLog;
+
+
+/***/ }),
+
+/***/ 10740:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.de_GetSessionTokenCommand = exports.de_GetFederationTokenCommand = exports.de_GetCallerIdentityCommand = exports.de_GetAccessKeyInfoCommand = exports.de_DecodeAuthorizationMessageCommand = exports.de_AssumeRoleWithWebIdentityCommand = exports.de_AssumeRoleWithSAMLCommand = exports.de_AssumeRoleCommand = exports.se_GetSessionTokenCommand = exports.se_GetFederationTokenCommand = exports.se_GetCallerIdentityCommand = exports.se_GetAccessKeyInfoCommand = exports.se_DecodeAuthorizationMessageCommand = exports.se_AssumeRoleWithWebIdentityCommand = exports.se_AssumeRoleWithSAMLCommand = exports.se_AssumeRoleCommand = void 0;
+const protocol_http_1 = __nccwpck_require__(64418);
+const smithy_client_1 = __nccwpck_require__(63570);
+const fast_xml_parser_1 = __nccwpck_require__(12603);
+const models_0_1 = __nccwpck_require__(21780);
+const STSServiceException_1 = __nccwpck_require__(26450);
+const se_AssumeRoleCommand = async (input, context) => {
+ const headers = SHARED_HEADERS;
+ let body;
+ body = buildFormUrlencodedString({
+ ...se_AssumeRoleRequest(input, context),
+ Action: "AssumeRole",
+ Version: "2011-06-15",
+ });
+ return buildHttpRpcRequest(context, headers, "/", undefined, body);
+};
+exports.se_AssumeRoleCommand = se_AssumeRoleCommand;
+const se_AssumeRoleWithSAMLCommand = async (input, context) => {
+ const headers = SHARED_HEADERS;
+ let body;
+ body = buildFormUrlencodedString({
+ ...se_AssumeRoleWithSAMLRequest(input, context),
+ Action: "AssumeRoleWithSAML",
+ Version: "2011-06-15",
+ });
+ return buildHttpRpcRequest(context, headers, "/", undefined, body);
+};
+exports.se_AssumeRoleWithSAMLCommand = se_AssumeRoleWithSAMLCommand;
+const se_AssumeRoleWithWebIdentityCommand = async (input, context) => {
+ const headers = SHARED_HEADERS;
+ let body;
+ body = buildFormUrlencodedString({
+ ...se_AssumeRoleWithWebIdentityRequest(input, context),
+ Action: "AssumeRoleWithWebIdentity",
+ Version: "2011-06-15",
+ });
+ return buildHttpRpcRequest(context, headers, "/", undefined, body);
+};
+exports.se_AssumeRoleWithWebIdentityCommand = se_AssumeRoleWithWebIdentityCommand;
+const se_DecodeAuthorizationMessageCommand = async (input, context) => {
+ const headers = SHARED_HEADERS;
+ let body;
+ body = buildFormUrlencodedString({
+ ...se_DecodeAuthorizationMessageRequest(input, context),
+ Action: "DecodeAuthorizationMessage",
+ Version: "2011-06-15",
+ });
+ return buildHttpRpcRequest(context, headers, "/", undefined, body);
+};
+exports.se_DecodeAuthorizationMessageCommand = se_DecodeAuthorizationMessageCommand;
+const se_GetAccessKeyInfoCommand = async (input, context) => {
+ const headers = SHARED_HEADERS;
+ let body;
+ body = buildFormUrlencodedString({
+ ...se_GetAccessKeyInfoRequest(input, context),
+ Action: "GetAccessKeyInfo",
+ Version: "2011-06-15",
+ });
+ return buildHttpRpcRequest(context, headers, "/", undefined, body);
+};
+exports.se_GetAccessKeyInfoCommand = se_GetAccessKeyInfoCommand;
+const se_GetCallerIdentityCommand = async (input, context) => {
+ const headers = SHARED_HEADERS;
+ let body;
+ body = buildFormUrlencodedString({
+ ...se_GetCallerIdentityRequest(input, context),
+ Action: "GetCallerIdentity",
+ Version: "2011-06-15",
+ });
+ return buildHttpRpcRequest(context, headers, "/", undefined, body);
+};
+exports.se_GetCallerIdentityCommand = se_GetCallerIdentityCommand;
+const se_GetFederationTokenCommand = async (input, context) => {
+ const headers = SHARED_HEADERS;
+ let body;
+ body = buildFormUrlencodedString({
+ ...se_GetFederationTokenRequest(input, context),
+ Action: "GetFederationToken",
+ Version: "2011-06-15",
+ });
+ return buildHttpRpcRequest(context, headers, "/", undefined, body);
+};
+exports.se_GetFederationTokenCommand = se_GetFederationTokenCommand;
+const se_GetSessionTokenCommand = async (input, context) => {
+ const headers = SHARED_HEADERS;
+ let body;
+ body = buildFormUrlencodedString({
+ ...se_GetSessionTokenRequest(input, context),
+ Action: "GetSessionToken",
+ Version: "2011-06-15",
+ });
+ return buildHttpRpcRequest(context, headers, "/", undefined, body);
+};
+exports.se_GetSessionTokenCommand = se_GetSessionTokenCommand;
+const de_AssumeRoleCommand = async (output, context) => {
+ if (output.statusCode >= 300) {
+ return de_AssumeRoleCommandError(output, context);
+ }
+ const data = await parseBody(output.body, context);
+ let contents = {};
+ contents = de_AssumeRoleResponse(data.AssumeRoleResult, context);
+ const response = {
+ $metadata: deserializeMetadata(output),
+ ...contents,
+ };
+ return response;
+};
+exports.de_AssumeRoleCommand = de_AssumeRoleCommand;
+const de_AssumeRoleCommandError = async (output, context) => {
+ const parsedOutput = {
+ ...output,
+ body: await parseErrorBody(output.body, context),
+ };
+ const errorCode = loadQueryErrorCode(output, parsedOutput.body);
+ switch (errorCode) {
+ case "ExpiredTokenException":
+ case "com.amazonaws.sts#ExpiredTokenException":
+ throw await de_ExpiredTokenExceptionRes(parsedOutput, context);
+ case "MalformedPolicyDocument":
+ case "com.amazonaws.sts#MalformedPolicyDocumentException":
+ throw await de_MalformedPolicyDocumentExceptionRes(parsedOutput, context);
+ case "PackedPolicyTooLarge":
+ case "com.amazonaws.sts#PackedPolicyTooLargeException":
+ throw await de_PackedPolicyTooLargeExceptionRes(parsedOutput, context);
+ case "RegionDisabledException":
+ case "com.amazonaws.sts#RegionDisabledException":
+ throw await de_RegionDisabledExceptionRes(parsedOutput, context);
+ default:
+ const parsedBody = parsedOutput.body;
+ return throwDefaultError({
+ output,
+ parsedBody: parsedBody.Error,
+ errorCode,
+ });
+ }
+};
+const de_AssumeRoleWithSAMLCommand = async (output, context) => {
+ if (output.statusCode >= 300) {
+ return de_AssumeRoleWithSAMLCommandError(output, context);
+ }
+ const data = await parseBody(output.body, context);
+ let contents = {};
+ contents = de_AssumeRoleWithSAMLResponse(data.AssumeRoleWithSAMLResult, context);
+ const response = {
+ $metadata: deserializeMetadata(output),
+ ...contents,
+ };
+ return response;
+};
+exports.de_AssumeRoleWithSAMLCommand = de_AssumeRoleWithSAMLCommand;
+const de_AssumeRoleWithSAMLCommandError = async (output, context) => {
+ const parsedOutput = {
+ ...output,
+ body: await parseErrorBody(output.body, context),
+ };
+ const errorCode = loadQueryErrorCode(output, parsedOutput.body);
+ switch (errorCode) {
+ case "ExpiredTokenException":
+ case "com.amazonaws.sts#ExpiredTokenException":
+ throw await de_ExpiredTokenExceptionRes(parsedOutput, context);
+ case "IDPRejectedClaim":
+ case "com.amazonaws.sts#IDPRejectedClaimException":
+ throw await de_IDPRejectedClaimExceptionRes(parsedOutput, context);
+ case "InvalidIdentityToken":
+ case "com.amazonaws.sts#InvalidIdentityTokenException":
+ throw await de_InvalidIdentityTokenExceptionRes(parsedOutput, context);
+ case "MalformedPolicyDocument":
+ case "com.amazonaws.sts#MalformedPolicyDocumentException":
+ throw await de_MalformedPolicyDocumentExceptionRes(parsedOutput, context);
+ case "PackedPolicyTooLarge":
+ case "com.amazonaws.sts#PackedPolicyTooLargeException":
+ throw await de_PackedPolicyTooLargeExceptionRes(parsedOutput, context);
+ case "RegionDisabledException":
+ case "com.amazonaws.sts#RegionDisabledException":
+ throw await de_RegionDisabledExceptionRes(parsedOutput, context);
+ default:
+ const parsedBody = parsedOutput.body;
+ return throwDefaultError({
+ output,
+ parsedBody: parsedBody.Error,
+ errorCode,
+ });
+ }
+};
+const de_AssumeRoleWithWebIdentityCommand = async (output, context) => {
+ if (output.statusCode >= 300) {
+ return de_AssumeRoleWithWebIdentityCommandError(output, context);
+ }
+ const data = await parseBody(output.body, context);
+ let contents = {};
+ contents = de_AssumeRoleWithWebIdentityResponse(data.AssumeRoleWithWebIdentityResult, context);
+ const response = {
+ $metadata: deserializeMetadata(output),
+ ...contents,
+ };
+ return response;
+};
+exports.de_AssumeRoleWithWebIdentityCommand = de_AssumeRoleWithWebIdentityCommand;
+const de_AssumeRoleWithWebIdentityCommandError = async (output, context) => {
+ const parsedOutput = {
+ ...output,
+ body: await parseErrorBody(output.body, context),
+ };
+ const errorCode = loadQueryErrorCode(output, parsedOutput.body);
+ switch (errorCode) {
+ case "ExpiredTokenException":
+ case "com.amazonaws.sts#ExpiredTokenException":
+ throw await de_ExpiredTokenExceptionRes(parsedOutput, context);
+ case "IDPCommunicationError":
+ case "com.amazonaws.sts#IDPCommunicationErrorException":
+ throw await de_IDPCommunicationErrorExceptionRes(parsedOutput, context);
+ case "IDPRejectedClaim":
+ case "com.amazonaws.sts#IDPRejectedClaimException":
+ throw await de_IDPRejectedClaimExceptionRes(parsedOutput, context);
+ case "InvalidIdentityToken":
+ case "com.amazonaws.sts#InvalidIdentityTokenException":
+ throw await de_InvalidIdentityTokenExceptionRes(parsedOutput, context);
+ case "MalformedPolicyDocument":
+ case "com.amazonaws.sts#MalformedPolicyDocumentException":
+ throw await de_MalformedPolicyDocumentExceptionRes(parsedOutput, context);
+ case "PackedPolicyTooLarge":
+ case "com.amazonaws.sts#PackedPolicyTooLargeException":
+ throw await de_PackedPolicyTooLargeExceptionRes(parsedOutput, context);
+ case "RegionDisabledException":
+ case "com.amazonaws.sts#RegionDisabledException":
+ throw await de_RegionDisabledExceptionRes(parsedOutput, context);
+ default:
+ const parsedBody = parsedOutput.body;
+ return throwDefaultError({
+ output,
+ parsedBody: parsedBody.Error,
+ errorCode,
+ });
+ }
+};
+const de_DecodeAuthorizationMessageCommand = async (output, context) => {
+ if (output.statusCode >= 300) {
+ return de_DecodeAuthorizationMessageCommandError(output, context);
+ }
+ const data = await parseBody(output.body, context);
+ let contents = {};
+ contents = de_DecodeAuthorizationMessageResponse(data.DecodeAuthorizationMessageResult, context);
+ const response = {
+ $metadata: deserializeMetadata(output),
+ ...contents,
+ };
+ return response;
+};
+exports.de_DecodeAuthorizationMessageCommand = de_DecodeAuthorizationMessageCommand;
+const de_DecodeAuthorizationMessageCommandError = async (output, context) => {
+ const parsedOutput = {
+ ...output,
+ body: await parseErrorBody(output.body, context),
+ };
+ const errorCode = loadQueryErrorCode(output, parsedOutput.body);
+ switch (errorCode) {
+ case "InvalidAuthorizationMessageException":
+ case "com.amazonaws.sts#InvalidAuthorizationMessageException":
+ throw await de_InvalidAuthorizationMessageExceptionRes(parsedOutput, context);
+ default:
+ const parsedBody = parsedOutput.body;
+ return throwDefaultError({
+ output,
+ parsedBody: parsedBody.Error,
+ errorCode,
+ });
+ }
+};
+const de_GetAccessKeyInfoCommand = async (output, context) => {
+ if (output.statusCode >= 300) {
+ return de_GetAccessKeyInfoCommandError(output, context);
+ }
+ const data = await parseBody(output.body, context);
+ let contents = {};
+ contents = de_GetAccessKeyInfoResponse(data.GetAccessKeyInfoResult, context);
+ const response = {
+ $metadata: deserializeMetadata(output),
+ ...contents,
+ };
+ return response;
+};
+exports.de_GetAccessKeyInfoCommand = de_GetAccessKeyInfoCommand;
+const de_GetAccessKeyInfoCommandError = async (output, context) => {
+ const parsedOutput = {
+ ...output,
+ body: await parseErrorBody(output.body, context),
+ };
+ const errorCode = loadQueryErrorCode(output, parsedOutput.body);
+ const parsedBody = parsedOutput.body;
+ return throwDefaultError({
+ output,
+ parsedBody: parsedBody.Error,
+ errorCode,
+ });
+};
+const de_GetCallerIdentityCommand = async (output, context) => {
+ if (output.statusCode >= 300) {
+ return de_GetCallerIdentityCommandError(output, context);
+ }
+ const data = await parseBody(output.body, context);
+ let contents = {};
+ contents = de_GetCallerIdentityResponse(data.GetCallerIdentityResult, context);
+ const response = {
+ $metadata: deserializeMetadata(output),
+ ...contents,
+ };
+ return response;
+};
+exports.de_GetCallerIdentityCommand = de_GetCallerIdentityCommand;
+const de_GetCallerIdentityCommandError = async (output, context) => {
+ const parsedOutput = {
+ ...output,
+ body: await parseErrorBody(output.body, context),
+ };
+ const errorCode = loadQueryErrorCode(output, parsedOutput.body);
+ const parsedBody = parsedOutput.body;
+ return throwDefaultError({
+ output,
+ parsedBody: parsedBody.Error,
+ errorCode,
+ });
+};
+const de_GetFederationTokenCommand = async (output, context) => {
+ if (output.statusCode >= 300) {
+ return de_GetFederationTokenCommandError(output, context);
+ }
+ const data = await parseBody(output.body, context);
+ let contents = {};
+ contents = de_GetFederationTokenResponse(data.GetFederationTokenResult, context);
+ const response = {
+ $metadata: deserializeMetadata(output),
+ ...contents,
+ };
+ return response;
+};
+exports.de_GetFederationTokenCommand = de_GetFederationTokenCommand;
+const de_GetFederationTokenCommandError = async (output, context) => {
+ const parsedOutput = {
+ ...output,
+ body: await parseErrorBody(output.body, context),
+ };
+ const errorCode = loadQueryErrorCode(output, parsedOutput.body);
+ switch (errorCode) {
+ case "MalformedPolicyDocument":
+ case "com.amazonaws.sts#MalformedPolicyDocumentException":
+ throw await de_MalformedPolicyDocumentExceptionRes(parsedOutput, context);
+ case "PackedPolicyTooLarge":
+ case "com.amazonaws.sts#PackedPolicyTooLargeException":
+ throw await de_PackedPolicyTooLargeExceptionRes(parsedOutput, context);
+ case "RegionDisabledException":
+ case "com.amazonaws.sts#RegionDisabledException":
+ throw await de_RegionDisabledExceptionRes(parsedOutput, context);
+ default:
+ const parsedBody = parsedOutput.body;
+ return throwDefaultError({
+ output,
+ parsedBody: parsedBody.Error,
+ errorCode,
+ });
+ }
+};
+const de_GetSessionTokenCommand = async (output, context) => {
+ if (output.statusCode >= 300) {
+ return de_GetSessionTokenCommandError(output, context);
+ }
+ const data = await parseBody(output.body, context);
+ let contents = {};
+ contents = de_GetSessionTokenResponse(data.GetSessionTokenResult, context);
+ const response = {
+ $metadata: deserializeMetadata(output),
+ ...contents,
+ };
+ return response;
+};
+exports.de_GetSessionTokenCommand = de_GetSessionTokenCommand;
+const de_GetSessionTokenCommandError = async (output, context) => {
+ const parsedOutput = {
+ ...output,
+ body: await parseErrorBody(output.body, context),
+ };
+ const errorCode = loadQueryErrorCode(output, parsedOutput.body);
+ switch (errorCode) {
+ case "RegionDisabledException":
+ case "com.amazonaws.sts#RegionDisabledException":
+ throw await de_RegionDisabledExceptionRes(parsedOutput, context);
+ default:
+ const parsedBody = parsedOutput.body;
+ return throwDefaultError({
+ output,
+ parsedBody: parsedBody.Error,
+ errorCode,
+ });
+ }
+};
+const de_ExpiredTokenExceptionRes = async (parsedOutput, context) => {
+ const body = parsedOutput.body;
+ const deserialized = de_ExpiredTokenException(body.Error, context);
+ const exception = new models_0_1.ExpiredTokenException({
+ $metadata: deserializeMetadata(parsedOutput),
+ ...deserialized,
+ });
+ return (0, smithy_client_1.decorateServiceException)(exception, body);
+};
+const de_IDPCommunicationErrorExceptionRes = async (parsedOutput, context) => {
+ const body = parsedOutput.body;
+ const deserialized = de_IDPCommunicationErrorException(body.Error, context);
+ const exception = new models_0_1.IDPCommunicationErrorException({
+ $metadata: deserializeMetadata(parsedOutput),
+ ...deserialized,
+ });
+ return (0, smithy_client_1.decorateServiceException)(exception, body);
+};
+const de_IDPRejectedClaimExceptionRes = async (parsedOutput, context) => {
+ const body = parsedOutput.body;
+ const deserialized = de_IDPRejectedClaimException(body.Error, context);
+ const exception = new models_0_1.IDPRejectedClaimException({
+ $metadata: deserializeMetadata(parsedOutput),
+ ...deserialized,
+ });
+ return (0, smithy_client_1.decorateServiceException)(exception, body);
+};
+const de_InvalidAuthorizationMessageExceptionRes = async (parsedOutput, context) => {
+ const body = parsedOutput.body;
+ const deserialized = de_InvalidAuthorizationMessageException(body.Error, context);
+ const exception = new models_0_1.InvalidAuthorizationMessageException({
+ $metadata: deserializeMetadata(parsedOutput),
+ ...deserialized,
+ });
+ return (0, smithy_client_1.decorateServiceException)(exception, body);
+};
+const de_InvalidIdentityTokenExceptionRes = async (parsedOutput, context) => {
+ const body = parsedOutput.body;
+ const deserialized = de_InvalidIdentityTokenException(body.Error, context);
+ const exception = new models_0_1.InvalidIdentityTokenException({
+ $metadata: deserializeMetadata(parsedOutput),
+ ...deserialized,
+ });
+ return (0, smithy_client_1.decorateServiceException)(exception, body);
+};
+const de_MalformedPolicyDocumentExceptionRes = async (parsedOutput, context) => {
+ const body = parsedOutput.body;
+ const deserialized = de_MalformedPolicyDocumentException(body.Error, context);
+ const exception = new models_0_1.MalformedPolicyDocumentException({
+ $metadata: deserializeMetadata(parsedOutput),
+ ...deserialized,
+ });
+ return (0, smithy_client_1.decorateServiceException)(exception, body);
+};
+const de_PackedPolicyTooLargeExceptionRes = async (parsedOutput, context) => {
+ const body = parsedOutput.body;
+ const deserialized = de_PackedPolicyTooLargeException(body.Error, context);
+ const exception = new models_0_1.PackedPolicyTooLargeException({
+ $metadata: deserializeMetadata(parsedOutput),
+ ...deserialized,
+ });
+ return (0, smithy_client_1.decorateServiceException)(exception, body);
+};
+const de_RegionDisabledExceptionRes = async (parsedOutput, context) => {
+ const body = parsedOutput.body;
+ const deserialized = de_RegionDisabledException(body.Error, context);
+ const exception = new models_0_1.RegionDisabledException({
+ $metadata: deserializeMetadata(parsedOutput),
+ ...deserialized,
+ });
+ return (0, smithy_client_1.decorateServiceException)(exception, body);
+};
+const se_AssumeRoleRequest = (input, context) => {
+ const entries = {};
+ if (input.RoleArn != null) {
+ entries["RoleArn"] = input.RoleArn;
+ }
+ if (input.RoleSessionName != null) {
+ entries["RoleSessionName"] = input.RoleSessionName;
+ }
+ if (input.PolicyArns != null) {
+ const memberEntries = se_policyDescriptorListType(input.PolicyArns, context);
+ if (input.PolicyArns?.length === 0) {
+ entries.PolicyArns = [];
+ }
+ Object.entries(memberEntries).forEach(([key, value]) => {
+ const loc = `PolicyArns.${key}`;
+ entries[loc] = value;
+ });
+ }
+ if (input.Policy != null) {
+ entries["Policy"] = input.Policy;
+ }
+ if (input.DurationSeconds != null) {
+ entries["DurationSeconds"] = input.DurationSeconds;
+ }
+ if (input.Tags != null) {
+ const memberEntries = se_tagListType(input.Tags, context);
+ if (input.Tags?.length === 0) {
+ entries.Tags = [];
+ }
+ Object.entries(memberEntries).forEach(([key, value]) => {
+ const loc = `Tags.${key}`;
+ entries[loc] = value;
+ });
+ }
+ if (input.TransitiveTagKeys != null) {
+ const memberEntries = se_tagKeyListType(input.TransitiveTagKeys, context);
+ if (input.TransitiveTagKeys?.length === 0) {
+ entries.TransitiveTagKeys = [];
+ }
+ Object.entries(memberEntries).forEach(([key, value]) => {
+ const loc = `TransitiveTagKeys.${key}`;
+ entries[loc] = value;
+ });
+ }
+ if (input.ExternalId != null) {
+ entries["ExternalId"] = input.ExternalId;
+ }
+ if (input.SerialNumber != null) {
+ entries["SerialNumber"] = input.SerialNumber;
+ }
+ if (input.TokenCode != null) {
+ entries["TokenCode"] = input.TokenCode;
+ }
+ if (input.SourceIdentity != null) {
+ entries["SourceIdentity"] = input.SourceIdentity;
+ }
+ if (input.ProvidedContexts != null) {
+ const memberEntries = se_ProvidedContextsListType(input.ProvidedContexts, context);
+ if (input.ProvidedContexts?.length === 0) {
+ entries.ProvidedContexts = [];
+ }
+ Object.entries(memberEntries).forEach(([key, value]) => {
+ const loc = `ProvidedContexts.${key}`;
+ entries[loc] = value;
+ });
+ }
+ return entries;
+};
+const se_AssumeRoleWithSAMLRequest = (input, context) => {
+ const entries = {};
+ if (input.RoleArn != null) {
+ entries["RoleArn"] = input.RoleArn;
+ }
+ if (input.PrincipalArn != null) {
+ entries["PrincipalArn"] = input.PrincipalArn;
+ }
+ if (input.SAMLAssertion != null) {
+ entries["SAMLAssertion"] = input.SAMLAssertion;
+ }
+ if (input.PolicyArns != null) {
+ const memberEntries = se_policyDescriptorListType(input.PolicyArns, context);
+ if (input.PolicyArns?.length === 0) {
+ entries.PolicyArns = [];
+ }
+ Object.entries(memberEntries).forEach(([key, value]) => {
+ const loc = `PolicyArns.${key}`;
+ entries[loc] = value;
+ });
+ }
+ if (input.Policy != null) {
+ entries["Policy"] = input.Policy;
+ }
+ if (input.DurationSeconds != null) {
+ entries["DurationSeconds"] = input.DurationSeconds;
+ }
+ return entries;
+};
+const se_AssumeRoleWithWebIdentityRequest = (input, context) => {
+ const entries = {};
+ if (input.RoleArn != null) {
+ entries["RoleArn"] = input.RoleArn;
+ }
+ if (input.RoleSessionName != null) {
+ entries["RoleSessionName"] = input.RoleSessionName;
+ }
+ if (input.WebIdentityToken != null) {
+ entries["WebIdentityToken"] = input.WebIdentityToken;
+ }
+ if (input.ProviderId != null) {
+ entries["ProviderId"] = input.ProviderId;
+ }
+ if (input.PolicyArns != null) {
+ const memberEntries = se_policyDescriptorListType(input.PolicyArns, context);
+ if (input.PolicyArns?.length === 0) {
+ entries.PolicyArns = [];
+ }
+ Object.entries(memberEntries).forEach(([key, value]) => {
+ const loc = `PolicyArns.${key}`;
+ entries[loc] = value;
+ });
+ }
+ if (input.Policy != null) {
+ entries["Policy"] = input.Policy;
+ }
+ if (input.DurationSeconds != null) {
+ entries["DurationSeconds"] = input.DurationSeconds;
+ }
+ return entries;
+};
+const se_DecodeAuthorizationMessageRequest = (input, context) => {
+ const entries = {};
+ if (input.EncodedMessage != null) {
+ entries["EncodedMessage"] = input.EncodedMessage;
+ }
+ return entries;
+};
+const se_GetAccessKeyInfoRequest = (input, context) => {
+ const entries = {};
+ if (input.AccessKeyId != null) {
+ entries["AccessKeyId"] = input.AccessKeyId;
+ }
+ return entries;
+};
+const se_GetCallerIdentityRequest = (input, context) => {
+ const entries = {};
+ return entries;
+};
+const se_GetFederationTokenRequest = (input, context) => {
+ const entries = {};
+ if (input.Name != null) {
+ entries["Name"] = input.Name;
+ }
+ if (input.Policy != null) {
+ entries["Policy"] = input.Policy;
+ }
+ if (input.PolicyArns != null) {
+ const memberEntries = se_policyDescriptorListType(input.PolicyArns, context);
+ if (input.PolicyArns?.length === 0) {
+ entries.PolicyArns = [];
+ }
+ Object.entries(memberEntries).forEach(([key, value]) => {
+ const loc = `PolicyArns.${key}`;
+ entries[loc] = value;
+ });
+ }
+ if (input.DurationSeconds != null) {
+ entries["DurationSeconds"] = input.DurationSeconds;
+ }
+ if (input.Tags != null) {
+ const memberEntries = se_tagListType(input.Tags, context);
+ if (input.Tags?.length === 0) {
+ entries.Tags = [];
+ }
+ Object.entries(memberEntries).forEach(([key, value]) => {
+ const loc = `Tags.${key}`;
+ entries[loc] = value;
+ });
+ }
+ return entries;
+};
+const se_GetSessionTokenRequest = (input, context) => {
+ const entries = {};
+ if (input.DurationSeconds != null) {
+ entries["DurationSeconds"] = input.DurationSeconds;
+ }
+ if (input.SerialNumber != null) {
+ entries["SerialNumber"] = input.SerialNumber;
+ }
+ if (input.TokenCode != null) {
+ entries["TokenCode"] = input.TokenCode;
+ }
+ return entries;
+};
+const se_policyDescriptorListType = (input, context) => {
+ const entries = {};
+ let counter = 1;
+ for (const entry of input) {
+ if (entry === null) {
+ continue;
+ }
+ const memberEntries = se_PolicyDescriptorType(entry, context);
+ Object.entries(memberEntries).forEach(([key, value]) => {
+ entries[`member.${counter}.${key}`] = value;
+ });
+ counter++;
+ }
+ return entries;
+};
+const se_PolicyDescriptorType = (input, context) => {
+ const entries = {};
+ if (input.arn != null) {
+ entries["arn"] = input.arn;
+ }
+ return entries;
+};
+const se_ProvidedContext = (input, context) => {
+ const entries = {};
+ if (input.ProviderArn != null) {
+ entries["ProviderArn"] = input.ProviderArn;
+ }
+ if (input.ContextAssertion != null) {
+ entries["ContextAssertion"] = input.ContextAssertion;
+ }
+ return entries;
+};
+const se_ProvidedContextsListType = (input, context) => {
+ const entries = {};
+ let counter = 1;
+ for (const entry of input) {
+ if (entry === null) {
+ continue;
+ }
+ const memberEntries = se_ProvidedContext(entry, context);
+ Object.entries(memberEntries).forEach(([key, value]) => {
+ entries[`member.${counter}.${key}`] = value;
+ });
+ counter++;
+ }
+ return entries;
+};
+const se_Tag = (input, context) => {
+ const entries = {};
+ if (input.Key != null) {
+ entries["Key"] = input.Key;
+ }
+ if (input.Value != null) {
+ entries["Value"] = input.Value;
+ }
+ return entries;
+};
+const se_tagKeyListType = (input, context) => {
+ const entries = {};
+ let counter = 1;
+ for (const entry of input) {
+ if (entry === null) {
+ continue;
+ }
+ entries[`member.${counter}`] = entry;
+ counter++;
+ }
+ return entries;
+};
+const se_tagListType = (input, context) => {
+ const entries = {};
+ let counter = 1;
+ for (const entry of input) {
+ if (entry === null) {
+ continue;
+ }
+ const memberEntries = se_Tag(entry, context);
+ Object.entries(memberEntries).forEach(([key, value]) => {
+ entries[`member.${counter}.${key}`] = value;
+ });
+ counter++;
+ }
+ return entries;
+};
+const de_AssumedRoleUser = (output, context) => {
+ const contents = {};
+ if (output["AssumedRoleId"] !== undefined) {
+ contents.AssumedRoleId = (0, smithy_client_1.expectString)(output["AssumedRoleId"]);
+ }
+ if (output["Arn"] !== undefined) {
+ contents.Arn = (0, smithy_client_1.expectString)(output["Arn"]);
+ }
+ return contents;
+};
+const de_AssumeRoleResponse = (output, context) => {
+ const contents = {};
+ if (output["Credentials"] !== undefined) {
+ contents.Credentials = de_Credentials(output["Credentials"], context);
+ }
+ if (output["AssumedRoleUser"] !== undefined) {
+ contents.AssumedRoleUser = de_AssumedRoleUser(output["AssumedRoleUser"], context);
+ }
+ if (output["PackedPolicySize"] !== undefined) {
+ contents.PackedPolicySize = (0, smithy_client_1.strictParseInt32)(output["PackedPolicySize"]);
+ }
+ if (output["SourceIdentity"] !== undefined) {
+ contents.SourceIdentity = (0, smithy_client_1.expectString)(output["SourceIdentity"]);
+ }
+ return contents;
+};
+const de_AssumeRoleWithSAMLResponse = (output, context) => {
+ const contents = {};
+ if (output["Credentials"] !== undefined) {
+ contents.Credentials = de_Credentials(output["Credentials"], context);
+ }
+ if (output["AssumedRoleUser"] !== undefined) {
+ contents.AssumedRoleUser = de_AssumedRoleUser(output["AssumedRoleUser"], context);
+ }
+ if (output["PackedPolicySize"] !== undefined) {
+ contents.PackedPolicySize = (0, smithy_client_1.strictParseInt32)(output["PackedPolicySize"]);
+ }
+ if (output["Subject"] !== undefined) {
+ contents.Subject = (0, smithy_client_1.expectString)(output["Subject"]);
+ }
+ if (output["SubjectType"] !== undefined) {
+ contents.SubjectType = (0, smithy_client_1.expectString)(output["SubjectType"]);
+ }
+ if (output["Issuer"] !== undefined) {
+ contents.Issuer = (0, smithy_client_1.expectString)(output["Issuer"]);
+ }
+ if (output["Audience"] !== undefined) {
+ contents.Audience = (0, smithy_client_1.expectString)(output["Audience"]);
+ }
+ if (output["NameQualifier"] !== undefined) {
+ contents.NameQualifier = (0, smithy_client_1.expectString)(output["NameQualifier"]);
+ }
+ if (output["SourceIdentity"] !== undefined) {
+ contents.SourceIdentity = (0, smithy_client_1.expectString)(output["SourceIdentity"]);
+ }
+ return contents;
+};
+const de_AssumeRoleWithWebIdentityResponse = (output, context) => {
+ const contents = {};
+ if (output["Credentials"] !== undefined) {
+ contents.Credentials = de_Credentials(output["Credentials"], context);
+ }
+ if (output["SubjectFromWebIdentityToken"] !== undefined) {
+ contents.SubjectFromWebIdentityToken = (0, smithy_client_1.expectString)(output["SubjectFromWebIdentityToken"]);
+ }
+ if (output["AssumedRoleUser"] !== undefined) {
+ contents.AssumedRoleUser = de_AssumedRoleUser(output["AssumedRoleUser"], context);
+ }
+ if (output["PackedPolicySize"] !== undefined) {
+ contents.PackedPolicySize = (0, smithy_client_1.strictParseInt32)(output["PackedPolicySize"]);
+ }
+ if (output["Provider"] !== undefined) {
+ contents.Provider = (0, smithy_client_1.expectString)(output["Provider"]);
+ }
+ if (output["Audience"] !== undefined) {
+ contents.Audience = (0, smithy_client_1.expectString)(output["Audience"]);
+ }
+ if (output["SourceIdentity"] !== undefined) {
+ contents.SourceIdentity = (0, smithy_client_1.expectString)(output["SourceIdentity"]);
+ }
+ return contents;
+};
+const de_Credentials = (output, context) => {
+ const contents = {};
+ if (output["AccessKeyId"] !== undefined) {
+ contents.AccessKeyId = (0, smithy_client_1.expectString)(output["AccessKeyId"]);
+ }
+ if (output["SecretAccessKey"] !== undefined) {
+ contents.SecretAccessKey = (0, smithy_client_1.expectString)(output["SecretAccessKey"]);
+ }
+ if (output["SessionToken"] !== undefined) {
+ contents.SessionToken = (0, smithy_client_1.expectString)(output["SessionToken"]);
+ }
+ if (output["Expiration"] !== undefined) {
+ contents.Expiration = (0, smithy_client_1.expectNonNull)((0, smithy_client_1.parseRfc3339DateTimeWithOffset)(output["Expiration"]));
+ }
+ return contents;
+};
+const de_DecodeAuthorizationMessageResponse = (output, context) => {
+ const contents = {};
+ if (output["DecodedMessage"] !== undefined) {
+ contents.DecodedMessage = (0, smithy_client_1.expectString)(output["DecodedMessage"]);
+ }
+ return contents;
+};
+const de_ExpiredTokenException = (output, context) => {
+ const contents = {};
+ if (output["message"] !== undefined) {
+ contents.message = (0, smithy_client_1.expectString)(output["message"]);
+ }
+ return contents;
+};
+const de_FederatedUser = (output, context) => {
+ const contents = {};
+ if (output["FederatedUserId"] !== undefined) {
+ contents.FederatedUserId = (0, smithy_client_1.expectString)(output["FederatedUserId"]);
+ }
+ if (output["Arn"] !== undefined) {
+ contents.Arn = (0, smithy_client_1.expectString)(output["Arn"]);
+ }
+ return contents;
+};
+const de_GetAccessKeyInfoResponse = (output, context) => {
+ const contents = {};
+ if (output["Account"] !== undefined) {
+ contents.Account = (0, smithy_client_1.expectString)(output["Account"]);
+ }
+ return contents;
+};
+const de_GetCallerIdentityResponse = (output, context) => {
+ const contents = {};
+ if (output["UserId"] !== undefined) {
+ contents.UserId = (0, smithy_client_1.expectString)(output["UserId"]);
+ }
+ if (output["Account"] !== undefined) {
+ contents.Account = (0, smithy_client_1.expectString)(output["Account"]);
+ }
+ if (output["Arn"] !== undefined) {
+ contents.Arn = (0, smithy_client_1.expectString)(output["Arn"]);
+ }
+ return contents;
+};
+const de_GetFederationTokenResponse = (output, context) => {
+ const contents = {};
+ if (output["Credentials"] !== undefined) {
+ contents.Credentials = de_Credentials(output["Credentials"], context);
+ }
+ if (output["FederatedUser"] !== undefined) {
+ contents.FederatedUser = de_FederatedUser(output["FederatedUser"], context);
+ }
+ if (output["PackedPolicySize"] !== undefined) {
+ contents.PackedPolicySize = (0, smithy_client_1.strictParseInt32)(output["PackedPolicySize"]);
+ }
+ return contents;
+};
+const de_GetSessionTokenResponse = (output, context) => {
+ const contents = {};
+ if (output["Credentials"] !== undefined) {
+ contents.Credentials = de_Credentials(output["Credentials"], context);
+ }
+ return contents;
+};
+const de_IDPCommunicationErrorException = (output, context) => {
+ const contents = {};
+ if (output["message"] !== undefined) {
+ contents.message = (0, smithy_client_1.expectString)(output["message"]);
+ }
+ return contents;
+};
+const de_IDPRejectedClaimException = (output, context) => {
+ const contents = {};
+ if (output["message"] !== undefined) {
+ contents.message = (0, smithy_client_1.expectString)(output["message"]);
+ }
+ return contents;
+};
+const de_InvalidAuthorizationMessageException = (output, context) => {
+ const contents = {};
+ if (output["message"] !== undefined) {
+ contents.message = (0, smithy_client_1.expectString)(output["message"]);
+ }
+ return contents;
+};
+const de_InvalidIdentityTokenException = (output, context) => {
+ const contents = {};
+ if (output["message"] !== undefined) {
+ contents.message = (0, smithy_client_1.expectString)(output["message"]);
+ }
+ return contents;
+};
+const de_MalformedPolicyDocumentException = (output, context) => {
+ const contents = {};
+ if (output["message"] !== undefined) {
+ contents.message = (0, smithy_client_1.expectString)(output["message"]);
+ }
+ return contents;
+};
+const de_PackedPolicyTooLargeException = (output, context) => {
+ const contents = {};
+ if (output["message"] !== undefined) {
+ contents.message = (0, smithy_client_1.expectString)(output["message"]);
+ }
+ return contents;
+};
+const de_RegionDisabledException = (output, context) => {
+ const contents = {};
+ if (output["message"] !== undefined) {
+ contents.message = (0, smithy_client_1.expectString)(output["message"]);
+ }
+ return contents;
+};
+const deserializeMetadata = (output) => ({
+ httpStatusCode: output.statusCode,
+ requestId: output.headers["x-amzn-requestid"] ?? output.headers["x-amzn-request-id"] ?? output.headers["x-amz-request-id"],
+ extendedRequestId: output.headers["x-amz-id-2"],
+ cfId: output.headers["x-amz-cf-id"],
+});
+const collectBodyString = (streamBody, context) => (0, smithy_client_1.collectBody)(streamBody, context).then((body) => context.utf8Encoder(body));
+const throwDefaultError = (0, smithy_client_1.withBaseException)(STSServiceException_1.STSServiceException);
+const buildHttpRpcRequest = async (context, headers, path, resolvedHostname, body) => {
+ const { hostname, protocol = "https", port, path: basePath } = await context.endpoint();
+ const contents = {
+ protocol,
+ hostname,
+ port,
+ method: "POST",
+ path: basePath.endsWith("/") ? basePath.slice(0, -1) + path : basePath + path,
+ headers,
+ };
+ if (resolvedHostname !== undefined) {
+ contents.hostname = resolvedHostname;
+ }
+ if (body !== undefined) {
+ contents.body = body;
+ }
+ return new protocol_http_1.HttpRequest(contents);
+};
+const SHARED_HEADERS = {
+ "content-type": "application/x-www-form-urlencoded",
+};
+const parseBody = (streamBody, context) => collectBodyString(streamBody, context).then((encoded) => {
+ if (encoded.length) {
+ const parser = new fast_xml_parser_1.XMLParser({
+ attributeNamePrefix: "",
+ htmlEntities: true,
+ ignoreAttributes: false,
+ ignoreDeclaration: true,
+ parseTagValue: false,
+ trimValues: false,
+ tagValueProcessor: (_, val) => (val.trim() === "" && val.includes("\n") ? "" : undefined),
+ });
+ parser.addEntity("#xD", "\r");
+ parser.addEntity("#10", "\n");
+ const parsedObj = parser.parse(encoded);
+ const textNodeName = "#text";
+ const key = Object.keys(parsedObj)[0];
+ const parsedObjToReturn = parsedObj[key];
+ if (parsedObjToReturn[textNodeName]) {
+ parsedObjToReturn[key] = parsedObjToReturn[textNodeName];
+ delete parsedObjToReturn[textNodeName];
+ }
+ return (0, smithy_client_1.getValueFromTextNode)(parsedObjToReturn);
+ }
+ return {};
+});
+const parseErrorBody = async (errorBody, context) => {
+ const value = await parseBody(errorBody, context);
+ if (value.Error) {
+ value.Error.message = value.Error.message ?? value.Error.Message;
+ }
+ return value;
+};
+const buildFormUrlencodedString = (formEntries) => Object.entries(formEntries)
+ .map(([key, value]) => (0, smithy_client_1.extendedEncodeURIComponent)(key) + "=" + (0, smithy_client_1.extendedEncodeURIComponent)(value))
+ .join("&");
+const loadQueryErrorCode = (output, data) => {
+ if (data.Error?.Code !== undefined) {
+ return data.Error.Code;
+ }
+ if (output.statusCode == 404) {
+ return "NotFound";
+ }
+};
+
+
+/***/ }),
+
+/***/ 83405:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.getRuntimeConfig = void 0;
+const tslib_1 = __nccwpck_require__(4351);
+const package_json_1 = tslib_1.__importDefault(__nccwpck_require__(7947));
+const defaultStsRoleAssumers_1 = __nccwpck_require__(90048);
+const core_1 = __nccwpck_require__(59963);
+const credential_provider_node_1 = __nccwpck_require__(75531);
+const util_user_agent_node_1 = __nccwpck_require__(98095);
+const config_resolver_1 = __nccwpck_require__(53098);
+const hash_node_1 = __nccwpck_require__(3081);
+const middleware_retry_1 = __nccwpck_require__(96039);
+const node_config_provider_1 = __nccwpck_require__(33461);
+const node_http_handler_1 = __nccwpck_require__(20258);
+const util_body_length_node_1 = __nccwpck_require__(68075);
+const util_retry_1 = __nccwpck_require__(84902);
+const runtimeConfig_shared_1 = __nccwpck_require__(52642);
+const smithy_client_1 = __nccwpck_require__(63570);
+const util_defaults_mode_node_1 = __nccwpck_require__(72429);
+const smithy_client_2 = __nccwpck_require__(63570);
+const getRuntimeConfig = (config) => {
+ (0, smithy_client_2.emitWarningIfUnsupportedVersion)(process.version);
+ const defaultsMode = (0, util_defaults_mode_node_1.resolveDefaultsModeConfig)(config);
+ const defaultConfigProvider = () => defaultsMode().then(smithy_client_1.loadConfigsForDefaultMode);
+ const clientSharedValues = (0, runtimeConfig_shared_1.getRuntimeConfig)(config);
+ (0, core_1.emitWarningIfUnsupportedVersion)(process.version);
+ return {
+ ...clientSharedValues,
+ ...config,
+ runtime: "node",
+ defaultsMode,
+ bodyLengthChecker: config?.bodyLengthChecker ?? util_body_length_node_1.calculateBodyLength,
+ credentialDefaultProvider: config?.credentialDefaultProvider ?? (0, defaultStsRoleAssumers_1.decorateDefaultCredentialProvider)(credential_provider_node_1.defaultProvider),
+ defaultUserAgentProvider: config?.defaultUserAgentProvider ??
+ (0, util_user_agent_node_1.defaultUserAgent)({ serviceId: clientSharedValues.serviceId, clientVersion: package_json_1.default.version }),
+ maxAttempts: config?.maxAttempts ?? (0, node_config_provider_1.loadConfig)(middleware_retry_1.NODE_MAX_ATTEMPT_CONFIG_OPTIONS),
+ region: config?.region ?? (0, node_config_provider_1.loadConfig)(config_resolver_1.NODE_REGION_CONFIG_OPTIONS, config_resolver_1.NODE_REGION_CONFIG_FILE_OPTIONS),
+ requestHandler: config?.requestHandler ?? new node_http_handler_1.NodeHttpHandler(defaultConfigProvider),
+ retryMode: config?.retryMode ??
+ (0, node_config_provider_1.loadConfig)({
+ ...middleware_retry_1.NODE_RETRY_MODE_CONFIG_OPTIONS,
+ default: async () => (await defaultConfigProvider()).retryMode || util_retry_1.DEFAULT_RETRY_MODE,
+ }),
+ sha256: config?.sha256 ?? hash_node_1.Hash.bind(null, "sha256"),
+ streamCollector: config?.streamCollector ?? node_http_handler_1.streamCollector,
+ useDualstackEndpoint: config?.useDualstackEndpoint ?? (0, node_config_provider_1.loadConfig)(config_resolver_1.NODE_USE_DUALSTACK_ENDPOINT_CONFIG_OPTIONS),
+ useFipsEndpoint: config?.useFipsEndpoint ?? (0, node_config_provider_1.loadConfig)(config_resolver_1.NODE_USE_FIPS_ENDPOINT_CONFIG_OPTIONS),
+ };
+};
+exports.getRuntimeConfig = getRuntimeConfig;
+
+
+/***/ }),
+
+/***/ 52642:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.getRuntimeConfig = void 0;
+const smithy_client_1 = __nccwpck_require__(63570);
+const url_parser_1 = __nccwpck_require__(14681);
+const util_base64_1 = __nccwpck_require__(75600);
+const util_utf8_1 = __nccwpck_require__(41895);
+const endpointResolver_1 = __nccwpck_require__(41203);
+const getRuntimeConfig = (config) => {
+ return {
+ apiVersion: "2011-06-15",
+ base64Decoder: config?.base64Decoder ?? util_base64_1.fromBase64,
+ base64Encoder: config?.base64Encoder ?? util_base64_1.toBase64,
+ disableHostPrefix: config?.disableHostPrefix ?? false,
+ endpointProvider: config?.endpointProvider ?? endpointResolver_1.defaultEndpointResolver,
+ extensions: config?.extensions ?? [],
+ logger: config?.logger ?? new smithy_client_1.NoOpLogger(),
+ serviceId: config?.serviceId ?? "STS",
+ urlParser: config?.urlParser ?? url_parser_1.parseUrl,
+ utf8Decoder: config?.utf8Decoder ?? util_utf8_1.fromUtf8,
+ utf8Encoder: config?.utf8Encoder ?? util_utf8_1.toUtf8,
+ };
+};
+exports.getRuntimeConfig = getRuntimeConfig;
+
+
+/***/ }),
+
+/***/ 32053:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.resolveRuntimeExtensions = void 0;
+const region_config_resolver_1 = __nccwpck_require__(18156);
+const protocol_http_1 = __nccwpck_require__(64418);
+const smithy_client_1 = __nccwpck_require__(63570);
+const asPartial = (t) => t;
+const resolveRuntimeExtensions = (runtimeConfig, extensions) => {
+ const extensionConfiguration = {
+ ...asPartial((0, region_config_resolver_1.getAwsRegionExtensionConfiguration)(runtimeConfig)),
+ ...asPartial((0, smithy_client_1.getDefaultExtensionConfiguration)(runtimeConfig)),
+ ...asPartial((0, protocol_http_1.getHttpHandlerExtensionConfiguration)(runtimeConfig)),
+ };
+ extensions.forEach((extension) => extension.configure(extensionConfiguration));
+ return {
+ ...runtimeConfig,
+ ...(0, region_config_resolver_1.resolveAwsRegionExtensionConfiguration)(extensionConfiguration),
+ ...(0, smithy_client_1.resolveDefaultRuntimeConfig)(extensionConfiguration),
+ ...(0, protocol_http_1.resolveHttpHandlerRuntimeConfig)(extensionConfiguration),
+ };
+};
+exports.resolveRuntimeExtensions = resolveRuntimeExtensions;
+
+
+/***/ }),
+
+/***/ 14154:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.emitWarningIfUnsupportedVersion = void 0;
+let warningEmitted = false;
+const emitWarningIfUnsupportedVersion = (version) => {
+ if (version && !warningEmitted && parseInt(version.substring(1, version.indexOf("."))) < 16) {
+ warningEmitted = true;
+ process.emitWarning(`NodeDeprecationWarning: The AWS SDK for JavaScript (v3) will
+no longer support Node.js 14.x on May 1, 2024.
+
+To continue receiving updates to AWS services, bug fixes, and security
+updates please upgrade to an active Node.js LTS version.
+
+More information can be found at: https://a.co/dzr2AJd`);
+ }
+};
+exports.emitWarningIfUnsupportedVersion = emitWarningIfUnsupportedVersion;
+
+
+/***/ }),
+
+/***/ 7249:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+const tslib_1 = __nccwpck_require__(4351);
+tslib_1.__exportStar(__nccwpck_require__(14154), exports);
+
+
+/***/ }),
+
+/***/ 59963:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+const tslib_1 = __nccwpck_require__(4351);
+tslib_1.__exportStar(__nccwpck_require__(7249), exports);
+tslib_1.__exportStar(__nccwpck_require__(53069), exports);
+
+
+/***/ }),
+
+/***/ 53069:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+const tslib_1 = __nccwpck_require__(4351);
+tslib_1.__exportStar(__nccwpck_require__(11823), exports);
+
+
+/***/ }),
+
+/***/ 11823:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.awsExpectUnion = void 0;
+const smithy_client_1 = __nccwpck_require__(63570);
+const awsExpectUnion = (value) => {
+ if (value == null) {
+ return undefined;
+ }
+ if (typeof value === "object" && "__type" in value) {
+ delete value.__type;
+ }
+ return (0, smithy_client_1.expectUnion)(value);
+};
+exports.awsExpectUnion = awsExpectUnion;
+
+
+/***/ }),
+
+/***/ 691:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+
+
+/***/ }),
+
+/***/ 1394:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.InMemoryStorage = void 0;
+class InMemoryStorage {
+ constructor(store = {}) {
+ this.store = store;
+ }
+ getItem(key) {
+ if (key in this.store) {
+ return this.store[key];
+ }
+ return null;
+ }
+ removeItem(key) {
+ delete this.store[key];
+ }
+ setItem(key, value) {
+ this.store[key] = value;
+ }
+}
+exports.InMemoryStorage = InMemoryStorage;
+
+
+/***/ }),
+
+/***/ 51984:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.IndexedDbStorage = void 0;
+const STORE_NAME = "IdentityIds";
+class IndexedDbStorage {
+ constructor(dbName = "aws:cognito-identity-ids") {
+ this.dbName = dbName;
+ }
+ getItem(key) {
+ return this.withObjectStore("readonly", (store) => {
+ const req = store.get(key);
+ return new Promise((resolve) => {
+ req.onerror = () => resolve(null);
+ req.onsuccess = () => resolve(req.result ? req.result.value : null);
+ });
+ }).catch(() => null);
+ }
+ removeItem(key) {
+ return this.withObjectStore("readwrite", (store) => {
+ const req = store.delete(key);
+ return new Promise((resolve, reject) => {
+ req.onerror = () => reject(req.error);
+ req.onsuccess = () => resolve();
+ });
+ });
+ }
+ setItem(id, value) {
+ return this.withObjectStore("readwrite", (store) => {
+ const req = store.put({ id, value });
+ return new Promise((resolve, reject) => {
+ req.onerror = () => reject(req.error);
+ req.onsuccess = () => resolve();
+ });
+ });
+ }
+ getDb() {
+ const openDbRequest = self.indexedDB.open(this.dbName, 1);
+ return new Promise((resolve, reject) => {
+ openDbRequest.onsuccess = () => {
+ resolve(openDbRequest.result);
+ };
+ openDbRequest.onerror = () => {
+ reject(openDbRequest.error);
+ };
+ openDbRequest.onblocked = () => {
+ reject(new Error("Unable to access DB"));
+ };
+ openDbRequest.onupgradeneeded = () => {
+ const db = openDbRequest.result;
+ db.onerror = () => {
+ reject(new Error("Failed to create object store"));
+ };
+ db.createObjectStore(STORE_NAME, { keyPath: "id" });
+ };
+ });
+ }
+ withObjectStore(mode, action) {
+ return this.getDb().then((db) => {
+ const tx = db.transaction(STORE_NAME, mode);
+ tx.oncomplete = () => db.close();
+ return new Promise((resolve, reject) => {
+ tx.onerror = () => reject(tx.error);
+ resolve(action(tx.objectStore(STORE_NAME)));
+ }).catch((err) => {
+ db.close();
+ throw err;
+ });
+ });
+ }
+}
+exports.IndexedDbStorage = IndexedDbStorage;
+
+
+/***/ }),
+
+/***/ 97357:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+
+
+/***/ }),
+
+/***/ 47594:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+
+
+/***/ }),
+
+/***/ 46361:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.fromCognitoIdentity = void 0;
+const client_cognito_identity_1 = __nccwpck_require__(45880);
+const property_provider_1 = __nccwpck_require__(79721);
+const resolveLogins_1 = __nccwpck_require__(21723);
+function fromCognitoIdentity(parameters) {
+ return async () => {
+ const { Credentials: { AccessKeyId = throwOnMissingAccessKeyId(), Expiration, SecretKey = throwOnMissingSecretKey(), SessionToken, } = throwOnMissingCredentials(), } = await parameters.client.send(new client_cognito_identity_1.GetCredentialsForIdentityCommand({
+ CustomRoleArn: parameters.customRoleArn,
+ IdentityId: parameters.identityId,
+ Logins: parameters.logins ? await (0, resolveLogins_1.resolveLogins)(parameters.logins) : undefined,
+ }));
+ return {
+ identityId: parameters.identityId,
+ accessKeyId: AccessKeyId,
+ secretAccessKey: SecretKey,
+ sessionToken: SessionToken,
+ expiration: Expiration,
+ };
+ };
+}
+exports.fromCognitoIdentity = fromCognitoIdentity;
+function throwOnMissingAccessKeyId() {
+ throw new property_provider_1.CredentialsProviderError("Response from Amazon Cognito contained no access key ID");
+}
+function throwOnMissingCredentials() {
+ throw new property_provider_1.CredentialsProviderError("Response from Amazon Cognito contained no credentials");
+}
+function throwOnMissingSecretKey() {
+ throw new property_provider_1.CredentialsProviderError("Response from Amazon Cognito contained no secret key");
+}
+
+
+/***/ }),
+
+/***/ 89121:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.fromCognitoIdentityPool = void 0;
+const client_cognito_identity_1 = __nccwpck_require__(45880);
+const property_provider_1 = __nccwpck_require__(79721);
+const fromCognitoIdentity_1 = __nccwpck_require__(46361);
+const localStorage_1 = __nccwpck_require__(79209);
+const resolveLogins_1 = __nccwpck_require__(21723);
+function fromCognitoIdentityPool({ accountId, cache = (0, localStorage_1.localStorage)(), client, customRoleArn, identityPoolId, logins, userIdentifier = !logins || Object.keys(logins).length === 0 ? "ANONYMOUS" : undefined, }) {
+ const cacheKey = userIdentifier ? `aws:cognito-identity-credentials:${identityPoolId}:${userIdentifier}` : undefined;
+ let provider = async () => {
+ let identityId = cacheKey && (await cache.getItem(cacheKey));
+ if (!identityId) {
+ const { IdentityId = throwOnMissingId() } = await client.send(new client_cognito_identity_1.GetIdCommand({
+ AccountId: accountId,
+ IdentityPoolId: identityPoolId,
+ Logins: logins ? await (0, resolveLogins_1.resolveLogins)(logins) : undefined,
+ }));
+ identityId = IdentityId;
+ if (cacheKey) {
+ Promise.resolve(cache.setItem(cacheKey, identityId)).catch(() => { });
+ }
+ }
+ provider = (0, fromCognitoIdentity_1.fromCognitoIdentity)({
+ client,
+ customRoleArn,
+ logins,
+ identityId,
+ });
+ return provider();
+ };
+ return () => provider().catch(async (err) => {
+ if (cacheKey) {
+ Promise.resolve(cache.removeItem(cacheKey)).catch(() => { });
+ }
+ throw err;
+ });
+}
+exports.fromCognitoIdentityPool = fromCognitoIdentityPool;
+function throwOnMissingId() {
+ throw new property_provider_1.CredentialsProviderError("Response from Amazon Cognito contained no identity ID");
+}
+
+
+/***/ }),
+
+/***/ 45538:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+const tslib_1 = __nccwpck_require__(4351);
+tslib_1.__exportStar(__nccwpck_require__(691), exports);
+tslib_1.__exportStar(__nccwpck_require__(97357), exports);
+tslib_1.__exportStar(__nccwpck_require__(47594), exports);
+tslib_1.__exportStar(__nccwpck_require__(46361), exports);
+tslib_1.__exportStar(__nccwpck_require__(89121), exports);
+
+
+/***/ }),
+
+/***/ 79209:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.localStorage = void 0;
+const IndexedDbStorage_1 = __nccwpck_require__(51984);
+const InMemoryStorage_1 = __nccwpck_require__(1394);
+const inMemoryStorage = new InMemoryStorage_1.InMemoryStorage();
+function localStorage() {
+ if (typeof self === "object" && self.indexedDB) {
+ return new IndexedDbStorage_1.IndexedDbStorage();
+ }
+ if (typeof window === "object" && window.localStorage) {
+ return window.localStorage;
+ }
+ return inMemoryStorage;
+}
+exports.localStorage = localStorage;
+
+
+/***/ }),
+
+/***/ 21723:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.resolveLogins = void 0;
+function resolveLogins(logins) {
+ return Promise.all(Object.keys(logins).reduce((arr, name) => {
+ const tokenOrProvider = logins[name];
+ if (typeof tokenOrProvider === "string") {
+ arr.push([name, tokenOrProvider]);
+ }
+ else {
+ arr.push(tokenOrProvider().then((token) => [name, token]));
+ }
+ return arr;
+ }, [])).then((resolvedPairs) => resolvedPairs.reduce((logins, [key, value]) => {
+ logins[key] = value;
+ return logins;
+ }, {}));
+}
+exports.resolveLogins = resolveLogins;
+
+
+/***/ }),
+
+/***/ 80255:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.fromEnv = exports.ENV_EXPIRATION = exports.ENV_SESSION = exports.ENV_SECRET = exports.ENV_KEY = void 0;
+const property_provider_1 = __nccwpck_require__(79721);
+exports.ENV_KEY = "AWS_ACCESS_KEY_ID";
+exports.ENV_SECRET = "AWS_SECRET_ACCESS_KEY";
+exports.ENV_SESSION = "AWS_SESSION_TOKEN";
+exports.ENV_EXPIRATION = "AWS_CREDENTIAL_EXPIRATION";
+const fromEnv = () => async () => {
+ const accessKeyId = process.env[exports.ENV_KEY];
+ const secretAccessKey = process.env[exports.ENV_SECRET];
+ const sessionToken = process.env[exports.ENV_SESSION];
+ const expiry = process.env[exports.ENV_EXPIRATION];
+ if (accessKeyId && secretAccessKey) {
+ return {
+ accessKeyId,
+ secretAccessKey,
+ ...(sessionToken && { sessionToken }),
+ ...(expiry && { expiration: new Date(expiry) }),
+ };
+ }
+ throw new property_provider_1.CredentialsProviderError("Unable to find environment variable credentials.");
+};
+exports.fromEnv = fromEnv;
+
+
+/***/ }),
+
+/***/ 15972:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+const tslib_1 = __nccwpck_require__(4351);
+tslib_1.__exportStar(__nccwpck_require__(80255), exports);
+
+
+/***/ }),
+
+/***/ 63757:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.checkUrl = void 0;
+const property_provider_1 = __nccwpck_require__(79721);
+const LOOPBACK_CIDR_IPv4 = "127.0.0.0/8";
+const LOOPBACK_CIDR_IPv6 = "::1/128";
+const ECS_CONTAINER_HOST = "169.254.170.2";
+const EKS_CONTAINER_HOST_IPv4 = "169.254.170.23";
+const EKS_CONTAINER_HOST_IPv6 = "[fd00:ec2::23]";
+const checkUrl = (url) => {
+ if (url.protocol === "https:") {
+ return;
+ }
+ if (url.hostname === ECS_CONTAINER_HOST ||
+ url.hostname === EKS_CONTAINER_HOST_IPv4 ||
+ url.hostname === EKS_CONTAINER_HOST_IPv6) {
+ return;
+ }
+ if (url.hostname.includes("[")) {
+ if (url.hostname === "[::1]" || url.hostname === "[0000:0000:0000:0000:0000:0000:0000:0001]") {
+ return;
+ }
+ }
+ else {
+ if (url.hostname === "localhost") {
+ return;
+ }
+ const ipComponents = url.hostname.split(".");
+ const inRange = (component) => {
+ const num = parseInt(component, 10);
+ return 0 <= num && num <= 255;
+ };
+ if (ipComponents[0] === "127" &&
+ inRange(ipComponents[1]) &&
+ inRange(ipComponents[2]) &&
+ inRange(ipComponents[3]) &&
+ ipComponents.length === 4) {
+ return;
+ }
+ }
+ throw new property_provider_1.CredentialsProviderError(`URL not accepted. It must either be HTTPS or match one of the following:
+ - loopback CIDR 127.0.0.0/8 or [::1/128]
+ - ECS container host 169.254.170.2
+ - EKS container host 169.254.170.23 or [fd00:ec2::23]`);
+};
+exports.checkUrl = checkUrl;
+
+
+/***/ }),
+
+/***/ 56070:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.fromHttp = void 0;
+const tslib_1 = __nccwpck_require__(4351);
+const node_http_handler_1 = __nccwpck_require__(20258);
+const property_provider_1 = __nccwpck_require__(79721);
+const promises_1 = tslib_1.__importDefault(__nccwpck_require__(73292));
+const checkUrl_1 = __nccwpck_require__(63757);
+const requestHelpers_1 = __nccwpck_require__(79287);
+const retry_wrapper_1 = __nccwpck_require__(79921);
+const AWS_CONTAINER_CREDENTIALS_RELATIVE_URI = "AWS_CONTAINER_CREDENTIALS_RELATIVE_URI";
+const DEFAULT_LINK_LOCAL_HOST = "http://169.254.170.2";
+const AWS_CONTAINER_CREDENTIALS_FULL_URI = "AWS_CONTAINER_CREDENTIALS_FULL_URI";
+const AWS_CONTAINER_AUTHORIZATION_TOKEN_FILE = "AWS_CONTAINER_AUTHORIZATION_TOKEN_FILE";
+const AWS_CONTAINER_AUTHORIZATION_TOKEN = "AWS_CONTAINER_AUTHORIZATION_TOKEN";
+const fromHttp = (options) => {
+ var _a, _b, _c, _d, _e, _f;
+ let host;
+ const relative = (_a = options.awsContainerCredentialsRelativeUri) !== null && _a !== void 0 ? _a : process.env[AWS_CONTAINER_CREDENTIALS_RELATIVE_URI];
+ const full = (_b = options.awsContainerCredentialsFullUri) !== null && _b !== void 0 ? _b : process.env[AWS_CONTAINER_CREDENTIALS_FULL_URI];
+ const token = (_c = options.awsContainerAuthorizationToken) !== null && _c !== void 0 ? _c : process.env[AWS_CONTAINER_AUTHORIZATION_TOKEN];
+ const tokenFile = (_d = options.awsContainerAuthorizationTokenFile) !== null && _d !== void 0 ? _d : process.env[AWS_CONTAINER_AUTHORIZATION_TOKEN_FILE];
+ if (relative && full) {
+ console.warn("AWS SDK HTTP credentials provider:", "you have set both awsContainerCredentialsRelativeUri and awsContainerCredentialsFullUri.");
+ console.warn("awsContainerCredentialsFullUri will take precedence.");
+ }
+ if (token && tokenFile) {
+ console.warn("AWS SDK HTTP credentials provider:", "you have set both awsContainerAuthorizationToken and awsContainerAuthorizationTokenFile.");
+ console.warn("awsContainerAuthorizationToken will take precedence.");
+ }
+ if (full) {
+ host = full;
+ }
+ else if (relative) {
+ host = `${DEFAULT_LINK_LOCAL_HOST}${relative}`;
+ }
+ else {
+ throw new property_provider_1.CredentialsProviderError("No HTTP credential provider host provided.");
+ }
+ const url = new URL(host);
+ (0, checkUrl_1.checkUrl)(url);
+ const requestHandler = new node_http_handler_1.NodeHttpHandler();
+ return (0, retry_wrapper_1.retryWrapper)(async () => {
+ const request = (0, requestHelpers_1.createGetRequest)(url);
+ if (token) {
+ request.headers.Authorization = token;
+ }
+ else if (tokenFile) {
+ request.headers.Authorization = (await promises_1.default.readFile(tokenFile)).toString();
+ }
+ const result = await requestHandler.handle(request);
+ return (0, requestHelpers_1.getCredentials)(result.response);
+ }, (_e = options.maxRetries) !== null && _e !== void 0 ? _e : 3, (_f = options.timeout) !== null && _f !== void 0 ? _f : 1000);
+};
+exports.fromHttp = fromHttp;
+
+
+/***/ }),
+
+/***/ 79287:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.getCredentials = exports.createGetRequest = void 0;
+const property_provider_1 = __nccwpck_require__(79721);
+const protocol_http_1 = __nccwpck_require__(64418);
+const smithy_client_1 = __nccwpck_require__(63570);
+const util_stream_1 = __nccwpck_require__(96607);
+function createGetRequest(url) {
+ return new protocol_http_1.HttpRequest({
+ protocol: url.protocol,
+ hostname: url.hostname,
+ port: Number(url.port),
+ path: url.pathname,
+ query: Array.from(url.searchParams.entries()).reduce((acc, [k, v]) => {
+ acc[k] = v;
+ return acc;
+ }, {}),
+ fragment: url.hash,
+ });
+}
+exports.createGetRequest = createGetRequest;
+async function getCredentials(response) {
+ var _a, _b;
+ const contentType = (_b = (_a = response === null || response === void 0 ? void 0 : response.headers["content-type"]) !== null && _a !== void 0 ? _a : response === null || response === void 0 ? void 0 : response.headers["Content-Type"]) !== null && _b !== void 0 ? _b : "";
+ if (!contentType.includes("json")) {
+ console.warn("HTTP credential provider response header content-type was not application/json. Observed: " + contentType + ".");
+ }
+ const stream = (0, util_stream_1.sdkStreamMixin)(response.body);
+ const str = await stream.transformToString();
+ if (response.statusCode === 200) {
+ const parsed = JSON.parse(str);
+ if (typeof parsed.AccessKeyId !== "string" ||
+ typeof parsed.SecretAccessKey !== "string" ||
+ typeof parsed.Token !== "string" ||
+ typeof parsed.Expiration !== "string") {
+ throw new property_provider_1.CredentialsProviderError("HTTP credential provider response not of the required format, an object matching: " +
+ "{ AccessKeyId: string, SecretAccessKey: string, Token: string, Expiration: string(rfc3339) }");
+ }
+ return {
+ accessKeyId: parsed.AccessKeyId,
+ secretAccessKey: parsed.SecretAccessKey,
+ sessionToken: parsed.Token,
+ expiration: (0, smithy_client_1.parseRfc3339DateTime)(parsed.Expiration),
+ };
+ }
+ if (response.statusCode >= 400 && response.statusCode < 500) {
+ let parsedBody = {};
+ try {
+ parsedBody = JSON.parse(str);
+ }
+ catch (e) { }
+ throw Object.assign(new property_provider_1.CredentialsProviderError(`Server responded with status: ${response.statusCode}`), {
+ Code: parsedBody.Code,
+ Message: parsedBody.Message,
+ });
+ }
+ throw new property_provider_1.CredentialsProviderError(`Server responded with status: ${response.statusCode}`);
+}
+exports.getCredentials = getCredentials;
+
+
+/***/ }),
+
+/***/ 79921:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.retryWrapper = void 0;
+const retryWrapper = (toRetry, maxRetries, delayMs) => {
+ return async () => {
+ for (let i = 0; i < maxRetries; ++i) {
+ try {
+ return await toRetry();
+ }
+ catch (e) {
+ await new Promise((resolve) => setTimeout(resolve, delayMs));
+ }
+ }
+ return await toRetry();
+ };
+};
+exports.retryWrapper = retryWrapper;
+
+
+/***/ }),
+
+/***/ 17290:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.fromHttp = void 0;
+var fromHttp_1 = __nccwpck_require__(56070);
+Object.defineProperty(exports, "fromHttp", ({ enumerable: true, get: function () { return fromHttp_1.fromHttp; } }));
+
+
+/***/ }),
+
+/***/ 55442:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.fromIni = void 0;
+const shared_ini_file_loader_1 = __nccwpck_require__(43507);
+const resolveProfileData_1 = __nccwpck_require__(95653);
+const fromIni = (init = {}) => async () => {
+ const profiles = await (0, shared_ini_file_loader_1.parseKnownFiles)(init);
+ return (0, resolveProfileData_1.resolveProfileData)((0, shared_ini_file_loader_1.getProfileName)(init), profiles, init);
+};
+exports.fromIni = fromIni;
+
+
+/***/ }),
+
+/***/ 74203:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+const tslib_1 = __nccwpck_require__(4351);
+tslib_1.__exportStar(__nccwpck_require__(55442), exports);
+
+
+/***/ }),
+
+/***/ 60853:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.resolveAssumeRoleCredentials = exports.isAssumeRoleProfile = void 0;
+const property_provider_1 = __nccwpck_require__(79721);
+const shared_ini_file_loader_1 = __nccwpck_require__(43507);
+const resolveCredentialSource_1 = __nccwpck_require__(82458);
+const resolveProfileData_1 = __nccwpck_require__(95653);
+const isAssumeRoleProfile = (arg) => Boolean(arg) &&
+ typeof arg === "object" &&
+ typeof arg.role_arn === "string" &&
+ ["undefined", "string"].indexOf(typeof arg.role_session_name) > -1 &&
+ ["undefined", "string"].indexOf(typeof arg.external_id) > -1 &&
+ ["undefined", "string"].indexOf(typeof arg.mfa_serial) > -1 &&
+ (isAssumeRoleWithSourceProfile(arg) || isAssumeRoleWithProviderProfile(arg));
+exports.isAssumeRoleProfile = isAssumeRoleProfile;
+const isAssumeRoleWithSourceProfile = (arg) => typeof arg.source_profile === "string" && typeof arg.credential_source === "undefined";
+const isAssumeRoleWithProviderProfile = (arg) => typeof arg.credential_source === "string" && typeof arg.source_profile === "undefined";
+const resolveAssumeRoleCredentials = async (profileName, profiles, options, visitedProfiles = {}) => {
+ const data = profiles[profileName];
+ if (!options.roleAssumer) {
+ throw new property_provider_1.CredentialsProviderError(`Profile ${profileName} requires a role to be assumed, but no role assumption callback was provided.`, false);
+ }
+ const { source_profile } = data;
+ if (source_profile && source_profile in visitedProfiles) {
+ throw new property_provider_1.CredentialsProviderError(`Detected a cycle attempting to resolve credentials for profile` +
+ ` ${(0, shared_ini_file_loader_1.getProfileName)(options)}. Profiles visited: ` +
+ Object.keys(visitedProfiles).join(", "), false);
+ }
+ const sourceCredsProvider = source_profile
+ ? (0, resolveProfileData_1.resolveProfileData)(source_profile, profiles, options, {
+ ...visitedProfiles,
+ [source_profile]: true,
+ })
+ : (0, resolveCredentialSource_1.resolveCredentialSource)(data.credential_source, profileName)();
+ const params = {
+ RoleArn: data.role_arn,
+ RoleSessionName: data.role_session_name || `aws-sdk-js-${Date.now()}`,
+ ExternalId: data.external_id,
+ DurationSeconds: parseInt(data.duration_seconds || "3600", 10),
+ };
+ const { mfa_serial } = data;
+ if (mfa_serial) {
+ if (!options.mfaCodeProvider) {
+ throw new property_provider_1.CredentialsProviderError(`Profile ${profileName} requires multi-factor authentication, but no MFA code callback was provided.`, false);
+ }
+ params.SerialNumber = mfa_serial;
+ params.TokenCode = await options.mfaCodeProvider(mfa_serial);
+ }
+ const sourceCreds = await sourceCredsProvider;
+ return options.roleAssumer(sourceCreds, params);
+};
+exports.resolveAssumeRoleCredentials = resolveAssumeRoleCredentials;
+
+
+/***/ }),
+
+/***/ 82458:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.resolveCredentialSource = void 0;
+const credential_provider_env_1 = __nccwpck_require__(15972);
+const credential_provider_imds_1 = __nccwpck_require__(7477);
+const property_provider_1 = __nccwpck_require__(79721);
+const resolveCredentialSource = (credentialSource, profileName) => {
+ const sourceProvidersMap = {
+ EcsContainer: credential_provider_imds_1.fromContainerMetadata,
+ Ec2InstanceMetadata: credential_provider_imds_1.fromInstanceMetadata,
+ Environment: credential_provider_env_1.fromEnv,
+ };
+ if (credentialSource in sourceProvidersMap) {
+ return sourceProvidersMap[credentialSource]();
+ }
+ else {
+ throw new property_provider_1.CredentialsProviderError(`Unsupported credential source in profile ${profileName}. Got ${credentialSource}, ` +
+ `expected EcsContainer or Ec2InstanceMetadata or Environment.`);
+ }
+};
+exports.resolveCredentialSource = resolveCredentialSource;
+
+
+/***/ }),
+
+/***/ 69993:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.resolveProcessCredentials = exports.isProcessProfile = void 0;
+const credential_provider_process_1 = __nccwpck_require__(89969);
+const isProcessProfile = (arg) => Boolean(arg) && typeof arg === "object" && typeof arg.credential_process === "string";
+exports.isProcessProfile = isProcessProfile;
+const resolveProcessCredentials = async (options, profile) => (0, credential_provider_process_1.fromProcess)({
+ ...options,
+ profile,
+})();
+exports.resolveProcessCredentials = resolveProcessCredentials;
+
+
+/***/ }),
+
+/***/ 95653:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.resolveProfileData = void 0;
+const property_provider_1 = __nccwpck_require__(79721);
+const resolveAssumeRoleCredentials_1 = __nccwpck_require__(60853);
+const resolveProcessCredentials_1 = __nccwpck_require__(69993);
+const resolveSsoCredentials_1 = __nccwpck_require__(59867);
+const resolveStaticCredentials_1 = __nccwpck_require__(33071);
+const resolveWebIdentityCredentials_1 = __nccwpck_require__(58342);
+const resolveProfileData = async (profileName, profiles, options, visitedProfiles = {}) => {
+ const data = profiles[profileName];
+ if (Object.keys(visitedProfiles).length > 0 && (0, resolveStaticCredentials_1.isStaticCredsProfile)(data)) {
+ return (0, resolveStaticCredentials_1.resolveStaticCredentials)(data);
+ }
+ if ((0, resolveAssumeRoleCredentials_1.isAssumeRoleProfile)(data)) {
+ return (0, resolveAssumeRoleCredentials_1.resolveAssumeRoleCredentials)(profileName, profiles, options, visitedProfiles);
+ }
+ if ((0, resolveStaticCredentials_1.isStaticCredsProfile)(data)) {
+ return (0, resolveStaticCredentials_1.resolveStaticCredentials)(data);
+ }
+ if ((0, resolveWebIdentityCredentials_1.isWebIdentityProfile)(data)) {
+ return (0, resolveWebIdentityCredentials_1.resolveWebIdentityCredentials)(data, options);
+ }
+ if ((0, resolveProcessCredentials_1.isProcessProfile)(data)) {
+ return (0, resolveProcessCredentials_1.resolveProcessCredentials)(options, profileName);
+ }
+ if ((0, resolveSsoCredentials_1.isSsoProfile)(data)) {
+ return (0, resolveSsoCredentials_1.resolveSsoCredentials)(data);
+ }
+ throw new property_provider_1.CredentialsProviderError(`Profile ${profileName} could not be found or parsed in shared credentials file.`);
+};
+exports.resolveProfileData = resolveProfileData;
+
+
+/***/ }),
+
+/***/ 59867:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.resolveSsoCredentials = exports.isSsoProfile = void 0;
+const credential_provider_sso_1 = __nccwpck_require__(26414);
+var credential_provider_sso_2 = __nccwpck_require__(26414);
+Object.defineProperty(exports, "isSsoProfile", ({ enumerable: true, get: function () { return credential_provider_sso_2.isSsoProfile; } }));
+const resolveSsoCredentials = (data) => {
+ const { sso_start_url, sso_account_id, sso_session, sso_region, sso_role_name } = (0, credential_provider_sso_1.validateSsoProfile)(data);
+ return (0, credential_provider_sso_1.fromSSO)({
+ ssoStartUrl: sso_start_url,
+ ssoAccountId: sso_account_id,
+ ssoSession: sso_session,
+ ssoRegion: sso_region,
+ ssoRoleName: sso_role_name,
+ })();
+};
+exports.resolveSsoCredentials = resolveSsoCredentials;
+
+
+/***/ }),
+
+/***/ 33071:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.resolveStaticCredentials = exports.isStaticCredsProfile = void 0;
+const isStaticCredsProfile = (arg) => Boolean(arg) &&
+ typeof arg === "object" &&
+ typeof arg.aws_access_key_id === "string" &&
+ typeof arg.aws_secret_access_key === "string" &&
+ ["undefined", "string"].indexOf(typeof arg.aws_session_token) > -1;
+exports.isStaticCredsProfile = isStaticCredsProfile;
+const resolveStaticCredentials = (profile) => Promise.resolve({
+ accessKeyId: profile.aws_access_key_id,
+ secretAccessKey: profile.aws_secret_access_key,
+ sessionToken: profile.aws_session_token,
+});
+exports.resolveStaticCredentials = resolveStaticCredentials;
+
+
+/***/ }),
+
+/***/ 58342:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.resolveWebIdentityCredentials = exports.isWebIdentityProfile = void 0;
+const credential_provider_web_identity_1 = __nccwpck_require__(15646);
+const isWebIdentityProfile = (arg) => Boolean(arg) &&
+ typeof arg === "object" &&
+ typeof arg.web_identity_token_file === "string" &&
+ typeof arg.role_arn === "string" &&
+ ["undefined", "string"].indexOf(typeof arg.role_session_name) > -1;
+exports.isWebIdentityProfile = isWebIdentityProfile;
+const resolveWebIdentityCredentials = async (profile, options) => (0, credential_provider_web_identity_1.fromTokenFile)({
+ webIdentityTokenFile: profile.web_identity_token_file,
+ roleArn: profile.role_arn,
+ roleSessionName: profile.role_session_name,
+ roleAssumerWithWebIdentity: options.roleAssumerWithWebIdentity,
+})();
+exports.resolveWebIdentityCredentials = resolveWebIdentityCredentials;
+
+
+/***/ }),
+
+/***/ 15560:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.defaultProvider = void 0;
+const credential_provider_env_1 = __nccwpck_require__(15972);
+const credential_provider_ini_1 = __nccwpck_require__(74203);
+const credential_provider_process_1 = __nccwpck_require__(89969);
+const credential_provider_sso_1 = __nccwpck_require__(26414);
+const credential_provider_web_identity_1 = __nccwpck_require__(15646);
+const property_provider_1 = __nccwpck_require__(79721);
+const shared_ini_file_loader_1 = __nccwpck_require__(43507);
+const remoteProvider_1 = __nccwpck_require__(50626);
+const defaultProvider = (init = {}) => (0, property_provider_1.memoize)((0, property_provider_1.chain)(...(init.profile || process.env[shared_ini_file_loader_1.ENV_PROFILE] ? [] : [(0, credential_provider_env_1.fromEnv)()]), (0, credential_provider_sso_1.fromSSO)(init), (0, credential_provider_ini_1.fromIni)(init), (0, credential_provider_process_1.fromProcess)(init), (0, credential_provider_web_identity_1.fromTokenFile)(init), (0, remoteProvider_1.remoteProvider)(init), async () => {
+ throw new property_provider_1.CredentialsProviderError("Could not load credentials from any providers", false);
+}), (credentials) => credentials.expiration !== undefined && credentials.expiration.getTime() - Date.now() < 300000, (credentials) => credentials.expiration !== undefined);
+exports.defaultProvider = defaultProvider;
+
+
+/***/ }),
+
+/***/ 75531:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+const tslib_1 = __nccwpck_require__(4351);
+tslib_1.__exportStar(__nccwpck_require__(15560), exports);
+
+
+/***/ }),
+
+/***/ 50626:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.remoteProvider = exports.ENV_IMDS_DISABLED = void 0;
+const credential_provider_imds_1 = __nccwpck_require__(7477);
+const property_provider_1 = __nccwpck_require__(79721);
+exports.ENV_IMDS_DISABLED = "AWS_EC2_METADATA_DISABLED";
+const remoteProvider = (init) => {
+ if (process.env[credential_provider_imds_1.ENV_CMDS_RELATIVE_URI] || process.env[credential_provider_imds_1.ENV_CMDS_FULL_URI]) {
+ return (0, credential_provider_imds_1.fromContainerMetadata)(init);
+ }
+ if (process.env[exports.ENV_IMDS_DISABLED]) {
+ return async () => {
+ throw new property_provider_1.CredentialsProviderError("EC2 Instance Metadata Service access disabled");
+ };
+ }
+ return (0, credential_provider_imds_1.fromInstanceMetadata)(init);
+};
+exports.remoteProvider = remoteProvider;
+
+
+/***/ }),
+
+/***/ 72650:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.fromProcess = void 0;
+const shared_ini_file_loader_1 = __nccwpck_require__(43507);
+const resolveProcessCredentials_1 = __nccwpck_require__(74926);
+const fromProcess = (init = {}) => async () => {
+ const profiles = await (0, shared_ini_file_loader_1.parseKnownFiles)(init);
+ return (0, resolveProcessCredentials_1.resolveProcessCredentials)((0, shared_ini_file_loader_1.getProfileName)(init), profiles);
+};
+exports.fromProcess = fromProcess;
+
+
+/***/ }),
+
+/***/ 41104:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.getValidatedProcessCredentials = void 0;
+const getValidatedProcessCredentials = (profileName, data) => {
+ if (data.Version !== 1) {
+ throw Error(`Profile ${profileName} credential_process did not return Version 1.`);
+ }
+ if (data.AccessKeyId === undefined || data.SecretAccessKey === undefined) {
+ throw Error(`Profile ${profileName} credential_process returned invalid credentials.`);
+ }
+ if (data.Expiration) {
+ const currentTime = new Date();
+ const expireTime = new Date(data.Expiration);
+ if (expireTime < currentTime) {
+ throw Error(`Profile ${profileName} credential_process returned expired credentials.`);
+ }
+ }
+ return {
+ accessKeyId: data.AccessKeyId,
+ secretAccessKey: data.SecretAccessKey,
+ ...(data.SessionToken && { sessionToken: data.SessionToken }),
+ ...(data.Expiration && { expiration: new Date(data.Expiration) }),
+ };
+};
+exports.getValidatedProcessCredentials = getValidatedProcessCredentials;
+
+
+/***/ }),
+
+/***/ 89969:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+const tslib_1 = __nccwpck_require__(4351);
+tslib_1.__exportStar(__nccwpck_require__(72650), exports);
+
+
+/***/ }),
+
+/***/ 74926:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.resolveProcessCredentials = void 0;
+const property_provider_1 = __nccwpck_require__(79721);
+const child_process_1 = __nccwpck_require__(32081);
+const util_1 = __nccwpck_require__(73837);
+const getValidatedProcessCredentials_1 = __nccwpck_require__(41104);
+const resolveProcessCredentials = async (profileName, profiles) => {
+ const profile = profiles[profileName];
+ if (profiles[profileName]) {
+ const credentialProcess = profile["credential_process"];
+ if (credentialProcess !== undefined) {
+ const execPromise = (0, util_1.promisify)(child_process_1.exec);
+ try {
+ const { stdout } = await execPromise(credentialProcess);
+ let data;
+ try {
+ data = JSON.parse(stdout.trim());
+ }
+ catch (_a) {
+ throw Error(`Profile ${profileName} credential_process returned invalid JSON.`);
+ }
+ return (0, getValidatedProcessCredentials_1.getValidatedProcessCredentials)(profileName, data);
+ }
+ catch (error) {
+ throw new property_provider_1.CredentialsProviderError(error.message);
+ }
+ }
+ else {
+ throw new property_provider_1.CredentialsProviderError(`Profile ${profileName} did not contain credential_process.`);
+ }
+ }
+ else {
+ throw new property_provider_1.CredentialsProviderError(`Profile ${profileName} could not be found in shared credentials file.`);
+ }
+};
+exports.resolveProcessCredentials = resolveProcessCredentials;
+
+
+/***/ }),
+
+/***/ 35959:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.fromSSO = void 0;
+const property_provider_1 = __nccwpck_require__(79721);
+const shared_ini_file_loader_1 = __nccwpck_require__(43507);
+const isSsoProfile_1 = __nccwpck_require__(32572);
+const resolveSSOCredentials_1 = __nccwpck_require__(94729);
+const validateSsoProfile_1 = __nccwpck_require__(48098);
+const fromSSO = (init = {}) => async () => {
+ const { ssoStartUrl, ssoAccountId, ssoRegion, ssoRoleName, ssoClient, ssoSession } = init;
+ const profileName = (0, shared_ini_file_loader_1.getProfileName)(init);
+ if (!ssoStartUrl && !ssoAccountId && !ssoRegion && !ssoRoleName && !ssoSession) {
+ const profiles = await (0, shared_ini_file_loader_1.parseKnownFiles)(init);
+ const profile = profiles[profileName];
+ if (!profile) {
+ throw new property_provider_1.CredentialsProviderError(`Profile ${profileName} was not found.`);
+ }
+ if (!(0, isSsoProfile_1.isSsoProfile)(profile)) {
+ throw new property_provider_1.CredentialsProviderError(`Profile ${profileName} is not configured with SSO credentials.`);
+ }
+ if (profile === null || profile === void 0 ? void 0 : profile.sso_session) {
+ const ssoSessions = await (0, shared_ini_file_loader_1.loadSsoSessionData)(init);
+ const session = ssoSessions[profile.sso_session];
+ const conflictMsg = ` configurations in profile ${profileName} and sso-session ${profile.sso_session}`;
+ if (ssoRegion && ssoRegion !== session.sso_region) {
+ throw new property_provider_1.CredentialsProviderError(`Conflicting SSO region` + conflictMsg, false);
+ }
+ if (ssoStartUrl && ssoStartUrl !== session.sso_start_url) {
+ throw new property_provider_1.CredentialsProviderError(`Conflicting SSO start_url` + conflictMsg, false);
+ }
+ profile.sso_region = session.sso_region;
+ profile.sso_start_url = session.sso_start_url;
+ }
+ const { sso_start_url, sso_account_id, sso_region, sso_role_name, sso_session } = (0, validateSsoProfile_1.validateSsoProfile)(profile);
+ return (0, resolveSSOCredentials_1.resolveSSOCredentials)({
+ ssoStartUrl: sso_start_url,
+ ssoSession: sso_session,
+ ssoAccountId: sso_account_id,
+ ssoRegion: sso_region,
+ ssoRoleName: sso_role_name,
+ ssoClient: ssoClient,
+ profile: profileName,
+ });
+ }
+ else if (!ssoStartUrl || !ssoAccountId || !ssoRegion || !ssoRoleName) {
+ throw new property_provider_1.CredentialsProviderError("Incomplete configuration. The fromSSO() argument hash must include " +
+ '"ssoStartUrl", "ssoAccountId", "ssoRegion", "ssoRoleName"');
+ }
+ else {
+ return (0, resolveSSOCredentials_1.resolveSSOCredentials)({
+ ssoStartUrl,
+ ssoSession,
+ ssoAccountId,
+ ssoRegion,
+ ssoRoleName,
+ ssoClient,
+ profile: profileName,
+ });
+ }
+};
+exports.fromSSO = fromSSO;
+
+
+/***/ }),
+
+/***/ 26414:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+const tslib_1 = __nccwpck_require__(4351);
+tslib_1.__exportStar(__nccwpck_require__(35959), exports);
+tslib_1.__exportStar(__nccwpck_require__(32572), exports);
+tslib_1.__exportStar(__nccwpck_require__(86623), exports);
+tslib_1.__exportStar(__nccwpck_require__(48098), exports);
+
+
+/***/ }),
+
+/***/ 32572:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.isSsoProfile = void 0;
+const isSsoProfile = (arg) => arg &&
+ (typeof arg.sso_start_url === "string" ||
+ typeof arg.sso_account_id === "string" ||
+ typeof arg.sso_session === "string" ||
+ typeof arg.sso_region === "string" ||
+ typeof arg.sso_role_name === "string");
+exports.isSsoProfile = isSsoProfile;
+
+
+/***/ }),
+
+/***/ 94729:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.resolveSSOCredentials = void 0;
+const client_sso_1 = __nccwpck_require__(82666);
+const token_providers_1 = __nccwpck_require__(52843);
+const property_provider_1 = __nccwpck_require__(79721);
+const shared_ini_file_loader_1 = __nccwpck_require__(43507);
+const SHOULD_FAIL_CREDENTIAL_CHAIN = false;
+const resolveSSOCredentials = async ({ ssoStartUrl, ssoSession, ssoAccountId, ssoRegion, ssoRoleName, ssoClient, profile, }) => {
+ let token;
+ const refreshMessage = `To refresh this SSO session run aws sso login with the corresponding profile.`;
+ if (ssoSession) {
+ try {
+ const _token = await (0, token_providers_1.fromSso)({ profile })();
+ token = {
+ accessToken: _token.token,
+ expiresAt: new Date(_token.expiration).toISOString(),
+ };
+ }
+ catch (e) {
+ throw new property_provider_1.CredentialsProviderError(e.message, SHOULD_FAIL_CREDENTIAL_CHAIN);
+ }
+ }
+ else {
+ try {
+ token = await (0, shared_ini_file_loader_1.getSSOTokenFromFile)(ssoStartUrl);
+ }
+ catch (e) {
+ throw new property_provider_1.CredentialsProviderError(`The SSO session associated with this profile is invalid. ${refreshMessage}`, SHOULD_FAIL_CREDENTIAL_CHAIN);
+ }
+ }
+ if (new Date(token.expiresAt).getTime() - Date.now() <= 0) {
+ throw new property_provider_1.CredentialsProviderError(`The SSO session associated with this profile has expired. ${refreshMessage}`, SHOULD_FAIL_CREDENTIAL_CHAIN);
+ }
+ const { accessToken } = token;
+ const sso = ssoClient || new client_sso_1.SSOClient({ region: ssoRegion });
+ let ssoResp;
+ try {
+ ssoResp = await sso.send(new client_sso_1.GetRoleCredentialsCommand({
+ accountId: ssoAccountId,
+ roleName: ssoRoleName,
+ accessToken,
+ }));
+ }
+ catch (e) {
+ throw property_provider_1.CredentialsProviderError.from(e, SHOULD_FAIL_CREDENTIAL_CHAIN);
+ }
+ const { roleCredentials: { accessKeyId, secretAccessKey, sessionToken, expiration } = {} } = ssoResp;
+ if (!accessKeyId || !secretAccessKey || !sessionToken || !expiration) {
+ throw new property_provider_1.CredentialsProviderError("SSO returns an invalid temporary credential.", SHOULD_FAIL_CREDENTIAL_CHAIN);
+ }
+ return { accessKeyId, secretAccessKey, sessionToken, expiration: new Date(expiration) };
+};
+exports.resolveSSOCredentials = resolveSSOCredentials;
+
+
+/***/ }),
+
+/***/ 86623:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+
+
+/***/ }),
+
+/***/ 48098:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.validateSsoProfile = void 0;
+const property_provider_1 = __nccwpck_require__(79721);
+const validateSsoProfile = (profile) => {
+ const { sso_start_url, sso_account_id, sso_region, sso_role_name } = profile;
+ if (!sso_start_url || !sso_account_id || !sso_region || !sso_role_name) {
+ throw new property_provider_1.CredentialsProviderError(`Profile is configured with invalid SSO credentials. Required parameters "sso_account_id", ` +
+ `"sso_region", "sso_role_name", "sso_start_url". Got ${Object.keys(profile).join(", ")}\nReference: https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-sso.html`, false);
+ }
+ return profile;
+};
+exports.validateSsoProfile = validateSsoProfile;
+
+
+/***/ }),
+
+/***/ 35614:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.fromTokenFile = void 0;
+const property_provider_1 = __nccwpck_require__(79721);
+const fs_1 = __nccwpck_require__(57147);
+const fromWebToken_1 = __nccwpck_require__(47905);
+const ENV_TOKEN_FILE = "AWS_WEB_IDENTITY_TOKEN_FILE";
+const ENV_ROLE_ARN = "AWS_ROLE_ARN";
+const ENV_ROLE_SESSION_NAME = "AWS_ROLE_SESSION_NAME";
+const fromTokenFile = (init = {}) => async () => {
+ var _a, _b, _c;
+ const webIdentityTokenFile = (_a = init === null || init === void 0 ? void 0 : init.webIdentityTokenFile) !== null && _a !== void 0 ? _a : process.env[ENV_TOKEN_FILE];
+ const roleArn = (_b = init === null || init === void 0 ? void 0 : init.roleArn) !== null && _b !== void 0 ? _b : process.env[ENV_ROLE_ARN];
+ const roleSessionName = (_c = init === null || init === void 0 ? void 0 : init.roleSessionName) !== null && _c !== void 0 ? _c : process.env[ENV_ROLE_SESSION_NAME];
+ if (!webIdentityTokenFile || !roleArn) {
+ throw new property_provider_1.CredentialsProviderError("Web identity configuration not specified");
+ }
+ return (0, fromWebToken_1.fromWebToken)({
+ ...init,
+ webIdentityToken: (0, fs_1.readFileSync)(webIdentityTokenFile, { encoding: "ascii" }),
+ roleArn,
+ roleSessionName,
+ })();
+};
+exports.fromTokenFile = fromTokenFile;
+
+
+/***/ }),
+
+/***/ 47905:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.fromWebToken = void 0;
+const property_provider_1 = __nccwpck_require__(79721);
+const fromWebToken = (init) => () => {
+ const { roleArn, roleSessionName, webIdentityToken, providerId, policyArns, policy, durationSeconds, roleAssumerWithWebIdentity, } = init;
+ if (!roleAssumerWithWebIdentity) {
+ throw new property_provider_1.CredentialsProviderError(`Role Arn '${roleArn}' needs to be assumed with web identity,` +
+ ` but no role assumption callback was provided.`, false);
+ }
+ return roleAssumerWithWebIdentity({
+ RoleArn: roleArn,
+ RoleSessionName: roleSessionName !== null && roleSessionName !== void 0 ? roleSessionName : `aws-sdk-js-session-${Date.now()}`,
+ WebIdentityToken: webIdentityToken,
+ ProviderId: providerId,
+ PolicyArns: policyArns,
+ Policy: policy,
+ DurationSeconds: durationSeconds,
+ });
+};
+exports.fromWebToken = fromWebToken;
+
+
+/***/ }),
+
+/***/ 15646:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+const tslib_1 = __nccwpck_require__(4351);
+tslib_1.__exportStar(__nccwpck_require__(35614), exports);
+tslib_1.__exportStar(__nccwpck_require__(47905), exports);
+
+
+/***/ }),
+
+/***/ 50403:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.fromCognitoIdentity = void 0;
+const client_cognito_identity_1 = __nccwpck_require__(45880);
+const credential_provider_cognito_identity_1 = __nccwpck_require__(45538);
+const fromCognitoIdentity = (options) => {
+ var _a;
+ return (0, credential_provider_cognito_identity_1.fromCognitoIdentity)({
+ ...options,
+ client: new client_cognito_identity_1.CognitoIdentityClient((_a = options.clientConfig) !== null && _a !== void 0 ? _a : {}),
+ });
+};
+exports.fromCognitoIdentity = fromCognitoIdentity;
+
+
+/***/ }),
+
+/***/ 7856:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.fromCognitoIdentityPool = void 0;
+const client_cognito_identity_1 = __nccwpck_require__(45880);
+const credential_provider_cognito_identity_1 = __nccwpck_require__(45538);
+const fromCognitoIdentityPool = (options) => {
+ var _a;
+ return (0, credential_provider_cognito_identity_1.fromCognitoIdentityPool)({
+ ...options,
+ client: new client_cognito_identity_1.CognitoIdentityClient((_a = options.clientConfig) !== null && _a !== void 0 ? _a : {}),
+ });
+};
+exports.fromCognitoIdentityPool = fromCognitoIdentityPool;
+
+
+/***/ }),
+
+/***/ 65047:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.fromContainerMetadata = void 0;
+const credential_provider_imds_1 = __nccwpck_require__(7477);
+const fromContainerMetadata = (init) => (0, credential_provider_imds_1.fromContainerMetadata)(init);
+exports.fromContainerMetadata = fromContainerMetadata;
+
+
+/***/ }),
+
+/***/ 65695:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.fromEnv = void 0;
+const credential_provider_env_1 = __nccwpck_require__(15972);
+const fromEnv = () => (0, credential_provider_env_1.fromEnv)();
+exports.fromEnv = fromEnv;
+
+
+/***/ }),
+
+/***/ 47133:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.fromIni = void 0;
+const client_sts_1 = __nccwpck_require__(52209);
+const credential_provider_ini_1 = __nccwpck_require__(74203);
+const fromIni = (init = {}) => {
+ var _a, _b;
+ return (0, credential_provider_ini_1.fromIni)({
+ ...init,
+ roleAssumer: (_a = init.roleAssumer) !== null && _a !== void 0 ? _a : (0, client_sts_1.getDefaultRoleAssumer)(init.clientConfig, init.clientPlugins),
+ roleAssumerWithWebIdentity: (_b = init.roleAssumerWithWebIdentity) !== null && _b !== void 0 ? _b : (0, client_sts_1.getDefaultRoleAssumerWithWebIdentity)(init.clientConfig, init.clientPlugins),
+ });
+};
+exports.fromIni = fromIni;
+
+
+/***/ }),
+
+/***/ 86871:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.fromInstanceMetadata = void 0;
+const credential_provider_imds_1 = __nccwpck_require__(7477);
+const fromInstanceMetadata = (init) => (0, credential_provider_imds_1.fromInstanceMetadata)(init);
+exports.fromInstanceMetadata = fromInstanceMetadata;
+
+
+/***/ }),
+
+/***/ 25967:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.fromNodeProviderChain = void 0;
+const client_sts_1 = __nccwpck_require__(52209);
+const credential_provider_node_1 = __nccwpck_require__(75531);
+const fromNodeProviderChain = (init = {}) => {
+ var _a, _b;
+ return (0, credential_provider_node_1.defaultProvider)({
+ ...init,
+ roleAssumer: (_a = init.roleAssumer) !== null && _a !== void 0 ? _a : (0, client_sts_1.getDefaultRoleAssumer)(init.clientConfig, init.clientPlugins),
+ roleAssumerWithWebIdentity: (_b = init.roleAssumerWithWebIdentity) !== null && _b !== void 0 ? _b : (0, client_sts_1.getDefaultRoleAssumerWithWebIdentity)(init.clientConfig, init.clientPlugins),
+ });
+};
+exports.fromNodeProviderChain = fromNodeProviderChain;
+
+
+/***/ }),
+
+/***/ 32506:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.fromProcess = void 0;
+const credential_provider_process_1 = __nccwpck_require__(89969);
+const fromProcess = (init) => (0, credential_provider_process_1.fromProcess)(init);
+exports.fromProcess = fromProcess;
+
+
+/***/ }),
+
+/***/ 62836:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.fromSSO = void 0;
+const client_sso_1 = __nccwpck_require__(82666);
+const credential_provider_sso_1 = __nccwpck_require__(26414);
+const fromSSO = (init = {}) => (0, credential_provider_sso_1.fromSSO)({ ...{ ssoClient: init.clientConfig ? new client_sso_1.SSOClient(init.clientConfig) : undefined }, ...init });
+exports.fromSSO = fromSSO;
+
+
+/***/ }),
+
+/***/ 52223:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.fromTemporaryCredentials = void 0;
+const client_sts_1 = __nccwpck_require__(52209);
+const property_provider_1 = __nccwpck_require__(79721);
+const fromTemporaryCredentials = (options) => {
+ let stsClient;
+ return async () => {
+ var _a;
+ const params = { ...options.params, RoleSessionName: (_a = options.params.RoleSessionName) !== null && _a !== void 0 ? _a : "aws-sdk-js-" + Date.now() };
+ if (params === null || params === void 0 ? void 0 : params.SerialNumber) {
+ if (!options.mfaCodeProvider) {
+ throw new property_provider_1.CredentialsProviderError(`Temporary credential requires multi-factor authentication,` + ` but no MFA code callback was provided.`, false);
+ }
+ params.TokenCode = await options.mfaCodeProvider(params === null || params === void 0 ? void 0 : params.SerialNumber);
+ }
+ if (!stsClient)
+ stsClient = new client_sts_1.STSClient({ ...options.clientConfig, credentials: options.masterCredentials });
+ if (options.clientPlugins) {
+ for (const plugin of options.clientPlugins) {
+ stsClient.middlewareStack.use(plugin);
+ }
+ }
+ const { Credentials } = await stsClient.send(new client_sts_1.AssumeRoleCommand(params));
+ if (!Credentials || !Credentials.AccessKeyId || !Credentials.SecretAccessKey) {
+ throw new property_provider_1.CredentialsProviderError(`Invalid response from STS.assumeRole call with role ${params.RoleArn}`);
+ }
+ return {
+ accessKeyId: Credentials.AccessKeyId,
+ secretAccessKey: Credentials.SecretAccessKey,
+ sessionToken: Credentials.SessionToken,
+ expiration: Credentials.Expiration,
+ };
+ };
+};
+exports.fromTemporaryCredentials = fromTemporaryCredentials;
+
+
+/***/ }),
+
+/***/ 12135:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.fromTokenFile = void 0;
+const client_sts_1 = __nccwpck_require__(52209);
+const credential_provider_web_identity_1 = __nccwpck_require__(15646);
+const fromTokenFile = (init = {}) => {
+ var _a;
+ return (0, credential_provider_web_identity_1.fromTokenFile)({
+ ...init,
+ roleAssumerWithWebIdentity: (_a = init.roleAssumerWithWebIdentity) !== null && _a !== void 0 ? _a : (0, client_sts_1.getDefaultRoleAssumerWithWebIdentity)(init.clientConfig, init.clientPlugins),
+ });
+};
+exports.fromTokenFile = fromTokenFile;
+
+
+/***/ }),
+
+/***/ 23197:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.fromWebToken = void 0;
+const client_sts_1 = __nccwpck_require__(52209);
+const credential_provider_web_identity_1 = __nccwpck_require__(15646);
+const fromWebToken = (init) => {
+ var _a;
+ return (0, credential_provider_web_identity_1.fromWebToken)({
+ ...init,
+ roleAssumerWithWebIdentity: (_a = init.roleAssumerWithWebIdentity) !== null && _a !== void 0 ? _a : (0, client_sts_1.getDefaultRoleAssumerWithWebIdentity)(init.clientConfig, init.clientPlugins),
+ });
+};
+exports.fromWebToken = fromWebToken;
+
+
+/***/ }),
+
+/***/ 37464:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.fromHttp = void 0;
+const tslib_1 = __nccwpck_require__(4351);
+tslib_1.__exportStar(__nccwpck_require__(50403), exports);
+tslib_1.__exportStar(__nccwpck_require__(7856), exports);
+tslib_1.__exportStar(__nccwpck_require__(65047), exports);
+tslib_1.__exportStar(__nccwpck_require__(65695), exports);
+var credential_provider_http_1 = __nccwpck_require__(17290);
+Object.defineProperty(exports, "fromHttp", ({ enumerable: true, get: function () { return credential_provider_http_1.fromHttp; } }));
+tslib_1.__exportStar(__nccwpck_require__(47133), exports);
+tslib_1.__exportStar(__nccwpck_require__(86871), exports);
+tslib_1.__exportStar(__nccwpck_require__(25967), exports);
+tslib_1.__exportStar(__nccwpck_require__(32506), exports);
+tslib_1.__exportStar(__nccwpck_require__(62836), exports);
+tslib_1.__exportStar(__nccwpck_require__(52223), exports);
+tslib_1.__exportStar(__nccwpck_require__(12135), exports);
+tslib_1.__exportStar(__nccwpck_require__(23197), exports);
+
+
+/***/ }),
+
+/***/ 22545:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.getHostHeaderPlugin = exports.hostHeaderMiddlewareOptions = exports.hostHeaderMiddleware = exports.resolveHostHeaderConfig = void 0;
+const protocol_http_1 = __nccwpck_require__(64418);
+function resolveHostHeaderConfig(input) {
+ return input;
+}
+exports.resolveHostHeaderConfig = resolveHostHeaderConfig;
+const hostHeaderMiddleware = (options) => (next) => async (args) => {
+ if (!protocol_http_1.HttpRequest.isInstance(args.request))
+ return next(args);
+ const { request } = args;
+ const { handlerProtocol = "" } = options.requestHandler.metadata || {};
+ if (handlerProtocol.indexOf("h2") >= 0 && !request.headers[":authority"]) {
+ delete request.headers["host"];
+ request.headers[":authority"] = request.hostname + (request.port ? ":" + request.port : "");
+ }
+ else if (!request.headers["host"]) {
+ let host = request.hostname;
+ if (request.port != null)
+ host += `:${request.port}`;
+ request.headers["host"] = host;
+ }
+ return next(args);
+};
+exports.hostHeaderMiddleware = hostHeaderMiddleware;
+exports.hostHeaderMiddlewareOptions = {
+ name: "hostHeaderMiddleware",
+ step: "build",
+ priority: "low",
+ tags: ["HOST"],
+ override: true,
+};
+const getHostHeaderPlugin = (options) => ({
+ applyToStack: (clientStack) => {
+ clientStack.add((0, exports.hostHeaderMiddleware)(options), exports.hostHeaderMiddlewareOptions);
+ },
+});
+exports.getHostHeaderPlugin = getHostHeaderPlugin;
+
+
+/***/ }),
+
+/***/ 20014:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+const tslib_1 = __nccwpck_require__(4351);
+tslib_1.__exportStar(__nccwpck_require__(9754), exports);
+
+
+/***/ }),
+
+/***/ 9754:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.getLoggerPlugin = exports.loggerMiddlewareOptions = exports.loggerMiddleware = void 0;
+const loggerMiddleware = () => (next, context) => async (args) => {
+ var _a, _b;
+ try {
+ const response = await next(args);
+ const { clientName, commandName, logger, dynamoDbDocumentClientOptions = {} } = context;
+ const { overrideInputFilterSensitiveLog, overrideOutputFilterSensitiveLog } = dynamoDbDocumentClientOptions;
+ const inputFilterSensitiveLog = overrideInputFilterSensitiveLog !== null && overrideInputFilterSensitiveLog !== void 0 ? overrideInputFilterSensitiveLog : context.inputFilterSensitiveLog;
+ const outputFilterSensitiveLog = overrideOutputFilterSensitiveLog !== null && overrideOutputFilterSensitiveLog !== void 0 ? overrideOutputFilterSensitiveLog : context.outputFilterSensitiveLog;
+ const { $metadata, ...outputWithoutMetadata } = response.output;
+ (_a = logger === null || logger === void 0 ? void 0 : logger.info) === null || _a === void 0 ? void 0 : _a.call(logger, {
+ clientName,
+ commandName,
+ input: inputFilterSensitiveLog(args.input),
+ output: outputFilterSensitiveLog(outputWithoutMetadata),
+ metadata: $metadata,
+ });
+ return response;
+ }
+ catch (error) {
+ const { clientName, commandName, logger, dynamoDbDocumentClientOptions = {} } = context;
+ const { overrideInputFilterSensitiveLog } = dynamoDbDocumentClientOptions;
+ const inputFilterSensitiveLog = overrideInputFilterSensitiveLog !== null && overrideInputFilterSensitiveLog !== void 0 ? overrideInputFilterSensitiveLog : context.inputFilterSensitiveLog;
+ (_b = logger === null || logger === void 0 ? void 0 : logger.error) === null || _b === void 0 ? void 0 : _b.call(logger, {
+ clientName,
+ commandName,
+ input: inputFilterSensitiveLog(args.input),
+ error,
+ metadata: error.$metadata,
+ });
+ throw error;
+ }
+};
+exports.loggerMiddleware = loggerMiddleware;
+exports.loggerMiddlewareOptions = {
+ name: "loggerMiddleware",
+ tags: ["LOGGER"],
+ step: "initialize",
+ override: true,
+};
+const getLoggerPlugin = (options) => ({
+ applyToStack: (clientStack) => {
+ clientStack.add((0, exports.loggerMiddleware)(), exports.loggerMiddlewareOptions);
+ },
+});
+exports.getLoggerPlugin = getLoggerPlugin;
+
+
+/***/ }),
+
+/***/ 85525:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.getRecursionDetectionPlugin = exports.addRecursionDetectionMiddlewareOptions = exports.recursionDetectionMiddleware = void 0;
+const protocol_http_1 = __nccwpck_require__(64418);
+const TRACE_ID_HEADER_NAME = "X-Amzn-Trace-Id";
+const ENV_LAMBDA_FUNCTION_NAME = "AWS_LAMBDA_FUNCTION_NAME";
+const ENV_TRACE_ID = "_X_AMZN_TRACE_ID";
+const recursionDetectionMiddleware = (options) => (next) => async (args) => {
+ const { request } = args;
+ if (!protocol_http_1.HttpRequest.isInstance(request) ||
+ options.runtime !== "node" ||
+ request.headers.hasOwnProperty(TRACE_ID_HEADER_NAME)) {
+ return next(args);
+ }
+ const functionName = process.env[ENV_LAMBDA_FUNCTION_NAME];
+ const traceId = process.env[ENV_TRACE_ID];
+ const nonEmptyString = (str) => typeof str === "string" && str.length > 0;
+ if (nonEmptyString(functionName) && nonEmptyString(traceId)) {
+ request.headers[TRACE_ID_HEADER_NAME] = traceId;
+ }
+ return next({
+ ...args,
+ request,
+ });
+};
+exports.recursionDetectionMiddleware = recursionDetectionMiddleware;
+exports.addRecursionDetectionMiddlewareOptions = {
+ step: "build",
+ tags: ["RECURSION_DETECTION"],
+ name: "recursionDetectionMiddleware",
+ override: true,
+ priority: "low",
+};
+const getRecursionDetectionPlugin = (options) => ({
+ applyToStack: (clientStack) => {
+ clientStack.add((0, exports.recursionDetectionMiddleware)(options), exports.addRecursionDetectionMiddlewareOptions);
+ },
+});
+exports.getRecursionDetectionPlugin = getRecursionDetectionPlugin;
+
+
+/***/ }),
+
+/***/ 55959:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.resolveStsAuthConfig = void 0;
+const middleware_signing_1 = __nccwpck_require__(14935);
+const resolveStsAuthConfig = (input, { stsClientCtor }) => (0, middleware_signing_1.resolveAwsAuthConfig)({
+ ...input,
+ stsClientCtor,
+});
+exports.resolveStsAuthConfig = resolveStsAuthConfig;
+
+
+/***/ }),
+
+/***/ 84193:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.resolveSigV4AuthConfig = exports.resolveAwsAuthConfig = void 0;
+const property_provider_1 = __nccwpck_require__(79721);
+const signature_v4_1 = __nccwpck_require__(11528);
+const util_middleware_1 = __nccwpck_require__(2390);
+const CREDENTIAL_EXPIRE_WINDOW = 300000;
+const resolveAwsAuthConfig = (input) => {
+ const normalizedCreds = input.credentials
+ ? normalizeCredentialProvider(input.credentials)
+ : input.credentialDefaultProvider(input);
+ const { signingEscapePath = true, systemClockOffset = input.systemClockOffset || 0, sha256 } = input;
+ let signer;
+ if (input.signer) {
+ signer = (0, util_middleware_1.normalizeProvider)(input.signer);
+ }
+ else if (input.regionInfoProvider) {
+ signer = () => (0, util_middleware_1.normalizeProvider)(input.region)()
+ .then(async (region) => [
+ (await input.regionInfoProvider(region, {
+ useFipsEndpoint: await input.useFipsEndpoint(),
+ useDualstackEndpoint: await input.useDualstackEndpoint(),
+ })) || {},
+ region,
+ ])
+ .then(([regionInfo, region]) => {
+ const { signingRegion, signingService } = regionInfo;
+ input.signingRegion = input.signingRegion || signingRegion || region;
+ input.signingName = input.signingName || signingService || input.serviceId;
+ const params = {
+ ...input,
+ credentials: normalizedCreds,
+ region: input.signingRegion,
+ service: input.signingName,
+ sha256,
+ uriEscapePath: signingEscapePath,
+ };
+ const SignerCtor = input.signerConstructor || signature_v4_1.SignatureV4;
+ return new SignerCtor(params);
+ });
+ }
+ else {
+ signer = async (authScheme) => {
+ authScheme = Object.assign({}, {
+ name: "sigv4",
+ signingName: input.signingName || input.defaultSigningName,
+ signingRegion: await (0, util_middleware_1.normalizeProvider)(input.region)(),
+ properties: {},
+ }, authScheme);
+ const signingRegion = authScheme.signingRegion;
+ const signingService = authScheme.signingName;
+ input.signingRegion = input.signingRegion || signingRegion;
+ input.signingName = input.signingName || signingService || input.serviceId;
+ const params = {
+ ...input,
+ credentials: normalizedCreds,
+ region: input.signingRegion,
+ service: input.signingName,
+ sha256,
+ uriEscapePath: signingEscapePath,
+ };
+ const SignerCtor = input.signerConstructor || signature_v4_1.SignatureV4;
+ return new SignerCtor(params);
+ };
+ }
+ return {
+ ...input,
+ systemClockOffset,
+ signingEscapePath,
+ credentials: normalizedCreds,
+ signer,
+ };
+};
+exports.resolveAwsAuthConfig = resolveAwsAuthConfig;
+const resolveSigV4AuthConfig = (input) => {
+ const normalizedCreds = input.credentials
+ ? normalizeCredentialProvider(input.credentials)
+ : input.credentialDefaultProvider(input);
+ const { signingEscapePath = true, systemClockOffset = input.systemClockOffset || 0, sha256 } = input;
+ let signer;
+ if (input.signer) {
+ signer = (0, util_middleware_1.normalizeProvider)(input.signer);
+ }
+ else {
+ signer = (0, util_middleware_1.normalizeProvider)(new signature_v4_1.SignatureV4({
+ credentials: normalizedCreds,
+ region: input.region,
+ service: input.signingName,
+ sha256,
+ uriEscapePath: signingEscapePath,
+ }));
+ }
+ return {
+ ...input,
+ systemClockOffset,
+ signingEscapePath,
+ credentials: normalizedCreds,
+ signer,
+ };
+};
+exports.resolveSigV4AuthConfig = resolveSigV4AuthConfig;
+const normalizeCredentialProvider = (credentials) => {
+ if (typeof credentials === "function") {
+ return (0, property_provider_1.memoize)(credentials, (credentials) => credentials.expiration !== undefined &&
+ credentials.expiration.getTime() - Date.now() < CREDENTIAL_EXPIRE_WINDOW, (credentials) => credentials.expiration !== undefined);
+ }
+ return (0, util_middleware_1.normalizeProvider)(credentials);
+};
+
+
+/***/ }),
+
+/***/ 88053:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.getSigV4AuthPlugin = exports.getAwsAuthPlugin = exports.awsAuthMiddlewareOptions = exports.awsAuthMiddleware = void 0;
+const protocol_http_1 = __nccwpck_require__(64418);
+const getSkewCorrectedDate_1 = __nccwpck_require__(68253);
+const getUpdatedSystemClockOffset_1 = __nccwpck_require__(35863);
+const awsAuthMiddleware = (options) => (next, context) => async function (args) {
+ var _a, _b, _c, _d;
+ if (!protocol_http_1.HttpRequest.isInstance(args.request))
+ return next(args);
+ const authScheme = (_c = (_b = (_a = context.endpointV2) === null || _a === void 0 ? void 0 : _a.properties) === null || _b === void 0 ? void 0 : _b.authSchemes) === null || _c === void 0 ? void 0 : _c[0];
+ const multiRegionOverride = (authScheme === null || authScheme === void 0 ? void 0 : authScheme.name) === "sigv4a" ? (_d = authScheme === null || authScheme === void 0 ? void 0 : authScheme.signingRegionSet) === null || _d === void 0 ? void 0 : _d.join(",") : undefined;
+ const signer = await options.signer(authScheme);
+ const output = await next({
+ ...args,
+ request: await signer.sign(args.request, {
+ signingDate: (0, getSkewCorrectedDate_1.getSkewCorrectedDate)(options.systemClockOffset),
+ signingRegion: multiRegionOverride || context["signing_region"],
+ signingService: context["signing_service"],
+ }),
+ }).catch((error) => {
+ var _a;
+ const serverTime = (_a = error.ServerTime) !== null && _a !== void 0 ? _a : getDateHeader(error.$response);
+ if (serverTime) {
+ options.systemClockOffset = (0, getUpdatedSystemClockOffset_1.getUpdatedSystemClockOffset)(serverTime, options.systemClockOffset);
+ }
+ throw error;
+ });
+ const dateHeader = getDateHeader(output.response);
+ if (dateHeader) {
+ options.systemClockOffset = (0, getUpdatedSystemClockOffset_1.getUpdatedSystemClockOffset)(dateHeader, options.systemClockOffset);
+ }
+ return output;
+};
+exports.awsAuthMiddleware = awsAuthMiddleware;
+const getDateHeader = (response) => { var _a, _b, _c; return protocol_http_1.HttpResponse.isInstance(response) ? (_b = (_a = response.headers) === null || _a === void 0 ? void 0 : _a.date) !== null && _b !== void 0 ? _b : (_c = response.headers) === null || _c === void 0 ? void 0 : _c.Date : undefined; };
+exports.awsAuthMiddlewareOptions = {
+ name: "awsAuthMiddleware",
+ tags: ["SIGNATURE", "AWSAUTH"],
+ relation: "after",
+ toMiddleware: "retryMiddleware",
+ override: true,
+};
+const getAwsAuthPlugin = (options) => ({
+ applyToStack: (clientStack) => {
+ clientStack.addRelativeTo((0, exports.awsAuthMiddleware)(options), exports.awsAuthMiddlewareOptions);
+ },
+});
+exports.getAwsAuthPlugin = getAwsAuthPlugin;
+exports.getSigV4AuthPlugin = exports.getAwsAuthPlugin;
+
+
+/***/ }),
+
+/***/ 14935:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+const tslib_1 = __nccwpck_require__(4351);
+tslib_1.__exportStar(__nccwpck_require__(84193), exports);
+tslib_1.__exportStar(__nccwpck_require__(88053), exports);
+
+
+/***/ }),
+
+/***/ 68253:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.getSkewCorrectedDate = void 0;
+const getSkewCorrectedDate = (systemClockOffset) => new Date(Date.now() + systemClockOffset);
+exports.getSkewCorrectedDate = getSkewCorrectedDate;
+
+
+/***/ }),
+
+/***/ 35863:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.getUpdatedSystemClockOffset = void 0;
+const isClockSkewed_1 = __nccwpck_require__(85301);
+const getUpdatedSystemClockOffset = (clockTime, currentSystemClockOffset) => {
+ const clockTimeInMs = Date.parse(clockTime);
+ if ((0, isClockSkewed_1.isClockSkewed)(clockTimeInMs, currentSystemClockOffset)) {
+ return clockTimeInMs - Date.now();
+ }
+ return currentSystemClockOffset;
+};
+exports.getUpdatedSystemClockOffset = getUpdatedSystemClockOffset;
+
+
+/***/ }),
+
+/***/ 85301:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.isClockSkewed = void 0;
+const getSkewCorrectedDate_1 = __nccwpck_require__(68253);
+const isClockSkewed = (clockTime, systemClockOffset) => Math.abs((0, getSkewCorrectedDate_1.getSkewCorrectedDate)(systemClockOffset).getTime() - clockTime) >= 300000;
+exports.isClockSkewed = isClockSkewed;
+
+
+/***/ }),
+
+/***/ 36546:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.resolveUserAgentConfig = void 0;
+function resolveUserAgentConfig(input) {
+ return {
+ ...input,
+ customUserAgent: typeof input.customUserAgent === "string" ? [[input.customUserAgent]] : input.customUserAgent,
+ };
+}
+exports.resolveUserAgentConfig = resolveUserAgentConfig;
+
+
+/***/ }),
+
+/***/ 28025:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.UA_ESCAPE_CHAR = exports.UA_VALUE_ESCAPE_REGEX = exports.UA_NAME_ESCAPE_REGEX = exports.UA_NAME_SEPARATOR = exports.SPACE = exports.X_AMZ_USER_AGENT = exports.USER_AGENT = void 0;
+exports.USER_AGENT = "user-agent";
+exports.X_AMZ_USER_AGENT = "x-amz-user-agent";
+exports.SPACE = " ";
+exports.UA_NAME_SEPARATOR = "/";
+exports.UA_NAME_ESCAPE_REGEX = /[^\!\$\%\&\'\*\+\-\.\^\_\`\|\~\d\w]/g;
+exports.UA_VALUE_ESCAPE_REGEX = /[^\!\$\%\&\'\*\+\-\.\^\_\`\|\~\d\w\#]/g;
+exports.UA_ESCAPE_CHAR = "-";
+
+
+/***/ }),
+
+/***/ 64688:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+const tslib_1 = __nccwpck_require__(4351);
+tslib_1.__exportStar(__nccwpck_require__(36546), exports);
+tslib_1.__exportStar(__nccwpck_require__(76236), exports);
+
+
+/***/ }),
+
+/***/ 76236:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.getUserAgentPlugin = exports.getUserAgentMiddlewareOptions = exports.userAgentMiddleware = void 0;
+const util_endpoints_1 = __nccwpck_require__(13350);
+const protocol_http_1 = __nccwpck_require__(64418);
+const constants_1 = __nccwpck_require__(28025);
+const userAgentMiddleware = (options) => (next, context) => async (args) => {
+ var _a, _b;
+ const { request } = args;
+ if (!protocol_http_1.HttpRequest.isInstance(request))
+ return next(args);
+ const { headers } = request;
+ const userAgent = ((_a = context === null || context === void 0 ? void 0 : context.userAgent) === null || _a === void 0 ? void 0 : _a.map(escapeUserAgent)) || [];
+ const defaultUserAgent = (await options.defaultUserAgentProvider()).map(escapeUserAgent);
+ const customUserAgent = ((_b = options === null || options === void 0 ? void 0 : options.customUserAgent) === null || _b === void 0 ? void 0 : _b.map(escapeUserAgent)) || [];
+ const prefix = (0, util_endpoints_1.getUserAgentPrefix)();
+ const sdkUserAgentValue = (prefix ? [prefix] : [])
+ .concat([...defaultUserAgent, ...userAgent, ...customUserAgent])
+ .join(constants_1.SPACE);
+ const normalUAValue = [
+ ...defaultUserAgent.filter((section) => section.startsWith("aws-sdk-")),
+ ...customUserAgent,
+ ].join(constants_1.SPACE);
+ if (options.runtime !== "browser") {
+ if (normalUAValue) {
+ headers[constants_1.X_AMZ_USER_AGENT] = headers[constants_1.X_AMZ_USER_AGENT]
+ ? `${headers[constants_1.USER_AGENT]} ${normalUAValue}`
+ : normalUAValue;
+ }
+ headers[constants_1.USER_AGENT] = sdkUserAgentValue;
+ }
+ else {
+ headers[constants_1.X_AMZ_USER_AGENT] = sdkUserAgentValue;
+ }
+ return next({
+ ...args,
+ request,
+ });
+};
+exports.userAgentMiddleware = userAgentMiddleware;
+const escapeUserAgent = (userAgentPair) => {
+ var _a;
+ const name = userAgentPair[0]
+ .split(constants_1.UA_NAME_SEPARATOR)
+ .map((part) => part.replace(constants_1.UA_NAME_ESCAPE_REGEX, constants_1.UA_ESCAPE_CHAR))
+ .join(constants_1.UA_NAME_SEPARATOR);
+ const version = (_a = userAgentPair[1]) === null || _a === void 0 ? void 0 : _a.replace(constants_1.UA_VALUE_ESCAPE_REGEX, constants_1.UA_ESCAPE_CHAR);
+ const prefixSeparatorIndex = name.indexOf(constants_1.UA_NAME_SEPARATOR);
+ const prefix = name.substring(0, prefixSeparatorIndex);
+ let uaName = name.substring(prefixSeparatorIndex + 1);
+ if (prefix === "api") {
+ uaName = uaName.toLowerCase();
+ }
+ return [prefix, uaName, version]
+ .filter((item) => item && item.length > 0)
+ .reduce((acc, item, index) => {
+ switch (index) {
+ case 0:
+ return item;
+ case 1:
+ return `${acc}/${item}`;
+ default:
+ return `${acc}#${item}`;
+ }
+ }, "");
+};
+exports.getUserAgentMiddlewareOptions = {
+ name: "getUserAgentMiddleware",
+ step: "build",
+ priority: "low",
+ tags: ["SET_USER_AGENT", "USER_AGENT"],
+ override: true,
+};
+const getUserAgentPlugin = (config) => ({
+ applyToStack: (clientStack) => {
+ clientStack.add((0, exports.userAgentMiddleware)(config), exports.getUserAgentMiddlewareOptions);
+ },
+});
+exports.getUserAgentPlugin = getUserAgentPlugin;
+
+
+/***/ }),
+
+/***/ 60079:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.resolveAwsRegionExtensionConfiguration = exports.getAwsRegionExtensionConfiguration = void 0;
+const getAwsRegionExtensionConfiguration = (runtimeConfig) => {
+ let runtimeConfigRegion = async () => {
+ if (runtimeConfig.region === undefined) {
+ throw new Error("Region is missing from runtimeConfig");
+ }
+ const region = runtimeConfig.region;
+ if (typeof region === "string") {
+ return region;
+ }
+ return region();
+ };
+ return {
+ setRegion(region) {
+ runtimeConfigRegion = region;
+ },
+ region() {
+ return runtimeConfigRegion;
+ },
+ };
+};
+exports.getAwsRegionExtensionConfiguration = getAwsRegionExtensionConfiguration;
+const resolveAwsRegionExtensionConfiguration = (awsRegionExtensionConfiguration) => {
+ return {
+ region: awsRegionExtensionConfiguration.region(),
+ };
+};
+exports.resolveAwsRegionExtensionConfiguration = resolveAwsRegionExtensionConfiguration;
+
+
+/***/ }),
+
+/***/ 18156:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+const tslib_1 = __nccwpck_require__(4351);
+tslib_1.__exportStar(__nccwpck_require__(60079), exports);
+tslib_1.__exportStar(__nccwpck_require__(17177), exports);
+
+
+/***/ }),
+
+/***/ 60123:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.NODE_REGION_CONFIG_FILE_OPTIONS = exports.NODE_REGION_CONFIG_OPTIONS = exports.REGION_INI_NAME = exports.REGION_ENV_NAME = void 0;
+exports.REGION_ENV_NAME = "AWS_REGION";
+exports.REGION_INI_NAME = "region";
+exports.NODE_REGION_CONFIG_OPTIONS = {
+ environmentVariableSelector: (env) => env[exports.REGION_ENV_NAME],
+ configFileSelector: (profile) => profile[exports.REGION_INI_NAME],
+ default: () => {
+ throw new Error("Region is missing");
+ },
+};
+exports.NODE_REGION_CONFIG_FILE_OPTIONS = {
+ preferredFile: "credentials",
+};
+
+
+/***/ }),
+
+/***/ 30048:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.getRealRegion = void 0;
+const isFipsRegion_1 = __nccwpck_require__(37257);
+const getRealRegion = (region) => (0, isFipsRegion_1.isFipsRegion)(region)
+ ? ["fips-aws-global", "aws-fips"].includes(region)
+ ? "us-east-1"
+ : region.replace(/fips-(dkr-|prod-)?|-fips/, "")
+ : region;
+exports.getRealRegion = getRealRegion;
+
+
+/***/ }),
+
+/***/ 17177:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+const tslib_1 = __nccwpck_require__(4351);
+tslib_1.__exportStar(__nccwpck_require__(60123), exports);
+tslib_1.__exportStar(__nccwpck_require__(46187), exports);
+
+
+/***/ }),
+
+/***/ 37257:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.isFipsRegion = void 0;
+const isFipsRegion = (region) => typeof region === "string" && (region.startsWith("fips-") || region.endsWith("-fips"));
+exports.isFipsRegion = isFipsRegion;
+
+
+/***/ }),
+
+/***/ 46187:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.resolveRegionConfig = void 0;
+const getRealRegion_1 = __nccwpck_require__(30048);
+const isFipsRegion_1 = __nccwpck_require__(37257);
+const resolveRegionConfig = (input) => {
+ const { region, useFipsEndpoint } = input;
+ if (!region) {
+ throw new Error("Region is missing");
+ }
+ return {
+ ...input,
+ region: async () => {
+ if (typeof region === "string") {
+ return (0, getRealRegion_1.getRealRegion)(region);
+ }
+ const providedRegion = await region();
+ return (0, getRealRegion_1.getRealRegion)(providedRegion);
+ },
+ useFipsEndpoint: async () => {
+ const providedRegion = typeof region === "string" ? region : await region();
+ if ((0, isFipsRegion_1.isFipsRegion)(providedRegion)) {
+ return true;
+ }
+ return typeof useFipsEndpoint !== "function" ? Promise.resolve(!!useFipsEndpoint) : useFipsEndpoint();
+ },
+ };
+};
+exports.resolveRegionConfig = resolveRegionConfig;
+
+
+/***/ }),
+
+/***/ 52664:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.UnsupportedGrantTypeException = exports.UnauthorizedClientException = exports.SlowDownException = exports.SSOOIDCClient = exports.InvalidScopeException = exports.InvalidRequestException = exports.InvalidClientException = exports.InternalServerException = exports.ExpiredTokenException = exports.CreateTokenCommand = exports.AuthorizationPendingException = exports.AccessDeniedException = void 0;
+const middleware_host_header_1 = __nccwpck_require__(22545);
+const middleware_logger_1 = __nccwpck_require__(20014);
+const middleware_recursion_detection_1 = __nccwpck_require__(85525);
+const middleware_user_agent_1 = __nccwpck_require__(64688);
+const config_resolver_1 = __nccwpck_require__(53098);
+const middleware_content_length_1 = __nccwpck_require__(82800);
+const middleware_endpoint_1 = __nccwpck_require__(82918);
+const middleware_retry_1 = __nccwpck_require__(96039);
+const smithy_client_1 = __nccwpck_require__(63570);
+var resolveClientEndpointParameters = (options) => {
+ var _a, _b;
+ return {
+ ...options,
+ useDualstackEndpoint: (_a = options.useDualstackEndpoint) !== null && _a !== void 0 ? _a : false,
+ useFipsEndpoint: (_b = options.useFipsEndpoint) !== null && _b !== void 0 ? _b : false,
+ defaultSigningName: "awsssooidc",
+ };
+};
+var package_default = { version: "3.429.0" };
+const util_user_agent_node_1 = __nccwpck_require__(98095);
+const config_resolver_2 = __nccwpck_require__(53098);
+const hash_node_1 = __nccwpck_require__(3081);
+const middleware_retry_2 = __nccwpck_require__(96039);
+const node_config_provider_1 = __nccwpck_require__(33461);
+const node_http_handler_1 = __nccwpck_require__(20258);
+const util_body_length_node_1 = __nccwpck_require__(68075);
+const util_retry_1 = __nccwpck_require__(84902);
+const smithy_client_2 = __nccwpck_require__(63570);
+const url_parser_1 = __nccwpck_require__(14681);
+const util_base64_1 = __nccwpck_require__(75600);
+const util_utf8_1 = __nccwpck_require__(41895);
+const util_endpoints_1 = __nccwpck_require__(13350);
+var s = "required";
+var t = "fn";
+var u = "argv";
+var v = "ref";
+var a = "isSet";
+var b = "tree";
+var c = "error";
+var d = "endpoint";
+var e = "PartitionResult";
+var f = "getAttr";
+var g = { [s]: false, type: "String" };
+var h = { [s]: true, default: false, type: "Boolean" };
+var i = { [v]: "Endpoint" };
+var j = { [t]: "booleanEquals", [u]: [{ [v]: "UseFIPS" }, true] };
+var k = { [t]: "booleanEquals", [u]: [{ [v]: "UseDualStack" }, true] };
+var l = {};
+var m = { [t]: "booleanEquals", [u]: [true, { [t]: f, [u]: [{ [v]: e }, "supportsFIPS"] }] };
+var n = { [v]: e };
+var o = { [t]: "booleanEquals", [u]: [true, { [t]: f, [u]: [n, "supportsDualStack"] }] };
+var p = [j];
+var q = [k];
+var r = [{ [v]: "Region" }];
+var _data = {
+ version: "1.0",
+ parameters: { Region: g, UseDualStack: h, UseFIPS: h, Endpoint: g },
+ rules: [
+ {
+ conditions: [{ [t]: a, [u]: [i] }],
+ type: b,
+ rules: [
+ { conditions: p, error: "Invalid Configuration: FIPS and custom endpoint are not supported", type: c },
+ { conditions: q, error: "Invalid Configuration: Dualstack and custom endpoint are not supported", type: c },
+ { endpoint: { url: i, properties: l, headers: l }, type: d },
+ ],
+ },
+ {
+ conditions: [{ [t]: a, [u]: r }],
+ type: b,
+ rules: [
+ {
+ conditions: [{ [t]: "aws.partition", [u]: r, assign: e }],
+ type: b,
+ rules: [
+ {
+ conditions: [j, k],
+ type: b,
+ rules: [
+ {
+ conditions: [m, o],
+ type: b,
+ rules: [
+ {
+ endpoint: {
+ url: "https://oidc-fips.{Region}.{PartitionResult#dualStackDnsSuffix}",
+ properties: l,
+ headers: l,
+ },
+ type: d,
+ },
+ ],
+ },
+ { error: "FIPS and DualStack are enabled, but this partition does not support one or both", type: c },
+ ],
+ },
+ {
+ conditions: p,
+ type: b,
+ rules: [
+ {
+ conditions: [m],
+ type: b,
+ rules: [
+ {
+ conditions: [{ [t]: "stringEquals", [u]: ["aws-us-gov", { [t]: f, [u]: [n, "name"] }] }],
+ endpoint: { url: "https://oidc.{Region}.amazonaws.com", properties: l, headers: l },
+ type: d,
+ },
+ {
+ endpoint: {
+ url: "https://oidc-fips.{Region}.{PartitionResult#dnsSuffix}",
+ properties: l,
+ headers: l,
+ },
+ type: d,
+ },
+ ],
+ },
+ { error: "FIPS is enabled but this partition does not support FIPS", type: c },
+ ],
+ },
+ {
+ conditions: q,
+ type: b,
+ rules: [
+ {
+ conditions: [o],
+ type: b,
+ rules: [
+ {
+ endpoint: {
+ url: "https://oidc.{Region}.{PartitionResult#dualStackDnsSuffix}",
+ properties: l,
+ headers: l,
+ },
+ type: d,
+ },
+ ],
+ },
+ { error: "DualStack is enabled but this partition does not support DualStack", type: c },
+ ],
+ },
+ {
+ endpoint: { url: "https://oidc.{Region}.{PartitionResult#dnsSuffix}", properties: l, headers: l },
+ type: d,
+ },
+ ],
+ },
+ ],
+ },
+ { error: "Invalid Configuration: Missing Region", type: c },
+ ],
+};
+var ruleSet = _data;
+var defaultEndpointResolver = (endpointParams, context = {}) => {
+ return (0, util_endpoints_1.resolveEndpoint)(ruleSet, {
+ endpointParams,
+ logger: context.logger,
+ });
+};
+var getRuntimeConfig = (config) => {
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
+ return ({
+ apiVersion: "2019-06-10",
+ base64Decoder: (_a = config === null || config === void 0 ? void 0 : config.base64Decoder) !== null && _a !== void 0 ? _a : util_base64_1.fromBase64,
+ base64Encoder: (_b = config === null || config === void 0 ? void 0 : config.base64Encoder) !== null && _b !== void 0 ? _b : util_base64_1.toBase64,
+ disableHostPrefix: (_c = config === null || config === void 0 ? void 0 : config.disableHostPrefix) !== null && _c !== void 0 ? _c : false,
+ endpointProvider: (_d = config === null || config === void 0 ? void 0 : config.endpointProvider) !== null && _d !== void 0 ? _d : defaultEndpointResolver,
+ extensions: (_e = config === null || config === void 0 ? void 0 : config.extensions) !== null && _e !== void 0 ? _e : [],
+ logger: (_f = config === null || config === void 0 ? void 0 : config.logger) !== null && _f !== void 0 ? _f : new smithy_client_2.NoOpLogger(),
+ serviceId: (_g = config === null || config === void 0 ? void 0 : config.serviceId) !== null && _g !== void 0 ? _g : "SSO OIDC",
+ urlParser: (_h = config === null || config === void 0 ? void 0 : config.urlParser) !== null && _h !== void 0 ? _h : url_parser_1.parseUrl,
+ utf8Decoder: (_j = config === null || config === void 0 ? void 0 : config.utf8Decoder) !== null && _j !== void 0 ? _j : util_utf8_1.fromUtf8,
+ utf8Encoder: (_k = config === null || config === void 0 ? void 0 : config.utf8Encoder) !== null && _k !== void 0 ? _k : util_utf8_1.toUtf8,
+ });
+};
+const smithy_client_3 = __nccwpck_require__(63570);
+const util_defaults_mode_node_1 = __nccwpck_require__(72429);
+const smithy_client_4 = __nccwpck_require__(63570);
+var getRuntimeConfig2 = (config) => {
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
+ (0, smithy_client_4.emitWarningIfUnsupportedVersion)(process.version);
+ const defaultsMode = (0, util_defaults_mode_node_1.resolveDefaultsModeConfig)(config);
+ const defaultConfigProvider = () => defaultsMode().then(smithy_client_3.loadConfigsForDefaultMode);
+ const clientSharedValues = getRuntimeConfig(config);
+ return {
+ ...clientSharedValues,
+ ...config,
+ runtime: "node",
+ defaultsMode,
+ bodyLengthChecker: (_a = config === null || config === void 0 ? void 0 : config.bodyLengthChecker) !== null && _a !== void 0 ? _a : util_body_length_node_1.calculateBodyLength,
+ defaultUserAgentProvider: (_b = config === null || config === void 0 ? void 0 : config.defaultUserAgentProvider) !== null && _b !== void 0 ? _b : (0, util_user_agent_node_1.defaultUserAgent)({ serviceId: clientSharedValues.serviceId, clientVersion: package_default.version }),
+ maxAttempts: (_c = config === null || config === void 0 ? void 0 : config.maxAttempts) !== null && _c !== void 0 ? _c : (0, node_config_provider_1.loadConfig)(middleware_retry_2.NODE_MAX_ATTEMPT_CONFIG_OPTIONS),
+ region: (_d = config === null || config === void 0 ? void 0 : config.region) !== null && _d !== void 0 ? _d : (0, node_config_provider_1.loadConfig)(config_resolver_2.NODE_REGION_CONFIG_OPTIONS, config_resolver_2.NODE_REGION_CONFIG_FILE_OPTIONS),
+ requestHandler: (_e = config === null || config === void 0 ? void 0 : config.requestHandler) !== null && _e !== void 0 ? _e : new node_http_handler_1.NodeHttpHandler(defaultConfigProvider),
+ retryMode: (_f = config === null || config === void 0 ? void 0 : config.retryMode) !== null && _f !== void 0 ? _f : (0, node_config_provider_1.loadConfig)({
+ ...middleware_retry_2.NODE_RETRY_MODE_CONFIG_OPTIONS,
+ default: async () => (await defaultConfigProvider()).retryMode || util_retry_1.DEFAULT_RETRY_MODE,
+ }),
+ sha256: (_g = config === null || config === void 0 ? void 0 : config.sha256) !== null && _g !== void 0 ? _g : hash_node_1.Hash.bind(null, "sha256"),
+ streamCollector: (_h = config === null || config === void 0 ? void 0 : config.streamCollector) !== null && _h !== void 0 ? _h : node_http_handler_1.streamCollector,
+ useDualstackEndpoint: (_j = config === null || config === void 0 ? void 0 : config.useDualstackEndpoint) !== null && _j !== void 0 ? _j : (0, node_config_provider_1.loadConfig)(config_resolver_2.NODE_USE_DUALSTACK_ENDPOINT_CONFIG_OPTIONS),
+ useFipsEndpoint: (_k = config === null || config === void 0 ? void 0 : config.useFipsEndpoint) !== null && _k !== void 0 ? _k : (0, node_config_provider_1.loadConfig)(config_resolver_2.NODE_USE_FIPS_ENDPOINT_CONFIG_OPTIONS),
+ };
+};
+const region_config_resolver_1 = __nccwpck_require__(18156);
+const protocol_http_1 = __nccwpck_require__(64418);
+const smithy_client_5 = __nccwpck_require__(63570);
+var asPartial = (t2) => t2;
+var resolveRuntimeExtensions = (runtimeConfig, extensions) => {
+ const extensionConfiguration = {
+ ...asPartial((0, region_config_resolver_1.getAwsRegionExtensionConfiguration)(runtimeConfig)),
+ ...asPartial((0, smithy_client_5.getDefaultExtensionConfiguration)(runtimeConfig)),
+ ...asPartial((0, protocol_http_1.getHttpHandlerExtensionConfiguration)(runtimeConfig)),
+ };
+ extensions.forEach((extension) => extension.configure(extensionConfiguration));
+ return {
+ ...runtimeConfig,
+ ...(0, region_config_resolver_1.resolveAwsRegionExtensionConfiguration)(extensionConfiguration),
+ ...(0, smithy_client_5.resolveDefaultRuntimeConfig)(extensionConfiguration),
+ ...(0, protocol_http_1.resolveHttpHandlerRuntimeConfig)(extensionConfiguration),
+ };
+};
+var SSOOIDCClient = class extends smithy_client_1.Client {
+ constructor(...[configuration]) {
+ const _config_0 = getRuntimeConfig2(configuration || {});
+ const _config_1 = resolveClientEndpointParameters(_config_0);
+ const _config_2 = (0, config_resolver_1.resolveRegionConfig)(_config_1);
+ const _config_3 = (0, middleware_endpoint_1.resolveEndpointConfig)(_config_2);
+ const _config_4 = (0, middleware_retry_1.resolveRetryConfig)(_config_3);
+ const _config_5 = (0, middleware_host_header_1.resolveHostHeaderConfig)(_config_4);
+ const _config_6 = (0, middleware_user_agent_1.resolveUserAgentConfig)(_config_5);
+ const _config_7 = resolveRuntimeExtensions(_config_6, (configuration === null || configuration === void 0 ? void 0 : configuration.extensions) || []);
+ super(_config_7);
+ this.config = _config_7;
+ this.middlewareStack.use((0, middleware_retry_1.getRetryPlugin)(this.config));
+ this.middlewareStack.use((0, middleware_content_length_1.getContentLengthPlugin)(this.config));
+ this.middlewareStack.use((0, middleware_host_header_1.getHostHeaderPlugin)(this.config));
+ this.middlewareStack.use((0, middleware_logger_1.getLoggerPlugin)(this.config));
+ this.middlewareStack.use((0, middleware_recursion_detection_1.getRecursionDetectionPlugin)(this.config));
+ this.middlewareStack.use((0, middleware_user_agent_1.getUserAgentPlugin)(this.config));
+ }
+ destroy() {
+ super.destroy();
+ }
+};
+exports.SSOOIDCClient = SSOOIDCClient;
+const smithy_client_6 = __nccwpck_require__(63570);
+const middleware_endpoint_2 = __nccwpck_require__(82918);
+const middleware_serde_1 = __nccwpck_require__(81238);
+const smithy_client_7 = __nccwpck_require__(63570);
+const types_1 = __nccwpck_require__(55756);
+const protocol_http_2 = __nccwpck_require__(64418);
+const smithy_client_8 = __nccwpck_require__(63570);
+const smithy_client_9 = __nccwpck_require__(63570);
+var SSOOIDCServiceException = class _SSOOIDCServiceException extends smithy_client_9.ServiceException {
+ constructor(options) {
+ super(options);
+ Object.setPrototypeOf(this, _SSOOIDCServiceException.prototype);
+ }
+};
+var AccessDeniedException = class _AccessDeniedException extends SSOOIDCServiceException {
+ constructor(opts) {
+ super({
+ name: "AccessDeniedException",
+ $fault: "client",
+ ...opts,
+ });
+ this.name = "AccessDeniedException";
+ this.$fault = "client";
+ Object.setPrototypeOf(this, _AccessDeniedException.prototype);
+ this.error = opts.error;
+ this.error_description = opts.error_description;
+ }
+};
+exports.AccessDeniedException = AccessDeniedException;
+var AuthorizationPendingException = class _AuthorizationPendingException extends SSOOIDCServiceException {
+ constructor(opts) {
+ super({
+ name: "AuthorizationPendingException",
+ $fault: "client",
+ ...opts,
+ });
+ this.name = "AuthorizationPendingException";
+ this.$fault = "client";
+ Object.setPrototypeOf(this, _AuthorizationPendingException.prototype);
+ this.error = opts.error;
+ this.error_description = opts.error_description;
+ }
+};
+exports.AuthorizationPendingException = AuthorizationPendingException;
+var ExpiredTokenException = class _ExpiredTokenException extends SSOOIDCServiceException {
+ constructor(opts) {
+ super({
+ name: "ExpiredTokenException",
+ $fault: "client",
+ ...opts,
+ });
+ this.name = "ExpiredTokenException";
+ this.$fault = "client";
+ Object.setPrototypeOf(this, _ExpiredTokenException.prototype);
+ this.error = opts.error;
+ this.error_description = opts.error_description;
+ }
+};
+exports.ExpiredTokenException = ExpiredTokenException;
+var InternalServerException = class _InternalServerException extends SSOOIDCServiceException {
+ constructor(opts) {
+ super({
+ name: "InternalServerException",
+ $fault: "server",
+ ...opts,
+ });
+ this.name = "InternalServerException";
+ this.$fault = "server";
+ Object.setPrototypeOf(this, _InternalServerException.prototype);
+ this.error = opts.error;
+ this.error_description = opts.error_description;
+ }
+};
+exports.InternalServerException = InternalServerException;
+var InvalidClientException = class _InvalidClientException extends SSOOIDCServiceException {
+ constructor(opts) {
+ super({
+ name: "InvalidClientException",
+ $fault: "client",
+ ...opts,
+ });
+ this.name = "InvalidClientException";
+ this.$fault = "client";
+ Object.setPrototypeOf(this, _InvalidClientException.prototype);
+ this.error = opts.error;
+ this.error_description = opts.error_description;
+ }
+};
+exports.InvalidClientException = InvalidClientException;
+var InvalidGrantException = class _InvalidGrantException extends SSOOIDCServiceException {
+ constructor(opts) {
+ super({
+ name: "InvalidGrantException",
+ $fault: "client",
+ ...opts,
+ });
+ this.name = "InvalidGrantException";
+ this.$fault = "client";
+ Object.setPrototypeOf(this, _InvalidGrantException.prototype);
+ this.error = opts.error;
+ this.error_description = opts.error_description;
+ }
+};
+var InvalidRequestException = class _InvalidRequestException extends SSOOIDCServiceException {
+ constructor(opts) {
+ super({
+ name: "InvalidRequestException",
+ $fault: "client",
+ ...opts,
+ });
+ this.name = "InvalidRequestException";
+ this.$fault = "client";
+ Object.setPrototypeOf(this, _InvalidRequestException.prototype);
+ this.error = opts.error;
+ this.error_description = opts.error_description;
+ }
+};
+exports.InvalidRequestException = InvalidRequestException;
+var InvalidScopeException = class _InvalidScopeException extends SSOOIDCServiceException {
+ constructor(opts) {
+ super({
+ name: "InvalidScopeException",
+ $fault: "client",
+ ...opts,
+ });
+ this.name = "InvalidScopeException";
+ this.$fault = "client";
+ Object.setPrototypeOf(this, _InvalidScopeException.prototype);
+ this.error = opts.error;
+ this.error_description = opts.error_description;
+ }
+};
+exports.InvalidScopeException = InvalidScopeException;
+var SlowDownException = class _SlowDownException extends SSOOIDCServiceException {
+ constructor(opts) {
+ super({
+ name: "SlowDownException",
+ $fault: "client",
+ ...opts,
+ });
+ this.name = "SlowDownException";
+ this.$fault = "client";
+ Object.setPrototypeOf(this, _SlowDownException.prototype);
+ this.error = opts.error;
+ this.error_description = opts.error_description;
+ }
+};
+exports.SlowDownException = SlowDownException;
+var UnauthorizedClientException = class _UnauthorizedClientException extends SSOOIDCServiceException {
+ constructor(opts) {
+ super({
+ name: "UnauthorizedClientException",
+ $fault: "client",
+ ...opts,
+ });
+ this.name = "UnauthorizedClientException";
+ this.$fault = "client";
+ Object.setPrototypeOf(this, _UnauthorizedClientException.prototype);
+ this.error = opts.error;
+ this.error_description = opts.error_description;
+ }
+};
+exports.UnauthorizedClientException = UnauthorizedClientException;
+var UnsupportedGrantTypeException = class _UnsupportedGrantTypeException extends SSOOIDCServiceException {
+ constructor(opts) {
+ super({
+ name: "UnsupportedGrantTypeException",
+ $fault: "client",
+ ...opts,
+ });
+ this.name = "UnsupportedGrantTypeException";
+ this.$fault = "client";
+ Object.setPrototypeOf(this, _UnsupportedGrantTypeException.prototype);
+ this.error = opts.error;
+ this.error_description = opts.error_description;
+ }
+};
+exports.UnsupportedGrantTypeException = UnsupportedGrantTypeException;
+var InvalidClientMetadataException = class _InvalidClientMetadataException extends SSOOIDCServiceException {
+ constructor(opts) {
+ super({
+ name: "InvalidClientMetadataException",
+ $fault: "client",
+ ...opts,
+ });
+ this.name = "InvalidClientMetadataException";
+ this.$fault = "client";
+ Object.setPrototypeOf(this, _InvalidClientMetadataException.prototype);
+ this.error = opts.error;
+ this.error_description = opts.error_description;
+ }
+};
+var se_CreateTokenCommand = async (input, context) => {
+ const { hostname, protocol = "https", port, path: basePath } = await context.endpoint();
+ const headers = {
+ "content-type": "application/json",
+ };
+ const resolvedPath = `${(basePath === null || basePath === void 0 ? void 0 : basePath.endsWith("/")) ? basePath.slice(0, -1) : basePath || ""}/token`;
+ let body;
+ body = JSON.stringify((0, smithy_client_8.take)(input, {
+ clientId: [],
+ clientSecret: [],
+ code: [],
+ deviceCode: [],
+ grantType: [],
+ redirectUri: [],
+ refreshToken: [],
+ scope: (_) => (0, smithy_client_8._json)(_),
+ }));
+ return new protocol_http_2.HttpRequest({
+ protocol,
+ hostname,
+ port,
+ method: "POST",
+ headers,
+ path: resolvedPath,
+ body,
+ });
+};
+var se_RegisterClientCommand = async (input, context) => {
+ const { hostname, protocol = "https", port, path: basePath } = await context.endpoint();
+ const headers = {
+ "content-type": "application/json",
+ };
+ const resolvedPath = `${(basePath === null || basePath === void 0 ? void 0 : basePath.endsWith("/")) ? basePath.slice(0, -1) : basePath || ""}/client/register`;
+ let body;
+ body = JSON.stringify((0, smithy_client_8.take)(input, {
+ clientName: [],
+ clientType: [],
+ scopes: (_) => (0, smithy_client_8._json)(_),
+ }));
+ return new protocol_http_2.HttpRequest({
+ protocol,
+ hostname,
+ port,
+ method: "POST",
+ headers,
+ path: resolvedPath,
+ body,
+ });
+};
+var se_StartDeviceAuthorizationCommand = async (input, context) => {
+ const { hostname, protocol = "https", port, path: basePath } = await context.endpoint();
+ const headers = {
+ "content-type": "application/json",
+ };
+ const resolvedPath = `${(basePath === null || basePath === void 0 ? void 0 : basePath.endsWith("/")) ? basePath.slice(0, -1) : basePath || ""}/device_authorization`;
+ let body;
+ body = JSON.stringify((0, smithy_client_8.take)(input, {
+ clientId: [],
+ clientSecret: [],
+ startUrl: [],
+ }));
+ return new protocol_http_2.HttpRequest({
+ protocol,
+ hostname,
+ port,
+ method: "POST",
+ headers,
+ path: resolvedPath,
+ body,
+ });
+};
+var de_CreateTokenCommand = async (output, context) => {
+ if (output.statusCode !== 200 && output.statusCode >= 300) {
+ return de_CreateTokenCommandError(output, context);
+ }
+ const contents = (0, smithy_client_8.map)({
+ $metadata: deserializeMetadata(output),
+ });
+ const data = (0, smithy_client_8.expectNonNull)((0, smithy_client_8.expectObject)(await parseBody(output.body, context)), "body");
+ const doc = (0, smithy_client_8.take)(data, {
+ accessToken: smithy_client_8.expectString,
+ expiresIn: smithy_client_8.expectInt32,
+ idToken: smithy_client_8.expectString,
+ refreshToken: smithy_client_8.expectString,
+ tokenType: smithy_client_8.expectString,
+ });
+ Object.assign(contents, doc);
+ return contents;
+};
+var de_CreateTokenCommandError = async (output, context) => {
+ const parsedOutput = {
+ ...output,
+ body: await parseErrorBody(output.body, context),
+ };
+ const errorCode = loadRestJsonErrorCode(output, parsedOutput.body);
+ switch (errorCode) {
+ case "AccessDeniedException":
+ case "com.amazonaws.ssooidc#AccessDeniedException":
+ throw await de_AccessDeniedExceptionRes(parsedOutput, context);
+ case "AuthorizationPendingException":
+ case "com.amazonaws.ssooidc#AuthorizationPendingException":
+ throw await de_AuthorizationPendingExceptionRes(parsedOutput, context);
+ case "ExpiredTokenException":
+ case "com.amazonaws.ssooidc#ExpiredTokenException":
+ throw await de_ExpiredTokenExceptionRes(parsedOutput, context);
+ case "InternalServerException":
+ case "com.amazonaws.ssooidc#InternalServerException":
+ throw await de_InternalServerExceptionRes(parsedOutput, context);
+ case "InvalidClientException":
+ case "com.amazonaws.ssooidc#InvalidClientException":
+ throw await de_InvalidClientExceptionRes(parsedOutput, context);
+ case "InvalidGrantException":
+ case "com.amazonaws.ssooidc#InvalidGrantException":
+ throw await de_InvalidGrantExceptionRes(parsedOutput, context);
+ case "InvalidRequestException":
+ case "com.amazonaws.ssooidc#InvalidRequestException":
+ throw await de_InvalidRequestExceptionRes(parsedOutput, context);
+ case "InvalidScopeException":
+ case "com.amazonaws.ssooidc#InvalidScopeException":
+ throw await de_InvalidScopeExceptionRes(parsedOutput, context);
+ case "SlowDownException":
+ case "com.amazonaws.ssooidc#SlowDownException":
+ throw await de_SlowDownExceptionRes(parsedOutput, context);
+ case "UnauthorizedClientException":
+ case "com.amazonaws.ssooidc#UnauthorizedClientException":
+ throw await de_UnauthorizedClientExceptionRes(parsedOutput, context);
+ case "UnsupportedGrantTypeException":
+ case "com.amazonaws.ssooidc#UnsupportedGrantTypeException":
+ throw await de_UnsupportedGrantTypeExceptionRes(parsedOutput, context);
+ default:
+ const parsedBody = parsedOutput.body;
+ return throwDefaultError({
+ output,
+ parsedBody,
+ errorCode,
+ });
+ }
+};
+var de_RegisterClientCommand = async (output, context) => {
+ if (output.statusCode !== 200 && output.statusCode >= 300) {
+ return de_RegisterClientCommandError(output, context);
+ }
+ const contents = (0, smithy_client_8.map)({
+ $metadata: deserializeMetadata(output),
+ });
+ const data = (0, smithy_client_8.expectNonNull)((0, smithy_client_8.expectObject)(await parseBody(output.body, context)), "body");
+ const doc = (0, smithy_client_8.take)(data, {
+ authorizationEndpoint: smithy_client_8.expectString,
+ clientId: smithy_client_8.expectString,
+ clientIdIssuedAt: smithy_client_8.expectLong,
+ clientSecret: smithy_client_8.expectString,
+ clientSecretExpiresAt: smithy_client_8.expectLong,
+ tokenEndpoint: smithy_client_8.expectString,
+ });
+ Object.assign(contents, doc);
+ return contents;
+};
+var de_RegisterClientCommandError = async (output, context) => {
+ const parsedOutput = {
+ ...output,
+ body: await parseErrorBody(output.body, context),
+ };
+ const errorCode = loadRestJsonErrorCode(output, parsedOutput.body);
+ switch (errorCode) {
+ case "InternalServerException":
+ case "com.amazonaws.ssooidc#InternalServerException":
+ throw await de_InternalServerExceptionRes(parsedOutput, context);
+ case "InvalidClientMetadataException":
+ case "com.amazonaws.ssooidc#InvalidClientMetadataException":
+ throw await de_InvalidClientMetadataExceptionRes(parsedOutput, context);
+ case "InvalidRequestException":
+ case "com.amazonaws.ssooidc#InvalidRequestException":
+ throw await de_InvalidRequestExceptionRes(parsedOutput, context);
+ case "InvalidScopeException":
+ case "com.amazonaws.ssooidc#InvalidScopeException":
+ throw await de_InvalidScopeExceptionRes(parsedOutput, context);
+ default:
+ const parsedBody = parsedOutput.body;
+ return throwDefaultError({
+ output,
+ parsedBody,
+ errorCode,
+ });
+ }
+};
+var de_StartDeviceAuthorizationCommand = async (output, context) => {
+ if (output.statusCode !== 200 && output.statusCode >= 300) {
+ return de_StartDeviceAuthorizationCommandError(output, context);
+ }
+ const contents = (0, smithy_client_8.map)({
+ $metadata: deserializeMetadata(output),
+ });
+ const data = (0, smithy_client_8.expectNonNull)((0, smithy_client_8.expectObject)(await parseBody(output.body, context)), "body");
+ const doc = (0, smithy_client_8.take)(data, {
+ deviceCode: smithy_client_8.expectString,
+ expiresIn: smithy_client_8.expectInt32,
+ interval: smithy_client_8.expectInt32,
+ userCode: smithy_client_8.expectString,
+ verificationUri: smithy_client_8.expectString,
+ verificationUriComplete: smithy_client_8.expectString,
+ });
+ Object.assign(contents, doc);
+ return contents;
+};
+var de_StartDeviceAuthorizationCommandError = async (output, context) => {
+ const parsedOutput = {
+ ...output,
+ body: await parseErrorBody(output.body, context),
+ };
+ const errorCode = loadRestJsonErrorCode(output, parsedOutput.body);
+ switch (errorCode) {
+ case "InternalServerException":
+ case "com.amazonaws.ssooidc#InternalServerException":
+ throw await de_InternalServerExceptionRes(parsedOutput, context);
+ case "InvalidClientException":
+ case "com.amazonaws.ssooidc#InvalidClientException":
+ throw await de_InvalidClientExceptionRes(parsedOutput, context);
+ case "InvalidRequestException":
+ case "com.amazonaws.ssooidc#InvalidRequestException":
+ throw await de_InvalidRequestExceptionRes(parsedOutput, context);
+ case "SlowDownException":
+ case "com.amazonaws.ssooidc#SlowDownException":
+ throw await de_SlowDownExceptionRes(parsedOutput, context);
+ case "UnauthorizedClientException":
+ case "com.amazonaws.ssooidc#UnauthorizedClientException":
+ throw await de_UnauthorizedClientExceptionRes(parsedOutput, context);
+ default:
+ const parsedBody = parsedOutput.body;
+ return throwDefaultError({
+ output,
+ parsedBody,
+ errorCode,
+ });
+ }
+};
+var throwDefaultError = (0, smithy_client_8.withBaseException)(SSOOIDCServiceException);
+var de_AccessDeniedExceptionRes = async (parsedOutput, context) => {
+ const contents = (0, smithy_client_8.map)({});
+ const data = parsedOutput.body;
+ const doc = (0, smithy_client_8.take)(data, {
+ error: smithy_client_8.expectString,
+ error_description: smithy_client_8.expectString,
+ });
+ Object.assign(contents, doc);
+ const exception = new AccessDeniedException({
+ $metadata: deserializeMetadata(parsedOutput),
+ ...contents,
+ });
+ return (0, smithy_client_8.decorateServiceException)(exception, parsedOutput.body);
+};
+var de_AuthorizationPendingExceptionRes = async (parsedOutput, context) => {
+ const contents = (0, smithy_client_8.map)({});
+ const data = parsedOutput.body;
+ const doc = (0, smithy_client_8.take)(data, {
+ error: smithy_client_8.expectString,
+ error_description: smithy_client_8.expectString,
+ });
+ Object.assign(contents, doc);
+ const exception = new AuthorizationPendingException({
+ $metadata: deserializeMetadata(parsedOutput),
+ ...contents,
+ });
+ return (0, smithy_client_8.decorateServiceException)(exception, parsedOutput.body);
+};
+var de_ExpiredTokenExceptionRes = async (parsedOutput, context) => {
+ const contents = (0, smithy_client_8.map)({});
+ const data = parsedOutput.body;
+ const doc = (0, smithy_client_8.take)(data, {
+ error: smithy_client_8.expectString,
+ error_description: smithy_client_8.expectString,
+ });
+ Object.assign(contents, doc);
+ const exception = new ExpiredTokenException({
+ $metadata: deserializeMetadata(parsedOutput),
+ ...contents,
+ });
+ return (0, smithy_client_8.decorateServiceException)(exception, parsedOutput.body);
+};
+var de_InternalServerExceptionRes = async (parsedOutput, context) => {
+ const contents = (0, smithy_client_8.map)({});
+ const data = parsedOutput.body;
+ const doc = (0, smithy_client_8.take)(data, {
+ error: smithy_client_8.expectString,
+ error_description: smithy_client_8.expectString,
+ });
+ Object.assign(contents, doc);
+ const exception = new InternalServerException({
+ $metadata: deserializeMetadata(parsedOutput),
+ ...contents,
+ });
+ return (0, smithy_client_8.decorateServiceException)(exception, parsedOutput.body);
+};
+var de_InvalidClientExceptionRes = async (parsedOutput, context) => {
+ const contents = (0, smithy_client_8.map)({});
+ const data = parsedOutput.body;
+ const doc = (0, smithy_client_8.take)(data, {
+ error: smithy_client_8.expectString,
+ error_description: smithy_client_8.expectString,
+ });
+ Object.assign(contents, doc);
+ const exception = new InvalidClientException({
+ $metadata: deserializeMetadata(parsedOutput),
+ ...contents,
+ });
+ return (0, smithy_client_8.decorateServiceException)(exception, parsedOutput.body);
+};
+var de_InvalidClientMetadataExceptionRes = async (parsedOutput, context) => {
+ const contents = (0, smithy_client_8.map)({});
+ const data = parsedOutput.body;
+ const doc = (0, smithy_client_8.take)(data, {
+ error: smithy_client_8.expectString,
+ error_description: smithy_client_8.expectString,
+ });
+ Object.assign(contents, doc);
+ const exception = new InvalidClientMetadataException({
+ $metadata: deserializeMetadata(parsedOutput),
+ ...contents,
+ });
+ return (0, smithy_client_8.decorateServiceException)(exception, parsedOutput.body);
+};
+var de_InvalidGrantExceptionRes = async (parsedOutput, context) => {
+ const contents = (0, smithy_client_8.map)({});
+ const data = parsedOutput.body;
+ const doc = (0, smithy_client_8.take)(data, {
+ error: smithy_client_8.expectString,
+ error_description: smithy_client_8.expectString,
+ });
+ Object.assign(contents, doc);
+ const exception = new InvalidGrantException({
+ $metadata: deserializeMetadata(parsedOutput),
+ ...contents,
+ });
+ return (0, smithy_client_8.decorateServiceException)(exception, parsedOutput.body);
+};
+var de_InvalidRequestExceptionRes = async (parsedOutput, context) => {
+ const contents = (0, smithy_client_8.map)({});
+ const data = parsedOutput.body;
+ const doc = (0, smithy_client_8.take)(data, {
+ error: smithy_client_8.expectString,
+ error_description: smithy_client_8.expectString,
+ });
+ Object.assign(contents, doc);
+ const exception = new InvalidRequestException({
+ $metadata: deserializeMetadata(parsedOutput),
+ ...contents,
+ });
+ return (0, smithy_client_8.decorateServiceException)(exception, parsedOutput.body);
+};
+var de_InvalidScopeExceptionRes = async (parsedOutput, context) => {
+ const contents = (0, smithy_client_8.map)({});
+ const data = parsedOutput.body;
+ const doc = (0, smithy_client_8.take)(data, {
+ error: smithy_client_8.expectString,
+ error_description: smithy_client_8.expectString,
+ });
+ Object.assign(contents, doc);
+ const exception = new InvalidScopeException({
+ $metadata: deserializeMetadata(parsedOutput),
+ ...contents,
+ });
+ return (0, smithy_client_8.decorateServiceException)(exception, parsedOutput.body);
+};
+var de_SlowDownExceptionRes = async (parsedOutput, context) => {
+ const contents = (0, smithy_client_8.map)({});
+ const data = parsedOutput.body;
+ const doc = (0, smithy_client_8.take)(data, {
+ error: smithy_client_8.expectString,
+ error_description: smithy_client_8.expectString,
+ });
+ Object.assign(contents, doc);
+ const exception = new SlowDownException({
+ $metadata: deserializeMetadata(parsedOutput),
+ ...contents,
+ });
+ return (0, smithy_client_8.decorateServiceException)(exception, parsedOutput.body);
+};
+var de_UnauthorizedClientExceptionRes = async (parsedOutput, context) => {
+ const contents = (0, smithy_client_8.map)({});
+ const data = parsedOutput.body;
+ const doc = (0, smithy_client_8.take)(data, {
+ error: smithy_client_8.expectString,
+ error_description: smithy_client_8.expectString,
+ });
+ Object.assign(contents, doc);
+ const exception = new UnauthorizedClientException({
+ $metadata: deserializeMetadata(parsedOutput),
+ ...contents,
+ });
+ return (0, smithy_client_8.decorateServiceException)(exception, parsedOutput.body);
+};
+var de_UnsupportedGrantTypeExceptionRes = async (parsedOutput, context) => {
+ const contents = (0, smithy_client_8.map)({});
+ const data = parsedOutput.body;
+ const doc = (0, smithy_client_8.take)(data, {
+ error: smithy_client_8.expectString,
+ error_description: smithy_client_8.expectString,
+ });
+ Object.assign(contents, doc);
+ const exception = new UnsupportedGrantTypeException({
+ $metadata: deserializeMetadata(parsedOutput),
+ ...contents,
+ });
+ return (0, smithy_client_8.decorateServiceException)(exception, parsedOutput.body);
+};
+var deserializeMetadata = (output) => {
+ var _a, _b;
+ return ({
+ httpStatusCode: output.statusCode,
+ requestId: (_b = (_a = output.headers["x-amzn-requestid"]) !== null && _a !== void 0 ? _a : output.headers["x-amzn-request-id"]) !== null && _b !== void 0 ? _b : output.headers["x-amz-request-id"],
+ extendedRequestId: output.headers["x-amz-id-2"],
+ cfId: output.headers["x-amz-cf-id"],
+ });
+};
+var collectBodyString = (streamBody, context) => (0, smithy_client_8.collectBody)(streamBody, context).then((body) => context.utf8Encoder(body));
+var parseBody = (streamBody, context) => collectBodyString(streamBody, context).then((encoded) => {
+ if (encoded.length) {
+ return JSON.parse(encoded);
+ }
+ return {};
+});
+var parseErrorBody = async (errorBody, context) => {
+ var _a;
+ const value = await parseBody(errorBody, context);
+ value.message = (_a = value.message) !== null && _a !== void 0 ? _a : value.Message;
+ return value;
+};
+var loadRestJsonErrorCode = (output, data) => {
+ const findKey = (object, key) => Object.keys(object).find((k2) => k2.toLowerCase() === key.toLowerCase());
+ const sanitizeErrorCode = (rawValue) => {
+ let cleanValue = rawValue;
+ if (typeof cleanValue === "number") {
+ cleanValue = cleanValue.toString();
+ }
+ if (cleanValue.indexOf(",") >= 0) {
+ cleanValue = cleanValue.split(",")[0];
+ }
+ if (cleanValue.indexOf(":") >= 0) {
+ cleanValue = cleanValue.split(":")[0];
+ }
+ if (cleanValue.indexOf("#") >= 0) {
+ cleanValue = cleanValue.split("#")[1];
+ }
+ return cleanValue;
+ };
+ const headerKey = findKey(output.headers, "x-amzn-errortype");
+ if (headerKey !== void 0) {
+ return sanitizeErrorCode(output.headers[headerKey]);
+ }
+ if (data.code !== void 0) {
+ return sanitizeErrorCode(data.code);
+ }
+ if (data["__type"] !== void 0) {
+ return sanitizeErrorCode(data["__type"]);
+ }
+};
+var CreateTokenCommand = class _CreateTokenCommand extends smithy_client_7.Command {
+ constructor(input) {
+ super();
+ this.input = input;
+ }
+ static getEndpointParameterInstructions() {
+ return {
+ UseFIPS: { type: "builtInParams", name: "useFipsEndpoint" },
+ Endpoint: { type: "builtInParams", name: "endpoint" },
+ Region: { type: "builtInParams", name: "region" },
+ UseDualStack: { type: "builtInParams", name: "useDualstackEndpoint" },
+ };
+ }
+ resolveMiddleware(clientStack, configuration, options) {
+ this.middlewareStack.use((0, middleware_serde_1.getSerdePlugin)(configuration, this.serialize, this.deserialize));
+ this.middlewareStack.use((0, middleware_endpoint_2.getEndpointPlugin)(configuration, _CreateTokenCommand.getEndpointParameterInstructions()));
+ const stack = clientStack.concat(this.middlewareStack);
+ const { logger } = configuration;
+ const clientName = "SSOOIDCClient";
+ const commandName = "CreateTokenCommand";
+ const handlerExecutionContext = {
+ logger,
+ clientName,
+ commandName,
+ inputFilterSensitiveLog: (_) => _,
+ outputFilterSensitiveLog: (_) => _,
+ [types_1.SMITHY_CONTEXT_KEY]: {
+ service: "AWSSSOOIDCService",
+ operation: "CreateToken",
+ },
+ };
+ const { requestHandler } = configuration;
+ return stack.resolve((request) => requestHandler.handle(request.request, options || {}), handlerExecutionContext);
+ }
+ serialize(input, context) {
+ return se_CreateTokenCommand(input, context);
+ }
+ deserialize(output, context) {
+ return de_CreateTokenCommand(output, context);
+ }
+};
+exports.CreateTokenCommand = CreateTokenCommand;
+const middleware_endpoint_3 = __nccwpck_require__(82918);
+const middleware_serde_2 = __nccwpck_require__(81238);
+const smithy_client_10 = __nccwpck_require__(63570);
+const types_2 = __nccwpck_require__(55756);
+var RegisterClientCommand = class _RegisterClientCommand extends smithy_client_10.Command {
+ constructor(input) {
+ super();
+ this.input = input;
+ }
+ static getEndpointParameterInstructions() {
+ return {
+ UseFIPS: { type: "builtInParams", name: "useFipsEndpoint" },
+ Endpoint: { type: "builtInParams", name: "endpoint" },
+ Region: { type: "builtInParams", name: "region" },
+ UseDualStack: { type: "builtInParams", name: "useDualstackEndpoint" },
+ };
+ }
+ resolveMiddleware(clientStack, configuration, options) {
+ this.middlewareStack.use((0, middleware_serde_2.getSerdePlugin)(configuration, this.serialize, this.deserialize));
+ this.middlewareStack.use((0, middleware_endpoint_3.getEndpointPlugin)(configuration, _RegisterClientCommand.getEndpointParameterInstructions()));
+ const stack = clientStack.concat(this.middlewareStack);
+ const { logger } = configuration;
+ const clientName = "SSOOIDCClient";
+ const commandName = "RegisterClientCommand";
+ const handlerExecutionContext = {
+ logger,
+ clientName,
+ commandName,
+ inputFilterSensitiveLog: (_) => _,
+ outputFilterSensitiveLog: (_) => _,
+ [types_2.SMITHY_CONTEXT_KEY]: {
+ service: "AWSSSOOIDCService",
+ operation: "RegisterClient",
+ },
+ };
+ const { requestHandler } = configuration;
+ return stack.resolve((request) => requestHandler.handle(request.request, options || {}), handlerExecutionContext);
+ }
+ serialize(input, context) {
+ return se_RegisterClientCommand(input, context);
+ }
+ deserialize(output, context) {
+ return de_RegisterClientCommand(output, context);
+ }
+};
+const middleware_endpoint_4 = __nccwpck_require__(82918);
+const middleware_serde_3 = __nccwpck_require__(81238);
+const smithy_client_11 = __nccwpck_require__(63570);
+const types_3 = __nccwpck_require__(55756);
+var StartDeviceAuthorizationCommand = class _StartDeviceAuthorizationCommand extends smithy_client_11.Command {
+ constructor(input) {
+ super();
+ this.input = input;
+ }
+ static getEndpointParameterInstructions() {
+ return {
+ UseFIPS: { type: "builtInParams", name: "useFipsEndpoint" },
+ Endpoint: { type: "builtInParams", name: "endpoint" },
+ Region: { type: "builtInParams", name: "region" },
+ UseDualStack: { type: "builtInParams", name: "useDualstackEndpoint" },
+ };
+ }
+ resolveMiddleware(clientStack, configuration, options) {
+ this.middlewareStack.use((0, middleware_serde_3.getSerdePlugin)(configuration, this.serialize, this.deserialize));
+ this.middlewareStack.use((0, middleware_endpoint_4.getEndpointPlugin)(configuration, _StartDeviceAuthorizationCommand.getEndpointParameterInstructions()));
+ const stack = clientStack.concat(this.middlewareStack);
+ const { logger } = configuration;
+ const clientName = "SSOOIDCClient";
+ const commandName = "StartDeviceAuthorizationCommand";
+ const handlerExecutionContext = {
+ logger,
+ clientName,
+ commandName,
+ inputFilterSensitiveLog: (_) => _,
+ outputFilterSensitiveLog: (_) => _,
+ [types_3.SMITHY_CONTEXT_KEY]: {
+ service: "AWSSSOOIDCService",
+ operation: "StartDeviceAuthorization",
+ },
+ };
+ const { requestHandler } = configuration;
+ return stack.resolve((request) => requestHandler.handle(request.request, options || {}), handlerExecutionContext);
+ }
+ serialize(input, context) {
+ return se_StartDeviceAuthorizationCommand(input, context);
+ }
+ deserialize(output, context) {
+ return de_StartDeviceAuthorizationCommand(output, context);
+ }
+};
+var commands = {
+ CreateTokenCommand,
+ RegisterClientCommand,
+ StartDeviceAuthorizationCommand,
+};
+var SSOOIDC = class extends SSOOIDCClient {
+};
+(0, smithy_client_6.createAggregatedClient)(commands, SSOOIDC);
+
+
+/***/ }),
+
+/***/ 92242:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.REFRESH_MESSAGE = exports.EXPIRE_WINDOW_MS = void 0;
+exports.EXPIRE_WINDOW_MS = 5 * 60 * 1000;
+exports.REFRESH_MESSAGE = `To refresh this SSO session run 'aws sso login' with the corresponding profile.`;
+
+
+/***/ }),
+
+/***/ 85125:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.fromSso = void 0;
+const property_provider_1 = __nccwpck_require__(79721);
+const shared_ini_file_loader_1 = __nccwpck_require__(43507);
+const constants_1 = __nccwpck_require__(92242);
+const getNewSsoOidcToken_1 = __nccwpck_require__(93601);
+const validateTokenExpiry_1 = __nccwpck_require__(28418);
+const validateTokenKey_1 = __nccwpck_require__(2488);
+const writeSSOTokenToFile_1 = __nccwpck_require__(48552);
+const lastRefreshAttemptTime = new Date(0);
+const fromSso = (init = {}) => async () => {
+ const profiles = await (0, shared_ini_file_loader_1.parseKnownFiles)(init);
+ const profileName = (0, shared_ini_file_loader_1.getProfileName)(init);
+ const profile = profiles[profileName];
+ if (!profile) {
+ throw new property_provider_1.TokenProviderError(`Profile '${profileName}' could not be found in shared credentials file.`, false);
+ }
+ else if (!profile["sso_session"]) {
+ throw new property_provider_1.TokenProviderError(`Profile '${profileName}' is missing required property 'sso_session'.`);
+ }
+ const ssoSessionName = profile["sso_session"];
+ const ssoSessions = await (0, shared_ini_file_loader_1.loadSsoSessionData)(init);
+ const ssoSession = ssoSessions[ssoSessionName];
+ if (!ssoSession) {
+ throw new property_provider_1.TokenProviderError(`Sso session '${ssoSessionName}' could not be found in shared credentials file.`, false);
+ }
+ for (const ssoSessionRequiredKey of ["sso_start_url", "sso_region"]) {
+ if (!ssoSession[ssoSessionRequiredKey]) {
+ throw new property_provider_1.TokenProviderError(`Sso session '${ssoSessionName}' is missing required property '${ssoSessionRequiredKey}'.`, false);
+ }
+ }
+ const ssoStartUrl = ssoSession["sso_start_url"];
+ const ssoRegion = ssoSession["sso_region"];
+ let ssoToken;
+ try {
+ ssoToken = await (0, shared_ini_file_loader_1.getSSOTokenFromFile)(ssoSessionName);
+ }
+ catch (e) {
+ throw new property_provider_1.TokenProviderError(`The SSO session token associated with profile=${profileName} was not found or is invalid. ${constants_1.REFRESH_MESSAGE}`, false);
+ }
+ (0, validateTokenKey_1.validateTokenKey)("accessToken", ssoToken.accessToken);
+ (0, validateTokenKey_1.validateTokenKey)("expiresAt", ssoToken.expiresAt);
+ const { accessToken, expiresAt } = ssoToken;
+ const existingToken = { token: accessToken, expiration: new Date(expiresAt) };
+ if (existingToken.expiration.getTime() - Date.now() > constants_1.EXPIRE_WINDOW_MS) {
+ return existingToken;
+ }
+ if (Date.now() - lastRefreshAttemptTime.getTime() < 30 * 1000) {
+ (0, validateTokenExpiry_1.validateTokenExpiry)(existingToken);
+ return existingToken;
+ }
+ (0, validateTokenKey_1.validateTokenKey)("clientId", ssoToken.clientId, true);
+ (0, validateTokenKey_1.validateTokenKey)("clientSecret", ssoToken.clientSecret, true);
+ (0, validateTokenKey_1.validateTokenKey)("refreshToken", ssoToken.refreshToken, true);
+ try {
+ lastRefreshAttemptTime.setTime(Date.now());
+ const newSsoOidcToken = await (0, getNewSsoOidcToken_1.getNewSsoOidcToken)(ssoToken, ssoRegion);
+ (0, validateTokenKey_1.validateTokenKey)("accessToken", newSsoOidcToken.accessToken);
+ (0, validateTokenKey_1.validateTokenKey)("expiresIn", newSsoOidcToken.expiresIn);
+ const newTokenExpiration = new Date(Date.now() + newSsoOidcToken.expiresIn * 1000);
+ try {
+ await (0, writeSSOTokenToFile_1.writeSSOTokenToFile)(ssoSessionName, {
+ ...ssoToken,
+ accessToken: newSsoOidcToken.accessToken,
+ expiresAt: newTokenExpiration.toISOString(),
+ refreshToken: newSsoOidcToken.refreshToken,
+ });
+ }
+ catch (error) {
+ }
+ return {
+ token: newSsoOidcToken.accessToken,
+ expiration: newTokenExpiration,
+ };
+ }
+ catch (error) {
+ (0, validateTokenExpiry_1.validateTokenExpiry)(existingToken);
+ return existingToken;
+ }
+};
+exports.fromSso = fromSso;
+
+
+/***/ }),
+
+/***/ 63258:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.fromStatic = void 0;
+const property_provider_1 = __nccwpck_require__(79721);
+const fromStatic = ({ token }) => async () => {
+ if (!token || !token.token) {
+ throw new property_provider_1.TokenProviderError(`Please pass a valid token to fromStatic`, false);
+ }
+ return token;
+};
+exports.fromStatic = fromStatic;
+
+
+/***/ }),
+
+/***/ 93601:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.getNewSsoOidcToken = void 0;
+const client_sso_oidc_node_1 = __nccwpck_require__(52664);
+const getSsoOidcClient_1 = __nccwpck_require__(99775);
+const getNewSsoOidcToken = (ssoToken, ssoRegion) => {
+ const ssoOidcClient = (0, getSsoOidcClient_1.getSsoOidcClient)(ssoRegion);
+ return ssoOidcClient.send(new client_sso_oidc_node_1.CreateTokenCommand({
+ clientId: ssoToken.clientId,
+ clientSecret: ssoToken.clientSecret,
+ refreshToken: ssoToken.refreshToken,
+ grantType: "refresh_token",
+ }));
+};
+exports.getNewSsoOidcToken = getNewSsoOidcToken;
+
+
+/***/ }),
+
+/***/ 99775:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.getSsoOidcClient = void 0;
+const client_sso_oidc_node_1 = __nccwpck_require__(52664);
+const ssoOidcClientsHash = {};
+const getSsoOidcClient = (ssoRegion) => {
+ if (ssoOidcClientsHash[ssoRegion]) {
+ return ssoOidcClientsHash[ssoRegion];
+ }
+ const ssoOidcClient = new client_sso_oidc_node_1.SSOOIDCClient({ region: ssoRegion });
+ ssoOidcClientsHash[ssoRegion] = ssoOidcClient;
+ return ssoOidcClient;
+};
+exports.getSsoOidcClient = getSsoOidcClient;
+
+
+/***/ }),
+
+/***/ 52843:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+const tslib_1 = __nccwpck_require__(4351);
+tslib_1.__exportStar(__nccwpck_require__(52664), exports);
+tslib_1.__exportStar(__nccwpck_require__(85125), exports);
+tslib_1.__exportStar(__nccwpck_require__(63258), exports);
+tslib_1.__exportStar(__nccwpck_require__(70195), exports);
+
+
+/***/ }),
+
+/***/ 70195:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.nodeProvider = void 0;
+const property_provider_1 = __nccwpck_require__(79721);
+const fromSso_1 = __nccwpck_require__(85125);
+const nodeProvider = (init = {}) => (0, property_provider_1.memoize)((0, property_provider_1.chain)((0, fromSso_1.fromSso)(init), async () => {
+ throw new property_provider_1.TokenProviderError("Could not load token from any providers", false);
+}), (token) => token.expiration !== undefined && token.expiration.getTime() - Date.now() < 300000, (token) => token.expiration !== undefined);
+exports.nodeProvider = nodeProvider;
+
+
+/***/ }),
+
+/***/ 28418:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.validateTokenExpiry = void 0;
+const property_provider_1 = __nccwpck_require__(79721);
+const constants_1 = __nccwpck_require__(92242);
+const validateTokenExpiry = (token) => {
+ if (token.expiration && token.expiration.getTime() < Date.now()) {
+ throw new property_provider_1.TokenProviderError(`Token is expired. ${constants_1.REFRESH_MESSAGE}`, false);
+ }
+};
+exports.validateTokenExpiry = validateTokenExpiry;
+
+
+/***/ }),
+
+/***/ 2488:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.validateTokenKey = void 0;
+const property_provider_1 = __nccwpck_require__(79721);
+const constants_1 = __nccwpck_require__(92242);
+const validateTokenKey = (key, value, forRefresh = false) => {
+ if (typeof value === "undefined") {
+ throw new property_provider_1.TokenProviderError(`Value not present for '${key}' in SSO Token${forRefresh ? ". Cannot refresh" : ""}. ${constants_1.REFRESH_MESSAGE}`, false);
+ }
+};
+exports.validateTokenKey = validateTokenKey;
+
+
+/***/ }),
+
+/***/ 48552:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.writeSSOTokenToFile = void 0;
+const shared_ini_file_loader_1 = __nccwpck_require__(43507);
+const fs_1 = __nccwpck_require__(57147);
+const { writeFile } = fs_1.promises;
+const writeSSOTokenToFile = (id, ssoToken) => {
+ const tokenFilepath = (0, shared_ini_file_loader_1.getSSOTokenFilepath)(id);
+ const tokenString = JSON.stringify(ssoToken, null, 2);
+ return writeFile(tokenFilepath, tokenString);
+};
+exports.writeSSOTokenToFile = writeSSOTokenToFile;
+
+
+/***/ }),
+
+/***/ 52562:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+
+
+/***/ }),
+
+/***/ 26913:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.HttpAuthLocation = void 0;
+var types_1 = __nccwpck_require__(55756);
+Object.defineProperty(exports, "HttpAuthLocation", ({ enumerable: true, get: function () { return types_1.HttpAuthLocation; } }));
+
+
+/***/ }),
+
+/***/ 14994:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+
+
+/***/ }),
+
+/***/ 65861:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+
+
+/***/ }),
+
+/***/ 76527:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+
+
+/***/ }),
+
+/***/ 48470:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+
+
+/***/ }),
+
+/***/ 28045:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+
+
+/***/ }),
+
+/***/ 67736:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+
+
+/***/ }),
+
+/***/ 13268:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+
+
+/***/ }),
+
+/***/ 90142:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.HostAddressType = void 0;
+var HostAddressType;
+(function (HostAddressType) {
+ HostAddressType["AAAA"] = "AAAA";
+ HostAddressType["A"] = "A";
+})(HostAddressType = exports.HostAddressType || (exports.HostAddressType = {}));
+
+
+/***/ }),
+
+/***/ 62338:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+
+
+/***/ }),
+
+/***/ 99385:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.EndpointURLScheme = void 0;
+var types_1 = __nccwpck_require__(55756);
+Object.defineProperty(exports, "EndpointURLScheme", ({ enumerable: true, get: function () { return types_1.EndpointURLScheme; } }));
+
+
+/***/ }),
+
+/***/ 37521:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+
+
+/***/ }),
+
+/***/ 76244:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+
+
+/***/ }),
+
+/***/ 61393:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+
+
+/***/ }),
+
+/***/ 51821:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+
+
+/***/ }),
+
+/***/ 92635:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+
+
+/***/ }),
+
+/***/ 71301:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+
+
+/***/ }),
+
+/***/ 21268:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+
+
+/***/ }),
+
+/***/ 7192:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+
+
+/***/ }),
+
+/***/ 10640:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+const tslib_1 = __nccwpck_require__(4351);
+tslib_1.__exportStar(__nccwpck_require__(51821), exports);
+tslib_1.__exportStar(__nccwpck_require__(92635), exports);
+tslib_1.__exportStar(__nccwpck_require__(71301), exports);
+tslib_1.__exportStar(__nccwpck_require__(21268), exports);
+tslib_1.__exportStar(__nccwpck_require__(7192), exports);
+
+
+/***/ }),
+
+/***/ 89029:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+const tslib_1 = __nccwpck_require__(4351);
+tslib_1.__exportStar(__nccwpck_require__(52562), exports);
+tslib_1.__exportStar(__nccwpck_require__(26913), exports);
+tslib_1.__exportStar(__nccwpck_require__(14994), exports);
+tslib_1.__exportStar(__nccwpck_require__(65861), exports);
+tslib_1.__exportStar(__nccwpck_require__(76527), exports);
+tslib_1.__exportStar(__nccwpck_require__(48470), exports);
+tslib_1.__exportStar(__nccwpck_require__(28045), exports);
+tslib_1.__exportStar(__nccwpck_require__(67736), exports);
+tslib_1.__exportStar(__nccwpck_require__(13268), exports);
+tslib_1.__exportStar(__nccwpck_require__(90142), exports);
+tslib_1.__exportStar(__nccwpck_require__(62338), exports);
+tslib_1.__exportStar(__nccwpck_require__(99385), exports);
+tslib_1.__exportStar(__nccwpck_require__(37521), exports);
+tslib_1.__exportStar(__nccwpck_require__(76244), exports);
+tslib_1.__exportStar(__nccwpck_require__(61393), exports);
+tslib_1.__exportStar(__nccwpck_require__(10640), exports);
+tslib_1.__exportStar(__nccwpck_require__(89910), exports);
+tslib_1.__exportStar(__nccwpck_require__(36678), exports);
+tslib_1.__exportStar(__nccwpck_require__(39931), exports);
+tslib_1.__exportStar(__nccwpck_require__(42620), exports);
+tslib_1.__exportStar(__nccwpck_require__(89062), exports);
+tslib_1.__exportStar(__nccwpck_require__(89546), exports);
+tslib_1.__exportStar(__nccwpck_require__(80316), exports);
+tslib_1.__exportStar(__nccwpck_require__(57835), exports);
+tslib_1.__exportStar(__nccwpck_require__(91678), exports);
+tslib_1.__exportStar(__nccwpck_require__(93818), exports);
+tslib_1.__exportStar(__nccwpck_require__(51991), exports);
+tslib_1.__exportStar(__nccwpck_require__(24296), exports);
+tslib_1.__exportStar(__nccwpck_require__(59416), exports);
+tslib_1.__exportStar(__nccwpck_require__(92772), exports);
+tslib_1.__exportStar(__nccwpck_require__(20134), exports);
+tslib_1.__exportStar(__nccwpck_require__(34465), exports);
+
+
+/***/ }),
+
+/***/ 89910:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+
+
+/***/ }),
+
+/***/ 36678:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+
+
+/***/ }),
+
+/***/ 39931:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+
+
+/***/ }),
+
+/***/ 42620:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+
+
+/***/ }),
+
+/***/ 89062:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+
+
+/***/ }),
+
+/***/ 89546:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+
+
+/***/ }),
+
+/***/ 80316:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+
+
+/***/ }),
+
+/***/ 57835:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+
+
+/***/ }),
+
+/***/ 91678:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+
+
+/***/ }),
+
+/***/ 93818:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+
+
+/***/ }),
+
+/***/ 51991:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+
+
+/***/ }),
+
+/***/ 24296:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+
+
+/***/ }),
+
+/***/ 59416:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.RequestHandlerProtocol = void 0;
+var types_1 = __nccwpck_require__(55756);
+Object.defineProperty(exports, "RequestHandlerProtocol", ({ enumerable: true, get: function () { return types_1.RequestHandlerProtocol; } }));
+
+
+/***/ }),
+
+/***/ 92772:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+
+
+/***/ }),
+
+/***/ 20134:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+
+
+/***/ }),
+
+/***/ 34465:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+
+
+/***/ }),
+
+/***/ 81809:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.debugId = void 0;
+exports.debugId = "endpoints";
+
+
+/***/ }),
+
+/***/ 27617:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+const tslib_1 = __nccwpck_require__(4351);
+tslib_1.__exportStar(__nccwpck_require__(81809), exports);
+tslib_1.__exportStar(__nccwpck_require__(46833), exports);
+
+
+/***/ }),
+
+/***/ 46833:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.toDebugString = void 0;
+function toDebugString(input) {
+ if (typeof input !== "object" || input == null) {
+ return input;
+ }
+ if ("ref" in input) {
+ return `$${toDebugString(input.ref)}`;
+ }
+ if ("fn" in input) {
+ return `${input.fn}(${(input.argv || []).map(toDebugString).join(", ")})`;
+ }
+ return JSON.stringify(input, null, 2);
+}
+exports.toDebugString = toDebugString;
+
+
+/***/ }),
+
+/***/ 13350:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+const tslib_1 = __nccwpck_require__(4351);
+tslib_1.__exportStar(__nccwpck_require__(37482), exports);
+tslib_1.__exportStar(__nccwpck_require__(92830), exports);
+tslib_1.__exportStar(__nccwpck_require__(36563), exports);
+tslib_1.__exportStar(__nccwpck_require__(57433), exports);
+
+
+/***/ }),
+
+/***/ 46835:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+const tslib_1 = __nccwpck_require__(4351);
+tslib_1.__exportStar(__nccwpck_require__(48079), exports);
+tslib_1.__exportStar(__nccwpck_require__(34711), exports);
+tslib_1.__exportStar(__nccwpck_require__(37482), exports);
+
+
+/***/ }),
+
+/***/ 48079:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.isVirtualHostableS3Bucket = void 0;
+const isIpAddress_1 = __nccwpck_require__(92830);
+const isValidHostLabel_1 = __nccwpck_require__(57373);
+const isVirtualHostableS3Bucket = (value, allowSubDomains = false) => {
+ if (allowSubDomains) {
+ for (const label of value.split(".")) {
+ if (!(0, exports.isVirtualHostableS3Bucket)(label)) {
+ return false;
+ }
+ }
+ return true;
+ }
+ if (!(0, isValidHostLabel_1.isValidHostLabel)(value)) {
+ return false;
+ }
+ if (value.length < 3 || value.length > 63) {
+ return false;
+ }
+ if (value !== value.toLowerCase()) {
+ return false;
+ }
+ if ((0, isIpAddress_1.isIpAddress)(value)) {
+ return false;
+ }
+ return true;
+};
+exports.isVirtualHostableS3Bucket = isVirtualHostableS3Bucket;
+
+
+/***/ }),
+
+/***/ 34711:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.parseArn = void 0;
+const parseArn = (value) => {
+ const segments = value.split(":");
+ if (segments.length < 6)
+ return null;
+ const [arn, partition, service, region, accountId, ...resourceId] = segments;
+ if (arn !== "arn" || partition === "" || service === "" || resourceId[0] === "")
+ return null;
+ return {
+ partition,
+ service,
+ region,
+ accountId,
+ resourceId: resourceId[0].includes("/") ? resourceId[0].split("/") : resourceId,
+ };
+};
+exports.parseArn = parseArn;
+
+
+/***/ }),
+
+/***/ 37482:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.getUserAgentPrefix = exports.useDefaultPartitionInfo = exports.setPartitionInfo = exports.partition = void 0;
+const tslib_1 = __nccwpck_require__(4351);
+const partitions_json_1 = tslib_1.__importDefault(__nccwpck_require__(95367));
+let selectedPartitionsInfo = partitions_json_1.default;
+let selectedUserAgentPrefix = "";
+const partition = (value) => {
+ const { partitions } = selectedPartitionsInfo;
+ for (const partition of partitions) {
+ const { regions, outputs } = partition;
+ for (const [region, regionData] of Object.entries(regions)) {
+ if (region === value) {
+ return {
+ ...outputs,
+ ...regionData,
+ };
+ }
+ }
+ }
+ for (const partition of partitions) {
+ const { regionRegex, outputs } = partition;
+ if (new RegExp(regionRegex).test(value)) {
+ return {
+ ...outputs,
+ };
+ }
+ }
+ const DEFAULT_PARTITION = partitions.find((partition) => partition.id === "aws");
+ if (!DEFAULT_PARTITION) {
+ throw new Error("Provided region was not found in the partition array or regex," +
+ " and default partition with id 'aws' doesn't exist.");
+ }
+ return {
+ ...DEFAULT_PARTITION.outputs,
+ };
+};
+exports.partition = partition;
+const setPartitionInfo = (partitionsInfo, userAgentPrefix = "") => {
+ selectedPartitionsInfo = partitionsInfo;
+ selectedUserAgentPrefix = userAgentPrefix;
+};
+exports.setPartitionInfo = setPartitionInfo;
+const useDefaultPartitionInfo = () => {
+ (0, exports.setPartitionInfo)(partitions_json_1.default, "");
+};
+exports.useDefaultPartitionInfo = useDefaultPartitionInfo;
+const getUserAgentPrefix = () => selectedUserAgentPrefix;
+exports.getUserAgentPrefix = getUserAgentPrefix;
+
+
+/***/ }),
+
+/***/ 55370:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.booleanEquals = void 0;
+const booleanEquals = (value1, value2) => value1 === value2;
+exports.booleanEquals = booleanEquals;
+
+
+/***/ }),
+
+/***/ 20767:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.getAttr = void 0;
+const types_1 = __nccwpck_require__(57433);
+const getAttrPathList_1 = __nccwpck_require__(81844);
+const getAttr = (value, path) => (0, getAttrPathList_1.getAttrPathList)(path).reduce((acc, index) => {
+ if (typeof acc !== "object") {
+ throw new types_1.EndpointError(`Index '${index}' in '${path}' not found in '${JSON.stringify(value)}'`);
+ }
+ else if (Array.isArray(acc)) {
+ return acc[parseInt(index)];
+ }
+ return acc[index];
+}, value);
+exports.getAttr = getAttr;
+
+
+/***/ }),
+
+/***/ 81844:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.getAttrPathList = void 0;
+const types_1 = __nccwpck_require__(57433);
+const getAttrPathList = (path) => {
+ const parts = path.split(".");
+ const pathList = [];
+ for (const part of parts) {
+ const squareBracketIndex = part.indexOf("[");
+ if (squareBracketIndex !== -1) {
+ if (part.indexOf("]") !== part.length - 1) {
+ throw new types_1.EndpointError(`Path: '${path}' does not end with ']'`);
+ }
+ const arrayIndex = part.slice(squareBracketIndex + 1, -1);
+ if (Number.isNaN(parseInt(arrayIndex))) {
+ throw new types_1.EndpointError(`Invalid array index: '${arrayIndex}' in path: '${path}'`);
+ }
+ if (squareBracketIndex !== 0) {
+ pathList.push(part.slice(0, squareBracketIndex));
+ }
+ pathList.push(arrayIndex);
+ }
+ else {
+ pathList.push(part);
+ }
+ }
+ return pathList;
+};
+exports.getAttrPathList = getAttrPathList;
+
+
+/***/ }),
+
+/***/ 83188:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.aws = void 0;
+const tslib_1 = __nccwpck_require__(4351);
+exports.aws = tslib_1.__importStar(__nccwpck_require__(46835));
+tslib_1.__exportStar(__nccwpck_require__(55370), exports);
+tslib_1.__exportStar(__nccwpck_require__(20767), exports);
+tslib_1.__exportStar(__nccwpck_require__(78816), exports);
+tslib_1.__exportStar(__nccwpck_require__(57373), exports);
+tslib_1.__exportStar(__nccwpck_require__(29692), exports);
+tslib_1.__exportStar(__nccwpck_require__(22780), exports);
+tslib_1.__exportStar(__nccwpck_require__(55182), exports);
+tslib_1.__exportStar(__nccwpck_require__(48305), exports);
+tslib_1.__exportStar(__nccwpck_require__(6535), exports);
+
+
+/***/ }),
+
+/***/ 92830:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.isIpAddress = void 0;
+const IP_V4_REGEX = new RegExp(`^(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}$`);
+const isIpAddress = (value) => IP_V4_REGEX.test(value) || (value.startsWith("[") && value.endsWith("]"));
+exports.isIpAddress = isIpAddress;
+
+
+/***/ }),
+
+/***/ 78816:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.isSet = void 0;
+const isSet = (value) => value != null;
+exports.isSet = isSet;
+
+
+/***/ }),
+
+/***/ 57373:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.isValidHostLabel = void 0;
+const VALID_HOST_LABEL_REGEX = new RegExp(`^(?!.*-$)(?!-)[a-zA-Z0-9-]{1,63}$`);
+const isValidHostLabel = (value, allowSubDomains = false) => {
+ if (!allowSubDomains) {
+ return VALID_HOST_LABEL_REGEX.test(value);
+ }
+ const labels = value.split(".");
+ for (const label of labels) {
+ if (!(0, exports.isValidHostLabel)(label)) {
+ return false;
+ }
+ }
+ return true;
+};
+exports.isValidHostLabel = isValidHostLabel;
+
+
+/***/ }),
+
+/***/ 29692:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.not = void 0;
+const not = (value) => !value;
+exports.not = not;
+
+
+/***/ }),
+
+/***/ 22780:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.parseURL = void 0;
+const types_1 = __nccwpck_require__(89029);
+const isIpAddress_1 = __nccwpck_require__(92830);
+const DEFAULT_PORTS = {
+ [types_1.EndpointURLScheme.HTTP]: 80,
+ [types_1.EndpointURLScheme.HTTPS]: 443,
+};
+const parseURL = (value) => {
+ const whatwgURL = (() => {
+ try {
+ if (value instanceof URL) {
+ return value;
+ }
+ if (typeof value === "object" && "hostname" in value) {
+ const { hostname, port, protocol = "", path = "", query = {} } = value;
+ const url = new URL(`${protocol}//${hostname}${port ? `:${port}` : ""}${path}`);
+ url.search = Object.entries(query)
+ .map(([k, v]) => `${k}=${v}`)
+ .join("&");
+ return url;
+ }
+ return new URL(value);
+ }
+ catch (error) {
+ return null;
+ }
+ })();
+ if (!whatwgURL) {
+ console.error(`Unable to parse ${JSON.stringify(value)} as a whatwg URL.`);
+ return null;
+ }
+ const urlString = whatwgURL.href;
+ const { host, hostname, pathname, protocol, search } = whatwgURL;
+ if (search) {
+ return null;
+ }
+ const scheme = protocol.slice(0, -1);
+ if (!Object.values(types_1.EndpointURLScheme).includes(scheme)) {
+ return null;
+ }
+ const isIp = (0, isIpAddress_1.isIpAddress)(hostname);
+ const inputContainsDefaultPort = urlString.includes(`${host}:${DEFAULT_PORTS[scheme]}`) ||
+ (typeof value === "string" && value.includes(`${host}:${DEFAULT_PORTS[scheme]}`));
+ const authority = `${host}${inputContainsDefaultPort ? `:${DEFAULT_PORTS[scheme]}` : ``}`;
+ return {
+ scheme,
+ authority,
+ path: pathname,
+ normalizedPath: pathname.endsWith("/") ? pathname : `${pathname}/`,
+ isIp,
+ };
+};
+exports.parseURL = parseURL;
+
+
+/***/ }),
+
+/***/ 55182:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.stringEquals = void 0;
+const stringEquals = (value1, value2) => value1 === value2;
+exports.stringEquals = stringEquals;
+
+
+/***/ }),
+
+/***/ 48305:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.substring = void 0;
+const substring = (input, start, stop, reverse) => {
+ if (start >= stop || input.length < stop) {
+ return null;
+ }
+ if (!reverse) {
+ return input.substring(start, stop);
+ }
+ return input.substring(input.length - stop, input.length - start);
+};
+exports.substring = substring;
+
+
+/***/ }),
+
+/***/ 6535:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.uriEncode = void 0;
+const uriEncode = (value) => encodeURIComponent(value).replace(/[!*'()]/g, (c) => `%${c.charCodeAt(0).toString(16).toUpperCase()}`);
+exports.uriEncode = uriEncode;
+
+
+/***/ }),
+
+/***/ 36563:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.resolveEndpoint = void 0;
+const debug_1 = __nccwpck_require__(27617);
+const types_1 = __nccwpck_require__(57433);
+const utils_1 = __nccwpck_require__(81114);
+const resolveEndpoint = (ruleSetObject, options) => {
+ var _a, _b, _c, _d, _e, _f;
+ const { endpointParams, logger } = options;
+ const { parameters, rules } = ruleSetObject;
+ (_b = (_a = options.logger) === null || _a === void 0 ? void 0 : _a.debug) === null || _b === void 0 ? void 0 : _b.call(_a, `${debug_1.debugId} Initial EndpointParams: ${(0, debug_1.toDebugString)(endpointParams)}`);
+ const paramsWithDefault = Object.entries(parameters)
+ .filter(([, v]) => v.default != null)
+ .map(([k, v]) => [k, v.default]);
+ if (paramsWithDefault.length > 0) {
+ for (const [paramKey, paramDefaultValue] of paramsWithDefault) {
+ endpointParams[paramKey] = (_c = endpointParams[paramKey]) !== null && _c !== void 0 ? _c : paramDefaultValue;
+ }
+ }
+ const requiredParams = Object.entries(parameters)
+ .filter(([, v]) => v.required)
+ .map(([k]) => k);
+ for (const requiredParam of requiredParams) {
+ if (endpointParams[requiredParam] == null) {
+ throw new types_1.EndpointError(`Missing required parameter: '${requiredParam}'`);
+ }
+ }
+ const endpoint = (0, utils_1.evaluateRules)(rules, { endpointParams, logger, referenceRecord: {} });
+ if ((_d = options.endpointParams) === null || _d === void 0 ? void 0 : _d.Endpoint) {
+ try {
+ const givenEndpoint = new URL(options.endpointParams.Endpoint);
+ const { protocol, port } = givenEndpoint;
+ endpoint.url.protocol = protocol;
+ endpoint.url.port = port;
+ }
+ catch (e) {
+ }
+ }
+ (_f = (_e = options.logger) === null || _e === void 0 ? void 0 : _e.debug) === null || _f === void 0 ? void 0 : _f.call(_e, `${debug_1.debugId} Resolved endpoint: ${(0, debug_1.toDebugString)(endpoint)}`);
+ return endpoint;
+};
+exports.resolveEndpoint = resolveEndpoint;
+
+
+/***/ }),
+
+/***/ 82605:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.EndpointError = void 0;
+class EndpointError extends Error {
+ constructor(message) {
+ super(message);
+ this.name = "EndpointError";
+ }
+}
+exports.EndpointError = EndpointError;
+
+
+/***/ }),
+
+/***/ 21261:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+
+
+/***/ }),
+
+/***/ 20312:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+
+
+/***/ }),
+
+/***/ 56083:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+
+
+/***/ }),
+
+/***/ 21767:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+
+
+/***/ }),
+
+/***/ 57433:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+const tslib_1 = __nccwpck_require__(4351);
+tslib_1.__exportStar(__nccwpck_require__(82605), exports);
+tslib_1.__exportStar(__nccwpck_require__(21261), exports);
+tslib_1.__exportStar(__nccwpck_require__(20312), exports);
+tslib_1.__exportStar(__nccwpck_require__(56083), exports);
+tslib_1.__exportStar(__nccwpck_require__(21767), exports);
+tslib_1.__exportStar(__nccwpck_require__(41811), exports);
+
+
+/***/ }),
+
+/***/ 41811:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+
+
+/***/ }),
+
+/***/ 65075:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.callFunction = void 0;
+const tslib_1 = __nccwpck_require__(4351);
+const lib = tslib_1.__importStar(__nccwpck_require__(83188));
+const evaluateExpression_1 = __nccwpck_require__(82980);
+const callFunction = ({ fn, argv }, options) => {
+ const evaluatedArgs = argv.map((arg) => ["boolean", "number"].includes(typeof arg) ? arg : (0, evaluateExpression_1.evaluateExpression)(arg, "arg", options));
+ return fn.split(".").reduce((acc, key) => acc[key], lib)(...evaluatedArgs);
+};
+exports.callFunction = callFunction;
+
+
+/***/ }),
+
+/***/ 77851:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.evaluateCondition = void 0;
+const debug_1 = __nccwpck_require__(27617);
+const types_1 = __nccwpck_require__(57433);
+const callFunction_1 = __nccwpck_require__(65075);
+const evaluateCondition = ({ assign, ...fnArgs }, options) => {
+ var _a, _b;
+ if (assign && assign in options.referenceRecord) {
+ throw new types_1.EndpointError(`'${assign}' is already defined in Reference Record.`);
+ }
+ const value = (0, callFunction_1.callFunction)(fnArgs, options);
+ (_b = (_a = options.logger) === null || _a === void 0 ? void 0 : _a.debug) === null || _b === void 0 ? void 0 : _b.call(_a, debug_1.debugId, `evaluateCondition: ${(0, debug_1.toDebugString)(fnArgs)} = ${(0, debug_1.toDebugString)(value)}`);
+ return {
+ result: value === "" ? true : !!value,
+ ...(assign != null && { toAssign: { name: assign, value } }),
+ };
+};
+exports.evaluateCondition = evaluateCondition;
+
+
+/***/ }),
+
+/***/ 59169:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.evaluateConditions = void 0;
+const debug_1 = __nccwpck_require__(27617);
+const evaluateCondition_1 = __nccwpck_require__(77851);
+const evaluateConditions = (conditions = [], options) => {
+ var _a, _b;
+ const conditionsReferenceRecord = {};
+ for (const condition of conditions) {
+ const { result, toAssign } = (0, evaluateCondition_1.evaluateCondition)(condition, {
+ ...options,
+ referenceRecord: {
+ ...options.referenceRecord,
+ ...conditionsReferenceRecord,
+ },
+ });
+ if (!result) {
+ return { result };
+ }
+ if (toAssign) {
+ conditionsReferenceRecord[toAssign.name] = toAssign.value;
+ (_b = (_a = options.logger) === null || _a === void 0 ? void 0 : _a.debug) === null || _b === void 0 ? void 0 : _b.call(_a, debug_1.debugId, `assign: ${toAssign.name} := ${(0, debug_1.toDebugString)(toAssign.value)}`);
+ }
+ }
+ return { result: true, referenceRecord: conditionsReferenceRecord };
+};
+exports.evaluateConditions = evaluateConditions;
+
+
+/***/ }),
+
+/***/ 35324:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.evaluateEndpointRule = void 0;
+const debug_1 = __nccwpck_require__(27617);
+const evaluateConditions_1 = __nccwpck_require__(59169);
+const getEndpointHeaders_1 = __nccwpck_require__(88268);
+const getEndpointProperties_1 = __nccwpck_require__(34973);
+const getEndpointUrl_1 = __nccwpck_require__(23602);
+const evaluateEndpointRule = (endpointRule, options) => {
+ var _a, _b;
+ const { conditions, endpoint } = endpointRule;
+ const { result, referenceRecord } = (0, evaluateConditions_1.evaluateConditions)(conditions, options);
+ if (!result) {
+ return;
+ }
+ const endpointRuleOptions = {
+ ...options,
+ referenceRecord: { ...options.referenceRecord, ...referenceRecord },
+ };
+ const { url, properties, headers } = endpoint;
+ (_b = (_a = options.logger) === null || _a === void 0 ? void 0 : _a.debug) === null || _b === void 0 ? void 0 : _b.call(_a, debug_1.debugId, `Resolving endpoint from template: ${(0, debug_1.toDebugString)(endpoint)}`);
+ return {
+ ...(headers != undefined && {
+ headers: (0, getEndpointHeaders_1.getEndpointHeaders)(headers, endpointRuleOptions),
+ }),
+ ...(properties != undefined && {
+ properties: (0, getEndpointProperties_1.getEndpointProperties)(properties, endpointRuleOptions),
+ }),
+ url: (0, getEndpointUrl_1.getEndpointUrl)(url, endpointRuleOptions),
+ };
+};
+exports.evaluateEndpointRule = evaluateEndpointRule;
+
+
+/***/ }),
+
+/***/ 12110:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.evaluateErrorRule = void 0;
+const types_1 = __nccwpck_require__(57433);
+const evaluateConditions_1 = __nccwpck_require__(59169);
+const evaluateExpression_1 = __nccwpck_require__(82980);
+const evaluateErrorRule = (errorRule, options) => {
+ const { conditions, error } = errorRule;
+ const { result, referenceRecord } = (0, evaluateConditions_1.evaluateConditions)(conditions, options);
+ if (!result) {
+ return;
+ }
+ throw new types_1.EndpointError((0, evaluateExpression_1.evaluateExpression)(error, "Error", {
+ ...options,
+ referenceRecord: { ...options.referenceRecord, ...referenceRecord },
+ }));
+};
+exports.evaluateErrorRule = evaluateErrorRule;
+
+
+/***/ }),
+
+/***/ 82980:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.evaluateExpression = void 0;
+const types_1 = __nccwpck_require__(57433);
+const callFunction_1 = __nccwpck_require__(65075);
+const evaluateTemplate_1 = __nccwpck_require__(57535);
+const getReferenceValue_1 = __nccwpck_require__(68810);
+const evaluateExpression = (obj, keyName, options) => {
+ if (typeof obj === "string") {
+ return (0, evaluateTemplate_1.evaluateTemplate)(obj, options);
+ }
+ else if (obj["fn"]) {
+ return (0, callFunction_1.callFunction)(obj, options);
+ }
+ else if (obj["ref"]) {
+ return (0, getReferenceValue_1.getReferenceValue)(obj, options);
+ }
+ throw new types_1.EndpointError(`'${keyName}': ${String(obj)} is not a string, function or reference.`);
+};
+exports.evaluateExpression = evaluateExpression;
+
+
+/***/ }),
+
+/***/ 59738:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.evaluateRules = void 0;
+const types_1 = __nccwpck_require__(57433);
+const evaluateEndpointRule_1 = __nccwpck_require__(35324);
+const evaluateErrorRule_1 = __nccwpck_require__(12110);
+const evaluateTreeRule_1 = __nccwpck_require__(26587);
+const evaluateRules = (rules, options) => {
+ for (const rule of rules) {
+ if (rule.type === "endpoint") {
+ const endpointOrUndefined = (0, evaluateEndpointRule_1.evaluateEndpointRule)(rule, options);
+ if (endpointOrUndefined) {
+ return endpointOrUndefined;
+ }
+ }
+ else if (rule.type === "error") {
+ (0, evaluateErrorRule_1.evaluateErrorRule)(rule, options);
+ }
+ else if (rule.type === "tree") {
+ const endpointOrUndefined = (0, evaluateTreeRule_1.evaluateTreeRule)(rule, options);
+ if (endpointOrUndefined) {
+ return endpointOrUndefined;
+ }
+ }
+ else {
+ throw new types_1.EndpointError(`Unknown endpoint rule: ${rule}`);
+ }
+ }
+ throw new types_1.EndpointError(`Rules evaluation failed`);
+};
+exports.evaluateRules = evaluateRules;
+
+
+/***/ }),
+
+/***/ 57535:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.evaluateTemplate = void 0;
+const lib_1 = __nccwpck_require__(83188);
+const evaluateTemplate = (template, options) => {
+ const evaluatedTemplateArr = [];
+ const templateContext = {
+ ...options.endpointParams,
+ ...options.referenceRecord,
+ };
+ let currentIndex = 0;
+ while (currentIndex < template.length) {
+ const openingBraceIndex = template.indexOf("{", currentIndex);
+ if (openingBraceIndex === -1) {
+ evaluatedTemplateArr.push(template.slice(currentIndex));
+ break;
+ }
+ evaluatedTemplateArr.push(template.slice(currentIndex, openingBraceIndex));
+ const closingBraceIndex = template.indexOf("}", openingBraceIndex);
+ if (closingBraceIndex === -1) {
+ evaluatedTemplateArr.push(template.slice(openingBraceIndex));
+ break;
+ }
+ if (template[openingBraceIndex + 1] === "{" && template[closingBraceIndex + 1] === "}") {
+ evaluatedTemplateArr.push(template.slice(openingBraceIndex + 1, closingBraceIndex));
+ currentIndex = closingBraceIndex + 2;
+ }
+ const parameterName = template.substring(openingBraceIndex + 1, closingBraceIndex);
+ if (parameterName.includes("#")) {
+ const [refName, attrName] = parameterName.split("#");
+ evaluatedTemplateArr.push((0, lib_1.getAttr)(templateContext[refName], attrName));
+ }
+ else {
+ evaluatedTemplateArr.push(templateContext[parameterName]);
+ }
+ currentIndex = closingBraceIndex + 1;
+ }
+ return evaluatedTemplateArr.join("");
+};
+exports.evaluateTemplate = evaluateTemplate;
+
+
+/***/ }),
+
+/***/ 26587:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.evaluateTreeRule = void 0;
+const evaluateConditions_1 = __nccwpck_require__(59169);
+const evaluateRules_1 = __nccwpck_require__(59738);
+const evaluateTreeRule = (treeRule, options) => {
+ const { conditions, rules } = treeRule;
+ const { result, referenceRecord } = (0, evaluateConditions_1.evaluateConditions)(conditions, options);
+ if (!result) {
+ return;
+ }
+ return (0, evaluateRules_1.evaluateRules)(rules, {
+ ...options,
+ referenceRecord: { ...options.referenceRecord, ...referenceRecord },
+ });
+};
+exports.evaluateTreeRule = evaluateTreeRule;
+
+
+/***/ }),
+
+/***/ 88268:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.getEndpointHeaders = void 0;
+const types_1 = __nccwpck_require__(57433);
+const evaluateExpression_1 = __nccwpck_require__(82980);
+const getEndpointHeaders = (headers, options) => Object.entries(headers).reduce((acc, [headerKey, headerVal]) => ({
+ ...acc,
+ [headerKey]: headerVal.map((headerValEntry) => {
+ const processedExpr = (0, evaluateExpression_1.evaluateExpression)(headerValEntry, "Header value entry", options);
+ if (typeof processedExpr !== "string") {
+ throw new types_1.EndpointError(`Header '${headerKey}' value '${processedExpr}' is not a string`);
+ }
+ return processedExpr;
+ }),
+}), {});
+exports.getEndpointHeaders = getEndpointHeaders;
+
+
+/***/ }),
+
+/***/ 34973:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.getEndpointProperties = void 0;
+const getEndpointProperty_1 = __nccwpck_require__(42978);
+const getEndpointProperties = (properties, options) => Object.entries(properties).reduce((acc, [propertyKey, propertyVal]) => ({
+ ...acc,
+ [propertyKey]: (0, getEndpointProperty_1.getEndpointProperty)(propertyVal, options),
+}), {});
+exports.getEndpointProperties = getEndpointProperties;
+
+
+/***/ }),
+
+/***/ 42978:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.getEndpointProperty = void 0;
+const types_1 = __nccwpck_require__(57433);
+const evaluateTemplate_1 = __nccwpck_require__(57535);
+const getEndpointProperties_1 = __nccwpck_require__(34973);
+const getEndpointProperty = (property, options) => {
+ if (Array.isArray(property)) {
+ return property.map((propertyEntry) => (0, exports.getEndpointProperty)(propertyEntry, options));
+ }
+ switch (typeof property) {
+ case "string":
+ return (0, evaluateTemplate_1.evaluateTemplate)(property, options);
+ case "object":
+ if (property === null) {
+ throw new types_1.EndpointError(`Unexpected endpoint property: ${property}`);
+ }
+ return (0, getEndpointProperties_1.getEndpointProperties)(property, options);
+ case "boolean":
+ return property;
+ default:
+ throw new types_1.EndpointError(`Unexpected endpoint property type: ${typeof property}`);
+ }
+};
+exports.getEndpointProperty = getEndpointProperty;
+
+
+/***/ }),
+
+/***/ 23602:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.getEndpointUrl = void 0;
+const types_1 = __nccwpck_require__(57433);
+const evaluateExpression_1 = __nccwpck_require__(82980);
+const getEndpointUrl = (endpointUrl, options) => {
+ const expression = (0, evaluateExpression_1.evaluateExpression)(endpointUrl, "Endpoint URL", options);
+ if (typeof expression === "string") {
+ try {
+ return new URL(expression);
+ }
+ catch (error) {
+ console.error(`Failed to construct URL with ${expression}`, error);
+ throw error;
+ }
+ }
+ throw new types_1.EndpointError(`Endpoint URL must be a string, got ${typeof expression}`);
+};
+exports.getEndpointUrl = getEndpointUrl;
+
+
+/***/ }),
+
+/***/ 68810:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.getReferenceValue = void 0;
+const getReferenceValue = ({ ref }, options) => {
+ const referenceRecord = {
+ ...options.endpointParams,
+ ...options.referenceRecord,
+ };
+ return referenceRecord[ref];
+};
+exports.getReferenceValue = getReferenceValue;
+
+
+/***/ }),
+
+/***/ 81114:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+const tslib_1 = __nccwpck_require__(4351);
+tslib_1.__exportStar(__nccwpck_require__(59738), exports);
+
+
+/***/ }),
+
+/***/ 5865:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.crtAvailability = void 0;
+exports.crtAvailability = {
+ isCrtAvailable: false,
+};
+
+
+/***/ }),
+
+/***/ 98095:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.defaultUserAgent = exports.UA_APP_ID_INI_NAME = exports.UA_APP_ID_ENV_NAME = exports.crtAvailability = void 0;
+const node_config_provider_1 = __nccwpck_require__(33461);
+const os_1 = __nccwpck_require__(22037);
+const process_1 = __nccwpck_require__(77282);
+const is_crt_available_1 = __nccwpck_require__(68390);
+var crt_availability_1 = __nccwpck_require__(5865);
+Object.defineProperty(exports, "crtAvailability", ({ enumerable: true, get: function () { return crt_availability_1.crtAvailability; } }));
+exports.UA_APP_ID_ENV_NAME = "AWS_SDK_UA_APP_ID";
+exports.UA_APP_ID_INI_NAME = "sdk-ua-app-id";
+const defaultUserAgent = ({ serviceId, clientVersion }) => {
+ const sections = [
+ ["aws-sdk-js", clientVersion],
+ ["ua", "2.0"],
+ [`os/${(0, os_1.platform)()}`, (0, os_1.release)()],
+ ["lang/js"],
+ ["md/nodejs", `${process_1.versions.node}`],
+ ];
+ const crtAvailable = (0, is_crt_available_1.isCrtAvailable)();
+ if (crtAvailable) {
+ sections.push(crtAvailable);
+ }
+ if (serviceId) {
+ sections.push([`api/${serviceId}`, clientVersion]);
+ }
+ if (process_1.env.AWS_EXECUTION_ENV) {
+ sections.push([`exec-env/${process_1.env.AWS_EXECUTION_ENV}`]);
+ }
+ const appIdPromise = (0, node_config_provider_1.loadConfig)({
+ environmentVariableSelector: (env) => env[exports.UA_APP_ID_ENV_NAME],
+ configFileSelector: (profile) => profile[exports.UA_APP_ID_INI_NAME],
+ default: undefined,
+ })();
+ let resolvedUserAgent = undefined;
+ return async () => {
+ if (!resolvedUserAgent) {
+ const appId = await appIdPromise;
+ resolvedUserAgent = appId ? [...sections, [`app/${appId}`]] : [...sections];
+ }
+ return resolvedUserAgent;
+ };
+};
+exports.defaultUserAgent = defaultUserAgent;
+
+
+/***/ }),
+
+/***/ 68390:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.isCrtAvailable = void 0;
+const crt_availability_1 = __nccwpck_require__(5865);
+const isCrtAvailable = () => {
+ if (crt_availability_1.crtAvailability.isCrtAvailable) {
+ return ["md/crt-avail"];
+ }
+ return null;
+};
+exports.isCrtAvailable = isCrtAvailable;
+
+
+/***/ }),
+
+/***/ 28172:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.toUtf8 = exports.fromUtf8 = void 0;
+const pureJs_1 = __nccwpck_require__(21590);
+const whatwgEncodingApi_1 = __nccwpck_require__(89215);
+const fromUtf8 = (input) => typeof TextEncoder === "function" ? (0, whatwgEncodingApi_1.fromUtf8)(input) : (0, pureJs_1.fromUtf8)(input);
+exports.fromUtf8 = fromUtf8;
+const toUtf8 = (input) => typeof TextDecoder === "function" ? (0, whatwgEncodingApi_1.toUtf8)(input) : (0, pureJs_1.toUtf8)(input);
+exports.toUtf8 = toUtf8;
+
+
+/***/ }),
+
+/***/ 21590:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.toUtf8 = exports.fromUtf8 = void 0;
+const fromUtf8 = (input) => {
+ const bytes = [];
+ for (let i = 0, len = input.length; i < len; i++) {
+ const value = input.charCodeAt(i);
+ if (value < 0x80) {
+ bytes.push(value);
+ }
+ else if (value < 0x800) {
+ bytes.push((value >> 6) | 0b11000000, (value & 0b111111) | 0b10000000);
+ }
+ else if (i + 1 < input.length && (value & 0xfc00) === 0xd800 && (input.charCodeAt(i + 1) & 0xfc00) === 0xdc00) {
+ const surrogatePair = 0x10000 + ((value & 0b1111111111) << 10) + (input.charCodeAt(++i) & 0b1111111111);
+ bytes.push((surrogatePair >> 18) | 0b11110000, ((surrogatePair >> 12) & 0b111111) | 0b10000000, ((surrogatePair >> 6) & 0b111111) | 0b10000000, (surrogatePair & 0b111111) | 0b10000000);
+ }
+ else {
+ bytes.push((value >> 12) | 0b11100000, ((value >> 6) & 0b111111) | 0b10000000, (value & 0b111111) | 0b10000000);
+ }
+ }
+ return Uint8Array.from(bytes);
+};
+exports.fromUtf8 = fromUtf8;
+const toUtf8 = (input) => {
+ let decoded = "";
+ for (let i = 0, len = input.length; i < len; i++) {
+ const byte = input[i];
+ if (byte < 0x80) {
+ decoded += String.fromCharCode(byte);
+ }
+ else if (0b11000000 <= byte && byte < 0b11100000) {
+ const nextByte = input[++i];
+ decoded += String.fromCharCode(((byte & 0b11111) << 6) | (nextByte & 0b111111));
+ }
+ else if (0b11110000 <= byte && byte < 0b101101101) {
+ const surrogatePair = [byte, input[++i], input[++i], input[++i]];
+ const encoded = "%" + surrogatePair.map((byteValue) => byteValue.toString(16)).join("%");
+ decoded += decodeURIComponent(encoded);
+ }
+ else {
+ decoded += String.fromCharCode(((byte & 0b1111) << 12) | ((input[++i] & 0b111111) << 6) | (input[++i] & 0b111111));
+ }
+ }
+ return decoded;
+};
+exports.toUtf8 = toUtf8;
+
+
+/***/ }),
+
+/***/ 89215:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.toUtf8 = exports.fromUtf8 = void 0;
+function fromUtf8(input) {
+ return new TextEncoder().encode(input);
+}
+exports.fromUtf8 = fromUtf8;
+function toUtf8(input) {
+ return new TextDecoder("utf-8").decode(input);
+}
+exports.toUtf8 = toUtf8;
+
+
+/***/ }),
+
+/***/ 2856:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+"use strict";
+
+
+const WritableStream = (__nccwpck_require__(84492).Writable)
+const inherits = (__nccwpck_require__(47261).inherits)
+
+const StreamSearch = __nccwpck_require__(88534)
+
+const PartStream = __nccwpck_require__(38710)
+const HeaderParser = __nccwpck_require__(90333)
+
+const DASH = 45
+const B_ONEDASH = Buffer.from('-')
+const B_CRLF = Buffer.from('\r\n')
+const EMPTY_FN = function () {}
+
+function Dicer (cfg) {
+ if (!(this instanceof Dicer)) { return new Dicer(cfg) }
+ WritableStream.call(this, cfg)
+
+ if (!cfg || (!cfg.headerFirst && typeof cfg.boundary !== 'string')) { throw new TypeError('Boundary required') }
+
+ if (typeof cfg.boundary === 'string') { this.setBoundary(cfg.boundary) } else { this._bparser = undefined }
+
+ this._headerFirst = cfg.headerFirst
+
+ this._dashes = 0
+ this._parts = 0
+ this._finished = false
+ this._realFinish = false
+ this._isPreamble = true
+ this._justMatched = false
+ this._firstWrite = true
+ this._inHeader = true
+ this._part = undefined
+ this._cb = undefined
+ this._ignoreData = false
+ this._partOpts = { highWaterMark: cfg.partHwm }
+ this._pause = false
+
+ const self = this
+ this._hparser = new HeaderParser(cfg)
+ this._hparser.on('header', function (header) {
+ self._inHeader = false
+ self._part.emit('header', header)
+ })
+}
+inherits(Dicer, WritableStream)
+
+Dicer.prototype.emit = function (ev) {
+ if (ev === 'finish' && !this._realFinish) {
+ if (!this._finished) {
+ const self = this
+ process.nextTick(function () {
+ self.emit('error', new Error('Unexpected end of multipart data'))
+ if (self._part && !self._ignoreData) {
+ const type = (self._isPreamble ? 'Preamble' : 'Part')
+ self._part.emit('error', new Error(type + ' terminated early due to unexpected end of multipart data'))
+ self._part.push(null)
+ process.nextTick(function () {
+ self._realFinish = true
+ self.emit('finish')
+ self._realFinish = false
+ })
+ return
+ }
+ self._realFinish = true
+ self.emit('finish')
+ self._realFinish = false
+ })
+ }
+ } else { WritableStream.prototype.emit.apply(this, arguments) }
+}
+
+Dicer.prototype._write = function (data, encoding, cb) {
+ // ignore unexpected data (e.g. extra trailer data after finished)
+ if (!this._hparser && !this._bparser) { return cb() }
+
+ if (this._headerFirst && this._isPreamble) {
+ if (!this._part) {
+ this._part = new PartStream(this._partOpts)
+ if (this._events.preamble) { this.emit('preamble', this._part) } else { this._ignore() }
+ }
+ const r = this._hparser.push(data)
+ if (!this._inHeader && r !== undefined && r < data.length) { data = data.slice(r) } else { return cb() }
+ }
+
+ // allows for "easier" testing
+ if (this._firstWrite) {
+ this._bparser.push(B_CRLF)
+ this._firstWrite = false
+ }
+
+ this._bparser.push(data)
+
+ if (this._pause) { this._cb = cb } else { cb() }
+}
+
+Dicer.prototype.reset = function () {
+ this._part = undefined
+ this._bparser = undefined
+ this._hparser = undefined
+}
+
+Dicer.prototype.setBoundary = function (boundary) {
+ const self = this
+ this._bparser = new StreamSearch('\r\n--' + boundary)
+ this._bparser.on('info', function (isMatch, data, start, end) {
+ self._oninfo(isMatch, data, start, end)
+ })
+}
+
+Dicer.prototype._ignore = function () {
+ if (this._part && !this._ignoreData) {
+ this._ignoreData = true
+ this._part.on('error', EMPTY_FN)
+ // we must perform some kind of read on the stream even though we are
+ // ignoring the data, otherwise node's Readable stream will not emit 'end'
+ // after pushing null to the stream
+ this._part.resume()
+ }
+}
+
+Dicer.prototype._oninfo = function (isMatch, data, start, end) {
+ let buf; const self = this; let i = 0; let r; let shouldWriteMore = true
+
+ if (!this._part && this._justMatched && data) {
+ while (this._dashes < 2 && (start + i) < end) {
+ if (data[start + i] === DASH) {
+ ++i
+ ++this._dashes
+ } else {
+ if (this._dashes) { buf = B_ONEDASH }
+ this._dashes = 0
+ break
+ }
+ }
+ if (this._dashes === 2) {
+ if ((start + i) < end && this._events.trailer) { this.emit('trailer', data.slice(start + i, end)) }
+ this.reset()
+ this._finished = true
+ // no more parts will be added
+ if (self._parts === 0) {
+ self._realFinish = true
+ self.emit('finish')
+ self._realFinish = false
+ }
+ }
+ if (this._dashes) { return }
+ }
+ if (this._justMatched) { this._justMatched = false }
+ if (!this._part) {
+ this._part = new PartStream(this._partOpts)
+ this._part._read = function (n) {
+ self._unpause()
+ }
+ if (this._isPreamble && this._events.preamble) { this.emit('preamble', this._part) } else if (this._isPreamble !== true && this._events.part) { this.emit('part', this._part) } else { this._ignore() }
+ if (!this._isPreamble) { this._inHeader = true }
+ }
+ if (data && start < end && !this._ignoreData) {
+ if (this._isPreamble || !this._inHeader) {
+ if (buf) { shouldWriteMore = this._part.push(buf) }
+ shouldWriteMore = this._part.push(data.slice(start, end))
+ if (!shouldWriteMore) { this._pause = true }
+ } else if (!this._isPreamble && this._inHeader) {
+ if (buf) { this._hparser.push(buf) }
+ r = this._hparser.push(data.slice(start, end))
+ if (!this._inHeader && r !== undefined && r < end) { this._oninfo(false, data, start + r, end) }
+ }
+ }
+ if (isMatch) {
+ this._hparser.reset()
+ if (this._isPreamble) { this._isPreamble = false } else {
+ if (start !== end) {
+ ++this._parts
+ this._part.on('end', function () {
+ if (--self._parts === 0) {
+ if (self._finished) {
+ self._realFinish = true
+ self.emit('finish')
+ self._realFinish = false
+ } else {
+ self._unpause()
+ }
+ }
+ })
+ }
+ }
+ this._part.push(null)
+ this._part = undefined
+ this._ignoreData = false
+ this._justMatched = true
+ this._dashes = 0
+ }
+}
+
+Dicer.prototype._unpause = function () {
+ if (!this._pause) { return }
+
+ this._pause = false
+ if (this._cb) {
+ const cb = this._cb
+ this._cb = undefined
+ cb()
+ }
+}
+
+module.exports = Dicer
+
+
+/***/ }),
+
+/***/ 90333:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+"use strict";
+
+
+const EventEmitter = (__nccwpck_require__(15673).EventEmitter)
+const inherits = (__nccwpck_require__(47261).inherits)
+const getLimit = __nccwpck_require__(49692)
+
+const StreamSearch = __nccwpck_require__(88534)
+
+const B_DCRLF = Buffer.from('\r\n\r\n')
+const RE_CRLF = /\r\n/g
+const RE_HDR = /^([^:]+):[ \t]?([\x00-\xFF]+)?$/ // eslint-disable-line no-control-regex
+
+function HeaderParser (cfg) {
+ EventEmitter.call(this)
+
+ cfg = cfg || {}
+ const self = this
+ this.nread = 0
+ this.maxed = false
+ this.npairs = 0
+ this.maxHeaderPairs = getLimit(cfg, 'maxHeaderPairs', 2000)
+ this.maxHeaderSize = getLimit(cfg, 'maxHeaderSize', 80 * 1024)
+ this.buffer = ''
+ this.header = {}
+ this.finished = false
+ this.ss = new StreamSearch(B_DCRLF)
+ this.ss.on('info', function (isMatch, data, start, end) {
+ if (data && !self.maxed) {
+ if (self.nread + end - start >= self.maxHeaderSize) {
+ end = self.maxHeaderSize - self.nread + start
+ self.nread = self.maxHeaderSize
+ self.maxed = true
+ } else { self.nread += (end - start) }
+
+ self.buffer += data.toString('binary', start, end)
+ }
+ if (isMatch) { self._finish() }
+ })
+}
+inherits(HeaderParser, EventEmitter)
+
+HeaderParser.prototype.push = function (data) {
+ const r = this.ss.push(data)
+ if (this.finished) { return r }
+}
+
+HeaderParser.prototype.reset = function () {
+ this.finished = false
+ this.buffer = ''
+ this.header = {}
+ this.ss.reset()
+}
+
+HeaderParser.prototype._finish = function () {
+ if (this.buffer) { this._parseHeader() }
+ this.ss.matches = this.ss.maxMatches
+ const header = this.header
+ this.header = {}
+ this.buffer = ''
+ this.finished = true
+ this.nread = this.npairs = 0
+ this.maxed = false
+ this.emit('header', header)
+}
+
+HeaderParser.prototype._parseHeader = function () {
+ if (this.npairs === this.maxHeaderPairs) { return }
+
+ const lines = this.buffer.split(RE_CRLF)
+ const len = lines.length
+ let m, h
+
+ for (var i = 0; i < len; ++i) { // eslint-disable-line no-var
+ if (lines[i].length === 0) { continue }
+ if (lines[i][0] === '\t' || lines[i][0] === ' ') {
+ // folded header content
+ // RFC2822 says to just remove the CRLF and not the whitespace following
+ // it, so we follow the RFC and include the leading whitespace ...
+ if (h) {
+ this.header[h][this.header[h].length - 1] += lines[i]
+ continue
+ }
+ }
+
+ const posColon = lines[i].indexOf(':')
+ if (
+ posColon === -1 ||
+ posColon === 0
+ ) {
+ return
+ }
+ m = RE_HDR.exec(lines[i])
+ h = m[1].toLowerCase()
+ this.header[h] = this.header[h] || []
+ this.header[h].push((m[2] || ''))
+ if (++this.npairs === this.maxHeaderPairs) { break }
+ }
+}
+
+module.exports = HeaderParser
+
+
+/***/ }),
+
+/***/ 38710:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+"use strict";
+
+
+const inherits = (__nccwpck_require__(47261).inherits)
+const ReadableStream = (__nccwpck_require__(84492).Readable)
+
+function PartStream (opts) {
+ ReadableStream.call(this, opts)
+}
+inherits(PartStream, ReadableStream)
+
+PartStream.prototype._read = function (n) {}
+
+module.exports = PartStream
+
+
+/***/ }),
+
+/***/ 88534:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+"use strict";
+
+
+/**
+ * Copyright Brian White. All rights reserved.
+ *
+ * @see https://github.com/mscdex/streamsearch
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to
+ * deal in the Software without restriction, including without limitation the
+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+ * sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+ * IN THE SOFTWARE.
+ *
+ * Based heavily on the Streaming Boyer-Moore-Horspool C++ implementation
+ * by Hongli Lai at: https://github.com/FooBarWidget/boyer-moore-horspool
+ */
+const EventEmitter = (__nccwpck_require__(15673).EventEmitter)
+const inherits = (__nccwpck_require__(47261).inherits)
+
+function SBMH (needle) {
+ if (typeof needle === 'string') {
+ needle = Buffer.from(needle)
+ }
+
+ if (!Buffer.isBuffer(needle)) {
+ throw new TypeError('The needle has to be a String or a Buffer.')
+ }
+
+ const needleLength = needle.length
+
+ if (needleLength === 0) {
+ throw new Error('The needle cannot be an empty String/Buffer.')
+ }
+
+ if (needleLength > 256) {
+ throw new Error('The needle cannot have a length bigger than 256.')
+ }
+
+ this.maxMatches = Infinity
+ this.matches = 0
+
+ this._occ = new Array(256)
+ .fill(needleLength) // Initialize occurrence table.
+ this._lookbehind_size = 0
+ this._needle = needle
+ this._bufpos = 0
+
+ this._lookbehind = Buffer.alloc(needleLength)
+
+ // Populate occurrence table with analysis of the needle,
+ // ignoring last letter.
+ for (var i = 0; i < needleLength - 1; ++i) { // eslint-disable-line no-var
+ this._occ[needle[i]] = needleLength - 1 - i
+ }
+}
+inherits(SBMH, EventEmitter)
+
+SBMH.prototype.reset = function () {
+ this._lookbehind_size = 0
+ this.matches = 0
+ this._bufpos = 0
+}
+
+SBMH.prototype.push = function (chunk, pos) {
+ if (!Buffer.isBuffer(chunk)) {
+ chunk = Buffer.from(chunk, 'binary')
+ }
+ const chlen = chunk.length
+ this._bufpos = pos || 0
+ let r
+ while (r !== chlen && this.matches < this.maxMatches) { r = this._sbmh_feed(chunk) }
+ return r
+}
+
+SBMH.prototype._sbmh_feed = function (data) {
+ const len = data.length
+ const needle = this._needle
+ const needleLength = needle.length
+ const lastNeedleChar = needle[needleLength - 1]
+
+ // Positive: points to a position in `data`
+ // pos == 3 points to data[3]
+ // Negative: points to a position in the lookbehind buffer
+ // pos == -2 points to lookbehind[lookbehind_size - 2]
+ let pos = -this._lookbehind_size
+ let ch
+
+ if (pos < 0) {
+ // Lookbehind buffer is not empty. Perform Boyer-Moore-Horspool
+ // search with character lookup code that considers both the
+ // lookbehind buffer and the current round's haystack data.
+ //
+ // Loop until
+ // there is a match.
+ // or until
+ // we've moved past the position that requires the
+ // lookbehind buffer. In this case we switch to the
+ // optimized loop.
+ // or until
+ // the character to look at lies outside the haystack.
+ while (pos < 0 && pos <= len - needleLength) {
+ ch = this._sbmh_lookup_char(data, pos + needleLength - 1)
+
+ if (
+ ch === lastNeedleChar &&
+ this._sbmh_memcmp(data, pos, needleLength - 1)
+ ) {
+ this._lookbehind_size = 0
+ ++this.matches
+ this.emit('info', true)
+
+ return (this._bufpos = pos + needleLength)
+ }
+ pos += this._occ[ch]
+ }
+
+ // No match.
+
+ if (pos < 0) {
+ // There's too few data for Boyer-Moore-Horspool to run,
+ // so let's use a different algorithm to skip as much as
+ // we can.
+ // Forward pos until
+ // the trailing part of lookbehind + data
+ // looks like the beginning of the needle
+ // or until
+ // pos == 0
+ while (pos < 0 && !this._sbmh_memcmp(data, pos, len - pos)) { ++pos }
+ }
+
+ if (pos >= 0) {
+ // Discard lookbehind buffer.
+ this.emit('info', false, this._lookbehind, 0, this._lookbehind_size)
+ this._lookbehind_size = 0
+ } else {
+ // Cut off part of the lookbehind buffer that has
+ // been processed and append the entire haystack
+ // into it.
+ const bytesToCutOff = this._lookbehind_size + pos
+ if (bytesToCutOff > 0) {
+ // The cut off data is guaranteed not to contain the needle.
+ this.emit('info', false, this._lookbehind, 0, bytesToCutOff)
+ }
+
+ this._lookbehind.copy(this._lookbehind, 0, bytesToCutOff,
+ this._lookbehind_size - bytesToCutOff)
+ this._lookbehind_size -= bytesToCutOff
+
+ data.copy(this._lookbehind, this._lookbehind_size)
+ this._lookbehind_size += len
+
+ this._bufpos = len
+ return len
+ }
+ }
+
+ pos += (pos >= 0) * this._bufpos
+
+ // Lookbehind buffer is now empty. We only need to check if the
+ // needle is in the haystack.
+ if (data.indexOf(needle, pos) !== -1) {
+ pos = data.indexOf(needle, pos)
+ ++this.matches
+ if (pos > 0) { this.emit('info', true, data, this._bufpos, pos) } else { this.emit('info', true) }
+
+ return (this._bufpos = pos + needleLength)
+ } else {
+ pos = len - needleLength
+ }
+
+ // There was no match. If there's trailing haystack data that we cannot
+ // match yet using the Boyer-Moore-Horspool algorithm (because the trailing
+ // data is less than the needle size) then match using a modified
+ // algorithm that starts matching from the beginning instead of the end.
+ // Whatever trailing data is left after running this algorithm is added to
+ // the lookbehind buffer.
+ while (
+ pos < len &&
+ (
+ data[pos] !== needle[0] ||
+ (
+ (Buffer.compare(
+ data.subarray(pos, pos + len - pos),
+ needle.subarray(0, len - pos)
+ ) !== 0)
+ )
+ )
+ ) {
+ ++pos
+ }
+ if (pos < len) {
+ data.copy(this._lookbehind, 0, pos, pos + (len - pos))
+ this._lookbehind_size = len - pos
+ }
+
+ // Everything until pos is guaranteed not to contain needle data.
+ if (pos > 0) { this.emit('info', false, data, this._bufpos, pos < len ? pos : len) }
+
+ this._bufpos = len
+ return len
+}
+
+SBMH.prototype._sbmh_lookup_char = function (data, pos) {
+ return (pos < 0)
+ ? this._lookbehind[this._lookbehind_size + pos]
+ : data[pos]
+}
+
+SBMH.prototype._sbmh_memcmp = function (data, pos, len) {
+ for (var i = 0; i < len; ++i) { // eslint-disable-line no-var
+ if (this._sbmh_lookup_char(data, pos + i) !== this._needle[i]) { return false }
+ }
+ return true
+}
+
+module.exports = SBMH
+
+
+/***/ }),
+
+/***/ 33438:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+"use strict";
+
+
+const WritableStream = (__nccwpck_require__(84492).Writable)
+const { inherits } = __nccwpck_require__(47261)
+const Dicer = __nccwpck_require__(2856)
+
+const MultipartParser = __nccwpck_require__(90415)
+const UrlencodedParser = __nccwpck_require__(16780)
+const parseParams = __nccwpck_require__(34426)
+
+function Busboy (opts) {
+ if (!(this instanceof Busboy)) { return new Busboy(opts) }
+
+ if (typeof opts !== 'object') {
+ throw new TypeError('Busboy expected an options-Object.')
+ }
+ if (typeof opts.headers !== 'object') {
+ throw new TypeError('Busboy expected an options-Object with headers-attribute.')
+ }
+ if (typeof opts.headers['content-type'] !== 'string') {
+ throw new TypeError('Missing Content-Type-header.')
+ }
+
+ const {
+ headers,
+ ...streamOptions
+ } = opts
+
+ this.opts = {
+ autoDestroy: false,
+ ...streamOptions
+ }
+ WritableStream.call(this, this.opts)
+
+ this._done = false
+ this._parser = this.getParserByHeaders(headers)
+ this._finished = false
+}
+inherits(Busboy, WritableStream)
+
+Busboy.prototype.emit = function (ev) {
+ if (ev === 'finish') {
+ if (!this._done) {
+ this._parser?.end()
+ return
+ } else if (this._finished) {
+ return
+ }
+ this._finished = true
+ }
+ WritableStream.prototype.emit.apply(this, arguments)
+}
+
+Busboy.prototype.getParserByHeaders = function (headers) {
+ const parsed = parseParams(headers['content-type'])
+
+ const cfg = {
+ defCharset: this.opts.defCharset,
+ fileHwm: this.opts.fileHwm,
+ headers,
+ highWaterMark: this.opts.highWaterMark,
+ isPartAFile: this.opts.isPartAFile,
+ limits: this.opts.limits,
+ parsedConType: parsed,
+ preservePath: this.opts.preservePath
+ }
+
+ if (MultipartParser.detect.test(parsed[0])) {
+ return new MultipartParser(this, cfg)
+ }
+ if (UrlencodedParser.detect.test(parsed[0])) {
+ return new UrlencodedParser(this, cfg)
+ }
+ throw new Error('Unsupported Content-Type.')
+}
+
+Busboy.prototype._write = function (chunk, encoding, cb) {
+ this._parser.write(chunk, cb)
+}
+
+module.exports = Busboy
+module.exports["default"] = Busboy
+module.exports.Busboy = Busboy
+
+module.exports.Dicer = Dicer
+
+
+/***/ }),
+
+/***/ 90415:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+"use strict";
+
+
+// TODO:
+// * support 1 nested multipart level
+// (see second multipart example here:
+// http://www.w3.org/TR/html401/interact/forms.html#didx-multipartform-data)
+// * support limits.fieldNameSize
+// -- this will require modifications to utils.parseParams
+
+const { Readable } = __nccwpck_require__(84492)
+const { inherits } = __nccwpck_require__(47261)
+
+const Dicer = __nccwpck_require__(2856)
+
+const parseParams = __nccwpck_require__(34426)
+const decodeText = __nccwpck_require__(99136)
+const basename = __nccwpck_require__(60496)
+const getLimit = __nccwpck_require__(49692)
+
+const RE_BOUNDARY = /^boundary$/i
+const RE_FIELD = /^form-data$/i
+const RE_CHARSET = /^charset$/i
+const RE_FILENAME = /^filename$/i
+const RE_NAME = /^name$/i
+
+Multipart.detect = /^multipart\/form-data/i
+function Multipart (boy, cfg) {
+ let i
+ let len
+ const self = this
+ let boundary
+ const limits = cfg.limits
+ const isPartAFile = cfg.isPartAFile || ((fieldName, contentType, fileName) => (contentType === 'application/octet-stream' || fileName !== undefined))
+ const parsedConType = cfg.parsedConType || []
+ const defCharset = cfg.defCharset || 'utf8'
+ const preservePath = cfg.preservePath
+ const fileOpts = { highWaterMark: cfg.fileHwm }
+
+ for (i = 0, len = parsedConType.length; i < len; ++i) {
+ if (Array.isArray(parsedConType[i]) &&
+ RE_BOUNDARY.test(parsedConType[i][0])) {
+ boundary = parsedConType[i][1]
+ break
+ }
+ }
+
+ function checkFinished () {
+ if (nends === 0 && finished && !boy._done) {
+ finished = false
+ self.end()
+ }
+ }
+
+ if (typeof boundary !== 'string') { throw new Error('Multipart: Boundary not found') }
+
+ const fieldSizeLimit = getLimit(limits, 'fieldSize', 1 * 1024 * 1024)
+ const fileSizeLimit = getLimit(limits, 'fileSize', Infinity)
+ const filesLimit = getLimit(limits, 'files', Infinity)
+ const fieldsLimit = getLimit(limits, 'fields', Infinity)
+ const partsLimit = getLimit(limits, 'parts', Infinity)
+ const headerPairsLimit = getLimit(limits, 'headerPairs', 2000)
+ const headerSizeLimit = getLimit(limits, 'headerSize', 80 * 1024)
+
+ let nfiles = 0
+ let nfields = 0
+ let nends = 0
+ let curFile
+ let curField
+ let finished = false
+
+ this._needDrain = false
+ this._pause = false
+ this._cb = undefined
+ this._nparts = 0
+ this._boy = boy
+
+ const parserCfg = {
+ boundary,
+ maxHeaderPairs: headerPairsLimit,
+ maxHeaderSize: headerSizeLimit,
+ partHwm: fileOpts.highWaterMark,
+ highWaterMark: cfg.highWaterMark
+ }
+
+ this.parser = new Dicer(parserCfg)
+ this.parser.on('drain', function () {
+ self._needDrain = false
+ if (self._cb && !self._pause) {
+ const cb = self._cb
+ self._cb = undefined
+ cb()
+ }
+ }).on('part', function onPart (part) {
+ if (++self._nparts > partsLimit) {
+ self.parser.removeListener('part', onPart)
+ self.parser.on('part', skipPart)
+ boy.hitPartsLimit = true
+ boy.emit('partsLimit')
+ return skipPart(part)
+ }
+
+ // hack because streams2 _always_ doesn't emit 'end' until nextTick, so let
+ // us emit 'end' early since we know the part has ended if we are already
+ // seeing the next part
+ if (curField) {
+ const field = curField
+ field.emit('end')
+ field.removeAllListeners('end')
+ }
+
+ part.on('header', function (header) {
+ let contype
+ let fieldname
+ let parsed
+ let charset
+ let encoding
+ let filename
+ let nsize = 0
+
+ if (header['content-type']) {
+ parsed = parseParams(header['content-type'][0])
+ if (parsed[0]) {
+ contype = parsed[0].toLowerCase()
+ for (i = 0, len = parsed.length; i < len; ++i) {
+ if (RE_CHARSET.test(parsed[i][0])) {
+ charset = parsed[i][1].toLowerCase()
+ break
+ }
+ }
+ }
+ }
+
+ if (contype === undefined) { contype = 'text/plain' }
+ if (charset === undefined) { charset = defCharset }
+
+ if (header['content-disposition']) {
+ parsed = parseParams(header['content-disposition'][0])
+ if (!RE_FIELD.test(parsed[0])) { return skipPart(part) }
+ for (i = 0, len = parsed.length; i < len; ++i) {
+ if (RE_NAME.test(parsed[i][0])) {
+ fieldname = parsed[i][1]
+ } else if (RE_FILENAME.test(parsed[i][0])) {
+ filename = parsed[i][1]
+ if (!preservePath) { filename = basename(filename) }
+ }
+ }
+ } else { return skipPart(part) }
+
+ if (header['content-transfer-encoding']) { encoding = header['content-transfer-encoding'][0].toLowerCase() } else { encoding = '7bit' }
+
+ let onData,
+ onEnd
+
+ if (isPartAFile(fieldname, contype, filename)) {
+ // file/binary field
+ if (nfiles === filesLimit) {
+ if (!boy.hitFilesLimit) {
+ boy.hitFilesLimit = true
+ boy.emit('filesLimit')
+ }
+ return skipPart(part)
+ }
+
+ ++nfiles
+
+ if (!boy._events.file) {
+ self.parser._ignore()
+ return
+ }
+
+ ++nends
+ const file = new FileStream(fileOpts)
+ curFile = file
+ file.on('end', function () {
+ --nends
+ self._pause = false
+ checkFinished()
+ if (self._cb && !self._needDrain) {
+ const cb = self._cb
+ self._cb = undefined
+ cb()
+ }
+ })
+ file._read = function (n) {
+ if (!self._pause) { return }
+ self._pause = false
+ if (self._cb && !self._needDrain) {
+ const cb = self._cb
+ self._cb = undefined
+ cb()
+ }
+ }
+ boy.emit('file', fieldname, file, filename, encoding, contype)
+
+ onData = function (data) {
+ if ((nsize += data.length) > fileSizeLimit) {
+ const extralen = fileSizeLimit - nsize + data.length
+ if (extralen > 0) { file.push(data.slice(0, extralen)) }
+ file.truncated = true
+ file.bytesRead = fileSizeLimit
+ part.removeAllListeners('data')
+ file.emit('limit')
+ return
+ } else if (!file.push(data)) { self._pause = true }
+
+ file.bytesRead = nsize
+ }
+
+ onEnd = function () {
+ curFile = undefined
+ file.push(null)
+ }
+ } else {
+ // non-file field
+ if (nfields === fieldsLimit) {
+ if (!boy.hitFieldsLimit) {
+ boy.hitFieldsLimit = true
+ boy.emit('fieldsLimit')
+ }
+ return skipPart(part)
+ }
+
+ ++nfields
+ ++nends
+ let buffer = ''
+ let truncated = false
+ curField = part
+
+ onData = function (data) {
+ if ((nsize += data.length) > fieldSizeLimit) {
+ const extralen = (fieldSizeLimit - (nsize - data.length))
+ buffer += data.toString('binary', 0, extralen)
+ truncated = true
+ part.removeAllListeners('data')
+ } else { buffer += data.toString('binary') }
+ }
+
+ onEnd = function () {
+ curField = undefined
+ if (buffer.length) { buffer = decodeText(buffer, 'binary', charset) }
+ boy.emit('field', fieldname, buffer, false, truncated, encoding, contype)
+ --nends
+ checkFinished()
+ }
+ }
+
+ /* As of node@2efe4ab761666 (v0.10.29+/v0.11.14+), busboy had become
+ broken. Streams2/streams3 is a huge black box of confusion, but
+ somehow overriding the sync state seems to fix things again (and still
+ seems to work for previous node versions).
+ */
+ part._readableState.sync = false
+
+ part.on('data', onData)
+ part.on('end', onEnd)
+ }).on('error', function (err) {
+ if (curFile) { curFile.emit('error', err) }
+ })
+ }).on('error', function (err) {
+ boy.emit('error', err)
+ }).on('finish', function () {
+ finished = true
+ checkFinished()
+ })
+}
+
+Multipart.prototype.write = function (chunk, cb) {
+ const r = this.parser.write(chunk)
+ if (r && !this._pause) {
+ cb()
+ } else {
+ this._needDrain = !r
+ this._cb = cb
+ }
+}
+
+Multipart.prototype.end = function () {
+ const self = this
+
+ if (self.parser.writable) {
+ self.parser.end()
+ } else if (!self._boy._done) {
+ process.nextTick(function () {
+ self._boy._done = true
+ self._boy.emit('finish')
+ })
+ }
+}
+
+function skipPart (part) {
+ part.resume()
+}
+
+function FileStream (opts) {
+ Readable.call(this, opts)
+
+ this.bytesRead = 0
+
+ this.truncated = false
+}
+
+inherits(FileStream, Readable)
+
+FileStream.prototype._read = function (n) {}
+
+module.exports = Multipart
+
+
+/***/ }),
+
+/***/ 16780:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+"use strict";
+
+
+const Decoder = __nccwpck_require__(89730)
+const decodeText = __nccwpck_require__(99136)
+const getLimit = __nccwpck_require__(49692)
+
+const RE_CHARSET = /^charset$/i
+
+UrlEncoded.detect = /^application\/x-www-form-urlencoded/i
+function UrlEncoded (boy, cfg) {
+ const limits = cfg.limits
+ const parsedConType = cfg.parsedConType
+ this.boy = boy
+
+ this.fieldSizeLimit = getLimit(limits, 'fieldSize', 1 * 1024 * 1024)
+ this.fieldNameSizeLimit = getLimit(limits, 'fieldNameSize', 100)
+ this.fieldsLimit = getLimit(limits, 'fields', Infinity)
+
+ let charset
+ for (var i = 0, len = parsedConType.length; i < len; ++i) { // eslint-disable-line no-var
+ if (Array.isArray(parsedConType[i]) &&
+ RE_CHARSET.test(parsedConType[i][0])) {
+ charset = parsedConType[i][1].toLowerCase()
+ break
+ }
+ }
+
+ if (charset === undefined) { charset = cfg.defCharset || 'utf8' }
+
+ this.decoder = new Decoder()
+ this.charset = charset
+ this._fields = 0
+ this._state = 'key'
+ this._checkingBytes = true
+ this._bytesKey = 0
+ this._bytesVal = 0
+ this._key = ''
+ this._val = ''
+ this._keyTrunc = false
+ this._valTrunc = false
+ this._hitLimit = false
+}
+
+UrlEncoded.prototype.write = function (data, cb) {
+ if (this._fields === this.fieldsLimit) {
+ if (!this.boy.hitFieldsLimit) {
+ this.boy.hitFieldsLimit = true
+ this.boy.emit('fieldsLimit')
+ }
+ return cb()
+ }
+
+ let idxeq; let idxamp; let i; let p = 0; const len = data.length
+
+ while (p < len) {
+ if (this._state === 'key') {
+ idxeq = idxamp = undefined
+ for (i = p; i < len; ++i) {
+ if (!this._checkingBytes) { ++p }
+ if (data[i] === 0x3D/* = */) {
+ idxeq = i
+ break
+ } else if (data[i] === 0x26/* & */) {
+ idxamp = i
+ break
+ }
+ if (this._checkingBytes && this._bytesKey === this.fieldNameSizeLimit) {
+ this._hitLimit = true
+ break
+ } else if (this._checkingBytes) { ++this._bytesKey }
+ }
+
+ if (idxeq !== undefined) {
+ // key with assignment
+ if (idxeq > p) { this._key += this.decoder.write(data.toString('binary', p, idxeq)) }
+ this._state = 'val'
+
+ this._hitLimit = false
+ this._checkingBytes = true
+ this._val = ''
+ this._bytesVal = 0
+ this._valTrunc = false
+ this.decoder.reset()
+
+ p = idxeq + 1
+ } else if (idxamp !== undefined) {
+ // key with no assignment
+ ++this._fields
+ let key; const keyTrunc = this._keyTrunc
+ if (idxamp > p) { key = (this._key += this.decoder.write(data.toString('binary', p, idxamp))) } else { key = this._key }
+
+ this._hitLimit = false
+ this._checkingBytes = true
+ this._key = ''
+ this._bytesKey = 0
+ this._keyTrunc = false
+ this.decoder.reset()
+
+ if (key.length) {
+ this.boy.emit('field', decodeText(key, 'binary', this.charset),
+ '',
+ keyTrunc,
+ false)
+ }
+
+ p = idxamp + 1
+ if (this._fields === this.fieldsLimit) { return cb() }
+ } else if (this._hitLimit) {
+ // we may not have hit the actual limit if there are encoded bytes...
+ if (i > p) { this._key += this.decoder.write(data.toString('binary', p, i)) }
+ p = i
+ if ((this._bytesKey = this._key.length) === this.fieldNameSizeLimit) {
+ // yep, we actually did hit the limit
+ this._checkingBytes = false
+ this._keyTrunc = true
+ }
+ } else {
+ if (p < len) { this._key += this.decoder.write(data.toString('binary', p)) }
+ p = len
+ }
+ } else {
+ idxamp = undefined
+ for (i = p; i < len; ++i) {
+ if (!this._checkingBytes) { ++p }
+ if (data[i] === 0x26/* & */) {
+ idxamp = i
+ break
+ }
+ if (this._checkingBytes && this._bytesVal === this.fieldSizeLimit) {
+ this._hitLimit = true
+ break
+ } else if (this._checkingBytes) { ++this._bytesVal }
+ }
+
+ if (idxamp !== undefined) {
+ ++this._fields
+ if (idxamp > p) { this._val += this.decoder.write(data.toString('binary', p, idxamp)) }
+ this.boy.emit('field', decodeText(this._key, 'binary', this.charset),
+ decodeText(this._val, 'binary', this.charset),
+ this._keyTrunc,
+ this._valTrunc)
+ this._state = 'key'
+
+ this._hitLimit = false
+ this._checkingBytes = true
+ this._key = ''
+ this._bytesKey = 0
+ this._keyTrunc = false
+ this.decoder.reset()
+
+ p = idxamp + 1
+ if (this._fields === this.fieldsLimit) { return cb() }
+ } else if (this._hitLimit) {
+ // we may not have hit the actual limit if there are encoded bytes...
+ if (i > p) { this._val += this.decoder.write(data.toString('binary', p, i)) }
+ p = i
+ if ((this._val === '' && this.fieldSizeLimit === 0) ||
+ (this._bytesVal = this._val.length) === this.fieldSizeLimit) {
+ // yep, we actually did hit the limit
+ this._checkingBytes = false
+ this._valTrunc = true
+ }
+ } else {
+ if (p < len) { this._val += this.decoder.write(data.toString('binary', p)) }
+ p = len
+ }
+ }
+ }
+ cb()
+}
+
+UrlEncoded.prototype.end = function () {
+ if (this.boy._done) { return }
+
+ if (this._state === 'key' && this._key.length > 0) {
+ this.boy.emit('field', decodeText(this._key, 'binary', this.charset),
+ '',
+ this._keyTrunc,
+ false)
+ } else if (this._state === 'val') {
+ this.boy.emit('field', decodeText(this._key, 'binary', this.charset),
+ decodeText(this._val, 'binary', this.charset),
+ this._keyTrunc,
+ this._valTrunc)
+ }
+ this.boy._done = true
+ this.boy.emit('finish')
+}
+
+module.exports = UrlEncoded
+
+
+/***/ }),
+
+/***/ 89730:
+/***/ ((module) => {
+
+"use strict";
+
+
+const RE_PLUS = /\+/g
+
+const HEX = [
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0,
+ 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+]
+
+function Decoder () {
+ this.buffer = undefined
+}
+Decoder.prototype.write = function (str) {
+ // Replace '+' with ' ' before decoding
+ str = str.replace(RE_PLUS, ' ')
+ let res = ''
+ let i = 0; let p = 0; const len = str.length
+ for (; i < len; ++i) {
+ if (this.buffer !== undefined) {
+ if (!HEX[str.charCodeAt(i)]) {
+ res += '%' + this.buffer
+ this.buffer = undefined
+ --i // retry character
+ } else {
+ this.buffer += str[i]
+ ++p
+ if (this.buffer.length === 2) {
+ res += String.fromCharCode(parseInt(this.buffer, 16))
+ this.buffer = undefined
+ }
+ }
+ } else if (str[i] === '%') {
+ if (i > p) {
+ res += str.substring(p, i)
+ p = i
+ }
+ this.buffer = ''
+ ++p
+ }
+ }
+ if (p < len && this.buffer === undefined) { res += str.substring(p) }
+ return res
+}
+Decoder.prototype.reset = function () {
+ this.buffer = undefined
+}
+
+module.exports = Decoder
+
+
+/***/ }),
+
+/***/ 60496:
+/***/ ((module) => {
+
+"use strict";
+
+
+module.exports = function basename (path) {
+ if (typeof path !== 'string') { return '' }
+ for (var i = path.length - 1; i >= 0; --i) { // eslint-disable-line no-var
+ switch (path.charCodeAt(i)) {
+ case 0x2F: // '/'
+ case 0x5C: // '\'
+ path = path.slice(i + 1)
+ return (path === '..' || path === '.' ? '' : path)
+ }
+ }
+ return (path === '..' || path === '.' ? '' : path)
+}
+
+
+/***/ }),
+
+/***/ 99136:
+/***/ ((module) => {
+
+"use strict";
+
+
+// Node has always utf-8
+const utf8Decoder = new TextDecoder('utf-8')
+const textDecoders = new Map([
+ ['utf-8', utf8Decoder],
+ ['utf8', utf8Decoder]
+])
+
+function decodeText (text, textEncoding, destEncoding) {
+ if (text) {
+ if (textDecoders.has(destEncoding)) {
+ try {
+ return textDecoders.get(destEncoding).decode(Buffer.from(text, textEncoding))
+ } catch (e) { }
+ } else {
+ try {
+ textDecoders.set(destEncoding, new TextDecoder(destEncoding))
+ return textDecoders.get(destEncoding).decode(Buffer.from(text, textEncoding))
+ } catch (e) { }
+ }
+ }
+ return text
+}
+
+module.exports = decodeText
+
+
+/***/ }),
+
+/***/ 49692:
+/***/ ((module) => {
+
+"use strict";
+
+
+module.exports = function getLimit (limits, name, defaultLimit) {
+ if (
+ !limits ||
+ limits[name] === undefined ||
+ limits[name] === null
+ ) { return defaultLimit }
+
+ if (
+ typeof limits[name] !== 'number' ||
+ isNaN(limits[name])
+ ) { throw new TypeError('Limit ' + name + ' is not a valid number') }
+
+ return limits[name]
+}
+
+
+/***/ }),
+
+/***/ 34426:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+"use strict";
+
+
+const decodeText = __nccwpck_require__(99136)
+
+const RE_ENCODED = /%([a-fA-F0-9]{2})/g
+
+function encodedReplacer (match, byte) {
+ return String.fromCharCode(parseInt(byte, 16))
+}
+
+function parseParams (str) {
+ const res = []
+ let state = 'key'
+ let charset = ''
+ let inquote = false
+ let escaping = false
+ let p = 0
+ let tmp = ''
+
+ for (var i = 0, len = str.length; i < len; ++i) { // eslint-disable-line no-var
+ const char = str[i]
+ if (char === '\\' && inquote) {
+ if (escaping) { escaping = false } else {
+ escaping = true
+ continue
+ }
+ } else if (char === '"') {
+ if (!escaping) {
+ if (inquote) {
+ inquote = false
+ state = 'key'
+ } else { inquote = true }
+ continue
+ } else { escaping = false }
+ } else {
+ if (escaping && inquote) { tmp += '\\' }
+ escaping = false
+ if ((state === 'charset' || state === 'lang') && char === "'") {
+ if (state === 'charset') {
+ state = 'lang'
+ charset = tmp.substring(1)
+ } else { state = 'value' }
+ tmp = ''
+ continue
+ } else if (state === 'key' &&
+ (char === '*' || char === '=') &&
+ res.length) {
+ if (char === '*') { state = 'charset' } else { state = 'value' }
+ res[p] = [tmp, undefined]
+ tmp = ''
+ continue
+ } else if (!inquote && char === ';') {
+ state = 'key'
+ if (charset) {
+ if (tmp.length) {
+ tmp = decodeText(tmp.replace(RE_ENCODED, encodedReplacer),
+ 'binary',
+ charset)
+ }
+ charset = ''
+ } else if (tmp.length) {
+ tmp = decodeText(tmp, 'binary', 'utf8')
+ }
+ if (res[p] === undefined) { res[p] = tmp } else { res[p][1] = tmp }
+ tmp = ''
+ ++p
+ continue
+ } else if (!inquote && (char === ' ' || char === '\t')) { continue }
+ }
+ tmp += char
+ }
+ if (charset && tmp.length) {
+ tmp = decodeText(tmp.replace(RE_ENCODED, encodedReplacer),
+ 'binary',
+ charset)
+ } else if (tmp) {
+ tmp = decodeText(tmp, 'binary', 'utf8')
+ }
+
+ if (res[p] === undefined) {
+ if (tmp) { res[p] = tmp }
+ } else { res[p][1] = tmp }
+
+ return res
+}
+
+module.exports = parseParams
+
+
+/***/ }),
+
+/***/ 40334:
+/***/ ((module) => {
+
+"use strict";
+
+var __defProp = Object.defineProperty;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __export = (target, all) => {
+ for (var name in all)
+ __defProp(target, name, { get: all[name], enumerable: true });
+};
+var __copyProps = (to, from, except, desc) => {
+ if (from && typeof from === "object" || typeof from === "function") {
+ for (let key of __getOwnPropNames(from))
+ if (!__hasOwnProp.call(to, key) && key !== except)
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+ }
+ return to;
+};
+var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+
+// pkg/dist-src/index.js
+var dist_src_exports = {};
+__export(dist_src_exports, {
+ createTokenAuth: () => createTokenAuth
+});
+module.exports = __toCommonJS(dist_src_exports);
+
+// pkg/dist-src/auth.js
+var REGEX_IS_INSTALLATION_LEGACY = /^v1\./;
+var REGEX_IS_INSTALLATION = /^ghs_/;
+var REGEX_IS_USER_TO_SERVER = /^ghu_/;
+async function auth(token) {
+ const isApp = token.split(/\./).length === 3;
+ const isInstallation = REGEX_IS_INSTALLATION_LEGACY.test(token) || REGEX_IS_INSTALLATION.test(token);
+ const isUserToServer = REGEX_IS_USER_TO_SERVER.test(token);
+ const tokenType = isApp ? "app" : isInstallation ? "installation" : isUserToServer ? "user-to-server" : "oauth";
+ return {
+ type: "token",
+ token,
+ tokenType
+ };
+}
+
+// pkg/dist-src/with-authorization-prefix.js
+function withAuthorizationPrefix(token) {
+ if (token.split(/\./).length === 3) {
+ return `bearer ${token}`;
+ }
+ return `token ${token}`;
+}
+
+// pkg/dist-src/hook.js
+async function hook(token, request, route, parameters) {
+ const endpoint = request.endpoint.merge(
+ route,
+ parameters
+ );
+ endpoint.headers.authorization = withAuthorizationPrefix(token);
+ return request(endpoint);
+}
+
+// pkg/dist-src/index.js
+var createTokenAuth = function createTokenAuth2(token) {
+ if (!token) {
+ throw new Error("[@octokit/auth-token] No token passed to createTokenAuth");
+ }
+ if (typeof token !== "string") {
+ throw new Error(
+ "[@octokit/auth-token] Token passed to createTokenAuth is not a string"
+ );
+ }
+ token = token.replace(/^(token|bearer) +/i, "");
+ return Object.assign(auth.bind(null, token), {
+ hook: hook.bind(null, token)
+ });
+};
+// Annotate the CommonJS export names for ESM import in node:
+0 && (0);
+
+
+/***/ }),
+
+/***/ 76762:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+"use strict";
+
+var __defProp = Object.defineProperty;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __export = (target, all) => {
+ for (var name in all)
+ __defProp(target, name, { get: all[name], enumerable: true });
+};
+var __copyProps = (to, from, except, desc) => {
+ if (from && typeof from === "object" || typeof from === "function") {
+ for (let key of __getOwnPropNames(from))
+ if (!__hasOwnProp.call(to, key) && key !== except)
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+ }
+ return to;
+};
+var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+
+// pkg/dist-src/index.js
+var dist_src_exports = {};
+__export(dist_src_exports, {
+ Octokit: () => Octokit
+});
+module.exports = __toCommonJS(dist_src_exports);
+var import_universal_user_agent = __nccwpck_require__(45030);
+var import_before_after_hook = __nccwpck_require__(83682);
+var import_request = __nccwpck_require__(36234);
+var import_graphql = __nccwpck_require__(88467);
+var import_auth_token = __nccwpck_require__(40334);
+
+// pkg/dist-src/version.js
+var VERSION = "5.0.1";
+
+// pkg/dist-src/index.js
+var Octokit = class {
+ static {
+ this.VERSION = VERSION;
+ }
+ static defaults(defaults) {
+ const OctokitWithDefaults = class extends this {
+ constructor(...args) {
+ const options = args[0] || {};
+ if (typeof defaults === "function") {
+ super(defaults(options));
+ return;
+ }
+ super(
+ Object.assign(
+ {},
+ defaults,
+ options,
+ options.userAgent && defaults.userAgent ? {
+ userAgent: `${options.userAgent} ${defaults.userAgent}`
+ } : null
+ )
+ );
+ }
+ };
+ return OctokitWithDefaults;
+ }
+ static {
+ this.plugins = [];
+ }
+ /**
+ * Attach a plugin (or many) to your Octokit instance.
+ *
+ * @example
+ * const API = Octokit.plugin(plugin1, plugin2, plugin3, ...)
+ */
+ static plugin(...newPlugins) {
+ const currentPlugins = this.plugins;
+ const NewOctokit = class extends this {
+ static {
+ this.plugins = currentPlugins.concat(
+ newPlugins.filter((plugin) => !currentPlugins.includes(plugin))
+ );
+ }
+ };
+ return NewOctokit;
+ }
+ constructor(options = {}) {
+ const hook = new import_before_after_hook.Collection();
+ const requestDefaults = {
+ baseUrl: import_request.request.endpoint.DEFAULTS.baseUrl,
+ headers: {},
+ request: Object.assign({}, options.request, {
+ // @ts-ignore internal usage only, no need to type
+ hook: hook.bind(null, "request")
+ }),
+ mediaType: {
+ previews: [],
+ format: ""
+ }
+ };
+ requestDefaults.headers["user-agent"] = [
+ options.userAgent,
+ `octokit-core.js/${VERSION} ${(0, import_universal_user_agent.getUserAgent)()}`
+ ].filter(Boolean).join(" ");
+ if (options.baseUrl) {
+ requestDefaults.baseUrl = options.baseUrl;
+ }
+ if (options.previews) {
+ requestDefaults.mediaType.previews = options.previews;
+ }
+ if (options.timeZone) {
+ requestDefaults.headers["time-zone"] = options.timeZone;
+ }
+ this.request = import_request.request.defaults(requestDefaults);
+ this.graphql = (0, import_graphql.withCustomRequest)(this.request).defaults(requestDefaults);
+ this.log = Object.assign(
+ {
+ debug: () => {
+ },
+ info: () => {
+ },
+ warn: console.warn.bind(console),
+ error: console.error.bind(console)
+ },
+ options.log
+ );
+ this.hook = hook;
+ if (!options.authStrategy) {
+ if (!options.auth) {
+ this.auth = async () => ({
+ type: "unauthenticated"
+ });
+ } else {
+ const auth = (0, import_auth_token.createTokenAuth)(options.auth);
+ hook.wrap("request", auth.hook);
+ this.auth = auth;
+ }
+ } else {
+ const { authStrategy, ...otherOptions } = options;
+ const auth = authStrategy(
+ Object.assign(
+ {
+ request: this.request,
+ log: this.log,
+ // we pass the current octokit instance as well as its constructor options
+ // to allow for authentication strategies that return a new octokit instance
+ // that shares the same internal state as the current one. The original
+ // requirement for this was the "event-octokit" authentication strategy
+ // of https://github.com/probot/octokit-auth-probot.
+ octokit: this,
+ octokitOptions: otherOptions
+ },
+ options.auth
+ )
+ );
+ hook.wrap("request", auth.hook);
+ this.auth = auth;
+ }
+ const classConstructor = this.constructor;
+ classConstructor.plugins.forEach((plugin) => {
+ Object.assign(this, plugin(this, options));
+ });
+ }
+};
+// Annotate the CommonJS export names for ESM import in node:
+0 && (0);
+
+
+/***/ }),
+
+/***/ 59440:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+"use strict";
+
+var __defProp = Object.defineProperty;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __export = (target, all) => {
+ for (var name in all)
+ __defProp(target, name, { get: all[name], enumerable: true });
+};
+var __copyProps = (to, from, except, desc) => {
+ if (from && typeof from === "object" || typeof from === "function") {
+ for (let key of __getOwnPropNames(from))
+ if (!__hasOwnProp.call(to, key) && key !== except)
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+ }
+ return to;
+};
+var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+
+// pkg/dist-src/index.js
+var dist_src_exports = {};
+__export(dist_src_exports, {
+ endpoint: () => endpoint
+});
+module.exports = __toCommonJS(dist_src_exports);
+
+// pkg/dist-src/defaults.js
+var import_universal_user_agent = __nccwpck_require__(45030);
+
+// pkg/dist-src/version.js
+var VERSION = "9.0.1";
+
+// pkg/dist-src/defaults.js
+var userAgent = `octokit-endpoint.js/${VERSION} ${(0, import_universal_user_agent.getUserAgent)()}`;
+var DEFAULTS = {
+ method: "GET",
+ baseUrl: "https://api.github.com",
+ headers: {
+ accept: "application/vnd.github.v3+json",
+ "user-agent": userAgent
+ },
+ mediaType: {
+ format: ""
+ }
+};
+
+// pkg/dist-src/util/lowercase-keys.js
+function lowercaseKeys(object) {
+ if (!object) {
+ return {};
+ }
+ return Object.keys(object).reduce((newObj, key) => {
+ newObj[key.toLowerCase()] = object[key];
+ return newObj;
+ }, {});
+}
+
+// pkg/dist-src/util/merge-deep.js
+var import_is_plain_object = __nccwpck_require__(63287);
+function mergeDeep(defaults, options) {
+ const result = Object.assign({}, defaults);
+ Object.keys(options).forEach((key) => {
+ if ((0, import_is_plain_object.isPlainObject)(options[key])) {
+ if (!(key in defaults))
+ Object.assign(result, { [key]: options[key] });
+ else
+ result[key] = mergeDeep(defaults[key], options[key]);
+ } else {
+ Object.assign(result, { [key]: options[key] });
+ }
+ });
+ return result;
+}
+
+// pkg/dist-src/util/remove-undefined-properties.js
+function removeUndefinedProperties(obj) {
+ for (const key in obj) {
+ if (obj[key] === void 0) {
+ delete obj[key];
+ }
+ }
+ return obj;
+}
+
+// pkg/dist-src/merge.js
+function merge(defaults, route, options) {
+ if (typeof route === "string") {
+ let [method, url] = route.split(" ");
+ options = Object.assign(url ? { method, url } : { url: method }, options);
+ } else {
+ options = Object.assign({}, route);
+ }
+ options.headers = lowercaseKeys(options.headers);
+ removeUndefinedProperties(options);
+ removeUndefinedProperties(options.headers);
+ const mergedOptions = mergeDeep(defaults || {}, options);
+ if (options.url === "/graphql") {
+ if (defaults && defaults.mediaType.previews?.length) {
+ mergedOptions.mediaType.previews = defaults.mediaType.previews.filter(
+ (preview) => !mergedOptions.mediaType.previews.includes(preview)
+ ).concat(mergedOptions.mediaType.previews);
+ }
+ mergedOptions.mediaType.previews = (mergedOptions.mediaType.previews || []).map((preview) => preview.replace(/-preview/, ""));
+ }
+ return mergedOptions;
+}
+
+// pkg/dist-src/util/add-query-parameters.js
+function addQueryParameters(url, parameters) {
+ const separator = /\?/.test(url) ? "&" : "?";
+ const names = Object.keys(parameters);
+ if (names.length === 0) {
+ return url;
+ }
+ return url + separator + names.map((name) => {
+ if (name === "q") {
+ return "q=" + parameters.q.split("+").map(encodeURIComponent).join("+");
+ }
+ return `${name}=${encodeURIComponent(parameters[name])}`;
+ }).join("&");
+}
+
+// pkg/dist-src/util/extract-url-variable-names.js
+var urlVariableRegex = /\{[^}]+\}/g;
+function removeNonChars(variableName) {
+ return variableName.replace(/^\W+|\W+$/g, "").split(/,/);
+}
+function extractUrlVariableNames(url) {
+ const matches = url.match(urlVariableRegex);
+ if (!matches) {
+ return [];
+ }
+ return matches.map(removeNonChars).reduce((a, b) => a.concat(b), []);
+}
+
+// pkg/dist-src/util/omit.js
+function omit(object, keysToOmit) {
+ return Object.keys(object).filter((option) => !keysToOmit.includes(option)).reduce((obj, key) => {
+ obj[key] = object[key];
+ return obj;
+ }, {});
+}
+
+// pkg/dist-src/util/url-template.js
+function encodeReserved(str) {
+ return str.split(/(%[0-9A-Fa-f]{2})/g).map(function(part) {
+ if (!/%[0-9A-Fa-f]/.test(part)) {
+ part = encodeURI(part).replace(/%5B/g, "[").replace(/%5D/g, "]");
+ }
+ return part;
+ }).join("");
+}
+function encodeUnreserved(str) {
+ return encodeURIComponent(str).replace(/[!'()*]/g, function(c) {
+ return "%" + c.charCodeAt(0).toString(16).toUpperCase();
+ });
+}
+function encodeValue(operator, value, key) {
+ value = operator === "+" || operator === "#" ? encodeReserved(value) : encodeUnreserved(value);
+ if (key) {
+ return encodeUnreserved(key) + "=" + value;
+ } else {
+ return value;
+ }
+}
+function isDefined(value) {
+ return value !== void 0 && value !== null;
+}
+function isKeyOperator(operator) {
+ return operator === ";" || operator === "&" || operator === "?";
+}
+function getValues(context, operator, key, modifier) {
+ var value = context[key], result = [];
+ if (isDefined(value) && value !== "") {
+ if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") {
+ value = value.toString();
+ if (modifier && modifier !== "*") {
+ value = value.substring(0, parseInt(modifier, 10));
+ }
+ result.push(
+ encodeValue(operator, value, isKeyOperator(operator) ? key : "")
+ );
+ } else {
+ if (modifier === "*") {
+ if (Array.isArray(value)) {
+ value.filter(isDefined).forEach(function(value2) {
+ result.push(
+ encodeValue(operator, value2, isKeyOperator(operator) ? key : "")
+ );
+ });
+ } else {
+ Object.keys(value).forEach(function(k) {
+ if (isDefined(value[k])) {
+ result.push(encodeValue(operator, value[k], k));
+ }
+ });
+ }
+ } else {
+ const tmp = [];
+ if (Array.isArray(value)) {
+ value.filter(isDefined).forEach(function(value2) {
+ tmp.push(encodeValue(operator, value2));
+ });
+ } else {
+ Object.keys(value).forEach(function(k) {
+ if (isDefined(value[k])) {
+ tmp.push(encodeUnreserved(k));
+ tmp.push(encodeValue(operator, value[k].toString()));
+ }
+ });
+ }
+ if (isKeyOperator(operator)) {
+ result.push(encodeUnreserved(key) + "=" + tmp.join(","));
+ } else if (tmp.length !== 0) {
+ result.push(tmp.join(","));
+ }
+ }
+ }
+ } else {
+ if (operator === ";") {
+ if (isDefined(value)) {
+ result.push(encodeUnreserved(key));
+ }
+ } else if (value === "" && (operator === "&" || operator === "?")) {
+ result.push(encodeUnreserved(key) + "=");
+ } else if (value === "") {
+ result.push("");
+ }
+ }
+ return result;
+}
+function parseUrl(template) {
+ return {
+ expand: expand.bind(null, template)
+ };
+}
+function expand(template, context) {
+ var operators = ["+", "#", ".", "/", ";", "?", "&"];
+ return template.replace(
+ /\{([^\{\}]+)\}|([^\{\}]+)/g,
+ function(_, expression, literal) {
+ if (expression) {
+ let operator = "";
+ const values = [];
+ if (operators.indexOf(expression.charAt(0)) !== -1) {
+ operator = expression.charAt(0);
+ expression = expression.substr(1);
+ }
+ expression.split(/,/g).forEach(function(variable) {
+ var tmp = /([^:\*]*)(?::(\d+)|(\*))?/.exec(variable);
+ values.push(getValues(context, operator, tmp[1], tmp[2] || tmp[3]));
+ });
+ if (operator && operator !== "+") {
+ var separator = ",";
+ if (operator === "?") {
+ separator = "&";
+ } else if (operator !== "#") {
+ separator = operator;
+ }
+ return (values.length !== 0 ? operator : "") + values.join(separator);
+ } else {
+ return values.join(",");
+ }
+ } else {
+ return encodeReserved(literal);
+ }
+ }
+ );
+}
+
+// pkg/dist-src/parse.js
+function parse(options) {
+ let method = options.method.toUpperCase();
+ let url = (options.url || "/").replace(/:([a-z]\w+)/g, "{$1}");
+ let headers = Object.assign({}, options.headers);
+ let body;
+ let parameters = omit(options, [
+ "method",
+ "baseUrl",
+ "url",
+ "headers",
+ "request",
+ "mediaType"
+ ]);
+ const urlVariableNames = extractUrlVariableNames(url);
+ url = parseUrl(url).expand(parameters);
+ if (!/^http/.test(url)) {
+ url = options.baseUrl + url;
+ }
+ const omittedParameters = Object.keys(options).filter((option) => urlVariableNames.includes(option)).concat("baseUrl");
+ const remainingParameters = omit(parameters, omittedParameters);
+ const isBinaryRequest = /application\/octet-stream/i.test(headers.accept);
+ if (!isBinaryRequest) {
+ if (options.mediaType.format) {
+ headers.accept = headers.accept.split(/,/).map(
+ (format) => format.replace(
+ /application\/vnd(\.\w+)(\.v3)?(\.\w+)?(\+json)?$/,
+ `application/vnd$1$2.${options.mediaType.format}`
+ )
+ ).join(",");
+ }
+ if (url.endsWith("/graphql")) {
+ if (options.mediaType.previews?.length) {
+ const previewsFromAcceptHeader = headers.accept.match(/[\w-]+(?=-preview)/g) || [];
+ headers.accept = previewsFromAcceptHeader.concat(options.mediaType.previews).map((preview) => {
+ const format = options.mediaType.format ? `.${options.mediaType.format}` : "+json";
+ return `application/vnd.github.${preview}-preview${format}`;
+ }).join(",");
+ }
+ }
+ }
+ if (["GET", "HEAD"].includes(method)) {
+ url = addQueryParameters(url, remainingParameters);
+ } else {
+ if ("data" in remainingParameters) {
+ body = remainingParameters.data;
+ } else {
+ if (Object.keys(remainingParameters).length) {
+ body = remainingParameters;
+ }
+ }
+ }
+ if (!headers["content-type"] && typeof body !== "undefined") {
+ headers["content-type"] = "application/json; charset=utf-8";
+ }
+ if (["PATCH", "PUT"].includes(method) && typeof body === "undefined") {
+ body = "";
+ }
+ return Object.assign(
+ { method, url, headers },
+ typeof body !== "undefined" ? { body } : null,
+ options.request ? { request: options.request } : null
+ );
+}
+
+// pkg/dist-src/endpoint-with-defaults.js
+function endpointWithDefaults(defaults, route, options) {
+ return parse(merge(defaults, route, options));
+}
+
+// pkg/dist-src/with-defaults.js
+function withDefaults(oldDefaults, newDefaults) {
+ const DEFAULTS2 = merge(oldDefaults, newDefaults);
+ const endpoint2 = endpointWithDefaults.bind(null, DEFAULTS2);
+ return Object.assign(endpoint2, {
+ DEFAULTS: DEFAULTS2,
+ defaults: withDefaults.bind(null, DEFAULTS2),
+ merge: merge.bind(null, DEFAULTS2),
+ parse
+ });
+}
+
+// pkg/dist-src/index.js
+var endpoint = withDefaults(null, DEFAULTS);
+// Annotate the CommonJS export names for ESM import in node:
+0 && (0);
+
+
+/***/ }),
+
+/***/ 88467:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+"use strict";
+
+var __defProp = Object.defineProperty;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __export = (target, all) => {
+ for (var name in all)
+ __defProp(target, name, { get: all[name], enumerable: true });
+};
+var __copyProps = (to, from, except, desc) => {
+ if (from && typeof from === "object" || typeof from === "function") {
+ for (let key of __getOwnPropNames(from))
+ if (!__hasOwnProp.call(to, key) && key !== except)
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+ }
+ return to;
+};
+var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+
+// pkg/dist-src/index.js
+var dist_src_exports = {};
+__export(dist_src_exports, {
+ GraphqlResponseError: () => GraphqlResponseError,
+ graphql: () => graphql2,
+ withCustomRequest: () => withCustomRequest
+});
+module.exports = __toCommonJS(dist_src_exports);
+var import_request3 = __nccwpck_require__(36234);
+var import_universal_user_agent = __nccwpck_require__(45030);
+
+// pkg/dist-src/version.js
+var VERSION = "7.0.2";
+
+// pkg/dist-src/with-defaults.js
+var import_request2 = __nccwpck_require__(36234);
+
+// pkg/dist-src/graphql.js
+var import_request = __nccwpck_require__(36234);
+
+// pkg/dist-src/error.js
+function _buildMessageForResponseErrors(data) {
+ return `Request failed due to following response errors:
+` + data.errors.map((e) => ` - ${e.message}`).join("\n");
+}
+var GraphqlResponseError = class extends Error {
+ constructor(request2, headers, response) {
+ super(_buildMessageForResponseErrors(response));
+ this.request = request2;
+ this.headers = headers;
+ this.response = response;
+ this.name = "GraphqlResponseError";
+ this.errors = response.errors;
+ this.data = response.data;
+ if (Error.captureStackTrace) {
+ Error.captureStackTrace(this, this.constructor);
+ }
+ }
+};
+
+// pkg/dist-src/graphql.js
+var NON_VARIABLE_OPTIONS = [
+ "method",
+ "baseUrl",
+ "url",
+ "headers",
+ "request",
+ "query",
+ "mediaType"
+];
+var FORBIDDEN_VARIABLE_OPTIONS = ["query", "method", "url"];
+var GHES_V3_SUFFIX_REGEX = /\/api\/v3\/?$/;
+function graphql(request2, query, options) {
+ if (options) {
+ if (typeof query === "string" && "query" in options) {
+ return Promise.reject(
+ new Error(`[@octokit/graphql] "query" cannot be used as variable name`)
+ );
+ }
+ for (const key in options) {
+ if (!FORBIDDEN_VARIABLE_OPTIONS.includes(key))
+ continue;
+ return Promise.reject(
+ new Error(
+ `[@octokit/graphql] "${key}" cannot be used as variable name`
+ )
+ );
+ }
+ }
+ const parsedOptions = typeof query === "string" ? Object.assign({ query }, options) : query;
+ const requestOptions = Object.keys(
+ parsedOptions
+ ).reduce((result, key) => {
+ if (NON_VARIABLE_OPTIONS.includes(key)) {
+ result[key] = parsedOptions[key];
+ return result;
+ }
+ if (!result.variables) {
+ result.variables = {};
+ }
+ result.variables[key] = parsedOptions[key];
+ return result;
+ }, {});
+ const baseUrl = parsedOptions.baseUrl || request2.endpoint.DEFAULTS.baseUrl;
+ if (GHES_V3_SUFFIX_REGEX.test(baseUrl)) {
+ requestOptions.url = baseUrl.replace(GHES_V3_SUFFIX_REGEX, "/api/graphql");
+ }
+ return request2(requestOptions).then((response) => {
+ if (response.data.errors) {
+ const headers = {};
+ for (const key of Object.keys(response.headers)) {
+ headers[key] = response.headers[key];
+ }
+ throw new GraphqlResponseError(
+ requestOptions,
+ headers,
+ response.data
+ );
+ }
+ return response.data.data;
+ });
+}
+
+// pkg/dist-src/with-defaults.js
+function withDefaults(request2, newDefaults) {
+ const newRequest = request2.defaults(newDefaults);
+ const newApi = (query, options) => {
+ return graphql(newRequest, query, options);
+ };
+ return Object.assign(newApi, {
+ defaults: withDefaults.bind(null, newRequest),
+ endpoint: newRequest.endpoint
+ });
+}
+
+// pkg/dist-src/index.js
+var graphql2 = withDefaults(import_request3.request, {
+ headers: {
+ "user-agent": `octokit-graphql.js/${VERSION} ${(0, import_universal_user_agent.getUserAgent)()}`
+ },
+ method: "POST",
+ url: "/graphql"
+});
+function withCustomRequest(customRequest) {
+ return withDefaults(customRequest, {
+ method: "POST",
+ url: "/graphql"
+ });
+}
+// Annotate the CommonJS export names for ESM import in node:
+0 && (0);
+
+
+/***/ }),
+
+/***/ 64193:
+/***/ ((module) => {
+
+"use strict";
+
+var __defProp = Object.defineProperty;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __export = (target, all) => {
+ for (var name in all)
+ __defProp(target, name, { get: all[name], enumerable: true });
+};
+var __copyProps = (to, from, except, desc) => {
+ if (from && typeof from === "object" || typeof from === "function") {
+ for (let key of __getOwnPropNames(from))
+ if (!__hasOwnProp.call(to, key) && key !== except)
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+ }
+ return to;
+};
+var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+
+// pkg/dist-src/index.js
+var dist_src_exports = {};
+__export(dist_src_exports, {
+ composePaginateRest: () => composePaginateRest,
+ isPaginatingEndpoint: () => isPaginatingEndpoint,
+ paginateRest: () => paginateRest,
+ paginatingEndpoints: () => paginatingEndpoints
+});
+module.exports = __toCommonJS(dist_src_exports);
+
+// pkg/dist-src/version.js
+var VERSION = "9.0.0";
+
+// pkg/dist-src/normalize-paginated-list-response.js
+function normalizePaginatedListResponse(response) {
+ if (!response.data) {
+ return {
+ ...response,
+ data: []
+ };
+ }
+ const responseNeedsNormalization = "total_count" in response.data && !("url" in response.data);
+ if (!responseNeedsNormalization)
+ return response;
+ const incompleteResults = response.data.incomplete_results;
+ const repositorySelection = response.data.repository_selection;
+ const totalCount = response.data.total_count;
+ delete response.data.incomplete_results;
+ delete response.data.repository_selection;
+ delete response.data.total_count;
+ const namespaceKey = Object.keys(response.data)[0];
+ const data = response.data[namespaceKey];
+ response.data = data;
+ if (typeof incompleteResults !== "undefined") {
+ response.data.incomplete_results = incompleteResults;
+ }
+ if (typeof repositorySelection !== "undefined") {
+ response.data.repository_selection = repositorySelection;
+ }
+ response.data.total_count = totalCount;
+ return response;
+}
+
+// pkg/dist-src/iterator.js
+function iterator(octokit, route, parameters) {
+ const options = typeof route === "function" ? route.endpoint(parameters) : octokit.request.endpoint(route, parameters);
+ const requestMethod = typeof route === "function" ? route : octokit.request;
+ const method = options.method;
+ const headers = options.headers;
+ let url = options.url;
+ return {
+ [Symbol.asyncIterator]: () => ({
+ async next() {
+ if (!url)
+ return { done: true };
+ try {
+ const response = await requestMethod({ method, url, headers });
+ const normalizedResponse = normalizePaginatedListResponse(response);
+ url = ((normalizedResponse.headers.link || "").match(
+ /<([^>]+)>;\s*rel="next"/
+ ) || [])[1];
+ return { value: normalizedResponse };
+ } catch (error) {
+ if (error.status !== 409)
+ throw error;
+ url = "";
+ return {
+ value: {
+ status: 200,
+ headers: {},
+ data: []
+ }
+ };
+ }
+ }
+ })
+ };
+}
+
+// pkg/dist-src/paginate.js
+function paginate(octokit, route, parameters, mapFn) {
+ if (typeof parameters === "function") {
+ mapFn = parameters;
+ parameters = void 0;
+ }
+ return gather(
+ octokit,
+ [],
+ iterator(octokit, route, parameters)[Symbol.asyncIterator](),
+ mapFn
+ );
+}
+function gather(octokit, results, iterator2, mapFn) {
+ return iterator2.next().then((result) => {
+ if (result.done) {
+ return results;
+ }
+ let earlyExit = false;
+ function done() {
+ earlyExit = true;
+ }
+ results = results.concat(
+ mapFn ? mapFn(result.value, done) : result.value.data
+ );
+ if (earlyExit) {
+ return results;
+ }
+ return gather(octokit, results, iterator2, mapFn);
+ });
+}
+
+// pkg/dist-src/compose-paginate.js
+var composePaginateRest = Object.assign(paginate, {
+ iterator
+});
+
+// pkg/dist-src/generated/paginating-endpoints.js
+var paginatingEndpoints = [
+ "GET /advisories",
+ "GET /app/hook/deliveries",
+ "GET /app/installation-requests",
+ "GET /app/installations",
+ "GET /assignments/{assignment_id}/accepted_assignments",
+ "GET /classrooms",
+ "GET /classrooms/{classroom_id}/assignments",
+ "GET /enterprises/{enterprise}/dependabot/alerts",
+ "GET /enterprises/{enterprise}/secret-scanning/alerts",
+ "GET /events",
+ "GET /gists",
+ "GET /gists/public",
+ "GET /gists/starred",
+ "GET /gists/{gist_id}/comments",
+ "GET /gists/{gist_id}/commits",
+ "GET /gists/{gist_id}/forks",
+ "GET /installation/repositories",
+ "GET /issues",
+ "GET /licenses",
+ "GET /marketplace_listing/plans",
+ "GET /marketplace_listing/plans/{plan_id}/accounts",
+ "GET /marketplace_listing/stubbed/plans",
+ "GET /marketplace_listing/stubbed/plans/{plan_id}/accounts",
+ "GET /networks/{owner}/{repo}/events",
+ "GET /notifications",
+ "GET /organizations",
+ "GET /orgs/{org}/actions/cache/usage-by-repository",
+ "GET /orgs/{org}/actions/permissions/repositories",
+ "GET /orgs/{org}/actions/runners",
+ "GET /orgs/{org}/actions/secrets",
+ "GET /orgs/{org}/actions/secrets/{secret_name}/repositories",
+ "GET /orgs/{org}/actions/variables",
+ "GET /orgs/{org}/actions/variables/{name}/repositories",
+ "GET /orgs/{org}/blocks",
+ "GET /orgs/{org}/code-scanning/alerts",
+ "GET /orgs/{org}/codespaces",
+ "GET /orgs/{org}/codespaces/secrets",
+ "GET /orgs/{org}/codespaces/secrets/{secret_name}/repositories",
+ "GET /orgs/{org}/copilot/billing/seats",
+ "GET /orgs/{org}/dependabot/alerts",
+ "GET /orgs/{org}/dependabot/secrets",
+ "GET /orgs/{org}/dependabot/secrets/{secret_name}/repositories",
+ "GET /orgs/{org}/events",
+ "GET /orgs/{org}/failed_invitations",
+ "GET /orgs/{org}/hooks",
+ "GET /orgs/{org}/hooks/{hook_id}/deliveries",
+ "GET /orgs/{org}/installations",
+ "GET /orgs/{org}/invitations",
+ "GET /orgs/{org}/invitations/{invitation_id}/teams",
+ "GET /orgs/{org}/issues",
+ "GET /orgs/{org}/members",
+ "GET /orgs/{org}/members/{username}/codespaces",
+ "GET /orgs/{org}/migrations",
+ "GET /orgs/{org}/migrations/{migration_id}/repositories",
+ "GET /orgs/{org}/outside_collaborators",
+ "GET /orgs/{org}/packages",
+ "GET /orgs/{org}/packages/{package_type}/{package_name}/versions",
+ "GET /orgs/{org}/personal-access-token-requests",
+ "GET /orgs/{org}/personal-access-token-requests/{pat_request_id}/repositories",
+ "GET /orgs/{org}/personal-access-tokens",
+ "GET /orgs/{org}/personal-access-tokens/{pat_id}/repositories",
+ "GET /orgs/{org}/projects",
+ "GET /orgs/{org}/public_members",
+ "GET /orgs/{org}/repos",
+ "GET /orgs/{org}/rulesets",
+ "GET /orgs/{org}/secret-scanning/alerts",
+ "GET /orgs/{org}/security-advisories",
+ "GET /orgs/{org}/teams",
+ "GET /orgs/{org}/teams/{team_slug}/discussions",
+ "GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments",
+ "GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions",
+ "GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions",
+ "GET /orgs/{org}/teams/{team_slug}/invitations",
+ "GET /orgs/{org}/teams/{team_slug}/members",
+ "GET /orgs/{org}/teams/{team_slug}/projects",
+ "GET /orgs/{org}/teams/{team_slug}/repos",
+ "GET /orgs/{org}/teams/{team_slug}/teams",
+ "GET /projects/columns/{column_id}/cards",
+ "GET /projects/{project_id}/collaborators",
+ "GET /projects/{project_id}/columns",
+ "GET /repos/{owner}/{repo}/actions/artifacts",
+ "GET /repos/{owner}/{repo}/actions/caches",
+ "GET /repos/{owner}/{repo}/actions/organization-secrets",
+ "GET /repos/{owner}/{repo}/actions/organization-variables",
+ "GET /repos/{owner}/{repo}/actions/runners",
+ "GET /repos/{owner}/{repo}/actions/runs",
+ "GET /repos/{owner}/{repo}/actions/runs/{run_id}/artifacts",
+ "GET /repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}/jobs",
+ "GET /repos/{owner}/{repo}/actions/runs/{run_id}/jobs",
+ "GET /repos/{owner}/{repo}/actions/secrets",
+ "GET /repos/{owner}/{repo}/actions/variables",
+ "GET /repos/{owner}/{repo}/actions/workflows",
+ "GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}/runs",
+ "GET /repos/{owner}/{repo}/activity",
+ "GET /repos/{owner}/{repo}/assignees",
+ "GET /repos/{owner}/{repo}/branches",
+ "GET /repos/{owner}/{repo}/check-runs/{check_run_id}/annotations",
+ "GET /repos/{owner}/{repo}/check-suites/{check_suite_id}/check-runs",
+ "GET /repos/{owner}/{repo}/code-scanning/alerts",
+ "GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/instances",
+ "GET /repos/{owner}/{repo}/code-scanning/analyses",
+ "GET /repos/{owner}/{repo}/codespaces",
+ "GET /repos/{owner}/{repo}/codespaces/devcontainers",
+ "GET /repos/{owner}/{repo}/codespaces/secrets",
+ "GET /repos/{owner}/{repo}/collaborators",
+ "GET /repos/{owner}/{repo}/comments",
+ "GET /repos/{owner}/{repo}/comments/{comment_id}/reactions",
+ "GET /repos/{owner}/{repo}/commits",
+ "GET /repos/{owner}/{repo}/commits/{commit_sha}/comments",
+ "GET /repos/{owner}/{repo}/commits/{commit_sha}/pulls",
+ "GET /repos/{owner}/{repo}/commits/{ref}/check-runs",
+ "GET /repos/{owner}/{repo}/commits/{ref}/check-suites",
+ "GET /repos/{owner}/{repo}/commits/{ref}/status",
+ "GET /repos/{owner}/{repo}/commits/{ref}/statuses",
+ "GET /repos/{owner}/{repo}/contributors",
+ "GET /repos/{owner}/{repo}/dependabot/alerts",
+ "GET /repos/{owner}/{repo}/dependabot/secrets",
+ "GET /repos/{owner}/{repo}/deployments",
+ "GET /repos/{owner}/{repo}/deployments/{deployment_id}/statuses",
+ "GET /repos/{owner}/{repo}/environments",
+ "GET /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies",
+ "GET /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules/apps",
+ "GET /repos/{owner}/{repo}/events",
+ "GET /repos/{owner}/{repo}/forks",
+ "GET /repos/{owner}/{repo}/hooks",
+ "GET /repos/{owner}/{repo}/hooks/{hook_id}/deliveries",
+ "GET /repos/{owner}/{repo}/invitations",
+ "GET /repos/{owner}/{repo}/issues",
+ "GET /repos/{owner}/{repo}/issues/comments",
+ "GET /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions",
+ "GET /repos/{owner}/{repo}/issues/events",
+ "GET /repos/{owner}/{repo}/issues/{issue_number}/comments",
+ "GET /repos/{owner}/{repo}/issues/{issue_number}/events",
+ "GET /repos/{owner}/{repo}/issues/{issue_number}/labels",
+ "GET /repos/{owner}/{repo}/issues/{issue_number}/reactions",
+ "GET /repos/{owner}/{repo}/issues/{issue_number}/timeline",
+ "GET /repos/{owner}/{repo}/keys",
+ "GET /repos/{owner}/{repo}/labels",
+ "GET /repos/{owner}/{repo}/milestones",
+ "GET /repos/{owner}/{repo}/milestones/{milestone_number}/labels",
+ "GET /repos/{owner}/{repo}/notifications",
+ "GET /repos/{owner}/{repo}/pages/builds",
+ "GET /repos/{owner}/{repo}/projects",
+ "GET /repos/{owner}/{repo}/pulls",
+ "GET /repos/{owner}/{repo}/pulls/comments",
+ "GET /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions",
+ "GET /repos/{owner}/{repo}/pulls/{pull_number}/comments",
+ "GET /repos/{owner}/{repo}/pulls/{pull_number}/commits",
+ "GET /repos/{owner}/{repo}/pulls/{pull_number}/files",
+ "GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews",
+ "GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/comments",
+ "GET /repos/{owner}/{repo}/releases",
+ "GET /repos/{owner}/{repo}/releases/{release_id}/assets",
+ "GET /repos/{owner}/{repo}/releases/{release_id}/reactions",
+ "GET /repos/{owner}/{repo}/rules/branches/{branch}",
+ "GET /repos/{owner}/{repo}/rulesets",
+ "GET /repos/{owner}/{repo}/secret-scanning/alerts",
+ "GET /repos/{owner}/{repo}/secret-scanning/alerts/{alert_number}/locations",
+ "GET /repos/{owner}/{repo}/security-advisories",
+ "GET /repos/{owner}/{repo}/stargazers",
+ "GET /repos/{owner}/{repo}/subscribers",
+ "GET /repos/{owner}/{repo}/tags",
+ "GET /repos/{owner}/{repo}/teams",
+ "GET /repos/{owner}/{repo}/topics",
+ "GET /repositories",
+ "GET /repositories/{repository_id}/environments/{environment_name}/secrets",
+ "GET /repositories/{repository_id}/environments/{environment_name}/variables",
+ "GET /search/code",
+ "GET /search/commits",
+ "GET /search/issues",
+ "GET /search/labels",
+ "GET /search/repositories",
+ "GET /search/topics",
+ "GET /search/users",
+ "GET /teams/{team_id}/discussions",
+ "GET /teams/{team_id}/discussions/{discussion_number}/comments",
+ "GET /teams/{team_id}/discussions/{discussion_number}/comments/{comment_number}/reactions",
+ "GET /teams/{team_id}/discussions/{discussion_number}/reactions",
+ "GET /teams/{team_id}/invitations",
+ "GET /teams/{team_id}/members",
+ "GET /teams/{team_id}/projects",
+ "GET /teams/{team_id}/repos",
+ "GET /teams/{team_id}/teams",
+ "GET /user/blocks",
+ "GET /user/codespaces",
+ "GET /user/codespaces/secrets",
+ "GET /user/emails",
+ "GET /user/followers",
+ "GET /user/following",
+ "GET /user/gpg_keys",
+ "GET /user/installations",
+ "GET /user/installations/{installation_id}/repositories",
+ "GET /user/issues",
+ "GET /user/keys",
+ "GET /user/marketplace_purchases",
+ "GET /user/marketplace_purchases/stubbed",
+ "GET /user/memberships/orgs",
+ "GET /user/migrations",
+ "GET /user/migrations/{migration_id}/repositories",
+ "GET /user/orgs",
+ "GET /user/packages",
+ "GET /user/packages/{package_type}/{package_name}/versions",
+ "GET /user/public_emails",
+ "GET /user/repos",
+ "GET /user/repository_invitations",
+ "GET /user/social_accounts",
+ "GET /user/ssh_signing_keys",
+ "GET /user/starred",
+ "GET /user/subscriptions",
+ "GET /user/teams",
+ "GET /users",
+ "GET /users/{username}/events",
+ "GET /users/{username}/events/orgs/{org}",
+ "GET /users/{username}/events/public",
+ "GET /users/{username}/followers",
+ "GET /users/{username}/following",
+ "GET /users/{username}/gists",
+ "GET /users/{username}/gpg_keys",
+ "GET /users/{username}/keys",
+ "GET /users/{username}/orgs",
+ "GET /users/{username}/packages",
+ "GET /users/{username}/projects",
+ "GET /users/{username}/received_events",
+ "GET /users/{username}/received_events/public",
+ "GET /users/{username}/repos",
+ "GET /users/{username}/social_accounts",
+ "GET /users/{username}/ssh_signing_keys",
+ "GET /users/{username}/starred",
+ "GET /users/{username}/subscriptions"
+];
+
+// pkg/dist-src/paginating-endpoints.js
+function isPaginatingEndpoint(arg) {
+ if (typeof arg === "string") {
+ return paginatingEndpoints.includes(arg);
+ } else {
+ return false;
+ }
+}
+
+// pkg/dist-src/index.js
+function paginateRest(octokit) {
+ return {
+ paginate: Object.assign(paginate.bind(null, octokit), {
+ iterator: iterator.bind(null, octokit)
+ })
+ };
+}
+paginateRest.VERSION = VERSION;
+// Annotate the CommonJS export names for ESM import in node:
+0 && (0);
+
+
+/***/ }),
+
+/***/ 83044:
+/***/ ((module) => {
+
+"use strict";
+
+var __defProp = Object.defineProperty;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __export = (target, all) => {
+ for (var name in all)
+ __defProp(target, name, { get: all[name], enumerable: true });
+};
+var __copyProps = (to, from, except, desc) => {
+ if (from && typeof from === "object" || typeof from === "function") {
+ for (let key of __getOwnPropNames(from))
+ if (!__hasOwnProp.call(to, key) && key !== except)
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+ }
+ return to;
+};
+var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+
+// pkg/dist-src/index.js
+var dist_src_exports = {};
+__export(dist_src_exports, {
+ legacyRestEndpointMethods: () => legacyRestEndpointMethods,
+ restEndpointMethods: () => restEndpointMethods
+});
+module.exports = __toCommonJS(dist_src_exports);
+
+// pkg/dist-src/version.js
+var VERSION = "10.0.1";
+
+// pkg/dist-src/generated/endpoints.js
+var Endpoints = {
+ actions: {
+ addCustomLabelsToSelfHostedRunnerForOrg: [
+ "POST /orgs/{org}/actions/runners/{runner_id}/labels"
+ ],
+ addCustomLabelsToSelfHostedRunnerForRepo: [
+ "POST /repos/{owner}/{repo}/actions/runners/{runner_id}/labels"
+ ],
+ addSelectedRepoToOrgSecret: [
+ "PUT /orgs/{org}/actions/secrets/{secret_name}/repositories/{repository_id}"
+ ],
+ addSelectedRepoToOrgVariable: [
+ "PUT /orgs/{org}/actions/variables/{name}/repositories/{repository_id}"
+ ],
+ approveWorkflowRun: [
+ "POST /repos/{owner}/{repo}/actions/runs/{run_id}/approve"
+ ],
+ cancelWorkflowRun: [
+ "POST /repos/{owner}/{repo}/actions/runs/{run_id}/cancel"
+ ],
+ createEnvironmentVariable: [
+ "POST /repositories/{repository_id}/environments/{environment_name}/variables"
+ ],
+ createOrUpdateEnvironmentSecret: [
+ "PUT /repositories/{repository_id}/environments/{environment_name}/secrets/{secret_name}"
+ ],
+ createOrUpdateOrgSecret: ["PUT /orgs/{org}/actions/secrets/{secret_name}"],
+ createOrUpdateRepoSecret: [
+ "PUT /repos/{owner}/{repo}/actions/secrets/{secret_name}"
+ ],
+ createOrgVariable: ["POST /orgs/{org}/actions/variables"],
+ createRegistrationTokenForOrg: [
+ "POST /orgs/{org}/actions/runners/registration-token"
+ ],
+ createRegistrationTokenForRepo: [
+ "POST /repos/{owner}/{repo}/actions/runners/registration-token"
+ ],
+ createRemoveTokenForOrg: ["POST /orgs/{org}/actions/runners/remove-token"],
+ createRemoveTokenForRepo: [
+ "POST /repos/{owner}/{repo}/actions/runners/remove-token"
+ ],
+ createRepoVariable: ["POST /repos/{owner}/{repo}/actions/variables"],
+ createWorkflowDispatch: [
+ "POST /repos/{owner}/{repo}/actions/workflows/{workflow_id}/dispatches"
+ ],
+ deleteActionsCacheById: [
+ "DELETE /repos/{owner}/{repo}/actions/caches/{cache_id}"
+ ],
+ deleteActionsCacheByKey: [
+ "DELETE /repos/{owner}/{repo}/actions/caches{?key,ref}"
+ ],
+ deleteArtifact: [
+ "DELETE /repos/{owner}/{repo}/actions/artifacts/{artifact_id}"
+ ],
+ deleteEnvironmentSecret: [
+ "DELETE /repositories/{repository_id}/environments/{environment_name}/secrets/{secret_name}"
+ ],
+ deleteEnvironmentVariable: [
+ "DELETE /repositories/{repository_id}/environments/{environment_name}/variables/{name}"
+ ],
+ deleteOrgSecret: ["DELETE /orgs/{org}/actions/secrets/{secret_name}"],
+ deleteOrgVariable: ["DELETE /orgs/{org}/actions/variables/{name}"],
+ deleteRepoSecret: [
+ "DELETE /repos/{owner}/{repo}/actions/secrets/{secret_name}"
+ ],
+ deleteRepoVariable: [
+ "DELETE /repos/{owner}/{repo}/actions/variables/{name}"
+ ],
+ deleteSelfHostedRunnerFromOrg: [
+ "DELETE /orgs/{org}/actions/runners/{runner_id}"
+ ],
+ deleteSelfHostedRunnerFromRepo: [
+ "DELETE /repos/{owner}/{repo}/actions/runners/{runner_id}"
+ ],
+ deleteWorkflowRun: ["DELETE /repos/{owner}/{repo}/actions/runs/{run_id}"],
+ deleteWorkflowRunLogs: [
+ "DELETE /repos/{owner}/{repo}/actions/runs/{run_id}/logs"
+ ],
+ disableSelectedRepositoryGithubActionsOrganization: [
+ "DELETE /orgs/{org}/actions/permissions/repositories/{repository_id}"
+ ],
+ disableWorkflow: [
+ "PUT /repos/{owner}/{repo}/actions/workflows/{workflow_id}/disable"
+ ],
+ downloadArtifact: [
+ "GET /repos/{owner}/{repo}/actions/artifacts/{artifact_id}/{archive_format}"
+ ],
+ downloadJobLogsForWorkflowRun: [
+ "GET /repos/{owner}/{repo}/actions/jobs/{job_id}/logs"
+ ],
+ downloadWorkflowRunAttemptLogs: [
+ "GET /repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}/logs"
+ ],
+ downloadWorkflowRunLogs: [
+ "GET /repos/{owner}/{repo}/actions/runs/{run_id}/logs"
+ ],
+ enableSelectedRepositoryGithubActionsOrganization: [
+ "PUT /orgs/{org}/actions/permissions/repositories/{repository_id}"
+ ],
+ enableWorkflow: [
+ "PUT /repos/{owner}/{repo}/actions/workflows/{workflow_id}/enable"
+ ],
+ generateRunnerJitconfigForOrg: [
+ "POST /orgs/{org}/actions/runners/generate-jitconfig"
+ ],
+ generateRunnerJitconfigForRepo: [
+ "POST /repos/{owner}/{repo}/actions/runners/generate-jitconfig"
+ ],
+ getActionsCacheList: ["GET /repos/{owner}/{repo}/actions/caches"],
+ getActionsCacheUsage: ["GET /repos/{owner}/{repo}/actions/cache/usage"],
+ getActionsCacheUsageByRepoForOrg: [
+ "GET /orgs/{org}/actions/cache/usage-by-repository"
+ ],
+ getActionsCacheUsageForOrg: ["GET /orgs/{org}/actions/cache/usage"],
+ getAllowedActionsOrganization: [
+ "GET /orgs/{org}/actions/permissions/selected-actions"
+ ],
+ getAllowedActionsRepository: [
+ "GET /repos/{owner}/{repo}/actions/permissions/selected-actions"
+ ],
+ getArtifact: ["GET /repos/{owner}/{repo}/actions/artifacts/{artifact_id}"],
+ getEnvironmentPublicKey: [
+ "GET /repositories/{repository_id}/environments/{environment_name}/secrets/public-key"
+ ],
+ getEnvironmentSecret: [
+ "GET /repositories/{repository_id}/environments/{environment_name}/secrets/{secret_name}"
+ ],
+ getEnvironmentVariable: [
+ "GET /repositories/{repository_id}/environments/{environment_name}/variables/{name}"
+ ],
+ getGithubActionsDefaultWorkflowPermissionsOrganization: [
+ "GET /orgs/{org}/actions/permissions/workflow"
+ ],
+ getGithubActionsDefaultWorkflowPermissionsRepository: [
+ "GET /repos/{owner}/{repo}/actions/permissions/workflow"
+ ],
+ getGithubActionsPermissionsOrganization: [
+ "GET /orgs/{org}/actions/permissions"
+ ],
+ getGithubActionsPermissionsRepository: [
+ "GET /repos/{owner}/{repo}/actions/permissions"
+ ],
+ getJobForWorkflowRun: ["GET /repos/{owner}/{repo}/actions/jobs/{job_id}"],
+ getOrgPublicKey: ["GET /orgs/{org}/actions/secrets/public-key"],
+ getOrgSecret: ["GET /orgs/{org}/actions/secrets/{secret_name}"],
+ getOrgVariable: ["GET /orgs/{org}/actions/variables/{name}"],
+ getPendingDeploymentsForRun: [
+ "GET /repos/{owner}/{repo}/actions/runs/{run_id}/pending_deployments"
+ ],
+ getRepoPermissions: [
+ "GET /repos/{owner}/{repo}/actions/permissions",
+ {},
+ { renamed: ["actions", "getGithubActionsPermissionsRepository"] }
+ ],
+ getRepoPublicKey: ["GET /repos/{owner}/{repo}/actions/secrets/public-key"],
+ getRepoSecret: ["GET /repos/{owner}/{repo}/actions/secrets/{secret_name}"],
+ getRepoVariable: ["GET /repos/{owner}/{repo}/actions/variables/{name}"],
+ getReviewsForRun: [
+ "GET /repos/{owner}/{repo}/actions/runs/{run_id}/approvals"
+ ],
+ getSelfHostedRunnerForOrg: ["GET /orgs/{org}/actions/runners/{runner_id}"],
+ getSelfHostedRunnerForRepo: [
+ "GET /repos/{owner}/{repo}/actions/runners/{runner_id}"
+ ],
+ getWorkflow: ["GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}"],
+ getWorkflowAccessToRepository: [
+ "GET /repos/{owner}/{repo}/actions/permissions/access"
+ ],
+ getWorkflowRun: ["GET /repos/{owner}/{repo}/actions/runs/{run_id}"],
+ getWorkflowRunAttempt: [
+ "GET /repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}"
+ ],
+ getWorkflowRunUsage: [
+ "GET /repos/{owner}/{repo}/actions/runs/{run_id}/timing"
+ ],
+ getWorkflowUsage: [
+ "GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}/timing"
+ ],
+ listArtifactsForRepo: ["GET /repos/{owner}/{repo}/actions/artifacts"],
+ listEnvironmentSecrets: [
+ "GET /repositories/{repository_id}/environments/{environment_name}/secrets"
+ ],
+ listEnvironmentVariables: [
+ "GET /repositories/{repository_id}/environments/{environment_name}/variables"
+ ],
+ listJobsForWorkflowRun: [
+ "GET /repos/{owner}/{repo}/actions/runs/{run_id}/jobs"
+ ],
+ listJobsForWorkflowRunAttempt: [
+ "GET /repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}/jobs"
+ ],
+ listLabelsForSelfHostedRunnerForOrg: [
+ "GET /orgs/{org}/actions/runners/{runner_id}/labels"
+ ],
+ listLabelsForSelfHostedRunnerForRepo: [
+ "GET /repos/{owner}/{repo}/actions/runners/{runner_id}/labels"
+ ],
+ listOrgSecrets: ["GET /orgs/{org}/actions/secrets"],
+ listOrgVariables: ["GET /orgs/{org}/actions/variables"],
+ listRepoOrganizationSecrets: [
+ "GET /repos/{owner}/{repo}/actions/organization-secrets"
+ ],
+ listRepoOrganizationVariables: [
+ "GET /repos/{owner}/{repo}/actions/organization-variables"
+ ],
+ listRepoSecrets: ["GET /repos/{owner}/{repo}/actions/secrets"],
+ listRepoVariables: ["GET /repos/{owner}/{repo}/actions/variables"],
+ listRepoWorkflows: ["GET /repos/{owner}/{repo}/actions/workflows"],
+ listRunnerApplicationsForOrg: ["GET /orgs/{org}/actions/runners/downloads"],
+ listRunnerApplicationsForRepo: [
+ "GET /repos/{owner}/{repo}/actions/runners/downloads"
+ ],
+ listSelectedReposForOrgSecret: [
+ "GET /orgs/{org}/actions/secrets/{secret_name}/repositories"
+ ],
+ listSelectedReposForOrgVariable: [
+ "GET /orgs/{org}/actions/variables/{name}/repositories"
+ ],
+ listSelectedRepositoriesEnabledGithubActionsOrganization: [
+ "GET /orgs/{org}/actions/permissions/repositories"
+ ],
+ listSelfHostedRunnersForOrg: ["GET /orgs/{org}/actions/runners"],
+ listSelfHostedRunnersForRepo: ["GET /repos/{owner}/{repo}/actions/runners"],
+ listWorkflowRunArtifacts: [
+ "GET /repos/{owner}/{repo}/actions/runs/{run_id}/artifacts"
+ ],
+ listWorkflowRuns: [
+ "GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}/runs"
+ ],
+ listWorkflowRunsForRepo: ["GET /repos/{owner}/{repo}/actions/runs"],
+ reRunJobForWorkflowRun: [
+ "POST /repos/{owner}/{repo}/actions/jobs/{job_id}/rerun"
+ ],
+ reRunWorkflow: ["POST /repos/{owner}/{repo}/actions/runs/{run_id}/rerun"],
+ reRunWorkflowFailedJobs: [
+ "POST /repos/{owner}/{repo}/actions/runs/{run_id}/rerun-failed-jobs"
+ ],
+ removeAllCustomLabelsFromSelfHostedRunnerForOrg: [
+ "DELETE /orgs/{org}/actions/runners/{runner_id}/labels"
+ ],
+ removeAllCustomLabelsFromSelfHostedRunnerForRepo: [
+ "DELETE /repos/{owner}/{repo}/actions/runners/{runner_id}/labels"
+ ],
+ removeCustomLabelFromSelfHostedRunnerForOrg: [
+ "DELETE /orgs/{org}/actions/runners/{runner_id}/labels/{name}"
+ ],
+ removeCustomLabelFromSelfHostedRunnerForRepo: [
+ "DELETE /repos/{owner}/{repo}/actions/runners/{runner_id}/labels/{name}"
+ ],
+ removeSelectedRepoFromOrgSecret: [
+ "DELETE /orgs/{org}/actions/secrets/{secret_name}/repositories/{repository_id}"
+ ],
+ removeSelectedRepoFromOrgVariable: [
+ "DELETE /orgs/{org}/actions/variables/{name}/repositories/{repository_id}"
+ ],
+ reviewCustomGatesForRun: [
+ "POST /repos/{owner}/{repo}/actions/runs/{run_id}/deployment_protection_rule"
+ ],
+ reviewPendingDeploymentsForRun: [
+ "POST /repos/{owner}/{repo}/actions/runs/{run_id}/pending_deployments"
+ ],
+ setAllowedActionsOrganization: [
+ "PUT /orgs/{org}/actions/permissions/selected-actions"
+ ],
+ setAllowedActionsRepository: [
+ "PUT /repos/{owner}/{repo}/actions/permissions/selected-actions"
+ ],
+ setCustomLabelsForSelfHostedRunnerForOrg: [
+ "PUT /orgs/{org}/actions/runners/{runner_id}/labels"
+ ],
+ setCustomLabelsForSelfHostedRunnerForRepo: [
+ "PUT /repos/{owner}/{repo}/actions/runners/{runner_id}/labels"
+ ],
+ setGithubActionsDefaultWorkflowPermissionsOrganization: [
+ "PUT /orgs/{org}/actions/permissions/workflow"
+ ],
+ setGithubActionsDefaultWorkflowPermissionsRepository: [
+ "PUT /repos/{owner}/{repo}/actions/permissions/workflow"
+ ],
+ setGithubActionsPermissionsOrganization: [
+ "PUT /orgs/{org}/actions/permissions"
+ ],
+ setGithubActionsPermissionsRepository: [
+ "PUT /repos/{owner}/{repo}/actions/permissions"
+ ],
+ setSelectedReposForOrgSecret: [
+ "PUT /orgs/{org}/actions/secrets/{secret_name}/repositories"
+ ],
+ setSelectedReposForOrgVariable: [
+ "PUT /orgs/{org}/actions/variables/{name}/repositories"
+ ],
+ setSelectedRepositoriesEnabledGithubActionsOrganization: [
+ "PUT /orgs/{org}/actions/permissions/repositories"
+ ],
+ setWorkflowAccessToRepository: [
+ "PUT /repos/{owner}/{repo}/actions/permissions/access"
+ ],
+ updateEnvironmentVariable: [
+ "PATCH /repositories/{repository_id}/environments/{environment_name}/variables/{name}"
+ ],
+ updateOrgVariable: ["PATCH /orgs/{org}/actions/variables/{name}"],
+ updateRepoVariable: [
+ "PATCH /repos/{owner}/{repo}/actions/variables/{name}"
+ ]
+ },
+ activity: {
+ checkRepoIsStarredByAuthenticatedUser: ["GET /user/starred/{owner}/{repo}"],
+ deleteRepoSubscription: ["DELETE /repos/{owner}/{repo}/subscription"],
+ deleteThreadSubscription: [
+ "DELETE /notifications/threads/{thread_id}/subscription"
+ ],
+ getFeeds: ["GET /feeds"],
+ getRepoSubscription: ["GET /repos/{owner}/{repo}/subscription"],
+ getThread: ["GET /notifications/threads/{thread_id}"],
+ getThreadSubscriptionForAuthenticatedUser: [
+ "GET /notifications/threads/{thread_id}/subscription"
+ ],
+ listEventsForAuthenticatedUser: ["GET /users/{username}/events"],
+ listNotificationsForAuthenticatedUser: ["GET /notifications"],
+ listOrgEventsForAuthenticatedUser: [
+ "GET /users/{username}/events/orgs/{org}"
+ ],
+ listPublicEvents: ["GET /events"],
+ listPublicEventsForRepoNetwork: ["GET /networks/{owner}/{repo}/events"],
+ listPublicEventsForUser: ["GET /users/{username}/events/public"],
+ listPublicOrgEvents: ["GET /orgs/{org}/events"],
+ listReceivedEventsForUser: ["GET /users/{username}/received_events"],
+ listReceivedPublicEventsForUser: [
+ "GET /users/{username}/received_events/public"
+ ],
+ listRepoEvents: ["GET /repos/{owner}/{repo}/events"],
+ listRepoNotificationsForAuthenticatedUser: [
+ "GET /repos/{owner}/{repo}/notifications"
+ ],
+ listReposStarredByAuthenticatedUser: ["GET /user/starred"],
+ listReposStarredByUser: ["GET /users/{username}/starred"],
+ listReposWatchedByUser: ["GET /users/{username}/subscriptions"],
+ listStargazersForRepo: ["GET /repos/{owner}/{repo}/stargazers"],
+ listWatchedReposForAuthenticatedUser: ["GET /user/subscriptions"],
+ listWatchersForRepo: ["GET /repos/{owner}/{repo}/subscribers"],
+ markNotificationsAsRead: ["PUT /notifications"],
+ markRepoNotificationsAsRead: ["PUT /repos/{owner}/{repo}/notifications"],
+ markThreadAsRead: ["PATCH /notifications/threads/{thread_id}"],
+ setRepoSubscription: ["PUT /repos/{owner}/{repo}/subscription"],
+ setThreadSubscription: [
+ "PUT /notifications/threads/{thread_id}/subscription"
+ ],
+ starRepoForAuthenticatedUser: ["PUT /user/starred/{owner}/{repo}"],
+ unstarRepoForAuthenticatedUser: ["DELETE /user/starred/{owner}/{repo}"]
+ },
+ apps: {
+ addRepoToInstallation: [
+ "PUT /user/installations/{installation_id}/repositories/{repository_id}",
+ {},
+ { renamed: ["apps", "addRepoToInstallationForAuthenticatedUser"] }
+ ],
+ addRepoToInstallationForAuthenticatedUser: [
+ "PUT /user/installations/{installation_id}/repositories/{repository_id}"
+ ],
+ checkToken: ["POST /applications/{client_id}/token"],
+ createFromManifest: ["POST /app-manifests/{code}/conversions"],
+ createInstallationAccessToken: [
+ "POST /app/installations/{installation_id}/access_tokens"
+ ],
+ deleteAuthorization: ["DELETE /applications/{client_id}/grant"],
+ deleteInstallation: ["DELETE /app/installations/{installation_id}"],
+ deleteToken: ["DELETE /applications/{client_id}/token"],
+ getAuthenticated: ["GET /app"],
+ getBySlug: ["GET /apps/{app_slug}"],
+ getInstallation: ["GET /app/installations/{installation_id}"],
+ getOrgInstallation: ["GET /orgs/{org}/installation"],
+ getRepoInstallation: ["GET /repos/{owner}/{repo}/installation"],
+ getSubscriptionPlanForAccount: [
+ "GET /marketplace_listing/accounts/{account_id}"
+ ],
+ getSubscriptionPlanForAccountStubbed: [
+ "GET /marketplace_listing/stubbed/accounts/{account_id}"
+ ],
+ getUserInstallation: ["GET /users/{username}/installation"],
+ getWebhookConfigForApp: ["GET /app/hook/config"],
+ getWebhookDelivery: ["GET /app/hook/deliveries/{delivery_id}"],
+ listAccountsForPlan: ["GET /marketplace_listing/plans/{plan_id}/accounts"],
+ listAccountsForPlanStubbed: [
+ "GET /marketplace_listing/stubbed/plans/{plan_id}/accounts"
+ ],
+ listInstallationReposForAuthenticatedUser: [
+ "GET /user/installations/{installation_id}/repositories"
+ ],
+ listInstallationRequestsForAuthenticatedApp: [
+ "GET /app/installation-requests"
+ ],
+ listInstallations: ["GET /app/installations"],
+ listInstallationsForAuthenticatedUser: ["GET /user/installations"],
+ listPlans: ["GET /marketplace_listing/plans"],
+ listPlansStubbed: ["GET /marketplace_listing/stubbed/plans"],
+ listReposAccessibleToInstallation: ["GET /installation/repositories"],
+ listSubscriptionsForAuthenticatedUser: ["GET /user/marketplace_purchases"],
+ listSubscriptionsForAuthenticatedUserStubbed: [
+ "GET /user/marketplace_purchases/stubbed"
+ ],
+ listWebhookDeliveries: ["GET /app/hook/deliveries"],
+ redeliverWebhookDelivery: [
+ "POST /app/hook/deliveries/{delivery_id}/attempts"
+ ],
+ removeRepoFromInstallation: [
+ "DELETE /user/installations/{installation_id}/repositories/{repository_id}",
+ {},
+ { renamed: ["apps", "removeRepoFromInstallationForAuthenticatedUser"] }
+ ],
+ removeRepoFromInstallationForAuthenticatedUser: [
+ "DELETE /user/installations/{installation_id}/repositories/{repository_id}"
+ ],
+ resetToken: ["PATCH /applications/{client_id}/token"],
+ revokeInstallationAccessToken: ["DELETE /installation/token"],
+ scopeToken: ["POST /applications/{client_id}/token/scoped"],
+ suspendInstallation: ["PUT /app/installations/{installation_id}/suspended"],
+ unsuspendInstallation: [
+ "DELETE /app/installations/{installation_id}/suspended"
+ ],
+ updateWebhookConfigForApp: ["PATCH /app/hook/config"]
+ },
+ billing: {
+ getGithubActionsBillingOrg: ["GET /orgs/{org}/settings/billing/actions"],
+ getGithubActionsBillingUser: [
+ "GET /users/{username}/settings/billing/actions"
+ ],
+ getGithubPackagesBillingOrg: ["GET /orgs/{org}/settings/billing/packages"],
+ getGithubPackagesBillingUser: [
+ "GET /users/{username}/settings/billing/packages"
+ ],
+ getSharedStorageBillingOrg: [
+ "GET /orgs/{org}/settings/billing/shared-storage"
+ ],
+ getSharedStorageBillingUser: [
+ "GET /users/{username}/settings/billing/shared-storage"
+ ]
+ },
+ checks: {
+ create: ["POST /repos/{owner}/{repo}/check-runs"],
+ createSuite: ["POST /repos/{owner}/{repo}/check-suites"],
+ get: ["GET /repos/{owner}/{repo}/check-runs/{check_run_id}"],
+ getSuite: ["GET /repos/{owner}/{repo}/check-suites/{check_suite_id}"],
+ listAnnotations: [
+ "GET /repos/{owner}/{repo}/check-runs/{check_run_id}/annotations"
+ ],
+ listForRef: ["GET /repos/{owner}/{repo}/commits/{ref}/check-runs"],
+ listForSuite: [
+ "GET /repos/{owner}/{repo}/check-suites/{check_suite_id}/check-runs"
+ ],
+ listSuitesForRef: ["GET /repos/{owner}/{repo}/commits/{ref}/check-suites"],
+ rerequestRun: [
+ "POST /repos/{owner}/{repo}/check-runs/{check_run_id}/rerequest"
+ ],
+ rerequestSuite: [
+ "POST /repos/{owner}/{repo}/check-suites/{check_suite_id}/rerequest"
+ ],
+ setSuitesPreferences: [
+ "PATCH /repos/{owner}/{repo}/check-suites/preferences"
+ ],
+ update: ["PATCH /repos/{owner}/{repo}/check-runs/{check_run_id}"]
+ },
+ codeScanning: {
+ deleteAnalysis: [
+ "DELETE /repos/{owner}/{repo}/code-scanning/analyses/{analysis_id}{?confirm_delete}"
+ ],
+ getAlert: [
+ "GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}",
+ {},
+ { renamedParameters: { alert_id: "alert_number" } }
+ ],
+ getAnalysis: [
+ "GET /repos/{owner}/{repo}/code-scanning/analyses/{analysis_id}"
+ ],
+ getCodeqlDatabase: [
+ "GET /repos/{owner}/{repo}/code-scanning/codeql/databases/{language}"
+ ],
+ getDefaultSetup: ["GET /repos/{owner}/{repo}/code-scanning/default-setup"],
+ getSarif: ["GET /repos/{owner}/{repo}/code-scanning/sarifs/{sarif_id}"],
+ listAlertInstances: [
+ "GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/instances"
+ ],
+ listAlertsForOrg: ["GET /orgs/{org}/code-scanning/alerts"],
+ listAlertsForRepo: ["GET /repos/{owner}/{repo}/code-scanning/alerts"],
+ listAlertsInstances: [
+ "GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/instances",
+ {},
+ { renamed: ["codeScanning", "listAlertInstances"] }
+ ],
+ listCodeqlDatabases: [
+ "GET /repos/{owner}/{repo}/code-scanning/codeql/databases"
+ ],
+ listRecentAnalyses: ["GET /repos/{owner}/{repo}/code-scanning/analyses"],
+ updateAlert: [
+ "PATCH /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}"
+ ],
+ updateDefaultSetup: [
+ "PATCH /repos/{owner}/{repo}/code-scanning/default-setup"
+ ],
+ uploadSarif: ["POST /repos/{owner}/{repo}/code-scanning/sarifs"]
+ },
+ codesOfConduct: {
+ getAllCodesOfConduct: ["GET /codes_of_conduct"],
+ getConductCode: ["GET /codes_of_conduct/{key}"]
+ },
+ codespaces: {
+ addRepositoryForSecretForAuthenticatedUser: [
+ "PUT /user/codespaces/secrets/{secret_name}/repositories/{repository_id}"
+ ],
+ addSelectedRepoToOrgSecret: [
+ "PUT /orgs/{org}/codespaces/secrets/{secret_name}/repositories/{repository_id}"
+ ],
+ codespaceMachinesForAuthenticatedUser: [
+ "GET /user/codespaces/{codespace_name}/machines"
+ ],
+ createForAuthenticatedUser: ["POST /user/codespaces"],
+ createOrUpdateOrgSecret: [
+ "PUT /orgs/{org}/codespaces/secrets/{secret_name}"
+ ],
+ createOrUpdateRepoSecret: [
+ "PUT /repos/{owner}/{repo}/codespaces/secrets/{secret_name}"
+ ],
+ createOrUpdateSecretForAuthenticatedUser: [
+ "PUT /user/codespaces/secrets/{secret_name}"
+ ],
+ createWithPrForAuthenticatedUser: [
+ "POST /repos/{owner}/{repo}/pulls/{pull_number}/codespaces"
+ ],
+ createWithRepoForAuthenticatedUser: [
+ "POST /repos/{owner}/{repo}/codespaces"
+ ],
+ deleteForAuthenticatedUser: ["DELETE /user/codespaces/{codespace_name}"],
+ deleteFromOrganization: [
+ "DELETE /orgs/{org}/members/{username}/codespaces/{codespace_name}"
+ ],
+ deleteOrgSecret: ["DELETE /orgs/{org}/codespaces/secrets/{secret_name}"],
+ deleteRepoSecret: [
+ "DELETE /repos/{owner}/{repo}/codespaces/secrets/{secret_name}"
+ ],
+ deleteSecretForAuthenticatedUser: [
+ "DELETE /user/codespaces/secrets/{secret_name}"
+ ],
+ exportForAuthenticatedUser: [
+ "POST /user/codespaces/{codespace_name}/exports"
+ ],
+ getCodespacesForUserInOrg: [
+ "GET /orgs/{org}/members/{username}/codespaces"
+ ],
+ getExportDetailsForAuthenticatedUser: [
+ "GET /user/codespaces/{codespace_name}/exports/{export_id}"
+ ],
+ getForAuthenticatedUser: ["GET /user/codespaces/{codespace_name}"],
+ getOrgPublicKey: ["GET /orgs/{org}/codespaces/secrets/public-key"],
+ getOrgSecret: ["GET /orgs/{org}/codespaces/secrets/{secret_name}"],
+ getPublicKeyForAuthenticatedUser: [
+ "GET /user/codespaces/secrets/public-key"
+ ],
+ getRepoPublicKey: [
+ "GET /repos/{owner}/{repo}/codespaces/secrets/public-key"
+ ],
+ getRepoSecret: [
+ "GET /repos/{owner}/{repo}/codespaces/secrets/{secret_name}"
+ ],
+ getSecretForAuthenticatedUser: [
+ "GET /user/codespaces/secrets/{secret_name}"
+ ],
+ listDevcontainersInRepositoryForAuthenticatedUser: [
+ "GET /repos/{owner}/{repo}/codespaces/devcontainers"
+ ],
+ listForAuthenticatedUser: ["GET /user/codespaces"],
+ listInOrganization: [
+ "GET /orgs/{org}/codespaces",
+ {},
+ { renamedParameters: { org_id: "org" } }
+ ],
+ listInRepositoryForAuthenticatedUser: [
+ "GET /repos/{owner}/{repo}/codespaces"
+ ],
+ listOrgSecrets: ["GET /orgs/{org}/codespaces/secrets"],
+ listRepoSecrets: ["GET /repos/{owner}/{repo}/codespaces/secrets"],
+ listRepositoriesForSecretForAuthenticatedUser: [
+ "GET /user/codespaces/secrets/{secret_name}/repositories"
+ ],
+ listSecretsForAuthenticatedUser: ["GET /user/codespaces/secrets"],
+ listSelectedReposForOrgSecret: [
+ "GET /orgs/{org}/codespaces/secrets/{secret_name}/repositories"
+ ],
+ preFlightWithRepoForAuthenticatedUser: [
+ "GET /repos/{owner}/{repo}/codespaces/new"
+ ],
+ publishForAuthenticatedUser: [
+ "POST /user/codespaces/{codespace_name}/publish"
+ ],
+ removeRepositoryForSecretForAuthenticatedUser: [
+ "DELETE /user/codespaces/secrets/{secret_name}/repositories/{repository_id}"
+ ],
+ removeSelectedRepoFromOrgSecret: [
+ "DELETE /orgs/{org}/codespaces/secrets/{secret_name}/repositories/{repository_id}"
+ ],
+ repoMachinesForAuthenticatedUser: [
+ "GET /repos/{owner}/{repo}/codespaces/machines"
+ ],
+ setRepositoriesForSecretForAuthenticatedUser: [
+ "PUT /user/codespaces/secrets/{secret_name}/repositories"
+ ],
+ setSelectedReposForOrgSecret: [
+ "PUT /orgs/{org}/codespaces/secrets/{secret_name}/repositories"
+ ],
+ startForAuthenticatedUser: ["POST /user/codespaces/{codespace_name}/start"],
+ stopForAuthenticatedUser: ["POST /user/codespaces/{codespace_name}/stop"],
+ stopInOrganization: [
+ "POST /orgs/{org}/members/{username}/codespaces/{codespace_name}/stop"
+ ],
+ updateForAuthenticatedUser: ["PATCH /user/codespaces/{codespace_name}"]
+ },
+ copilot: {
+ addCopilotForBusinessSeatsForTeams: [
+ "POST /orgs/{org}/copilot/billing/selected_teams"
+ ],
+ addCopilotForBusinessSeatsForUsers: [
+ "POST /orgs/{org}/copilot/billing/selected_users"
+ ],
+ cancelCopilotSeatAssignmentForTeams: [
+ "DELETE /orgs/{org}/copilot/billing/selected_teams"
+ ],
+ cancelCopilotSeatAssignmentForUsers: [
+ "DELETE /orgs/{org}/copilot/billing/selected_users"
+ ],
+ getCopilotOrganizationDetails: ["GET /orgs/{org}/copilot/billing"],
+ getCopilotSeatAssignmentDetailsForUser: [
+ "GET /orgs/{org}/members/{username}/copilot"
+ ],
+ listCopilotSeats: ["GET /orgs/{org}/copilot/billing/seats"]
+ },
+ dependabot: {
+ addSelectedRepoToOrgSecret: [
+ "PUT /orgs/{org}/dependabot/secrets/{secret_name}/repositories/{repository_id}"
+ ],
+ createOrUpdateOrgSecret: [
+ "PUT /orgs/{org}/dependabot/secrets/{secret_name}"
+ ],
+ createOrUpdateRepoSecret: [
+ "PUT /repos/{owner}/{repo}/dependabot/secrets/{secret_name}"
+ ],
+ deleteOrgSecret: ["DELETE /orgs/{org}/dependabot/secrets/{secret_name}"],
+ deleteRepoSecret: [
+ "DELETE /repos/{owner}/{repo}/dependabot/secrets/{secret_name}"
+ ],
+ getAlert: ["GET /repos/{owner}/{repo}/dependabot/alerts/{alert_number}"],
+ getOrgPublicKey: ["GET /orgs/{org}/dependabot/secrets/public-key"],
+ getOrgSecret: ["GET /orgs/{org}/dependabot/secrets/{secret_name}"],
+ getRepoPublicKey: [
+ "GET /repos/{owner}/{repo}/dependabot/secrets/public-key"
+ ],
+ getRepoSecret: [
+ "GET /repos/{owner}/{repo}/dependabot/secrets/{secret_name}"
+ ],
+ listAlertsForEnterprise: [
+ "GET /enterprises/{enterprise}/dependabot/alerts"
+ ],
+ listAlertsForOrg: ["GET /orgs/{org}/dependabot/alerts"],
+ listAlertsForRepo: ["GET /repos/{owner}/{repo}/dependabot/alerts"],
+ listOrgSecrets: ["GET /orgs/{org}/dependabot/secrets"],
+ listRepoSecrets: ["GET /repos/{owner}/{repo}/dependabot/secrets"],
+ listSelectedReposForOrgSecret: [
+ "GET /orgs/{org}/dependabot/secrets/{secret_name}/repositories"
+ ],
+ removeSelectedRepoFromOrgSecret: [
+ "DELETE /orgs/{org}/dependabot/secrets/{secret_name}/repositories/{repository_id}"
+ ],
+ setSelectedReposForOrgSecret: [
+ "PUT /orgs/{org}/dependabot/secrets/{secret_name}/repositories"
+ ],
+ updateAlert: [
+ "PATCH /repos/{owner}/{repo}/dependabot/alerts/{alert_number}"
+ ]
+ },
+ dependencyGraph: {
+ createRepositorySnapshot: [
+ "POST /repos/{owner}/{repo}/dependency-graph/snapshots"
+ ],
+ diffRange: [
+ "GET /repos/{owner}/{repo}/dependency-graph/compare/{basehead}"
+ ],
+ exportSbom: ["GET /repos/{owner}/{repo}/dependency-graph/sbom"]
+ },
+ emojis: { get: ["GET /emojis"] },
+ gists: {
+ checkIsStarred: ["GET /gists/{gist_id}/star"],
+ create: ["POST /gists"],
+ createComment: ["POST /gists/{gist_id}/comments"],
+ delete: ["DELETE /gists/{gist_id}"],
+ deleteComment: ["DELETE /gists/{gist_id}/comments/{comment_id}"],
+ fork: ["POST /gists/{gist_id}/forks"],
+ get: ["GET /gists/{gist_id}"],
+ getComment: ["GET /gists/{gist_id}/comments/{comment_id}"],
+ getRevision: ["GET /gists/{gist_id}/{sha}"],
+ list: ["GET /gists"],
+ listComments: ["GET /gists/{gist_id}/comments"],
+ listCommits: ["GET /gists/{gist_id}/commits"],
+ listForUser: ["GET /users/{username}/gists"],
+ listForks: ["GET /gists/{gist_id}/forks"],
+ listPublic: ["GET /gists/public"],
+ listStarred: ["GET /gists/starred"],
+ star: ["PUT /gists/{gist_id}/star"],
+ unstar: ["DELETE /gists/{gist_id}/star"],
+ update: ["PATCH /gists/{gist_id}"],
+ updateComment: ["PATCH /gists/{gist_id}/comments/{comment_id}"]
+ },
+ git: {
+ createBlob: ["POST /repos/{owner}/{repo}/git/blobs"],
+ createCommit: ["POST /repos/{owner}/{repo}/git/commits"],
+ createRef: ["POST /repos/{owner}/{repo}/git/refs"],
+ createTag: ["POST /repos/{owner}/{repo}/git/tags"],
+ createTree: ["POST /repos/{owner}/{repo}/git/trees"],
+ deleteRef: ["DELETE /repos/{owner}/{repo}/git/refs/{ref}"],
+ getBlob: ["GET /repos/{owner}/{repo}/git/blobs/{file_sha}"],
+ getCommit: ["GET /repos/{owner}/{repo}/git/commits/{commit_sha}"],
+ getRef: ["GET /repos/{owner}/{repo}/git/ref/{ref}"],
+ getTag: ["GET /repos/{owner}/{repo}/git/tags/{tag_sha}"],
+ getTree: ["GET /repos/{owner}/{repo}/git/trees/{tree_sha}"],
+ listMatchingRefs: ["GET /repos/{owner}/{repo}/git/matching-refs/{ref}"],
+ updateRef: ["PATCH /repos/{owner}/{repo}/git/refs/{ref}"]
+ },
+ gitignore: {
+ getAllTemplates: ["GET /gitignore/templates"],
+ getTemplate: ["GET /gitignore/templates/{name}"]
+ },
+ interactions: {
+ getRestrictionsForAuthenticatedUser: ["GET /user/interaction-limits"],
+ getRestrictionsForOrg: ["GET /orgs/{org}/interaction-limits"],
+ getRestrictionsForRepo: ["GET /repos/{owner}/{repo}/interaction-limits"],
+ getRestrictionsForYourPublicRepos: [
+ "GET /user/interaction-limits",
+ {},
+ { renamed: ["interactions", "getRestrictionsForAuthenticatedUser"] }
+ ],
+ removeRestrictionsForAuthenticatedUser: ["DELETE /user/interaction-limits"],
+ removeRestrictionsForOrg: ["DELETE /orgs/{org}/interaction-limits"],
+ removeRestrictionsForRepo: [
+ "DELETE /repos/{owner}/{repo}/interaction-limits"
+ ],
+ removeRestrictionsForYourPublicRepos: [
+ "DELETE /user/interaction-limits",
+ {},
+ { renamed: ["interactions", "removeRestrictionsForAuthenticatedUser"] }
+ ],
+ setRestrictionsForAuthenticatedUser: ["PUT /user/interaction-limits"],
+ setRestrictionsForOrg: ["PUT /orgs/{org}/interaction-limits"],
+ setRestrictionsForRepo: ["PUT /repos/{owner}/{repo}/interaction-limits"],
+ setRestrictionsForYourPublicRepos: [
+ "PUT /user/interaction-limits",
+ {},
+ { renamed: ["interactions", "setRestrictionsForAuthenticatedUser"] }
+ ]
+ },
+ issues: {
+ addAssignees: [
+ "POST /repos/{owner}/{repo}/issues/{issue_number}/assignees"
+ ],
+ addLabels: ["POST /repos/{owner}/{repo}/issues/{issue_number}/labels"],
+ checkUserCanBeAssigned: ["GET /repos/{owner}/{repo}/assignees/{assignee}"],
+ checkUserCanBeAssignedToIssue: [
+ "GET /repos/{owner}/{repo}/issues/{issue_number}/assignees/{assignee}"
+ ],
+ create: ["POST /repos/{owner}/{repo}/issues"],
+ createComment: [
+ "POST /repos/{owner}/{repo}/issues/{issue_number}/comments"
+ ],
+ createLabel: ["POST /repos/{owner}/{repo}/labels"],
+ createMilestone: ["POST /repos/{owner}/{repo}/milestones"],
+ deleteComment: [
+ "DELETE /repos/{owner}/{repo}/issues/comments/{comment_id}"
+ ],
+ deleteLabel: ["DELETE /repos/{owner}/{repo}/labels/{name}"],
+ deleteMilestone: [
+ "DELETE /repos/{owner}/{repo}/milestones/{milestone_number}"
+ ],
+ get: ["GET /repos/{owner}/{repo}/issues/{issue_number}"],
+ getComment: ["GET /repos/{owner}/{repo}/issues/comments/{comment_id}"],
+ getEvent: ["GET /repos/{owner}/{repo}/issues/events/{event_id}"],
+ getLabel: ["GET /repos/{owner}/{repo}/labels/{name}"],
+ getMilestone: ["GET /repos/{owner}/{repo}/milestones/{milestone_number}"],
+ list: ["GET /issues"],
+ listAssignees: ["GET /repos/{owner}/{repo}/assignees"],
+ listComments: ["GET /repos/{owner}/{repo}/issues/{issue_number}/comments"],
+ listCommentsForRepo: ["GET /repos/{owner}/{repo}/issues/comments"],
+ listEvents: ["GET /repos/{owner}/{repo}/issues/{issue_number}/events"],
+ listEventsForRepo: ["GET /repos/{owner}/{repo}/issues/events"],
+ listEventsForTimeline: [
+ "GET /repos/{owner}/{repo}/issues/{issue_number}/timeline"
+ ],
+ listForAuthenticatedUser: ["GET /user/issues"],
+ listForOrg: ["GET /orgs/{org}/issues"],
+ listForRepo: ["GET /repos/{owner}/{repo}/issues"],
+ listLabelsForMilestone: [
+ "GET /repos/{owner}/{repo}/milestones/{milestone_number}/labels"
+ ],
+ listLabelsForRepo: ["GET /repos/{owner}/{repo}/labels"],
+ listLabelsOnIssue: [
+ "GET /repos/{owner}/{repo}/issues/{issue_number}/labels"
+ ],
+ listMilestones: ["GET /repos/{owner}/{repo}/milestones"],
+ lock: ["PUT /repos/{owner}/{repo}/issues/{issue_number}/lock"],
+ removeAllLabels: [
+ "DELETE /repos/{owner}/{repo}/issues/{issue_number}/labels"
+ ],
+ removeAssignees: [
+ "DELETE /repos/{owner}/{repo}/issues/{issue_number}/assignees"
+ ],
+ removeLabel: [
+ "DELETE /repos/{owner}/{repo}/issues/{issue_number}/labels/{name}"
+ ],
+ setLabels: ["PUT /repos/{owner}/{repo}/issues/{issue_number}/labels"],
+ unlock: ["DELETE /repos/{owner}/{repo}/issues/{issue_number}/lock"],
+ update: ["PATCH /repos/{owner}/{repo}/issues/{issue_number}"],
+ updateComment: ["PATCH /repos/{owner}/{repo}/issues/comments/{comment_id}"],
+ updateLabel: ["PATCH /repos/{owner}/{repo}/labels/{name}"],
+ updateMilestone: [
+ "PATCH /repos/{owner}/{repo}/milestones/{milestone_number}"
+ ]
+ },
+ licenses: {
+ get: ["GET /licenses/{license}"],
+ getAllCommonlyUsed: ["GET /licenses"],
+ getForRepo: ["GET /repos/{owner}/{repo}/license"]
+ },
+ markdown: {
+ render: ["POST /markdown"],
+ renderRaw: [
+ "POST /markdown/raw",
+ { headers: { "content-type": "text/plain; charset=utf-8" } }
+ ]
+ },
+ meta: {
+ get: ["GET /meta"],
+ getAllVersions: ["GET /versions"],
+ getOctocat: ["GET /octocat"],
+ getZen: ["GET /zen"],
+ root: ["GET /"]
+ },
+ migrations: {
+ cancelImport: ["DELETE /repos/{owner}/{repo}/import"],
+ deleteArchiveForAuthenticatedUser: [
+ "DELETE /user/migrations/{migration_id}/archive"
+ ],
+ deleteArchiveForOrg: [
+ "DELETE /orgs/{org}/migrations/{migration_id}/archive"
+ ],
+ downloadArchiveForOrg: [
+ "GET /orgs/{org}/migrations/{migration_id}/archive"
+ ],
+ getArchiveForAuthenticatedUser: [
+ "GET /user/migrations/{migration_id}/archive"
+ ],
+ getCommitAuthors: ["GET /repos/{owner}/{repo}/import/authors"],
+ getImportStatus: ["GET /repos/{owner}/{repo}/import"],
+ getLargeFiles: ["GET /repos/{owner}/{repo}/import/large_files"],
+ getStatusForAuthenticatedUser: ["GET /user/migrations/{migration_id}"],
+ getStatusForOrg: ["GET /orgs/{org}/migrations/{migration_id}"],
+ listForAuthenticatedUser: ["GET /user/migrations"],
+ listForOrg: ["GET /orgs/{org}/migrations"],
+ listReposForAuthenticatedUser: [
+ "GET /user/migrations/{migration_id}/repositories"
+ ],
+ listReposForOrg: ["GET /orgs/{org}/migrations/{migration_id}/repositories"],
+ listReposForUser: [
+ "GET /user/migrations/{migration_id}/repositories",
+ {},
+ { renamed: ["migrations", "listReposForAuthenticatedUser"] }
+ ],
+ mapCommitAuthor: ["PATCH /repos/{owner}/{repo}/import/authors/{author_id}"],
+ setLfsPreference: ["PATCH /repos/{owner}/{repo}/import/lfs"],
+ startForAuthenticatedUser: ["POST /user/migrations"],
+ startForOrg: ["POST /orgs/{org}/migrations"],
+ startImport: ["PUT /repos/{owner}/{repo}/import"],
+ unlockRepoForAuthenticatedUser: [
+ "DELETE /user/migrations/{migration_id}/repos/{repo_name}/lock"
+ ],
+ unlockRepoForOrg: [
+ "DELETE /orgs/{org}/migrations/{migration_id}/repos/{repo_name}/lock"
+ ],
+ updateImport: ["PATCH /repos/{owner}/{repo}/import"]
+ },
+ orgs: {
+ addSecurityManagerTeam: [
+ "PUT /orgs/{org}/security-managers/teams/{team_slug}"
+ ],
+ blockUser: ["PUT /orgs/{org}/blocks/{username}"],
+ cancelInvitation: ["DELETE /orgs/{org}/invitations/{invitation_id}"],
+ checkBlockedUser: ["GET /orgs/{org}/blocks/{username}"],
+ checkMembershipForUser: ["GET /orgs/{org}/members/{username}"],
+ checkPublicMembershipForUser: ["GET /orgs/{org}/public_members/{username}"],
+ convertMemberToOutsideCollaborator: [
+ "PUT /orgs/{org}/outside_collaborators/{username}"
+ ],
+ createInvitation: ["POST /orgs/{org}/invitations"],
+ createWebhook: ["POST /orgs/{org}/hooks"],
+ delete: ["DELETE /orgs/{org}"],
+ deleteWebhook: ["DELETE /orgs/{org}/hooks/{hook_id}"],
+ enableOrDisableSecurityProductOnAllOrgRepos: [
+ "POST /orgs/{org}/{security_product}/{enablement}"
+ ],
+ get: ["GET /orgs/{org}"],
+ getMembershipForAuthenticatedUser: ["GET /user/memberships/orgs/{org}"],
+ getMembershipForUser: ["GET /orgs/{org}/memberships/{username}"],
+ getWebhook: ["GET /orgs/{org}/hooks/{hook_id}"],
+ getWebhookConfigForOrg: ["GET /orgs/{org}/hooks/{hook_id}/config"],
+ getWebhookDelivery: [
+ "GET /orgs/{org}/hooks/{hook_id}/deliveries/{delivery_id}"
+ ],
+ list: ["GET /organizations"],
+ listAppInstallations: ["GET /orgs/{org}/installations"],
+ listBlockedUsers: ["GET /orgs/{org}/blocks"],
+ listFailedInvitations: ["GET /orgs/{org}/failed_invitations"],
+ listForAuthenticatedUser: ["GET /user/orgs"],
+ listForUser: ["GET /users/{username}/orgs"],
+ listInvitationTeams: ["GET /orgs/{org}/invitations/{invitation_id}/teams"],
+ listMembers: ["GET /orgs/{org}/members"],
+ listMembershipsForAuthenticatedUser: ["GET /user/memberships/orgs"],
+ listOutsideCollaborators: ["GET /orgs/{org}/outside_collaborators"],
+ listPatGrantRepositories: [
+ "GET /orgs/{org}/personal-access-tokens/{pat_id}/repositories"
+ ],
+ listPatGrantRequestRepositories: [
+ "GET /orgs/{org}/personal-access-token-requests/{pat_request_id}/repositories"
+ ],
+ listPatGrantRequests: ["GET /orgs/{org}/personal-access-token-requests"],
+ listPatGrants: ["GET /orgs/{org}/personal-access-tokens"],
+ listPendingInvitations: ["GET /orgs/{org}/invitations"],
+ listPublicMembers: ["GET /orgs/{org}/public_members"],
+ listSecurityManagerTeams: ["GET /orgs/{org}/security-managers"],
+ listWebhookDeliveries: ["GET /orgs/{org}/hooks/{hook_id}/deliveries"],
+ listWebhooks: ["GET /orgs/{org}/hooks"],
+ pingWebhook: ["POST /orgs/{org}/hooks/{hook_id}/pings"],
+ redeliverWebhookDelivery: [
+ "POST /orgs/{org}/hooks/{hook_id}/deliveries/{delivery_id}/attempts"
+ ],
+ removeMember: ["DELETE /orgs/{org}/members/{username}"],
+ removeMembershipForUser: ["DELETE /orgs/{org}/memberships/{username}"],
+ removeOutsideCollaborator: [
+ "DELETE /orgs/{org}/outside_collaborators/{username}"
+ ],
+ removePublicMembershipForAuthenticatedUser: [
+ "DELETE /orgs/{org}/public_members/{username}"
+ ],
+ removeSecurityManagerTeam: [
+ "DELETE /orgs/{org}/security-managers/teams/{team_slug}"
+ ],
+ reviewPatGrantRequest: [
+ "POST /orgs/{org}/personal-access-token-requests/{pat_request_id}"
+ ],
+ reviewPatGrantRequestsInBulk: [
+ "POST /orgs/{org}/personal-access-token-requests"
+ ],
+ setMembershipForUser: ["PUT /orgs/{org}/memberships/{username}"],
+ setPublicMembershipForAuthenticatedUser: [
+ "PUT /orgs/{org}/public_members/{username}"
+ ],
+ unblockUser: ["DELETE /orgs/{org}/blocks/{username}"],
+ update: ["PATCH /orgs/{org}"],
+ updateMembershipForAuthenticatedUser: [
+ "PATCH /user/memberships/orgs/{org}"
+ ],
+ updatePatAccess: ["POST /orgs/{org}/personal-access-tokens/{pat_id}"],
+ updatePatAccesses: ["POST /orgs/{org}/personal-access-tokens"],
+ updateWebhook: ["PATCH /orgs/{org}/hooks/{hook_id}"],
+ updateWebhookConfigForOrg: ["PATCH /orgs/{org}/hooks/{hook_id}/config"]
+ },
+ packages: {
+ deletePackageForAuthenticatedUser: [
+ "DELETE /user/packages/{package_type}/{package_name}"
+ ],
+ deletePackageForOrg: [
+ "DELETE /orgs/{org}/packages/{package_type}/{package_name}"
+ ],
+ deletePackageForUser: [
+ "DELETE /users/{username}/packages/{package_type}/{package_name}"
+ ],
+ deletePackageVersionForAuthenticatedUser: [
+ "DELETE /user/packages/{package_type}/{package_name}/versions/{package_version_id}"
+ ],
+ deletePackageVersionForOrg: [
+ "DELETE /orgs/{org}/packages/{package_type}/{package_name}/versions/{package_version_id}"
+ ],
+ deletePackageVersionForUser: [
+ "DELETE /users/{username}/packages/{package_type}/{package_name}/versions/{package_version_id}"
+ ],
+ getAllPackageVersionsForAPackageOwnedByAnOrg: [
+ "GET /orgs/{org}/packages/{package_type}/{package_name}/versions",
+ {},
+ { renamed: ["packages", "getAllPackageVersionsForPackageOwnedByOrg"] }
+ ],
+ getAllPackageVersionsForAPackageOwnedByTheAuthenticatedUser: [
+ "GET /user/packages/{package_type}/{package_name}/versions",
+ {},
+ {
+ renamed: [
+ "packages",
+ "getAllPackageVersionsForPackageOwnedByAuthenticatedUser"
+ ]
+ }
+ ],
+ getAllPackageVersionsForPackageOwnedByAuthenticatedUser: [
+ "GET /user/packages/{package_type}/{package_name}/versions"
+ ],
+ getAllPackageVersionsForPackageOwnedByOrg: [
+ "GET /orgs/{org}/packages/{package_type}/{package_name}/versions"
+ ],
+ getAllPackageVersionsForPackageOwnedByUser: [
+ "GET /users/{username}/packages/{package_type}/{package_name}/versions"
+ ],
+ getPackageForAuthenticatedUser: [
+ "GET /user/packages/{package_type}/{package_name}"
+ ],
+ getPackageForOrganization: [
+ "GET /orgs/{org}/packages/{package_type}/{package_name}"
+ ],
+ getPackageForUser: [
+ "GET /users/{username}/packages/{package_type}/{package_name}"
+ ],
+ getPackageVersionForAuthenticatedUser: [
+ "GET /user/packages/{package_type}/{package_name}/versions/{package_version_id}"
+ ],
+ getPackageVersionForOrganization: [
+ "GET /orgs/{org}/packages/{package_type}/{package_name}/versions/{package_version_id}"
+ ],
+ getPackageVersionForUser: [
+ "GET /users/{username}/packages/{package_type}/{package_name}/versions/{package_version_id}"
+ ],
+ listDockerMigrationConflictingPackagesForAuthenticatedUser: [
+ "GET /user/docker/conflicts"
+ ],
+ listDockerMigrationConflictingPackagesForOrganization: [
+ "GET /orgs/{org}/docker/conflicts"
+ ],
+ listDockerMigrationConflictingPackagesForUser: [
+ "GET /users/{username}/docker/conflicts"
+ ],
+ listPackagesForAuthenticatedUser: ["GET /user/packages"],
+ listPackagesForOrganization: ["GET /orgs/{org}/packages"],
+ listPackagesForUser: ["GET /users/{username}/packages"],
+ restorePackageForAuthenticatedUser: [
+ "POST /user/packages/{package_type}/{package_name}/restore{?token}"
+ ],
+ restorePackageForOrg: [
+ "POST /orgs/{org}/packages/{package_type}/{package_name}/restore{?token}"
+ ],
+ restorePackageForUser: [
+ "POST /users/{username}/packages/{package_type}/{package_name}/restore{?token}"
+ ],
+ restorePackageVersionForAuthenticatedUser: [
+ "POST /user/packages/{package_type}/{package_name}/versions/{package_version_id}/restore"
+ ],
+ restorePackageVersionForOrg: [
+ "POST /orgs/{org}/packages/{package_type}/{package_name}/versions/{package_version_id}/restore"
+ ],
+ restorePackageVersionForUser: [
+ "POST /users/{username}/packages/{package_type}/{package_name}/versions/{package_version_id}/restore"
+ ]
+ },
+ projects: {
+ addCollaborator: ["PUT /projects/{project_id}/collaborators/{username}"],
+ createCard: ["POST /projects/columns/{column_id}/cards"],
+ createColumn: ["POST /projects/{project_id}/columns"],
+ createForAuthenticatedUser: ["POST /user/projects"],
+ createForOrg: ["POST /orgs/{org}/projects"],
+ createForRepo: ["POST /repos/{owner}/{repo}/projects"],
+ delete: ["DELETE /projects/{project_id}"],
+ deleteCard: ["DELETE /projects/columns/cards/{card_id}"],
+ deleteColumn: ["DELETE /projects/columns/{column_id}"],
+ get: ["GET /projects/{project_id}"],
+ getCard: ["GET /projects/columns/cards/{card_id}"],
+ getColumn: ["GET /projects/columns/{column_id}"],
+ getPermissionForUser: [
+ "GET /projects/{project_id}/collaborators/{username}/permission"
+ ],
+ listCards: ["GET /projects/columns/{column_id}/cards"],
+ listCollaborators: ["GET /projects/{project_id}/collaborators"],
+ listColumns: ["GET /projects/{project_id}/columns"],
+ listForOrg: ["GET /orgs/{org}/projects"],
+ listForRepo: ["GET /repos/{owner}/{repo}/projects"],
+ listForUser: ["GET /users/{username}/projects"],
+ moveCard: ["POST /projects/columns/cards/{card_id}/moves"],
+ moveColumn: ["POST /projects/columns/{column_id}/moves"],
+ removeCollaborator: [
+ "DELETE /projects/{project_id}/collaborators/{username}"
+ ],
+ update: ["PATCH /projects/{project_id}"],
+ updateCard: ["PATCH /projects/columns/cards/{card_id}"],
+ updateColumn: ["PATCH /projects/columns/{column_id}"]
+ },
+ pulls: {
+ checkIfMerged: ["GET /repos/{owner}/{repo}/pulls/{pull_number}/merge"],
+ create: ["POST /repos/{owner}/{repo}/pulls"],
+ createReplyForReviewComment: [
+ "POST /repos/{owner}/{repo}/pulls/{pull_number}/comments/{comment_id}/replies"
+ ],
+ createReview: ["POST /repos/{owner}/{repo}/pulls/{pull_number}/reviews"],
+ createReviewComment: [
+ "POST /repos/{owner}/{repo}/pulls/{pull_number}/comments"
+ ],
+ deletePendingReview: [
+ "DELETE /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}"
+ ],
+ deleteReviewComment: [
+ "DELETE /repos/{owner}/{repo}/pulls/comments/{comment_id}"
+ ],
+ dismissReview: [
+ "PUT /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/dismissals"
+ ],
+ get: ["GET /repos/{owner}/{repo}/pulls/{pull_number}"],
+ getReview: [
+ "GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}"
+ ],
+ getReviewComment: ["GET /repos/{owner}/{repo}/pulls/comments/{comment_id}"],
+ list: ["GET /repos/{owner}/{repo}/pulls"],
+ listCommentsForReview: [
+ "GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/comments"
+ ],
+ listCommits: ["GET /repos/{owner}/{repo}/pulls/{pull_number}/commits"],
+ listFiles: ["GET /repos/{owner}/{repo}/pulls/{pull_number}/files"],
+ listRequestedReviewers: [
+ "GET /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers"
+ ],
+ listReviewComments: [
+ "GET /repos/{owner}/{repo}/pulls/{pull_number}/comments"
+ ],
+ listReviewCommentsForRepo: ["GET /repos/{owner}/{repo}/pulls/comments"],
+ listReviews: ["GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews"],
+ merge: ["PUT /repos/{owner}/{repo}/pulls/{pull_number}/merge"],
+ removeRequestedReviewers: [
+ "DELETE /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers"
+ ],
+ requestReviewers: [
+ "POST /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers"
+ ],
+ submitReview: [
+ "POST /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/events"
+ ],
+ update: ["PATCH /repos/{owner}/{repo}/pulls/{pull_number}"],
+ updateBranch: [
+ "PUT /repos/{owner}/{repo}/pulls/{pull_number}/update-branch"
+ ],
+ updateReview: [
+ "PUT /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}"
+ ],
+ updateReviewComment: [
+ "PATCH /repos/{owner}/{repo}/pulls/comments/{comment_id}"
+ ]
+ },
+ rateLimit: { get: ["GET /rate_limit"] },
+ reactions: {
+ createForCommitComment: [
+ "POST /repos/{owner}/{repo}/comments/{comment_id}/reactions"
+ ],
+ createForIssue: [
+ "POST /repos/{owner}/{repo}/issues/{issue_number}/reactions"
+ ],
+ createForIssueComment: [
+ "POST /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions"
+ ],
+ createForPullRequestReviewComment: [
+ "POST /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions"
+ ],
+ createForRelease: [
+ "POST /repos/{owner}/{repo}/releases/{release_id}/reactions"
+ ],
+ createForTeamDiscussionCommentInOrg: [
+ "POST /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions"
+ ],
+ createForTeamDiscussionInOrg: [
+ "POST /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions"
+ ],
+ deleteForCommitComment: [
+ "DELETE /repos/{owner}/{repo}/comments/{comment_id}/reactions/{reaction_id}"
+ ],
+ deleteForIssue: [
+ "DELETE /repos/{owner}/{repo}/issues/{issue_number}/reactions/{reaction_id}"
+ ],
+ deleteForIssueComment: [
+ "DELETE /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions/{reaction_id}"
+ ],
+ deleteForPullRequestComment: [
+ "DELETE /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions/{reaction_id}"
+ ],
+ deleteForRelease: [
+ "DELETE /repos/{owner}/{repo}/releases/{release_id}/reactions/{reaction_id}"
+ ],
+ deleteForTeamDiscussion: [
+ "DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions/{reaction_id}"
+ ],
+ deleteForTeamDiscussionComment: [
+ "DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions/{reaction_id}"
+ ],
+ listForCommitComment: [
+ "GET /repos/{owner}/{repo}/comments/{comment_id}/reactions"
+ ],
+ listForIssue: ["GET /repos/{owner}/{repo}/issues/{issue_number}/reactions"],
+ listForIssueComment: [
+ "GET /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions"
+ ],
+ listForPullRequestReviewComment: [
+ "GET /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions"
+ ],
+ listForRelease: [
+ "GET /repos/{owner}/{repo}/releases/{release_id}/reactions"
+ ],
+ listForTeamDiscussionCommentInOrg: [
+ "GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions"
+ ],
+ listForTeamDiscussionInOrg: [
+ "GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions"
+ ]
+ },
+ repos: {
+ acceptInvitation: [
+ "PATCH /user/repository_invitations/{invitation_id}",
+ {},
+ { renamed: ["repos", "acceptInvitationForAuthenticatedUser"] }
+ ],
+ acceptInvitationForAuthenticatedUser: [
+ "PATCH /user/repository_invitations/{invitation_id}"
+ ],
+ addAppAccessRestrictions: [
+ "POST /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps",
+ {},
+ { mapToData: "apps" }
+ ],
+ addCollaborator: ["PUT /repos/{owner}/{repo}/collaborators/{username}"],
+ addStatusCheckContexts: [
+ "POST /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts",
+ {},
+ { mapToData: "contexts" }
+ ],
+ addTeamAccessRestrictions: [
+ "POST /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams",
+ {},
+ { mapToData: "teams" }
+ ],
+ addUserAccessRestrictions: [
+ "POST /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users",
+ {},
+ { mapToData: "users" }
+ ],
+ checkAutomatedSecurityFixes: [
+ "GET /repos/{owner}/{repo}/automated-security-fixes"
+ ],
+ checkCollaborator: ["GET /repos/{owner}/{repo}/collaborators/{username}"],
+ checkVulnerabilityAlerts: [
+ "GET /repos/{owner}/{repo}/vulnerability-alerts"
+ ],
+ codeownersErrors: ["GET /repos/{owner}/{repo}/codeowners/errors"],
+ compareCommits: ["GET /repos/{owner}/{repo}/compare/{base}...{head}"],
+ compareCommitsWithBasehead: [
+ "GET /repos/{owner}/{repo}/compare/{basehead}"
+ ],
+ createAutolink: ["POST /repos/{owner}/{repo}/autolinks"],
+ createCommitComment: [
+ "POST /repos/{owner}/{repo}/commits/{commit_sha}/comments"
+ ],
+ createCommitSignatureProtection: [
+ "POST /repos/{owner}/{repo}/branches/{branch}/protection/required_signatures"
+ ],
+ createCommitStatus: ["POST /repos/{owner}/{repo}/statuses/{sha}"],
+ createDeployKey: ["POST /repos/{owner}/{repo}/keys"],
+ createDeployment: ["POST /repos/{owner}/{repo}/deployments"],
+ createDeploymentBranchPolicy: [
+ "POST /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies"
+ ],
+ createDeploymentProtectionRule: [
+ "POST /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules"
+ ],
+ createDeploymentStatus: [
+ "POST /repos/{owner}/{repo}/deployments/{deployment_id}/statuses"
+ ],
+ createDispatchEvent: ["POST /repos/{owner}/{repo}/dispatches"],
+ createForAuthenticatedUser: ["POST /user/repos"],
+ createFork: ["POST /repos/{owner}/{repo}/forks"],
+ createInOrg: ["POST /orgs/{org}/repos"],
+ createOrUpdateEnvironment: [
+ "PUT /repos/{owner}/{repo}/environments/{environment_name}"
+ ],
+ createOrUpdateFileContents: ["PUT /repos/{owner}/{repo}/contents/{path}"],
+ createOrgRuleset: ["POST /orgs/{org}/rulesets"],
+ createPagesDeployment: ["POST /repos/{owner}/{repo}/pages/deployment"],
+ createPagesSite: ["POST /repos/{owner}/{repo}/pages"],
+ createRelease: ["POST /repos/{owner}/{repo}/releases"],
+ createRepoRuleset: ["POST /repos/{owner}/{repo}/rulesets"],
+ createTagProtection: ["POST /repos/{owner}/{repo}/tags/protection"],
+ createUsingTemplate: [
+ "POST /repos/{template_owner}/{template_repo}/generate"
+ ],
+ createWebhook: ["POST /repos/{owner}/{repo}/hooks"],
+ declineInvitation: [
+ "DELETE /user/repository_invitations/{invitation_id}",
+ {},
+ { renamed: ["repos", "declineInvitationForAuthenticatedUser"] }
+ ],
+ declineInvitationForAuthenticatedUser: [
+ "DELETE /user/repository_invitations/{invitation_id}"
+ ],
+ delete: ["DELETE /repos/{owner}/{repo}"],
+ deleteAccessRestrictions: [
+ "DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions"
+ ],
+ deleteAdminBranchProtection: [
+ "DELETE /repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins"
+ ],
+ deleteAnEnvironment: [
+ "DELETE /repos/{owner}/{repo}/environments/{environment_name}"
+ ],
+ deleteAutolink: ["DELETE /repos/{owner}/{repo}/autolinks/{autolink_id}"],
+ deleteBranchProtection: [
+ "DELETE /repos/{owner}/{repo}/branches/{branch}/protection"
+ ],
+ deleteCommitComment: ["DELETE /repos/{owner}/{repo}/comments/{comment_id}"],
+ deleteCommitSignatureProtection: [
+ "DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_signatures"
+ ],
+ deleteDeployKey: ["DELETE /repos/{owner}/{repo}/keys/{key_id}"],
+ deleteDeployment: [
+ "DELETE /repos/{owner}/{repo}/deployments/{deployment_id}"
+ ],
+ deleteDeploymentBranchPolicy: [
+ "DELETE /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies/{branch_policy_id}"
+ ],
+ deleteFile: ["DELETE /repos/{owner}/{repo}/contents/{path}"],
+ deleteInvitation: [
+ "DELETE /repos/{owner}/{repo}/invitations/{invitation_id}"
+ ],
+ deleteOrgRuleset: ["DELETE /orgs/{org}/rulesets/{ruleset_id}"],
+ deletePagesSite: ["DELETE /repos/{owner}/{repo}/pages"],
+ deletePullRequestReviewProtection: [
+ "DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews"
+ ],
+ deleteRelease: ["DELETE /repos/{owner}/{repo}/releases/{release_id}"],
+ deleteReleaseAsset: [
+ "DELETE /repos/{owner}/{repo}/releases/assets/{asset_id}"
+ ],
+ deleteRepoRuleset: ["DELETE /repos/{owner}/{repo}/rulesets/{ruleset_id}"],
+ deleteTagProtection: [
+ "DELETE /repos/{owner}/{repo}/tags/protection/{tag_protection_id}"
+ ],
+ deleteWebhook: ["DELETE /repos/{owner}/{repo}/hooks/{hook_id}"],
+ disableAutomatedSecurityFixes: [
+ "DELETE /repos/{owner}/{repo}/automated-security-fixes"
+ ],
+ disableDeploymentProtectionRule: [
+ "DELETE /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules/{protection_rule_id}"
+ ],
+ disablePrivateVulnerabilityReporting: [
+ "DELETE /repos/{owner}/{repo}/private-vulnerability-reporting"
+ ],
+ disableVulnerabilityAlerts: [
+ "DELETE /repos/{owner}/{repo}/vulnerability-alerts"
+ ],
+ downloadArchive: [
+ "GET /repos/{owner}/{repo}/zipball/{ref}",
+ {},
+ { renamed: ["repos", "downloadZipballArchive"] }
+ ],
+ downloadTarballArchive: ["GET /repos/{owner}/{repo}/tarball/{ref}"],
+ downloadZipballArchive: ["GET /repos/{owner}/{repo}/zipball/{ref}"],
+ enableAutomatedSecurityFixes: [
+ "PUT /repos/{owner}/{repo}/automated-security-fixes"
+ ],
+ enablePrivateVulnerabilityReporting: [
+ "PUT /repos/{owner}/{repo}/private-vulnerability-reporting"
+ ],
+ enableVulnerabilityAlerts: [
+ "PUT /repos/{owner}/{repo}/vulnerability-alerts"
+ ],
+ generateReleaseNotes: [
+ "POST /repos/{owner}/{repo}/releases/generate-notes"
+ ],
+ get: ["GET /repos/{owner}/{repo}"],
+ getAccessRestrictions: [
+ "GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions"
+ ],
+ getAdminBranchProtection: [
+ "GET /repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins"
+ ],
+ getAllDeploymentProtectionRules: [
+ "GET /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules"
+ ],
+ getAllEnvironments: ["GET /repos/{owner}/{repo}/environments"],
+ getAllStatusCheckContexts: [
+ "GET /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts"
+ ],
+ getAllTopics: ["GET /repos/{owner}/{repo}/topics"],
+ getAppsWithAccessToProtectedBranch: [
+ "GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps"
+ ],
+ getAutolink: ["GET /repos/{owner}/{repo}/autolinks/{autolink_id}"],
+ getBranch: ["GET /repos/{owner}/{repo}/branches/{branch}"],
+ getBranchProtection: [
+ "GET /repos/{owner}/{repo}/branches/{branch}/protection"
+ ],
+ getBranchRules: ["GET /repos/{owner}/{repo}/rules/branches/{branch}"],
+ getClones: ["GET /repos/{owner}/{repo}/traffic/clones"],
+ getCodeFrequencyStats: ["GET /repos/{owner}/{repo}/stats/code_frequency"],
+ getCollaboratorPermissionLevel: [
+ "GET /repos/{owner}/{repo}/collaborators/{username}/permission"
+ ],
+ getCombinedStatusForRef: ["GET /repos/{owner}/{repo}/commits/{ref}/status"],
+ getCommit: ["GET /repos/{owner}/{repo}/commits/{ref}"],
+ getCommitActivityStats: ["GET /repos/{owner}/{repo}/stats/commit_activity"],
+ getCommitComment: ["GET /repos/{owner}/{repo}/comments/{comment_id}"],
+ getCommitSignatureProtection: [
+ "GET /repos/{owner}/{repo}/branches/{branch}/protection/required_signatures"
+ ],
+ getCommunityProfileMetrics: ["GET /repos/{owner}/{repo}/community/profile"],
+ getContent: ["GET /repos/{owner}/{repo}/contents/{path}"],
+ getContributorsStats: ["GET /repos/{owner}/{repo}/stats/contributors"],
+ getCustomDeploymentProtectionRule: [
+ "GET /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules/{protection_rule_id}"
+ ],
+ getDeployKey: ["GET /repos/{owner}/{repo}/keys/{key_id}"],
+ getDeployment: ["GET /repos/{owner}/{repo}/deployments/{deployment_id}"],
+ getDeploymentBranchPolicy: [
+ "GET /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies/{branch_policy_id}"
+ ],
+ getDeploymentStatus: [
+ "GET /repos/{owner}/{repo}/deployments/{deployment_id}/statuses/{status_id}"
+ ],
+ getEnvironment: [
+ "GET /repos/{owner}/{repo}/environments/{environment_name}"
+ ],
+ getLatestPagesBuild: ["GET /repos/{owner}/{repo}/pages/builds/latest"],
+ getLatestRelease: ["GET /repos/{owner}/{repo}/releases/latest"],
+ getOrgRuleset: ["GET /orgs/{org}/rulesets/{ruleset_id}"],
+ getOrgRulesets: ["GET /orgs/{org}/rulesets"],
+ getPages: ["GET /repos/{owner}/{repo}/pages"],
+ getPagesBuild: ["GET /repos/{owner}/{repo}/pages/builds/{build_id}"],
+ getPagesHealthCheck: ["GET /repos/{owner}/{repo}/pages/health"],
+ getParticipationStats: ["GET /repos/{owner}/{repo}/stats/participation"],
+ getPullRequestReviewProtection: [
+ "GET /repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews"
+ ],
+ getPunchCardStats: ["GET /repos/{owner}/{repo}/stats/punch_card"],
+ getReadme: ["GET /repos/{owner}/{repo}/readme"],
+ getReadmeInDirectory: ["GET /repos/{owner}/{repo}/readme/{dir}"],
+ getRelease: ["GET /repos/{owner}/{repo}/releases/{release_id}"],
+ getReleaseAsset: ["GET /repos/{owner}/{repo}/releases/assets/{asset_id}"],
+ getReleaseByTag: ["GET /repos/{owner}/{repo}/releases/tags/{tag}"],
+ getRepoRuleset: ["GET /repos/{owner}/{repo}/rulesets/{ruleset_id}"],
+ getRepoRulesets: ["GET /repos/{owner}/{repo}/rulesets"],
+ getStatusChecksProtection: [
+ "GET /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks"
+ ],
+ getTeamsWithAccessToProtectedBranch: [
+ "GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams"
+ ],
+ getTopPaths: ["GET /repos/{owner}/{repo}/traffic/popular/paths"],
+ getTopReferrers: ["GET /repos/{owner}/{repo}/traffic/popular/referrers"],
+ getUsersWithAccessToProtectedBranch: [
+ "GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users"
+ ],
+ getViews: ["GET /repos/{owner}/{repo}/traffic/views"],
+ getWebhook: ["GET /repos/{owner}/{repo}/hooks/{hook_id}"],
+ getWebhookConfigForRepo: [
+ "GET /repos/{owner}/{repo}/hooks/{hook_id}/config"
+ ],
+ getWebhookDelivery: [
+ "GET /repos/{owner}/{repo}/hooks/{hook_id}/deliveries/{delivery_id}"
+ ],
+ listActivities: ["GET /repos/{owner}/{repo}/activity"],
+ listAutolinks: ["GET /repos/{owner}/{repo}/autolinks"],
+ listBranches: ["GET /repos/{owner}/{repo}/branches"],
+ listBranchesForHeadCommit: [
+ "GET /repos/{owner}/{repo}/commits/{commit_sha}/branches-where-head"
+ ],
+ listCollaborators: ["GET /repos/{owner}/{repo}/collaborators"],
+ listCommentsForCommit: [
+ "GET /repos/{owner}/{repo}/commits/{commit_sha}/comments"
+ ],
+ listCommitCommentsForRepo: ["GET /repos/{owner}/{repo}/comments"],
+ listCommitStatusesForRef: [
+ "GET /repos/{owner}/{repo}/commits/{ref}/statuses"
+ ],
+ listCommits: ["GET /repos/{owner}/{repo}/commits"],
+ listContributors: ["GET /repos/{owner}/{repo}/contributors"],
+ listCustomDeploymentRuleIntegrations: [
+ "GET /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules/apps"
+ ],
+ listDeployKeys: ["GET /repos/{owner}/{repo}/keys"],
+ listDeploymentBranchPolicies: [
+ "GET /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies"
+ ],
+ listDeploymentStatuses: [
+ "GET /repos/{owner}/{repo}/deployments/{deployment_id}/statuses"
+ ],
+ listDeployments: ["GET /repos/{owner}/{repo}/deployments"],
+ listForAuthenticatedUser: ["GET /user/repos"],
+ listForOrg: ["GET /orgs/{org}/repos"],
+ listForUser: ["GET /users/{username}/repos"],
+ listForks: ["GET /repos/{owner}/{repo}/forks"],
+ listInvitations: ["GET /repos/{owner}/{repo}/invitations"],
+ listInvitationsForAuthenticatedUser: ["GET /user/repository_invitations"],
+ listLanguages: ["GET /repos/{owner}/{repo}/languages"],
+ listPagesBuilds: ["GET /repos/{owner}/{repo}/pages/builds"],
+ listPublic: ["GET /repositories"],
+ listPullRequestsAssociatedWithCommit: [
+ "GET /repos/{owner}/{repo}/commits/{commit_sha}/pulls"
+ ],
+ listReleaseAssets: [
+ "GET /repos/{owner}/{repo}/releases/{release_id}/assets"
+ ],
+ listReleases: ["GET /repos/{owner}/{repo}/releases"],
+ listTagProtection: ["GET /repos/{owner}/{repo}/tags/protection"],
+ listTags: ["GET /repos/{owner}/{repo}/tags"],
+ listTeams: ["GET /repos/{owner}/{repo}/teams"],
+ listWebhookDeliveries: [
+ "GET /repos/{owner}/{repo}/hooks/{hook_id}/deliveries"
+ ],
+ listWebhooks: ["GET /repos/{owner}/{repo}/hooks"],
+ merge: ["POST /repos/{owner}/{repo}/merges"],
+ mergeUpstream: ["POST /repos/{owner}/{repo}/merge-upstream"],
+ pingWebhook: ["POST /repos/{owner}/{repo}/hooks/{hook_id}/pings"],
+ redeliverWebhookDelivery: [
+ "POST /repos/{owner}/{repo}/hooks/{hook_id}/deliveries/{delivery_id}/attempts"
+ ],
+ removeAppAccessRestrictions: [
+ "DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps",
+ {},
+ { mapToData: "apps" }
+ ],
+ removeCollaborator: [
+ "DELETE /repos/{owner}/{repo}/collaborators/{username}"
+ ],
+ removeStatusCheckContexts: [
+ "DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts",
+ {},
+ { mapToData: "contexts" }
+ ],
+ removeStatusCheckProtection: [
+ "DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks"
+ ],
+ removeTeamAccessRestrictions: [
+ "DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams",
+ {},
+ { mapToData: "teams" }
+ ],
+ removeUserAccessRestrictions: [
+ "DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users",
+ {},
+ { mapToData: "users" }
+ ],
+ renameBranch: ["POST /repos/{owner}/{repo}/branches/{branch}/rename"],
+ replaceAllTopics: ["PUT /repos/{owner}/{repo}/topics"],
+ requestPagesBuild: ["POST /repos/{owner}/{repo}/pages/builds"],
+ setAdminBranchProtection: [
+ "POST /repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins"
+ ],
+ setAppAccessRestrictions: [
+ "PUT /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps",
+ {},
+ { mapToData: "apps" }
+ ],
+ setStatusCheckContexts: [
+ "PUT /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts",
+ {},
+ { mapToData: "contexts" }
+ ],
+ setTeamAccessRestrictions: [
+ "PUT /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams",
+ {},
+ { mapToData: "teams" }
+ ],
+ setUserAccessRestrictions: [
+ "PUT /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users",
+ {},
+ { mapToData: "users" }
+ ],
+ testPushWebhook: ["POST /repos/{owner}/{repo}/hooks/{hook_id}/tests"],
+ transfer: ["POST /repos/{owner}/{repo}/transfer"],
+ update: ["PATCH /repos/{owner}/{repo}"],
+ updateBranchProtection: [
+ "PUT /repos/{owner}/{repo}/branches/{branch}/protection"
+ ],
+ updateCommitComment: ["PATCH /repos/{owner}/{repo}/comments/{comment_id}"],
+ updateDeploymentBranchPolicy: [
+ "PUT /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies/{branch_policy_id}"
+ ],
+ updateInformationAboutPagesSite: ["PUT /repos/{owner}/{repo}/pages"],
+ updateInvitation: [
+ "PATCH /repos/{owner}/{repo}/invitations/{invitation_id}"
+ ],
+ updateOrgRuleset: ["PUT /orgs/{org}/rulesets/{ruleset_id}"],
+ updatePullRequestReviewProtection: [
+ "PATCH /repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews"
+ ],
+ updateRelease: ["PATCH /repos/{owner}/{repo}/releases/{release_id}"],
+ updateReleaseAsset: [
+ "PATCH /repos/{owner}/{repo}/releases/assets/{asset_id}"
+ ],
+ updateRepoRuleset: ["PUT /repos/{owner}/{repo}/rulesets/{ruleset_id}"],
+ updateStatusCheckPotection: [
+ "PATCH /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks",
+ {},
+ { renamed: ["repos", "updateStatusCheckProtection"] }
+ ],
+ updateStatusCheckProtection: [
+ "PATCH /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks"
+ ],
+ updateWebhook: ["PATCH /repos/{owner}/{repo}/hooks/{hook_id}"],
+ updateWebhookConfigForRepo: [
+ "PATCH /repos/{owner}/{repo}/hooks/{hook_id}/config"
+ ],
+ uploadReleaseAsset: [
+ "POST /repos/{owner}/{repo}/releases/{release_id}/assets{?name,label}",
+ { baseUrl: "https://uploads.github.com" }
+ ]
+ },
+ search: {
+ code: ["GET /search/code"],
+ commits: ["GET /search/commits"],
+ issuesAndPullRequests: ["GET /search/issues"],
+ labels: ["GET /search/labels"],
+ repos: ["GET /search/repositories"],
+ topics: ["GET /search/topics"],
+ users: ["GET /search/users"]
+ },
+ secretScanning: {
+ getAlert: [
+ "GET /repos/{owner}/{repo}/secret-scanning/alerts/{alert_number}"
+ ],
+ listAlertsForEnterprise: [
+ "GET /enterprises/{enterprise}/secret-scanning/alerts"
+ ],
+ listAlertsForOrg: ["GET /orgs/{org}/secret-scanning/alerts"],
+ listAlertsForRepo: ["GET /repos/{owner}/{repo}/secret-scanning/alerts"],
+ listLocationsForAlert: [
+ "GET /repos/{owner}/{repo}/secret-scanning/alerts/{alert_number}/locations"
+ ],
+ updateAlert: [
+ "PATCH /repos/{owner}/{repo}/secret-scanning/alerts/{alert_number}"
+ ]
+ },
+ securityAdvisories: {
+ createPrivateVulnerabilityReport: [
+ "POST /repos/{owner}/{repo}/security-advisories/reports"
+ ],
+ createRepositoryAdvisory: [
+ "POST /repos/{owner}/{repo}/security-advisories"
+ ],
+ createRepositoryAdvisoryCveRequest: [
+ "POST /repos/{owner}/{repo}/security-advisories/{ghsa_id}/cve"
+ ],
+ getGlobalAdvisory: ["GET /advisories/{ghsa_id}"],
+ getRepositoryAdvisory: [
+ "GET /repos/{owner}/{repo}/security-advisories/{ghsa_id}"
+ ],
+ listGlobalAdvisories: ["GET /advisories"],
+ listOrgRepositoryAdvisories: ["GET /orgs/{org}/security-advisories"],
+ listRepositoryAdvisories: ["GET /repos/{owner}/{repo}/security-advisories"],
+ updateRepositoryAdvisory: [
+ "PATCH /repos/{owner}/{repo}/security-advisories/{ghsa_id}"
+ ]
+ },
+ teams: {
+ addOrUpdateMembershipForUserInOrg: [
+ "PUT /orgs/{org}/teams/{team_slug}/memberships/{username}"
+ ],
+ addOrUpdateProjectPermissionsInOrg: [
+ "PUT /orgs/{org}/teams/{team_slug}/projects/{project_id}"
+ ],
+ addOrUpdateRepoPermissionsInOrg: [
+ "PUT /orgs/{org}/teams/{team_slug}/repos/{owner}/{repo}"
+ ],
+ checkPermissionsForProjectInOrg: [
+ "GET /orgs/{org}/teams/{team_slug}/projects/{project_id}"
+ ],
+ checkPermissionsForRepoInOrg: [
+ "GET /orgs/{org}/teams/{team_slug}/repos/{owner}/{repo}"
+ ],
+ create: ["POST /orgs/{org}/teams"],
+ createDiscussionCommentInOrg: [
+ "POST /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments"
+ ],
+ createDiscussionInOrg: ["POST /orgs/{org}/teams/{team_slug}/discussions"],
+ deleteDiscussionCommentInOrg: [
+ "DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}"
+ ],
+ deleteDiscussionInOrg: [
+ "DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}"
+ ],
+ deleteInOrg: ["DELETE /orgs/{org}/teams/{team_slug}"],
+ getByName: ["GET /orgs/{org}/teams/{team_slug}"],
+ getDiscussionCommentInOrg: [
+ "GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}"
+ ],
+ getDiscussionInOrg: [
+ "GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}"
+ ],
+ getMembershipForUserInOrg: [
+ "GET /orgs/{org}/teams/{team_slug}/memberships/{username}"
+ ],
+ list: ["GET /orgs/{org}/teams"],
+ listChildInOrg: ["GET /orgs/{org}/teams/{team_slug}/teams"],
+ listDiscussionCommentsInOrg: [
+ "GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments"
+ ],
+ listDiscussionsInOrg: ["GET /orgs/{org}/teams/{team_slug}/discussions"],
+ listForAuthenticatedUser: ["GET /user/teams"],
+ listMembersInOrg: ["GET /orgs/{org}/teams/{team_slug}/members"],
+ listPendingInvitationsInOrg: [
+ "GET /orgs/{org}/teams/{team_slug}/invitations"
+ ],
+ listProjectsInOrg: ["GET /orgs/{org}/teams/{team_slug}/projects"],
+ listReposInOrg: ["GET /orgs/{org}/teams/{team_slug}/repos"],
+ removeMembershipForUserInOrg: [
+ "DELETE /orgs/{org}/teams/{team_slug}/memberships/{username}"
+ ],
+ removeProjectInOrg: [
+ "DELETE /orgs/{org}/teams/{team_slug}/projects/{project_id}"
+ ],
+ removeRepoInOrg: [
+ "DELETE /orgs/{org}/teams/{team_slug}/repos/{owner}/{repo}"
+ ],
+ updateDiscussionCommentInOrg: [
+ "PATCH /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}"
+ ],
+ updateDiscussionInOrg: [
+ "PATCH /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}"
+ ],
+ updateInOrg: ["PATCH /orgs/{org}/teams/{team_slug}"]
+ },
+ users: {
+ addEmailForAuthenticated: [
+ "POST /user/emails",
+ {},
+ { renamed: ["users", "addEmailForAuthenticatedUser"] }
+ ],
+ addEmailForAuthenticatedUser: ["POST /user/emails"],
+ addSocialAccountForAuthenticatedUser: ["POST /user/social_accounts"],
+ block: ["PUT /user/blocks/{username}"],
+ checkBlocked: ["GET /user/blocks/{username}"],
+ checkFollowingForUser: ["GET /users/{username}/following/{target_user}"],
+ checkPersonIsFollowedByAuthenticated: ["GET /user/following/{username}"],
+ createGpgKeyForAuthenticated: [
+ "POST /user/gpg_keys",
+ {},
+ { renamed: ["users", "createGpgKeyForAuthenticatedUser"] }
+ ],
+ createGpgKeyForAuthenticatedUser: ["POST /user/gpg_keys"],
+ createPublicSshKeyForAuthenticated: [
+ "POST /user/keys",
+ {},
+ { renamed: ["users", "createPublicSshKeyForAuthenticatedUser"] }
+ ],
+ createPublicSshKeyForAuthenticatedUser: ["POST /user/keys"],
+ createSshSigningKeyForAuthenticatedUser: ["POST /user/ssh_signing_keys"],
+ deleteEmailForAuthenticated: [
+ "DELETE /user/emails",
+ {},
+ { renamed: ["users", "deleteEmailForAuthenticatedUser"] }
+ ],
+ deleteEmailForAuthenticatedUser: ["DELETE /user/emails"],
+ deleteGpgKeyForAuthenticated: [
+ "DELETE /user/gpg_keys/{gpg_key_id}",
+ {},
+ { renamed: ["users", "deleteGpgKeyForAuthenticatedUser"] }
+ ],
+ deleteGpgKeyForAuthenticatedUser: ["DELETE /user/gpg_keys/{gpg_key_id}"],
+ deletePublicSshKeyForAuthenticated: [
+ "DELETE /user/keys/{key_id}",
+ {},
+ { renamed: ["users", "deletePublicSshKeyForAuthenticatedUser"] }
+ ],
+ deletePublicSshKeyForAuthenticatedUser: ["DELETE /user/keys/{key_id}"],
+ deleteSocialAccountForAuthenticatedUser: ["DELETE /user/social_accounts"],
+ deleteSshSigningKeyForAuthenticatedUser: [
+ "DELETE /user/ssh_signing_keys/{ssh_signing_key_id}"
+ ],
+ follow: ["PUT /user/following/{username}"],
+ getAuthenticated: ["GET /user"],
+ getByUsername: ["GET /users/{username}"],
+ getContextForUser: ["GET /users/{username}/hovercard"],
+ getGpgKeyForAuthenticated: [
+ "GET /user/gpg_keys/{gpg_key_id}",
+ {},
+ { renamed: ["users", "getGpgKeyForAuthenticatedUser"] }
+ ],
+ getGpgKeyForAuthenticatedUser: ["GET /user/gpg_keys/{gpg_key_id}"],
+ getPublicSshKeyForAuthenticated: [
+ "GET /user/keys/{key_id}",
+ {},
+ { renamed: ["users", "getPublicSshKeyForAuthenticatedUser"] }
+ ],
+ getPublicSshKeyForAuthenticatedUser: ["GET /user/keys/{key_id}"],
+ getSshSigningKeyForAuthenticatedUser: [
+ "GET /user/ssh_signing_keys/{ssh_signing_key_id}"
+ ],
+ list: ["GET /users"],
+ listBlockedByAuthenticated: [
+ "GET /user/blocks",
+ {},
+ { renamed: ["users", "listBlockedByAuthenticatedUser"] }
+ ],
+ listBlockedByAuthenticatedUser: ["GET /user/blocks"],
+ listEmailsForAuthenticated: [
+ "GET /user/emails",
+ {},
+ { renamed: ["users", "listEmailsForAuthenticatedUser"] }
+ ],
+ listEmailsForAuthenticatedUser: ["GET /user/emails"],
+ listFollowedByAuthenticated: [
+ "GET /user/following",
+ {},
+ { renamed: ["users", "listFollowedByAuthenticatedUser"] }
+ ],
+ listFollowedByAuthenticatedUser: ["GET /user/following"],
+ listFollowersForAuthenticatedUser: ["GET /user/followers"],
+ listFollowersForUser: ["GET /users/{username}/followers"],
+ listFollowingForUser: ["GET /users/{username}/following"],
+ listGpgKeysForAuthenticated: [
+ "GET /user/gpg_keys",
+ {},
+ { renamed: ["users", "listGpgKeysForAuthenticatedUser"] }
+ ],
+ listGpgKeysForAuthenticatedUser: ["GET /user/gpg_keys"],
+ listGpgKeysForUser: ["GET /users/{username}/gpg_keys"],
+ listPublicEmailsForAuthenticated: [
+ "GET /user/public_emails",
+ {},
+ { renamed: ["users", "listPublicEmailsForAuthenticatedUser"] }
+ ],
+ listPublicEmailsForAuthenticatedUser: ["GET /user/public_emails"],
+ listPublicKeysForUser: ["GET /users/{username}/keys"],
+ listPublicSshKeysForAuthenticated: [
+ "GET /user/keys",
+ {},
+ { renamed: ["users", "listPublicSshKeysForAuthenticatedUser"] }
+ ],
+ listPublicSshKeysForAuthenticatedUser: ["GET /user/keys"],
+ listSocialAccountsForAuthenticatedUser: ["GET /user/social_accounts"],
+ listSocialAccountsForUser: ["GET /users/{username}/social_accounts"],
+ listSshSigningKeysForAuthenticatedUser: ["GET /user/ssh_signing_keys"],
+ listSshSigningKeysForUser: ["GET /users/{username}/ssh_signing_keys"],
+ setPrimaryEmailVisibilityForAuthenticated: [
+ "PATCH /user/email/visibility",
+ {},
+ { renamed: ["users", "setPrimaryEmailVisibilityForAuthenticatedUser"] }
+ ],
+ setPrimaryEmailVisibilityForAuthenticatedUser: [
+ "PATCH /user/email/visibility"
+ ],
+ unblock: ["DELETE /user/blocks/{username}"],
+ unfollow: ["DELETE /user/following/{username}"],
+ updateAuthenticated: ["PATCH /user"]
+ }
+};
+var endpoints_default = Endpoints;
+
+// pkg/dist-src/endpoints-to-methods.js
+var endpointMethodsMap = /* @__PURE__ */ new Map();
+for (const [scope, endpoints] of Object.entries(endpoints_default)) {
+ for (const [methodName, endpoint] of Object.entries(endpoints)) {
+ const [route, defaults, decorations] = endpoint;
+ const [method, url] = route.split(/ /);
+ const endpointDefaults = Object.assign(
+ {
+ method,
+ url
+ },
+ defaults
+ );
+ if (!endpointMethodsMap.has(scope)) {
+ endpointMethodsMap.set(scope, /* @__PURE__ */ new Map());
+ }
+ endpointMethodsMap.get(scope).set(methodName, {
+ scope,
+ methodName,
+ endpointDefaults,
+ decorations
+ });
+ }
+}
+var handler = {
+ has({ scope }, methodName) {
+ return endpointMethodsMap.get(scope).has(methodName);
+ },
+ getOwnPropertyDescriptor(target, methodName) {
+ return {
+ value: this.get(target, methodName),
+ // ensures method is in the cache
+ configurable: true,
+ writable: true,
+ enumerable: true
+ };
+ },
+ defineProperty(target, methodName, descriptor) {
+ Object.defineProperty(target.cache, methodName, descriptor);
+ return true;
+ },
+ deleteProperty(target, methodName) {
+ delete target.cache[methodName];
+ return true;
+ },
+ ownKeys({ scope }) {
+ return [...endpointMethodsMap.get(scope).keys()];
+ },
+ set(target, methodName, value) {
+ return target.cache[methodName] = value;
+ },
+ get({ octokit, scope, cache }, methodName) {
+ if (cache[methodName]) {
+ return cache[methodName];
+ }
+ const method = endpointMethodsMap.get(scope).get(methodName);
+ if (!method) {
+ return void 0;
+ }
+ const { endpointDefaults, decorations } = method;
+ if (decorations) {
+ cache[methodName] = decorate(
+ octokit,
+ scope,
+ methodName,
+ endpointDefaults,
+ decorations
+ );
+ } else {
+ cache[methodName] = octokit.request.defaults(endpointDefaults);
+ }
+ return cache[methodName];
+ }
+};
+function endpointsToMethods(octokit) {
+ const newMethods = {};
+ for (const scope of endpointMethodsMap.keys()) {
+ newMethods[scope] = new Proxy({ octokit, scope, cache: {} }, handler);
+ }
+ return newMethods;
+}
+function decorate(octokit, scope, methodName, defaults, decorations) {
+ const requestWithDefaults = octokit.request.defaults(defaults);
+ function withDecorations(...args) {
+ let options = requestWithDefaults.endpoint.merge(...args);
+ if (decorations.mapToData) {
+ options = Object.assign({}, options, {
+ data: options[decorations.mapToData],
+ [decorations.mapToData]: void 0
+ });
+ return requestWithDefaults(options);
+ }
+ if (decorations.renamed) {
+ const [newScope, newMethodName] = decorations.renamed;
+ octokit.log.warn(
+ `octokit.${scope}.${methodName}() has been renamed to octokit.${newScope}.${newMethodName}()`
+ );
+ }
+ if (decorations.deprecated) {
+ octokit.log.warn(decorations.deprecated);
+ }
+ if (decorations.renamedParameters) {
+ const options2 = requestWithDefaults.endpoint.merge(...args);
+ for (const [name, alias] of Object.entries(
+ decorations.renamedParameters
+ )) {
+ if (name in options2) {
+ octokit.log.warn(
+ `"${name}" parameter is deprecated for "octokit.${scope}.${methodName}()". Use "${alias}" instead`
+ );
+ if (!(alias in options2)) {
+ options2[alias] = options2[name];
+ }
+ delete options2[name];
+ }
+ }
+ return requestWithDefaults(options2);
+ }
+ return requestWithDefaults(...args);
+ }
+ return Object.assign(withDecorations, requestWithDefaults);
+}
+
+// pkg/dist-src/index.js
+function restEndpointMethods(octokit) {
+ const api = endpointsToMethods(octokit);
+ return {
+ rest: api
+ };
+}
+restEndpointMethods.VERSION = VERSION;
+function legacyRestEndpointMethods(octokit) {
+ const api = endpointsToMethods(octokit);
+ return {
+ ...api,
+ rest: api
+ };
+}
+legacyRestEndpointMethods.VERSION = VERSION;
+// Annotate the CommonJS export names for ESM import in node:
+0 && (0);
+
+
+/***/ }),
+
+/***/ 10537:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+"use strict";
+
+var __create = Object.create;
+var __defProp = Object.defineProperty;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __getProtoOf = Object.getPrototypeOf;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __export = (target, all) => {
+ for (var name in all)
+ __defProp(target, name, { get: all[name], enumerable: true });
+};
+var __copyProps = (to, from, except, desc) => {
+ if (from && typeof from === "object" || typeof from === "function") {
+ for (let key of __getOwnPropNames(from))
+ if (!__hasOwnProp.call(to, key) && key !== except)
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+ }
+ return to;
+};
+var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
+ // If the importer is in node compatibility mode or this is not an ESM
+ // file that has been converted to a CommonJS file using a Babel-
+ // compatible transform (i.e. "__esModule" has not been set), then set
+ // "default" to the CommonJS "module.exports" for node compatibility.
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
+ mod
+));
+var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+
+// pkg/dist-src/index.js
+var dist_src_exports = {};
+__export(dist_src_exports, {
+ RequestError: () => RequestError
+});
+module.exports = __toCommonJS(dist_src_exports);
+var import_deprecation = __nccwpck_require__(58932);
+var import_once = __toESM(__nccwpck_require__(1223));
+var logOnceCode = (0, import_once.default)((deprecation) => console.warn(deprecation));
+var logOnceHeaders = (0, import_once.default)((deprecation) => console.warn(deprecation));
+var RequestError = class extends Error {
+ constructor(message, statusCode, options) {
+ super(message);
+ if (Error.captureStackTrace) {
+ Error.captureStackTrace(this, this.constructor);
+ }
+ this.name = "HttpError";
+ this.status = statusCode;
+ let headers;
+ if ("headers" in options && typeof options.headers !== "undefined") {
+ headers = options.headers;
+ }
+ if ("response" in options) {
+ this.response = options.response;
+ headers = options.response.headers;
+ }
+ const requestCopy = Object.assign({}, options.request);
+ if (options.request.headers.authorization) {
+ requestCopy.headers = Object.assign({}, options.request.headers, {
+ authorization: options.request.headers.authorization.replace(
+ / .*$/,
+ " [REDACTED]"
+ )
+ });
+ }
+ requestCopy.url = requestCopy.url.replace(/\bclient_secret=\w+/g, "client_secret=[REDACTED]").replace(/\baccess_token=\w+/g, "access_token=[REDACTED]");
+ this.request = requestCopy;
+ Object.defineProperty(this, "code", {
+ get() {
+ logOnceCode(
+ new import_deprecation.Deprecation(
+ "[@octokit/request-error] `error.code` is deprecated, use `error.status`."
+ )
+ );
+ return statusCode;
+ }
+ });
+ Object.defineProperty(this, "headers", {
+ get() {
+ logOnceHeaders(
+ new import_deprecation.Deprecation(
+ "[@octokit/request-error] `error.headers` is deprecated, use `error.response.headers`."
+ )
+ );
+ return headers || {};
+ }
+ });
+ }
+};
+// Annotate the CommonJS export names for ESM import in node:
+0 && (0);
+
+
+/***/ }),
+
+/***/ 36234:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+"use strict";
+
+var __defProp = Object.defineProperty;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __export = (target, all) => {
+ for (var name in all)
+ __defProp(target, name, { get: all[name], enumerable: true });
+};
+var __copyProps = (to, from, except, desc) => {
+ if (from && typeof from === "object" || typeof from === "function") {
+ for (let key of __getOwnPropNames(from))
+ if (!__hasOwnProp.call(to, key) && key !== except)
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+ }
+ return to;
+};
+var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+
+// pkg/dist-src/index.js
+var dist_src_exports = {};
+__export(dist_src_exports, {
+ request: () => request
+});
+module.exports = __toCommonJS(dist_src_exports);
+var import_endpoint = __nccwpck_require__(59440);
+var import_universal_user_agent = __nccwpck_require__(45030);
+
+// pkg/dist-src/version.js
+var VERSION = "8.1.4";
+
+// pkg/dist-src/fetch-wrapper.js
+var import_is_plain_object = __nccwpck_require__(63287);
+var import_request_error = __nccwpck_require__(10537);
+
+// pkg/dist-src/get-buffer-response.js
+function getBufferResponse(response) {
+ return response.arrayBuffer();
+}
+
+// pkg/dist-src/fetch-wrapper.js
+function fetchWrapper(requestOptions) {
+ var _a, _b, _c;
+ const log = requestOptions.request && requestOptions.request.log ? requestOptions.request.log : console;
+ const parseSuccessResponseBody = ((_a = requestOptions.request) == null ? void 0 : _a.parseSuccessResponseBody) !== false;
+ if ((0, import_is_plain_object.isPlainObject)(requestOptions.body) || Array.isArray(requestOptions.body)) {
+ requestOptions.body = JSON.stringify(requestOptions.body);
+ }
+ let headers = {};
+ let status;
+ let url;
+ let { fetch } = globalThis;
+ if ((_b = requestOptions.request) == null ? void 0 : _b.fetch) {
+ fetch = requestOptions.request.fetch;
+ }
+ if (!fetch) {
+ throw new Error(
+ "fetch is not set. Please pass a fetch implementation as new Octokit({ request: { fetch }}). Learn more at https://github.com/octokit/octokit.js/#fetch-missing"
+ );
+ }
+ return fetch(requestOptions.url, {
+ method: requestOptions.method,
+ body: requestOptions.body,
+ headers: requestOptions.headers,
+ signal: (_c = requestOptions.request) == null ? void 0 : _c.signal,
+ // duplex must be set if request.body is ReadableStream or Async Iterables.
+ // See https://fetch.spec.whatwg.org/#dom-requestinit-duplex.
+ ...requestOptions.body && { duplex: "half" }
+ }).then(async (response) => {
+ url = response.url;
+ status = response.status;
+ for (const keyAndValue of response.headers) {
+ headers[keyAndValue[0]] = keyAndValue[1];
+ }
+ if ("deprecation" in headers) {
+ const matches = headers.link && headers.link.match(/<([^>]+)>; rel="deprecation"/);
+ const deprecationLink = matches && matches.pop();
+ log.warn(
+ `[@octokit/request] "${requestOptions.method} ${requestOptions.url}" is deprecated. It is scheduled to be removed on ${headers.sunset}${deprecationLink ? `. See ${deprecationLink}` : ""}`
+ );
+ }
+ if (status === 204 || status === 205) {
+ return;
+ }
+ if (requestOptions.method === "HEAD") {
+ if (status < 400) {
+ return;
+ }
+ throw new import_request_error.RequestError(response.statusText, status, {
+ response: {
+ url,
+ status,
+ headers,
+ data: void 0
+ },
+ request: requestOptions
+ });
+ }
+ if (status === 304) {
+ throw new import_request_error.RequestError("Not modified", status, {
+ response: {
+ url,
+ status,
+ headers,
+ data: await getResponseData(response)
+ },
+ request: requestOptions
+ });
+ }
+ if (status >= 400) {
+ const data = await getResponseData(response);
+ const error = new import_request_error.RequestError(toErrorMessage(data), status, {
+ response: {
+ url,
+ status,
+ headers,
+ data
+ },
+ request: requestOptions
+ });
+ throw error;
+ }
+ return parseSuccessResponseBody ? await getResponseData(response) : response.body;
+ }).then((data) => {
+ return {
+ status,
+ url,
+ headers,
+ data
+ };
+ }).catch((error) => {
+ if (error instanceof import_request_error.RequestError)
+ throw error;
+ else if (error.name === "AbortError")
+ throw error;
+ let message = error.message;
+ if (error.name === "TypeError" && "cause" in error) {
+ if (error.cause instanceof Error) {
+ message = error.cause.message;
+ } else if (typeof error.cause === "string") {
+ message = error.cause;
+ }
+ }
+ throw new import_request_error.RequestError(message, 500, {
+ request: requestOptions
+ });
+ });
+}
+async function getResponseData(response) {
+ const contentType = response.headers.get("content-type");
+ if (/application\/json/.test(contentType)) {
+ return response.json();
+ }
+ if (!contentType || /^text\/|charset=utf-8$/.test(contentType)) {
+ return response.text();
+ }
+ return getBufferResponse(response);
+}
+function toErrorMessage(data) {
+ if (typeof data === "string")
+ return data;
+ if ("message" in data) {
+ if (Array.isArray(data.errors)) {
+ return `${data.message}: ${data.errors.map(JSON.stringify).join(", ")}`;
+ }
+ return data.message;
+ }
+ return `Unknown error: ${JSON.stringify(data)}`;
+}
+
+// pkg/dist-src/with-defaults.js
+function withDefaults(oldEndpoint, newDefaults) {
+ const endpoint2 = oldEndpoint.defaults(newDefaults);
+ const newApi = function(route, parameters) {
+ const endpointOptions = endpoint2.merge(route, parameters);
+ if (!endpointOptions.request || !endpointOptions.request.hook) {
+ return fetchWrapper(endpoint2.parse(endpointOptions));
+ }
+ const request2 = (route2, parameters2) => {
+ return fetchWrapper(
+ endpoint2.parse(endpoint2.merge(route2, parameters2))
+ );
+ };
+ Object.assign(request2, {
+ endpoint: endpoint2,
+ defaults: withDefaults.bind(null, endpoint2)
+ });
+ return endpointOptions.request.hook(request2, endpointOptions);
+ };
+ return Object.assign(newApi, {
+ endpoint: endpoint2,
+ defaults: withDefaults.bind(null, endpoint2)
+ });
+}
+
+// pkg/dist-src/index.js
+var request = withDefaults(import_endpoint.endpoint, {
+ headers: {
+ "user-agent": `octokit-request.js/${VERSION} ${(0, import_universal_user_agent.getUserAgent)()}`
+ }
+});
+// Annotate the CommonJS export names for ESM import in node:
+0 && (0);
+
+
+/***/ }),
+
+/***/ 43779:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.NODE_USE_DUALSTACK_ENDPOINT_CONFIG_OPTIONS = exports.DEFAULT_USE_DUALSTACK_ENDPOINT = exports.CONFIG_USE_DUALSTACK_ENDPOINT = exports.ENV_USE_DUALSTACK_ENDPOINT = void 0;
+const util_config_provider_1 = __nccwpck_require__(83375);
+exports.ENV_USE_DUALSTACK_ENDPOINT = "AWS_USE_DUALSTACK_ENDPOINT";
+exports.CONFIG_USE_DUALSTACK_ENDPOINT = "use_dualstack_endpoint";
+exports.DEFAULT_USE_DUALSTACK_ENDPOINT = false;
+exports.NODE_USE_DUALSTACK_ENDPOINT_CONFIG_OPTIONS = {
+ environmentVariableSelector: (env) => (0, util_config_provider_1.booleanSelector)(env, exports.ENV_USE_DUALSTACK_ENDPOINT, util_config_provider_1.SelectorType.ENV),
+ configFileSelector: (profile) => (0, util_config_provider_1.booleanSelector)(profile, exports.CONFIG_USE_DUALSTACK_ENDPOINT, util_config_provider_1.SelectorType.CONFIG),
+ default: false,
+};
+
+
+/***/ }),
+
+/***/ 17994:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.NODE_USE_FIPS_ENDPOINT_CONFIG_OPTIONS = exports.DEFAULT_USE_FIPS_ENDPOINT = exports.CONFIG_USE_FIPS_ENDPOINT = exports.ENV_USE_FIPS_ENDPOINT = void 0;
+const util_config_provider_1 = __nccwpck_require__(83375);
+exports.ENV_USE_FIPS_ENDPOINT = "AWS_USE_FIPS_ENDPOINT";
+exports.CONFIG_USE_FIPS_ENDPOINT = "use_fips_endpoint";
+exports.DEFAULT_USE_FIPS_ENDPOINT = false;
+exports.NODE_USE_FIPS_ENDPOINT_CONFIG_OPTIONS = {
+ environmentVariableSelector: (env) => (0, util_config_provider_1.booleanSelector)(env, exports.ENV_USE_FIPS_ENDPOINT, util_config_provider_1.SelectorType.ENV),
+ configFileSelector: (profile) => (0, util_config_provider_1.booleanSelector)(profile, exports.CONFIG_USE_FIPS_ENDPOINT, util_config_provider_1.SelectorType.CONFIG),
+ default: false,
+};
+
+
+/***/ }),
+
+/***/ 18421:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+const tslib_1 = __nccwpck_require__(4351);
+tslib_1.__exportStar(__nccwpck_require__(43779), exports);
+tslib_1.__exportStar(__nccwpck_require__(17994), exports);
+tslib_1.__exportStar(__nccwpck_require__(37432), exports);
+tslib_1.__exportStar(__nccwpck_require__(61892), exports);
+
+
+/***/ }),
+
+/***/ 37432:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.resolveCustomEndpointsConfig = void 0;
+const util_middleware_1 = __nccwpck_require__(2390);
+const resolveCustomEndpointsConfig = (input) => {
+ var _a, _b;
+ const { endpoint, urlParser } = input;
+ return {
+ ...input,
+ tls: (_a = input.tls) !== null && _a !== void 0 ? _a : true,
+ endpoint: (0, util_middleware_1.normalizeProvider)(typeof endpoint === "string" ? urlParser(endpoint) : endpoint),
+ isCustomEndpoint: true,
+ useDualstackEndpoint: (0, util_middleware_1.normalizeProvider)((_b = input.useDualstackEndpoint) !== null && _b !== void 0 ? _b : false),
+ };
+};
+exports.resolveCustomEndpointsConfig = resolveCustomEndpointsConfig;
+
+
+/***/ }),
+
+/***/ 61892:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.resolveEndpointsConfig = void 0;
+const util_middleware_1 = __nccwpck_require__(2390);
+const getEndpointFromRegion_1 = __nccwpck_require__(48570);
+const resolveEndpointsConfig = (input) => {
+ var _a, _b;
+ const useDualstackEndpoint = (0, util_middleware_1.normalizeProvider)((_a = input.useDualstackEndpoint) !== null && _a !== void 0 ? _a : false);
+ const { endpoint, useFipsEndpoint, urlParser } = input;
+ return {
+ ...input,
+ tls: (_b = input.tls) !== null && _b !== void 0 ? _b : true,
+ endpoint: endpoint
+ ? (0, util_middleware_1.normalizeProvider)(typeof endpoint === "string" ? urlParser(endpoint) : endpoint)
+ : () => (0, getEndpointFromRegion_1.getEndpointFromRegion)({ ...input, useDualstackEndpoint, useFipsEndpoint }),
+ isCustomEndpoint: !!endpoint,
+ useDualstackEndpoint,
+ };
+};
+exports.resolveEndpointsConfig = resolveEndpointsConfig;
+
+
+/***/ }),
+
+/***/ 48570:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.getEndpointFromRegion = void 0;
+const getEndpointFromRegion = async (input) => {
+ var _a;
+ const { tls = true } = input;
+ const region = await input.region();
+ const dnsHostRegex = new RegExp(/^([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]{0,61}[a-zA-Z0-9])$/);
+ if (!dnsHostRegex.test(region)) {
+ throw new Error("Invalid region in client config");
+ }
+ const useDualstackEndpoint = await input.useDualstackEndpoint();
+ const useFipsEndpoint = await input.useFipsEndpoint();
+ const { hostname } = (_a = (await input.regionInfoProvider(region, { useDualstackEndpoint, useFipsEndpoint }))) !== null && _a !== void 0 ? _a : {};
+ if (!hostname) {
+ throw new Error("Cannot resolve hostname from client config");
+ }
+ return input.urlParser(`${tls ? "https:" : "http:"}//${hostname}`);
+};
+exports.getEndpointFromRegion = getEndpointFromRegion;
+
+
+/***/ }),
+
+/***/ 53098:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+const tslib_1 = __nccwpck_require__(4351);
+tslib_1.__exportStar(__nccwpck_require__(18421), exports);
+tslib_1.__exportStar(__nccwpck_require__(221), exports);
+tslib_1.__exportStar(__nccwpck_require__(86985), exports);
+
+
+/***/ }),
+
+/***/ 33898:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.NODE_REGION_CONFIG_FILE_OPTIONS = exports.NODE_REGION_CONFIG_OPTIONS = exports.REGION_INI_NAME = exports.REGION_ENV_NAME = void 0;
+exports.REGION_ENV_NAME = "AWS_REGION";
+exports.REGION_INI_NAME = "region";
+exports.NODE_REGION_CONFIG_OPTIONS = {
+ environmentVariableSelector: (env) => env[exports.REGION_ENV_NAME],
+ configFileSelector: (profile) => profile[exports.REGION_INI_NAME],
+ default: () => {
+ throw new Error("Region is missing");
+ },
+};
+exports.NODE_REGION_CONFIG_FILE_OPTIONS = {
+ preferredFile: "credentials",
+};
+
+
+/***/ }),
+
+/***/ 49506:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.getRealRegion = void 0;
+const isFipsRegion_1 = __nccwpck_require__(43870);
+const getRealRegion = (region) => (0, isFipsRegion_1.isFipsRegion)(region)
+ ? ["fips-aws-global", "aws-fips"].includes(region)
+ ? "us-east-1"
+ : region.replace(/fips-(dkr-|prod-)?|-fips/, "")
+ : region;
+exports.getRealRegion = getRealRegion;
+
+
+/***/ }),
+
+/***/ 221:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+const tslib_1 = __nccwpck_require__(4351);
+tslib_1.__exportStar(__nccwpck_require__(33898), exports);
+tslib_1.__exportStar(__nccwpck_require__(87065), exports);
+
+
+/***/ }),
+
+/***/ 43870:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.isFipsRegion = void 0;
+const isFipsRegion = (region) => typeof region === "string" && (region.startsWith("fips-") || region.endsWith("-fips"));
+exports.isFipsRegion = isFipsRegion;
+
+
+/***/ }),
+
+/***/ 87065:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.resolveRegionConfig = void 0;
+const getRealRegion_1 = __nccwpck_require__(49506);
+const isFipsRegion_1 = __nccwpck_require__(43870);
+const resolveRegionConfig = (input) => {
+ const { region, useFipsEndpoint } = input;
+ if (!region) {
+ throw new Error("Region is missing");
+ }
+ return {
+ ...input,
+ region: async () => {
+ if (typeof region === "string") {
+ return (0, getRealRegion_1.getRealRegion)(region);
+ }
+ const providedRegion = await region();
+ return (0, getRealRegion_1.getRealRegion)(providedRegion);
+ },
+ useFipsEndpoint: async () => {
+ const providedRegion = typeof region === "string" ? region : await region();
+ if ((0, isFipsRegion_1.isFipsRegion)(providedRegion)) {
+ return true;
+ }
+ return typeof useFipsEndpoint !== "function" ? Promise.resolve(!!useFipsEndpoint) : useFipsEndpoint();
+ },
+ };
+};
+exports.resolveRegionConfig = resolveRegionConfig;
+
+
+/***/ }),
+
+/***/ 19814:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+
+
+/***/ }),
+
+/***/ 14832:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+
+
+/***/ }),
+
+/***/ 99760:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.getHostnameFromVariants = void 0;
+const getHostnameFromVariants = (variants = [], { useFipsEndpoint, useDualstackEndpoint }) => {
+ var _a;
+ return (_a = variants.find(({ tags }) => useFipsEndpoint === tags.includes("fips") && useDualstackEndpoint === tags.includes("dualstack"))) === null || _a === void 0 ? void 0 : _a.hostname;
+};
+exports.getHostnameFromVariants = getHostnameFromVariants;
+
+
+/***/ }),
+
+/***/ 77792:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.getRegionInfo = void 0;
+const getHostnameFromVariants_1 = __nccwpck_require__(99760);
+const getResolvedHostname_1 = __nccwpck_require__(1487);
+const getResolvedPartition_1 = __nccwpck_require__(44441);
+const getResolvedSigningRegion_1 = __nccwpck_require__(92281);
+const getRegionInfo = (region, { useFipsEndpoint = false, useDualstackEndpoint = false, signingService, regionHash, partitionHash, }) => {
+ var _a, _b, _c, _d, _e, _f;
+ const partition = (0, getResolvedPartition_1.getResolvedPartition)(region, { partitionHash });
+ const resolvedRegion = region in regionHash ? region : (_b = (_a = partitionHash[partition]) === null || _a === void 0 ? void 0 : _a.endpoint) !== null && _b !== void 0 ? _b : region;
+ const hostnameOptions = { useFipsEndpoint, useDualstackEndpoint };
+ const regionHostname = (0, getHostnameFromVariants_1.getHostnameFromVariants)((_c = regionHash[resolvedRegion]) === null || _c === void 0 ? void 0 : _c.variants, hostnameOptions);
+ const partitionHostname = (0, getHostnameFromVariants_1.getHostnameFromVariants)((_d = partitionHash[partition]) === null || _d === void 0 ? void 0 : _d.variants, hostnameOptions);
+ const hostname = (0, getResolvedHostname_1.getResolvedHostname)(resolvedRegion, { regionHostname, partitionHostname });
+ if (hostname === undefined) {
+ throw new Error(`Endpoint resolution failed for: ${{ resolvedRegion, useFipsEndpoint, useDualstackEndpoint }}`);
+ }
+ const signingRegion = (0, getResolvedSigningRegion_1.getResolvedSigningRegion)(hostname, {
+ signingRegion: (_e = regionHash[resolvedRegion]) === null || _e === void 0 ? void 0 : _e.signingRegion,
+ regionRegex: partitionHash[partition].regionRegex,
+ useFipsEndpoint,
+ });
+ return {
+ partition,
+ signingService,
+ hostname,
+ ...(signingRegion && { signingRegion }),
+ ...(((_f = regionHash[resolvedRegion]) === null || _f === void 0 ? void 0 : _f.signingService) && {
+ signingService: regionHash[resolvedRegion].signingService,
+ }),
+ };
+};
+exports.getRegionInfo = getRegionInfo;
+
+
+/***/ }),
+
+/***/ 1487:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.getResolvedHostname = void 0;
+const getResolvedHostname = (resolvedRegion, { regionHostname, partitionHostname }) => regionHostname
+ ? regionHostname
+ : partitionHostname
+ ? partitionHostname.replace("{region}", resolvedRegion)
+ : undefined;
+exports.getResolvedHostname = getResolvedHostname;
+
+
+/***/ }),
+
+/***/ 44441:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.getResolvedPartition = void 0;
+const getResolvedPartition = (region, { partitionHash }) => { var _a; return (_a = Object.keys(partitionHash || {}).find((key) => partitionHash[key].regions.includes(region))) !== null && _a !== void 0 ? _a : "aws"; };
+exports.getResolvedPartition = getResolvedPartition;
+
+
+/***/ }),
+
+/***/ 92281:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.getResolvedSigningRegion = void 0;
+const getResolvedSigningRegion = (hostname, { signingRegion, regionRegex, useFipsEndpoint }) => {
+ if (signingRegion) {
+ return signingRegion;
+ }
+ else if (useFipsEndpoint) {
+ const regionRegexJs = regionRegex.replace("\\\\", "\\").replace(/^\^/g, "\\.").replace(/\$$/g, "\\.");
+ const regionRegexmatchArray = hostname.match(regionRegexJs);
+ if (regionRegexmatchArray) {
+ return regionRegexmatchArray[0].slice(1, -1);
+ }
+ }
+};
+exports.getResolvedSigningRegion = getResolvedSigningRegion;
+
+
+/***/ }),
+
+/***/ 86985:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+const tslib_1 = __nccwpck_require__(4351);
+tslib_1.__exportStar(__nccwpck_require__(19814), exports);
+tslib_1.__exportStar(__nccwpck_require__(14832), exports);
+tslib_1.__exportStar(__nccwpck_require__(77792), exports);
+
+
+/***/ }),
+
+/***/ 18044:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.Endpoint = void 0;
+var Endpoint;
+(function (Endpoint) {
+ Endpoint["IPv4"] = "http://169.254.169.254";
+ Endpoint["IPv6"] = "http://[fd00:ec2::254]";
+})(Endpoint = exports.Endpoint || (exports.Endpoint = {}));
+
+
+/***/ }),
+
+/***/ 57342:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.ENDPOINT_CONFIG_OPTIONS = exports.CONFIG_ENDPOINT_NAME = exports.ENV_ENDPOINT_NAME = void 0;
+exports.ENV_ENDPOINT_NAME = "AWS_EC2_METADATA_SERVICE_ENDPOINT";
+exports.CONFIG_ENDPOINT_NAME = "ec2_metadata_service_endpoint";
+exports.ENDPOINT_CONFIG_OPTIONS = {
+ environmentVariableSelector: (env) => env[exports.ENV_ENDPOINT_NAME],
+ configFileSelector: (profile) => profile[exports.CONFIG_ENDPOINT_NAME],
+ default: undefined,
+};
+
+
+/***/ }),
+
+/***/ 80991:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.EndpointMode = void 0;
+var EndpointMode;
+(function (EndpointMode) {
+ EndpointMode["IPv4"] = "IPv4";
+ EndpointMode["IPv6"] = "IPv6";
+})(EndpointMode = exports.EndpointMode || (exports.EndpointMode = {}));
+
+
+/***/ }),
+
+/***/ 88337:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.ENDPOINT_MODE_CONFIG_OPTIONS = exports.CONFIG_ENDPOINT_MODE_NAME = exports.ENV_ENDPOINT_MODE_NAME = void 0;
+const EndpointMode_1 = __nccwpck_require__(80991);
+exports.ENV_ENDPOINT_MODE_NAME = "AWS_EC2_METADATA_SERVICE_ENDPOINT_MODE";
+exports.CONFIG_ENDPOINT_MODE_NAME = "ec2_metadata_service_endpoint_mode";
+exports.ENDPOINT_MODE_CONFIG_OPTIONS = {
+ environmentVariableSelector: (env) => env[exports.ENV_ENDPOINT_MODE_NAME],
+ configFileSelector: (profile) => profile[exports.CONFIG_ENDPOINT_MODE_NAME],
+ default: EndpointMode_1.EndpointMode.IPv4,
+};
+
+
+/***/ }),
+
+/***/ 89227:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.fromContainerMetadata = exports.ENV_CMDS_AUTH_TOKEN = exports.ENV_CMDS_RELATIVE_URI = exports.ENV_CMDS_FULL_URI = void 0;
+const property_provider_1 = __nccwpck_require__(79721);
+const url_1 = __nccwpck_require__(57310);
+const httpRequest_1 = __nccwpck_require__(32199);
+const ImdsCredentials_1 = __nccwpck_require__(6894);
+const RemoteProviderInit_1 = __nccwpck_require__(98533);
+const retry_1 = __nccwpck_require__(91351);
+exports.ENV_CMDS_FULL_URI = "AWS_CONTAINER_CREDENTIALS_FULL_URI";
+exports.ENV_CMDS_RELATIVE_URI = "AWS_CONTAINER_CREDENTIALS_RELATIVE_URI";
+exports.ENV_CMDS_AUTH_TOKEN = "AWS_CONTAINER_AUTHORIZATION_TOKEN";
+const fromContainerMetadata = (init = {}) => {
+ const { timeout, maxRetries } = (0, RemoteProviderInit_1.providerConfigFromInit)(init);
+ return () => (0, retry_1.retry)(async () => {
+ const requestOptions = await getCmdsUri();
+ const credsResponse = JSON.parse(await requestFromEcsImds(timeout, requestOptions));
+ if (!(0, ImdsCredentials_1.isImdsCredentials)(credsResponse)) {
+ throw new property_provider_1.CredentialsProviderError("Invalid response received from instance metadata service.");
+ }
+ return (0, ImdsCredentials_1.fromImdsCredentials)(credsResponse);
+ }, maxRetries);
+};
+exports.fromContainerMetadata = fromContainerMetadata;
+const requestFromEcsImds = async (timeout, options) => {
+ if (process.env[exports.ENV_CMDS_AUTH_TOKEN]) {
+ options.headers = {
+ ...options.headers,
+ Authorization: process.env[exports.ENV_CMDS_AUTH_TOKEN],
+ };
+ }
+ const buffer = await (0, httpRequest_1.httpRequest)({
+ ...options,
+ timeout,
+ });
+ return buffer.toString();
+};
+const CMDS_IP = "169.254.170.2";
+const GREENGRASS_HOSTS = {
+ localhost: true,
+ "127.0.0.1": true,
+};
+const GREENGRASS_PROTOCOLS = {
+ "http:": true,
+ "https:": true,
+};
+const getCmdsUri = async () => {
+ if (process.env[exports.ENV_CMDS_RELATIVE_URI]) {
+ return {
+ hostname: CMDS_IP,
+ path: process.env[exports.ENV_CMDS_RELATIVE_URI],
+ };
+ }
+ if (process.env[exports.ENV_CMDS_FULL_URI]) {
+ const parsed = (0, url_1.parse)(process.env[exports.ENV_CMDS_FULL_URI]);
+ if (!parsed.hostname || !(parsed.hostname in GREENGRASS_HOSTS)) {
+ throw new property_provider_1.CredentialsProviderError(`${parsed.hostname} is not a valid container metadata service hostname`, false);
+ }
+ if (!parsed.protocol || !(parsed.protocol in GREENGRASS_PROTOCOLS)) {
+ throw new property_provider_1.CredentialsProviderError(`${parsed.protocol} is not a valid container metadata service protocol`, false);
+ }
+ return {
+ ...parsed,
+ port: parsed.port ? parseInt(parsed.port, 10) : undefined,
+ };
+ }
+ throw new property_provider_1.CredentialsProviderError("The container metadata credential provider cannot be used unless" +
+ ` the ${exports.ENV_CMDS_RELATIVE_URI} or ${exports.ENV_CMDS_FULL_URI} environment` +
+ " variable is set", false);
+};
+
+
+/***/ }),
+
+/***/ 52207:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.fromInstanceMetadata = void 0;
+const property_provider_1 = __nccwpck_require__(79721);
+const httpRequest_1 = __nccwpck_require__(32199);
+const ImdsCredentials_1 = __nccwpck_require__(6894);
+const RemoteProviderInit_1 = __nccwpck_require__(98533);
+const retry_1 = __nccwpck_require__(91351);
+const getInstanceMetadataEndpoint_1 = __nccwpck_require__(92460);
+const staticStabilityProvider_1 = __nccwpck_require__(74035);
+const IMDS_PATH = "/latest/meta-data/iam/security-credentials/";
+const IMDS_TOKEN_PATH = "/latest/api/token";
+const fromInstanceMetadata = (init = {}) => (0, staticStabilityProvider_1.staticStabilityProvider)(getInstanceImdsProvider(init), { logger: init.logger });
+exports.fromInstanceMetadata = fromInstanceMetadata;
+const getInstanceImdsProvider = (init) => {
+ let disableFetchToken = false;
+ const { timeout, maxRetries } = (0, RemoteProviderInit_1.providerConfigFromInit)(init);
+ const getCredentials = async (maxRetries, options) => {
+ const profile = (await (0, retry_1.retry)(async () => {
+ let profile;
+ try {
+ profile = await getProfile(options);
+ }
+ catch (err) {
+ if (err.statusCode === 401) {
+ disableFetchToken = false;
+ }
+ throw err;
+ }
+ return profile;
+ }, maxRetries)).trim();
+ return (0, retry_1.retry)(async () => {
+ let creds;
+ try {
+ creds = await getCredentialsFromProfile(profile, options);
+ }
+ catch (err) {
+ if (err.statusCode === 401) {
+ disableFetchToken = false;
+ }
+ throw err;
+ }
+ return creds;
+ }, maxRetries);
+ };
+ return async () => {
+ const endpoint = await (0, getInstanceMetadataEndpoint_1.getInstanceMetadataEndpoint)();
+ if (disableFetchToken) {
+ return getCredentials(maxRetries, { ...endpoint, timeout });
+ }
+ else {
+ let token;
+ try {
+ token = (await getMetadataToken({ ...endpoint, timeout })).toString();
+ }
+ catch (error) {
+ if ((error === null || error === void 0 ? void 0 : error.statusCode) === 400) {
+ throw Object.assign(error, {
+ message: "EC2 Metadata token request returned error",
+ });
+ }
+ else if (error.message === "TimeoutError" || [403, 404, 405].includes(error.statusCode)) {
+ disableFetchToken = true;
+ }
+ return getCredentials(maxRetries, { ...endpoint, timeout });
+ }
+ return getCredentials(maxRetries, {
+ ...endpoint,
+ headers: {
+ "x-aws-ec2-metadata-token": token,
+ },
+ timeout,
+ });
+ }
+ };
+};
+const getMetadataToken = async (options) => (0, httpRequest_1.httpRequest)({
+ ...options,
+ path: IMDS_TOKEN_PATH,
+ method: "PUT",
+ headers: {
+ "x-aws-ec2-metadata-token-ttl-seconds": "21600",
+ },
+});
+const getProfile = async (options) => (await (0, httpRequest_1.httpRequest)({ ...options, path: IMDS_PATH })).toString();
+const getCredentialsFromProfile = async (profile, options) => {
+ const credsResponse = JSON.parse((await (0, httpRequest_1.httpRequest)({
+ ...options,
+ path: IMDS_PATH + profile,
+ })).toString());
+ if (!(0, ImdsCredentials_1.isImdsCredentials)(credsResponse)) {
+ throw new property_provider_1.CredentialsProviderError("Invalid response received from instance metadata service.");
+ }
+ return (0, ImdsCredentials_1.fromImdsCredentials)(credsResponse);
+};
+
+
+/***/ }),
+
+/***/ 7477:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.getInstanceMetadataEndpoint = exports.httpRequest = void 0;
+const tslib_1 = __nccwpck_require__(4351);
+tslib_1.__exportStar(__nccwpck_require__(89227), exports);
+tslib_1.__exportStar(__nccwpck_require__(52207), exports);
+tslib_1.__exportStar(__nccwpck_require__(98533), exports);
+tslib_1.__exportStar(__nccwpck_require__(45036), exports);
+var httpRequest_1 = __nccwpck_require__(32199);
+Object.defineProperty(exports, "httpRequest", ({ enumerable: true, get: function () { return httpRequest_1.httpRequest; } }));
+var getInstanceMetadataEndpoint_1 = __nccwpck_require__(92460);
+Object.defineProperty(exports, "getInstanceMetadataEndpoint", ({ enumerable: true, get: function () { return getInstanceMetadataEndpoint_1.getInstanceMetadataEndpoint; } }));
+
+
+/***/ }),
+
+/***/ 6894:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.fromImdsCredentials = exports.isImdsCredentials = void 0;
+const isImdsCredentials = (arg) => Boolean(arg) &&
+ typeof arg === "object" &&
+ typeof arg.AccessKeyId === "string" &&
+ typeof arg.SecretAccessKey === "string" &&
+ typeof arg.Token === "string" &&
+ typeof arg.Expiration === "string";
+exports.isImdsCredentials = isImdsCredentials;
+const fromImdsCredentials = (creds) => ({
+ accessKeyId: creds.AccessKeyId,
+ secretAccessKey: creds.SecretAccessKey,
+ sessionToken: creds.Token,
+ expiration: new Date(creds.Expiration),
+});
+exports.fromImdsCredentials = fromImdsCredentials;
+
+
+/***/ }),
+
+/***/ 98533:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.providerConfigFromInit = exports.DEFAULT_MAX_RETRIES = exports.DEFAULT_TIMEOUT = void 0;
+exports.DEFAULT_TIMEOUT = 1000;
+exports.DEFAULT_MAX_RETRIES = 0;
+const providerConfigFromInit = ({ maxRetries = exports.DEFAULT_MAX_RETRIES, timeout = exports.DEFAULT_TIMEOUT, }) => ({ maxRetries, timeout });
+exports.providerConfigFromInit = providerConfigFromInit;
+
+
+/***/ }),
+
+/***/ 32199:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.httpRequest = void 0;
+const property_provider_1 = __nccwpck_require__(79721);
+const buffer_1 = __nccwpck_require__(14300);
+const http_1 = __nccwpck_require__(13685);
+function httpRequest(options) {
+ return new Promise((resolve, reject) => {
+ var _a;
+ const req = (0, http_1.request)({
+ method: "GET",
+ ...options,
+ hostname: (_a = options.hostname) === null || _a === void 0 ? void 0 : _a.replace(/^\[(.+)\]$/, "$1"),
+ });
+ req.on("error", (err) => {
+ reject(Object.assign(new property_provider_1.ProviderError("Unable to connect to instance metadata service"), err));
+ req.destroy();
+ });
+ req.on("timeout", () => {
+ reject(new property_provider_1.ProviderError("TimeoutError from instance metadata service"));
+ req.destroy();
+ });
+ req.on("response", (res) => {
+ const { statusCode = 400 } = res;
+ if (statusCode < 200 || 300 <= statusCode) {
+ reject(Object.assign(new property_provider_1.ProviderError("Error response received from instance metadata service"), { statusCode }));
+ req.destroy();
+ }
+ const chunks = [];
+ res.on("data", (chunk) => {
+ chunks.push(chunk);
+ });
+ res.on("end", () => {
+ resolve(buffer_1.Buffer.concat(chunks));
+ req.destroy();
+ });
+ });
+ req.end();
+ });
+}
+exports.httpRequest = httpRequest;
+
+
+/***/ }),
+
+/***/ 91351:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.retry = void 0;
+const retry = (toRetry, maxRetries) => {
+ let promise = toRetry();
+ for (let i = 0; i < maxRetries; i++) {
+ promise = promise.catch(toRetry);
+ }
+ return promise;
+};
+exports.retry = retry;
+
+
+/***/ }),
+
+/***/ 45036:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+
+
+/***/ }),
+
+/***/ 22666:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.getExtendedInstanceMetadataCredentials = void 0;
+const STATIC_STABILITY_REFRESH_INTERVAL_SECONDS = 5 * 60;
+const STATIC_STABILITY_REFRESH_INTERVAL_JITTER_WINDOW_SECONDS = 5 * 60;
+const STATIC_STABILITY_DOC_URL = "https://docs.aws.amazon.com/sdkref/latest/guide/feature-static-credentials.html";
+const getExtendedInstanceMetadataCredentials = (credentials, logger) => {
+ var _a;
+ const refreshInterval = STATIC_STABILITY_REFRESH_INTERVAL_SECONDS +
+ Math.floor(Math.random() * STATIC_STABILITY_REFRESH_INTERVAL_JITTER_WINDOW_SECONDS);
+ const newExpiration = new Date(Date.now() + refreshInterval * 1000);
+ logger.warn("Attempting credential expiration extension due to a credential service availability issue. A refresh of these " +
+ "credentials will be attempted after ${new Date(newExpiration)}.\nFor more information, please visit: " +
+ STATIC_STABILITY_DOC_URL);
+ const originalExpiration = (_a = credentials.originalExpiration) !== null && _a !== void 0 ? _a : credentials.expiration;
+ return {
+ ...credentials,
+ ...(originalExpiration ? { originalExpiration } : {}),
+ expiration: newExpiration,
+ };
+};
+exports.getExtendedInstanceMetadataCredentials = getExtendedInstanceMetadataCredentials;
+
+
+/***/ }),
+
+/***/ 92460:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.getInstanceMetadataEndpoint = void 0;
+const node_config_provider_1 = __nccwpck_require__(33461);
+const url_parser_1 = __nccwpck_require__(14681);
+const Endpoint_1 = __nccwpck_require__(18044);
+const EndpointConfigOptions_1 = __nccwpck_require__(57342);
+const EndpointMode_1 = __nccwpck_require__(80991);
+const EndpointModeConfigOptions_1 = __nccwpck_require__(88337);
+const getInstanceMetadataEndpoint = async () => (0, url_parser_1.parseUrl)((await getFromEndpointConfig()) || (await getFromEndpointModeConfig()));
+exports.getInstanceMetadataEndpoint = getInstanceMetadataEndpoint;
+const getFromEndpointConfig = async () => (0, node_config_provider_1.loadConfig)(EndpointConfigOptions_1.ENDPOINT_CONFIG_OPTIONS)();
+const getFromEndpointModeConfig = async () => {
+ const endpointMode = await (0, node_config_provider_1.loadConfig)(EndpointModeConfigOptions_1.ENDPOINT_MODE_CONFIG_OPTIONS)();
+ switch (endpointMode) {
+ case EndpointMode_1.EndpointMode.IPv4:
+ return Endpoint_1.Endpoint.IPv4;
+ case EndpointMode_1.EndpointMode.IPv6:
+ return Endpoint_1.Endpoint.IPv6;
+ default:
+ throw new Error(`Unsupported endpoint mode: ${endpointMode}.` + ` Select from ${Object.values(EndpointMode_1.EndpointMode)}`);
+ }
+};
+
+
+/***/ }),
+
+/***/ 74035:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.staticStabilityProvider = void 0;
+const getExtendedInstanceMetadataCredentials_1 = __nccwpck_require__(22666);
+const staticStabilityProvider = (provider, options = {}) => {
+ const logger = (options === null || options === void 0 ? void 0 : options.logger) || console;
+ let pastCredentials;
+ return async () => {
+ let credentials;
+ try {
+ credentials = await provider();
+ if (credentials.expiration && credentials.expiration.getTime() < Date.now()) {
+ credentials = (0, getExtendedInstanceMetadataCredentials_1.getExtendedInstanceMetadataCredentials)(credentials, logger);
+ }
+ }
+ catch (e) {
+ if (pastCredentials) {
+ logger.warn("Credential renew failed: ", e);
+ credentials = (0, getExtendedInstanceMetadataCredentials_1.getExtendedInstanceMetadataCredentials)(pastCredentials, logger);
+ }
+ else {
+ throw e;
+ }
+ }
+ pastCredentials = credentials;
+ return credentials;
+ };
+};
+exports.staticStabilityProvider = staticStabilityProvider;
+
+
+/***/ }),
+
+/***/ 11014:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.EventStreamCodec = void 0;
+const crc32_1 = __nccwpck_require__(47327);
+const HeaderMarshaller_1 = __nccwpck_require__(74712);
+const splitMessage_1 = __nccwpck_require__(20597);
+class EventStreamCodec {
+ constructor(toUtf8, fromUtf8) {
+ this.headerMarshaller = new HeaderMarshaller_1.HeaderMarshaller(toUtf8, fromUtf8);
+ this.messageBuffer = [];
+ this.isEndOfStream = false;
+ }
+ feed(message) {
+ this.messageBuffer.push(this.decode(message));
+ }
+ endOfStream() {
+ this.isEndOfStream = true;
+ }
+ getMessage() {
+ const message = this.messageBuffer.pop();
+ const isEndOfStream = this.isEndOfStream;
+ return {
+ getMessage() {
+ return message;
+ },
+ isEndOfStream() {
+ return isEndOfStream;
+ },
+ };
+ }
+ getAvailableMessages() {
+ const messages = this.messageBuffer;
+ this.messageBuffer = [];
+ const isEndOfStream = this.isEndOfStream;
+ return {
+ getMessages() {
+ return messages;
+ },
+ isEndOfStream() {
+ return isEndOfStream;
+ },
+ };
+ }
+ encode({ headers: rawHeaders, body }) {
+ const headers = this.headerMarshaller.format(rawHeaders);
+ const length = headers.byteLength + body.byteLength + 16;
+ const out = new Uint8Array(length);
+ const view = new DataView(out.buffer, out.byteOffset, out.byteLength);
+ const checksum = new crc32_1.Crc32();
+ view.setUint32(0, length, false);
+ view.setUint32(4, headers.byteLength, false);
+ view.setUint32(8, checksum.update(out.subarray(0, 8)).digest(), false);
+ out.set(headers, 12);
+ out.set(body, headers.byteLength + 12);
+ view.setUint32(length - 4, checksum.update(out.subarray(8, length - 4)).digest(), false);
+ return out;
+ }
+ decode(message) {
+ const { headers, body } = (0, splitMessage_1.splitMessage)(message);
+ return { headers: this.headerMarshaller.parse(headers), body };
+ }
+ formatHeaders(rawHeaders) {
+ return this.headerMarshaller.format(rawHeaders);
+ }
+}
+exports.EventStreamCodec = EventStreamCodec;
+
+
+/***/ }),
+
+/***/ 74712:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.HeaderMarshaller = void 0;
+const util_hex_encoding_1 = __nccwpck_require__(45364);
+const Int64_1 = __nccwpck_require__(46086);
+class HeaderMarshaller {
+ constructor(toUtf8, fromUtf8) {
+ this.toUtf8 = toUtf8;
+ this.fromUtf8 = fromUtf8;
+ }
+ format(headers) {
+ const chunks = [];
+ for (const headerName of Object.keys(headers)) {
+ const bytes = this.fromUtf8(headerName);
+ chunks.push(Uint8Array.from([bytes.byteLength]), bytes, this.formatHeaderValue(headers[headerName]));
+ }
+ const out = new Uint8Array(chunks.reduce((carry, bytes) => carry + bytes.byteLength, 0));
+ let position = 0;
+ for (const chunk of chunks) {
+ out.set(chunk, position);
+ position += chunk.byteLength;
+ }
+ return out;
+ }
+ formatHeaderValue(header) {
+ switch (header.type) {
+ case "boolean":
+ return Uint8Array.from([header.value ? 0 : 1]);
+ case "byte":
+ return Uint8Array.from([2, header.value]);
+ case "short":
+ const shortView = new DataView(new ArrayBuffer(3));
+ shortView.setUint8(0, 3);
+ shortView.setInt16(1, header.value, false);
+ return new Uint8Array(shortView.buffer);
+ case "integer":
+ const intView = new DataView(new ArrayBuffer(5));
+ intView.setUint8(0, 4);
+ intView.setInt32(1, header.value, false);
+ return new Uint8Array(intView.buffer);
+ case "long":
+ const longBytes = new Uint8Array(9);
+ longBytes[0] = 5;
+ longBytes.set(header.value.bytes, 1);
+ return longBytes;
+ case "binary":
+ const binView = new DataView(new ArrayBuffer(3 + header.value.byteLength));
+ binView.setUint8(0, 6);
+ binView.setUint16(1, header.value.byteLength, false);
+ const binBytes = new Uint8Array(binView.buffer);
+ binBytes.set(header.value, 3);
+ return binBytes;
+ case "string":
+ const utf8Bytes = this.fromUtf8(header.value);
+ const strView = new DataView(new ArrayBuffer(3 + utf8Bytes.byteLength));
+ strView.setUint8(0, 7);
+ strView.setUint16(1, utf8Bytes.byteLength, false);
+ const strBytes = new Uint8Array(strView.buffer);
+ strBytes.set(utf8Bytes, 3);
+ return strBytes;
+ case "timestamp":
+ const tsBytes = new Uint8Array(9);
+ tsBytes[0] = 8;
+ tsBytes.set(Int64_1.Int64.fromNumber(header.value.valueOf()).bytes, 1);
+ return tsBytes;
+ case "uuid":
+ if (!UUID_PATTERN.test(header.value)) {
+ throw new Error(`Invalid UUID received: ${header.value}`);
+ }
+ const uuidBytes = new Uint8Array(17);
+ uuidBytes[0] = 9;
+ uuidBytes.set((0, util_hex_encoding_1.fromHex)(header.value.replace(/\-/g, "")), 1);
+ return uuidBytes;
+ }
+ }
+ parse(headers) {
+ const out = {};
+ let position = 0;
+ while (position < headers.byteLength) {
+ const nameLength = headers.getUint8(position++);
+ const name = this.toUtf8(new Uint8Array(headers.buffer, headers.byteOffset + position, nameLength));
+ position += nameLength;
+ switch (headers.getUint8(position++)) {
+ case 0:
+ out[name] = {
+ type: BOOLEAN_TAG,
+ value: true,
+ };
+ break;
+ case 1:
+ out[name] = {
+ type: BOOLEAN_TAG,
+ value: false,
+ };
+ break;
+ case 2:
+ out[name] = {
+ type: BYTE_TAG,
+ value: headers.getInt8(position++),
+ };
+ break;
+ case 3:
+ out[name] = {
+ type: SHORT_TAG,
+ value: headers.getInt16(position, false),
+ };
+ position += 2;
+ break;
+ case 4:
+ out[name] = {
+ type: INT_TAG,
+ value: headers.getInt32(position, false),
+ };
+ position += 4;
+ break;
+ case 5:
+ out[name] = {
+ type: LONG_TAG,
+ value: new Int64_1.Int64(new Uint8Array(headers.buffer, headers.byteOffset + position, 8)),
+ };
+ position += 8;
+ break;
+ case 6:
+ const binaryLength = headers.getUint16(position, false);
+ position += 2;
+ out[name] = {
+ type: BINARY_TAG,
+ value: new Uint8Array(headers.buffer, headers.byteOffset + position, binaryLength),
+ };
+ position += binaryLength;
+ break;
+ case 7:
+ const stringLength = headers.getUint16(position, false);
+ position += 2;
+ out[name] = {
+ type: STRING_TAG,
+ value: this.toUtf8(new Uint8Array(headers.buffer, headers.byteOffset + position, stringLength)),
+ };
+ position += stringLength;
+ break;
+ case 8:
+ out[name] = {
+ type: TIMESTAMP_TAG,
+ value: new Date(new Int64_1.Int64(new Uint8Array(headers.buffer, headers.byteOffset + position, 8)).valueOf()),
+ };
+ position += 8;
+ break;
+ case 9:
+ const uuidBytes = new Uint8Array(headers.buffer, headers.byteOffset + position, 16);
+ position += 16;
+ out[name] = {
+ type: UUID_TAG,
+ value: `${(0, util_hex_encoding_1.toHex)(uuidBytes.subarray(0, 4))}-${(0, util_hex_encoding_1.toHex)(uuidBytes.subarray(4, 6))}-${(0, util_hex_encoding_1.toHex)(uuidBytes.subarray(6, 8))}-${(0, util_hex_encoding_1.toHex)(uuidBytes.subarray(8, 10))}-${(0, util_hex_encoding_1.toHex)(uuidBytes.subarray(10))}`,
+ };
+ break;
+ default:
+ throw new Error(`Unrecognized header type tag`);
+ }
+ }
+ return out;
+ }
+}
+exports.HeaderMarshaller = HeaderMarshaller;
+var HEADER_VALUE_TYPE;
+(function (HEADER_VALUE_TYPE) {
+ HEADER_VALUE_TYPE[HEADER_VALUE_TYPE["boolTrue"] = 0] = "boolTrue";
+ HEADER_VALUE_TYPE[HEADER_VALUE_TYPE["boolFalse"] = 1] = "boolFalse";
+ HEADER_VALUE_TYPE[HEADER_VALUE_TYPE["byte"] = 2] = "byte";
+ HEADER_VALUE_TYPE[HEADER_VALUE_TYPE["short"] = 3] = "short";
+ HEADER_VALUE_TYPE[HEADER_VALUE_TYPE["integer"] = 4] = "integer";
+ HEADER_VALUE_TYPE[HEADER_VALUE_TYPE["long"] = 5] = "long";
+ HEADER_VALUE_TYPE[HEADER_VALUE_TYPE["byteArray"] = 6] = "byteArray";
+ HEADER_VALUE_TYPE[HEADER_VALUE_TYPE["string"] = 7] = "string";
+ HEADER_VALUE_TYPE[HEADER_VALUE_TYPE["timestamp"] = 8] = "timestamp";
+ HEADER_VALUE_TYPE[HEADER_VALUE_TYPE["uuid"] = 9] = "uuid";
+})(HEADER_VALUE_TYPE || (HEADER_VALUE_TYPE = {}));
+const BOOLEAN_TAG = "boolean";
+const BYTE_TAG = "byte";
+const SHORT_TAG = "short";
+const INT_TAG = "integer";
+const LONG_TAG = "long";
+const BINARY_TAG = "binary";
+const STRING_TAG = "string";
+const TIMESTAMP_TAG = "timestamp";
+const UUID_TAG = "uuid";
+const UUID_PATTERN = /^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/;
+
+
+/***/ }),
+
+/***/ 46086:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.Int64 = void 0;
+const util_hex_encoding_1 = __nccwpck_require__(45364);
+class Int64 {
+ constructor(bytes) {
+ this.bytes = bytes;
+ if (bytes.byteLength !== 8) {
+ throw new Error("Int64 buffers must be exactly 8 bytes");
+ }
+ }
+ static fromNumber(number) {
+ if (number > 9223372036854776000 || number < -9223372036854776000) {
+ throw new Error(`${number} is too large (or, if negative, too small) to represent as an Int64`);
+ }
+ const bytes = new Uint8Array(8);
+ for (let i = 7, remaining = Math.abs(Math.round(number)); i > -1 && remaining > 0; i--, remaining /= 256) {
+ bytes[i] = remaining;
+ }
+ if (number < 0) {
+ negate(bytes);
+ }
+ return new Int64(bytes);
+ }
+ valueOf() {
+ const bytes = this.bytes.slice(0);
+ const negative = bytes[0] & 0b10000000;
+ if (negative) {
+ negate(bytes);
+ }
+ return parseInt((0, util_hex_encoding_1.toHex)(bytes), 16) * (negative ? -1 : 1);
+ }
+ toString() {
+ return String(this.valueOf());
+ }
+}
+exports.Int64 = Int64;
+function negate(bytes) {
+ for (let i = 0; i < 8; i++) {
+ bytes[i] ^= 0xff;
+ }
+ for (let i = 7; i > -1; i--) {
+ bytes[i]++;
+ if (bytes[i] !== 0)
+ break;
+ }
+}
+
+
+/***/ }),
+
+/***/ 73684:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+
+
+/***/ }),
+
+/***/ 57255:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.MessageDecoderStream = void 0;
+class MessageDecoderStream {
+ constructor(options) {
+ this.options = options;
+ }
+ [Symbol.asyncIterator]() {
+ return this.asyncIterator();
+ }
+ async *asyncIterator() {
+ for await (const bytes of this.options.inputStream) {
+ const decoded = this.options.decoder.decode(bytes);
+ yield decoded;
+ }
+ }
+}
+exports.MessageDecoderStream = MessageDecoderStream;
+
+
+/***/ }),
+
+/***/ 52362:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.MessageEncoderStream = void 0;
+class MessageEncoderStream {
+ constructor(options) {
+ this.options = options;
+ }
+ [Symbol.asyncIterator]() {
+ return this.asyncIterator();
+ }
+ async *asyncIterator() {
+ for await (const msg of this.options.messageStream) {
+ const encoded = this.options.encoder.encode(msg);
+ yield encoded;
+ }
+ if (this.options.includeEndFrame) {
+ yield new Uint8Array(0);
+ }
+ }
+}
+exports.MessageEncoderStream = MessageEncoderStream;
+
+
+/***/ }),
+
+/***/ 62379:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.SmithyMessageDecoderStream = void 0;
+class SmithyMessageDecoderStream {
+ constructor(options) {
+ this.options = options;
+ }
+ [Symbol.asyncIterator]() {
+ return this.asyncIterator();
+ }
+ async *asyncIterator() {
+ for await (const message of this.options.messageStream) {
+ const deserialized = await this.options.deserializer(message);
+ if (deserialized === undefined)
+ continue;
+ yield deserialized;
+ }
+ }
+}
+exports.SmithyMessageDecoderStream = SmithyMessageDecoderStream;
+
+
+/***/ }),
+
+/***/ 12484:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.SmithyMessageEncoderStream = void 0;
+class SmithyMessageEncoderStream {
+ constructor(options) {
+ this.options = options;
+ }
+ [Symbol.asyncIterator]() {
+ return this.asyncIterator();
+ }
+ async *asyncIterator() {
+ for await (const chunk of this.options.inputStream) {
+ const payloadBuf = this.options.serializer(chunk);
+ yield payloadBuf;
+ }
+ }
+}
+exports.SmithyMessageEncoderStream = SmithyMessageEncoderStream;
+
+
+/***/ }),
+
+/***/ 56459:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+const tslib_1 = __nccwpck_require__(4351);
+tslib_1.__exportStar(__nccwpck_require__(11014), exports);
+tslib_1.__exportStar(__nccwpck_require__(74712), exports);
+tslib_1.__exportStar(__nccwpck_require__(46086), exports);
+tslib_1.__exportStar(__nccwpck_require__(73684), exports);
+tslib_1.__exportStar(__nccwpck_require__(57255), exports);
+tslib_1.__exportStar(__nccwpck_require__(52362), exports);
+tslib_1.__exportStar(__nccwpck_require__(62379), exports);
+tslib_1.__exportStar(__nccwpck_require__(12484), exports);
+
+
+/***/ }),
+
+/***/ 20597:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.splitMessage = void 0;
+const crc32_1 = __nccwpck_require__(47327);
+const PRELUDE_MEMBER_LENGTH = 4;
+const PRELUDE_LENGTH = PRELUDE_MEMBER_LENGTH * 2;
+const CHECKSUM_LENGTH = 4;
+const MINIMUM_MESSAGE_LENGTH = PRELUDE_LENGTH + CHECKSUM_LENGTH * 2;
+function splitMessage({ byteLength, byteOffset, buffer }) {
+ if (byteLength < MINIMUM_MESSAGE_LENGTH) {
+ throw new Error("Provided message too short to accommodate event stream message overhead");
+ }
+ const view = new DataView(buffer, byteOffset, byteLength);
+ const messageLength = view.getUint32(0, false);
+ if (byteLength !== messageLength) {
+ throw new Error("Reported message length does not match received message length");
+ }
+ const headerLength = view.getUint32(PRELUDE_MEMBER_LENGTH, false);
+ const expectedPreludeChecksum = view.getUint32(PRELUDE_LENGTH, false);
+ const expectedMessageChecksum = view.getUint32(byteLength - CHECKSUM_LENGTH, false);
+ const checksummer = new crc32_1.Crc32().update(new Uint8Array(buffer, byteOffset, PRELUDE_LENGTH));
+ if (expectedPreludeChecksum !== checksummer.digest()) {
+ throw new Error(`The prelude checksum specified in the message (${expectedPreludeChecksum}) does not match the calculated CRC32 checksum (${checksummer.digest()})`);
+ }
+ checksummer.update(new Uint8Array(buffer, byteOffset + PRELUDE_LENGTH, byteLength - (PRELUDE_LENGTH + CHECKSUM_LENGTH)));
+ if (expectedMessageChecksum !== checksummer.digest()) {
+ throw new Error(`The message checksum (${checksummer.digest()}) did not match the expected value of ${expectedMessageChecksum}`);
+ }
+ return {
+ headers: new DataView(buffer, byteOffset + PRELUDE_LENGTH + CHECKSUM_LENGTH, headerLength),
+ body: new Uint8Array(buffer, byteOffset + PRELUDE_LENGTH + CHECKSUM_LENGTH + headerLength, messageLength - headerLength - (PRELUDE_LENGTH + CHECKSUM_LENGTH + CHECKSUM_LENGTH)),
+ };
+}
+exports.splitMessage = splitMessage;
+
+
+/***/ }),
+
+/***/ 3081:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.Hash = void 0;
+const util_buffer_from_1 = __nccwpck_require__(31381);
+const util_utf8_1 = __nccwpck_require__(41895);
+const buffer_1 = __nccwpck_require__(14300);
+const crypto_1 = __nccwpck_require__(6113);
+class Hash {
+ constructor(algorithmIdentifier, secret) {
+ this.algorithmIdentifier = algorithmIdentifier;
+ this.secret = secret;
+ this.reset();
+ }
+ update(toHash, encoding) {
+ this.hash.update((0, util_utf8_1.toUint8Array)(castSourceData(toHash, encoding)));
+ }
+ digest() {
+ return Promise.resolve(this.hash.digest());
+ }
+ reset() {
+ this.hash = this.secret
+ ? (0, crypto_1.createHmac)(this.algorithmIdentifier, castSourceData(this.secret))
+ : (0, crypto_1.createHash)(this.algorithmIdentifier);
+ }
+}
+exports.Hash = Hash;
+function castSourceData(toCast, encoding) {
+ if (buffer_1.Buffer.isBuffer(toCast)) {
+ return toCast;
+ }
+ if (typeof toCast === "string") {
+ return (0, util_buffer_from_1.fromString)(toCast, encoding);
+ }
+ if (ArrayBuffer.isView(toCast)) {
+ return (0, util_buffer_from_1.fromArrayBuffer)(toCast.buffer, toCast.byteOffset, toCast.byteLength);
+ }
+ return (0, util_buffer_from_1.fromArrayBuffer)(toCast);
+}
+
+
+/***/ }),
+
+/***/ 10780:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.isArrayBuffer = void 0;
+const isArrayBuffer = (arg) => (typeof ArrayBuffer === "function" && arg instanceof ArrayBuffer) ||
+ Object.prototype.toString.call(arg) === "[object ArrayBuffer]";
+exports.isArrayBuffer = isArrayBuffer;
+
+
+/***/ }),
+
+/***/ 82800:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.getContentLengthPlugin = exports.contentLengthMiddlewareOptions = exports.contentLengthMiddleware = void 0;
+const protocol_http_1 = __nccwpck_require__(64418);
+const CONTENT_LENGTH_HEADER = "content-length";
+function contentLengthMiddleware(bodyLengthChecker) {
+ return (next) => async (args) => {
+ const request = args.request;
+ if (protocol_http_1.HttpRequest.isInstance(request)) {
+ const { body, headers } = request;
+ if (body &&
+ Object.keys(headers)
+ .map((str) => str.toLowerCase())
+ .indexOf(CONTENT_LENGTH_HEADER) === -1) {
+ try {
+ const length = bodyLengthChecker(body);
+ request.headers = {
+ ...request.headers,
+ [CONTENT_LENGTH_HEADER]: String(length),
+ };
+ }
+ catch (error) {
+ }
+ }
+ }
+ return next({
+ ...args,
+ request,
+ });
+ };
+}
+exports.contentLengthMiddleware = contentLengthMiddleware;
+exports.contentLengthMiddlewareOptions = {
+ step: "build",
+ tags: ["SET_CONTENT_LENGTH", "CONTENT_LENGTH"],
+ name: "contentLengthMiddleware",
+ override: true,
+};
+const getContentLengthPlugin = (options) => ({
+ applyToStack: (clientStack) => {
+ clientStack.add(contentLengthMiddleware(options.bodyLengthChecker), exports.contentLengthMiddlewareOptions);
+ },
+});
+exports.getContentLengthPlugin = getContentLengthPlugin;
+
+
+/***/ }),
+
+/***/ 465:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.createConfigValueProvider = void 0;
+const createConfigValueProvider = (configKey, canonicalEndpointParamKey, config) => {
+ const configProvider = async () => {
+ var _a;
+ const configValue = (_a = config[configKey]) !== null && _a !== void 0 ? _a : config[canonicalEndpointParamKey];
+ if (typeof configValue === "function") {
+ return configValue();
+ }
+ return configValue;
+ };
+ if (configKey === "endpoint" || canonicalEndpointParamKey === "endpoint") {
+ return async () => {
+ const endpoint = await configProvider();
+ if (endpoint && typeof endpoint === "object") {
+ if ("url" in endpoint) {
+ return endpoint.url.href;
+ }
+ if ("hostname" in endpoint) {
+ const { protocol, hostname, port, path } = endpoint;
+ return `${protocol}//${hostname}${port ? ":" + port : ""}${path}`;
+ }
+ }
+ return endpoint;
+ };
+ }
+ return configProvider;
+};
+exports.createConfigValueProvider = createConfigValueProvider;
+
+
+/***/ }),
+
+/***/ 31518:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.getEndpointFromConfig = void 0;
+const node_config_provider_1 = __nccwpck_require__(33461);
+const getEndpointUrlConfig_1 = __nccwpck_require__(7574);
+const getEndpointFromConfig = async (serviceId) => (0, node_config_provider_1.loadConfig)((0, getEndpointUrlConfig_1.getEndpointUrlConfig)(serviceId))();
+exports.getEndpointFromConfig = getEndpointFromConfig;
+
+
+/***/ }),
+
+/***/ 73929:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.resolveParams = exports.getEndpointFromInstructions = void 0;
+const service_customizations_1 = __nccwpck_require__(13105);
+const createConfigValueProvider_1 = __nccwpck_require__(465);
+const getEndpointFromConfig_1 = __nccwpck_require__(31518);
+const toEndpointV1_1 = __nccwpck_require__(38938);
+const getEndpointFromInstructions = async (commandInput, instructionsSupplier, clientConfig, context) => {
+ if (!clientConfig.endpoint) {
+ const endpointFromConfig = await (0, getEndpointFromConfig_1.getEndpointFromConfig)(clientConfig.serviceId || "");
+ if (endpointFromConfig) {
+ clientConfig.endpoint = () => Promise.resolve((0, toEndpointV1_1.toEndpointV1)(endpointFromConfig));
+ }
+ }
+ const endpointParams = await (0, exports.resolveParams)(commandInput, instructionsSupplier, clientConfig);
+ if (typeof clientConfig.endpointProvider !== "function") {
+ throw new Error("config.endpointProvider is not set.");
+ }
+ const endpoint = clientConfig.endpointProvider(endpointParams, context);
+ return endpoint;
+};
+exports.getEndpointFromInstructions = getEndpointFromInstructions;
+const resolveParams = async (commandInput, instructionsSupplier, clientConfig) => {
+ var _a;
+ const endpointParams = {};
+ const instructions = ((_a = instructionsSupplier === null || instructionsSupplier === void 0 ? void 0 : instructionsSupplier.getEndpointParameterInstructions) === null || _a === void 0 ? void 0 : _a.call(instructionsSupplier)) || {};
+ for (const [name, instruction] of Object.entries(instructions)) {
+ switch (instruction.type) {
+ case "staticContextParams":
+ endpointParams[name] = instruction.value;
+ break;
+ case "contextParams":
+ endpointParams[name] = commandInput[instruction.name];
+ break;
+ case "clientContextParams":
+ case "builtInParams":
+ endpointParams[name] = await (0, createConfigValueProvider_1.createConfigValueProvider)(instruction.name, name, clientConfig)();
+ break;
+ default:
+ throw new Error("Unrecognized endpoint parameter instruction: " + JSON.stringify(instruction));
+ }
+ }
+ if (Object.keys(instructions).length === 0) {
+ Object.assign(endpointParams, clientConfig);
+ }
+ if (String(clientConfig.serviceId).toLowerCase() === "s3") {
+ await (0, service_customizations_1.resolveParamsForS3)(endpointParams);
+ }
+ return endpointParams;
+};
+exports.resolveParams = resolveParams;
+
+
+/***/ }),
+
+/***/ 7574:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.getEndpointUrlConfig = void 0;
+const shared_ini_file_loader_1 = __nccwpck_require__(43507);
+const ENV_ENDPOINT_URL = "AWS_ENDPOINT_URL";
+const CONFIG_ENDPOINT_URL = "endpoint_url";
+const getEndpointUrlConfig = (serviceId) => ({
+ environmentVariableSelector: (env) => {
+ const serviceSuffixParts = serviceId.split(" ").map((w) => w.toUpperCase());
+ const serviceEndpointUrl = env[[ENV_ENDPOINT_URL, ...serviceSuffixParts].join("_")];
+ if (serviceEndpointUrl)
+ return serviceEndpointUrl;
+ const endpointUrl = env[ENV_ENDPOINT_URL];
+ if (endpointUrl)
+ return endpointUrl;
+ return undefined;
+ },
+ configFileSelector: (profile, config) => {
+ if (config && profile.services) {
+ const servicesSection = config[["services", profile.services].join(shared_ini_file_loader_1.CONFIG_PREFIX_SEPARATOR)];
+ if (servicesSection) {
+ const servicePrefixParts = serviceId.split(" ").map((w) => w.toLowerCase());
+ const endpointUrl = servicesSection[[servicePrefixParts.join("_"), CONFIG_ENDPOINT_URL].join(shared_ini_file_loader_1.CONFIG_PREFIX_SEPARATOR)];
+ if (endpointUrl)
+ return endpointUrl;
+ }
+ }
+ const endpointUrl = profile[CONFIG_ENDPOINT_URL];
+ if (endpointUrl)
+ return endpointUrl;
+ return undefined;
+ },
+ default: undefined,
+});
+exports.getEndpointUrlConfig = getEndpointUrlConfig;
+
+
+/***/ }),
+
+/***/ 50890:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+const tslib_1 = __nccwpck_require__(4351);
+tslib_1.__exportStar(__nccwpck_require__(73929), exports);
+tslib_1.__exportStar(__nccwpck_require__(38938), exports);
+
+
+/***/ }),
+
+/***/ 38938:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.toEndpointV1 = void 0;
+const url_parser_1 = __nccwpck_require__(14681);
+const toEndpointV1 = (endpoint) => {
+ if (typeof endpoint === "object") {
+ if ("url" in endpoint) {
+ return (0, url_parser_1.parseUrl)(endpoint.url);
+ }
+ return endpoint;
+ }
+ return (0, url_parser_1.parseUrl)(endpoint);
+};
+exports.toEndpointV1 = toEndpointV1;
+
+
+/***/ }),
+
+/***/ 55520:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.endpointMiddleware = void 0;
+const getEndpointFromInstructions_1 = __nccwpck_require__(73929);
+const endpointMiddleware = ({ config, instructions, }) => {
+ return (next, context) => async (args) => {
+ var _a, _b;
+ const endpoint = await (0, getEndpointFromInstructions_1.getEndpointFromInstructions)(args.input, {
+ getEndpointParameterInstructions() {
+ return instructions;
+ },
+ }, { ...config }, context);
+ context.endpointV2 = endpoint;
+ context.authSchemes = (_a = endpoint.properties) === null || _a === void 0 ? void 0 : _a.authSchemes;
+ const authScheme = (_b = context.authSchemes) === null || _b === void 0 ? void 0 : _b[0];
+ if (authScheme) {
+ context["signing_region"] = authScheme.signingRegion;
+ context["signing_service"] = authScheme.signingName;
+ }
+ return next({
+ ...args,
+ });
+ };
+};
+exports.endpointMiddleware = endpointMiddleware;
+
+
+/***/ }),
+
+/***/ 71329:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.getEndpointPlugin = exports.endpointMiddlewareOptions = void 0;
+const middleware_serde_1 = __nccwpck_require__(81238);
+const endpointMiddleware_1 = __nccwpck_require__(55520);
+exports.endpointMiddlewareOptions = {
+ step: "serialize",
+ tags: ["ENDPOINT_PARAMETERS", "ENDPOINT_V2", "ENDPOINT"],
+ name: "endpointV2Middleware",
+ override: true,
+ relation: "before",
+ toMiddleware: middleware_serde_1.serializerMiddlewareOption.name,
+};
+const getEndpointPlugin = (config, instructions) => ({
+ applyToStack: (clientStack) => {
+ clientStack.addRelativeTo((0, endpointMiddleware_1.endpointMiddleware)({
+ config,
+ instructions,
+ }), exports.endpointMiddlewareOptions);
+ },
+});
+exports.getEndpointPlugin = getEndpointPlugin;
+
+
+/***/ }),
+
+/***/ 82918:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+const tslib_1 = __nccwpck_require__(4351);
+tslib_1.__exportStar(__nccwpck_require__(50890), exports);
+tslib_1.__exportStar(__nccwpck_require__(55520), exports);
+tslib_1.__exportStar(__nccwpck_require__(71329), exports);
+tslib_1.__exportStar(__nccwpck_require__(74139), exports);
+tslib_1.__exportStar(__nccwpck_require__(39720), exports);
+
+
+/***/ }),
+
+/***/ 74139:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.resolveEndpointConfig = void 0;
+const util_middleware_1 = __nccwpck_require__(2390);
+const toEndpointV1_1 = __nccwpck_require__(38938);
+const resolveEndpointConfig = (input) => {
+ var _a, _b, _c;
+ const tls = (_a = input.tls) !== null && _a !== void 0 ? _a : true;
+ const { endpoint } = input;
+ const customEndpointProvider = endpoint != null ? async () => (0, toEndpointV1_1.toEndpointV1)(await (0, util_middleware_1.normalizeProvider)(endpoint)()) : undefined;
+ const isCustomEndpoint = !!endpoint;
+ return {
+ ...input,
+ endpoint: customEndpointProvider,
+ tls,
+ isCustomEndpoint,
+ useDualstackEndpoint: (0, util_middleware_1.normalizeProvider)((_b = input.useDualstackEndpoint) !== null && _b !== void 0 ? _b : false),
+ useFipsEndpoint: (0, util_middleware_1.normalizeProvider)((_c = input.useFipsEndpoint) !== null && _c !== void 0 ? _c : false),
+ };
+};
+exports.resolveEndpointConfig = resolveEndpointConfig;
+
+
+/***/ }),
+
+/***/ 13105:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+const tslib_1 = __nccwpck_require__(4351);
+tslib_1.__exportStar(__nccwpck_require__(19194), exports);
+
+
+/***/ }),
+
+/***/ 19194:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.isArnBucketName = exports.isDnsCompatibleBucketName = exports.S3_HOSTNAME_PATTERN = exports.DOT_PATTERN = exports.resolveParamsForS3 = void 0;
+const resolveParamsForS3 = async (endpointParams) => {
+ const bucket = (endpointParams === null || endpointParams === void 0 ? void 0 : endpointParams.Bucket) || "";
+ if (typeof endpointParams.Bucket === "string") {
+ endpointParams.Bucket = bucket.replace(/#/g, encodeURIComponent("#")).replace(/\?/g, encodeURIComponent("?"));
+ }
+ if ((0, exports.isArnBucketName)(bucket)) {
+ if (endpointParams.ForcePathStyle === true) {
+ throw new Error("Path-style addressing cannot be used with ARN buckets");
+ }
+ }
+ else if (!(0, exports.isDnsCompatibleBucketName)(bucket) ||
+ (bucket.indexOf(".") !== -1 && !String(endpointParams.Endpoint).startsWith("http:")) ||
+ bucket.toLowerCase() !== bucket ||
+ bucket.length < 3) {
+ endpointParams.ForcePathStyle = true;
+ }
+ if (endpointParams.DisableMultiRegionAccessPoints) {
+ endpointParams.disableMultiRegionAccessPoints = true;
+ endpointParams.DisableMRAP = true;
+ }
+ return endpointParams;
+};
+exports.resolveParamsForS3 = resolveParamsForS3;
+const DOMAIN_PATTERN = /^[a-z0-9][a-z0-9\.\-]{1,61}[a-z0-9]$/;
+const IP_ADDRESS_PATTERN = /(\d+\.){3}\d+/;
+const DOTS_PATTERN = /\.\./;
+exports.DOT_PATTERN = /\./;
+exports.S3_HOSTNAME_PATTERN = /^(.+\.)?s3(-fips)?(\.dualstack)?[.-]([a-z0-9-]+)\./;
+const isDnsCompatibleBucketName = (bucketName) => DOMAIN_PATTERN.test(bucketName) && !IP_ADDRESS_PATTERN.test(bucketName) && !DOTS_PATTERN.test(bucketName);
+exports.isDnsCompatibleBucketName = isDnsCompatibleBucketName;
+const isArnBucketName = (bucketName) => {
+ const [arn, partition, service, region, account, typeOrId] = bucketName.split(":");
+ const isArn = arn === "arn" && bucketName.split(":").length >= 6;
+ const isValidArn = [arn, partition, service, account, typeOrId].filter(Boolean).length === 5;
+ if (isArn && !isValidArn) {
+ throw new Error(`Invalid ARN: ${bucketName} was an invalid ARN.`);
+ }
+ return arn === "arn" && !!partition && !!service && !!account && !!typeOrId;
+};
+exports.isArnBucketName = isArnBucketName;
+
+
+/***/ }),
+
+/***/ 39720:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+
+
+/***/ }),
+
+/***/ 80155:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.AdaptiveRetryStrategy = void 0;
+const util_retry_1 = __nccwpck_require__(84902);
+const StandardRetryStrategy_1 = __nccwpck_require__(94582);
+class AdaptiveRetryStrategy extends StandardRetryStrategy_1.StandardRetryStrategy {
+ constructor(maxAttemptsProvider, options) {
+ const { rateLimiter, ...superOptions } = options !== null && options !== void 0 ? options : {};
+ super(maxAttemptsProvider, superOptions);
+ this.rateLimiter = rateLimiter !== null && rateLimiter !== void 0 ? rateLimiter : new util_retry_1.DefaultRateLimiter();
+ this.mode = util_retry_1.RETRY_MODES.ADAPTIVE;
+ }
+ async retry(next, args) {
+ return super.retry(next, args, {
+ beforeRequest: async () => {
+ return this.rateLimiter.getSendToken();
+ },
+ afterRequest: (response) => {
+ this.rateLimiter.updateClientSendingRate(response);
+ },
+ });
+ }
+}
+exports.AdaptiveRetryStrategy = AdaptiveRetryStrategy;
+
+
+/***/ }),
+
+/***/ 94582:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.StandardRetryStrategy = void 0;
+const protocol_http_1 = __nccwpck_require__(64418);
+const service_error_classification_1 = __nccwpck_require__(6375);
+const util_retry_1 = __nccwpck_require__(84902);
+const uuid_1 = __nccwpck_require__(75840);
+const defaultRetryQuota_1 = __nccwpck_require__(29991);
+const delayDecider_1 = __nccwpck_require__(9465);
+const retryDecider_1 = __nccwpck_require__(67653);
+const util_1 = __nccwpck_require__(42827);
+class StandardRetryStrategy {
+ constructor(maxAttemptsProvider, options) {
+ var _a, _b, _c;
+ this.maxAttemptsProvider = maxAttemptsProvider;
+ this.mode = util_retry_1.RETRY_MODES.STANDARD;
+ this.retryDecider = (_a = options === null || options === void 0 ? void 0 : options.retryDecider) !== null && _a !== void 0 ? _a : retryDecider_1.defaultRetryDecider;
+ this.delayDecider = (_b = options === null || options === void 0 ? void 0 : options.delayDecider) !== null && _b !== void 0 ? _b : delayDecider_1.defaultDelayDecider;
+ this.retryQuota = (_c = options === null || options === void 0 ? void 0 : options.retryQuota) !== null && _c !== void 0 ? _c : (0, defaultRetryQuota_1.getDefaultRetryQuota)(util_retry_1.INITIAL_RETRY_TOKENS);
+ }
+ shouldRetry(error, attempts, maxAttempts) {
+ return attempts < maxAttempts && this.retryDecider(error) && this.retryQuota.hasRetryTokens(error);
+ }
+ async getMaxAttempts() {
+ let maxAttempts;
+ try {
+ maxAttempts = await this.maxAttemptsProvider();
+ }
+ catch (error) {
+ maxAttempts = util_retry_1.DEFAULT_MAX_ATTEMPTS;
+ }
+ return maxAttempts;
+ }
+ async retry(next, args, options) {
+ let retryTokenAmount;
+ let attempts = 0;
+ let totalDelay = 0;
+ const maxAttempts = await this.getMaxAttempts();
+ const { request } = args;
+ if (protocol_http_1.HttpRequest.isInstance(request)) {
+ request.headers[util_retry_1.INVOCATION_ID_HEADER] = (0, uuid_1.v4)();
+ }
+ while (true) {
+ try {
+ if (protocol_http_1.HttpRequest.isInstance(request)) {
+ request.headers[util_retry_1.REQUEST_HEADER] = `attempt=${attempts + 1}; max=${maxAttempts}`;
+ }
+ if (options === null || options === void 0 ? void 0 : options.beforeRequest) {
+ await options.beforeRequest();
+ }
+ const { response, output } = await next(args);
+ if (options === null || options === void 0 ? void 0 : options.afterRequest) {
+ options.afterRequest(response);
+ }
+ this.retryQuota.releaseRetryTokens(retryTokenAmount);
+ output.$metadata.attempts = attempts + 1;
+ output.$metadata.totalRetryDelay = totalDelay;
+ return { response, output };
+ }
+ catch (e) {
+ const err = (0, util_1.asSdkError)(e);
+ attempts++;
+ if (this.shouldRetry(err, attempts, maxAttempts)) {
+ retryTokenAmount = this.retryQuota.retrieveRetryTokens(err);
+ const delayFromDecider = this.delayDecider((0, service_error_classification_1.isThrottlingError)(err) ? util_retry_1.THROTTLING_RETRY_DELAY_BASE : util_retry_1.DEFAULT_RETRY_DELAY_BASE, attempts);
+ const delayFromResponse = getDelayFromRetryAfterHeader(err.$response);
+ const delay = Math.max(delayFromResponse || 0, delayFromDecider);
+ totalDelay += delay;
+ await new Promise((resolve) => setTimeout(resolve, delay));
+ continue;
+ }
+ if (!err.$metadata) {
+ err.$metadata = {};
+ }
+ err.$metadata.attempts = attempts;
+ err.$metadata.totalRetryDelay = totalDelay;
+ throw err;
+ }
+ }
+ }
+}
+exports.StandardRetryStrategy = StandardRetryStrategy;
+const getDelayFromRetryAfterHeader = (response) => {
+ if (!protocol_http_1.HttpResponse.isInstance(response))
+ return;
+ const retryAfterHeaderName = Object.keys(response.headers).find((key) => key.toLowerCase() === "retry-after");
+ if (!retryAfterHeaderName)
+ return;
+ const retryAfter = response.headers[retryAfterHeaderName];
+ const retryAfterSeconds = Number(retryAfter);
+ if (!Number.isNaN(retryAfterSeconds))
+ return retryAfterSeconds * 1000;
+ const retryAfterDate = new Date(retryAfter);
+ return retryAfterDate.getTime() - Date.now();
+};
+
+
+/***/ }),
+
+/***/ 58709:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.NODE_RETRY_MODE_CONFIG_OPTIONS = exports.CONFIG_RETRY_MODE = exports.ENV_RETRY_MODE = exports.resolveRetryConfig = exports.NODE_MAX_ATTEMPT_CONFIG_OPTIONS = exports.CONFIG_MAX_ATTEMPTS = exports.ENV_MAX_ATTEMPTS = void 0;
+const util_middleware_1 = __nccwpck_require__(2390);
+const util_retry_1 = __nccwpck_require__(84902);
+exports.ENV_MAX_ATTEMPTS = "AWS_MAX_ATTEMPTS";
+exports.CONFIG_MAX_ATTEMPTS = "max_attempts";
+exports.NODE_MAX_ATTEMPT_CONFIG_OPTIONS = {
+ environmentVariableSelector: (env) => {
+ const value = env[exports.ENV_MAX_ATTEMPTS];
+ if (!value)
+ return undefined;
+ const maxAttempt = parseInt(value);
+ if (Number.isNaN(maxAttempt)) {
+ throw new Error(`Environment variable ${exports.ENV_MAX_ATTEMPTS} mast be a number, got "${value}"`);
+ }
+ return maxAttempt;
+ },
+ configFileSelector: (profile) => {
+ const value = profile[exports.CONFIG_MAX_ATTEMPTS];
+ if (!value)
+ return undefined;
+ const maxAttempt = parseInt(value);
+ if (Number.isNaN(maxAttempt)) {
+ throw new Error(`Shared config file entry ${exports.CONFIG_MAX_ATTEMPTS} mast be a number, got "${value}"`);
+ }
+ return maxAttempt;
+ },
+ default: util_retry_1.DEFAULT_MAX_ATTEMPTS,
+};
+const resolveRetryConfig = (input) => {
+ var _a;
+ const { retryStrategy } = input;
+ const maxAttempts = (0, util_middleware_1.normalizeProvider)((_a = input.maxAttempts) !== null && _a !== void 0 ? _a : util_retry_1.DEFAULT_MAX_ATTEMPTS);
+ return {
+ ...input,
+ maxAttempts,
+ retryStrategy: async () => {
+ if (retryStrategy) {
+ return retryStrategy;
+ }
+ const retryMode = await (0, util_middleware_1.normalizeProvider)(input.retryMode)();
+ if (retryMode === util_retry_1.RETRY_MODES.ADAPTIVE) {
+ return new util_retry_1.AdaptiveRetryStrategy(maxAttempts);
+ }
+ return new util_retry_1.StandardRetryStrategy(maxAttempts);
+ },
+ };
+};
+exports.resolveRetryConfig = resolveRetryConfig;
+exports.ENV_RETRY_MODE = "AWS_RETRY_MODE";
+exports.CONFIG_RETRY_MODE = "retry_mode";
+exports.NODE_RETRY_MODE_CONFIG_OPTIONS = {
+ environmentVariableSelector: (env) => env[exports.ENV_RETRY_MODE],
+ configFileSelector: (profile) => profile[exports.CONFIG_RETRY_MODE],
+ default: util_retry_1.DEFAULT_RETRY_MODE,
+};
+
+
+/***/ }),
+
+/***/ 29991:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.getDefaultRetryQuota = void 0;
+const util_retry_1 = __nccwpck_require__(84902);
+const getDefaultRetryQuota = (initialRetryTokens, options) => {
+ var _a, _b, _c;
+ const MAX_CAPACITY = initialRetryTokens;
+ const noRetryIncrement = (_a = options === null || options === void 0 ? void 0 : options.noRetryIncrement) !== null && _a !== void 0 ? _a : util_retry_1.NO_RETRY_INCREMENT;
+ const retryCost = (_b = options === null || options === void 0 ? void 0 : options.retryCost) !== null && _b !== void 0 ? _b : util_retry_1.RETRY_COST;
+ const timeoutRetryCost = (_c = options === null || options === void 0 ? void 0 : options.timeoutRetryCost) !== null && _c !== void 0 ? _c : util_retry_1.TIMEOUT_RETRY_COST;
+ let availableCapacity = initialRetryTokens;
+ const getCapacityAmount = (error) => (error.name === "TimeoutError" ? timeoutRetryCost : retryCost);
+ const hasRetryTokens = (error) => getCapacityAmount(error) <= availableCapacity;
+ const retrieveRetryTokens = (error) => {
+ if (!hasRetryTokens(error)) {
+ throw new Error("No retry token available");
+ }
+ const capacityAmount = getCapacityAmount(error);
+ availableCapacity -= capacityAmount;
+ return capacityAmount;
+ };
+ const releaseRetryTokens = (capacityReleaseAmount) => {
+ availableCapacity += capacityReleaseAmount !== null && capacityReleaseAmount !== void 0 ? capacityReleaseAmount : noRetryIncrement;
+ availableCapacity = Math.min(availableCapacity, MAX_CAPACITY);
+ };
+ return Object.freeze({
+ hasRetryTokens,
+ retrieveRetryTokens,
+ releaseRetryTokens,
+ });
+};
+exports.getDefaultRetryQuota = getDefaultRetryQuota;
+
+
+/***/ }),
+
+/***/ 9465:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.defaultDelayDecider = void 0;
+const util_retry_1 = __nccwpck_require__(84902);
+const defaultDelayDecider = (delayBase, attempts) => Math.floor(Math.min(util_retry_1.MAXIMUM_RETRY_DELAY, Math.random() * 2 ** attempts * delayBase));
+exports.defaultDelayDecider = defaultDelayDecider;
+
+
+/***/ }),
+
+/***/ 96039:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+const tslib_1 = __nccwpck_require__(4351);
+tslib_1.__exportStar(__nccwpck_require__(80155), exports);
+tslib_1.__exportStar(__nccwpck_require__(94582), exports);
+tslib_1.__exportStar(__nccwpck_require__(58709), exports);
+tslib_1.__exportStar(__nccwpck_require__(9465), exports);
+tslib_1.__exportStar(__nccwpck_require__(76556), exports);
+tslib_1.__exportStar(__nccwpck_require__(67653), exports);
+tslib_1.__exportStar(__nccwpck_require__(81434), exports);
+
+
+/***/ }),
+
+/***/ 76556:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.getOmitRetryHeadersPlugin = exports.omitRetryHeadersMiddlewareOptions = exports.omitRetryHeadersMiddleware = void 0;
+const protocol_http_1 = __nccwpck_require__(64418);
+const util_retry_1 = __nccwpck_require__(84902);
+const omitRetryHeadersMiddleware = () => (next) => async (args) => {
+ const { request } = args;
+ if (protocol_http_1.HttpRequest.isInstance(request)) {
+ delete request.headers[util_retry_1.INVOCATION_ID_HEADER];
+ delete request.headers[util_retry_1.REQUEST_HEADER];
+ }
+ return next(args);
+};
+exports.omitRetryHeadersMiddleware = omitRetryHeadersMiddleware;
+exports.omitRetryHeadersMiddlewareOptions = {
+ name: "omitRetryHeadersMiddleware",
+ tags: ["RETRY", "HEADERS", "OMIT_RETRY_HEADERS"],
+ relation: "before",
+ toMiddleware: "awsAuthMiddleware",
+ override: true,
+};
+const getOmitRetryHeadersPlugin = (options) => ({
+ applyToStack: (clientStack) => {
+ clientStack.addRelativeTo((0, exports.omitRetryHeadersMiddleware)(), exports.omitRetryHeadersMiddlewareOptions);
+ },
+});
+exports.getOmitRetryHeadersPlugin = getOmitRetryHeadersPlugin;
+
+
+/***/ }),
+
+/***/ 67653:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.defaultRetryDecider = void 0;
+const service_error_classification_1 = __nccwpck_require__(6375);
+const defaultRetryDecider = (error) => {
+ if (!error) {
+ return false;
+ }
+ return (0, service_error_classification_1.isRetryableByTrait)(error) || (0, service_error_classification_1.isClockSkewError)(error) || (0, service_error_classification_1.isThrottlingError)(error) || (0, service_error_classification_1.isTransientError)(error);
+};
+exports.defaultRetryDecider = defaultRetryDecider;
+
+
+/***/ }),
+
+/***/ 81434:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.getRetryAfterHint = exports.getRetryPlugin = exports.retryMiddlewareOptions = exports.retryMiddleware = void 0;
+const protocol_http_1 = __nccwpck_require__(64418);
+const service_error_classification_1 = __nccwpck_require__(6375);
+const util_retry_1 = __nccwpck_require__(84902);
+const uuid_1 = __nccwpck_require__(75840);
+const util_1 = __nccwpck_require__(42827);
+const retryMiddleware = (options) => (next, context) => async (args) => {
+ let retryStrategy = await options.retryStrategy();
+ const maxAttempts = await options.maxAttempts();
+ if (isRetryStrategyV2(retryStrategy)) {
+ retryStrategy = retryStrategy;
+ let retryToken = await retryStrategy.acquireInitialRetryToken(context["partition_id"]);
+ let lastError = new Error();
+ let attempts = 0;
+ let totalRetryDelay = 0;
+ const { request } = args;
+ if (protocol_http_1.HttpRequest.isInstance(request)) {
+ request.headers[util_retry_1.INVOCATION_ID_HEADER] = (0, uuid_1.v4)();
+ }
+ while (true) {
+ try {
+ if (protocol_http_1.HttpRequest.isInstance(request)) {
+ request.headers[util_retry_1.REQUEST_HEADER] = `attempt=${attempts + 1}; max=${maxAttempts}`;
+ }
+ const { response, output } = await next(args);
+ retryStrategy.recordSuccess(retryToken);
+ output.$metadata.attempts = attempts + 1;
+ output.$metadata.totalRetryDelay = totalRetryDelay;
+ return { response, output };
+ }
+ catch (e) {
+ const retryErrorInfo = getRetryErrorInfo(e);
+ lastError = (0, util_1.asSdkError)(e);
+ try {
+ retryToken = await retryStrategy.refreshRetryTokenForRetry(retryToken, retryErrorInfo);
+ }
+ catch (refreshError) {
+ if (!lastError.$metadata) {
+ lastError.$metadata = {};
+ }
+ lastError.$metadata.attempts = attempts + 1;
+ lastError.$metadata.totalRetryDelay = totalRetryDelay;
+ throw lastError;
+ }
+ attempts = retryToken.getRetryCount();
+ const delay = retryToken.getRetryDelay();
+ totalRetryDelay += delay;
+ await new Promise((resolve) => setTimeout(resolve, delay));
+ }
+ }
+ }
+ else {
+ retryStrategy = retryStrategy;
+ if (retryStrategy === null || retryStrategy === void 0 ? void 0 : retryStrategy.mode)
+ context.userAgent = [...(context.userAgent || []), ["cfg/retry-mode", retryStrategy.mode]];
+ return retryStrategy.retry(next, args);
+ }
+};
+exports.retryMiddleware = retryMiddleware;
+const isRetryStrategyV2 = (retryStrategy) => typeof retryStrategy.acquireInitialRetryToken !== "undefined" &&
+ typeof retryStrategy.refreshRetryTokenForRetry !== "undefined" &&
+ typeof retryStrategy.recordSuccess !== "undefined";
+const getRetryErrorInfo = (error) => {
+ const errorInfo = {
+ errorType: getRetryErrorType(error),
+ };
+ const retryAfterHint = (0, exports.getRetryAfterHint)(error.$response);
+ if (retryAfterHint) {
+ errorInfo.retryAfterHint = retryAfterHint;
+ }
+ return errorInfo;
+};
+const getRetryErrorType = (error) => {
+ if ((0, service_error_classification_1.isThrottlingError)(error))
+ return "THROTTLING";
+ if ((0, service_error_classification_1.isTransientError)(error))
+ return "TRANSIENT";
+ if ((0, service_error_classification_1.isServerError)(error))
+ return "SERVER_ERROR";
+ return "CLIENT_ERROR";
+};
+exports.retryMiddlewareOptions = {
+ name: "retryMiddleware",
+ tags: ["RETRY"],
+ step: "finalizeRequest",
+ priority: "high",
+ override: true,
+};
+const getRetryPlugin = (options) => ({
+ applyToStack: (clientStack) => {
+ clientStack.add((0, exports.retryMiddleware)(options), exports.retryMiddlewareOptions);
+ },
+});
+exports.getRetryPlugin = getRetryPlugin;
+const getRetryAfterHint = (response) => {
+ if (!protocol_http_1.HttpResponse.isInstance(response))
+ return;
+ const retryAfterHeaderName = Object.keys(response.headers).find((key) => key.toLowerCase() === "retry-after");
+ if (!retryAfterHeaderName)
+ return;
+ const retryAfter = response.headers[retryAfterHeaderName];
+ const retryAfterSeconds = Number(retryAfter);
+ if (!Number.isNaN(retryAfterSeconds))
+ return new Date(retryAfterSeconds * 1000);
+ const retryAfterDate = new Date(retryAfter);
+ return retryAfterDate;
+};
+exports.getRetryAfterHint = getRetryAfterHint;
+
+
+/***/ }),
+
+/***/ 42827:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.asSdkError = void 0;
+const asSdkError = (error) => {
+ if (error instanceof Error)
+ return error;
+ if (error instanceof Object)
+ return Object.assign(new Error(), error);
+ if (typeof error === "string")
+ return new Error(error);
+ return new Error(`AWS SDK error wrapper for ${error}`);
+};
+exports.asSdkError = asSdkError;
+
+
+/***/ }),
+
+/***/ 21595:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.deserializerMiddleware = void 0;
+const deserializerMiddleware = (options, deserializer) => (next, context) => async (args) => {
+ const { response } = await next(args);
+ try {
+ const parsed = await deserializer(response, options);
+ return {
+ response,
+ output: parsed,
+ };
+ }
+ catch (error) {
+ Object.defineProperty(error, "$response", {
+ value: response,
+ });
+ if (!("$metadata" in error)) {
+ const hint = `Deserialization error: to see the raw response, inspect the hidden field {error}.$response on this object.`;
+ error.message += "\n " + hint;
+ }
+ throw error;
+ }
+};
+exports.deserializerMiddleware = deserializerMiddleware;
+
+
+/***/ }),
+
+/***/ 81238:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+const tslib_1 = __nccwpck_require__(4351);
+tslib_1.__exportStar(__nccwpck_require__(21595), exports);
+tslib_1.__exportStar(__nccwpck_require__(72338), exports);
+tslib_1.__exportStar(__nccwpck_require__(23566), exports);
+
+
+/***/ }),
+
+/***/ 72338:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.getSerdePlugin = exports.serializerMiddlewareOption = exports.deserializerMiddlewareOption = void 0;
+const deserializerMiddleware_1 = __nccwpck_require__(21595);
+const serializerMiddleware_1 = __nccwpck_require__(23566);
+exports.deserializerMiddlewareOption = {
+ name: "deserializerMiddleware",
+ step: "deserialize",
+ tags: ["DESERIALIZER"],
+ override: true,
+};
+exports.serializerMiddlewareOption = {
+ name: "serializerMiddleware",
+ step: "serialize",
+ tags: ["SERIALIZER"],
+ override: true,
+};
+function getSerdePlugin(config, serializer, deserializer) {
+ return {
+ applyToStack: (commandStack) => {
+ commandStack.add((0, deserializerMiddleware_1.deserializerMiddleware)(config, deserializer), exports.deserializerMiddlewareOption);
+ commandStack.add((0, serializerMiddleware_1.serializerMiddleware)(config, serializer), exports.serializerMiddlewareOption);
+ },
+ };
+}
+exports.getSerdePlugin = getSerdePlugin;
+
+
+/***/ }),
+
+/***/ 23566:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.serializerMiddleware = void 0;
+const serializerMiddleware = (options, serializer) => (next, context) => async (args) => {
+ var _a;
+ const endpoint = ((_a = context.endpointV2) === null || _a === void 0 ? void 0 : _a.url) && options.urlParser
+ ? async () => options.urlParser(context.endpointV2.url)
+ : options.endpoint;
+ if (!endpoint) {
+ throw new Error("No valid endpoint provider available.");
+ }
+ const request = await serializer(args.input, { ...options, endpoint });
+ return next({
+ ...args,
+ request,
+ });
+};
+exports.serializerMiddleware = serializerMiddleware;
+
+
+/***/ }),
+
+/***/ 2404:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.constructStack = void 0;
+const getAllAliases = (name, aliases) => {
+ const _aliases = [];
+ if (name) {
+ _aliases.push(name);
+ }
+ if (aliases) {
+ for (const alias of aliases) {
+ _aliases.push(alias);
+ }
+ }
+ return _aliases;
+};
+const getMiddlewareNameWithAliases = (name, aliases) => {
+ return `${name || "anonymous"}${aliases && aliases.length > 0 ? ` (a.k.a. ${aliases.join(",")})` : ""}`;
+};
+const constructStack = () => {
+ let absoluteEntries = [];
+ let relativeEntries = [];
+ let identifyOnResolve = false;
+ const entriesNameSet = new Set();
+ const sort = (entries) => entries.sort((a, b) => stepWeights[b.step] - stepWeights[a.step] ||
+ priorityWeights[b.priority || "normal"] - priorityWeights[a.priority || "normal"]);
+ const removeByName = (toRemove) => {
+ let isRemoved = false;
+ const filterCb = (entry) => {
+ const aliases = getAllAliases(entry.name, entry.aliases);
+ if (aliases.includes(toRemove)) {
+ isRemoved = true;
+ for (const alias of aliases) {
+ entriesNameSet.delete(alias);
+ }
+ return false;
+ }
+ return true;
+ };
+ absoluteEntries = absoluteEntries.filter(filterCb);
+ relativeEntries = relativeEntries.filter(filterCb);
+ return isRemoved;
+ };
+ const removeByReference = (toRemove) => {
+ let isRemoved = false;
+ const filterCb = (entry) => {
+ if (entry.middleware === toRemove) {
+ isRemoved = true;
+ for (const alias of getAllAliases(entry.name, entry.aliases)) {
+ entriesNameSet.delete(alias);
+ }
+ return false;
+ }
+ return true;
+ };
+ absoluteEntries = absoluteEntries.filter(filterCb);
+ relativeEntries = relativeEntries.filter(filterCb);
+ return isRemoved;
+ };
+ const cloneTo = (toStack) => {
+ var _a;
+ absoluteEntries.forEach((entry) => {
+ toStack.add(entry.middleware, { ...entry });
+ });
+ relativeEntries.forEach((entry) => {
+ toStack.addRelativeTo(entry.middleware, { ...entry });
+ });
+ (_a = toStack.identifyOnResolve) === null || _a === void 0 ? void 0 : _a.call(toStack, stack.identifyOnResolve());
+ return toStack;
+ };
+ const expandRelativeMiddlewareList = (from) => {
+ const expandedMiddlewareList = [];
+ from.before.forEach((entry) => {
+ if (entry.before.length === 0 && entry.after.length === 0) {
+ expandedMiddlewareList.push(entry);
+ }
+ else {
+ expandedMiddlewareList.push(...expandRelativeMiddlewareList(entry));
+ }
+ });
+ expandedMiddlewareList.push(from);
+ from.after.reverse().forEach((entry) => {
+ if (entry.before.length === 0 && entry.after.length === 0) {
+ expandedMiddlewareList.push(entry);
+ }
+ else {
+ expandedMiddlewareList.push(...expandRelativeMiddlewareList(entry));
+ }
+ });
+ return expandedMiddlewareList;
+ };
+ const getMiddlewareList = (debug = false) => {
+ const normalizedAbsoluteEntries = [];
+ const normalizedRelativeEntries = [];
+ const normalizedEntriesNameMap = {};
+ absoluteEntries.forEach((entry) => {
+ const normalizedEntry = {
+ ...entry,
+ before: [],
+ after: [],
+ };
+ for (const alias of getAllAliases(normalizedEntry.name, normalizedEntry.aliases)) {
+ normalizedEntriesNameMap[alias] = normalizedEntry;
+ }
+ normalizedAbsoluteEntries.push(normalizedEntry);
+ });
+ relativeEntries.forEach((entry) => {
+ const normalizedEntry = {
+ ...entry,
+ before: [],
+ after: [],
+ };
+ for (const alias of getAllAliases(normalizedEntry.name, normalizedEntry.aliases)) {
+ normalizedEntriesNameMap[alias] = normalizedEntry;
+ }
+ normalizedRelativeEntries.push(normalizedEntry);
+ });
+ normalizedRelativeEntries.forEach((entry) => {
+ if (entry.toMiddleware) {
+ const toMiddleware = normalizedEntriesNameMap[entry.toMiddleware];
+ if (toMiddleware === undefined) {
+ if (debug) {
+ return;
+ }
+ throw new Error(`${entry.toMiddleware} is not found when adding ` +
+ `${getMiddlewareNameWithAliases(entry.name, entry.aliases)} ` +
+ `middleware ${entry.relation} ${entry.toMiddleware}`);
+ }
+ if (entry.relation === "after") {
+ toMiddleware.after.push(entry);
+ }
+ if (entry.relation === "before") {
+ toMiddleware.before.push(entry);
+ }
+ }
+ });
+ const mainChain = sort(normalizedAbsoluteEntries)
+ .map(expandRelativeMiddlewareList)
+ .reduce((wholeList, expandedMiddlewareList) => {
+ wholeList.push(...expandedMiddlewareList);
+ return wholeList;
+ }, []);
+ return mainChain;
+ };
+ const stack = {
+ add: (middleware, options = {}) => {
+ const { name, override, aliases: _aliases } = options;
+ const entry = {
+ step: "initialize",
+ priority: "normal",
+ middleware,
+ ...options,
+ };
+ const aliases = getAllAliases(name, _aliases);
+ if (aliases.length > 0) {
+ if (aliases.some((alias) => entriesNameSet.has(alias))) {
+ if (!override)
+ throw new Error(`Duplicate middleware name '${getMiddlewareNameWithAliases(name, _aliases)}'`);
+ for (const alias of aliases) {
+ const toOverrideIndex = absoluteEntries.findIndex((entry) => { var _a; return entry.name === alias || ((_a = entry.aliases) === null || _a === void 0 ? void 0 : _a.some((a) => a === alias)); });
+ if (toOverrideIndex === -1) {
+ continue;
+ }
+ const toOverride = absoluteEntries[toOverrideIndex];
+ if (toOverride.step !== entry.step || entry.priority !== toOverride.priority) {
+ throw new Error(`"${getMiddlewareNameWithAliases(toOverride.name, toOverride.aliases)}" middleware with ` +
+ `${toOverride.priority} priority in ${toOverride.step} step cannot ` +
+ `be overridden by "${getMiddlewareNameWithAliases(name, _aliases)}" middleware with ` +
+ `${entry.priority} priority in ${entry.step} step.`);
+ }
+ absoluteEntries.splice(toOverrideIndex, 1);
+ }
+ }
+ for (const alias of aliases) {
+ entriesNameSet.add(alias);
+ }
+ }
+ absoluteEntries.push(entry);
+ },
+ addRelativeTo: (middleware, options) => {
+ const { name, override, aliases: _aliases } = options;
+ const entry = {
+ middleware,
+ ...options,
+ };
+ const aliases = getAllAliases(name, _aliases);
+ if (aliases.length > 0) {
+ if (aliases.some((alias) => entriesNameSet.has(alias))) {
+ if (!override)
+ throw new Error(`Duplicate middleware name '${getMiddlewareNameWithAliases(name, _aliases)}'`);
+ for (const alias of aliases) {
+ const toOverrideIndex = relativeEntries.findIndex((entry) => { var _a; return entry.name === alias || ((_a = entry.aliases) === null || _a === void 0 ? void 0 : _a.some((a) => a === alias)); });
+ if (toOverrideIndex === -1) {
+ continue;
+ }
+ const toOverride = relativeEntries[toOverrideIndex];
+ if (toOverride.toMiddleware !== entry.toMiddleware || toOverride.relation !== entry.relation) {
+ throw new Error(`"${getMiddlewareNameWithAliases(toOverride.name, toOverride.aliases)}" middleware ` +
+ `${toOverride.relation} "${toOverride.toMiddleware}" middleware cannot be overridden ` +
+ `by "${getMiddlewareNameWithAliases(name, _aliases)}" middleware ${entry.relation} ` +
+ `"${entry.toMiddleware}" middleware.`);
+ }
+ relativeEntries.splice(toOverrideIndex, 1);
+ }
+ }
+ for (const alias of aliases) {
+ entriesNameSet.add(alias);
+ }
+ }
+ relativeEntries.push(entry);
+ },
+ clone: () => cloneTo((0, exports.constructStack)()),
+ use: (plugin) => {
+ plugin.applyToStack(stack);
+ },
+ remove: (toRemove) => {
+ if (typeof toRemove === "string")
+ return removeByName(toRemove);
+ else
+ return removeByReference(toRemove);
+ },
+ removeByTag: (toRemove) => {
+ let isRemoved = false;
+ const filterCb = (entry) => {
+ const { tags, name, aliases: _aliases } = entry;
+ if (tags && tags.includes(toRemove)) {
+ const aliases = getAllAliases(name, _aliases);
+ for (const alias of aliases) {
+ entriesNameSet.delete(alias);
+ }
+ isRemoved = true;
+ return false;
+ }
+ return true;
+ };
+ absoluteEntries = absoluteEntries.filter(filterCb);
+ relativeEntries = relativeEntries.filter(filterCb);
+ return isRemoved;
+ },
+ concat: (from) => {
+ var _a, _b;
+ const cloned = cloneTo((0, exports.constructStack)());
+ cloned.use(from);
+ cloned.identifyOnResolve(identifyOnResolve || cloned.identifyOnResolve() || ((_b = (_a = from.identifyOnResolve) === null || _a === void 0 ? void 0 : _a.call(from)) !== null && _b !== void 0 ? _b : false));
+ return cloned;
+ },
+ applyToStack: cloneTo,
+ identify: () => {
+ return getMiddlewareList(true).map((mw) => {
+ var _a;
+ const step = (_a = mw.step) !== null && _a !== void 0 ? _a : mw.relation +
+ " " +
+ mw.toMiddleware;
+ return getMiddlewareNameWithAliases(mw.name, mw.aliases) + " - " + step;
+ });
+ },
+ identifyOnResolve(toggle) {
+ if (typeof toggle === "boolean")
+ identifyOnResolve = toggle;
+ return identifyOnResolve;
+ },
+ resolve: (handler, context) => {
+ for (const middleware of getMiddlewareList()
+ .map((entry) => entry.middleware)
+ .reverse()) {
+ handler = middleware(handler, context);
+ }
+ if (identifyOnResolve) {
+ console.log(stack.identify());
+ }
+ return handler;
+ },
+ };
+ return stack;
+};
+exports.constructStack = constructStack;
+const stepWeights = {
+ initialize: 5,
+ serialize: 4,
+ build: 3,
+ finalizeRequest: 2,
+ deserialize: 1,
+};
+const priorityWeights = {
+ high: 3,
+ normal: 2,
+ low: 1,
+};
+
+
+/***/ }),
+
+/***/ 97911:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+const tslib_1 = __nccwpck_require__(4351);
+tslib_1.__exportStar(__nccwpck_require__(2404), exports);
+
+
+/***/ }),
+
+/***/ 54766:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.loadConfig = void 0;
+const property_provider_1 = __nccwpck_require__(79721);
+const fromEnv_1 = __nccwpck_require__(15606);
+const fromSharedConfigFiles_1 = __nccwpck_require__(45784);
+const fromStatic_1 = __nccwpck_require__(23091);
+const loadConfig = ({ environmentVariableSelector, configFileSelector, default: defaultValue }, configuration = {}) => (0, property_provider_1.memoize)((0, property_provider_1.chain)((0, fromEnv_1.fromEnv)(environmentVariableSelector), (0, fromSharedConfigFiles_1.fromSharedConfigFiles)(configFileSelector, configuration), (0, fromStatic_1.fromStatic)(defaultValue)));
+exports.loadConfig = loadConfig;
+
+
+/***/ }),
+
+/***/ 15606:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.fromEnv = void 0;
+const property_provider_1 = __nccwpck_require__(79721);
+const fromEnv = (envVarSelector) => async () => {
+ try {
+ const config = envVarSelector(process.env);
+ if (config === undefined) {
+ throw new Error();
+ }
+ return config;
+ }
+ catch (e) {
+ throw new property_provider_1.CredentialsProviderError(e.message || `Cannot load config from environment variables with getter: ${envVarSelector}`);
+ }
+};
+exports.fromEnv = fromEnv;
+
+
+/***/ }),
+
+/***/ 45784:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.fromSharedConfigFiles = void 0;
+const property_provider_1 = __nccwpck_require__(79721);
+const shared_ini_file_loader_1 = __nccwpck_require__(43507);
+const fromSharedConfigFiles = (configSelector, { preferredFile = "config", ...init } = {}) => async () => {
+ const profile = (0, shared_ini_file_loader_1.getProfileName)(init);
+ const { configFile, credentialsFile } = await (0, shared_ini_file_loader_1.loadSharedConfigFiles)(init);
+ const profileFromCredentials = credentialsFile[profile] || {};
+ const profileFromConfig = configFile[profile] || {};
+ const mergedProfile = preferredFile === "config"
+ ? { ...profileFromCredentials, ...profileFromConfig }
+ : { ...profileFromConfig, ...profileFromCredentials };
+ try {
+ const cfgFile = preferredFile === "config" ? configFile : credentialsFile;
+ const configValue = configSelector(mergedProfile, cfgFile);
+ if (configValue === undefined) {
+ throw new Error();
+ }
+ return configValue;
+ }
+ catch (e) {
+ throw new property_provider_1.CredentialsProviderError(e.message || `Cannot load config for profile ${profile} in SDK configuration files with getter: ${configSelector}`);
+ }
+};
+exports.fromSharedConfigFiles = fromSharedConfigFiles;
+
+
+/***/ }),
+
+/***/ 23091:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.fromStatic = void 0;
+const property_provider_1 = __nccwpck_require__(79721);
+const isFunction = (func) => typeof func === "function";
+const fromStatic = (defaultValue) => isFunction(defaultValue) ? async () => await defaultValue() : (0, property_provider_1.fromStatic)(defaultValue);
+exports.fromStatic = fromStatic;
+
+
+/***/ }),
+
+/***/ 33461:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+const tslib_1 = __nccwpck_require__(4351);
+tslib_1.__exportStar(__nccwpck_require__(54766), exports);
+
+
+/***/ }),
+
+/***/ 33946:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.NODEJS_TIMEOUT_ERROR_CODES = void 0;
+exports.NODEJS_TIMEOUT_ERROR_CODES = ["ECONNRESET", "EPIPE", "ETIMEDOUT"];
+
+
+/***/ }),
+
+/***/ 70508:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.getTransformedHeaders = void 0;
+const getTransformedHeaders = (headers) => {
+ const transformedHeaders = {};
+ for (const name of Object.keys(headers)) {
+ const headerValues = headers[name];
+ transformedHeaders[name] = Array.isArray(headerValues) ? headerValues.join(",") : headerValues;
+ }
+ return transformedHeaders;
+};
+exports.getTransformedHeaders = getTransformedHeaders;
+
+
+/***/ }),
+
+/***/ 20258:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+const tslib_1 = __nccwpck_require__(4351);
+tslib_1.__exportStar(__nccwpck_require__(96948), exports);
+tslib_1.__exportStar(__nccwpck_require__(46999), exports);
+tslib_1.__exportStar(__nccwpck_require__(81030), exports);
+
+
+/***/ }),
+
+/***/ 96948:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.NodeHttpHandler = exports.DEFAULT_REQUEST_TIMEOUT = void 0;
+const protocol_http_1 = __nccwpck_require__(64418);
+const querystring_builder_1 = __nccwpck_require__(68031);
+const http_1 = __nccwpck_require__(13685);
+const https_1 = __nccwpck_require__(95687);
+const constants_1 = __nccwpck_require__(33946);
+const get_transformed_headers_1 = __nccwpck_require__(70508);
+const set_connection_timeout_1 = __nccwpck_require__(25545);
+const set_socket_keep_alive_1 = __nccwpck_require__(83751);
+const set_socket_timeout_1 = __nccwpck_require__(42618);
+const write_request_body_1 = __nccwpck_require__(73766);
+exports.DEFAULT_REQUEST_TIMEOUT = 0;
+class NodeHttpHandler {
+ constructor(options) {
+ this.metadata = { handlerProtocol: "http/1.1" };
+ this.configProvider = new Promise((resolve, reject) => {
+ if (typeof options === "function") {
+ options()
+ .then((_options) => {
+ resolve(this.resolveDefaultConfig(_options));
+ })
+ .catch(reject);
+ }
+ else {
+ resolve(this.resolveDefaultConfig(options));
+ }
+ });
+ }
+ resolveDefaultConfig(options) {
+ const { requestTimeout, connectionTimeout, socketTimeout, httpAgent, httpsAgent } = options || {};
+ const keepAlive = true;
+ const maxSockets = 50;
+ return {
+ connectionTimeout,
+ requestTimeout: requestTimeout !== null && requestTimeout !== void 0 ? requestTimeout : socketTimeout,
+ httpAgent: httpAgent || new http_1.Agent({ keepAlive, maxSockets }),
+ httpsAgent: httpsAgent || new https_1.Agent({ keepAlive, maxSockets }),
+ };
+ }
+ destroy() {
+ var _a, _b, _c, _d;
+ (_b = (_a = this.config) === null || _a === void 0 ? void 0 : _a.httpAgent) === null || _b === void 0 ? void 0 : _b.destroy();
+ (_d = (_c = this.config) === null || _c === void 0 ? void 0 : _c.httpsAgent) === null || _d === void 0 ? void 0 : _d.destroy();
+ }
+ async handle(request, { abortSignal } = {}) {
+ if (!this.config) {
+ this.config = await this.configProvider;
+ }
+ return new Promise((_resolve, _reject) => {
+ var _a, _b;
+ let writeRequestBodyPromise = undefined;
+ const resolve = async (arg) => {
+ await writeRequestBodyPromise;
+ _resolve(arg);
+ };
+ const reject = async (arg) => {
+ await writeRequestBodyPromise;
+ _reject(arg);
+ };
+ if (!this.config) {
+ throw new Error("Node HTTP request handler config is not resolved");
+ }
+ if (abortSignal === null || abortSignal === void 0 ? void 0 : abortSignal.aborted) {
+ const abortError = new Error("Request aborted");
+ abortError.name = "AbortError";
+ reject(abortError);
+ return;
+ }
+ const isSSL = request.protocol === "https:";
+ const queryString = (0, querystring_builder_1.buildQueryString)(request.query || {});
+ let auth = undefined;
+ if (request.username != null || request.password != null) {
+ const username = (_a = request.username) !== null && _a !== void 0 ? _a : "";
+ const password = (_b = request.password) !== null && _b !== void 0 ? _b : "";
+ auth = `${username}:${password}`;
+ }
+ let path = request.path;
+ if (queryString) {
+ path += `?${queryString}`;
+ }
+ if (request.fragment) {
+ path += `#${request.fragment}`;
+ }
+ const nodeHttpsOptions = {
+ headers: request.headers,
+ host: request.hostname,
+ method: request.method,
+ path,
+ port: request.port,
+ agent: isSSL ? this.config.httpsAgent : this.config.httpAgent,
+ auth,
+ };
+ const requestFunc = isSSL ? https_1.request : http_1.request;
+ const req = requestFunc(nodeHttpsOptions, (res) => {
+ const httpResponse = new protocol_http_1.HttpResponse({
+ statusCode: res.statusCode || -1,
+ reason: res.statusMessage,
+ headers: (0, get_transformed_headers_1.getTransformedHeaders)(res.headers),
+ body: res,
+ });
+ resolve({ response: httpResponse });
+ });
+ req.on("error", (err) => {
+ if (constants_1.NODEJS_TIMEOUT_ERROR_CODES.includes(err.code)) {
+ reject(Object.assign(err, { name: "TimeoutError" }));
+ }
+ else {
+ reject(err);
+ }
+ });
+ (0, set_connection_timeout_1.setConnectionTimeout)(req, reject, this.config.connectionTimeout);
+ (0, set_socket_timeout_1.setSocketTimeout)(req, reject, this.config.requestTimeout);
+ if (abortSignal) {
+ abortSignal.onabort = () => {
+ req.abort();
+ const abortError = new Error("Request aborted");
+ abortError.name = "AbortError";
+ reject(abortError);
+ };
+ }
+ const httpAgent = nodeHttpsOptions.agent;
+ if (typeof httpAgent === "object" && "keepAlive" in httpAgent) {
+ (0, set_socket_keep_alive_1.setSocketKeepAlive)(req, {
+ keepAlive: httpAgent.keepAlive,
+ keepAliveMsecs: httpAgent.keepAliveMsecs,
+ });
+ }
+ writeRequestBodyPromise = (0, write_request_body_1.writeRequestBody)(req, request, this.config.requestTimeout).catch(_reject);
+ });
+ }
+ updateHttpClientConfig(key, value) {
+ this.config = undefined;
+ this.configProvider = this.configProvider.then((config) => {
+ return {
+ ...config,
+ [key]: value,
+ };
+ });
+ }
+ httpHandlerConfigs() {
+ var _a;
+ return (_a = this.config) !== null && _a !== void 0 ? _a : {};
+ }
+}
+exports.NodeHttpHandler = NodeHttpHandler;
+
+
+/***/ }),
+
+/***/ 5771:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.NodeHttp2ConnectionManager = void 0;
+const tslib_1 = __nccwpck_require__(4351);
+const http2_1 = tslib_1.__importDefault(__nccwpck_require__(85158));
+const node_http2_connection_pool_1 = __nccwpck_require__(95157);
+class NodeHttp2ConnectionManager {
+ constructor(config) {
+ this.sessionCache = new Map();
+ this.config = config;
+ if (this.config.maxConcurrency && this.config.maxConcurrency <= 0) {
+ throw new RangeError("maxConcurrency must be greater than zero.");
+ }
+ }
+ lease(requestContext, connectionConfiguration) {
+ const url = this.getUrlString(requestContext);
+ const existingPool = this.sessionCache.get(url);
+ if (existingPool) {
+ const existingSession = existingPool.poll();
+ if (existingSession && !this.config.disableConcurrency) {
+ return existingSession;
+ }
+ }
+ const session = http2_1.default.connect(url);
+ if (this.config.maxConcurrency) {
+ session.settings({ maxConcurrentStreams: this.config.maxConcurrency }, (err) => {
+ if (err) {
+ throw new Error("Fail to set maxConcurrentStreams to " +
+ this.config.maxConcurrency +
+ "when creating new session for " +
+ requestContext.destination.toString());
+ }
+ });
+ }
+ session.unref();
+ const destroySessionCb = () => {
+ session.destroy();
+ this.deleteSession(url, session);
+ };
+ session.on("goaway", destroySessionCb);
+ session.on("error", destroySessionCb);
+ session.on("frameError", destroySessionCb);
+ session.on("close", () => this.deleteSession(url, session));
+ if (connectionConfiguration.requestTimeout) {
+ session.setTimeout(connectionConfiguration.requestTimeout, destroySessionCb);
+ }
+ const connectionPool = this.sessionCache.get(url) || new node_http2_connection_pool_1.NodeHttp2ConnectionPool();
+ connectionPool.offerLast(session);
+ this.sessionCache.set(url, connectionPool);
+ return session;
+ }
+ deleteSession(authority, session) {
+ const existingConnectionPool = this.sessionCache.get(authority);
+ if (!existingConnectionPool) {
+ return;
+ }
+ if (!existingConnectionPool.contains(session)) {
+ return;
+ }
+ existingConnectionPool.remove(session);
+ this.sessionCache.set(authority, existingConnectionPool);
+ }
+ release(requestContext, session) {
+ var _a;
+ const cacheKey = this.getUrlString(requestContext);
+ (_a = this.sessionCache.get(cacheKey)) === null || _a === void 0 ? void 0 : _a.offerLast(session);
+ }
+ destroy() {
+ for (const [key, connectionPool] of this.sessionCache) {
+ for (const session of connectionPool) {
+ if (!session.destroyed) {
+ session.destroy();
+ }
+ connectionPool.remove(session);
+ }
+ this.sessionCache.delete(key);
+ }
+ }
+ setMaxConcurrentStreams(maxConcurrentStreams) {
+ if (this.config.maxConcurrency && this.config.maxConcurrency <= 0) {
+ throw new RangeError("maxConcurrentStreams must be greater than zero.");
+ }
+ this.config.maxConcurrency = maxConcurrentStreams;
+ }
+ setDisableConcurrentStreams(disableConcurrentStreams) {
+ this.config.disableConcurrency = disableConcurrentStreams;
+ }
+ getUrlString(request) {
+ return request.destination.toString();
+ }
+}
+exports.NodeHttp2ConnectionManager = NodeHttp2ConnectionManager;
+
+
+/***/ }),
+
+/***/ 95157:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.NodeHttp2ConnectionPool = void 0;
+class NodeHttp2ConnectionPool {
+ constructor(sessions) {
+ this.sessions = [];
+ this.sessions = sessions !== null && sessions !== void 0 ? sessions : [];
+ }
+ poll() {
+ if (this.sessions.length > 0) {
+ return this.sessions.shift();
+ }
+ }
+ offerLast(session) {
+ this.sessions.push(session);
+ }
+ contains(session) {
+ return this.sessions.includes(session);
+ }
+ remove(session) {
+ this.sessions = this.sessions.filter((s) => s !== session);
+ }
+ [Symbol.iterator]() {
+ return this.sessions[Symbol.iterator]();
+ }
+ destroy(connection) {
+ for (const session of this.sessions) {
+ if (session === connection) {
+ if (!session.destroyed) {
+ session.destroy();
+ }
+ }
+ }
+ }
+}
+exports.NodeHttp2ConnectionPool = NodeHttp2ConnectionPool;
+
+
+/***/ }),
+
+/***/ 46999:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.NodeHttp2Handler = void 0;
+const protocol_http_1 = __nccwpck_require__(64418);
+const querystring_builder_1 = __nccwpck_require__(68031);
+const http2_1 = __nccwpck_require__(85158);
+const get_transformed_headers_1 = __nccwpck_require__(70508);
+const node_http2_connection_manager_1 = __nccwpck_require__(5771);
+const write_request_body_1 = __nccwpck_require__(73766);
+class NodeHttp2Handler {
+ constructor(options) {
+ this.metadata = { handlerProtocol: "h2" };
+ this.connectionManager = new node_http2_connection_manager_1.NodeHttp2ConnectionManager({});
+ this.configProvider = new Promise((resolve, reject) => {
+ if (typeof options === "function") {
+ options()
+ .then((opts) => {
+ resolve(opts || {});
+ })
+ .catch(reject);
+ }
+ else {
+ resolve(options || {});
+ }
+ });
+ }
+ destroy() {
+ this.connectionManager.destroy();
+ }
+ async handle(request, { abortSignal } = {}) {
+ if (!this.config) {
+ this.config = await this.configProvider;
+ this.connectionManager.setDisableConcurrentStreams(this.config.disableConcurrentStreams || false);
+ if (this.config.maxConcurrentStreams) {
+ this.connectionManager.setMaxConcurrentStreams(this.config.maxConcurrentStreams);
+ }
+ }
+ const { requestTimeout, disableConcurrentStreams } = this.config;
+ return new Promise((_resolve, _reject) => {
+ var _a, _b, _c;
+ let fulfilled = false;
+ let writeRequestBodyPromise = undefined;
+ const resolve = async (arg) => {
+ await writeRequestBodyPromise;
+ _resolve(arg);
+ };
+ const reject = async (arg) => {
+ await writeRequestBodyPromise;
+ _reject(arg);
+ };
+ if (abortSignal === null || abortSignal === void 0 ? void 0 : abortSignal.aborted) {
+ fulfilled = true;
+ const abortError = new Error("Request aborted");
+ abortError.name = "AbortError";
+ reject(abortError);
+ return;
+ }
+ const { hostname, method, port, protocol, query } = request;
+ let auth = "";
+ if (request.username != null || request.password != null) {
+ const username = (_a = request.username) !== null && _a !== void 0 ? _a : "";
+ const password = (_b = request.password) !== null && _b !== void 0 ? _b : "";
+ auth = `${username}:${password}@`;
+ }
+ const authority = `${protocol}//${auth}${hostname}${port ? `:${port}` : ""}`;
+ const requestContext = { destination: new URL(authority) };
+ const session = this.connectionManager.lease(requestContext, {
+ requestTimeout: (_c = this.config) === null || _c === void 0 ? void 0 : _c.sessionTimeout,
+ disableConcurrentStreams: disableConcurrentStreams || false,
+ });
+ const rejectWithDestroy = (err) => {
+ if (disableConcurrentStreams) {
+ this.destroySession(session);
+ }
+ fulfilled = true;
+ reject(err);
+ };
+ const queryString = (0, querystring_builder_1.buildQueryString)(query || {});
+ let path = request.path;
+ if (queryString) {
+ path += `?${queryString}`;
+ }
+ if (request.fragment) {
+ path += `#${request.fragment}`;
+ }
+ const req = session.request({
+ ...request.headers,
+ [http2_1.constants.HTTP2_HEADER_PATH]: path,
+ [http2_1.constants.HTTP2_HEADER_METHOD]: method,
+ });
+ session.ref();
+ req.on("response", (headers) => {
+ const httpResponse = new protocol_http_1.HttpResponse({
+ statusCode: headers[":status"] || -1,
+ headers: (0, get_transformed_headers_1.getTransformedHeaders)(headers),
+ body: req,
+ });
+ fulfilled = true;
+ resolve({ response: httpResponse });
+ if (disableConcurrentStreams) {
+ session.close();
+ this.connectionManager.deleteSession(authority, session);
+ }
+ });
+ if (requestTimeout) {
+ req.setTimeout(requestTimeout, () => {
+ req.close();
+ const timeoutError = new Error(`Stream timed out because of no activity for ${requestTimeout} ms`);
+ timeoutError.name = "TimeoutError";
+ rejectWithDestroy(timeoutError);
+ });
+ }
+ if (abortSignal) {
+ abortSignal.onabort = () => {
+ req.close();
+ const abortError = new Error("Request aborted");
+ abortError.name = "AbortError";
+ rejectWithDestroy(abortError);
+ };
+ }
+ req.on("frameError", (type, code, id) => {
+ rejectWithDestroy(new Error(`Frame type id ${type} in stream id ${id} has failed with code ${code}.`));
+ });
+ req.on("error", rejectWithDestroy);
+ req.on("aborted", () => {
+ rejectWithDestroy(new Error(`HTTP/2 stream is abnormally aborted in mid-communication with result code ${req.rstCode}.`));
+ });
+ req.on("close", () => {
+ session.unref();
+ if (disableConcurrentStreams) {
+ session.destroy();
+ }
+ if (!fulfilled) {
+ rejectWithDestroy(new Error("Unexpected error: http2 request did not get a response"));
+ }
+ });
+ writeRequestBodyPromise = (0, write_request_body_1.writeRequestBody)(req, request, requestTimeout);
+ });
+ }
+ updateHttpClientConfig(key, value) {
+ this.config = undefined;
+ this.configProvider = this.configProvider.then((config) => {
+ return {
+ ...config,
+ [key]: value,
+ };
+ });
+ }
+ httpHandlerConfigs() {
+ var _a;
+ return (_a = this.config) !== null && _a !== void 0 ? _a : {};
+ }
+ destroySession(session) {
+ if (!session.destroyed) {
+ session.destroy();
+ }
+ }
+}
+exports.NodeHttp2Handler = NodeHttp2Handler;
+
+
+/***/ }),
+
+/***/ 25545:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.setConnectionTimeout = void 0;
+const setConnectionTimeout = (request, reject, timeoutInMs = 0) => {
+ if (!timeoutInMs) {
+ return;
+ }
+ const timeoutId = setTimeout(() => {
+ request.destroy();
+ reject(Object.assign(new Error(`Socket timed out without establishing a connection within ${timeoutInMs} ms`), {
+ name: "TimeoutError",
+ }));
+ }, timeoutInMs);
+ request.on("socket", (socket) => {
+ if (socket.connecting) {
+ socket.on("connect", () => {
+ clearTimeout(timeoutId);
+ });
+ }
+ else {
+ clearTimeout(timeoutId);
+ }
+ });
+};
+exports.setConnectionTimeout = setConnectionTimeout;
+
+
+/***/ }),
+
+/***/ 83751:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.setSocketKeepAlive = void 0;
+const setSocketKeepAlive = (request, { keepAlive, keepAliveMsecs }) => {
+ if (keepAlive !== true) {
+ return;
+ }
+ request.on("socket", (socket) => {
+ socket.setKeepAlive(keepAlive, keepAliveMsecs || 0);
+ });
+};
+exports.setSocketKeepAlive = setSocketKeepAlive;
+
+
+/***/ }),
+
+/***/ 42618:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.setSocketTimeout = void 0;
+const setSocketTimeout = (request, reject, timeoutInMs = 0) => {
+ request.setTimeout(timeoutInMs, () => {
+ request.destroy();
+ reject(Object.assign(new Error(`Connection timed out after ${timeoutInMs} ms`), { name: "TimeoutError" }));
+ });
+};
+exports.setSocketTimeout = setSocketTimeout;
+
+
+/***/ }),
+
+/***/ 23211:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.Collector = void 0;
+const stream_1 = __nccwpck_require__(12781);
+class Collector extends stream_1.Writable {
+ constructor() {
+ super(...arguments);
+ this.bufferedBytes = [];
+ }
+ _write(chunk, encoding, callback) {
+ this.bufferedBytes.push(chunk);
+ callback();
+ }
+}
+exports.Collector = Collector;
+
+
+/***/ }),
+
+/***/ 81030:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.streamCollector = void 0;
+const collector_1 = __nccwpck_require__(23211);
+const streamCollector = (stream) => new Promise((resolve, reject) => {
+ const collector = new collector_1.Collector();
+ stream.pipe(collector);
+ stream.on("error", (err) => {
+ collector.end();
+ reject(err);
+ });
+ collector.on("error", reject);
+ collector.on("finish", function () {
+ const bytes = new Uint8Array(Buffer.concat(this.bufferedBytes));
+ resolve(bytes);
+ });
+});
+exports.streamCollector = streamCollector;
+
+
+/***/ }),
+
+/***/ 73766:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.writeRequestBody = void 0;
+const stream_1 = __nccwpck_require__(12781);
+const MIN_WAIT_TIME = 1000;
+async function writeRequestBody(httpRequest, request, maxContinueTimeoutMs = MIN_WAIT_TIME) {
+ var _a;
+ const headers = (_a = request.headers) !== null && _a !== void 0 ? _a : {};
+ const expect = headers["Expect"] || headers["expect"];
+ let timeoutId = -1;
+ let hasError = false;
+ if (expect === "100-continue") {
+ await Promise.race([
+ new Promise((resolve) => {
+ timeoutId = Number(setTimeout(resolve, Math.max(MIN_WAIT_TIME, maxContinueTimeoutMs)));
+ }),
+ new Promise((resolve) => {
+ httpRequest.on("continue", () => {
+ clearTimeout(timeoutId);
+ resolve();
+ });
+ httpRequest.on("error", () => {
+ hasError = true;
+ clearTimeout(timeoutId);
+ resolve();
+ });
+ }),
+ ]);
+ }
+ if (!hasError) {
+ writeBody(httpRequest, request.body);
+ }
+}
+exports.writeRequestBody = writeRequestBody;
+function writeBody(httpRequest, body) {
+ if (body instanceof stream_1.Readable) {
+ body.pipe(httpRequest);
+ }
+ else if (body) {
+ httpRequest.end(Buffer.from(body));
+ }
+ else {
+ httpRequest.end();
+ }
+}
+
+
+/***/ }),
+
+/***/ 63936:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.CredentialsProviderError = void 0;
+const ProviderError_1 = __nccwpck_require__(23324);
+class CredentialsProviderError extends ProviderError_1.ProviderError {
+ constructor(message, tryNextLink = true) {
+ super(message, tryNextLink);
+ this.tryNextLink = tryNextLink;
+ this.name = "CredentialsProviderError";
+ Object.setPrototypeOf(this, CredentialsProviderError.prototype);
+ }
+}
+exports.CredentialsProviderError = CredentialsProviderError;
+
+
+/***/ }),
+
+/***/ 23324:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.ProviderError = void 0;
+class ProviderError extends Error {
+ constructor(message, tryNextLink = true) {
+ super(message);
+ this.tryNextLink = tryNextLink;
+ this.name = "ProviderError";
+ Object.setPrototypeOf(this, ProviderError.prototype);
+ }
+ static from(error, tryNextLink = true) {
+ return Object.assign(new this(error.message, tryNextLink), error);
+ }
+}
+exports.ProviderError = ProviderError;
+
+
+/***/ }),
+
+/***/ 50429:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.TokenProviderError = void 0;
+const ProviderError_1 = __nccwpck_require__(23324);
+class TokenProviderError extends ProviderError_1.ProviderError {
+ constructor(message, tryNextLink = true) {
+ super(message, tryNextLink);
+ this.tryNextLink = tryNextLink;
+ this.name = "TokenProviderError";
+ Object.setPrototypeOf(this, TokenProviderError.prototype);
+ }
+}
+exports.TokenProviderError = TokenProviderError;
+
+
+/***/ }),
+
+/***/ 45079:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.chain = void 0;
+const ProviderError_1 = __nccwpck_require__(23324);
+const chain = (...providers) => async () => {
+ if (providers.length === 0) {
+ throw new ProviderError_1.ProviderError("No providers in chain");
+ }
+ let lastProviderError;
+ for (const provider of providers) {
+ try {
+ const credentials = await provider();
+ return credentials;
+ }
+ catch (err) {
+ lastProviderError = err;
+ if (err === null || err === void 0 ? void 0 : err.tryNextLink) {
+ continue;
+ }
+ throw err;
+ }
+ }
+ throw lastProviderError;
+};
+exports.chain = chain;
+
+
+/***/ }),
+
+/***/ 51322:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.fromStatic = void 0;
+const fromStatic = (staticValue) => () => Promise.resolve(staticValue);
+exports.fromStatic = fromStatic;
+
+
+/***/ }),
+
+/***/ 79721:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+const tslib_1 = __nccwpck_require__(4351);
+tslib_1.__exportStar(__nccwpck_require__(63936), exports);
+tslib_1.__exportStar(__nccwpck_require__(23324), exports);
+tslib_1.__exportStar(__nccwpck_require__(50429), exports);
+tslib_1.__exportStar(__nccwpck_require__(45079), exports);
+tslib_1.__exportStar(__nccwpck_require__(51322), exports);
+tslib_1.__exportStar(__nccwpck_require__(49762), exports);
+
+
+/***/ }),
+
+/***/ 49762:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.memoize = void 0;
+const memoize = (provider, isExpired, requiresRefresh) => {
+ let resolved;
+ let pending;
+ let hasResult;
+ let isConstant = false;
+ const coalesceProvider = async () => {
+ if (!pending) {
+ pending = provider();
+ }
+ try {
+ resolved = await pending;
+ hasResult = true;
+ isConstant = false;
+ }
+ finally {
+ pending = undefined;
+ }
+ return resolved;
+ };
+ if (isExpired === undefined) {
+ return async (options) => {
+ if (!hasResult || (options === null || options === void 0 ? void 0 : options.forceRefresh)) {
+ resolved = await coalesceProvider();
+ }
+ return resolved;
+ };
+ }
+ return async (options) => {
+ if (!hasResult || (options === null || options === void 0 ? void 0 : options.forceRefresh)) {
+ resolved = await coalesceProvider();
+ }
+ if (isConstant) {
+ return resolved;
+ }
+ if (requiresRefresh && !requiresRefresh(resolved)) {
+ isConstant = true;
+ return resolved;
+ }
+ if (isExpired(resolved)) {
+ await coalesceProvider();
+ return resolved;
+ }
+ return resolved;
+ };
+};
+exports.memoize = memoize;
+
+
+/***/ }),
+
+/***/ 89179:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.Field = void 0;
+const types_1 = __nccwpck_require__(55756);
+class Field {
+ constructor({ name, kind = types_1.FieldPosition.HEADER, values = [] }) {
+ this.name = name;
+ this.kind = kind;
+ this.values = values;
+ }
+ add(value) {
+ this.values.push(value);
+ }
+ set(values) {
+ this.values = values;
+ }
+ remove(value) {
+ this.values = this.values.filter((v) => v !== value);
+ }
+ toString() {
+ return this.values.map((v) => (v.includes(",") || v.includes(" ") ? `"${v}"` : v)).join(", ");
+ }
+ get() {
+ return this.values;
+ }
+}
+exports.Field = Field;
+
+
+/***/ }),
+
+/***/ 99242:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.Fields = void 0;
+class Fields {
+ constructor({ fields = [], encoding = "utf-8" }) {
+ this.entries = {};
+ fields.forEach(this.setField.bind(this));
+ this.encoding = encoding;
+ }
+ setField(field) {
+ this.entries[field.name.toLowerCase()] = field;
+ }
+ getField(name) {
+ return this.entries[name.toLowerCase()];
+ }
+ removeField(name) {
+ delete this.entries[name.toLowerCase()];
+ }
+ getByType(kind) {
+ return Object.values(this.entries).filter((field) => field.kind === kind);
+ }
+}
+exports.Fields = Fields;
+
+
+/***/ }),
+
+/***/ 22474:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.resolveHttpHandlerRuntimeConfig = exports.getHttpHandlerExtensionConfiguration = void 0;
+const getHttpHandlerExtensionConfiguration = (runtimeConfig) => {
+ let httpHandler = runtimeConfig.httpHandler;
+ return {
+ setHttpHandler(handler) {
+ httpHandler = handler;
+ },
+ httpHandler() {
+ return httpHandler;
+ },
+ updateHttpClientConfig(key, value) {
+ httpHandler.updateHttpClientConfig(key, value);
+ },
+ httpHandlerConfigs() {
+ return httpHandler.httpHandlerConfigs();
+ },
+ };
+};
+exports.getHttpHandlerExtensionConfiguration = getHttpHandlerExtensionConfiguration;
+const resolveHttpHandlerRuntimeConfig = (httpHandlerExtensionConfiguration) => {
+ return {
+ httpHandler: httpHandlerExtensionConfiguration.httpHandler(),
+ };
+};
+exports.resolveHttpHandlerRuntimeConfig = resolveHttpHandlerRuntimeConfig;
+
+
+/***/ }),
+
+/***/ 91654:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+const tslib_1 = __nccwpck_require__(4351);
+tslib_1.__exportStar(__nccwpck_require__(22474), exports);
+
+
+/***/ }),
+
+/***/ 63206:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+
+
+/***/ }),
+
+/***/ 38746:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.HttpRequest = void 0;
+class HttpRequest {
+ constructor(options) {
+ this.method = options.method || "GET";
+ this.hostname = options.hostname || "localhost";
+ this.port = options.port;
+ this.query = options.query || {};
+ this.headers = options.headers || {};
+ this.body = options.body;
+ this.protocol = options.protocol
+ ? options.protocol.slice(-1) !== ":"
+ ? `${options.protocol}:`
+ : options.protocol
+ : "https:";
+ this.path = options.path ? (options.path.charAt(0) !== "/" ? `/${options.path}` : options.path) : "/";
+ this.username = options.username;
+ this.password = options.password;
+ this.fragment = options.fragment;
+ }
+ static isInstance(request) {
+ if (!request)
+ return false;
+ const req = request;
+ return ("method" in req &&
+ "protocol" in req &&
+ "hostname" in req &&
+ "path" in req &&
+ typeof req["query"] === "object" &&
+ typeof req["headers"] === "object");
+ }
+ clone() {
+ const cloned = new HttpRequest({
+ ...this,
+ headers: { ...this.headers },
+ });
+ if (cloned.query)
+ cloned.query = cloneQuery(cloned.query);
+ return cloned;
+ }
+}
+exports.HttpRequest = HttpRequest;
+function cloneQuery(query) {
+ return Object.keys(query).reduce((carry, paramName) => {
+ const param = query[paramName];
+ return {
+ ...carry,
+ [paramName]: Array.isArray(param) ? [...param] : param,
+ };
+ }, {});
+}
+
+
+/***/ }),
+
+/***/ 26322:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.HttpResponse = void 0;
+class HttpResponse {
+ constructor(options) {
+ this.statusCode = options.statusCode;
+ this.reason = options.reason;
+ this.headers = options.headers || {};
+ this.body = options.body;
+ }
+ static isInstance(response) {
+ if (!response)
+ return false;
+ const resp = response;
+ return typeof resp.statusCode === "number" && typeof resp.headers === "object";
+ }
+}
+exports.HttpResponse = HttpResponse;
+
+
+/***/ }),
+
+/***/ 64418:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+const tslib_1 = __nccwpck_require__(4351);
+tslib_1.__exportStar(__nccwpck_require__(91654), exports);
+tslib_1.__exportStar(__nccwpck_require__(89179), exports);
+tslib_1.__exportStar(__nccwpck_require__(99242), exports);
+tslib_1.__exportStar(__nccwpck_require__(63206), exports);
+tslib_1.__exportStar(__nccwpck_require__(38746), exports);
+tslib_1.__exportStar(__nccwpck_require__(26322), exports);
+tslib_1.__exportStar(__nccwpck_require__(61466), exports);
+tslib_1.__exportStar(__nccwpck_require__(19135), exports);
+
+
+/***/ }),
+
+/***/ 61466:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.isValidHostname = void 0;
+function isValidHostname(hostname) {
+ const hostPattern = /^[a-z0-9][a-z0-9\.\-]*[a-z0-9]$/;
+ return hostPattern.test(hostname);
+}
+exports.isValidHostname = isValidHostname;
+
+
+/***/ }),
+
+/***/ 19135:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+
+
+/***/ }),
+
+/***/ 68031:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.buildQueryString = void 0;
+const util_uri_escape_1 = __nccwpck_require__(54197);
+function buildQueryString(query) {
+ const parts = [];
+ for (let key of Object.keys(query).sort()) {
+ const value = query[key];
+ key = (0, util_uri_escape_1.escapeUri)(key);
+ if (Array.isArray(value)) {
+ for (let i = 0, iLen = value.length; i < iLen; i++) {
+ parts.push(`${key}=${(0, util_uri_escape_1.escapeUri)(value[i])}`);
+ }
+ }
+ else {
+ let qsEntry = key;
+ if (value || typeof value === "string") {
+ qsEntry += `=${(0, util_uri_escape_1.escapeUri)(value)}`;
+ }
+ parts.push(qsEntry);
+ }
+ }
+ return parts.join("&");
+}
+exports.buildQueryString = buildQueryString;
+
+
+/***/ }),
+
+/***/ 4769:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.parseQueryString = void 0;
+function parseQueryString(querystring) {
+ const query = {};
+ querystring = querystring.replace(/^\?/, "");
+ if (querystring) {
+ for (const pair of querystring.split("&")) {
+ let [key, value = null] = pair.split("=");
+ key = decodeURIComponent(key);
+ if (value) {
+ value = decodeURIComponent(value);
+ }
+ if (!(key in query)) {
+ query[key] = value;
+ }
+ else if (Array.isArray(query[key])) {
+ query[key].push(value);
+ }
+ else {
+ query[key] = [query[key], value];
+ }
+ }
+ }
+ return query;
+}
+exports.parseQueryString = parseQueryString;
+
+
+/***/ }),
+
+/***/ 68415:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.NODEJS_TIMEOUT_ERROR_CODES = exports.TRANSIENT_ERROR_STATUS_CODES = exports.TRANSIENT_ERROR_CODES = exports.THROTTLING_ERROR_CODES = exports.CLOCK_SKEW_ERROR_CODES = void 0;
+exports.CLOCK_SKEW_ERROR_CODES = [
+ "AuthFailure",
+ "InvalidSignatureException",
+ "RequestExpired",
+ "RequestInTheFuture",
+ "RequestTimeTooSkewed",
+ "SignatureDoesNotMatch",
+];
+exports.THROTTLING_ERROR_CODES = [
+ "BandwidthLimitExceeded",
+ "EC2ThrottledException",
+ "LimitExceededException",
+ "PriorRequestNotComplete",
+ "ProvisionedThroughputExceededException",
+ "RequestLimitExceeded",
+ "RequestThrottled",
+ "RequestThrottledException",
+ "SlowDown",
+ "ThrottledException",
+ "Throttling",
+ "ThrottlingException",
+ "TooManyRequestsException",
+ "TransactionInProgressException",
+];
+exports.TRANSIENT_ERROR_CODES = ["TimeoutError", "RequestTimeout", "RequestTimeoutException"];
+exports.TRANSIENT_ERROR_STATUS_CODES = [500, 502, 503, 504];
+exports.NODEJS_TIMEOUT_ERROR_CODES = ["ECONNRESET", "ECONNREFUSED", "EPIPE", "ETIMEDOUT"];
+
+
+/***/ }),
+
+/***/ 6375:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.isServerError = exports.isTransientError = exports.isThrottlingError = exports.isClockSkewError = exports.isRetryableByTrait = void 0;
+const constants_1 = __nccwpck_require__(68415);
+const isRetryableByTrait = (error) => error.$retryable !== undefined;
+exports.isRetryableByTrait = isRetryableByTrait;
+const isClockSkewError = (error) => constants_1.CLOCK_SKEW_ERROR_CODES.includes(error.name);
+exports.isClockSkewError = isClockSkewError;
+const isThrottlingError = (error) => {
+ var _a, _b;
+ return ((_a = error.$metadata) === null || _a === void 0 ? void 0 : _a.httpStatusCode) === 429 ||
+ constants_1.THROTTLING_ERROR_CODES.includes(error.name) ||
+ ((_b = error.$retryable) === null || _b === void 0 ? void 0 : _b.throttling) == true;
+};
+exports.isThrottlingError = isThrottlingError;
+const isTransientError = (error) => {
+ var _a;
+ return constants_1.TRANSIENT_ERROR_CODES.includes(error.name) ||
+ constants_1.NODEJS_TIMEOUT_ERROR_CODES.includes((error === null || error === void 0 ? void 0 : error.code) || "") ||
+ constants_1.TRANSIENT_ERROR_STATUS_CODES.includes(((_a = error.$metadata) === null || _a === void 0 ? void 0 : _a.httpStatusCode) || 0);
+};
+exports.isTransientError = isTransientError;
+const isServerError = (error) => {
+ var _a;
+ if (((_a = error.$metadata) === null || _a === void 0 ? void 0 : _a.httpStatusCode) !== undefined) {
+ const statusCode = error.$metadata.httpStatusCode;
+ if (500 <= statusCode && statusCode <= 599 && !(0, exports.isTransientError)(error)) {
+ return true;
+ }
+ return false;
+ }
+ return false;
+};
+exports.isServerError = isServerError;
+
+
+/***/ }),
+
+/***/ 46062:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.getConfigData = void 0;
+const types_1 = __nccwpck_require__(55756);
+const loadSharedConfigFiles_1 = __nccwpck_require__(41879);
+const getConfigData = (data) => Object.entries(data)
+ .filter(([key]) => {
+ const sections = key.split(loadSharedConfigFiles_1.CONFIG_PREFIX_SEPARATOR);
+ if (sections.length === 2 && Object.values(types_1.IniSectionType).includes(sections[0])) {
+ return true;
+ }
+ return false;
+})
+ .reduce((acc, [key, value]) => {
+ const updatedKey = key.startsWith(types_1.IniSectionType.PROFILE) ? key.split(loadSharedConfigFiles_1.CONFIG_PREFIX_SEPARATOR)[1] : key;
+ acc[updatedKey] = value;
+ return acc;
+}, {
+ ...(data.default && { default: data.default }),
+});
+exports.getConfigData = getConfigData;
+
+
+/***/ }),
+
+/***/ 47237:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.getConfigFilepath = exports.ENV_CONFIG_PATH = void 0;
+const path_1 = __nccwpck_require__(71017);
+const getHomeDir_1 = __nccwpck_require__(68340);
+exports.ENV_CONFIG_PATH = "AWS_CONFIG_FILE";
+const getConfigFilepath = () => process.env[exports.ENV_CONFIG_PATH] || (0, path_1.join)((0, getHomeDir_1.getHomeDir)(), ".aws", "config");
+exports.getConfigFilepath = getConfigFilepath;
+
+
+/***/ }),
+
+/***/ 99036:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.getCredentialsFilepath = exports.ENV_CREDENTIALS_PATH = void 0;
+const path_1 = __nccwpck_require__(71017);
+const getHomeDir_1 = __nccwpck_require__(68340);
+exports.ENV_CREDENTIALS_PATH = "AWS_SHARED_CREDENTIALS_FILE";
+const getCredentialsFilepath = () => process.env[exports.ENV_CREDENTIALS_PATH] || (0, path_1.join)((0, getHomeDir_1.getHomeDir)(), ".aws", "credentials");
+exports.getCredentialsFilepath = getCredentialsFilepath;
+
+
+/***/ }),
+
+/***/ 68340:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.getHomeDir = void 0;
+const os_1 = __nccwpck_require__(22037);
+const path_1 = __nccwpck_require__(71017);
+const homeDirCache = {};
+const getHomeDirCacheKey = () => {
+ if (process && process.geteuid) {
+ return `${process.geteuid()}`;
+ }
+ return "DEFAULT";
+};
+const getHomeDir = () => {
+ const { HOME, USERPROFILE, HOMEPATH, HOMEDRIVE = `C:${path_1.sep}` } = process.env;
+ if (HOME)
+ return HOME;
+ if (USERPROFILE)
+ return USERPROFILE;
+ if (HOMEPATH)
+ return `${HOMEDRIVE}${HOMEPATH}`;
+ const homeDirCacheKey = getHomeDirCacheKey();
+ if (!homeDirCache[homeDirCacheKey])
+ homeDirCache[homeDirCacheKey] = (0, os_1.homedir)();
+ return homeDirCache[homeDirCacheKey];
+};
+exports.getHomeDir = getHomeDir;
+
+
+/***/ }),
+
+/***/ 52802:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.getProfileName = exports.DEFAULT_PROFILE = exports.ENV_PROFILE = void 0;
+exports.ENV_PROFILE = "AWS_PROFILE";
+exports.DEFAULT_PROFILE = "default";
+const getProfileName = (init) => init.profile || process.env[exports.ENV_PROFILE] || exports.DEFAULT_PROFILE;
+exports.getProfileName = getProfileName;
+
+
+/***/ }),
+
+/***/ 24740:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.getSSOTokenFilepath = void 0;
+const crypto_1 = __nccwpck_require__(6113);
+const path_1 = __nccwpck_require__(71017);
+const getHomeDir_1 = __nccwpck_require__(68340);
+const getSSOTokenFilepath = (id) => {
+ const hasher = (0, crypto_1.createHash)("sha1");
+ const cacheName = hasher.update(id).digest("hex");
+ return (0, path_1.join)((0, getHomeDir_1.getHomeDir)(), ".aws", "sso", "cache", `${cacheName}.json`);
+};
+exports.getSSOTokenFilepath = getSSOTokenFilepath;
+
+
+/***/ }),
+
+/***/ 69678:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.getSSOTokenFromFile = void 0;
+const fs_1 = __nccwpck_require__(57147);
+const getSSOTokenFilepath_1 = __nccwpck_require__(24740);
+const { readFile } = fs_1.promises;
+const getSSOTokenFromFile = async (id) => {
+ const ssoTokenFilepath = (0, getSSOTokenFilepath_1.getSSOTokenFilepath)(id);
+ const ssoTokenText = await readFile(ssoTokenFilepath, "utf8");
+ return JSON.parse(ssoTokenText);
+};
+exports.getSSOTokenFromFile = getSSOTokenFromFile;
+
+
+/***/ }),
+
+/***/ 82820:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.getSsoSessionData = void 0;
+const types_1 = __nccwpck_require__(55756);
+const loadSharedConfigFiles_1 = __nccwpck_require__(41879);
+const getSsoSessionData = (data) => Object.entries(data)
+ .filter(([key]) => key.startsWith(types_1.IniSectionType.SSO_SESSION + loadSharedConfigFiles_1.CONFIG_PREFIX_SEPARATOR))
+ .reduce((acc, [key, value]) => ({ ...acc, [key.split(loadSharedConfigFiles_1.CONFIG_PREFIX_SEPARATOR)[1]]: value }), {});
+exports.getSsoSessionData = getSsoSessionData;
+
+
+/***/ }),
+
+/***/ 43507:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+const tslib_1 = __nccwpck_require__(4351);
+tslib_1.__exportStar(__nccwpck_require__(68340), exports);
+tslib_1.__exportStar(__nccwpck_require__(52802), exports);
+tslib_1.__exportStar(__nccwpck_require__(24740), exports);
+tslib_1.__exportStar(__nccwpck_require__(69678), exports);
+tslib_1.__exportStar(__nccwpck_require__(41879), exports);
+tslib_1.__exportStar(__nccwpck_require__(34649), exports);
+tslib_1.__exportStar(__nccwpck_require__(2546), exports);
+tslib_1.__exportStar(__nccwpck_require__(63191), exports);
+
+
+/***/ }),
+
+/***/ 41879:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.loadSharedConfigFiles = exports.CONFIG_PREFIX_SEPARATOR = void 0;
+const getConfigData_1 = __nccwpck_require__(46062);
+const getConfigFilepath_1 = __nccwpck_require__(47237);
+const getCredentialsFilepath_1 = __nccwpck_require__(99036);
+const parseIni_1 = __nccwpck_require__(54262);
+const slurpFile_1 = __nccwpck_require__(19155);
+const swallowError = () => ({});
+exports.CONFIG_PREFIX_SEPARATOR = ".";
+const loadSharedConfigFiles = async (init = {}) => {
+ const { filepath = (0, getCredentialsFilepath_1.getCredentialsFilepath)(), configFilepath = (0, getConfigFilepath_1.getConfigFilepath)() } = init;
+ const parsedFiles = await Promise.all([
+ (0, slurpFile_1.slurpFile)(configFilepath, {
+ ignoreCache: init.ignoreCache,
+ })
+ .then(parseIni_1.parseIni)
+ .then(getConfigData_1.getConfigData)
+ .catch(swallowError),
+ (0, slurpFile_1.slurpFile)(filepath, {
+ ignoreCache: init.ignoreCache,
+ })
+ .then(parseIni_1.parseIni)
+ .catch(swallowError),
+ ]);
+ return {
+ configFile: parsedFiles[0],
+ credentialsFile: parsedFiles[1],
+ };
+};
+exports.loadSharedConfigFiles = loadSharedConfigFiles;
+
+
+/***/ }),
+
+/***/ 34649:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.loadSsoSessionData = void 0;
+const getConfigFilepath_1 = __nccwpck_require__(47237);
+const getSsoSessionData_1 = __nccwpck_require__(82820);
+const parseIni_1 = __nccwpck_require__(54262);
+const slurpFile_1 = __nccwpck_require__(19155);
+const swallowError = () => ({});
+const loadSsoSessionData = async (init = {}) => {
+ var _a;
+ return (0, slurpFile_1.slurpFile)((_a = init.configFilepath) !== null && _a !== void 0 ? _a : (0, getConfigFilepath_1.getConfigFilepath)())
+ .then(parseIni_1.parseIni)
+ .then(getSsoSessionData_1.getSsoSessionData)
+ .catch(swallowError);
+};
+exports.loadSsoSessionData = loadSsoSessionData;
+
+
+/***/ }),
+
+/***/ 19447:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.mergeConfigFiles = void 0;
+const mergeConfigFiles = (...files) => {
+ const merged = {};
+ for (const file of files) {
+ for (const [key, values] of Object.entries(file)) {
+ if (merged[key] !== undefined) {
+ Object.assign(merged[key], values);
+ }
+ else {
+ merged[key] = values;
+ }
+ }
+ }
+ return merged;
+};
+exports.mergeConfigFiles = mergeConfigFiles;
+
+
+/***/ }),
+
+/***/ 54262:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.parseIni = void 0;
+const types_1 = __nccwpck_require__(55756);
+const loadSharedConfigFiles_1 = __nccwpck_require__(41879);
+const prefixKeyRegex = /^([\w-]+)\s(["'])?([\w-@\+]+)\2$/;
+const profileNameBlockList = ["__proto__", "profile __proto__"];
+const parseIni = (iniData) => {
+ const map = {};
+ let currentSection;
+ let currentSubSection;
+ for (const iniLine of iniData.split(/\r?\n/)) {
+ const trimmedLine = iniLine.split(/(^|\s)[;#]/)[0].trim();
+ const isSection = trimmedLine[0] === "[" && trimmedLine[trimmedLine.length - 1] === "]";
+ if (isSection) {
+ currentSection = undefined;
+ currentSubSection = undefined;
+ const sectionName = trimmedLine.substring(1, trimmedLine.length - 1);
+ const matches = prefixKeyRegex.exec(sectionName);
+ if (matches) {
+ const [, prefix, , name] = matches;
+ if (Object.values(types_1.IniSectionType).includes(prefix)) {
+ currentSection = [prefix, name].join(loadSharedConfigFiles_1.CONFIG_PREFIX_SEPARATOR);
+ }
+ }
+ else {
+ currentSection = sectionName;
+ }
+ if (profileNameBlockList.includes(sectionName)) {
+ throw new Error(`Found invalid profile name "${sectionName}"`);
+ }
+ }
+ else if (currentSection) {
+ const indexOfEqualsSign = trimmedLine.indexOf("=");
+ if (![0, -1].includes(indexOfEqualsSign)) {
+ const [name, value] = [
+ trimmedLine.substring(0, indexOfEqualsSign).trim(),
+ trimmedLine.substring(indexOfEqualsSign + 1).trim(),
+ ];
+ if (value === "") {
+ currentSubSection = name;
+ }
+ else {
+ if (currentSubSection && iniLine.trimStart() === iniLine) {
+ currentSubSection = undefined;
+ }
+ map[currentSection] = map[currentSection] || {};
+ const key = currentSubSection ? [currentSubSection, name].join(loadSharedConfigFiles_1.CONFIG_PREFIX_SEPARATOR) : name;
+ map[currentSection][key] = value;
+ }
+ }
+ }
+ }
+ return map;
+};
+exports.parseIni = parseIni;
+
+
+/***/ }),
+
+/***/ 2546:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.parseKnownFiles = void 0;
+const loadSharedConfigFiles_1 = __nccwpck_require__(41879);
+const mergeConfigFiles_1 = __nccwpck_require__(19447);
+const parseKnownFiles = async (init) => {
+ const parsedFiles = await (0, loadSharedConfigFiles_1.loadSharedConfigFiles)(init);
+ return (0, mergeConfigFiles_1.mergeConfigFiles)(parsedFiles.configFile, parsedFiles.credentialsFile);
+};
+exports.parseKnownFiles = parseKnownFiles;
+
+
+/***/ }),
+
+/***/ 19155:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.slurpFile = void 0;
+const fs_1 = __nccwpck_require__(57147);
+const { readFile } = fs_1.promises;
+const filePromisesHash = {};
+const slurpFile = (path, options) => {
+ if (!filePromisesHash[path] || (options === null || options === void 0 ? void 0 : options.ignoreCache)) {
+ filePromisesHash[path] = readFile(path, "utf8");
+ }
+ return filePromisesHash[path];
+};
+exports.slurpFile = slurpFile;
+
+
+/***/ }),
+
+/***/ 63191:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+
+
+/***/ }),
+
+/***/ 39733:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.SignatureV4 = void 0;
+const eventstream_codec_1 = __nccwpck_require__(56459);
+const util_hex_encoding_1 = __nccwpck_require__(45364);
+const util_middleware_1 = __nccwpck_require__(2390);
+const util_utf8_1 = __nccwpck_require__(41895);
+const constants_1 = __nccwpck_require__(48644);
+const credentialDerivation_1 = __nccwpck_require__(19623);
+const getCanonicalHeaders_1 = __nccwpck_require__(51393);
+const getCanonicalQuery_1 = __nccwpck_require__(33243);
+const getPayloadHash_1 = __nccwpck_require__(48545);
+const headerUtil_1 = __nccwpck_require__(62179);
+const moveHeadersToQuery_1 = __nccwpck_require__(49828);
+const prepareRequest_1 = __nccwpck_require__(60075);
+const utilDate_1 = __nccwpck_require__(39299);
+class SignatureV4 {
+ constructor({ applyChecksum, credentials, region, service, sha256, uriEscapePath = true, }) {
+ this.headerMarshaller = new eventstream_codec_1.HeaderMarshaller(util_utf8_1.toUtf8, util_utf8_1.fromUtf8);
+ this.service = service;
+ this.sha256 = sha256;
+ this.uriEscapePath = uriEscapePath;
+ this.applyChecksum = typeof applyChecksum === "boolean" ? applyChecksum : true;
+ this.regionProvider = (0, util_middleware_1.normalizeProvider)(region);
+ this.credentialProvider = (0, util_middleware_1.normalizeProvider)(credentials);
+ }
+ async presign(originalRequest, options = {}) {
+ const { signingDate = new Date(), expiresIn = 3600, unsignableHeaders, unhoistableHeaders, signableHeaders, signingRegion, signingService, } = options;
+ const credentials = await this.credentialProvider();
+ this.validateResolvedCredentials(credentials);
+ const region = signingRegion !== null && signingRegion !== void 0 ? signingRegion : (await this.regionProvider());
+ const { longDate, shortDate } = formatDate(signingDate);
+ if (expiresIn > constants_1.MAX_PRESIGNED_TTL) {
+ return Promise.reject("Signature version 4 presigned URLs" + " must have an expiration date less than one week in" + " the future");
+ }
+ const scope = (0, credentialDerivation_1.createScope)(shortDate, region, signingService !== null && signingService !== void 0 ? signingService : this.service);
+ const request = (0, moveHeadersToQuery_1.moveHeadersToQuery)((0, prepareRequest_1.prepareRequest)(originalRequest), { unhoistableHeaders });
+ if (credentials.sessionToken) {
+ request.query[constants_1.TOKEN_QUERY_PARAM] = credentials.sessionToken;
+ }
+ request.query[constants_1.ALGORITHM_QUERY_PARAM] = constants_1.ALGORITHM_IDENTIFIER;
+ request.query[constants_1.CREDENTIAL_QUERY_PARAM] = `${credentials.accessKeyId}/${scope}`;
+ request.query[constants_1.AMZ_DATE_QUERY_PARAM] = longDate;
+ request.query[constants_1.EXPIRES_QUERY_PARAM] = expiresIn.toString(10);
+ const canonicalHeaders = (0, getCanonicalHeaders_1.getCanonicalHeaders)(request, unsignableHeaders, signableHeaders);
+ request.query[constants_1.SIGNED_HEADERS_QUERY_PARAM] = getCanonicalHeaderList(canonicalHeaders);
+ request.query[constants_1.SIGNATURE_QUERY_PARAM] = await this.getSignature(longDate, scope, this.getSigningKey(credentials, region, shortDate, signingService), this.createCanonicalRequest(request, canonicalHeaders, await (0, getPayloadHash_1.getPayloadHash)(originalRequest, this.sha256)));
+ return request;
+ }
+ async sign(toSign, options) {
+ if (typeof toSign === "string") {
+ return this.signString(toSign, options);
+ }
+ else if (toSign.headers && toSign.payload) {
+ return this.signEvent(toSign, options);
+ }
+ else if (toSign.message) {
+ return this.signMessage(toSign, options);
+ }
+ else {
+ return this.signRequest(toSign, options);
+ }
+ }
+ async signEvent({ headers, payload }, { signingDate = new Date(), priorSignature, signingRegion, signingService }) {
+ const region = signingRegion !== null && signingRegion !== void 0 ? signingRegion : (await this.regionProvider());
+ const { shortDate, longDate } = formatDate(signingDate);
+ const scope = (0, credentialDerivation_1.createScope)(shortDate, region, signingService !== null && signingService !== void 0 ? signingService : this.service);
+ const hashedPayload = await (0, getPayloadHash_1.getPayloadHash)({ headers: {}, body: payload }, this.sha256);
+ const hash = new this.sha256();
+ hash.update(headers);
+ const hashedHeaders = (0, util_hex_encoding_1.toHex)(await hash.digest());
+ const stringToSign = [
+ constants_1.EVENT_ALGORITHM_IDENTIFIER,
+ longDate,
+ scope,
+ priorSignature,
+ hashedHeaders,
+ hashedPayload,
+ ].join("\n");
+ return this.signString(stringToSign, { signingDate, signingRegion: region, signingService });
+ }
+ async signMessage(signableMessage, { signingDate = new Date(), signingRegion, signingService }) {
+ const promise = this.signEvent({
+ headers: this.headerMarshaller.format(signableMessage.message.headers),
+ payload: signableMessage.message.body,
+ }, {
+ signingDate,
+ signingRegion,
+ signingService,
+ priorSignature: signableMessage.priorSignature,
+ });
+ return promise.then((signature) => {
+ return { message: signableMessage.message, signature };
+ });
+ }
+ async signString(stringToSign, { signingDate = new Date(), signingRegion, signingService } = {}) {
+ const credentials = await this.credentialProvider();
+ this.validateResolvedCredentials(credentials);
+ const region = signingRegion !== null && signingRegion !== void 0 ? signingRegion : (await this.regionProvider());
+ const { shortDate } = formatDate(signingDate);
+ const hash = new this.sha256(await this.getSigningKey(credentials, region, shortDate, signingService));
+ hash.update((0, util_utf8_1.toUint8Array)(stringToSign));
+ return (0, util_hex_encoding_1.toHex)(await hash.digest());
+ }
+ async signRequest(requestToSign, { signingDate = new Date(), signableHeaders, unsignableHeaders, signingRegion, signingService, } = {}) {
+ const credentials = await this.credentialProvider();
+ this.validateResolvedCredentials(credentials);
+ const region = signingRegion !== null && signingRegion !== void 0 ? signingRegion : (await this.regionProvider());
+ const request = (0, prepareRequest_1.prepareRequest)(requestToSign);
+ const { longDate, shortDate } = formatDate(signingDate);
+ const scope = (0, credentialDerivation_1.createScope)(shortDate, region, signingService !== null && signingService !== void 0 ? signingService : this.service);
+ request.headers[constants_1.AMZ_DATE_HEADER] = longDate;
+ if (credentials.sessionToken) {
+ request.headers[constants_1.TOKEN_HEADER] = credentials.sessionToken;
+ }
+ const payloadHash = await (0, getPayloadHash_1.getPayloadHash)(request, this.sha256);
+ if (!(0, headerUtil_1.hasHeader)(constants_1.SHA256_HEADER, request.headers) && this.applyChecksum) {
+ request.headers[constants_1.SHA256_HEADER] = payloadHash;
+ }
+ const canonicalHeaders = (0, getCanonicalHeaders_1.getCanonicalHeaders)(request, unsignableHeaders, signableHeaders);
+ const signature = await this.getSignature(longDate, scope, this.getSigningKey(credentials, region, shortDate, signingService), this.createCanonicalRequest(request, canonicalHeaders, payloadHash));
+ request.headers[constants_1.AUTH_HEADER] =
+ `${constants_1.ALGORITHM_IDENTIFIER} ` +
+ `Credential=${credentials.accessKeyId}/${scope}, ` +
+ `SignedHeaders=${getCanonicalHeaderList(canonicalHeaders)}, ` +
+ `Signature=${signature}`;
+ return request;
+ }
+ createCanonicalRequest(request, canonicalHeaders, payloadHash) {
+ const sortedHeaders = Object.keys(canonicalHeaders).sort();
+ return `${request.method}
+${this.getCanonicalPath(request)}
+${(0, getCanonicalQuery_1.getCanonicalQuery)(request)}
+${sortedHeaders.map((name) => `${name}:${canonicalHeaders[name]}`).join("\n")}
+
+${sortedHeaders.join(";")}
+${payloadHash}`;
+ }
+ async createStringToSign(longDate, credentialScope, canonicalRequest) {
+ const hash = new this.sha256();
+ hash.update((0, util_utf8_1.toUint8Array)(canonicalRequest));
+ const hashedRequest = await hash.digest();
+ return `${constants_1.ALGORITHM_IDENTIFIER}
+${longDate}
+${credentialScope}
+${(0, util_hex_encoding_1.toHex)(hashedRequest)}`;
+ }
+ getCanonicalPath({ path }) {
+ if (this.uriEscapePath) {
+ const normalizedPathSegments = [];
+ for (const pathSegment of path.split("/")) {
+ if ((pathSegment === null || pathSegment === void 0 ? void 0 : pathSegment.length) === 0)
+ continue;
+ if (pathSegment === ".")
+ continue;
+ if (pathSegment === "..") {
+ normalizedPathSegments.pop();
+ }
+ else {
+ normalizedPathSegments.push(pathSegment);
+ }
+ }
+ const normalizedPath = `${(path === null || path === void 0 ? void 0 : path.startsWith("/")) ? "/" : ""}${normalizedPathSegments.join("/")}${normalizedPathSegments.length > 0 && (path === null || path === void 0 ? void 0 : path.endsWith("/")) ? "/" : ""}`;
+ const doubleEncoded = encodeURIComponent(normalizedPath);
+ return doubleEncoded.replace(/%2F/g, "/");
+ }
+ return path;
+ }
+ async getSignature(longDate, credentialScope, keyPromise, canonicalRequest) {
+ const stringToSign = await this.createStringToSign(longDate, credentialScope, canonicalRequest);
+ const hash = new this.sha256(await keyPromise);
+ hash.update((0, util_utf8_1.toUint8Array)(stringToSign));
+ return (0, util_hex_encoding_1.toHex)(await hash.digest());
+ }
+ getSigningKey(credentials, region, shortDate, service) {
+ return (0, credentialDerivation_1.getSigningKey)(this.sha256, credentials, shortDate, region, service || this.service);
+ }
+ validateResolvedCredentials(credentials) {
+ if (typeof credentials !== "object" ||
+ typeof credentials.accessKeyId !== "string" ||
+ typeof credentials.secretAccessKey !== "string") {
+ throw new Error("Resolved credential object is not valid");
+ }
+ }
+}
+exports.SignatureV4 = SignatureV4;
+const formatDate = (now) => {
+ const longDate = (0, utilDate_1.iso8601)(now).replace(/[\-:]/g, "");
+ return {
+ longDate,
+ shortDate: longDate.slice(0, 8),
+ };
+};
+const getCanonicalHeaderList = (headers) => Object.keys(headers).sort().join(";");
+
+
+/***/ }),
+
+/***/ 69098:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.cloneQuery = exports.cloneRequest = void 0;
+const cloneRequest = ({ headers, query, ...rest }) => ({
+ ...rest,
+ headers: { ...headers },
+ query: query ? (0, exports.cloneQuery)(query) : undefined,
+});
+exports.cloneRequest = cloneRequest;
+const cloneQuery = (query) => Object.keys(query).reduce((carry, paramName) => {
+ const param = query[paramName];
+ return {
+ ...carry,
+ [paramName]: Array.isArray(param) ? [...param] : param,
+ };
+}, {});
+exports.cloneQuery = cloneQuery;
+
+
+/***/ }),
+
+/***/ 48644:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.MAX_PRESIGNED_TTL = exports.KEY_TYPE_IDENTIFIER = exports.MAX_CACHE_SIZE = exports.UNSIGNED_PAYLOAD = exports.EVENT_ALGORITHM_IDENTIFIER = exports.ALGORITHM_IDENTIFIER_V4A = exports.ALGORITHM_IDENTIFIER = exports.UNSIGNABLE_PATTERNS = exports.SEC_HEADER_PATTERN = exports.PROXY_HEADER_PATTERN = exports.ALWAYS_UNSIGNABLE_HEADERS = exports.HOST_HEADER = exports.TOKEN_HEADER = exports.SHA256_HEADER = exports.SIGNATURE_HEADER = exports.GENERATED_HEADERS = exports.DATE_HEADER = exports.AMZ_DATE_HEADER = exports.AUTH_HEADER = exports.REGION_SET_PARAM = exports.TOKEN_QUERY_PARAM = exports.SIGNATURE_QUERY_PARAM = exports.EXPIRES_QUERY_PARAM = exports.SIGNED_HEADERS_QUERY_PARAM = exports.AMZ_DATE_QUERY_PARAM = exports.CREDENTIAL_QUERY_PARAM = exports.ALGORITHM_QUERY_PARAM = void 0;
+exports.ALGORITHM_QUERY_PARAM = "X-Amz-Algorithm";
+exports.CREDENTIAL_QUERY_PARAM = "X-Amz-Credential";
+exports.AMZ_DATE_QUERY_PARAM = "X-Amz-Date";
+exports.SIGNED_HEADERS_QUERY_PARAM = "X-Amz-SignedHeaders";
+exports.EXPIRES_QUERY_PARAM = "X-Amz-Expires";
+exports.SIGNATURE_QUERY_PARAM = "X-Amz-Signature";
+exports.TOKEN_QUERY_PARAM = "X-Amz-Security-Token";
+exports.REGION_SET_PARAM = "X-Amz-Region-Set";
+exports.AUTH_HEADER = "authorization";
+exports.AMZ_DATE_HEADER = exports.AMZ_DATE_QUERY_PARAM.toLowerCase();
+exports.DATE_HEADER = "date";
+exports.GENERATED_HEADERS = [exports.AUTH_HEADER, exports.AMZ_DATE_HEADER, exports.DATE_HEADER];
+exports.SIGNATURE_HEADER = exports.SIGNATURE_QUERY_PARAM.toLowerCase();
+exports.SHA256_HEADER = "x-amz-content-sha256";
+exports.TOKEN_HEADER = exports.TOKEN_QUERY_PARAM.toLowerCase();
+exports.HOST_HEADER = "host";
+exports.ALWAYS_UNSIGNABLE_HEADERS = {
+ authorization: true,
+ "cache-control": true,
+ connection: true,
+ expect: true,
+ from: true,
+ "keep-alive": true,
+ "max-forwards": true,
+ pragma: true,
+ referer: true,
+ te: true,
+ trailer: true,
+ "transfer-encoding": true,
+ upgrade: true,
+ "user-agent": true,
+ "x-amzn-trace-id": true,
+};
+exports.PROXY_HEADER_PATTERN = /^proxy-/;
+exports.SEC_HEADER_PATTERN = /^sec-/;
+exports.UNSIGNABLE_PATTERNS = [/^proxy-/i, /^sec-/i];
+exports.ALGORITHM_IDENTIFIER = "AWS4-HMAC-SHA256";
+exports.ALGORITHM_IDENTIFIER_V4A = "AWS4-ECDSA-P256-SHA256";
+exports.EVENT_ALGORITHM_IDENTIFIER = "AWS4-HMAC-SHA256-PAYLOAD";
+exports.UNSIGNED_PAYLOAD = "UNSIGNED-PAYLOAD";
+exports.MAX_CACHE_SIZE = 50;
+exports.KEY_TYPE_IDENTIFIER = "aws4_request";
+exports.MAX_PRESIGNED_TTL = 60 * 60 * 24 * 7;
+
+
+/***/ }),
+
+/***/ 19623:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.clearCredentialCache = exports.getSigningKey = exports.createScope = void 0;
+const util_hex_encoding_1 = __nccwpck_require__(45364);
+const util_utf8_1 = __nccwpck_require__(41895);
+const constants_1 = __nccwpck_require__(48644);
+const signingKeyCache = {};
+const cacheQueue = [];
+const createScope = (shortDate, region, service) => `${shortDate}/${region}/${service}/${constants_1.KEY_TYPE_IDENTIFIER}`;
+exports.createScope = createScope;
+const getSigningKey = async (sha256Constructor, credentials, shortDate, region, service) => {
+ const credsHash = await hmac(sha256Constructor, credentials.secretAccessKey, credentials.accessKeyId);
+ const cacheKey = `${shortDate}:${region}:${service}:${(0, util_hex_encoding_1.toHex)(credsHash)}:${credentials.sessionToken}`;
+ if (cacheKey in signingKeyCache) {
+ return signingKeyCache[cacheKey];
+ }
+ cacheQueue.push(cacheKey);
+ while (cacheQueue.length > constants_1.MAX_CACHE_SIZE) {
+ delete signingKeyCache[cacheQueue.shift()];
+ }
+ let key = `AWS4${credentials.secretAccessKey}`;
+ for (const signable of [shortDate, region, service, constants_1.KEY_TYPE_IDENTIFIER]) {
+ key = await hmac(sha256Constructor, key, signable);
+ }
+ return (signingKeyCache[cacheKey] = key);
+};
+exports.getSigningKey = getSigningKey;
+const clearCredentialCache = () => {
+ cacheQueue.length = 0;
+ Object.keys(signingKeyCache).forEach((cacheKey) => {
+ delete signingKeyCache[cacheKey];
+ });
+};
+exports.clearCredentialCache = clearCredentialCache;
+const hmac = (ctor, secret, data) => {
+ const hash = new ctor(secret);
+ hash.update((0, util_utf8_1.toUint8Array)(data));
+ return hash.digest();
+};
+
+
+/***/ }),
+
+/***/ 51393:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.getCanonicalHeaders = void 0;
+const constants_1 = __nccwpck_require__(48644);
+const getCanonicalHeaders = ({ headers }, unsignableHeaders, signableHeaders) => {
+ const canonical = {};
+ for (const headerName of Object.keys(headers).sort()) {
+ if (headers[headerName] == undefined) {
+ continue;
+ }
+ const canonicalHeaderName = headerName.toLowerCase();
+ if (canonicalHeaderName in constants_1.ALWAYS_UNSIGNABLE_HEADERS ||
+ (unsignableHeaders === null || unsignableHeaders === void 0 ? void 0 : unsignableHeaders.has(canonicalHeaderName)) ||
+ constants_1.PROXY_HEADER_PATTERN.test(canonicalHeaderName) ||
+ constants_1.SEC_HEADER_PATTERN.test(canonicalHeaderName)) {
+ if (!signableHeaders || (signableHeaders && !signableHeaders.has(canonicalHeaderName))) {
+ continue;
+ }
+ }
+ canonical[canonicalHeaderName] = headers[headerName].trim().replace(/\s+/g, " ");
+ }
+ return canonical;
+};
+exports.getCanonicalHeaders = getCanonicalHeaders;
+
+
+/***/ }),
+
+/***/ 33243:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.getCanonicalQuery = void 0;
+const util_uri_escape_1 = __nccwpck_require__(54197);
+const constants_1 = __nccwpck_require__(48644);
+const getCanonicalQuery = ({ query = {} }) => {
+ const keys = [];
+ const serialized = {};
+ for (const key of Object.keys(query).sort()) {
+ if (key.toLowerCase() === constants_1.SIGNATURE_HEADER) {
+ continue;
+ }
+ keys.push(key);
+ const value = query[key];
+ if (typeof value === "string") {
+ serialized[key] = `${(0, util_uri_escape_1.escapeUri)(key)}=${(0, util_uri_escape_1.escapeUri)(value)}`;
+ }
+ else if (Array.isArray(value)) {
+ serialized[key] = value
+ .slice(0)
+ .reduce((encoded, value) => encoded.concat([`${(0, util_uri_escape_1.escapeUri)(key)}=${(0, util_uri_escape_1.escapeUri)(value)}`]), [])
+ .sort()
+ .join("&");
+ }
+ }
+ return keys
+ .map((key) => serialized[key])
+ .filter((serialized) => serialized)
+ .join("&");
+};
+exports.getCanonicalQuery = getCanonicalQuery;
+
+
+/***/ }),
+
+/***/ 48545:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.getPayloadHash = void 0;
+const is_array_buffer_1 = __nccwpck_require__(10780);
+const util_hex_encoding_1 = __nccwpck_require__(45364);
+const util_utf8_1 = __nccwpck_require__(41895);
+const constants_1 = __nccwpck_require__(48644);
+const getPayloadHash = async ({ headers, body }, hashConstructor) => {
+ for (const headerName of Object.keys(headers)) {
+ if (headerName.toLowerCase() === constants_1.SHA256_HEADER) {
+ return headers[headerName];
+ }
+ }
+ if (body == undefined) {
+ return "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855";
+ }
+ else if (typeof body === "string" || ArrayBuffer.isView(body) || (0, is_array_buffer_1.isArrayBuffer)(body)) {
+ const hashCtor = new hashConstructor();
+ hashCtor.update((0, util_utf8_1.toUint8Array)(body));
+ return (0, util_hex_encoding_1.toHex)(await hashCtor.digest());
+ }
+ return constants_1.UNSIGNED_PAYLOAD;
+};
+exports.getPayloadHash = getPayloadHash;
+
+
+/***/ }),
+
+/***/ 62179:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.deleteHeader = exports.getHeaderValue = exports.hasHeader = void 0;
+const hasHeader = (soughtHeader, headers) => {
+ soughtHeader = soughtHeader.toLowerCase();
+ for (const headerName of Object.keys(headers)) {
+ if (soughtHeader === headerName.toLowerCase()) {
+ return true;
+ }
+ }
+ return false;
+};
+exports.hasHeader = hasHeader;
+const getHeaderValue = (soughtHeader, headers) => {
+ soughtHeader = soughtHeader.toLowerCase();
+ for (const headerName of Object.keys(headers)) {
+ if (soughtHeader === headerName.toLowerCase()) {
+ return headers[headerName];
+ }
+ }
+ return undefined;
+};
+exports.getHeaderValue = getHeaderValue;
+const deleteHeader = (soughtHeader, headers) => {
+ soughtHeader = soughtHeader.toLowerCase();
+ for (const headerName of Object.keys(headers)) {
+ if (soughtHeader === headerName.toLowerCase()) {
+ delete headers[headerName];
+ }
+ }
+};
+exports.deleteHeader = deleteHeader;
+
+
+/***/ }),
+
+/***/ 11528:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.prepareRequest = exports.moveHeadersToQuery = exports.getPayloadHash = exports.getCanonicalQuery = exports.getCanonicalHeaders = void 0;
+const tslib_1 = __nccwpck_require__(4351);
+tslib_1.__exportStar(__nccwpck_require__(39733), exports);
+var getCanonicalHeaders_1 = __nccwpck_require__(51393);
+Object.defineProperty(exports, "getCanonicalHeaders", ({ enumerable: true, get: function () { return getCanonicalHeaders_1.getCanonicalHeaders; } }));
+var getCanonicalQuery_1 = __nccwpck_require__(33243);
+Object.defineProperty(exports, "getCanonicalQuery", ({ enumerable: true, get: function () { return getCanonicalQuery_1.getCanonicalQuery; } }));
+var getPayloadHash_1 = __nccwpck_require__(48545);
+Object.defineProperty(exports, "getPayloadHash", ({ enumerable: true, get: function () { return getPayloadHash_1.getPayloadHash; } }));
+var moveHeadersToQuery_1 = __nccwpck_require__(49828);
+Object.defineProperty(exports, "moveHeadersToQuery", ({ enumerable: true, get: function () { return moveHeadersToQuery_1.moveHeadersToQuery; } }));
+var prepareRequest_1 = __nccwpck_require__(60075);
+Object.defineProperty(exports, "prepareRequest", ({ enumerable: true, get: function () { return prepareRequest_1.prepareRequest; } }));
+tslib_1.__exportStar(__nccwpck_require__(19623), exports);
+
+
+/***/ }),
+
+/***/ 49828:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.moveHeadersToQuery = void 0;
+const cloneRequest_1 = __nccwpck_require__(69098);
+const moveHeadersToQuery = (request, options = {}) => {
+ var _a;
+ const { headers, query = {} } = typeof request.clone === "function" ? request.clone() : (0, cloneRequest_1.cloneRequest)(request);
+ for (const name of Object.keys(headers)) {
+ const lname = name.toLowerCase();
+ if (lname.slice(0, 6) === "x-amz-" && !((_a = options.unhoistableHeaders) === null || _a === void 0 ? void 0 : _a.has(lname))) {
+ query[name] = headers[name];
+ delete headers[name];
+ }
+ }
+ return {
+ ...request,
+ headers,
+ query,
+ };
+};
+exports.moveHeadersToQuery = moveHeadersToQuery;
+
+
+/***/ }),
+
+/***/ 60075:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.prepareRequest = void 0;
+const cloneRequest_1 = __nccwpck_require__(69098);
+const constants_1 = __nccwpck_require__(48644);
+const prepareRequest = (request) => {
+ request = typeof request.clone === "function" ? request.clone() : (0, cloneRequest_1.cloneRequest)(request);
+ for (const headerName of Object.keys(request.headers)) {
+ if (constants_1.GENERATED_HEADERS.indexOf(headerName.toLowerCase()) > -1) {
+ delete request.headers[headerName];
+ }
+ }
+ return request;
+};
+exports.prepareRequest = prepareRequest;
+
+
+/***/ }),
+
+/***/ 39299:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.toDate = exports.iso8601 = void 0;
+const iso8601 = (time) => (0, exports.toDate)(time)
+ .toISOString()
+ .replace(/\.\d{3}Z$/, "Z");
+exports.iso8601 = iso8601;
+const toDate = (time) => {
+ if (typeof time === "number") {
+ return new Date(time * 1000);
+ }
+ if (typeof time === "string") {
+ if (Number(time)) {
+ return new Date(Number(time) * 1000);
+ }
+ return new Date(time);
+ }
+ return time;
+};
+exports.toDate = toDate;
+
+
+/***/ }),
+
+/***/ 70438:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.NoOpLogger = void 0;
+class NoOpLogger {
+ trace() { }
+ debug() { }
+ info() { }
+ warn() { }
+ error() { }
+}
+exports.NoOpLogger = NoOpLogger;
+
+
+/***/ }),
+
+/***/ 61600:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.Client = void 0;
+const middleware_stack_1 = __nccwpck_require__(97911);
+class Client {
+ constructor(config) {
+ this.middlewareStack = (0, middleware_stack_1.constructStack)();
+ this.config = config;
+ }
+ send(command, optionsOrCb, cb) {
+ const options = typeof optionsOrCb !== "function" ? optionsOrCb : undefined;
+ const callback = typeof optionsOrCb === "function" ? optionsOrCb : cb;
+ const handler = command.resolveMiddleware(this.middlewareStack, this.config, options);
+ if (callback) {
+ handler(command)
+ .then((result) => callback(null, result.output), (err) => callback(err))
+ .catch(() => { });
+ }
+ else {
+ return handler(command).then((result) => result.output);
+ }
+ }
+ destroy() {
+ if (this.config.requestHandler.destroy)
+ this.config.requestHandler.destroy();
+ }
+}
+exports.Client = Client;
+
+
+/***/ }),
+
+/***/ 32813:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.collectBody = void 0;
+const util_stream_1 = __nccwpck_require__(96607);
+const collectBody = async (streamBody = new Uint8Array(), context) => {
+ if (streamBody instanceof Uint8Array) {
+ return util_stream_1.Uint8ArrayBlobAdapter.mutate(streamBody);
+ }
+ if (!streamBody) {
+ return util_stream_1.Uint8ArrayBlobAdapter.mutate(new Uint8Array());
+ }
+ const fromContext = context.streamCollector(streamBody);
+ return util_stream_1.Uint8ArrayBlobAdapter.mutate(await fromContext);
+};
+exports.collectBody = collectBody;
+
+
+/***/ }),
+
+/***/ 75414:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.Command = void 0;
+const middleware_stack_1 = __nccwpck_require__(97911);
+class Command {
+ constructor() {
+ this.middlewareStack = (0, middleware_stack_1.constructStack)();
+ }
+}
+exports.Command = Command;
+
+
+/***/ }),
+
+/***/ 92541:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.SENSITIVE_STRING = void 0;
+exports.SENSITIVE_STRING = "***SensitiveInformation***";
+
+
+/***/ }),
+
+/***/ 56929:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.createAggregatedClient = void 0;
+const createAggregatedClient = (commands, Client) => {
+ for (const command of Object.keys(commands)) {
+ const CommandCtor = commands[command];
+ const methodImpl = async function (args, optionsOrCb, cb) {
+ const command = new CommandCtor(args);
+ if (typeof optionsOrCb === "function") {
+ this.send(command, optionsOrCb);
+ }
+ else if (typeof cb === "function") {
+ if (typeof optionsOrCb !== "object")
+ throw new Error(`Expected http options but got ${typeof optionsOrCb}`);
+ this.send(command, optionsOrCb || {}, cb);
+ }
+ else {
+ return this.send(command, optionsOrCb);
+ }
+ };
+ const methodName = (command[0].toLowerCase() + command.slice(1)).replace(/Command$/, "");
+ Client.prototype[methodName] = methodImpl;
+ }
+};
+exports.createAggregatedClient = createAggregatedClient;
+
+
+/***/ }),
+
+/***/ 21737:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.parseEpochTimestamp = exports.parseRfc7231DateTime = exports.parseRfc3339DateTimeWithOffset = exports.parseRfc3339DateTime = exports.dateToUtcString = void 0;
+const parse_utils_1 = __nccwpck_require__(74857);
+const DAYS = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];
+const MONTHS = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
+function dateToUtcString(date) {
+ const year = date.getUTCFullYear();
+ const month = date.getUTCMonth();
+ const dayOfWeek = date.getUTCDay();
+ const dayOfMonthInt = date.getUTCDate();
+ const hoursInt = date.getUTCHours();
+ const minutesInt = date.getUTCMinutes();
+ const secondsInt = date.getUTCSeconds();
+ const dayOfMonthString = dayOfMonthInt < 10 ? `0${dayOfMonthInt}` : `${dayOfMonthInt}`;
+ const hoursString = hoursInt < 10 ? `0${hoursInt}` : `${hoursInt}`;
+ const minutesString = minutesInt < 10 ? `0${minutesInt}` : `${minutesInt}`;
+ const secondsString = secondsInt < 10 ? `0${secondsInt}` : `${secondsInt}`;
+ return `${DAYS[dayOfWeek]}, ${dayOfMonthString} ${MONTHS[month]} ${year} ${hoursString}:${minutesString}:${secondsString} GMT`;
+}
+exports.dateToUtcString = dateToUtcString;
+const RFC3339 = new RegExp(/^(\d{4})-(\d{2})-(\d{2})[tT](\d{2}):(\d{2}):(\d{2})(?:\.(\d+))?[zZ]$/);
+const parseRfc3339DateTime = (value) => {
+ if (value === null || value === undefined) {
+ return undefined;
+ }
+ if (typeof value !== "string") {
+ throw new TypeError("RFC-3339 date-times must be expressed as strings");
+ }
+ const match = RFC3339.exec(value);
+ if (!match) {
+ throw new TypeError("Invalid RFC-3339 date-time value");
+ }
+ const [_, yearStr, monthStr, dayStr, hours, minutes, seconds, fractionalMilliseconds] = match;
+ const year = (0, parse_utils_1.strictParseShort)(stripLeadingZeroes(yearStr));
+ const month = parseDateValue(monthStr, "month", 1, 12);
+ const day = parseDateValue(dayStr, "day", 1, 31);
+ return buildDate(year, month, day, { hours, minutes, seconds, fractionalMilliseconds });
+};
+exports.parseRfc3339DateTime = parseRfc3339DateTime;
+const RFC3339_WITH_OFFSET = new RegExp(/^(\d{4})-(\d{2})-(\d{2})[tT](\d{2}):(\d{2}):(\d{2})(?:\.(\d+))?(([-+]\d{2}\:\d{2})|[zZ])$/);
+const parseRfc3339DateTimeWithOffset = (value) => {
+ if (value === null || value === undefined) {
+ return undefined;
+ }
+ if (typeof value !== "string") {
+ throw new TypeError("RFC-3339 date-times must be expressed as strings");
+ }
+ const match = RFC3339_WITH_OFFSET.exec(value);
+ if (!match) {
+ throw new TypeError("Invalid RFC-3339 date-time value");
+ }
+ const [_, yearStr, monthStr, dayStr, hours, minutes, seconds, fractionalMilliseconds, offsetStr] = match;
+ const year = (0, parse_utils_1.strictParseShort)(stripLeadingZeroes(yearStr));
+ const month = parseDateValue(monthStr, "month", 1, 12);
+ const day = parseDateValue(dayStr, "day", 1, 31);
+ const date = buildDate(year, month, day, { hours, minutes, seconds, fractionalMilliseconds });
+ if (offsetStr.toUpperCase() != "Z") {
+ date.setTime(date.getTime() - parseOffsetToMilliseconds(offsetStr));
+ }
+ return date;
+};
+exports.parseRfc3339DateTimeWithOffset = parseRfc3339DateTimeWithOffset;
+const IMF_FIXDATE = new RegExp(/^(?:Mon|Tue|Wed|Thu|Fri|Sat|Sun), (\d{2}) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) (\d{4}) (\d{1,2}):(\d{2}):(\d{2})(?:\.(\d+))? GMT$/);
+const RFC_850_DATE = new RegExp(/^(?:Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday), (\d{2})-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-(\d{2}) (\d{1,2}):(\d{2}):(\d{2})(?:\.(\d+))? GMT$/);
+const ASC_TIME = new RegExp(/^(?:Mon|Tue|Wed|Thu|Fri|Sat|Sun) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) ( [1-9]|\d{2}) (\d{1,2}):(\d{2}):(\d{2})(?:\.(\d+))? (\d{4})$/);
+const parseRfc7231DateTime = (value) => {
+ if (value === null || value === undefined) {
+ return undefined;
+ }
+ if (typeof value !== "string") {
+ throw new TypeError("RFC-7231 date-times must be expressed as strings");
+ }
+ let match = IMF_FIXDATE.exec(value);
+ if (match) {
+ const [_, dayStr, monthStr, yearStr, hours, minutes, seconds, fractionalMilliseconds] = match;
+ return buildDate((0, parse_utils_1.strictParseShort)(stripLeadingZeroes(yearStr)), parseMonthByShortName(monthStr), parseDateValue(dayStr, "day", 1, 31), { hours, minutes, seconds, fractionalMilliseconds });
+ }
+ match = RFC_850_DATE.exec(value);
+ if (match) {
+ const [_, dayStr, monthStr, yearStr, hours, minutes, seconds, fractionalMilliseconds] = match;
+ return adjustRfc850Year(buildDate(parseTwoDigitYear(yearStr), parseMonthByShortName(monthStr), parseDateValue(dayStr, "day", 1, 31), {
+ hours,
+ minutes,
+ seconds,
+ fractionalMilliseconds,
+ }));
+ }
+ match = ASC_TIME.exec(value);
+ if (match) {
+ const [_, monthStr, dayStr, hours, minutes, seconds, fractionalMilliseconds, yearStr] = match;
+ return buildDate((0, parse_utils_1.strictParseShort)(stripLeadingZeroes(yearStr)), parseMonthByShortName(monthStr), parseDateValue(dayStr.trimLeft(), "day", 1, 31), { hours, minutes, seconds, fractionalMilliseconds });
+ }
+ throw new TypeError("Invalid RFC-7231 date-time value");
+};
+exports.parseRfc7231DateTime = parseRfc7231DateTime;
+const parseEpochTimestamp = (value) => {
+ if (value === null || value === undefined) {
+ return undefined;
+ }
+ let valueAsDouble;
+ if (typeof value === "number") {
+ valueAsDouble = value;
+ }
+ else if (typeof value === "string") {
+ valueAsDouble = (0, parse_utils_1.strictParseDouble)(value);
+ }
+ else {
+ throw new TypeError("Epoch timestamps must be expressed as floating point numbers or their string representation");
+ }
+ if (Number.isNaN(valueAsDouble) || valueAsDouble === Infinity || valueAsDouble === -Infinity) {
+ throw new TypeError("Epoch timestamps must be valid, non-Infinite, non-NaN numerics");
+ }
+ return new Date(Math.round(valueAsDouble * 1000));
+};
+exports.parseEpochTimestamp = parseEpochTimestamp;
+const buildDate = (year, month, day, time) => {
+ const adjustedMonth = month - 1;
+ validateDayOfMonth(year, adjustedMonth, day);
+ return new Date(Date.UTC(year, adjustedMonth, day, parseDateValue(time.hours, "hour", 0, 23), parseDateValue(time.minutes, "minute", 0, 59), parseDateValue(time.seconds, "seconds", 0, 60), parseMilliseconds(time.fractionalMilliseconds)));
+};
+const parseTwoDigitYear = (value) => {
+ const thisYear = new Date().getUTCFullYear();
+ const valueInThisCentury = Math.floor(thisYear / 100) * 100 + (0, parse_utils_1.strictParseShort)(stripLeadingZeroes(value));
+ if (valueInThisCentury < thisYear) {
+ return valueInThisCentury + 100;
+ }
+ return valueInThisCentury;
+};
+const FIFTY_YEARS_IN_MILLIS = 50 * 365 * 24 * 60 * 60 * 1000;
+const adjustRfc850Year = (input) => {
+ if (input.getTime() - new Date().getTime() > FIFTY_YEARS_IN_MILLIS) {
+ return new Date(Date.UTC(input.getUTCFullYear() - 100, input.getUTCMonth(), input.getUTCDate(), input.getUTCHours(), input.getUTCMinutes(), input.getUTCSeconds(), input.getUTCMilliseconds()));
+ }
+ return input;
+};
+const parseMonthByShortName = (value) => {
+ const monthIdx = MONTHS.indexOf(value);
+ if (monthIdx < 0) {
+ throw new TypeError(`Invalid month: ${value}`);
+ }
+ return monthIdx + 1;
+};
+const DAYS_IN_MONTH = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
+const validateDayOfMonth = (year, month, day) => {
+ let maxDays = DAYS_IN_MONTH[month];
+ if (month === 1 && isLeapYear(year)) {
+ maxDays = 29;
+ }
+ if (day > maxDays) {
+ throw new TypeError(`Invalid day for ${MONTHS[month]} in ${year}: ${day}`);
+ }
+};
+const isLeapYear = (year) => {
+ return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);
+};
+const parseDateValue = (value, type, lower, upper) => {
+ const dateVal = (0, parse_utils_1.strictParseByte)(stripLeadingZeroes(value));
+ if (dateVal < lower || dateVal > upper) {
+ throw new TypeError(`${type} must be between ${lower} and ${upper}, inclusive`);
+ }
+ return dateVal;
+};
+const parseMilliseconds = (value) => {
+ if (value === null || value === undefined) {
+ return 0;
+ }
+ return (0, parse_utils_1.strictParseFloat32)("0." + value) * 1000;
+};
+const parseOffsetToMilliseconds = (value) => {
+ const directionStr = value[0];
+ let direction = 1;
+ if (directionStr == "+") {
+ direction = 1;
+ }
+ else if (directionStr == "-") {
+ direction = -1;
+ }
+ else {
+ throw new TypeError(`Offset direction, ${directionStr}, must be "+" or "-"`);
+ }
+ const hour = Number(value.substring(1, 3));
+ const minute = Number(value.substring(4, 6));
+ return direction * (hour * 60 + minute) * 60 * 1000;
+};
+const stripLeadingZeroes = (value) => {
+ let idx = 0;
+ while (idx < value.length - 1 && value.charAt(idx) === "0") {
+ idx++;
+ }
+ if (idx === 0) {
+ return value;
+ }
+ return value.slice(idx);
+};
+
+
+/***/ }),
+
+/***/ 9681:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.withBaseException = exports.throwDefaultError = void 0;
+const exceptions_1 = __nccwpck_require__(88074);
+const throwDefaultError = ({ output, parsedBody, exceptionCtor, errorCode }) => {
+ const $metadata = deserializeMetadata(output);
+ const statusCode = $metadata.httpStatusCode ? $metadata.httpStatusCode + "" : undefined;
+ const response = new exceptionCtor({
+ name: (parsedBody === null || parsedBody === void 0 ? void 0 : parsedBody.code) || (parsedBody === null || parsedBody === void 0 ? void 0 : parsedBody.Code) || errorCode || statusCode || "UnknownError",
+ $fault: "client",
+ $metadata,
+ });
+ throw (0, exceptions_1.decorateServiceException)(response, parsedBody);
+};
+exports.throwDefaultError = throwDefaultError;
+const withBaseException = (ExceptionCtor) => {
+ return ({ output, parsedBody, errorCode }) => {
+ (0, exports.throwDefaultError)({ output, parsedBody, exceptionCtor: ExceptionCtor, errorCode });
+ };
+};
+exports.withBaseException = withBaseException;
+const deserializeMetadata = (output) => {
+ var _a, _b;
+ return ({
+ httpStatusCode: output.statusCode,
+ requestId: (_b = (_a = output.headers["x-amzn-requestid"]) !== null && _a !== void 0 ? _a : output.headers["x-amzn-request-id"]) !== null && _b !== void 0 ? _b : output.headers["x-amz-request-id"],
+ extendedRequestId: output.headers["x-amz-id-2"],
+ cfId: output.headers["x-amz-cf-id"],
+ });
+};
+
+
+/***/ }),
+
+/***/ 11163:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.loadConfigsForDefaultMode = void 0;
+const loadConfigsForDefaultMode = (mode) => {
+ switch (mode) {
+ case "standard":
+ return {
+ retryMode: "standard",
+ connectionTimeout: 3100,
+ };
+ case "in-region":
+ return {
+ retryMode: "standard",
+ connectionTimeout: 1100,
+ };
+ case "cross-region":
+ return {
+ retryMode: "standard",
+ connectionTimeout: 3100,
+ };
+ case "mobile":
+ return {
+ retryMode: "standard",
+ connectionTimeout: 30000,
+ };
+ default:
+ return {};
+ }
+};
+exports.loadConfigsForDefaultMode = loadConfigsForDefaultMode;
+
+
+/***/ }),
+
+/***/ 91809:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.emitWarningIfUnsupportedVersion = void 0;
+let warningEmitted = false;
+const emitWarningIfUnsupportedVersion = (version) => {
+ if (version && !warningEmitted && parseInt(version.substring(1, version.indexOf("."))) < 14) {
+ warningEmitted = true;
+ }
+};
+exports.emitWarningIfUnsupportedVersion = emitWarningIfUnsupportedVersion;
+
+
+/***/ }),
+
+/***/ 88074:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.decorateServiceException = exports.ServiceException = void 0;
+class ServiceException extends Error {
+ constructor(options) {
+ super(options.message);
+ Object.setPrototypeOf(this, ServiceException.prototype);
+ this.name = options.name;
+ this.$fault = options.$fault;
+ this.$metadata = options.$metadata;
+ }
+}
+exports.ServiceException = ServiceException;
+const decorateServiceException = (exception, additions = {}) => {
+ Object.entries(additions)
+ .filter(([, v]) => v !== undefined)
+ .forEach(([k, v]) => {
+ if (exception[k] == undefined || exception[k] === "") {
+ exception[k] = v;
+ }
+ });
+ const message = exception.message || exception.Message || "UnknownError";
+ exception.message = message;
+ delete exception.Message;
+ return exception;
+};
+exports.decorateServiceException = decorateServiceException;
+
+
+/***/ }),
+
+/***/ 76016:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.extendedEncodeURIComponent = void 0;
+function extendedEncodeURIComponent(str) {
+ return encodeURIComponent(str).replace(/[!'()*]/g, function (c) {
+ return "%" + c.charCodeAt(0).toString(16).toUpperCase();
+ });
+}
+exports.extendedEncodeURIComponent = extendedEncodeURIComponent;
+
+
+/***/ }),
+
+/***/ 30941:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.resolveChecksumRuntimeConfig = exports.getChecksumConfiguration = exports.AlgorithmId = void 0;
+const types_1 = __nccwpck_require__(55756);
+Object.defineProperty(exports, "AlgorithmId", ({ enumerable: true, get: function () { return types_1.AlgorithmId; } }));
+const getChecksumConfiguration = (runtimeConfig) => {
+ const checksumAlgorithms = [];
+ for (const id in types_1.AlgorithmId) {
+ const algorithmId = types_1.AlgorithmId[id];
+ if (runtimeConfig[algorithmId] === undefined) {
+ continue;
+ }
+ checksumAlgorithms.push({
+ algorithmId: () => algorithmId,
+ checksumConstructor: () => runtimeConfig[algorithmId],
+ });
+ }
+ return {
+ _checksumAlgorithms: checksumAlgorithms,
+ addChecksumAlgorithm(algo) {
+ this._checksumAlgorithms.push(algo);
+ },
+ checksumAlgorithms() {
+ return this._checksumAlgorithms;
+ },
+ };
+};
+exports.getChecksumConfiguration = getChecksumConfiguration;
+const resolveChecksumRuntimeConfig = (clientConfig) => {
+ const runtimeConfig = {};
+ clientConfig.checksumAlgorithms().forEach((checksumAlgorithm) => {
+ runtimeConfig[checksumAlgorithm.algorithmId()] = checksumAlgorithm.checksumConstructor();
+ });
+ return runtimeConfig;
+};
+exports.resolveChecksumRuntimeConfig = resolveChecksumRuntimeConfig;
+
+
+/***/ }),
+
+/***/ 78643:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.resolveDefaultRuntimeConfig = exports.getDefaultClientConfiguration = exports.getDefaultExtensionConfiguration = void 0;
+const checksum_1 = __nccwpck_require__(30941);
+const retry_1 = __nccwpck_require__(67367);
+const getDefaultExtensionConfiguration = (runtimeConfig) => {
+ return {
+ ...(0, checksum_1.getChecksumConfiguration)(runtimeConfig),
+ ...(0, retry_1.getRetryConfiguration)(runtimeConfig),
+ };
+};
+exports.getDefaultExtensionConfiguration = getDefaultExtensionConfiguration;
+exports.getDefaultClientConfiguration = exports.getDefaultExtensionConfiguration;
+const resolveDefaultRuntimeConfig = (config) => {
+ return {
+ ...(0, checksum_1.resolveChecksumRuntimeConfig)(config),
+ ...(0, retry_1.resolveRetryRuntimeConfig)(config),
+ };
+};
+exports.resolveDefaultRuntimeConfig = resolveDefaultRuntimeConfig;
+
+
+/***/ }),
+
+/***/ 1822:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+const tslib_1 = __nccwpck_require__(4351);
+tslib_1.__exportStar(__nccwpck_require__(78643), exports);
+
+
+/***/ }),
+
+/***/ 67367:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.resolveRetryRuntimeConfig = exports.getRetryConfiguration = void 0;
+const getRetryConfiguration = (runtimeConfig) => {
+ let _retryStrategy = runtimeConfig.retryStrategy;
+ return {
+ setRetryStrategy(retryStrategy) {
+ _retryStrategy = retryStrategy;
+ },
+ retryStrategy() {
+ return _retryStrategy;
+ },
+ };
+};
+exports.getRetryConfiguration = getRetryConfiguration;
+const resolveRetryRuntimeConfig = (retryStrategyConfiguration) => {
+ const runtimeConfig = {};
+ runtimeConfig.retryStrategy = retryStrategyConfiguration.retryStrategy();
+ return runtimeConfig;
+};
+exports.resolveRetryRuntimeConfig = resolveRetryRuntimeConfig;
+
+
+/***/ }),
+
+/***/ 42638:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.getArrayIfSingleItem = void 0;
+const getArrayIfSingleItem = (mayBeArray) => Array.isArray(mayBeArray) ? mayBeArray : [mayBeArray];
+exports.getArrayIfSingleItem = getArrayIfSingleItem;
+
+
+/***/ }),
+
+/***/ 92188:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.getValueFromTextNode = void 0;
+const getValueFromTextNode = (obj) => {
+ const textNodeName = "#text";
+ for (const key in obj) {
+ if (obj.hasOwnProperty(key) && obj[key][textNodeName] !== undefined) {
+ obj[key] = obj[key][textNodeName];
+ }
+ else if (typeof obj[key] === "object" && obj[key] !== null) {
+ obj[key] = (0, exports.getValueFromTextNode)(obj[key]);
+ }
+ }
+ return obj;
+};
+exports.getValueFromTextNode = getValueFromTextNode;
+
+
+/***/ }),
+
+/***/ 63570:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+const tslib_1 = __nccwpck_require__(4351);
+tslib_1.__exportStar(__nccwpck_require__(70438), exports);
+tslib_1.__exportStar(__nccwpck_require__(61600), exports);
+tslib_1.__exportStar(__nccwpck_require__(32813), exports);
+tslib_1.__exportStar(__nccwpck_require__(75414), exports);
+tslib_1.__exportStar(__nccwpck_require__(92541), exports);
+tslib_1.__exportStar(__nccwpck_require__(56929), exports);
+tslib_1.__exportStar(__nccwpck_require__(21737), exports);
+tslib_1.__exportStar(__nccwpck_require__(9681), exports);
+tslib_1.__exportStar(__nccwpck_require__(11163), exports);
+tslib_1.__exportStar(__nccwpck_require__(91809), exports);
+tslib_1.__exportStar(__nccwpck_require__(1822), exports);
+tslib_1.__exportStar(__nccwpck_require__(88074), exports);
+tslib_1.__exportStar(__nccwpck_require__(76016), exports);
+tslib_1.__exportStar(__nccwpck_require__(42638), exports);
+tslib_1.__exportStar(__nccwpck_require__(92188), exports);
+tslib_1.__exportStar(__nccwpck_require__(32964), exports);
+tslib_1.__exportStar(__nccwpck_require__(83495), exports);
+tslib_1.__exportStar(__nccwpck_require__(74857), exports);
+tslib_1.__exportStar(__nccwpck_require__(15342), exports);
+tslib_1.__exportStar(__nccwpck_require__(53456), exports);
+tslib_1.__exportStar(__nccwpck_require__(1752), exports);
+tslib_1.__exportStar(__nccwpck_require__(92480), exports);
+
+
+/***/ }),
+
+/***/ 32964:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.LazyJsonString = exports.StringWrapper = void 0;
+const StringWrapper = function () {
+ const Class = Object.getPrototypeOf(this).constructor;
+ const Constructor = Function.bind.apply(String, [null, ...arguments]);
+ const instance = new Constructor();
+ Object.setPrototypeOf(instance, Class.prototype);
+ return instance;
+};
+exports.StringWrapper = StringWrapper;
+exports.StringWrapper.prototype = Object.create(String.prototype, {
+ constructor: {
+ value: exports.StringWrapper,
+ enumerable: false,
+ writable: true,
+ configurable: true,
+ },
+});
+Object.setPrototypeOf(exports.StringWrapper, String);
+class LazyJsonString extends exports.StringWrapper {
+ deserializeJSON() {
+ return JSON.parse(super.toString());
+ }
+ toJSON() {
+ return super.toString();
+ }
+ static fromObject(object) {
+ if (object instanceof LazyJsonString) {
+ return object;
+ }
+ else if (object instanceof String || typeof object === "string") {
+ return new LazyJsonString(object);
+ }
+ return new LazyJsonString(JSON.stringify(object));
+ }
+}
+exports.LazyJsonString = LazyJsonString;
+
+
+/***/ }),
+
+/***/ 83495:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.take = exports.convertMap = exports.map = void 0;
+function map(arg0, arg1, arg2) {
+ let target;
+ let filter;
+ let instructions;
+ if (typeof arg1 === "undefined" && typeof arg2 === "undefined") {
+ target = {};
+ instructions = arg0;
+ }
+ else {
+ target = arg0;
+ if (typeof arg1 === "function") {
+ filter = arg1;
+ instructions = arg2;
+ return mapWithFilter(target, filter, instructions);
+ }
+ else {
+ instructions = arg1;
+ }
+ }
+ for (const key of Object.keys(instructions)) {
+ if (!Array.isArray(instructions[key])) {
+ target[key] = instructions[key];
+ continue;
+ }
+ applyInstruction(target, null, instructions, key);
+ }
+ return target;
+}
+exports.map = map;
+const convertMap = (target) => {
+ const output = {};
+ for (const [k, v] of Object.entries(target || {})) {
+ output[k] = [, v];
+ }
+ return output;
+};
+exports.convertMap = convertMap;
+const take = (source, instructions) => {
+ const out = {};
+ for (const key in instructions) {
+ applyInstruction(out, source, instructions, key);
+ }
+ return out;
+};
+exports.take = take;
+const mapWithFilter = (target, filter, instructions) => {
+ return map(target, Object.entries(instructions).reduce((_instructions, [key, value]) => {
+ if (Array.isArray(value)) {
+ _instructions[key] = value;
+ }
+ else {
+ if (typeof value === "function") {
+ _instructions[key] = [filter, value()];
+ }
+ else {
+ _instructions[key] = [filter, value];
+ }
+ }
+ return _instructions;
+ }, {}));
+};
+const applyInstruction = (target, source, instructions, targetKey) => {
+ if (source !== null) {
+ let instruction = instructions[targetKey];
+ if (typeof instruction === "function") {
+ instruction = [, instruction];
+ }
+ const [filter = nonNullish, valueFn = pass, sourceKey = targetKey] = instruction;
+ if ((typeof filter === "function" && filter(source[sourceKey])) || (typeof filter !== "function" && !!filter)) {
+ target[targetKey] = valueFn(source[sourceKey]);
+ }
+ return;
+ }
+ let [filter, value] = instructions[targetKey];
+ if (typeof value === "function") {
+ let _value;
+ const defaultFilterPassed = filter === undefined && (_value = value()) != null;
+ const customFilterPassed = (typeof filter === "function" && !!filter(void 0)) || (typeof filter !== "function" && !!filter);
+ if (defaultFilterPassed) {
+ target[targetKey] = _value;
+ }
+ else if (customFilterPassed) {
+ target[targetKey] = value();
+ }
+ }
+ else {
+ const defaultFilterPassed = filter === undefined && value != null;
+ const customFilterPassed = (typeof filter === "function" && !!filter(value)) || (typeof filter !== "function" && !!filter);
+ if (defaultFilterPassed || customFilterPassed) {
+ target[targetKey] = value;
+ }
+ }
+};
+const nonNullish = (_) => _ != null;
+const pass = (_) => _;
+
+
+/***/ }),
+
+/***/ 74857:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.logger = exports.strictParseByte = exports.strictParseShort = exports.strictParseInt32 = exports.strictParseInt = exports.strictParseLong = exports.limitedParseFloat32 = exports.limitedParseFloat = exports.handleFloat = exports.limitedParseDouble = exports.strictParseFloat32 = exports.strictParseFloat = exports.strictParseDouble = exports.expectUnion = exports.expectString = exports.expectObject = exports.expectNonNull = exports.expectByte = exports.expectShort = exports.expectInt32 = exports.expectInt = exports.expectLong = exports.expectFloat32 = exports.expectNumber = exports.expectBoolean = exports.parseBoolean = void 0;
+const parseBoolean = (value) => {
+ switch (value) {
+ case "true":
+ return true;
+ case "false":
+ return false;
+ default:
+ throw new Error(`Unable to parse boolean value "${value}"`);
+ }
+};
+exports.parseBoolean = parseBoolean;
+const expectBoolean = (value) => {
+ if (value === null || value === undefined) {
+ return undefined;
+ }
+ if (typeof value === "number") {
+ if (value === 0 || value === 1) {
+ exports.logger.warn(stackTraceWarning(`Expected boolean, got ${typeof value}: ${value}`));
+ }
+ if (value === 0) {
+ return false;
+ }
+ if (value === 1) {
+ return true;
+ }
+ }
+ if (typeof value === "string") {
+ const lower = value.toLowerCase();
+ if (lower === "false" || lower === "true") {
+ exports.logger.warn(stackTraceWarning(`Expected boolean, got ${typeof value}: ${value}`));
+ }
+ if (lower === "false") {
+ return false;
+ }
+ if (lower === "true") {
+ return true;
+ }
+ }
+ if (typeof value === "boolean") {
+ return value;
+ }
+ throw new TypeError(`Expected boolean, got ${typeof value}: ${value}`);
+};
+exports.expectBoolean = expectBoolean;
+const expectNumber = (value) => {
+ if (value === null || value === undefined) {
+ return undefined;
+ }
+ if (typeof value === "string") {
+ const parsed = parseFloat(value);
+ if (!Number.isNaN(parsed)) {
+ if (String(parsed) !== String(value)) {
+ exports.logger.warn(stackTraceWarning(`Expected number but observed string: ${value}`));
+ }
+ return parsed;
+ }
+ }
+ if (typeof value === "number") {
+ return value;
+ }
+ throw new TypeError(`Expected number, got ${typeof value}: ${value}`);
+};
+exports.expectNumber = expectNumber;
+const MAX_FLOAT = Math.ceil(2 ** 127 * (2 - 2 ** -23));
+const expectFloat32 = (value) => {
+ const expected = (0, exports.expectNumber)(value);
+ if (expected !== undefined && !Number.isNaN(expected) && expected !== Infinity && expected !== -Infinity) {
+ if (Math.abs(expected) > MAX_FLOAT) {
+ throw new TypeError(`Expected 32-bit float, got ${value}`);
+ }
+ }
+ return expected;
+};
+exports.expectFloat32 = expectFloat32;
+const expectLong = (value) => {
+ if (value === null || value === undefined) {
+ return undefined;
+ }
+ if (Number.isInteger(value) && !Number.isNaN(value)) {
+ return value;
+ }
+ throw new TypeError(`Expected integer, got ${typeof value}: ${value}`);
+};
+exports.expectLong = expectLong;
+exports.expectInt = exports.expectLong;
+const expectInt32 = (value) => expectSizedInt(value, 32);
+exports.expectInt32 = expectInt32;
+const expectShort = (value) => expectSizedInt(value, 16);
+exports.expectShort = expectShort;
+const expectByte = (value) => expectSizedInt(value, 8);
+exports.expectByte = expectByte;
+const expectSizedInt = (value, size) => {
+ const expected = (0, exports.expectLong)(value);
+ if (expected !== undefined && castInt(expected, size) !== expected) {
+ throw new TypeError(`Expected ${size}-bit integer, got ${value}`);
+ }
+ return expected;
+};
+const castInt = (value, size) => {
+ switch (size) {
+ case 32:
+ return Int32Array.of(value)[0];
+ case 16:
+ return Int16Array.of(value)[0];
+ case 8:
+ return Int8Array.of(value)[0];
+ }
+};
+const expectNonNull = (value, location) => {
+ if (value === null || value === undefined) {
+ if (location) {
+ throw new TypeError(`Expected a non-null value for ${location}`);
+ }
+ throw new TypeError("Expected a non-null value");
+ }
+ return value;
+};
+exports.expectNonNull = expectNonNull;
+const expectObject = (value) => {
+ if (value === null || value === undefined) {
+ return undefined;
+ }
+ if (typeof value === "object" && !Array.isArray(value)) {
+ return value;
+ }
+ const receivedType = Array.isArray(value) ? "array" : typeof value;
+ throw new TypeError(`Expected object, got ${receivedType}: ${value}`);
+};
+exports.expectObject = expectObject;
+const expectString = (value) => {
+ if (value === null || value === undefined) {
+ return undefined;
+ }
+ if (typeof value === "string") {
+ return value;
+ }
+ if (["boolean", "number", "bigint"].includes(typeof value)) {
+ exports.logger.warn(stackTraceWarning(`Expected string, got ${typeof value}: ${value}`));
+ return String(value);
+ }
+ throw new TypeError(`Expected string, got ${typeof value}: ${value}`);
+};
+exports.expectString = expectString;
+const expectUnion = (value) => {
+ if (value === null || value === undefined) {
+ return undefined;
+ }
+ const asObject = (0, exports.expectObject)(value);
+ const setKeys = Object.entries(asObject)
+ .filter(([, v]) => v != null)
+ .map(([k]) => k);
+ if (setKeys.length === 0) {
+ throw new TypeError(`Unions must have exactly one non-null member. None were found.`);
+ }
+ if (setKeys.length > 1) {
+ throw new TypeError(`Unions must have exactly one non-null member. Keys ${setKeys} were not null.`);
+ }
+ return asObject;
+};
+exports.expectUnion = expectUnion;
+const strictParseDouble = (value) => {
+ if (typeof value == "string") {
+ return (0, exports.expectNumber)(parseNumber(value));
+ }
+ return (0, exports.expectNumber)(value);
+};
+exports.strictParseDouble = strictParseDouble;
+exports.strictParseFloat = exports.strictParseDouble;
+const strictParseFloat32 = (value) => {
+ if (typeof value == "string") {
+ return (0, exports.expectFloat32)(parseNumber(value));
+ }
+ return (0, exports.expectFloat32)(value);
+};
+exports.strictParseFloat32 = strictParseFloat32;
+const NUMBER_REGEX = /(-?(?:0|[1-9]\d*)(?:\.\d+)?(?:[eE][+-]?\d+)?)|(-?Infinity)|(NaN)/g;
+const parseNumber = (value) => {
+ const matches = value.match(NUMBER_REGEX);
+ if (matches === null || matches[0].length !== value.length) {
+ throw new TypeError(`Expected real number, got implicit NaN`);
+ }
+ return parseFloat(value);
+};
+const limitedParseDouble = (value) => {
+ if (typeof value == "string") {
+ return parseFloatString(value);
+ }
+ return (0, exports.expectNumber)(value);
+};
+exports.limitedParseDouble = limitedParseDouble;
+exports.handleFloat = exports.limitedParseDouble;
+exports.limitedParseFloat = exports.limitedParseDouble;
+const limitedParseFloat32 = (value) => {
+ if (typeof value == "string") {
+ return parseFloatString(value);
+ }
+ return (0, exports.expectFloat32)(value);
+};
+exports.limitedParseFloat32 = limitedParseFloat32;
+const parseFloatString = (value) => {
+ switch (value) {
+ case "NaN":
+ return NaN;
+ case "Infinity":
+ return Infinity;
+ case "-Infinity":
+ return -Infinity;
+ default:
+ throw new Error(`Unable to parse float value: ${value}`);
+ }
+};
+const strictParseLong = (value) => {
+ if (typeof value === "string") {
+ return (0, exports.expectLong)(parseNumber(value));
+ }
+ return (0, exports.expectLong)(value);
+};
+exports.strictParseLong = strictParseLong;
+exports.strictParseInt = exports.strictParseLong;
+const strictParseInt32 = (value) => {
+ if (typeof value === "string") {
+ return (0, exports.expectInt32)(parseNumber(value));
+ }
+ return (0, exports.expectInt32)(value);
+};
+exports.strictParseInt32 = strictParseInt32;
+const strictParseShort = (value) => {
+ if (typeof value === "string") {
+ return (0, exports.expectShort)(parseNumber(value));
+ }
+ return (0, exports.expectShort)(value);
+};
+exports.strictParseShort = strictParseShort;
+const strictParseByte = (value) => {
+ if (typeof value === "string") {
+ return (0, exports.expectByte)(parseNumber(value));
+ }
+ return (0, exports.expectByte)(value);
+};
+exports.strictParseByte = strictParseByte;
+const stackTraceWarning = (message) => {
+ return String(new TypeError(message).stack || message)
+ .split("\n")
+ .slice(0, 5)
+ .filter((s) => !s.includes("stackTraceWarning"))
+ .join("\n");
+};
+exports.logger = {
+ warn: console.warn,
+};
+
+
+/***/ }),
+
+/***/ 15342:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.resolvedPath = void 0;
+const extended_encode_uri_component_1 = __nccwpck_require__(76016);
+const resolvedPath = (resolvedPath, input, memberName, labelValueProvider, uriLabel, isGreedyLabel) => {
+ if (input != null && input[memberName] !== undefined) {
+ const labelValue = labelValueProvider();
+ if (labelValue.length <= 0) {
+ throw new Error("Empty value provided for input HTTP label: " + memberName + ".");
+ }
+ resolvedPath = resolvedPath.replace(uriLabel, isGreedyLabel
+ ? labelValue
+ .split("/")
+ .map((segment) => (0, extended_encode_uri_component_1.extendedEncodeURIComponent)(segment))
+ .join("/")
+ : (0, extended_encode_uri_component_1.extendedEncodeURIComponent)(labelValue));
+ }
+ else {
+ throw new Error("No value provided for input HTTP label: " + memberName + ".");
+ }
+ return resolvedPath;
+};
+exports.resolvedPath = resolvedPath;
+
+
+/***/ }),
+
+/***/ 53456:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.serializeFloat = void 0;
+const serializeFloat = (value) => {
+ if (value !== value) {
+ return "NaN";
+ }
+ switch (value) {
+ case Infinity:
+ return "Infinity";
+ case -Infinity:
+ return "-Infinity";
+ default:
+ return value;
+ }
+};
+exports.serializeFloat = serializeFloat;
+
+
+/***/ }),
+
+/***/ 1752:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports._json = void 0;
+const _json = (obj) => {
+ if (obj == null) {
+ return {};
+ }
+ if (Array.isArray(obj)) {
+ return obj.filter((_) => _ != null);
+ }
+ if (typeof obj === "object") {
+ const target = {};
+ for (const key of Object.keys(obj)) {
+ if (obj[key] == null) {
+ continue;
+ }
+ target[key] = (0, exports._json)(obj[key]);
+ }
+ return target;
+ }
+ return obj;
+};
+exports._json = _json;
+
+
+/***/ }),
+
+/***/ 92480:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.splitEvery = void 0;
+function splitEvery(value, delimiter, numDelimiters) {
+ if (numDelimiters <= 0 || !Number.isInteger(numDelimiters)) {
+ throw new Error("Invalid number of delimiters (" + numDelimiters + ") for splitEvery.");
+ }
+ const segments = value.split(delimiter);
+ if (numDelimiters === 1) {
+ return segments;
+ }
+ const compoundSegments = [];
+ let currentSegment = "";
+ for (let i = 0; i < segments.length; i++) {
+ if (currentSegment === "") {
+ currentSegment = segments[i];
+ }
+ else {
+ currentSegment += delimiter + segments[i];
+ }
+ if ((i + 1) % numDelimiters === 0) {
+ compoundSegments.push(currentSegment);
+ currentSegment = "";
+ }
+ }
+ if (currentSegment !== "") {
+ compoundSegments.push(currentSegment);
+ }
+ return compoundSegments;
+}
+exports.splitEvery = splitEvery;
+
+
+/***/ }),
+
+/***/ 74075:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+
+
+/***/ }),
+
+/***/ 48960:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.HttpAuthLocation = void 0;
+var HttpAuthLocation;
+(function (HttpAuthLocation) {
+ HttpAuthLocation["HEADER"] = "header";
+ HttpAuthLocation["QUERY"] = "query";
+})(HttpAuthLocation = exports.HttpAuthLocation || (exports.HttpAuthLocation = {}));
+
+
+/***/ }),
+
+/***/ 63274:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+
+
+/***/ }),
+
+/***/ 78340:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+
+
+/***/ }),
+
+/***/ 4744:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+
+
+/***/ }),
+
+/***/ 68270:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+
+
+/***/ }),
+
+/***/ 39580:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+
+
+/***/ }),
+
+/***/ 57628:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+const tslib_1 = __nccwpck_require__(4351);
+tslib_1.__exportStar(__nccwpck_require__(39580), exports);
+tslib_1.__exportStar(__nccwpck_require__(98398), exports);
+tslib_1.__exportStar(__nccwpck_require__(76522), exports);
+
+
+/***/ }),
+
+/***/ 98398:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+
+
+/***/ }),
+
+/***/ 76522:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+
+
+/***/ }),
+
+/***/ 89035:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+
+
+/***/ }),
+
+/***/ 7225:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+
+
+/***/ }),
+
+/***/ 54126:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.EndpointURLScheme = void 0;
+var EndpointURLScheme;
+(function (EndpointURLScheme) {
+ EndpointURLScheme["HTTP"] = "http";
+ EndpointURLScheme["HTTPS"] = "https";
+})(EndpointURLScheme = exports.EndpointURLScheme || (exports.EndpointURLScheme = {}));
+
+
+/***/ }),
+
+/***/ 55612:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+
+
+/***/ }),
+
+/***/ 43084:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+
+
+/***/ }),
+
+/***/ 89843:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+
+
+/***/ }),
+
+/***/ 63799:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+
+
+/***/ }),
+
+/***/ 21550:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+const tslib_1 = __nccwpck_require__(4351);
+tslib_1.__exportStar(__nccwpck_require__(55612), exports);
+tslib_1.__exportStar(__nccwpck_require__(43084), exports);
+tslib_1.__exportStar(__nccwpck_require__(89843), exports);
+tslib_1.__exportStar(__nccwpck_require__(57658), exports);
+tslib_1.__exportStar(__nccwpck_require__(63799), exports);
+
+
+/***/ }),
+
+/***/ 57658:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+
+
+/***/ }),
+
+/***/ 88508:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+
+
+/***/ }),
+
+/***/ 8947:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.resolveChecksumRuntimeConfig = exports.getChecksumConfiguration = exports.AlgorithmId = void 0;
+var AlgorithmId;
+(function (AlgorithmId) {
+ AlgorithmId["MD5"] = "md5";
+ AlgorithmId["CRC32"] = "crc32";
+ AlgorithmId["CRC32C"] = "crc32c";
+ AlgorithmId["SHA1"] = "sha1";
+ AlgorithmId["SHA256"] = "sha256";
+})(AlgorithmId = exports.AlgorithmId || (exports.AlgorithmId = {}));
+const getChecksumConfiguration = (runtimeConfig) => {
+ const checksumAlgorithms = [];
+ if (runtimeConfig.sha256 !== undefined) {
+ checksumAlgorithms.push({
+ algorithmId: () => AlgorithmId.SHA256,
+ checksumConstructor: () => runtimeConfig.sha256,
+ });
+ }
+ if (runtimeConfig.md5 != undefined) {
+ checksumAlgorithms.push({
+ algorithmId: () => AlgorithmId.MD5,
+ checksumConstructor: () => runtimeConfig.md5,
+ });
+ }
+ return {
+ _checksumAlgorithms: checksumAlgorithms,
+ addChecksumAlgorithm(algo) {
+ this._checksumAlgorithms.push(algo);
+ },
+ checksumAlgorithms() {
+ return this._checksumAlgorithms;
+ },
+ };
+};
+exports.getChecksumConfiguration = getChecksumConfiguration;
+const resolveChecksumRuntimeConfig = (clientConfig) => {
+ const runtimeConfig = {};
+ clientConfig.checksumAlgorithms().forEach((checksumAlgorithm) => {
+ runtimeConfig[checksumAlgorithm.algorithmId()] = checksumAlgorithm.checksumConstructor();
+ });
+ return runtimeConfig;
+};
+exports.resolveChecksumRuntimeConfig = resolveChecksumRuntimeConfig;
+
+
+/***/ }),
+
+/***/ 89169:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.resolveDefaultRuntimeConfig = exports.getDefaultClientConfiguration = void 0;
+const checksum_1 = __nccwpck_require__(8947);
+const getDefaultClientConfiguration = (runtimeConfig) => {
+ return {
+ ...(0, checksum_1.getChecksumConfiguration)(runtimeConfig),
+ };
+};
+exports.getDefaultClientConfiguration = getDefaultClientConfiguration;
+const resolveDefaultRuntimeConfig = (config) => {
+ return {
+ ...(0, checksum_1.resolveChecksumRuntimeConfig)(config),
+ };
+};
+exports.resolveDefaultRuntimeConfig = resolveDefaultRuntimeConfig;
+
+
+/***/ }),
+
+/***/ 32245:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+
+
+/***/ }),
+
+/***/ 47447:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.AlgorithmId = void 0;
+const tslib_1 = __nccwpck_require__(4351);
+tslib_1.__exportStar(__nccwpck_require__(89169), exports);
+tslib_1.__exportStar(__nccwpck_require__(32245), exports);
+var checksum_1 = __nccwpck_require__(8947);
+Object.defineProperty(exports, "AlgorithmId", ({ enumerable: true, get: function () { return checksum_1.AlgorithmId; } }));
+
+
+/***/ }),
+
+/***/ 18883:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.FieldPosition = void 0;
+var FieldPosition;
+(function (FieldPosition) {
+ FieldPosition[FieldPosition["HEADER"] = 0] = "HEADER";
+ FieldPosition[FieldPosition["TRAILER"] = 1] = "TRAILER";
+})(FieldPosition = exports.FieldPosition || (exports.FieldPosition = {}));
+
+
+/***/ }),
+
+/***/ 7545:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+
+
+/***/ }),
+
+/***/ 49123:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+
+
+/***/ }),
+
+/***/ 28006:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+const tslib_1 = __nccwpck_require__(4351);
+tslib_1.__exportStar(__nccwpck_require__(7545), exports);
+tslib_1.__exportStar(__nccwpck_require__(49123), exports);
+
+
+/***/ }),
+
+/***/ 55756:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+const tslib_1 = __nccwpck_require__(4351);
+tslib_1.__exportStar(__nccwpck_require__(74075), exports);
+tslib_1.__exportStar(__nccwpck_require__(48960), exports);
+tslib_1.__exportStar(__nccwpck_require__(63274), exports);
+tslib_1.__exportStar(__nccwpck_require__(78340), exports);
+tslib_1.__exportStar(__nccwpck_require__(4744), exports);
+tslib_1.__exportStar(__nccwpck_require__(68270), exports);
+tslib_1.__exportStar(__nccwpck_require__(57628), exports);
+tslib_1.__exportStar(__nccwpck_require__(89035), exports);
+tslib_1.__exportStar(__nccwpck_require__(7225), exports);
+tslib_1.__exportStar(__nccwpck_require__(54126), exports);
+tslib_1.__exportStar(__nccwpck_require__(21550), exports);
+tslib_1.__exportStar(__nccwpck_require__(88508), exports);
+tslib_1.__exportStar(__nccwpck_require__(47447), exports);
+tslib_1.__exportStar(__nccwpck_require__(18883), exports);
+tslib_1.__exportStar(__nccwpck_require__(28006), exports);
+tslib_1.__exportStar(__nccwpck_require__(52866), exports);
+tslib_1.__exportStar(__nccwpck_require__(17756), exports);
+tslib_1.__exportStar(__nccwpck_require__(45489), exports);
+tslib_1.__exportStar(__nccwpck_require__(26524), exports);
+tslib_1.__exportStar(__nccwpck_require__(14603), exports);
+tslib_1.__exportStar(__nccwpck_require__(83752), exports);
+tslib_1.__exportStar(__nccwpck_require__(30774), exports);
+tslib_1.__exportStar(__nccwpck_require__(14089), exports);
+tslib_1.__exportStar(__nccwpck_require__(45678), exports);
+tslib_1.__exportStar(__nccwpck_require__(69926), exports);
+tslib_1.__exportStar(__nccwpck_require__(9945), exports);
+tslib_1.__exportStar(__nccwpck_require__(28564), exports);
+tslib_1.__exportStar(__nccwpck_require__(61285), exports);
+tslib_1.__exportStar(__nccwpck_require__(50364), exports);
+tslib_1.__exportStar(__nccwpck_require__(69304), exports);
+tslib_1.__exportStar(__nccwpck_require__(10375), exports);
+tslib_1.__exportStar(__nccwpck_require__(66894), exports);
+tslib_1.__exportStar(__nccwpck_require__(57887), exports);
+tslib_1.__exportStar(__nccwpck_require__(66255), exports);
+
+
+/***/ }),
+
+/***/ 52866:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+
+
+/***/ }),
+
+/***/ 17756:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.SMITHY_CONTEXT_KEY = void 0;
+exports.SMITHY_CONTEXT_KEY = "__smithy_context";
+
+
+/***/ }),
+
+/***/ 45489:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+
+
+/***/ }),
+
+/***/ 26524:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.IniSectionType = void 0;
+var IniSectionType;
+(function (IniSectionType) {
+ IniSectionType["PROFILE"] = "profile";
+ IniSectionType["SSO_SESSION"] = "sso-session";
+ IniSectionType["SERVICES"] = "services";
+})(IniSectionType = exports.IniSectionType || (exports.IniSectionType = {}));
+
+
+/***/ }),
+
+/***/ 14603:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+
+
+/***/ }),
+
+/***/ 83752:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+
+
+/***/ }),
+
+/***/ 30774:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+
+
+/***/ }),
+
+/***/ 14089:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+
+
+/***/ }),
+
+/***/ 45678:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+
+
+/***/ }),
+
+/***/ 69926:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+
+
+/***/ }),
+
+/***/ 9945:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+
+
+/***/ }),
+
+/***/ 28564:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+
+
+/***/ }),
+
+/***/ 61285:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+
+
+/***/ }),
+
+/***/ 50364:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.RequestHandlerProtocol = void 0;
+var RequestHandlerProtocol;
+(function (RequestHandlerProtocol) {
+ RequestHandlerProtocol["HTTP_0_9"] = "http/0.9";
+ RequestHandlerProtocol["HTTP_1_0"] = "http/1.0";
+ RequestHandlerProtocol["TDS_8_0"] = "tds/8.0";
+})(RequestHandlerProtocol = exports.RequestHandlerProtocol || (exports.RequestHandlerProtocol = {}));
+
+
+/***/ }),
+
+/***/ 69304:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+
+
+/***/ }),
+
+/***/ 10375:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+
+
+/***/ }),
+
+/***/ 66894:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+
+
+/***/ }),
+
+/***/ 57887:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+
+
+/***/ }),
+
+/***/ 66255:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+
+
+/***/ }),
+
+/***/ 14681:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.parseUrl = void 0;
+const querystring_parser_1 = __nccwpck_require__(4769);
+const parseUrl = (url) => {
+ if (typeof url === "string") {
+ return (0, exports.parseUrl)(new URL(url));
+ }
+ const { hostname, pathname, port, protocol, search } = url;
+ let query;
+ if (search) {
+ query = (0, querystring_parser_1.parseQueryString)(search);
+ }
+ return {
+ hostname,
+ port: port ? parseInt(port) : undefined,
+ protocol,
+ path: pathname,
+ query,
+ };
+};
+exports.parseUrl = parseUrl;
+
+
+/***/ }),
+
+/***/ 30305:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.fromBase64 = void 0;
+const util_buffer_from_1 = __nccwpck_require__(31381);
+const BASE64_REGEX = /^[A-Za-z0-9+/]*={0,2}$/;
+const fromBase64 = (input) => {
+ if ((input.length * 3) % 4 !== 0) {
+ throw new TypeError(`Incorrect padding on base64 string.`);
+ }
+ if (!BASE64_REGEX.exec(input)) {
+ throw new TypeError(`Invalid base64 string.`);
+ }
+ const buffer = (0, util_buffer_from_1.fromString)(input, "base64");
+ return new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength);
+};
+exports.fromBase64 = fromBase64;
+
+
+/***/ }),
+
+/***/ 75600:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+const tslib_1 = __nccwpck_require__(4351);
+tslib_1.__exportStar(__nccwpck_require__(30305), exports);
+tslib_1.__exportStar(__nccwpck_require__(74730), exports);
+
+
+/***/ }),
+
+/***/ 74730:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.toBase64 = void 0;
+const util_buffer_from_1 = __nccwpck_require__(31381);
+const toBase64 = (input) => (0, util_buffer_from_1.fromArrayBuffer)(input.buffer, input.byteOffset, input.byteLength).toString("base64");
+exports.toBase64 = toBase64;
+
+
+/***/ }),
+
+/***/ 54880:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.calculateBodyLength = void 0;
+const fs_1 = __nccwpck_require__(57147);
+const calculateBodyLength = (body) => {
+ if (!body) {
+ return 0;
+ }
+ if (typeof body === "string") {
+ return Buffer.from(body).length;
+ }
+ else if (typeof body.byteLength === "number") {
+ return body.byteLength;
+ }
+ else if (typeof body.size === "number") {
+ return body.size;
+ }
+ else if (typeof body.start === "number" && typeof body.end === "number") {
+ return body.end + 1 - body.start;
+ }
+ else if (typeof body.path === "string" || Buffer.isBuffer(body.path)) {
+ return (0, fs_1.lstatSync)(body.path).size;
+ }
+ else if (typeof body.fd === "number") {
+ return (0, fs_1.fstatSync)(body.fd).size;
+ }
+ throw new Error(`Body Length computation failed for ${body}`);
+};
+exports.calculateBodyLength = calculateBodyLength;
+
+
+/***/ }),
+
+/***/ 68075:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+const tslib_1 = __nccwpck_require__(4351);
+tslib_1.__exportStar(__nccwpck_require__(54880), exports);
+
+
+/***/ }),
+
+/***/ 31381:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.fromString = exports.fromArrayBuffer = void 0;
+const is_array_buffer_1 = __nccwpck_require__(10780);
+const buffer_1 = __nccwpck_require__(14300);
+const fromArrayBuffer = (input, offset = 0, length = input.byteLength - offset) => {
+ if (!(0, is_array_buffer_1.isArrayBuffer)(input)) {
+ throw new TypeError(`The "input" argument must be ArrayBuffer. Received type ${typeof input} (${input})`);
+ }
+ return buffer_1.Buffer.from(input, offset, length);
+};
+exports.fromArrayBuffer = fromArrayBuffer;
+const fromString = (input, encoding) => {
+ if (typeof input !== "string") {
+ throw new TypeError(`The "input" argument must be of type string. Received type ${typeof input} (${input})`);
+ }
+ return encoding ? buffer_1.Buffer.from(input, encoding) : buffer_1.Buffer.from(input);
+};
+exports.fromString = fromString;
+
+
+/***/ }),
+
+/***/ 42491:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.booleanSelector = exports.SelectorType = void 0;
+var SelectorType;
+(function (SelectorType) {
+ SelectorType["ENV"] = "env";
+ SelectorType["CONFIG"] = "shared config entry";
+})(SelectorType = exports.SelectorType || (exports.SelectorType = {}));
+const booleanSelector = (obj, key, type) => {
+ if (!(key in obj))
+ return undefined;
+ if (obj[key] === "true")
+ return true;
+ if (obj[key] === "false")
+ return false;
+ throw new Error(`Cannot load ${type} "${key}". Expected "true" or "false", got ${obj[key]}.`);
+};
+exports.booleanSelector = booleanSelector;
+
+
+/***/ }),
+
+/***/ 83375:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+const tslib_1 = __nccwpck_require__(4351);
+tslib_1.__exportStar(__nccwpck_require__(42491), exports);
+
+
+/***/ }),
+
+/***/ 56470:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.IMDS_REGION_PATH = exports.DEFAULTS_MODE_OPTIONS = exports.ENV_IMDS_DISABLED = exports.AWS_DEFAULT_REGION_ENV = exports.AWS_REGION_ENV = exports.AWS_EXECUTION_ENV = void 0;
+exports.AWS_EXECUTION_ENV = "AWS_EXECUTION_ENV";
+exports.AWS_REGION_ENV = "AWS_REGION";
+exports.AWS_DEFAULT_REGION_ENV = "AWS_DEFAULT_REGION";
+exports.ENV_IMDS_DISABLED = "AWS_EC2_METADATA_DISABLED";
+exports.DEFAULTS_MODE_OPTIONS = ["in-region", "cross-region", "mobile", "standard", "legacy"];
+exports.IMDS_REGION_PATH = "/latest/meta-data/placement/region";
+
+
+/***/ }),
+
+/***/ 15577:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.NODE_DEFAULTS_MODE_CONFIG_OPTIONS = void 0;
+const AWS_DEFAULTS_MODE_ENV = "AWS_DEFAULTS_MODE";
+const AWS_DEFAULTS_MODE_CONFIG = "defaults_mode";
+exports.NODE_DEFAULTS_MODE_CONFIG_OPTIONS = {
+ environmentVariableSelector: (env) => {
+ return env[AWS_DEFAULTS_MODE_ENV];
+ },
+ configFileSelector: (profile) => {
+ return profile[AWS_DEFAULTS_MODE_CONFIG];
+ },
+ default: "legacy",
+};
+
+
+/***/ }),
+
+/***/ 72429:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+const tslib_1 = __nccwpck_require__(4351);
+tslib_1.__exportStar(__nccwpck_require__(46217), exports);
+
+
+/***/ }),
+
+/***/ 46217:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.resolveDefaultsModeConfig = void 0;
+const config_resolver_1 = __nccwpck_require__(53098);
+const credential_provider_imds_1 = __nccwpck_require__(7477);
+const node_config_provider_1 = __nccwpck_require__(33461);
+const property_provider_1 = __nccwpck_require__(79721);
+const constants_1 = __nccwpck_require__(56470);
+const defaultsModeConfig_1 = __nccwpck_require__(15577);
+const resolveDefaultsModeConfig = ({ region = (0, node_config_provider_1.loadConfig)(config_resolver_1.NODE_REGION_CONFIG_OPTIONS), defaultsMode = (0, node_config_provider_1.loadConfig)(defaultsModeConfig_1.NODE_DEFAULTS_MODE_CONFIG_OPTIONS), } = {}) => (0, property_provider_1.memoize)(async () => {
+ const mode = typeof defaultsMode === "function" ? await defaultsMode() : defaultsMode;
+ switch (mode === null || mode === void 0 ? void 0 : mode.toLowerCase()) {
+ case "auto":
+ return resolveNodeDefaultsModeAuto(region);
+ case "in-region":
+ case "cross-region":
+ case "mobile":
+ case "standard":
+ case "legacy":
+ return Promise.resolve(mode === null || mode === void 0 ? void 0 : mode.toLocaleLowerCase());
+ case undefined:
+ return Promise.resolve("legacy");
+ default:
+ throw new Error(`Invalid parameter for "defaultsMode", expect ${constants_1.DEFAULTS_MODE_OPTIONS.join(", ")}, got ${mode}`);
+ }
+});
+exports.resolveDefaultsModeConfig = resolveDefaultsModeConfig;
+const resolveNodeDefaultsModeAuto = async (clientRegion) => {
+ if (clientRegion) {
+ const resolvedRegion = typeof clientRegion === "function" ? await clientRegion() : clientRegion;
+ const inferredRegion = await inferPhysicalRegion();
+ if (!inferredRegion) {
+ return "standard";
+ }
+ if (resolvedRegion === inferredRegion) {
+ return "in-region";
+ }
+ else {
+ return "cross-region";
+ }
+ }
+ return "standard";
+};
+const inferPhysicalRegion = async () => {
+ var _a;
+ if (process.env[constants_1.AWS_EXECUTION_ENV] && (process.env[constants_1.AWS_REGION_ENV] || process.env[constants_1.AWS_DEFAULT_REGION_ENV])) {
+ return (_a = process.env[constants_1.AWS_REGION_ENV]) !== null && _a !== void 0 ? _a : process.env[constants_1.AWS_DEFAULT_REGION_ENV];
+ }
+ if (!process.env[constants_1.ENV_IMDS_DISABLED]) {
+ try {
+ const endpoint = await (0, credential_provider_imds_1.getInstanceMetadataEndpoint)();
+ return (await (0, credential_provider_imds_1.httpRequest)({ ...endpoint, path: constants_1.IMDS_REGION_PATH })).toString();
+ }
+ catch (e) {
+ }
+ }
+};
+
+
+/***/ }),
+
+/***/ 45364:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.toHex = exports.fromHex = void 0;
+const SHORT_TO_HEX = {};
+const HEX_TO_SHORT = {};
+for (let i = 0; i < 256; i++) {
+ let encodedByte = i.toString(16).toLowerCase();
+ if (encodedByte.length === 1) {
+ encodedByte = `0${encodedByte}`;
+ }
+ SHORT_TO_HEX[i] = encodedByte;
+ HEX_TO_SHORT[encodedByte] = i;
+}
+function fromHex(encoded) {
+ if (encoded.length % 2 !== 0) {
+ throw new Error("Hex encoded strings must have an even number length");
+ }
+ const out = new Uint8Array(encoded.length / 2);
+ for (let i = 0; i < encoded.length; i += 2) {
+ const encodedByte = encoded.slice(i, i + 2).toLowerCase();
+ if (encodedByte in HEX_TO_SHORT) {
+ out[i / 2] = HEX_TO_SHORT[encodedByte];
+ }
+ else {
+ throw new Error(`Cannot decode unrecognized sequence ${encodedByte} as hexadecimal`);
+ }
+ }
+ return out;
+}
+exports.fromHex = fromHex;
+function toHex(bytes) {
+ let out = "";
+ for (let i = 0; i < bytes.byteLength; i++) {
+ out += SHORT_TO_HEX[bytes[i]];
+ }
+ return out;
+}
+exports.toHex = toHex;
+
+
+/***/ }),
+
+/***/ 85730:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.getSmithyContext = void 0;
+const types_1 = __nccwpck_require__(55756);
+const getSmithyContext = (context) => context[types_1.SMITHY_CONTEXT_KEY] || (context[types_1.SMITHY_CONTEXT_KEY] = {});
+exports.getSmithyContext = getSmithyContext;
+
+
+/***/ }),
+
+/***/ 2390:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+const tslib_1 = __nccwpck_require__(4351);
+tslib_1.__exportStar(__nccwpck_require__(85730), exports);
+tslib_1.__exportStar(__nccwpck_require__(80149), exports);
+
+
+/***/ }),
+
+/***/ 80149:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.normalizeProvider = void 0;
+const normalizeProvider = (input) => {
+ if (typeof input === "function")
+ return input;
+ const promisified = Promise.resolve(input);
+ return () => promisified;
+};
+exports.normalizeProvider = normalizeProvider;
+
+
+/***/ }),
+
+/***/ 65053:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.AdaptiveRetryStrategy = void 0;
+const config_1 = __nccwpck_require__(93435);
+const DefaultRateLimiter_1 = __nccwpck_require__(22234);
+const StandardRetryStrategy_1 = __nccwpck_require__(48361);
+class AdaptiveRetryStrategy {
+ constructor(maxAttemptsProvider, options) {
+ this.maxAttemptsProvider = maxAttemptsProvider;
+ this.mode = config_1.RETRY_MODES.ADAPTIVE;
+ const { rateLimiter } = options !== null && options !== void 0 ? options : {};
+ this.rateLimiter = rateLimiter !== null && rateLimiter !== void 0 ? rateLimiter : new DefaultRateLimiter_1.DefaultRateLimiter();
+ this.standardRetryStrategy = new StandardRetryStrategy_1.StandardRetryStrategy(maxAttemptsProvider);
+ }
+ async acquireInitialRetryToken(retryTokenScope) {
+ await this.rateLimiter.getSendToken();
+ return this.standardRetryStrategy.acquireInitialRetryToken(retryTokenScope);
+ }
+ async refreshRetryTokenForRetry(tokenToRenew, errorInfo) {
+ this.rateLimiter.updateClientSendingRate(errorInfo);
+ return this.standardRetryStrategy.refreshRetryTokenForRetry(tokenToRenew, errorInfo);
+ }
+ recordSuccess(token) {
+ this.rateLimiter.updateClientSendingRate({});
+ this.standardRetryStrategy.recordSuccess(token);
+ }
+}
+exports.AdaptiveRetryStrategy = AdaptiveRetryStrategy;
+
+
+/***/ }),
+
+/***/ 25689:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.ConfiguredRetryStrategy = void 0;
+const constants_1 = __nccwpck_require__(66302);
+const StandardRetryStrategy_1 = __nccwpck_require__(48361);
+class ConfiguredRetryStrategy extends StandardRetryStrategy_1.StandardRetryStrategy {
+ constructor(maxAttempts, computeNextBackoffDelay = constants_1.DEFAULT_RETRY_DELAY_BASE) {
+ super(typeof maxAttempts === "function" ? maxAttempts : async () => maxAttempts);
+ if (typeof computeNextBackoffDelay === "number") {
+ this.computeNextBackoffDelay = () => computeNextBackoffDelay;
+ }
+ else {
+ this.computeNextBackoffDelay = computeNextBackoffDelay;
+ }
+ }
+ async refreshRetryTokenForRetry(tokenToRenew, errorInfo) {
+ const token = await super.refreshRetryTokenForRetry(tokenToRenew, errorInfo);
+ token.getRetryDelay = () => this.computeNextBackoffDelay(token.getRetryCount());
+ return token;
+ }
+}
+exports.ConfiguredRetryStrategy = ConfiguredRetryStrategy;
+
+
+/***/ }),
+
+/***/ 22234:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.DefaultRateLimiter = void 0;
+const service_error_classification_1 = __nccwpck_require__(6375);
+class DefaultRateLimiter {
+ constructor(options) {
+ var _a, _b, _c, _d, _e;
+ this.currentCapacity = 0;
+ this.enabled = false;
+ this.lastMaxRate = 0;
+ this.measuredTxRate = 0;
+ this.requestCount = 0;
+ this.lastTimestamp = 0;
+ this.timeWindow = 0;
+ this.beta = (_a = options === null || options === void 0 ? void 0 : options.beta) !== null && _a !== void 0 ? _a : 0.7;
+ this.minCapacity = (_b = options === null || options === void 0 ? void 0 : options.minCapacity) !== null && _b !== void 0 ? _b : 1;
+ this.minFillRate = (_c = options === null || options === void 0 ? void 0 : options.minFillRate) !== null && _c !== void 0 ? _c : 0.5;
+ this.scaleConstant = (_d = options === null || options === void 0 ? void 0 : options.scaleConstant) !== null && _d !== void 0 ? _d : 0.4;
+ this.smooth = (_e = options === null || options === void 0 ? void 0 : options.smooth) !== null && _e !== void 0 ? _e : 0.8;
+ const currentTimeInSeconds = this.getCurrentTimeInSeconds();
+ this.lastThrottleTime = currentTimeInSeconds;
+ this.lastTxRateBucket = Math.floor(this.getCurrentTimeInSeconds());
+ this.fillRate = this.minFillRate;
+ this.maxCapacity = this.minCapacity;
+ }
+ getCurrentTimeInSeconds() {
+ return Date.now() / 1000;
+ }
+ async getSendToken() {
+ return this.acquireTokenBucket(1);
+ }
+ async acquireTokenBucket(amount) {
+ if (!this.enabled) {
+ return;
+ }
+ this.refillTokenBucket();
+ if (amount > this.currentCapacity) {
+ const delay = ((amount - this.currentCapacity) / this.fillRate) * 1000;
+ await new Promise((resolve) => setTimeout(resolve, delay));
+ }
+ this.currentCapacity = this.currentCapacity - amount;
+ }
+ refillTokenBucket() {
+ const timestamp = this.getCurrentTimeInSeconds();
+ if (!this.lastTimestamp) {
+ this.lastTimestamp = timestamp;
+ return;
+ }
+ const fillAmount = (timestamp - this.lastTimestamp) * this.fillRate;
+ this.currentCapacity = Math.min(this.maxCapacity, this.currentCapacity + fillAmount);
+ this.lastTimestamp = timestamp;
+ }
+ updateClientSendingRate(response) {
+ let calculatedRate;
+ this.updateMeasuredRate();
+ if ((0, service_error_classification_1.isThrottlingError)(response)) {
+ const rateToUse = !this.enabled ? this.measuredTxRate : Math.min(this.measuredTxRate, this.fillRate);
+ this.lastMaxRate = rateToUse;
+ this.calculateTimeWindow();
+ this.lastThrottleTime = this.getCurrentTimeInSeconds();
+ calculatedRate = this.cubicThrottle(rateToUse);
+ this.enableTokenBucket();
+ }
+ else {
+ this.calculateTimeWindow();
+ calculatedRate = this.cubicSuccess(this.getCurrentTimeInSeconds());
+ }
+ const newRate = Math.min(calculatedRate, 2 * this.measuredTxRate);
+ this.updateTokenBucketRate(newRate);
+ }
+ calculateTimeWindow() {
+ this.timeWindow = this.getPrecise(Math.pow((this.lastMaxRate * (1 - this.beta)) / this.scaleConstant, 1 / 3));
+ }
+ cubicThrottle(rateToUse) {
+ return this.getPrecise(rateToUse * this.beta);
+ }
+ cubicSuccess(timestamp) {
+ return this.getPrecise(this.scaleConstant * Math.pow(timestamp - this.lastThrottleTime - this.timeWindow, 3) + this.lastMaxRate);
+ }
+ enableTokenBucket() {
+ this.enabled = true;
+ }
+ updateTokenBucketRate(newRate) {
+ this.refillTokenBucket();
+ this.fillRate = Math.max(newRate, this.minFillRate);
+ this.maxCapacity = Math.max(newRate, this.minCapacity);
+ this.currentCapacity = Math.min(this.currentCapacity, this.maxCapacity);
+ }
+ updateMeasuredRate() {
+ const t = this.getCurrentTimeInSeconds();
+ const timeBucket = Math.floor(t * 2) / 2;
+ this.requestCount++;
+ if (timeBucket > this.lastTxRateBucket) {
+ const currentRate = this.requestCount / (timeBucket - this.lastTxRateBucket);
+ this.measuredTxRate = this.getPrecise(currentRate * this.smooth + this.measuredTxRate * (1 - this.smooth));
+ this.requestCount = 0;
+ this.lastTxRateBucket = timeBucket;
+ }
+ }
+ getPrecise(num) {
+ return parseFloat(num.toFixed(8));
+ }
+}
+exports.DefaultRateLimiter = DefaultRateLimiter;
+
+
+/***/ }),
+
+/***/ 48361:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.StandardRetryStrategy = void 0;
+const config_1 = __nccwpck_require__(93435);
+const constants_1 = __nccwpck_require__(66302);
+const defaultRetryBackoffStrategy_1 = __nccwpck_require__(21337);
+const defaultRetryToken_1 = __nccwpck_require__(1127);
+class StandardRetryStrategy {
+ constructor(maxAttempts) {
+ this.maxAttempts = maxAttempts;
+ this.mode = config_1.RETRY_MODES.STANDARD;
+ this.capacity = constants_1.INITIAL_RETRY_TOKENS;
+ this.retryBackoffStrategy = (0, defaultRetryBackoffStrategy_1.getDefaultRetryBackoffStrategy)();
+ this.maxAttemptsProvider = typeof maxAttempts === "function" ? maxAttempts : async () => maxAttempts;
+ }
+ async acquireInitialRetryToken(retryTokenScope) {
+ return (0, defaultRetryToken_1.createDefaultRetryToken)({
+ retryDelay: constants_1.DEFAULT_RETRY_DELAY_BASE,
+ retryCount: 0,
+ });
+ }
+ async refreshRetryTokenForRetry(token, errorInfo) {
+ const maxAttempts = await this.getMaxAttempts();
+ if (this.shouldRetry(token, errorInfo, maxAttempts)) {
+ const errorType = errorInfo.errorType;
+ this.retryBackoffStrategy.setDelayBase(errorType === "THROTTLING" ? constants_1.THROTTLING_RETRY_DELAY_BASE : constants_1.DEFAULT_RETRY_DELAY_BASE);
+ const delayFromErrorType = this.retryBackoffStrategy.computeNextBackoffDelay(token.getRetryCount());
+ const retryDelay = errorInfo.retryAfterHint
+ ? Math.max(errorInfo.retryAfterHint.getTime() - Date.now() || 0, delayFromErrorType)
+ : delayFromErrorType;
+ const capacityCost = this.getCapacityCost(errorType);
+ this.capacity -= capacityCost;
+ return (0, defaultRetryToken_1.createDefaultRetryToken)({
+ retryDelay,
+ retryCount: token.getRetryCount() + 1,
+ retryCost: capacityCost,
+ });
+ }
+ throw new Error("No retry token available");
+ }
+ recordSuccess(token) {
+ var _a;
+ this.capacity = Math.max(constants_1.INITIAL_RETRY_TOKENS, this.capacity + ((_a = token.getRetryCost()) !== null && _a !== void 0 ? _a : constants_1.NO_RETRY_INCREMENT));
+ }
+ getCapacity() {
+ return this.capacity;
+ }
+ async getMaxAttempts() {
+ try {
+ return await this.maxAttemptsProvider();
+ }
+ catch (error) {
+ console.warn(`Max attempts provider could not resolve. Using default of ${config_1.DEFAULT_MAX_ATTEMPTS}`);
+ return config_1.DEFAULT_MAX_ATTEMPTS;
+ }
+ }
+ shouldRetry(tokenToRenew, errorInfo, maxAttempts) {
+ const attempts = tokenToRenew.getRetryCount() + 1;
+ return (attempts < maxAttempts &&
+ this.capacity >= this.getCapacityCost(errorInfo.errorType) &&
+ this.isRetryableError(errorInfo.errorType));
+ }
+ getCapacityCost(errorType) {
+ return errorType === "TRANSIENT" ? constants_1.TIMEOUT_RETRY_COST : constants_1.RETRY_COST;
+ }
+ isRetryableError(errorType) {
+ return errorType === "THROTTLING" || errorType === "TRANSIENT";
+ }
+}
+exports.StandardRetryStrategy = StandardRetryStrategy;
+
+
+/***/ }),
+
+/***/ 93435:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.DEFAULT_RETRY_MODE = exports.DEFAULT_MAX_ATTEMPTS = exports.RETRY_MODES = void 0;
+var RETRY_MODES;
+(function (RETRY_MODES) {
+ RETRY_MODES["STANDARD"] = "standard";
+ RETRY_MODES["ADAPTIVE"] = "adaptive";
+})(RETRY_MODES = exports.RETRY_MODES || (exports.RETRY_MODES = {}));
+exports.DEFAULT_MAX_ATTEMPTS = 3;
+exports.DEFAULT_RETRY_MODE = RETRY_MODES.STANDARD;
+
+
+/***/ }),
+
+/***/ 66302:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.REQUEST_HEADER = exports.INVOCATION_ID_HEADER = exports.NO_RETRY_INCREMENT = exports.TIMEOUT_RETRY_COST = exports.RETRY_COST = exports.INITIAL_RETRY_TOKENS = exports.THROTTLING_RETRY_DELAY_BASE = exports.MAXIMUM_RETRY_DELAY = exports.DEFAULT_RETRY_DELAY_BASE = void 0;
+exports.DEFAULT_RETRY_DELAY_BASE = 100;
+exports.MAXIMUM_RETRY_DELAY = 20 * 1000;
+exports.THROTTLING_RETRY_DELAY_BASE = 500;
+exports.INITIAL_RETRY_TOKENS = 500;
+exports.RETRY_COST = 5;
+exports.TIMEOUT_RETRY_COST = 10;
+exports.NO_RETRY_INCREMENT = 1;
+exports.INVOCATION_ID_HEADER = "amz-sdk-invocation-id";
+exports.REQUEST_HEADER = "amz-sdk-request";
+
+
+/***/ }),
+
+/***/ 21337:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.getDefaultRetryBackoffStrategy = void 0;
+const constants_1 = __nccwpck_require__(66302);
+const getDefaultRetryBackoffStrategy = () => {
+ let delayBase = constants_1.DEFAULT_RETRY_DELAY_BASE;
+ const computeNextBackoffDelay = (attempts) => {
+ return Math.floor(Math.min(constants_1.MAXIMUM_RETRY_DELAY, Math.random() * 2 ** attempts * delayBase));
+ };
+ const setDelayBase = (delay) => {
+ delayBase = delay;
+ };
+ return {
+ computeNextBackoffDelay,
+ setDelayBase,
+ };
+};
+exports.getDefaultRetryBackoffStrategy = getDefaultRetryBackoffStrategy;
+
+
+/***/ }),
+
+/***/ 1127:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.createDefaultRetryToken = void 0;
+const constants_1 = __nccwpck_require__(66302);
+const createDefaultRetryToken = ({ retryDelay, retryCount, retryCost, }) => {
+ const getRetryCount = () => retryCount;
+ const getRetryDelay = () => Math.min(constants_1.MAXIMUM_RETRY_DELAY, retryDelay);
+ const getRetryCost = () => retryCost;
+ return {
+ getRetryCount,
+ getRetryDelay,
+ getRetryCost,
+ };
+};
+exports.createDefaultRetryToken = createDefaultRetryToken;
+
+
+/***/ }),
+
+/***/ 84902:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+const tslib_1 = __nccwpck_require__(4351);
+tslib_1.__exportStar(__nccwpck_require__(65053), exports);
+tslib_1.__exportStar(__nccwpck_require__(25689), exports);
+tslib_1.__exportStar(__nccwpck_require__(22234), exports);
+tslib_1.__exportStar(__nccwpck_require__(48361), exports);
+tslib_1.__exportStar(__nccwpck_require__(93435), exports);
+tslib_1.__exportStar(__nccwpck_require__(66302), exports);
+tslib_1.__exportStar(__nccwpck_require__(75427), exports);
+
+
+/***/ }),
+
+/***/ 75427:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+
+
+/***/ }),
+
+/***/ 22094:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.Uint8ArrayBlobAdapter = void 0;
+const transforms_1 = __nccwpck_require__(82098);
+class Uint8ArrayBlobAdapter extends Uint8Array {
+ static fromString(source, encoding = "utf-8") {
+ switch (typeof source) {
+ case "string":
+ return (0, transforms_1.transformFromString)(source, encoding);
+ default:
+ throw new Error(`Unsupported conversion from ${typeof source} to Uint8ArrayBlobAdapter.`);
+ }
+ }
+ static mutate(source) {
+ Object.setPrototypeOf(source, Uint8ArrayBlobAdapter.prototype);
+ return source;
+ }
+ transformToString(encoding = "utf-8") {
+ return (0, transforms_1.transformToString)(this, encoding);
+ }
+}
+exports.Uint8ArrayBlobAdapter = Uint8ArrayBlobAdapter;
+
+
+/***/ }),
+
+/***/ 82098:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.transformFromString = exports.transformToString = void 0;
+const util_base64_1 = __nccwpck_require__(75600);
+const util_utf8_1 = __nccwpck_require__(41895);
+const Uint8ArrayBlobAdapter_1 = __nccwpck_require__(22094);
+function transformToString(payload, encoding = "utf-8") {
+ if (encoding === "base64") {
+ return (0, util_base64_1.toBase64)(payload);
+ }
+ return (0, util_utf8_1.toUtf8)(payload);
+}
+exports.transformToString = transformToString;
+function transformFromString(str, encoding) {
+ if (encoding === "base64") {
+ return Uint8ArrayBlobAdapter_1.Uint8ArrayBlobAdapter.mutate((0, util_base64_1.fromBase64)(str));
+ }
+ return Uint8ArrayBlobAdapter_1.Uint8ArrayBlobAdapter.mutate((0, util_utf8_1.fromUtf8)(str));
+}
+exports.transformFromString = transformFromString;
+
+
+/***/ }),
+
+/***/ 23636:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.getAwsChunkedEncodingStream = void 0;
+const stream_1 = __nccwpck_require__(12781);
+const getAwsChunkedEncodingStream = (readableStream, options) => {
+ const { base64Encoder, bodyLengthChecker, checksumAlgorithmFn, checksumLocationName, streamHasher } = options;
+ const checksumRequired = base64Encoder !== undefined &&
+ checksumAlgorithmFn !== undefined &&
+ checksumLocationName !== undefined &&
+ streamHasher !== undefined;
+ const digest = checksumRequired ? streamHasher(checksumAlgorithmFn, readableStream) : undefined;
+ const awsChunkedEncodingStream = new stream_1.Readable({ read: () => { } });
+ readableStream.on("data", (data) => {
+ const length = bodyLengthChecker(data) || 0;
+ awsChunkedEncodingStream.push(`${length.toString(16)}\r\n`);
+ awsChunkedEncodingStream.push(data);
+ awsChunkedEncodingStream.push("\r\n");
+ });
+ readableStream.on("end", async () => {
+ awsChunkedEncodingStream.push(`0\r\n`);
+ if (checksumRequired) {
+ const checksum = base64Encoder(await digest);
+ awsChunkedEncodingStream.push(`${checksumLocationName}:${checksum}\r\n`);
+ awsChunkedEncodingStream.push(`\r\n`);
+ }
+ awsChunkedEncodingStream.push(null);
+ });
+ return awsChunkedEncodingStream;
+};
+exports.getAwsChunkedEncodingStream = getAwsChunkedEncodingStream;
+
+
+/***/ }),
+
+/***/ 96607:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+const tslib_1 = __nccwpck_require__(4351);
+tslib_1.__exportStar(__nccwpck_require__(22094), exports);
+tslib_1.__exportStar(__nccwpck_require__(23636), exports);
+tslib_1.__exportStar(__nccwpck_require__(4515), exports);
+
+
+/***/ }),
+
+/***/ 4515:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.sdkStreamMixin = void 0;
+const node_http_handler_1 = __nccwpck_require__(20258);
+const util_buffer_from_1 = __nccwpck_require__(31381);
+const stream_1 = __nccwpck_require__(12781);
+const util_1 = __nccwpck_require__(73837);
+const ERR_MSG_STREAM_HAS_BEEN_TRANSFORMED = "The stream has already been transformed.";
+const sdkStreamMixin = (stream) => {
+ var _a, _b;
+ if (!(stream instanceof stream_1.Readable)) {
+ const name = ((_b = (_a = stream === null || stream === void 0 ? void 0 : stream.__proto__) === null || _a === void 0 ? void 0 : _a.constructor) === null || _b === void 0 ? void 0 : _b.name) || stream;
+ throw new Error(`Unexpected stream implementation, expect Stream.Readable instance, got ${name}`);
+ }
+ let transformed = false;
+ const transformToByteArray = async () => {
+ if (transformed) {
+ throw new Error(ERR_MSG_STREAM_HAS_BEEN_TRANSFORMED);
+ }
+ transformed = true;
+ return await (0, node_http_handler_1.streamCollector)(stream);
+ };
+ return Object.assign(stream, {
+ transformToByteArray,
+ transformToString: async (encoding) => {
+ const buf = await transformToByteArray();
+ if (encoding === undefined || Buffer.isEncoding(encoding)) {
+ return (0, util_buffer_from_1.fromArrayBuffer)(buf.buffer, buf.byteOffset, buf.byteLength).toString(encoding);
+ }
+ else {
+ const decoder = new util_1.TextDecoder(encoding);
+ return decoder.decode(buf);
+ }
+ },
+ transformToWebStream: () => {
+ if (transformed) {
+ throw new Error(ERR_MSG_STREAM_HAS_BEEN_TRANSFORMED);
+ }
+ if (stream.readableFlowing !== null) {
+ throw new Error("The stream has been consumed by other callbacks.");
+ }
+ if (typeof stream_1.Readable.toWeb !== "function") {
+ throw new Error("Readable.toWeb() is not supported. Please make sure you are using Node.js >= 17.0.0, or polyfill is available.");
+ }
+ transformed = true;
+ return stream_1.Readable.toWeb(stream);
+ },
+ });
+};
+exports.sdkStreamMixin = sdkStreamMixin;
+
+
+/***/ }),
+
+/***/ 26174:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.escapeUriPath = void 0;
+const escape_uri_1 = __nccwpck_require__(60010);
+const escapeUriPath = (uri) => uri.split("/").map(escape_uri_1.escapeUri).join("/");
+exports.escapeUriPath = escapeUriPath;
+
+
+/***/ }),
+
+/***/ 60010:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.escapeUri = void 0;
+const escapeUri = (uri) => encodeURIComponent(uri).replace(/[!'()*]/g, hexEncode);
+exports.escapeUri = escapeUri;
+const hexEncode = (c) => `%${c.charCodeAt(0).toString(16).toUpperCase()}`;
+
+
+/***/ }),
+
+/***/ 54197:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+const tslib_1 = __nccwpck_require__(4351);
+tslib_1.__exportStar(__nccwpck_require__(60010), exports);
+tslib_1.__exportStar(__nccwpck_require__(26174), exports);
+
+
+/***/ }),
+
+/***/ 45917:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.fromUtf8 = void 0;
+const util_buffer_from_1 = __nccwpck_require__(31381);
+const fromUtf8 = (input) => {
+ const buf = (0, util_buffer_from_1.fromString)(input, "utf8");
+ return new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength / Uint8Array.BYTES_PER_ELEMENT);
+};
+exports.fromUtf8 = fromUtf8;
+
+
+/***/ }),
+
+/***/ 41895:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+const tslib_1 = __nccwpck_require__(4351);
+tslib_1.__exportStar(__nccwpck_require__(45917), exports);
+tslib_1.__exportStar(__nccwpck_require__(95470), exports);
+tslib_1.__exportStar(__nccwpck_require__(99960), exports);
+
+
+/***/ }),
+
+/***/ 95470:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.toUint8Array = void 0;
+const fromUtf8_1 = __nccwpck_require__(45917);
+const toUint8Array = (data) => {
+ if (typeof data === "string") {
+ return (0, fromUtf8_1.fromUtf8)(data);
+ }
+ if (ArrayBuffer.isView(data)) {
+ return new Uint8Array(data.buffer, data.byteOffset, data.byteLength / Uint8Array.BYTES_PER_ELEMENT);
+ }
+ return new Uint8Array(data);
+};
+exports.toUint8Array = toUint8Array;
+
+
+/***/ }),
+
+/***/ 99960:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.toUtf8 = void 0;
+const util_buffer_from_1 = __nccwpck_require__(31381);
+const toUtf8 = (input) => (0, util_buffer_from_1.fromArrayBuffer)(input.buffer, input.byteOffset, input.byteLength).toString("utf8");
+exports.toUtf8 = toUtf8;
+
+
+/***/ }),
+
+/***/ 76991:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.createWaiter = void 0;
+const poller_1 = __nccwpck_require__(39033);
+const utils_1 = __nccwpck_require__(26000);
+const waiter_1 = __nccwpck_require__(79089);
+const abortTimeout = async (abortSignal) => {
+ return new Promise((resolve) => {
+ abortSignal.onabort = () => resolve({ state: waiter_1.WaiterState.ABORTED });
+ });
+};
+const createWaiter = async (options, input, acceptorChecks) => {
+ const params = {
+ ...waiter_1.waiterServiceDefaults,
+ ...options,
+ };
+ (0, utils_1.validateWaiterOptions)(params);
+ const exitConditions = [(0, poller_1.runPolling)(params, input, acceptorChecks)];
+ if (options.abortController) {
+ exitConditions.push(abortTimeout(options.abortController.signal));
+ }
+ if (options.abortSignal) {
+ exitConditions.push(abortTimeout(options.abortSignal));
+ }
+ return Promise.race(exitConditions);
+};
+exports.createWaiter = createWaiter;
+
+
+/***/ }),
+
+/***/ 78011:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+const tslib_1 = __nccwpck_require__(4351);
+tslib_1.__exportStar(__nccwpck_require__(76991), exports);
+tslib_1.__exportStar(__nccwpck_require__(79089), exports);
+
+
+/***/ }),
+
+/***/ 39033:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.runPolling = void 0;
+const sleep_1 = __nccwpck_require__(62380);
+const waiter_1 = __nccwpck_require__(79089);
+const exponentialBackoffWithJitter = (minDelay, maxDelay, attemptCeiling, attempt) => {
+ if (attempt > attemptCeiling)
+ return maxDelay;
+ const delay = minDelay * 2 ** (attempt - 1);
+ return randomInRange(minDelay, delay);
+};
+const randomInRange = (min, max) => min + Math.random() * (max - min);
+const runPolling = async ({ minDelay, maxDelay, maxWaitTime, abortController, client, abortSignal }, input, acceptorChecks) => {
+ var _a;
+ const { state, reason } = await acceptorChecks(client, input);
+ if (state !== waiter_1.WaiterState.RETRY) {
+ return { state, reason };
+ }
+ let currentAttempt = 1;
+ const waitUntil = Date.now() + maxWaitTime * 1000;
+ const attemptCeiling = Math.log(maxDelay / minDelay) / Math.log(2) + 1;
+ while (true) {
+ if (((_a = abortController === null || abortController === void 0 ? void 0 : abortController.signal) === null || _a === void 0 ? void 0 : _a.aborted) || (abortSignal === null || abortSignal === void 0 ? void 0 : abortSignal.aborted)) {
+ return { state: waiter_1.WaiterState.ABORTED };
+ }
+ const delay = exponentialBackoffWithJitter(minDelay, maxDelay, attemptCeiling, currentAttempt);
+ if (Date.now() + delay * 1000 > waitUntil) {
+ return { state: waiter_1.WaiterState.TIMEOUT };
+ }
+ await (0, sleep_1.sleep)(delay);
+ const { state, reason } = await acceptorChecks(client, input);
+ if (state !== waiter_1.WaiterState.RETRY) {
+ return { state, reason };
+ }
+ currentAttempt += 1;
+ }
+};
+exports.runPolling = runPolling;
+
+
+/***/ }),
+
+/***/ 26000:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+const tslib_1 = __nccwpck_require__(4351);
+tslib_1.__exportStar(__nccwpck_require__(62380), exports);
+tslib_1.__exportStar(__nccwpck_require__(6594), exports);
+
+
+/***/ }),
+
+/***/ 62380:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.sleep = void 0;
+const sleep = (seconds) => {
+ return new Promise((resolve) => setTimeout(resolve, seconds * 1000));
+};
+exports.sleep = sleep;
+
+
+/***/ }),
+
+/***/ 6594:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.validateWaiterOptions = void 0;
+const validateWaiterOptions = (options) => {
+ if (options.maxWaitTime < 1) {
+ throw new Error(`WaiterConfiguration.maxWaitTime must be greater than 0`);
+ }
+ else if (options.minDelay < 1) {
+ throw new Error(`WaiterConfiguration.minDelay must be greater than 0`);
+ }
+ else if (options.maxDelay < 1) {
+ throw new Error(`WaiterConfiguration.maxDelay must be greater than 0`);
+ }
+ else if (options.maxWaitTime <= options.minDelay) {
+ throw new Error(`WaiterConfiguration.maxWaitTime [${options.maxWaitTime}] must be greater than WaiterConfiguration.minDelay [${options.minDelay}] for this waiter`);
+ }
+ else if (options.maxDelay < options.minDelay) {
+ throw new Error(`WaiterConfiguration.maxDelay [${options.maxDelay}] must be greater than WaiterConfiguration.minDelay [${options.minDelay}] for this waiter`);
+ }
+};
+exports.validateWaiterOptions = validateWaiterOptions;
+
+
+/***/ }),
+
+/***/ 79089:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.checkExceptions = exports.WaiterState = exports.waiterServiceDefaults = void 0;
+exports.waiterServiceDefaults = {
+ minDelay: 2,
+ maxDelay: 120,
+};
+var WaiterState;
+(function (WaiterState) {
+ WaiterState["ABORTED"] = "ABORTED";
+ WaiterState["FAILURE"] = "FAILURE";
+ WaiterState["SUCCESS"] = "SUCCESS";
+ WaiterState["RETRY"] = "RETRY";
+ WaiterState["TIMEOUT"] = "TIMEOUT";
+})(WaiterState = exports.WaiterState || (exports.WaiterState = {}));
+const checkExceptions = (result) => {
+ if (result.state === WaiterState.ABORTED) {
+ const abortError = new Error(`${JSON.stringify({
+ ...result,
+ reason: "Request was aborted",
+ })}`);
+ abortError.name = "AbortError";
+ throw abortError;
+ }
+ else if (result.state === WaiterState.TIMEOUT) {
+ const timeoutError = new Error(`${JSON.stringify({
+ ...result,
+ reason: "Waiter has timed out",
+ })}`);
+ timeoutError.name = "TimeoutError";
+ throw timeoutError;
+ }
+ else if (result.state !== WaiterState.SUCCESS) {
+ throw new Error(`${JSON.stringify({ result })}`);
+ }
+ return result;
+};
+exports.checkExceptions = checkExceptions;
+
+
+/***/ }),
+
+/***/ 65063:
+/***/ ((module) => {
+
+"use strict";
+
+
+module.exports = ({onlyFirst = false} = {}) => {
+ const pattern = [
+ '[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)',
+ '(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))'
+ ].join('|');
+
+ return new RegExp(pattern, onlyFirst ? undefined : 'g');
+};
+
+
+/***/ }),
+
+/***/ 52068:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+"use strict";
+/* module decorator */ module = __nccwpck_require__.nmd(module);
+
+
+const wrapAnsi16 = (fn, offset) => (...args) => {
+ const code = fn(...args);
+ return `\u001B[${code + offset}m`;
+};
+
+const wrapAnsi256 = (fn, offset) => (...args) => {
+ const code = fn(...args);
+ return `\u001B[${38 + offset};5;${code}m`;
+};
+
+const wrapAnsi16m = (fn, offset) => (...args) => {
+ const rgb = fn(...args);
+ return `\u001B[${38 + offset};2;${rgb[0]};${rgb[1]};${rgb[2]}m`;
+};
+
+const ansi2ansi = n => n;
+const rgb2rgb = (r, g, b) => [r, g, b];
+
+const setLazyProperty = (object, property, get) => {
+ Object.defineProperty(object, property, {
+ get: () => {
+ const value = get();
+
+ Object.defineProperty(object, property, {
+ value,
+ enumerable: true,
+ configurable: true
+ });
+
+ return value;
+ },
+ enumerable: true,
+ configurable: true
+ });
+};
+
+/** @type {typeof import('color-convert')} */
+let colorConvert;
+const makeDynamicStyles = (wrap, targetSpace, identity, isBackground) => {
+ if (colorConvert === undefined) {
+ colorConvert = __nccwpck_require__(86931);
+ }
+
+ const offset = isBackground ? 10 : 0;
+ const styles = {};
+
+ for (const [sourceSpace, suite] of Object.entries(colorConvert)) {
+ const name = sourceSpace === 'ansi16' ? 'ansi' : sourceSpace;
+ if (sourceSpace === targetSpace) {
+ styles[name] = wrap(identity, offset);
+ } else if (typeof suite === 'object') {
+ styles[name] = wrap(suite[targetSpace], offset);
+ }
+ }
+
+ return styles;
+};
+
+function assembleStyles() {
+ const codes = new Map();
+ const styles = {
+ modifier: {
+ reset: [0, 0],
+ // 21 isn't widely supported and 22 does the same thing
+ bold: [1, 22],
+ dim: [2, 22],
+ italic: [3, 23],
+ underline: [4, 24],
+ inverse: [7, 27],
+ hidden: [8, 28],
+ strikethrough: [9, 29]
+ },
+ color: {
+ black: [30, 39],
+ red: [31, 39],
+ green: [32, 39],
+ yellow: [33, 39],
+ blue: [34, 39],
+ magenta: [35, 39],
+ cyan: [36, 39],
+ white: [37, 39],
+
+ // Bright color
+ blackBright: [90, 39],
+ redBright: [91, 39],
+ greenBright: [92, 39],
+ yellowBright: [93, 39],
+ blueBright: [94, 39],
+ magentaBright: [95, 39],
+ cyanBright: [96, 39],
+ whiteBright: [97, 39]
+ },
+ bgColor: {
+ bgBlack: [40, 49],
+ bgRed: [41, 49],
+ bgGreen: [42, 49],
+ bgYellow: [43, 49],
+ bgBlue: [44, 49],
+ bgMagenta: [45, 49],
+ bgCyan: [46, 49],
+ bgWhite: [47, 49],
+
+ // Bright color
+ bgBlackBright: [100, 49],
+ bgRedBright: [101, 49],
+ bgGreenBright: [102, 49],
+ bgYellowBright: [103, 49],
+ bgBlueBright: [104, 49],
+ bgMagentaBright: [105, 49],
+ bgCyanBright: [106, 49],
+ bgWhiteBright: [107, 49]
+ }
+ };
+
+ // Alias bright black as gray (and grey)
+ styles.color.gray = styles.color.blackBright;
+ styles.bgColor.bgGray = styles.bgColor.bgBlackBright;
+ styles.color.grey = styles.color.blackBright;
+ styles.bgColor.bgGrey = styles.bgColor.bgBlackBright;
+
+ for (const [groupName, group] of Object.entries(styles)) {
+ for (const [styleName, style] of Object.entries(group)) {
+ styles[styleName] = {
+ open: `\u001B[${style[0]}m`,
+ close: `\u001B[${style[1]}m`
+ };
+
+ group[styleName] = styles[styleName];
+
+ codes.set(style[0], style[1]);
+ }
+
+ Object.defineProperty(styles, groupName, {
+ value: group,
+ enumerable: false
+ });
+ }
+
+ Object.defineProperty(styles, 'codes', {
+ value: codes,
+ enumerable: false
+ });
+
+ styles.color.close = '\u001B[39m';
+ styles.bgColor.close = '\u001B[49m';
+
+ setLazyProperty(styles.color, 'ansi', () => makeDynamicStyles(wrapAnsi16, 'ansi16', ansi2ansi, false));
+ setLazyProperty(styles.color, 'ansi256', () => makeDynamicStyles(wrapAnsi256, 'ansi256', ansi2ansi, false));
+ setLazyProperty(styles.color, 'ansi16m', () => makeDynamicStyles(wrapAnsi16m, 'rgb', rgb2rgb, false));
+ setLazyProperty(styles.bgColor, 'ansi', () => makeDynamicStyles(wrapAnsi16, 'ansi16', ansi2ansi, true));
+ setLazyProperty(styles.bgColor, 'ansi256', () => makeDynamicStyles(wrapAnsi256, 'ansi256', ansi2ansi, true));
+ setLazyProperty(styles.bgColor, 'ansi16m', () => makeDynamicStyles(wrapAnsi16m, 'rgb', rgb2rgb, true));
+
+ return styles;
+}
+
+// Make the export immutable
+Object.defineProperty(module, 'exports', {
+ enumerable: true,
+ get: assembleStyles
+});
+
+
+/***/ }),
+
+/***/ 68287:
+/***/ ((module) => {
+
+"use strict";
+
+const regex = '[\uD800-\uDBFF][\uDC00-\uDFFF]';
+
+const astralRegex = options => options && options.exact ? new RegExp(`^${regex}$`) : new RegExp(regex, 'g');
+
+module.exports = astralRegex;
+
+
+/***/ }),
+
+/***/ 83682:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+var register = __nccwpck_require__(44670);
+var addHook = __nccwpck_require__(5549);
+var removeHook = __nccwpck_require__(6819);
+
+// bind with array of arguments: https://stackoverflow.com/a/21792913
+var bind = Function.bind;
+var bindable = bind.bind(bind);
+
+function bindApi(hook, state, name) {
+ var removeHookRef = bindable(removeHook, null).apply(
+ null,
+ name ? [state, name] : [state]
+ );
+ hook.api = { remove: removeHookRef };
+ hook.remove = removeHookRef;
+ ["before", "error", "after", "wrap"].forEach(function (kind) {
+ var args = name ? [state, kind, name] : [state, kind];
+ hook[kind] = hook.api[kind] = bindable(addHook, null).apply(null, args);
+ });
+}
+
+function HookSingular() {
+ var singularHookName = "h";
+ var singularHookState = {
+ registry: {},
+ };
+ var singularHook = register.bind(null, singularHookState, singularHookName);
+ bindApi(singularHook, singularHookState, singularHookName);
+ return singularHook;
+}
+
+function HookCollection() {
+ var state = {
+ registry: {},
+ };
+
+ var hook = register.bind(null, state);
+ bindApi(hook, state);
+
+ return hook;
+}
+
+var collectionHookDeprecationMessageDisplayed = false;
+function Hook() {
+ if (!collectionHookDeprecationMessageDisplayed) {
+ console.warn(
+ '[before-after-hook]: "Hook()" repurposing warning, use "Hook.Collection()". Read more: https://git.io/upgrade-before-after-hook-to-1.4'
+ );
+ collectionHookDeprecationMessageDisplayed = true;
+ }
+ return HookCollection();
+}
+
+Hook.Singular = HookSingular.bind();
+Hook.Collection = HookCollection.bind();
+
+module.exports = Hook;
+// expose constructors as a named property for TypeScript
+module.exports.Hook = Hook;
+module.exports.Singular = Hook.Singular;
+module.exports.Collection = Hook.Collection;
+
+
+/***/ }),
+
+/***/ 5549:
+/***/ ((module) => {
+
+module.exports = addHook;
+
+function addHook(state, kind, name, hook) {
+ var orig = hook;
+ if (!state.registry[name]) {
+ state.registry[name] = [];
+ }
+
+ if (kind === "before") {
+ hook = function (method, options) {
+ return Promise.resolve()
+ .then(orig.bind(null, options))
+ .then(method.bind(null, options));
+ };
+ }
+
+ if (kind === "after") {
+ hook = function (method, options) {
+ var result;
+ return Promise.resolve()
+ .then(method.bind(null, options))
+ .then(function (result_) {
+ result = result_;
+ return orig(result, options);
+ })
+ .then(function () {
+ return result;
+ });
+ };
+ }
+
+ if (kind === "error") {
+ hook = function (method, options) {
+ return Promise.resolve()
+ .then(method.bind(null, options))
+ .catch(function (error) {
+ return orig(error, options);
+ });
+ };
+ }
+
+ state.registry[name].push({
+ hook: hook,
+ orig: orig,
+ });
+}
+
+
+/***/ }),
+
+/***/ 44670:
+/***/ ((module) => {
+
+module.exports = register;
+
+function register(state, name, method, options) {
+ if (typeof method !== "function") {
+ throw new Error("method for before hook must be a function");
+ }
+
+ if (!options) {
+ options = {};
+ }
+
+ if (Array.isArray(name)) {
+ return name.reverse().reduce(function (callback, name) {
+ return register.bind(null, state, name, callback, options);
+ }, method)();
+ }
+
+ return Promise.resolve().then(function () {
+ if (!state.registry[name]) {
+ return method(options);
+ }
+
+ return state.registry[name].reduce(function (method, registered) {
+ return registered.hook.bind(null, method, options);
+ }, method)();
+ });
+}
+
+
+/***/ }),
+
+/***/ 6819:
+/***/ ((module) => {
+
+module.exports = removeHook;
+
+function removeHook(state, name, method) {
+ if (!state.registry[name]) {
+ return;
+ }
+
+ var index = state.registry[name]
+ .map(function (registered) {
+ return registered.orig;
+ })
+ .indexOf(method);
+
+ if (index === -1) {
+ return;
+ }
+
+ state.registry[name].splice(index, 1);
+}
+
+
+/***/ }),
+
+/***/ 78818:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+"use strict";
+
+const ansiStyles = __nccwpck_require__(52068);
+const {stdout: stdoutColor, stderr: stderrColor} = __nccwpck_require__(59318);
+const {
+ stringReplaceAll,
+ stringEncaseCRLFWithFirstIndex
+} = __nccwpck_require__(82415);
+
+const {isArray} = Array;
+
+// `supportsColor.level` → `ansiStyles.color[name]` mapping
+const levelMapping = [
+ 'ansi',
+ 'ansi',
+ 'ansi256',
+ 'ansi16m'
+];
+
+const styles = Object.create(null);
+
+const applyOptions = (object, options = {}) => {
+ if (options.level && !(Number.isInteger(options.level) && options.level >= 0 && options.level <= 3)) {
+ throw new Error('The `level` option should be an integer from 0 to 3');
+ }
+
+ // Detect level if not set manually
+ const colorLevel = stdoutColor ? stdoutColor.level : 0;
+ object.level = options.level === undefined ? colorLevel : options.level;
+};
+
+class ChalkClass {
+ constructor(options) {
+ // eslint-disable-next-line no-constructor-return
+ return chalkFactory(options);
+ }
+}
+
+const chalkFactory = options => {
+ const chalk = {};
+ applyOptions(chalk, options);
+
+ chalk.template = (...arguments_) => chalkTag(chalk.template, ...arguments_);
+
+ Object.setPrototypeOf(chalk, Chalk.prototype);
+ Object.setPrototypeOf(chalk.template, chalk);
+
+ chalk.template.constructor = () => {
+ throw new Error('`chalk.constructor()` is deprecated. Use `new chalk.Instance()` instead.');
+ };
+
+ chalk.template.Instance = ChalkClass;
+
+ return chalk.template;
+};
+
+function Chalk(options) {
+ return chalkFactory(options);
+}
+
+for (const [styleName, style] of Object.entries(ansiStyles)) {
+ styles[styleName] = {
+ get() {
+ const builder = createBuilder(this, createStyler(style.open, style.close, this._styler), this._isEmpty);
+ Object.defineProperty(this, styleName, {value: builder});
+ return builder;
+ }
+ };
+}
+
+styles.visible = {
+ get() {
+ const builder = createBuilder(this, this._styler, true);
+ Object.defineProperty(this, 'visible', {value: builder});
+ return builder;
+ }
+};
+
+const usedModels = ['rgb', 'hex', 'keyword', 'hsl', 'hsv', 'hwb', 'ansi', 'ansi256'];
+
+for (const model of usedModels) {
+ styles[model] = {
+ get() {
+ const {level} = this;
+ return function (...arguments_) {
+ const styler = createStyler(ansiStyles.color[levelMapping[level]][model](...arguments_), ansiStyles.color.close, this._styler);
+ return createBuilder(this, styler, this._isEmpty);
+ };
+ }
+ };
+}
+
+for (const model of usedModels) {
+ const bgModel = 'bg' + model[0].toUpperCase() + model.slice(1);
+ styles[bgModel] = {
+ get() {
+ const {level} = this;
+ return function (...arguments_) {
+ const styler = createStyler(ansiStyles.bgColor[levelMapping[level]][model](...arguments_), ansiStyles.bgColor.close, this._styler);
+ return createBuilder(this, styler, this._isEmpty);
+ };
+ }
+ };
+}
+
+const proto = Object.defineProperties(() => {}, {
+ ...styles,
+ level: {
+ enumerable: true,
+ get() {
+ return this._generator.level;
+ },
+ set(level) {
+ this._generator.level = level;
+ }
+ }
+});
+
+const createStyler = (open, close, parent) => {
+ let openAll;
+ let closeAll;
+ if (parent === undefined) {
+ openAll = open;
+ closeAll = close;
+ } else {
+ openAll = parent.openAll + open;
+ closeAll = close + parent.closeAll;
+ }
+
+ return {
+ open,
+ close,
+ openAll,
+ closeAll,
+ parent
+ };
+};
+
+const createBuilder = (self, _styler, _isEmpty) => {
+ const builder = (...arguments_) => {
+ if (isArray(arguments_[0]) && isArray(arguments_[0].raw)) {
+ // Called as a template literal, for example: chalk.red`2 + 3 = {bold ${2+3}}`
+ return applyStyle(builder, chalkTag(builder, ...arguments_));
+ }
+
+ // Single argument is hot path, implicit coercion is faster than anything
+ // eslint-disable-next-line no-implicit-coercion
+ return applyStyle(builder, (arguments_.length === 1) ? ('' + arguments_[0]) : arguments_.join(' '));
+ };
+
+ // We alter the prototype because we must return a function, but there is
+ // no way to create a function with a different prototype
+ Object.setPrototypeOf(builder, proto);
+
+ builder._generator = self;
+ builder._styler = _styler;
+ builder._isEmpty = _isEmpty;
+
+ return builder;
+};
+
+const applyStyle = (self, string) => {
+ if (self.level <= 0 || !string) {
+ return self._isEmpty ? '' : string;
+ }
+
+ let styler = self._styler;
+
+ if (styler === undefined) {
+ return string;
+ }
+
+ const {openAll, closeAll} = styler;
+ if (string.indexOf('\u001B') !== -1) {
+ while (styler !== undefined) {
+ // Replace any instances already present with a re-opening code
+ // otherwise only the part of the string until said closing code
+ // will be colored, and the rest will simply be 'plain'.
+ string = stringReplaceAll(string, styler.close, styler.open);
+
+ styler = styler.parent;
+ }
+ }
+
+ // We can move both next actions out of loop, because remaining actions in loop won't have
+ // any/visible effect on parts we add here. Close the styling before a linebreak and reopen
+ // after next line to fix a bleed issue on macOS: https://github.com/chalk/chalk/pull/92
+ const lfIndex = string.indexOf('\n');
+ if (lfIndex !== -1) {
+ string = stringEncaseCRLFWithFirstIndex(string, closeAll, openAll, lfIndex);
+ }
+
+ return openAll + string + closeAll;
+};
+
+let template;
+const chalkTag = (chalk, ...strings) => {
+ const [firstString] = strings;
+
+ if (!isArray(firstString) || !isArray(firstString.raw)) {
+ // If chalk() was called by itself or with a string,
+ // return the string itself as a string.
+ return strings.join(' ');
+ }
+
+ const arguments_ = strings.slice(1);
+ const parts = [firstString.raw[0]];
+
+ for (let i = 1; i < firstString.length; i++) {
+ parts.push(
+ String(arguments_[i - 1]).replace(/[{}\\]/g, '\\$&'),
+ String(firstString.raw[i])
+ );
+ }
+
+ if (template === undefined) {
+ template = __nccwpck_require__(20500);
+ }
+
+ return template(chalk, parts.join(''));
+};
+
+Object.defineProperties(Chalk.prototype, styles);
+
+const chalk = Chalk(); // eslint-disable-line new-cap
+chalk.supportsColor = stdoutColor;
+chalk.stderr = Chalk({level: stderrColor ? stderrColor.level : 0}); // eslint-disable-line new-cap
+chalk.stderr.supportsColor = stderrColor;
+
+module.exports = chalk;
+
+
+/***/ }),
+
+/***/ 20500:
+/***/ ((module) => {
+
+"use strict";
+
+const TEMPLATE_REGEX = /(?:\\(u(?:[a-f\d]{4}|\{[a-f\d]{1,6}\})|x[a-f\d]{2}|.))|(?:\{(~)?(\w+(?:\([^)]*\))?(?:\.\w+(?:\([^)]*\))?)*)(?:[ \t]|(?=\r?\n)))|(\})|((?:.|[\r\n\f])+?)/gi;
+const STYLE_REGEX = /(?:^|\.)(\w+)(?:\(([^)]*)\))?/g;
+const STRING_REGEX = /^(['"])((?:\\.|(?!\1)[^\\])*)\1$/;
+const ESCAPE_REGEX = /\\(u(?:[a-f\d]{4}|{[a-f\d]{1,6}})|x[a-f\d]{2}|.)|([^\\])/gi;
+
+const ESCAPES = new Map([
+ ['n', '\n'],
+ ['r', '\r'],
+ ['t', '\t'],
+ ['b', '\b'],
+ ['f', '\f'],
+ ['v', '\v'],
+ ['0', '\0'],
+ ['\\', '\\'],
+ ['e', '\u001B'],
+ ['a', '\u0007']
+]);
+
+function unescape(c) {
+ const u = c[0] === 'u';
+ const bracket = c[1] === '{';
+
+ if ((u && !bracket && c.length === 5) || (c[0] === 'x' && c.length === 3)) {
+ return String.fromCharCode(parseInt(c.slice(1), 16));
+ }
+
+ if (u && bracket) {
+ return String.fromCodePoint(parseInt(c.slice(2, -1), 16));
+ }
+
+ return ESCAPES.get(c) || c;
+}
+
+function parseArguments(name, arguments_) {
+ const results = [];
+ const chunks = arguments_.trim().split(/\s*,\s*/g);
+ let matches;
+
+ for (const chunk of chunks) {
+ const number = Number(chunk);
+ if (!Number.isNaN(number)) {
+ results.push(number);
+ } else if ((matches = chunk.match(STRING_REGEX))) {
+ results.push(matches[2].replace(ESCAPE_REGEX, (m, escape, character) => escape ? unescape(escape) : character));
+ } else {
+ throw new Error(`Invalid Chalk template style argument: ${chunk} (in style '${name}')`);
+ }
+ }
+
+ return results;
+}
+
+function parseStyle(style) {
+ STYLE_REGEX.lastIndex = 0;
+
+ const results = [];
+ let matches;
+
+ while ((matches = STYLE_REGEX.exec(style)) !== null) {
+ const name = matches[1];
+
+ if (matches[2]) {
+ const args = parseArguments(name, matches[2]);
+ results.push([name].concat(args));
+ } else {
+ results.push([name]);
+ }
+ }
+
+ return results;
+}
+
+function buildStyle(chalk, styles) {
+ const enabled = {};
+
+ for (const layer of styles) {
+ for (const style of layer.styles) {
+ enabled[style[0]] = layer.inverse ? null : style.slice(1);
+ }
+ }
+
+ let current = chalk;
+ for (const [styleName, styles] of Object.entries(enabled)) {
+ if (!Array.isArray(styles)) {
+ continue;
+ }
+
+ if (!(styleName in current)) {
+ throw new Error(`Unknown Chalk style: ${styleName}`);
+ }
+
+ current = styles.length > 0 ? current[styleName](...styles) : current[styleName];
+ }
+
+ return current;
+}
+
+module.exports = (chalk, temporary) => {
+ const styles = [];
+ const chunks = [];
+ let chunk = [];
+
+ // eslint-disable-next-line max-params
+ temporary.replace(TEMPLATE_REGEX, (m, escapeCharacter, inverse, style, close, character) => {
+ if (escapeCharacter) {
+ chunk.push(unescape(escapeCharacter));
+ } else if (style) {
+ const string = chunk.join('');
+ chunk = [];
+ chunks.push(styles.length === 0 ? string : buildStyle(chalk, styles)(string));
+ styles.push({inverse, styles: parseStyle(style)});
+ } else if (close) {
+ if (styles.length === 0) {
+ throw new Error('Found extraneous } in Chalk template literal');
+ }
+
+ chunks.push(buildStyle(chalk, styles)(chunk.join('')));
+ chunk = [];
+ styles.pop();
+ } else {
+ chunk.push(character);
+ }
+ });
+
+ chunks.push(chunk.join(''));
+
+ if (styles.length > 0) {
+ const errMessage = `Chalk template literal is missing ${styles.length} closing bracket${styles.length === 1 ? '' : 's'} (\`}\`)`;
+ throw new Error(errMessage);
+ }
+
+ return chunks.join('');
+};
+
+
+/***/ }),
+
+/***/ 82415:
+/***/ ((module) => {
+
+"use strict";
+
+
+const stringReplaceAll = (string, substring, replacer) => {
+ let index = string.indexOf(substring);
+ if (index === -1) {
+ return string;
+ }
+
+ const substringLength = substring.length;
+ let endIndex = 0;
+ let returnValue = '';
+ do {
+ returnValue += string.substr(endIndex, index - endIndex) + substring + replacer;
+ endIndex = index + substringLength;
+ index = string.indexOf(substring, endIndex);
+ } while (index !== -1);
+
+ returnValue += string.substr(endIndex);
+ return returnValue;
+};
+
+const stringEncaseCRLFWithFirstIndex = (string, prefix, postfix, index) => {
+ let endIndex = 0;
+ let returnValue = '';
+ do {
+ const gotCR = string[index - 1] === '\r';
+ returnValue += string.substr(endIndex, (gotCR ? index - 1 : index) - endIndex) + prefix + (gotCR ? '\r\n' : '\n') + postfix;
+ endIndex = index + 1;
+ index = string.indexOf('\n', endIndex);
+ } while (index !== -1);
+
+ returnValue += string.substr(endIndex);
+ return returnValue;
+};
+
+module.exports = {
+ stringReplaceAll,
+ stringEncaseCRLFWithFirstIndex
+};
+
+
+/***/ }),
+
+/***/ 97391:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+/* MIT license */
+/* eslint-disable no-mixed-operators */
+const cssKeywords = __nccwpck_require__(78510);
+
+// NOTE: conversions should only return primitive values (i.e. arrays, or
+// values that give correct `typeof` results).
+// do not use box values types (i.e. Number(), String(), etc.)
+
+const reverseKeywords = {};
+for (const key of Object.keys(cssKeywords)) {
+ reverseKeywords[cssKeywords[key]] = key;
+}
+
+const convert = {
+ rgb: {channels: 3, labels: 'rgb'},
+ hsl: {channels: 3, labels: 'hsl'},
+ hsv: {channels: 3, labels: 'hsv'},
+ hwb: {channels: 3, labels: 'hwb'},
+ cmyk: {channels: 4, labels: 'cmyk'},
+ xyz: {channels: 3, labels: 'xyz'},
+ lab: {channels: 3, labels: 'lab'},
+ lch: {channels: 3, labels: 'lch'},
+ hex: {channels: 1, labels: ['hex']},
+ keyword: {channels: 1, labels: ['keyword']},
+ ansi16: {channels: 1, labels: ['ansi16']},
+ ansi256: {channels: 1, labels: ['ansi256']},
+ hcg: {channels: 3, labels: ['h', 'c', 'g']},
+ apple: {channels: 3, labels: ['r16', 'g16', 'b16']},
+ gray: {channels: 1, labels: ['gray']}
+};
+
+module.exports = convert;
+
+// Hide .channels and .labels properties
+for (const model of Object.keys(convert)) {
+ if (!('channels' in convert[model])) {
+ throw new Error('missing channels property: ' + model);
+ }
+
+ if (!('labels' in convert[model])) {
+ throw new Error('missing channel labels property: ' + model);
+ }
+
+ if (convert[model].labels.length !== convert[model].channels) {
+ throw new Error('channel and label counts mismatch: ' + model);
+ }
+
+ const {channels, labels} = convert[model];
+ delete convert[model].channels;
+ delete convert[model].labels;
+ Object.defineProperty(convert[model], 'channels', {value: channels});
+ Object.defineProperty(convert[model], 'labels', {value: labels});
+}
+
+convert.rgb.hsl = function (rgb) {
+ const r = rgb[0] / 255;
+ const g = rgb[1] / 255;
+ const b = rgb[2] / 255;
+ const min = Math.min(r, g, b);
+ const max = Math.max(r, g, b);
+ const delta = max - min;
+ let h;
+ let s;
+
+ if (max === min) {
+ h = 0;
+ } else if (r === max) {
+ h = (g - b) / delta;
+ } else if (g === max) {
+ h = 2 + (b - r) / delta;
+ } else if (b === max) {
+ h = 4 + (r - g) / delta;
+ }
+
+ h = Math.min(h * 60, 360);
+
+ if (h < 0) {
+ h += 360;
+ }
+
+ const l = (min + max) / 2;
+
+ if (max === min) {
+ s = 0;
+ } else if (l <= 0.5) {
+ s = delta / (max + min);
+ } else {
+ s = delta / (2 - max - min);
+ }
+
+ return [h, s * 100, l * 100];
+};
+
+convert.rgb.hsv = function (rgb) {
+ let rdif;
+ let gdif;
+ let bdif;
+ let h;
+ let s;
+
+ const r = rgb[0] / 255;
+ const g = rgb[1] / 255;
+ const b = rgb[2] / 255;
+ const v = Math.max(r, g, b);
+ const diff = v - Math.min(r, g, b);
+ const diffc = function (c) {
+ return (v - c) / 6 / diff + 1 / 2;
+ };
+
+ if (diff === 0) {
+ h = 0;
+ s = 0;
+ } else {
+ s = diff / v;
+ rdif = diffc(r);
+ gdif = diffc(g);
+ bdif = diffc(b);
+
+ if (r === v) {
+ h = bdif - gdif;
+ } else if (g === v) {
+ h = (1 / 3) + rdif - bdif;
+ } else if (b === v) {
+ h = (2 / 3) + gdif - rdif;
+ }
+
+ if (h < 0) {
+ h += 1;
+ } else if (h > 1) {
+ h -= 1;
+ }
+ }
+
+ return [
+ h * 360,
+ s * 100,
+ v * 100
+ ];
+};
+
+convert.rgb.hwb = function (rgb) {
+ const r = rgb[0];
+ const g = rgb[1];
+ let b = rgb[2];
+ const h = convert.rgb.hsl(rgb)[0];
+ const w = 1 / 255 * Math.min(r, Math.min(g, b));
+
+ b = 1 - 1 / 255 * Math.max(r, Math.max(g, b));
+
+ return [h, w * 100, b * 100];
+};
+
+convert.rgb.cmyk = function (rgb) {
+ const r = rgb[0] / 255;
+ const g = rgb[1] / 255;
+ const b = rgb[2] / 255;
+
+ const k = Math.min(1 - r, 1 - g, 1 - b);
+ const c = (1 - r - k) / (1 - k) || 0;
+ const m = (1 - g - k) / (1 - k) || 0;
+ const y = (1 - b - k) / (1 - k) || 0;
+
+ return [c * 100, m * 100, y * 100, k * 100];
+};
+
+function comparativeDistance(x, y) {
+ /*
+ See https://en.m.wikipedia.org/wiki/Euclidean_distance#Squared_Euclidean_distance
+ */
+ return (
+ ((x[0] - y[0]) ** 2) +
+ ((x[1] - y[1]) ** 2) +
+ ((x[2] - y[2]) ** 2)
+ );
+}
+
+convert.rgb.keyword = function (rgb) {
+ const reversed = reverseKeywords[rgb];
+ if (reversed) {
+ return reversed;
+ }
+
+ let currentClosestDistance = Infinity;
+ let currentClosestKeyword;
+
+ for (const keyword of Object.keys(cssKeywords)) {
+ const value = cssKeywords[keyword];
+
+ // Compute comparative distance
+ const distance = comparativeDistance(rgb, value);
+
+ // Check if its less, if so set as closest
+ if (distance < currentClosestDistance) {
+ currentClosestDistance = distance;
+ currentClosestKeyword = keyword;
+ }
+ }
+
+ return currentClosestKeyword;
+};
+
+convert.keyword.rgb = function (keyword) {
+ return cssKeywords[keyword];
+};
+
+convert.rgb.xyz = function (rgb) {
+ let r = rgb[0] / 255;
+ let g = rgb[1] / 255;
+ let b = rgb[2] / 255;
+
+ // Assume sRGB
+ r = r > 0.04045 ? (((r + 0.055) / 1.055) ** 2.4) : (r / 12.92);
+ g = g > 0.04045 ? (((g + 0.055) / 1.055) ** 2.4) : (g / 12.92);
+ b = b > 0.04045 ? (((b + 0.055) / 1.055) ** 2.4) : (b / 12.92);
+
+ const x = (r * 0.4124) + (g * 0.3576) + (b * 0.1805);
+ const y = (r * 0.2126) + (g * 0.7152) + (b * 0.0722);
+ const z = (r * 0.0193) + (g * 0.1192) + (b * 0.9505);
+
+ return [x * 100, y * 100, z * 100];
+};
+
+convert.rgb.lab = function (rgb) {
+ const xyz = convert.rgb.xyz(rgb);
+ let x = xyz[0];
+ let y = xyz[1];
+ let z = xyz[2];
+
+ x /= 95.047;
+ y /= 100;
+ z /= 108.883;
+
+ x = x > 0.008856 ? (x ** (1 / 3)) : (7.787 * x) + (16 / 116);
+ y = y > 0.008856 ? (y ** (1 / 3)) : (7.787 * y) + (16 / 116);
+ z = z > 0.008856 ? (z ** (1 / 3)) : (7.787 * z) + (16 / 116);
+
+ const l = (116 * y) - 16;
+ const a = 500 * (x - y);
+ const b = 200 * (y - z);
+
+ return [l, a, b];
+};
+
+convert.hsl.rgb = function (hsl) {
+ const h = hsl[0] / 360;
+ const s = hsl[1] / 100;
+ const l = hsl[2] / 100;
+ let t2;
+ let t3;
+ let val;
+
+ if (s === 0) {
+ val = l * 255;
+ return [val, val, val];
+ }
+
+ if (l < 0.5) {
+ t2 = l * (1 + s);
+ } else {
+ t2 = l + s - l * s;
+ }
+
+ const t1 = 2 * l - t2;
+
+ const rgb = [0, 0, 0];
+ for (let i = 0; i < 3; i++) {
+ t3 = h + 1 / 3 * -(i - 1);
+ if (t3 < 0) {
+ t3++;
+ }
+
+ if (t3 > 1) {
+ t3--;
+ }
+
+ if (6 * t3 < 1) {
+ val = t1 + (t2 - t1) * 6 * t3;
+ } else if (2 * t3 < 1) {
+ val = t2;
+ } else if (3 * t3 < 2) {
+ val = t1 + (t2 - t1) * (2 / 3 - t3) * 6;
+ } else {
+ val = t1;
+ }
+
+ rgb[i] = val * 255;
+ }
+
+ return rgb;
+};
+
+convert.hsl.hsv = function (hsl) {
+ const h = hsl[0];
+ let s = hsl[1] / 100;
+ let l = hsl[2] / 100;
+ let smin = s;
+ const lmin = Math.max(l, 0.01);
+
+ l *= 2;
+ s *= (l <= 1) ? l : 2 - l;
+ smin *= lmin <= 1 ? lmin : 2 - lmin;
+ const v = (l + s) / 2;
+ const sv = l === 0 ? (2 * smin) / (lmin + smin) : (2 * s) / (l + s);
+
+ return [h, sv * 100, v * 100];
+};
+
+convert.hsv.rgb = function (hsv) {
+ const h = hsv[0] / 60;
+ const s = hsv[1] / 100;
+ let v = hsv[2] / 100;
+ const hi = Math.floor(h) % 6;
+
+ const f = h - Math.floor(h);
+ const p = 255 * v * (1 - s);
+ const q = 255 * v * (1 - (s * f));
+ const t = 255 * v * (1 - (s * (1 - f)));
+ v *= 255;
+
+ switch (hi) {
+ case 0:
+ return [v, t, p];
+ case 1:
+ return [q, v, p];
+ case 2:
+ return [p, v, t];
+ case 3:
+ return [p, q, v];
+ case 4:
+ return [t, p, v];
+ case 5:
+ return [v, p, q];
+ }
+};
+
+convert.hsv.hsl = function (hsv) {
+ const h = hsv[0];
+ const s = hsv[1] / 100;
+ const v = hsv[2] / 100;
+ const vmin = Math.max(v, 0.01);
+ let sl;
+ let l;
+
+ l = (2 - s) * v;
+ const lmin = (2 - s) * vmin;
+ sl = s * vmin;
+ sl /= (lmin <= 1) ? lmin : 2 - lmin;
+ sl = sl || 0;
+ l /= 2;
+
+ return [h, sl * 100, l * 100];
+};
+
+// http://dev.w3.org/csswg/css-color/#hwb-to-rgb
+convert.hwb.rgb = function (hwb) {
+ const h = hwb[0] / 360;
+ let wh = hwb[1] / 100;
+ let bl = hwb[2] / 100;
+ const ratio = wh + bl;
+ let f;
+
+ // Wh + bl cant be > 1
+ if (ratio > 1) {
+ wh /= ratio;
+ bl /= ratio;
+ }
+
+ const i = Math.floor(6 * h);
+ const v = 1 - bl;
+ f = 6 * h - i;
+
+ if ((i & 0x01) !== 0) {
+ f = 1 - f;
+ }
+
+ const n = wh + f * (v - wh); // Linear interpolation
+
+ let r;
+ let g;
+ let b;
+ /* eslint-disable max-statements-per-line,no-multi-spaces */
+ switch (i) {
+ default:
+ case 6:
+ case 0: r = v; g = n; b = wh; break;
+ case 1: r = n; g = v; b = wh; break;
+ case 2: r = wh; g = v; b = n; break;
+ case 3: r = wh; g = n; b = v; break;
+ case 4: r = n; g = wh; b = v; break;
+ case 5: r = v; g = wh; b = n; break;
+ }
+ /* eslint-enable max-statements-per-line,no-multi-spaces */
+
+ return [r * 255, g * 255, b * 255];
+};
+
+convert.cmyk.rgb = function (cmyk) {
+ const c = cmyk[0] / 100;
+ const m = cmyk[1] / 100;
+ const y = cmyk[2] / 100;
+ const k = cmyk[3] / 100;
+
+ const r = 1 - Math.min(1, c * (1 - k) + k);
+ const g = 1 - Math.min(1, m * (1 - k) + k);
+ const b = 1 - Math.min(1, y * (1 - k) + k);
+
+ return [r * 255, g * 255, b * 255];
+};
+
+convert.xyz.rgb = function (xyz) {
+ const x = xyz[0] / 100;
+ const y = xyz[1] / 100;
+ const z = xyz[2] / 100;
+ let r;
+ let g;
+ let b;
+
+ r = (x * 3.2406) + (y * -1.5372) + (z * -0.4986);
+ g = (x * -0.9689) + (y * 1.8758) + (z * 0.0415);
+ b = (x * 0.0557) + (y * -0.2040) + (z * 1.0570);
+
+ // Assume sRGB
+ r = r > 0.0031308
+ ? ((1.055 * (r ** (1.0 / 2.4))) - 0.055)
+ : r * 12.92;
+
+ g = g > 0.0031308
+ ? ((1.055 * (g ** (1.0 / 2.4))) - 0.055)
+ : g * 12.92;
+
+ b = b > 0.0031308
+ ? ((1.055 * (b ** (1.0 / 2.4))) - 0.055)
+ : b * 12.92;
+
+ r = Math.min(Math.max(0, r), 1);
+ g = Math.min(Math.max(0, g), 1);
+ b = Math.min(Math.max(0, b), 1);
+
+ return [r * 255, g * 255, b * 255];
+};
+
+convert.xyz.lab = function (xyz) {
+ let x = xyz[0];
+ let y = xyz[1];
+ let z = xyz[2];
+
+ x /= 95.047;
+ y /= 100;
+ z /= 108.883;
+
+ x = x > 0.008856 ? (x ** (1 / 3)) : (7.787 * x) + (16 / 116);
+ y = y > 0.008856 ? (y ** (1 / 3)) : (7.787 * y) + (16 / 116);
+ z = z > 0.008856 ? (z ** (1 / 3)) : (7.787 * z) + (16 / 116);
+
+ const l = (116 * y) - 16;
+ const a = 500 * (x - y);
+ const b = 200 * (y - z);
+
+ return [l, a, b];
+};
+
+convert.lab.xyz = function (lab) {
+ const l = lab[0];
+ const a = lab[1];
+ const b = lab[2];
+ let x;
+ let y;
+ let z;
+
+ y = (l + 16) / 116;
+ x = a / 500 + y;
+ z = y - b / 200;
+
+ const y2 = y ** 3;
+ const x2 = x ** 3;
+ const z2 = z ** 3;
+ y = y2 > 0.008856 ? y2 : (y - 16 / 116) / 7.787;
+ x = x2 > 0.008856 ? x2 : (x - 16 / 116) / 7.787;
+ z = z2 > 0.008856 ? z2 : (z - 16 / 116) / 7.787;
+
+ x *= 95.047;
+ y *= 100;
+ z *= 108.883;
+
+ return [x, y, z];
+};
+
+convert.lab.lch = function (lab) {
+ const l = lab[0];
+ const a = lab[1];
+ const b = lab[2];
+ let h;
+
+ const hr = Math.atan2(b, a);
+ h = hr * 360 / 2 / Math.PI;
+
+ if (h < 0) {
+ h += 360;
+ }
+
+ const c = Math.sqrt(a * a + b * b);
+
+ return [l, c, h];
+};
+
+convert.lch.lab = function (lch) {
+ const l = lch[0];
+ const c = lch[1];
+ const h = lch[2];
+
+ const hr = h / 360 * 2 * Math.PI;
+ const a = c * Math.cos(hr);
+ const b = c * Math.sin(hr);
+
+ return [l, a, b];
+};
+
+convert.rgb.ansi16 = function (args, saturation = null) {
+ const [r, g, b] = args;
+ let value = saturation === null ? convert.rgb.hsv(args)[2] : saturation; // Hsv -> ansi16 optimization
+
+ value = Math.round(value / 50);
+
+ if (value === 0) {
+ return 30;
+ }
+
+ let ansi = 30
+ + ((Math.round(b / 255) << 2)
+ | (Math.round(g / 255) << 1)
+ | Math.round(r / 255));
+
+ if (value === 2) {
+ ansi += 60;
+ }
+
+ return ansi;
+};
+
+convert.hsv.ansi16 = function (args) {
+ // Optimization here; we already know the value and don't need to get
+ // it converted for us.
+ return convert.rgb.ansi16(convert.hsv.rgb(args), args[2]);
+};
+
+convert.rgb.ansi256 = function (args) {
+ const r = args[0];
+ const g = args[1];
+ const b = args[2];
+
+ // We use the extended greyscale palette here, with the exception of
+ // black and white. normal palette only has 4 greyscale shades.
+ if (r === g && g === b) {
+ if (r < 8) {
+ return 16;
+ }
+
+ if (r > 248) {
+ return 231;
+ }
+
+ return Math.round(((r - 8) / 247) * 24) + 232;
+ }
+
+ const ansi = 16
+ + (36 * Math.round(r / 255 * 5))
+ + (6 * Math.round(g / 255 * 5))
+ + Math.round(b / 255 * 5);
+
+ return ansi;
+};
+
+convert.ansi16.rgb = function (args) {
+ let color = args % 10;
+
+ // Handle greyscale
+ if (color === 0 || color === 7) {
+ if (args > 50) {
+ color += 3.5;
+ }
+
+ color = color / 10.5 * 255;
+
+ return [color, color, color];
+ }
+
+ const mult = (~~(args > 50) + 1) * 0.5;
+ const r = ((color & 1) * mult) * 255;
+ const g = (((color >> 1) & 1) * mult) * 255;
+ const b = (((color >> 2) & 1) * mult) * 255;
+
+ return [r, g, b];
+};
+
+convert.ansi256.rgb = function (args) {
+ // Handle greyscale
+ if (args >= 232) {
+ const c = (args - 232) * 10 + 8;
+ return [c, c, c];
+ }
+
+ args -= 16;
+
+ let rem;
+ const r = Math.floor(args / 36) / 5 * 255;
+ const g = Math.floor((rem = args % 36) / 6) / 5 * 255;
+ const b = (rem % 6) / 5 * 255;
+
+ return [r, g, b];
+};
+
+convert.rgb.hex = function (args) {
+ const integer = ((Math.round(args[0]) & 0xFF) << 16)
+ + ((Math.round(args[1]) & 0xFF) << 8)
+ + (Math.round(args[2]) & 0xFF);
+
+ const string = integer.toString(16).toUpperCase();
+ return '000000'.substring(string.length) + string;
+};
+
+convert.hex.rgb = function (args) {
+ const match = args.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);
+ if (!match) {
+ return [0, 0, 0];
+ }
+
+ let colorString = match[0];
+
+ if (match[0].length === 3) {
+ colorString = colorString.split('').map(char => {
+ return char + char;
+ }).join('');
+ }
+
+ const integer = parseInt(colorString, 16);
+ const r = (integer >> 16) & 0xFF;
+ const g = (integer >> 8) & 0xFF;
+ const b = integer & 0xFF;
+
+ return [r, g, b];
+};
+
+convert.rgb.hcg = function (rgb) {
+ const r = rgb[0] / 255;
+ const g = rgb[1] / 255;
+ const b = rgb[2] / 255;
+ const max = Math.max(Math.max(r, g), b);
+ const min = Math.min(Math.min(r, g), b);
+ const chroma = (max - min);
+ let grayscale;
+ let hue;
+
+ if (chroma < 1) {
+ grayscale = min / (1 - chroma);
+ } else {
+ grayscale = 0;
+ }
+
+ if (chroma <= 0) {
+ hue = 0;
+ } else
+ if (max === r) {
+ hue = ((g - b) / chroma) % 6;
+ } else
+ if (max === g) {
+ hue = 2 + (b - r) / chroma;
+ } else {
+ hue = 4 + (r - g) / chroma;
+ }
+
+ hue /= 6;
+ hue %= 1;
+
+ return [hue * 360, chroma * 100, grayscale * 100];
+};
+
+convert.hsl.hcg = function (hsl) {
+ const s = hsl[1] / 100;
+ const l = hsl[2] / 100;
+
+ const c = l < 0.5 ? (2.0 * s * l) : (2.0 * s * (1.0 - l));
+
+ let f = 0;
+ if (c < 1.0) {
+ f = (l - 0.5 * c) / (1.0 - c);
+ }
+
+ return [hsl[0], c * 100, f * 100];
+};
+
+convert.hsv.hcg = function (hsv) {
+ const s = hsv[1] / 100;
+ const v = hsv[2] / 100;
+
+ const c = s * v;
+ let f = 0;
+
+ if (c < 1.0) {
+ f = (v - c) / (1 - c);
+ }
+
+ return [hsv[0], c * 100, f * 100];
+};
+
+convert.hcg.rgb = function (hcg) {
+ const h = hcg[0] / 360;
+ const c = hcg[1] / 100;
+ const g = hcg[2] / 100;
+
+ if (c === 0.0) {
+ return [g * 255, g * 255, g * 255];
+ }
+
+ const pure = [0, 0, 0];
+ const hi = (h % 1) * 6;
+ const v = hi % 1;
+ const w = 1 - v;
+ let mg = 0;
+
+ /* eslint-disable max-statements-per-line */
+ switch (Math.floor(hi)) {
+ case 0:
+ pure[0] = 1; pure[1] = v; pure[2] = 0; break;
+ case 1:
+ pure[0] = w; pure[1] = 1; pure[2] = 0; break;
+ case 2:
+ pure[0] = 0; pure[1] = 1; pure[2] = v; break;
+ case 3:
+ pure[0] = 0; pure[1] = w; pure[2] = 1; break;
+ case 4:
+ pure[0] = v; pure[1] = 0; pure[2] = 1; break;
+ default:
+ pure[0] = 1; pure[1] = 0; pure[2] = w;
+ }
+ /* eslint-enable max-statements-per-line */
+
+ mg = (1.0 - c) * g;
+
+ return [
+ (c * pure[0] + mg) * 255,
+ (c * pure[1] + mg) * 255,
+ (c * pure[2] + mg) * 255
+ ];
+};
+
+convert.hcg.hsv = function (hcg) {
+ const c = hcg[1] / 100;
+ const g = hcg[2] / 100;
+
+ const v = c + g * (1.0 - c);
+ let f = 0;
+
+ if (v > 0.0) {
+ f = c / v;
+ }
+
+ return [hcg[0], f * 100, v * 100];
+};
+
+convert.hcg.hsl = function (hcg) {
+ const c = hcg[1] / 100;
+ const g = hcg[2] / 100;
+
+ const l = g * (1.0 - c) + 0.5 * c;
+ let s = 0;
+
+ if (l > 0.0 && l < 0.5) {
+ s = c / (2 * l);
+ } else
+ if (l >= 0.5 && l < 1.0) {
+ s = c / (2 * (1 - l));
+ }
+
+ return [hcg[0], s * 100, l * 100];
+};
+
+convert.hcg.hwb = function (hcg) {
+ const c = hcg[1] / 100;
+ const g = hcg[2] / 100;
+ const v = c + g * (1.0 - c);
+ return [hcg[0], (v - c) * 100, (1 - v) * 100];
+};
+
+convert.hwb.hcg = function (hwb) {
+ const w = hwb[1] / 100;
+ const b = hwb[2] / 100;
+ const v = 1 - b;
+ const c = v - w;
+ let g = 0;
+
+ if (c < 1) {
+ g = (v - c) / (1 - c);
+ }
+
+ return [hwb[0], c * 100, g * 100];
+};
+
+convert.apple.rgb = function (apple) {
+ return [(apple[0] / 65535) * 255, (apple[1] / 65535) * 255, (apple[2] / 65535) * 255];
+};
+
+convert.rgb.apple = function (rgb) {
+ return [(rgb[0] / 255) * 65535, (rgb[1] / 255) * 65535, (rgb[2] / 255) * 65535];
+};
+
+convert.gray.rgb = function (args) {
+ return [args[0] / 100 * 255, args[0] / 100 * 255, args[0] / 100 * 255];
+};
+
+convert.gray.hsl = function (args) {
+ return [0, 0, args[0]];
+};
+
+convert.gray.hsv = convert.gray.hsl;
+
+convert.gray.hwb = function (gray) {
+ return [0, 100, gray[0]];
+};
+
+convert.gray.cmyk = function (gray) {
+ return [0, 0, 0, gray[0]];
+};
+
+convert.gray.lab = function (gray) {
+ return [gray[0], 0, 0];
+};
+
+convert.gray.hex = function (gray) {
+ const val = Math.round(gray[0] / 100 * 255) & 0xFF;
+ const integer = (val << 16) + (val << 8) + val;
+
+ const string = integer.toString(16).toUpperCase();
+ return '000000'.substring(string.length) + string;
+};
+
+convert.rgb.gray = function (rgb) {
+ const val = (rgb[0] + rgb[1] + rgb[2]) / 3;
+ return [val / 255 * 100];
+};
+
+
+/***/ }),
+
+/***/ 86931:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+const conversions = __nccwpck_require__(97391);
+const route = __nccwpck_require__(30880);
+
+const convert = {};
+
+const models = Object.keys(conversions);
+
+function wrapRaw(fn) {
+ const wrappedFn = function (...args) {
+ const arg0 = args[0];
+ if (arg0 === undefined || arg0 === null) {
+ return arg0;
+ }
+
+ if (arg0.length > 1) {
+ args = arg0;
+ }
+
+ return fn(args);
+ };
+
+ // Preserve .conversion property if there is one
+ if ('conversion' in fn) {
+ wrappedFn.conversion = fn.conversion;
+ }
+
+ return wrappedFn;
+}
+
+function wrapRounded(fn) {
+ const wrappedFn = function (...args) {
+ const arg0 = args[0];
+
+ if (arg0 === undefined || arg0 === null) {
+ return arg0;
+ }
+
+ if (arg0.length > 1) {
+ args = arg0;
+ }
+
+ const result = fn(args);
+
+ // We're assuming the result is an array here.
+ // see notice in conversions.js; don't use box types
+ // in conversion functions.
+ if (typeof result === 'object') {
+ for (let len = result.length, i = 0; i < len; i++) {
+ result[i] = Math.round(result[i]);
+ }
+ }
+
+ return result;
+ };
+
+ // Preserve .conversion property if there is one
+ if ('conversion' in fn) {
+ wrappedFn.conversion = fn.conversion;
+ }
+
+ return wrappedFn;
+}
+
+models.forEach(fromModel => {
+ convert[fromModel] = {};
+
+ Object.defineProperty(convert[fromModel], 'channels', {value: conversions[fromModel].channels});
+ Object.defineProperty(convert[fromModel], 'labels', {value: conversions[fromModel].labels});
+
+ const routes = route(fromModel);
+ const routeModels = Object.keys(routes);
+
+ routeModels.forEach(toModel => {
+ const fn = routes[toModel];
+
+ convert[fromModel][toModel] = wrapRounded(fn);
+ convert[fromModel][toModel].raw = wrapRaw(fn);
+ });
+});
+
+module.exports = convert;
+
+
+/***/ }),
+
+/***/ 30880:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+const conversions = __nccwpck_require__(97391);
+
+/*
+ This function routes a model to all other models.
+
+ all functions that are routed have a property `.conversion` attached
+ to the returned synthetic function. This property is an array
+ of strings, each with the steps in between the 'from' and 'to'
+ color models (inclusive).
+
+ conversions that are not possible simply are not included.
+*/
+
+function buildGraph() {
+ const graph = {};
+ // https://jsperf.com/object-keys-vs-for-in-with-closure/3
+ const models = Object.keys(conversions);
+
+ for (let len = models.length, i = 0; i < len; i++) {
+ graph[models[i]] = {
+ // http://jsperf.com/1-vs-infinity
+ // micro-opt, but this is simple.
+ distance: -1,
+ parent: null
+ };
+ }
+
+ return graph;
+}
+
+// https://en.wikipedia.org/wiki/Breadth-first_search
+function deriveBFS(fromModel) {
+ const graph = buildGraph();
+ const queue = [fromModel]; // Unshift -> queue -> pop
+
+ graph[fromModel].distance = 0;
+
+ while (queue.length) {
+ const current = queue.pop();
+ const adjacents = Object.keys(conversions[current]);
+
+ for (let len = adjacents.length, i = 0; i < len; i++) {
+ const adjacent = adjacents[i];
+ const node = graph[adjacent];
+
+ if (node.distance === -1) {
+ node.distance = graph[current].distance + 1;
+ node.parent = current;
+ queue.unshift(adjacent);
+ }
+ }
+ }
+
+ return graph;
+}
+
+function link(from, to) {
+ return function (args) {
+ return to(from(args));
+ };
+}
+
+function wrapConversion(toModel, graph) {
+ const path = [graph[toModel].parent, toModel];
+ let fn = conversions[graph[toModel].parent][toModel];
+
+ let cur = graph[toModel].parent;
+ while (graph[cur].parent) {
+ path.unshift(graph[cur].parent);
+ fn = link(conversions[graph[cur].parent][cur], fn);
+ cur = graph[cur].parent;
+ }
+
+ fn.conversion = path;
+ return fn;
+}
+
+module.exports = function (fromModel) {
+ const graph = deriveBFS(fromModel);
+ const conversion = {};
+
+ const models = Object.keys(graph);
+ for (let len = models.length, i = 0; i < len; i++) {
+ const toModel = models[i];
+ const node = graph[toModel];
+
+ if (node.parent === null) {
+ // No possible conversion, or this node is the source model.
+ continue;
+ }
+
+ conversion[toModel] = wrapConversion(toModel, graph);
+ }
+
+ return conversion;
+};
+
+
+
+/***/ }),
+
+/***/ 78510:
+/***/ ((module) => {
+
+"use strict";
+
+
+module.exports = {
+ "aliceblue": [240, 248, 255],
+ "antiquewhite": [250, 235, 215],
+ "aqua": [0, 255, 255],
+ "aquamarine": [127, 255, 212],
+ "azure": [240, 255, 255],
+ "beige": [245, 245, 220],
+ "bisque": [255, 228, 196],
+ "black": [0, 0, 0],
+ "blanchedalmond": [255, 235, 205],
+ "blue": [0, 0, 255],
+ "blueviolet": [138, 43, 226],
+ "brown": [165, 42, 42],
+ "burlywood": [222, 184, 135],
+ "cadetblue": [95, 158, 160],
+ "chartreuse": [127, 255, 0],
+ "chocolate": [210, 105, 30],
+ "coral": [255, 127, 80],
+ "cornflowerblue": [100, 149, 237],
+ "cornsilk": [255, 248, 220],
+ "crimson": [220, 20, 60],
+ "cyan": [0, 255, 255],
+ "darkblue": [0, 0, 139],
+ "darkcyan": [0, 139, 139],
+ "darkgoldenrod": [184, 134, 11],
+ "darkgray": [169, 169, 169],
+ "darkgreen": [0, 100, 0],
+ "darkgrey": [169, 169, 169],
+ "darkkhaki": [189, 183, 107],
+ "darkmagenta": [139, 0, 139],
+ "darkolivegreen": [85, 107, 47],
+ "darkorange": [255, 140, 0],
+ "darkorchid": [153, 50, 204],
+ "darkred": [139, 0, 0],
+ "darksalmon": [233, 150, 122],
+ "darkseagreen": [143, 188, 143],
+ "darkslateblue": [72, 61, 139],
+ "darkslategray": [47, 79, 79],
+ "darkslategrey": [47, 79, 79],
+ "darkturquoise": [0, 206, 209],
+ "darkviolet": [148, 0, 211],
+ "deeppink": [255, 20, 147],
+ "deepskyblue": [0, 191, 255],
+ "dimgray": [105, 105, 105],
+ "dimgrey": [105, 105, 105],
+ "dodgerblue": [30, 144, 255],
+ "firebrick": [178, 34, 34],
+ "floralwhite": [255, 250, 240],
+ "forestgreen": [34, 139, 34],
+ "fuchsia": [255, 0, 255],
+ "gainsboro": [220, 220, 220],
+ "ghostwhite": [248, 248, 255],
+ "gold": [255, 215, 0],
+ "goldenrod": [218, 165, 32],
+ "gray": [128, 128, 128],
+ "green": [0, 128, 0],
+ "greenyellow": [173, 255, 47],
+ "grey": [128, 128, 128],
+ "honeydew": [240, 255, 240],
+ "hotpink": [255, 105, 180],
+ "indianred": [205, 92, 92],
+ "indigo": [75, 0, 130],
+ "ivory": [255, 255, 240],
+ "khaki": [240, 230, 140],
+ "lavender": [230, 230, 250],
+ "lavenderblush": [255, 240, 245],
+ "lawngreen": [124, 252, 0],
+ "lemonchiffon": [255, 250, 205],
+ "lightblue": [173, 216, 230],
+ "lightcoral": [240, 128, 128],
+ "lightcyan": [224, 255, 255],
+ "lightgoldenrodyellow": [250, 250, 210],
+ "lightgray": [211, 211, 211],
+ "lightgreen": [144, 238, 144],
+ "lightgrey": [211, 211, 211],
+ "lightpink": [255, 182, 193],
+ "lightsalmon": [255, 160, 122],
+ "lightseagreen": [32, 178, 170],
+ "lightskyblue": [135, 206, 250],
+ "lightslategray": [119, 136, 153],
+ "lightslategrey": [119, 136, 153],
+ "lightsteelblue": [176, 196, 222],
+ "lightyellow": [255, 255, 224],
+ "lime": [0, 255, 0],
+ "limegreen": [50, 205, 50],
+ "linen": [250, 240, 230],
+ "magenta": [255, 0, 255],
+ "maroon": [128, 0, 0],
+ "mediumaquamarine": [102, 205, 170],
+ "mediumblue": [0, 0, 205],
+ "mediumorchid": [186, 85, 211],
+ "mediumpurple": [147, 112, 219],
+ "mediumseagreen": [60, 179, 113],
+ "mediumslateblue": [123, 104, 238],
+ "mediumspringgreen": [0, 250, 154],
+ "mediumturquoise": [72, 209, 204],
+ "mediumvioletred": [199, 21, 133],
+ "midnightblue": [25, 25, 112],
+ "mintcream": [245, 255, 250],
+ "mistyrose": [255, 228, 225],
+ "moccasin": [255, 228, 181],
+ "navajowhite": [255, 222, 173],
+ "navy": [0, 0, 128],
+ "oldlace": [253, 245, 230],
+ "olive": [128, 128, 0],
+ "olivedrab": [107, 142, 35],
+ "orange": [255, 165, 0],
+ "orangered": [255, 69, 0],
+ "orchid": [218, 112, 214],
+ "palegoldenrod": [238, 232, 170],
+ "palegreen": [152, 251, 152],
+ "paleturquoise": [175, 238, 238],
+ "palevioletred": [219, 112, 147],
+ "papayawhip": [255, 239, 213],
+ "peachpuff": [255, 218, 185],
+ "peru": [205, 133, 63],
+ "pink": [255, 192, 203],
+ "plum": [221, 160, 221],
+ "powderblue": [176, 224, 230],
+ "purple": [128, 0, 128],
+ "rebeccapurple": [102, 51, 153],
+ "red": [255, 0, 0],
+ "rosybrown": [188, 143, 143],
+ "royalblue": [65, 105, 225],
+ "saddlebrown": [139, 69, 19],
+ "salmon": [250, 128, 114],
+ "sandybrown": [244, 164, 96],
+ "seagreen": [46, 139, 87],
+ "seashell": [255, 245, 238],
+ "sienna": [160, 82, 45],
+ "silver": [192, 192, 192],
+ "skyblue": [135, 206, 235],
+ "slateblue": [106, 90, 205],
+ "slategray": [112, 128, 144],
+ "slategrey": [112, 128, 144],
+ "snow": [255, 250, 250],
+ "springgreen": [0, 255, 127],
+ "steelblue": [70, 130, 180],
+ "tan": [210, 180, 140],
+ "teal": [0, 128, 128],
+ "thistle": [216, 191, 216],
+ "tomato": [255, 99, 71],
+ "turquoise": [64, 224, 208],
+ "violet": [238, 130, 238],
+ "wheat": [245, 222, 179],
+ "white": [255, 255, 255],
+ "whitesmoke": [245, 245, 245],
+ "yellow": [255, 255, 0],
+ "yellowgreen": [154, 205, 50]
+};
+
+
+/***/ }),
+
+/***/ 58932:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+
+class Deprecation extends Error {
+ constructor(message) {
+ super(message); // Maintains proper stack trace (only available on V8)
+
+ /* istanbul ignore next */
+
+ if (Error.captureStackTrace) {
+ Error.captureStackTrace(this, this.constructor);
+ }
+
+ this.name = 'Deprecation';
+ }
+
+}
+
+exports.Deprecation = Deprecation;
+
+
+/***/ }),
+
+/***/ 32859:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+/*istanbul ignore start*/
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.convertChangesToDMP = convertChangesToDMP;
+
+/*istanbul ignore end*/
+// See: http://code.google.com/p/google-diff-match-patch/wiki/API
+function convertChangesToDMP(changes) {
+ var ret = [],
+ change,
+ operation;
+
+ for (var i = 0; i < changes.length; i++) {
+ change = changes[i];
+
+ if (change.added) {
+ operation = 1;
+ } else if (change.removed) {
+ operation = -1;
+ } else {
+ operation = 0;
+ }
+
+ ret.push([operation, change.value]);
+ }
+
+ return ret;
+}
+//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb252ZXJ0L2RtcC5qcyJdLCJuYW1lcyI6WyJjb252ZXJ0Q2hhbmdlc1RvRE1QIiwiY2hhbmdlcyIsInJldCIsImNoYW5nZSIsIm9wZXJhdGlvbiIsImkiLCJsZW5ndGgiLCJhZGRlZCIsInJlbW92ZWQiLCJwdXNoIiwidmFsdWUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBO0FBQ08sU0FBU0EsbUJBQVQsQ0FBNkJDLE9BQTdCLEVBQXNDO0FBQzNDLE1BQUlDLEdBQUcsR0FBRyxFQUFWO0FBQUEsTUFDSUMsTUFESjtBQUFBLE1BRUlDLFNBRko7O0FBR0EsT0FBSyxJQUFJQyxDQUFDLEdBQUcsQ0FBYixFQUFnQkEsQ0FBQyxHQUFHSixPQUFPLENBQUNLLE1BQTVCLEVBQW9DRCxDQUFDLEVBQXJDLEVBQXlDO0FBQ3ZDRixJQUFBQSxNQUFNLEdBQUdGLE9BQU8sQ0FBQ0ksQ0FBRCxDQUFoQjs7QUFDQSxRQUFJRixNQUFNLENBQUNJLEtBQVgsRUFBa0I7QUFDaEJILE1BQUFBLFNBQVMsR0FBRyxDQUFaO0FBQ0QsS0FGRCxNQUVPLElBQUlELE1BQU0sQ0FBQ0ssT0FBWCxFQUFvQjtBQUN6QkosTUFBQUEsU0FBUyxHQUFHLENBQUMsQ0FBYjtBQUNELEtBRk0sTUFFQTtBQUNMQSxNQUFBQSxTQUFTLEdBQUcsQ0FBWjtBQUNEOztBQUVERixJQUFBQSxHQUFHLENBQUNPLElBQUosQ0FBUyxDQUFDTCxTQUFELEVBQVlELE1BQU0sQ0FBQ08sS0FBbkIsQ0FBVDtBQUNEOztBQUNELFNBQU9SLEdBQVA7QUFDRCIsInNvdXJjZXNDb250ZW50IjpbIi8vIFNlZTogaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2dvb2dsZS1kaWZmLW1hdGNoLXBhdGNoL3dpa2kvQVBJXG5leHBvcnQgZnVuY3Rpb24gY29udmVydENoYW5nZXNUb0RNUChjaGFuZ2VzKSB7XG4gIGxldCByZXQgPSBbXSxcbiAgICAgIGNoYW5nZSxcbiAgICAgIG9wZXJhdGlvbjtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaGFuZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgY2hhbmdlID0gY2hhbmdlc1tpXTtcbiAgICBpZiAoY2hhbmdlLmFkZGVkKSB7XG4gICAgICBvcGVyYXRpb24gPSAxO1xuICAgIH0gZWxzZSBpZiAoY2hhbmdlLnJlbW92ZWQpIHtcbiAgICAgIG9wZXJhdGlvbiA9IC0xO1xuICAgIH0gZWxzZSB7XG4gICAgICBvcGVyYXRpb24gPSAwO1xuICAgIH1cblxuICAgIHJldC5wdXNoKFtvcGVyYXRpb24sIGNoYW5nZS52YWx1ZV0pO1xuICB9XG4gIHJldHVybiByZXQ7XG59XG4iXX0=
+
+
+/***/ }),
+
+/***/ 16982:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+/*istanbul ignore start*/
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.convertChangesToXML = convertChangesToXML;
+
+/*istanbul ignore end*/
+function convertChangesToXML(changes) {
+ var ret = [];
+
+ for (var i = 0; i < changes.length; i++) {
+ var change = changes[i];
+
+ if (change.added) {
+ ret.push('');
+ } else if (change.removed) {
+ ret.push('');
+ }
+
+ ret.push(escapeHTML(change.value));
+
+ if (change.added) {
+ ret.push('');
+ } else if (change.removed) {
+ ret.push('');
+ }
+ }
+
+ return ret.join('');
+}
+
+function escapeHTML(s) {
+ var n = s;
+ n = n.replace(/&/g, '&');
+ n = n.replace(//g, '>');
+ n = n.replace(/"/g, '"');
+ return n;
+}
+//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb252ZXJ0L3htbC5qcyJdLCJuYW1lcyI6WyJjb252ZXJ0Q2hhbmdlc1RvWE1MIiwiY2hhbmdlcyIsInJldCIsImkiLCJsZW5ndGgiLCJjaGFuZ2UiLCJhZGRlZCIsInB1c2giLCJyZW1vdmVkIiwiZXNjYXBlSFRNTCIsInZhbHVlIiwiam9pbiIsInMiLCJuIiwicmVwbGFjZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQU8sU0FBU0EsbUJBQVQsQ0FBNkJDLE9BQTdCLEVBQXNDO0FBQzNDLE1BQUlDLEdBQUcsR0FBRyxFQUFWOztBQUNBLE9BQUssSUFBSUMsQ0FBQyxHQUFHLENBQWIsRUFBZ0JBLENBQUMsR0FBR0YsT0FBTyxDQUFDRyxNQUE1QixFQUFvQ0QsQ0FBQyxFQUFyQyxFQUF5QztBQUN2QyxRQUFJRSxNQUFNLEdBQUdKLE9BQU8sQ0FBQ0UsQ0FBRCxDQUFwQjs7QUFDQSxRQUFJRSxNQUFNLENBQUNDLEtBQVgsRUFBa0I7QUFDaEJKLE1BQUFBLEdBQUcsQ0FBQ0ssSUFBSixDQUFTLE9BQVQ7QUFDRCxLQUZELE1BRU8sSUFBSUYsTUFBTSxDQUFDRyxPQUFYLEVBQW9CO0FBQ3pCTixNQUFBQSxHQUFHLENBQUNLLElBQUosQ0FBUyxPQUFUO0FBQ0Q7O0FBRURMLElBQUFBLEdBQUcsQ0FBQ0ssSUFBSixDQUFTRSxVQUFVLENBQUNKLE1BQU0sQ0FBQ0ssS0FBUixDQUFuQjs7QUFFQSxRQUFJTCxNQUFNLENBQUNDLEtBQVgsRUFBa0I7QUFDaEJKLE1BQUFBLEdBQUcsQ0FBQ0ssSUFBSixDQUFTLFFBQVQ7QUFDRCxLQUZELE1BRU8sSUFBSUYsTUFBTSxDQUFDRyxPQUFYLEVBQW9CO0FBQ3pCTixNQUFBQSxHQUFHLENBQUNLLElBQUosQ0FBUyxRQUFUO0FBQ0Q7QUFDRjs7QUFDRCxTQUFPTCxHQUFHLENBQUNTLElBQUosQ0FBUyxFQUFULENBQVA7QUFDRDs7QUFFRCxTQUFTRixVQUFULENBQW9CRyxDQUFwQixFQUF1QjtBQUNyQixNQUFJQyxDQUFDLEdBQUdELENBQVI7QUFDQUMsRUFBQUEsQ0FBQyxHQUFHQSxDQUFDLENBQUNDLE9BQUYsQ0FBVSxJQUFWLEVBQWdCLE9BQWhCLENBQUo7QUFDQUQsRUFBQUEsQ0FBQyxHQUFHQSxDQUFDLENBQUNDLE9BQUYsQ0FBVSxJQUFWLEVBQWdCLE1BQWhCLENBQUo7QUFDQUQsRUFBQUEsQ0FBQyxHQUFHQSxDQUFDLENBQUNDLE9BQUYsQ0FBVSxJQUFWLEVBQWdCLE1BQWhCLENBQUo7QUFDQUQsRUFBQUEsQ0FBQyxHQUFHQSxDQUFDLENBQUNDLE9BQUYsQ0FBVSxJQUFWLEVBQWdCLFFBQWhCLENBQUo7QUFFQSxTQUFPRCxDQUFQO0FBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gY29udmVydENoYW5nZXNUb1hNTChjaGFuZ2VzKSB7XG4gIGxldCByZXQgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaGFuZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgbGV0IGNoYW5nZSA9IGNoYW5nZXNbaV07XG4gICAgaWYgKGNoYW5nZS5hZGRlZCkge1xuICAgICAgcmV0LnB1c2goJzxpbnM+Jyk7XG4gICAgfSBlbHNlIGlmIChjaGFuZ2UucmVtb3ZlZCkge1xuICAgICAgcmV0LnB1c2goJzxkZWw+Jyk7XG4gICAgfVxuXG4gICAgcmV0LnB1c2goZXNjYXBlSFRNTChjaGFuZ2UudmFsdWUpKTtcblxuICAgIGlmIChjaGFuZ2UuYWRkZWQpIHtcbiAgICAgIHJldC5wdXNoKCc8L2lucz4nKTtcbiAgICB9IGVsc2UgaWYgKGNoYW5nZS5yZW1vdmVkKSB7XG4gICAgICByZXQucHVzaCgnPC9kZWw+Jyk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXQuam9pbignJyk7XG59XG5cbmZ1bmN0aW9uIGVzY2FwZUhUTUwocykge1xuICBsZXQgbiA9IHM7XG4gIG4gPSBuLnJlcGxhY2UoLyYvZywgJyZhbXA7Jyk7XG4gIG4gPSBuLnJlcGxhY2UoLzwvZywgJyZsdDsnKTtcbiAgbiA9IG4ucmVwbGFjZSgvPi9nLCAnJmd0OycpO1xuICBuID0gbi5yZXBsYWNlKC9cIi9nLCAnJnF1b3Q7Jyk7XG5cbiAgcmV0dXJuIG47XG59XG4iXX0=
+
+
+/***/ }),
+
+/***/ 70546:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+/*istanbul ignore start*/
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.diffArrays = diffArrays;
+exports.arrayDiff = void 0;
+
+/*istanbul ignore end*/
+var
+/*istanbul ignore start*/
+_base = _interopRequireDefault(__nccwpck_require__(21653))
+/*istanbul ignore end*/
+;
+
+/*istanbul ignore start*/ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
+
+/*istanbul ignore end*/
+var arrayDiff = new
+/*istanbul ignore start*/
+_base
+/*istanbul ignore end*/
+[
+/*istanbul ignore start*/
+"default"
+/*istanbul ignore end*/
+]();
+
+/*istanbul ignore start*/
+exports.arrayDiff = arrayDiff;
+
+/*istanbul ignore end*/
+arrayDiff.tokenize = function (value) {
+ return value.slice();
+};
+
+arrayDiff.join = arrayDiff.removeEmpty = function (value) {
+ return value;
+};
+
+function diffArrays(oldArr, newArr, callback) {
+ return arrayDiff.diff(oldArr, newArr, callback);
+}
+//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kaWZmL2FycmF5LmpzIl0sIm5hbWVzIjpbImFycmF5RGlmZiIsIkRpZmYiLCJ0b2tlbml6ZSIsInZhbHVlIiwic2xpY2UiLCJqb2luIiwicmVtb3ZlRW1wdHkiLCJkaWZmQXJyYXlzIiwib2xkQXJyIiwibmV3QXJyIiwiY2FsbGJhY2siLCJkaWZmIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7Ozs7QUFFTyxJQUFNQSxTQUFTLEdBQUc7QUFBSUM7QUFBQUE7QUFBQUE7QUFBQUE7QUFBQUE7QUFBQUE7QUFBQUE7QUFBQUEsQ0FBSixFQUFsQjs7Ozs7O0FBQ1BELFNBQVMsQ0FBQ0UsUUFBVixHQUFxQixVQUFTQyxLQUFULEVBQWdCO0FBQ25DLFNBQU9BLEtBQUssQ0FBQ0MsS0FBTixFQUFQO0FBQ0QsQ0FGRDs7QUFHQUosU0FBUyxDQUFDSyxJQUFWLEdBQWlCTCxTQUFTLENBQUNNLFdBQVYsR0FBd0IsVUFBU0gsS0FBVCxFQUFnQjtBQUN2RCxTQUFPQSxLQUFQO0FBQ0QsQ0FGRDs7QUFJTyxTQUFTSSxVQUFULENBQW9CQyxNQUFwQixFQUE0QkMsTUFBNUIsRUFBb0NDLFFBQXBDLEVBQThDO0FBQUUsU0FBT1YsU0FBUyxDQUFDVyxJQUFWLENBQWVILE1BQWYsRUFBdUJDLE1BQXZCLEVBQStCQyxRQUEvQixDQUFQO0FBQWtEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IERpZmYgZnJvbSAnLi9iYXNlJztcblxuZXhwb3J0IGNvbnN0IGFycmF5RGlmZiA9IG5ldyBEaWZmKCk7XG5hcnJheURpZmYudG9rZW5pemUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUuc2xpY2UoKTtcbn07XG5hcnJheURpZmYuam9pbiA9IGFycmF5RGlmZi5yZW1vdmVFbXB0eSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBkaWZmQXJyYXlzKG9sZEFyciwgbmV3QXJyLCBjYWxsYmFjaykgeyByZXR1cm4gYXJyYXlEaWZmLmRpZmYob2xkQXJyLCBuZXdBcnIsIGNhbGxiYWNrKTsgfVxuIl19
+
+
+/***/ }),
+
+/***/ 21653:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+/*istanbul ignore start*/
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports["default"] = Diff;
+
+/*istanbul ignore end*/
+function Diff() {}
+
+Diff.prototype = {
+ /*istanbul ignore start*/
+
+ /*istanbul ignore end*/
+ diff: function diff(oldString, newString) {
+ /*istanbul ignore start*/
+ var
+ /*istanbul ignore end*/
+ options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
+ var callback = options.callback;
+
+ if (typeof options === 'function') {
+ callback = options;
+ options = {};
+ }
+
+ this.options = options;
+ var self = this;
+
+ function done(value) {
+ if (callback) {
+ setTimeout(function () {
+ callback(undefined, value);
+ }, 0);
+ return true;
+ } else {
+ return value;
+ }
+ } // Allow subclasses to massage the input prior to running
+
+
+ oldString = this.castInput(oldString);
+ newString = this.castInput(newString);
+ oldString = this.removeEmpty(this.tokenize(oldString));
+ newString = this.removeEmpty(this.tokenize(newString));
+ var newLen = newString.length,
+ oldLen = oldString.length;
+ var editLength = 1;
+ var maxEditLength = newLen + oldLen;
+
+ if (options.maxEditLength) {
+ maxEditLength = Math.min(maxEditLength, options.maxEditLength);
+ }
+
+ var bestPath = [{
+ newPos: -1,
+ components: []
+ }]; // Seed editLength = 0, i.e. the content starts with the same values
+
+ var oldPos = this.extractCommon(bestPath[0], newString, oldString, 0);
+
+ if (bestPath[0].newPos + 1 >= newLen && oldPos + 1 >= oldLen) {
+ // Identity per the equality and tokenizer
+ return done([{
+ value: this.join(newString),
+ count: newString.length
+ }]);
+ } // Main worker method. checks all permutations of a given edit length for acceptance.
+
+
+ function execEditLength() {
+ for (var diagonalPath = -1 * editLength; diagonalPath <= editLength; diagonalPath += 2) {
+ var basePath =
+ /*istanbul ignore start*/
+ void 0
+ /*istanbul ignore end*/
+ ;
+
+ var addPath = bestPath[diagonalPath - 1],
+ removePath = bestPath[diagonalPath + 1],
+ _oldPos = (removePath ? removePath.newPos : 0) - diagonalPath;
+
+ if (addPath) {
+ // No one else is going to attempt to use this value, clear it
+ bestPath[diagonalPath - 1] = undefined;
+ }
+
+ var canAdd = addPath && addPath.newPos + 1 < newLen,
+ canRemove = removePath && 0 <= _oldPos && _oldPos < oldLen;
+
+ if (!canAdd && !canRemove) {
+ // If this path is a terminal then prune
+ bestPath[diagonalPath] = undefined;
+ continue;
+ } // Select the diagonal that we want to branch from. We select the prior
+ // path whose position in the new string is the farthest from the origin
+ // and does not pass the bounds of the diff graph
+
+
+ if (!canAdd || canRemove && addPath.newPos < removePath.newPos) {
+ basePath = clonePath(removePath);
+ self.pushComponent(basePath.components, undefined, true);
+ } else {
+ basePath = addPath; // No need to clone, we've pulled it from the list
+
+ basePath.newPos++;
+ self.pushComponent(basePath.components, true, undefined);
+ }
+
+ _oldPos = self.extractCommon(basePath, newString, oldString, diagonalPath); // If we have hit the end of both strings, then we are done
+
+ if (basePath.newPos + 1 >= newLen && _oldPos + 1 >= oldLen) {
+ return done(buildValues(self, basePath.components, newString, oldString, self.useLongestToken));
+ } else {
+ // Otherwise track this path as a potential candidate and continue.
+ bestPath[diagonalPath] = basePath;
+ }
+ }
+
+ editLength++;
+ } // Performs the length of edit iteration. Is a bit fugly as this has to support the
+ // sync and async mode which is never fun. Loops over execEditLength until a value
+ // is produced, or until the edit length exceeds options.maxEditLength (if given),
+ // in which case it will return undefined.
+
+
+ if (callback) {
+ (function exec() {
+ setTimeout(function () {
+ if (editLength > maxEditLength) {
+ return callback();
+ }
+
+ if (!execEditLength()) {
+ exec();
+ }
+ }, 0);
+ })();
+ } else {
+ while (editLength <= maxEditLength) {
+ var ret = execEditLength();
+
+ if (ret) {
+ return ret;
+ }
+ }
+ }
+ },
+
+ /*istanbul ignore start*/
+
+ /*istanbul ignore end*/
+ pushComponent: function pushComponent(components, added, removed) {
+ var last = components[components.length - 1];
+
+ if (last && last.added === added && last.removed === removed) {
+ // We need to clone here as the component clone operation is just
+ // as shallow array clone
+ components[components.length - 1] = {
+ count: last.count + 1,
+ added: added,
+ removed: removed
+ };
+ } else {
+ components.push({
+ count: 1,
+ added: added,
+ removed: removed
+ });
+ }
+ },
+
+ /*istanbul ignore start*/
+
+ /*istanbul ignore end*/
+ extractCommon: function extractCommon(basePath, newString, oldString, diagonalPath) {
+ var newLen = newString.length,
+ oldLen = oldString.length,
+ newPos = basePath.newPos,
+ oldPos = newPos - diagonalPath,
+ commonCount = 0;
+
+ while (newPos + 1 < newLen && oldPos + 1 < oldLen && this.equals(newString[newPos + 1], oldString[oldPos + 1])) {
+ newPos++;
+ oldPos++;
+ commonCount++;
+ }
+
+ if (commonCount) {
+ basePath.components.push({
+ count: commonCount
+ });
+ }
+
+ basePath.newPos = newPos;
+ return oldPos;
+ },
+
+ /*istanbul ignore start*/
+
+ /*istanbul ignore end*/
+ equals: function equals(left, right) {
+ if (this.options.comparator) {
+ return this.options.comparator(left, right);
+ } else {
+ return left === right || this.options.ignoreCase && left.toLowerCase() === right.toLowerCase();
+ }
+ },
+
+ /*istanbul ignore start*/
+
+ /*istanbul ignore end*/
+ removeEmpty: function removeEmpty(array) {
+ var ret = [];
+
+ for (var i = 0; i < array.length; i++) {
+ if (array[i]) {
+ ret.push(array[i]);
+ }
+ }
+
+ return ret;
+ },
+
+ /*istanbul ignore start*/
+
+ /*istanbul ignore end*/
+ castInput: function castInput(value) {
+ return value;
+ },
+
+ /*istanbul ignore start*/
+
+ /*istanbul ignore end*/
+ tokenize: function tokenize(value) {
+ return value.split('');
+ },
+
+ /*istanbul ignore start*/
+
+ /*istanbul ignore end*/
+ join: function join(chars) {
+ return chars.join('');
+ }
+};
+
+function buildValues(diff, components, newString, oldString, useLongestToken) {
+ var componentPos = 0,
+ componentLen = components.length,
+ newPos = 0,
+ oldPos = 0;
+
+ for (; componentPos < componentLen; componentPos++) {
+ var component = components[componentPos];
+
+ if (!component.removed) {
+ if (!component.added && useLongestToken) {
+ var value = newString.slice(newPos, newPos + component.count);
+ value = value.map(function (value, i) {
+ var oldValue = oldString[oldPos + i];
+ return oldValue.length > value.length ? oldValue : value;
+ });
+ component.value = diff.join(value);
+ } else {
+ component.value = diff.join(newString.slice(newPos, newPos + component.count));
+ }
+
+ newPos += component.count; // Common case
+
+ if (!component.added) {
+ oldPos += component.count;
+ }
+ } else {
+ component.value = diff.join(oldString.slice(oldPos, oldPos + component.count));
+ oldPos += component.count; // Reverse add and remove so removes are output first to match common convention
+ // The diffing algorithm is tied to add then remove output and this is the simplest
+ // route to get the desired output with minimal overhead.
+
+ if (componentPos && components[componentPos - 1].added) {
+ var tmp = components[componentPos - 1];
+ components[componentPos - 1] = components[componentPos];
+ components[componentPos] = tmp;
+ }
+ }
+ } // Special case handle for when one terminal is ignored (i.e. whitespace).
+ // For this case we merge the terminal into the prior string and drop the change.
+ // This is only available for string mode.
+
+
+ var lastComponent = components[componentLen - 1];
+
+ if (componentLen > 1 && typeof lastComponent.value === 'string' && (lastComponent.added || lastComponent.removed) && diff.equals('', lastComponent.value)) {
+ components[componentLen - 2].value += lastComponent.value;
+ components.pop();
+ }
+
+ return components;
+}
+
+function clonePath(path) {
+ return {
+ newPos: path.newPos,
+ components: path.components.slice(0)
+ };
+}
+//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kaWZmL2Jhc2UuanMiXSwibmFtZXMiOlsiRGlmZiIsInByb3RvdHlwZSIsImRpZmYiLCJvbGRTdHJpbmciLCJuZXdTdHJpbmciLCJvcHRpb25zIiwiY2FsbGJhY2siLCJzZWxmIiwiZG9uZSIsInZhbHVlIiwic2V0VGltZW91dCIsInVuZGVmaW5lZCIsImNhc3RJbnB1dCIsInJlbW92ZUVtcHR5IiwidG9rZW5pemUiLCJuZXdMZW4iLCJsZW5ndGgiLCJvbGRMZW4iLCJlZGl0TGVuZ3RoIiwibWF4RWRpdExlbmd0aCIsIk1hdGgiLCJtaW4iLCJiZXN0UGF0aCIsIm5ld1BvcyIsImNvbXBvbmVudHMiLCJvbGRQb3MiLCJleHRyYWN0Q29tbW9uIiwiam9pbiIsImNvdW50IiwiZXhlY0VkaXRMZW5ndGgiLCJkaWFnb25hbFBhdGgiLCJiYXNlUGF0aCIsImFkZFBhdGgiLCJyZW1vdmVQYXRoIiwiY2FuQWRkIiwiY2FuUmVtb3ZlIiwiY2xvbmVQYXRoIiwicHVzaENvbXBvbmVudCIsImJ1aWxkVmFsdWVzIiwidXNlTG9uZ2VzdFRva2VuIiwiZXhlYyIsInJldCIsImFkZGVkIiwicmVtb3ZlZCIsImxhc3QiLCJwdXNoIiwiY29tbW9uQ291bnQiLCJlcXVhbHMiLCJsZWZ0IiwicmlnaHQiLCJjb21wYXJhdG9yIiwiaWdub3JlQ2FzZSIsInRvTG93ZXJDYXNlIiwiYXJyYXkiLCJpIiwic3BsaXQiLCJjaGFycyIsImNvbXBvbmVudFBvcyIsImNvbXBvbmVudExlbiIsImNvbXBvbmVudCIsInNsaWNlIiwibWFwIiwib2xkVmFsdWUiLCJ0bXAiLCJsYXN0Q29tcG9uZW50IiwicG9wIiwicGF0aCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQWUsU0FBU0EsSUFBVCxHQUFnQixDQUFFOztBQUVqQ0EsSUFBSSxDQUFDQyxTQUFMLEdBQWlCO0FBQUE7O0FBQUE7QUFDZkMsRUFBQUEsSUFEZSxnQkFDVkMsU0FEVSxFQUNDQyxTQURELEVBQzBCO0FBQUE7QUFBQTtBQUFBO0FBQWRDLElBQUFBLE9BQWMsdUVBQUosRUFBSTtBQUN2QyxRQUFJQyxRQUFRLEdBQUdELE9BQU8sQ0FBQ0MsUUFBdkI7O0FBQ0EsUUFBSSxPQUFPRCxPQUFQLEtBQW1CLFVBQXZCLEVBQW1DO0FBQ2pDQyxNQUFBQSxRQUFRLEdBQUdELE9BQVg7QUFDQUEsTUFBQUEsT0FBTyxHQUFHLEVBQVY7QUFDRDs7QUFDRCxTQUFLQSxPQUFMLEdBQWVBLE9BQWY7QUFFQSxRQUFJRSxJQUFJLEdBQUcsSUFBWDs7QUFFQSxhQUFTQyxJQUFULENBQWNDLEtBQWQsRUFBcUI7QUFDbkIsVUFBSUgsUUFBSixFQUFjO0FBQ1pJLFFBQUFBLFVBQVUsQ0FBQyxZQUFXO0FBQUVKLFVBQUFBLFFBQVEsQ0FBQ0ssU0FBRCxFQUFZRixLQUFaLENBQVI7QUFBNkIsU0FBM0MsRUFBNkMsQ0FBN0MsQ0FBVjtBQUNBLGVBQU8sSUFBUDtBQUNELE9BSEQsTUFHTztBQUNMLGVBQU9BLEtBQVA7QUFDRDtBQUNGLEtBakJzQyxDQW1CdkM7OztBQUNBTixJQUFBQSxTQUFTLEdBQUcsS0FBS1MsU0FBTCxDQUFlVCxTQUFmLENBQVo7QUFDQUMsSUFBQUEsU0FBUyxHQUFHLEtBQUtRLFNBQUwsQ0FBZVIsU0FBZixDQUFaO0FBRUFELElBQUFBLFNBQVMsR0FBRyxLQUFLVSxXQUFMLENBQWlCLEtBQUtDLFFBQUwsQ0FBY1gsU0FBZCxDQUFqQixDQUFaO0FBQ0FDLElBQUFBLFNBQVMsR0FBRyxLQUFLUyxXQUFMLENBQWlCLEtBQUtDLFFBQUwsQ0FBY1YsU0FBZCxDQUFqQixDQUFaO0FBRUEsUUFBSVcsTUFBTSxHQUFHWCxTQUFTLENBQUNZLE1BQXZCO0FBQUEsUUFBK0JDLE1BQU0sR0FBR2QsU0FBUyxDQUFDYSxNQUFsRDtBQUNBLFFBQUlFLFVBQVUsR0FBRyxDQUFqQjtBQUNBLFFBQUlDLGFBQWEsR0FBR0osTUFBTSxHQUFHRSxNQUE3Qjs7QUFDQSxRQUFHWixPQUFPLENBQUNjLGFBQVgsRUFBMEI7QUFDeEJBLE1BQUFBLGFBQWEsR0FBR0MsSUFBSSxDQUFDQyxHQUFMLENBQVNGLGFBQVQsRUFBd0JkLE9BQU8sQ0FBQ2MsYUFBaEMsQ0FBaEI7QUFDRDs7QUFFRCxRQUFJRyxRQUFRLEdBQUcsQ0FBQztBQUFFQyxNQUFBQSxNQUFNLEVBQUUsQ0FBQyxDQUFYO0FBQWNDLE1BQUFBLFVBQVUsRUFBRTtBQUExQixLQUFELENBQWYsQ0FqQ3VDLENBbUN2Qzs7QUFDQSxRQUFJQyxNQUFNLEdBQUcsS0FBS0MsYUFBTCxDQUFtQkosUUFBUSxDQUFDLENBQUQsQ0FBM0IsRUFBZ0NsQixTQUFoQyxFQUEyQ0QsU0FBM0MsRUFBc0QsQ0FBdEQsQ0FBYjs7QUFDQSxRQUFJbUIsUUFBUSxDQUFDLENBQUQsQ0FBUixDQUFZQyxNQUFaLEdBQXFCLENBQXJCLElBQTBCUixNQUExQixJQUFvQ1UsTUFBTSxHQUFHLENBQVQsSUFBY1IsTUFBdEQsRUFBOEQ7QUFDNUQ7QUFDQSxhQUFPVCxJQUFJLENBQUMsQ0FBQztBQUFDQyxRQUFBQSxLQUFLLEVBQUUsS0FBS2tCLElBQUwsQ0FBVXZCLFNBQVYsQ0FBUjtBQUE4QndCLFFBQUFBLEtBQUssRUFBRXhCLFNBQVMsQ0FBQ1k7QUFBL0MsT0FBRCxDQUFELENBQVg7QUFDRCxLQXhDc0MsQ0EwQ3ZDOzs7QUFDQSxhQUFTYSxjQUFULEdBQTBCO0FBQ3hCLFdBQUssSUFBSUMsWUFBWSxHQUFHLENBQUMsQ0FBRCxHQUFLWixVQUE3QixFQUF5Q1ksWUFBWSxJQUFJWixVQUF6RCxFQUFxRVksWUFBWSxJQUFJLENBQXJGLEVBQXdGO0FBQ3RGLFlBQUlDLFFBQVE7QUFBQTtBQUFBO0FBQVo7QUFBQTs7QUFDQSxZQUFJQyxPQUFPLEdBQUdWLFFBQVEsQ0FBQ1EsWUFBWSxHQUFHLENBQWhCLENBQXRCO0FBQUEsWUFDSUcsVUFBVSxHQUFHWCxRQUFRLENBQUNRLFlBQVksR0FBRyxDQUFoQixDQUR6QjtBQUFBLFlBRUlMLE9BQU0sR0FBRyxDQUFDUSxVQUFVLEdBQUdBLFVBQVUsQ0FBQ1YsTUFBZCxHQUF1QixDQUFsQyxJQUF1Q08sWUFGcEQ7O0FBR0EsWUFBSUUsT0FBSixFQUFhO0FBQ1g7QUFDQVYsVUFBQUEsUUFBUSxDQUFDUSxZQUFZLEdBQUcsQ0FBaEIsQ0FBUixHQUE2Qm5CLFNBQTdCO0FBQ0Q7O0FBRUQsWUFBSXVCLE1BQU0sR0FBR0YsT0FBTyxJQUFJQSxPQUFPLENBQUNULE1BQVIsR0FBaUIsQ0FBakIsR0FBcUJSLE1BQTdDO0FBQUEsWUFDSW9CLFNBQVMsR0FBR0YsVUFBVSxJQUFJLEtBQUtSLE9BQW5CLElBQTZCQSxPQUFNLEdBQUdSLE1BRHREOztBQUVBLFlBQUksQ0FBQ2lCLE1BQUQsSUFBVyxDQUFDQyxTQUFoQixFQUEyQjtBQUN6QjtBQUNBYixVQUFBQSxRQUFRLENBQUNRLFlBQUQsQ0FBUixHQUF5Qm5CLFNBQXpCO0FBQ0E7QUFDRCxTQWhCcUYsQ0FrQnRGO0FBQ0E7QUFDQTs7O0FBQ0EsWUFBSSxDQUFDdUIsTUFBRCxJQUFZQyxTQUFTLElBQUlILE9BQU8sQ0FBQ1QsTUFBUixHQUFpQlUsVUFBVSxDQUFDVixNQUF6RCxFQUFrRTtBQUNoRVEsVUFBQUEsUUFBUSxHQUFHSyxTQUFTLENBQUNILFVBQUQsQ0FBcEI7QUFDQTFCLFVBQUFBLElBQUksQ0FBQzhCLGFBQUwsQ0FBbUJOLFFBQVEsQ0FBQ1AsVUFBNUIsRUFBd0NiLFNBQXhDLEVBQW1ELElBQW5EO0FBQ0QsU0FIRCxNQUdPO0FBQ0xvQixVQUFBQSxRQUFRLEdBQUdDLE9BQVgsQ0FESyxDQUNlOztBQUNwQkQsVUFBQUEsUUFBUSxDQUFDUixNQUFUO0FBQ0FoQixVQUFBQSxJQUFJLENBQUM4QixhQUFMLENBQW1CTixRQUFRLENBQUNQLFVBQTVCLEVBQXdDLElBQXhDLEVBQThDYixTQUE5QztBQUNEOztBQUVEYyxRQUFBQSxPQUFNLEdBQUdsQixJQUFJLENBQUNtQixhQUFMLENBQW1CSyxRQUFuQixFQUE2QjNCLFNBQTdCLEVBQXdDRCxTQUF4QyxFQUFtRDJCLFlBQW5ELENBQVQsQ0E5QnNGLENBZ0N0Rjs7QUFDQSxZQUFJQyxRQUFRLENBQUNSLE1BQVQsR0FBa0IsQ0FBbEIsSUFBdUJSLE1BQXZCLElBQWlDVSxPQUFNLEdBQUcsQ0FBVCxJQUFjUixNQUFuRCxFQUEyRDtBQUN6RCxpQkFBT1QsSUFBSSxDQUFDOEIsV0FBVyxDQUFDL0IsSUFBRCxFQUFPd0IsUUFBUSxDQUFDUCxVQUFoQixFQUE0QnBCLFNBQTVCLEVBQXVDRCxTQUF2QyxFQUFrREksSUFBSSxDQUFDZ0MsZUFBdkQsQ0FBWixDQUFYO0FBQ0QsU0FGRCxNQUVPO0FBQ0w7QUFDQWpCLFVBQUFBLFFBQVEsQ0FBQ1EsWUFBRCxDQUFSLEdBQXlCQyxRQUF6QjtBQUNEO0FBQ0Y7O0FBRURiLE1BQUFBLFVBQVU7QUFDWCxLQXRGc0MsQ0F3RnZDO0FBQ0E7QUFDQTtBQUNBOzs7QUFDQSxRQUFJWixRQUFKLEVBQWM7QUFDWCxnQkFBU2tDLElBQVQsR0FBZ0I7QUFDZjlCLFFBQUFBLFVBQVUsQ0FBQyxZQUFXO0FBQ3BCLGNBQUlRLFVBQVUsR0FBR0MsYUFBakIsRUFBZ0M7QUFDOUIsbUJBQU9iLFFBQVEsRUFBZjtBQUNEOztBQUVELGNBQUksQ0FBQ3VCLGNBQWMsRUFBbkIsRUFBdUI7QUFDckJXLFlBQUFBLElBQUk7QUFDTDtBQUNGLFNBUlMsRUFRUCxDQVJPLENBQVY7QUFTRCxPQVZBLEdBQUQ7QUFXRCxLQVpELE1BWU87QUFDTCxhQUFPdEIsVUFBVSxJQUFJQyxhQUFyQixFQUFvQztBQUNsQyxZQUFJc0IsR0FBRyxHQUFHWixjQUFjLEVBQXhCOztBQUNBLFlBQUlZLEdBQUosRUFBUztBQUNQLGlCQUFPQSxHQUFQO0FBQ0Q7QUFDRjtBQUNGO0FBQ0YsR0FqSGM7O0FBQUE7O0FBQUE7QUFtSGZKLEVBQUFBLGFBbkhlLHlCQW1IRGIsVUFuSEMsRUFtSFdrQixLQW5IWCxFQW1Ia0JDLE9BbkhsQixFQW1IMkI7QUFDeEMsUUFBSUMsSUFBSSxHQUFHcEIsVUFBVSxDQUFDQSxVQUFVLENBQUNSLE1BQVgsR0FBb0IsQ0FBckIsQ0FBckI7O0FBQ0EsUUFBSTRCLElBQUksSUFBSUEsSUFBSSxDQUFDRixLQUFMLEtBQWVBLEtBQXZCLElBQWdDRSxJQUFJLENBQUNELE9BQUwsS0FBaUJBLE9BQXJELEVBQThEO0FBQzVEO0FBQ0E7QUFDQW5CLE1BQUFBLFVBQVUsQ0FBQ0EsVUFBVSxDQUFDUixNQUFYLEdBQW9CLENBQXJCLENBQVYsR0FBb0M7QUFBQ1ksUUFBQUEsS0FBSyxFQUFFZ0IsSUFBSSxDQUFDaEIsS0FBTCxHQUFhLENBQXJCO0FBQXdCYyxRQUFBQSxLQUFLLEVBQUVBLEtBQS9CO0FBQXNDQyxRQUFBQSxPQUFPLEVBQUVBO0FBQS9DLE9BQXBDO0FBQ0QsS0FKRCxNQUlPO0FBQ0xuQixNQUFBQSxVQUFVLENBQUNxQixJQUFYLENBQWdCO0FBQUNqQixRQUFBQSxLQUFLLEVBQUUsQ0FBUjtBQUFXYyxRQUFBQSxLQUFLLEVBQUVBLEtBQWxCO0FBQXlCQyxRQUFBQSxPQUFPLEVBQUVBO0FBQWxDLE9BQWhCO0FBQ0Q7QUFDRixHQTVIYzs7QUFBQTs7QUFBQTtBQTZIZmpCLEVBQUFBLGFBN0hlLHlCQTZIREssUUE3SEMsRUE2SFMzQixTQTdIVCxFQTZIb0JELFNBN0hwQixFQTZIK0IyQixZQTdIL0IsRUE2SDZDO0FBQzFELFFBQUlmLE1BQU0sR0FBR1gsU0FBUyxDQUFDWSxNQUF2QjtBQUFBLFFBQ0lDLE1BQU0sR0FBR2QsU0FBUyxDQUFDYSxNQUR2QjtBQUFBLFFBRUlPLE1BQU0sR0FBR1EsUUFBUSxDQUFDUixNQUZ0QjtBQUFBLFFBR0lFLE1BQU0sR0FBR0YsTUFBTSxHQUFHTyxZQUh0QjtBQUFBLFFBS0lnQixXQUFXLEdBQUcsQ0FMbEI7O0FBTUEsV0FBT3ZCLE1BQU0sR0FBRyxDQUFULEdBQWFSLE1BQWIsSUFBdUJVLE1BQU0sR0FBRyxDQUFULEdBQWFSLE1BQXBDLElBQThDLEtBQUs4QixNQUFMLENBQVkzQyxTQUFTLENBQUNtQixNQUFNLEdBQUcsQ0FBVixDQUFyQixFQUFtQ3BCLFNBQVMsQ0FBQ3NCLE1BQU0sR0FBRyxDQUFWLENBQTVDLENBQXJELEVBQWdIO0FBQzlHRixNQUFBQSxNQUFNO0FBQ05FLE1BQUFBLE1BQU07QUFDTnFCLE1BQUFBLFdBQVc7QUFDWjs7QUFFRCxRQUFJQSxXQUFKLEVBQWlCO0FBQ2ZmLE1BQUFBLFFBQVEsQ0FBQ1AsVUFBVCxDQUFvQnFCLElBQXBCLENBQXlCO0FBQUNqQixRQUFBQSxLQUFLLEVBQUVrQjtBQUFSLE9BQXpCO0FBQ0Q7O0FBRURmLElBQUFBLFFBQVEsQ0FBQ1IsTUFBVCxHQUFrQkEsTUFBbEI7QUFDQSxXQUFPRSxNQUFQO0FBQ0QsR0FoSmM7O0FBQUE7O0FBQUE7QUFrSmZzQixFQUFBQSxNQWxKZSxrQkFrSlJDLElBbEpRLEVBa0pGQyxLQWxKRSxFQWtKSztBQUNsQixRQUFJLEtBQUs1QyxPQUFMLENBQWE2QyxVQUFqQixFQUE2QjtBQUMzQixhQUFPLEtBQUs3QyxPQUFMLENBQWE2QyxVQUFiLENBQXdCRixJQUF4QixFQUE4QkMsS0FBOUIsQ0FBUDtBQUNELEtBRkQsTUFFTztBQUNMLGFBQU9ELElBQUksS0FBS0MsS0FBVCxJQUNELEtBQUs1QyxPQUFMLENBQWE4QyxVQUFiLElBQTJCSCxJQUFJLENBQUNJLFdBQUwsT0FBdUJILEtBQUssQ0FBQ0csV0FBTixFQUR4RDtBQUVEO0FBQ0YsR0F6SmM7O0FBQUE7O0FBQUE7QUEwSmZ2QyxFQUFBQSxXQTFKZSx1QkEwSkh3QyxLQTFKRyxFQTBKSTtBQUNqQixRQUFJWixHQUFHLEdBQUcsRUFBVjs7QUFDQSxTQUFLLElBQUlhLENBQUMsR0FBRyxDQUFiLEVBQWdCQSxDQUFDLEdBQUdELEtBQUssQ0FBQ3JDLE1BQTFCLEVBQWtDc0MsQ0FBQyxFQUFuQyxFQUF1QztBQUNyQyxVQUFJRCxLQUFLLENBQUNDLENBQUQsQ0FBVCxFQUFjO0FBQ1piLFFBQUFBLEdBQUcsQ0FBQ0ksSUFBSixDQUFTUSxLQUFLLENBQUNDLENBQUQsQ0FBZDtBQUNEO0FBQ0Y7O0FBQ0QsV0FBT2IsR0FBUDtBQUNELEdBbEtjOztBQUFBOztBQUFBO0FBbUtmN0IsRUFBQUEsU0FuS2UscUJBbUtMSCxLQW5LSyxFQW1LRTtBQUNmLFdBQU9BLEtBQVA7QUFDRCxHQXJLYzs7QUFBQTs7QUFBQTtBQXNLZkssRUFBQUEsUUF0S2Usb0JBc0tOTCxLQXRLTSxFQXNLQztBQUNkLFdBQU9BLEtBQUssQ0FBQzhDLEtBQU4sQ0FBWSxFQUFaLENBQVA7QUFDRCxHQXhLYzs7QUFBQTs7QUFBQTtBQXlLZjVCLEVBQUFBLElBektlLGdCQXlLVjZCLEtBektVLEVBeUtIO0FBQ1YsV0FBT0EsS0FBSyxDQUFDN0IsSUFBTixDQUFXLEVBQVgsQ0FBUDtBQUNEO0FBM0tjLENBQWpCOztBQThLQSxTQUFTVyxXQUFULENBQXFCcEMsSUFBckIsRUFBMkJzQixVQUEzQixFQUF1Q3BCLFNBQXZDLEVBQWtERCxTQUFsRCxFQUE2RG9DLGVBQTdELEVBQThFO0FBQzVFLE1BQUlrQixZQUFZLEdBQUcsQ0FBbkI7QUFBQSxNQUNJQyxZQUFZLEdBQUdsQyxVQUFVLENBQUNSLE1BRDlCO0FBQUEsTUFFSU8sTUFBTSxHQUFHLENBRmI7QUFBQSxNQUdJRSxNQUFNLEdBQUcsQ0FIYjs7QUFLQSxTQUFPZ0MsWUFBWSxHQUFHQyxZQUF0QixFQUFvQ0QsWUFBWSxFQUFoRCxFQUFvRDtBQUNsRCxRQUFJRSxTQUFTLEdBQUduQyxVQUFVLENBQUNpQyxZQUFELENBQTFCOztBQUNBLFFBQUksQ0FBQ0UsU0FBUyxDQUFDaEIsT0FBZixFQUF3QjtBQUN0QixVQUFJLENBQUNnQixTQUFTLENBQUNqQixLQUFYLElBQW9CSCxlQUF4QixFQUF5QztBQUN2QyxZQUFJOUIsS0FBSyxHQUFHTCxTQUFTLENBQUN3RCxLQUFWLENBQWdCckMsTUFBaEIsRUFBd0JBLE1BQU0sR0FBR29DLFNBQVMsQ0FBQy9CLEtBQTNDLENBQVo7QUFDQW5CLFFBQUFBLEtBQUssR0FBR0EsS0FBSyxDQUFDb0QsR0FBTixDQUFVLFVBQVNwRCxLQUFULEVBQWdCNkMsQ0FBaEIsRUFBbUI7QUFDbkMsY0FBSVEsUUFBUSxHQUFHM0QsU0FBUyxDQUFDc0IsTUFBTSxHQUFHNkIsQ0FBVixDQUF4QjtBQUNBLGlCQUFPUSxRQUFRLENBQUM5QyxNQUFULEdBQWtCUCxLQUFLLENBQUNPLE1BQXhCLEdBQWlDOEMsUUFBakMsR0FBNENyRCxLQUFuRDtBQUNELFNBSE8sQ0FBUjtBQUtBa0QsUUFBQUEsU0FBUyxDQUFDbEQsS0FBVixHQUFrQlAsSUFBSSxDQUFDeUIsSUFBTCxDQUFVbEIsS0FBVixDQUFsQjtBQUNELE9BUkQsTUFRTztBQUNMa0QsUUFBQUEsU0FBUyxDQUFDbEQsS0FBVixHQUFrQlAsSUFBSSxDQUFDeUIsSUFBTCxDQUFVdkIsU0FBUyxDQUFDd0QsS0FBVixDQUFnQnJDLE1BQWhCLEVBQXdCQSxNQUFNLEdBQUdvQyxTQUFTLENBQUMvQixLQUEzQyxDQUFWLENBQWxCO0FBQ0Q7O0FBQ0RMLE1BQUFBLE1BQU0sSUFBSW9DLFNBQVMsQ0FBQy9CLEtBQXBCLENBWnNCLENBY3RCOztBQUNBLFVBQUksQ0FBQytCLFNBQVMsQ0FBQ2pCLEtBQWYsRUFBc0I7QUFDcEJqQixRQUFBQSxNQUFNLElBQUlrQyxTQUFTLENBQUMvQixLQUFwQjtBQUNEO0FBQ0YsS0FsQkQsTUFrQk87QUFDTCtCLE1BQUFBLFNBQVMsQ0FBQ2xELEtBQVYsR0FBa0JQLElBQUksQ0FBQ3lCLElBQUwsQ0FBVXhCLFNBQVMsQ0FBQ3lELEtBQVYsQ0FBZ0JuQyxNQUFoQixFQUF3QkEsTUFBTSxHQUFHa0MsU0FBUyxDQUFDL0IsS0FBM0MsQ0FBVixDQUFsQjtBQUNBSCxNQUFBQSxNQUFNLElBQUlrQyxTQUFTLENBQUMvQixLQUFwQixDQUZLLENBSUw7QUFDQTtBQUNBOztBQUNBLFVBQUk2QixZQUFZLElBQUlqQyxVQUFVLENBQUNpQyxZQUFZLEdBQUcsQ0FBaEIsQ0FBVixDQUE2QmYsS0FBakQsRUFBd0Q7QUFDdEQsWUFBSXFCLEdBQUcsR0FBR3ZDLFVBQVUsQ0FBQ2lDLFlBQVksR0FBRyxDQUFoQixDQUFwQjtBQUNBakMsUUFBQUEsVUFBVSxDQUFDaUMsWUFBWSxHQUFHLENBQWhCLENBQVYsR0FBK0JqQyxVQUFVLENBQUNpQyxZQUFELENBQXpDO0FBQ0FqQyxRQUFBQSxVQUFVLENBQUNpQyxZQUFELENBQVYsR0FBMkJNLEdBQTNCO0FBQ0Q7QUFDRjtBQUNGLEdBdkMyRSxDQXlDNUU7QUFDQTtBQUNBOzs7QUFDQSxNQUFJQyxhQUFhLEdBQUd4QyxVQUFVLENBQUNrQyxZQUFZLEdBQUcsQ0FBaEIsQ0FBOUI7O0FBQ0EsTUFBSUEsWUFBWSxHQUFHLENBQWYsSUFDRyxPQUFPTSxhQUFhLENBQUN2RCxLQUFyQixLQUErQixRQURsQyxLQUVJdUQsYUFBYSxDQUFDdEIsS0FBZCxJQUF1QnNCLGFBQWEsQ0FBQ3JCLE9BRnpDLEtBR0d6QyxJQUFJLENBQUM2QyxNQUFMLENBQVksRUFBWixFQUFnQmlCLGFBQWEsQ0FBQ3ZELEtBQTlCLENBSFAsRUFHNkM7QUFDM0NlLElBQUFBLFVBQVUsQ0FBQ2tDLFlBQVksR0FBRyxDQUFoQixDQUFWLENBQTZCakQsS0FBN0IsSUFBc0N1RCxhQUFhLENBQUN2RCxLQUFwRDtBQUNBZSxJQUFBQSxVQUFVLENBQUN5QyxHQUFYO0FBQ0Q7O0FBRUQsU0FBT3pDLFVBQVA7QUFDRDs7QUFFRCxTQUFTWSxTQUFULENBQW1COEIsSUFBbkIsRUFBeUI7QUFDdkIsU0FBTztBQUFFM0MsSUFBQUEsTUFBTSxFQUFFMkMsSUFBSSxDQUFDM0MsTUFBZjtBQUF1QkMsSUFBQUEsVUFBVSxFQUFFMEMsSUFBSSxDQUFDMUMsVUFBTCxDQUFnQm9DLEtBQWhCLENBQXNCLENBQXRCO0FBQW5DLEdBQVA7QUFDRCIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIERpZmYoKSB7fVxuXG5EaWZmLnByb3RvdHlwZSA9IHtcbiAgZGlmZihvbGRTdHJpbmcsIG5ld1N0cmluZywgb3B0aW9ucyA9IHt9KSB7XG4gICAgbGV0IGNhbGxiYWNrID0gb3B0aW9ucy5jYWxsYmFjaztcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNhbGxiYWNrID0gb3B0aW9ucztcbiAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICB9XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcblxuICAgIGxldCBzZWxmID0gdGhpcztcblxuICAgIGZ1bmN0aW9uIGRvbmUodmFsdWUpIHtcbiAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyBjYWxsYmFjayh1bmRlZmluZWQsIHZhbHVlKTsgfSwgMCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEFsbG93IHN1YmNsYXNzZXMgdG8gbWFzc2FnZSB0aGUgaW5wdXQgcHJpb3IgdG8gcnVubmluZ1xuICAgIG9sZFN0cmluZyA9IHRoaXMuY2FzdElucHV0KG9sZFN0cmluZyk7XG4gICAgbmV3U3RyaW5nID0gdGhpcy5jYXN0SW5wdXQobmV3U3RyaW5nKTtcblxuICAgIG9sZFN0cmluZyA9IHRoaXMucmVtb3ZlRW1wdHkodGhpcy50b2tlbml6ZShvbGRTdHJpbmcpKTtcbiAgICBuZXdTdHJpbmcgPSB0aGlzLnJlbW92ZUVtcHR5KHRoaXMudG9rZW5pemUobmV3U3RyaW5nKSk7XG5cbiAgICBsZXQgbmV3TGVuID0gbmV3U3RyaW5nLmxlbmd0aCwgb2xkTGVuID0gb2xkU3RyaW5nLmxlbmd0aDtcbiAgICBsZXQgZWRpdExlbmd0aCA9IDE7XG4gICAgbGV0IG1heEVkaXRMZW5ndGggPSBuZXdMZW4gKyBvbGRMZW47XG4gICAgaWYob3B0aW9ucy5tYXhFZGl0TGVuZ3RoKSB7XG4gICAgICBtYXhFZGl0TGVuZ3RoID0gTWF0aC5taW4obWF4RWRpdExlbmd0aCwgb3B0aW9ucy5tYXhFZGl0TGVuZ3RoKTtcbiAgICB9XG5cbiAgICBsZXQgYmVzdFBhdGggPSBbeyBuZXdQb3M6IC0xLCBjb21wb25lbnRzOiBbXSB9XTtcblxuICAgIC8vIFNlZWQgZWRpdExlbmd0aCA9IDAsIGkuZS4gdGhlIGNvbnRlbnQgc3RhcnRzIHdpdGggdGhlIHNhbWUgdmFsdWVzXG4gICAgbGV0IG9sZFBvcyA9IHRoaXMuZXh0cmFjdENvbW1vbihiZXN0UGF0aFswXSwgbmV3U3RyaW5nLCBvbGRTdHJpbmcsIDApO1xuICAgIGlmIChiZXN0UGF0aFswXS5uZXdQb3MgKyAxID49IG5ld0xlbiAmJiBvbGRQb3MgKyAxID49IG9sZExlbikge1xuICAgICAgLy8gSWRlbnRpdHkgcGVyIHRoZSBlcXVhbGl0eSBhbmQgdG9rZW5pemVyXG4gICAgICByZXR1cm4gZG9uZShbe3ZhbHVlOiB0aGlzLmpvaW4obmV3U3RyaW5nKSwgY291bnQ6IG5ld1N0cmluZy5sZW5ndGh9XSk7XG4gICAgfVxuXG4gICAgLy8gTWFpbiB3b3JrZXIgbWV0aG9kLiBjaGVja3MgYWxsIHBlcm11dGF0aW9ucyBvZiBhIGdpdmVuIGVkaXQgbGVuZ3RoIGZvciBhY2NlcHRhbmNlLlxuICAgIGZ1bmN0aW9uIGV4ZWNFZGl0TGVuZ3RoKCkge1xuICAgICAgZm9yIChsZXQgZGlhZ29uYWxQYXRoID0gLTEgKiBlZGl0TGVuZ3RoOyBkaWFnb25hbFBhdGggPD0gZWRpdExlbmd0aDsgZGlhZ29uYWxQYXRoICs9IDIpIHtcbiAgICAgICAgbGV0IGJhc2VQYXRoO1xuICAgICAgICBsZXQgYWRkUGF0aCA9IGJlc3RQYXRoW2RpYWdvbmFsUGF0aCAtIDFdLFxuICAgICAgICAgICAgcmVtb3ZlUGF0aCA9IGJlc3RQYXRoW2RpYWdvbmFsUGF0aCArIDFdLFxuICAgICAgICAgICAgb2xkUG9zID0gKHJlbW92ZVBhdGggPyByZW1vdmVQYXRoLm5ld1BvcyA6IDApIC0gZGlhZ29uYWxQYXRoO1xuICAgICAgICBpZiAoYWRkUGF0aCkge1xuICAgICAgICAgIC8vIE5vIG9uZSBlbHNlIGlzIGdvaW5nIHRvIGF0dGVtcHQgdG8gdXNlIHRoaXMgdmFsdWUsIGNsZWFyIGl0XG4gICAgICAgICAgYmVzdFBhdGhbZGlhZ29uYWxQYXRoIC0gMV0gPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgY2FuQWRkID0gYWRkUGF0aCAmJiBhZGRQYXRoLm5ld1BvcyArIDEgPCBuZXdMZW4sXG4gICAgICAgICAgICBjYW5SZW1vdmUgPSByZW1vdmVQYXRoICYmIDAgPD0gb2xkUG9zICYmIG9sZFBvcyA8IG9sZExlbjtcbiAgICAgICAgaWYgKCFjYW5BZGQgJiYgIWNhblJlbW92ZSkge1xuICAgICAgICAgIC8vIElmIHRoaXMgcGF0aCBpcyBhIHRlcm1pbmFsIHRoZW4gcHJ1bmVcbiAgICAgICAgICBiZXN0UGF0aFtkaWFnb25hbFBhdGhdID0gdW5kZWZpbmVkO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU2VsZWN0IHRoZSBkaWFnb25hbCB0aGF0IHdlIHdhbnQgdG8gYnJhbmNoIGZyb20uIFdlIHNlbGVjdCB0aGUgcHJpb3JcbiAgICAgICAgLy8gcGF0aCB3aG9zZSBwb3NpdGlvbiBpbiB0aGUgbmV3IHN0cmluZyBpcyB0aGUgZmFydGhlc3QgZnJvbSB0aGUgb3JpZ2luXG4gICAgICAgIC8vIGFuZCBkb2VzIG5vdCBwYXNzIHRoZSBib3VuZHMgb2YgdGhlIGRpZmYgZ3JhcGhcbiAgICAgICAgaWYgKCFjYW5BZGQgfHwgKGNhblJlbW92ZSAmJiBhZGRQYXRoLm5ld1BvcyA8IHJlbW92ZVBhdGgubmV3UG9zKSkge1xuICAgICAgICAgIGJhc2VQYXRoID0gY2xvbmVQYXRoKHJlbW92ZVBhdGgpO1xuICAgICAgICAgIHNlbGYucHVzaENvbXBvbmVudChiYXNlUGF0aC5jb21wb25lbnRzLCB1bmRlZmluZWQsIHRydWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJhc2VQYXRoID0gYWRkUGF0aDsgLy8gTm8gbmVlZCB0byBjbG9uZSwgd2UndmUgcHVsbGVkIGl0IGZyb20gdGhlIGxpc3RcbiAgICAgICAgICBiYXNlUGF0aC5uZXdQb3MrKztcbiAgICAgICAgICBzZWxmLnB1c2hDb21wb25lbnQoYmFzZVBhdGguY29tcG9uZW50cywgdHJ1ZSwgdW5kZWZpbmVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG9sZFBvcyA9IHNlbGYuZXh0cmFjdENvbW1vbihiYXNlUGF0aCwgbmV3U3RyaW5nLCBvbGRTdHJpbmcsIGRpYWdvbmFsUGF0aCk7XG5cbiAgICAgICAgLy8gSWYgd2UgaGF2ZSBoaXQgdGhlIGVuZCBvZiBib3RoIHN0cmluZ3MsIHRoZW4gd2UgYXJlIGRvbmVcbiAgICAgICAgaWYgKGJhc2VQYXRoLm5ld1BvcyArIDEgPj0gbmV3TGVuICYmIG9sZFBvcyArIDEgPj0gb2xkTGVuKSB7XG4gICAgICAgICAgcmV0dXJuIGRvbmUoYnVpbGRWYWx1ZXMoc2VsZiwgYmFzZVBhdGguY29tcG9uZW50cywgbmV3U3RyaW5nLCBvbGRTdHJpbmcsIHNlbGYudXNlTG9uZ2VzdFRva2VuKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gT3RoZXJ3aXNlIHRyYWNrIHRoaXMgcGF0aCBhcyBhIHBvdGVudGlhbCBjYW5kaWRhdGUgYW5kIGNvbnRpbnVlLlxuICAgICAgICAgIGJlc3RQYXRoW2RpYWdvbmFsUGF0aF0gPSBiYXNlUGF0aDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBlZGl0TGVuZ3RoKys7XG4gICAgfVxuXG4gICAgLy8gUGVyZm9ybXMgdGhlIGxlbmd0aCBvZiBlZGl0IGl0ZXJhdGlvbi4gSXMgYSBiaXQgZnVnbHkgYXMgdGhpcyBoYXMgdG8gc3VwcG9ydCB0aGVcbiAgICAvLyBzeW5jIGFuZCBhc3luYyBtb2RlIHdoaWNoIGlzIG5ldmVyIGZ1bi4gTG9vcHMgb3ZlciBleGVjRWRpdExlbmd0aCB1bnRpbCBhIHZhbHVlXG4gICAgLy8gaXMgcHJvZHVjZWQsIG9yIHVudGlsIHRoZSBlZGl0IGxlbmd0aCBleGNlZWRzIG9wdGlvbnMubWF4RWRpdExlbmd0aCAoaWYgZ2l2ZW4pLFxuICAgIC8vIGluIHdoaWNoIGNhc2UgaXQgd2lsbCByZXR1cm4gdW5kZWZpbmVkLlxuICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgKGZ1bmN0aW9uIGV4ZWMoKSB7XG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgaWYgKGVkaXRMZW5ndGggPiBtYXhFZGl0TGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIWV4ZWNFZGl0TGVuZ3RoKCkpIHtcbiAgICAgICAgICAgIGV4ZWMoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIDApO1xuICAgICAgfSgpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgd2hpbGUgKGVkaXRMZW5ndGggPD0gbWF4RWRpdExlbmd0aCkge1xuICAgICAgICBsZXQgcmV0ID0gZXhlY0VkaXRMZW5ndGgoKTtcbiAgICAgICAgaWYgKHJldCkge1xuICAgICAgICAgIHJldHVybiByZXQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgcHVzaENvbXBvbmVudChjb21wb25lbnRzLCBhZGRlZCwgcmVtb3ZlZCkge1xuICAgIGxldCBsYXN0ID0gY29tcG9uZW50c1tjb21wb25lbnRzLmxlbmd0aCAtIDFdO1xuICAgIGlmIChsYXN0ICYmIGxhc3QuYWRkZWQgPT09IGFkZGVkICYmIGxhc3QucmVtb3ZlZCA9PT0gcmVtb3ZlZCkge1xuICAgICAgLy8gV2UgbmVlZCB0byBjbG9uZSBoZXJlIGFzIHRoZSBjb21wb25lbnQgY2xvbmUgb3BlcmF0aW9uIGlzIGp1c3RcbiAgICAgIC8vIGFzIHNoYWxsb3cgYXJyYXkgY2xvbmVcbiAgICAgIGNvbXBvbmVudHNbY29tcG9uZW50cy5sZW5ndGggLSAxXSA9IHtjb3VudDogbGFzdC5jb3VudCArIDEsIGFkZGVkOiBhZGRlZCwgcmVtb3ZlZDogcmVtb3ZlZCB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBjb21wb25lbnRzLnB1c2goe2NvdW50OiAxLCBhZGRlZDogYWRkZWQsIHJlbW92ZWQ6IHJlbW92ZWQgfSk7XG4gICAgfVxuICB9LFxuICBleHRyYWN0Q29tbW9uKGJhc2VQYXRoLCBuZXdTdHJpbmcsIG9sZFN0cmluZywgZGlhZ29uYWxQYXRoKSB7XG4gICAgbGV0IG5ld0xlbiA9IG5ld1N0cmluZy5sZW5ndGgsXG4gICAgICAgIG9sZExlbiA9IG9sZFN0cmluZy5sZW5ndGgsXG4gICAgICAgIG5ld1BvcyA9IGJhc2VQYXRoLm5ld1BvcyxcbiAgICAgICAgb2xkUG9zID0gbmV3UG9zIC0gZGlhZ29uYWxQYXRoLFxuXG4gICAgICAgIGNvbW1vbkNvdW50ID0gMDtcbiAgICB3aGlsZSAobmV3UG9zICsgMSA8IG5ld0xlbiAmJiBvbGRQb3MgKyAxIDwgb2xkTGVuICYmIHRoaXMuZXF1YWxzKG5ld1N0cmluZ1tuZXdQb3MgKyAxXSwgb2xkU3RyaW5nW29sZFBvcyArIDFdKSkge1xuICAgICAgbmV3UG9zKys7XG4gICAgICBvbGRQb3MrKztcbiAgICAgIGNvbW1vbkNvdW50Kys7XG4gICAgfVxuXG4gICAgaWYgKGNvbW1vbkNvdW50KSB7XG4gICAgICBiYXNlUGF0aC5jb21wb25lbnRzLnB1c2goe2NvdW50OiBjb21tb25Db3VudH0pO1xuICAgIH1cblxuICAgIGJhc2VQYXRoLm5ld1BvcyA9IG5ld1BvcztcbiAgICByZXR1cm4gb2xkUG9zO1xuICB9LFxuXG4gIGVxdWFscyhsZWZ0LCByaWdodCkge1xuICAgIGlmICh0aGlzLm9wdGlvbnMuY29tcGFyYXRvcikge1xuICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy5jb21wYXJhdG9yKGxlZnQsIHJpZ2h0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGxlZnQgPT09IHJpZ2h0XG4gICAgICAgIHx8ICh0aGlzLm9wdGlvbnMuaWdub3JlQ2FzZSAmJiBsZWZ0LnRvTG93ZXJDYXNlKCkgPT09IHJpZ2h0LnRvTG93ZXJDYXNlKCkpO1xuICAgIH1cbiAgfSxcbiAgcmVtb3ZlRW1wdHkoYXJyYXkpIHtcbiAgICBsZXQgcmV0ID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGFycmF5W2ldKSB7XG4gICAgICAgIHJldC5wdXNoKGFycmF5W2ldKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbiAgfSxcbiAgY2FzdElucHV0KHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9LFxuICB0b2tlbml6ZSh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZS5zcGxpdCgnJyk7XG4gIH0sXG4gIGpvaW4oY2hhcnMpIHtcbiAgICByZXR1cm4gY2hhcnMuam9pbignJyk7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGJ1aWxkVmFsdWVzKGRpZmYsIGNvbXBvbmVudHMsIG5ld1N0cmluZywgb2xkU3RyaW5nLCB1c2VMb25nZXN0VG9rZW4pIHtcbiAgbGV0IGNvbXBvbmVudFBvcyA9IDAsXG4gICAgICBjb21wb25lbnRMZW4gPSBjb21wb25lbnRzLmxlbmd0aCxcbiAgICAgIG5ld1BvcyA9IDAsXG4gICAgICBvbGRQb3MgPSAwO1xuXG4gIGZvciAoOyBjb21wb25lbnRQb3MgPCBjb21wb25lbnRMZW47IGNvbXBvbmVudFBvcysrKSB7XG4gICAgbGV0IGNvbXBvbmVudCA9IGNvbXBvbmVudHNbY29tcG9uZW50UG9zXTtcbiAgICBpZiAoIWNvbXBvbmVudC5yZW1vdmVkKSB7XG4gICAgICBpZiAoIWNvbXBvbmVudC5hZGRlZCAmJiB1c2VMb25nZXN0VG9rZW4pIHtcbiAgICAgICAgbGV0IHZhbHVlID0gbmV3U3RyaW5nLnNsaWNlKG5ld1BvcywgbmV3UG9zICsgY29tcG9uZW50LmNvdW50KTtcbiAgICAgICAgdmFsdWUgPSB2YWx1ZS5tYXAoZnVuY3Rpb24odmFsdWUsIGkpIHtcbiAgICAgICAgICBsZXQgb2xkVmFsdWUgPSBvbGRTdHJpbmdbb2xkUG9zICsgaV07XG4gICAgICAgICAgcmV0dXJuIG9sZFZhbHVlLmxlbmd0aCA+IHZhbHVlLmxlbmd0aCA/IG9sZFZhbHVlIDogdmFsdWU7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbXBvbmVudC52YWx1ZSA9IGRpZmYuam9pbih2YWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb21wb25lbnQudmFsdWUgPSBkaWZmLmpvaW4obmV3U3RyaW5nLnNsaWNlKG5ld1BvcywgbmV3UG9zICsgY29tcG9uZW50LmNvdW50KSk7XG4gICAgICB9XG4gICAgICBuZXdQb3MgKz0gY29tcG9uZW50LmNvdW50O1xuXG4gICAgICAvLyBDb21tb24gY2FzZVxuICAgICAgaWYgKCFjb21wb25lbnQuYWRkZWQpIHtcbiAgICAgICAgb2xkUG9zICs9IGNvbXBvbmVudC5jb3VudDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29tcG9uZW50LnZhbHVlID0gZGlmZi5qb2luKG9sZFN0cmluZy5zbGljZShvbGRQb3MsIG9sZFBvcyArIGNvbXBvbmVudC5jb3VudCkpO1xuICAgICAgb2xkUG9zICs9IGNvbXBvbmVudC5jb3VudDtcblxuICAgICAgLy8gUmV2ZXJzZSBhZGQgYW5kIHJlbW92ZSBzbyByZW1vdmVzIGFyZSBvdXRwdXQgZmlyc3QgdG8gbWF0Y2ggY29tbW9uIGNvbnZlbnRpb25cbiAgICAgIC8vIFRoZSBkaWZmaW5nIGFsZ29yaXRobSBpcyB0aWVkIHRvIGFkZCB0aGVuIHJlbW92ZSBvdXRwdXQgYW5kIHRoaXMgaXMgdGhlIHNpbXBsZXN0XG4gICAgICAvLyByb3V0ZSB0byBnZXQgdGhlIGRlc2lyZWQgb3V0cHV0IHdpdGggbWluaW1hbCBvdmVyaGVhZC5cbiAgICAgIGlmIChjb21wb25lbnRQb3MgJiYgY29tcG9uZW50c1tjb21wb25lbnRQb3MgLSAxXS5hZGRlZCkge1xuICAgICAgICBsZXQgdG1wID0gY29tcG9uZW50c1tjb21wb25lbnRQb3MgLSAxXTtcbiAgICAgICAgY29tcG9uZW50c1tjb21wb25lbnRQb3MgLSAxXSA9IGNvbXBvbmVudHNbY29tcG9uZW50UG9zXTtcbiAgICAgICAgY29tcG9uZW50c1tjb21wb25lbnRQb3NdID0gdG1wO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFNwZWNpYWwgY2FzZSBoYW5kbGUgZm9yIHdoZW4gb25lIHRlcm1pbmFsIGlzIGlnbm9yZWQgKGkuZS4gd2hpdGVzcGFjZSkuXG4gIC8vIEZvciB0aGlzIGNhc2Ugd2UgbWVyZ2UgdGhlIHRlcm1pbmFsIGludG8gdGhlIHByaW9yIHN0cmluZyBhbmQgZHJvcCB0aGUgY2hhbmdlLlxuICAvLyBUaGlzIGlzIG9ubHkgYXZhaWxhYmxlIGZvciBzdHJpbmcgbW9kZS5cbiAgbGV0IGxhc3RDb21wb25lbnQgPSBjb21wb25lbnRzW2NvbXBvbmVudExlbiAtIDFdO1xuICBpZiAoY29tcG9uZW50TGVuID4gMVxuICAgICAgJiYgdHlwZW9mIGxhc3RDb21wb25lbnQudmFsdWUgPT09ICdzdHJpbmcnXG4gICAgICAmJiAobGFzdENvbXBvbmVudC5hZGRlZCB8fCBsYXN0Q29tcG9uZW50LnJlbW92ZWQpXG4gICAgICAmJiBkaWZmLmVxdWFscygnJywgbGFzdENvbXBvbmVudC52YWx1ZSkpIHtcbiAgICBjb21wb25lbnRzW2NvbXBvbmVudExlbiAtIDJdLnZhbHVlICs9IGxhc3RDb21wb25lbnQudmFsdWU7XG4gICAgY29tcG9uZW50cy5wb3AoKTtcbiAgfVxuXG4gIHJldHVybiBjb21wb25lbnRzO1xufVxuXG5mdW5jdGlvbiBjbG9uZVBhdGgocGF0aCkge1xuICByZXR1cm4geyBuZXdQb3M6IHBhdGgubmV3UG9zLCBjb21wb25lbnRzOiBwYXRoLmNvbXBvbmVudHMuc2xpY2UoMCkgfTtcbn1cbiJdfQ==
+
+
+/***/ }),
+
+/***/ 22081:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+/*istanbul ignore start*/
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.diffChars = diffChars;
+exports.characterDiff = void 0;
+
+/*istanbul ignore end*/
+var
+/*istanbul ignore start*/
+_base = _interopRequireDefault(__nccwpck_require__(21653))
+/*istanbul ignore end*/
+;
+
+/*istanbul ignore start*/ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
+
+/*istanbul ignore end*/
+var characterDiff = new
+/*istanbul ignore start*/
+_base
+/*istanbul ignore end*/
+[
+/*istanbul ignore start*/
+"default"
+/*istanbul ignore end*/
+]();
+
+/*istanbul ignore start*/
+exports.characterDiff = characterDiff;
+
+/*istanbul ignore end*/
+function diffChars(oldStr, newStr, options) {
+ return characterDiff.diff(oldStr, newStr, options);
+}
+//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kaWZmL2NoYXJhY3Rlci5qcyJdLCJuYW1lcyI6WyJjaGFyYWN0ZXJEaWZmIiwiRGlmZiIsImRpZmZDaGFycyIsIm9sZFN0ciIsIm5ld1N0ciIsIm9wdGlvbnMiLCJkaWZmIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7Ozs7QUFFTyxJQUFNQSxhQUFhLEdBQUc7QUFBSUM7QUFBQUE7QUFBQUE7QUFBQUE7QUFBQUE7QUFBQUE7QUFBQUE7QUFBQUEsQ0FBSixFQUF0Qjs7Ozs7O0FBQ0EsU0FBU0MsU0FBVCxDQUFtQkMsTUFBbkIsRUFBMkJDLE1BQTNCLEVBQW1DQyxPQUFuQyxFQUE0QztBQUFFLFNBQU9MLGFBQWEsQ0FBQ00sSUFBZCxDQUFtQkgsTUFBbkIsRUFBMkJDLE1BQTNCLEVBQW1DQyxPQUFuQyxDQUFQO0FBQXFEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IERpZmYgZnJvbSAnLi9iYXNlJztcblxuZXhwb3J0IGNvbnN0IGNoYXJhY3RlckRpZmYgPSBuZXcgRGlmZigpO1xuZXhwb3J0IGZ1bmN0aW9uIGRpZmZDaGFycyhvbGRTdHIsIG5ld1N0ciwgb3B0aW9ucykgeyByZXR1cm4gY2hhcmFjdGVyRGlmZi5kaWZmKG9sZFN0ciwgbmV3U3RyLCBvcHRpb25zKTsgfVxuIl19
+
+
+/***/ }),
+
+/***/ 48941:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+/*istanbul ignore start*/
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.diffCss = diffCss;
+exports.cssDiff = void 0;
+
+/*istanbul ignore end*/
+var
+/*istanbul ignore start*/
+_base = _interopRequireDefault(__nccwpck_require__(21653))
+/*istanbul ignore end*/
+;
+
+/*istanbul ignore start*/ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
+
+/*istanbul ignore end*/
+var cssDiff = new
+/*istanbul ignore start*/
+_base
+/*istanbul ignore end*/
+[
+/*istanbul ignore start*/
+"default"
+/*istanbul ignore end*/
+]();
+
+/*istanbul ignore start*/
+exports.cssDiff = cssDiff;
+
+/*istanbul ignore end*/
+cssDiff.tokenize = function (value) {
+ return value.split(/([{}:;,]|\s+)/);
+};
+
+function diffCss(oldStr, newStr, callback) {
+ return cssDiff.diff(oldStr, newStr, callback);
+}
+//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kaWZmL2Nzcy5qcyJdLCJuYW1lcyI6WyJjc3NEaWZmIiwiRGlmZiIsInRva2VuaXplIiwidmFsdWUiLCJzcGxpdCIsImRpZmZDc3MiLCJvbGRTdHIiLCJuZXdTdHIiLCJjYWxsYmFjayIsImRpZmYiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOzs7OztBQUVPLElBQU1BLE9BQU8sR0FBRztBQUFJQztBQUFBQTtBQUFBQTtBQUFBQTtBQUFBQTtBQUFBQTtBQUFBQTtBQUFBQSxDQUFKLEVBQWhCOzs7Ozs7QUFDUEQsT0FBTyxDQUFDRSxRQUFSLEdBQW1CLFVBQVNDLEtBQVQsRUFBZ0I7QUFDakMsU0FBT0EsS0FBSyxDQUFDQyxLQUFOLENBQVksZUFBWixDQUFQO0FBQ0QsQ0FGRDs7QUFJTyxTQUFTQyxPQUFULENBQWlCQyxNQUFqQixFQUF5QkMsTUFBekIsRUFBaUNDLFFBQWpDLEVBQTJDO0FBQUUsU0FBT1IsT0FBTyxDQUFDUyxJQUFSLENBQWFILE1BQWIsRUFBcUJDLE1BQXJCLEVBQTZCQyxRQUE3QixDQUFQO0FBQWdEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IERpZmYgZnJvbSAnLi9iYXNlJztcblxuZXhwb3J0IGNvbnN0IGNzc0RpZmYgPSBuZXcgRGlmZigpO1xuY3NzRGlmZi50b2tlbml6ZSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZS5zcGxpdCgvKFt7fTo7LF18XFxzKykvKTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBkaWZmQ3NzKG9sZFN0ciwgbmV3U3RyLCBjYWxsYmFjaykgeyByZXR1cm4gY3NzRGlmZi5kaWZmKG9sZFN0ciwgbmV3U3RyLCBjYWxsYmFjayk7IH1cbiJdfQ==
+
+
+/***/ }),
+
+/***/ 86335:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+/*istanbul ignore start*/
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.diffJson = diffJson;
+exports.canonicalize = canonicalize;
+exports.jsonDiff = void 0;
+
+/*istanbul ignore end*/
+var
+/*istanbul ignore start*/
+_base = _interopRequireDefault(__nccwpck_require__(21653))
+/*istanbul ignore end*/
+;
+
+var
+/*istanbul ignore start*/
+_line = __nccwpck_require__(41591)
+/*istanbul ignore end*/
+;
+
+/*istanbul ignore start*/ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
+
+function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
+
+/*istanbul ignore end*/
+var objectPrototypeToString = Object.prototype.toString;
+var jsonDiff = new
+/*istanbul ignore start*/
+_base
+/*istanbul ignore end*/
+[
+/*istanbul ignore start*/
+"default"
+/*istanbul ignore end*/
+](); // Discriminate between two lines of pretty-printed, serialized JSON where one of them has a
+// dangling comma and the other doesn't. Turns out including the dangling comma yields the nicest output:
+
+/*istanbul ignore start*/
+exports.jsonDiff = jsonDiff;
+
+/*istanbul ignore end*/
+jsonDiff.useLongestToken = true;
+jsonDiff.tokenize =
+/*istanbul ignore start*/
+_line
+/*istanbul ignore end*/
+.
+/*istanbul ignore start*/
+lineDiff
+/*istanbul ignore end*/
+.tokenize;
+
+jsonDiff.castInput = function (value) {
+ /*istanbul ignore start*/
+ var _this$options =
+ /*istanbul ignore end*/
+ this.options,
+ undefinedReplacement = _this$options.undefinedReplacement,
+ _this$options$stringi = _this$options.stringifyReplacer,
+ stringifyReplacer = _this$options$stringi === void 0 ? function (k, v)
+ /*istanbul ignore start*/
+ {
+ return (
+ /*istanbul ignore end*/
+ typeof v === 'undefined' ? undefinedReplacement : v
+ );
+ } : _this$options$stringi;
+ return typeof value === 'string' ? value : JSON.stringify(canonicalize(value, null, null, stringifyReplacer), stringifyReplacer, ' ');
+};
+
+jsonDiff.equals = function (left, right) {
+ return (
+ /*istanbul ignore start*/
+ _base
+ /*istanbul ignore end*/
+ [
+ /*istanbul ignore start*/
+ "default"
+ /*istanbul ignore end*/
+ ].prototype.equals.call(jsonDiff, left.replace(/,([\r\n])/g, '$1'), right.replace(/,([\r\n])/g, '$1'))
+ );
+};
+
+function diffJson(oldObj, newObj, options) {
+ return jsonDiff.diff(oldObj, newObj, options);
+} // This function handles the presence of circular references by bailing out when encountering an
+// object that is already on the "stack" of items being processed. Accepts an optional replacer
+
+
+function canonicalize(obj, stack, replacementStack, replacer, key) {
+ stack = stack || [];
+ replacementStack = replacementStack || [];
+
+ if (replacer) {
+ obj = replacer(key, obj);
+ }
+
+ var i;
+
+ for (i = 0; i < stack.length; i += 1) {
+ if (stack[i] === obj) {
+ return replacementStack[i];
+ }
+ }
+
+ var canonicalizedObj;
+
+ if ('[object Array]' === objectPrototypeToString.call(obj)) {
+ stack.push(obj);
+ canonicalizedObj = new Array(obj.length);
+ replacementStack.push(canonicalizedObj);
+
+ for (i = 0; i < obj.length; i += 1) {
+ canonicalizedObj[i] = canonicalize(obj[i], stack, replacementStack, replacer, key);
+ }
+
+ stack.pop();
+ replacementStack.pop();
+ return canonicalizedObj;
+ }
+
+ if (obj && obj.toJSON) {
+ obj = obj.toJSON();
+ }
+
+ if (
+ /*istanbul ignore start*/
+ _typeof(
+ /*istanbul ignore end*/
+ obj) === 'object' && obj !== null) {
+ stack.push(obj);
+ canonicalizedObj = {};
+ replacementStack.push(canonicalizedObj);
+
+ var sortedKeys = [],
+ _key;
+
+ for (_key in obj) {
+ /* istanbul ignore else */
+ if (obj.hasOwnProperty(_key)) {
+ sortedKeys.push(_key);
+ }
+ }
+
+ sortedKeys.sort();
+
+ for (i = 0; i < sortedKeys.length; i += 1) {
+ _key = sortedKeys[i];
+ canonicalizedObj[_key] = canonicalize(obj[_key], stack, replacementStack, replacer, _key);
+ }
+
+ stack.pop();
+ replacementStack.pop();
+ } else {
+ canonicalizedObj = obj;
+ }
+
+ return canonicalizedObj;
+}
+//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kaWZmL2pzb24uanMiXSwibmFtZXMiOlsib2JqZWN0UHJvdG90eXBlVG9TdHJpbmciLCJPYmplY3QiLCJwcm90b3R5cGUiLCJ0b1N0cmluZyIsImpzb25EaWZmIiwiRGlmZiIsInVzZUxvbmdlc3RUb2tlbiIsInRva2VuaXplIiwibGluZURpZmYiLCJjYXN0SW5wdXQiLCJ2YWx1ZSIsIm9wdGlvbnMiLCJ1bmRlZmluZWRSZXBsYWNlbWVudCIsInN0cmluZ2lmeVJlcGxhY2VyIiwiayIsInYiLCJKU09OIiwic3RyaW5naWZ5IiwiY2Fub25pY2FsaXplIiwiZXF1YWxzIiwibGVmdCIsInJpZ2h0IiwiY2FsbCIsInJlcGxhY2UiLCJkaWZmSnNvbiIsIm9sZE9iaiIsIm5ld09iaiIsImRpZmYiLCJvYmoiLCJzdGFjayIsInJlcGxhY2VtZW50U3RhY2siLCJyZXBsYWNlciIsImtleSIsImkiLCJsZW5ndGgiLCJjYW5vbmljYWxpemVkT2JqIiwicHVzaCIsIkFycmF5IiwicG9wIiwidG9KU09OIiwic29ydGVkS2V5cyIsImhhc093blByb3BlcnR5Iiwic29ydCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7Ozs7Ozs7QUFFQSxJQUFNQSx1QkFBdUIsR0FBR0MsTUFBTSxDQUFDQyxTQUFQLENBQWlCQyxRQUFqRDtBQUdPLElBQU1DLFFBQVEsR0FBRztBQUFJQztBQUFBQTtBQUFBQTtBQUFBQTtBQUFBQTtBQUFBQTtBQUFBQTtBQUFBQSxDQUFKLEVBQWpCLEMsQ0FDUDtBQUNBOzs7Ozs7QUFDQUQsUUFBUSxDQUFDRSxlQUFULEdBQTJCLElBQTNCO0FBRUFGLFFBQVEsQ0FBQ0csUUFBVDtBQUFvQkM7QUFBQUE7QUFBQUE7QUFBQUE7QUFBQUE7QUFBQUE7QUFBQTtBQUFBLENBQVNELFFBQTdCOztBQUNBSCxRQUFRLENBQUNLLFNBQVQsR0FBcUIsVUFBU0MsS0FB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Z0IsR0FBR1AsR0FBbkI7QUFDRDs7QUFDRCxTQUFPTyxnQkFBUDtBQUNEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IERpZmYgZnJvbSAnLi9iYXNlJztcbmltcG9ydCB7bGluZURpZmZ9IGZyb20gJy4vbGluZSc7XG5cbmNvbnN0IG9iamVjdFByb3RvdHlwZVRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxuXG5leHBvcnQgY29uc3QganNvbkRpZmYgPSBuZXcgRGlmZigpO1xuLy8gRGlzY3JpbWluYXRlIGJldHdlZW4gdHdvIGxpbmVzIG9mIHByZXR0eS1wcmludGVkLCBzZXJpYWxpemVkIEpTT04gd2hlcmUgb25lIG9mIHRoZW0gaGFzIGFcbi8vIGRhbmdsaW5nIGNvbW1hIGFuZCB0aGUgb3RoZXIgZG9lc24ndC4gVHVybnMgb3V0IGluY2x1ZGluZyB0aGUgZGFuZ2xpbmcgY29tbWEgeWllbGRzIHRoZSBuaWNlc3Qgb3V0cHV0OlxuanNvbkRpZmYudXNlTG9uZ2VzdFRva2VuID0gdHJ1ZTtcblxuanNvbkRpZmYudG9rZW5pemUgPSBsaW5lRGlmZi50b2tlbml6ZTtcbmpzb25EaWZmLmNhc3RJbnB1dCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIGNvbnN0IHt1bmRlZmluZWRSZXBsYWNlbWVudCwgc3RyaW5naWZ5UmVwbGFjZXIgPSAoaywgdikgPT4gdHlwZW9mIHYgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkUmVwbGFjZW1lbnQgOiB2fSA9IHRoaXMub3B0aW9ucztcblxuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IHZhbHVlIDogSlNPTi5zdHJpbmdpZnkoY2Fub25pY2FsaXplKHZhbHVlLCBudWxsLCBudWxsLCBzdHJpbmdpZnlSZXBsYWNlciksIHN0cmluZ2lmeVJlcGxhY2VyLCAnICAnKTtcbn07XG5qc29uRGlmZi5lcXVhbHMgPSBmdW5jdGlvbihsZWZ0LCByaWdodCkge1xuICByZXR1cm4gRGlmZi5wcm90b3R5cGUuZXF1YWxzLmNhbGwoanNvbkRpZmYsIGxlZnQucmVwbGFjZSgvLChbXFxyXFxuXSkvZywgJyQxJyksIHJpZ2h0LnJlcGxhY2UoLywoW1xcclxcbl0pL2csICckMScpKTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBkaWZmSnNvbihvbGRPYmosIG5ld09iaiwgb3B0aW9ucykgeyByZXR1cm4ganNvbkRpZmYuZGlmZihvbGRPYmosIG5ld09iaiwgb3B0aW9ucyk7IH1cblxuLy8gVGhpcyBmdW5jdGlvbiBoYW5kbGVzIHRoZSBwcmVzZW5jZSBvZiBjaXJjdWxhciByZWZlcmVuY2VzIGJ5IGJhaWxpbmcgb3V0IHdoZW4gZW5jb3VudGVyaW5nIGFuXG4vLyBvYmplY3QgdGhhdCBpcyBhbHJlYWR5IG9uIHRoZSBcInN0YWNrXCIgb2YgaXRlbXMgYmVpbmcgcHJvY2Vzc2VkLiBBY2NlcHRzIGFuIG9wdGlvbmFsIHJlcGxhY2VyXG5leHBvcnQgZnVuY3Rpb24gY2Fub25pY2FsaXplKG9iaiwgc3RhY2ssIHJlcGxhY2VtZW50U3RhY2ssIHJlcGxhY2VyLCBrZXkpIHtcbiAgc3RhY2sgPSBzdGFjayB8fCBbXTtcbiAgcmVwbGFjZW1lbnRTdGFjayA9IHJlcGxhY2VtZW50U3RhY2sgfHwgW107XG5cbiAgaWYgKHJlcGxhY2VyKSB7XG4gICAgb2JqID0gcmVwbGFjZXIoa2V5LCBvYmopO1xuICB9XG5cbiAgbGV0IGk7XG5cbiAgZm9yIChpID0gMDsgaSA8IHN0YWNrLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgaWYgKHN0YWNrW2ldID09PSBvYmopIHtcbiAgICAgIHJldHVybiByZXBsYWNlbWVudFN0YWNrW2ldO1xuICAgIH1cbiAgfVxuXG4gIGxldCBjYW5vbmljYWxpemVkT2JqO1xuXG4gIGlmICgnW29iamVjdCBBcnJheV0nID09PSBvYmplY3RQcm90b3R5cGVUb1N0cmluZy5jYWxsKG9iaikpIHtcbiAgICBzdGFjay5wdXNoKG9iaik7XG4gICAgY2Fub25pY2FsaXplZE9iaiA9IG5ldyBBcnJheShvYmoubGVuZ3RoKTtcbiAgICByZXBsYWNlbWVudFN0YWNrLnB1c2goY2Fub25pY2FsaXplZE9iaik7XG4gICAgZm9yIChpID0gMDsgaSA8IG9iai5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgY2Fub25pY2FsaXplZE9ialtpXSA9IGNhbm9uaWNhbGl6ZShvYmpbaV0sIHN0YWNrLCByZXBsYWNlbWVudFN0YWNrLCByZXBsYWNlciwga2V5KTtcbiAgICB9XG4gICAgc3RhY2sucG9wKCk7XG4gICAgcmVwbGFjZW1lbnRTdGFjay5wb3AoKTtcbiAgICByZXR1cm4gY2Fub25pY2FsaXplZE9iajtcbiAgfVxuXG4gIGlmIChvYmogJiYgb2JqLnRvSlNPTikge1xuICAgIG9iaiA9IG9iai50b0pTT04oKTtcbiAgfVxuXG4gIGlmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiBvYmogIT09IG51bGwpIHtcbiAgICBzdGFjay5wdXNoKG9iaik7XG4gICAgY2Fub25pY2FsaXplZE9iaiA9IHt9O1xuICAgIHJlcGxhY2VtZW50U3RhY2sucHVzaChjYW5vbmljYWxpemVkT2JqKTtcbiAgICBsZXQgc29ydGVkS2V5cyA9IFtdLFxuICAgICAgICBrZXk7XG4gICAgZm9yIChrZXkgaW4gb2JqKSB7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgIHNvcnRlZEtleXMucHVzaChrZXkpO1xuICAgICAgfVxuICAgIH1cbiAgICBzb3J0ZWRLZXlzLnNvcnQoKTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgc29ydGVkS2V5cy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAga2V5ID0gc29ydGVkS2V5c1tpXTtcbiAgICAgIGNhbm9uaWNhbGl6ZWRPYmpba2V5XSA9IGNhbm9uaWNhbGl6ZShvYmpba2V5XSwgc3RhY2ssIHJlcGxhY2VtZW50U3RhY2ssIHJlcGxhY2VyLCBrZXkpO1xuICAgIH1cbiAgICBzdGFjay5wb3AoKTtcbiAgICByZXBsYWNlbWVudFN0YWNrLnBvcCgpO1xuICB9IGVsc2Uge1xuICAgIGNhbm9uaWNhbGl6ZWRPYmogPSBvYmo7XG4gIH1cbiAgcmV0dXJuIGNhbm9uaWNhbGl6ZWRPYmo7XG59XG4iXX0=
+
+
+/***/ }),
+
+/***/ 41591:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+/*istanbul ignore start*/
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.diffLines = diffLines;
+exports.diffTrimmedLines = diffTrimmedLines;
+exports.lineDiff = void 0;
+
+/*istanbul ignore end*/
+var
+/*istanbul ignore start*/
+_base = _interopRequireDefault(__nccwpck_require__(21653))
+/*istanbul ignore end*/
+;
+
+var
+/*istanbul ignore start*/
+_params = __nccwpck_require__(45704)
+/*istanbul ignore end*/
+;
+
+/*istanbul ignore start*/ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
+
+/*istanbul ignore end*/
+var lineDiff = new
+/*istanbul ignore start*/
+_base
+/*istanbul ignore end*/
+[
+/*istanbul ignore start*/
+"default"
+/*istanbul ignore end*/
+]();
+
+/*istanbul ignore start*/
+exports.lineDiff = lineDiff;
+
+/*istanbul ignore end*/
+lineDiff.tokenize = function (value) {
+ var retLines = [],
+ linesAndNewlines = value.split(/(\n|\r\n)/); // Ignore the final empty token that occurs if the string ends with a new line
+
+ if (!linesAndNewlines[linesAndNewlines.length - 1]) {
+ linesAndNewlines.pop();
+ } // Merge the content and line separators into single tokens
+
+
+ for (var i = 0; i < linesAndNewlines.length; i++) {
+ var line = linesAndNewlines[i];
+
+ if (i % 2 && !this.options.newlineIsToken) {
+ retLines[retLines.length - 1] += line;
+ } else {
+ if (this.options.ignoreWhitespace) {
+ line = line.trim();
+ }
+
+ retLines.push(line);
+ }
+ }
+
+ return retLines;
+};
+
+function diffLines(oldStr, newStr, callback) {
+ return lineDiff.diff(oldStr, newStr, callback);
+}
+
+function diffTrimmedLines(oldStr, newStr, callback) {
+ var options =
+ /*istanbul ignore start*/
+ (0,
+ /*istanbul ignore end*/
+
+ /*istanbul ignore start*/
+ _params
+ /*istanbul ignore end*/
+ .
+ /*istanbul ignore start*/
+ generateOptions)
+ /*istanbul ignore end*/
+ (callback, {
+ ignoreWhitespace: true
+ });
+ return lineDiff.diff(oldStr, newStr, options);
+}
+//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kaWZmL2xpbmUuanMiXSwibmFtZXMiOlsibGluZURpZmYiLCJEaWZmIiwidG9rZW5pemUiLCJ2YWx1ZSIsInJldExpbmVzIiwibGluZXNBbmROZXdsaW5lcyIsInNwbGl0IiwibGVuZ3RoIiwicG9wIiwiaSIsImxpbmUiLCJvcHRpb25zIiwibmV3bGluZUlzVG9rZW4iLCJpZ25vcmVXaGl0ZXNwYWNlIiwidHJpbSIsInB1c2giLCJkaWZmTGluZXMiLCJvbGRTdHIiLCJuZXdTdHIiLCJjYWxsYmFjayIsImRpZmYiLCJkaWZmVHJpbW1lZExpbmVzIiwiZ2VuZXJhdGVPcHRpb25zIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTs7Ozs7QUFFTyxJQUFNQSxRQUFRLEdBQUc7QUFBSUM7QUFBQUE7QUFBQUE7QUFBQUE7QUFBQUE7QUFBQUE7QUFBQUE7QUFBQUEsQ0FBSixFQUFqQjs7Ozs7O0FBQ1BELFFBQVEsQ0FBQ0UsUUFBVCxHQUFvQixVQUFTQyxLQUFULEVBQWdCO0FBQ2xDLE1BQUlDLFFBQVEsR0FBRyxFQUFmO0FBQUEsTUFDSUMsZ0JBQWdCLEdBQUdGLEtBQUssQ0FBQ0csS0FBTixDQUFZLFdBQVosQ0FEdkIsQ0FEa0MsQ0FJbEM7O0FBQ0EsTUFBSSxDQUFDRCxnQkFBZ0IsQ0FBQ0EsZ0JBQWdCLENBQUNFLE1BQWpCLEdBQTBCLENBQTNCLENBQXJCLEVBQW9EO0FBQ2xERixJQUFBQSxnQkFBZ0IsQ0FBQ0csR0FBakI7QUFDRCxHQVBpQyxDQVNsQzs7O0FBQ0EsT0FBSyxJQUFJQyxDQUFDLEdBQUcsQ0FBYixFQUFnQkEsQ0FBQyxHQUFHSixnQkFBZ0IsQ0FBQ0UsTUFBckMsRUFBNkNFLENBQUMsRUFBOUMsRUFBa0Q7QUFDaEQsUUFBSUMsSUFBSSxHQUFHTCxnQkFBZ0IsQ0FBQ0ksQ0FBRCxDQUEzQjs7QUFFQSxRQUFJQSxDQUFDLEdBQUcsQ0FBSixJQUFTLENBQUMsS0FBS0UsT0FBTCxDQUFhQyxjQUEzQixFQUEyQztBQUN6Q1IsTUFBQUEsUUFBUSxDQUFDQSxRQUFRLENBQUNHLE1BQVQsR0FBa0IsQ0FBbkIsQ0FBUixJQUFpQ0csSUFBakM7QUFDRCxLQUZELE1BRU87QUFDTCxVQUFJLEtBQUtDLE9BQUwsQ0FBYUUsZ0JBQWpCLEVBQW1DO0FBQ2pDSCxRQUFBQSxJQUFJLEdBQUdBLElBQUksQ0FBQ0ksSUFBTCxFQUFQO0FBQ0Q7O0FBQ0RWLE1BQUFBLFFBQVEsQ0FBQ1csSUFBVCxDQUFjTCxJQUFkO0FBQ0Q7QUFDRjs7QUFFRCxTQUFPTixRQUFQO0FBQ0QsQ0F4QkQ7O0FBMEJPLFNBQVNZLFNBQVQsQ0FBbUJDLE1BQW5CLEVBQTJCQyxNQUEzQixFQUFtQ0MsUUFBbkMsRUFBNkM7QUFBRSxTQUFPbkIsUUFBUSxDQUFDb0IsSUFBVCxDQUFjSCxNQUFkLEVBQXNCQyxNQUF0QixFQUE4QkMsUUFBOUIsQ0FBUDtBQUFpRDs7QUFDaEcsU0FBU0UsZ0JBQVQsQ0FBMEJKLE1BQTFCLEVBQWtDQyxNQUFsQyxFQUEwQ0MsUUFBMUMsRUFBb0Q7QUFDekQsTUFBSVIsT0FBTztBQUFHO0FBQUE7QUFBQTs7QUFBQVc7QUFBQUE7QUFBQUE7QUFBQUE7QUFBQUE7QUFBQUE7QUFBQTtBQUFBLEdBQWdCSCxRQUFoQixFQUEwQjtBQUFDTixJQUFBQSxnQkFBZ0IsRUFBRTtBQUFuQixHQUExQixDQUFkO0FBQ0EsU0FBT2IsUUFBUSxDQUFDb0IsSUFBVCxDQUFjSCxNQUFkLEVBQXNCQyxNQUF0QixFQUE4QlAsT0FBOUIsQ0FBUDtBQUNEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IERpZmYgZnJvbSAnLi9iYXNlJztcbmltcG9ydCB7Z2VuZXJhdGVPcHRpb25zfSBmcm9tICcuLi91dGlsL3BhcmFtcyc7XG5cbmV4cG9ydCBjb25zdCBsaW5lRGlmZiA9IG5ldyBEaWZmKCk7XG5saW5lRGlmZi50b2tlbml6ZSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIGxldCByZXRMaW5lcyA9IFtdLFxuICAgICAgbGluZXNBbmROZXdsaW5lcyA9IHZhbHVlLnNwbGl0KC8oXFxufFxcclxcbikvKTtcblxuICAvLyBJZ25vcmUgdGhlIGZpbmFsIGVtcHR5IHRva2VuIHRoYXQgb2NjdXJzIGlmIHRoZSBzdHJpbmcgZW5kcyB3aXRoIGEgbmV3IGxpbmVcbiAgaWYgKCFsaW5lc0FuZE5ld2xpbmVzW2xpbmVzQW5kTmV3bGluZXMubGVuZ3RoIC0gMV0pIHtcbiAgICBsaW5lc0FuZE5ld2xpbmVzLnBvcCgpO1xuICB9XG5cbiAgLy8gTWVyZ2UgdGhlIGNvbnRlbnQgYW5kIGxpbmUgc2VwYXJhdG9ycyBpbnRvIHNpbmdsZSB0b2tlbnNcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lc0FuZE5ld2xpbmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgbGV0IGxpbmUgPSBsaW5lc0FuZE5ld2xpbmVzW2ldO1xuXG4gICAgaWYgKGkgJSAyICYmICF0aGlzLm9wdGlvbnMubmV3bGluZUlzVG9rZW4pIHtcbiAgICAgIHJldExpbmVzW3JldExpbmVzLmxlbmd0aCAtIDFdICs9IGxpbmU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuaWdub3JlV2hpdGVzcGFjZSkge1xuICAgICAgICBsaW5lID0gbGluZS50cmltKCk7XG4gICAgICB9XG4gICAgICByZXRMaW5lcy5wdXNoKGxpbmUpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXRMaW5lcztcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBkaWZmTGluZXMob2xkU3RyLCBuZXdTdHIsIGNhbGxiYWNrKSB7IHJldHVybiBsaW5lRGlmZi5kaWZmKG9sZFN0ciwgbmV3U3RyLCBjYWxsYmFjayk7IH1cbmV4cG9ydCBmdW5jdGlvbiBkaWZmVHJpbW1lZExpbmVzKG9sZFN0ciwgbmV3U3RyLCBjYWxsYmFjaykge1xuICBsZXQgb3B0aW9ucyA9IGdlbmVyYXRlT3B0aW9ucyhjYWxsYmFjaywge2lnbm9yZVdoaXRlc3BhY2U6IHRydWV9KTtcbiAgcmV0dXJuIGxpbmVEaWZmLmRpZmYob2xkU3RyLCBuZXdTdHIsIG9wdGlvbnMpO1xufVxuIl19
+
+
+/***/ }),
+
+/***/ 33577:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+/*istanbul ignore start*/
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.diffSentences = diffSentences;
+exports.sentenceDiff = void 0;
+
+/*istanbul ignore end*/
+var
+/*istanbul ignore start*/
+_base = _interopRequireDefault(__nccwpck_require__(21653))
+/*istanbul ignore end*/
+;
+
+/*istanbul ignore start*/ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
+
+/*istanbul ignore end*/
+var sentenceDiff = new
+/*istanbul ignore start*/
+_base
+/*istanbul ignore end*/
+[
+/*istanbul ignore start*/
+"default"
+/*istanbul ignore end*/
+]();
+
+/*istanbul ignore start*/
+exports.sentenceDiff = sentenceDiff;
+
+/*istanbul ignore end*/
+sentenceDiff.tokenize = function (value) {
+ return value.split(/(\S.+?[.!?])(?=\s+|$)/);
+};
+
+function diffSentences(oldStr, newStr, callback) {
+ return sentenceDiff.diff(oldStr, newStr, callback);
+}
+//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kaWZmL3NlbnRlbmNlLmpzIl0sIm5hbWVzIjpbInNlbnRlbmNlRGlmZiIsIkRpZmYiLCJ0b2tlbml6ZSIsInZhbHVlIiwic3BsaXQiLCJkaWZmU2VudGVuY2VzIiwib2xkU3RyIiwibmV3U3RyIiwiY2FsbGJhY2siLCJkaWZmIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7Ozs7QUFHTyxJQUFNQSxZQUFZLEdBQUc7QUFBSUM7QUFBQUE7QUFBQUE7QUFBQUE7QUFBQUE7QUFBQUE7QUFBQUE7QUFBQUEsQ0FBSixFQUFyQjs7Ozs7O0FBQ1BELFlBQVksQ0FBQ0UsUUFBYixHQUF3QixVQUFTQyxLQUFULEVBQWdCO0FBQ3RDLFNBQU9BLEtBQUssQ0FBQ0MsS0FBTixDQUFZLHVCQUFaLENBQVA7QUFDRCxDQUZEOztBQUlPLFNBQVNDLGFBQVQsQ0FBdUJDLE1BQXZCLEVBQStCQyxNQUEvQixFQUF1Q0MsUUFBdkMsRUFBaUQ7QUFBRSxTQUFPUixZQUFZLENBQUNTLElBQWIsQ0FBa0JILE1BQWxCLEVBQTBCQyxNQUExQixFQUFrQ0MsUUFBbEMsQ0FBUDtBQUFxRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBEaWZmIGZyb20gJy4vYmFzZSc7XG5cblxuZXhwb3J0IGNvbnN0IHNlbnRlbmNlRGlmZiA9IG5ldyBEaWZmKCk7XG5zZW50ZW5jZURpZmYudG9rZW5pemUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUuc3BsaXQoLyhcXFMuKz9bLiE/XSkoPz1cXHMrfCQpLyk7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZGlmZlNlbnRlbmNlcyhvbGRTdHIsIG5ld1N0ciwgY2FsbGJhY2spIHsgcmV0dXJuIHNlbnRlbmNlRGlmZi5kaWZmKG9sZFN0ciwgbmV3U3RyLCBjYWxsYmFjayk7IH1cbiJdfQ==
+
+
+/***/ }),
+
+/***/ 46992:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+/*istanbul ignore start*/
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.diffWords = diffWords;
+exports.diffWordsWithSpace = diffWordsWithSpace;
+exports.wordDiff = void 0;
+
+/*istanbul ignore end*/
+var
+/*istanbul ignore start*/
+_base = _interopRequireDefault(__nccwpck_require__(21653))
+/*istanbul ignore end*/
+;
+
+var
+/*istanbul ignore start*/
+_params = __nccwpck_require__(45704)
+/*istanbul ignore end*/
+;
+
+/*istanbul ignore start*/ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
+
+/*istanbul ignore end*/
+// Based on https://en.wikipedia.org/wiki/Latin_script_in_Unicode
+//
+// Ranges and exceptions:
+// Latin-1 Supplement, 0080–00FF
+// - U+00D7 × Multiplication sign
+// - U+00F7 ÷ Division sign
+// Latin Extended-A, 0100–017F
+// Latin Extended-B, 0180–024F
+// IPA Extensions, 0250–02AF
+// Spacing Modifier Letters, 02B0–02FF
+// - U+02C7 ˇ ˇ Caron
+// - U+02D8 ˘ ˘ Breve
+// - U+02D9 ˙ ˙ Dot Above
+// - U+02DA ˚ ˚ Ring Above
+// - U+02DB ˛ ˛ Ogonek
+// - U+02DC ˜ ˜ Small Tilde
+// - U+02DD ˝ ˝ Double Acute Accent
+// Latin Extended Additional, 1E00–1EFF
+var extendedWordChars = /^[A-Za-z\xC0-\u02C6\u02C8-\u02D7\u02DE-\u02FF\u1E00-\u1EFF]+$/;
+var reWhitespace = /\S/;
+var wordDiff = new
+/*istanbul ignore start*/
+_base
+/*istanbul ignore end*/
+[
+/*istanbul ignore start*/
+"default"
+/*istanbul ignore end*/
+]();
+
+/*istanbul ignore start*/
+exports.wordDiff = wordDiff;
+
+/*istanbul ignore end*/
+wordDiff.equals = function (left, right) {
+ if (this.options.ignoreCase) {
+ left = left.toLowerCase();
+ right = right.toLowerCase();
+ }
+
+ return left === right || this.options.ignoreWhitespace && !reWhitespace.test(left) && !reWhitespace.test(right);
+};
+
+wordDiff.tokenize = function (value) {
+ // All whitespace symbols except newline group into one token, each newline - in separate token
+ var tokens = value.split(/([^\S\r\n]+|[()[\]{}'"\r\n]|\b)/); // Join the boundary splits that we do not consider to be boundaries. This is primarily the extended Latin character set.
+
+ for (var i = 0; i < tokens.length - 1; i++) {
+ // If we have an empty string in the next field and we have only word chars before and after, merge
+ if (!tokens[i + 1] && tokens[i + 2] && extendedWordChars.test(tokens[i]) && extendedWordChars.test(tokens[i + 2])) {
+ tokens[i] += tokens[i + 2];
+ tokens.splice(i + 1, 2);
+ i--;
+ }
+ }
+
+ return tokens;
+};
+
+function diffWords(oldStr, newStr, options) {
+ options =
+ /*istanbul ignore start*/
+ (0,
+ /*istanbul ignore end*/
+
+ /*istanbul ignore start*/
+ _params
+ /*istanbul ignore end*/
+ .
+ /*istanbul ignore start*/
+ generateOptions)
+ /*istanbul ignore end*/
+ (options, {
+ ignoreWhitespace: true
+ });
+ return wordDiff.diff(oldStr, newStr, options);
+}
+
+function diffWordsWithSpace(oldStr, newStr, options) {
+ return wordDiff.diff(oldStr, newStr, options);
+}
+//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kaWZmL3dvcmQuanMiXSwibmFtZXMiOlsiZXh0ZW5kZWRXb3JkQ2hhcnMiLCJyZVdoaXRlc3BhY2UiLCJ3b3JkRGlmZiIsIkRpZmYiLCJlcXVhbHMiLCJsZWZ0IiwicmlnaHQiLCJvcHRpb25zIiwiaWdub3JlQ2FzZSIsInRvTG93ZXJDYXNlIiwiaWdub3JlV2hpdGVzcGFjZSIsInRlc3QiLCJ0b2tlbml6ZSIsInZhbHVlIiwidG9rZW5zIiwic3BsaXQiLCJpIiwibGVuZ3RoIiwic3BsaWNlIiwiZGlmZldvcmRzIiwib2xkU3RyIiwibmV3U3RyIiwiZ2VuZXJhdGVPcHRpb25zIiwiZGlmZiIsImRpZmZXb3Jkc1dpdGhTcGFjZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7Ozs7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBTUEsaUJBQWlCLEdBQUcsK0RBQTFCO0FBRUEsSUFBTUMsWUFBWSxHQUFHLElBQXJCO0FBRU8sSUFBTUMsUUFBUSxHQUFHO0FBQUlDO0FBQUFBO0FBQUFBO0FBQUFBO0FBQUFBO0FBQUFBO0FBQUFBO0FBQUFBLENBQUosRUFBakI7Ozs7OztBQUNQRCxRQUFRLENBQUNFLE1BQVQsR0FBa0IsVUFBU0MsSUFBVCxFQUFlQyxLQUFmLEVBQXNCO0FBQ3RDLE1BQUksS0FBS0MsT0FBTCxDQUFhQyxVQUFqQixFQUE2QjtBQUMzQkgsSUFBQUEsSUFBSSxHQUFHQSxJQUFJLENBQUNJLFdBQUwsRUFBUDtBQUNBSCxJQUFBQSxLQUFLLEdBQUdBLEtBQUssQ0FBQ0csV0FBTixFQUFSO0FBQ0Q7O0FBQ0QsU0FBT0osSUFBSSxLQUFLQyxLQUFULElBQW1CLEtBQUtDLE9BQUwsQ0FBYUcsZ0JBQWIsSUFBaUMsQ0FBQ1QsWUFBWSxDQUFDVSxJQUFiLENBQWtCTixJQUFsQixDQUFsQyxJQUE2RCxDQUFDSixZQUFZLENBQUNVLElBQWIsQ0FBa0JMLEtBQWxCLENBQXhGO0FBQ0QsQ0FORDs7QUFPQUosUUFBUSxDQUFDVSxRQUFULEdBQW9CLFVBQVNDLEtBQVQsRUFBZ0I7QUFDbEM7QUFDQSxNQUFJQyxNQUFNLEdBQUdELEtBQUssQ0FBQ0UsS0FBTixDQUFZLGlDQUFaLENBQWIsQ0FGa0MsQ0FJbEM7O0FBQ0EsT0FBSyxJQUFJQyxDQUFDLEdBQUcsQ0FBYixFQUFnQkEsQ0FBQyxHQUFHRixNQUFNLENBQUNHLE1BQVAsR0FBZ0IsQ0FBcEMsRUFBdUNELENBQUMsRUFBeEMsRUFBNEM7QUFDMUM7QUFDQSxRQUFJLENBQUNGLE1BQU0sQ0FBQ0UsQ0FBQyxHQUFHLENBQUwsQ0FBUCxJQUFrQkYsTUFBTSxDQUFDRSxDQUFDLEdBQUcsQ0FBTCxDQUF4QixJQUNLaEIsaUJBQWlCLENBQUNXLElBQWxCLENBQXVCRyxNQUFNLENBQUNFLENBQUQsQ0FBN0IsQ0FETCxJQUVLaEIsaUJBQWlCLENBQUNXLElBQWxCLENBQXVCRyxNQUFNLENBQUNFLENBQUMsR0FBRyxDQUFMLENBQTdCLENBRlQsRUFFZ0Q7QUFDOUNGLE1BQUFBLE1BQU0sQ0FBQ0UsQ0FBRCxDQUFOLElBQWFGLE1BQU0sQ0FBQ0UsQ0FBQyxHQUFHLENBQUwsQ0FBbkI7QUFDQUYsTUFBQUEsTUFBTSxDQUFDSSxNQUFQLENBQWNGLENBQUMsR0FBRyxDQUFsQixFQUFxQixDQUFyQjtBQUNBQSxNQUFBQSxDQUFDO0FBQ0Y7QUFDRjs7QUFFRCxTQUFPRixNQUFQO0FBQ0QsQ0FqQkQ7O0FBbUJPLFNBQVNLLFNBQVQsQ0FBbUJDLE1BQW5CLEVBQTJCQyxNQUEzQixFQUFtQ2QsT0FBbkMsRUFBNEM7QUFDakRBLEVBQUFBLE9BQU87QUFBRztBQUFBO0FBQUE7O0FBQUFlO0FBQUFBO0FBQUFBO0FBQUFBO0FBQUFBO0FBQUFBO0FBQUE7QUFBQSxHQUFnQmYsT0FBaEIsRUFBeUI7QUFBQ0csSUFBQUEsZ0JBQWdCLEVBQUU7QUFBbkIsR0FBekIsQ0FBVjtBQUNBLFNBQU9SLFFBQVEsQ0FBQ3FCLElBQVQsQ0FBY0gsTUFBZCxFQUFzQkMsTUFBdEIsRUFBOEJkLE9BQTlCLENBQVA7QUFDRDs7QUFFTSxTQUFTaUIsa0JBQVQsQ0FBNEJKLE1BQTVCLEVBQW9DQyxNQUFwQyxFQUE0Q2QsT0FBNUMsRUFBcUQ7QUFDMUQsU0FBT0wsUUFBUSxDQUFDcUIsSUFBVCxDQUFjSCxNQUFkLEVBQXNCQyxNQUF0QixFQUE4QmQsT0FBOUIsQ0FBUDtBQUNEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IERpZmYgZnJvbSAnLi9iYXNlJztcbmltcG9ydCB7Z2VuZXJhdGVPcHRpb25zfSBmcm9tICcuLi91dGlsL3BhcmFtcyc7XG5cbi8vIEJhc2VkIG9uIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0xhdGluX3NjcmlwdF9pbl9Vbmljb2RlXG4vL1xuLy8gUmFuZ2VzIGFuZCBleGNlcHRpb25zOlxuLy8gTGF0aW4tMSBTdXBwbGVtZW50LCAwMDgw4oCTMDBGRlxuLy8gIC0gVSswMEQ3ICDDlyBNdWx0aXBsaWNhdGlvbiBzaWduXG4vLyAgLSBVKzAwRjcgIMO3IERpdmlzaW9uIHNpZ25cbi8vIExhdGluIEV4dGVuZGVkLUEsIDAxMDDigJMwMTdGXG4vLyBMYXRpbiBFeHRlbmRlZC1CLCAwMTgw4oCTMDI0RlxuLy8gSVBBIEV4dGVuc2lvbnMsIDAyNTDigJMwMkFGXG4vLyBTcGFjaW5nIE1vZGlmaWVyIExldHRlcnMsIDAyQjDigJMwMkZGXG4vLyAgLSBVKzAyQzcgIMuHICYjNzExOyAgQ2Fyb25cbi8vICAtIFUrMDJEOCAgy5ggJiM3Mjg7ICBCcmV2ZVxuLy8gIC0gVSswMkQ5ICDLmSAmIzcyOTsgIERvdCBBYm92ZVxuLy8gIC0gVSswMkRBICDLmiAmIzczMDsgIFJpbmcgQWJvdmVcbi8vICAtIFUrMDJEQiAgy5sgJiM3MzE7ICBPZ29uZWtcbi8vICAtIFUrMDJEQyAgy5wgJiM3MzI7ICBTbWFsbCBUaWxkZVxuLy8gIC0gVSswMkREICDLnSAmIzczMzsgIERvdWJsZSBBY3V0ZSBBY2NlbnRcbi8vIExhdGluIEV4dGVuZGVkIEFkZGl0aW9uYWwsIDFFMDDigJMxRUZGXG5jb25zdCBleHRlbmRlZFdvcmRDaGFycyA9IC9eW2EtekEtWlxcdXtDMH0tXFx1e0ZGfVxcdXtEOH0tXFx1e0Y2fVxcdXtGOH0tXFx1ezJDNn1cXHV7MkM4fS1cXHV7MkQ3fVxcdXsyREV9LVxcdXsyRkZ9XFx1ezFFMDB9LVxcdXsxRUZGfV0rJC91O1xuXG5jb25zdCByZVdoaXRlc3BhY2UgPSAvXFxTLztcblxuZXhwb3J0IGNvbnN0IHdvcmREaWZmID0gbmV3IERpZmYoKTtcbndvcmREaWZmLmVxdWFscyA9IGZ1bmN0aW9uKGxlZnQsIHJpZ2h0KSB7XG4gIGlmICh0aGlzLm9wdGlvbnMuaWdub3JlQ2FzZSkge1xuICAgIGxlZnQgPSBsZWZ0LnRvTG93ZXJDYXNlKCk7XG4gICAgcmlnaHQgPSByaWdodC50b0xvd2VyQ2FzZSgpO1xuICB9XG4gIHJldHVybiBsZWZ0ID09PSByaWdodCB8fCAodGhpcy5vcHRpb25zLmlnbm9yZVdoaXRlc3BhY2UgJiYgIXJlV2hpdGVzcGFjZS50ZXN0KGxlZnQpICYmICFyZVdoaXRlc3BhY2UudGVzdChyaWdodCkpO1xufTtcbndvcmREaWZmLnRva2VuaXplID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgLy8gQWxsIHdoaXRlc3BhY2Ugc3ltYm9scyBleGNlcHQgbmV3bGluZSBncm91cCBpbnRvIG9uZSB0b2tlbiwgZWFjaCBuZXdsaW5lIC0gaW4gc2VwYXJhdGUgdG9rZW5cbiAgbGV0IHRva2VucyA9IHZhbHVlLnNwbGl0KC8oW15cXFNcXHJcXG5dK3xbKClbXFxde30nXCJcXHJcXG5dfFxcYikvKTtcblxuICAvLyBKb2luIHRoZSBib3VuZGFyeSBzcGxpdHMgdGhhdCB3ZSBkbyBub3QgY29uc2lkZXIgdG8gYmUgYm91bmRhcmllcy4gVGhpcyBpcyBwcmltYXJpbHkgdGhlIGV4dGVuZGVkIExhdGluIGNoYXJhY3RlciBzZXQuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdG9rZW5zLmxlbmd0aCAtIDE7IGkrKykge1xuICAgIC8vIElmIHdlIGhhdmUgYW4gZW1wdHkgc3RyaW5nIGluIHRoZSBuZXh0IGZpZWxkIGFuZCB3ZSBoYXZlIG9ubHkgd29yZCBjaGFycyBiZWZvcmUgYW5kIGFmdGVyLCBtZXJnZVxuICAgIGlmICghdG9rZW5zW2kgKyAxXSAmJiB0b2tlbnNbaSArIDJdXG4gICAgICAgICAgJiYgZXh0ZW5kZWRXb3JkQ2hhcnMudGVzdCh0b2tlbnNbaV0pXG4gICAgICAgICAgJiYgZXh0ZW5kZWRXb3JkQ2hhcnMudGVzdCh0b2tlbnNbaSArIDJdKSkge1xuICAgICAgdG9rZW5zW2ldICs9IHRva2Vuc1tpICsgMl07XG4gICAgICB0b2tlbnMuc3BsaWNlKGkgKyAxLCAyKTtcbiAgICAgIGktLTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdG9rZW5zO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGRpZmZXb3JkcyhvbGRTdHIsIG5ld1N0ciwgb3B0aW9ucykge1xuICBvcHRpb25zID0gZ2VuZXJhdGVPcHRpb25zKG9wdGlvbnMsIHtpZ25vcmVXaGl0ZXNwYWNlOiB0cnVlfSk7XG4gIHJldHVybiB3b3JkRGlmZi5kaWZmKG9sZFN0ciwgbmV3U3RyLCBvcHRpb25zKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRpZmZXb3Jkc1dpdGhTcGFjZShvbGRTdHIsIG5ld1N0ciwgb3B0aW9ucykge1xuICByZXR1cm4gd29yZERpZmYuZGlmZihvbGRTdHIsIG5ld1N0ciwgb3B0aW9ucyk7XG59XG4iXX0=
+
+
+/***/ }),
+
+/***/ 71672:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+/*istanbul ignore start*/
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+Object.defineProperty(exports, "Diff", ({
+ enumerable: true,
+ get: function get() {
+ return _base["default"];
+ }
+}));
+Object.defineProperty(exports, "diffChars", ({
+ enumerable: true,
+ get: function get() {
+ return _character.diffChars;
+ }
+}));
+Object.defineProperty(exports, "diffWords", ({
+ enumerable: true,
+ get: function get() {
+ return _word.diffWords;
+ }
+}));
+Object.defineProperty(exports, "diffWordsWithSpace", ({
+ enumerable: true,
+ get: function get() {
+ return _word.diffWordsWithSpace;
+ }
+}));
+Object.defineProperty(exports, "diffLines", ({
+ enumerable: true,
+ get: function get() {
+ return _line.diffLines;
+ }
+}));
+Object.defineProperty(exports, "diffTrimmedLines", ({
+ enumerable: true,
+ get: function get() {
+ return _line.diffTrimmedLines;
+ }
+}));
+Object.defineProperty(exports, "diffSentences", ({
+ enumerable: true,
+ get: function get() {
+ return _sentence.diffSentences;
+ }
+}));
+Object.defineProperty(exports, "diffCss", ({
+ enumerable: true,
+ get: function get() {
+ return _css.diffCss;
+ }
+}));
+Object.defineProperty(exports, "diffJson", ({
+ enumerable: true,
+ get: function get() {
+ return _json.diffJson;
+ }
+}));
+Object.defineProperty(exports, "canonicalize", ({
+ enumerable: true,
+ get: function get() {
+ return _json.canonicalize;
+ }
+}));
+Object.defineProperty(exports, "diffArrays", ({
+ enumerable: true,
+ get: function get() {
+ return _array.diffArrays;
+ }
+}));
+Object.defineProperty(exports, "applyPatch", ({
+ enumerable: true,
+ get: function get() {
+ return _apply.applyPatch;
+ }
+}));
+Object.defineProperty(exports, "applyPatches", ({
+ enumerable: true,
+ get: function get() {
+ return _apply.applyPatches;
+ }
+}));
+Object.defineProperty(exports, "parsePatch", ({
+ enumerable: true,
+ get: function get() {
+ return _parse.parsePatch;
+ }
+}));
+Object.defineProperty(exports, "merge", ({
+ enumerable: true,
+ get: function get() {
+ return _merge.merge;
+ }
+}));
+Object.defineProperty(exports, "structuredPatch", ({
+ enumerable: true,
+ get: function get() {
+ return _create.structuredPatch;
+ }
+}));
+Object.defineProperty(exports, "createTwoFilesPatch", ({
+ enumerable: true,
+ get: function get() {
+ return _create.createTwoFilesPatch;
+ }
+}));
+Object.defineProperty(exports, "createPatch", ({
+ enumerable: true,
+ get: function get() {
+ return _create.createPatch;
+ }
+}));
+Object.defineProperty(exports, "convertChangesToDMP", ({
+ enumerable: true,
+ get: function get() {
+ return _dmp.convertChangesToDMP;
+ }
+}));
+Object.defineProperty(exports, "convertChangesToXML", ({
+ enumerable: true,
+ get: function get() {
+ return _xml.convertChangesToXML;
+ }
+}));
+
+/*istanbul ignore end*/
+var
+/*istanbul ignore start*/
+_base = _interopRequireDefault(__nccwpck_require__(21653))
+/*istanbul ignore end*/
+;
+
+var
+/*istanbul ignore start*/
+_character = __nccwpck_require__(22081)
+/*istanbul ignore end*/
+;
+
+var
+/*istanbul ignore start*/
+_word = __nccwpck_require__(46992)
+/*istanbul ignore end*/
+;
+
+var
+/*istanbul ignore start*/
+_line = __nccwpck_require__(41591)
+/*istanbul ignore end*/
+;
+
+var
+/*istanbul ignore start*/
+_sentence = __nccwpck_require__(33577)
+/*istanbul ignore end*/
+;
+
+var
+/*istanbul ignore start*/
+_css = __nccwpck_require__(48941)
+/*istanbul ignore end*/
+;
+
+var
+/*istanbul ignore start*/
+_json = __nccwpck_require__(86335)
+/*istanbul ignore end*/
+;
+
+var
+/*istanbul ignore start*/
+_array = __nccwpck_require__(70546)
+/*istanbul ignore end*/
+;
+
+var
+/*istanbul ignore start*/
+_apply = __nccwpck_require__(17429)
+/*istanbul ignore end*/
+;
+
+var
+/*istanbul ignore start*/
+_parse = __nccwpck_require__(15870)
+/*istanbul ignore end*/
+;
+
+var
+/*istanbul ignore start*/
+_merge = __nccwpck_require__(22640)
+/*istanbul ignore end*/
+;
+
+var
+/*istanbul ignore start*/
+_create = __nccwpck_require__(64543)
+/*istanbul ignore end*/
+;
+
+var
+/*istanbul ignore start*/
+_dmp = __nccwpck_require__(32859)
+/*istanbul ignore end*/
+;
+
+var
+/*istanbul ignore start*/
+_xml = __nccwpck_require__(16982)
+/*istanbul ignore end*/
+;
+
+/*istanbul ignore start*/ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
+
+/*istanbul ignore end*/
+//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWdCQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBTZWUgTElDRU5TRSBmaWxlIGZvciB0ZXJtcyBvZiB1c2UgKi9cblxuLypcbiAqIFRleHQgZGlmZiBpbXBsZW1lbnRhdGlvbi5cbiAqXG4gKiBUaGlzIGxpYnJhcnkgc3VwcG9ydHMgdGhlIGZvbGxvd2luZyBBUElTOlxuICogSnNEaWZmLmRpZmZDaGFyczogQ2hhcmFjdGVyIGJ5IGNoYXJhY3RlciBkaWZmXG4gKiBKc0RpZmYuZGlmZldvcmRzOiBXb3JkIChhcyBkZWZpbmVkIGJ5IFxcYiByZWdleCkgZGlmZiB3aGljaCBpZ25vcmVzIHdoaXRlc3BhY2VcbiAqIEpzRGlmZi5kaWZmTGluZXM6IExpbmUgYmFzZWQgZGlmZlxuICpcbiAqIEpzRGlmZi5kaWZmQ3NzOiBEaWZmIHRhcmdldGVkIGF0IENTUyBjb250ZW50XG4gKlxuICogVGhlc2UgbWV0aG9kcyBhcmUgYmFzZWQgb24gdGhlIGltcGxlbWVudGF0aW9uIHByb3Bvc2VkIGluXG4gKiBcIkFuIE8oTkQpIERpZmZlcmVuY2UgQWxnb3JpdGhtIGFuZCBpdHMgVmFyaWF0aW9uc1wiIChNeWVycywgMTk4NikuXG4gKiBodHRwOi8vY2l0ZXNlZXJ4LmlzdC5wc3UuZWR1L3ZpZXdkb2Mvc3VtbWFyeT9kb2k9MTAuMS4xLjQuNjkyN1xuICovXG5pbXBvcnQgRGlmZiBmcm9tICcuL2RpZmYvYmFzZSc7XG5pbXBvcnQge2RpZmZDaGFyc30gZnJvbSAnLi9kaWZmL2NoYXJhY3Rlcic7XG5pbXBvcnQge2RpZmZXb3JkcywgZGlmZldvcmRzV2l0aFNwYWNlfSBmcm9tICcuL2RpZmYvd29yZCc7XG5pbXBvcnQge2RpZmZMaW5lcywgZGlmZlRyaW1tZWRMaW5lc30gZnJvbSAnLi9kaWZmL2xpbmUnO1xuaW1wb3J0IHtkaWZmU2VudGVuY2VzfSBmcm9tICcuL2RpZmYvc2VudGVuY2UnO1xuXG5pbXBvcnQge2RpZmZDc3N9IGZyb20gJy4vZGlmZi9jc3MnO1xuaW1wb3J0IHtkaWZmSnNvbiwgY2Fub25pY2FsaXplfSBmcm9tICcuL2RpZmYvanNvbic7XG5cbmltcG9ydCB7ZGlmZkFycmF5c30gZnJvbSAnLi9kaWZmL2FycmF5JztcblxuaW1wb3J0IHthcHBseVBhdGNoLCBhcHBseVBhdGNoZXN9IGZyb20gJy4vcGF0Y2gvYXBwbHknO1xuaW1wb3J0IHtwYXJzZVBhdGNofSBmcm9tICcuL3BhdGNoL3BhcnNlJztcbmltcG9ydCB7bWVyZ2V9IGZyb20gJy4vcGF0Y2gvbWVyZ2UnO1xuaW1wb3J0IHtzdHJ1Y3R1cmVkUGF0Y2gsIGNyZWF0ZVR3b0ZpbGVzUGF0Y2gsIGNyZWF0ZVBhdGNofSBmcm9tICcuL3BhdGNoL2NyZWF0ZSc7XG5cbmltcG9ydCB7Y29udmVydENoYW5nZXNUb0RNUH0gZnJvbSAnLi9jb252ZXJ0L2RtcCc7XG5pbXBvcnQge2NvbnZlcnRDaGFuZ2VzVG9YTUx9IGZyb20gJy4vY29udmVydC94bWwnO1xuXG5leHBvcnQge1xuICBEaWZmLFxuXG4gIGRpZmZDaGFycyxcbiAgZGlmZldvcmRzLFxuICBkaWZmV29yZHNXaXRoU3BhY2UsXG4gIGRpZmZMaW5lcyxcbiAgZGlmZlRyaW1tZWRMaW5lcyxcbiAgZGlmZlNlbnRlbmNlcyxcblxuICBkaWZmQ3NzLFxuICBkaWZmSnNvbixcblxuICBkaWZmQXJyYXlzLFxuXG4gIHN0cnVjdHVyZWRQYXRjaCxcbiAgY3JlYXRlVHdvRmlsZXNQYXRjaCxcbiAgY3JlYXRlUGF0Y2gsXG4gIGFwcGx5UGF0Y2gsXG4gIGFwcGx5UGF0Y2hlcyxcbiAgcGFyc2VQYXRjaCxcbiAgbWVyZ2UsXG4gIGNvbnZlcnRDaGFuZ2VzVG9ETVAsXG4gIGNvbnZlcnRDaGFuZ2VzVG9YTUwsXG4gIGNhbm9uaWNhbGl6ZVxufTtcbiJdfQ==
+
+
+/***/ }),
+
+/***/ 17429:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+/*istanbul ignore start*/
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.applyPatch = applyPatch;
+exports.applyPatches = applyPatches;
+
+/*istanbul ignore end*/
+var
+/*istanbul ignore start*/
+_parse = __nccwpck_require__(15870)
+/*istanbul ignore end*/
+;
+
+var
+/*istanbul ignore start*/
+_distanceIterator = _interopRequireDefault(__nccwpck_require__(75512))
+/*istanbul ignore end*/
+;
+
+/*istanbul ignore start*/ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
+
+/*istanbul ignore end*/
+function applyPatch(source, uniDiff) {
+ /*istanbul ignore start*/
+ var
+ /*istanbul ignore end*/
+ options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
+
+ if (typeof uniDiff === 'string') {
+ uniDiff =
+ /*istanbul ignore start*/
+ (0,
+ /*istanbul ignore end*/
+
+ /*istanbul ignore start*/
+ _parse
+ /*istanbul ignore end*/
+ .
+ /*istanbul ignore start*/
+ parsePatch)
+ /*istanbul ignore end*/
+ (uniDiff);
+ }
+
+ if (Array.isArray(uniDiff)) {
+ if (uniDiff.length > 1) {
+ throw new Error('applyPatch only works with a single input.');
+ }
+
+ uniDiff = uniDiff[0];
+ } // Apply the diff to the input
+
+
+ var lines = source.split(/\r\n|[\n\v\f\r\x85]/),
+ delimiters = source.match(/\r\n|[\n\v\f\r\x85]/g) || [],
+ hunks = uniDiff.hunks,
+ compareLine = options.compareLine || function (lineNumber, line, operation, patchContent)
+ /*istanbul ignore start*/
+ {
+ return (
+ /*istanbul ignore end*/
+ line === patchContent
+ );
+ },
+ errorCount = 0,
+ fuzzFactor = options.fuzzFactor || 0,
+ minLine = 0,
+ offset = 0,
+ removeEOFNL,
+ addEOFNL;
+ /**
+ * Checks if the hunk exactly fits on the provided location
+ */
+
+
+ function hunkFits(hunk, toPos) {
+ for (var j = 0; j < hunk.lines.length; j++) {
+ var line = hunk.lines[j],
+ operation = line.length > 0 ? line[0] : ' ',
+ content = line.length > 0 ? line.substr(1) : line;
+
+ if (operation === ' ' || operation === '-') {
+ // Context sanity check
+ if (!compareLine(toPos + 1, lines[toPos], operation, content)) {
+ errorCount++;
+
+ if (errorCount > fuzzFactor) {
+ return false;
+ }
+ }
+
+ toPos++;
+ }
+ }
+
+ return true;
+ } // Search best fit offsets for each hunk based on the previous ones
+
+
+ for (var i = 0; i < hunks.length; i++) {
+ var hunk = hunks[i],
+ maxLine = lines.length - hunk.oldLines,
+ localOffset = 0,
+ toPos = offset + hunk.oldStart - 1;
+ var iterator =
+ /*istanbul ignore start*/
+ (0,
+ /*istanbul ignore end*/
+
+ /*istanbul ignore start*/
+ _distanceIterator
+ /*istanbul ignore end*/
+ [
+ /*istanbul ignore start*/
+ "default"
+ /*istanbul ignore end*/
+ ])(toPos, minLine, maxLine);
+
+ for (; localOffset !== undefined; localOffset = iterator()) {
+ if (hunkFits(hunk, toPos + localOffset)) {
+ hunk.offset = offset += localOffset;
+ break;
+ }
+ }
+
+ if (localOffset === undefined) {
+ return false;
+ } // Set lower text limit to end of the current hunk, so next ones don't try
+ // to fit over already patched text
+
+
+ minLine = hunk.offset + hunk.oldStart + hunk.oldLines;
+ } // Apply patch hunks
+
+
+ var diffOffset = 0;
+
+ for (var _i = 0; _i < hunks.length; _i++) {
+ var _hunk = hunks[_i],
+ _toPos = _hunk.oldStart + _hunk.offset + diffOffset - 1;
+
+ diffOffset += _hunk.newLines - _hunk.oldLines;
+
+ for (var j = 0; j < _hunk.lines.length; j++) {
+ var line = _hunk.lines[j],
+ operation = line.length > 0 ? line[0] : ' ',
+ content = line.length > 0 ? line.substr(1) : line,
+ delimiter = _hunk.linedelimiters[j];
+
+ if (operation === ' ') {
+ _toPos++;
+ } else if (operation === '-') {
+ lines.splice(_toPos, 1);
+ delimiters.splice(_toPos, 1);
+ /* istanbul ignore else */
+ } else if (operation === '+') {
+ lines.splice(_toPos, 0, content);
+ delimiters.splice(_toPos, 0, delimiter);
+ _toPos++;
+ } else if (operation === '\\') {
+ var previousOperation = _hunk.lines[j - 1] ? _hunk.lines[j - 1][0] : null;
+
+ if (previousOperation === '+') {
+ removeEOFNL = true;
+ } else if (previousOperation === '-') {
+ addEOFNL = true;
+ }
+ }
+ }
+ } // Handle EOFNL insertion/removal
+
+
+ if (removeEOFNL) {
+ while (!lines[lines.length - 1]) {
+ lines.pop();
+ delimiters.pop();
+ }
+ } else if (addEOFNL) {
+ lines.push('');
+ delimiters.push('\n');
+ }
+
+ for (var _k = 0; _k < lines.length - 1; _k++) {
+ lines[_k] = lines[_k] + delimiters[_k];
+ }
+
+ return lines.join('');
+} // Wrapper that supports multiple file patches via callbacks.
+
+
+function applyPatches(uniDiff, options) {
+ if (typeof uniDiff === 'string') {
+ uniDiff =
+ /*istanbul ignore start*/
+ (0,
+ /*istanbul ignore end*/
+
+ /*istanbul ignore start*/
+ _parse
+ /*istanbul ignore end*/
+ .
+ /*istanbul ignore start*/
+ parsePatch)
+ /*istanbul ignore end*/
+ (uniDiff);
+ }
+
+ var currentIndex = 0;
+
+ function processIndex() {
+ var index = uniDiff[currentIndex++];
+
+ if (!index) {
+ return options.complete();
+ }
+
+ options.loadFile(index, function (err, data) {
+ if (err) {
+ return options.complete(err);
+ }
+
+ var updatedContent = applyPatch(data, index, options);
+ options.patched(index, updatedContent, function (err) {
+ if (err) {
+ return options.complete(err);
+ }
+
+ processIndex();
+ });
+ });
+ }
+
+ processIndex();
+}
+//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wYXRjaC9hcHBseS5qcyJdLCJuYW1lcyI6WyJhcHBseVBhdGNoIiwic291cmNlIiwidW5pRGlmZiIsIm9wdGlvbnMiLCJwYXJzZVBhdGNoIiwiQXJyYXkiLCJpc0FycmF5IiwibGVuZ3RoIiwiRXJyb3IiLCJsaW5lcyIsInNwbGl0IiwiZGVsaW1pdGVycyIsIm1hdGNoIiwiaHVua3MiLCJjb21wYXJlTGluZSIsImxpbmVOdW1iZXIiLCJsaW5lIiwib3BlcmF0aW9uIiwicGF0Y2hDb250ZW50IiwiZXJyb3JDb3VudCIsImZ1enpGYWN0b3IiLCJtaW5MaW5lIiwib2Zmc2V0IiwicmVtb3ZlRU9GTkwiLCJhZGRFT0ZOTCIsImh1bmtGaXRzIiwiaHVuayIsInRvUG9zIiwiaiIsImNvbnRlbnQiLCJzdWJzdHIiLCJpIiwibWF4TGluZSIsIm9sZExpbmVzIiwibG9jYWxPZmZzZXQiLCJvbGRTdGFydCIsIml0ZXJhdG9yIiwiZGlzdGFuY2VJdGVyYXRvciIsInVuZGVmaW5lZCIsImRpZmZPZmZzZXQiLCJuZXdMaW5lcyIsImRlbGltaXRlciIsImxpbmVkZWxpbWl0ZXJzIiwic3BsaWNlIiwicHJldmlvdXNPcGVyYXRpb24iLCJwb3AiLCJwdXNoIiwiX2siLCJqb2luIiwiYXBwbHlQYXRjaGVzIiwiY3VycmVudEluZGV4IiwicHJvY2Vzc0luZGV4IiwiaW5kZXgiLCJjb21wbGV0ZSIsImxvYWRGaWxlIiwiZXJyIiwiZGF0YSIsInVwZGF0ZWRDb250ZW50IiwicGF0Y2hlZCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTs7Ozs7QUFFTyxTQUFTQSxVQUFULENBQW9CQyxNQUFwQixFQUE0QkMsT0FBNUIsRUFBbUQ7QUFBQTtBQUFBO0FBQUE7QUFBZEMsRUFBQUEsT0FBYyx1RUFBSixFQUFJOztBQUN4RCxNQUFJLE9BQU9ELE9BQVAsS0FBbUIsUUFBdkIsRUFBaUM7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QUNEOztBQUVELE1BQUlnRCxZQUFZLEdBQUcsQ0FBbkI7O0FBQ0EsV0FBU0MsWUFBVCxHQUF3QjtBQUN0QixRQUFJQyxLQUFLLEdBQUdsRCxPQUFPLENBQUNnRCxZQUFZLEVBQWIsQ0FBbkI7O0FBQ0EsUUFBSSxDQUFDRSxLQUFMLEVBQVk7QUFDVixhQUFPakQsT0FBTyxDQUFDa0QsUUFBUixFQUFQO0FBQ0Q7O0FBRURsRCxJQUFBQSxPQUFPLENBQUNtRCxRQUFSLENBQWlCRixLQUFqQixFQUF3QixVQUFTRyxHQUFULEVBQWNDLElBQWQsRUFBb0I7QUFDMUMsVUFBSUQsR0FBSixFQUFTO0FBQ1AsZUFBT3BELE9BQU8sQ0FBQ2tELFFBQVIsQ0FBaUJFLEdBQWpCLENBQVA7QUFDRDs7QUFFRCxVQUFJRSxjQUFjLEdBQUd6RCxVQUFVLENBQUN3RCxJQUFELEVBQU9KLEtBQVAsRUFBY2pELE9BQWQsQ0FBL0I7QUFDQUEsTUFBQUEsT0FBTyxDQUFDdUQsT0FBUixDQUFnQk4sS0FBaEIsRUFBdUJLLGNBQXZCLEVBQXVDLFVBQVNGLEdBQVQsRUFBYztBQUNuRCxZQUFJQSxHQUFKLEVBQVM7QUFDUCxpQkFBT3BELE9BQU8sQ0FBQ2tELFFBQVIsQ0FBaUJFLEdBQWpCLENBQVA7QUFDRDs7QUFFREosUUFBQUEsWUFBWTtBQUNiLE9BTkQ7QUFPRCxLQWJEO0FBY0Q7O0FBQ0RBLEVBQUFBLFlBQVk7QUFDYiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7cGFyc2VQYXRjaH0gZnJvbSAnLi9wYXJzZSc7XG5pbXBvcnQgZGlzdGFuY2VJdGVyYXRvciBmcm9tICcuLi91dGlsL2Rpc3RhbmNlLWl0ZXJhdG9yJztcblxuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5UGF0Y2goc291cmNlLCB1bmlEaWZmLCBvcHRpb25zID0ge30pIHtcbiAgaWYgKHR5cGVvZiB1bmlEaWZmID09PSAnc3RyaW5nJykge1xuICAgIHVuaURpZmYgPSBwYXJzZVBhdGNoKHVuaURpZmYpO1xuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkodW5pRGlmZikpIHtcbiAgICBpZiAodW5pRGlmZi5sZW5ndGggPiAxKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2FwcGx5UGF0Y2ggb25seSB3b3JrcyB3aXRoIGEgc2luZ2xlIGlucHV0LicpO1xuICAgIH1cblxuICAgIHVuaURpZmYgPSB1bmlEaWZmWzBdO1xuICB9XG5cbiAgLy8gQXBwbHkgdGhlIGRpZmYgdG8gdGhlIGlucHV0XG4gIGxldCBsaW5lcyA9IHNvdXJjZS5zcGxpdCgvXFxyXFxufFtcXG5cXHZcXGZcXHJcXHg4NV0vKSxcbiAgICAgIGRlbGltaXRlcnMgPSBzb3VyY2UubWF0Y2goL1xcclxcbnxbXFxuXFx2XFxmXFxyXFx4ODVdL2cpIHx8IFtdLFxuICAgICAgaHVua3MgPSB1bmlEaWZmLmh1bmtzLFxuXG4gICAgICBjb21wYXJlTGluZSA9IG9wdGlvbnMuY29tcGFyZUxpbmUgfHwgKChsaW5lTnVtYmVyLCBsaW5lLCBvcGVyYXRpb24sIHBhdGNoQ29udGVudCkgPT4gbGluZSA9PT0gcGF0Y2hDb250ZW50KSxcbiAgICAgIGVycm9yQ291bnQgPSAwLFxuICAgICAgZnV6ekZhY3RvciA9IG9wdGlvbnMuZnV6ekZhY3RvciB8fCAwLFxuICAgICAgbWluTGluZSA9IDAsXG4gICAgICBvZmZzZXQgPSAwLFxuXG4gICAgICByZW1vdmVFT0ZOTCxcbiAgICAgIGFkZEVPRk5MO1xuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhlIGh1bmsgZXhhY3RseSBmaXRzIG9uIHRoZSBwcm92aWRlZCBsb2NhdGlvblxuICAgKi9cbiAgZnVuY3Rpb24gaHVua0ZpdHMoaHVuaywgdG9Qb3MpIHtcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IGh1bmsubGluZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgIGxldCBsaW5lID0gaHVuay5saW5lc1tqXSxcbiAgICAgICAgICBvcGVyYXRpb24gPSAobGluZS5sZW5ndGggPiAwID8gbGluZVswXSA6ICcgJyksXG4gICAgICAgICAgY29udGVudCA9IChsaW5lLmxlbmd0aCA+IDAgPyBsaW5lLnN1YnN0cigxKSA6IGxpbmUpO1xuXG4gICAgICBpZiAob3BlcmF0aW9uID09PSAnICcgfHwgb3BlcmF0aW9uID09PSAnLScpIHtcbiAgICAgICAgLy8gQ29udGV4dCBzYW5pdHkgY2hlY2tcbiAgICAgICAgaWYgKCFjb21wYXJlTGluZSh0b1BvcyArIDEsIGxpbmVzW3RvUG9zXSwgb3BlcmF0aW9uLCBjb250ZW50KSkge1xuICAgICAgICAgIGVycm9yQ291bnQrKztcblxuICAgICAgICAgIGlmIChlcnJvckNvdW50ID4gZnV6ekZhY3Rvcikge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0b1BvcysrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLy8gU2VhcmNoIGJlc3QgZml0IG9mZnNldHMgZm9yIGVhY2ggaHVuayBiYXNlZCBvbiB0aGUgcHJldmlvdXMgb25lc1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGh1bmtzLmxlbmd0aDsgaSsrKSB7XG4gICAgbGV0IGh1bmsgPSBodW5rc1tpXSxcbiAgICAgICAgbWF4TGluZSA9IGxpbmVzLmxlbmd0aCAtIGh1bmsub2xkTGluZXMsXG4gICAgICAgIGxvY2FsT2Zmc2V0ID0gMCxcbiAgICAgICAgdG9Qb3MgPSBvZmZzZXQgKyBodW5rLm9sZFN0YXJ0IC0gMTtcblxuICAgIGxldCBpdGVyYXRvciA9IGRpc3RhbmNlSXRlcmF0b3IodG9Qb3MsIG1pbkxpbmUsIG1heExpbmUpO1xuXG4gICAgZm9yICg7IGxvY2FsT2Zmc2V0ICE9PSB1bmRlZmluZWQ7IGxvY2FsT2Zmc2V0ID0gaXRlcmF0b3IoKSkge1xuICAgICAgaWYgKGh1bmtGaXRzKGh1bmssIHRvUG9zICsgbG9jYWxPZmZzZXQpKSB7XG4gICAgICAgIGh1bmsub2Zmc2V0ID0gb2Zmc2V0ICs9IGxvY2FsT2Zmc2V0O1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobG9jYWxPZmZzZXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFNldCBsb3dlciB0ZXh0IGxpbWl0IHRvIGVuZCBvZiB0aGUgY3VycmVudCBodW5rLCBzbyBuZXh0IG9uZXMgZG9uJ3QgdHJ5XG4gICAgLy8gdG8gZml0IG92ZXIgYWxyZWFkeSBwYXRjaGVkIHRleHRcbiAgICBtaW5MaW5lID0gaHVuay5vZmZzZXQgKyBodW5rLm9sZFN0YXJ0ICsgaHVuay5vbGRMaW5lcztcbiAgfVxuXG4gIC8vIEFwcGx5IHBhdGNoIGh1bmtzXG4gIGxldCBkaWZmT2Zmc2V0ID0gMDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBodW5rcy5sZW5ndGg7IGkrKykge1xuICAgIGxldCBodW5rID0gaHVua3NbaV0sXG4gICAgICAgIHRvUG9zID0gaHVuay5vbGRTdGFydCArIGh1bmsub2Zmc2V0ICsgZGlmZk9mZnNldCAtIDE7XG4gICAgZGlmZk9mZnNldCArPSBodW5rLm5ld0xpbmVzIC0gaHVuay5vbGRMaW5lcztcblxuICAgIGZvciAobGV0IGogPSAwOyBqIDwgaHVuay5saW5lcy5sZW5ndGg7IGorKykge1xuICAgICAgbGV0IGxpbmUgPSBodW5rLmxpbmVzW2pdLFxuICAgICAgICAgIG9wZXJhdGlvbiA9IChsaW5lLmxlbmd0aCA+IDAgPyBsaW5lWzBdIDogJyAnKSxcbiAgICAgICAgICBjb250ZW50ID0gKGxpbmUubGVuZ3RoID4gMCA/IGxpbmUuc3Vic3RyKDEpIDogbGluZSksXG4gICAgICAgICAgZGVsaW1pdGVyID0gaHVuay5saW5lZGVsaW1pdGVyc1tqXTtcblxuICAgICAgaWYgKG9wZXJhdGlvbiA9PT0gJyAnKSB7XG4gICAgICAgIHRvUG9zKys7XG4gICAgICB9IGVsc2UgaWYgKG9wZXJhdGlvbiA9PT0gJy0nKSB7XG4gICAgICAgIGxpbmVzLnNwbGljZSh0b1BvcywgMSk7XG4gICAgICAgIGRlbGltaXRlcnMuc3BsaWNlKHRvUG9zLCAxKTtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICB9IGVsc2UgaWYgKG9wZXJhdGlvbiA9PT0gJysnKSB7XG4gICAgICAgIGxpbmVzLnNwbGljZSh0b1BvcywgMCwgY29udGVudCk7XG4gICAgICAgIGRlbGltaXRlcnMuc3BsaWNlKHRvUG9zLCAwLCBkZWxpbWl0ZXIpO1xuICAgICAgICB0b1BvcysrO1xuICAgICAgfSBlbHNlIGlmIChvcGVyYXRpb24gPT09ICdcXFxcJykge1xuICAgICAgICBsZXQgcHJldmlvdXNPcGVyYXRpb24gPSBodW5rLmxpbmVzW2ogLSAxXSA/IGh1bmsubGluZXNbaiAtIDFdWzBdIDogbnVsbDtcbiAgICAgICAgaWYgKHByZXZpb3VzT3BlcmF0aW9uID09PSAnKycpIHtcbiAgICAgICAgICByZW1vdmVFT0ZOTCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAocHJldmlvdXNPcGVyYXRpb24gPT09ICctJykge1xuICAgICAgICAgIGFkZEVPRk5MID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIEhhbmRsZSBFT0ZOTCBpbnNlcnRpb24vcmVtb3ZhbFxuICBpZiAocmVtb3ZlRU9GTkwpIHtcbiAgICB3aGlsZSAoIWxpbmVzW2xpbmVzLmxlbmd0aCAtIDFdKSB7XG4gICAgICBsaW5lcy5wb3AoKTtcbiAgICAgIGRlbGltaXRlcnMucG9wKCk7XG4gICAgfVxuICB9IGVsc2UgaWYgKGFkZEVPRk5MKSB7XG4gICAgbGluZXMucHVzaCgnJyk7XG4gICAgZGVsaW1pdGVycy5wdXNoKCdcXG4nKTtcbiAgfVxuICBmb3IgKGxldCBfayA9IDA7IF9rIDwgbGluZXMubGVuZ3RoIC0gMTsgX2srKykge1xuICAgIGxpbmVzW19rXSA9IGxpbmVzW19rXSArIGRlbGltaXRlcnNbX2tdO1xuICB9XG4gIHJldHVybiBsaW5lcy5qb2luKCcnKTtcbn1cblxuLy8gV3JhcHBlciB0aGF0IHN1cHBvcnRzIG11bHRpcGxlIGZpbGUgcGF0Y2hlcyB2aWEgY2FsbGJhY2tzLlxuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5UGF0Y2hlcyh1bmlEaWZmLCBvcHRpb25zKSB7XG4gIGlmICh0eXBlb2YgdW5pRGlmZiA9PT0gJ3N0cmluZycpIHtcbiAgICB1bmlEaWZmID0gcGFyc2VQYXRjaCh1bmlEaWZmKTtcbiAgfVxuXG4gIGxldCBjdXJyZW50SW5kZXggPSAwO1xuICBmdW5jdGlvbiBwcm9jZXNzSW5kZXgoKSB7XG4gICAgbGV0IGluZGV4ID0gdW5pRGlmZltjdXJyZW50SW5kZXgrK107XG4gICAgaWYgKCFpbmRleCkge1xuICAgICAgcmV0dXJuIG9wdGlvbnMuY29tcGxldGUoKTtcbiAgICB9XG5cbiAgICBvcHRpb25zLmxvYWRGaWxlKGluZGV4LCBmdW5jdGlvbihlcnIsIGRhdGEpIHtcbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgcmV0dXJuIG9wdGlvbnMuY29tcGxldGUoZXJyKTtcbiAgICAgIH1cblxuICAgICAgbGV0IHVwZGF0ZWRDb250ZW50ID0gYXBwbHlQYXRjaChkYXRhLCBpbmRleCwgb3B0aW9ucyk7XG4gICAgICBvcHRpb25zLnBhdGNoZWQoaW5kZXgsIHVwZGF0ZWRDb250ZW50LCBmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIHJldHVybiBvcHRpb25zLmNvbXBsZXRlKGVycik7XG4gICAgICAgIH1cblxuICAgICAgICBwcm9jZXNzSW5kZXgoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG4gIHByb2Nlc3NJbmRleCgpO1xufVxuIl19
+
+
+/***/ }),
+
+/***/ 64543:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+/*istanbul ignore start*/
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.structuredPatch = structuredPatch;
+exports.formatPatch = formatPatch;
+exports.createTwoFilesPatch = createTwoFilesPatch;
+exports.createPatch = createPatch;
+
+/*istanbul ignore end*/
+var
+/*istanbul ignore start*/
+_line = __nccwpck_require__(41591)
+/*istanbul ignore end*/
+;
+
+/*istanbul ignore start*/ function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
+
+function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
+
+function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
+
+function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }
+
+function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
+
+function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
+
+/*istanbul ignore end*/
+function structuredPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options) {
+ if (!options) {
+ options = {};
+ }
+
+ if (typeof options.context === 'undefined') {
+ options.context = 4;
+ }
+
+ var diff =
+ /*istanbul ignore start*/
+ (0,
+ /*istanbul ignore end*/
+
+ /*istanbul ignore start*/
+ _line
+ /*istanbul ignore end*/
+ .
+ /*istanbul ignore start*/
+ diffLines)
+ /*istanbul ignore end*/
+ (oldStr, newStr, options);
+
+ if (!diff) {
+ return;
+ }
+
+ diff.push({
+ value: '',
+ lines: []
+ }); // Append an empty value to make cleanup easier
+
+ function contextLines(lines) {
+ return lines.map(function (entry) {
+ return ' ' + entry;
+ });
+ }
+
+ var hunks = [];
+ var oldRangeStart = 0,
+ newRangeStart = 0,
+ curRange = [],
+ oldLine = 1,
+ newLine = 1;
+
+ /*istanbul ignore start*/
+ var _loop = function _loop(
+ /*istanbul ignore end*/
+ i) {
+ var current = diff[i],
+ lines = current.lines || current.value.replace(/\n$/, '').split('\n');
+ current.lines = lines;
+
+ if (current.added || current.removed) {
+ /*istanbul ignore start*/
+ var _curRange;
+
+ /*istanbul ignore end*/
+ // If we have previous context, start with that
+ if (!oldRangeStart) {
+ var prev = diff[i - 1];
+ oldRangeStart = oldLine;
+ newRangeStart = newLine;
+
+ if (prev) {
+ curRange = options.context > 0 ? contextLines(prev.lines.slice(-options.context)) : [];
+ oldRangeStart -= curRange.length;
+ newRangeStart -= curRange.length;
+ }
+ } // Output our changes
+
+
+ /*istanbul ignore start*/
+
+ /*istanbul ignore end*/
+
+ /*istanbul ignore start*/
+ (_curRange =
+ /*istanbul ignore end*/
+ curRange).push.apply(
+ /*istanbul ignore start*/
+ _curRange
+ /*istanbul ignore end*/
+ ,
+ /*istanbul ignore start*/
+ _toConsumableArray(
+ /*istanbul ignore end*/
+ lines.map(function (entry) {
+ return (current.added ? '+' : '-') + entry;
+ }))); // Track the updated file position
+
+
+ if (current.added) {
+ newLine += lines.length;
+ } else {
+ oldLine += lines.length;
+ }
+ } else {
+ // Identical context lines. Track line changes
+ if (oldRangeStart) {
+ // Close out any changes that have been output (or join overlapping)
+ if (lines.length <= options.context * 2 && i < diff.length - 2) {
+ /*istanbul ignore start*/
+ var _curRange2;
+
+ /*istanbul ignore end*/
+ // Overlapping
+
+ /*istanbul ignore start*/
+
+ /*istanbul ignore end*/
+
+ /*istanbul ignore start*/
+ (_curRange2 =
+ /*istanbul ignore end*/
+ curRange).push.apply(
+ /*istanbul ignore start*/
+ _curRange2
+ /*istanbul ignore end*/
+ ,
+ /*istanbul ignore start*/
+ _toConsumableArray(
+ /*istanbul ignore end*/
+ contextLines(lines)));
+ } else {
+ /*istanbul ignore start*/
+ var _curRange3;
+
+ /*istanbul ignore end*/
+ // end the range and output
+ var contextSize = Math.min(lines.length, options.context);
+
+ /*istanbul ignore start*/
+
+ /*istanbul ignore end*/
+
+ /*istanbul ignore start*/
+ (_curRange3 =
+ /*istanbul ignore end*/
+ curRange).push.apply(
+ /*istanbul ignore start*/
+ _curRange3
+ /*istanbul ignore end*/
+ ,
+ /*istanbul ignore start*/
+ _toConsumableArray(
+ /*istanbul ignore end*/
+ contextLines(lines.slice(0, contextSize))));
+
+ var hunk = {
+ oldStart: oldRangeStart,
+ oldLines: oldLine - oldRangeStart + contextSize,
+ newStart: newRangeStart,
+ newLines: newLine - newRangeStart + contextSize,
+ lines: curRange
+ };
+
+ if (i >= diff.length - 2 && lines.length <= options.context) {
+ // EOF is inside this hunk
+ var oldEOFNewline = /\n$/.test(oldStr);
+ var newEOFNewline = /\n$/.test(newStr);
+ var noNlBeforeAdds = lines.length == 0 && curRange.length > hunk.oldLines;
+
+ if (!oldEOFNewline && noNlBeforeAdds && oldStr.length > 0) {
+ // special case: old has no eol and no trailing context; no-nl can end up before adds
+ // however, if the old file is empty, do not output the no-nl line
+ curRange.splice(hunk.oldLines, 0, '\\ No newline at end of file');
+ }
+
+ if (!oldEOFNewline && !noNlBeforeAdds || !newEOFNewline) {
+ curRange.push('\\ No newline at end of file');
+ }
+ }
+
+ hunks.push(hunk);
+ oldRangeStart = 0;
+ newRangeStart = 0;
+ curRange = [];
+ }
+ }
+
+ oldLine += lines.length;
+ newLine += lines.length;
+ }
+ };
+
+ for (var i = 0; i < diff.length; i++) {
+ /*istanbul ignore start*/
+ _loop(
+ /*istanbul ignore end*/
+ i);
+ }
+
+ return {
+ oldFileName: oldFileName,
+ newFileName: newFileName,
+ oldHeader: oldHeader,
+ newHeader: newHeader,
+ hunks: hunks
+ };
+}
+
+function formatPatch(diff) {
+ var ret = [];
+
+ if (diff.oldFileName == diff.newFileName) {
+ ret.push('Index: ' + diff.oldFileName);
+ }
+
+ ret.push('===================================================================');
+ ret.push('--- ' + diff.oldFileName + (typeof diff.oldHeader === 'undefined' ? '' : '\t' + diff.oldHeader));
+ ret.push('+++ ' + diff.newFileName + (typeof diff.newHeader === 'undefined' ? '' : '\t' + diff.newHeader));
+
+ for (var i = 0; i < diff.hunks.length; i++) {
+ var hunk = diff.hunks[i]; // Unified Diff Format quirk: If the chunk size is 0,
+ // the first number is one lower than one would expect.
+ // https://www.artima.com/weblogs/viewpost.jsp?thread=164293
+
+ if (hunk.oldLines === 0) {
+ hunk.oldStart -= 1;
+ }
+
+ if (hunk.newLines === 0) {
+ hunk.newStart -= 1;
+ }
+
+ ret.push('@@ -' + hunk.oldStart + ',' + hunk.oldLines + ' +' + hunk.newStart + ',' + hunk.newLines + ' @@');
+ ret.push.apply(ret, hunk.lines);
+ }
+
+ return ret.join('\n') + '\n';
+}
+
+function createTwoFilesPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options) {
+ return formatPatch(structuredPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options));
+}
+
+function createPatch(fileName, oldStr, newStr, oldHeader, newHeader, options) {
+ return createTwoFilesPatch(fileName, fileName, oldStr, newStr, oldHeader, newHeader, options);
+}
+//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wYXRjaC9jcmVhdGUuanMiXSwibmFtZXMiOlsic3RydWN0dXJlZFBhdGNoIiwib2xkRmlsZU5hbWUiLCJuZXdGaWxlTmFtZSIsIm9sZFN0ciIsIm5ld1N0ciIsIm9sZEhlYWRlciIsIm5ld0hlYWRlciIsIm9wdGlvbnMiLCJjb250ZXh0IiwiZGlmZiIsImRpZmZMaW5lcyIsInB1c2giLCJ2YWx1ZSIsImxpbmVzIiwiY29udGV4dExpbmVzIiwibWFwIiwiZW50cnkiLCJodW5rcyIsIm9sZFJhbmdlU3RhcnQiLCJuZXdSYW5nZVN0YXJ0IiwiY3VyUmFuZ2UiLCJvbGRMaW5lIiwibmV3TGluZSIsImkiLCJjdXJyZW50IiwicmVwbGFjZSIsInNwbGl0IiwiYWRkZWQiLCJyZW1vdmVkIiwicHJldiIsInNsaWNlIiwibGVuZ3RoIiwiY29udGV4dFNpemUiLCJNYXRoIiwibWluIiwiaHVuayIsIm9sZFN0YXJ0Iiwib2xkTGluZXMiLCJuZXdTdGFydCIsIm5ld0xpbmVzIiwib2xkRU9GTmV3bGluZSIsInRlc3QiLCJuZXdFT0ZOZXdsaW5lIiwibm9ObEJlZm9yZUFkZHMiLCJzcGxpY2UiLCJmb3JtYXRQYXRjaCIsInJldCIsImFwcGx5Iiwiam9pbiIsImNyZWF0ZVR3b0ZpbGVzUGF0Y2giLCJjcmVhdGVQYXRjaCIsImZpbGVOYW1lIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7QUFFTyxTQUFTQSxlQUFULENBQXlCQyxXQUF6QixFQUFzQ0MsV0FBdEMsRUFBbURDLE1BQW5ELEVBQTJEQyxNQUEzRCxFQUFtRUMsU0FBbkUsRUFBOEVDLFNBQTlFLEVBQXlGQyxPQUF6RixFQUFrRztBQUN2RyxNQUFJLENBQUNBLE9BQUwsRUFBYztBQUNaQSxJQUFBQSxPQUFPLEdBQUcsRUFBVjtBQUNEOztBQUNELE1BQUksT0FBT0EsT0FBTyxDQUFDQyxPQUFmLEtBQTJCLFdBQS9CLEVBQTRDO0FB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IHtkaWZmTGluZXN9IGZyb20gJy4uL2RpZmYvbGluZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBzdHJ1Y3R1cmVkUGF0Y2gob2xkRmlsZU5hbWUsIG5ld0ZpbGVOYW1lLCBvbGRTdHIsIG5ld1N0ciwgb2xkSGVhZGVyLCBuZXdIZWFkZXIsIG9wdGlvbnMpIHtcbiAgaWYgKCFvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG4gIGlmICh0eXBlb2Ygb3B0aW9ucy5jb250ZXh0ID09PSAndW5kZWZpbmVkJykge1xuICAgIG9wdGlvbnMuY29udGV4dCA9IDQ7XG4gIH1cblxuICBjb25zdCBkaWZmID0gZGlmZkxpbmVzKG9sZFN0ciwgbmV3U3RyLCBvcHRpb25zKTtcbiAgaWYoIWRpZmYpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBkaWZmLnB1c2goe3ZhbHVlOiAnJywgbGluZXM6IFtdfSk7IC8vIEFwcGVuZCBhbiBlbXB0eSB2YWx1ZSB0byBtYWtlIGNsZWFudXAgZWFzaWVyXG5cbiAgZnVuY3Rpb24gY29udGV4dExpbmVzKGxpbmVzKSB7XG4gICAgcmV0dXJuIGxpbmVzLm1hcChmdW5jdGlvbihlbnRyeSkgeyByZXR1cm4gJyAnICsgZW50cnk7IH0pO1xuICB9XG5cbiAgbGV0IGh1bmtzID0gW107XG4gIGxldCBvbGRSYW5nZVN0YXJ0ID0gMCwgbmV3UmFuZ2VTdGFydCA9IDAsIGN1clJhbmdlID0gW10sXG4gICAgICBvbGRMaW5lID0gMSwgbmV3TGluZSA9IDE7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZGlmZi5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGN1cnJlbnQgPSBkaWZmW2ldLFxuICAgICAgICAgIGxpbmVzID0gY3VycmVudC5saW5lcyB8fCBjdXJyZW50LnZhbHVlLnJlcGxhY2UoL1xcbiQvLCAnJykuc3BsaXQoJ1xcbicpO1xuICAgIGN1cnJlbnQubGluZXMgPSBsaW5lcztcblxuICAgIGlmIChjdXJyZW50LmFkZGVkIHx8IGN1cnJlbnQucmVtb3ZlZCkge1xuICAgICAgLy8gSWYgd2UgaGF2ZSBwcmV2aW91cyBjb250ZXh0LCBzdGFydCB3aXRoIHRoYXRcbiAgICAgIGlmICghb2xkUmFuZ2VTdGFydCkge1xuICAgICAgICBjb25zdCBwcmV2ID0gZGlmZltpIC0gMV07XG4gICAgICAgIG9sZFJhbmdlU3RhcnQgPSBvbGRMaW5lO1xuICAgICAgICBuZXdSYW5nZVN0YXJ0ID0gbmV3TGluZTtcblxuICAgICAgICBpZiAocHJldikge1xuICAgICAgICAgIGN1clJhbmdlID0gb3B0aW9ucy5jb250ZXh0ID4gMCA/IGNvbnRleHRMaW5lcyhwcmV2LmxpbmVzLnNsaWNlKC1vcHRpb25zLmNvbnRleHQpKSA6IFtdO1xuICAgICAgICAgIG9sZFJhbmdlU3RhcnQgLT0gY3VyUmFuZ2UubGVuZ3RoO1xuICAgICAgICAgIG5ld1JhbmdlU3RhcnQgLT0gY3VyUmFuZ2UubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIE91dHB1dCBvdXIgY2hhbmdlc1xuICAgICAgY3VyUmFuZ2UucHVzaCguLi4gbGluZXMubWFwKGZ1bmN0aW9uKGVudHJ5KSB7XG4gICAgICAgIHJldHVybiAoY3VycmVudC5hZGRlZCA/ICcrJyA6ICctJykgKyBlbnRyeTtcbiAgICAgIH0pKTtcblxuICAgICAgLy8gVHJhY2sgdGhlIHVwZGF0ZWQgZmlsZSBwb3NpdGlvblxuICAgICAgaWYgKGN1cnJlbnQuYWRkZWQpIHtcbiAgICAgICAgbmV3TGluZSArPSBsaW5lcy5sZW5ndGg7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvbGRMaW5lICs9IGxpbmVzLmxlbmd0aDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSWRlbnRpY2FsIGNvbnRleHQgbGluZXMuIFRyYWNrIGxpbmUgY2hhbmdlc1xuICAgICAgaWYgKG9sZFJhbmdlU3RhcnQpIHtcbiAgICAgICAgLy8gQ2xvc2Ugb3V0IGFueSBjaGFuZ2VzIHRoYXQgaGF2ZSBiZWVuIG91dHB1dCAob3Igam9pbiBvdmVybGFwcGluZylcbiAgICAgICAgaWYgKGxpbmVzLmxlbmd0aCA8PSBvcHRpb25zLmNvbnRleHQgKiAyICYmIGkgPCBkaWZmLmxlbmd0aCAtIDIpIHtcbiAgICAgICAgICAvLyBPdmVybGFwcGluZ1xuICAgICAgICAgIGN1clJhbmdlLnB1c2goLi4uIGNvbnRleHRMaW5lcyhsaW5lcykpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIGVuZCB0aGUgcmFuZ2UgYW5kIG91dHB1dFxuICAgICAgICAgIGxldCBjb250ZXh0U2l6ZSA9IE1hdGgubWluKGxpbmVzLmxlbmd0aCwgb3B0aW9ucy5jb250ZXh0KTtcbiAgICAgICAgICBjdXJSYW5nZS5wdXNoKC4uLiBjb250ZXh0TGluZXMobGluZXMuc2xpY2UoMCwgY29udGV4dFNpemUpKSk7XG5cbiAgICAgICAgICBsZXQgaHVuayA9IHtcbiAgICAgICAgICAgIG9sZFN0YXJ0OiBvbGRSYW5nZVN0YXJ0LFxuICAgICAgICAgICAgb2xkTGluZXM6IChvbGRMaW5lIC0gb2xkUmFuZ2VTdGFydCArIGNvbnRleHRTaXplKSxcbiAgICAgICAgICAgIG5ld1N0YXJ0OiBuZXdSYW5nZVN0YXJ0LFxuICAgICAgICAgICAgbmV3TGluZXM6IChuZXdMaW5lIC0gbmV3UmFuZ2VTdGFydCArIGNvbnRleHRTaXplKSxcbiAgICAgICAgICAgIGxpbmVzOiBjdXJSYW5nZVxuICAgICAgICAgIH07XG4gICAgICAgICAgaWYgKGkgPj0gZGlmZi5sZW5ndGggLSAyICYmIGxpbmVzLmxlbmd0aCA8PSBvcHRpb25zLmNvbnRleHQpIHtcbiAgICAgICAgICAgIC8vIEVPRiBpcyBpbnNpZGUgdGhpcyBodW5rXG4gICAgICAgICAgICBsZXQgb2xkRU9GTmV3bGluZSA9ICgoL1xcbiQvKS50ZXN0KG9sZFN0cikpO1xuICAgICAgICAgICAgbGV0IG5ld0VPRk5ld2xpbmUgPSAoKC9cXG4kLykudGVzdChuZXdTdHIpKTtcbiAgICAgICAgICAgIGxldCBub05sQmVmb3JlQWRkcyA9IGxpbmVzLmxlbmd0aCA9PSAwICYmIGN1clJhbmdlLmxlbmd0aCA+IGh1bmsub2xkTGluZXM7XG4gICAgICAgICAgICBpZiAoIW9sZEVPRk5ld2xpbmUgJiYgbm9ObEJlZm9yZUFkZHMgJiYgb2xkU3RyLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgLy8gc3BlY2lhbCBjYXNlOiBvbGQgaGFzIG5vIGVvbCBhbmQgbm8gdHJhaWxpbmcgY29udGV4dDsgbm8tbmwgY2FuIGVuZCB1cCBiZWZvcmUgYWRkc1xuICAgICAgICAgICAgICAvLyBob3dldmVyLCBpZiB0aGUgb2xkIGZpbGUgaXMgZW1wdHksIGRvIG5vdCBvdXRwdXQgdGhlIG5vLW5sIGxpbmVcbiAgICAgICAgICAgICAgY3VyUmFuZ2Uuc3BsaWNlKGh1bmsub2xkTGluZXMsIDAsICdcXFxcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICgoIW9sZEVPRk5ld2xpbmUgJiYgIW5vTmxCZWZvcmVBZGRzKSB8fCAhbmV3RU9GTmV3bGluZSkge1xuICAgICAgICAgICAgICBjdXJSYW5nZS5wdXNoKCdcXFxcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaHVua3MucHVzaChodW5rKTtcblxuICAgICAgICAgIG9sZFJhbmdlU3RhcnQgPSAwO1xuICAgICAgICAgIG5ld1JhbmdlU3RhcnQgPSAwO1xuICAgICAgICAgIGN1clJhbmdlID0gW107XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIG9sZExpbmUgKz0gbGluZXMubGVuZ3RoO1xuICAgICAgbmV3TGluZSArPSBsaW5lcy5sZW5ndGg7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBvbGRGaWxlTmFtZTogb2xkRmlsZU5hbWUsIG5ld0ZpbGVOYW1lOiBuZXdGaWxlTmFtZSxcbiAgICBvbGRIZWFkZXI6IG9sZEhlYWRlciwgbmV3SGVhZGVyOiBuZXdIZWFkZXIsXG4gICAgaHVua3M6IGh1bmtzXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRQYXRjaChkaWZmKSB7XG4gIGNvbnN0IHJldCA9IFtdO1xuICBpZiAoZGlmZi5vbGRGaWxlTmFtZSA9PSBkaWZmLm5ld0ZpbGVOYW1lKSB7XG4gICAgcmV0LnB1c2goJ0luZGV4OiAnICsgZGlmZi5vbGRGaWxlTmFtZSk7XG4gIH1cbiAgcmV0LnB1c2goJz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0nKTtcbiAgcmV0LnB1c2goJy0tLSAnICsgZGlmZi5vbGRGaWxlTmFtZSArICh0eXBlb2YgZGlmZi5vbGRIZWFkZXIgPT09ICd1bmRlZmluZWQnID8gJycgOiAnXFx0JyArIGRpZmYub2xkSGVhZGVyKSk7XG4gIHJldC5wdXNoKCcrKysgJyArIGRpZmYubmV3RmlsZU5hbWUgKyAodHlwZW9mIGRpZmYubmV3SGVhZGVyID09PSAndW5kZWZpbmVkJyA/ICcnIDogJ1xcdCcgKyBkaWZmLm5ld0hlYWRlcikpO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZGlmZi5odW5rcy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGh1bmsgPSBkaWZmLmh1bmtzW2ldO1xuICAgIC8vIFVuaWZpZWQgRGlmZiBGb3JtYXQgcXVpcms6IElmIHRoZSBjaHVuayBzaXplIGlzIDAsXG4gICAgLy8gdGhlIGZpcnN0IG51bWJlciBpcyBvbmUgbG93ZXIgdGhhbiBvbmUgd291bGQgZXhwZWN0LlxuICAgIC8vIGh0dHBzOi8vd3d3LmFydGltYS5jb20vd2VibG9ncy92aWV3cG9zdC5qc3A/dGhyZWFkPTE2NDI5M1xuICAgIGlmIChodW5rLm9sZExpbmVzID09PSAwKSB7XG4gICAgICBodW5rLm9sZFN0YXJ0IC09IDE7XG4gICAgfVxuICAgIGlmIChodW5rLm5ld0xpbmVzID09PSAwKSB7XG4gICAgICBodW5rLm5ld1N0YXJ0IC09IDE7XG4gICAgfVxuICAgIHJldC5wdXNoKFxuICAgICAgJ0BAIC0nICsgaHVuay5vbGRTdGFydCArICcsJyArIGh1bmsub2xkTGluZXNcbiAgICAgICsgJyArJyArIGh1bmsubmV3U3RhcnQgKyAnLCcgKyBodW5rLm5ld0xpbmVzXG4gICAgICArICcgQEAnXG4gICAgKTtcbiAgICByZXQucHVzaC5hcHBseShyZXQsIGh1bmsubGluZXMpO1xuICB9XG5cbiAgcmV0dXJuIHJldC5qb2luKCdcXG4nKSArICdcXG4nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVHdvRmlsZXNQYXRjaChvbGRGaWxlTmFtZSwgbmV3RmlsZU5hbWUsIG9sZFN0ciwgbmV3U3RyLCBvbGRIZWFkZXIsIG5ld0hlYWRlciwgb3B0aW9ucykge1xuICByZXR1cm4gZm9ybWF0UGF0Y2goc3RydWN0dXJlZFBhdGNoKG9sZEZpbGVOYW1lLCBuZXdGaWxlTmFtZSwgb2xkU3RyLCBuZXdTdHIsIG9sZEhlYWRlciwgbmV3SGVhZGVyLCBvcHRpb25zKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVQYXRjaChmaWxlTmFtZSwgb2xkU3RyLCBuZXdTdHIsIG9sZEhlYWRlciwgbmV3SGVhZGVyLCBvcHRpb25zKSB7XG4gIHJldHVybiBjcmVhdGVUd29GaWxlc1BhdGNoKGZpbGVOYW1lLCBmaWxlTmFtZSwgb2xkU3RyLCBuZXdTdHIsIG9sZEhlYWRlciwgbmV3SGVhZGVyLCBvcHRpb25zKTtcbn1cbiJdfQ==
+
+
+/***/ }),
+
+/***/ 22640:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+/*istanbul ignore start*/
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.calcLineCount = calcLineCount;
+exports.merge = merge;
+
+/*istanbul ignore end*/
+var
+/*istanbul ignore start*/
+_create = __nccwpck_require__(64543)
+/*istanbul ignore end*/
+;
+
+var
+/*istanbul ignore start*/
+_parse = __nccwpck_require__(15870)
+/*istanbul ignore end*/
+;
+
+var
+/*istanbul ignore start*/
+_array = __nccwpck_require__(78935)
+/*istanbul ignore end*/
+;
+
+/*istanbul ignore start*/ function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
+
+function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
+
+function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
+
+function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }
+
+function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
+
+function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
+
+/*istanbul ignore end*/
+function calcLineCount(hunk) {
+ /*istanbul ignore start*/
+ var _calcOldNewLineCount =
+ /*istanbul ignore end*/
+ calcOldNewLineCount(hunk.lines),
+ oldLines = _calcOldNewLineCount.oldLines,
+ newLines = _calcOldNewLineCount.newLines;
+
+ if (oldLines !== undefined) {
+ hunk.oldLines = oldLines;
+ } else {
+ delete hunk.oldLines;
+ }
+
+ if (newLines !== undefined) {
+ hunk.newLines = newLines;
+ } else {
+ delete hunk.newLines;
+ }
+}
+
+function merge(mine, theirs, base) {
+ mine = loadPatch(mine, base);
+ theirs = loadPatch(theirs, base);
+ var ret = {}; // For index we just let it pass through as it doesn't have any necessary meaning.
+ // Leaving sanity checks on this to the API consumer that may know more about the
+ // meaning in their own context.
+
+ if (mine.index || theirs.index) {
+ ret.index = mine.index || theirs.index;
+ }
+
+ if (mine.newFileName || theirs.newFileName) {
+ if (!fileNameChanged(mine)) {
+ // No header or no change in ours, use theirs (and ours if theirs does not exist)
+ ret.oldFileName = theirs.oldFileName || mine.oldFileName;
+ ret.newFileName = theirs.newFileName || mine.newFileName;
+ ret.oldHeader = theirs.oldHeader || mine.oldHeader;
+ ret.newHeader = theirs.newHeader || mine.newHeader;
+ } else if (!fileNameChanged(theirs)) {
+ // No header or no change in theirs, use ours
+ ret.oldFileName = mine.oldFileName;
+ ret.newFileName = mine.newFileName;
+ ret.oldHeader = mine.oldHeader;
+ ret.newHeader = mine.newHeader;
+ } else {
+ // Both changed... figure it out
+ ret.oldFileName = selectField(ret, mine.oldFileName, theirs.oldFileName);
+ ret.newFileName = selectField(ret, mine.newFileName, theirs.newFileName);
+ ret.oldHeader = selectField(ret, mine.oldHeader, theirs.oldHeader);
+ ret.newHeader = selectField(ret, mine.newHeader, theirs.newHeader);
+ }
+ }
+
+ ret.hunks = [];
+ var mineIndex = 0,
+ theirsIndex = 0,
+ mineOffset = 0,
+ theirsOffset = 0;
+
+ while (mineIndex < mine.hunks.length || theirsIndex < theirs.hunks.length) {
+ var mineCurrent = mine.hunks[mineIndex] || {
+ oldStart: Infinity
+ },
+ theirsCurrent = theirs.hunks[theirsIndex] || {
+ oldStart: Infinity
+ };
+
+ if (hunkBefore(mineCurrent, theirsCurrent)) {
+ // This patch does not overlap with any of the others, yay.
+ ret.hunks.push(cloneHunk(mineCurrent, mineOffset));
+ mineIndex++;
+ theirsOffset += mineCurrent.newLines - mineCurrent.oldLines;
+ } else if (hunkBefore(theirsCurrent, mineCurrent)) {
+ // This patch does not overlap with any of the others, yay.
+ ret.hunks.push(cloneHunk(theirsCurrent, theirsOffset));
+ theirsIndex++;
+ mineOffset += theirsCurrent.newLines - theirsCurrent.oldLines;
+ } else {
+ // Overlap, merge as best we can
+ var mergedHunk = {
+ oldStart: Math.min(mineCurrent.oldStart, theirsCurrent.oldStart),
+ oldLines: 0,
+ newStart: Math.min(mineCurrent.newStart + mineOffset, theirsCurrent.oldStart + theirsOffset),
+ newLines: 0,
+ lines: []
+ };
+ mergeLines(mergedHunk, mineCurrent.oldStart, mineCurrent.lines, theirsCurrent.oldStart, theirsCurrent.lines);
+ theirsIndex++;
+ mineIndex++;
+ ret.hunks.push(mergedHunk);
+ }
+ }
+
+ return ret;
+}
+
+function loadPatch(param, base) {
+ if (typeof param === 'string') {
+ if (/^@@/m.test(param) || /^Index:/m.test(param)) {
+ return (
+ /*istanbul ignore start*/
+ (0,
+ /*istanbul ignore end*/
+
+ /*istanbul ignore start*/
+ _parse
+ /*istanbul ignore end*/
+ .
+ /*istanbul ignore start*/
+ parsePatch)
+ /*istanbul ignore end*/
+ (param)[0]
+ );
+ }
+
+ if (!base) {
+ throw new Error('Must provide a base reference or pass in a patch');
+ }
+
+ return (
+ /*istanbul ignore start*/
+ (0,
+ /*istanbul ignore end*/
+
+ /*istanbul ignore start*/
+ _create
+ /*istanbul ignore end*/
+ .
+ /*istanbul ignore start*/
+ structuredPatch)
+ /*istanbul ignore end*/
+ (undefined, undefined, base, param)
+ );
+ }
+
+ return param;
+}
+
+function fileNameChanged(patch) {
+ return patch.newFileName && patch.newFileName !== patch.oldFileName;
+}
+
+function selectField(index, mine, theirs) {
+ if (mine === theirs) {
+ return mine;
+ } else {
+ index.conflict = true;
+ return {
+ mine: mine,
+ theirs: theirs
+ };
+ }
+}
+
+function hunkBefore(test, check) {
+ return test.oldStart < check.oldStart && test.oldStart + test.oldLines < check.oldStart;
+}
+
+function cloneHunk(hunk, offset) {
+ return {
+ oldStart: hunk.oldStart,
+ oldLines: hunk.oldLines,
+ newStart: hunk.newStart + offset,
+ newLines: hunk.newLines,
+ lines: hunk.lines
+ };
+}
+
+function mergeLines(hunk, mineOffset, mineLines, theirOffset, theirLines) {
+ // This will generally result in a conflicted hunk, but there are cases where the context
+ // is the only overlap where we can successfully merge the content here.
+ var mine = {
+ offset: mineOffset,
+ lines: mineLines,
+ index: 0
+ },
+ their = {
+ offset: theirOffset,
+ lines: theirLines,
+ index: 0
+ }; // Handle any leading content
+
+ insertLeading(hunk, mine, their);
+ insertLeading(hunk, their, mine); // Now in the overlap content. Scan through and select the best changes from each.
+
+ while (mine.index < mine.lines.length && their.index < their.lines.length) {
+ var mineCurrent = mine.lines[mine.index],
+ theirCurrent = their.lines[their.index];
+
+ if ((mineCurrent[0] === '-' || mineCurrent[0] === '+') && (theirCurrent[0] === '-' || theirCurrent[0] === '+')) {
+ // Both modified ...
+ mutualChange(hunk, mine, their);
+ } else if (mineCurrent[0] === '+' && theirCurrent[0] === ' ') {
+ /*istanbul ignore start*/
+ var _hunk$lines;
+
+ /*istanbul ignore end*/
+ // Mine inserted
+
+ /*istanbul ignore start*/
+
+ /*istanbul ignore end*/
+
+ /*istanbul ignore start*/
+ (_hunk$lines =
+ /*istanbul ignore end*/
+ hunk.lines).push.apply(
+ /*istanbul ignore start*/
+ _hunk$lines
+ /*istanbul ignore end*/
+ ,
+ /*istanbul ignore start*/
+ _toConsumableArray(
+ /*istanbul ignore end*/
+ collectChange(mine)));
+ } else if (theirCurrent[0] === '+' && mineCurrent[0] === ' ') {
+ /*istanbul ignore start*/
+ var _hunk$lines2;
+
+ /*istanbul ignore end*/
+ // Theirs inserted
+
+ /*istanbul ignore start*/
+
+ /*istanbul ignore end*/
+
+ /*istanbul ignore start*/
+ (_hunk$lines2 =
+ /*istanbul ignore end*/
+ hunk.lines).push.apply(
+ /*istanbul ignore start*/
+ _hunk$lines2
+ /*istanbul ignore end*/
+ ,
+ /*istanbul ignore start*/
+ _toConsumableArray(
+ /*istanbul ignore end*/
+ collectChange(their)));
+ } else if (mineCurrent[0] === '-' && theirCurrent[0] === ' ') {
+ // Mine removed or edited
+ removal(hunk, mine, their);
+ } else if (theirCurrent[0] === '-' && mineCurrent[0] === ' ') {
+ // Their removed or edited
+ removal(hunk, their, mine, true);
+ } else if (mineCurrent === theirCurrent) {
+ // Context identity
+ hunk.lines.push(mineCurrent);
+ mine.index++;
+ their.index++;
+ } else {
+ // Context mismatch
+ conflict(hunk, collectChange(mine), collectChange(their));
+ }
+ } // Now push anything that may be remaining
+
+
+ insertTrailing(hunk, mine);
+ insertTrailing(hunk, their);
+ calcLineCount(hunk);
+}
+
+function mutualChange(hunk, mine, their) {
+ var myChanges = collectChange(mine),
+ theirChanges = collectChange(their);
+
+ if (allRemoves(myChanges) && allRemoves(theirChanges)) {
+ // Special case for remove changes that are supersets of one another
+ if (
+ /*istanbul ignore start*/
+ (0,
+ /*istanbul ignore end*/
+
+ /*istanbul ignore start*/
+ _array
+ /*istanbul ignore end*/
+ .
+ /*istanbul ignore start*/
+ arrayStartsWith)
+ /*istanbul ignore end*/
+ (myChanges, theirChanges) && skipRemoveSuperset(their, myChanges, myChanges.length - theirChanges.length)) {
+ /*istanbul ignore start*/
+ var _hunk$lines3;
+
+ /*istanbul ignore end*/
+
+ /*istanbul ignore start*/
+
+ /*istanbul ignore end*/
+
+ /*istanbul ignore start*/
+ (_hunk$lines3 =
+ /*istanbul ignore end*/
+ hunk.lines).push.apply(
+ /*istanbul ignore start*/
+ _hunk$lines3
+ /*istanbul ignore end*/
+ ,
+ /*istanbul ignore start*/
+ _toConsumableArray(
+ /*istanbul ignore end*/
+ myChanges));
+
+ return;
+ } else if (
+ /*istanbul ignore start*/
+ (0,
+ /*istanbul ignore end*/
+
+ /*istanbul ignore start*/
+ _array
+ /*istanbul ignore end*/
+ .
+ /*istanbul ignore start*/
+ arrayStartsWith)
+ /*istanbul ignore end*/
+ (theirChanges, myChanges) && skipRemoveSuperset(mine, theirChanges, theirChanges.length - myChanges.length)) {
+ /*istanbul ignore start*/
+ var _hunk$lines4;
+
+ /*istanbul ignore end*/
+
+ /*istanbul ignore start*/
+
+ /*istanbul ignore end*/
+
+ /*istanbul ignore start*/
+ (_hunk$lines4 =
+ /*istanbul ignore end*/
+ hunk.lines).push.apply(
+ /*istanbul ignore start*/
+ _hunk$lines4
+ /*istanbul ignore end*/
+ ,
+ /*istanbul ignore start*/
+ _toConsumableArray(
+ /*istanbul ignore end*/
+ theirChanges));
+
+ return;
+ }
+ } else if (
+ /*istanbul ignore start*/
+ (0,
+ /*istanbul ignore end*/
+
+ /*istanbul ignore start*/
+ _array
+ /*istanbul ignore end*/
+ .
+ /*istanbul ignore start*/
+ arrayEqual)
+ /*istanbul ignore end*/
+ (myChanges, theirChanges)) {
+ /*istanbul ignore start*/
+ var _hunk$lines5;
+
+ /*istanbul ignore end*/
+
+ /*istanbul ignore start*/
+
+ /*istanbul ignore end*/
+
+ /*istanbul ignore start*/
+ (_hunk$lines5 =
+ /*istanbul ignore end*/
+ hunk.lines).push.apply(
+ /*istanbul ignore start*/
+ _hunk$lines5
+ /*istanbul ignore end*/
+ ,
+ /*istanbul ignore start*/
+ _toConsumableArray(
+ /*istanbul ignore end*/
+ myChanges));
+
+ return;
+ }
+
+ conflict(hunk, myChanges, theirChanges);
+}
+
+function removal(hunk, mine, their, swap) {
+ var myChanges = collectChange(mine),
+ theirChanges = collectContext(their, myChanges);
+
+ if (theirChanges.merged) {
+ /*istanbul ignore start*/
+ var _hunk$lines6;
+
+ /*istanbul ignore end*/
+
+ /*istanbul ignore start*/
+
+ /*istanbul ignore end*/
+
+ /*istanbul ignore start*/
+ (_hunk$lines6 =
+ /*istanbul ignore end*/
+ hunk.lines).push.apply(
+ /*istanbul ignore start*/
+ _hunk$lines6
+ /*istanbul ignore end*/
+ ,
+ /*istanbul ignore start*/
+ _toConsumableArray(
+ /*istanbul ignore end*/
+ theirChanges.merged));
+ } else {
+ conflict(hunk, swap ? theirChanges : myChanges, swap ? myChanges : theirChanges);
+ }
+}
+
+function conflict(hunk, mine, their) {
+ hunk.conflict = true;
+ hunk.lines.push({
+ conflict: true,
+ mine: mine,
+ theirs: their
+ });
+}
+
+function insertLeading(hunk, insert, their) {
+ while (insert.offset < their.offset && insert.index < insert.lines.length) {
+ var line = insert.lines[insert.index++];
+ hunk.lines.push(line);
+ insert.offset++;
+ }
+}
+
+function insertTrailing(hunk, insert) {
+ while (insert.index < insert.lines.length) {
+ var line = insert.lines[insert.index++];
+ hunk.lines.push(line);
+ }
+}
+
+function collectChange(state) {
+ var ret = [],
+ operation = state.lines[state.index][0];
+
+ while (state.index < state.lines.length) {
+ var line = state.lines[state.index]; // Group additions that are immediately after subtractions and treat them as one "atomic" modify change.
+
+ if (operation === '-' && line[0] === '+') {
+ operation = '+';
+ }
+
+ if (operation === line[0]) {
+ ret.push(line);
+ state.index++;
+ } else {
+ break;
+ }
+ }
+
+ return ret;
+}
+
+function collectContext(state, matchChanges) {
+ var changes = [],
+ merged = [],
+ matchIndex = 0,
+ contextChanges = false,
+ conflicted = false;
+
+ while (matchIndex < matchChanges.length && state.index < state.lines.length) {
+ var change = state.lines[state.index],
+ match = matchChanges[matchIndex]; // Once we've hit our add, then we are done
+
+ if (match[0] === '+') {
+ break;
+ }
+
+ contextChanges = contextChanges || change[0] !== ' ';
+ merged.push(match);
+ matchIndex++; // Consume any additions in the other block as a conflict to attempt
+ // to pull in the remaining context after this
+
+ if (change[0] === '+') {
+ conflicted = true;
+
+ while (change[0] === '+') {
+ changes.push(change);
+ change = state.lines[++state.index];
+ }
+ }
+
+ if (match.substr(1) === change.substr(1)) {
+ changes.push(change);
+ state.index++;
+ } else {
+ conflicted = true;
+ }
+ }
+
+ if ((matchChanges[matchIndex] || '')[0] === '+' && contextChanges) {
+ conflicted = true;
+ }
+
+ if (conflicted) {
+ return changes;
+ }
+
+ while (matchIndex < matchChanges.length) {
+ merged.push(matchChanges[matchIndex++]);
+ }
+
+ return {
+ merged: merged,
+ changes: changes
+ };
+}
+
+function allRemoves(changes) {
+ return changes.reduce(function (prev, change) {
+ return prev && change[0] === '-';
+ }, true);
+}
+
+function skipRemoveSuperset(state, removeChanges, delta) {
+ for (var i = 0; i < delta; i++) {
+ var changeContent = removeChanges[removeChanges.length - delta + i].substr(1);
+
+ if (state.lines[state.index + i] !== ' ' + changeContent) {
+ return false;
+ }
+ }
+
+ state.index += delta;
+ return true;
+}
+
+function calcOldNewLineCount(lines) {
+ var oldLines = 0;
+ var newLines = 0;
+ lines.forEach(function (line) {
+ if (typeof line !== 'string') {
+ var myCount = calcOldNewLineCount(line.mine);
+ var theirCount = calcOldNewLineCount(line.theirs);
+
+ if (oldLines !== undefined) {
+ if (myCount.oldLines === theirCount.oldLines) {
+ oldLines += myCount.oldLines;
+ } else {
+ oldLines = undefined;
+ }
+ }
+
+ if (newLines !== undefined) {
+ if (myCount.newLines === theirCount.newLines) {
+ newLines += myCount.newLines;
+ } else {
+ newLines = undefined;
+ }
+ }
+ } else {
+ if (newLines !== undefined && (line[0] === '+' || line[0] === ' ')) {
+ newLines++;
+ }
+
+ if (oldLines !== undefined && (line[0] === '-' || line[0] === ' ')) {
+ oldLines++;
+ }
+ }
+ });
+ return {
+ oldLines: oldLines,
+ newLines: newLines
+ };
+}
+//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wYXRjaC9tZXJnZS5qcyJdLCJuYW1lcyI6WyJjYWxjTGluZUNvdW50IiwiaHVuayIsImNhbGNPbGROZXdMaW5lQ291bnQiLCJsaW5lcyIsIm9sZExpbmVzIiwibmV3TGluZXMiLCJ1bmRlZmluZWQiLCJtZXJnZSIsIm1pbmUiLCJ0aGVpcnMiLCJiYXNlIiwibG9hZFBhdGNoIiwicmV0IiwiaW5kZXgiLCJuZXdGaWxlTmFtZSIsImZpbGVOYW1lQ2hhbmdlZCIsIm9sZEZpbGVOYW1lIiwib2xkSGVhZGVyIiwibmV3SGVhZGVyIiwic2VsZWN0RmllbGQiLCJodW5rcyIsIm1pbmVJbmRleCIsInRoZWlyc0luZGV4IiwibWluZU9mZnNldCIsInRoZWlyc09mZnNldCIsImxlbmd0aCIsIm1pbmVDdXJyZW50Iiwib2xkU3RhcnQiLCJJbmZpbml0eSIsInRoZWlyc0N1cnJlbnQiLCJodW5rQmVmb3JlIiwicHVzaCIsImNsb25lSHVuayIsIm1lcmdlZEh1bmsiLCJNYXRoIiwibWluIiwibmV3U3RhcnQiLCJtZXJnZUxpbmVzIiwicGFyYW0iLCJ0ZXN0IiwicGFyc2VQYXRjaCIsIkVycm9yIiwic3RydWN0dXJlZFBhdGNoIiwicGF0Y2giLCJjb25mbGljdCIsImNoZWNrIiwib2Zmc2V0IiwibWluZUxpbmVzIiwidGhlaXJPZmZzZXQiLCJ0aGVpckxpbmVzIiwidGhlaXIiLCJpbnNlcnRMZWFkaW5nIiwidGhlaXJDdXJyZW50IiwibXV0dWFsQ2hhbmdlIiwiY29sbGVjdENoYW5nZSIsInJlbW92YWwiLCJpbnNlcnRUcmFpbGluZyIsIm15Q2hhbmdlcyIsInRoZWlyQ2hhbmdlcyIsImFsbFJlbW92ZXMiLCJhcnJheVN0YXJ0c1dpdGgiLCJza2lwUmVtb3ZlU3VwZXJzZXQiLCJhcnJheUVxdWFsIiwic3dhcCIsImNvbGxlY3RDb250ZXh0IiwibWVyZ2VkIiwiaW5zZXJ0IiwibGluZSIsInN0YXRlIiwib3BlcmF0aW9uIiwibWF0Y2hDaGFuZ2VzIiwiY2hhbmdlcyIsIm1hdGNoSW5kZXgiLCJjb250ZXh0Q2hhbmdlcyIsImNvbmZsaWN0ZWQiLCJjaGFuZ2UiLCJtYXRjaCIsInN1YnN0ciIsInJlZHVjZSIsInByZXYiLCJyZW1vdmVDaGFuZ2VzIiwiZGVsdGEiLCJpIiwiY2hhbmdlQ29udGVudCIsImZvckVhY2giLCJteUNvdW50IiwidGhlaXJDb3VudCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7QUFFTyxTQUFTQSxhQUFULENBQXVCQyxJQUF2QixFQUE2QjtBQUFBO0FBQUE7QUFBQTtBQUNMQyxFQUFBQSxtQkFBbUIsQ0FBQ0QsSUFBSSxDQUFDRSxLQUFOLENBRGQ7QUFBQSxNQUMzQkMsUUFEMkIsd0JBQzNCQSxRQUQyQjtBQUFBLE1BQ2pCQyxRQURpQix3QkFDakJBLFFBRGlCOztBQUdsQyxNQUFJRCxRQUFRLEtBQUtFLFNBQWpCLEVBQTRCO0FBQzFCTCxJQUFBQSxJQUFJLENBQUNHLFFBQUwsR0FBZ0JBLFFBQWhCO0FBQ0QsR0FGRCxNQUVPO0FBQ0wsV0FBT0gsSUFBSSxDQUFDRyxRQUFaO0FBQ0Q7O0FBRUQsTUFBSUMsUUFBUSxLQUFLQyxTQUFqQixFQUE0QjtBQUMxQkwsSUFBQUEsSUFBSSxDQUFDSSxRQUFMLEdBQWdCQSxRQUFoQjtBQUNELEdBRkQsTUFFTztBQUNMLFdBQU9KLElBQUksQ0FBQ0ksUUFBWjtBQUNEO0FBQ0Y7O0FBRU0sU0FBU0UsS0FBVCxDQUFlQyxJQUFmLEVBQXFCQyxNQUFyQixFQUE2QkMsSUFBN0IsRUFBbUM7QUFDeENGLEVBQUFBLElBQUksR0FBR0csU0FBUyxDQUFDSCxJQUFELEVBQU9FLElBQVAsQ0FBaEI7QUFDQUQsRUFBQUEsTUFBTSxHQUFHRSxTQUFTLENBQUNGLE1BQUQsRUFBU0MsSUFBVCxDQUFsQjtBQUVBLE1BQUlFLEdBQUcsR0FBRyxFQUFWLENBSndD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QUFKLEVBQW9FO0FBQ2xFL0QsUUFBQUEsUUFBUTtBQUNUO0FBQ0Y7QUFDRixHQTVCRDtBQThCQSxTQUFPO0FBQUNBLElBQUFBLFFBQVEsRUFBUkEsUUFBRDtBQUFXQyxJQUFBQSxRQUFRLEVBQVJBO0FBQVgsR0FBUDtBQUNEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtzdHJ1Y3R1cmVkUGF0Y2h9IGZyb20gJy4vY3JlYXRlJztcbmltcG9ydCB7cGFyc2VQYXRjaH0gZnJvbSAnLi9wYXJzZSc7XG5cbmltcG9ydCB7YXJyYXlFcXVhbCwgYXJyYXlTdGFydHNXaXRofSBmcm9tICcuLi91dGlsL2FycmF5JztcblxuZXhwb3J0IGZ1bmN0aW9uIGNhbGNMaW5lQ291bnQoaHVuaykge1xuICBjb25zdCB7b2xkTGluZXMsIG5ld0xpbmVzfSA9IGNhbGNPbGROZXdMaW5lQ291bnQoaHVuay5saW5lcyk7XG5cbiAgaWYgKG9sZExpbmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICBodW5rLm9sZExpbmVzID0gb2xkTGluZXM7XG4gIH0gZWxzZSB7XG4gICAgZGVsZXRlIGh1bmsub2xkTGluZXM7XG4gIH1cblxuICBpZiAobmV3TGluZXMgIT09IHVuZGVmaW5lZCkge1xuICAgIGh1bmsubmV3TGluZXMgPSBuZXdMaW5lcztcbiAgfSBlbHNlIHtcbiAgICBkZWxldGUgaHVuay5uZXdMaW5lcztcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2UobWluZSwgdGhlaXJzLCBiYXNlKSB7XG4gIG1pbmUgPSBsb2FkUGF0Y2gobWluZSwgYmFzZSk7XG4gIHRoZWlycyA9IGxvYWRQYXRjaCh0aGVpcnMsIGJhc2UpO1xuXG4gIGxldCByZXQgPSB7fTtcblxuICAvLyBGb3IgaW5kZXggd2UganVzdCBsZXQgaXQgcGFzcyB0aHJvdWdoIGFzIGl0IGRvZXNuJ3QgaGF2ZSBhbnkgbmVjZXNzYXJ5IG1lYW5pbmcuXG4gIC8vIExlYXZpbmcgc2FuaXR5IGNoZWNrcyBvbiB0aGlzIHRvIHRoZSBBUEkgY29uc3VtZXIgdGhhdCBtYXkga25vdyBtb3JlIGFib3V0IHRoZVxuICAvLyBtZWFuaW5nIGluIHRoZWlyIG93biBjb250ZXh0LlxuICBpZiAobWluZS5pbmRleCB8fCB0aGVpcnMuaW5kZXgpIHtcbiAgICByZXQuaW5kZXggPSBtaW5lLmluZGV4IHx8IHRoZWlycy5pbmRleDtcbiAgfVxuXG4gIGlmIChtaW5lLm5ld0ZpbGVOYW1lIHx8IHRoZWlycy5uZXdGaWxlTmFtZSkge1xuICAgIGlmICghZmlsZU5hbWVDaGFuZ2VkKG1pbmUpKSB7XG4gICAgICAvLyBObyBoZWFkZXIgb3Igbm8gY2hhbmdlIGluIG91cnMsIHVzZSB0aGVpcnMgKGFuZCBvdXJzIGlmIHRoZWlycyBkb2VzIG5vdCBleGlzdClcbiAgICAgIHJldC5vbGRGaWxlTmFtZSA9IHRoZWlycy5vbGRGaWxlTmFtZSB8fCBtaW5lLm9sZEZpbGVOYW1lO1xuICAgICAgcmV0Lm5ld0ZpbGVOYW1lID0gdGhlaXJzLm5ld0ZpbGVOYW1lIHx8IG1pbmUubmV3RmlsZU5hbWU7XG4gICAgICByZXQub2xkSGVhZGVyID0gdGhlaXJzLm9sZEhlYWRlciB8fCBtaW5lLm9sZEhlYWRlcjtcbiAgICAgIHJldC5uZXdIZWFkZXIgPSB0aGVpcnMubmV3SGVhZGVyIHx8IG1pbmUubmV3SGVhZGVyO1xuICAgIH0gZWxzZSBpZiAoIWZpbGVOYW1lQ2hhbmdlZCh0aGVpcnMpKSB7XG4gICAgICAvLyBObyBoZWFkZXIgb3Igbm8gY2hhbmdlIGluIHRoZWlycywgdXNlIG91cnNcbiAgICAgIHJldC5vbGRGaWxlTmFtZSA9IG1pbmUub2xkRmlsZU5hbWU7XG4gICAgICByZXQubmV3RmlsZU5hbWUgPSBtaW5lLm5ld0ZpbGVOYW1lO1xuICAgICAgcmV0Lm9sZEhlYWRlciA9IG1pbmUub2xkSGVhZGVyO1xuICAgICAgcmV0Lm5ld0hlYWRlciA9IG1pbmUubmV3SGVhZGVyO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBCb3RoIGNoYW5nZWQuLi4gZmlndXJlIGl0IG91dFxuICAgICAgcmV0Lm9sZEZpbGVOYW1lID0gc2VsZWN0RmllbGQocmV0LCBtaW5lLm9sZEZpbGVOYW1lLCB0aGVpcnMub2xkRmlsZU5hbWUpO1xuICAgICAgcmV0Lm5ld0ZpbGVOYW1lID0gc2VsZWN0RmllbGQocmV0LCBtaW5lLm5ld0ZpbGVOYW1lLCB0aGVpcnMubmV3RmlsZU5hbWUpO1xuICAgICAgcmV0Lm9sZEhlYWRlciA9IHNlbGVjdEZpZWxkKHJldCwgbWluZS5vbGRIZWFkZXIsIHRoZWlycy5vbGRIZWFkZXIpO1xuICAgICAgcmV0Lm5ld0hlYWRlciA9IHNlbGVjdEZpZWxkKHJldCwgbWluZS5uZXdIZWFkZXIsIHRoZWlycy5uZXdIZWFkZXIpO1xuICAgIH1cbiAgfVxuXG4gIHJldC5odW5rcyA9IFtdO1xuXG4gIGxldCBtaW5lSW5kZXggPSAwLFxuICAgICAgdGhlaXJzSW5kZXggPSAwLFxuICAgICAgbWluZU9mZnNldCA9IDAsXG4gICAgICB0aGVpcnNPZmZzZXQgPSAwO1xuXG4gIHdoaWxlIChtaW5lSW5kZXggPCBtaW5lLmh1bmtzLmxlbmd0aCB8fCB0aGVpcnNJbmRleCA8IHRoZWlycy5odW5rcy5sZW5ndGgpIHtcbiAgICBsZXQgbWluZUN1cnJlbnQgPSBtaW5lLmh1bmtzW21pbmVJbmRleF0gfHwge29sZFN0YXJ0OiBJbmZpbml0eX0sXG4gICAgICAgIHRoZWlyc0N1cnJlbnQgPSB0aGVpcnMuaHVua3NbdGhlaXJzSW5kZXhdIHx8IHtvbGRTdGFydDogSW5maW5pdHl9O1xuXG4gICAgaWYgKGh1bmtCZWZvcmUobWluZUN1cnJlbnQsIHRoZWlyc0N1cnJlbnQpKSB7XG4gICAgICAvLyBUaGlzIHBhdGNoIGRvZXMgbm90IG92ZXJsYXAgd2l0aCBhbnkgb2YgdGhlIG90aGVycywgeWF5LlxuICAgICAgcmV0Lmh1bmtzLnB1c2goY2xvbmVIdW5rKG1pbmVDdXJyZW50LCBtaW5lT2Zmc2V0KSk7XG4gICAgICBtaW5lSW5kZXgrKztcbiAgICAgIHRoZWlyc09mZnNldCArPSBtaW5lQ3VycmVudC5uZXdMaW5lcyAtIG1pbmVDdXJyZW50Lm9sZExpbmVzO1xuICAgIH0gZWxzZSBpZiAoaHVua0JlZm9yZSh0aGVpcnNDdXJyZW50LCBtaW5lQ3VycmVudCkpIHtcbiAgICAgIC8vIFRoaXMgcGF0Y2ggZG9lcyBub3Qgb3ZlcmxhcCB3aXRoIGFueSBvZiB0aGUgb3RoZXJzLCB5YXkuXG4gICAgICByZXQuaHVua3MucHVzaChjbG9uZUh1bmsodGhlaXJzQ3VycmVudCwgdGhlaXJzT2Zmc2V0KSk7XG4gICAgICB0aGVpcnNJbmRleCsrO1xuICAgICAgbWluZU9mZnNldCArPSB0aGVpcnNDdXJyZW50Lm5ld0xpbmVzIC0gdGhlaXJzQ3VycmVudC5vbGRMaW5lcztcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gT3ZlcmxhcCwgbWVyZ2UgYXMgYmVzdCB3ZSBjYW5cbiAgICAgIGxldCBtZXJnZWRIdW5rID0ge1xuICAgICAgICBvbGRTdGFydDogTWF0aC5taW4obWluZUN1cnJlbnQub2xkU3RhcnQsIHRoZWlyc0N1cnJlbnQub2xkU3RhcnQpLFxuICAgICAgICBvbGRMaW5lczogMCxcbiAgICAgICAgbmV3U3RhcnQ6IE1hdGgubWluKG1pbmVDdXJyZW50Lm5ld1N0YXJ0ICsgbWluZU9mZnNldCwgdGhlaXJzQ3VycmVudC5vbGRTdGFydCArIHRoZWlyc09mZnNldCksXG4gICAgICAgIG5ld0xpbmVzOiAwLFxuICAgICAgICBsaW5lczogW11cbiAgICAgIH07XG4gICAgICBtZXJnZUxpbmVzKG1lcmdlZEh1bmssIG1pbmVDdXJyZW50Lm9sZFN0YXJ0LCBtaW5lQ3VycmVudC5saW5lcywgdGhlaXJzQ3VycmVudC5vbGRTdGFydCwgdGhlaXJzQ3VycmVudC5saW5lcyk7XG4gICAgICB0aGVpcnNJbmRleCsrO1xuICAgICAgbWluZUluZGV4Kys7XG5cbiAgICAgIHJldC5odW5rcy5wdXNoKG1lcmdlZEh1bmspO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXQ7XG59XG5cbmZ1bmN0aW9uIGxvYWRQYXRjaChwYXJhbSwgYmFzZSkge1xuICBpZiAodHlwZW9mIHBhcmFtID09PSAnc3RyaW5nJykge1xuICAgIGlmICgoL15AQC9tKS50ZXN0KHBhcmFtKSB8fCAoKC9eSW5kZXg6L20pLnRlc3QocGFyYW0pKSkge1xuICAgICAgcmV0dXJuIHBhcnNlUGF0Y2gocGFyYW0pWzBdO1xuICAgIH1cblxuICAgIGlmICghYmFzZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNdXN0IHByb3ZpZGUgYSBiYXNlIHJlZmVyZW5jZSBvciBwYXNzIGluIGEgcGF0Y2gnKTtcbiAgICB9XG4gICAgcmV0dXJuIHN0cnVjdHVyZWRQYXRjaCh1bmRlZmluZWQsIHVuZGVmaW5lZCwgYmFzZSwgcGFyYW0pO1xuICB9XG5cbiAgcmV0dXJuIHBhcmFtO1xufVxuXG5mdW5jdGlvbiBmaWxlTmFtZUNoYW5nZWQocGF0Y2gpIHtcbiAgcmV0dXJuIHBhdGNoLm5ld0ZpbGVOYW1lICYmIHBhdGNoLm5ld0ZpbGVOYW1lICE9PSBwYXRjaC5vbGRGaWxlTmFtZTtcbn1cblxuZnVuY3Rpb24gc2VsZWN0RmllbGQoaW5kZXgsIG1pbmUsIHRoZWlycykge1xuICBpZiAobWluZSA9PT0gdGhlaXJzKSB7XG4gICAgcmV0dXJuIG1pbmU7XG4gIH0gZWxzZSB7XG4gICAgaW5kZXguY29uZmxpY3QgPSB0cnVlO1xuICAgIHJldHVybiB7bWluZSwgdGhlaXJzfTtcbiAgfVxufVxuXG5mdW5jdGlvbiBodW5rQmVmb3JlKHRlc3QsIGNoZWNrKSB7XG4gIHJldHVybiB0ZXN0Lm9sZFN0YXJ0IDwgY2hlY2sub2xkU3RhcnRcbiAgICAmJiAodGVzdC5vbGRTdGFydCArIHRlc3Qub2xkTGluZXMpIDwgY2hlY2sub2xkU3RhcnQ7XG59XG5cbmZ1bmN0aW9uIGNsb25lSHVuayhodW5rLCBvZmZzZXQpIHtcbiAgcmV0dXJuIHtcbiAgICBvbGRTdGFydDogaHVuay5vbGRTdGFydCwgb2xkTGluZXM6IGh1bmsub2xkTGluZXMsXG4gICAgbmV3U3RhcnQ6IGh1bmsubmV3U3RhcnQgKyBvZmZzZXQsIG5ld0xpbmVzOiBodW5rLm5ld0xpbmVzLFxuICAgIGxpbmVzOiBodW5rLmxpbmVzXG4gIH07XG59XG5cbmZ1bmN0aW9uIG1lcmdlTGluZXMoaHVuaywgbWluZU9mZnNldCwgbWluZUxpbmVzLCB0aGVpck9mZnNldCwgdGhlaXJMaW5lcykge1xuICAvLyBUaGlzIHdpbGwgZ2VuZXJhbGx5IHJlc3VsdCBpbiBhIGNvbmZsaWN0ZWQgaHVuaywgYnV0IHRoZXJlIGFyZSBjYXNlcyB3aGVyZSB0aGUgY29udGV4dFxuICAvLyBpcyB0aGUgb25seSBvdmVybGFwIHdoZXJlIHdlIGNhbiBzdWNjZXNzZnVsbHkgbWVyZ2UgdGhlIGNvbnRlbnQgaGVyZS5cbiAgbGV0IG1pbmUgPSB7b2Zmc2V0OiBtaW5lT2Zmc2V0LCBsaW5lczogbWluZUxpbmVzLCBpbmRleDogMH0sXG4gICAgICB0aGVpciA9IHtvZmZzZXQ6IHRoZWlyT2Zmc2V0LCBsaW5lczogdGhlaXJMaW5lcywgaW5kZXg6IDB9O1xuXG4gIC8vIEhhbmRsZSBhbnkgbGVhZGluZyBjb250ZW50XG4gIGluc2VydExlYWRpbmcoaHVuaywgbWluZSwgdGhlaXIpO1xuICBpbnNlcnRMZWFkaW5nKGh1bmssIHRoZWlyLCBtaW5lKTtcblxuICAvLyBOb3cgaW4gdGhlIG92ZXJsYXAgY29udGVudC4gU2NhbiB0aHJvdWdoIGFuZCBzZWxlY3QgdGhlIGJlc3QgY2hhbmdlcyBmcm9tIGVhY2guXG4gIHdoaWxlIChtaW5lLmluZGV4IDwgbWluZS5saW5lcy5sZW5ndGggJiYgdGhlaXIuaW5kZXggPCB0aGVpci5saW5lcy5sZW5ndGgpIHtcbiAgICBsZXQgbWluZUN1cnJlbnQgPSBtaW5lLmxpbmVzW21pbmUuaW5kZXhdLFxuICAgICAgICB0aGVpckN1cnJlbnQgPSB0aGVpci5saW5lc1t0aGVpci5pbmRleF07XG5cbiAgICBpZiAoKG1pbmVDdXJyZW50WzBdID09PSAnLScgfHwgbWluZUN1cnJlbnRbMF0gPT09ICcrJylcbiAgICAgICAgJiYgKHRoZWlyQ3VycmVudFswXSA9PT0gJy0nIHx8IHRoZWlyQ3VycmVudFswXSA9PT0gJysnKSkge1xuICAgICAgLy8gQm90aCBtb2RpZmllZCAuLi5cbiAgICAgIG11dHVhbENoYW5nZShodW5rLCBtaW5lLCB0aGVpcik7XG4gICAgfSBlbHNlIGlmIChtaW5lQ3VycmVudFswXSA9PT0gJysnICYmIHRoZWlyQ3VycmVudFswXSA9PT0gJyAnKSB7XG4gICAgICAvLyBNaW5lIGluc2VydGVkXG4gICAgICBodW5rLmxpbmVzLnB1c2goLi4uIGNvbGxlY3RDaGFuZ2UobWluZSkpO1xuICAgIH0gZWxzZSBpZiAodGhlaXJDdXJyZW50WzBdID09PSAnKycgJiYgbWluZUN1cnJlbnRbMF0gPT09ICcgJykge1xuICAgICAgLy8gVGhlaXJzIGluc2VydGVkXG4gICAgICBodW5rLmxpbmVzLnB1c2goLi4uIGNvbGxlY3RDaGFuZ2UodGhlaXIpKTtcbiAgICB9IGVsc2UgaWYgKG1pbmVDdXJyZW50WzBdID09PSAnLScgJiYgdGhlaXJDdXJyZW50WzBdID09PSAnICcpIHtcbiAgICAgIC8vIE1pbmUgcmVtb3ZlZCBvciBlZGl0ZWRcbiAgICAgIHJlbW92YWwoaHVuaywgbWluZSwgdGhlaXIpO1xuICAgIH0gZWxzZSBpZiAodGhlaXJDdXJyZW50WzBdID09PSAnLScgJiYgbWluZUN1cnJlbnRbMF0gPT09ICcgJykge1xuICAgICAgLy8gVGhlaXIgcmVtb3ZlZCBvciBlZGl0ZWRcbiAgICAgIHJlbW92YWwoaHVuaywgdGhlaXIsIG1pbmUsIHRydWUpO1xuICAgIH0gZWxzZSBpZiAobWluZUN1cnJlbnQgPT09IHRoZWlyQ3VycmVudCkge1xuICAgICAgLy8gQ29udGV4dCBpZGVudGl0eVxuICAgICAgaHVuay5saW5lcy5wdXNoKG1pbmVDdXJyZW50KTtcbiAgICAgIG1pbmUuaW5kZXgrKztcbiAgICAgIHRoZWlyLmluZGV4Kys7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIENvbnRleHQgbWlzbWF0Y2hcbiAgICAgIGNvbmZsaWN0KGh1bmssIGNvbGxlY3RDaGFuZ2UobWluZSksIGNvbGxlY3RDaGFuZ2UodGhlaXIpKTtcbiAgICB9XG4gIH1cblxuICAvLyBOb3cgcHVzaCBhbnl0aGluZyB0aGF0IG1heSBiZSByZW1haW5pbmdcbiAgaW5zZXJ0VHJhaWxpbmcoaHVuaywgbWluZSk7XG4gIGluc2VydFRyYWlsaW5nKGh1bmssIHRoZWlyKTtcblxuICBjYWxjTGluZUNvdW50KGh1bmspO1xufVxuXG5mdW5jdGlvbiBtdXR1YWxDaGFuZ2UoaHVuaywgbWluZSwgdGhlaXIpIHtcbiAgbGV0IG15Q2hhbmdlcyA9IGNvbGxlY3RDaGFuZ2UobWluZSksXG4gICAgICB0aGVpckNoYW5nZXMgPSBjb2xsZWN0Q2hhbmdlKHRoZWlyKTtcblxuICBpZiAoYWxsUmVtb3ZlcyhteUNoYW5nZXMpICYmIGFsbFJlbW92ZXModGhlaXJDaGFuZ2VzKSkge1xuICAgIC8vIFNwZWNpYWwgY2FzZSBmb3IgcmVtb3ZlIGNoYW5nZXMgdGhhdCBhcmUgc3VwZXJzZXRzIG9mIG9uZSBhbm90aGVyXG4gICAgaWYgKGFycmF5U3RhcnRzV2l0aChteUNoYW5nZXMsIHRoZWlyQ2hhbmdlcylcbiAgICAgICAgJiYgc2tpcFJlbW92ZVN1cGVyc2V0KHRoZWlyLCBteUNoYW5nZXMsIG15Q2hhbmdlcy5sZW5ndGggLSB0aGVpckNoYW5nZXMubGVuZ3RoKSkge1xuICAgICAgaHVuay5saW5lcy5wdXNoKC4uLiBteUNoYW5nZXMpO1xuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSBpZiAoYXJyYXlTdGFydHNXaXRoKHRoZWlyQ2hhbmdlcywgbXlDaGFuZ2VzKVxuICAgICAgICAmJiBza2lwUmVtb3ZlU3VwZXJzZXQobWluZSwgdGhlaXJDaGFuZ2VzLCB0aGVpckNoYW5nZXMubGVuZ3RoIC0gbXlDaGFuZ2VzLmxlbmd0aCkpIHtcbiAgICAgIGh1bmsubGluZXMucHVzaCguLi4gdGhlaXJDaGFuZ2VzKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH0gZWxzZSBpZiAoYXJyYXlFcXVhbChteUNoYW5nZXMsIHRoZWlyQ2hhbmdlcykpIHtcbiAgICBodW5rLmxpbmVzLnB1c2goLi4uIG15Q2hhbmdlcyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uZmxpY3QoaHVuaywgbXlDaGFuZ2VzLCB0aGVpckNoYW5nZXMpO1xufVxuXG5mdW5jdGlvbiByZW1vdmFsKGh1bmssIG1pbmUsIHRoZWlyLCBzd2FwKSB7XG4gIGxldCBteUNoYW5nZXMgPSBjb2xsZWN0Q2hhbmdlKG1pbmUpLFxuICAgICAgdGhlaXJDaGFuZ2VzID0gY29sbGVjdENvbnRleHQodGhlaXIsIG15Q2hhbmdlcyk7XG4gIGlmICh0aGVpckNoYW5nZXMubWVyZ2VkKSB7XG4gICAgaHVuay5saW5lcy5wdXNoKC4uLiB0aGVpckNoYW5nZXMubWVyZ2VkKTtcbiAgfSBlbHNlIHtcbiAgICBjb25mbGljdChodW5rLCBzd2FwID8gdGhlaXJDaGFuZ2VzIDogbXlDaGFuZ2VzLCBzd2FwID8gbXlDaGFuZ2VzIDogdGhlaXJDaGFuZ2VzKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjb25mbGljdChodW5rLCBtaW5lLCB0aGVpcikge1xuICBodW5rLmNvbmZsaWN0ID0gdHJ1ZTtcbiAgaHVuay5saW5lcy5wdXNoKHtcbiAgICBjb25mbGljdDogdHJ1ZSxcbiAgICBtaW5lOiBtaW5lLFxuICAgIHRoZWlyczogdGhlaXJcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGluc2VydExlYWRpbmcoaHVuaywgaW5zZXJ0LCB0aGVpcikge1xuICB3aGlsZSAoaW5zZXJ0Lm9mZnNldCA8IHRoZWlyLm9mZnNldCAmJiBpbnNlcnQuaW5kZXggPCBpbnNlcnQubGluZXMubGVuZ3RoKSB7XG4gICAgbGV0IGxpbmUgPSBpbnNlcnQubGluZXNbaW5zZXJ0LmluZGV4KytdO1xuICAgIGh1bmsubGluZXMucHVzaChsaW5lKTtcbiAgICBpbnNlcnQub2Zmc2V0Kys7XG4gIH1cbn1cbmZ1bmN0aW9uIGluc2VydFRyYWlsaW5nKGh1bmssIGluc2VydCkge1xuICB3aGlsZSAoaW5zZXJ0LmluZGV4IDwgaW5zZXJ0LmxpbmVzLmxlbmd0aCkge1xuICAgIGxldCBsaW5lID0gaW5zZXJ0LmxpbmVzW2luc2VydC5pbmRleCsrXTtcbiAgICBodW5rLmxpbmVzLnB1c2gobGluZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY29sbGVjdENoYW5nZShzdGF0ZSkge1xuICBsZXQgcmV0ID0gW10sXG4gICAgICBvcGVyYXRpb24gPSBzdGF0ZS5saW5lc1tzdGF0ZS5pbmRleF1bMF07XG4gIHdoaWxlIChzdGF0ZS5pbmRleCA8IHN0YXRlLmxpbmVzLmxlbmd0aCkge1xuICAgIGxldCBsaW5lID0gc3RhdGUubGluZXNbc3RhdGUuaW5kZXhdO1xuXG4gICAgLy8gR3JvdXAgYWRkaXRpb25zIHRoYXQgYXJlIGltbWVkaWF0ZWx5IGFmdGVyIHN1YnRyYWN0aW9ucyBhbmQgdHJlYXQgdGhlbSBhcyBvbmUgXCJhdG9taWNcIiBtb2RpZnkgY2hhbmdlLlxuICAgIGlmIChvcGVyYXRpb24gPT09ICctJyAmJiBsaW5lWzBdID09PSAnKycpIHtcbiAgICAgIG9wZXJhdGlvbiA9ICcrJztcbiAgICB9XG5cbiAgICBpZiAob3BlcmF0aW9uID09PSBsaW5lWzBdKSB7XG4gICAgICByZXQucHVzaChsaW5lKTtcbiAgICAgIHN0YXRlLmluZGV4Kys7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXQ7XG59XG5mdW5jdGlvbiBjb2xsZWN0Q29udGV4dChzdGF0ZSwgbWF0Y2hDaGFuZ2VzKSB7XG4gIGxldCBjaGFuZ2VzID0gW10sXG4gICAgICBtZXJnZWQgPSBbXSxcbiAgICAgIG1hdGNoSW5kZXggPSAwLFxuICAgICAgY29udGV4dENoYW5nZXMgPSBmYWxzZSxcbiAgICAgIGNvbmZsaWN0ZWQgPSBmYWxzZTtcbiAgd2hpbGUgKG1hdGNoSW5kZXggPCBtYXRjaENoYW5nZXMubGVuZ3RoXG4gICAgICAgICYmIHN0YXRlLmluZGV4IDwgc3RhdGUubGluZXMubGVuZ3RoKSB7XG4gICAgbGV0IGNoYW5nZSA9IHN0YXRlLmxpbmVzW3N0YXRlLmluZGV4XSxcbiAgICAgICAgbWF0Y2ggPSBtYXRjaENoYW5nZXNbbWF0Y2hJbmRleF07XG5cbiAgICAvLyBPbmNlIHdlJ3ZlIGhpdCBvdXIgYWRkLCB0aGVuIHdlIGFyZSBkb25lXG4gICAgaWYgKG1hdGNoWzBdID09PSAnKycpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGNvbnRleHRDaGFuZ2VzID0gY29udGV4dENoYW5nZXMgfHwgY2hhbmdlWzBdICE9PSAnICc7XG5cbiAgICBtZXJnZWQucHVzaChtYXRjaCk7XG4gICAgbWF0Y2hJbmRleCsrO1xuXG4gICAgLy8gQ29uc3VtZSBhbnkgYWRkaXRpb25zIGluIHRoZSBvdGhlciBibG9jayBhcyBhIGNvbmZsaWN0IHRvIGF0dGVtcHRcbiAgICAvLyB0byBwdWxsIGluIHRoZSByZW1haW5pbmcgY29udGV4dCBhZnRlciB0aGlzXG4gICAgaWYgKGNoYW5nZVswXSA9PT0gJysnKSB7XG4gICAgICBjb25mbGljdGVkID0gdHJ1ZTtcblxuICAgICAgd2hpbGUgKGNoYW5nZVswXSA9PT0gJysnKSB7XG4gICAgICAgIGNoYW5nZXMucHVzaChjaGFuZ2UpO1xuICAgICAgICBjaGFuZ2UgPSBzdGF0ZS5saW5lc1srK3N0YXRlLmluZGV4XTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobWF0Y2guc3Vic3RyKDEpID09PSBjaGFuZ2Uuc3Vic3RyKDEpKSB7XG4gICAgICBjaGFuZ2VzLnB1c2goY2hhbmdlKTtcbiAgICAgIHN0YXRlLmluZGV4Kys7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbmZsaWN0ZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGlmICgobWF0Y2hDaGFuZ2VzW21hdGNoSW5kZXhdIHx8ICcnKVswXSA9PT0gJysnXG4gICAgICAmJiBjb250ZXh0Q2hhbmdlcykge1xuICAgIGNvbmZsaWN0ZWQgPSB0cnVlO1xuICB9XG5cbiAgaWYgKGNvbmZsaWN0ZWQpIHtcbiAgICByZXR1cm4gY2hhbmdlcztcbiAgfVxuXG4gIHdoaWxlIChtYXRjaEluZGV4IDwgbWF0Y2hDaGFuZ2VzLmxlbmd0aCkge1xuICAgIG1lcmdlZC5wdXNoKG1hdGNoQ2hhbmdlc1ttYXRjaEluZGV4KytdKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbWVyZ2VkLFxuICAgIGNoYW5nZXNcbiAgfTtcbn1cblxuZnVuY3Rpb24gYWxsUmVtb3ZlcyhjaGFuZ2VzKSB7XG4gIHJldHVybiBjaGFuZ2VzLnJlZHVjZShmdW5jdGlvbihwcmV2LCBjaGFuZ2UpIHtcbiAgICByZXR1cm4gcHJldiAmJiBjaGFuZ2VbMF0gPT09ICctJztcbiAgfSwgdHJ1ZSk7XG59XG5mdW5jdGlvbiBza2lwUmVtb3ZlU3VwZXJzZXQoc3RhdGUsIHJlbW92ZUNoYW5nZXMsIGRlbHRhKSB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZGVsdGE7IGkrKykge1xuICAgIGxldCBjaGFuZ2VDb250ZW50ID0gcmVtb3ZlQ2hhbmdlc1tyZW1vdmVDaGFuZ2VzLmxlbmd0aCAtIGRlbHRhICsgaV0uc3Vic3RyKDEpO1xuICAgIGlmIChzdGF0ZS5saW5lc1tzdGF0ZS5pbmRleCArIGldICE9PSAnICcgKyBjaGFuZ2VDb250ZW50KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgc3RhdGUuaW5kZXggKz0gZGVsdGE7XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBjYWxjT2xkTmV3TGluZUNvdW50KGxpbmVzKSB7XG4gIGxldCBvbGRMaW5lcyA9IDA7XG4gIGxldCBuZXdMaW5lcyA9IDA7XG5cbiAgbGluZXMuZm9yRWFjaChmdW5jdGlvbihsaW5lKSB7XG4gICAgaWYgKHR5cGVvZiBsaW5lICE9PSAnc3RyaW5nJykge1xuICAgICAgbGV0IG15Q291bnQgPSBjYWxjT2xkTmV3TGluZUNvdW50KGxpbmUubWluZSk7XG4gICAgICBsZXQgdGhlaXJDb3VudCA9IGNhbGNPbGROZXdMaW5lQ291bnQobGluZS50aGVpcnMpO1xuXG4gICAgICBpZiAob2xkTGluZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAobXlDb3VudC5vbGRMaW5lcyA9PT0gdGhlaXJDb3VudC5vbGRMaW5lcykge1xuICAgICAgICAgIG9sZExpbmVzICs9IG15Q291bnQub2xkTGluZXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb2xkTGluZXMgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKG5ld0xpbmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKG15Q291bnQubmV3TGluZXMgPT09IHRoZWlyQ291bnQubmV3TGluZXMpIHtcbiAgICAgICAgICBuZXdMaW5lcyArPSBteUNvdW50Lm5ld0xpbmVzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5ld0xpbmVzID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChuZXdMaW5lcyAhPT0gdW5kZWZpbmVkICYmIChsaW5lWzBdID09PSAnKycgfHwgbGluZVswXSA9PT0gJyAnKSkge1xuICAgICAgICBuZXdMaW5lcysrO1xuICAgICAgfVxuICAgICAgaWYgKG9sZExpbmVzICE9PSB1bmRlZmluZWQgJiYgKGxpbmVbMF0gPT09ICctJyB8fCBsaW5lWzBdID09PSAnICcpKSB7XG4gICAgICAgIG9sZExpbmVzKys7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4ge29sZExpbmVzLCBuZXdMaW5lc307XG59XG4iXX0=
+
+
+/***/ }),
+
+/***/ 15870:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+/*istanbul ignore start*/
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.parsePatch = parsePatch;
+
+/*istanbul ignore end*/
+function parsePatch(uniDiff) {
+ /*istanbul ignore start*/
+ var
+ /*istanbul ignore end*/
+ options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
+ var diffstr = uniDiff.split(/\r\n|[\n\v\f\r\x85]/),
+ delimiters = uniDiff.match(/\r\n|[\n\v\f\r\x85]/g) || [],
+ list = [],
+ i = 0;
+
+ function parseIndex() {
+ var index = {};
+ list.push(index); // Parse diff metadata
+
+ while (i < diffstr.length) {
+ var line = diffstr[i]; // File header found, end parsing diff metadata
+
+ if (/^(\-\-\-|\+\+\+|@@)\s/.test(line)) {
+ break;
+ } // Diff index
+
+
+ var header = /^(?:Index:|diff(?: -r \w+)+)\s+(.+?)\s*$/.exec(line);
+
+ if (header) {
+ index.index = header[1];
+ }
+
+ i++;
+ } // Parse file headers if they are defined. Unified diff requires them, but
+ // there's no technical issues to have an isolated hunk without file header
+
+
+ parseFileHeader(index);
+ parseFileHeader(index); // Parse hunks
+
+ index.hunks = [];
+
+ while (i < diffstr.length) {
+ var _line = diffstr[i];
+
+ if (/^(Index:|diff|\-\-\-|\+\+\+)\s/.test(_line)) {
+ break;
+ } else if (/^@@/.test(_line)) {
+ index.hunks.push(parseHunk());
+ } else if (_line && options.strict) {
+ // Ignore unexpected content unless in strict mode
+ throw new Error('Unknown line ' + (i + 1) + ' ' + JSON.stringify(_line));
+ } else {
+ i++;
+ }
+ }
+ } // Parses the --- and +++ headers, if none are found, no lines
+ // are consumed.
+
+
+ function parseFileHeader(index) {
+ var fileHeader = /^(---|\+\+\+)\s+(.*)$/.exec(diffstr[i]);
+
+ if (fileHeader) {
+ var keyPrefix = fileHeader[1] === '---' ? 'old' : 'new';
+ var data = fileHeader[2].split('\t', 2);
+ var fileName = data[0].replace(/\\\\/g, '\\');
+
+ if (/^".*"$/.test(fileName)) {
+ fileName = fileName.substr(1, fileName.length - 2);
+ }
+
+ index[keyPrefix + 'FileName'] = fileName;
+ index[keyPrefix + 'Header'] = (data[1] || '').trim();
+ i++;
+ }
+ } // Parses a hunk
+ // This assumes that we are at the start of a hunk.
+
+
+ function parseHunk() {
+ var chunkHeaderIndex = i,
+ chunkHeaderLine = diffstr[i++],
+ chunkHeader = chunkHeaderLine.split(/@@ -(\d+)(?:,(\d+))? \+(\d+)(?:,(\d+))? @@/);
+ var hunk = {
+ oldStart: +chunkHeader[1],
+ oldLines: typeof chunkHeader[2] === 'undefined' ? 1 : +chunkHeader[2],
+ newStart: +chunkHeader[3],
+ newLines: typeof chunkHeader[4] === 'undefined' ? 1 : +chunkHeader[4],
+ lines: [],
+ linedelimiters: []
+ }; // Unified Diff Format quirk: If the chunk size is 0,
+ // the first number is one lower than one would expect.
+ // https://www.artima.com/weblogs/viewpost.jsp?thread=164293
+
+ if (hunk.oldLines === 0) {
+ hunk.oldStart += 1;
+ }
+
+ if (hunk.newLines === 0) {
+ hunk.newStart += 1;
+ }
+
+ var addCount = 0,
+ removeCount = 0;
+
+ for (; i < diffstr.length; i++) {
+ // Lines starting with '---' could be mistaken for the "remove line" operation
+ // But they could be the header for the next file. Therefore prune such cases out.
+ if (diffstr[i].indexOf('--- ') === 0 && i + 2 < diffstr.length && diffstr[i + 1].indexOf('+++ ') === 0 && diffstr[i + 2].indexOf('@@') === 0) {
+ break;
+ }
+
+ var operation = diffstr[i].length == 0 && i != diffstr.length - 1 ? ' ' : diffstr[i][0];
+
+ if (operation === '+' || operation === '-' || operation === ' ' || operation === '\\') {
+ hunk.lines.push(diffstr[i]);
+ hunk.linedelimiters.push(delimiters[i] || '\n');
+
+ if (operation === '+') {
+ addCount++;
+ } else if (operation === '-') {
+ removeCount++;
+ } else if (operation === ' ') {
+ addCount++;
+ removeCount++;
+ }
+ } else {
+ break;
+ }
+ } // Handle the empty block count case
+
+
+ if (!addCount && hunk.newLines === 1) {
+ hunk.newLines = 0;
+ }
+
+ if (!removeCount && hunk.oldLines === 1) {
+ hunk.oldLines = 0;
+ } // Perform optional sanity checking
+
+
+ if (options.strict) {
+ if (addCount !== hunk.newLines) {
+ throw new Error('Added line count did not match for hunk at line ' + (chunkHeaderIndex + 1));
+ }
+
+ if (removeCount !== hunk.oldLines) {
+ throw new Error('Removed line count did not match for hunk at line ' + (chunkHeaderIndex + 1));
+ }
+ }
+
+ return hunk;
+ }
+
+ while (i < diffstr.length) {
+ parseIndex();
+ }
+
+ return list;
+}
+//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wYXRjaC9wYXJzZS5qcyJdLCJuYW1lcyI6WyJwYXJzZVBhdGNoIiwidW5pRGlmZiIsIm9wdGlvbnMiLCJkaWZmc3RyIiwic3BsaXQiLCJkZWxpbWl0ZXJzIiwibWF0Y2giLCJsaXN0IiwiaSIsInBhcnNlSW5kZXgiLCJpbmRleCIsInB1c2giLCJsZW5ndGgiLCJsaW5lIiwidGVzdCIsImhlYWRlciIsImV4ZWMiLCJwYXJzZUZpbGVIZWFkZXIiLCJodW5rcyIsInBhcnNlSHVuayIsInN0cmljdCIsIkVycm9yIiwiSlNPTiIsInN0cmluZ2lmeSIsImZpbGVIZWFkZXIiLCJrZXlQcmVmaXgiLCJkYXRhIiwiZmlsZU5hbWUiLCJyZXBsYWNlIiwic3Vic3RyIiwidHJpbSIsImNodW5rSGVhZGVySW5kZXgiLCJjaHVua0hlYWRlckxpbmUiLCJjaHVua0hlYWRlciIsImh1bmsiLCJvbGRTdGFydCIsIm9sZExpbmVzIiwibmV3U3RhcnQiLCJuZXdMaW5lcyIsImxpbmVzIiwibGluZWRlbGltaXRlcnMiLCJhZGRDb3VudCIsInJlbW92ZUNvdW50IiwiaW5kZXhPZiIsIm9wZXJhdGlvbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQU8sU0FBU0EsVUFBVCxDQUFvQkMsT0FBcEIsRUFBMkM7QUFBQTtBQUFBO0FBQUE7QUFBZEMsRUFBQUEsT0FBYyx1RUFBSixFQUFJO0FBQ2hELE1BQUlDLE9BQU8sR0FBR0YsT0FBTyxDQUFDRyxLQUFSLENBQWMscUJBQWQsQ0FBZDtBQUFBLE1BQ0lDLFVBQVUsR0FBR0osT0FBTyxDQUFDSyxLQUFSLENBQWMsc0JBQWQsS0FBeUMsRUFEMUQ7QUFBQSxNQUVJQyxJQUFJLEdBQUcsRUFGWDtBQUFBLE1BR0lDLENBQUMsR0FBRyxDQUhSOztBQUtBLFdBQVNDLFVBQVQsR0FBc0I7QUFDcEIsUUFBSUMsS0FBSyxHQUFHLEVBQVo7QUFDQUgsSUFBQUEsSUFBSSxDQUFDSSxJQUFMLENBQVVELEtBQVYsRUFGb0IsQ0FJcEI7O0FB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QUwsS0FBa0IsQ0FBbkMsRUFBc0M7QUFDcENKLE1BQUFBLElBQUksQ0FBQ0ksUUFBTCxHQUFnQixDQUFoQjtBQUNEOztBQUNELFFBQUksQ0FBQ0ksV0FBRCxJQUFnQlIsSUFBSSxDQUFDRSxRQUFMLEtBQWtCLENBQXRDLEVBQXlDO0FBQ3ZDRixNQUFBQSxJQUFJLENBQUNFLFFBQUwsR0FBZ0IsQ0FBaEI7QUFDRCxLQTVEa0IsQ0E4RG5COzs7QUFDQSxRQUFJbEMsT0FBTyxDQUFDa0IsTUFBWixFQUFvQjtBQUNsQixVQUFJcUIsUUFBUSxLQUFLUCxJQUFJLENBQUNJLFFBQXRCLEVBQWdDO0FBQzlCLGNBQU0sSUFBSWpCLEtBQUosQ0FBVSxzREFBc0RVLGdCQUFnQixHQUFHLENBQXpFLENBQVYsQ0FBTjtBQUNEOztBQUNELFVBQUlXLFdBQVcsS0FBS1IsSUFBSSxDQUFDRSxRQUF6QixFQUFtQztBQUNqQyxjQUFNLElBQUlmLEtBQUosQ0FBVSx3REFBd0RVLGdCQUFnQixHQUFHLENBQTNFLENBQVYsQ0FBTjtBQUNEO0FBQ0Y7O0FBRUQsV0FBT0csSUFBUDtBQUNEOztBQUVELFNBQU8xQixDQUFDLEdBQUdMLE9BQU8sQ0FBQ1MsTUFBbkIsRUFBMkI7QUFDekJILElBQUFBLFVBQVU7QUFDWDs7QUFFRCxTQUFPRixJQUFQO0FBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gcGFyc2VQYXRjaCh1bmlEaWZmLCBvcHRpb25zID0ge30pIHtcbiAgbGV0IGRpZmZzdHIgPSB1bmlEaWZmLnNwbGl0KC9cXHJcXG58W1xcblxcdlxcZlxcclxceDg1XS8pLFxuICAgICAgZGVsaW1pdGVycyA9IHVuaURpZmYubWF0Y2goL1xcclxcbnxbXFxuXFx2XFxmXFxyXFx4ODVdL2cpIHx8IFtdLFxuICAgICAgbGlzdCA9IFtdLFxuICAgICAgaSA9IDA7XG5cbiAgZnVuY3Rpb24gcGFyc2VJbmRleCgpIHtcbiAgICBsZXQgaW5kZXggPSB7fTtcbiAgICBsaXN0LnB1c2goaW5kZXgpO1xuXG4gICAgLy8gUGFyc2UgZGlmZiBtZXRhZGF0YVxuICAgIHdoaWxlIChpIDwgZGlmZnN0ci5sZW5ndGgpIHtcbiAgICAgIGxldCBsaW5lID0gZGlmZnN0cltpXTtcblxuICAgICAgLy8gRmlsZSBoZWFkZXIgZm91bmQsIGVuZCBwYXJzaW5nIGRpZmYgbWV0YWRhdGFcbiAgICAgIGlmICgoL14oXFwtXFwtXFwtfFxcK1xcK1xcK3xAQClcXHMvKS50ZXN0KGxpbmUpKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICAvLyBEaWZmIGluZGV4XG4gICAgICBsZXQgaGVhZGVyID0gKC9eKD86SW5kZXg6fGRpZmYoPzogLXIgXFx3KykrKVxccysoLis/KVxccyokLykuZXhlYyhsaW5lKTtcbiAgICAgIGlmIChoZWFkZXIpIHtcbiAgICAgICAgaW5kZXguaW5kZXggPSBoZWFkZXJbMV07XG4gICAgICB9XG5cbiAgICAgIGkrKztcbiAgICB9XG5cbiAgICAvLyBQYXJzZSBmaWxlIGhlYWRlcnMgaWYgdGhleSBhcmUgZGVmaW5lZC4gVW5pZmllZCBkaWZmIHJlcXVpcmVzIHRoZW0sIGJ1dFxuICAgIC8vIHRoZXJlJ3Mgbm8gdGVjaG5pY2FsIGlzc3VlcyB0byBoYXZlIGFuIGlzb2xhdGVkIGh1bmsgd2l0aG91dCBmaWxlIGhlYWRlclxuICAgIHBhcnNlRmlsZUhlYWRlcihpbmRleCk7XG4gICAgcGFyc2VGaWxlSGVhZGVyKGluZGV4KTtcblxuICAgIC8vIFBhcnNlIGh1bmtzXG4gICAgaW5kZXguaHVua3MgPSBbXTtcblxuICAgIHdoaWxlIChpIDwgZGlmZnN0ci5sZW5ndGgpIHtcbiAgICAgIGxldCBsaW5lID0gZGlmZnN0cltpXTtcblxuICAgICAgaWYgKCgvXihJbmRleDp8ZGlmZnxcXC1cXC1cXC18XFwrXFwrXFwrKVxccy8pLnRlc3QobGluZSkpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9IGVsc2UgaWYgKCgvXkBALykudGVzdChsaW5lKSkge1xuICAgICAgICBpbmRleC5odW5rcy5wdXNoKHBhcnNlSHVuaygpKTtcbiAgICAgIH0gZWxzZSBpZiAobGluZSAmJiBvcHRpb25zLnN0cmljdCkge1xuICAgICAgICAvLyBJZ25vcmUgdW5leHBlY3RlZCBjb250ZW50IHVubGVzcyBpbiBzdHJpY3QgbW9kZVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gbGluZSAnICsgKGkgKyAxKSArICcgJyArIEpTT04uc3RyaW5naWZ5KGxpbmUpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGkrKztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBQYXJzZXMgdGhlIC0tLSBhbmQgKysrIGhlYWRlcnMsIGlmIG5vbmUgYXJlIGZvdW5kLCBubyBsaW5lc1xuICAvLyBhcmUgY29uc3VtZWQuXG4gIGZ1bmN0aW9uIHBhcnNlRmlsZUhlYWRlcihpbmRleCkge1xuICAgIGNvbnN0IGZpbGVIZWFkZXIgPSAoL14oLS0tfFxcK1xcK1xcKylcXHMrKC4qKSQvKS5leGVjKGRpZmZzdHJbaV0pO1xuICAgIGlmIChmaWxlSGVhZGVyKSB7XG4gICAgICBsZXQga2V5UHJlZml4ID0gZmlsZUhlYWRlclsxXSA9PT0gJy0tLScgPyAnb2xkJyA6ICduZXcnO1xuICAgICAgY29uc3QgZGF0YSA9IGZpbGVIZWFkZXJbMl0uc3BsaXQoJ1xcdCcsIDIpO1xuICAgICAgbGV0IGZpbGVOYW1lID0gZGF0YVswXS5yZXBsYWNlKC9cXFxcXFxcXC9nLCAnXFxcXCcpO1xuICAgICAgaWYgKCgvXlwiLipcIiQvKS50ZXN0KGZpbGVOYW1lKSkge1xuICAgICAgICBmaWxlTmFtZSA9IGZpbGVOYW1lLnN1YnN0cigxLCBmaWxlTmFtZS5sZW5ndGggLSAyKTtcbiAgICAgIH1cbiAgICAgIGluZGV4W2tleVByZWZpeCArICdGaWxlTmFtZSddID0gZmlsZU5hbWU7XG4gICAgICBpbmRleFtrZXlQcmVmaXggKyAnSGVhZGVyJ10gPSAoZGF0YVsxXSB8fCAnJykudHJpbSgpO1xuXG4gICAgICBpKys7XG4gICAgfVxuICB9XG5cbiAgLy8gUGFyc2VzIGEgaHVua1xuICAvLyBUaGlzIGFzc3VtZXMgdGhhdCB3ZSBhcmUgYXQgdGhlIHN0YXJ0IG9mIGEgaHVuay5cbiAgZnVuY3Rpb24gcGFyc2VIdW5rKCkge1xuICAgIGxldCBjaHVua0hlYWRlckluZGV4ID0gaSxcbiAgICAgICAgY2h1bmtIZWFkZXJMaW5lID0gZGlmZnN0cltpKytdLFxuICAgICAgICBjaHVua0hlYWRlciA9IGNodW5rSGVhZGVyTGluZS5zcGxpdCgvQEAgLShcXGQrKSg/OiwoXFxkKykpPyBcXCsoXFxkKykoPzosKFxcZCspKT8gQEAvKTtcblxuICAgIGxldCBodW5rID0ge1xuICAgICAgb2xkU3RhcnQ6ICtjaHVua0hlYWRlclsxXSxcbiAgICAgIG9sZExpbmVzOiB0eXBlb2YgY2h1bmtIZWFkZXJbMl0gPT09ICd1bmRlZmluZWQnID8gMSA6ICtjaHVua0hlYWRlclsyXSxcbiAgICAgIG5ld1N0YXJ0OiArY2h1bmtIZWFkZXJbM10sXG4gICAgICBuZXdMaW5lczogdHlwZW9mIGNodW5rSGVhZGVyWzRdID09PSAndW5kZWZpbmVkJyA/IDEgOiArY2h1bmtIZWFkZXJbNF0sXG4gICAgICBsaW5lczogW10sXG4gICAgICBsaW5lZGVsaW1pdGVyczogW11cbiAgICB9O1xuXG4gICAgLy8gVW5pZmllZCBEaWZmIEZvcm1hdCBxdWlyazogSWYgdGhlIGNodW5rIHNpemUgaXMgMCxcbiAgICAvLyB0aGUgZmlyc3QgbnVtYmVyIGlzIG9uZSBsb3dlciB0aGFuIG9uZSB3b3VsZCBleHBlY3QuXG4gICAgLy8gaHR0cHM6Ly93d3cuYXJ0aW1hLmNvbS93ZWJsb2dzL3ZpZXdwb3N0LmpzcD90aHJlYWQ9MTY0MjkzXG4gICAgaWYgKGh1bmsub2xkTGluZXMgPT09IDApIHtcbiAgICAgIGh1bmsub2xkU3RhcnQgKz0gMTtcbiAgICB9XG4gICAgaWYgKGh1bmsubmV3TGluZXMgPT09IDApIHtcbiAgICAgIGh1bmsubmV3U3RhcnQgKz0gMTtcbiAgICB9XG5cbiAgICBsZXQgYWRkQ291bnQgPSAwLFxuICAgICAgICByZW1vdmVDb3VudCA9IDA7XG4gICAgZm9yICg7IGkgPCBkaWZmc3RyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAvLyBMaW5lcyBzdGFydGluZyB3aXRoICctLS0nIGNvdWxkIGJlIG1pc3Rha2VuIGZvciB0aGUgXCJyZW1vdmUgbGluZVwiIG9wZXJhdGlvblxuICAgICAgLy8gQnV0IHRoZXkgY291bGQgYmUgdGhlIGhlYWRlciBmb3IgdGhlIG5leHQgZmlsZS4gVGhlcmVmb3JlIHBydW5lIHN1Y2ggY2FzZXMgb3V0LlxuICAgICAgaWYgKGRpZmZzdHJbaV0uaW5kZXhPZignLS0tICcpID09PSAwXG4gICAgICAgICAgICAmJiAoaSArIDIgPCBkaWZmc3RyLmxlbmd0aClcbiAgICAgICAgICAgICYmIGRpZmZzdHJbaSArIDFdLmluZGV4T2YoJysrKyAnKSA9PT0gMFxuICAgICAgICAgICAgJiYgZGlmZnN0cltpICsgMl0uaW5kZXhPZignQEAnKSA9PT0gMCkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgbGV0IG9wZXJhdGlvbiA9IChkaWZmc3RyW2ldLmxlbmd0aCA9PSAwICYmIGkgIT0gKGRpZmZzdHIubGVuZ3RoIC0gMSkpID8gJyAnIDogZGlmZnN0cltpXVswXTtcblxuICAgICAgaWYgKG9wZXJhdGlvbiA9PT0gJysnIHx8IG9wZXJhdGlvbiA9PT0gJy0nIHx8IG9wZXJhdGlvbiA9PT0gJyAnIHx8IG9wZXJhdGlvbiA9PT0gJ1xcXFwnKSB7XG4gICAgICAgIGh1bmsubGluZXMucHVzaChkaWZmc3RyW2ldKTtcbiAgICAgICAgaHVuay5saW5lZGVsaW1pdGVycy5wdXNoKGRlbGltaXRlcnNbaV0gfHwgJ1xcbicpO1xuXG4gICAgICAgIGlmIChvcGVyYXRpb24gPT09ICcrJykge1xuICAgICAgICAgIGFkZENvdW50Kys7XG4gICAgICAgIH0gZWxzZSBpZiAob3BlcmF0aW9uID09PSAnLScpIHtcbiAgICAgICAgICByZW1vdmVDb3VudCsrO1xuICAgICAgICB9IGVsc2UgaWYgKG9wZXJhdGlvbiA9PT0gJyAnKSB7XG4gICAgICAgICAgYWRkQ291bnQrKztcbiAgICAgICAgICByZW1vdmVDb3VudCsrO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgdGhlIGVtcHR5IGJsb2NrIGNvdW50IGNhc2VcbiAgICBpZiAoIWFkZENvdW50ICYmIGh1bmsubmV3TGluZXMgPT09IDEpIHtcbiAgICAgIGh1bmsubmV3TGluZXMgPSAwO1xuICAgIH1cbiAgICBpZiAoIXJlbW92ZUNvdW50ICYmIGh1bmsub2xkTGluZXMgPT09IDEpIHtcbiAgICAgIGh1bmsub2xkTGluZXMgPSAwO1xuICAgIH1cblxuICAgIC8vIFBlcmZvcm0gb3B0aW9uYWwgc2FuaXR5IGNoZWNraW5nXG4gICAgaWYgKG9wdGlvbnMuc3RyaWN0KSB7XG4gICAgICBpZiAoYWRkQ291bnQgIT09IGh1bmsubmV3TGluZXMpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdBZGRlZCBsaW5lIGNvdW50IGRpZCBub3QgbWF0Y2ggZm9yIGh1bmsgYXQgbGluZSAnICsgKGNodW5rSGVhZGVySW5kZXggKyAxKSk7XG4gICAgICB9XG4gICAgICBpZiAocmVtb3ZlQ291bnQgIT09IGh1bmsub2xkTGluZXMpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZW1vdmVkIGxpbmUgY291bnQgZGlkIG5vdCBtYXRjaCBmb3IgaHVuayBhdCBsaW5lICcgKyAoY2h1bmtIZWFkZXJJbmRleCArIDEpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gaHVuaztcbiAgfVxuXG4gIHdoaWxlIChpIDwgZGlmZnN0ci5sZW5ndGgpIHtcbiAgICBwYXJzZUluZGV4KCk7XG4gIH1cblxuICByZXR1cm4gbGlzdDtcbn1cbiJdfQ==
+
+
+/***/ }),
+
+/***/ 78935:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+/*istanbul ignore start*/
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.arrayEqual = arrayEqual;
+exports.arrayStartsWith = arrayStartsWith;
+
+/*istanbul ignore end*/
+function arrayEqual(a, b) {
+ if (a.length !== b.length) {
+ return false;
+ }
+
+ return arrayStartsWith(a, b);
+}
+
+function arrayStartsWith(array, start) {
+ if (start.length > array.length) {
+ return false;
+ }
+
+ for (var i = 0; i < start.length; i++) {
+ if (start[i] !== array[i]) {
+ return false;
+ }
+ }
+
+ return true;
+}
+//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsL2FycmF5LmpzIl0sIm5hbWVzIjpbImFycmF5RXF1YWwiLCJhIiwiYiIsImxlbmd0aCIsImFycmF5U3RhcnRzV2l0aCIsImFycmF5Iiwic3RhcnQiLCJpIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQU8sU0FBU0EsVUFBVCxDQUFvQkMsQ0FBcEIsRUFBdUJDLENBQXZCLEVBQTBCO0FBQy9CLE1BQUlELENBQUMsQ0FBQ0UsTUFBRixLQUFhRCxDQUFDLENBQUNDLE1BQW5CLEVBQTJCO0FBQ3pCLFdBQU8sS0FBUDtBQUNEOztBQUVELFNBQU9DLGVBQWUsQ0FBQ0gsQ0FBRCxFQUFJQyxDQUFKLENBQXRCO0FBQ0Q7O0FBRU0sU0FBU0UsZUFBVCxDQUF5QkMsS0FBekIsRUFBZ0NDLEtBQWhDLEVBQXVDO0FBQzVDLE1BQUlBLEtBQUssQ0FBQ0gsTUFBTixHQUFlRSxLQUFLLENBQUNGLE1BQXpCLEVBQWlDO0FBQy9CLFdBQU8sS0FBUDtBQUNEOztBQUVELE9BQUssSUFBSUksQ0FBQyxHQUFHLENBQWIsRUFBZ0JBLENBQUMsR0FBR0QsS0FBSyxDQUFDSCxNQUExQixFQUFrQ0ksQ0FBQyxFQUFuQyxFQUF1QztBQUNyQyxRQUFJRCxLQUFLLENBQUNDLENBQUQsQ0FBTCxLQUFhRixLQUFLLENBQUNFLENBQUQsQ0FBdEIsRUFBMkI7QUFDekIsYUFBTyxLQUFQO0FBQ0Q7QUFDRjs7QUFFRCxTQUFPLElBQVA7QUFDRCIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBmdW5jdGlvbiBhcnJheUVxdWFsKGEsIGIpIHtcbiAgaWYgKGEubGVuZ3RoICE9PSBiLmxlbmd0aCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBhcnJheVN0YXJ0c1dpdGgoYSwgYik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcnJheVN0YXJ0c1dpdGgoYXJyYXksIHN0YXJ0KSB7XG4gIGlmIChzdGFydC5sZW5ndGggPiBhcnJheS5sZW5ndGgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBmb3IgKGxldCBpID0gMDsgaSA8IHN0YXJ0Lmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKHN0YXJ0W2ldICE9PSBhcnJheVtpXSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuIl19
+
+
+/***/ }),
+
+/***/ 75512:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+/*istanbul ignore start*/
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports["default"] = _default;
+
+/*istanbul ignore end*/
+// Iterator that traverses in the range of [min, max], stepping
+// by distance from a given start position. I.e. for [0, 4], with
+// start of 2, this will iterate 2, 3, 1, 4, 0.
+function
+/*istanbul ignore start*/
+_default
+/*istanbul ignore end*/
+(start, minLine, maxLine) {
+ var wantForward = true,
+ backwardExhausted = false,
+ forwardExhausted = false,
+ localOffset = 1;
+ return function iterator() {
+ if (wantForward && !forwardExhausted) {
+ if (backwardExhausted) {
+ localOffset++;
+ } else {
+ wantForward = false;
+ } // Check if trying to fit beyond text length, and if not, check it fits
+ // after offset location (or desired location on first iteration)
+
+
+ if (start + localOffset <= maxLine) {
+ return localOffset;
+ }
+
+ forwardExhausted = true;
+ }
+
+ if (!backwardExhausted) {
+ if (!forwardExhausted) {
+ wantForward = true;
+ } // Check if trying to fit before text beginning, and if not, check it fits
+ // before offset location
+
+
+ if (minLine <= start - localOffset) {
+ return -localOffset++;
+ }
+
+ backwardExhausted = true;
+ return iterator();
+ } // We tried to fit hunk before text beginning and beyond text length, then
+ // hunk can't fit on the text. Return undefined
+
+ };
+}
+//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsL2Rpc3RhbmNlLWl0ZXJhdG9yLmpzIl0sIm5hbWVzIjpbInN0YXJ0IiwibWluTGluZSIsIm1heExpbmUiLCJ3YW50Rm9yd2FyZCIsImJhY2t3YXJkRXhoYXVzdGVkIiwiZm9yd2FyZEV4aGF1c3RlZCIsImxvY2FsT2Zmc2V0IiwiaXRlcmF0b3IiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNlO0FBQUE7QUFBQTtBQUFBO0FBQUEsQ0FBU0EsS0FBVCxFQUFnQkMsT0FBaEIsRUFBeUJDLE9BQXpCLEVBQWtDO0FBQy9DLE1BQUlDLFdBQVcsR0FBRyxJQUFsQjtBQUFBLE1BQ0lDLGlCQUFpQixHQUFHLEtBRHhCO0FBQUEsTUFFSUMsZ0JBQWdCLEdBQUcsS0FGdkI7QUFBQSxNQUdJQyxXQUFXLEdBQUcsQ0FIbEI7QUFLQSxTQUFPLFNBQVNDLFFBQVQsR0FBb0I7QUFDekIsUUFBSUosV0FBVyxJQUFJLENBQUNFLGdCQUFwQixFQUFzQztBQUNwQyxVQUFJRCxpQkFBSixFQUF1QjtBQUNyQkUsUUFBQUEsV0FBVztBQUNaLE9BRkQsTUFFTztBQUNMSCxRQUFBQSxXQUFXLEdBQUcsS0FBZDtBQUNELE9BTG1DLENBT3BDO0FBQ0E7OztBQUNBLFVBQUlILEtBQUssR0FBR00sV0FBUixJQUF1QkosT0FBM0IsRUFBb0M7QUFDbEMsZUFBT0ksV0FBUDtBQUNEOztBQUVERCxNQUFBQSxnQkFBZ0IsR0FBRyxJQUFuQjtBQUNEOztBQUVELFFBQUksQ0FBQ0QsaUJBQUwsRUFBd0I7QUFDdEIsVUFBSSxDQUFDQyxnQkFBTCxFQUF1QjtBQUNyQkYsUUFBQUEsV0FBVyxHQUFHLElBQWQ7QUFDRCxPQUhxQixDQUt0QjtBQUNBOzs7QUFDQSxVQUFJRixPQUFPLElBQUlELEtBQUssR0FBR00sV0FBdkIsRUFBb0M7QUFDbEMsZUFBTyxDQUFDQSxXQUFXLEVBQW5CO0FBQ0Q7O0FBRURGLE1BQUFBLGlCQUFpQixHQUFHLElBQXBCO0FBQ0EsYUFBT0csUUFBUSxFQUFmO0FBQ0QsS0E5QndCLENBZ0N6QjtBQUNBOztBQUNELEdBbENEO0FBbUNEIiwic291cmNlc0NvbnRlbnQiOlsiLy8gSXRlcmF0b3IgdGhhdCB0cmF2ZXJzZXMgaW4gdGhlIHJhbmdlIG9mIFttaW4sIG1heF0sIHN0ZXBwaW5nXG4vLyBieSBkaXN0YW5jZSBmcm9tIGEgZ2l2ZW4gc3RhcnQgcG9zaXRpb24uIEkuZS4gZm9yIFswLCA0XSwgd2l0aFxuLy8gc3RhcnQgb2YgMiwgdGhpcyB3aWxsIGl0ZXJhdGUgMiwgMywgMSwgNCwgMC5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHN0YXJ0LCBtaW5MaW5lLCBtYXhMaW5lKSB7XG4gIGxldCB3YW50Rm9yd2FyZCA9IHRydWUsXG4gICAgICBiYWNrd2FyZEV4aGF1c3RlZCA9IGZhbHNlLFxuICAgICAgZm9yd2FyZEV4aGF1c3RlZCA9IGZhbHNlLFxuICAgICAgbG9jYWxPZmZzZXQgPSAxO1xuXG4gIHJldHVybiBmdW5jdGlvbiBpdGVyYXRvcigpIHtcbiAgICBpZiAod2FudEZvcndhcmQgJiYgIWZvcndhcmRFeGhhdXN0ZWQpIHtcbiAgICAgIGlmIChiYWNrd2FyZEV4aGF1c3RlZCkge1xuICAgICAgICBsb2NhbE9mZnNldCsrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgd2FudEZvcndhcmQgPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgaWYgdHJ5aW5nIHRvIGZpdCBiZXlvbmQgdGV4dCBsZW5ndGgsIGFuZCBpZiBub3QsIGNoZWNrIGl0IGZpdHNcbiAgICAgIC8vIGFmdGVyIG9mZnNldCBsb2NhdGlvbiAob3IgZGVzaXJlZCBsb2NhdGlvbiBvbiBmaXJzdCBpdGVyYXRpb24pXG4gICAgICBpZiAoc3RhcnQgKyBsb2NhbE9mZnNldCA8PSBtYXhMaW5lKSB7XG4gICAgICAgIHJldHVybiBsb2NhbE9mZnNldDtcbiAgICAgIH1cblxuICAgICAgZm9yd2FyZEV4aGF1c3RlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKCFiYWNrd2FyZEV4aGF1c3RlZCkge1xuICAgICAgaWYgKCFmb3J3YXJkRXhoYXVzdGVkKSB7XG4gICAgICAgIHdhbnRGb3J3YXJkID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgaWYgdHJ5aW5nIHRvIGZpdCBiZWZvcmUgdGV4dCBiZWdpbm5pbmcsIGFuZCBpZiBub3QsIGNoZWNrIGl0IGZpdHNcbiAgICAgIC8vIGJlZm9yZSBvZmZzZXQgbG9jYXRpb25cbiAgICAgIGlmIChtaW5MaW5lIDw9IHN0YXJ0IC0gbG9jYWxPZmZzZXQpIHtcbiAgICAgICAgcmV0dXJuIC1sb2NhbE9mZnNldCsrO1xuICAgICAgfVxuXG4gICAgICBiYWNrd2FyZEV4aGF1c3RlZCA9IHRydWU7XG4gICAgICByZXR1cm4gaXRlcmF0b3IoKTtcbiAgICB9XG5cbiAgICAvLyBXZSB0cmllZCB0byBmaXQgaHVuayBiZWZvcmUgdGV4dCBiZWdpbm5pbmcgYW5kIGJleW9uZCB0ZXh0IGxlbmd0aCwgdGhlblxuICAgIC8vIGh1bmsgY2FuJ3QgZml0IG9uIHRoZSB0ZXh0LiBSZXR1cm4gdW5kZWZpbmVkXG4gIH07XG59XG4iXX0=
+
+
+/***/ }),
+
+/***/ 45704:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+/*istanbul ignore start*/
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.generateOptions = generateOptions;
+
+/*istanbul ignore end*/
+function generateOptions(options, defaults) {
+ if (typeof options === 'function') {
+ defaults.callback = options;
+ } else if (options) {
+ for (var name in options) {
+ /* istanbul ignore else */
+ if (options.hasOwnProperty(name)) {
+ defaults[name] = options[name];
+ }
+ }
+ }
+
+ return defaults;
+}
+//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsL3BhcmFtcy5qcyJdLCJuYW1lcyI6WyJnZW5lcmF0ZU9wdGlvbnMiLCJvcHRpb25zIiwiZGVmYXVsdHMiLCJjYWxsYmFjayIsIm5hbWUiLCJoYXNPd25Qcm9wZXJ0eSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQU8sU0FBU0EsZUFBVCxDQUF5QkMsT0FBekIsRUFBa0NDLFFBQWxDLEVBQTRDO0FBQ2pELE1BQUksT0FBT0QsT0FBUCxLQUFtQixVQUF2QixFQUFtQztBQUNqQ0MsSUFBQUEsUUFBUSxDQUFDQyxRQUFULEdBQW9CRixPQUFwQjtBQUNELEdBRkQsTUFFTyxJQUFJQSxPQUFKLEVBQWE7QUFDbEIsU0FBSyxJQUFJRyxJQUFULElBQWlCSCxPQUFqQixFQUEwQjtBQUN4QjtBQUNBLFVBQUlBLE9BQU8sQ0FBQ0ksY0FBUixDQUF1QkQsSUFBdkIsQ0FBSixFQUFrQztBQUNoQ0YsUUFBQUEsUUFBUSxDQUFDRSxJQUFELENBQVIsR0FBaUJILE9BQU8sQ0FBQ0csSUFBRCxDQUF4QjtBQUNEO0FBQ0Y7QUFDRjs7QUFDRCxTQUFPRixRQUFQO0FBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVPcHRpb25zKG9wdGlvbnMsIGRlZmF1bHRzKSB7XG4gIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGRlZmF1bHRzLmNhbGxiYWNrID0gb3B0aW9ucztcbiAgfSBlbHNlIGlmIChvcHRpb25zKSB7XG4gICAgZm9yIChsZXQgbmFtZSBpbiBvcHRpb25zKSB7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgaWYgKG9wdGlvbnMuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgICAgZGVmYXVsdHNbbmFtZV0gPSBvcHRpb25zW25hbWVdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gZGVmYXVsdHM7XG59XG4iXX0=
+
+
+/***/ }),
+
+/***/ 18212:
+/***/ ((module) => {
+
+"use strict";
+
+
+module.exports = function () {
+ // https://mths.be/emoji
+ return /\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73)\uDB40\uDC7F|\uD83D\uDC68(?:\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68\uD83C\uDFFB|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|[\u2695\u2696\u2708]\uFE0F|\uD83D[\uDC66\uDC67]|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708])\uFE0F|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C[\uDFFB-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)\uD83C\uDFFB|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB\uDFFC])|\uD83D\uDC69(?:\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB-\uDFFD])|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|(?:(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)\uFE0F|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\u200D[\u2640\u2642])|\uD83C\uDFF4\u200D\u2620)\uFE0F|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF4\uD83C\uDDF2|\uD83C\uDDF6\uD83C\uDDE6|[#\*0-9]\uFE0F\u20E3|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83D\uDC69(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270A-\u270D]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC70\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDCAA\uDD74\uDD7A\uDD90\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD36\uDDB5\uDDB6\uDDBB\uDDD2-\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF93\uDFA0-\uDFCA\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF4\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC3E\uDC40\uDC42-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDD7A\uDD95\uDD96\uDDA4\uDDFB-\uDE4F\uDE80-\uDEC5\uDECC\uDED0-\uDED2\uDED5\uDEEB\uDEEC\uDEF4-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDED5\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])\uFE0F|(?:[\u261D\u26F9\u270A-\u270D]|\uD83C[\uDF85\uDFC2-\uDFC4\uDFC7\uDFCA-\uDFCC]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66-\uDC78\uDC7C\uDC81-\uDC83\uDC85-\uDC87\uDC8F\uDC91\uDCAA\uDD74\uDD75\uDD7A\uDD90\uDD95\uDD96\uDE45-\uDE47\uDE4B-\uDE4F\uDEA3\uDEB4-\uDEB6\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1F\uDD26\uDD30-\uDD39\uDD3C-\uDD3E\uDDB5\uDDB6\uDDB8\uDDB9\uDDBB\uDDCD-\uDDCF\uDDD1-\uDDDD])/g;
+};
+
+
+/***/ }),
+
+/***/ 28206:
+/***/ ((module) => {
+
+"use strict";
+
+
+// do not edit .js files directly - edit src/index.jst
+
+
+
+module.exports = function equal(a, b) {
+ if (a === b) return true;
+
+ if (a && b && typeof a == 'object' && typeof b == 'object') {
+ if (a.constructor !== b.constructor) return false;
+
+ var length, i, keys;
+ if (Array.isArray(a)) {
+ length = a.length;
+ if (length != b.length) return false;
+ for (i = length; i-- !== 0;)
+ if (!equal(a[i], b[i])) return false;
+ return true;
+ }
+
+
+
+ if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;
+ if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf();
+ if (a.toString !== Object.prototype.toString) return a.toString() === b.toString();
+
+ keys = Object.keys(a);
+ length = keys.length;
+ if (length !== Object.keys(b).length) return false;
+
+ for (i = length; i-- !== 0;)
+ if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;
+
+ for (i = length; i-- !== 0;) {
+ var key = keys[i];
+
+ if (!equal(a[key], b[key])) return false;
+ }
+
+ return true;
+ }
+
+ // true if both NaN, false otherwise
+ return a!==a && b!==b;
+};
+
+
+/***/ }),
+
+/***/ 12603:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+"use strict";
+
+
+const validator = __nccwpck_require__(61739);
+const XMLParser = __nccwpck_require__(42380);
+const XMLBuilder = __nccwpck_require__(80660);
+
+module.exports = {
+ XMLParser: XMLParser,
+ XMLValidator: validator,
+ XMLBuilder: XMLBuilder
+}
+
+/***/ }),
+
+/***/ 38280:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+
+const nameStartChar = ':A-Za-z_\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD';
+const nameChar = nameStartChar + '\\-.\\d\\u00B7\\u0300-\\u036F\\u203F-\\u2040';
+const nameRegexp = '[' + nameStartChar + '][' + nameChar + ']*'
+const regexName = new RegExp('^' + nameRegexp + '$');
+
+const getAllMatches = function(string, regex) {
+ const matches = [];
+ let match = regex.exec(string);
+ while (match) {
+ const allmatches = [];
+ allmatches.startIndex = regex.lastIndex - match[0].length;
+ const len = match.length;
+ for (let index = 0; index < len; index++) {
+ allmatches.push(match[index]);
+ }
+ matches.push(allmatches);
+ match = regex.exec(string);
+ }
+ return matches;
+};
+
+const isName = function(string) {
+ const match = regexName.exec(string);
+ return !(match === null || typeof match === 'undefined');
+};
+
+exports.isExist = function(v) {
+ return typeof v !== 'undefined';
+};
+
+exports.isEmptyObject = function(obj) {
+ return Object.keys(obj).length === 0;
+};
+
+/**
+ * Copy all the properties of a into b.
+ * @param {*} target
+ * @param {*} a
+ */
+exports.merge = function(target, a, arrayMode) {
+ if (a) {
+ const keys = Object.keys(a); // will return an array of own properties
+ const len = keys.length; //don't make it inline
+ for (let i = 0; i < len; i++) {
+ if (arrayMode === 'strict') {
+ target[keys[i]] = [ a[keys[i]] ];
+ } else {
+ target[keys[i]] = a[keys[i]];
+ }
+ }
+ }
+};
+/* exports.merge =function (b,a){
+ return Object.assign(b,a);
+} */
+
+exports.getValue = function(v) {
+ if (exports.isExist(v)) {
+ return v;
+ } else {
+ return '';
+ }
+};
+
+// const fakeCall = function(a) {return a;};
+// const fakeCallNoReturn = function() {};
+
+exports.isName = isName;
+exports.getAllMatches = getAllMatches;
+exports.nameRegexp = nameRegexp;
+
+
+/***/ }),
+
+/***/ 61739:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+
+const util = __nccwpck_require__(38280);
+
+const defaultOptions = {
+ allowBooleanAttributes: false, //A tag can have attributes without any value
+ unpairedTags: []
+};
+
+//const tagsPattern = new RegExp("<\\/?([\\w:\\-_\.]+)\\s*\/?>","g");
+exports.validate = function (xmlData, options) {
+ options = Object.assign({}, defaultOptions, options);
+
+ //xmlData = xmlData.replace(/(\r\n|\n|\r)/gm,"");//make it single line
+ //xmlData = xmlData.replace(/(^\s*<\?xml.*?\?>)/g,"");//Remove XML starting tag
+ //xmlData = xmlData.replace(/()/g,"");//Remove DOCTYPE
+ const tags = [];
+ let tagFound = false;
+
+ //indicates that the root tag has been closed (aka. depth 0 has been reached)
+ let reachedRoot = false;
+
+ if (xmlData[0] === '\ufeff') {
+ // check for byte order mark (BOM)
+ xmlData = xmlData.substr(1);
+ }
+
+ for (let i = 0; i < xmlData.length; i++) {
+
+ if (xmlData[i] === '<' && xmlData[i+1] === '?') {
+ i+=2;
+ i = readPI(xmlData,i);
+ if (i.err) return i;
+ }else if (xmlData[i] === '<') {
+ //starting of tag
+ //read until you reach to '>' avoiding any '>' in attribute value
+ let tagStartPos = i;
+ i++;
+
+ if (xmlData[i] === '!') {
+ i = readCommentAndCDATA(xmlData, i);
+ continue;
+ } else {
+ let closingTag = false;
+ if (xmlData[i] === '/') {
+ //closing tag
+ closingTag = true;
+ i++;
+ }
+ //read tagname
+ let tagName = '';
+ for (; i < xmlData.length &&
+ xmlData[i] !== '>' &&
+ xmlData[i] !== ' ' &&
+ xmlData[i] !== '\t' &&
+ xmlData[i] !== '\n' &&
+ xmlData[i] !== '\r'; i++
+ ) {
+ tagName += xmlData[i];
+ }
+ tagName = tagName.trim();
+ //console.log(tagName);
+
+ if (tagName[tagName.length - 1] === '/') {
+ //self closing tag without attributes
+ tagName = tagName.substring(0, tagName.length - 1);
+ //continue;
+ i--;
+ }
+ if (!validateTagName(tagName)) {
+ let msg;
+ if (tagName.trim().length === 0) {
+ msg = "Invalid space after '<'.";
+ } else {
+ msg = "Tag '"+tagName+"' is an invalid name.";
+ }
+ return getErrorObject('InvalidTag', msg, getLineNumberForPosition(xmlData, i));
+ }
+
+ const result = readAttributeStr(xmlData, i);
+ if (result === false) {
+ return getErrorObject('InvalidAttr', "Attributes for '"+tagName+"' have open quote.", getLineNumberForPosition(xmlData, i));
+ }
+ let attrStr = result.value;
+ i = result.index;
+
+ if (attrStr[attrStr.length - 1] === '/') {
+ //self closing tag
+ const attrStrStart = i - attrStr.length;
+ attrStr = attrStr.substring(0, attrStr.length - 1);
+ const isValid = validateAttributeString(attrStr, options);
+ if (isValid === true) {
+ tagFound = true;
+ //continue; //text may presents after self closing tag
+ } else {
+ //the result from the nested function returns the position of the error within the attribute
+ //in order to get the 'true' error line, we need to calculate the position where the attribute begins (i - attrStr.length) and then add the position within the attribute
+ //this gives us the absolute index in the entire xml, which we can use to find the line at last
+ return getErrorObject(isValid.err.code, isValid.err.msg, getLineNumberForPosition(xmlData, attrStrStart + isValid.err.line));
+ }
+ } else if (closingTag) {
+ if (!result.tagClosed) {
+ return getErrorObject('InvalidTag', "Closing tag '"+tagName+"' doesn't have proper closing.", getLineNumberForPosition(xmlData, i));
+ } else if (attrStr.trim().length > 0) {
+ return getErrorObject('InvalidTag', "Closing tag '"+tagName+"' can't have attributes or invalid starting.", getLineNumberForPosition(xmlData, tagStartPos));
+ } else {
+ const otg = tags.pop();
+ if (tagName !== otg.tagName) {
+ let openPos = getLineNumberForPosition(xmlData, otg.tagStartPos);
+ return getErrorObject('InvalidTag',
+ "Expected closing tag '"+otg.tagName+"' (opened in line "+openPos.line+", col "+openPos.col+") instead of closing tag '"+tagName+"'.",
+ getLineNumberForPosition(xmlData, tagStartPos));
+ }
+
+ //when there are no more tags, we reached the root level.
+ if (tags.length == 0) {
+ reachedRoot = true;
+ }
+ }
+ } else {
+ const isValid = validateAttributeString(attrStr, options);
+ if (isValid !== true) {
+ //the result from the nested function returns the position of the error within the attribute
+ //in order to get the 'true' error line, we need to calculate the position where the attribute begins (i - attrStr.length) and then add the position within the attribute
+ //this gives us the absolute index in the entire xml, which we can use to find the line at last
+ return getErrorObject(isValid.err.code, isValid.err.msg, getLineNumberForPosition(xmlData, i - attrStr.length + isValid.err.line));
+ }
+
+ //if the root level has been reached before ...
+ if (reachedRoot === true) {
+ return getErrorObject('InvalidXml', 'Multiple possible root nodes found.', getLineNumberForPosition(xmlData, i));
+ } else if(options.unpairedTags.indexOf(tagName) !== -1){
+ //don't push into stack
+ } else {
+ tags.push({tagName, tagStartPos});
+ }
+ tagFound = true;
+ }
+
+ //skip tag text value
+ //It may include comments and CDATA value
+ for (i++; i < xmlData.length; i++) {
+ if (xmlData[i] === '<') {
+ if (xmlData[i + 1] === '!') {
+ //comment or CADATA
+ i++;
+ i = readCommentAndCDATA(xmlData, i);
+ continue;
+ } else if (xmlData[i+1] === '?') {
+ i = readPI(xmlData, ++i);
+ if (i.err) return i;
+ } else{
+ break;
+ }
+ } else if (xmlData[i] === '&') {
+ const afterAmp = validateAmpersand(xmlData, i);
+ if (afterAmp == -1)
+ return getErrorObject('InvalidChar', "char '&' is not expected.", getLineNumberForPosition(xmlData, i));
+ i = afterAmp;
+ }else{
+ if (reachedRoot === true && !isWhiteSpace(xmlData[i])) {
+ return getErrorObject('InvalidXml', "Extra text at the end", getLineNumberForPosition(xmlData, i));
+ }
+ }
+ } //end of reading tag text value
+ if (xmlData[i] === '<') {
+ i--;
+ }
+ }
+ } else {
+ if ( isWhiteSpace(xmlData[i])) {
+ continue;
+ }
+ return getErrorObject('InvalidChar', "char '"+xmlData[i]+"' is not expected.", getLineNumberForPosition(xmlData, i));
+ }
+ }
+
+ if (!tagFound) {
+ return getErrorObject('InvalidXml', 'Start tag expected.', 1);
+ }else if (tags.length == 1) {
+ return getErrorObject('InvalidTag', "Unclosed tag '"+tags[0].tagName+"'.", getLineNumberForPosition(xmlData, tags[0].tagStartPos));
+ }else if (tags.length > 0) {
+ return getErrorObject('InvalidXml', "Invalid '"+
+ JSON.stringify(tags.map(t => t.tagName), null, 4).replace(/\r?\n/g, '')+
+ "' found.", {line: 1, col: 1});
+ }
+
+ return true;
+};
+
+function isWhiteSpace(char){
+ return char === ' ' || char === '\t' || char === '\n' || char === '\r';
+}
+/**
+ * Read Processing insstructions and skip
+ * @param {*} xmlData
+ * @param {*} i
+ */
+function readPI(xmlData, i) {
+ const start = i;
+ for (; i < xmlData.length; i++) {
+ if (xmlData[i] == '?' || xmlData[i] == ' ') {
+ //tagname
+ const tagname = xmlData.substr(start, i - start);
+ if (i > 5 && tagname === 'xml') {
+ return getErrorObject('InvalidXml', 'XML declaration allowed only at the start of the document.', getLineNumberForPosition(xmlData, i));
+ } else if (xmlData[i] == '?' && xmlData[i + 1] == '>') {
+ //check if valid attribut string
+ i++;
+ break;
+ } else {
+ continue;
+ }
+ }
+ }
+ return i;
+}
+
+function readCommentAndCDATA(xmlData, i) {
+ if (xmlData.length > i + 5 && xmlData[i + 1] === '-' && xmlData[i + 2] === '-') {
+ //comment
+ for (i += 3; i < xmlData.length; i++) {
+ if (xmlData[i] === '-' && xmlData[i + 1] === '-' && xmlData[i + 2] === '>') {
+ i += 2;
+ break;
+ }
+ }
+ } else if (
+ xmlData.length > i + 8 &&
+ xmlData[i + 1] === 'D' &&
+ xmlData[i + 2] === 'O' &&
+ xmlData[i + 3] === 'C' &&
+ xmlData[i + 4] === 'T' &&
+ xmlData[i + 5] === 'Y' &&
+ xmlData[i + 6] === 'P' &&
+ xmlData[i + 7] === 'E'
+ ) {
+ let angleBracketsCount = 1;
+ for (i += 8; i < xmlData.length; i++) {
+ if (xmlData[i] === '<') {
+ angleBracketsCount++;
+ } else if (xmlData[i] === '>') {
+ angleBracketsCount--;
+ if (angleBracketsCount === 0) {
+ break;
+ }
+ }
+ }
+ } else if (
+ xmlData.length > i + 9 &&
+ xmlData[i + 1] === '[' &&
+ xmlData[i + 2] === 'C' &&
+ xmlData[i + 3] === 'D' &&
+ xmlData[i + 4] === 'A' &&
+ xmlData[i + 5] === 'T' &&
+ xmlData[i + 6] === 'A' &&
+ xmlData[i + 7] === '['
+ ) {
+ for (i += 8; i < xmlData.length; i++) {
+ if (xmlData[i] === ']' && xmlData[i + 1] === ']' && xmlData[i + 2] === '>') {
+ i += 2;
+ break;
+ }
+ }
+ }
+
+ return i;
+}
+
+const doubleQuote = '"';
+const singleQuote = "'";
+
+/**
+ * Keep reading xmlData until '<' is found outside the attribute value.
+ * @param {string} xmlData
+ * @param {number} i
+ */
+function readAttributeStr(xmlData, i) {
+ let attrStr = '';
+ let startChar = '';
+ let tagClosed = false;
+ for (; i < xmlData.length; i++) {
+ if (xmlData[i] === doubleQuote || xmlData[i] === singleQuote) {
+ if (startChar === '') {
+ startChar = xmlData[i];
+ } else if (startChar !== xmlData[i]) {
+ //if vaue is enclosed with double quote then single quotes are allowed inside the value and vice versa
+ } else {
+ startChar = '';
+ }
+ } else if (xmlData[i] === '>') {
+ if (startChar === '') {
+ tagClosed = true;
+ break;
+ }
+ }
+ attrStr += xmlData[i];
+ }
+ if (startChar !== '') {
+ return false;
+ }
+
+ return {
+ value: attrStr,
+ index: i,
+ tagClosed: tagClosed
+ };
+}
+
+/**
+ * Select all the attributes whether valid or invalid.
+ */
+const validAttrStrRegxp = new RegExp('(\\s*)([^\\s=]+)(\\s*=)?(\\s*([\'"])(([\\s\\S])*?)\\5)?', 'g');
+
+//attr, ="sd", a="amit's", a="sd"b="saf", ab cd=""
+
+function validateAttributeString(attrStr, options) {
+ //console.log("start:"+attrStr+":end");
+
+ //if(attrStr.trim().length === 0) return true; //empty string
+
+ const matches = util.getAllMatches(attrStr, validAttrStrRegxp);
+ const attrNames = {};
+
+ for (let i = 0; i < matches.length; i++) {
+ if (matches[i][1].length === 0) {
+ //nospace before attribute name: a="sd"b="saf"
+ return getErrorObject('InvalidAttr', "Attribute '"+matches[i][2]+"' has no space in starting.", getPositionFromMatch(matches[i]))
+ } else if (matches[i][3] !== undefined && matches[i][4] === undefined) {
+ return getErrorObject('InvalidAttr', "Attribute '"+matches[i][2]+"' is without value.", getPositionFromMatch(matches[i]));
+ } else if (matches[i][3] === undefined && !options.allowBooleanAttributes) {
+ //independent attribute: ab
+ return getErrorObject('InvalidAttr', "boolean attribute '"+matches[i][2]+"' is not allowed.", getPositionFromMatch(matches[i]));
+ }
+ /* else if(matches[i][6] === undefined){//attribute without value: ab=
+ return { err: { code:"InvalidAttr",msg:"attribute " + matches[i][2] + " has no value assigned."}};
+ } */
+ const attrName = matches[i][2];
+ if (!validateAttrName(attrName)) {
+ return getErrorObject('InvalidAttr', "Attribute '"+attrName+"' is an invalid name.", getPositionFromMatch(matches[i]));
+ }
+ if (!attrNames.hasOwnProperty(attrName)) {
+ //check for duplicate attribute.
+ attrNames[attrName] = 1;
+ } else {
+ return getErrorObject('InvalidAttr', "Attribute '"+attrName+"' is repeated.", getPositionFromMatch(matches[i]));
+ }
+ }
+
+ return true;
+}
+
+function validateNumberAmpersand(xmlData, i) {
+ let re = /\d/;
+ if (xmlData[i] === 'x') {
+ i++;
+ re = /[\da-fA-F]/;
+ }
+ for (; i < xmlData.length; i++) {
+ if (xmlData[i] === ';')
+ return i;
+ if (!xmlData[i].match(re))
+ break;
+ }
+ return -1;
+}
+
+function validateAmpersand(xmlData, i) {
+ // https://www.w3.org/TR/xml/#dt-charref
+ i++;
+ if (xmlData[i] === ';')
+ return -1;
+ if (xmlData[i] === '#') {
+ i++;
+ return validateNumberAmpersand(xmlData, i);
+ }
+ let count = 0;
+ for (; i < xmlData.length; i++, count++) {
+ if (xmlData[i].match(/\w/) && count < 20)
+ continue;
+ if (xmlData[i] === ';')
+ break;
+ return -1;
+ }
+ return i;
+}
+
+function getErrorObject(code, message, lineNumber) {
+ return {
+ err: {
+ code: code,
+ msg: message,
+ line: lineNumber.line || lineNumber,
+ col: lineNumber.col,
+ },
+ };
+}
+
+function validateAttrName(attrName) {
+ return util.isName(attrName);
+}
+
+// const startsWithXML = /^xml/i;
+
+function validateTagName(tagname) {
+ return util.isName(tagname) /* && !tagname.match(startsWithXML) */;
+}
+
+//this function returns the line number for the character at the given index
+function getLineNumberForPosition(xmlData, index) {
+ const lines = xmlData.substring(0, index).split(/\r?\n/);
+ return {
+ line: lines.length,
+
+ // column number is last line's length + 1, because column numbering starts at 1:
+ col: lines[lines.length - 1].length + 1
+ };
+}
+
+//this function returns the position of the first character of match within attrStr
+function getPositionFromMatch(match) {
+ return match.startIndex + match[1].length;
+}
+
+
+/***/ }),
+
+/***/ 80660:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+"use strict";
+
+//parse Empty Node as self closing node
+const buildFromOrderedJs = __nccwpck_require__(72462);
+
+const defaultOptions = {
+ attributeNamePrefix: '@_',
+ attributesGroupName: false,
+ textNodeName: '#text',
+ ignoreAttributes: true,
+ cdataPropName: false,
+ format: false,
+ indentBy: ' ',
+ suppressEmptyNode: false,
+ suppressUnpairedNode: true,
+ suppressBooleanAttributes: true,
+ tagValueProcessor: function(key, a) {
+ return a;
+ },
+ attributeValueProcessor: function(attrName, a) {
+ return a;
+ },
+ preserveOrder: false,
+ commentPropName: false,
+ unpairedTags: [],
+ entities: [
+ { regex: new RegExp("&", "g"), val: "&" },//it must be on top
+ { regex: new RegExp(">", "g"), val: ">" },
+ { regex: new RegExp("<", "g"), val: "<" },
+ { regex: new RegExp("\'", "g"), val: "'" },
+ { regex: new RegExp("\"", "g"), val: """ }
+ ],
+ processEntities: true,
+ stopNodes: [],
+ // transformTagName: false,
+ // transformAttributeName: false,
+ oneListGroup: false
+};
+
+function Builder(options) {
+ this.options = Object.assign({}, defaultOptions, options);
+ if (this.options.ignoreAttributes || this.options.attributesGroupName) {
+ this.isAttribute = function(/*a*/) {
+ return false;
+ };
+ } else {
+ this.attrPrefixLen = this.options.attributeNamePrefix.length;
+ this.isAttribute = isAttribute;
+ }
+
+ this.processTextOrObjNode = processTextOrObjNode
+
+ if (this.options.format) {
+ this.indentate = indentate;
+ this.tagEndChar = '>\n';
+ this.newLine = '\n';
+ } else {
+ this.indentate = function() {
+ return '';
+ };
+ this.tagEndChar = '>';
+ this.newLine = '';
+ }
+}
+
+Builder.prototype.build = function(jObj) {
+ if(this.options.preserveOrder){
+ return buildFromOrderedJs(jObj, this.options);
+ }else {
+ if(Array.isArray(jObj) && this.options.arrayNodeName && this.options.arrayNodeName.length > 1){
+ jObj = {
+ [this.options.arrayNodeName] : jObj
+ }
+ }
+ return this.j2x(jObj, 0).val;
+ }
+};
+
+Builder.prototype.j2x = function(jObj, level) {
+ let attrStr = '';
+ let val = '';
+ for (let key in jObj) {
+ if (typeof jObj[key] === 'undefined') {
+ // supress undefined node
+ } else if (jObj[key] === null) {
+ if(key[0] === "?") val += this.indentate(level) + '<' + key + '?' + this.tagEndChar;
+ else val += this.indentate(level) + '<' + key + '/' + this.tagEndChar;
+ // val += this.indentate(level) + '<' + key + '/' + this.tagEndChar;
+ } else if (jObj[key] instanceof Date) {
+ val += this.buildTextValNode(jObj[key], key, '', level);
+ } else if (typeof jObj[key] !== 'object') {
+ //premitive type
+ const attr = this.isAttribute(key);
+ if (attr) {
+ attrStr += this.buildAttrPairStr(attr, '' + jObj[key]);
+ }else {
+ //tag value
+ if (key === this.options.textNodeName) {
+ let newval = this.options.tagValueProcessor(key, '' + jObj[key]);
+ val += this.replaceEntitiesValue(newval);
+ } else {
+ val += this.buildTextValNode(jObj[key], key, '', level);
+ }
+ }
+ } else if (Array.isArray(jObj[key])) {
+ //repeated nodes
+ const arrLen = jObj[key].length;
+ let listTagVal = "";
+ for (let j = 0; j < arrLen; j++) {
+ const item = jObj[key][j];
+ if (typeof item === 'undefined') {
+ // supress undefined node
+ } else if (item === null) {
+ if(key[0] === "?") val += this.indentate(level) + '<' + key + '?' + this.tagEndChar;
+ else val += this.indentate(level) + '<' + key + '/' + this.tagEndChar;
+ // val += this.indentate(level) + '<' + key + '/' + this.tagEndChar;
+ } else if (typeof item === 'object') {
+ if(this.options.oneListGroup ){
+ listTagVal += this.j2x(item, level + 1).val;
+ }else{
+ listTagVal += this.processTextOrObjNode(item, key, level)
+ }
+ } else {
+ listTagVal += this.buildTextValNode(item, key, '', level);
+ }
+ }
+ if(this.options.oneListGroup){
+ listTagVal = this.buildObjectNode(listTagVal, key, '', level);
+ }
+ val += listTagVal;
+ } else {
+ //nested node
+ if (this.options.attributesGroupName && key === this.options.attributesGroupName) {
+ const Ks = Object.keys(jObj[key]);
+ const L = Ks.length;
+ for (let j = 0; j < L; j++) {
+ attrStr += this.buildAttrPairStr(Ks[j], '' + jObj[key][Ks[j]]);
+ }
+ } else {
+ val += this.processTextOrObjNode(jObj[key], key, level)
+ }
+ }
+ }
+ return {attrStr: attrStr, val: val};
+};
+
+Builder.prototype.buildAttrPairStr = function(attrName, val){
+ val = this.options.attributeValueProcessor(attrName, '' + val);
+ val = this.replaceEntitiesValue(val);
+ if (this.options.suppressBooleanAttributes && val === "true") {
+ return ' ' + attrName;
+ } else return ' ' + attrName + '="' + val + '"';
+}
+
+function processTextOrObjNode (object, key, level) {
+ const result = this.j2x(object, level + 1);
+ if (object[this.options.textNodeName] !== undefined && Object.keys(object).length === 1) {
+ return this.buildTextValNode(object[this.options.textNodeName], key, result.attrStr, level);
+ } else {
+ return this.buildObjectNode(result.val, key, result.attrStr, level);
+ }
+}
+
+Builder.prototype.buildObjectNode = function(val, key, attrStr, level) {
+ if(val === ""){
+ if(key[0] === "?") return this.indentate(level) + '<' + key + attrStr+ '?' + this.tagEndChar;
+ else {
+ return this.indentate(level) + '<' + key + attrStr + this.closeTag(key) + this.tagEndChar;
+ }
+ }else{
+
+ let tagEndExp = '' + key + this.tagEndChar;
+ let piClosingChar = "";
+
+ if(key[0] === "?") {
+ piClosingChar = "?";
+ tagEndExp = "";
+ }
+
+ if (attrStr && val.indexOf('<') === -1) {
+ return ( this.indentate(level) + '<' + key + attrStr + piClosingChar + '>' + val + tagEndExp );
+ } else if (this.options.commentPropName !== false && key === this.options.commentPropName && piClosingChar.length === 0) {
+ return this.indentate(level) + `` + this.newLine;
+ }else {
+ return (
+ this.indentate(level) + '<' + key + attrStr + piClosingChar + this.tagEndChar +
+ val +
+ this.indentate(level) + tagEndExp );
+ }
+ }
+}
+
+Builder.prototype.closeTag = function(key){
+ let closeTag = "";
+ if(this.options.unpairedTags.indexOf(key) !== -1){ //unpaired
+ if(!this.options.suppressUnpairedNode) closeTag = "/"
+ }else if(this.options.suppressEmptyNode){ //empty
+ closeTag = "/";
+ }else{
+ closeTag = `>${key}`
+ }
+ return closeTag;
+}
+
+function buildEmptyObjNode(val, key, attrStr, level) {
+ if (val !== '') {
+ return this.buildObjectNode(val, key, attrStr, level);
+ } else {
+ if(key[0] === "?") return this.indentate(level) + '<' + key + attrStr+ '?' + this.tagEndChar;
+ else {
+ return this.indentate(level) + '<' + key + attrStr + '/' + this.tagEndChar;
+ // return this.buildTagStr(level,key, attrStr);
+ }
+ }
+}
+
+Builder.prototype.buildTextValNode = function(val, key, attrStr, level) {
+ if (this.options.cdataPropName !== false && key === this.options.cdataPropName) {
+ return this.indentate(level) + `` + this.newLine;
+ }else if (this.options.commentPropName !== false && key === this.options.commentPropName) {
+ return this.indentate(level) + `` + this.newLine;
+ }else if(key[0] === "?") {//PI tag
+ return this.indentate(level) + '<' + key + attrStr+ '?' + this.tagEndChar;
+ }else{
+ let textValue = this.options.tagValueProcessor(key, val);
+ textValue = this.replaceEntitiesValue(textValue);
+
+ if( textValue === ''){
+ return this.indentate(level) + '<' + key + attrStr + this.closeTag(key) + this.tagEndChar;
+ }else{
+ return this.indentate(level) + '<' + key + attrStr + '>' +
+ textValue +
+ '' + key + this.tagEndChar;
+ }
+ }
+}
+
+Builder.prototype.replaceEntitiesValue = function(textValue){
+ if(textValue && textValue.length > 0 && this.options.processEntities){
+ for (let i=0; i {
+
+const EOL = "\n";
+
+/**
+ *
+ * @param {array} jArray
+ * @param {any} options
+ * @returns
+ */
+function toXml(jArray, options) {
+ let indentation = "";
+ if (options.format && options.indentBy.length > 0) {
+ indentation = EOL;
+ }
+ return arrToStr(jArray, options, "", indentation);
+}
+
+function arrToStr(arr, options, jPath, indentation) {
+ let xmlStr = "";
+ let isPreviousElementTag = false;
+
+ for (let i = 0; i < arr.length; i++) {
+ const tagObj = arr[i];
+ const tagName = propName(tagObj);
+ let newJPath = "";
+ if (jPath.length === 0) newJPath = tagName
+ else newJPath = `${jPath}.${tagName}`;
+
+ if (tagName === options.textNodeName) {
+ let tagText = tagObj[tagName];
+ if (!isStopNode(newJPath, options)) {
+ tagText = options.tagValueProcessor(tagName, tagText);
+ tagText = replaceEntitiesValue(tagText, options);
+ }
+ if (isPreviousElementTag) {
+ xmlStr += indentation;
+ }
+ xmlStr += tagText;
+ isPreviousElementTag = false;
+ continue;
+ } else if (tagName === options.cdataPropName) {
+ if (isPreviousElementTag) {
+ xmlStr += indentation;
+ }
+ xmlStr += ``;
+ isPreviousElementTag = false;
+ continue;
+ } else if (tagName === options.commentPropName) {
+ xmlStr += indentation + ``;
+ isPreviousElementTag = true;
+ continue;
+ } else if (tagName[0] === "?") {
+ const attStr = attr_to_str(tagObj[":@"], options);
+ const tempInd = tagName === "?xml" ? "" : indentation;
+ let piTextNodeName = tagObj[tagName][0][options.textNodeName];
+ piTextNodeName = piTextNodeName.length !== 0 ? " " + piTextNodeName : ""; //remove extra spacing
+ xmlStr += tempInd + `<${tagName}${piTextNodeName}${attStr}?>`;
+ isPreviousElementTag = true;
+ continue;
+ }
+ let newIdentation = indentation;
+ if (newIdentation !== "") {
+ newIdentation += options.indentBy;
+ }
+ const attStr = attr_to_str(tagObj[":@"], options);
+ const tagStart = indentation + `<${tagName}${attStr}`;
+ const tagValue = arrToStr(tagObj[tagName], options, newJPath, newIdentation);
+ if (options.unpairedTags.indexOf(tagName) !== -1) {
+ if (options.suppressUnpairedNode) xmlStr += tagStart + ">";
+ else xmlStr += tagStart + "/>";
+ } else if ((!tagValue || tagValue.length === 0) && options.suppressEmptyNode) {
+ xmlStr += tagStart + "/>";
+ } else if (tagValue && tagValue.endsWith(">")) {
+ xmlStr += tagStart + `>${tagValue}${indentation}${tagName}>`;
+ } else {
+ xmlStr += tagStart + ">";
+ if (tagValue && indentation !== "" && (tagValue.includes("/>") || tagValue.includes(""))) {
+ xmlStr += indentation + options.indentBy + tagValue + indentation;
+ } else {
+ xmlStr += tagValue;
+ }
+ xmlStr += `${tagName}>`;
+ }
+ isPreviousElementTag = true;
+ }
+
+ return xmlStr;
+}
+
+function propName(obj) {
+ const keys = Object.keys(obj);
+ for (let i = 0; i < keys.length; i++) {
+ const key = keys[i];
+ if (key !== ":@") return key;
+ }
+}
+
+function attr_to_str(attrMap, options) {
+ let attrStr = "";
+ if (attrMap && !options.ignoreAttributes) {
+ for (let attr in attrMap) {
+ let attrVal = options.attributeValueProcessor(attr, attrMap[attr]);
+ attrVal = replaceEntitiesValue(attrVal, options);
+ if (attrVal === true && options.suppressBooleanAttributes) {
+ attrStr += ` ${attr.substr(options.attributeNamePrefix.length)}`;
+ } else {
+ attrStr += ` ${attr.substr(options.attributeNamePrefix.length)}="${attrVal}"`;
+ }
+ }
+ }
+ return attrStr;
+}
+
+function isStopNode(jPath, options) {
+ jPath = jPath.substr(0, jPath.length - options.textNodeName.length - 1);
+ let tagName = jPath.substr(jPath.lastIndexOf(".") + 1);
+ for (let index in options.stopNodes) {
+ if (options.stopNodes[index] === jPath || options.stopNodes[index] === "*." + tagName) return true;
+ }
+ return false;
+}
+
+function replaceEntitiesValue(textValue, options) {
+ if (textValue && textValue.length > 0 && options.processEntities) {
+ for (let i = 0; i < options.entities.length; i++) {
+ const entity = options.entities[i];
+ textValue = textValue.replace(entity.regex, entity.val);
+ }
+ }
+ return textValue;
+}
+module.exports = toXml;
+
+
+/***/ }),
+
+/***/ 6072:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+const util = __nccwpck_require__(38280);
+
+//TODO: handle comments
+function readDocType(xmlData, i){
+
+ const entities = {};
+ if( xmlData[i + 3] === 'O' &&
+ xmlData[i + 4] === 'C' &&
+ xmlData[i + 5] === 'T' &&
+ xmlData[i + 6] === 'Y' &&
+ xmlData[i + 7] === 'P' &&
+ xmlData[i + 8] === 'E')
+ {
+ i = i+9;
+ let angleBracketsCount = 1;
+ let hasBody = false, comment = false;
+ let exp = "";
+ for(;i') { //Read tag content
+ if(comment){
+ if( xmlData[i - 1] === "-" && xmlData[i - 2] === "-"){
+ comment = false;
+ angleBracketsCount--;
+ }
+ }else{
+ angleBracketsCount--;
+ }
+ if (angleBracketsCount === 0) {
+ break;
+ }
+ }else if( xmlData[i] === '['){
+ hasBody = true;
+ }else{
+ exp += xmlData[i];
+ }
+ }
+ if(angleBracketsCount !== 0){
+ throw new Error(`Unclosed DOCTYPE`);
+ }
+ }else{
+ throw new Error(`Invalid Tag instead of DOCTYPE`);
+ }
+ return {entities, i};
+}
+
+function readEntityExp(xmlData,i){
+ //External entities are not supported
+ //
+
+ //Parameter entities are not supported
+ //
+
+ //Internal entities are supported
+ //
+
+ //read EntityName
+ let entityName = "";
+ for (; i < xmlData.length && (xmlData[i] !== "'" && xmlData[i] !== '"' ); i++) {
+ // if(xmlData[i] === " ") continue;
+ // else
+ entityName += xmlData[i];
+ }
+ entityName = entityName.trim();
+ if(entityName.indexOf(" ") !== -1) throw new Error("External entites are not supported");
+
+ //read Entity Value
+ const startChar = xmlData[i++];
+ let val = ""
+ for (; i < xmlData.length && xmlData[i] !== startChar ; i++) {
+ val += xmlData[i];
+ }
+ return [entityName, val, i];
+}
+
+function isComment(xmlData, i){
+ if(xmlData[i+1] === '!' &&
+ xmlData[i+2] === '-' &&
+ xmlData[i+3] === '-') return true
+ return false
+}
+function isEntity(xmlData, i){
+ if(xmlData[i+1] === '!' &&
+ xmlData[i+2] === 'E' &&
+ xmlData[i+3] === 'N' &&
+ xmlData[i+4] === 'T' &&
+ xmlData[i+5] === 'I' &&
+ xmlData[i+6] === 'T' &&
+ xmlData[i+7] === 'Y') return true
+ return false
+}
+function isElement(xmlData, i){
+ if(xmlData[i+1] === '!' &&
+ xmlData[i+2] === 'E' &&
+ xmlData[i+3] === 'L' &&
+ xmlData[i+4] === 'E' &&
+ xmlData[i+5] === 'M' &&
+ xmlData[i+6] === 'E' &&
+ xmlData[i+7] === 'N' &&
+ xmlData[i+8] === 'T') return true
+ return false
+}
+
+function isAttlist(xmlData, i){
+ if(xmlData[i+1] === '!' &&
+ xmlData[i+2] === 'A' &&
+ xmlData[i+3] === 'T' &&
+ xmlData[i+4] === 'T' &&
+ xmlData[i+5] === 'L' &&
+ xmlData[i+6] === 'I' &&
+ xmlData[i+7] === 'S' &&
+ xmlData[i+8] === 'T') return true
+ return false
+}
+function isNotation(xmlData, i){
+ if(xmlData[i+1] === '!' &&
+ xmlData[i+2] === 'N' &&
+ xmlData[i+3] === 'O' &&
+ xmlData[i+4] === 'T' &&
+ xmlData[i+5] === 'A' &&
+ xmlData[i+6] === 'T' &&
+ xmlData[i+7] === 'I' &&
+ xmlData[i+8] === 'O' &&
+ xmlData[i+9] === 'N') return true
+ return false
+}
+
+function validateEntityName(name){
+ if (util.isName(name))
+ return name;
+ else
+ throw new Error(`Invalid entity name ${name}`);
+}
+
+module.exports = readDocType;
+
+
+/***/ }),
+
+/***/ 86993:
+/***/ ((__unused_webpack_module, exports) => {
+
+
+const defaultOptions = {
+ preserveOrder: false,
+ attributeNamePrefix: '@_',
+ attributesGroupName: false,
+ textNodeName: '#text',
+ ignoreAttributes: true,
+ removeNSPrefix: false, // remove NS from tag name or attribute name if true
+ allowBooleanAttributes: false, //a tag can have attributes without any value
+ //ignoreRootElement : false,
+ parseTagValue: true,
+ parseAttributeValue: false,
+ trimValues: true, //Trim string values of tag and attributes
+ cdataPropName: false,
+ numberParseOptions: {
+ hex: true,
+ leadingZeros: true,
+ eNotation: true
+ },
+ tagValueProcessor: function(tagName, val) {
+ return val;
+ },
+ attributeValueProcessor: function(attrName, val) {
+ return val;
+ },
+ stopNodes: [], //nested tags will not be parsed even for errors
+ alwaysCreateTextNode: false,
+ isArray: () => false,
+ commentPropName: false,
+ unpairedTags: [],
+ processEntities: true,
+ htmlEntities: false,
+ ignoreDeclaration: false,
+ ignorePiTags: false,
+ transformTagName: false,
+ transformAttributeName: false,
+ updateTag: function(tagName, jPath, attrs){
+ return tagName
+ },
+ // skipEmptyListItem: false
+};
+
+const buildOptions = function(options) {
+ return Object.assign({}, defaultOptions, options);
+};
+
+exports.buildOptions = buildOptions;
+exports.defaultOptions = defaultOptions;
+
+/***/ }),
+
+/***/ 25832:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+"use strict";
+
+///@ts-check
+
+const util = __nccwpck_require__(38280);
+const xmlNode = __nccwpck_require__(7462);
+const readDocType = __nccwpck_require__(6072);
+const toNumber = __nccwpck_require__(14526);
+
+const regx =
+ '<((!\\[CDATA\\[([\\s\\S]*?)(]]>))|((NAME:)?(NAME))([^>]*)>|((\\/)(NAME)\\s*>))([^<]*)'
+ .replace(/NAME/g, util.nameRegexp);
+
+//const tagsRegx = new RegExp("<(\\/?[\\w:\\-\._]+)([^>]*)>(\\s*"+cdataRegx+")*([^<]+)?","g");
+//const tagsRegx = new RegExp("<(\\/?)((\\w*:)?([\\w:\\-\._]+))([^>]*)>([^<]*)("+cdataRegx+"([^<]*))*([^<]+)?","g");
+
+class OrderedObjParser{
+ constructor(options){
+ this.options = options;
+ this.currentNode = null;
+ this.tagsNodeStack = [];
+ this.docTypeEntities = {};
+ this.lastEntities = {
+ "apos" : { regex: /&(apos|#39|#x27);/g, val : "'"},
+ "gt" : { regex: /&(gt|#62|#x3E);/g, val : ">"},
+ "lt" : { regex: /&(lt|#60|#x3C);/g, val : "<"},
+ "quot" : { regex: /&(quot|#34|#x22);/g, val : "\""},
+ };
+ this.ampEntity = { regex: /&(amp|#38|#x26);/g, val : "&"};
+ this.htmlEntities = {
+ "space": { regex: /&(nbsp|#160);/g, val: " " },
+ // "lt" : { regex: /&(lt|#60);/g, val: "<" },
+ // "gt" : { regex: /&(gt|#62);/g, val: ">" },
+ // "amp" : { regex: /&(amp|#38);/g, val: "&" },
+ // "quot" : { regex: /&(quot|#34);/g, val: "\"" },
+ // "apos" : { regex: /&(apos|#39);/g, val: "'" },
+ "cent" : { regex: /&(cent|#162);/g, val: "¢" },
+ "pound" : { regex: /&(pound|#163);/g, val: "£" },
+ "yen" : { regex: /&(yen|#165);/g, val: "¥" },
+ "euro" : { regex: /&(euro|#8364);/g, val: "€" },
+ "copyright" : { regex: /&(copy|#169);/g, val: "©" },
+ "reg" : { regex: /&(reg|#174);/g, val: "®" },
+ "inr" : { regex: /&(inr|#8377);/g, val: "₹" },
+ };
+ this.addExternalEntities = addExternalEntities;
+ this.parseXml = parseXml;
+ this.parseTextData = parseTextData;
+ this.resolveNameSpace = resolveNameSpace;
+ this.buildAttributesMap = buildAttributesMap;
+ this.isItStopNode = isItStopNode;
+ this.replaceEntitiesValue = replaceEntitiesValue;
+ this.readStopNodeData = readStopNodeData;
+ this.saveTextToParentTag = saveTextToParentTag;
+ this.addChild = addChild;
+ }
+
+}
+
+function addExternalEntities(externalEntities){
+ const entKeys = Object.keys(externalEntities);
+ for (let i = 0; i < entKeys.length; i++) {
+ const ent = entKeys[i];
+ this.lastEntities[ent] = {
+ regex: new RegExp("&"+ent+";","g"),
+ val : externalEntities[ent]
+ }
+ }
+}
+
+/**
+ * @param {string} val
+ * @param {string} tagName
+ * @param {string} jPath
+ * @param {boolean} dontTrim
+ * @param {boolean} hasAttributes
+ * @param {boolean} isLeafNode
+ * @param {boolean} escapeEntities
+ */
+function parseTextData(val, tagName, jPath, dontTrim, hasAttributes, isLeafNode, escapeEntities) {
+ if (val !== undefined) {
+ if (this.options.trimValues && !dontTrim) {
+ val = val.trim();
+ }
+ if(val.length > 0){
+ if(!escapeEntities) val = this.replaceEntitiesValue(val);
+
+ const newval = this.options.tagValueProcessor(tagName, val, jPath, hasAttributes, isLeafNode);
+ if(newval === null || newval === undefined){
+ //don't parse
+ return val;
+ }else if(typeof newval !== typeof val || newval !== val){
+ //overwrite
+ return newval;
+ }else if(this.options.trimValues){
+ return parseValue(val, this.options.parseTagValue, this.options.numberParseOptions);
+ }else{
+ const trimmedVal = val.trim();
+ if(trimmedVal === val){
+ return parseValue(val, this.options.parseTagValue, this.options.numberParseOptions);
+ }else{
+ return val;
+ }
+ }
+ }
+ }
+}
+
+function resolveNameSpace(tagname) {
+ if (this.options.removeNSPrefix) {
+ const tags = tagname.split(':');
+ const prefix = tagname.charAt(0) === '/' ? '/' : '';
+ if (tags[0] === 'xmlns') {
+ return '';
+ }
+ if (tags.length === 2) {
+ tagname = prefix + tags[1];
+ }
+ }
+ return tagname;
+}
+
+//TODO: change regex to capture NS
+//const attrsRegx = new RegExp("([\\w\\-\\.\\:]+)\\s*=\\s*(['\"])((.|\n)*?)\\2","gm");
+const attrsRegx = new RegExp('([^\\s=]+)\\s*(=\\s*([\'"])([\\s\\S]*?)\\3)?', 'gm');
+
+function buildAttributesMap(attrStr, jPath, tagName) {
+ if (!this.options.ignoreAttributes && typeof attrStr === 'string') {
+ // attrStr = attrStr.replace(/\r?\n/g, ' ');
+ //attrStr = attrStr || attrStr.trim();
+
+ const matches = util.getAllMatches(attrStr, attrsRegx);
+ const len = matches.length; //don't make it inline
+ const attrs = {};
+ for (let i = 0; i < len; i++) {
+ const attrName = this.resolveNameSpace(matches[i][1]);
+ let oldVal = matches[i][4];
+ let aName = this.options.attributeNamePrefix + attrName;
+ if (attrName.length) {
+ if (this.options.transformAttributeName) {
+ aName = this.options.transformAttributeName(aName);
+ }
+ if(aName === "__proto__") aName = "#__proto__";
+ if (oldVal !== undefined) {
+ if (this.options.trimValues) {
+ oldVal = oldVal.trim();
+ }
+ oldVal = this.replaceEntitiesValue(oldVal);
+ const newVal = this.options.attributeValueProcessor(attrName, oldVal, jPath);
+ if(newVal === null || newVal === undefined){
+ //don't parse
+ attrs[aName] = oldVal;
+ }else if(typeof newVal !== typeof oldVal || newVal !== oldVal){
+ //overwrite
+ attrs[aName] = newVal;
+ }else{
+ //parse
+ attrs[aName] = parseValue(
+ oldVal,
+ this.options.parseAttributeValue,
+ this.options.numberParseOptions
+ );
+ }
+ } else if (this.options.allowBooleanAttributes) {
+ attrs[aName] = true;
+ }
+ }
+ }
+ if (!Object.keys(attrs).length) {
+ return;
+ }
+ if (this.options.attributesGroupName) {
+ const attrCollection = {};
+ attrCollection[this.options.attributesGroupName] = attrs;
+ return attrCollection;
+ }
+ return attrs
+ }
+}
+
+const parseXml = function(xmlData) {
+ xmlData = xmlData.replace(/\r\n?/g, "\n"); //TODO: remove this line
+ const xmlObj = new xmlNode('!xml');
+ let currentNode = xmlObj;
+ let textData = "";
+ let jPath = "";
+ for(let i=0; i< xmlData.length; i++){//for each char in XML data
+ const ch = xmlData[i];
+ if(ch === '<'){
+ // const nextIndex = i+1;
+ // const _2ndChar = xmlData[nextIndex];
+ if( xmlData[i+1] === '/') {//Closing Tag
+ const closeIndex = findClosingIndex(xmlData, ">", i, "Closing Tag is not closed.")
+ let tagName = xmlData.substring(i+2,closeIndex).trim();
+
+ if(this.options.removeNSPrefix){
+ const colonIndex = tagName.indexOf(":");
+ if(colonIndex !== -1){
+ tagName = tagName.substr(colonIndex+1);
+ }
+ }
+
+ if(this.options.transformTagName) {
+ tagName = this.options.transformTagName(tagName);
+ }
+
+ if(currentNode){
+ textData = this.saveTextToParentTag(textData, currentNode, jPath);
+ }
+
+ //check if last tag of nested tag was unpaired tag
+ const lastTagName = jPath.substring(jPath.lastIndexOf(".")+1);
+ if(tagName && this.options.unpairedTags.indexOf(tagName) !== -1 ){
+ throw new Error(`Unpaired tag can not be used as closing tag: ${tagName}>`);
+ }
+ let propIndex = 0
+ if(lastTagName && this.options.unpairedTags.indexOf(lastTagName) !== -1 ){
+ propIndex = jPath.lastIndexOf('.', jPath.lastIndexOf('.')-1)
+ this.tagsNodeStack.pop();
+ }else{
+ propIndex = jPath.lastIndexOf(".");
+ }
+ jPath = jPath.substring(0, propIndex);
+
+ currentNode = this.tagsNodeStack.pop();//avoid recursion, set the parent tag scope
+ textData = "";
+ i = closeIndex;
+ } else if( xmlData[i+1] === '?') {
+
+ let tagData = readTagExp(xmlData,i, false, "?>");
+ if(!tagData) throw new Error("Pi Tag is not closed.");
+
+ textData = this.saveTextToParentTag(textData, currentNode, jPath);
+ if( (this.options.ignoreDeclaration && tagData.tagName === "?xml") || this.options.ignorePiTags){
+
+ }else{
+
+ const childNode = new xmlNode(tagData.tagName);
+ childNode.add(this.options.textNodeName, "");
+
+ if(tagData.tagName !== tagData.tagExp && tagData.attrExpPresent){
+ childNode[":@"] = this.buildAttributesMap(tagData.tagExp, jPath, tagData.tagName);
+ }
+ this.addChild(currentNode, childNode, jPath)
+
+ }
+
+
+ i = tagData.closeIndex + 1;
+ } else if(xmlData.substr(i + 1, 3) === '!--') {
+ const endIndex = findClosingIndex(xmlData, "-->", i+4, "Comment is not closed.")
+ if(this.options.commentPropName){
+ const comment = xmlData.substring(i + 4, endIndex - 2);
+
+ textData = this.saveTextToParentTag(textData, currentNode, jPath);
+
+ currentNode.add(this.options.commentPropName, [ { [this.options.textNodeName] : comment } ]);
+ }
+ i = endIndex;
+ } else if( xmlData.substr(i + 1, 2) === '!D') {
+ const result = readDocType(xmlData, i);
+ this.docTypeEntities = result.entities;
+ i = result.i;
+ }else if(xmlData.substr(i + 1, 2) === '![') {
+ const closeIndex = findClosingIndex(xmlData, "]]>", i, "CDATA is not closed.") - 2;
+ const tagExp = xmlData.substring(i + 9,closeIndex);
+
+ textData = this.saveTextToParentTag(textData, currentNode, jPath);
+
+ //cdata should be set even if it is 0 length string
+ if(this.options.cdataPropName){
+ // let val = this.parseTextData(tagExp, this.options.cdataPropName, jPath + "." + this.options.cdataPropName, true, false, true);
+ // if(!val) val = "";
+ currentNode.add(this.options.cdataPropName, [ { [this.options.textNodeName] : tagExp } ]);
+ }else{
+ let val = this.parseTextData(tagExp, currentNode.tagname, jPath, true, false, true);
+ if(val == undefined) val = "";
+ currentNode.add(this.options.textNodeName, val);
+ }
+
+ i = closeIndex + 2;
+ }else {//Opening tag
+ let result = readTagExp(xmlData,i, this.options.removeNSPrefix);
+ let tagName= result.tagName;
+ let tagExp = result.tagExp;
+ let attrExpPresent = result.attrExpPresent;
+ let closeIndex = result.closeIndex;
+
+ if (this.options.transformTagName) {
+ tagName = this.options.transformTagName(tagName);
+ }
+
+ //save text as child node
+ if (currentNode && textData) {
+ if(currentNode.tagname !== '!xml'){
+ //when nested tag is found
+ textData = this.saveTextToParentTag(textData, currentNode, jPath, false);
+ }
+ }
+
+ //check if last tag was unpaired tag
+ const lastTag = currentNode;
+ if(lastTag && this.options.unpairedTags.indexOf(lastTag.tagname) !== -1 ){
+ currentNode = this.tagsNodeStack.pop();
+ jPath = jPath.substring(0, jPath.lastIndexOf("."));
+ }
+ if(tagName !== xmlObj.tagname){
+ jPath += jPath ? "." + tagName : tagName;
+ }
+ if (this.isItStopNode(this.options.stopNodes, jPath, tagName)) { //TODO: namespace
+ let tagContent = "";
+ //self-closing tag
+ if(tagExp.length > 0 && tagExp.lastIndexOf("/") === tagExp.length - 1){
+ i = result.closeIndex;
+ }
+ //unpaired tag
+ else if(this.options.unpairedTags.indexOf(tagName) !== -1){
+ i = result.closeIndex;
+ }
+ //normal tag
+ else{
+ //read until closing tag is found
+ const result = this.readStopNodeData(xmlData, tagName, closeIndex + 1);
+ if(!result) throw new Error(`Unexpected end of ${tagName}`);
+ i = result.i;
+ tagContent = result.tagContent;
+ }
+
+ const childNode = new xmlNode(tagName);
+ if(tagName !== tagExp && attrExpPresent){
+ childNode[":@"] = this.buildAttributesMap(tagExp, jPath, tagName);
+ }
+ if(tagContent) {
+ tagContent = this.parseTextData(tagContent, tagName, jPath, true, attrExpPresent, true, true);
+ }
+
+ jPath = jPath.substr(0, jPath.lastIndexOf("."));
+ childNode.add(this.options.textNodeName, tagContent);
+
+ this.addChild(currentNode, childNode, jPath)
+ }else{
+ //selfClosing tag
+ if(tagExp.length > 0 && tagExp.lastIndexOf("/") === tagExp.length - 1){
+ if(tagName[tagName.length - 1] === "/"){ //remove trailing '/'
+ tagName = tagName.substr(0, tagName.length - 1);
+ tagExp = tagName;
+ }else{
+ tagExp = tagExp.substr(0, tagExp.length - 1);
+ }
+
+ if(this.options.transformTagName) {
+ tagName = this.options.transformTagName(tagName);
+ }
+
+ const childNode = new xmlNode(tagName);
+ if(tagName !== tagExp && attrExpPresent){
+ childNode[":@"] = this.buildAttributesMap(tagExp, jPath, tagName);
+ }
+ this.addChild(currentNode, childNode, jPath)
+ jPath = jPath.substr(0, jPath.lastIndexOf("."));
+ }
+ //opening tag
+ else{
+ const childNode = new xmlNode( tagName);
+ this.tagsNodeStack.push(currentNode);
+
+ if(tagName !== tagExp && attrExpPresent){
+ childNode[":@"] = this.buildAttributesMap(tagExp, jPath, tagName);
+ }
+ this.addChild(currentNode, childNode, jPath)
+ currentNode = childNode;
+ }
+ textData = "";
+ i = closeIndex;
+ }
+ }
+ }else{
+ textData += xmlData[i];
+ }
+ }
+ return xmlObj.child;
+}
+
+function addChild(currentNode, childNode, jPath){
+ const result = this.options.updateTag(childNode.tagname, jPath, childNode[":@"])
+ if(result === false){
+ }else if(typeof result === "string"){
+ childNode.tagname = result
+ currentNode.addChild(childNode);
+ }else{
+ currentNode.addChild(childNode);
+ }
+}
+
+const replaceEntitiesValue = function(val){
+
+ if(this.options.processEntities){
+ for(let entityName in this.docTypeEntities){
+ const entity = this.docTypeEntities[entityName];
+ val = val.replace( entity.regx, entity.val);
+ }
+ for(let entityName in this.lastEntities){
+ const entity = this.lastEntities[entityName];
+ val = val.replace( entity.regex, entity.val);
+ }
+ if(this.options.htmlEntities){
+ for(let entityName in this.htmlEntities){
+ const entity = this.htmlEntities[entityName];
+ val = val.replace( entity.regex, entity.val);
+ }
+ }
+ val = val.replace( this.ampEntity.regex, this.ampEntity.val);
+ }
+ return val;
+}
+function saveTextToParentTag(textData, currentNode, jPath, isLeafNode) {
+ if (textData) { //store previously collected data as textNode
+ if(isLeafNode === undefined) isLeafNode = Object.keys(currentNode.child).length === 0
+
+ textData = this.parseTextData(textData,
+ currentNode.tagname,
+ jPath,
+ false,
+ currentNode[":@"] ? Object.keys(currentNode[":@"]).length !== 0 : false,
+ isLeafNode);
+
+ if (textData !== undefined && textData !== "")
+ currentNode.add(this.options.textNodeName, textData);
+ textData = "";
+ }
+ return textData;
+}
+
+//TODO: use jPath to simplify the logic
+/**
+ *
+ * @param {string[]} stopNodes
+ * @param {string} jPath
+ * @param {string} currentTagName
+ */
+function isItStopNode(stopNodes, jPath, currentTagName){
+ const allNodesExp = "*." + currentTagName;
+ for (const stopNodePath in stopNodes) {
+ const stopNodeExp = stopNodes[stopNodePath];
+ if( allNodesExp === stopNodeExp || jPath === stopNodeExp ) return true;
+ }
+ return false;
+}
+
+/**
+ * Returns the tag Expression and where it is ending handling single-double quotes situation
+ * @param {string} xmlData
+ * @param {number} i starting index
+ * @returns
+ */
+function tagExpWithClosingIndex(xmlData, i, closingChar = ">"){
+ let attrBoundary;
+ let tagExp = "";
+ for (let index = i; index < xmlData.length; index++) {
+ let ch = xmlData[index];
+ if (attrBoundary) {
+ if (ch === attrBoundary) attrBoundary = "";//reset
+ } else if (ch === '"' || ch === "'") {
+ attrBoundary = ch;
+ } else if (ch === closingChar[0]) {
+ if(closingChar[1]){
+ if(xmlData[index + 1] === closingChar[1]){
+ return {
+ data: tagExp,
+ index: index
+ }
+ }
+ }else{
+ return {
+ data: tagExp,
+ index: index
+ }
+ }
+ } else if (ch === '\t') {
+ ch = " "
+ }
+ tagExp += ch;
+ }
+}
+
+function findClosingIndex(xmlData, str, i, errMsg){
+ const closingIndex = xmlData.indexOf(str, i);
+ if(closingIndex === -1){
+ throw new Error(errMsg)
+ }else{
+ return closingIndex + str.length - 1;
+ }
+}
+
+function readTagExp(xmlData,i, removeNSPrefix, closingChar = ">"){
+ const result = tagExpWithClosingIndex(xmlData, i+1, closingChar);
+ if(!result) return;
+ let tagExp = result.data;
+ const closeIndex = result.index;
+ const separatorIndex = tagExp.search(/\s/);
+ let tagName = tagExp;
+ let attrExpPresent = true;
+ if(separatorIndex !== -1){//separate tag name and attributes expression
+ tagName = tagExp.substr(0, separatorIndex).replace(/\s\s*$/, '');
+ tagExp = tagExp.substr(separatorIndex + 1);
+ }
+
+ if(removeNSPrefix){
+ const colonIndex = tagName.indexOf(":");
+ if(colonIndex !== -1){
+ tagName = tagName.substr(colonIndex+1);
+ attrExpPresent = tagName !== result.data.substr(colonIndex + 1);
+ }
+ }
+
+ return {
+ tagName: tagName,
+ tagExp: tagExp,
+ closeIndex: closeIndex,
+ attrExpPresent: attrExpPresent,
+ }
+}
+/**
+ * find paired tag for a stop node
+ * @param {string} xmlData
+ * @param {string} tagName
+ * @param {number} i
+ */
+function readStopNodeData(xmlData, tagName, i){
+ const startIndex = i;
+ // Starting at 1 since we already have an open tag
+ let openTagCount = 1;
+
+ for (; i < xmlData.length; i++) {
+ if( xmlData[i] === "<"){
+ if (xmlData[i+1] === "/") {//close tag
+ const closeIndex = findClosingIndex(xmlData, ">", i, `${tagName} is not closed`);
+ let closeTagName = xmlData.substring(i+2,closeIndex).trim();
+ if(closeTagName === tagName){
+ openTagCount--;
+ if (openTagCount === 0) {
+ return {
+ tagContent: xmlData.substring(startIndex, i),
+ i : closeIndex
+ }
+ }
+ }
+ i=closeIndex;
+ } else if(xmlData[i+1] === '?') {
+ const closeIndex = findClosingIndex(xmlData, "?>", i+1, "StopNode is not closed.")
+ i=closeIndex;
+ } else if(xmlData.substr(i + 1, 3) === '!--') {
+ const closeIndex = findClosingIndex(xmlData, "-->", i+3, "StopNode is not closed.")
+ i=closeIndex;
+ } else if(xmlData.substr(i + 1, 2) === '![') {
+ const closeIndex = findClosingIndex(xmlData, "]]>", i, "StopNode is not closed.") - 2;
+ i=closeIndex;
+ } else {
+ const tagData = readTagExp(xmlData, i, '>')
+
+ if (tagData) {
+ const openTagName = tagData && tagData.tagName;
+ if (openTagName === tagName && tagData.tagExp[tagData.tagExp.length-1] !== "/") {
+ openTagCount++;
+ }
+ i=tagData.closeIndex;
+ }
+ }
+ }
+ }//end for loop
+}
+
+function parseValue(val, shouldParse, options) {
+ if (shouldParse && typeof val === 'string') {
+ //console.log(options)
+ const newval = val.trim();
+ if(newval === 'true' ) return true;
+ else if(newval === 'false' ) return false;
+ else return toNumber(val, options);
+ } else {
+ if (util.isExist(val)) {
+ return val;
+ } else {
+ return '';
+ }
+ }
+}
+
+
+module.exports = OrderedObjParser;
+
+
+/***/ }),
+
+/***/ 42380:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+const { buildOptions} = __nccwpck_require__(86993);
+const OrderedObjParser = __nccwpck_require__(25832);
+const { prettify} = __nccwpck_require__(42882);
+const validator = __nccwpck_require__(61739);
+
+class XMLParser{
+
+ constructor(options){
+ this.externalEntities = {};
+ this.options = buildOptions(options);
+
+ }
+ /**
+ * Parse XML dats to JS object
+ * @param {string|Buffer} xmlData
+ * @param {boolean|Object} validationOption
+ */
+ parse(xmlData,validationOption){
+ if(typeof xmlData === "string"){
+ }else if( xmlData.toString){
+ xmlData = xmlData.toString();
+ }else{
+ throw new Error("XML data is accepted in String or Bytes[] form.")
+ }
+ if( validationOption){
+ if(validationOption === true) validationOption = {}; //validate with default options
+
+ const result = validator.validate(xmlData, validationOption);
+ if (result !== true) {
+ throw Error( `${result.err.msg}:${result.err.line}:${result.err.col}` )
+ }
+ }
+ const orderedObjParser = new OrderedObjParser(this.options);
+ orderedObjParser.addExternalEntities(this.externalEntities);
+ const orderedResult = orderedObjParser.parseXml(xmlData);
+ if(this.options.preserveOrder || orderedResult === undefined) return orderedResult;
+ else return prettify(orderedResult, this.options);
+ }
+
+ /**
+ * Add Entity which is not by default supported by this library
+ * @param {string} key
+ * @param {string} value
+ */
+ addEntity(key, value){
+ if(value.indexOf("&") !== -1){
+ throw new Error("Entity value can't have '&'")
+ }else if(key.indexOf("&") !== -1 || key.indexOf(";") !== -1){
+ throw new Error("An entity must be set without '&' and ';'. Eg. use '#xD' for '
'")
+ }else if(value === "&"){
+ throw new Error("An entity with value '&' is not permitted");
+ }else{
+ this.externalEntities[key] = value;
+ }
+ }
+}
+
+module.exports = XMLParser;
+
+/***/ }),
+
+/***/ 42882:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+
+/**
+ *
+ * @param {array} node
+ * @param {any} options
+ * @returns
+ */
+function prettify(node, options){
+ return compress( node, options);
+}
+
+/**
+ *
+ * @param {array} arr
+ * @param {object} options
+ * @param {string} jPath
+ * @returns object
+ */
+function compress(arr, options, jPath){
+ let text;
+ const compressedObj = {};
+ for (let i = 0; i < arr.length; i++) {
+ const tagObj = arr[i];
+ const property = propName(tagObj);
+ let newJpath = "";
+ if(jPath === undefined) newJpath = property;
+ else newJpath = jPath + "." + property;
+
+ if(property === options.textNodeName){
+ if(text === undefined) text = tagObj[property];
+ else text += "" + tagObj[property];
+ }else if(property === undefined){
+ continue;
+ }else if(tagObj[property]){
+
+ let val = compress(tagObj[property], options, newJpath);
+ const isLeaf = isLeafTag(val, options);
+
+ if(tagObj[":@"]){
+ assignAttributes( val, tagObj[":@"], newJpath, options);
+ }else if(Object.keys(val).length === 1 && val[options.textNodeName] !== undefined && !options.alwaysCreateTextNode){
+ val = val[options.textNodeName];
+ }else if(Object.keys(val).length === 0){
+ if(options.alwaysCreateTextNode) val[options.textNodeName] = "";
+ else val = "";
+ }
+
+ if(compressedObj[property] !== undefined && compressedObj.hasOwnProperty(property)) {
+ if(!Array.isArray(compressedObj[property])) {
+ compressedObj[property] = [ compressedObj[property] ];
+ }
+ compressedObj[property].push(val);
+ }else{
+ //TODO: if a node is not an array, then check if it should be an array
+ //also determine if it is a leaf node
+ if (options.isArray(property, newJpath, isLeaf )) {
+ compressedObj[property] = [val];
+ }else{
+ compressedObj[property] = val;
+ }
+ }
+ }
+
+ }
+ // if(text && text.length > 0) compressedObj[options.textNodeName] = text;
+ if(typeof text === "string"){
+ if(text.length > 0) compressedObj[options.textNodeName] = text;
+ }else if(text !== undefined) compressedObj[options.textNodeName] = text;
+ return compressedObj;
+}
+
+function propName(obj){
+ const keys = Object.keys(obj);
+ for (let i = 0; i < keys.length; i++) {
+ const key = keys[i];
+ if(key !== ":@") return key;
+ }
+}
+
+function assignAttributes(obj, attrMap, jpath, options){
+ if (attrMap) {
+ const keys = Object.keys(attrMap);
+ const len = keys.length; //don't make it inline
+ for (let i = 0; i < len; i++) {
+ const atrrName = keys[i];
+ if (options.isArray(atrrName, jpath + "." + atrrName, true, true)) {
+ obj[atrrName] = [ attrMap[atrrName] ];
+ } else {
+ obj[atrrName] = attrMap[atrrName];
+ }
+ }
+ }
+}
+
+function isLeafTag(obj, options){
+ const { textNodeName } = options;
+ const propCount = Object.keys(obj).length;
+
+ if (propCount === 0) {
+ return true;
+ }
+
+ if (
+ propCount === 1 &&
+ (obj[textNodeName] || typeof obj[textNodeName] === "boolean" || obj[textNodeName] === 0)
+ ) {
+ return true;
+ }
+
+ return false;
+}
+exports.prettify = prettify;
+
+
+/***/ }),
+
+/***/ 7462:
+/***/ ((module) => {
+
+"use strict";
+
+
+class XmlNode{
+ constructor(tagname) {
+ this.tagname = tagname;
+ this.child = []; //nested tags, text, cdata, comments in order
+ this[":@"] = {}; //attributes map
+ }
+ add(key,val){
+ // this.child.push( {name : key, val: val, isCdata: isCdata });
+ if(key === "__proto__") key = "#__proto__";
+ this.child.push( {[key]: val });
+ }
+ addChild(node) {
+ if(node.tagname === "__proto__") node.tagname = "#__proto__";
+ if(node[":@"] && Object.keys(node[":@"]).length > 0){
+ this.child.push( { [node.tagname]: node.child, [":@"]: node[":@"] });
+ }else{
+ this.child.push( { [node.tagname]: node.child });
+ }
+ };
+};
+
+
+module.exports = XmlNode;
+
+/***/ }),
+
+/***/ 89618:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+"use strict";
+
+
+const fs = __nccwpck_require__(77758)
+const path = __nccwpck_require__(71017)
+const mkdirsSync = (__nccwpck_require__(98605).mkdirsSync)
+const utimesMillisSync = (__nccwpck_require__(52548).utimesMillisSync)
+const stat = __nccwpck_require__(73901)
+
+function copySync (src, dest, opts) {
+ if (typeof opts === 'function') {
+ opts = { filter: opts }
+ }
+
+ opts = opts || {}
+ opts.clobber = 'clobber' in opts ? !!opts.clobber : true // default to true for now
+ opts.overwrite = 'overwrite' in opts ? !!opts.overwrite : opts.clobber // overwrite falls back to clobber
+
+ // Warn about using preserveTimestamps on 32-bit node
+ if (opts.preserveTimestamps && process.arch === 'ia32') {
+ process.emitWarning(
+ 'Using the preserveTimestamps option in 32-bit node is not recommended;\n\n' +
+ '\tsee https://github.com/jprichardson/node-fs-extra/issues/269',
+ 'Warning', 'fs-extra-WARN0002'
+ )
+ }
+
+ const { srcStat, destStat } = stat.checkPathsSync(src, dest, 'copy', opts)
+ stat.checkParentPathsSync(src, srcStat, dest, 'copy')
+ if (opts.filter && !opts.filter(src, dest)) return
+ const destParent = path.dirname(dest)
+ if (!fs.existsSync(destParent)) mkdirsSync(destParent)
+ return getStats(destStat, src, dest, opts)
+}
+
+function getStats (destStat, src, dest, opts) {
+ const statSync = opts.dereference ? fs.statSync : fs.lstatSync
+ const srcStat = statSync(src)
+
+ if (srcStat.isDirectory()) return onDir(srcStat, destStat, src, dest, opts)
+ else if (srcStat.isFile() ||
+ srcStat.isCharacterDevice() ||
+ srcStat.isBlockDevice()) return onFile(srcStat, destStat, src, dest, opts)
+ else if (srcStat.isSymbolicLink()) return onLink(destStat, src, dest, opts)
+ else if (srcStat.isSocket()) throw new Error(`Cannot copy a socket file: ${src}`)
+ else if (srcStat.isFIFO()) throw new Error(`Cannot copy a FIFO pipe: ${src}`)
+ throw new Error(`Unknown file: ${src}`)
+}
+
+function onFile (srcStat, destStat, src, dest, opts) {
+ if (!destStat) return copyFile(srcStat, src, dest, opts)
+ return mayCopyFile(srcStat, src, dest, opts)
+}
+
+function mayCopyFile (srcStat, src, dest, opts) {
+ if (opts.overwrite) {
+ fs.unlinkSync(dest)
+ return copyFile(srcStat, src, dest, opts)
+ } else if (opts.errorOnExist) {
+ throw new Error(`'${dest}' already exists`)
+ }
+}
+
+function copyFile (srcStat, src, dest, opts) {
+ fs.copyFileSync(src, dest)
+ if (opts.preserveTimestamps) handleTimestamps(srcStat.mode, src, dest)
+ return setDestMode(dest, srcStat.mode)
+}
+
+function handleTimestamps (srcMode, src, dest) {
+ // Make sure the file is writable before setting the timestamp
+ // otherwise open fails with EPERM when invoked with 'r+'
+ // (through utimes call)
+ if (fileIsNotWritable(srcMode)) makeFileWritable(dest, srcMode)
+ return setDestTimestamps(src, dest)
+}
+
+function fileIsNotWritable (srcMode) {
+ return (srcMode & 0o200) === 0
+}
+
+function makeFileWritable (dest, srcMode) {
+ return setDestMode(dest, srcMode | 0o200)
+}
+
+function setDestMode (dest, srcMode) {
+ return fs.chmodSync(dest, srcMode)
+}
+
+function setDestTimestamps (src, dest) {
+ // The initial srcStat.atime cannot be trusted
+ // because it is modified by the read(2) system call
+ // (See https://nodejs.org/api/fs.html#fs_stat_time_values)
+ const updatedSrcStat = fs.statSync(src)
+ return utimesMillisSync(dest, updatedSrcStat.atime, updatedSrcStat.mtime)
+}
+
+function onDir (srcStat, destStat, src, dest, opts) {
+ if (!destStat) return mkDirAndCopy(srcStat.mode, src, dest, opts)
+ return copyDir(src, dest, opts)
+}
+
+function mkDirAndCopy (srcMode, src, dest, opts) {
+ fs.mkdirSync(dest)
+ copyDir(src, dest, opts)
+ return setDestMode(dest, srcMode)
+}
+
+function copyDir (src, dest, opts) {
+ fs.readdirSync(src).forEach(item => copyDirItem(item, src, dest, opts))
+}
+
+function copyDirItem (item, src, dest, opts) {
+ const srcItem = path.join(src, item)
+ const destItem = path.join(dest, item)
+ if (opts.filter && !opts.filter(srcItem, destItem)) return
+ const { destStat } = stat.checkPathsSync(srcItem, destItem, 'copy', opts)
+ return getStats(destStat, srcItem, destItem, opts)
+}
+
+function onLink (destStat, src, dest, opts) {
+ let resolvedSrc = fs.readlinkSync(src)
+ if (opts.dereference) {
+ resolvedSrc = path.resolve(process.cwd(), resolvedSrc)
+ }
+
+ if (!destStat) {
+ return fs.symlinkSync(resolvedSrc, dest)
+ } else {
+ let resolvedDest
+ try {
+ resolvedDest = fs.readlinkSync(dest)
+ } catch (err) {
+ // dest exists and is a regular file or directory,
+ // Windows may throw UNKNOWN error. If dest already exists,
+ // fs throws error anyway, so no need to guard against it here.
+ if (err.code === 'EINVAL' || err.code === 'UNKNOWN') return fs.symlinkSync(resolvedSrc, dest)
+ throw err
+ }
+ if (opts.dereference) {
+ resolvedDest = path.resolve(process.cwd(), resolvedDest)
+ }
+ if (stat.isSrcSubdir(resolvedSrc, resolvedDest)) {
+ throw new Error(`Cannot copy '${resolvedSrc}' to a subdirectory of itself, '${resolvedDest}'.`)
+ }
+
+ // prevent copy if src is a subdir of dest since unlinking
+ // dest in this case would result in removing src contents
+ // and therefore a broken symlink would be created.
+ if (stat.isSrcSubdir(resolvedDest, resolvedSrc)) {
+ throw new Error(`Cannot overwrite '${resolvedDest}' with '${resolvedSrc}'.`)
+ }
+ return copyLink(resolvedSrc, dest)
+ }
+}
+
+function copyLink (resolvedSrc, dest) {
+ fs.unlinkSync(dest)
+ return fs.symlinkSync(resolvedSrc, dest)
+}
+
+module.exports = copySync
+
+
+/***/ }),
+
+/***/ 38834:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+"use strict";
+
+
+const fs = __nccwpck_require__(77758)
+const path = __nccwpck_require__(71017)
+const mkdirs = (__nccwpck_require__(98605).mkdirs)
+const pathExists = (__nccwpck_require__(43835).pathExists)
+const utimesMillis = (__nccwpck_require__(52548).utimesMillis)
+const stat = __nccwpck_require__(73901)
+
+function copy (src, dest, opts, cb) {
+ if (typeof opts === 'function' && !cb) {
+ cb = opts
+ opts = {}
+ } else if (typeof opts === 'function') {
+ opts = { filter: opts }
+ }
+
+ cb = cb || function () {}
+ opts = opts || {}
+
+ opts.clobber = 'clobber' in opts ? !!opts.clobber : true // default to true for now
+ opts.overwrite = 'overwrite' in opts ? !!opts.overwrite : opts.clobber // overwrite falls back to clobber
+
+ // Warn about using preserveTimestamps on 32-bit node
+ if (opts.preserveTimestamps && process.arch === 'ia32') {
+ process.emitWarning(
+ 'Using the preserveTimestamps option in 32-bit node is not recommended;\n\n' +
+ '\tsee https://github.com/jprichardson/node-fs-extra/issues/269',
+ 'Warning', 'fs-extra-WARN0001'
+ )
+ }
+
+ stat.checkPaths(src, dest, 'copy', opts, (err, stats) => {
+ if (err) return cb(err)
+ const { srcStat, destStat } = stats
+ stat.checkParentPaths(src, srcStat, dest, 'copy', err => {
+ if (err) return cb(err)
+ runFilter(src, dest, opts, (err, include) => {
+ if (err) return cb(err)
+ if (!include) return cb()
+
+ checkParentDir(destStat, src, dest, opts, cb)
+ })
+ })
+ })
+}
+
+function checkParentDir (destStat, src, dest, opts, cb) {
+ const destParent = path.dirname(dest)
+ pathExists(destParent, (err, dirExists) => {
+ if (err) return cb(err)
+ if (dirExists) return getStats(destStat, src, dest, opts, cb)
+ mkdirs(destParent, err => {
+ if (err) return cb(err)
+ return getStats(destStat, src, dest, opts, cb)
+ })
+ })
+}
+
+function runFilter (src, dest, opts, cb) {
+ if (!opts.filter) return cb(null, true)
+ Promise.resolve(opts.filter(src, dest))
+ .then(include => cb(null, include), error => cb(error))
+}
+
+function getStats (destStat, src, dest, opts, cb) {
+ const stat = opts.dereference ? fs.stat : fs.lstat
+ stat(src, (err, srcStat) => {
+ if (err) return cb(err)
+
+ if (srcStat.isDirectory()) return onDir(srcStat, destStat, src, dest, opts, cb)
+ else if (srcStat.isFile() ||
+ srcStat.isCharacterDevice() ||
+ srcStat.isBlockDevice()) return onFile(srcStat, destStat, src, dest, opts, cb)
+ else if (srcStat.isSymbolicLink()) return onLink(destStat, src, dest, opts, cb)
+ else if (srcStat.isSocket()) return cb(new Error(`Cannot copy a socket file: ${src}`))
+ else if (srcStat.isFIFO()) return cb(new Error(`Cannot copy a FIFO pipe: ${src}`))
+ return cb(new Error(`Unknown file: ${src}`))
+ })
+}
+
+function onFile (srcStat, destStat, src, dest, opts, cb) {
+ if (!destStat) return copyFile(srcStat, src, dest, opts, cb)
+ return mayCopyFile(srcStat, src, dest, opts, cb)
+}
+
+function mayCopyFile (srcStat, src, dest, opts, cb) {
+ if (opts.overwrite) {
+ fs.unlink(dest, err => {
+ if (err) return cb(err)
+ return copyFile(srcStat, src, dest, opts, cb)
+ })
+ } else if (opts.errorOnExist) {
+ return cb(new Error(`'${dest}' already exists`))
+ } else return cb()
+}
+
+function copyFile (srcStat, src, dest, opts, cb) {
+ fs.copyFile(src, dest, err => {
+ if (err) return cb(err)
+ if (opts.preserveTimestamps) return handleTimestampsAndMode(srcStat.mode, src, dest, cb)
+ return setDestMode(dest, srcStat.mode, cb)
+ })
+}
+
+function handleTimestampsAndMode (srcMode, src, dest, cb) {
+ // Make sure the file is writable before setting the timestamp
+ // otherwise open fails with EPERM when invoked with 'r+'
+ // (through utimes call)
+ if (fileIsNotWritable(srcMode)) {
+ return makeFileWritable(dest, srcMode, err => {
+ if (err) return cb(err)
+ return setDestTimestampsAndMode(srcMode, src, dest, cb)
+ })
+ }
+ return setDestTimestampsAndMode(srcMode, src, dest, cb)
+}
+
+function fileIsNotWritable (srcMode) {
+ return (srcMode & 0o200) === 0
+}
+
+function makeFileWritable (dest, srcMode, cb) {
+ return setDestMode(dest, srcMode | 0o200, cb)
+}
+
+function setDestTimestampsAndMode (srcMode, src, dest, cb) {
+ setDestTimestamps(src, dest, err => {
+ if (err) return cb(err)
+ return setDestMode(dest, srcMode, cb)
+ })
+}
+
+function setDestMode (dest, srcMode, cb) {
+ return fs.chmod(dest, srcMode, cb)
+}
+
+function setDestTimestamps (src, dest, cb) {
+ // The initial srcStat.atime cannot be trusted
+ // because it is modified by the read(2) system call
+ // (See https://nodejs.org/api/fs.html#fs_stat_time_values)
+ fs.stat(src, (err, updatedSrcStat) => {
+ if (err) return cb(err)
+ return utimesMillis(dest, updatedSrcStat.atime, updatedSrcStat.mtime, cb)
+ })
+}
+
+function onDir (srcStat, destStat, src, dest, opts, cb) {
+ if (!destStat) return mkDirAndCopy(srcStat.mode, src, dest, opts, cb)
+ return copyDir(src, dest, opts, cb)
+}
+
+function mkDirAndCopy (srcMode, src, dest, opts, cb) {
+ fs.mkdir(dest, err => {
+ if (err) return cb(err)
+ copyDir(src, dest, opts, err => {
+ if (err) return cb(err)
+ return setDestMode(dest, srcMode, cb)
+ })
+ })
+}
+
+function copyDir (src, dest, opts, cb) {
+ fs.readdir(src, (err, items) => {
+ if (err) return cb(err)
+ return copyDirItems(items, src, dest, opts, cb)
+ })
+}
+
+function copyDirItems (items, src, dest, opts, cb) {
+ const item = items.pop()
+ if (!item) return cb()
+ return copyDirItem(items, item, src, dest, opts, cb)
+}
+
+function copyDirItem (items, item, src, dest, opts, cb) {
+ const srcItem = path.join(src, item)
+ const destItem = path.join(dest, item)
+ runFilter(srcItem, destItem, opts, (err, include) => {
+ if (err) return cb(err)
+ if (!include) return copyDirItems(items, src, dest, opts, cb)
+
+ stat.checkPaths(srcItem, destItem, 'copy', opts, (err, stats) => {
+ if (err) return cb(err)
+ const { destStat } = stats
+ getStats(destStat, srcItem, destItem, opts, err => {
+ if (err) return cb(err)
+ return copyDirItems(items, src, dest, opts, cb)
+ })
+ })
+ })
+}
+
+function onLink (destStat, src, dest, opts, cb) {
+ fs.readlink(src, (err, resolvedSrc) => {
+ if (err) return cb(err)
+ if (opts.dereference) {
+ resolvedSrc = path.resolve(process.cwd(), resolvedSrc)
+ }
+
+ if (!destStat) {
+ return fs.symlink(resolvedSrc, dest, cb)
+ } else {
+ fs.readlink(dest, (err, resolvedDest) => {
+ if (err) {
+ // dest exists and is a regular file or directory,
+ // Windows may throw UNKNOWN error. If dest already exists,
+ // fs throws error anyway, so no need to guard against it here.
+ if (err.code === 'EINVAL' || err.code === 'UNKNOWN') return fs.symlink(resolvedSrc, dest, cb)
+ return cb(err)
+ }
+ if (opts.dereference) {
+ resolvedDest = path.resolve(process.cwd(), resolvedDest)
+ }
+ if (stat.isSrcSubdir(resolvedSrc, resolvedDest)) {
+ return cb(new Error(`Cannot copy '${resolvedSrc}' to a subdirectory of itself, '${resolvedDest}'.`))
+ }
+
+ // do not copy if src is a subdir of dest since unlinking
+ // dest in this case would result in removing src contents
+ // and therefore a broken symlink would be created.
+ if (stat.isSrcSubdir(resolvedDest, resolvedSrc)) {
+ return cb(new Error(`Cannot overwrite '${resolvedDest}' with '${resolvedSrc}'.`))
+ }
+ return copyLink(resolvedSrc, dest, cb)
+ })
+ }
+ })
+}
+
+function copyLink (resolvedSrc, dest, cb) {
+ fs.unlink(dest, err => {
+ if (err) return cb(err)
+ return fs.symlink(resolvedSrc, dest, cb)
+ })
+}
+
+module.exports = copy
+
+
+/***/ }),
+
+/***/ 61335:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+"use strict";
+
+
+const u = (__nccwpck_require__(9046).fromCallback)
+module.exports = {
+ copy: u(__nccwpck_require__(38834)),
+ copySync: __nccwpck_require__(89618)
+}
+
+
+/***/ }),
+
+/***/ 96970:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+"use strict";
+
+
+const u = (__nccwpck_require__(9046).fromPromise)
+const fs = __nccwpck_require__(61176)
+const path = __nccwpck_require__(71017)
+const mkdir = __nccwpck_require__(98605)
+const remove = __nccwpck_require__(47357)
+
+const emptyDir = u(async function emptyDir (dir) {
+ let items
+ try {
+ items = await fs.readdir(dir)
+ } catch {
+ return mkdir.mkdirs(dir)
+ }
+
+ return Promise.all(items.map(item => remove.remove(path.join(dir, item))))
+})
+
+function emptyDirSync (dir) {
+ let items
+ try {
+ items = fs.readdirSync(dir)
+ } catch {
+ return mkdir.mkdirsSync(dir)
+ }
+
+ items.forEach(item => {
+ item = path.join(dir, item)
+ remove.removeSync(item)
+ })
+}
+
+module.exports = {
+ emptyDirSync,
+ emptydirSync: emptyDirSync,
+ emptyDir,
+ emptydir: emptyDir
+}
+
+
+/***/ }),
+
+/***/ 2164:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+"use strict";
+
+
+const u = (__nccwpck_require__(9046).fromCallback)
+const path = __nccwpck_require__(71017)
+const fs = __nccwpck_require__(77758)
+const mkdir = __nccwpck_require__(98605)
+
+function createFile (file, callback) {
+ function makeFile () {
+ fs.writeFile(file, '', err => {
+ if (err) return callback(err)
+ callback()
+ })
+ }
+
+ fs.stat(file, (err, stats) => { // eslint-disable-line handle-callback-err
+ if (!err && stats.isFile()) return callback()
+ const dir = path.dirname(file)
+ fs.stat(dir, (err, stats) => {
+ if (err) {
+ // if the directory doesn't exist, make it
+ if (err.code === 'ENOENT') {
+ return mkdir.mkdirs(dir, err => {
+ if (err) return callback(err)
+ makeFile()
+ })
+ }
+ return callback(err)
+ }
+
+ if (stats.isDirectory()) makeFile()
+ else {
+ // parent is not a directory
+ // This is just to cause an internal ENOTDIR error to be thrown
+ fs.readdir(dir, err => {
+ if (err) return callback(err)
+ })
+ }
+ })
+ })
+}
+
+function createFileSync (file) {
+ let stats
+ try {
+ stats = fs.statSync(file)
+ } catch {}
+ if (stats && stats.isFile()) return
+
+ const dir = path.dirname(file)
+ try {
+ if (!fs.statSync(dir).isDirectory()) {
+ // parent is not a directory
+ // This is just to cause an internal ENOTDIR error to be thrown
+ fs.readdirSync(dir)
+ }
+ } catch (err) {
+ // If the stat call above failed because the directory doesn't exist, create it
+ if (err && err.code === 'ENOENT') mkdir.mkdirsSync(dir)
+ else throw err
+ }
+
+ fs.writeFileSync(file, '')
+}
+
+module.exports = {
+ createFile: u(createFile),
+ createFileSync
+}
+
+
+/***/ }),
+
+/***/ 40055:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+"use strict";
+
+
+const { createFile, createFileSync } = __nccwpck_require__(2164)
+const { createLink, createLinkSync } = __nccwpck_require__(53797)
+const { createSymlink, createSymlinkSync } = __nccwpck_require__(72549)
+
+module.exports = {
+ // file
+ createFile,
+ createFileSync,
+ ensureFile: createFile,
+ ensureFileSync: createFileSync,
+ // link
+ createLink,
+ createLinkSync,
+ ensureLink: createLink,
+ ensureLinkSync: createLinkSync,
+ // symlink
+ createSymlink,
+ createSymlinkSync,
+ ensureSymlink: createSymlink,
+ ensureSymlinkSync: createSymlinkSync
+}
+
+
+/***/ }),
+
+/***/ 53797:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+"use strict";
+
+
+const u = (__nccwpck_require__(9046).fromCallback)
+const path = __nccwpck_require__(71017)
+const fs = __nccwpck_require__(77758)
+const mkdir = __nccwpck_require__(98605)
+const pathExists = (__nccwpck_require__(43835).pathExists)
+const { areIdentical } = __nccwpck_require__(73901)
+
+function createLink (srcpath, dstpath, callback) {
+ function makeLink (srcpath, dstpath) {
+ fs.link(srcpath, dstpath, err => {
+ if (err) return callback(err)
+ callback(null)
+ })
+ }
+
+ fs.lstat(dstpath, (_, dstStat) => {
+ fs.lstat(srcpath, (err, srcStat) => {
+ if (err) {
+ err.message = err.message.replace('lstat', 'ensureLink')
+ return callback(err)
+ }
+ if (dstStat && areIdentical(srcStat, dstStat)) return callback(null)
+
+ const dir = path.dirname(dstpath)
+ pathExists(dir, (err, dirExists) => {
+ if (err) return callback(err)
+ if (dirExists) return makeLink(srcpath, dstpath)
+ mkdir.mkdirs(dir, err => {
+ if (err) return callback(err)
+ makeLink(srcpath, dstpath)
+ })
+ })
+ })
+ })
+}
+
+function createLinkSync (srcpath, dstpath) {
+ let dstStat
+ try {
+ dstStat = fs.lstatSync(dstpath)
+ } catch {}
+
+ try {
+ const srcStat = fs.lstatSync(srcpath)
+ if (dstStat && areIdentical(srcStat, dstStat)) return
+ } catch (err) {
+ err.message = err.message.replace('lstat', 'ensureLink')
+ throw err
+ }
+
+ const dir = path.dirname(dstpath)
+ const dirExists = fs.existsSync(dir)
+ if (dirExists) return fs.linkSync(srcpath, dstpath)
+ mkdir.mkdirsSync(dir)
+
+ return fs.linkSync(srcpath, dstpath)
+}
+
+module.exports = {
+ createLink: u(createLink),
+ createLinkSync
+}
+
+
+/***/ }),
+
+/***/ 53727:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+"use strict";
+
+
+const path = __nccwpck_require__(71017)
+const fs = __nccwpck_require__(77758)
+const pathExists = (__nccwpck_require__(43835).pathExists)
+
+/**
+ * Function that returns two types of paths, one relative to symlink, and one
+ * relative to the current working directory. Checks if path is absolute or
+ * relative. If the path is relative, this function checks if the path is
+ * relative to symlink or relative to current working directory. This is an
+ * initiative to find a smarter `srcpath` to supply when building symlinks.
+ * This allows you to determine which path to use out of one of three possible
+ * types of source paths. The first is an absolute path. This is detected by
+ * `path.isAbsolute()`. When an absolute path is provided, it is checked to
+ * see if it exists. If it does it's used, if not an error is returned
+ * (callback)/ thrown (sync). The other two options for `srcpath` are a
+ * relative url. By default Node's `fs.symlink` works by creating a symlink
+ * using `dstpath` and expects the `srcpath` to be relative to the newly
+ * created symlink. If you provide a `srcpath` that does not exist on the file
+ * system it results in a broken symlink. To minimize this, the function
+ * checks to see if the 'relative to symlink' source file exists, and if it
+ * does it will use it. If it does not, it checks if there's a file that
+ * exists that is relative to the current working directory, if does its used.
+ * This preserves the expectations of the original fs.symlink spec and adds
+ * the ability to pass in `relative to current working direcotry` paths.
+ */
+
+function symlinkPaths (srcpath, dstpath, callback) {
+ if (path.isAbsolute(srcpath)) {
+ return fs.lstat(srcpath, (err) => {
+ if (err) {
+ err.message = err.message.replace('lstat', 'ensureSymlink')
+ return callback(err)
+ }
+ return callback(null, {
+ toCwd: srcpath,
+ toDst: srcpath
+ })
+ })
+ } else {
+ const dstdir = path.dirname(dstpath)
+ const relativeToDst = path.join(dstdir, srcpath)
+ return pathExists(relativeToDst, (err, exists) => {
+ if (err) return callback(err)
+ if (exists) {
+ return callback(null, {
+ toCwd: relativeToDst,
+ toDst: srcpath
+ })
+ } else {
+ return fs.lstat(srcpath, (err) => {
+ if (err) {
+ err.message = err.message.replace('lstat', 'ensureSymlink')
+ return callback(err)
+ }
+ return callback(null, {
+ toCwd: srcpath,
+ toDst: path.relative(dstdir, srcpath)
+ })
+ })
+ }
+ })
+ }
+}
+
+function symlinkPathsSync (srcpath, dstpath) {
+ let exists
+ if (path.isAbsolute(srcpath)) {
+ exists = fs.existsSync(srcpath)
+ if (!exists) throw new Error('absolute srcpath does not exist')
+ return {
+ toCwd: srcpath,
+ toDst: srcpath
+ }
+ } else {
+ const dstdir = path.dirname(dstpath)
+ const relativeToDst = path.join(dstdir, srcpath)
+ exists = fs.existsSync(relativeToDst)
+ if (exists) {
+ return {
+ toCwd: relativeToDst,
+ toDst: srcpath
+ }
+ } else {
+ exists = fs.existsSync(srcpath)
+ if (!exists) throw new Error('relative srcpath does not exist')
+ return {
+ toCwd: srcpath,
+ toDst: path.relative(dstdir, srcpath)
+ }
+ }
+ }
+}
+
+module.exports = {
+ symlinkPaths,
+ symlinkPathsSync
+}
+
+
+/***/ }),
+
+/***/ 18254:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+"use strict";
+
+
+const fs = __nccwpck_require__(77758)
+
+function symlinkType (srcpath, type, callback) {
+ callback = (typeof type === 'function') ? type : callback
+ type = (typeof type === 'function') ? false : type
+ if (type) return callback(null, type)
+ fs.lstat(srcpath, (err, stats) => {
+ if (err) return callback(null, 'file')
+ type = (stats && stats.isDirectory()) ? 'dir' : 'file'
+ callback(null, type)
+ })
+}
+
+function symlinkTypeSync (srcpath, type) {
+ let stats
+
+ if (type) return type
+ try {
+ stats = fs.lstatSync(srcpath)
+ } catch {
+ return 'file'
+ }
+ return (stats && stats.isDirectory()) ? 'dir' : 'file'
+}
+
+module.exports = {
+ symlinkType,
+ symlinkTypeSync
+}
+
+
+/***/ }),
+
+/***/ 72549:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+"use strict";
+
+
+const u = (__nccwpck_require__(9046).fromCallback)
+const path = __nccwpck_require__(71017)
+const fs = __nccwpck_require__(61176)
+const _mkdirs = __nccwpck_require__(98605)
+const mkdirs = _mkdirs.mkdirs
+const mkdirsSync = _mkdirs.mkdirsSync
+
+const _symlinkPaths = __nccwpck_require__(53727)
+const symlinkPaths = _symlinkPaths.symlinkPaths
+const symlinkPathsSync = _symlinkPaths.symlinkPathsSync
+
+const _symlinkType = __nccwpck_require__(18254)
+const symlinkType = _symlinkType.symlinkType
+const symlinkTypeSync = _symlinkType.symlinkTypeSync
+
+const pathExists = (__nccwpck_require__(43835).pathExists)
+
+const { areIdentical } = __nccwpck_require__(73901)
+
+function createSymlink (srcpath, dstpath, type, callback) {
+ callback = (typeof type === 'function') ? type : callback
+ type = (typeof type === 'function') ? false : type
+
+ fs.lstat(dstpath, (err, stats) => {
+ if (!err && stats.isSymbolicLink()) {
+ Promise.all([
+ fs.stat(srcpath),
+ fs.stat(dstpath)
+ ]).then(([srcStat, dstStat]) => {
+ if (areIdentical(srcStat, dstStat)) return callback(null)
+ _createSymlink(srcpath, dstpath, type, callback)
+ })
+ } else _createSymlink(srcpath, dstpath, type, callback)
+ })
+}
+
+function _createSymlink (srcpath, dstpath, type, callback) {
+ symlinkPaths(srcpath, dstpath, (err, relative) => {
+ if (err) return callback(err)
+ srcpath = relative.toDst
+ symlinkType(relative.toCwd, type, (err, type) => {
+ if (err) return callback(err)
+ const dir = path.dirname(dstpath)
+ pathExists(dir, (err, dirExists) => {
+ if (err) return callback(err)
+ if (dirExists) return fs.symlink(srcpath, dstpath, type, callback)
+ mkdirs(dir, err => {
+ if (err) return callback(err)
+ fs.symlink(srcpath, dstpath, type, callback)
+ })
+ })
+ })
+ })
+}
+
+function createSymlinkSync (srcpath, dstpath, type) {
+ let stats
+ try {
+ stats = fs.lstatSync(dstpath)
+ } catch {}
+ if (stats && stats.isSymbolicLink()) {
+ const srcStat = fs.statSync(srcpath)
+ const dstStat = fs.statSync(dstpath)
+ if (areIdentical(srcStat, dstStat)) return
+ }
+
+ const relative = symlinkPathsSync(srcpath, dstpath)
+ srcpath = relative.toDst
+ type = symlinkTypeSync(relative.toCwd, type)
+ const dir = path.dirname(dstpath)
+ const exists = fs.existsSync(dir)
+ if (exists) return fs.symlinkSync(srcpath, dstpath, type)
+ mkdirsSync(dir)
+ return fs.symlinkSync(srcpath, dstpath, type)
+}
+
+module.exports = {
+ createSymlink: u(createSymlink),
+ createSymlinkSync
+}
+
+
+/***/ }),
+
+/***/ 61176:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+// This is adapted from https://github.com/normalize/mz
+// Copyright (c) 2014-2016 Jonathan Ong me@jongleberry.com and Contributors
+const u = (__nccwpck_require__(9046).fromCallback)
+const fs = __nccwpck_require__(77758)
+
+const api = [
+ 'access',
+ 'appendFile',
+ 'chmod',
+ 'chown',
+ 'close',
+ 'copyFile',
+ 'fchmod',
+ 'fchown',
+ 'fdatasync',
+ 'fstat',
+ 'fsync',
+ 'ftruncate',
+ 'futimes',
+ 'lchmod',
+ 'lchown',
+ 'link',
+ 'lstat',
+ 'mkdir',
+ 'mkdtemp',
+ 'open',
+ 'opendir',
+ 'readdir',
+ 'readFile',
+ 'readlink',
+ 'realpath',
+ 'rename',
+ 'rm',
+ 'rmdir',
+ 'stat',
+ 'symlink',
+ 'truncate',
+ 'unlink',
+ 'utimes',
+ 'writeFile'
+].filter(key => {
+ // Some commands are not available on some systems. Ex:
+ // fs.cp was added in Node.js v16.7.0
+ // fs.lchown is not available on at least some Linux
+ return typeof fs[key] === 'function'
+})
+
+// Export cloned fs:
+Object.assign(exports, fs)
+
+// Universalify async methods:
+api.forEach(method => {
+ exports[method] = u(fs[method])
+})
+
+// We differ from mz/fs in that we still ship the old, broken, fs.exists()
+// since we are a drop-in replacement for the native module
+exports.exists = function (filename, callback) {
+ if (typeof callback === 'function') {
+ return fs.exists(filename, callback)
+ }
+ return new Promise(resolve => {
+ return fs.exists(filename, resolve)
+ })
+}
+
+// fs.read(), fs.write(), fs.readv(), & fs.writev() need special treatment due to multiple callback args
+
+exports.read = function (fd, buffer, offset, length, position, callback) {
+ if (typeof callback === 'function') {
+ return fs.read(fd, buffer, offset, length, position, callback)
+ }
+ return new Promise((resolve, reject) => {
+ fs.read(fd, buffer, offset, length, position, (err, bytesRead, buffer) => {
+ if (err) return reject(err)
+ resolve({ bytesRead, buffer })
+ })
+ })
+}
+
+// Function signature can be
+// fs.write(fd, buffer[, offset[, length[, position]]], callback)
+// OR
+// fs.write(fd, string[, position[, encoding]], callback)
+// We need to handle both cases, so we use ...args
+exports.write = function (fd, buffer, ...args) {
+ if (typeof args[args.length - 1] === 'function') {
+ return fs.write(fd, buffer, ...args)
+ }
+
+ return new Promise((resolve, reject) => {
+ fs.write(fd, buffer, ...args, (err, bytesWritten, buffer) => {
+ if (err) return reject(err)
+ resolve({ bytesWritten, buffer })
+ })
+ })
+}
+
+// Function signature is
+// s.readv(fd, buffers[, position], callback)
+// We need to handle the optional arg, so we use ...args
+exports.readv = function (fd, buffers, ...args) {
+ if (typeof args[args.length - 1] === 'function') {
+ return fs.readv(fd, buffers, ...args)
+ }
+
+ return new Promise((resolve, reject) => {
+ fs.readv(fd, buffers, ...args, (err, bytesRead, buffers) => {
+ if (err) return reject(err)
+ resolve({ bytesRead, buffers })
+ })
+ })
+}
+
+// Function signature is
+// s.writev(fd, buffers[, position], callback)
+// We need to handle the optional arg, so we use ...args
+exports.writev = function (fd, buffers, ...args) {
+ if (typeof args[args.length - 1] === 'function') {
+ return fs.writev(fd, buffers, ...args)
+ }
+
+ return new Promise((resolve, reject) => {
+ fs.writev(fd, buffers, ...args, (err, bytesWritten, buffers) => {
+ if (err) return reject(err)
+ resolve({ bytesWritten, buffers })
+ })
+ })
+}
+
+// fs.realpath.native sometimes not available if fs is monkey-patched
+if (typeof fs.realpath.native === 'function') {
+ exports.realpath.native = u(fs.realpath.native)
+} else {
+ process.emitWarning(
+ 'fs.realpath.native is not a function. Is fs being monkey-patched?',
+ 'Warning', 'fs-extra-WARN0003'
+ )
+}
+
+
+/***/ }),
+
+/***/ 5630:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+"use strict";
+
+
+module.exports = {
+ // Export promiseified graceful-fs:
+ ...__nccwpck_require__(61176),
+ // Export extra methods:
+ ...__nccwpck_require__(61335),
+ ...__nccwpck_require__(96970),
+ ...__nccwpck_require__(40055),
+ ...__nccwpck_require__(40213),
+ ...__nccwpck_require__(98605),
+ ...__nccwpck_require__(41497),
+ ...__nccwpck_require__(91832),
+ ...__nccwpck_require__(43835),
+ ...__nccwpck_require__(47357)
+}
+
+
+/***/ }),
+
+/***/ 40213:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+"use strict";
+
+
+const u = (__nccwpck_require__(9046).fromPromise)
+const jsonFile = __nccwpck_require__(18970)
+
+jsonFile.outputJson = u(__nccwpck_require__(60531))
+jsonFile.outputJsonSync = __nccwpck_require__(19421)
+// aliases
+jsonFile.outputJSON = jsonFile.outputJson
+jsonFile.outputJSONSync = jsonFile.outputJsonSync
+jsonFile.writeJSON = jsonFile.writeJson
+jsonFile.writeJSONSync = jsonFile.writeJsonSync
+jsonFile.readJSON = jsonFile.readJson
+jsonFile.readJSONSync = jsonFile.readJsonSync
+
+module.exports = jsonFile
+
+
+/***/ }),
+
+/***/ 18970:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+"use strict";
+
+
+const jsonFile = __nccwpck_require__(26160)
+
+module.exports = {
+ // jsonfile exports
+ readJson: jsonFile.readFile,
+ readJsonSync: jsonFile.readFileSync,
+ writeJson: jsonFile.writeFile,
+ writeJsonSync: jsonFile.writeFileSync
+}
+
+
+/***/ }),
+
+/***/ 19421:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+"use strict";
+
+
+const { stringify } = __nccwpck_require__(35902)
+const { outputFileSync } = __nccwpck_require__(91832)
+
+function outputJsonSync (file, data, options) {
+ const str = stringify(data, options)
+
+ outputFileSync(file, str, options)
+}
+
+module.exports = outputJsonSync
+
+
+/***/ }),
+
+/***/ 60531:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+"use strict";
+
+
+const { stringify } = __nccwpck_require__(35902)
+const { outputFile } = __nccwpck_require__(91832)
+
+async function outputJson (file, data, options = {}) {
+ const str = stringify(data, options)
+
+ await outputFile(file, str, options)
+}
+
+module.exports = outputJson
+
+
+/***/ }),
+
+/***/ 98605:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+"use strict";
+
+const u = (__nccwpck_require__(9046).fromPromise)
+const { makeDir: _makeDir, makeDirSync } = __nccwpck_require__(52751)
+const makeDir = u(_makeDir)
+
+module.exports = {
+ mkdirs: makeDir,
+ mkdirsSync: makeDirSync,
+ // alias
+ mkdirp: makeDir,
+ mkdirpSync: makeDirSync,
+ ensureDir: makeDir,
+ ensureDirSync: makeDirSync
+}
+
+
+/***/ }),
+
+/***/ 52751:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+"use strict";
+
+const fs = __nccwpck_require__(61176)
+const { checkPath } = __nccwpck_require__(59907)
+
+const getMode = options => {
+ const defaults = { mode: 0o777 }
+ if (typeof options === 'number') return options
+ return ({ ...defaults, ...options }).mode
+}
+
+module.exports.makeDir = async (dir, options) => {
+ checkPath(dir)
+
+ return fs.mkdir(dir, {
+ mode: getMode(options),
+ recursive: true
+ })
+}
+
+module.exports.makeDirSync = (dir, options) => {
+ checkPath(dir)
+
+ return fs.mkdirSync(dir, {
+ mode: getMode(options),
+ recursive: true
+ })
+}
+
+
+/***/ }),
+
+/***/ 59907:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+"use strict";
+// Adapted from https://github.com/sindresorhus/make-dir
+// Copyright (c) Sindre Sorhus (sindresorhus.com)
+// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+const path = __nccwpck_require__(71017)
+
+// https://github.com/nodejs/node/issues/8987
+// https://github.com/libuv/libuv/pull/1088
+module.exports.checkPath = function checkPath (pth) {
+ if (process.platform === 'win32') {
+ const pathHasInvalidWinCharacters = /[<>:"|?*]/.test(pth.replace(path.parse(pth).root, ''))
+
+ if (pathHasInvalidWinCharacters) {
+ const error = new Error(`Path contains invalid characters: ${pth}`)
+ error.code = 'EINVAL'
+ throw error
+ }
+ }
+}
+
+
+/***/ }),
+
+/***/ 41497:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+"use strict";
+
+
+const u = (__nccwpck_require__(9046).fromCallback)
+module.exports = {
+ move: u(__nccwpck_require__(72231)),
+ moveSync: __nccwpck_require__(42047)
+}
+
+
+/***/ }),
+
+/***/ 42047:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+"use strict";
+
+
+const fs = __nccwpck_require__(77758)
+const path = __nccwpck_require__(71017)
+const copySync = (__nccwpck_require__(61335).copySync)
+const removeSync = (__nccwpck_require__(47357).removeSync)
+const mkdirpSync = (__nccwpck_require__(98605).mkdirpSync)
+const stat = __nccwpck_require__(73901)
+
+function moveSync (src, dest, opts) {
+ opts = opts || {}
+ const overwrite = opts.overwrite || opts.clobber || false
+
+ const { srcStat, isChangingCase = false } = stat.checkPathsSync(src, dest, 'move', opts)
+ stat.checkParentPathsSync(src, srcStat, dest, 'move')
+ if (!isParentRoot(dest)) mkdirpSync(path.dirname(dest))
+ return doRename(src, dest, overwrite, isChangingCase)
+}
+
+function isParentRoot (dest) {
+ const parent = path.dirname(dest)
+ const parsedPath = path.parse(parent)
+ return parsedPath.root === parent
+}
+
+function doRename (src, dest, overwrite, isChangingCase) {
+ if (isChangingCase) return rename(src, dest, overwrite)
+ if (overwrite) {
+ removeSync(dest)
+ return rename(src, dest, overwrite)
+ }
+ if (fs.existsSync(dest)) throw new Error('dest already exists.')
+ return rename(src, dest, overwrite)
+}
+
+function rename (src, dest, overwrite) {
+ try {
+ fs.renameSync(src, dest)
+ } catch (err) {
+ if (err.code !== 'EXDEV') throw err
+ return moveAcrossDevice(src, dest, overwrite)
+ }
+}
+
+function moveAcrossDevice (src, dest, overwrite) {
+ const opts = {
+ overwrite,
+ errorOnExist: true,
+ preserveTimestamps: true
+ }
+ copySync(src, dest, opts)
+ return removeSync(src)
+}
+
+module.exports = moveSync
+
+
+/***/ }),
+
+/***/ 72231:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+"use strict";
+
+
+const fs = __nccwpck_require__(77758)
+const path = __nccwpck_require__(71017)
+const copy = (__nccwpck_require__(61335).copy)
+const remove = (__nccwpck_require__(47357).remove)
+const mkdirp = (__nccwpck_require__(98605).mkdirp)
+const pathExists = (__nccwpck_require__(43835).pathExists)
+const stat = __nccwpck_require__(73901)
+
+function move (src, dest, opts, cb) {
+ if (typeof opts === 'function') {
+ cb = opts
+ opts = {}
+ }
+
+ opts = opts || {}
+
+ const overwrite = opts.overwrite || opts.clobber || false
+
+ stat.checkPaths(src, dest, 'move', opts, (err, stats) => {
+ if (err) return cb(err)
+ const { srcStat, isChangingCase = false } = stats
+ stat.checkParentPaths(src, srcStat, dest, 'move', err => {
+ if (err) return cb(err)
+ if (isParentRoot(dest)) return doRename(src, dest, overwrite, isChangingCase, cb)
+ mkdirp(path.dirname(dest), err => {
+ if (err) return cb(err)
+ return doRename(src, dest, overwrite, isChangingCase, cb)
+ })
+ })
+ })
+}
+
+function isParentRoot (dest) {
+ const parent = path.dirname(dest)
+ const parsedPath = path.parse(parent)
+ return parsedPath.root === parent
+}
+
+function doRename (src, dest, overwrite, isChangingCase, cb) {
+ if (isChangingCase) return rename(src, dest, overwrite, cb)
+ if (overwrite) {
+ return remove(dest, err => {
+ if (err) return cb(err)
+ return rename(src, dest, overwrite, cb)
+ })
+ }
+ pathExists(dest, (err, destExists) => {
+ if (err) return cb(err)
+ if (destExists) return cb(new Error('dest already exists.'))
+ return rename(src, dest, overwrite, cb)
+ })
+}
+
+function rename (src, dest, overwrite, cb) {
+ fs.rename(src, dest, err => {
+ if (!err) return cb()
+ if (err.code !== 'EXDEV') return cb(err)
+ return moveAcrossDevice(src, dest, overwrite, cb)
+ })
+}
+
+function moveAcrossDevice (src, dest, overwrite, cb) {
+ const opts = {
+ overwrite,
+ errorOnExist: true,
+ preserveTimestamps: true
+ }
+ copy(src, dest, opts, err => {
+ if (err) return cb(err)
+ return remove(src, cb)
+ })
+}
+
+module.exports = move
+
+
+/***/ }),
+
+/***/ 91832:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+"use strict";
+
+
+const u = (__nccwpck_require__(9046).fromCallback)
+const fs = __nccwpck_require__(77758)
+const path = __nccwpck_require__(71017)
+const mkdir = __nccwpck_require__(98605)
+const pathExists = (__nccwpck_require__(43835).pathExists)
+
+function outputFile (file, data, encoding, callback) {
+ if (typeof encoding === 'function') {
+ callback = encoding
+ encoding = 'utf8'
+ }
+
+ const dir = path.dirname(file)
+ pathExists(dir, (err, itDoes) => {
+ if (err) return callback(err)
+ if (itDoes) return fs.writeFile(file, data, encoding, callback)
+
+ mkdir.mkdirs(dir, err => {
+ if (err) return callback(err)
+
+ fs.writeFile(file, data, encoding, callback)
+ })
+ })
+}
+
+function outputFileSync (file, ...args) {
+ const dir = path.dirname(file)
+ if (fs.existsSync(dir)) {
+ return fs.writeFileSync(file, ...args)
+ }
+ mkdir.mkdirsSync(dir)
+ fs.writeFileSync(file, ...args)
+}
+
+module.exports = {
+ outputFile: u(outputFile),
+ outputFileSync
+}
+
+
+/***/ }),
+
+/***/ 43835:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+"use strict";
+
+const u = (__nccwpck_require__(9046).fromPromise)
+const fs = __nccwpck_require__(61176)
+
+function pathExists (path) {
+ return fs.access(path).then(() => true).catch(() => false)
+}
+
+module.exports = {
+ pathExists: u(pathExists),
+ pathExistsSync: fs.existsSync
+}
+
+
+/***/ }),
+
+/***/ 47357:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+"use strict";
+
+
+const fs = __nccwpck_require__(77758)
+const u = (__nccwpck_require__(9046).fromCallback)
+
+function remove (path, callback) {
+ fs.rm(path, { recursive: true, force: true }, callback)
+}
+
+function removeSync (path) {
+ fs.rmSync(path, { recursive: true, force: true })
+}
+
+module.exports = {
+ remove: u(remove),
+ removeSync
+}
+
+
+/***/ }),
+
+/***/ 73901:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+"use strict";
+
+
+const fs = __nccwpck_require__(61176)
+const path = __nccwpck_require__(71017)
+const util = __nccwpck_require__(73837)
+
+function getStats (src, dest, opts) {
+ const statFunc = opts.dereference
+ ? (file) => fs.stat(file, { bigint: true })
+ : (file) => fs.lstat(file, { bigint: true })
+ return Promise.all([
+ statFunc(src),
+ statFunc(dest).catch(err => {
+ if (err.code === 'ENOENT') return null
+ throw err
+ })
+ ]).then(([srcStat, destStat]) => ({ srcStat, destStat }))
+}
+
+function getStatsSync (src, dest, opts) {
+ let destStat
+ const statFunc = opts.dereference
+ ? (file) => fs.statSync(file, { bigint: true })
+ : (file) => fs.lstatSync(file, { bigint: true })
+ const srcStat = statFunc(src)
+ try {
+ destStat = statFunc(dest)
+ } catch (err) {
+ if (err.code === 'ENOENT') return { srcStat, destStat: null }
+ throw err
+ }
+ return { srcStat, destStat }
+}
+
+function checkPaths (src, dest, funcName, opts, cb) {
+ util.callbackify(getStats)(src, dest, opts, (err, stats) => {
+ if (err) return cb(err)
+ const { srcStat, destStat } = stats
+
+ if (destStat) {
+ if (areIdentical(srcStat, destStat)) {
+ const srcBaseName = path.basename(src)
+ const destBaseName = path.basename(dest)
+ if (funcName === 'move' &&
+ srcBaseName !== destBaseName &&
+ srcBaseName.toLowerCase() === destBaseName.toLowerCase()) {
+ return cb(null, { srcStat, destStat, isChangingCase: true })
+ }
+ return cb(new Error('Source and destination must not be the same.'))
+ }
+ if (srcStat.isDirectory() && !destStat.isDirectory()) {
+ return cb(new Error(`Cannot overwrite non-directory '${dest}' with directory '${src}'.`))
+ }
+ if (!srcStat.isDirectory() && destStat.isDirectory()) {
+ return cb(new Error(`Cannot overwrite directory '${dest}' with non-directory '${src}'.`))
+ }
+ }
+
+ if (srcStat.isDirectory() && isSrcSubdir(src, dest)) {
+ return cb(new Error(errMsg(src, dest, funcName)))
+ }
+ return cb(null, { srcStat, destStat })
+ })
+}
+
+function checkPathsSync (src, dest, funcName, opts) {
+ const { srcStat, destStat } = getStatsSync(src, dest, opts)
+
+ if (destStat) {
+ if (areIdentical(srcStat, destStat)) {
+ const srcBaseName = path.basename(src)
+ const destBaseName = path.basename(dest)
+ if (funcName === 'move' &&
+ srcBaseName !== destBaseName &&
+ srcBaseName.toLowerCase() === destBaseName.toLowerCase()) {
+ return { srcStat, destStat, isChangingCase: true }
+ }
+ throw new Error('Source and destination must not be the same.')
+ }
+ if (srcStat.isDirectory() && !destStat.isDirectory()) {
+ throw new Error(`Cannot overwrite non-directory '${dest}' with directory '${src}'.`)
+ }
+ if (!srcStat.isDirectory() && destStat.isDirectory()) {
+ throw new Error(`Cannot overwrite directory '${dest}' with non-directory '${src}'.`)
+ }
+ }
+
+ if (srcStat.isDirectory() && isSrcSubdir(src, dest)) {
+ throw new Error(errMsg(src, dest, funcName))
+ }
+ return { srcStat, destStat }
+}
+
+// recursively check if dest parent is a subdirectory of src.
+// It works for all file types including symlinks since it
+// checks the src and dest inodes. It starts from the deepest
+// parent and stops once it reaches the src parent or the root path.
+function checkParentPaths (src, srcStat, dest, funcName, cb) {
+ const srcParent = path.resolve(path.dirname(src))
+ const destParent = path.resolve(path.dirname(dest))
+ if (destParent === srcParent || destParent === path.parse(destParent).root) return cb()
+ fs.stat(destParent, { bigint: true }, (err, destStat) => {
+ if (err) {
+ if (err.code === 'ENOENT') return cb()
+ return cb(err)
+ }
+ if (areIdentical(srcStat, destStat)) {
+ return cb(new Error(errMsg(src, dest, funcName)))
+ }
+ return checkParentPaths(src, srcStat, destParent, funcName, cb)
+ })
+}
+
+function checkParentPathsSync (src, srcStat, dest, funcName) {
+ const srcParent = path.resolve(path.dirname(src))
+ const destParent = path.resolve(path.dirname(dest))
+ if (destParent === srcParent || destParent === path.parse(destParent).root) return
+ let destStat
+ try {
+ destStat = fs.statSync(destParent, { bigint: true })
+ } catch (err) {
+ if (err.code === 'ENOENT') return
+ throw err
+ }
+ if (areIdentical(srcStat, destStat)) {
+ throw new Error(errMsg(src, dest, funcName))
+ }
+ return checkParentPathsSync(src, srcStat, destParent, funcName)
+}
+
+function areIdentical (srcStat, destStat) {
+ return destStat.ino && destStat.dev && destStat.ino === srcStat.ino && destStat.dev === srcStat.dev
+}
+
+// return true if dest is a subdir of src, otherwise false.
+// It only checks the path strings.
+function isSrcSubdir (src, dest) {
+ const srcArr = path.resolve(src).split(path.sep).filter(i => i)
+ const destArr = path.resolve(dest).split(path.sep).filter(i => i)
+ return srcArr.reduce((acc, cur, i) => acc && destArr[i] === cur, true)
+}
+
+function errMsg (src, dest, funcName) {
+ return `Cannot ${funcName} '${src}' to a subdirectory of itself, '${dest}'.`
+}
+
+module.exports = {
+ checkPaths,
+ checkPathsSync,
+ checkParentPaths,
+ checkParentPathsSync,
+ isSrcSubdir,
+ areIdentical
+}
+
+
+/***/ }),
+
+/***/ 52548:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+"use strict";
+
+
+const fs = __nccwpck_require__(77758)
+
+function utimesMillis (path, atime, mtime, callback) {
+ // if (!HAS_MILLIS_RES) return fs.utimes(path, atime, mtime, callback)
+ fs.open(path, 'r+', (err, fd) => {
+ if (err) return callback(err)
+ fs.futimes(fd, atime, mtime, futimesErr => {
+ fs.close(fd, closeErr => {
+ if (callback) callback(futimesErr || closeErr)
+ })
+ })
+ })
+}
+
+function utimesMillisSync (path, atime, mtime) {
+ const fd = fs.openSync(path, 'r+')
+ fs.futimesSync(fd, atime, mtime)
+ return fs.closeSync(fd)
+}
+
+module.exports = {
+ utimesMillis,
+ utimesMillisSync
+}
+
+
+/***/ }),
+
+/***/ 67356:
+/***/ ((module) => {
+
+"use strict";
+
+
+module.exports = clone
+
+var getPrototypeOf = Object.getPrototypeOf || function (obj) {
+ return obj.__proto__
+}
+
+function clone (obj) {
+ if (obj === null || typeof obj !== 'object')
+ return obj
+
+ if (obj instanceof Object)
+ var copy = { __proto__: getPrototypeOf(obj) }
+ else
+ var copy = Object.create(null)
+
+ Object.getOwnPropertyNames(obj).forEach(function (key) {
+ Object.defineProperty(copy, key, Object.getOwnPropertyDescriptor(obj, key))
+ })
+
+ return copy
+}
+
+
+/***/ }),
+
+/***/ 77758:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+var fs = __nccwpck_require__(57147)
+var polyfills = __nccwpck_require__(20263)
+var legacy = __nccwpck_require__(73086)
+var clone = __nccwpck_require__(67356)
+
+var util = __nccwpck_require__(73837)
+
+/* istanbul ignore next - node 0.x polyfill */
+var gracefulQueue
+var previousSymbol
+
+/* istanbul ignore else - node 0.x polyfill */
+if (typeof Symbol === 'function' && typeof Symbol.for === 'function') {
+ gracefulQueue = Symbol.for('graceful-fs.queue')
+ // This is used in testing by future versions
+ previousSymbol = Symbol.for('graceful-fs.previous')
+} else {
+ gracefulQueue = '___graceful-fs.queue'
+ previousSymbol = '___graceful-fs.previous'
+}
+
+function noop () {}
+
+function publishQueue(context, queue) {
+ Object.defineProperty(context, gracefulQueue, {
+ get: function() {
+ return queue
+ }
+ })
+}
+
+var debug = noop
+if (util.debuglog)
+ debug = util.debuglog('gfs4')
+else if (/\bgfs4\b/i.test(process.env.NODE_DEBUG || ''))
+ debug = function() {
+ var m = util.format.apply(util, arguments)
+ m = 'GFS4: ' + m.split(/\n/).join('\nGFS4: ')
+ console.error(m)
+ }
+
+// Once time initialization
+if (!fs[gracefulQueue]) {
+ // This queue can be shared by multiple loaded instances
+ var queue = global[gracefulQueue] || []
+ publishQueue(fs, queue)
+
+ // Patch fs.close/closeSync to shared queue version, because we need
+ // to retry() whenever a close happens *anywhere* in the program.
+ // This is essential when multiple graceful-fs instances are
+ // in play at the same time.
+ fs.close = (function (fs$close) {
+ function close (fd, cb) {
+ return fs$close.call(fs, fd, function (err) {
+ // This function uses the graceful-fs shared queue
+ if (!err) {
+ resetQueue()
+ }
+
+ if (typeof cb === 'function')
+ cb.apply(this, arguments)
+ })
+ }
+
+ Object.defineProperty(close, previousSymbol, {
+ value: fs$close
+ })
+ return close
+ })(fs.close)
+
+ fs.closeSync = (function (fs$closeSync) {
+ function closeSync (fd) {
+ // This function uses the graceful-fs shared queue
+ fs$closeSync.apply(fs, arguments)
+ resetQueue()
+ }
+
+ Object.defineProperty(closeSync, previousSymbol, {
+ value: fs$closeSync
+ })
+ return closeSync
+ })(fs.closeSync)
+
+ if (/\bgfs4\b/i.test(process.env.NODE_DEBUG || '')) {
+ process.on('exit', function() {
+ debug(fs[gracefulQueue])
+ __nccwpck_require__(39491).equal(fs[gracefulQueue].length, 0)
+ })
+ }
+}
+
+if (!global[gracefulQueue]) {
+ publishQueue(global, fs[gracefulQueue]);
+}
+
+module.exports = patch(clone(fs))
+if (process.env.TEST_GRACEFUL_FS_GLOBAL_PATCH && !fs.__patched) {
+ module.exports = patch(fs)
+ fs.__patched = true;
+}
+
+function patch (fs) {
+ // Everything that references the open() function needs to be in here
+ polyfills(fs)
+ fs.gracefulify = patch
+
+ fs.createReadStream = createReadStream
+ fs.createWriteStream = createWriteStream
+ var fs$readFile = fs.readFile
+ fs.readFile = readFile
+ function readFile (path, options, cb) {
+ if (typeof options === 'function')
+ cb = options, options = null
+
+ return go$readFile(path, options, cb)
+
+ function go$readFile (path, options, cb, startTime) {
+ return fs$readFile(path, options, function (err) {
+ if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))
+ enqueue([go$readFile, [path, options, cb], err, startTime || Date.now(), Date.now()])
+ else {
+ if (typeof cb === 'function')
+ cb.apply(this, arguments)
+ }
+ })
+ }
+ }
+
+ var fs$writeFile = fs.writeFile
+ fs.writeFile = writeFile
+ function writeFile (path, data, options, cb) {
+ if (typeof options === 'function')
+ cb = options, options = null
+
+ return go$writeFile(path, data, options, cb)
+
+ function go$writeFile (path, data, options, cb, startTime) {
+ return fs$writeFile(path, data, options, function (err) {
+ if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))
+ enqueue([go$writeFile, [path, data, options, cb], err, startTime || Date.now(), Date.now()])
+ else {
+ if (typeof cb === 'function')
+ cb.apply(this, arguments)
+ }
+ })
+ }
+ }
+
+ var fs$appendFile = fs.appendFile
+ if (fs$appendFile)
+ fs.appendFile = appendFile
+ function appendFile (path, data, options, cb) {
+ if (typeof options === 'function')
+ cb = options, options = null
+
+ return go$appendFile(path, data, options, cb)
+
+ function go$appendFile (path, data, options, cb, startTime) {
+ return fs$appendFile(path, data, options, function (err) {
+ if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))
+ enqueue([go$appendFile, [path, data, options, cb], err, startTime || Date.now(), Date.now()])
+ else {
+ if (typeof cb === 'function')
+ cb.apply(this, arguments)
+ }
+ })
+ }
+ }
+
+ var fs$copyFile = fs.copyFile
+ if (fs$copyFile)
+ fs.copyFile = copyFile
+ function copyFile (src, dest, flags, cb) {
+ if (typeof flags === 'function') {
+ cb = flags
+ flags = 0
+ }
+ return go$copyFile(src, dest, flags, cb)
+
+ function go$copyFile (src, dest, flags, cb, startTime) {
+ return fs$copyFile(src, dest, flags, function (err) {
+ if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))
+ enqueue([go$copyFile, [src, dest, flags, cb], err, startTime || Date.now(), Date.now()])
+ else {
+ if (typeof cb === 'function')
+ cb.apply(this, arguments)
+ }
+ })
+ }
+ }
+
+ var fs$readdir = fs.readdir
+ fs.readdir = readdir
+ var noReaddirOptionVersions = /^v[0-5]\./
+ function readdir (path, options, cb) {
+ if (typeof options === 'function')
+ cb = options, options = null
+
+ var go$readdir = noReaddirOptionVersions.test(process.version)
+ ? function go$readdir (path, options, cb, startTime) {
+ return fs$readdir(path, fs$readdirCallback(
+ path, options, cb, startTime
+ ))
+ }
+ : function go$readdir (path, options, cb, startTime) {
+ return fs$readdir(path, options, fs$readdirCallback(
+ path, options, cb, startTime
+ ))
+ }
+
+ return go$readdir(path, options, cb)
+
+ function fs$readdirCallback (path, options, cb, startTime) {
+ return function (err, files) {
+ if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))
+ enqueue([
+ go$readdir,
+ [path, options, cb],
+ err,
+ startTime || Date.now(),
+ Date.now()
+ ])
+ else {
+ if (files && files.sort)
+ files.sort()
+
+ if (typeof cb === 'function')
+ cb.call(this, err, files)
+ }
+ }
+ }
+ }
+
+ if (process.version.substr(0, 4) === 'v0.8') {
+ var legStreams = legacy(fs)
+ ReadStream = legStreams.ReadStream
+ WriteStream = legStreams.WriteStream
+ }
+
+ var fs$ReadStream = fs.ReadStream
+ if (fs$ReadStream) {
+ ReadStream.prototype = Object.create(fs$ReadStream.prototype)
+ ReadStream.prototype.open = ReadStream$open
+ }
+
+ var fs$WriteStream = fs.WriteStream
+ if (fs$WriteStream) {
+ WriteStream.prototype = Object.create(fs$WriteStream.prototype)
+ WriteStream.prototype.open = WriteStream$open
+ }
+
+ Object.defineProperty(fs, 'ReadStream', {
+ get: function () {
+ return ReadStream
+ },
+ set: function (val) {
+ ReadStream = val
+ },
+ enumerable: true,
+ configurable: true
+ })
+ Object.defineProperty(fs, 'WriteStream', {
+ get: function () {
+ return WriteStream
+ },
+ set: function (val) {
+ WriteStream = val
+ },
+ enumerable: true,
+ configurable: true
+ })
+
+ // legacy names
+ var FileReadStream = ReadStream
+ Object.defineProperty(fs, 'FileReadStream', {
+ get: function () {
+ return FileReadStream
+ },
+ set: function (val) {
+ FileReadStream = val
+ },
+ enumerable: true,
+ configurable: true
+ })
+ var FileWriteStream = WriteStream
+ Object.defineProperty(fs, 'FileWriteStream', {
+ get: function () {
+ return FileWriteStream
+ },
+ set: function (val) {
+ FileWriteStream = val
+ },
+ enumerable: true,
+ configurable: true
+ })
+
+ function ReadStream (path, options) {
+ if (this instanceof ReadStream)
+ return fs$ReadStream.apply(this, arguments), this
+ else
+ return ReadStream.apply(Object.create(ReadStream.prototype), arguments)
+ }
+
+ function ReadStream$open () {
+ var that = this
+ open(that.path, that.flags, that.mode, function (err, fd) {
+ if (err) {
+ if (that.autoClose)
+ that.destroy()
+
+ that.emit('error', err)
+ } else {
+ that.fd = fd
+ that.emit('open', fd)
+ that.read()
+ }
+ })
+ }
+
+ function WriteStream (path, options) {
+ if (this instanceof WriteStream)
+ return fs$WriteStream.apply(this, arguments), this
+ else
+ return WriteStream.apply(Object.create(WriteStream.prototype), arguments)
+ }
+
+ function WriteStream$open () {
+ var that = this
+ open(that.path, that.flags, that.mode, function (err, fd) {
+ if (err) {
+ that.destroy()
+ that.emit('error', err)
+ } else {
+ that.fd = fd
+ that.emit('open', fd)
+ }
+ })
+ }
+
+ function createReadStream (path, options) {
+ return new fs.ReadStream(path, options)
+ }
+
+ function createWriteStream (path, options) {
+ return new fs.WriteStream(path, options)
+ }
+
+ var fs$open = fs.open
+ fs.open = open
+ function open (path, flags, mode, cb) {
+ if (typeof mode === 'function')
+ cb = mode, mode = null
+
+ return go$open(path, flags, mode, cb)
+
+ function go$open (path, flags, mode, cb, startTime) {
+ return fs$open(path, flags, mode, function (err, fd) {
+ if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))
+ enqueue([go$open, [path, flags, mode, cb], err, startTime || Date.now(), Date.now()])
+ else {
+ if (typeof cb === 'function')
+ cb.apply(this, arguments)
+ }
+ })
+ }
+ }
+
+ return fs
+}
+
+function enqueue (elem) {
+ debug('ENQUEUE', elem[0].name, elem[1])
+ fs[gracefulQueue].push(elem)
+ retry()
+}
+
+// keep track of the timeout between retry() calls
+var retryTimer
+
+// reset the startTime and lastTime to now
+// this resets the start of the 60 second overall timeout as well as the
+// delay between attempts so that we'll retry these jobs sooner
+function resetQueue () {
+ var now = Date.now()
+ for (var i = 0; i < fs[gracefulQueue].length; ++i) {
+ // entries that are only a length of 2 are from an older version, don't
+ // bother modifying those since they'll be retried anyway.
+ if (fs[gracefulQueue][i].length > 2) {
+ fs[gracefulQueue][i][3] = now // startTime
+ fs[gracefulQueue][i][4] = now // lastTime
+ }
+ }
+ // call retry to make sure we're actively processing the queue
+ retry()
+}
+
+function retry () {
+ // clear the timer and remove it to help prevent unintended concurrency
+ clearTimeout(retryTimer)
+ retryTimer = undefined
+
+ if (fs[gracefulQueue].length === 0)
+ return
+
+ var elem = fs[gracefulQueue].shift()
+ var fn = elem[0]
+ var args = elem[1]
+ // these items may be unset if they were added by an older graceful-fs
+ var err = elem[2]
+ var startTime = elem[3]
+ var lastTime = elem[4]
+
+ // if we don't have a startTime we have no way of knowing if we've waited
+ // long enough, so go ahead and retry this item now
+ if (startTime === undefined) {
+ debug('RETRY', fn.name, args)
+ fn.apply(null, args)
+ } else if (Date.now() - startTime >= 60000) {
+ // it's been more than 60 seconds total, bail now
+ debug('TIMEOUT', fn.name, args)
+ var cb = args.pop()
+ if (typeof cb === 'function')
+ cb.call(null, err)
+ } else {
+ // the amount of time between the last attempt and right now
+ var sinceAttempt = Date.now() - lastTime
+ // the amount of time between when we first tried, and when we last tried
+ // rounded up to at least 1
+ var sinceStart = Math.max(lastTime - startTime, 1)
+ // backoff. wait longer than the total time we've been retrying, but only
+ // up to a maximum of 100ms
+ var desiredDelay = Math.min(sinceStart * 1.2, 100)
+ // it's been long enough since the last retry, do it again
+ if (sinceAttempt >= desiredDelay) {
+ debug('RETRY', fn.name, args)
+ fn.apply(null, args.concat([startTime]))
+ } else {
+ // if we can't do this job yet, push it to the end of the queue
+ // and let the next iteration check again
+ fs[gracefulQueue].push(elem)
+ }
+ }
+
+ // schedule our next run if one isn't already scheduled
+ if (retryTimer === undefined) {
+ retryTimer = setTimeout(retry, 0)
+ }
+}
+
+
+/***/ }),
+
+/***/ 73086:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+var Stream = (__nccwpck_require__(12781).Stream)
+
+module.exports = legacy
+
+function legacy (fs) {
+ return {
+ ReadStream: ReadStream,
+ WriteStream: WriteStream
+ }
+
+ function ReadStream (path, options) {
+ if (!(this instanceof ReadStream)) return new ReadStream(path, options);
+
+ Stream.call(this);
+
+ var self = this;
+
+ this.path = path;
+ this.fd = null;
+ this.readable = true;
+ this.paused = false;
+
+ this.flags = 'r';
+ this.mode = 438; /*=0666*/
+ this.bufferSize = 64 * 1024;
+
+ options = options || {};
+
+ // Mixin options into this
+ var keys = Object.keys(options);
+ for (var index = 0, length = keys.length; index < length; index++) {
+ var key = keys[index];
+ this[key] = options[key];
+ }
+
+ if (this.encoding) this.setEncoding(this.encoding);
+
+ if (this.start !== undefined) {
+ if ('number' !== typeof this.start) {
+ throw TypeError('start must be a Number');
+ }
+ if (this.end === undefined) {
+ this.end = Infinity;
+ } else if ('number' !== typeof this.end) {
+ throw TypeError('end must be a Number');
+ }
+
+ if (this.start > this.end) {
+ throw new Error('start must be <= end');
+ }
+
+ this.pos = this.start;
+ }
+
+ if (this.fd !== null) {
+ process.nextTick(function() {
+ self._read();
+ });
+ return;
+ }
+
+ fs.open(this.path, this.flags, this.mode, function (err, fd) {
+ if (err) {
+ self.emit('error', err);
+ self.readable = false;
+ return;
+ }
+
+ self.fd = fd;
+ self.emit('open', fd);
+ self._read();
+ })
+ }
+
+ function WriteStream (path, options) {
+ if (!(this instanceof WriteStream)) return new WriteStream(path, options);
+
+ Stream.call(this);
+
+ this.path = path;
+ this.fd = null;
+ this.writable = true;
+
+ this.flags = 'w';
+ this.encoding = 'binary';
+ this.mode = 438; /*=0666*/
+ this.bytesWritten = 0;
+
+ options = options || {};
+
+ // Mixin options into this
+ var keys = Object.keys(options);
+ for (var index = 0, length = keys.length; index < length; index++) {
+ var key = keys[index];
+ this[key] = options[key];
+ }
+
+ if (this.start !== undefined) {
+ if ('number' !== typeof this.start) {
+ throw TypeError('start must be a Number');
+ }
+ if (this.start < 0) {
+ throw new Error('start must be >= zero');
+ }
+
+ this.pos = this.start;
+ }
+
+ this.busy = false;
+ this._queue = [];
+
+ if (this.fd === null) {
+ this._open = fs.open;
+ this._queue.push([this._open, this.path, this.flags, this.mode, undefined]);
+ this.flush();
+ }
+ }
+}
+
+
+/***/ }),
+
+/***/ 20263:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+var constants = __nccwpck_require__(22057)
+
+var origCwd = process.cwd
+var cwd = null
+
+var platform = process.env.GRACEFUL_FS_PLATFORM || process.platform
+
+process.cwd = function() {
+ if (!cwd)
+ cwd = origCwd.call(process)
+ return cwd
+}
+try {
+ process.cwd()
+} catch (er) {}
+
+// This check is needed until node.js 12 is required
+if (typeof process.chdir === 'function') {
+ var chdir = process.chdir
+ process.chdir = function (d) {
+ cwd = null
+ chdir.call(process, d)
+ }
+ if (Object.setPrototypeOf) Object.setPrototypeOf(process.chdir, chdir)
+}
+
+module.exports = patch
+
+function patch (fs) {
+ // (re-)implement some things that are known busted or missing.
+
+ // lchmod, broken prior to 0.6.2
+ // back-port the fix here.
+ if (constants.hasOwnProperty('O_SYMLINK') &&
+ process.version.match(/^v0\.6\.[0-2]|^v0\.5\./)) {
+ patchLchmod(fs)
+ }
+
+ // lutimes implementation, or no-op
+ if (!fs.lutimes) {
+ patchLutimes(fs)
+ }
+
+ // https://github.com/isaacs/node-graceful-fs/issues/4
+ // Chown should not fail on einval or eperm if non-root.
+ // It should not fail on enosys ever, as this just indicates
+ // that a fs doesn't support the intended operation.
+
+ fs.chown = chownFix(fs.chown)
+ fs.fchown = chownFix(fs.fchown)
+ fs.lchown = chownFix(fs.lchown)
+
+ fs.chmod = chmodFix(fs.chmod)
+ fs.fchmod = chmodFix(fs.fchmod)
+ fs.lchmod = chmodFix(fs.lchmod)
+
+ fs.chownSync = chownFixSync(fs.chownSync)
+ fs.fchownSync = chownFixSync(fs.fchownSync)
+ fs.lchownSync = chownFixSync(fs.lchownSync)
+
+ fs.chmodSync = chmodFixSync(fs.chmodSync)
+ fs.fchmodSync = chmodFixSync(fs.fchmodSync)
+ fs.lchmodSync = chmodFixSync(fs.lchmodSync)
+
+ fs.stat = statFix(fs.stat)
+ fs.fstat = statFix(fs.fstat)
+ fs.lstat = statFix(fs.lstat)
+
+ fs.statSync = statFixSync(fs.statSync)
+ fs.fstatSync = statFixSync(fs.fstatSync)
+ fs.lstatSync = statFixSync(fs.lstatSync)
+
+ // if lchmod/lchown do not exist, then make them no-ops
+ if (fs.chmod && !fs.lchmod) {
+ fs.lchmod = function (path, mode, cb) {
+ if (cb) process.nextTick(cb)
+ }
+ fs.lchmodSync = function () {}
+ }
+ if (fs.chown && !fs.lchown) {
+ fs.lchown = function (path, uid, gid, cb) {
+ if (cb) process.nextTick(cb)
+ }
+ fs.lchownSync = function () {}
+ }
+
+ // on Windows, A/V software can lock the directory, causing this
+ // to fail with an EACCES or EPERM if the directory contains newly
+ // created files. Try again on failure, for up to 60 seconds.
+
+ // Set the timeout this long because some Windows Anti-Virus, such as Parity
+ // bit9, may lock files for up to a minute, causing npm package install
+ // failures. Also, take care to yield the scheduler. Windows scheduling gives
+ // CPU to a busy looping process, which can cause the program causing the lock
+ // contention to be starved of CPU by node, so the contention doesn't resolve.
+ if (platform === "win32") {
+ fs.rename = typeof fs.rename !== 'function' ? fs.rename
+ : (function (fs$rename) {
+ function rename (from, to, cb) {
+ var start = Date.now()
+ var backoff = 0;
+ fs$rename(from, to, function CB (er) {
+ if (er
+ && (er.code === "EACCES" || er.code === "EPERM" || er.code === "EBUSY")
+ && Date.now() - start < 60000) {
+ setTimeout(function() {
+ fs.stat(to, function (stater, st) {
+ if (stater && stater.code === "ENOENT")
+ fs$rename(from, to, CB);
+ else
+ cb(er)
+ })
+ }, backoff)
+ if (backoff < 100)
+ backoff += 10;
+ return;
+ }
+ if (cb) cb(er)
+ })
+ }
+ if (Object.setPrototypeOf) Object.setPrototypeOf(rename, fs$rename)
+ return rename
+ })(fs.rename)
+ }
+
+ // if read() returns EAGAIN, then just try it again.
+ fs.read = typeof fs.read !== 'function' ? fs.read
+ : (function (fs$read) {
+ function read (fd, buffer, offset, length, position, callback_) {
+ var callback
+ if (callback_ && typeof callback_ === 'function') {
+ var eagCounter = 0
+ callback = function (er, _, __) {
+ if (er && er.code === 'EAGAIN' && eagCounter < 10) {
+ eagCounter ++
+ return fs$read.call(fs, fd, buffer, offset, length, position, callback)
+ }
+ callback_.apply(this, arguments)
+ }
+ }
+ return fs$read.call(fs, fd, buffer, offset, length, position, callback)
+ }
+
+ // This ensures `util.promisify` works as it does for native `fs.read`.
+ if (Object.setPrototypeOf) Object.setPrototypeOf(read, fs$read)
+ return read
+ })(fs.read)
+
+ fs.readSync = typeof fs.readSync !== 'function' ? fs.readSync
+ : (function (fs$readSync) { return function (fd, buffer, offset, length, position) {
+ var eagCounter = 0
+ while (true) {
+ try {
+ return fs$readSync.call(fs, fd, buffer, offset, length, position)
+ } catch (er) {
+ if (er.code === 'EAGAIN' && eagCounter < 10) {
+ eagCounter ++
+ continue
+ }
+ throw er
+ }
+ }
+ }})(fs.readSync)
+
+ function patchLchmod (fs) {
+ fs.lchmod = function (path, mode, callback) {
+ fs.open( path
+ , constants.O_WRONLY | constants.O_SYMLINK
+ , mode
+ , function (err, fd) {
+ if (err) {
+ if (callback) callback(err)
+ return
+ }
+ // prefer to return the chmod error, if one occurs,
+ // but still try to close, and report closing errors if they occur.
+ fs.fchmod(fd, mode, function (err) {
+ fs.close(fd, function(err2) {
+ if (callback) callback(err || err2)
+ })
+ })
+ })
+ }
+
+ fs.lchmodSync = function (path, mode) {
+ var fd = fs.openSync(path, constants.O_WRONLY | constants.O_SYMLINK, mode)
+
+ // prefer to return the chmod error, if one occurs,
+ // but still try to close, and report closing errors if they occur.
+ var threw = true
+ var ret
+ try {
+ ret = fs.fchmodSync(fd, mode)
+ threw = false
+ } finally {
+ if (threw) {
+ try {
+ fs.closeSync(fd)
+ } catch (er) {}
+ } else {
+ fs.closeSync(fd)
+ }
+ }
+ return ret
+ }
+ }
+
+ function patchLutimes (fs) {
+ if (constants.hasOwnProperty("O_SYMLINK") && fs.futimes) {
+ fs.lutimes = function (path, at, mt, cb) {
+ fs.open(path, constants.O_SYMLINK, function (er, fd) {
+ if (er) {
+ if (cb) cb(er)
+ return
+ }
+ fs.futimes(fd, at, mt, function (er) {
+ fs.close(fd, function (er2) {
+ if (cb) cb(er || er2)
+ })
+ })
+ })
+ }
+
+ fs.lutimesSync = function (path, at, mt) {
+ var fd = fs.openSync(path, constants.O_SYMLINK)
+ var ret
+ var threw = true
+ try {
+ ret = fs.futimesSync(fd, at, mt)
+ threw = false
+ } finally {
+ if (threw) {
+ try {
+ fs.closeSync(fd)
+ } catch (er) {}
+ } else {
+ fs.closeSync(fd)
+ }
+ }
+ return ret
+ }
+
+ } else if (fs.futimes) {
+ fs.lutimes = function (_a, _b, _c, cb) { if (cb) process.nextTick(cb) }
+ fs.lutimesSync = function () {}
+ }
+ }
+
+ function chmodFix (orig) {
+ if (!orig) return orig
+ return function (target, mode, cb) {
+ return orig.call(fs, target, mode, function (er) {
+ if (chownErOk(er)) er = null
+ if (cb) cb.apply(this, arguments)
+ })
+ }
+ }
+
+ function chmodFixSync (orig) {
+ if (!orig) return orig
+ return function (target, mode) {
+ try {
+ return orig.call(fs, target, mode)
+ } catch (er) {
+ if (!chownErOk(er)) throw er
+ }
+ }
+ }
+
+
+ function chownFix (orig) {
+ if (!orig) return orig
+ return function (target, uid, gid, cb) {
+ return orig.call(fs, target, uid, gid, function (er) {
+ if (chownErOk(er)) er = null
+ if (cb) cb.apply(this, arguments)
+ })
+ }
+ }
+
+ function chownFixSync (orig) {
+ if (!orig) return orig
+ return function (target, uid, gid) {
+ try {
+ return orig.call(fs, target, uid, gid)
+ } catch (er) {
+ if (!chownErOk(er)) throw er
+ }
+ }
+ }
+
+ function statFix (orig) {
+ if (!orig) return orig
+ // Older versions of Node erroneously returned signed integers for
+ // uid + gid.
+ return function (target, options, cb) {
+ if (typeof options === 'function') {
+ cb = options
+ options = null
+ }
+ function callback (er, stats) {
+ if (stats) {
+ if (stats.uid < 0) stats.uid += 0x100000000
+ if (stats.gid < 0) stats.gid += 0x100000000
+ }
+ if (cb) cb.apply(this, arguments)
+ }
+ return options ? orig.call(fs, target, options, callback)
+ : orig.call(fs, target, callback)
+ }
+ }
+
+ function statFixSync (orig) {
+ if (!orig) return orig
+ // Older versions of Node erroneously returned signed integers for
+ // uid + gid.
+ return function (target, options) {
+ var stats = options ? orig.call(fs, target, options)
+ : orig.call(fs, target)
+ if (stats) {
+ if (stats.uid < 0) stats.uid += 0x100000000
+ if (stats.gid < 0) stats.gid += 0x100000000
+ }
+ return stats;
+ }
+ }
+
+ // ENOSYS means that the fs doesn't support the op. Just ignore
+ // that, because it doesn't matter.
+ //
+ // if there's no getuid, or if getuid() is something other
+ // than 0, and the error is EINVAL or EPERM, then just ignore
+ // it.
+ //
+ // This specific case is a silent failure in cp, install, tar,
+ // and most other unix tools that manage permissions.
+ //
+ // When running as root, or if other types of errors are
+ // encountered, then it's strict.
+ function chownErOk (er) {
+ if (!er)
+ return true
+
+ if (er.code === "ENOSYS")
+ return true
+
+ var nonroot = !process.getuid || process.getuid() !== 0
+ if (nonroot) {
+ if (er.code === "EINVAL" || er.code === "EPERM")
+ return true
+ }
+
+ return false
+ }
+}
+
+
+/***/ }),
+
+/***/ 31621:
+/***/ ((module) => {
+
+"use strict";
+
+
+module.exports = (flag, argv = process.argv) => {
+ const prefix = flag.startsWith('-') ? '' : (flag.length === 1 ? '-' : '--');
+ const position = argv.indexOf(prefix + flag);
+ const terminatorPosition = argv.indexOf('--');
+ return position !== -1 && (terminatorPosition === -1 || position < terminatorPosition);
+};
+
+
+/***/ }),
+
+/***/ 64882:
+/***/ ((module) => {
+
+"use strict";
+/* eslint-disable yoda */
+
+
+const isFullwidthCodePoint = codePoint => {
+ if (Number.isNaN(codePoint)) {
+ return false;
+ }
+
+ // Code points are derived from:
+ // http://www.unix.org/Public/UNIDATA/EastAsianWidth.txt
+ if (
+ codePoint >= 0x1100 && (
+ codePoint <= 0x115F || // Hangul Jamo
+ codePoint === 0x2329 || // LEFT-POINTING ANGLE BRACKET
+ codePoint === 0x232A || // RIGHT-POINTING ANGLE BRACKET
+ // CJK Radicals Supplement .. Enclosed CJK Letters and Months
+ (0x2E80 <= codePoint && codePoint <= 0x3247 && codePoint !== 0x303F) ||
+ // Enclosed CJK Letters and Months .. CJK Unified Ideographs Extension A
+ (0x3250 <= codePoint && codePoint <= 0x4DBF) ||
+ // CJK Unified Ideographs .. Yi Radicals
+ (0x4E00 <= codePoint && codePoint <= 0xA4C6) ||
+ // Hangul Jamo Extended-A
+ (0xA960 <= codePoint && codePoint <= 0xA97C) ||
+ // Hangul Syllables
+ (0xAC00 <= codePoint && codePoint <= 0xD7A3) ||
+ // CJK Compatibility Ideographs
+ (0xF900 <= codePoint && codePoint <= 0xFAFF) ||
+ // Vertical Forms
+ (0xFE10 <= codePoint && codePoint <= 0xFE19) ||
+ // CJK Compatibility Forms .. Small Form Variants
+ (0xFE30 <= codePoint && codePoint <= 0xFE6B) ||
+ // Halfwidth and Fullwidth Forms
+ (0xFF01 <= codePoint && codePoint <= 0xFF60) ||
+ (0xFFE0 <= codePoint && codePoint <= 0xFFE6) ||
+ // Kana Supplement
+ (0x1B000 <= codePoint && codePoint <= 0x1B001) ||
+ // Enclosed Ideographic Supplement
+ (0x1F200 <= codePoint && codePoint <= 0x1F251) ||
+ // CJK Unified Ideographs Extension B .. Tertiary Ideographic Plane
+ (0x20000 <= codePoint && codePoint <= 0x3FFFD)
+ )
+ ) {
+ return true;
+ }
+
+ return false;
+};
+
+module.exports = isFullwidthCodePoint;
+module.exports["default"] = isFullwidthCodePoint;
+
+
+/***/ }),
+
+/***/ 63287:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+
+/*!
+ * is-plain-object
+ *
+ * Copyright (c) 2014-2017, Jon Schlinkert.
+ * Released under the MIT License.
+ */
+
+function isObject(o) {
+ return Object.prototype.toString.call(o) === '[object Object]';
+}
+
+function isPlainObject(o) {
+ var ctor,prot;
+
+ if (isObject(o) === false) return false;
+
+ // If has modified constructor
+ ctor = o.constructor;
+ if (ctor === undefined) return true;
+
+ // If has modified prototype
+ prot = ctor.prototype;
+ if (isObject(prot) === false) return false;
+
+ // If constructor does not have an Object-specific method
+ if (prot.hasOwnProperty('isPrototypeOf') === false) {
+ return false;
+ }
+
+ // Most likely a plain Object
+ return true;
+}
+
+exports.isPlainObject = isPlainObject;
+
+
+/***/ }),
+
+/***/ 26160:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+let _fs
+try {
+ _fs = __nccwpck_require__(77758)
+} catch (_) {
+ _fs = __nccwpck_require__(57147)
+}
+const universalify = __nccwpck_require__(9046)
+const { stringify, stripBom } = __nccwpck_require__(35902)
+
+async function _readFile (file, options = {}) {
+ if (typeof options === 'string') {
+ options = { encoding: options }
+ }
+
+ const fs = options.fs || _fs
+
+ const shouldThrow = 'throws' in options ? options.throws : true
+
+ let data = await universalify.fromCallback(fs.readFile)(file, options)
+
+ data = stripBom(data)
+
+ let obj
+ try {
+ obj = JSON.parse(data, options ? options.reviver : null)
+ } catch (err) {
+ if (shouldThrow) {
+ err.message = `${file}: ${err.message}`
+ throw err
+ } else {
+ return null
+ }
+ }
+
+ return obj
+}
+
+const readFile = universalify.fromPromise(_readFile)
+
+function readFileSync (file, options = {}) {
+ if (typeof options === 'string') {
+ options = { encoding: options }
+ }
+
+ const fs = options.fs || _fs
+
+ const shouldThrow = 'throws' in options ? options.throws : true
+
+ try {
+ let content = fs.readFileSync(file, options)
+ content = stripBom(content)
+ return JSON.parse(content, options.reviver)
+ } catch (err) {
+ if (shouldThrow) {
+ err.message = `${file}: ${err.message}`
+ throw err
+ } else {
+ return null
+ }
+ }
+}
+
+async function _writeFile (file, obj, options = {}) {
+ const fs = options.fs || _fs
+
+ const str = stringify(obj, options)
+
+ await universalify.fromCallback(fs.writeFile)(file, str, options)
+}
+
+const writeFile = universalify.fromPromise(_writeFile)
+
+function writeFileSync (file, obj, options = {}) {
+ const fs = options.fs || _fs
+
+ const str = stringify(obj, options)
+ // not sure if fs.writeFileSync returns anything, but just in case
+ return fs.writeFileSync(file, str, options)
+}
+
+const jsonfile = {
+ readFile,
+ readFileSync,
+ writeFile,
+ writeFileSync
+}
+
+module.exports = jsonfile
+
+
+/***/ }),
+
+/***/ 35902:
+/***/ ((module) => {
+
+function stringify (obj, { EOL = '\n', finalEOL = true, replacer = null, spaces } = {}) {
+ const EOF = finalEOL ? EOL : ''
+ const str = JSON.stringify(obj, replacer, spaces)
+
+ return str.replace(/\n/g, EOL) + EOF
+}
+
+function stripBom (content) {
+ // we do this because JSON.parse would convert it to a utf8 string if encoding wasn't specified
+ if (Buffer.isBuffer(content)) content = content.toString('utf8')
+ return content.replace(/^\uFEFF/, '')
+}
+
+module.exports = { stringify, stripBom }
+
+
+/***/ }),
+
+/***/ 34436:
+/***/ ((module, exports, __nccwpck_require__) => {
+
+/* module decorator */ module = __nccwpck_require__.nmd(module);
+/**
+ * lodash (Custom Build)
+ * Build: `lodash modularize exports="npm" -o ./`
+ * Copyright jQuery Foundation and other contributors
+ * Released under MIT license
+ * Based on Underscore.js 1.8.3
+ * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
+ */
+
+/** Used as default options for `_.truncate`. */
+var DEFAULT_TRUNC_LENGTH = 30,
+ DEFAULT_TRUNC_OMISSION = '...';
+
+/** Used as references for various `Number` constants. */
+var INFINITY = 1 / 0,
+ MAX_INTEGER = 1.7976931348623157e+308,
+ NAN = 0 / 0;
+
+/** `Object#toString` result references. */
+var regexpTag = '[object RegExp]',
+ symbolTag = '[object Symbol]';
+
+/** Used to match leading and trailing whitespace. */
+var reTrim = /^\s+|\s+$/g;
+
+/** Used to match `RegExp` flags from their coerced string values. */
+var reFlags = /\w*$/;
+
+/** Used to detect bad signed hexadecimal string values. */
+var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;
+
+/** Used to detect binary string values. */
+var reIsBinary = /^0b[01]+$/i;
+
+/** Used to detect octal string values. */
+var reIsOctal = /^0o[0-7]+$/i;
+
+/** Used to compose unicode character classes. */
+var rsAstralRange = '\\ud800-\\udfff',
+ rsComboMarksRange = '\\u0300-\\u036f\\ufe20-\\ufe23',
+ rsComboSymbolsRange = '\\u20d0-\\u20f0',
+ rsVarRange = '\\ufe0e\\ufe0f';
+
+/** Used to compose unicode capture groups. */
+var rsAstral = '[' + rsAstralRange + ']',
+ rsCombo = '[' + rsComboMarksRange + rsComboSymbolsRange + ']',
+ rsFitz = '\\ud83c[\\udffb-\\udfff]',
+ rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',
+ rsNonAstral = '[^' + rsAstralRange + ']',
+ rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}',
+ rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]',
+ rsZWJ = '\\u200d';
+
+/** Used to compose unicode regexes. */
+var reOptMod = rsModifier + '?',
+ rsOptVar = '[' + rsVarRange + ']?',
+ rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',
+ rsSeq = rsOptVar + reOptMod + rsOptJoin,
+ rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';
+
+/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */
+var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');
+
+/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */
+var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboMarksRange + rsComboSymbolsRange + rsVarRange + ']');
+
+/** Built-in method references without a dependency on `root`. */
+var freeParseInt = parseInt;
+
+/** Detect free variable `global` from Node.js. */
+var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;
+
+/** Detect free variable `self`. */
+var freeSelf = typeof self == 'object' && self && self.Object === Object && self;
+
+/** Used as a reference to the global object. */
+var root = freeGlobal || freeSelf || Function('return this')();
+
+/** Detect free variable `exports`. */
+var freeExports = true && exports && !exports.nodeType && exports;
+
+/** Detect free variable `module`. */
+var freeModule = freeExports && "object" == 'object' && module && !module.nodeType && module;
+
+/** Detect the popular CommonJS extension `module.exports`. */
+var moduleExports = freeModule && freeModule.exports === freeExports;
+
+/** Detect free variable `process` from Node.js. */
+var freeProcess = moduleExports && freeGlobal.process;
+
+/** Used to access faster Node.js helpers. */
+var nodeUtil = (function() {
+ try {
+ return freeProcess && freeProcess.binding('util');
+ } catch (e) {}
+}());
+
+/* Node.js helper references. */
+var nodeIsRegExp = nodeUtil && nodeUtil.isRegExp;
+
+/**
+ * Gets the size of an ASCII `string`.
+ *
+ * @private
+ * @param {string} string The string inspect.
+ * @returns {number} Returns the string size.
+ */
+var asciiSize = baseProperty('length');
+
+/**
+ * Converts an ASCII `string` to an array.
+ *
+ * @private
+ * @param {string} string The string to convert.
+ * @returns {Array} Returns the converted array.
+ */
+function asciiToArray(string) {
+ return string.split('');
+}
+
+/**
+ * The base implementation of `_.property` without support for deep paths.
+ *
+ * @private
+ * @param {string} key The key of the property to get.
+ * @returns {Function} Returns the new accessor function.
+ */
+function baseProperty(key) {
+ return function(object) {
+ return object == null ? undefined : object[key];
+ };
+}
+
+/**
+ * The base implementation of `_.unary` without support for storing metadata.
+ *
+ * @private
+ * @param {Function} func The function to cap arguments for.
+ * @returns {Function} Returns the new capped function.
+ */
+function baseUnary(func) {
+ return function(value) {
+ return func(value);
+ };
+}
+
+/**
+ * Checks if `string` contains Unicode symbols.
+ *
+ * @private
+ * @param {string} string The string to inspect.
+ * @returns {boolean} Returns `true` if a symbol is found, else `false`.
+ */
+function hasUnicode(string) {
+ return reHasUnicode.test(string);
+}
+
+/**
+ * Gets the number of symbols in `string`.
+ *
+ * @private
+ * @param {string} string The string to inspect.
+ * @returns {number} Returns the string size.
+ */
+function stringSize(string) {
+ return hasUnicode(string)
+ ? unicodeSize(string)
+ : asciiSize(string);
+}
+
+/**
+ * Converts `string` to an array.
+ *
+ * @private
+ * @param {string} string The string to convert.
+ * @returns {Array} Returns the converted array.
+ */
+function stringToArray(string) {
+ return hasUnicode(string)
+ ? unicodeToArray(string)
+ : asciiToArray(string);
+}
+
+/**
+ * Gets the size of a Unicode `string`.
+ *
+ * @private
+ * @param {string} string The string inspect.
+ * @returns {number} Returns the string size.
+ */
+function unicodeSize(string) {
+ var result = reUnicode.lastIndex = 0;
+ while (reUnicode.test(string)) {
+ result++;
+ }
+ return result;
+}
+
+/**
+ * Converts a Unicode `string` to an array.
+ *
+ * @private
+ * @param {string} string The string to convert.
+ * @returns {Array} Returns the converted array.
+ */
+function unicodeToArray(string) {
+ return string.match(reUnicode) || [];
+}
+
+/** Used for built-in method references. */
+var objectProto = Object.prototype;
+
+/**
+ * Used to resolve the
+ * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
+ * of values.
+ */
+var objectToString = objectProto.toString;
+
+/** Built-in value references. */
+var Symbol = root.Symbol;
+
+/** Used to convert symbols to primitives and strings. */
+var symbolProto = Symbol ? Symbol.prototype : undefined,
+ symbolToString = symbolProto ? symbolProto.toString : undefined;
+
+/**
+ * The base implementation of `_.isRegExp` without Node.js optimizations.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.
+ */
+function baseIsRegExp(value) {
+ return isObject(value) && objectToString.call(value) == regexpTag;
+}
+
+/**
+ * The base implementation of `_.slice` without an iteratee call guard.
+ *
+ * @private
+ * @param {Array} array The array to slice.
+ * @param {number} [start=0] The start position.
+ * @param {number} [end=array.length] The end position.
+ * @returns {Array} Returns the slice of `array`.
+ */
+function baseSlice(array, start, end) {
+ var index = -1,
+ length = array.length;
+
+ if (start < 0) {
+ start = -start > length ? 0 : (length + start);
+ }
+ end = end > length ? length : end;
+ if (end < 0) {
+ end += length;
+ }
+ length = start > end ? 0 : ((end - start) >>> 0);
+ start >>>= 0;
+
+ var result = Array(length);
+ while (++index < length) {
+ result[index] = array[index + start];
+ }
+ return result;
+}
+
+/**
+ * The base implementation of `_.toString` which doesn't convert nullish
+ * values to empty strings.
+ *
+ * @private
+ * @param {*} value The value to process.
+ * @returns {string} Returns the string.
+ */
+function baseToString(value) {
+ // Exit early for strings to avoid a performance hit in some environments.
+ if (typeof value == 'string') {
+ return value;
+ }
+ if (isSymbol(value)) {
+ return symbolToString ? symbolToString.call(value) : '';
+ }
+ var result = (value + '');
+ return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;
+}
+
+/**
+ * Casts `array` to a slice if it's needed.
+ *
+ * @private
+ * @param {Array} array The array to inspect.
+ * @param {number} start The start position.
+ * @param {number} [end=array.length] The end position.
+ * @returns {Array} Returns the cast slice.
+ */
+function castSlice(array, start, end) {
+ var length = array.length;
+ end = end === undefined ? length : end;
+ return (!start && end >= length) ? array : baseSlice(array, start, end);
+}
+
+/**
+ * Checks if `value` is the
+ * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)
+ * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is an object, else `false`.
+ * @example
+ *
+ * _.isObject({});
+ * // => true
+ *
+ * _.isObject([1, 2, 3]);
+ * // => true
+ *
+ * _.isObject(_.noop);
+ * // => true
+ *
+ * _.isObject(null);
+ * // => false
+ */
+function isObject(value) {
+ var type = typeof value;
+ return !!value && (type == 'object' || type == 'function');
+}
+
+/**
+ * Checks if `value` is object-like. A value is object-like if it's not `null`
+ * and has a `typeof` result of "object".
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
+ * @example
+ *
+ * _.isObjectLike({});
+ * // => true
+ *
+ * _.isObjectLike([1, 2, 3]);
+ * // => true
+ *
+ * _.isObjectLike(_.noop);
+ * // => false
+ *
+ * _.isObjectLike(null);
+ * // => false
+ */
+function isObjectLike(value) {
+ return !!value && typeof value == 'object';
+}
+
+/**
+ * Checks if `value` is classified as a `RegExp` object.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.
+ * @example
+ *
+ * _.isRegExp(/abc/);
+ * // => true
+ *
+ * _.isRegExp('/abc/');
+ * // => false
+ */
+var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp;
+
+/**
+ * Checks if `value` is classified as a `Symbol` primitive or object.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.
+ * @example
+ *
+ * _.isSymbol(Symbol.iterator);
+ * // => true
+ *
+ * _.isSymbol('abc');
+ * // => false
+ */
+function isSymbol(value) {
+ return typeof value == 'symbol' ||
+ (isObjectLike(value) && objectToString.call(value) == symbolTag);
+}
+
+/**
+ * Converts `value` to a finite number.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.12.0
+ * @category Lang
+ * @param {*} value The value to convert.
+ * @returns {number} Returns the converted number.
+ * @example
+ *
+ * _.toFinite(3.2);
+ * // => 3.2
+ *
+ * _.toFinite(Number.MIN_VALUE);
+ * // => 5e-324
+ *
+ * _.toFinite(Infinity);
+ * // => 1.7976931348623157e+308
+ *
+ * _.toFinite('3.2');
+ * // => 3.2
+ */
+function toFinite(value) {
+ if (!value) {
+ return value === 0 ? value : 0;
+ }
+ value = toNumber(value);
+ if (value === INFINITY || value === -INFINITY) {
+ var sign = (value < 0 ? -1 : 1);
+ return sign * MAX_INTEGER;
+ }
+ return value === value ? value : 0;
+}
+
+/**
+ * Converts `value` to an integer.
+ *
+ * **Note:** This method is loosely based on
+ * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {*} value The value to convert.
+ * @returns {number} Returns the converted integer.
+ * @example
+ *
+ * _.toInteger(3.2);
+ * // => 3
+ *
+ * _.toInteger(Number.MIN_VALUE);
+ * // => 0
+ *
+ * _.toInteger(Infinity);
+ * // => 1.7976931348623157e+308
+ *
+ * _.toInteger('3.2');
+ * // => 3
+ */
+function toInteger(value) {
+ var result = toFinite(value),
+ remainder = result % 1;
+
+ return result === result ? (remainder ? result - remainder : result) : 0;
+}
+
+/**
+ * Converts `value` to a number.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {*} value The value to process.
+ * @returns {number} Returns the number.
+ * @example
+ *
+ * _.toNumber(3.2);
+ * // => 3.2
+ *
+ * _.toNumber(Number.MIN_VALUE);
+ * // => 5e-324
+ *
+ * _.toNumber(Infinity);
+ * // => Infinity
+ *
+ * _.toNumber('3.2');
+ * // => 3.2
+ */
+function toNumber(value) {
+ if (typeof value == 'number') {
+ return value;
+ }
+ if (isSymbol(value)) {
+ return NAN;
+ }
+ if (isObject(value)) {
+ var other = typeof value.valueOf == 'function' ? value.valueOf() : value;
+ value = isObject(other) ? (other + '') : other;
+ }
+ if (typeof value != 'string') {
+ return value === 0 ? value : +value;
+ }
+ value = value.replace(reTrim, '');
+ var isBinary = reIsBinary.test(value);
+ return (isBinary || reIsOctal.test(value))
+ ? freeParseInt(value.slice(2), isBinary ? 2 : 8)
+ : (reIsBadHex.test(value) ? NAN : +value);
+}
+
+/**
+ * Converts `value` to a string. An empty string is returned for `null`
+ * and `undefined` values. The sign of `-0` is preserved.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {*} value The value to process.
+ * @returns {string} Returns the string.
+ * @example
+ *
+ * _.toString(null);
+ * // => ''
+ *
+ * _.toString(-0);
+ * // => '-0'
+ *
+ * _.toString([1, 2, 3]);
+ * // => '1,2,3'
+ */
+function toString(value) {
+ return value == null ? '' : baseToString(value);
+}
+
+/**
+ * Truncates `string` if it's longer than the given maximum string length.
+ * The last characters of the truncated string are replaced with the omission
+ * string which defaults to "...".
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category String
+ * @param {string} [string=''] The string to truncate.
+ * @param {Object} [options={}] The options object.
+ * @param {number} [options.length=30] The maximum string length.
+ * @param {string} [options.omission='...'] The string to indicate text is omitted.
+ * @param {RegExp|string} [options.separator] The separator pattern to truncate to.
+ * @returns {string} Returns the truncated string.
+ * @example
+ *
+ * _.truncate('hi-diddly-ho there, neighborino');
+ * // => 'hi-diddly-ho there, neighbo...'
+ *
+ * _.truncate('hi-diddly-ho there, neighborino', {
+ * 'length': 24,
+ * 'separator': ' '
+ * });
+ * // => 'hi-diddly-ho there,...'
+ *
+ * _.truncate('hi-diddly-ho there, neighborino', {
+ * 'length': 24,
+ * 'separator': /,? +/
+ * });
+ * // => 'hi-diddly-ho there...'
+ *
+ * _.truncate('hi-diddly-ho there, neighborino', {
+ * 'omission': ' [...]'
+ * });
+ * // => 'hi-diddly-ho there, neig [...]'
+ */
+function truncate(string, options) {
+ var length = DEFAULT_TRUNC_LENGTH,
+ omission = DEFAULT_TRUNC_OMISSION;
+
+ if (isObject(options)) {
+ var separator = 'separator' in options ? options.separator : separator;
+ length = 'length' in options ? toInteger(options.length) : length;
+ omission = 'omission' in options ? baseToString(options.omission) : omission;
+ }
+ string = toString(string);
+
+ var strLength = string.length;
+ if (hasUnicode(string)) {
+ var strSymbols = stringToArray(string);
+ strLength = strSymbols.length;
+ }
+ if (length >= strLength) {
+ return string;
+ }
+ var end = length - stringSize(omission);
+ if (end < 1) {
+ return omission;
+ }
+ var result = strSymbols
+ ? castSlice(strSymbols, 0, end).join('')
+ : string.slice(0, end);
+
+ if (separator === undefined) {
+ return result + omission;
+ }
+ if (strSymbols) {
+ end += (result.length - end);
+ }
+ if (isRegExp(separator)) {
+ if (string.slice(end).search(separator)) {
+ var match,
+ substring = result;
+
+ if (!separator.global) {
+ separator = RegExp(separator.source, toString(reFlags.exec(separator)) + 'g');
+ }
+ separator.lastIndex = 0;
+ while ((match = separator.exec(substring))) {
+ var newEnd = match.index;
+ }
+ result = result.slice(0, newEnd === undefined ? end : newEnd);
+ }
+ } else if (string.indexOf(baseToString(separator), end) != end) {
+ var index = result.lastIndexOf(separator);
+ if (index > -1) {
+ result = result.slice(0, index);
+ }
+ }
+ return result + omission;
+}
+
+module.exports = truncate;
+
+
+/***/ }),
+
+/***/ 1223:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+var wrappy = __nccwpck_require__(62940)
+module.exports = wrappy(once)
+module.exports.strict = wrappy(onceStrict)
+
+once.proto = once(function () {
+ Object.defineProperty(Function.prototype, 'once', {
+ value: function () {
+ return once(this)
+ },
+ configurable: true
+ })
+
+ Object.defineProperty(Function.prototype, 'onceStrict', {
+ value: function () {
+ return onceStrict(this)
+ },
+ configurable: true
+ })
+})
+
+function once (fn) {
+ var f = function () {
+ if (f.called) return f.value
+ f.called = true
+ return f.value = fn.apply(this, arguments)
+ }
+ f.called = false
+ return f
+}
+
+function onceStrict (fn) {
+ var f = function () {
+ if (f.called)
+ throw new Error(f.onceError)
+ f.called = true
+ return f.value = fn.apply(this, arguments)
+ }
+ var name = fn.name || 'Function wrapped with `once`'
+ f.onceError = name + " shouldn't be called more than once"
+ f.called = false
+ return f
+}
+
+
+/***/ }),
+
+/***/ 72931:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+"use strict";
+
+const isFullwidthCodePoint = __nccwpck_require__(64882);
+const astralRegex = __nccwpck_require__(68287);
+const ansiStyles = __nccwpck_require__(52068);
+
+const ESCAPES = [
+ '\u001B',
+ '\u009B'
+];
+
+const wrapAnsi = code => `${ESCAPES[0]}[${code}m`;
+
+const checkAnsi = (ansiCodes, isEscapes, endAnsiCode) => {
+ let output = [];
+ ansiCodes = [...ansiCodes];
+
+ for (let ansiCode of ansiCodes) {
+ const ansiCodeOrigin = ansiCode;
+ if (ansiCode.includes(';')) {
+ ansiCode = ansiCode.split(';')[0][0] + '0';
+ }
+
+ const item = ansiStyles.codes.get(Number.parseInt(ansiCode, 10));
+ if (item) {
+ const indexEscape = ansiCodes.indexOf(item.toString());
+ if (indexEscape === -1) {
+ output.push(wrapAnsi(isEscapes ? item : ansiCodeOrigin));
+ } else {
+ ansiCodes.splice(indexEscape, 1);
+ }
+ } else if (isEscapes) {
+ output.push(wrapAnsi(0));
+ break;
+ } else {
+ output.push(wrapAnsi(ansiCodeOrigin));
+ }
+ }
+
+ if (isEscapes) {
+ output = output.filter((element, index) => output.indexOf(element) === index);
+
+ if (endAnsiCode !== undefined) {
+ const fistEscapeCode = wrapAnsi(ansiStyles.codes.get(Number.parseInt(endAnsiCode, 10)));
+ output = output.reduce((current, next) => next === fistEscapeCode ? [next, ...current] : [...current, next], []);
+ }
+ }
+
+ return output.join('');
+};
+
+module.exports = (string, begin, end) => {
+ const characters = [...string];
+ const ansiCodes = [];
+
+ let stringEnd = typeof end === 'number' ? end : characters.length;
+ let isInsideEscape = false;
+ let ansiCode;
+ let visible = 0;
+ let output = '';
+
+ for (const [index, character] of characters.entries()) {
+ let leftEscape = false;
+
+ if (ESCAPES.includes(character)) {
+ const code = /\d[^m]*/.exec(string.slice(index, index + 18));
+ ansiCode = code && code.length > 0 ? code[0] : undefined;
+
+ if (visible < stringEnd) {
+ isInsideEscape = true;
+
+ if (ansiCode !== undefined) {
+ ansiCodes.push(ansiCode);
+ }
+ }
+ } else if (isInsideEscape && character === 'm') {
+ isInsideEscape = false;
+ leftEscape = true;
+ }
+
+ if (!isInsideEscape && !leftEscape) {
+ visible++;
+ }
+
+ if (!astralRegex({exact: true}).test(character) && isFullwidthCodePoint(character.codePointAt())) {
+ visible++;
+
+ if (typeof end !== 'number') {
+ stringEnd++;
+ }
+ }
+
+ if (visible > begin && visible <= stringEnd) {
+ output += character;
+ } else if (visible === begin && !isInsideEscape && ansiCode !== undefined) {
+ output = checkAnsi(ansiCodes);
+ } else if (visible >= stringEnd) {
+ output += checkAnsi(ansiCodes, true, ansiCode);
+ break;
+ }
+ }
+
+ return output;
+};
+
+
+/***/ }),
+
+/***/ 42577:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+"use strict";
+
+const stripAnsi = __nccwpck_require__(45591);
+const isFullwidthCodePoint = __nccwpck_require__(64882);
+const emojiRegex = __nccwpck_require__(18212);
+
+const stringWidth = string => {
+ if (typeof string !== 'string' || string.length === 0) {
+ return 0;
+ }
+
+ string = stripAnsi(string);
+
+ if (string.length === 0) {
+ return 0;
+ }
+
+ string = string.replace(emojiRegex(), ' ');
+
+ let width = 0;
+
+ for (let i = 0; i < string.length; i++) {
+ const code = string.codePointAt(i);
+
+ // Ignore control characters
+ if (code <= 0x1F || (code >= 0x7F && code <= 0x9F)) {
+ continue;
+ }
+
+ // Ignore combining characters
+ if (code >= 0x300 && code <= 0x36F) {
+ continue;
+ }
+
+ // Surrogates
+ if (code > 0xFFFF) {
+ i++;
+ }
+
+ width += isFullwidthCodePoint(code) ? 2 : 1;
+ }
+
+ return width;
+};
+
+module.exports = stringWidth;
+// TODO: remove this in the next major version
+module.exports["default"] = stringWidth;
+
+
+/***/ }),
+
+/***/ 45591:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+"use strict";
+
+const ansiRegex = __nccwpck_require__(65063);
+
+module.exports = string => typeof string === 'string' ? string.replace(ansiRegex(), '') : string;
+
+
+/***/ }),
+
+/***/ 14526:
+/***/ ((module) => {
+
+const hexRegex = /^[-+]?0x[a-fA-F0-9]+$/;
+const numRegex = /^([\-\+])?(0*)(\.[0-9]+([eE]\-?[0-9]+)?|[0-9]+(\.[0-9]+([eE]\-?[0-9]+)?)?)$/;
+// const octRegex = /0x[a-z0-9]+/;
+// const binRegex = /0x[a-z0-9]+/;
+
+
+//polyfill
+if (!Number.parseInt && window.parseInt) {
+ Number.parseInt = window.parseInt;
+}
+if (!Number.parseFloat && window.parseFloat) {
+ Number.parseFloat = window.parseFloat;
+}
+
+
+const consider = {
+ hex : true,
+ leadingZeros: true,
+ decimalPoint: "\.",
+ eNotation: true
+ //skipLike: /regex/
+};
+
+function toNumber(str, options = {}){
+ // const options = Object.assign({}, consider);
+ // if(opt.leadingZeros === false){
+ // options.leadingZeros = false;
+ // }else if(opt.hex === false){
+ // options.hex = false;
+ // }
+
+ options = Object.assign({}, consider, options );
+ if(!str || typeof str !== "string" ) return str;
+
+ let trimmedStr = str.trim();
+ // if(trimmedStr === "0.0") return 0;
+ // else if(trimmedStr === "+0.0") return 0;
+ // else if(trimmedStr === "-0.0") return -0;
+
+ if(options.skipLike !== undefined && options.skipLike.test(trimmedStr)) return str;
+ else if (options.hex && hexRegex.test(trimmedStr)) {
+ return Number.parseInt(trimmedStr, 16);
+ // } else if (options.parseOct && octRegex.test(str)) {
+ // return Number.parseInt(val, 8);
+ // }else if (options.parseBin && binRegex.test(str)) {
+ // return Number.parseInt(val, 2);
+ }else{
+ //separate negative sign, leading zeros, and rest number
+ const match = numRegex.exec(trimmedStr);
+ if(match){
+ const sign = match[1];
+ const leadingZeros = match[2];
+ let numTrimmedByZeros = trimZeros(match[3]); //complete num without leading zeros
+ //trim ending zeros for floating number
+
+ const eNotation = match[4] || match[6];
+ if(!options.leadingZeros && leadingZeros.length > 0 && sign && trimmedStr[2] !== ".") return str; //-0123
+ else if(!options.leadingZeros && leadingZeros.length > 0 && !sign && trimmedStr[1] !== ".") return str; //0123
+ else{//no leading zeros or leading zeros are allowed
+ const num = Number(trimmedStr);
+ const numStr = "" + num;
+ if(numStr.search(/[eE]/) !== -1){ //given number is long and parsed to eNotation
+ if(options.eNotation) return num;
+ else return str;
+ }else if(eNotation){ //given number has enotation
+ if(options.eNotation) return num;
+ else return str;
+ }else if(trimmedStr.indexOf(".") !== -1){ //floating number
+ // const decimalPart = match[5].substr(1);
+ // const intPart = trimmedStr.substr(0,trimmedStr.indexOf("."));
+
+
+ // const p = numStr.indexOf(".");
+ // const givenIntPart = numStr.substr(0,p);
+ // const givenDecPart = numStr.substr(p+1);
+ if(numStr === "0" && (numTrimmedByZeros === "") ) return num; //0.0
+ else if(numStr === numTrimmedByZeros) return num; //0.456. 0.79000
+ else if( sign && numStr === "-"+numTrimmedByZeros) return num;
+ else return str;
+ }
+
+ if(leadingZeros){
+ // if(numTrimmedByZeros === numStr){
+ // if(options.leadingZeros) return num;
+ // else return str;
+ // }else return str;
+ if(numTrimmedByZeros === numStr) return num;
+ else if(sign+numTrimmedByZeros === numStr) return num;
+ else return str;
+ }
+
+ if(trimmedStr === numStr) return num;
+ else if(trimmedStr === sign+numStr) return num;
+ // else{
+ // //number with +/- sign
+ // trimmedStr.test(/[-+][0-9]);
+
+ // }
+ return str;
+ }
+ // else if(!eNotation && trimmedStr && trimmedStr !== Number(trimmedStr) ) return str;
+
+ }else{ //non-numeric string
+ return str;
+ }
+ }
+}
+
+/**
+ *
+ * @param {string} numStr without leading zeros
+ * @returns
+ */
+function trimZeros(numStr){
+ if(numStr && numStr.indexOf(".") !== -1){//float
+ numStr = numStr.replace(/0+$/, ""); //remove ending zeros
+ if(numStr === ".") numStr = "0";
+ else if(numStr[0] === ".") numStr = "0"+numStr;
+ else if(numStr[numStr.length-1] === ".") numStr = numStr.substr(0,numStr.length-1);
+ return numStr;
+ }
+ return numStr;
+}
+module.exports = toNumber
+
+
+/***/ }),
+
+/***/ 59318:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+"use strict";
+
+const os = __nccwpck_require__(22037);
+const tty = __nccwpck_require__(76224);
+const hasFlag = __nccwpck_require__(31621);
+
+const {env} = process;
+
+let forceColor;
+if (hasFlag('no-color') ||
+ hasFlag('no-colors') ||
+ hasFlag('color=false') ||
+ hasFlag('color=never')) {
+ forceColor = 0;
+} else if (hasFlag('color') ||
+ hasFlag('colors') ||
+ hasFlag('color=true') ||
+ hasFlag('color=always')) {
+ forceColor = 1;
+}
+
+if ('FORCE_COLOR' in env) {
+ if (env.FORCE_COLOR === 'true') {
+ forceColor = 1;
+ } else if (env.FORCE_COLOR === 'false') {
+ forceColor = 0;
+ } else {
+ forceColor = env.FORCE_COLOR.length === 0 ? 1 : Math.min(parseInt(env.FORCE_COLOR, 10), 3);
+ }
+}
+
+function translateLevel(level) {
+ if (level === 0) {
+ return false;
+ }
+
+ return {
+ level,
+ hasBasic: true,
+ has256: level >= 2,
+ has16m: level >= 3
+ };
+}
+
+function supportsColor(haveStream, streamIsTTY) {
+ if (forceColor === 0) {
+ return 0;
+ }
+
+ if (hasFlag('color=16m') ||
+ hasFlag('color=full') ||
+ hasFlag('color=truecolor')) {
+ return 3;
+ }
+
+ if (hasFlag('color=256')) {
+ return 2;
+ }
+
+ if (haveStream && !streamIsTTY && forceColor === undefined) {
+ return 0;
+ }
+
+ const min = forceColor || 0;
+
+ if (env.TERM === 'dumb') {
+ return min;
+ }
+
+ if (process.platform === 'win32') {
+ // Windows 10 build 10586 is the first Windows release that supports 256 colors.
+ // Windows 10 build 14931 is the first release that supports 16m/TrueColor.
+ const osRelease = os.release().split('.');
+ if (
+ Number(osRelease[0]) >= 10 &&
+ Number(osRelease[2]) >= 10586
+ ) {
+ return Number(osRelease[2]) >= 14931 ? 3 : 2;
+ }
+
+ return 1;
+ }
+
+ if ('CI' in env) {
+ if (['TRAVIS', 'CIRCLECI', 'APPVEYOR', 'GITLAB_CI', 'GITHUB_ACTIONS', 'BUILDKITE'].some(sign => sign in env) || env.CI_NAME === 'codeship') {
+ return 1;
+ }
+
+ return min;
+ }
+
+ if ('TEAMCITY_VERSION' in env) {
+ return /^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0;
+ }
+
+ if (env.COLORTERM === 'truecolor') {
+ return 3;
+ }
+
+ if ('TERM_PROGRAM' in env) {
+ const version = parseInt((env.TERM_PROGRAM_VERSION || '').split('.')[0], 10);
+
+ switch (env.TERM_PROGRAM) {
+ case 'iTerm.app':
+ return version >= 3 ? 3 : 2;
+ case 'Apple_Terminal':
+ return 2;
+ // No default
+ }
+ }
+
+ if (/-256(color)?$/i.test(env.TERM)) {
+ return 2;
+ }
+
+ if (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) {
+ return 1;
+ }
+
+ if ('COLORTERM' in env) {
+ return 1;
+ }
+
+ return min;
+}
+
+function getSupportLevel(stream) {
+ const level = supportsColor(stream, stream && stream.isTTY);
+ return translateLevel(level);
+}
+
+module.exports = {
+ supportsColor: getSupportLevel,
+ stdout: translateLevel(supportsColor(true, tty.isatty(1))),
+ stderr: translateLevel(supportsColor(true, tty.isatty(2)))
+};
+
+
+/***/ }),
+
+/***/ 59556:
+/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
+
+"use strict";
+
+var __importDefault = (this && this.__importDefault) || function (mod) {
+ return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.alignVerticalRangeContent = exports.wrapRangeContent = void 0;
+const string_width_1 = __importDefault(__nccwpck_require__(42577));
+const alignString_1 = __nccwpck_require__(18118);
+const mapDataUsingRowHeights_1 = __nccwpck_require__(29156);
+const padTableData_1 = __nccwpck_require__(11285);
+const truncateTableData_1 = __nccwpck_require__(10134);
+const utils_1 = __nccwpck_require__(6500);
+const wrapCell_1 = __nccwpck_require__(73442);
+/**
+ * Fill content into all cells in range in order to calculate total height
+ */
+const wrapRangeContent = (rangeConfig, rangeWidth, context) => {
+ const { topLeft, paddingRight, paddingLeft, truncate, wrapWord, alignment } = rangeConfig;
+ const originalContent = context.rows[topLeft.row][topLeft.col];
+ const contentWidth = rangeWidth - paddingLeft - paddingRight;
+ return (0, wrapCell_1.wrapCell)((0, truncateTableData_1.truncateString)(originalContent, truncate), contentWidth, wrapWord).map((line) => {
+ const alignedLine = (0, alignString_1.alignString)(line, contentWidth, alignment);
+ return (0, padTableData_1.padString)(alignedLine, paddingLeft, paddingRight);
+ });
+};
+exports.wrapRangeContent = wrapRangeContent;
+const alignVerticalRangeContent = (range, content, context) => {
+ const { rows, drawHorizontalLine, rowHeights } = context;
+ const { topLeft, bottomRight, verticalAlignment } = range;
+ // They are empty before calculateRowHeights function run
+ if (rowHeights.length === 0) {
+ return [];
+ }
+ const totalCellHeight = (0, utils_1.sumArray)(rowHeights.slice(topLeft.row, bottomRight.row + 1));
+ const totalBorderHeight = bottomRight.row - topLeft.row;
+ const hiddenHorizontalBorderCount = (0, utils_1.sequence)(topLeft.row + 1, bottomRight.row).filter((horizontalBorderIndex) => {
+ return !drawHorizontalLine(horizontalBorderIndex, rows.length);
+ }).length;
+ const availableRangeHeight = totalCellHeight + totalBorderHeight - hiddenHorizontalBorderCount;
+ return (0, mapDataUsingRowHeights_1.padCellVertically)(content, availableRangeHeight, verticalAlignment).map((line) => {
+ if (line.length === 0) {
+ return ' '.repeat((0, string_width_1.default)(content[0]));
+ }
+ return line;
+ });
+};
+exports.alignVerticalRangeContent = alignVerticalRangeContent;
+//# sourceMappingURL=alignSpanningCell.js.map
+
+/***/ }),
+
+/***/ 18118:
+/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
+
+"use strict";
+
+var __importDefault = (this && this.__importDefault) || function (mod) {
+ return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.alignString = void 0;
+const string_width_1 = __importDefault(__nccwpck_require__(42577));
+const utils_1 = __nccwpck_require__(6500);
+const alignLeft = (subject, width) => {
+ return subject + ' '.repeat(width);
+};
+const alignRight = (subject, width) => {
+ return ' '.repeat(width) + subject;
+};
+const alignCenter = (subject, width) => {
+ return ' '.repeat(Math.floor(width / 2)) + subject + ' '.repeat(Math.ceil(width / 2));
+};
+const alignJustify = (subject, width) => {
+ const spaceSequenceCount = (0, utils_1.countSpaceSequence)(subject);
+ if (spaceSequenceCount === 0) {
+ return alignLeft(subject, width);
+ }
+ const addingSpaces = (0, utils_1.distributeUnevenly)(width, spaceSequenceCount);
+ if (Math.max(...addingSpaces) > 3) {
+ return alignLeft(subject, width);
+ }
+ let spaceSequenceIndex = 0;
+ return subject.replace(/\s+/g, (groupSpace) => {
+ return groupSpace + ' '.repeat(addingSpaces[spaceSequenceIndex++]);
+ });
+};
+/**
+ * Pads a string to the left and/or right to position the subject
+ * text in a desired alignment within a container.
+ */
+const alignString = (subject, containerWidth, alignment) => {
+ const subjectWidth = (0, string_width_1.default)(subject);
+ if (subjectWidth === containerWidth) {
+ return subject;
+ }
+ if (subjectWidth > containerWidth) {
+ throw new Error('Subject parameter value width cannot be greater than the container width.');
+ }
+ if (subjectWidth === 0) {
+ return ' '.repeat(containerWidth);
+ }
+ const availableWidth = containerWidth - subjectWidth;
+ if (alignment === 'left') {
+ return alignLeft(subject, availableWidth);
+ }
+ if (alignment === 'right') {
+ return alignRight(subject, availableWidth);
+ }
+ if (alignment === 'justify') {
+ return alignJustify(subject, availableWidth);
+ }
+ return alignCenter(subject, availableWidth);
+};
+exports.alignString = alignString;
+//# sourceMappingURL=alignString.js.map
+
+/***/ }),
+
+/***/ 58439:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.alignTableData = void 0;
+const alignString_1 = __nccwpck_require__(18118);
+const alignTableData = (rows, config) => {
+ return rows.map((row, rowIndex) => {
+ return row.map((cell, cellIndex) => {
+ var _a;
+ const { width, alignment } = config.columns[cellIndex];
+ const containingRange = (_a = config.spanningCellManager) === null || _a === void 0 ? void 0 : _a.getContainingRange({ col: cellIndex,
+ row: rowIndex }, { mapped: true });
+ if (containingRange) {
+ return cell;
+ }
+ return (0, alignString_1.alignString)(cell, width, alignment);
+ });
+ });
+};
+exports.alignTableData = alignTableData;
+//# sourceMappingURL=alignTableData.js.map
+
+/***/ }),
+
+/***/ 56891:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.calculateCellHeight = void 0;
+const wrapCell_1 = __nccwpck_require__(73442);
+/**
+ * Calculates height of cell content in regard to its width and word wrapping.
+ */
+const calculateCellHeight = (value, columnWidth, useWrapWord = false) => {
+ return (0, wrapCell_1.wrapCell)(value, columnWidth, useWrapWord).length;
+};
+exports.calculateCellHeight = calculateCellHeight;
+//# sourceMappingURL=calculateCellHeight.js.map
+
+/***/ }),
+
+/***/ 61605:
+/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
+
+"use strict";
+
+var __importDefault = (this && this.__importDefault) || function (mod) {
+ return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.calculateMaximumColumnWidths = exports.calculateMaximumCellWidth = void 0;
+const string_width_1 = __importDefault(__nccwpck_require__(42577));
+const utils_1 = __nccwpck_require__(6500);
+const calculateMaximumCellWidth = (cell) => {
+ return Math.max(...cell.split('\n').map(string_width_1.default));
+};
+exports.calculateMaximumCellWidth = calculateMaximumCellWidth;
+/**
+ * Produces an array of values that describe the largest value length (width) in every column.
+ */
+const calculateMaximumColumnWidths = (rows, spanningCellConfigs = []) => {
+ const columnWidths = new Array(rows[0].length).fill(0);
+ const rangeCoordinates = spanningCellConfigs.map(utils_1.calculateRangeCoordinate);
+ const isSpanningCell = (rowIndex, columnIndex) => {
+ return rangeCoordinates.some((rangeCoordinate) => {
+ return (0, utils_1.isCellInRange)({ col: columnIndex,
+ row: rowIndex }, rangeCoordinate);
+ });
+ };
+ rows.forEach((row, rowIndex) => {
+ row.forEach((cell, cellIndex) => {
+ if (isSpanningCell(rowIndex, cellIndex)) {
+ return;
+ }
+ columnWidths[cellIndex] = Math.max(columnWidths[cellIndex], (0, exports.calculateMaximumCellWidth)(cell));
+ });
+ });
+ return columnWidths;
+};
+exports.calculateMaximumColumnWidths = calculateMaximumColumnWidths;
+//# sourceMappingURL=calculateMaximumColumnWidths.js.map
+
+/***/ }),
+
+/***/ 94197:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.calculateOutputColumnWidths = void 0;
+const calculateOutputColumnWidths = (config) => {
+ return config.columns.map((col) => {
+ return col.paddingLeft + col.width + col.paddingRight;
+ });
+};
+exports.calculateOutputColumnWidths = calculateOutputColumnWidths;
+//# sourceMappingURL=calculateOutputColumnWidths.js.map
+
+/***/ }),
+
+/***/ 35358:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.calculateRowHeights = void 0;
+const calculateCellHeight_1 = __nccwpck_require__(56891);
+const utils_1 = __nccwpck_require__(6500);
+/**
+ * Produces an array of values that describe the largest value length (height) in every row.
+ */
+const calculateRowHeights = (rows, config) => {
+ const rowHeights = [];
+ for (const [rowIndex, row] of rows.entries()) {
+ let rowHeight = 1;
+ row.forEach((cell, cellIndex) => {
+ var _a;
+ const containingRange = (_a = config.spanningCellManager) === null || _a === void 0 ? void 0 : _a.getContainingRange({ col: cellIndex,
+ row: rowIndex });
+ if (!containingRange) {
+ const cellHeight = (0, calculateCellHeight_1.calculateCellHeight)(cell, config.columns[cellIndex].width, config.columns[cellIndex].wrapWord);
+ rowHeight = Math.max(rowHeight, cellHeight);
+ return;
+ }
+ const { topLeft, bottomRight, height } = containingRange;
+ // bottom-most cell of a range needs to contain all remain lines of spanning cells
+ if (rowIndex === bottomRight.row) {
+ const totalOccupiedSpanningCellHeight = (0, utils_1.sumArray)(rowHeights.slice(topLeft.row));
+ const totalHorizontalBorderHeight = bottomRight.row - topLeft.row;
+ const totalHiddenHorizontalBorderHeight = (0, utils_1.sequence)(topLeft.row + 1, bottomRight.row).filter((horizontalBorderIndex) => {
+ var _a;
+ /* istanbul ignore next */
+ return !((_a = config.drawHorizontalLine) === null || _a === void 0 ? void 0 : _a.call(config, horizontalBorderIndex, rows.length));
+ }).length;
+ const cellHeight = height - totalOccupiedSpanningCellHeight - totalHorizontalBorderHeight + totalHiddenHorizontalBorderHeight;
+ rowHeight = Math.max(rowHeight, cellHeight);
+ }
+ // otherwise, just depend on other sibling cell heights in the row
+ });
+ rowHeights.push(rowHeight);
+ }
+ return rowHeights;
+};
+exports.calculateRowHeights = calculateRowHeights;
+//# sourceMappingURL=calculateRowHeights.js.map
+
+/***/ }),
+
+/***/ 17147:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.calculateSpanningCellWidth = void 0;
+const utils_1 = __nccwpck_require__(6500);
+const calculateSpanningCellWidth = (rangeConfig, dependencies) => {
+ const { columnsConfig, drawVerticalLine } = dependencies;
+ const { topLeft, bottomRight } = rangeConfig;
+ const totalWidth = (0, utils_1.sumArray)(columnsConfig.slice(topLeft.col, bottomRight.col + 1).map(({ width }) => {
+ return width;
+ }));
+ const totalPadding = topLeft.col === bottomRight.col ?
+ columnsConfig[topLeft.col].paddingRight +
+ columnsConfig[bottomRight.col].paddingLeft :
+ (0, utils_1.sumArray)(columnsConfig
+ .slice(topLeft.col, bottomRight.col + 1)
+ .map(({ paddingLeft, paddingRight }) => {
+ return paddingLeft + paddingRight;
+ }));
+ const totalBorderWidths = bottomRight.col - topLeft.col;
+ const totalHiddenVerticalBorders = (0, utils_1.sequence)(topLeft.col + 1, bottomRight.col).filter((verticalBorderIndex) => {
+ return !drawVerticalLine(verticalBorderIndex, columnsConfig.length);
+ }).length;
+ return totalWidth + totalPadding + totalBorderWidths - totalHiddenVerticalBorders;
+};
+exports.calculateSpanningCellWidth = calculateSpanningCellWidth;
+//# sourceMappingURL=calculateSpanningCellWidth.js.map
+
+/***/ }),
+
+/***/ 67627:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.createStream = void 0;
+const alignTableData_1 = __nccwpck_require__(58439);
+const calculateRowHeights_1 = __nccwpck_require__(35358);
+const drawBorder_1 = __nccwpck_require__(22523);
+const drawRow_1 = __nccwpck_require__(89885);
+const makeStreamConfig_1 = __nccwpck_require__(74404);
+const mapDataUsingRowHeights_1 = __nccwpck_require__(29156);
+const padTableData_1 = __nccwpck_require__(11285);
+const stringifyTableData_1 = __nccwpck_require__(64969);
+const truncateTableData_1 = __nccwpck_require__(10134);
+const utils_1 = __nccwpck_require__(6500);
+const prepareData = (data, config) => {
+ let rows = (0, stringifyTableData_1.stringifyTableData)(data);
+ rows = (0, truncateTableData_1.truncateTableData)(rows, (0, utils_1.extractTruncates)(config));
+ const rowHeights = (0, calculateRowHeights_1.calculateRowHeights)(rows, config);
+ rows = (0, mapDataUsingRowHeights_1.mapDataUsingRowHeights)(rows, rowHeights, config);
+ rows = (0, alignTableData_1.alignTableData)(rows, config);
+ rows = (0, padTableData_1.padTableData)(rows, config);
+ return rows;
+};
+const create = (row, columnWidths, config) => {
+ const rows = prepareData([row], config);
+ const body = rows.map((literalRow) => {
+ return (0, drawRow_1.drawRow)(literalRow, config);
+ }).join('');
+ let output;
+ output = '';
+ output += (0, drawBorder_1.drawBorderTop)(columnWidths, config);
+ output += body;
+ output += (0, drawBorder_1.drawBorderBottom)(columnWidths, config);
+ output = output.trimEnd();
+ process.stdout.write(output);
+};
+const append = (row, columnWidths, config) => {
+ const rows = prepareData([row], config);
+ const body = rows.map((literalRow) => {
+ return (0, drawRow_1.drawRow)(literalRow, config);
+ }).join('');
+ let output = '';
+ const bottom = (0, drawBorder_1.drawBorderBottom)(columnWidths, config);
+ if (bottom !== '\n') {
+ output = '\r\u001B[K';
+ }
+ output += (0, drawBorder_1.drawBorderJoin)(columnWidths, config);
+ output += body;
+ output += bottom;
+ output = output.trimEnd();
+ process.stdout.write(output);
+};
+const createStream = (userConfig) => {
+ const config = (0, makeStreamConfig_1.makeStreamConfig)(userConfig);
+ const columnWidths = Object.values(config.columns).map((column) => {
+ return column.width + column.paddingLeft + column.paddingRight;
+ });
+ let empty = true;
+ return {
+ write: (row) => {
+ if (row.length !== config.columnCount) {
+ throw new Error('Row cell count does not match the config.columnCount.');
+ }
+ if (empty) {
+ empty = false;
+ create(row, columnWidths, config);
+ }
+ else {
+ append(row, columnWidths, config);
+ }
+ },
+ };
+};
+exports.createStream = createStream;
+//# sourceMappingURL=createStream.js.map
+
+/***/ }),
+
+/***/ 22523:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.createTableBorderGetter = exports.drawBorderBottom = exports.drawBorderJoin = exports.drawBorderTop = exports.drawBorder = exports.createSeparatorGetter = exports.drawBorderSegments = void 0;
+const drawContent_1 = __nccwpck_require__(42019);
+const drawBorderSegments = (columnWidths, parameters) => {
+ const { separator, horizontalBorderIndex, spanningCellManager } = parameters;
+ return columnWidths.map((columnWidth, columnIndex) => {
+ const normalSegment = separator.body.repeat(columnWidth);
+ if (horizontalBorderIndex === undefined) {
+ return normalSegment;
+ }
+ /* istanbul ignore next */
+ const range = spanningCellManager === null || spanningCellManager === void 0 ? void 0 : spanningCellManager.getContainingRange({ col: columnIndex,
+ row: horizontalBorderIndex });
+ if (!range) {
+ return normalSegment;
+ }
+ const { topLeft } = range;
+ // draw border segments as usual for top border of spanning cell
+ if (horizontalBorderIndex === topLeft.row) {
+ return normalSegment;
+ }
+ // if for first column/row of spanning cell, just skip
+ if (columnIndex !== topLeft.col) {
+ return '';
+ }
+ return range.extractBorderContent(horizontalBorderIndex);
+ });
+};
+exports.drawBorderSegments = drawBorderSegments;
+const createSeparatorGetter = (dependencies) => {
+ const { separator, spanningCellManager, horizontalBorderIndex, rowCount } = dependencies;
+ // eslint-disable-next-line complexity
+ return (verticalBorderIndex, columnCount) => {
+ const inSameRange = spanningCellManager === null || spanningCellManager === void 0 ? void 0 : spanningCellManager.inSameRange;
+ if (horizontalBorderIndex !== undefined && inSameRange) {
+ const topCell = { col: verticalBorderIndex,
+ row: horizontalBorderIndex - 1 };
+ const leftCell = { col: verticalBorderIndex - 1,
+ row: horizontalBorderIndex };
+ const oppositeCell = { col: verticalBorderIndex - 1,
+ row: horizontalBorderIndex - 1 };
+ const currentCell = { col: verticalBorderIndex,
+ row: horizontalBorderIndex };
+ const pairs = [
+ [oppositeCell, topCell],
+ [topCell, currentCell],
+ [currentCell, leftCell],
+ [leftCell, oppositeCell],
+ ];
+ // left side of horizontal border
+ if (verticalBorderIndex === 0) {
+ if (inSameRange(currentCell, topCell) && separator.bodyJoinOuter) {
+ return separator.bodyJoinOuter;
+ }
+ return separator.left;
+ }
+ // right side of horizontal border
+ if (verticalBorderIndex === columnCount) {
+ if (inSameRange(oppositeCell, leftCell) && separator.bodyJoinOuter) {
+ return separator.bodyJoinOuter;
+ }
+ return separator.right;
+ }
+ // top horizontal border
+ if (horizontalBorderIndex === 0) {
+ if (inSameRange(currentCell, leftCell)) {
+ return separator.body;
+ }
+ return separator.join;
+ }
+ // bottom horizontal border
+ if (horizontalBorderIndex === rowCount) {
+ if (inSameRange(topCell, oppositeCell)) {
+ return separator.body;
+ }
+ return separator.join;
+ }
+ const sameRangeCount = pairs.map((pair) => {
+ return inSameRange(...pair);
+ }).filter(Boolean).length;
+ // four cells are belongs to different spanning cells
+ if (sameRangeCount === 0) {
+ return separator.join;
+ }
+ // belong to one spanning cell
+ if (sameRangeCount === 4) {
+ return '';
+ }
+ // belongs to two spanning cell
+ if (sameRangeCount === 2) {
+ if (inSameRange(...pairs[1]) && inSameRange(...pairs[3]) && separator.bodyJoinInner) {
+ return separator.bodyJoinInner;
+ }
+ return separator.body;
+ }
+ /* istanbul ignore next */
+ if (sameRangeCount === 1) {
+ if (!separator.joinRight || !separator.joinLeft || !separator.joinUp || !separator.joinDown) {
+ throw new Error(`Can not get border separator for position [${horizontalBorderIndex}, ${verticalBorderIndex}]`);
+ }
+ if (inSameRange(...pairs[0])) {
+ return separator.joinDown;
+ }
+ if (inSameRange(...pairs[1])) {
+ return separator.joinLeft;
+ }
+ if (inSameRange(...pairs[2])) {
+ return separator.joinUp;
+ }
+ return separator.joinRight;
+ }
+ /* istanbul ignore next */
+ throw new Error('Invalid case');
+ }
+ if (verticalBorderIndex === 0) {
+ return separator.left;
+ }
+ if (verticalBorderIndex === columnCount) {
+ return separator.right;
+ }
+ return separator.join;
+ };
+};
+exports.createSeparatorGetter = createSeparatorGetter;
+const drawBorder = (columnWidths, parameters) => {
+ const borderSegments = (0, exports.drawBorderSegments)(columnWidths, parameters);
+ const { drawVerticalLine, horizontalBorderIndex, spanningCellManager } = parameters;
+ return (0, drawContent_1.drawContent)({
+ contents: borderSegments,
+ drawSeparator: drawVerticalLine,
+ elementType: 'border',
+ rowIndex: horizontalBorderIndex,
+ separatorGetter: (0, exports.createSeparatorGetter)(parameters),
+ spanningCellManager,
+ }) + '\n';
+};
+exports.drawBorder = drawBorder;
+const drawBorderTop = (columnWidths, parameters) => {
+ const { border } = parameters;
+ const result = (0, exports.drawBorder)(columnWidths, {
+ ...parameters,
+ separator: {
+ body: border.topBody,
+ join: border.topJoin,
+ left: border.topLeft,
+ right: border.topRight,
+ },
+ });
+ if (result === '\n') {
+ return '';
+ }
+ return result;
+};
+exports.drawBorderTop = drawBorderTop;
+const drawBorderJoin = (columnWidths, parameters) => {
+ const { border } = parameters;
+ return (0, exports.drawBorder)(columnWidths, {
+ ...parameters,
+ separator: {
+ body: border.joinBody,
+ bodyJoinInner: border.bodyJoin,
+ bodyJoinOuter: border.bodyLeft,
+ join: border.joinJoin,
+ joinDown: border.joinMiddleDown,
+ joinLeft: border.joinMiddleLeft,
+ joinRight: border.joinMiddleRight,
+ joinUp: border.joinMiddleUp,
+ left: border.joinLeft,
+ right: border.joinRight,
+ },
+ });
+};
+exports.drawBorderJoin = drawBorderJoin;
+const drawBorderBottom = (columnWidths, parameters) => {
+ const { border } = parameters;
+ return (0, exports.drawBorder)(columnWidths, {
+ ...parameters,
+ separator: {
+ body: border.bottomBody,
+ join: border.bottomJoin,
+ left: border.bottomLeft,
+ right: border.bottomRight,
+ },
+ });
+};
+exports.drawBorderBottom = drawBorderBottom;
+const createTableBorderGetter = (columnWidths, parameters) => {
+ return (index, size) => {
+ const drawBorderParameters = { ...parameters,
+ horizontalBorderIndex: index };
+ if (index === 0) {
+ return (0, exports.drawBorderTop)(columnWidths, drawBorderParameters);
+ }
+ else if (index === size) {
+ return (0, exports.drawBorderBottom)(columnWidths, drawBorderParameters);
+ }
+ return (0, exports.drawBorderJoin)(columnWidths, drawBorderParameters);
+ };
+};
+exports.createTableBorderGetter = createTableBorderGetter;
+//# sourceMappingURL=drawBorder.js.map
+
+/***/ }),
+
+/***/ 42019:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.drawContent = void 0;
+const drawContent = (parameters) => {
+ const { contents, separatorGetter, drawSeparator, spanningCellManager, rowIndex, elementType } = parameters;
+ const contentSize = contents.length;
+ const result = [];
+ if (drawSeparator(0, contentSize)) {
+ result.push(separatorGetter(0, contentSize));
+ }
+ contents.forEach((content, contentIndex) => {
+ if (!elementType || elementType === 'border' || elementType === 'row') {
+ result.push(content);
+ }
+ if (elementType === 'cell' && rowIndex === undefined) {
+ result.push(content);
+ }
+ if (elementType === 'cell' && rowIndex !== undefined) {
+ /* istanbul ignore next */
+ const containingRange = spanningCellManager === null || spanningCellManager === void 0 ? void 0 : spanningCellManager.getContainingRange({ col: contentIndex,
+ row: rowIndex });
+ // when drawing content row, just add a cell when it is a normal cell
+ // or belongs to first column of spanning cell
+ if (!containingRange || contentIndex === containingRange.topLeft.col) {
+ result.push(content);
+ }
+ }
+ // Only append the middle separator if the content is not the last
+ if (contentIndex + 1 < contentSize && drawSeparator(contentIndex + 1, contentSize)) {
+ const separator = separatorGetter(contentIndex + 1, contentSize);
+ if (elementType === 'cell' && rowIndex !== undefined) {
+ const currentCell = { col: contentIndex + 1,
+ row: rowIndex };
+ /* istanbul ignore next */
+ const containingRange = spanningCellManager === null || spanningCellManager === void 0 ? void 0 : spanningCellManager.getContainingRange(currentCell);
+ if (!containingRange || containingRange.topLeft.col === currentCell.col) {
+ result.push(separator);
+ }
+ }
+ else {
+ result.push(separator);
+ }
+ }
+ });
+ if (drawSeparator(contentSize, contentSize)) {
+ result.push(separatorGetter(contentSize, contentSize));
+ }
+ return result.join('');
+};
+exports.drawContent = drawContent;
+//# sourceMappingURL=drawContent.js.map
+
+/***/ }),
+
+/***/ 89885:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.drawRow = void 0;
+const drawContent_1 = __nccwpck_require__(42019);
+const drawRow = (row, config) => {
+ const { border, drawVerticalLine, rowIndex, spanningCellManager } = config;
+ return (0, drawContent_1.drawContent)({
+ contents: row,
+ drawSeparator: drawVerticalLine,
+ elementType: 'cell',
+ rowIndex,
+ separatorGetter: (index, columnCount) => {
+ if (index === 0) {
+ return border.bodyLeft;
+ }
+ if (index === columnCount) {
+ return border.bodyRight;
+ }
+ return border.bodyJoin;
+ },
+ spanningCellManager,
+ }) + '\n';
+};
+exports.drawRow = drawRow;
+//# sourceMappingURL=drawRow.js.map
+
+/***/ }),
+
+/***/ 62458:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.drawTable = void 0;
+const drawBorder_1 = __nccwpck_require__(22523);
+const drawContent_1 = __nccwpck_require__(42019);
+const drawRow_1 = __nccwpck_require__(89885);
+const utils_1 = __nccwpck_require__(6500);
+const drawTable = (rows, outputColumnWidths, rowHeights, config) => {
+ const { drawHorizontalLine, singleLine, } = config;
+ const contents = (0, utils_1.groupBySizes)(rows, rowHeights).map((group, groupIndex) => {
+ return group.map((row) => {
+ return (0, drawRow_1.drawRow)(row, { ...config,
+ rowIndex: groupIndex });
+ }).join('');
+ });
+ return (0, drawContent_1.drawContent)({ contents,
+ drawSeparator: (index, size) => {
+ // Top/bottom border
+ if (index === 0 || index === size) {
+ return drawHorizontalLine(index, size);
+ }
+ return !singleLine && drawHorizontalLine(index, size);
+ },
+ elementType: 'row',
+ rowIndex: -1,
+ separatorGetter: (0, drawBorder_1.createTableBorderGetter)(outputColumnWidths, { ...config,
+ rowCount: contents.length }),
+ spanningCellManager: config.spanningCellManager });
+};
+exports.drawTable = drawTable;
+//# sourceMappingURL=drawTable.js.map
+
+/***/ }),
+
+/***/ 15951:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+exports["config.json"] = validate43;
+const schema13 = {
+ "$id": "config.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "type": "object",
+ "properties": {
+ "border": {
+ "$ref": "shared.json#/definitions/borders"
+ },
+ "header": {
+ "type": "object",
+ "properties": {
+ "content": {
+ "type": "string"
+ },
+ "alignment": {
+ "$ref": "shared.json#/definitions/alignment"
+ },
+ "wrapWord": {
+ "type": "boolean"
+ },
+ "truncate": {
+ "type": "integer"
+ },
+ "paddingLeft": {
+ "type": "integer"
+ },
+ "paddingRight": {
+ "type": "integer"
+ }
+ },
+ "required": ["content"],
+ "additionalProperties": false
+ },
+ "columns": {
+ "$ref": "shared.json#/definitions/columns"
+ },
+ "columnDefault": {
+ "$ref": "shared.json#/definitions/column"
+ },
+ "drawVerticalLine": {
+ "typeof": "function"
+ },
+ "drawHorizontalLine": {
+ "typeof": "function"
+ },
+ "singleLine": {
+ "typeof": "boolean"
+ },
+ "spanningCells": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "col": {
+ "type": "integer",
+ "minimum": 0
+ },
+ "row": {
+ "type": "integer",
+ "minimum": 0
+ },
+ "colSpan": {
+ "type": "integer",
+ "minimum": 1
+ },
+ "rowSpan": {
+ "type": "integer",
+ "minimum": 1
+ },
+ "alignment": {
+ "$ref": "shared.json#/definitions/alignment"
+ },
+ "verticalAlignment": {
+ "$ref": "shared.json#/definitions/verticalAlignment"
+ },
+ "wrapWord": {
+ "type": "boolean"
+ },
+ "truncate": {
+ "type": "integer"
+ },
+ "paddingLeft": {
+ "type": "integer"
+ },
+ "paddingRight": {
+ "type": "integer"
+ }
+ },
+ "required": ["row", "col"],
+ "additionalProperties": false
+ }
+ }
+ },
+ "additionalProperties": false
+};
+const schema15 = {
+ "type": "object",
+ "properties": {
+ "topBody": {
+ "$ref": "#/definitions/border"
+ },
+ "topJoin": {
+ "$ref": "#/definitions/border"
+ },
+ "topLeft": {
+ "$ref": "#/definitions/border"
+ },
+ "topRight": {
+ "$ref": "#/definitions/border"
+ },
+ "bottomBody": {
+ "$ref": "#/definitions/border"
+ },
+ "bottomJoin": {
+ "$ref": "#/definitions/border"
+ },
+ "bottomLeft": {
+ "$ref": "#/definitions/border"
+ },
+ "bottomRight": {
+ "$ref": "#/definitions/border"
+ },
+ "bodyLeft": {
+ "$ref": "#/definitions/border"
+ },
+ "bodyRight": {
+ "$ref": "#/definitions/border"
+ },
+ "bodyJoin": {
+ "$ref": "#/definitions/border"
+ },
+ "headerJoin": {
+ "$ref": "#/definitions/border"
+ },
+ "joinBody": {
+ "$ref": "#/definitions/border"
+ },
+ "joinLeft": {
+ "$ref": "#/definitions/border"
+ },
+ "joinRight": {
+ "$ref": "#/definitions/border"
+ },
+ "joinJoin": {
+ "$ref": "#/definitions/border"
+ },
+ "joinMiddleUp": {
+ "$ref": "#/definitions/border"
+ },
+ "joinMiddleDown": {
+ "$ref": "#/definitions/border"
+ },
+ "joinMiddleLeft": {
+ "$ref": "#/definitions/border"
+ },
+ "joinMiddleRight": {
+ "$ref": "#/definitions/border"
+ }
+ },
+ "additionalProperties": false
+};
+const func8 = Object.prototype.hasOwnProperty;
+const schema16 = {
+ "type": "string"
+};
+function validate46(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) {
+ let vErrors = null;
+ let errors = 0;
+ if (typeof data !== "string") {
+ const err0 = {
+ instancePath,
+ schemaPath: "#/type",
+ keyword: "type",
+ params: {
+ type: "string"
+ },
+ message: "must be string"
+ };
+ if (vErrors === null) {
+ vErrors = [err0];
+ }
+ else {
+ vErrors.push(err0);
+ }
+ errors++;
+ }
+ validate46.errors = vErrors;
+ return errors === 0;
+}
+function validate45(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) {
+ let vErrors = null;
+ let errors = 0;
+ if (data && typeof data == "object" && !Array.isArray(data)) {
+ for (const key0 in data) {
+ if (!(func8.call(schema15.properties, key0))) {
+ const err0 = {
+ instancePath,
+ schemaPath: "#/additionalProperties",
+ keyword: "additionalProperties",
+ params: {
+ additionalProperty: key0
+ },
+ message: "must NOT have additional properties"
+ };
+ if (vErrors === null) {
+ vErrors = [err0];
+ }
+ else {
+ vErrors.push(err0);
+ }
+ errors++;
+ }
+ }
+ if (data.topBody !== undefined) {
+ if (!(validate46(data.topBody, {
+ instancePath: instancePath + "/topBody",
+ parentData: data,
+ parentDataProperty: "topBody",
+ rootData
+ }))) {
+ vErrors = vErrors === null ? validate46.errors : vErrors.concat(validate46.errors);
+ errors = vErrors.length;
+ }
+ }
+ if (data.topJoin !== undefined) {
+ if (!(validate46(data.topJoin, {
+ instancePath: instancePath + "/topJoin",
+ parentData: data,
+ parentDataProperty: "topJoin",
+ rootData
+ }))) {
+ vErrors = vErrors === null ? validate46.errors : vErrors.concat(validate46.errors);
+ errors = vErrors.length;
+ }
+ }
+ if (data.topLeft !== undefined) {
+ if (!(validate46(data.topLeft, {
+ instancePath: instancePath + "/topLeft",
+ parentData: data,
+ parentDataProperty: "topLeft",
+ rootData
+ }))) {
+ vErrors = vErrors === null ? validate46.errors : vErrors.concat(validate46.errors);
+ errors = vErrors.length;
+ }
+ }
+ if (data.topRight !== undefined) {
+ if (!(validate46(data.topRight, {
+ instancePath: instancePath + "/topRight",
+ parentData: data,
+ parentDataProperty: "topRight",
+ rootData
+ }))) {
+ vErrors = vErrors === null ? validate46.errors : vErrors.concat(validate46.errors);
+ errors = vErrors.length;
+ }
+ }
+ if (data.bottomBody !== undefined) {
+ if (!(validate46(data.bottomBody, {
+ instancePath: instancePath + "/bottomBody",
+ parentData: data,
+ parentDataProperty: "bottomBody",
+ rootData
+ }))) {
+ vErrors = vErrors === null ? validate46.errors : vErrors.concat(validate46.errors);
+ errors = vErrors.length;
+ }
+ }
+ if (data.bottomJoin !== undefined) {
+ if (!(validate46(data.bottomJoin, {
+ instancePath: instancePath + "/bottomJoin",
+ parentData: data,
+ parentDataProperty: "bottomJoin",
+ rootData
+ }))) {
+ vErrors = vErrors === null ? validate46.errors : vErrors.concat(validate46.errors);
+ errors = vErrors.length;
+ }
+ }
+ if (data.bottomLeft !== undefined) {
+ if (!(validate46(data.bottomLeft, {
+ instancePath: instancePath + "/bottomLeft",
+ parentData: data,
+ parentDataProperty: "bottomLeft",
+ rootData
+ }))) {
+ vErrors = vErrors === null ? validate46.errors : vErrors.concat(validate46.errors);
+ errors = vErrors.length;
+ }
+ }
+ if (data.bottomRight !== undefined) {
+ if (!(validate46(data.bottomRight, {
+ instancePath: instancePath + "/bottomRight",
+ parentData: data,
+ parentDataProperty: "bottomRight",
+ rootData
+ }))) {
+ vErrors = vErrors === null ? validate46.errors : vErrors.concat(validate46.errors);
+ errors = vErrors.length;
+ }
+ }
+ if (data.bodyLeft !== undefined) {
+ if (!(validate46(data.bodyLeft, {
+ instancePath: instancePath + "/bodyLeft",
+ parentData: data,
+ parentDataProperty: "bodyLeft",
+ rootData
+ }))) {
+ vErrors = vErrors === null ? validate46.errors : vErrors.concat(validate46.errors);
+ errors = vErrors.length;
+ }
+ }
+ if (data.bodyRight !== undefined) {
+ if (!(validate46(data.bodyRight, {
+ instancePath: instancePath + "/bodyRight",
+ parentData: data,
+ parentDataProperty: "bodyRight",
+ rootData
+ }))) {
+ vErrors = vErrors === null ? validate46.errors : vErrors.concat(validate46.errors);
+ errors = vErrors.length;
+ }
+ }
+ if (data.bodyJoin !== undefined) {
+ if (!(validate46(data.bodyJoin, {
+ instancePath: instancePath + "/bodyJoin",
+ parentData: data,
+ parentDataProperty: "bodyJoin",
+ rootData
+ }))) {
+ vErrors = vErrors === null ? validate46.errors : vErrors.concat(validate46.errors);
+ errors = vErrors.length;
+ }
+ }
+ if (data.headerJoin !== undefined) {
+ if (!(validate46(data.headerJoin, {
+ instancePath: instancePath + "/headerJoin",
+ parentData: data,
+ parentDataProperty: "headerJoin",
+ rootData
+ }))) {
+ vErrors = vErrors === null ? validate46.errors : vErrors.concat(validate46.errors);
+ errors = vErrors.length;
+ }
+ }
+ if (data.joinBody !== undefined) {
+ if (!(validate46(data.joinBody, {
+ instancePath: instancePath + "/joinBody",
+ parentData: data,
+ parentDataProperty: "joinBody",
+ rootData
+ }))) {
+ vErrors = vErrors === null ? validate46.errors : vErrors.concat(validate46.errors);
+ errors = vErrors.length;
+ }
+ }
+ if (data.joinLeft !== undefined) {
+ if (!(validate46(data.joinLeft, {
+ instancePath: instancePath + "/joinLeft",
+ parentData: data,
+ parentDataProperty: "joinLeft",
+ rootData
+ }))) {
+ vErrors = vErrors === null ? validate46.errors : vErrors.concat(validate46.errors);
+ errors = vErrors.length;
+ }
+ }
+ if (data.joinRight !== undefined) {
+ if (!(validate46(data.joinRight, {
+ instancePath: instancePath + "/joinRight",
+ parentData: data,
+ parentDataProperty: "joinRight",
+ rootData
+ }))) {
+ vErrors = vErrors === null ? validate46.errors : vErrors.concat(validate46.errors);
+ errors = vErrors.length;
+ }
+ }
+ if (data.joinJoin !== undefined) {
+ if (!(validate46(data.joinJoin, {
+ instancePath: instancePath + "/joinJoin",
+ parentData: data,
+ parentDataProperty: "joinJoin",
+ rootData
+ }))) {
+ vErrors = vErrors === null ? validate46.errors : vErrors.concat(validate46.errors);
+ errors = vErrors.length;
+ }
+ }
+ if (data.joinMiddleUp !== undefined) {
+ if (!(validate46(data.joinMiddleUp, {
+ instancePath: instancePath + "/joinMiddleUp",
+ parentData: data,
+ parentDataProperty: "joinMiddleUp",
+ rootData
+ }))) {
+ vErrors = vErrors === null ? validate46.errors : vErrors.concat(validate46.errors);
+ errors = vErrors.length;
+ }
+ }
+ if (data.joinMiddleDown !== undefined) {
+ if (!(validate46(data.joinMiddleDown, {
+ instancePath: instancePath + "/joinMiddleDown",
+ parentData: data,
+ parentDataProperty: "joinMiddleDown",
+ rootData
+ }))) {
+ vErrors = vErrors === null ? validate46.errors : vErrors.concat(validate46.errors);
+ errors = vErrors.length;
+ }
+ }
+ if (data.joinMiddleLeft !== undefined) {
+ if (!(validate46(data.joinMiddleLeft, {
+ instancePath: instancePath + "/joinMiddleLeft",
+ parentData: data,
+ parentDataProperty: "joinMiddleLeft",
+ rootData
+ }))) {
+ vErrors = vErrors === null ? validate46.errors : vErrors.concat(validate46.errors);
+ errors = vErrors.length;
+ }
+ }
+ if (data.joinMiddleRight !== undefined) {
+ if (!(validate46(data.joinMiddleRight, {
+ instancePath: instancePath + "/joinMiddleRight",
+ parentData: data,
+ parentDataProperty: "joinMiddleRight",
+ rootData
+ }))) {
+ vErrors = vErrors === null ? validate46.errors : vErrors.concat(validate46.errors);
+ errors = vErrors.length;
+ }
+ }
+ }
+ else {
+ const err1 = {
+ instancePath,
+ schemaPath: "#/type",
+ keyword: "type",
+ params: {
+ type: "object"
+ },
+ message: "must be object"
+ };
+ if (vErrors === null) {
+ vErrors = [err1];
+ }
+ else {
+ vErrors.push(err1);
+ }
+ errors++;
+ }
+ validate45.errors = vErrors;
+ return errors === 0;
+}
+const schema17 = {
+ "type": "string",
+ "enum": ["left", "right", "center", "justify"]
+};
+const func0 = (__nccwpck_require__(50063)/* ["default"] */ .Z);
+function validate68(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) {
+ let vErrors = null;
+ let errors = 0;
+ if (typeof data !== "string") {
+ const err0 = {
+ instancePath,
+ schemaPath: "#/type",
+ keyword: "type",
+ params: {
+ type: "string"
+ },
+ message: "must be string"
+ };
+ if (vErrors === null) {
+ vErrors = [err0];
+ }
+ else {
+ vErrors.push(err0);
+ }
+ errors++;
+ }
+ if (!((((data === "left") || (data === "right")) || (data === "center")) || (data === "justify"))) {
+ const err1 = {
+ instancePath,
+ schemaPath: "#/enum",
+ keyword: "enum",
+ params: {
+ allowedValues: schema17.enum
+ },
+ message: "must be equal to one of the allowed values"
+ };
+ if (vErrors === null) {
+ vErrors = [err1];
+ }
+ else {
+ vErrors.push(err1);
+ }
+ errors++;
+ }
+ validate68.errors = vErrors;
+ return errors === 0;
+}
+const schema18 = {
+ "oneOf": [{
+ "type": "object",
+ "patternProperties": {
+ "^[0-9]+$": {
+ "$ref": "#/definitions/column"
+ }
+ },
+ "additionalProperties": false
+ }, {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/column"
+ }
+ }]
+};
+const pattern0 = new RegExp("^[0-9]+$", "u");
+const schema19 = {
+ "type": "object",
+ "properties": {
+ "alignment": {
+ "$ref": "#/definitions/alignment"
+ },
+ "verticalAlignment": {
+ "$ref": "#/definitions/verticalAlignment"
+ },
+ "width": {
+ "type": "integer",
+ "minimum": 1
+ },
+ "wrapWord": {
+ "type": "boolean"
+ },
+ "truncate": {
+ "type": "integer"
+ },
+ "paddingLeft": {
+ "type": "integer"
+ },
+ "paddingRight": {
+ "type": "integer"
+ }
+ },
+ "additionalProperties": false
+};
+function validate72(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) {
+ let vErrors = null;
+ let errors = 0;
+ if (typeof data !== "string") {
+ const err0 = {
+ instancePath,
+ schemaPath: "#/type",
+ keyword: "type",
+ params: {
+ type: "string"
+ },
+ message: "must be string"
+ };
+ if (vErrors === null) {
+ vErrors = [err0];
+ }
+ else {
+ vErrors.push(err0);
+ }
+ errors++;
+ }
+ if (!((((data === "left") || (data === "right")) || (data === "center")) || (data === "justify"))) {
+ const err1 = {
+ instancePath,
+ schemaPath: "#/enum",
+ keyword: "enum",
+ params: {
+ allowedValues: schema17.enum
+ },
+ message: "must be equal to one of the allowed values"
+ };
+ if (vErrors === null) {
+ vErrors = [err1];
+ }
+ else {
+ vErrors.push(err1);
+ }
+ errors++;
+ }
+ validate72.errors = vErrors;
+ return errors === 0;
+}
+const schema21 = {
+ "type": "string",
+ "enum": ["top", "middle", "bottom"]
+};
+function validate74(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) {
+ let vErrors = null;
+ let errors = 0;
+ if (typeof data !== "string") {
+ const err0 = {
+ instancePath,
+ schemaPath: "#/type",
+ keyword: "type",
+ params: {
+ type: "string"
+ },
+ message: "must be string"
+ };
+ if (vErrors === null) {
+ vErrors = [err0];
+ }
+ else {
+ vErrors.push(err0);
+ }
+ errors++;
+ }
+ if (!(((data === "top") || (data === "middle")) || (data === "bottom"))) {
+ const err1 = {
+ instancePath,
+ schemaPath: "#/enum",
+ keyword: "enum",
+ params: {
+ allowedValues: schema21.enum
+ },
+ message: "must be equal to one of the allowed values"
+ };
+ if (vErrors === null) {
+ vErrors = [err1];
+ }
+ else {
+ vErrors.push(err1);
+ }
+ errors++;
+ }
+ validate74.errors = vErrors;
+ return errors === 0;
+}
+function validate71(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) {
+ let vErrors = null;
+ let errors = 0;
+ if (data && typeof data == "object" && !Array.isArray(data)) {
+ for (const key0 in data) {
+ if (!(((((((key0 === "alignment") || (key0 === "verticalAlignment")) || (key0 === "width")) || (key0 === "wrapWord")) || (key0 === "truncate")) || (key0 === "paddingLeft")) || (key0 === "paddingRight"))) {
+ const err0 = {
+ instancePath,
+ schemaPath: "#/additionalProperties",
+ keyword: "additionalProperties",
+ params: {
+ additionalProperty: key0
+ },
+ message: "must NOT have additional properties"
+ };
+ if (vErrors === null) {
+ vErrors = [err0];
+ }
+ else {
+ vErrors.push(err0);
+ }
+ errors++;
+ }
+ }
+ if (data.alignment !== undefined) {
+ if (!(validate72(data.alignment, {
+ instancePath: instancePath + "/alignment",
+ parentData: data,
+ parentDataProperty: "alignment",
+ rootData
+ }))) {
+ vErrors = vErrors === null ? validate72.errors : vErrors.concat(validate72.errors);
+ errors = vErrors.length;
+ }
+ }
+ if (data.verticalAlignment !== undefined) {
+ if (!(validate74(data.verticalAlignment, {
+ instancePath: instancePath + "/verticalAlignment",
+ parentData: data,
+ parentDataProperty: "verticalAlignment",
+ rootData
+ }))) {
+ vErrors = vErrors === null ? validate74.errors : vErrors.concat(validate74.errors);
+ errors = vErrors.length;
+ }
+ }
+ if (data.width !== undefined) {
+ let data2 = data.width;
+ if (!(((typeof data2 == "number") && (!(data2 % 1) && !isNaN(data2))) && (isFinite(data2)))) {
+ const err1 = {
+ instancePath: instancePath + "/width",
+ schemaPath: "#/properties/width/type",
+ keyword: "type",
+ params: {
+ type: "integer"
+ },
+ message: "must be integer"
+ };
+ if (vErrors === null) {
+ vErrors = [err1];
+ }
+ else {
+ vErrors.push(err1);
+ }
+ errors++;
+ }
+ if ((typeof data2 == "number") && (isFinite(data2))) {
+ if (data2 < 1 || isNaN(data2)) {
+ const err2 = {
+ instancePath: instancePath + "/width",
+ schemaPath: "#/properties/width/minimum",
+ keyword: "minimum",
+ params: {
+ comparison: ">=",
+ limit: 1
+ },
+ message: "must be >= 1"
+ };
+ if (vErrors === null) {
+ vErrors = [err2];
+ }
+ else {
+ vErrors.push(err2);
+ }
+ errors++;
+ }
+ }
+ }
+ if (data.wrapWord !== undefined) {
+ if (typeof data.wrapWord !== "boolean") {
+ const err3 = {
+ instancePath: instancePath + "/wrapWord",
+ schemaPath: "#/properties/wrapWord/type",
+ keyword: "type",
+ params: {
+ type: "boolean"
+ },
+ message: "must be boolean"
+ };
+ if (vErrors === null) {
+ vErrors = [err3];
+ }
+ else {
+ vErrors.push(err3);
+ }
+ errors++;
+ }
+ }
+ if (data.truncate !== undefined) {
+ let data4 = data.truncate;
+ if (!(((typeof data4 == "number") && (!(data4 % 1) && !isNaN(data4))) && (isFinite(data4)))) {
+ const err4 = {
+ instancePath: instancePath + "/truncate",
+ schemaPath: "#/properties/truncate/type",
+ keyword: "type",
+ params: {
+ type: "integer"
+ },
+ message: "must be integer"
+ };
+ if (vErrors === null) {
+ vErrors = [err4];
+ }
+ else {
+ vErrors.push(err4);
+ }
+ errors++;
+ }
+ }
+ if (data.paddingLeft !== undefined) {
+ let data5 = data.paddingLeft;
+ if (!(((typeof data5 == "number") && (!(data5 % 1) && !isNaN(data5))) && (isFinite(data5)))) {
+ const err5 = {
+ instancePath: instancePath + "/paddingLeft",
+ schemaPath: "#/properties/paddingLeft/type",
+ keyword: "type",
+ params: {
+ type: "integer"
+ },
+ message: "must be integer"
+ };
+ if (vErrors === null) {
+ vErrors = [err5];
+ }
+ else {
+ vErrors.push(err5);
+ }
+ errors++;
+ }
+ }
+ if (data.paddingRight !== undefined) {
+ let data6 = data.paddingRight;
+ if (!(((typeof data6 == "number") && (!(data6 % 1) && !isNaN(data6))) && (isFinite(data6)))) {
+ const err6 = {
+ instancePath: instancePath + "/paddingRight",
+ schemaPath: "#/properties/paddingRight/type",
+ keyword: "type",
+ params: {
+ type: "integer"
+ },
+ message: "must be integer"
+ };
+ if (vErrors === null) {
+ vErrors = [err6];
+ }
+ else {
+ vErrors.push(err6);
+ }
+ errors++;
+ }
+ }
+ }
+ else {
+ const err7 = {
+ instancePath,
+ schemaPath: "#/type",
+ keyword: "type",
+ params: {
+ type: "object"
+ },
+ message: "must be object"
+ };
+ if (vErrors === null) {
+ vErrors = [err7];
+ }
+ else {
+ vErrors.push(err7);
+ }
+ errors++;
+ }
+ validate71.errors = vErrors;
+ return errors === 0;
+}
+function validate70(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) {
+ let vErrors = null;
+ let errors = 0;
+ const _errs0 = errors;
+ let valid0 = false;
+ let passing0 = null;
+ const _errs1 = errors;
+ if (data && typeof data == "object" && !Array.isArray(data)) {
+ for (const key0 in data) {
+ if (!(pattern0.test(key0))) {
+ const err0 = {
+ instancePath,
+ schemaPath: "#/oneOf/0/additionalProperties",
+ keyword: "additionalProperties",
+ params: {
+ additionalProperty: key0
+ },
+ message: "must NOT have additional properties"
+ };
+ if (vErrors === null) {
+ vErrors = [err0];
+ }
+ else {
+ vErrors.push(err0);
+ }
+ errors++;
+ }
+ }
+ for (const key1 in data) {
+ if (pattern0.test(key1)) {
+ if (!(validate71(data[key1], {
+ instancePath: instancePath + "/" + key1.replace(/~/g, "~0").replace(/\//g, "~1"),
+ parentData: data,
+ parentDataProperty: key1,
+ rootData
+ }))) {
+ vErrors = vErrors === null ? validate71.errors : vErrors.concat(validate71.errors);
+ errors = vErrors.length;
+ }
+ }
+ }
+ }
+ else {
+ const err1 = {
+ instancePath,
+ schemaPath: "#/oneOf/0/type",
+ keyword: "type",
+ params: {
+ type: "object"
+ },
+ message: "must be object"
+ };
+ if (vErrors === null) {
+ vErrors = [err1];
+ }
+ else {
+ vErrors.push(err1);
+ }
+ errors++;
+ }
+ var _valid0 = _errs1 === errors;
+ if (_valid0) {
+ valid0 = true;
+ passing0 = 0;
+ }
+ const _errs5 = errors;
+ if (Array.isArray(data)) {
+ const len0 = data.length;
+ for (let i0 = 0; i0 < len0; i0++) {
+ if (!(validate71(data[i0], {
+ instancePath: instancePath + "/" + i0,
+ parentData: data,
+ parentDataProperty: i0,
+ rootData
+ }))) {
+ vErrors = vErrors === null ? validate71.errors : vErrors.concat(validate71.errors);
+ errors = vErrors.length;
+ }
+ }
+ }
+ else {
+ const err2 = {
+ instancePath,
+ schemaPath: "#/oneOf/1/type",
+ keyword: "type",
+ params: {
+ type: "array"
+ },
+ message: "must be array"
+ };
+ if (vErrors === null) {
+ vErrors = [err2];
+ }
+ else {
+ vErrors.push(err2);
+ }
+ errors++;
+ }
+ var _valid0 = _errs5 === errors;
+ if (_valid0 && valid0) {
+ valid0 = false;
+ passing0 = [passing0, 1];
+ }
+ else {
+ if (_valid0) {
+ valid0 = true;
+ passing0 = 1;
+ }
+ }
+ if (!valid0) {
+ const err3 = {
+ instancePath,
+ schemaPath: "#/oneOf",
+ keyword: "oneOf",
+ params: {
+ passingSchemas: passing0
+ },
+ message: "must match exactly one schema in oneOf"
+ };
+ if (vErrors === null) {
+ vErrors = [err3];
+ }
+ else {
+ vErrors.push(err3);
+ }
+ errors++;
+ }
+ else {
+ errors = _errs0;
+ if (vErrors !== null) {
+ if (_errs0) {
+ vErrors.length = _errs0;
+ }
+ else {
+ vErrors = null;
+ }
+ }
+ }
+ validate70.errors = vErrors;
+ return errors === 0;
+}
+function validate79(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) {
+ let vErrors = null;
+ let errors = 0;
+ if (data && typeof data == "object" && !Array.isArray(data)) {
+ for (const key0 in data) {
+ if (!(((((((key0 === "alignment") || (key0 === "verticalAlignment")) || (key0 === "width")) || (key0 === "wrapWord")) || (key0 === "truncate")) || (key0 === "paddingLeft")) || (key0 === "paddingRight"))) {
+ const err0 = {
+ instancePath,
+ schemaPath: "#/additionalProperties",
+ keyword: "additionalProperties",
+ params: {
+ additionalProperty: key0
+ },
+ message: "must NOT have additional properties"
+ };
+ if (vErrors === null) {
+ vErrors = [err0];
+ }
+ else {
+ vErrors.push(err0);
+ }
+ errors++;
+ }
+ }
+ if (data.alignment !== undefined) {
+ if (!(validate72(data.alignment, {
+ instancePath: instancePath + "/alignment",
+ parentData: data,
+ parentDataProperty: "alignment",
+ rootData
+ }))) {
+ vErrors = vErrors === null ? validate72.errors : vErrors.concat(validate72.errors);
+ errors = vErrors.length;
+ }
+ }
+ if (data.verticalAlignment !== undefined) {
+ if (!(validate74(data.verticalAlignment, {
+ instancePath: instancePath + "/verticalAlignment",
+ parentData: data,
+ parentDataProperty: "verticalAlignment",
+ rootData
+ }))) {
+ vErrors = vErrors === null ? validate74.errors : vErrors.concat(validate74.errors);
+ errors = vErrors.length;
+ }
+ }
+ if (data.width !== undefined) {
+ let data2 = data.width;
+ if (!(((typeof data2 == "number") && (!(data2 % 1) && !isNaN(data2))) && (isFinite(data2)))) {
+ const err1 = {
+ instancePath: instancePath + "/width",
+ schemaPath: "#/properties/width/type",
+ keyword: "type",
+ params: {
+ type: "integer"
+ },
+ message: "must be integer"
+ };
+ if (vErrors === null) {
+ vErrors = [err1];
+ }
+ else {
+ vErrors.push(err1);
+ }
+ errors++;
+ }
+ if ((typeof data2 == "number") && (isFinite(data2))) {
+ if (data2 < 1 || isNaN(data2)) {
+ const err2 = {
+ instancePath: instancePath + "/width",
+ schemaPath: "#/properties/width/minimum",
+ keyword: "minimum",
+ params: {
+ comparison: ">=",
+ limit: 1
+ },
+ message: "must be >= 1"
+ };
+ if (vErrors === null) {
+ vErrors = [err2];
+ }
+ else {
+ vErrors.push(err2);
+ }
+ errors++;
+ }
+ }
+ }
+ if (data.wrapWord !== undefined) {
+ if (typeof data.wrapWord !== "boolean") {
+ const err3 = {
+ instancePath: instancePath + "/wrapWord",
+ schemaPath: "#/properties/wrapWord/type",
+ keyword: "type",
+ params: {
+ type: "boolean"
+ },
+ message: "must be boolean"
+ };
+ if (vErrors === null) {
+ vErrors = [err3];
+ }
+ else {
+ vErrors.push(err3);
+ }
+ errors++;
+ }
+ }
+ if (data.truncate !== undefined) {
+ let data4 = data.truncate;
+ if (!(((typeof data4 == "number") && (!(data4 % 1) && !isNaN(data4))) && (isFinite(data4)))) {
+ const err4 = {
+ instancePath: instancePath + "/truncate",
+ schemaPath: "#/properties/truncate/type",
+ keyword: "type",
+ params: {
+ type: "integer"
+ },
+ message: "must be integer"
+ };
+ if (vErrors === null) {
+ vErrors = [err4];
+ }
+ else {
+ vErrors.push(err4);
+ }
+ errors++;
+ }
+ }
+ if (data.paddingLeft !== undefined) {
+ let data5 = data.paddingLeft;
+ if (!(((typeof data5 == "number") && (!(data5 % 1) && !isNaN(data5))) && (isFinite(data5)))) {
+ const err5 = {
+ instancePath: instancePath + "/paddingLeft",
+ schemaPath: "#/properties/paddingLeft/type",
+ keyword: "type",
+ params: {
+ type: "integer"
+ },
+ message: "must be integer"
+ };
+ if (vErrors === null) {
+ vErrors = [err5];
+ }
+ else {
+ vErrors.push(err5);
+ }
+ errors++;
+ }
+ }
+ if (data.paddingRight !== undefined) {
+ let data6 = data.paddingRight;
+ if (!(((typeof data6 == "number") && (!(data6 % 1) && !isNaN(data6))) && (isFinite(data6)))) {
+ const err6 = {
+ instancePath: instancePath + "/paddingRight",
+ schemaPath: "#/properties/paddingRight/type",
+ keyword: "type",
+ params: {
+ type: "integer"
+ },
+ message: "must be integer"
+ };
+ if (vErrors === null) {
+ vErrors = [err6];
+ }
+ else {
+ vErrors.push(err6);
+ }
+ errors++;
+ }
+ }
+ }
+ else {
+ const err7 = {
+ instancePath,
+ schemaPath: "#/type",
+ keyword: "type",
+ params: {
+ type: "object"
+ },
+ message: "must be object"
+ };
+ if (vErrors === null) {
+ vErrors = [err7];
+ }
+ else {
+ vErrors.push(err7);
+ }
+ errors++;
+ }
+ validate79.errors = vErrors;
+ return errors === 0;
+}
+function validate84(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) {
+ let vErrors = null;
+ let errors = 0;
+ if (typeof data !== "string") {
+ const err0 = {
+ instancePath,
+ schemaPath: "#/type",
+ keyword: "type",
+ params: {
+ type: "string"
+ },
+ message: "must be string"
+ };
+ if (vErrors === null) {
+ vErrors = [err0];
+ }
+ else {
+ vErrors.push(err0);
+ }
+ errors++;
+ }
+ if (!(((data === "top") || (data === "middle")) || (data === "bottom"))) {
+ const err1 = {
+ instancePath,
+ schemaPath: "#/enum",
+ keyword: "enum",
+ params: {
+ allowedValues: schema21.enum
+ },
+ message: "must be equal to one of the allowed values"
+ };
+ if (vErrors === null) {
+ vErrors = [err1];
+ }
+ else {
+ vErrors.push(err1);
+ }
+ errors++;
+ }
+ validate84.errors = vErrors;
+ return errors === 0;
+}
+function validate43(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) {
+ /*# sourceURL="config.json" */ ;
+ let vErrors = null;
+ let errors = 0;
+ if (data && typeof data == "object" && !Array.isArray(data)) {
+ for (const key0 in data) {
+ if (!((((((((key0 === "border") || (key0 === "header")) || (key0 === "columns")) || (key0 === "columnDefault")) || (key0 === "drawVerticalLine")) || (key0 === "drawHorizontalLine")) || (key0 === "singleLine")) || (key0 === "spanningCells"))) {
+ const err0 = {
+ instancePath,
+ schemaPath: "#/additionalProperties",
+ keyword: "additionalProperties",
+ params: {
+ additionalProperty: key0
+ },
+ message: "must NOT have additional properties"
+ };
+ if (vErrors === null) {
+ vErrors = [err0];
+ }
+ else {
+ vErrors.push(err0);
+ }
+ errors++;
+ }
+ }
+ if (data.border !== undefined) {
+ if (!(validate45(data.border, {
+ instancePath: instancePath + "/border",
+ parentData: data,
+ parentDataProperty: "border",
+ rootData
+ }))) {
+ vErrors = vErrors === null ? validate45.errors : vErrors.concat(validate45.errors);
+ errors = vErrors.length;
+ }
+ }
+ if (data.header !== undefined) {
+ let data1 = data.header;
+ if (data1 && typeof data1 == "object" && !Array.isArray(data1)) {
+ if (data1.content === undefined) {
+ const err1 = {
+ instancePath: instancePath + "/header",
+ schemaPath: "#/properties/header/required",
+ keyword: "required",
+ params: {
+ missingProperty: "content"
+ },
+ message: "must have required property '" + "content" + "'"
+ };
+ if (vErrors === null) {
+ vErrors = [err1];
+ }
+ else {
+ vErrors.push(err1);
+ }
+ errors++;
+ }
+ for (const key1 in data1) {
+ if (!((((((key1 === "content") || (key1 === "alignment")) || (key1 === "wrapWord")) || (key1 === "truncate")) || (key1 === "paddingLeft")) || (key1 === "paddingRight"))) {
+ const err2 = {
+ instancePath: instancePath + "/header",
+ schemaPath: "#/properties/header/additionalProperties",
+ keyword: "additionalProperties",
+ params: {
+ additionalProperty: key1
+ },
+ message: "must NOT have additional properties"
+ };
+ if (vErrors === null) {
+ vErrors = [err2];
+ }
+ else {
+ vErrors.push(err2);
+ }
+ errors++;
+ }
+ }
+ if (data1.content !== undefined) {
+ if (typeof data1.content !== "string") {
+ const err3 = {
+ instancePath: instancePath + "/header/content",
+ schemaPath: "#/properties/header/properties/content/type",
+ keyword: "type",
+ params: {
+ type: "string"
+ },
+ message: "must be string"
+ };
+ if (vErrors === null) {
+ vErrors = [err3];
+ }
+ else {
+ vErrors.push(err3);
+ }
+ errors++;
+ }
+ }
+ if (data1.alignment !== undefined) {
+ if (!(validate68(data1.alignment, {
+ instancePath: instancePath + "/header/alignment",
+ parentData: data1,
+ parentDataProperty: "alignment",
+ rootData
+ }))) {
+ vErrors = vErrors === null ? validate68.errors : vErrors.concat(validate68.errors);
+ errors = vErrors.length;
+ }
+ }
+ if (data1.wrapWord !== undefined) {
+ if (typeof data1.wrapWord !== "boolean") {
+ const err4 = {
+ instancePath: instancePath + "/header/wrapWord",
+ schemaPath: "#/properties/header/properties/wrapWord/type",
+ keyword: "type",
+ params: {
+ type: "boolean"
+ },
+ message: "must be boolean"
+ };
+ if (vErrors === null) {
+ vErrors = [err4];
+ }
+ else {
+ vErrors.push(err4);
+ }
+ errors++;
+ }
+ }
+ if (data1.truncate !== undefined) {
+ let data5 = data1.truncate;
+ if (!(((typeof data5 == "number") && (!(data5 % 1) && !isNaN(data5))) && (isFinite(data5)))) {
+ const err5 = {
+ instancePath: instancePath + "/header/truncate",
+ schemaPath: "#/properties/header/properties/truncate/type",
+ keyword: "type",
+ params: {
+ type: "integer"
+ },
+ message: "must be integer"
+ };
+ if (vErrors === null) {
+ vErrors = [err5];
+ }
+ else {
+ vErrors.push(err5);
+ }
+ errors++;
+ }
+ }
+ if (data1.paddingLeft !== undefined) {
+ let data6 = data1.paddingLeft;
+ if (!(((typeof data6 == "number") && (!(data6 % 1) && !isNaN(data6))) && (isFinite(data6)))) {
+ const err6 = {
+ instancePath: instancePath + "/header/paddingLeft",
+ schemaPath: "#/properties/header/properties/paddingLeft/type",
+ keyword: "type",
+ params: {
+ type: "integer"
+ },
+ message: "must be integer"
+ };
+ if (vErrors === null) {
+ vErrors = [err6];
+ }
+ else {
+ vErrors.push(err6);
+ }
+ errors++;
+ }
+ }
+ if (data1.paddingRight !== undefined) {
+ let data7 = data1.paddingRight;
+ if (!(((typeof data7 == "number") && (!(data7 % 1) && !isNaN(data7))) && (isFinite(data7)))) {
+ const err7 = {
+ instancePath: instancePath + "/header/paddingRight",
+ schemaPath: "#/properties/header/properties/paddingRight/type",
+ keyword: "type",
+ params: {
+ type: "integer"
+ },
+ message: "must be integer"
+ };
+ if (vErrors === null) {
+ vErrors = [err7];
+ }
+ else {
+ vErrors.push(err7);
+ }
+ errors++;
+ }
+ }
+ }
+ else {
+ const err8 = {
+ instancePath: instancePath + "/header",
+ schemaPath: "#/properties/header/type",
+ keyword: "type",
+ params: {
+ type: "object"
+ },
+ message: "must be object"
+ };
+ if (vErrors === null) {
+ vErrors = [err8];
+ }
+ else {
+ vErrors.push(err8);
+ }
+ errors++;
+ }
+ }
+ if (data.columns !== undefined) {
+ if (!(validate70(data.columns, {
+ instancePath: instancePath + "/columns",
+ parentData: data,
+ parentDataProperty: "columns",
+ rootData
+ }))) {
+ vErrors = vErrors === null ? validate70.errors : vErrors.concat(validate70.errors);
+ errors = vErrors.length;
+ }
+ }
+ if (data.columnDefault !== undefined) {
+ if (!(validate79(data.columnDefault, {
+ instancePath: instancePath + "/columnDefault",
+ parentData: data,
+ parentDataProperty: "columnDefault",
+ rootData
+ }))) {
+ vErrors = vErrors === null ? validate79.errors : vErrors.concat(validate79.errors);
+ errors = vErrors.length;
+ }
+ }
+ if (data.drawVerticalLine !== undefined) {
+ if (typeof data.drawVerticalLine != "function") {
+ const err9 = {
+ instancePath: instancePath + "/drawVerticalLine",
+ schemaPath: "#/properties/drawVerticalLine/typeof",
+ keyword: "typeof",
+ params: {},
+ message: "must pass \"typeof\" keyword validation"
+ };
+ if (vErrors === null) {
+ vErrors = [err9];
+ }
+ else {
+ vErrors.push(err9);
+ }
+ errors++;
+ }
+ }
+ if (data.drawHorizontalLine !== undefined) {
+ if (typeof data.drawHorizontalLine != "function") {
+ const err10 = {
+ instancePath: instancePath + "/drawHorizontalLine",
+ schemaPath: "#/properties/drawHorizontalLine/typeof",
+ keyword: "typeof",
+ params: {},
+ message: "must pass \"typeof\" keyword validation"
+ };
+ if (vErrors === null) {
+ vErrors = [err10];
+ }
+ else {
+ vErrors.push(err10);
+ }
+ errors++;
+ }
+ }
+ if (data.singleLine !== undefined) {
+ if (typeof data.singleLine != "boolean") {
+ const err11 = {
+ instancePath: instancePath + "/singleLine",
+ schemaPath: "#/properties/singleLine/typeof",
+ keyword: "typeof",
+ params: {},
+ message: "must pass \"typeof\" keyword validation"
+ };
+ if (vErrors === null) {
+ vErrors = [err11];
+ }
+ else {
+ vErrors.push(err11);
+ }
+ errors++;
+ }
+ }
+ if (data.spanningCells !== undefined) {
+ let data13 = data.spanningCells;
+ if (Array.isArray(data13)) {
+ const len0 = data13.length;
+ for (let i0 = 0; i0 < len0; i0++) {
+ let data14 = data13[i0];
+ if (data14 && typeof data14 == "object" && !Array.isArray(data14)) {
+ if (data14.row === undefined) {
+ const err12 = {
+ instancePath: instancePath + "/spanningCells/" + i0,
+ schemaPath: "#/properties/spanningCells/items/required",
+ keyword: "required",
+ params: {
+ missingProperty: "row"
+ },
+ message: "must have required property '" + "row" + "'"
+ };
+ if (vErrors === null) {
+ vErrors = [err12];
+ }
+ else {
+ vErrors.push(err12);
+ }
+ errors++;
+ }
+ if (data14.col === undefined) {
+ const err13 = {
+ instancePath: instancePath + "/spanningCells/" + i0,
+ schemaPath: "#/properties/spanningCells/items/required",
+ keyword: "required",
+ params: {
+ missingProperty: "col"
+ },
+ message: "must have required property '" + "col" + "'"
+ };
+ if (vErrors === null) {
+ vErrors = [err13];
+ }
+ else {
+ vErrors.push(err13);
+ }
+ errors++;
+ }
+ for (const key2 in data14) {
+ if (!(func8.call(schema13.properties.spanningCells.items.properties, key2))) {
+ const err14 = {
+ instancePath: instancePath + "/spanningCells/" + i0,
+ schemaPath: "#/properties/spanningCells/items/additionalProperties",
+ keyword: "additionalProperties",
+ params: {
+ additionalProperty: key2
+ },
+ message: "must NOT have additional properties"
+ };
+ if (vErrors === null) {
+ vErrors = [err14];
+ }
+ else {
+ vErrors.push(err14);
+ }
+ errors++;
+ }
+ }
+ if (data14.col !== undefined) {
+ let data15 = data14.col;
+ if (!(((typeof data15 == "number") && (!(data15 % 1) && !isNaN(data15))) && (isFinite(data15)))) {
+ const err15 = {
+ instancePath: instancePath + "/spanningCells/" + i0 + "/col",
+ schemaPath: "#/properties/spanningCells/items/properties/col/type",
+ keyword: "type",
+ params: {
+ type: "integer"
+ },
+ message: "must be integer"
+ };
+ if (vErrors === null) {
+ vErrors = [err15];
+ }
+ else {
+ vErrors.push(err15);
+ }
+ errors++;
+ }
+ if ((typeof data15 == "number") && (isFinite(data15))) {
+ if (data15 < 0 || isNaN(data15)) {
+ const err16 = {
+ instancePath: instancePath + "/spanningCells/" + i0 + "/col",
+ schemaPath: "#/properties/spanningCells/items/properties/col/minimum",
+ keyword: "minimum",
+ params: {
+ comparison: ">=",
+ limit: 0
+ },
+ message: "must be >= 0"
+ };
+ if (vErrors === null) {
+ vErrors = [err16];
+ }
+ else {
+ vErrors.push(err16);
+ }
+ errors++;
+ }
+ }
+ }
+ if (data14.row !== undefined) {
+ let data16 = data14.row;
+ if (!(((typeof data16 == "number") && (!(data16 % 1) && !isNaN(data16))) && (isFinite(data16)))) {
+ const err17 = {
+ instancePath: instancePath + "/spanningCells/" + i0 + "/row",
+ schemaPath: "#/properties/spanningCells/items/properties/row/type",
+ keyword: "type",
+ params: {
+ type: "integer"
+ },
+ message: "must be integer"
+ };
+ if (vErrors === null) {
+ vErrors = [err17];
+ }
+ else {
+ vErrors.push(err17);
+ }
+ errors++;
+ }
+ if ((typeof data16 == "number") && (isFinite(data16))) {
+ if (data16 < 0 || isNaN(data16)) {
+ const err18 = {
+ instancePath: instancePath + "/spanningCells/" + i0 + "/row",
+ schemaPath: "#/properties/spanningCells/items/properties/row/minimum",
+ keyword: "minimum",
+ params: {
+ comparison: ">=",
+ limit: 0
+ },
+ message: "must be >= 0"
+ };
+ if (vErrors === null) {
+ vErrors = [err18];
+ }
+ else {
+ vErrors.push(err18);
+ }
+ errors++;
+ }
+ }
+ }
+ if (data14.colSpan !== undefined) {
+ let data17 = data14.colSpan;
+ if (!(((typeof data17 == "number") && (!(data17 % 1) && !isNaN(data17))) && (isFinite(data17)))) {
+ const err19 = {
+ instancePath: instancePath + "/spanningCells/" + i0 + "/colSpan",
+ schemaPath: "#/properties/spanningCells/items/properties/colSpan/type",
+ keyword: "type",
+ params: {
+ type: "integer"
+ },
+ message: "must be integer"
+ };
+ if (vErrors === null) {
+ vErrors = [err19];
+ }
+ else {
+ vErrors.push(err19);
+ }
+ errors++;
+ }
+ if ((typeof data17 == "number") && (isFinite(data17))) {
+ if (data17 < 1 || isNaN(data17)) {
+ const err20 = {
+ instancePath: instancePath + "/spanningCells/" + i0 + "/colSpan",
+ schemaPath: "#/properties/spanningCells/items/properties/colSpan/minimum",
+ keyword: "minimum",
+ params: {
+ comparison: ">=",
+ limit: 1
+ },
+ message: "must be >= 1"
+ };
+ if (vErrors === null) {
+ vErrors = [err20];
+ }
+ else {
+ vErrors.push(err20);
+ }
+ errors++;
+ }
+ }
+ }
+ if (data14.rowSpan !== undefined) {
+ let data18 = data14.rowSpan;
+ if (!(((typeof data18 == "number") && (!(data18 % 1) && !isNaN(data18))) && (isFinite(data18)))) {
+ const err21 = {
+ instancePath: instancePath + "/spanningCells/" + i0 + "/rowSpan",
+ schemaPath: "#/properties/spanningCells/items/properties/rowSpan/type",
+ keyword: "type",
+ params: {
+ type: "integer"
+ },
+ message: "must be integer"
+ };
+ if (vErrors === null) {
+ vErrors = [err21];
+ }
+ else {
+ vErrors.push(err21);
+ }
+ errors++;
+ }
+ if ((typeof data18 == "number") && (isFinite(data18))) {
+ if (data18 < 1 || isNaN(data18)) {
+ const err22 = {
+ instancePath: instancePath + "/spanningCells/" + i0 + "/rowSpan",
+ schemaPath: "#/properties/spanningCells/items/properties/rowSpan/minimum",
+ keyword: "minimum",
+ params: {
+ comparison: ">=",
+ limit: 1
+ },
+ message: "must be >= 1"
+ };
+ if (vErrors === null) {
+ vErrors = [err22];
+ }
+ else {
+ vErrors.push(err22);
+ }
+ errors++;
+ }
+ }
+ }
+ if (data14.alignment !== undefined) {
+ if (!(validate68(data14.alignment, {
+ instancePath: instancePath + "/spanningCells/" + i0 + "/alignment",
+ parentData: data14,
+ parentDataProperty: "alignment",
+ rootData
+ }))) {
+ vErrors = vErrors === null ? validate68.errors : vErrors.concat(validate68.errors);
+ errors = vErrors.length;
+ }
+ }
+ if (data14.verticalAlignment !== undefined) {
+ if (!(validate84(data14.verticalAlignment, {
+ instancePath: instancePath + "/spanningCells/" + i0 + "/verticalAlignment",
+ parentData: data14,
+ parentDataProperty: "verticalAlignment",
+ rootData
+ }))) {
+ vErrors = vErrors === null ? validate84.errors : vErrors.concat(validate84.errors);
+ errors = vErrors.length;
+ }
+ }
+ if (data14.wrapWord !== undefined) {
+ if (typeof data14.wrapWord !== "boolean") {
+ const err23 = {
+ instancePath: instancePath + "/spanningCells/" + i0 + "/wrapWord",
+ schemaPath: "#/properties/spanningCells/items/properties/wrapWord/type",
+ keyword: "type",
+ params: {
+ type: "boolean"
+ },
+ message: "must be boolean"
+ };
+ if (vErrors === null) {
+ vErrors = [err23];
+ }
+ else {
+ vErrors.push(err23);
+ }
+ errors++;
+ }
+ }
+ if (data14.truncate !== undefined) {
+ let data22 = data14.truncate;
+ if (!(((typeof data22 == "number") && (!(data22 % 1) && !isNaN(data22))) && (isFinite(data22)))) {
+ const err24 = {
+ instancePath: instancePath + "/spanningCells/" + i0 + "/truncate",
+ schemaPath: "#/properties/spanningCells/items/properties/truncate/type",
+ keyword: "type",
+ params: {
+ type: "integer"
+ },
+ message: "must be integer"
+ };
+ if (vErrors === null) {
+ vErrors = [err24];
+ }
+ else {
+ vErrors.push(err24);
+ }
+ errors++;
+ }
+ }
+ if (data14.paddingLeft !== undefined) {
+ let data23 = data14.paddingLeft;
+ if (!(((typeof data23 == "number") && (!(data23 % 1) && !isNaN(data23))) && (isFinite(data23)))) {
+ const err25 = {
+ instancePath: instancePath + "/spanningCells/" + i0 + "/paddingLeft",
+ schemaPath: "#/properties/spanningCells/items/properties/paddingLeft/type",
+ keyword: "type",
+ params: {
+ type: "integer"
+ },
+ message: "must be integer"
+ };
+ if (vErrors === null) {
+ vErrors = [err25];
+ }
+ else {
+ vErrors.push(err25);
+ }
+ errors++;
+ }
+ }
+ if (data14.paddingRight !== undefined) {
+ let data24 = data14.paddingRight;
+ if (!(((typeof data24 == "number") && (!(data24 % 1) && !isNaN(data24))) && (isFinite(data24)))) {
+ const err26 = {
+ instancePath: instancePath + "/spanningCells/" + i0 + "/paddingRight",
+ schemaPath: "#/properties/spanningCells/items/properties/paddingRight/type",
+ keyword: "type",
+ params: {
+ type: "integer"
+ },
+ message: "must be integer"
+ };
+ if (vErrors === null) {
+ vErrors = [err26];
+ }
+ else {
+ vErrors.push(err26);
+ }
+ errors++;
+ }
+ }
+ }
+ else {
+ const err27 = {
+ instancePath: instancePath + "/spanningCells/" + i0,
+ schemaPath: "#/properties/spanningCells/items/type",
+ keyword: "type",
+ params: {
+ type: "object"
+ },
+ message: "must be object"
+ };
+ if (vErrors === null) {
+ vErrors = [err27];
+ }
+ else {
+ vErrors.push(err27);
+ }
+ errors++;
+ }
+ }
+ }
+ else {
+ const err28 = {
+ instancePath: instancePath + "/spanningCells",
+ schemaPath: "#/properties/spanningCells/type",
+ keyword: "type",
+ params: {
+ type: "array"
+ },
+ message: "must be array"
+ };
+ if (vErrors === null) {
+ vErrors = [err28];
+ }
+ else {
+ vErrors.push(err28);
+ }
+ errors++;
+ }
+ }
+ }
+ else {
+ const err29 = {
+ instancePath,
+ schemaPath: "#/type",
+ keyword: "type",
+ params: {
+ type: "object"
+ },
+ message: "must be object"
+ };
+ if (vErrors === null) {
+ vErrors = [err29];
+ }
+ else {
+ vErrors.push(err29);
+ }
+ errors++;
+ }
+ validate43.errors = vErrors;
+ return errors === 0;
+}
+exports["streamConfig.json"] = validate86;
+const schema24 = {
+ "$id": "streamConfig.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "type": "object",
+ "properties": {
+ "border": {
+ "$ref": "shared.json#/definitions/borders"
+ },
+ "columns": {
+ "$ref": "shared.json#/definitions/columns"
+ },
+ "columnDefault": {
+ "$ref": "shared.json#/definitions/column"
+ },
+ "columnCount": {
+ "type": "integer",
+ "minimum": 1
+ },
+ "drawVerticalLine": {
+ "typeof": "function"
+ }
+ },
+ "required": ["columnDefault", "columnCount"],
+ "additionalProperties": false
+};
+function validate87(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) {
+ let vErrors = null;
+ let errors = 0;
+ if (data && typeof data == "object" && !Array.isArray(data)) {
+ for (const key0 in data) {
+ if (!(func8.call(schema15.properties, key0))) {
+ const err0 = {
+ instancePath,
+ schemaPath: "#/additionalProperties",
+ keyword: "additionalProperties",
+ params: {
+ additionalProperty: key0
+ },
+ message: "must NOT have additional properties"
+ };
+ if (vErrors === null) {
+ vErrors = [err0];
+ }
+ else {
+ vErrors.push(err0);
+ }
+ errors++;
+ }
+ }
+ if (data.topBody !== undefined) {
+ if (!(validate46(data.topBody, {
+ instancePath: instancePath + "/topBody",
+ parentData: data,
+ parentDataProperty: "topBody",
+ rootData
+ }))) {
+ vErrors = vErrors === null ? validate46.errors : vErrors.concat(validate46.errors);
+ errors = vErrors.length;
+ }
+ }
+ if (data.topJoin !== undefined) {
+ if (!(validate46(data.topJoin, {
+ instancePath: instancePath + "/topJoin",
+ parentData: data,
+ parentDataProperty: "topJoin",
+ rootData
+ }))) {
+ vErrors = vErrors === null ? validate46.errors : vErrors.concat(validate46.errors);
+ errors = vErrors.length;
+ }
+ }
+ if (data.topLeft !== undefined) {
+ if (!(validate46(data.topLeft, {
+ instancePath: instancePath + "/topLeft",
+ parentData: data,
+ parentDataProperty: "topLeft",
+ rootData
+ }))) {
+ vErrors = vErrors === null ? validate46.errors : vErrors.concat(validate46.errors);
+ errors = vErrors.length;
+ }
+ }
+ if (data.topRight !== undefined) {
+ if (!(validate46(data.topRight, {
+ instancePath: instancePath + "/topRight",
+ parentData: data,
+ parentDataProperty: "topRight",
+ rootData
+ }))) {
+ vErrors = vErrors === null ? validate46.errors : vErrors.concat(validate46.errors);
+ errors = vErrors.length;
+ }
+ }
+ if (data.bottomBody !== undefined) {
+ if (!(validate46(data.bottomBody, {
+ instancePath: instancePath + "/bottomBody",
+ parentData: data,
+ parentDataProperty: "bottomBody",
+ rootData
+ }))) {
+ vErrors = vErrors === null ? validate46.errors : vErrors.concat(validate46.errors);
+ errors = vErrors.length;
+ }
+ }
+ if (data.bottomJoin !== undefined) {
+ if (!(validate46(data.bottomJoin, {
+ instancePath: instancePath + "/bottomJoin",
+ parentData: data,
+ parentDataProperty: "bottomJoin",
+ rootData
+ }))) {
+ vErrors = vErrors === null ? validate46.errors : vErrors.concat(validate46.errors);
+ errors = vErrors.length;
+ }
+ }
+ if (data.bottomLeft !== undefined) {
+ if (!(validate46(data.bottomLeft, {
+ instancePath: instancePath + "/bottomLeft",
+ parentData: data,
+ parentDataProperty: "bottomLeft",
+ rootData
+ }))) {
+ vErrors = vErrors === null ? validate46.errors : vErrors.concat(validate46.errors);
+ errors = vErrors.length;
+ }
+ }
+ if (data.bottomRight !== undefined) {
+ if (!(validate46(data.bottomRight, {
+ instancePath: instancePath + "/bottomRight",
+ parentData: data,
+ parentDataProperty: "bottomRight",
+ rootData
+ }))) {
+ vErrors = vErrors === null ? validate46.errors : vErrors.concat(validate46.errors);
+ errors = vErrors.length;
+ }
+ }
+ if (data.bodyLeft !== undefined) {
+ if (!(validate46(data.bodyLeft, {
+ instancePath: instancePath + "/bodyLeft",
+ parentData: data,
+ parentDataProperty: "bodyLeft",
+ rootData
+ }))) {
+ vErrors = vErrors === null ? validate46.errors : vErrors.concat(validate46.errors);
+ errors = vErrors.length;
+ }
+ }
+ if (data.bodyRight !== undefined) {
+ if (!(validate46(data.bodyRight, {
+ instancePath: instancePath + "/bodyRight",
+ parentData: data,
+ parentDataProperty: "bodyRight",
+ rootData
+ }))) {
+ vErrors = vErrors === null ? validate46.errors : vErrors.concat(validate46.errors);
+ errors = vErrors.length;
+ }
+ }
+ if (data.bodyJoin !== undefined) {
+ if (!(validate46(data.bodyJoin, {
+ instancePath: instancePath + "/bodyJoin",
+ parentData: data,
+ parentDataProperty: "bodyJoin",
+ rootData
+ }))) {
+ vErrors = vErrors === null ? validate46.errors : vErrors.concat(validate46.errors);
+ errors = vErrors.length;
+ }
+ }
+ if (data.headerJoin !== undefined) {
+ if (!(validate46(data.headerJoin, {
+ instancePath: instancePath + "/headerJoin",
+ parentData: data,
+ parentDataProperty: "headerJoin",
+ rootData
+ }))) {
+ vErrors = vErrors === null ? validate46.errors : vErrors.concat(validate46.errors);
+ errors = vErrors.length;
+ }
+ }
+ if (data.joinBody !== undefined) {
+ if (!(validate46(data.joinBody, {
+ instancePath: instancePath + "/joinBody",
+ parentData: data,
+ parentDataProperty: "joinBody",
+ rootData
+ }))) {
+ vErrors = vErrors === null ? validate46.errors : vErrors.concat(validate46.errors);
+ errors = vErrors.length;
+ }
+ }
+ if (data.joinLeft !== undefined) {
+ if (!(validate46(data.joinLeft, {
+ instancePath: instancePath + "/joinLeft",
+ parentData: data,
+ parentDataProperty: "joinLeft",
+ rootData
+ }))) {
+ vErrors = vErrors === null ? validate46.errors : vErrors.concat(validate46.errors);
+ errors = vErrors.length;
+ }
+ }
+ if (data.joinRight !== undefined) {
+ if (!(validate46(data.joinRight, {
+ instancePath: instancePath + "/joinRight",
+ parentData: data,
+ parentDataProperty: "joinRight",
+ rootData
+ }))) {
+ vErrors = vErrors === null ? validate46.errors : vErrors.concat(validate46.errors);
+ errors = vErrors.length;
+ }
+ }
+ if (data.joinJoin !== undefined) {
+ if (!(validate46(data.joinJoin, {
+ instancePath: instancePath + "/joinJoin",
+ parentData: data,
+ parentDataProperty: "joinJoin",
+ rootData
+ }))) {
+ vErrors = vErrors === null ? validate46.errors : vErrors.concat(validate46.errors);
+ errors = vErrors.length;
+ }
+ }
+ if (data.joinMiddleUp !== undefined) {
+ if (!(validate46(data.joinMiddleUp, {
+ instancePath: instancePath + "/joinMiddleUp",
+ parentData: data,
+ parentDataProperty: "joinMiddleUp",
+ rootData
+ }))) {
+ vErrors = vErrors === null ? validate46.errors : vErrors.concat(validate46.errors);
+ errors = vErrors.length;
+ }
+ }
+ if (data.joinMiddleDown !== undefined) {
+ if (!(validate46(data.joinMiddleDown, {
+ instancePath: instancePath + "/joinMiddleDown",
+ parentData: data,
+ parentDataProperty: "joinMiddleDown",
+ rootData
+ }))) {
+ vErrors = vErrors === null ? validate46.errors : vErrors.concat(validate46.errors);
+ errors = vErrors.length;
+ }
+ }
+ if (data.joinMiddleLeft !== undefined) {
+ if (!(validate46(data.joinMiddleLeft, {
+ instancePath: instancePath + "/joinMiddleLeft",
+ parentData: data,
+ parentDataProperty: "joinMiddleLeft",
+ rootData
+ }))) {
+ vErrors = vErrors === null ? validate46.errors : vErrors.concat(validate46.errors);
+ errors = vErrors.length;
+ }
+ }
+ if (data.joinMiddleRight !== undefined) {
+ if (!(validate46(data.joinMiddleRight, {
+ instancePath: instancePath + "/joinMiddleRight",
+ parentData: data,
+ parentDataProperty: "joinMiddleRight",
+ rootData
+ }))) {
+ vErrors = vErrors === null ? validate46.errors : vErrors.concat(validate46.errors);
+ errors = vErrors.length;
+ }
+ }
+ }
+ else {
+ const err1 = {
+ instancePath,
+ schemaPath: "#/type",
+ keyword: "type",
+ params: {
+ type: "object"
+ },
+ message: "must be object"
+ };
+ if (vErrors === null) {
+ vErrors = [err1];
+ }
+ else {
+ vErrors.push(err1);
+ }
+ errors++;
+ }
+ validate87.errors = vErrors;
+ return errors === 0;
+}
+function validate109(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) {
+ let vErrors = null;
+ let errors = 0;
+ const _errs0 = errors;
+ let valid0 = false;
+ let passing0 = null;
+ const _errs1 = errors;
+ if (data && typeof data == "object" && !Array.isArray(data)) {
+ for (const key0 in data) {
+ if (!(pattern0.test(key0))) {
+ const err0 = {
+ instancePath,
+ schemaPath: "#/oneOf/0/additionalProperties",
+ keyword: "additionalProperties",
+ params: {
+ additionalProperty: key0
+ },
+ message: "must NOT have additional properties"
+ };
+ if (vErrors === null) {
+ vErrors = [err0];
+ }
+ else {
+ vErrors.push(err0);
+ }
+ errors++;
+ }
+ }
+ for (const key1 in data) {
+ if (pattern0.test(key1)) {
+ if (!(validate71(data[key1], {
+ instancePath: instancePath + "/" + key1.replace(/~/g, "~0").replace(/\//g, "~1"),
+ parentData: data,
+ parentDataProperty: key1,
+ rootData
+ }))) {
+ vErrors = vErrors === null ? validate71.errors : vErrors.concat(validate71.errors);
+ errors = vErrors.length;
+ }
+ }
+ }
+ }
+ else {
+ const err1 = {
+ instancePath,
+ schemaPath: "#/oneOf/0/type",
+ keyword: "type",
+ params: {
+ type: "object"
+ },
+ message: "must be object"
+ };
+ if (vErrors === null) {
+ vErrors = [err1];
+ }
+ else {
+ vErrors.push(err1);
+ }
+ errors++;
+ }
+ var _valid0 = _errs1 === errors;
+ if (_valid0) {
+ valid0 = true;
+ passing0 = 0;
+ }
+ const _errs5 = errors;
+ if (Array.isArray(data)) {
+ const len0 = data.length;
+ for (let i0 = 0; i0 < len0; i0++) {
+ if (!(validate71(data[i0], {
+ instancePath: instancePath + "/" + i0,
+ parentData: data,
+ parentDataProperty: i0,
+ rootData
+ }))) {
+ vErrors = vErrors === null ? validate71.errors : vErrors.concat(validate71.errors);
+ errors = vErrors.length;
+ }
+ }
+ }
+ else {
+ const err2 = {
+ instancePath,
+ schemaPath: "#/oneOf/1/type",
+ keyword: "type",
+ params: {
+ type: "array"
+ },
+ message: "must be array"
+ };
+ if (vErrors === null) {
+ vErrors = [err2];
+ }
+ else {
+ vErrors.push(err2);
+ }
+ errors++;
+ }
+ var _valid0 = _errs5 === errors;
+ if (_valid0 && valid0) {
+ valid0 = false;
+ passing0 = [passing0, 1];
+ }
+ else {
+ if (_valid0) {
+ valid0 = true;
+ passing0 = 1;
+ }
+ }
+ if (!valid0) {
+ const err3 = {
+ instancePath,
+ schemaPath: "#/oneOf",
+ keyword: "oneOf",
+ params: {
+ passingSchemas: passing0
+ },
+ message: "must match exactly one schema in oneOf"
+ };
+ if (vErrors === null) {
+ vErrors = [err3];
+ }
+ else {
+ vErrors.push(err3);
+ }
+ errors++;
+ }
+ else {
+ errors = _errs0;
+ if (vErrors !== null) {
+ if (_errs0) {
+ vErrors.length = _errs0;
+ }
+ else {
+ vErrors = null;
+ }
+ }
+ }
+ validate109.errors = vErrors;
+ return errors === 0;
+}
+function validate113(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) {
+ let vErrors = null;
+ let errors = 0;
+ if (data && typeof data == "object" && !Array.isArray(data)) {
+ for (const key0 in data) {
+ if (!(((((((key0 === "alignment") || (key0 === "verticalAlignment")) || (key0 === "width")) || (key0 === "wrapWord")) || (key0 === "truncate")) || (key0 === "paddingLeft")) || (key0 === "paddingRight"))) {
+ const err0 = {
+ instancePath,
+ schemaPath: "#/additionalProperties",
+ keyword: "additionalProperties",
+ params: {
+ additionalProperty: key0
+ },
+ message: "must NOT have additional properties"
+ };
+ if (vErrors === null) {
+ vErrors = [err0];
+ }
+ else {
+ vErrors.push(err0);
+ }
+ errors++;
+ }
+ }
+ if (data.alignment !== undefined) {
+ if (!(validate72(data.alignment, {
+ instancePath: instancePath + "/alignment",
+ parentData: data,
+ parentDataProperty: "alignment",
+ rootData
+ }))) {
+ vErrors = vErrors === null ? validate72.errors : vErrors.concat(validate72.errors);
+ errors = vErrors.length;
+ }
+ }
+ if (data.verticalAlignment !== undefined) {
+ if (!(validate74(data.verticalAlignment, {
+ instancePath: instancePath + "/verticalAlignment",
+ parentData: data,
+ parentDataProperty: "verticalAlignment",
+ rootData
+ }))) {
+ vErrors = vErrors === null ? validate74.errors : vErrors.concat(validate74.errors);
+ errors = vErrors.length;
+ }
+ }
+ if (data.width !== undefined) {
+ let data2 = data.width;
+ if (!(((typeof data2 == "number") && (!(data2 % 1) && !isNaN(data2))) && (isFinite(data2)))) {
+ const err1 = {
+ instancePath: instancePath + "/width",
+ schemaPath: "#/properties/width/type",
+ keyword: "type",
+ params: {
+ type: "integer"
+ },
+ message: "must be integer"
+ };
+ if (vErrors === null) {
+ vErrors = [err1];
+ }
+ else {
+ vErrors.push(err1);
+ }
+ errors++;
+ }
+ if ((typeof data2 == "number") && (isFinite(data2))) {
+ if (data2 < 1 || isNaN(data2)) {
+ const err2 = {
+ instancePath: instancePath + "/width",
+ schemaPath: "#/properties/width/minimum",
+ keyword: "minimum",
+ params: {
+ comparison: ">=",
+ limit: 1
+ },
+ message: "must be >= 1"
+ };
+ if (vErrors === null) {
+ vErrors = [err2];
+ }
+ else {
+ vErrors.push(err2);
+ }
+ errors++;
+ }
+ }
+ }
+ if (data.wrapWord !== undefined) {
+ if (typeof data.wrapWord !== "boolean") {
+ const err3 = {
+ instancePath: instancePath + "/wrapWord",
+ schemaPath: "#/properties/wrapWord/type",
+ keyword: "type",
+ params: {
+ type: "boolean"
+ },
+ message: "must be boolean"
+ };
+ if (vErrors === null) {
+ vErrors = [err3];
+ }
+ else {
+ vErrors.push(err3);
+ }
+ errors++;
+ }
+ }
+ if (data.truncate !== undefined) {
+ let data4 = data.truncate;
+ if (!(((typeof data4 == "number") && (!(data4 % 1) && !isNaN(data4))) && (isFinite(data4)))) {
+ const err4 = {
+ instancePath: instancePath + "/truncate",
+ schemaPath: "#/properties/truncate/type",
+ keyword: "type",
+ params: {
+ type: "integer"
+ },
+ message: "must be integer"
+ };
+ if (vErrors === null) {
+ vErrors = [err4];
+ }
+ else {
+ vErrors.push(err4);
+ }
+ errors++;
+ }
+ }
+ if (data.paddingLeft !== undefined) {
+ let data5 = data.paddingLeft;
+ if (!(((typeof data5 == "number") && (!(data5 % 1) && !isNaN(data5))) && (isFinite(data5)))) {
+ const err5 = {
+ instancePath: instancePath + "/paddingLeft",
+ schemaPath: "#/properties/paddingLeft/type",
+ keyword: "type",
+ params: {
+ type: "integer"
+ },
+ message: "must be integer"
+ };
+ if (vErrors === null) {
+ vErrors = [err5];
+ }
+ else {
+ vErrors.push(err5);
+ }
+ errors++;
+ }
+ }
+ if (data.paddingRight !== undefined) {
+ let data6 = data.paddingRight;
+ if (!(((typeof data6 == "number") && (!(data6 % 1) && !isNaN(data6))) && (isFinite(data6)))) {
+ const err6 = {
+ instancePath: instancePath + "/paddingRight",
+ schemaPath: "#/properties/paddingRight/type",
+ keyword: "type",
+ params: {
+ type: "integer"
+ },
+ message: "must be integer"
+ };
+ if (vErrors === null) {
+ vErrors = [err6];
+ }
+ else {
+ vErrors.push(err6);
+ }
+ errors++;
+ }
+ }
+ }
+ else {
+ const err7 = {
+ instancePath,
+ schemaPath: "#/type",
+ keyword: "type",
+ params: {
+ type: "object"
+ },
+ message: "must be object"
+ };
+ if (vErrors === null) {
+ vErrors = [err7];
+ }
+ else {
+ vErrors.push(err7);
+ }
+ errors++;
+ }
+ validate113.errors = vErrors;
+ return errors === 0;
+}
+function validate86(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) {
+ /*# sourceURL="streamConfig.json" */ ;
+ let vErrors = null;
+ let errors = 0;
+ if (data && typeof data == "object" && !Array.isArray(data)) {
+ if (data.columnDefault === undefined) {
+ const err0 = {
+ instancePath,
+ schemaPath: "#/required",
+ keyword: "required",
+ params: {
+ missingProperty: "columnDefault"
+ },
+ message: "must have required property '" + "columnDefault" + "'"
+ };
+ if (vErrors === null) {
+ vErrors = [err0];
+ }
+ else {
+ vErrors.push(err0);
+ }
+ errors++;
+ }
+ if (data.columnCount === undefined) {
+ const err1 = {
+ instancePath,
+ schemaPath: "#/required",
+ keyword: "required",
+ params: {
+ missingProperty: "columnCount"
+ },
+ message: "must have required property '" + "columnCount" + "'"
+ };
+ if (vErrors === null) {
+ vErrors = [err1];
+ }
+ else {
+ vErrors.push(err1);
+ }
+ errors++;
+ }
+ for (const key0 in data) {
+ if (!(((((key0 === "border") || (key0 === "columns")) || (key0 === "columnDefault")) || (key0 === "columnCount")) || (key0 === "drawVerticalLine"))) {
+ const err2 = {
+ instancePath,
+ schemaPath: "#/additionalProperties",
+ keyword: "additionalProperties",
+ params: {
+ additionalProperty: key0
+ },
+ message: "must NOT have additional properties"
+ };
+ if (vErrors === null) {
+ vErrors = [err2];
+ }
+ else {
+ vErrors.push(err2);
+ }
+ errors++;
+ }
+ }
+ if (data.border !== undefined) {
+ if (!(validate87(data.border, {
+ instancePath: instancePath + "/border",
+ parentData: data,
+ parentDataProperty: "border",
+ rootData
+ }))) {
+ vErrors = vErrors === null ? validate87.errors : vErrors.concat(validate87.errors);
+ errors = vErrors.length;
+ }
+ }
+ if (data.columns !== undefined) {
+ if (!(validate109(data.columns, {
+ instancePath: instancePath + "/columns",
+ parentData: data,
+ parentDataProperty: "columns",
+ rootData
+ }))) {
+ vErrors = vErrors === null ? validate109.errors : vErrors.concat(validate109.errors);
+ errors = vErrors.length;
+ }
+ }
+ if (data.columnDefault !== undefined) {
+ if (!(validate113(data.columnDefault, {
+ instancePath: instancePath + "/columnDefault",
+ parentData: data,
+ parentDataProperty: "columnDefault",
+ rootData
+ }))) {
+ vErrors = vErrors === null ? validate113.errors : vErrors.concat(validate113.errors);
+ errors = vErrors.length;
+ }
+ }
+ if (data.columnCount !== undefined) {
+ let data3 = data.columnCount;
+ if (!(((typeof data3 == "number") && (!(data3 % 1) && !isNaN(data3))) && (isFinite(data3)))) {
+ const err3 = {
+ instancePath: instancePath + "/columnCount",
+ schemaPath: "#/properties/columnCount/type",
+ keyword: "type",
+ params: {
+ type: "integer"
+ },
+ message: "must be integer"
+ };
+ if (vErrors === null) {
+ vErrors = [err3];
+ }
+ else {
+ vErrors.push(err3);
+ }
+ errors++;
+ }
+ if ((typeof data3 == "number") && (isFinite(data3))) {
+ if (data3 < 1 || isNaN(data3)) {
+ const err4 = {
+ instancePath: instancePath + "/columnCount",
+ schemaPath: "#/properties/columnCount/minimum",
+ keyword: "minimum",
+ params: {
+ comparison: ">=",
+ limit: 1
+ },
+ message: "must be >= 1"
+ };
+ if (vErrors === null) {
+ vErrors = [err4];
+ }
+ else {
+ vErrors.push(err4);
+ }
+ errors++;
+ }
+ }
+ }
+ if (data.drawVerticalLine !== undefined) {
+ if (typeof data.drawVerticalLine != "function") {
+ const err5 = {
+ instancePath: instancePath + "/drawVerticalLine",
+ schemaPath: "#/properties/drawVerticalLine/typeof",
+ keyword: "typeof",
+ params: {},
+ message: "must pass \"typeof\" keyword validation"
+ };
+ if (vErrors === null) {
+ vErrors = [err5];
+ }
+ else {
+ vErrors.push(err5);
+ }
+ errors++;
+ }
+ }
+ }
+ else {
+ const err6 = {
+ instancePath,
+ schemaPath: "#/type",
+ keyword: "type",
+ params: {
+ type: "object"
+ },
+ message: "must be object"
+ };
+ if (vErrors === null) {
+ vErrors = [err6];
+ }
+ else {
+ vErrors.push(err6);
+ }
+ errors++;
+ }
+ validate86.errors = vErrors;
+ return errors === 0;
+}
+//# sourceMappingURL=validators.js.map
+
+/***/ }),
+
+/***/ 21726:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+/* eslint-disable sort-keys-fix/sort-keys-fix */
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.getBorderCharacters = void 0;
+const getBorderCharacters = (name) => {
+ if (name === 'honeywell') {
+ return {
+ topBody: '═',
+ topJoin: '╤',
+ topLeft: '╔',
+ topRight: '╗',
+ bottomBody: '═',
+ bottomJoin: '╧',
+ bottomLeft: '╚',
+ bottomRight: '╝',
+ bodyLeft: '║',
+ bodyRight: '║',
+ bodyJoin: '│',
+ headerJoin: '┬',
+ joinBody: '─',
+ joinLeft: '╟',
+ joinRight: '╢',
+ joinJoin: '┼',
+ joinMiddleDown: '┬',
+ joinMiddleUp: '┴',
+ joinMiddleLeft: '┤',
+ joinMiddleRight: '├',
+ };
+ }
+ if (name === 'norc') {
+ return {
+ topBody: '─',
+ topJoin: '┬',
+ topLeft: '┌',
+ topRight: '┐',
+ bottomBody: '─',
+ bottomJoin: '┴',
+ bottomLeft: '└',
+ bottomRight: '┘',
+ bodyLeft: '│',
+ bodyRight: '│',
+ bodyJoin: '│',
+ headerJoin: '┬',
+ joinBody: '─',
+ joinLeft: '├',
+ joinRight: '┤',
+ joinJoin: '┼',
+ joinMiddleDown: '┬',
+ joinMiddleUp: '┴',
+ joinMiddleLeft: '┤',
+ joinMiddleRight: '├',
+ };
+ }
+ if (name === 'ramac') {
+ return {
+ topBody: '-',
+ topJoin: '+',
+ topLeft: '+',
+ topRight: '+',
+ bottomBody: '-',
+ bottomJoin: '+',
+ bottomLeft: '+',
+ bottomRight: '+',
+ bodyLeft: '|',
+ bodyRight: '|',
+ bodyJoin: '|',
+ headerJoin: '+',
+ joinBody: '-',
+ joinLeft: '|',
+ joinRight: '|',
+ joinJoin: '|',
+ joinMiddleDown: '+',
+ joinMiddleUp: '+',
+ joinMiddleLeft: '+',
+ joinMiddleRight: '+',
+ };
+ }
+ if (name === 'void') {
+ return {
+ topBody: '',
+ topJoin: '',
+ topLeft: '',
+ topRight: '',
+ bottomBody: '',
+ bottomJoin: '',
+ bottomLeft: '',
+ bottomRight: '',
+ bodyLeft: '',
+ bodyRight: '',
+ bodyJoin: '',
+ headerJoin: '',
+ joinBody: '',
+ joinLeft: '',
+ joinRight: '',
+ joinJoin: '',
+ joinMiddleDown: '',
+ joinMiddleUp: '',
+ joinMiddleLeft: '',
+ joinMiddleRight: '',
+ };
+ }
+ throw new Error('Unknown border template "' + name + '".');
+};
+exports.getBorderCharacters = getBorderCharacters;
+//# sourceMappingURL=getBorderCharacters.js.map
+
+/***/ }),
+
+/***/ 13756:
+/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
+
+"use strict";
+
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ o[k2] = m[k];
+}));
+var __exportStar = (this && this.__exportStar) || function(m, exports) {
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
+};
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.getBorderCharacters = exports.createStream = exports.table = void 0;
+const createStream_1 = __nccwpck_require__(67627);
+Object.defineProperty(exports, "createStream", ({ enumerable: true, get: function () { return createStream_1.createStream; } }));
+const getBorderCharacters_1 = __nccwpck_require__(21726);
+Object.defineProperty(exports, "getBorderCharacters", ({ enumerable: true, get: function () { return getBorderCharacters_1.getBorderCharacters; } }));
+const table_1 = __nccwpck_require__(82676);
+Object.defineProperty(exports, "table", ({ enumerable: true, get: function () { return table_1.table; } }));
+__exportStar(__nccwpck_require__(84935), exports);
+//# sourceMappingURL=index.js.map
+
+/***/ }),
+
+/***/ 29522:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.injectHeaderConfig = void 0;
+const injectHeaderConfig = (rows, config) => {
+ var _a;
+ let spanningCellConfig = (_a = config.spanningCells) !== null && _a !== void 0 ? _a : [];
+ const headerConfig = config.header;
+ const adjustedRows = [...rows];
+ if (headerConfig) {
+ spanningCellConfig = spanningCellConfig.map(({ row, ...rest }) => {
+ return { ...rest,
+ row: row + 1 };
+ });
+ const { content, ...headerStyles } = headerConfig;
+ spanningCellConfig.unshift({ alignment: 'center',
+ col: 0,
+ colSpan: rows[0].length,
+ paddingLeft: 1,
+ paddingRight: 1,
+ row: 0,
+ wrapWord: false,
+ ...headerStyles });
+ adjustedRows.unshift([content, ...Array.from({ length: rows[0].length - 1 }).fill('')]);
+ }
+ return [adjustedRows,
+ spanningCellConfig];
+};
+exports.injectHeaderConfig = injectHeaderConfig;
+//# sourceMappingURL=injectHeaderConfig.js.map
+
+/***/ }),
+
+/***/ 20774:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.makeRangeConfig = void 0;
+const utils_1 = __nccwpck_require__(6500);
+const makeRangeConfig = (spanningCellConfig, columnsConfig) => {
+ var _a;
+ const { topLeft, bottomRight } = (0, utils_1.calculateRangeCoordinate)(spanningCellConfig);
+ const cellConfig = {
+ ...columnsConfig[topLeft.col],
+ ...spanningCellConfig,
+ paddingRight: (_a = spanningCellConfig.paddingRight) !== null && _a !== void 0 ? _a : columnsConfig[bottomRight.col].paddingRight,
+ };
+ return { ...cellConfig,
+ bottomRight,
+ topLeft };
+};
+exports.makeRangeConfig = makeRangeConfig;
+//# sourceMappingURL=makeRangeConfig.js.map
+
+/***/ }),
+
+/***/ 74404:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.makeStreamConfig = void 0;
+const utils_1 = __nccwpck_require__(6500);
+const validateConfig_1 = __nccwpck_require__(82683);
+/**
+ * Creates a configuration for every column using default
+ * values for the missing configuration properties.
+ */
+const makeColumnsConfig = (columnCount, columns = {}, columnDefault) => {
+ return Array.from({ length: columnCount }).map((_, index) => {
+ return {
+ alignment: 'left',
+ paddingLeft: 1,
+ paddingRight: 1,
+ truncate: Number.POSITIVE_INFINITY,
+ verticalAlignment: 'top',
+ wrapWord: false,
+ ...columnDefault,
+ ...columns[index],
+ };
+ });
+};
+/**
+ * Makes a new configuration object out of the userConfig object
+ * using default values for the missing configuration properties.
+ */
+const makeStreamConfig = (config) => {
+ (0, validateConfig_1.validateConfig)('streamConfig.json', config);
+ if (config.columnDefault.width === undefined) {
+ throw new Error('Must provide config.columnDefault.width when creating a stream.');
+ }
+ return {
+ drawVerticalLine: () => {
+ return true;
+ },
+ ...config,
+ border: (0, utils_1.makeBorderConfig)(config.border),
+ columns: makeColumnsConfig(config.columnCount, config.columns, config.columnDefault),
+ };
+};
+exports.makeStreamConfig = makeStreamConfig;
+//# sourceMappingURL=makeStreamConfig.js.map
+
+/***/ }),
+
+/***/ 67667:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.makeTableConfig = void 0;
+const calculateMaximumColumnWidths_1 = __nccwpck_require__(61605);
+const spanningCellManager_1 = __nccwpck_require__(7860);
+const utils_1 = __nccwpck_require__(6500);
+const validateConfig_1 = __nccwpck_require__(82683);
+const validateSpanningCellConfig_1 = __nccwpck_require__(51342);
+/**
+ * Creates a configuration for every column using default
+ * values for the missing configuration properties.
+ */
+const makeColumnsConfig = (rows, columns, columnDefault, spanningCellConfigs) => {
+ const columnWidths = (0, calculateMaximumColumnWidths_1.calculateMaximumColumnWidths)(rows, spanningCellConfigs);
+ return rows[0].map((_, columnIndex) => {
+ return {
+ alignment: 'left',
+ paddingLeft: 1,
+ paddingRight: 1,
+ truncate: Number.POSITIVE_INFINITY,
+ verticalAlignment: 'top',
+ width: columnWidths[columnIndex],
+ wrapWord: false,
+ ...columnDefault,
+ ...columns === null || columns === void 0 ? void 0 : columns[columnIndex],
+ };
+ });
+};
+/**
+ * Makes a new configuration object out of the userConfig object
+ * using default values for the missing configuration properties.
+ */
+const makeTableConfig = (rows, config = {}, injectedSpanningCellConfig) => {
+ var _a, _b, _c, _d, _e;
+ (0, validateConfig_1.validateConfig)('config.json', config);
+ (0, validateSpanningCellConfig_1.validateSpanningCellConfig)(rows, (_a = config.spanningCells) !== null && _a !== void 0 ? _a : []);
+ const spanningCellConfigs = (_b = injectedSpanningCellConfig !== null && injectedSpanningCellConfig !== void 0 ? injectedSpanningCellConfig : config.spanningCells) !== null && _b !== void 0 ? _b : [];
+ const columnsConfig = makeColumnsConfig(rows, config.columns, config.columnDefault, spanningCellConfigs);
+ const drawVerticalLine = (_c = config.drawVerticalLine) !== null && _c !== void 0 ? _c : (() => {
+ return true;
+ });
+ const drawHorizontalLine = (_d = config.drawHorizontalLine) !== null && _d !== void 0 ? _d : (() => {
+ return true;
+ });
+ return {
+ ...config,
+ border: (0, utils_1.makeBorderConfig)(config.border),
+ columns: columnsConfig,
+ drawHorizontalLine,
+ drawVerticalLine,
+ singleLine: (_e = config.singleLine) !== null && _e !== void 0 ? _e : false,
+ spanningCellManager: (0, spanningCellManager_1.createSpanningCellManager)({
+ columnsConfig,
+ drawHorizontalLine,
+ drawVerticalLine,
+ rows,
+ spanningCellConfigs,
+ }),
+ };
+};
+exports.makeTableConfig = makeTableConfig;
+//# sourceMappingURL=makeTableConfig.js.map
+
+/***/ }),
+
+/***/ 29156:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.mapDataUsingRowHeights = exports.padCellVertically = void 0;
+const utils_1 = __nccwpck_require__(6500);
+const wrapCell_1 = __nccwpck_require__(73442);
+const createEmptyStrings = (length) => {
+ return new Array(length).fill('');
+};
+const padCellVertically = (lines, rowHeight, verticalAlignment) => {
+ const availableLines = rowHeight - lines.length;
+ if (verticalAlignment === 'top') {
+ return [...lines, ...createEmptyStrings(availableLines)];
+ }
+ if (verticalAlignment === 'bottom') {
+ return [...createEmptyStrings(availableLines), ...lines];
+ }
+ return [
+ ...createEmptyStrings(Math.floor(availableLines / 2)),
+ ...lines,
+ ...createEmptyStrings(Math.ceil(availableLines / 2)),
+ ];
+};
+exports.padCellVertically = padCellVertically;
+const mapDataUsingRowHeights = (unmappedRows, rowHeights, config) => {
+ const nColumns = unmappedRows[0].length;
+ const mappedRows = unmappedRows.map((unmappedRow, unmappedRowIndex) => {
+ const outputRowHeight = rowHeights[unmappedRowIndex];
+ const outputRow = Array.from({ length: outputRowHeight }, () => {
+ return new Array(nColumns).fill('');
+ });
+ unmappedRow.forEach((cell, cellIndex) => {
+ var _a;
+ const containingRange = (_a = config.spanningCellManager) === null || _a === void 0 ? void 0 : _a.getContainingRange({ col: cellIndex,
+ row: unmappedRowIndex });
+ if (containingRange) {
+ containingRange.extractCellContent(unmappedRowIndex).forEach((cellLine, cellLineIndex) => {
+ outputRow[cellLineIndex][cellIndex] = cellLine;
+ });
+ return;
+ }
+ const cellLines = (0, wrapCell_1.wrapCell)(cell, config.columns[cellIndex].width, config.columns[cellIndex].wrapWord);
+ const paddedCellLines = (0, exports.padCellVertically)(cellLines, outputRowHeight, config.columns[cellIndex].verticalAlignment);
+ paddedCellLines.forEach((cellLine, cellLineIndex) => {
+ outputRow[cellLineIndex][cellIndex] = cellLine;
+ });
+ });
+ return outputRow;
+ });
+ return (0, utils_1.flatten)(mappedRows);
+};
+exports.mapDataUsingRowHeights = mapDataUsingRowHeights;
+//# sourceMappingURL=mapDataUsingRowHeights.js.map
+
+/***/ }),
+
+/***/ 11285:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.padTableData = exports.padString = void 0;
+const padString = (input, paddingLeft, paddingRight) => {
+ return ' '.repeat(paddingLeft) + input + ' '.repeat(paddingRight);
+};
+exports.padString = padString;
+const padTableData = (rows, config) => {
+ return rows.map((cells, rowIndex) => {
+ return cells.map((cell, cellIndex) => {
+ var _a;
+ const containingRange = (_a = config.spanningCellManager) === null || _a === void 0 ? void 0 : _a.getContainingRange({ col: cellIndex,
+ row: rowIndex }, { mapped: true });
+ if (containingRange) {
+ return cell;
+ }
+ const { paddingLeft, paddingRight } = config.columns[cellIndex];
+ return (0, exports.padString)(cell, paddingLeft, paddingRight);
+ });
+ });
+};
+exports.padTableData = padTableData;
+//# sourceMappingURL=padTableData.js.map
+
+/***/ }),
+
+/***/ 7860:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.createSpanningCellManager = void 0;
+const alignSpanningCell_1 = __nccwpck_require__(59556);
+const calculateSpanningCellWidth_1 = __nccwpck_require__(17147);
+const makeRangeConfig_1 = __nccwpck_require__(20774);
+const utils_1 = __nccwpck_require__(6500);
+const findRangeConfig = (cell, rangeConfigs) => {
+ return rangeConfigs.find((rangeCoordinate) => {
+ return (0, utils_1.isCellInRange)(cell, rangeCoordinate);
+ });
+};
+const getContainingRange = (rangeConfig, context) => {
+ const width = (0, calculateSpanningCellWidth_1.calculateSpanningCellWidth)(rangeConfig, context);
+ const wrappedContent = (0, alignSpanningCell_1.wrapRangeContent)(rangeConfig, width, context);
+ const alignedContent = (0, alignSpanningCell_1.alignVerticalRangeContent)(rangeConfig, wrappedContent, context);
+ const getCellContent = (rowIndex) => {
+ const { topLeft } = rangeConfig;
+ const { drawHorizontalLine, rowHeights } = context;
+ const totalWithinHorizontalBorderHeight = rowIndex - topLeft.row;
+ const totalHiddenHorizontalBorderHeight = (0, utils_1.sequence)(topLeft.row + 1, rowIndex).filter((index) => {
+ /* istanbul ignore next */
+ return !(drawHorizontalLine === null || drawHorizontalLine === void 0 ? void 0 : drawHorizontalLine(index, rowHeights.length));
+ }).length;
+ const offset = (0, utils_1.sumArray)(rowHeights.slice(topLeft.row, rowIndex)) + totalWithinHorizontalBorderHeight - totalHiddenHorizontalBorderHeight;
+ return alignedContent.slice(offset, offset + rowHeights[rowIndex]);
+ };
+ const getBorderContent = (borderIndex) => {
+ const { topLeft } = rangeConfig;
+ const offset = (0, utils_1.sumArray)(context.rowHeights.slice(topLeft.row, borderIndex)) + (borderIndex - topLeft.row - 1);
+ return alignedContent[offset];
+ };
+ return {
+ ...rangeConfig,
+ extractBorderContent: getBorderContent,
+ extractCellContent: getCellContent,
+ height: wrappedContent.length,
+ width,
+ };
+};
+const inSameRange = (cell1, cell2, ranges) => {
+ const range1 = findRangeConfig(cell1, ranges);
+ const range2 = findRangeConfig(cell2, ranges);
+ if (range1 && range2) {
+ return (0, utils_1.areCellEqual)(range1.topLeft, range2.topLeft);
+ }
+ return false;
+};
+const hashRange = (range) => {
+ const { row, col } = range.topLeft;
+ return `${row}/${col}`;
+};
+const createSpanningCellManager = (parameters) => {
+ const { spanningCellConfigs, columnsConfig } = parameters;
+ const ranges = spanningCellConfigs.map((config) => {
+ return (0, makeRangeConfig_1.makeRangeConfig)(config, columnsConfig);
+ });
+ const rangeCache = {};
+ let rowHeights = [];
+ return { getContainingRange: (cell, options) => {
+ var _a;
+ const originalRow = (options === null || options === void 0 ? void 0 : options.mapped) ? (0, utils_1.findOriginalRowIndex)(rowHeights, cell.row) : cell.row;
+ const range = findRangeConfig({ ...cell,
+ row: originalRow }, ranges);
+ if (!range) {
+ return undefined;
+ }
+ if (rowHeights.length === 0) {
+ return getContainingRange(range, { ...parameters,
+ rowHeights });
+ }
+ const hash = hashRange(range);
+ (_a = rangeCache[hash]) !== null && _a !== void 0 ? _a : (rangeCache[hash] = getContainingRange(range, { ...parameters,
+ rowHeights }));
+ return rangeCache[hash];
+ },
+ inSameRange: (cell1, cell2) => {
+ return inSameRange(cell1, cell2, ranges);
+ },
+ rowHeights,
+ setRowHeights: (_rowHeights) => {
+ rowHeights = _rowHeights;
+ } };
+};
+exports.createSpanningCellManager = createSpanningCellManager;
+//# sourceMappingURL=spanningCellManager.js.map
+
+/***/ }),
+
+/***/ 64969:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.stringifyTableData = void 0;
+const utils_1 = __nccwpck_require__(6500);
+const stringifyTableData = (rows) => {
+ return rows.map((cells) => {
+ return cells.map((cell) => {
+ return (0, utils_1.normalizeString)(String(cell));
+ });
+ });
+};
+exports.stringifyTableData = stringifyTableData;
+//# sourceMappingURL=stringifyTableData.js.map
+
+/***/ }),
+
+/***/ 82676:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.table = void 0;
+const alignTableData_1 = __nccwpck_require__(58439);
+const calculateOutputColumnWidths_1 = __nccwpck_require__(94197);
+const calculateRowHeights_1 = __nccwpck_require__(35358);
+const drawTable_1 = __nccwpck_require__(62458);
+const injectHeaderConfig_1 = __nccwpck_require__(29522);
+const makeTableConfig_1 = __nccwpck_require__(67667);
+const mapDataUsingRowHeights_1 = __nccwpck_require__(29156);
+const padTableData_1 = __nccwpck_require__(11285);
+const stringifyTableData_1 = __nccwpck_require__(64969);
+const truncateTableData_1 = __nccwpck_require__(10134);
+const utils_1 = __nccwpck_require__(6500);
+const validateTableData_1 = __nccwpck_require__(60375);
+const table = (data, userConfig = {}) => {
+ (0, validateTableData_1.validateTableData)(data);
+ let rows = (0, stringifyTableData_1.stringifyTableData)(data);
+ const [injectedRows, injectedSpanningCellConfig] = (0, injectHeaderConfig_1.injectHeaderConfig)(rows, userConfig);
+ const config = (0, makeTableConfig_1.makeTableConfig)(injectedRows, userConfig, injectedSpanningCellConfig);
+ rows = (0, truncateTableData_1.truncateTableData)(injectedRows, (0, utils_1.extractTruncates)(config));
+ const rowHeights = (0, calculateRowHeights_1.calculateRowHeights)(rows, config);
+ config.spanningCellManager.setRowHeights(rowHeights);
+ rows = (0, mapDataUsingRowHeights_1.mapDataUsingRowHeights)(rows, rowHeights, config);
+ rows = (0, alignTableData_1.alignTableData)(rows, config);
+ rows = (0, padTableData_1.padTableData)(rows, config);
+ const outputColumnWidths = (0, calculateOutputColumnWidths_1.calculateOutputColumnWidths)(config);
+ return (0, drawTable_1.drawTable)(rows, outputColumnWidths, rowHeights, config);
+};
+exports.table = table;
+//# sourceMappingURL=table.js.map
+
+/***/ }),
+
+/***/ 10134:
+/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
+
+"use strict";
+
+var __importDefault = (this && this.__importDefault) || function (mod) {
+ return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.truncateTableData = exports.truncateString = void 0;
+const lodash_truncate_1 = __importDefault(__nccwpck_require__(34436));
+const truncateString = (input, length) => {
+ return (0, lodash_truncate_1.default)(input, { length,
+ omission: '…' });
+};
+exports.truncateString = truncateString;
+/**
+ * @todo Make it work with ASCII content.
+ */
+const truncateTableData = (rows, truncates) => {
+ return rows.map((cells) => {
+ return cells.map((cell, cellIndex) => {
+ return (0, exports.truncateString)(cell, truncates[cellIndex]);
+ });
+ });
+};
+exports.truncateTableData = truncateTableData;
+//# sourceMappingURL=truncateTableData.js.map
+
+/***/ }),
+
+/***/ 84935:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+//# sourceMappingURL=api.js.map
+
+/***/ }),
+
+/***/ 6500:
+/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
+
+"use strict";
+
+var __importDefault = (this && this.__importDefault) || function (mod) {
+ return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.isCellInRange = exports.areCellEqual = exports.calculateRangeCoordinate = exports.findOriginalRowIndex = exports.flatten = exports.extractTruncates = exports.sumArray = exports.sequence = exports.distributeUnevenly = exports.countSpaceSequence = exports.groupBySizes = exports.makeBorderConfig = exports.splitAnsi = exports.normalizeString = void 0;
+const slice_ansi_1 = __importDefault(__nccwpck_require__(72931));
+const string_width_1 = __importDefault(__nccwpck_require__(42577));
+const strip_ansi_1 = __importDefault(__nccwpck_require__(45591));
+const getBorderCharacters_1 = __nccwpck_require__(21726);
+/**
+ * Converts Windows-style newline to Unix-style
+ *
+ * @internal
+ */
+const normalizeString = (input) => {
+ return input.replace(/\r\n/g, '\n');
+};
+exports.normalizeString = normalizeString;
+/**
+ * Splits ansi string by newlines
+ *
+ * @internal
+ */
+const splitAnsi = (input) => {
+ const lengths = (0, strip_ansi_1.default)(input).split('\n').map(string_width_1.default);
+ const result = [];
+ let startIndex = 0;
+ lengths.forEach((length) => {
+ result.push(length === 0 ? '' : (0, slice_ansi_1.default)(input, startIndex, startIndex + length));
+ // Plus 1 for the newline character itself
+ startIndex += length + 1;
+ });
+ return result;
+};
+exports.splitAnsi = splitAnsi;
+/**
+ * Merges user provided border characters with the default border ("honeywell") characters.
+ *
+ * @internal
+ */
+const makeBorderConfig = (border) => {
+ return {
+ ...(0, getBorderCharacters_1.getBorderCharacters)('honeywell'),
+ ...border,
+ };
+};
+exports.makeBorderConfig = makeBorderConfig;
+/**
+ * Groups the array into sub-arrays by sizes.
+ *
+ * @internal
+ * @example
+ * groupBySizes(['a', 'b', 'c', 'd', 'e'], [2, 1, 2]) = [ ['a', 'b'], ['c'], ['d', 'e'] ]
+ */
+const groupBySizes = (array, sizes) => {
+ let startIndex = 0;
+ return sizes.map((size) => {
+ const group = array.slice(startIndex, startIndex + size);
+ startIndex += size;
+ return group;
+ });
+};
+exports.groupBySizes = groupBySizes;
+/**
+ * Counts the number of continuous spaces in a string
+ *
+ * @internal
+ * @example
+ * countGroupSpaces('a bc de f') = 3
+ */
+const countSpaceSequence = (input) => {
+ var _a, _b;
+ return (_b = (_a = input.match(/\s+/g)) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0;
+};
+exports.countSpaceSequence = countSpaceSequence;
+/**
+ * Creates the non-increasing number array given sum and length
+ * whose the difference between maximum and minimum is not greater than 1
+ *
+ * @internal
+ * @example
+ * distributeUnevenly(6, 3) = [2, 2, 2]
+ * distributeUnevenly(8, 3) = [3, 3, 2]
+ */
+const distributeUnevenly = (sum, length) => {
+ const result = Array.from({ length }).fill(Math.floor(sum / length));
+ return result.map((element, index) => {
+ return element + (index < sum % length ? 1 : 0);
+ });
+};
+exports.distributeUnevenly = distributeUnevenly;
+const sequence = (start, end) => {
+ return Array.from({ length: end - start + 1 }, (_, index) => {
+ return index + start;
+ });
+};
+exports.sequence = sequence;
+const sumArray = (array) => {
+ return array.reduce((accumulator, element) => {
+ return accumulator + element;
+ }, 0);
+};
+exports.sumArray = sumArray;
+const extractTruncates = (config) => {
+ return config.columns.map(({ truncate }) => {
+ return truncate;
+ });
+};
+exports.extractTruncates = extractTruncates;
+const flatten = (array) => {
+ return [].concat(...array);
+};
+exports.flatten = flatten;
+const findOriginalRowIndex = (mappedRowHeights, mappedRowIndex) => {
+ const rowIndexMapping = (0, exports.flatten)(mappedRowHeights.map((height, index) => {
+ return Array.from({ length: height }, () => {
+ return index;
+ });
+ }));
+ return rowIndexMapping[mappedRowIndex];
+};
+exports.findOriginalRowIndex = findOriginalRowIndex;
+const calculateRangeCoordinate = (spanningCellConfig) => {
+ const { row, col, colSpan = 1, rowSpan = 1 } = spanningCellConfig;
+ return { bottomRight: { col: col + colSpan - 1,
+ row: row + rowSpan - 1 },
+ topLeft: { col,
+ row } };
+};
+exports.calculateRangeCoordinate = calculateRangeCoordinate;
+const areCellEqual = (cell1, cell2) => {
+ return cell1.row === cell2.row && cell1.col === cell2.col;
+};
+exports.areCellEqual = areCellEqual;
+const isCellInRange = (cell, { topLeft, bottomRight }) => {
+ return (topLeft.row <= cell.row &&
+ cell.row <= bottomRight.row &&
+ topLeft.col <= cell.col &&
+ cell.col <= bottomRight.col);
+};
+exports.isCellInRange = isCellInRange;
+//# sourceMappingURL=utils.js.map
+
+/***/ }),
+
+/***/ 82683:
+/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
+
+"use strict";
+
+var __importDefault = (this && this.__importDefault) || function (mod) {
+ return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.validateConfig = void 0;
+const validators_1 = __importDefault(__nccwpck_require__(15951));
+const validateConfig = (schemaId, config) => {
+ const validate = validators_1.default[schemaId];
+ if (!validate(config) && validate.errors) {
+ // eslint-disable-next-line promise/prefer-await-to-callbacks
+ const errors = validate.errors.map((error) => {
+ return {
+ message: error.message,
+ params: error.params,
+ schemaPath: error.schemaPath,
+ };
+ });
+ /* eslint-disable no-console */
+ console.log('config', config);
+ console.log('errors', errors);
+ /* eslint-enable no-console */
+ throw new Error('Invalid config.');
+ }
+};
+exports.validateConfig = validateConfig;
+//# sourceMappingURL=validateConfig.js.map
+
+/***/ }),
+
+/***/ 51342:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.validateSpanningCellConfig = void 0;
+const utils_1 = __nccwpck_require__(6500);
+const inRange = (start, end, value) => {
+ return start <= value && value <= end;
+};
+const validateSpanningCellConfig = (rows, configs) => {
+ const [nRow, nCol] = [rows.length, rows[0].length];
+ configs.forEach((config, configIndex) => {
+ const { colSpan, rowSpan } = config;
+ if (colSpan === undefined && rowSpan === undefined) {
+ throw new Error(`Expect at least colSpan or rowSpan is provided in config.spanningCells[${configIndex}]`);
+ }
+ if (colSpan !== undefined && colSpan < 1) {
+ throw new Error(`Expect colSpan is not equal zero, instead got: ${colSpan} in config.spanningCells[${configIndex}]`);
+ }
+ if (rowSpan !== undefined && rowSpan < 1) {
+ throw new Error(`Expect rowSpan is not equal zero, instead got: ${rowSpan} in config.spanningCells[${configIndex}]`);
+ }
+ });
+ const rangeCoordinates = configs.map(utils_1.calculateRangeCoordinate);
+ rangeCoordinates.forEach(({ topLeft, bottomRight }, rangeIndex) => {
+ if (!inRange(0, nCol - 1, topLeft.col) ||
+ !inRange(0, nRow - 1, topLeft.row) ||
+ !inRange(0, nCol - 1, bottomRight.col) ||
+ !inRange(0, nRow - 1, bottomRight.row)) {
+ throw new Error(`Some cells in config.spanningCells[${rangeIndex}] are out of the table`);
+ }
+ });
+ const configOccupy = Array.from({ length: nRow }, () => {
+ return Array.from({ length: nCol });
+ });
+ rangeCoordinates.forEach(({ topLeft, bottomRight }, rangeIndex) => {
+ (0, utils_1.sequence)(topLeft.row, bottomRight.row).forEach((row) => {
+ (0, utils_1.sequence)(topLeft.col, bottomRight.col).forEach((col) => {
+ if (configOccupy[row][col] !== undefined) {
+ throw new Error(`Spanning cells in config.spanningCells[${configOccupy[row][col]}] and config.spanningCells[${rangeIndex}] are overlap each other`);
+ }
+ configOccupy[row][col] = rangeIndex;
+ });
+ });
+ });
+};
+exports.validateSpanningCellConfig = validateSpanningCellConfig;
+//# sourceMappingURL=validateSpanningCellConfig.js.map
+
+/***/ }),
+
+/***/ 60375:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.validateTableData = void 0;
+const utils_1 = __nccwpck_require__(6500);
+const validateTableData = (rows) => {
+ if (!Array.isArray(rows)) {
+ throw new TypeError('Table data must be an array.');
+ }
+ if (rows.length === 0) {
+ throw new Error('Table must define at least one row.');
+ }
+ if (rows[0].length === 0) {
+ throw new Error('Table must define at least one column.');
+ }
+ const columnNumber = rows[0].length;
+ for (const row of rows) {
+ if (!Array.isArray(row)) {
+ throw new TypeError('Table row data must be an array.');
+ }
+ if (row.length !== columnNumber) {
+ throw new Error('Table must have a consistent number of cells.');
+ }
+ for (const cell of row) {
+ // eslint-disable-next-line no-control-regex
+ if (/[\u0001-\u0006\u0008\u0009\u000B-\u001A]/.test((0, utils_1.normalizeString)(String(cell)))) {
+ throw new Error('Table data must not contain control characters.');
+ }
+ }
+ }
+};
+exports.validateTableData = validateTableData;
+//# sourceMappingURL=validateTableData.js.map
+
+/***/ }),
+
+/***/ 73442:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.wrapCell = void 0;
+const utils_1 = __nccwpck_require__(6500);
+const wrapString_1 = __nccwpck_require__(69466);
+const wrapWord_1 = __nccwpck_require__(52561);
+/**
+ * Wrap a single cell value into a list of lines
+ *
+ * Always wraps on newlines, for the remainder uses either word or string wrapping
+ * depending on user configuration.
+ *
+ */
+const wrapCell = (cellValue, cellWidth, useWrapWord) => {
+ // First split on literal newlines
+ const cellLines = (0, utils_1.splitAnsi)(cellValue);
+ // Then iterate over the list and word-wrap every remaining line if necessary.
+ for (let lineNr = 0; lineNr < cellLines.length;) {
+ let lineChunks;
+ if (useWrapWord) {
+ lineChunks = (0, wrapWord_1.wrapWord)(cellLines[lineNr], cellWidth);
+ }
+ else {
+ lineChunks = (0, wrapString_1.wrapString)(cellLines[lineNr], cellWidth);
+ }
+ // Replace our original array element with whatever the wrapping returned
+ cellLines.splice(lineNr, 1, ...lineChunks);
+ lineNr += lineChunks.length;
+ }
+ return cellLines;
+};
+exports.wrapCell = wrapCell;
+//# sourceMappingURL=wrapCell.js.map
+
+/***/ }),
+
+/***/ 69466:
+/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
+
+"use strict";
+
+var __importDefault = (this && this.__importDefault) || function (mod) {
+ return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.wrapString = void 0;
+const slice_ansi_1 = __importDefault(__nccwpck_require__(72931));
+const string_width_1 = __importDefault(__nccwpck_require__(42577));
+/**
+ * Creates an array of strings split into groups the length of size.
+ * This function works with strings that contain ASCII characters.
+ *
+ * wrapText is different from would-be "chunk" implementation
+ * in that whitespace characters that occur on a chunk size limit are trimmed.
+ *
+ */
+const wrapString = (subject, size) => {
+ let subjectSlice = subject;
+ const chunks = [];
+ do {
+ chunks.push((0, slice_ansi_1.default)(subjectSlice, 0, size));
+ subjectSlice = (0, slice_ansi_1.default)(subjectSlice, size).trim();
+ } while ((0, string_width_1.default)(subjectSlice));
+ return chunks;
+};
+exports.wrapString = wrapString;
+//# sourceMappingURL=wrapString.js.map
+
+/***/ }),
+
+/***/ 52561:
+/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
+
+"use strict";
+
+var __importDefault = (this && this.__importDefault) || function (mod) {
+ return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.wrapWord = void 0;
+const slice_ansi_1 = __importDefault(__nccwpck_require__(72931));
+const strip_ansi_1 = __importDefault(__nccwpck_require__(45591));
+const calculateStringLengths = (input, size) => {
+ let subject = (0, strip_ansi_1.default)(input);
+ const chunks = [];
+ // https://regex101.com/r/gY5kZ1/1
+ const re = new RegExp('(^.{1,' + String(Math.max(size, 1)) + '}(\\s+|$))|(^.{1,' + String(Math.max(size - 1, 1)) + '}(\\\\|/|_|\\.|,|;|-))');
+ do {
+ let chunk;
+ const match = re.exec(subject);
+ if (match) {
+ chunk = match[0];
+ subject = subject.slice(chunk.length);
+ const trimmedLength = chunk.trim().length;
+ const offset = chunk.length - trimmedLength;
+ chunks.push([trimmedLength, offset]);
+ }
+ else {
+ chunk = subject.slice(0, size);
+ subject = subject.slice(size);
+ chunks.push([chunk.length, 0]);
+ }
+ } while (subject.length);
+ return chunks;
+};
+const wrapWord = (input, size) => {
+ const result = [];
+ let startIndex = 0;
+ calculateStringLengths(input, size).forEach(([length, offset]) => {
+ result.push((0, slice_ansi_1.default)(input, startIndex, startIndex + length));
+ startIndex += length + offset;
+ });
+ return result;
+};
+exports.wrapWord = wrapWord;
+//# sourceMappingURL=wrapWord.js.map
+
+/***/ }),
+
+/***/ 50063:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+var __webpack_unused_export__;
+
+__webpack_unused_export__ = ({ value: true });
+// https://github.com/ajv-validator/ajv/issues/889
+const equal = __nccwpck_require__(28206);
+equal.code = 'require("ajv/dist/runtime/equal").default';
+exports.Z = equal;
+//# sourceMappingURL=equal.js.map
+
+/***/ }),
+
+/***/ 4351:
+/***/ ((module) => {
+
+/******************************************************************************
+Copyright (c) Microsoft Corporation.
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+PERFORMANCE OF THIS SOFTWARE.
+***************************************************************************** */
+/* global global, define, Symbol, Reflect, Promise, SuppressedError */
+var __extends;
+var __assign;
+var __rest;
+var __decorate;
+var __param;
+var __esDecorate;
+var __runInitializers;
+var __propKey;
+var __setFunctionName;
+var __metadata;
+var __awaiter;
+var __generator;
+var __exportStar;
+var __values;
+var __read;
+var __spread;
+var __spreadArrays;
+var __spreadArray;
+var __await;
+var __asyncGenerator;
+var __asyncDelegator;
+var __asyncValues;
+var __makeTemplateObject;
+var __importStar;
+var __importDefault;
+var __classPrivateFieldGet;
+var __classPrivateFieldSet;
+var __classPrivateFieldIn;
+var __createBinding;
+var __addDisposableResource;
+var __disposeResources;
+(function (factory) {
+ var root = typeof global === "object" ? global : typeof self === "object" ? self : typeof this === "object" ? this : {};
+ if (typeof define === "function" && define.amd) {
+ define("tslib", ["exports"], function (exports) { factory(createExporter(root, createExporter(exports))); });
+ }
+ else if ( true && typeof module.exports === "object") {
+ factory(createExporter(root, createExporter(module.exports)));
+ }
+ else {
+ factory(createExporter(root));
+ }
+ function createExporter(exports, previous) {
+ if (exports !== root) {
+ if (typeof Object.create === "function") {
+ Object.defineProperty(exports, "__esModule", { value: true });
+ }
+ else {
+ exports.__esModule = true;
+ }
+ }
+ return function (id, v) { return exports[id] = previous ? previous(id, v) : v; };
+ }
+})
+(function (exporter) {
+ var extendStatics = Object.setPrototypeOf ||
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
+ function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
+
+ __extends = function (d, b) {
+ if (typeof b !== "function" && b !== null)
+ throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
+ extendStatics(d, b);
+ function __() { this.constructor = d; }
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+ };
+
+ __assign = Object.assign || function (t) {
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
+ s = arguments[i];
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
+ }
+ return t;
+ };
+
+ __rest = function (s, e) {
+ var t = {};
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
+ t[p] = s[p];
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
+ t[p[i]] = s[p[i]];
+ }
+ return t;
+ };
+
+ __decorate = function (decorators, target, key, desc) {
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
+ };
+
+ __param = function (paramIndex, decorator) {
+ return function (target, key) { decorator(target, key, paramIndex); }
+ };
+
+ __esDecorate = function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
+ function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
+ var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
+ var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
+ var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
+ var _, done = false;
+ for (var i = decorators.length - 1; i >= 0; i--) {
+ var context = {};
+ for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
+ for (var p in contextIn.access) context.access[p] = contextIn.access[p];
+ context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
+ var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
+ if (kind === "accessor") {
+ if (result === void 0) continue;
+ if (result === null || typeof result !== "object") throw new TypeError("Object expected");
+ if (_ = accept(result.get)) descriptor.get = _;
+ if (_ = accept(result.set)) descriptor.set = _;
+ if (_ = accept(result.init)) initializers.unshift(_);
+ }
+ else if (_ = accept(result)) {
+ if (kind === "field") initializers.unshift(_);
+ else descriptor[key] = _;
+ }
+ }
+ if (target) Object.defineProperty(target, contextIn.name, descriptor);
+ done = true;
+ };
+
+ __runInitializers = function (thisArg, initializers, value) {
+ var useValue = arguments.length > 2;
+ for (var i = 0; i < initializers.length; i++) {
+ value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
+ }
+ return useValue ? value : void 0;
+ };
+
+ __propKey = function (x) {
+ return typeof x === "symbol" ? x : "".concat(x);
+ };
+
+ __setFunctionName = function (f, name, prefix) {
+ if (typeof name === "symbol") name = name.description ? "[".concat(name.description, "]") : "";
+ return Object.defineProperty(f, "name", { configurable: true, value: prefix ? "".concat(prefix, " ", name) : name });
+ };
+
+ __metadata = function (metadataKey, metadataValue) {
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(metadataKey, metadataValue);
+ };
+
+ __awaiter = function (thisArg, _arguments, P, generator) {
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
+ return new (P || (P = Promise))(function (resolve, reject) {
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
+ });
+ };
+
+ __generator = function (thisArg, body) {
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
+ function verb(n) { return function (v) { return step([n, v]); }; }
+ function step(op) {
+ if (f) throw new TypeError("Generator is already executing.");
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
+ if (y = 0, t) op = [op[0] & 2, t.value];
+ switch (op[0]) {
+ case 0: case 1: t = op; break;
+ case 4: _.label++; return { value: op[1], done: false };
+ case 5: _.label++; y = op[1]; op = [0]; continue;
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
+ default:
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
+ if (t[2]) _.ops.pop();
+ _.trys.pop(); continue;
+ }
+ op = body.call(thisArg, _);
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
+ }
+ };
+
+ __exportStar = function(m, o) {
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);
+ };
+
+ __createBinding = Object.create ? (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ var desc = Object.getOwnPropertyDescriptor(m, k);
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+ desc = { enumerable: true, get: function() { return m[k]; } };
+ }
+ Object.defineProperty(o, k2, desc);
+ }) : (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ o[k2] = m[k];
+ });
+
+ __values = function (o) {
+ var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
+ if (m) return m.call(o);
+ if (o && typeof o.length === "number") return {
+ next: function () {
+ if (o && i >= o.length) o = void 0;
+ return { value: o && o[i++], done: !o };
+ }
+ };
+ throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
+ };
+
+ __read = function (o, n) {
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
+ if (!m) return o;
+ var i = m.call(o), r, ar = [], e;
+ try {
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
+ }
+ catch (error) { e = { error: error }; }
+ finally {
+ try {
+ if (r && !r.done && (m = i["return"])) m.call(i);
+ }
+ finally { if (e) throw e.error; }
+ }
+ return ar;
+ };
+
+ /** @deprecated */
+ __spread = function () {
+ for (var ar = [], i = 0; i < arguments.length; i++)
+ ar = ar.concat(__read(arguments[i]));
+ return ar;
+ };
+
+ /** @deprecated */
+ __spreadArrays = function () {
+ for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
+ for (var r = Array(s), k = 0, i = 0; i < il; i++)
+ for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
+ r[k] = a[j];
+ return r;
+ };
+
+ __spreadArray = function (to, from, pack) {
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
+ if (ar || !(i in from)) {
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
+ ar[i] = from[i];
+ }
+ }
+ return to.concat(ar || Array.prototype.slice.call(from));
+ };
+
+ __await = function (v) {
+ return this instanceof __await ? (this.v = v, this) : new __await(v);
+ };
+
+ __asyncGenerator = function (thisArg, _arguments, generator) {
+ if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
+ var g = generator.apply(thisArg, _arguments || []), i, q = [];
+ return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i;
+ function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }
+ function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }
+ function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }
+ function fulfill(value) { resume("next", value); }
+ function reject(value) { resume("throw", value); }
+ function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }
+ };
+
+ __asyncDelegator = function (o) {
+ var i, p;
+ return i = {}, verb("next"), verb("throw", function (e) { throw e; }), verb("return"), i[Symbol.iterator] = function () { return this; }, i;
+ function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }
+ };
+
+ __asyncValues = function (o) {
+ if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
+ var m = o[Symbol.asyncIterator], i;
+ return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i);
+ function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }
+ function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
+ };
+
+ __makeTemplateObject = function (cooked, raw) {
+ if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; }
+ return cooked;
+ };
+
+ var __setModuleDefault = Object.create ? (function(o, v) {
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
+ }) : function(o, v) {
+ o["default"] = v;
+ };
+
+ __importStar = function (mod) {
+ if (mod && mod.__esModule) return mod;
+ var result = {};
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+ __setModuleDefault(result, mod);
+ return result;
+ };
+
+ __importDefault = function (mod) {
+ return (mod && mod.__esModule) ? mod : { "default": mod };
+ };
+
+ __classPrivateFieldGet = function (receiver, state, kind, f) {
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
+ };
+
+ __classPrivateFieldSet = function (receiver, state, value, kind, f) {
+ if (kind === "m") throw new TypeError("Private method is not writable");
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
+ return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
+ };
+
+ __classPrivateFieldIn = function (state, receiver) {
+ if (receiver === null || (typeof receiver !== "object" && typeof receiver !== "function")) throw new TypeError("Cannot use 'in' operator on non-object");
+ return typeof state === "function" ? receiver === state : state.has(receiver);
+ };
+
+ __addDisposableResource = function (env, value, async) {
+ if (value !== null && value !== void 0) {
+ if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected.");
+ var dispose;
+ if (async) {
+ if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined.");
+ dispose = value[Symbol.asyncDispose];
+ }
+ if (dispose === void 0) {
+ if (!Symbol.dispose) throw new TypeError("Symbol.dispose is not defined.");
+ dispose = value[Symbol.dispose];
+ }
+ if (typeof dispose !== "function") throw new TypeError("Object not disposable.");
+ env.stack.push({ value: value, dispose: dispose, async: async });
+ }
+ else if (async) {
+ env.stack.push({ async: true });
+ }
+ return value;
+ };
+
+ var _SuppressedError = typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
+ var e = new Error(message);
+ return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
+ };
+
+ __disposeResources = function (env) {
+ function fail(e) {
+ env.error = env.hasError ? new _SuppressedError(e, env.error, "An error was suppressed during disposal.") : e;
+ env.hasError = true;
+ }
+ function next() {
+ while (env.stack.length) {
+ var rec = env.stack.pop();
+ try {
+ var result = rec.dispose && rec.dispose.call(rec.value);
+ if (rec.async) return Promise.resolve(result).then(next, function(e) { fail(e); return next(); });
+ }
+ catch (e) {
+ fail(e);
+ }
+ }
+ if (env.hasError) throw env.error;
+ }
+ return next();
+ };
+
+ exporter("__extends", __extends);
+ exporter("__assign", __assign);
+ exporter("__rest", __rest);
+ exporter("__decorate", __decorate);
+ exporter("__param", __param);
+ exporter("__esDecorate", __esDecorate);
+ exporter("__runInitializers", __runInitializers);
+ exporter("__propKey", __propKey);
+ exporter("__setFunctionName", __setFunctionName);
+ exporter("__metadata", __metadata);
+ exporter("__awaiter", __awaiter);
+ exporter("__generator", __generator);
+ exporter("__exportStar", __exportStar);
+ exporter("__createBinding", __createBinding);
+ exporter("__values", __values);
+ exporter("__read", __read);
+ exporter("__spread", __spread);
+ exporter("__spreadArrays", __spreadArrays);
+ exporter("__spreadArray", __spreadArray);
+ exporter("__await", __await);
+ exporter("__asyncGenerator", __asyncGenerator);
+ exporter("__asyncDelegator", __asyncDelegator);
+ exporter("__asyncValues", __asyncValues);
+ exporter("__makeTemplateObject", __makeTemplateObject);
+ exporter("__importStar", __importStar);
+ exporter("__importDefault", __importDefault);
+ exporter("__classPrivateFieldGet", __classPrivateFieldGet);
+ exporter("__classPrivateFieldSet", __classPrivateFieldSet);
+ exporter("__classPrivateFieldIn", __classPrivateFieldIn);
+ exporter("__addDisposableResource", __addDisposableResource);
+ exporter("__disposeResources", __disposeResources);
+});
+
+
+/***/ }),
+
+/***/ 74294:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+module.exports = __nccwpck_require__(54219);
+
+
+/***/ }),
+
+/***/ 54219:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+
+var net = __nccwpck_require__(41808);
+var tls = __nccwpck_require__(24404);
+var http = __nccwpck_require__(13685);
+var https = __nccwpck_require__(95687);
+var events = __nccwpck_require__(82361);
+var assert = __nccwpck_require__(39491);
+var util = __nccwpck_require__(73837);
+
+
+exports.httpOverHttp = httpOverHttp;
+exports.httpsOverHttp = httpsOverHttp;
+exports.httpOverHttps = httpOverHttps;
+exports.httpsOverHttps = httpsOverHttps;
+
+
+function httpOverHttp(options) {
+ var agent = new TunnelingAgent(options);
+ agent.request = http.request;
+ return agent;
+}
+
+function httpsOverHttp(options) {
+ var agent = new TunnelingAgent(options);
+ agent.request = http.request;
+ agent.createSocket = createSecureSocket;
+ agent.defaultPort = 443;
+ return agent;
+}
+
+function httpOverHttps(options) {
+ var agent = new TunnelingAgent(options);
+ agent.request = https.request;
+ return agent;
+}
+
+function httpsOverHttps(options) {
+ var agent = new TunnelingAgent(options);
+ agent.request = https.request;
+ agent.createSocket = createSecureSocket;
+ agent.defaultPort = 443;
+ return agent;
+}
+
+
+function TunnelingAgent(options) {
+ var self = this;
+ self.options = options || {};
+ self.proxyOptions = self.options.proxy || {};
+ self.maxSockets = self.options.maxSockets || http.Agent.defaultMaxSockets;
+ self.requests = [];
+ self.sockets = [];
+
+ self.on('free', function onFree(socket, host, port, localAddress) {
+ var options = toOptions(host, port, localAddress);
+ for (var i = 0, len = self.requests.length; i < len; ++i) {
+ var pending = self.requests[i];
+ if (pending.host === options.host && pending.port === options.port) {
+ // Detect the request to connect same origin server,
+ // reuse the connection.
+ self.requests.splice(i, 1);
+ pending.request.onSocket(socket);
+ return;
+ }
+ }
+ socket.destroy();
+ self.removeSocket(socket);
+ });
+}
+util.inherits(TunnelingAgent, events.EventEmitter);
+
+TunnelingAgent.prototype.addRequest = function addRequest(req, host, port, localAddress) {
+ var self = this;
+ var options = mergeOptions({request: req}, self.options, toOptions(host, port, localAddress));
+
+ if (self.sockets.length >= this.maxSockets) {
+ // We are over limit so we'll add it to the queue.
+ self.requests.push(options);
+ return;
+ }
+
+ // If we are under maxSockets create a new one.
+ self.createSocket(options, function(socket) {
+ socket.on('free', onFree);
+ socket.on('close', onCloseOrRemove);
+ socket.on('agentRemove', onCloseOrRemove);
+ req.onSocket(socket);
+
+ function onFree() {
+ self.emit('free', socket, options);
+ }
+
+ function onCloseOrRemove(err) {
+ self.removeSocket(socket);
+ socket.removeListener('free', onFree);
+ socket.removeListener('close', onCloseOrRemove);
+ socket.removeListener('agentRemove', onCloseOrRemove);
+ }
+ });
+};
+
+TunnelingAgent.prototype.createSocket = function createSocket(options, cb) {
+ var self = this;
+ var placeholder = {};
+ self.sockets.push(placeholder);
+
+ var connectOptions = mergeOptions({}, self.proxyOptions, {
+ method: 'CONNECT',
+ path: options.host + ':' + options.port,
+ agent: false,
+ headers: {
+ host: options.host + ':' + options.port
+ }
+ });
+ if (options.localAddress) {
+ connectOptions.localAddress = options.localAddress;
+ }
+ if (connectOptions.proxyAuth) {
+ connectOptions.headers = connectOptions.headers || {};
+ connectOptions.headers['Proxy-Authorization'] = 'Basic ' +
+ new Buffer(connectOptions.proxyAuth).toString('base64');
+ }
+
+ debug('making CONNECT request');
+ var connectReq = self.request(connectOptions);
+ connectReq.useChunkedEncodingByDefault = false; // for v0.6
+ connectReq.once('response', onResponse); // for v0.6
+ connectReq.once('upgrade', onUpgrade); // for v0.6
+ connectReq.once('connect', onConnect); // for v0.7 or later
+ connectReq.once('error', onError);
+ connectReq.end();
+
+ function onResponse(res) {
+ // Very hacky. This is necessary to avoid http-parser leaks.
+ res.upgrade = true;
+ }
+
+ function onUpgrade(res, socket, head) {
+ // Hacky.
+ process.nextTick(function() {
+ onConnect(res, socket, head);
+ });
+ }
+
+ function onConnect(res, socket, head) {
+ connectReq.removeAllListeners();
+ socket.removeAllListeners();
+
+ if (res.statusCode !== 200) {
+ debug('tunneling socket could not be established, statusCode=%d',
+ res.statusCode);
+ socket.destroy();
+ var error = new Error('tunneling socket could not be established, ' +
+ 'statusCode=' + res.statusCode);
+ error.code = 'ECONNRESET';
+ options.request.emit('error', error);
+ self.removeSocket(placeholder);
+ return;
+ }
+ if (head.length > 0) {
+ debug('got illegal response body from proxy');
+ socket.destroy();
+ var error = new Error('got illegal response body from proxy');
+ error.code = 'ECONNRESET';
+ options.request.emit('error', error);
+ self.removeSocket(placeholder);
+ return;
+ }
+ debug('tunneling connection has established');
+ self.sockets[self.sockets.indexOf(placeholder)] = socket;
+ return cb(socket);
+ }
+
+ function onError(cause) {
+ connectReq.removeAllListeners();
+
+ debug('tunneling socket could not be established, cause=%s\n',
+ cause.message, cause.stack);
+ var error = new Error('tunneling socket could not be established, ' +
+ 'cause=' + cause.message);
+ error.code = 'ECONNRESET';
+ options.request.emit('error', error);
+ self.removeSocket(placeholder);
+ }
+};
+
+TunnelingAgent.prototype.removeSocket = function removeSocket(socket) {
+ var pos = this.sockets.indexOf(socket)
+ if (pos === -1) {
+ return;
+ }
+ this.sockets.splice(pos, 1);
+
+ var pending = this.requests.shift();
+ if (pending) {
+ // If we have pending requests and a socket gets closed a new one
+ // needs to be created to take over in the pool for the one that closed.
+ this.createSocket(pending, function(socket) {
+ pending.request.onSocket(socket);
+ });
+ }
+};
+
+function createSecureSocket(options, cb) {
+ var self = this;
+ TunnelingAgent.prototype.createSocket.call(self, options, function(socket) {
+ var hostHeader = options.request.getHeader('host');
+ var tlsOptions = mergeOptions({}, self.options, {
+ socket: socket,
+ servername: hostHeader ? hostHeader.replace(/:.*$/, '') : options.host
+ });
+
+ // 0 is dummy port for v0.6
+ var secureSocket = tls.connect(0, tlsOptions);
+ self.sockets[self.sockets.indexOf(socket)] = secureSocket;
+ cb(secureSocket);
+ });
+}
+
+
+function toOptions(host, port, localAddress) {
+ if (typeof host === 'string') { // since v0.10
+ return {
+ host: host,
+ port: port,
+ localAddress: localAddress
+ };
+ }
+ return host; // for v0.11 or later
+}
+
+function mergeOptions(target) {
+ for (var i = 1, len = arguments.length; i < len; ++i) {
+ var overrides = arguments[i];
+ if (typeof overrides === 'object') {
+ var keys = Object.keys(overrides);
+ for (var j = 0, keyLen = keys.length; j < keyLen; ++j) {
+ var k = keys[j];
+ if (overrides[k] !== undefined) {
+ target[k] = overrides[k];
+ }
+ }
+ }
+ }
+ return target;
+}
+
+
+var debug;
+if (process.env.NODE_DEBUG && /\btunnel\b/.test(process.env.NODE_DEBUG)) {
+ debug = function() {
+ var args = Array.prototype.slice.call(arguments);
+ if (typeof args[0] === 'string') {
+ args[0] = 'TUNNEL: ' + args[0];
+ } else {
+ args.unshift('TUNNEL:');
+ }
+ console.error.apply(console, args);
+ }
+} else {
+ debug = function() {};
+}
+exports.debug = debug; // for test
+
+
+/***/ }),
+
+/***/ 41773:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+"use strict";
+
+
+const Client = __nccwpck_require__(33598)
+const Dispatcher = __nccwpck_require__(60412)
+const errors = __nccwpck_require__(48045)
+const Pool = __nccwpck_require__(4634)
+const BalancedPool = __nccwpck_require__(37931)
+const Agent = __nccwpck_require__(7890)
+const util = __nccwpck_require__(83983)
+const { InvalidArgumentError } = errors
+const api = __nccwpck_require__(44059)
+const buildConnector = __nccwpck_require__(82067)
+const MockClient = __nccwpck_require__(58687)
+const MockAgent = __nccwpck_require__(66771)
+const MockPool = __nccwpck_require__(26193)
+const mockErrors = __nccwpck_require__(50888)
+const ProxyAgent = __nccwpck_require__(97858)
+const { getGlobalDispatcher, setGlobalDispatcher } = __nccwpck_require__(21892)
+const DecoratorHandler = __nccwpck_require__(46930)
+const RedirectHandler = __nccwpck_require__(72860)
+const createRedirectInterceptor = __nccwpck_require__(38861)
+
+let hasCrypto
+try {
+ __nccwpck_require__(6113)
+ hasCrypto = true
+} catch {
+ hasCrypto = false
+}
+
+Object.assign(Dispatcher.prototype, api)
+
+module.exports.Dispatcher = Dispatcher
+module.exports.Client = Client
+module.exports.Pool = Pool
+module.exports.BalancedPool = BalancedPool
+module.exports.Agent = Agent
+module.exports.ProxyAgent = ProxyAgent
+
+module.exports.DecoratorHandler = DecoratorHandler
+module.exports.RedirectHandler = RedirectHandler
+module.exports.createRedirectInterceptor = createRedirectInterceptor
+
+module.exports.buildConnector = buildConnector
+module.exports.errors = errors
+
+function makeDispatcher (fn) {
+ return (url, opts, handler) => {
+ if (typeof opts === 'function') {
+ handler = opts
+ opts = null
+ }
+
+ if (!url || (typeof url !== 'string' && typeof url !== 'object' && !(url instanceof URL))) {
+ throw new InvalidArgumentError('invalid url')
+ }
+
+ if (opts != null && typeof opts !== 'object') {
+ throw new InvalidArgumentError('invalid opts')
+ }
+
+ if (opts && opts.path != null) {
+ if (typeof opts.path !== 'string') {
+ throw new InvalidArgumentError('invalid opts.path')
+ }
+
+ let path = opts.path
+ if (!opts.path.startsWith('/')) {
+ path = `/${path}`
+ }
+
+ url = new URL(util.parseOrigin(url).origin + path)
+ } else {
+ if (!opts) {
+ opts = typeof url === 'object' ? url : {}
+ }
+
+ url = util.parseURL(url)
+ }
+
+ const { agent, dispatcher = getGlobalDispatcher() } = opts
+
+ if (agent) {
+ throw new InvalidArgumentError('unsupported opts.agent. Did you mean opts.client?')
+ }
+
+ return fn.call(dispatcher, {
+ ...opts,
+ origin: url.origin,
+ path: url.search ? `${url.pathname}${url.search}` : url.pathname,
+ method: opts.method || (opts.body ? 'PUT' : 'GET')
+ }, handler)
+ }
+}
+
+module.exports.setGlobalDispatcher = setGlobalDispatcher
+module.exports.getGlobalDispatcher = getGlobalDispatcher
+
+if (util.nodeMajor > 16 || (util.nodeMajor === 16 && util.nodeMinor >= 8)) {
+ let fetchImpl = null
+ module.exports.fetch = async function fetch (resource) {
+ if (!fetchImpl) {
+ fetchImpl = (__nccwpck_require__(74881).fetch)
+ }
+
+ try {
+ return await fetchImpl(...arguments)
+ } catch (err) {
+ if (typeof err === 'object') {
+ Error.captureStackTrace(err, this)
+ }
+
+ throw err
+ }
+ }
+ module.exports.Headers = __nccwpck_require__(10554).Headers
+ module.exports.Response = __nccwpck_require__(27823).Response
+ module.exports.Request = __nccwpck_require__(48359).Request
+ module.exports.FormData = __nccwpck_require__(72015).FormData
+ module.exports.File = __nccwpck_require__(78511).File
+ module.exports.FileReader = __nccwpck_require__(1446).FileReader
+
+ const { setGlobalOrigin, getGlobalOrigin } = __nccwpck_require__(71246)
+
+ module.exports.setGlobalOrigin = setGlobalOrigin
+ module.exports.getGlobalOrigin = getGlobalOrigin
+
+ const { CacheStorage } = __nccwpck_require__(37907)
+ const { kConstruct } = __nccwpck_require__(29174)
+
+ // Cache & CacheStorage are tightly coupled with fetch. Even if it may run
+ // in an older version of Node, it doesn't have any use without fetch.
+ module.exports.caches = new CacheStorage(kConstruct)
+}
+
+if (util.nodeMajor >= 16) {
+ const { deleteCookie, getCookies, getSetCookies, setCookie } = __nccwpck_require__(41724)
+
+ module.exports.deleteCookie = deleteCookie
+ module.exports.getCookies = getCookies
+ module.exports.getSetCookies = getSetCookies
+ module.exports.setCookie = setCookie
+
+ const { parseMIMEType, serializeAMimeType } = __nccwpck_require__(685)
+
+ module.exports.parseMIMEType = parseMIMEType
+ module.exports.serializeAMimeType = serializeAMimeType
+}
+
+if (util.nodeMajor >= 18 && hasCrypto) {
+ const { WebSocket } = __nccwpck_require__(54284)
+
+ module.exports.WebSocket = WebSocket
+}
+
+module.exports.request = makeDispatcher(api.request)
+module.exports.stream = makeDispatcher(api.stream)
+module.exports.pipeline = makeDispatcher(api.pipeline)
+module.exports.connect = makeDispatcher(api.connect)
+module.exports.upgrade = makeDispatcher(api.upgrade)
+
+module.exports.MockClient = MockClient
+module.exports.MockPool = MockPool
+module.exports.MockAgent = MockAgent
+module.exports.mockErrors = mockErrors
+
+
+/***/ }),
+
+/***/ 7890:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+"use strict";
+
+
+const { InvalidArgumentError } = __nccwpck_require__(48045)
+const { kClients, kRunning, kClose, kDestroy, kDispatch, kInterceptors } = __nccwpck_require__(72785)
+const DispatcherBase = __nccwpck_require__(74839)
+const Pool = __nccwpck_require__(4634)
+const Client = __nccwpck_require__(33598)
+const util = __nccwpck_require__(83983)
+const createRedirectInterceptor = __nccwpck_require__(38861)
+const { WeakRef, FinalizationRegistry } = __nccwpck_require__(56436)()
+
+const kOnConnect = Symbol('onConnect')
+const kOnDisconnect = Symbol('onDisconnect')
+const kOnConnectionError = Symbol('onConnectionError')
+const kMaxRedirections = Symbol('maxRedirections')
+const kOnDrain = Symbol('onDrain')
+const kFactory = Symbol('factory')
+const kFinalizer = Symbol('finalizer')
+const kOptions = Symbol('options')
+
+function defaultFactory (origin, opts) {
+ return opts && opts.connections === 1
+ ? new Client(origin, opts)
+ : new Pool(origin, opts)
+}
+
+class Agent extends DispatcherBase {
+ constructor ({ factory = defaultFactory, maxRedirections = 0, connect, ...options } = {}) {
+ super()
+
+ if (typeof factory !== 'function') {
+ throw new InvalidArgumentError('factory must be a function.')
+ }
+
+ if (connect != null && typeof connect !== 'function' && typeof connect !== 'object') {
+ throw new InvalidArgumentError('connect must be a function or an object')
+ }
+
+ if (!Number.isInteger(maxRedirections) || maxRedirections < 0) {
+ throw new InvalidArgumentError('maxRedirections must be a positive number')
+ }
+
+ if (connect && typeof connect !== 'function') {
+ connect = { ...connect }
+ }
+
+ this[kInterceptors] = options.interceptors && options.interceptors.Agent && Array.isArray(options.interceptors.Agent)
+ ? options.interceptors.Agent
+ : [createRedirectInterceptor({ maxRedirections })]
+
+ this[kOptions] = { ...util.deepClone(options), connect }
+ this[kOptions].interceptors = options.interceptors
+ ? { ...options.interceptors }
+ : undefined
+ this[kMaxRedirections] = maxRedirections
+ this[kFactory] = factory
+ this[kClients] = new Map()
+ this[kFinalizer] = new FinalizationRegistry(/* istanbul ignore next: gc is undeterministic */ key => {
+ const ref = this[kClients].get(key)
+ if (ref !== undefined && ref.deref() === undefined) {
+ this[kClients].delete(key)
+ }
+ })
+
+ const agent = this
+
+ this[kOnDrain] = (origin, targets) => {
+ agent.emit('drain', origin, [agent, ...targets])
+ }
+
+ this[kOnConnect] = (origin, targets) => {
+ agent.emit('connect', origin, [agent, ...targets])
+ }
+
+ this[kOnDisconnect] = (origin, targets, err) => {
+ agent.emit('disconnect', origin, [agent, ...targets], err)
+ }
+
+ this[kOnConnectionError] = (origin, targets, err) => {
+ agent.emit('connectionError', origin, [agent, ...targets], err)
+ }
+ }
+
+ get [kRunning] () {
+ let ret = 0
+ for (const ref of this[kClients].values()) {
+ const client = ref.deref()
+ /* istanbul ignore next: gc is undeterministic */
+ if (client) {
+ ret += client[kRunning]
+ }
+ }
+ return ret
+ }
+
+ [kDispatch] (opts, handler) {
+ let key
+ if (opts.origin && (typeof opts.origin === 'string' || opts.origin instanceof URL)) {
+ key = String(opts.origin)
+ } else {
+ throw new InvalidArgumentError('opts.origin must be a non-empty string or URL.')
+ }
+
+ const ref = this[kClients].get(key)
+
+ let dispatcher = ref ? ref.deref() : null
+ if (!dispatcher) {
+ dispatcher = this[kFactory](opts.origin, this[kOptions])
+ .on('drain', this[kOnDrain])
+ .on('connect', this[kOnConnect])
+ .on('disconnect', this[kOnDisconnect])
+ .on('connectionError', this[kOnConnectionError])
+
+ this[kClients].set(key, new WeakRef(dispatcher))
+ this[kFinalizer].register(dispatcher, key)
+ }
+
+ return dispatcher.dispatch(opts, handler)
+ }
+
+ async [kClose] () {
+ const closePromises = []
+ for (const ref of this[kClients].values()) {
+ const client = ref.deref()
+ /* istanbul ignore else: gc is undeterministic */
+ if (client) {
+ closePromises.push(client.close())
+ }
+ }
+
+ await Promise.all(closePromises)
+ }
+
+ async [kDestroy] (err) {
+ const destroyPromises = []
+ for (const ref of this[kClients].values()) {
+ const client = ref.deref()
+ /* istanbul ignore else: gc is undeterministic */
+ if (client) {
+ destroyPromises.push(client.destroy(err))
+ }
+ }
+
+ await Promise.all(destroyPromises)
+ }
+}
+
+module.exports = Agent
+
+
+/***/ }),
+
+/***/ 7032:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+const { addAbortListener } = __nccwpck_require__(83983)
+const { RequestAbortedError } = __nccwpck_require__(48045)
+
+const kListener = Symbol('kListener')
+const kSignal = Symbol('kSignal')
+
+function abort (self) {
+ if (self.abort) {
+ self.abort()
+ } else {
+ self.onError(new RequestAbortedError())
+ }
+}
+
+function addSignal (self, signal) {
+ self[kSignal] = null
+ self[kListener] = null
+
+ if (!signal) {
+ return
+ }
+
+ if (signal.aborted) {
+ abort(self)
+ return
+ }
+
+ self[kSignal] = signal
+ self[kListener] = () => {
+ abort(self)
+ }
+
+ addAbortListener(self[kSignal], self[kListener])
+}
+
+function removeSignal (self) {
+ if (!self[kSignal]) {
+ return
+ }
+
+ if ('removeEventListener' in self[kSignal]) {
+ self[kSignal].removeEventListener('abort', self[kListener])
+ } else {
+ self[kSignal].removeListener('abort', self[kListener])
+ }
+
+ self[kSignal] = null
+ self[kListener] = null
+}
+
+module.exports = {
+ addSignal,
+ removeSignal
+}
+
+
+/***/ }),
+
+/***/ 29744:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+"use strict";
+
+
+const { AsyncResource } = __nccwpck_require__(50852)
+const { InvalidArgumentError, RequestAbortedError, SocketError } = __nccwpck_require__(48045)
+const util = __nccwpck_require__(83983)
+const { addSignal, removeSignal } = __nccwpck_require__(7032)
+
+class ConnectHandler extends AsyncResource {
+ constructor (opts, callback) {
+ if (!opts || typeof opts !== 'object') {
+ throw new InvalidArgumentError('invalid opts')
+ }
+
+ if (typeof callback !== 'function') {
+ throw new InvalidArgumentError('invalid callback')
+ }
+
+ const { signal, opaque, responseHeaders } = opts
+
+ if (signal && typeof signal.on !== 'function' && typeof signal.addEventListener !== 'function') {
+ throw new InvalidArgumentError('signal must be an EventEmitter or EventTarget')
+ }
+
+ super('UNDICI_CONNECT')
+
+ this.opaque = opaque || null
+ this.responseHeaders = responseHeaders || null
+ this.callback = callback
+ this.abort = null
+
+ addSignal(this, signal)
+ }
+
+ onConnect (abort, context) {
+ if (!this.callback) {
+ throw new RequestAbortedError()
+ }
+
+ this.abort = abort
+ this.context = context
+ }
+
+ onHeaders () {
+ throw new SocketError('bad connect', null)
+ }
+
+ onUpgrade (statusCode, rawHeaders, socket) {
+ const { callback, opaque, context } = this
+
+ removeSignal(this)
+
+ this.callback = null
+
+ let headers = rawHeaders
+ // Indicates is an HTTP2Session
+ if (headers != null) {
+ headers = this.responseHeaders === 'raw' ? util.parseRawHeaders(rawHeaders) : util.parseHeaders(rawHeaders)
+ }
+
+ this.runInAsyncScope(callback, null, null, {
+ statusCode,
+ headers,
+ socket,
+ opaque,
+ context
+ })
+ }
+
+ onError (err) {
+ const { callback, opaque } = this
+
+ removeSignal(this)
+
+ if (callback) {
+ this.callback = null
+ queueMicrotask(() => {
+ this.runInAsyncScope(callback, null, err, { opaque })
+ })
+ }
+ }
+}
+
+function connect (opts, callback) {
+ if (callback === undefined) {
+ return new Promise((resolve, reject) => {
+ connect.call(this, opts, (err, data) => {
+ return err ? reject(err) : resolve(data)
+ })
+ })
+ }
+
+ try {
+ const connectHandler = new ConnectHandler(opts, callback)
+ this.dispatch({ ...opts, method: 'CONNECT' }, connectHandler)
+ } catch (err) {
+ if (typeof callback !== 'function') {
+ throw err
+ }
+ const opaque = opts && opts.opaque
+ queueMicrotask(() => callback(err, { opaque }))
+ }
+}
+
+module.exports = connect
+
+
+/***/ }),
+
+/***/ 28752:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+"use strict";
+
+
+const {
+ Readable,
+ Duplex,
+ PassThrough
+} = __nccwpck_require__(12781)
+const {
+ InvalidArgumentError,
+ InvalidReturnValueError,
+ RequestAbortedError
+} = __nccwpck_require__(48045)
+const util = __nccwpck_require__(83983)
+const { AsyncResource } = __nccwpck_require__(50852)
+const { addSignal, removeSignal } = __nccwpck_require__(7032)
+const assert = __nccwpck_require__(39491)
+
+const kResume = Symbol('resume')
+
+class PipelineRequest extends Readable {
+ constructor () {
+ super({ autoDestroy: true })
+
+ this[kResume] = null
+ }
+
+ _read () {
+ const { [kResume]: resume } = this
+
+ if (resume) {
+ this[kResume] = null
+ resume()
+ }
+ }
+
+ _destroy (err, callback) {
+ this._read()
+
+ callback(err)
+ }
+}
+
+class PipelineResponse extends Readable {
+ constructor (resume) {
+ super({ autoDestroy: true })
+ this[kResume] = resume
+ }
+
+ _read () {
+ this[kResume]()
+ }
+
+ _destroy (err, callback) {
+ if (!err && !this._readableState.endEmitted) {
+ err = new RequestAbortedError()
+ }
+
+ callback(err)
+ }
+}
+
+class PipelineHandler extends AsyncResource {
+ constructor (opts, handler) {
+ if (!opts || typeof opts !== 'object') {
+ throw new InvalidArgumentError('invalid opts')
+ }
+
+ if (typeof handler !== 'function') {
+ throw new InvalidArgumentError('invalid handler')
+ }
+
+ const { signal, method, opaque, onInfo, responseHeaders } = opts
+
+ if (signal && typeof signal.on !== 'function' && typeof signal.addEventListener !== 'function') {
+ throw new InvalidArgumentError('signal must be an EventEmitter or EventTarget')
+ }
+
+ if (method === 'CONNECT') {
+ throw new InvalidArgumentError('invalid method')
+ }
+
+ if (onInfo && typeof onInfo !== 'function') {
+ throw new InvalidArgumentError('invalid onInfo callback')
+ }
+
+ super('UNDICI_PIPELINE')
+
+ this.opaque = opaque || null
+ this.responseHeaders = responseHeaders || null
+ this.handler = handler
+ this.abort = null
+ this.context = null
+ this.onInfo = onInfo || null
+
+ this.req = new PipelineRequest().on('error', util.nop)
+
+ this.ret = new Duplex({
+ readableObjectMode: opts.objectMode,
+ autoDestroy: true,
+ read: () => {
+ const { body } = this
+
+ if (body && body.resume) {
+ body.resume()
+ }
+ },
+ write: (chunk, encoding, callback) => {
+ const { req } = this
+
+ if (req.push(chunk, encoding) || req._readableState.destroyed) {
+ callback()
+ } else {
+ req[kResume] = callback
+ }
+ },
+ destroy: (err, callback) => {
+ const { body, req, res, ret, abort } = this
+
+ if (!err && !ret._readableState.endEmitted) {
+ err = new RequestAbortedError()
+ }
+
+ if (abort && err) {
+ abort()
+ }
+
+ util.destroy(body, err)
+ util.destroy(req, err)
+ util.destroy(res, err)
+
+ removeSignal(this)
+
+ callback(err)
+ }
+ }).on('prefinish', () => {
+ const { req } = this
+
+ // Node < 15 does not call _final in same tick.
+ req.push(null)
+ })
+
+ this.res = null
+
+ addSignal(this, signal)
+ }
+
+ onConnect (abort, context) {
+ const { ret, res } = this
+
+ assert(!res, 'pipeline cannot be retried')
+
+ if (ret.destroyed) {
+ throw new RequestAbortedError()
+ }
+
+ this.abort = abort
+ this.context = context
+ }
+
+ onHeaders (statusCode, rawHeaders, resume) {
+ const { opaque, handler, context } = this
+
+ if (statusCode < 200) {
+ if (this.onInfo) {
+ const headers = this.responseHeaders === 'raw' ? util.parseRawHeaders(rawHeaders) : util.parseHeaders(rawHeaders)
+ this.onInfo({ statusCode, headers })
+ }
+ return
+ }
+
+ this.res = new PipelineResponse(resume)
+
+ let body
+ try {
+ this.handler = null
+ const headers = this.responseHeaders === 'raw' ? util.parseRawHeaders(rawHeaders) : util.parseHeaders(rawHeaders)
+ body = this.runInAsyncScope(handler, null, {
+ statusCode,
+ headers,
+ opaque,
+ body: this.res,
+ context
+ })
+ } catch (err) {
+ this.res.on('error', util.nop)
+ throw err
+ }
+
+ if (!body || typeof body.on !== 'function') {
+ throw new InvalidReturnValueError('expected Readable')
+ }
+
+ body
+ .on('data', (chunk) => {
+ const { ret, body } = this
+
+ if (!ret.push(chunk) && body.pause) {
+ body.pause()
+ }
+ })
+ .on('error', (err) => {
+ const { ret } = this
+
+ util.destroy(ret, err)
+ })
+ .on('end', () => {
+ const { ret } = this
+
+ ret.push(null)
+ })
+ .on('close', () => {
+ const { ret } = this
+
+ if (!ret._readableState.ended) {
+ util.destroy(ret, new RequestAbortedError())
+ }
+ })
+
+ this.body = body
+ }
+
+ onData (chunk) {
+ const { res } = this
+ return res.push(chunk)
+ }
+
+ onComplete (trailers) {
+ const { res } = this
+ res.push(null)
+ }
+
+ onError (err) {
+ const { ret } = this
+ this.handler = null
+ util.destroy(ret, err)
+ }
+}
+
+function pipeline (opts, handler) {
+ try {
+ const pipelineHandler = new PipelineHandler(opts, handler)
+ this.dispatch({ ...opts, body: pipelineHandler.req }, pipelineHandler)
+ return pipelineHandler.ret
+ } catch (err) {
+ return new PassThrough().destroy(err)
+ }
+}
+
+module.exports = pipeline
+
+
+/***/ }),
+
+/***/ 55448:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+"use strict";
+
+
+const Readable = __nccwpck_require__(73858)
+const {
+ InvalidArgumentError,
+ RequestAbortedError
+} = __nccwpck_require__(48045)
+const util = __nccwpck_require__(83983)
+const { getResolveErrorBodyCallback } = __nccwpck_require__(77474)
+const { AsyncResource } = __nccwpck_require__(50852)
+const { addSignal, removeSignal } = __nccwpck_require__(7032)
+
+class RequestHandler extends AsyncResource {
+ constructor (opts, callback) {
+ if (!opts || typeof opts !== 'object') {
+ throw new InvalidArgumentError('invalid opts')
+ }
+
+ const { signal, method, opaque, body, onInfo, responseHeaders, throwOnError, highWaterMark } = opts
+
+ try {
+ if (typeof callback !== 'function') {
+ throw new InvalidArgumentError('invalid callback')
+ }
+
+ if (highWaterMark && (typeof highWaterMark !== 'number' || highWaterMark < 0)) {
+ throw new InvalidArgumentError('invalid highWaterMark')
+ }
+
+ if (signal && typeof signal.on !== 'function' && typeof signal.addEventListener !== 'function') {
+ throw new InvalidArgumentError('signal must be an EventEmitter or EventTarget')
+ }
+
+ if (method === 'CONNECT') {
+ throw new InvalidArgumentError('invalid method')
+ }
+
+ if (onInfo && typeof onInfo !== 'function') {
+ throw new InvalidArgumentError('invalid onInfo callback')
+ }
+
+ super('UNDICI_REQUEST')
+ } catch (err) {
+ if (util.isStream(body)) {
+ util.destroy(body.on('error', util.nop), err)
+ }
+ throw err
+ }
+
+ this.responseHeaders = responseHeaders || null
+ this.opaque = opaque || null
+ this.callback = callback
+ this.res = null
+ this.abort = null
+ this.body = body
+ this.trailers = {}
+ this.context = null
+ this.onInfo = onInfo || null
+ this.throwOnError = throwOnError
+ this.highWaterMark = highWaterMark
+
+ if (util.isStream(body)) {
+ body.on('error', (err) => {
+ this.onError(err)
+ })
+ }
+
+ addSignal(this, signal)
+ }
+
+ onConnect (abort, context) {
+ if (!this.callback) {
+ throw new RequestAbortedError()
+ }
+
+ this.abort = abort
+ this.context = context
+ }
+
+ onHeaders (statusCode, rawHeaders, resume, statusMessage) {
+ const { callback, opaque, abort, context, responseHeaders, highWaterMark } = this
+
+ const headers = responseHeaders === 'raw' ? util.parseRawHeaders(rawHeaders) : util.parseHeaders(rawHeaders)
+
+ if (statusCode < 200) {
+ if (this.onInfo) {
+ this.onInfo({ statusCode, headers })
+ }
+ return
+ }
+
+ const parsedHeaders = responseHeaders === 'raw' ? util.parseHeaders(rawHeaders) : headers
+ const contentType = parsedHeaders['content-type']
+ const body = new Readable({ resume, abort, contentType, highWaterMark })
+
+ this.callback = null
+ this.res = body
+ if (callback !== null) {
+ if (this.throwOnError && statusCode >= 400) {
+ this.runInAsyncScope(getResolveErrorBodyCallback, null,
+ { callback, body, contentType, statusCode, statusMessage, headers }
+ )
+ } else {
+ this.runInAsyncScope(callback, null, null, {
+ statusCode,
+ headers,
+ trailers: this.trailers,
+ opaque,
+ body,
+ context
+ })
+ }
+ }
+ }
+
+ onData (chunk) {
+ const { res } = this
+ return res.push(chunk)
+ }
+
+ onComplete (trailers) {
+ const { res } = this
+
+ removeSignal(this)
+
+ util.parseHeaders(trailers, this.trailers)
+
+ res.push(null)
+ }
+
+ onError (err) {
+ const { res, callback, body, opaque } = this
+
+ removeSignal(this)
+
+ if (callback) {
+ // TODO: Does this need queueMicrotask?
+ this.callback = null
+ queueMicrotask(() => {
+ this.runInAsyncScope(callback, null, err, { opaque })
+ })
+ }
+
+ if (res) {
+ this.res = null
+ // Ensure all queued handlers are invoked before destroying res.
+ queueMicrotask(() => {
+ util.destroy(res, err)
+ })
+ }
+
+ if (body) {
+ this.body = null
+ util.destroy(body, err)
+ }
+ }
+}
+
+function request (opts, callback) {
+ if (callback === undefined) {
+ return new Promise((resolve, reject) => {
+ request.call(this, opts, (err, data) => {
+ return err ? reject(err) : resolve(data)
+ })
+ })
+ }
+
+ try {
+ this.dispatch(opts, new RequestHandler(opts, callback))
+ } catch (err) {
+ if (typeof callback !== 'function') {
+ throw err
+ }
+ const opaque = opts && opts.opaque
+ queueMicrotask(() => callback(err, { opaque }))
+ }
+}
+
+module.exports = request
+
+
+/***/ }),
+
+/***/ 75395:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+"use strict";
+
+
+const { finished, PassThrough } = __nccwpck_require__(12781)
+const {
+ InvalidArgumentError,
+ InvalidReturnValueError,
+ RequestAbortedError
+} = __nccwpck_require__(48045)
+const util = __nccwpck_require__(83983)
+const { getResolveErrorBodyCallback } = __nccwpck_require__(77474)
+const { AsyncResource } = __nccwpck_require__(50852)
+const { addSignal, removeSignal } = __nccwpck_require__(7032)
+
+class StreamHandler extends AsyncResource {
+ constructor (opts, factory, callback) {
+ if (!opts || typeof opts !== 'object') {
+ throw new InvalidArgumentError('invalid opts')
+ }
+
+ const { signal, method, opaque, body, onInfo, responseHeaders, throwOnError } = opts
+
+ try {
+ if (typeof callback !== 'function') {
+ throw new InvalidArgumentError('invalid callback')
+ }
+
+ if (typeof factory !== 'function') {
+ throw new InvalidArgumentError('invalid factory')
+ }
+
+ if (signal && typeof signal.on !== 'function' && typeof signal.addEventListener !== 'function') {
+ throw new InvalidArgumentError('signal must be an EventEmitter or EventTarget')
+ }
+
+ if (method === 'CONNECT') {
+ throw new InvalidArgumentError('invalid method')
+ }
+
+ if (onInfo && typeof onInfo !== 'function') {
+ throw new InvalidArgumentError('invalid onInfo callback')
+ }
+
+ super('UNDICI_STREAM')
+ } catch (err) {
+ if (util.isStream(body)) {
+ util.destroy(body.on('error', util.nop), err)
+ }
+ throw err
+ }
+
+ this.responseHeaders = responseHeaders || null
+ this.opaque = opaque || null
+ this.factory = factory
+ this.callback = callback
+ this.res = null
+ this.abort = null
+ this.context = null
+ this.trailers = null
+ this.body = body
+ this.onInfo = onInfo || null
+ this.throwOnError = throwOnError || false
+
+ if (util.isStream(body)) {
+ body.on('error', (err) => {
+ this.onError(err)
+ })
+ }
+
+ addSignal(this, signal)
+ }
+
+ onConnect (abort, context) {
+ if (!this.callback) {
+ throw new RequestAbortedError()
+ }
+
+ this.abort = abort
+ this.context = context
+ }
+
+ onHeaders (statusCode, rawHeaders, resume, statusMessage) {
+ const { factory, opaque, context, callback, responseHeaders } = this
+
+ const headers = responseHeaders === 'raw' ? util.parseRawHeaders(rawHeaders) : util.parseHeaders(rawHeaders)
+
+ if (statusCode < 200) {
+ if (this.onInfo) {
+ this.onInfo({ statusCode, headers })
+ }
+ return
+ }
+
+ this.factory = null
+
+ let res
+
+ if (this.throwOnError && statusCode >= 400) {
+ const parsedHeaders = responseHeaders === 'raw' ? util.parseHeaders(rawHeaders) : headers
+ const contentType = parsedHeaders['content-type']
+ res = new PassThrough()
+
+ this.callback = null
+ this.runInAsyncScope(getResolveErrorBodyCallback, null,
+ { callback, body: res, contentType, statusCode, statusMessage, headers }
+ )
+ } else {
+ if (factory === null) {
+ return
+ }
+
+ res = this.runInAsyncScope(factory, null, {
+ statusCode,
+ headers,
+ opaque,
+ context
+ })
+
+ if (
+ !res ||
+ typeof res.write !== 'function' ||
+ typeof res.end !== 'function' ||
+ typeof res.on !== 'function'
+ ) {
+ throw new InvalidReturnValueError('expected Writable')
+ }
+
+ // TODO: Avoid finished. It registers an unnecessary amount of listeners.
+ finished(res, { readable: false }, (err) => {
+ const { callback, res, opaque, trailers, abort } = this
+
+ this.res = null
+ if (err || !res.readable) {
+ util.destroy(res, err)
+ }
+
+ this.callback = null
+ this.runInAsyncScope(callback, null, err || null, { opaque, trailers })
+
+ if (err) {
+ abort()
+ }
+ })
+ }
+
+ res.on('drain', resume)
+
+ this.res = res
+
+ const needDrain = res.writableNeedDrain !== undefined
+ ? res.writableNeedDrain
+ : res._writableState && res._writableState.needDrain
+
+ return needDrain !== true
+ }
+
+ onData (chunk) {
+ const { res } = this
+
+ return res ? res.write(chunk) : true
+ }
+
+ onComplete (trailers) {
+ const { res } = this
+
+ removeSignal(this)
+
+ if (!res) {
+ return
+ }
+
+ this.trailers = util.parseHeaders(trailers)
+
+ res.end()
+ }
+
+ onError (err) {
+ const { res, callback, opaque, body } = this
+
+ removeSignal(this)
+
+ this.factory = null
+
+ if (res) {
+ this.res = null
+ util.destroy(res, err)
+ } else if (callback) {
+ this.callback = null
+ queueMicrotask(() => {
+ this.runInAsyncScope(callback, null, err, { opaque })
+ })
+ }
+
+ if (body) {
+ this.body = null
+ util.destroy(body, err)
+ }
+ }
+}
+
+function stream (opts, factory, callback) {
+ if (callback === undefined) {
+ return new Promise((resolve, reject) => {
+ stream.call(this, opts, factory, (err, data) => {
+ return err ? reject(err) : resolve(data)
+ })
+ })
+ }
+
+ try {
+ this.dispatch(opts, new StreamHandler(opts, factory, callback))
+ } catch (err) {
+ if (typeof callback !== 'function') {
+ throw err
+ }
+ const opaque = opts && opts.opaque
+ queueMicrotask(() => callback(err, { opaque }))
+ }
+}
+
+module.exports = stream
+
+
+/***/ }),
+
+/***/ 36923:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+"use strict";
+
+
+const { InvalidArgumentError, RequestAbortedError, SocketError } = __nccwpck_require__(48045)
+const { AsyncResource } = __nccwpck_require__(50852)
+const util = __nccwpck_require__(83983)
+const { addSignal, removeSignal } = __nccwpck_require__(7032)
+const assert = __nccwpck_require__(39491)
+
+class UpgradeHandler extends AsyncResource {
+ constructor (opts, callback) {
+ if (!opts || typeof opts !== 'object') {
+ throw new InvalidArgumentError('invalid opts')
+ }
+
+ if (typeof callback !== 'function') {
+ throw new InvalidArgumentError('invalid callback')
+ }
+
+ const { signal, opaque, responseHeaders } = opts
+
+ if (signal && typeof signal.on !== 'function' && typeof signal.addEventListener !== 'function') {
+ throw new InvalidArgumentError('signal must be an EventEmitter or EventTarget')
+ }
+
+ super('UNDICI_UPGRADE')
+
+ this.responseHeaders = responseHeaders || null
+ this.opaque = opaque || null
+ this.callback = callback
+ this.abort = null
+ this.context = null
+
+ addSignal(this, signal)
+ }
+
+ onConnect (abort, context) {
+ if (!this.callback) {
+ throw new RequestAbortedError()
+ }
+
+ this.abort = abort
+ this.context = null
+ }
+
+ onHeaders () {
+ throw new SocketError('bad upgrade', null)
+ }
+
+ onUpgrade (statusCode, rawHeaders, socket) {
+ const { callback, opaque, context } = this
+
+ assert.strictEqual(statusCode, 101)
+
+ removeSignal(this)
+
+ this.callback = null
+ const headers = this.responseHeaders === 'raw' ? util.parseRawHeaders(rawHeaders) : util.parseHeaders(rawHeaders)
+ this.runInAsyncScope(callback, null, null, {
+ headers,
+ socket,
+ opaque,
+ context
+ })
+ }
+
+ onError (err) {
+ const { callback, opaque } = this
+
+ removeSignal(this)
+
+ if (callback) {
+ this.callback = null
+ queueMicrotask(() => {
+ this.runInAsyncScope(callback, null, err, { opaque })
+ })
+ }
+ }
+}
+
+function upgrade (opts, callback) {
+ if (callback === undefined) {
+ return new Promise((resolve, reject) => {
+ upgrade.call(this, opts, (err, data) => {
+ return err ? reject(err) : resolve(data)
+ })
+ })
+ }
+
+ try {
+ const upgradeHandler = new UpgradeHandler(opts, callback)
+ this.dispatch({
+ ...opts,
+ method: opts.method || 'GET',
+ upgrade: opts.protocol || 'Websocket'
+ }, upgradeHandler)
+ } catch (err) {
+ if (typeof callback !== 'function') {
+ throw err
+ }
+ const opaque = opts && opts.opaque
+ queueMicrotask(() => callback(err, { opaque }))
+ }
+}
+
+module.exports = upgrade
+
+
+/***/ }),
+
+/***/ 44059:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+"use strict";
+
+
+module.exports.request = __nccwpck_require__(55448)
+module.exports.stream = __nccwpck_require__(75395)
+module.exports.pipeline = __nccwpck_require__(28752)
+module.exports.upgrade = __nccwpck_require__(36923)
+module.exports.connect = __nccwpck_require__(29744)
+
+
+/***/ }),
+
+/***/ 73858:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+"use strict";
+// Ported from https://github.com/nodejs/undici/pull/907
+
+
+
+const assert = __nccwpck_require__(39491)
+const { Readable } = __nccwpck_require__(12781)
+const { RequestAbortedError, NotSupportedError, InvalidArgumentError } = __nccwpck_require__(48045)
+const util = __nccwpck_require__(83983)
+const { ReadableStreamFrom, toUSVString } = __nccwpck_require__(83983)
+
+let Blob
+
+const kConsume = Symbol('kConsume')
+const kReading = Symbol('kReading')
+const kBody = Symbol('kBody')
+const kAbort = Symbol('abort')
+const kContentType = Symbol('kContentType')
+
+module.exports = class BodyReadable extends Readable {
+ constructor ({
+ resume,
+ abort,
+ contentType = '',
+ highWaterMark = 64 * 1024 // Same as nodejs fs streams.
+ }) {
+ super({
+ autoDestroy: true,
+ read: resume,
+ highWaterMark
+ })
+
+ this._readableState.dataEmitted = false
+
+ this[kAbort] = abort
+ this[kConsume] = null
+ this[kBody] = null
+ this[kContentType] = contentType
+
+ // Is stream being consumed through Readable API?
+ // This is an optimization so that we avoid checking
+ // for 'data' and 'readable' listeners in the hot path
+ // inside push().
+ this[kReading] = false
+ }
+
+ destroy (err) {
+ if (this.destroyed) {
+ // Node < 16
+ return this
+ }
+
+ if (!err && !this._readableState.endEmitted) {
+ err = new RequestAbortedError()
+ }
+
+ if (err) {
+ this[kAbort]()
+ }
+
+ return super.destroy(err)
+ }
+
+ emit (ev, ...args) {
+ if (ev === 'data') {
+ // Node < 16.7
+ this._readableState.dataEmitted = true
+ } else if (ev === 'error') {
+ // Node < 16
+ this._readableState.errorEmitted = true
+ }
+ return super.emit(ev, ...args)
+ }
+
+ on (ev, ...args) {
+ if (ev === 'data' || ev === 'readable') {
+ this[kReading] = true
+ }
+ return super.on(ev, ...args)
+ }
+
+ addListener (ev, ...args) {
+ return this.on(ev, ...args)
+ }
+
+ off (ev, ...args) {
+ const ret = super.off(ev, ...args)
+ if (ev === 'data' || ev === 'readable') {
+ this[kReading] = (
+ this.listenerCount('data') > 0 ||
+ this.listenerCount('readable') > 0
+ )
+ }
+ return ret
+ }
+
+ removeListener (ev, ...args) {
+ return this.off(ev, ...args)
+ }
+
+ push (chunk) {
+ if (this[kConsume] && chunk !== null && this.readableLength === 0) {
+ consumePush(this[kConsume], chunk)
+ return this[kReading] ? super.push(chunk) : true
+ }
+ return super.push(chunk)
+ }
+
+ // https://fetch.spec.whatwg.org/#dom-body-text
+ async text () {
+ return consume(this, 'text')
+ }
+
+ // https://fetch.spec.whatwg.org/#dom-body-json
+ async json () {
+ return consume(this, 'json')
+ }
+
+ // https://fetch.spec.whatwg.org/#dom-body-blob
+ async blob () {
+ return consume(this, 'blob')
+ }
+
+ // https://fetch.spec.whatwg.org/#dom-body-arraybuffer
+ async arrayBuffer () {
+ return consume(this, 'arrayBuffer')
+ }
+
+ // https://fetch.spec.whatwg.org/#dom-body-formdata
+ async formData () {
+ // TODO: Implement.
+ throw new NotSupportedError()
+ }
+
+ // https://fetch.spec.whatwg.org/#dom-body-bodyused
+ get bodyUsed () {
+ return util.isDisturbed(this)
+ }
+
+ // https://fetch.spec.whatwg.org/#dom-body-body
+ get body () {
+ if (!this[kBody]) {
+ this[kBody] = ReadableStreamFrom(this)
+ if (this[kConsume]) {
+ // TODO: Is this the best way to force a lock?
+ this[kBody].getReader() // Ensure stream is locked.
+ assert(this[kBody].locked)
+ }
+ }
+ return this[kBody]
+ }
+
+ async dump (opts) {
+ let limit = opts && Number.isFinite(opts.limit) ? opts.limit : 262144
+ const signal = opts && opts.signal
+ const abortFn = () => {
+ this.destroy()
+ }
+ let signalListenerCleanup
+ if (signal) {
+ if (typeof signal !== 'object' || !('aborted' in signal)) {
+ throw new InvalidArgumentError('signal must be an AbortSignal')
+ }
+ util.throwIfAborted(signal)
+ signalListenerCleanup = util.addAbortListener(signal, abortFn)
+ }
+ try {
+ for await (const chunk of this) {
+ util.throwIfAborted(signal)
+ limit -= Buffer.byteLength(chunk)
+ if (limit < 0) {
+ return
+ }
+ }
+ } catch {
+ util.throwIfAborted(signal)
+ } finally {
+ if (typeof signalListenerCleanup === 'function') {
+ signalListenerCleanup()
+ } else if (signalListenerCleanup) {
+ signalListenerCleanup[Symbol.dispose]()
+ }
+ }
+ }
+}
+
+// https://streams.spec.whatwg.org/#readablestream-locked
+function isLocked (self) {
+ // Consume is an implicit lock.
+ return (self[kBody] && self[kBody].locked === true) || self[kConsume]
+}
+
+// https://fetch.spec.whatwg.org/#body-unusable
+function isUnusable (self) {
+ return util.isDisturbed(self) || isLocked(self)
+}
+
+async function consume (stream, type) {
+ if (isUnusable(stream)) {
+ throw new TypeError('unusable')
+ }
+
+ assert(!stream[kConsume])
+
+ return new Promise((resolve, reject) => {
+ stream[kConsume] = {
+ type,
+ stream,
+ resolve,
+ reject,
+ length: 0,
+ body: []
+ }
+
+ stream
+ .on('error', function (err) {
+ consumeFinish(this[kConsume], err)
+ })
+ .on('close', function () {
+ if (this[kConsume].body !== null) {
+ consumeFinish(this[kConsume], new RequestAbortedError())
+ }
+ })
+
+ process.nextTick(consumeStart, stream[kConsume])
+ })
+}
+
+function consumeStart (consume) {
+ if (consume.body === null) {
+ return
+ }
+
+ const { _readableState: state } = consume.stream
+
+ for (const chunk of state.buffer) {
+ consumePush(consume, chunk)
+ }
+
+ if (state.endEmitted) {
+ consumeEnd(this[kConsume])
+ } else {
+ consume.stream.on('end', function () {
+ consumeEnd(this[kConsume])
+ })
+ }
+
+ consume.stream.resume()
+
+ while (consume.stream.read() != null) {
+ // Loop
+ }
+}
+
+function consumeEnd (consume) {
+ const { type, body, resolve, stream, length } = consume
+
+ try {
+ if (type === 'text') {
+ resolve(toUSVString(Buffer.concat(body)))
+ } else if (type === 'json') {
+ resolve(JSON.parse(Buffer.concat(body)))
+ } else if (type === 'arrayBuffer') {
+ const dst = new Uint8Array(length)
+
+ let pos = 0
+ for (const buf of body) {
+ dst.set(buf, pos)
+ pos += buf.byteLength
+ }
+
+ resolve(dst.buffer)
+ } else if (type === 'blob') {
+ if (!Blob) {
+ Blob = (__nccwpck_require__(14300).Blob)
+ }
+ resolve(new Blob(body, { type: stream[kContentType] }))
+ }
+
+ consumeFinish(consume)
+ } catch (err) {
+ stream.destroy(err)
+ }
+}
+
+function consumePush (consume, chunk) {
+ consume.length += chunk.length
+ consume.body.push(chunk)
+}
+
+function consumeFinish (consume, err) {
+ if (consume.body === null) {
+ return
+ }
+
+ if (err) {
+ consume.reject(err)
+ } else {
+ consume.resolve()
+ }
+
+ consume.type = null
+ consume.stream = null
+ consume.resolve = null
+ consume.reject = null
+ consume.length = 0
+ consume.body = null
+}
+
+
+/***/ }),
+
+/***/ 77474:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+const assert = __nccwpck_require__(39491)
+const {
+ ResponseStatusCodeError
+} = __nccwpck_require__(48045)
+const { toUSVString } = __nccwpck_require__(83983)
+
+async function getResolveErrorBodyCallback ({ callback, body, contentType, statusCode, statusMessage, headers }) {
+ assert(body)
+
+ let chunks = []
+ let limit = 0
+
+ for await (const chunk of body) {
+ chunks.push(chunk)
+ limit += chunk.length
+ if (limit > 128 * 1024) {
+ chunks = null
+ break
+ }
+ }
+
+ if (statusCode === 204 || !contentType || !chunks) {
+ process.nextTick(callback, new ResponseStatusCodeError(`Response status code ${statusCode}${statusMessage ? `: ${statusMessage}` : ''}`, statusCode, headers))
+ return
+ }
+
+ try {
+ if (contentType.startsWith('application/json')) {
+ const payload = JSON.parse(toUSVString(Buffer.concat(chunks)))
+ process.nextTick(callback, new ResponseStatusCodeError(`Response status code ${statusCode}${statusMessage ? `: ${statusMessage}` : ''}`, statusCode, headers, payload))
+ return
+ }
+
+ if (contentType.startsWith('text/')) {
+ const payload = toUSVString(Buffer.concat(chunks))
+ process.nextTick(callback, new ResponseStatusCodeError(`Response status code ${statusCode}${statusMessage ? `: ${statusMessage}` : ''}`, statusCode, headers, payload))
+ return
+ }
+ } catch (err) {
+ // Process in a fallback if error
+ }
+
+ process.nextTick(callback, new ResponseStatusCodeError(`Response status code ${statusCode}${statusMessage ? `: ${statusMessage}` : ''}`, statusCode, headers))
+}
+
+module.exports = { getResolveErrorBodyCallback }
+
+
+/***/ }),
+
+/***/ 37931:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+"use strict";
+
+
+const {
+ BalancedPoolMissingUpstreamError,
+ InvalidArgumentError
+} = __nccwpck_require__(48045)
+const {
+ PoolBase,
+ kClients,
+ kNeedDrain,
+ kAddClient,
+ kRemoveClient,
+ kGetDispatcher
+} = __nccwpck_require__(73198)
+const Pool = __nccwpck_require__(4634)
+const { kUrl, kInterceptors } = __nccwpck_require__(72785)
+const { parseOrigin } = __nccwpck_require__(83983)
+const kFactory = Symbol('factory')
+
+const kOptions = Symbol('options')
+const kGreatestCommonDivisor = Symbol('kGreatestCommonDivisor')
+const kCurrentWeight = Symbol('kCurrentWeight')
+const kIndex = Symbol('kIndex')
+const kWeight = Symbol('kWeight')
+const kMaxWeightPerServer = Symbol('kMaxWeightPerServer')
+const kErrorPenalty = Symbol('kErrorPenalty')
+
+function getGreatestCommonDivisor (a, b) {
+ if (b === 0) return a
+ return getGreatestCommonDivisor(b, a % b)
+}
+
+function defaultFactory (origin, opts) {
+ return new Pool(origin, opts)
+}
+
+class BalancedPool extends PoolBase {
+ constructor (upstreams = [], { factory = defaultFactory, ...opts } = {}) {
+ super()
+
+ this[kOptions] = opts
+ this[kIndex] = -1
+ this[kCurrentWeight] = 0
+
+ this[kMaxWeightPerServer] = this[kOptions].maxWeightPerServer || 100
+ this[kErrorPenalty] = this[kOptions].errorPenalty || 15
+
+ if (!Array.isArray(upstreams)) {
+ upstreams = [upstreams]
+ }
+
+ if (typeof factory !== 'function') {
+ throw new InvalidArgumentError('factory must be a function.')
+ }
+
+ this[kInterceptors] = opts.interceptors && opts.interceptors.BalancedPool && Array.isArray(opts.interceptors.BalancedPool)
+ ? opts.interceptors.BalancedPool
+ : []
+ this[kFactory] = factory
+
+ for (const upstream of upstreams) {
+ this.addUpstream(upstream)
+ }
+ this._updateBalancedPoolStats()
+ }
+
+ addUpstream (upstream) {
+ const upstreamOrigin = parseOrigin(upstream).origin
+
+ if (this[kClients].find((pool) => (
+ pool[kUrl].origin === upstreamOrigin &&
+ pool.closed !== true &&
+ pool.destroyed !== true
+ ))) {
+ return this
+ }
+ const pool = this[kFactory](upstreamOrigin, Object.assign({}, this[kOptions]))
+
+ this[kAddClient](pool)
+ pool.on('connect', () => {
+ pool[kWeight] = Math.min(this[kMaxWeightPerServer], pool[kWeight] + this[kErrorPenalty])
+ })
+
+ pool.on('connectionError', () => {
+ pool[kWeight] = Math.max(1, pool[kWeight] - this[kErrorPenalty])
+ this._updateBalancedPoolStats()
+ })
+
+ pool.on('disconnect', (...args) => {
+ const err = args[2]
+ if (err && err.code === 'UND_ERR_SOCKET') {
+ // decrease the weight of the pool.
+ pool[kWeight] = Math.max(1, pool[kWeight] - this[kErrorPenalty])
+ this._updateBalancedPoolStats()
+ }
+ })
+
+ for (const client of this[kClients]) {
+ client[kWeight] = this[kMaxWeightPerServer]
+ }
+
+ this._updateBalancedPoolStats()
+
+ return this
+ }
+
+ _updateBalancedPoolStats () {
+ this[kGreatestCommonDivisor] = this[kClients].map(p => p[kWeight]).reduce(getGreatestCommonDivisor, 0)
+ }
+
+ removeUpstream (upstream) {
+ const upstreamOrigin = parseOrigin(upstream).origin
+
+ const pool = this[kClients].find((pool) => (
+ pool[kUrl].origin === upstreamOrigin &&
+ pool.closed !== true &&
+ pool.destroyed !== true
+ ))
+
+ if (pool) {
+ this[kRemoveClient](pool)
+ }
+
+ return this
+ }
+
+ get upstreams () {
+ return this[kClients]
+ .filter(dispatcher => dispatcher.closed !== true && dispatcher.destroyed !== true)
+ .map((p) => p[kUrl].origin)
+ }
+
+ [kGetDispatcher] () {
+ // We validate that pools is greater than 0,
+ // otherwise we would have to wait until an upstream
+ // is added, which might never happen.
+ if (this[kClients].length === 0) {
+ throw new BalancedPoolMissingUpstreamError()
+ }
+
+ const dispatcher = this[kClients].find(dispatcher => (
+ !dispatcher[kNeedDrain] &&
+ dispatcher.closed !== true &&
+ dispatcher.destroyed !== true
+ ))
+
+ if (!dispatcher) {
+ return
+ }
+
+ const allClientsBusy = this[kClients].map(pool => pool[kNeedDrain]).reduce((a, b) => a && b, true)
+
+ if (allClientsBusy) {
+ return
+ }
+
+ let counter = 0
+
+ let maxWeightIndex = this[kClients].findIndex(pool => !pool[kNeedDrain])
+
+ while (counter++ < this[kClients].length) {
+ this[kIndex] = (this[kIndex] + 1) % this[kClients].length
+ const pool = this[kClients][this[kIndex]]
+
+ // find pool index with the largest weight
+ if (pool[kWeight] > this[kClients][maxWeightIndex][kWeight] && !pool[kNeedDrain]) {
+ maxWeightIndex = this[kIndex]
+ }
+
+ // decrease the current weight every `this[kClients].length`.
+ if (this[kIndex] === 0) {
+ // Set the current weight to the next lower weight.
+ this[kCurrentWeight] = this[kCurrentWeight] - this[kGreatestCommonDivisor]
+
+ if (this[kCurrentWeight] <= 0) {
+ this[kCurrentWeight] = this[kMaxWeightPerServer]
+ }
+ }
+ if (pool[kWeight] >= this[kCurrentWeight] && (!pool[kNeedDrain])) {
+ return pool
+ }
+ }
+
+ this[kCurrentWeight] = this[kClients][maxWeightIndex][kWeight]
+ this[kIndex] = maxWeightIndex
+ return this[kClients][maxWeightIndex]
+ }
+}
+
+module.exports = BalancedPool
+
+
+/***/ }),
+
+/***/ 66101:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+"use strict";
+
+
+const { kConstruct } = __nccwpck_require__(29174)
+const { urlEquals, fieldValues: getFieldValues } = __nccwpck_require__(82396)
+const { kEnumerableProperty, isDisturbed } = __nccwpck_require__(83983)
+const { kHeadersList } = __nccwpck_require__(72785)
+const { webidl } = __nccwpck_require__(21744)
+const { Response, cloneResponse } = __nccwpck_require__(27823)
+const { Request } = __nccwpck_require__(48359)
+const { kState, kHeaders, kGuard, kRealm } = __nccwpck_require__(15861)
+const { fetching } = __nccwpck_require__(74881)
+const { urlIsHttpHttpsScheme, createDeferredPromise, readAllBytes } = __nccwpck_require__(52538)
+const assert = __nccwpck_require__(39491)
+const { getGlobalDispatcher } = __nccwpck_require__(21892)
+
+/**
+ * @see https://w3c.github.io/ServiceWorker/#dfn-cache-batch-operation
+ * @typedef {Object} CacheBatchOperation
+ * @property {'delete' | 'put'} type
+ * @property {any} request
+ * @property {any} response
+ * @property {import('../../types/cache').CacheQueryOptions} options
+ */
+
+/**
+ * @see https://w3c.github.io/ServiceWorker/#dfn-request-response-list
+ * @typedef {[any, any][]} requestResponseList
+ */
+
+class Cache {
+ /**
+ * @see https://w3c.github.io/ServiceWorker/#dfn-relevant-request-response-list
+ * @type {requestResponseList}
+ */
+ #relevantRequestResponseList
+
+ constructor () {
+ if (arguments[0] !== kConstruct) {
+ webidl.illegalConstructor()
+ }
+
+ this.#relevantRequestResponseList = arguments[1]
+ }
+
+ async match (request, options = {}) {
+ webidl.brandCheck(this, Cache)
+ webidl.argumentLengthCheck(arguments, 1, { header: 'Cache.match' })
+
+ request = webidl.converters.RequestInfo(request)
+ options = webidl.converters.CacheQueryOptions(options)
+
+ const p = await this.matchAll(request, options)
+
+ if (p.length === 0) {
+ return
+ }
+
+ return p[0]
+ }
+
+ async matchAll (request = undefined, options = {}) {
+ webidl.brandCheck(this, Cache)
+
+ if (request !== undefined) request = webidl.converters.RequestInfo(request)
+ options = webidl.converters.CacheQueryOptions(options)
+
+ // 1.
+ let r = null
+
+ // 2.
+ if (request !== undefined) {
+ if (request instanceof Request) {
+ // 2.1.1
+ r = request[kState]
+
+ // 2.1.2
+ if (r.method !== 'GET' && !options.ignoreMethod) {
+ return []
+ }
+ } else if (typeof request === 'string') {
+ // 2.2.1
+ r = new Request(request)[kState]
+ }
+ }
+
+ // 5.
+ // 5.1
+ const responses = []
+
+ // 5.2
+ if (request === undefined) {
+ // 5.2.1
+ for (const requestResponse of this.#relevantRequestResponseList) {
+ responses.push(requestResponse[1])
+ }
+ } else { // 5.3
+ // 5.3.1
+ const requestResponses = this.#queryCache(r, options)
+
+ // 5.3.2
+ for (const requestResponse of requestResponses) {
+ responses.push(requestResponse[1])
+ }
+ }
+
+ // 5.4
+ // We don't implement CORs so we don't need to loop over the responses, yay!
+
+ // 5.5.1
+ const responseList = []
+
+ // 5.5.2
+ for (const response of responses) {
+ // 5.5.2.1
+ const responseObject = new Response(response.body?.source ?? null)
+ const body = responseObject[kState].body
+ responseObject[kState] = response
+ responseObject[kState].body = body
+ responseObject[kHeaders][kHeadersList] = response.headersList
+ responseObject[kHeaders][kGuard] = 'immutable'
+
+ responseList.push(responseObject)
+ }
+
+ // 6.
+ return Object.freeze(responseList)
+ }
+
+ async add (request) {
+ webidl.brandCheck(this, Cache)
+ webidl.argumentLengthCheck(arguments, 1, { header: 'Cache.add' })
+
+ request = webidl.converters.RequestInfo(request)
+
+ // 1.
+ const requests = [request]
+
+ // 2.
+ const responseArrayPromise = this.addAll(requests)
+
+ // 3.
+ return await responseArrayPromise
+ }
+
+ async addAll (requests) {
+ webidl.brandCheck(this, Cache)
+ webidl.argumentLengthCheck(arguments, 1, { header: 'Cache.addAll' })
+
+ requests = webidl.converters['sequence'](requests)
+
+ // 1.
+ const responsePromises = []
+
+ // 2.
+ const requestList = []
+
+ // 3.
+ for (const request of requests) {
+ if (typeof request === 'string') {
+ continue
+ }
+
+ // 3.1
+ const r = request[kState]
+
+ // 3.2
+ if (!urlIsHttpHttpsScheme(r.url) || r.method !== 'GET') {
+ throw webidl.errors.exception({
+ header: 'Cache.addAll',
+ message: 'Expected http/s scheme when method is not GET.'
+ })
+ }
+ }
+
+ // 4.
+ /** @type {ReturnType[]} */
+ const fetchControllers = []
+
+ // 5.
+ for (const request of requests) {
+ // 5.1
+ const r = new Request(request)[kState]
+
+ // 5.2
+ if (!urlIsHttpHttpsScheme(r.url)) {
+ throw webidl.errors.exception({
+ header: 'Cache.addAll',
+ message: 'Expected http/s scheme.'
+ })
+ }
+
+ // 5.4
+ r.initiator = 'fetch'
+ r.destination = 'subresource'
+
+ // 5.5
+ requestList.push(r)
+
+ // 5.6
+ const responsePromise = createDeferredPromise()
+
+ // 5.7
+ fetchControllers.push(fetching({
+ request: r,
+ dispatcher: getGlobalDispatcher(),
+ processResponse (response) {
+ // 1.
+ if (response.type === 'error' || response.status === 206 || response.status < 200 || response.status > 299) {
+ responsePromise.reject(webidl.errors.exception({
+ header: 'Cache.addAll',
+ message: 'Received an invalid status code or the request failed.'
+ }))
+ } else if (response.headersList.contains('vary')) { // 2.
+ // 2.1
+ const fieldValues = getFieldValues(response.headersList.get('vary'))
+
+ // 2.2
+ for (const fieldValue of fieldValues) {
+ // 2.2.1
+ if (fieldValue === '*') {
+ responsePromise.reject(webidl.errors.exception({
+ header: 'Cache.addAll',
+ message: 'invalid vary field value'
+ }))
+
+ for (const controller of fetchControllers) {
+ controller.abort()
+ }
+
+ return
+ }
+ }
+ }
+ },
+ processResponseEndOfBody (response) {
+ // 1.
+ if (response.aborted) {
+ responsePromise.reject(new DOMException('aborted', 'AbortError'))
+ return
+ }
+
+ // 2.
+ responsePromise.resolve(response)
+ }
+ }))
+
+ // 5.8
+ responsePromises.push(responsePromise.promise)
+ }
+
+ // 6.
+ const p = Promise.all(responsePromises)
+
+ // 7.
+ const responses = await p
+
+ // 7.1
+ const operations = []
+
+ // 7.2
+ let index = 0
+
+ // 7.3
+ for (const response of responses) {
+ // 7.3.1
+ /** @type {CacheBatchOperation} */
+ const operation = {
+ type: 'put', // 7.3.2
+ request: requestList[index], // 7.3.3
+ response // 7.3.4
+ }
+
+ operations.push(operation) // 7.3.5
+
+ index++ // 7.3.6
+ }
+
+ // 7.5
+ const cacheJobPromise = createDeferredPromise()
+
+ // 7.6.1
+ let errorData = null
+
+ // 7.6.2
+ try {
+ this.#batchCacheOperations(operations)
+ } catch (e) {
+ errorData = e
+ }
+
+ // 7.6.3
+ queueMicrotask(() => {
+ // 7.6.3.1
+ if (errorData === null) {
+ cacheJobPromise.resolve(undefined)
+ } else {
+ // 7.6.3.2
+ cacheJobPromise.reject(errorData)
+ }
+ })
+
+ // 7.7
+ return cacheJobPromise.promise
+ }
+
+ async put (request, response) {
+ webidl.brandCheck(this, Cache)
+ webidl.argumentLengthCheck(arguments, 2, { header: 'Cache.put' })
+
+ request = webidl.converters.RequestInfo(request)
+ response = webidl.converters.Response(response)
+
+ // 1.
+ let innerRequest = null
+
+ // 2.
+ if (request instanceof Request) {
+ innerRequest = request[kState]
+ } else { // 3.
+ innerRequest = new Request(request)[kState]
+ }
+
+ // 4.
+ if (!urlIsHttpHttpsScheme(innerRequest.url) || innerRequest.method !== 'GET') {
+ throw webidl.errors.exception({
+ header: 'Cache.put',
+ message: 'Expected an http/s scheme when method is not GET'
+ })
+ }
+
+ // 5.
+ const innerResponse = response[kState]
+
+ // 6.
+ if (innerResponse.status === 206) {
+ throw webidl.errors.exception({
+ header: 'Cache.put',
+ message: 'Got 206 status'
+ })
+ }
+
+ // 7.
+ if (innerResponse.headersList.contains('vary')) {
+ // 7.1.
+ const fieldValues = getFieldValues(innerResponse.headersList.get('vary'))
+
+ // 7.2.
+ for (const fieldValue of fieldValues) {
+ // 7.2.1
+ if (fieldValue === '*') {
+ throw webidl.errors.exception({
+ header: 'Cache.put',
+ message: 'Got * vary field value'
+ })
+ }
+ }
+ }
+
+ // 8.
+ if (innerResponse.body && (isDisturbed(innerResponse.body.stream) || innerResponse.body.stream.locked)) {
+ throw webidl.errors.exception({
+ header: 'Cache.put',
+ message: 'Response body is locked or disturbed'
+ })
+ }
+
+ // 9.
+ const clonedResponse = cloneResponse(innerResponse)
+
+ // 10.
+ const bodyReadPromise = createDeferredPromise()
+
+ // 11.
+ if (innerResponse.body != null) {
+ // 11.1
+ const stream = innerResponse.body.stream
+
+ // 11.2
+ const reader = stream.getReader()
+
+ // 11.3
+ readAllBytes(reader).then(bodyReadPromise.resolve, bodyReadPromise.reject)
+ } else {
+ bodyReadPromise.resolve(undefined)
+ }
+
+ // 12.
+ /** @type {CacheBatchOperation[]} */
+ const operations = []
+
+ // 13.
+ /** @type {CacheBatchOperation} */
+ const operation = {
+ type: 'put', // 14.
+ request: innerRequest, // 15.
+ response: clonedResponse // 16.
+ }
+
+ // 17.
+ operations.push(operation)
+
+ // 19.
+ const bytes = await bodyReadPromise.promise
+
+ if (clonedResponse.body != null) {
+ clonedResponse.body.source = bytes
+ }
+
+ // 19.1
+ const cacheJobPromise = createDeferredPromise()
+
+ // 19.2.1
+ let errorData = null
+
+ // 19.2.2
+ try {
+ this.#batchCacheOperations(operations)
+ } catch (e) {
+ errorData = e
+ }
+
+ // 19.2.3
+ queueMicrotask(() => {
+ // 19.2.3.1
+ if (errorData === null) {
+ cacheJobPromise.resolve()
+ } else { // 19.2.3.2
+ cacheJobPromise.reject(errorData)
+ }
+ })
+
+ return cacheJobPromise.promise
+ }
+
+ async delete (request, options = {}) {
+ webidl.brandCheck(this, Cache)
+ webidl.argumentLengthCheck(arguments, 1, { header: 'Cache.delete' })
+
+ request = webidl.converters.RequestInfo(request)
+ options = webidl.converters.CacheQueryOptions(options)
+
+ /**
+ * @type {Request}
+ */
+ let r = null
+
+ if (request instanceof Request) {
+ r = request[kState]
+
+ if (r.method !== 'GET' && !options.ignoreMethod) {
+ return false
+ }
+ } else {
+ assert(typeof request === 'string')
+
+ r = new Request(request)[kState]
+ }
+
+ /** @type {CacheBatchOperation[]} */
+ const operations = []
+
+ /** @type {CacheBatchOperation} */
+ const operation = {
+ type: 'delete',
+ request: r,
+ options
+ }
+
+ operations.push(operation)
+
+ const cacheJobPromise = createDeferredPromise()
+
+ let errorData = null
+ let requestResponses
+
+ try {
+ requestResponses = this.#batchCacheOperations(operations)
+ } catch (e) {
+ errorData = e
+ }
+
+ queueMicrotask(() => {
+ if (errorData === null) {
+ cacheJobPromise.resolve(!!requestResponses?.length)
+ } else {
+ cacheJobPromise.reject(errorData)
+ }
+ })
+
+ return cacheJobPromise.promise
+ }
+
+ /**
+ * @see https://w3c.github.io/ServiceWorker/#dom-cache-keys
+ * @param {any} request
+ * @param {import('../../types/cache').CacheQueryOptions} options
+ * @returns {readonly Request[]}
+ */
+ async keys (request = undefined, options = {}) {
+ webidl.brandCheck(this, Cache)
+
+ if (request !== undefined) request = webidl.converters.RequestInfo(request)
+ options = webidl.converters.CacheQueryOptions(options)
+
+ // 1.
+ let r = null
+
+ // 2.
+ if (request !== undefined) {
+ // 2.1
+ if (request instanceof Request) {
+ // 2.1.1
+ r = request[kState]
+
+ // 2.1.2
+ if (r.method !== 'GET' && !options.ignoreMethod) {
+ return []
+ }
+ } else if (typeof request === 'string') { // 2.2
+ r = new Request(request)[kState]
+ }
+ }
+
+ // 4.
+ const promise = createDeferredPromise()
+
+ // 5.
+ // 5.1
+ const requests = []
+
+ // 5.2
+ if (request === undefined) {
+ // 5.2.1
+ for (const requestResponse of this.#relevantRequestResponseList) {
+ // 5.2.1.1
+ requests.push(requestResponse[0])
+ }
+ } else { // 5.3
+ // 5.3.1
+ const requestResponses = this.#queryCache(r, options)
+
+ // 5.3.2
+ for (const requestResponse of requestResponses) {
+ // 5.3.2.1
+ requests.push(requestResponse[0])
+ }
+ }
+
+ // 5.4
+ queueMicrotask(() => {
+ // 5.4.1
+ const requestList = []
+
+ // 5.4.2
+ for (const request of requests) {
+ const requestObject = new Request('https://a')
+ requestObject[kState] = request
+ requestObject[kHeaders][kHeadersList] = request.headersList
+ requestObject[kHeaders][kGuard] = 'immutable'
+ requestObject[kRealm] = request.client
+
+ // 5.4.2.1
+ requestList.push(requestObject)
+ }
+
+ // 5.4.3
+ promise.resolve(Object.freeze(requestList))
+ })
+
+ return promise.promise
+ }
+
+ /**
+ * @see https://w3c.github.io/ServiceWorker/#batch-cache-operations-algorithm
+ * @param {CacheBatchOperation[]} operations
+ * @returns {requestResponseList}
+ */
+ #batchCacheOperations (operations) {
+ // 1.
+ const cache = this.#relevantRequestResponseList
+
+ // 2.
+ const backupCache = [...cache]
+
+ // 3.
+ const addedItems = []
+
+ // 4.1
+ const resultList = []
+
+ try {
+ // 4.2
+ for (const operation of operations) {
+ // 4.2.1
+ if (operation.type !== 'delete' && operation.type !== 'put') {
+ throw webidl.errors.exception({
+ header: 'Cache.#batchCacheOperations',
+ message: 'operation type does not match "delete" or "put"'
+ })
+ }
+
+ // 4.2.2
+ if (operation.type === 'delete' && operation.response != null) {
+ throw webidl.errors.exception({
+ header: 'Cache.#batchCacheOperations',
+ message: 'delete operation should not have an associated response'
+ })
+ }
+
+ // 4.2.3
+ if (this.#queryCache(operation.request, operation.options, addedItems).length) {
+ throw new DOMException('???', 'InvalidStateError')
+ }
+
+ // 4.2.4
+ let requestResponses
+
+ // 4.2.5
+ if (operation.type === 'delete') {
+ // 4.2.5.1
+ requestResponses = this.#queryCache(operation.request, operation.options)
+
+ // TODO: the spec is wrong, this is needed to pass WPTs
+ if (requestResponses.length === 0) {
+ return []
+ }
+
+ // 4.2.5.2
+ for (const requestResponse of requestResponses) {
+ const idx = cache.indexOf(requestResponse)
+ assert(idx !== -1)
+
+ // 4.2.5.2.1
+ cache.splice(idx, 1)
+ }
+ } else if (operation.type === 'put') { // 4.2.6
+ // 4.2.6.1
+ if (operation.response == null) {
+ throw webidl.errors.exception({
+ header: 'Cache.#batchCacheOperations',
+ message: 'put operation should have an associated response'
+ })
+ }
+
+ // 4.2.6.2
+ const r = operation.request
+
+ // 4.2.6.3
+ if (!urlIsHttpHttpsScheme(r.url)) {
+ throw webidl.errors.exception({
+ header: 'Cache.#batchCacheOperations',
+ message: 'expected http or https scheme'
+ })
+ }
+
+ // 4.2.6.4
+ if (r.method !== 'GET') {
+ throw webidl.errors.exception({
+ header: 'Cache.#batchCacheOperations',
+ message: 'not get method'
+ })
+ }
+
+ // 4.2.6.5
+ if (operation.options != null) {
+ throw webidl.errors.exception({
+ header: 'Cache.#batchCacheOperations',
+ message: 'options must not be defined'
+ })
+ }
+
+ // 4.2.6.6
+ requestResponses = this.#queryCache(operation.request)
+
+ // 4.2.6.7
+ for (const requestResponse of requestResponses) {
+ const idx = cache.indexOf(requestResponse)
+ assert(idx !== -1)
+
+ // 4.2.6.7.1
+ cache.splice(idx, 1)
+ }
+
+ // 4.2.6.8
+ cache.push([operation.request, operation.response])
+
+ // 4.2.6.10
+ addedItems.push([operation.request, operation.response])
+ }
+
+ // 4.2.7
+ resultList.push([operation.request, operation.response])
+ }
+
+ // 4.3
+ return resultList
+ } catch (e) { // 5.
+ // 5.1
+ this.#relevantRequestResponseList.length = 0
+
+ // 5.2
+ this.#relevantRequestResponseList = backupCache
+
+ // 5.3
+ throw e
+ }
+ }
+
+ /**
+ * @see https://w3c.github.io/ServiceWorker/#query-cache
+ * @param {any} requestQuery
+ * @param {import('../../types/cache').CacheQueryOptions} options
+ * @param {requestResponseList} targetStorage
+ * @returns {requestResponseList}
+ */
+ #queryCache (requestQuery, options, targetStorage) {
+ /** @type {requestResponseList} */
+ const resultList = []
+
+ const storage = targetStorage ?? this.#relevantRequestResponseList
+
+ for (const requestResponse of storage) {
+ const [cachedRequest, cachedResponse] = requestResponse
+ if (this.#requestMatchesCachedItem(requestQuery, cachedRequest, cachedResponse, options)) {
+ resultList.push(requestResponse)
+ }
+ }
+
+ return resultList
+ }
+
+ /**
+ * @see https://w3c.github.io/ServiceWorker/#request-matches-cached-item-algorithm
+ * @param {any} requestQuery
+ * @param {any} request
+ * @param {any | null} response
+ * @param {import('../../types/cache').CacheQueryOptions | undefined} options
+ * @returns {boolean}
+ */
+ #requestMatchesCachedItem (requestQuery, request, response = null, options) {
+ // if (options?.ignoreMethod === false && request.method === 'GET') {
+ // return false
+ // }
+
+ const queryURL = new URL(requestQuery.url)
+
+ const cachedURL = new URL(request.url)
+
+ if (options?.ignoreSearch) {
+ cachedURL.search = ''
+
+ queryURL.search = ''
+ }
+
+ if (!urlEquals(queryURL, cachedURL, true)) {
+ return false
+ }
+
+ if (
+ response == null ||
+ options?.ignoreVary ||
+ !response.headersList.contains('vary')
+ ) {
+ return true
+ }
+
+ const fieldValues = getFieldValues(response.headersList.get('vary'))
+
+ for (const fieldValue of fieldValues) {
+ if (fieldValue === '*') {
+ return false
+ }
+
+ const requestValue = request.headersList.get(fieldValue)
+ const queryValue = requestQuery.headersList.get(fieldValue)
+
+ // If one has the header and the other doesn't, or one has
+ // a different value than the other, return false
+ if (requestValue !== queryValue) {
+ return false
+ }
+ }
+
+ return true
+ }
+}
+
+Object.defineProperties(Cache.prototype, {
+ [Symbol.toStringTag]: {
+ value: 'Cache',
+ configurable: true
+ },
+ match: kEnumerableProperty,
+ matchAll: kEnumerableProperty,
+ add: kEnumerableProperty,
+ addAll: kEnumerableProperty,
+ put: kEnumerableProperty,
+ delete: kEnumerableProperty,
+ keys: kEnumerableProperty
+})
+
+const cacheQueryOptionConverters = [
+ {
+ key: 'ignoreSearch',
+ converter: webidl.converters.boolean,
+ defaultValue: false
+ },
+ {
+ key: 'ignoreMethod',
+ converter: webidl.converters.boolean,
+ defaultValue: false
+ },
+ {
+ key: 'ignoreVary',
+ converter: webidl.converters.boolean,
+ defaultValue: false
+ }
+]
+
+webidl.converters.CacheQueryOptions = webidl.dictionaryConverter(cacheQueryOptionConverters)
+
+webidl.converters.MultiCacheQueryOptions = webidl.dictionaryConverter([
+ ...cacheQueryOptionConverters,
+ {
+ key: 'cacheName',
+ converter: webidl.converters.DOMString
+ }
+])
+
+webidl.converters.Response = webidl.interfaceConverter(Response)
+
+webidl.converters['sequence'] = webidl.sequenceConverter(
+ webidl.converters.RequestInfo
+)
+
+module.exports = {
+ Cache
+}
+
+
+/***/ }),
+
+/***/ 37907:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+"use strict";
+
+
+const { kConstruct } = __nccwpck_require__(29174)
+const { Cache } = __nccwpck_require__(66101)
+const { webidl } = __nccwpck_require__(21744)
+const { kEnumerableProperty } = __nccwpck_require__(83983)
+
+class CacheStorage {
+ /**
+ * @see https://w3c.github.io/ServiceWorker/#dfn-relevant-name-to-cache-map
+ * @type {Map}
+ */
+ async has (cacheName) {
+ webidl.brandCheck(this, CacheStorage)
+ webidl.argumentLengthCheck(arguments, 1, { header: 'CacheStorage.has' })
+
+ cacheName = webidl.converters.DOMString(cacheName)
+
+ // 2.1.1
+ // 2.2
+ return this.#caches.has(cacheName)
+ }
+
+ /**
+ * @see https://w3c.github.io/ServiceWorker/#dom-cachestorage-open
+ * @param {string} cacheName
+ * @returns {Promise}
+ */
+ async open (cacheName) {
+ webidl.brandCheck(this, CacheStorage)
+ webidl.argumentLengthCheck(arguments, 1, { header: 'CacheStorage.open' })
+
+ cacheName = webidl.converters.DOMString(cacheName)
+
+ // 2.1
+ if (this.#caches.has(cacheName)) {
+ // await caches.open('v1') !== await caches.open('v1')
+
+ // 2.1.1
+ const cache = this.#caches.get(cacheName)
+
+ // 2.1.1.1
+ return new Cache(kConstruct, cache)
+ }
+
+ // 2.2
+ const cache = []
+
+ // 2.3
+ this.#caches.set(cacheName, cache)
+
+ // 2.4
+ return new Cache(kConstruct, cache)
+ }
+
+ /**
+ * @see https://w3c.github.io/ServiceWorker/#cache-storage-delete
+ * @param {string} cacheName
+ * @returns {Promise}
+ */
+ async delete (cacheName) {
+ webidl.brandCheck(this, CacheStorage)
+ webidl.argumentLengthCheck(arguments, 1, { header: 'CacheStorage.delete' })
+
+ cacheName = webidl.converters.DOMString(cacheName)
+
+ return this.#caches.delete(cacheName)
+ }
+
+ /**
+ * @see https://w3c.github.io/ServiceWorker/#cache-storage-keys
+ * @returns {string[]}
+ */
+ async keys () {
+ webidl.brandCheck(this, CacheStorage)
+
+ // 2.1
+ const keys = this.#caches.keys()
+
+ // 2.2
+ return [...keys]
+ }
+}
+
+Object.defineProperties(CacheStorage.prototype, {
+ [Symbol.toStringTag]: {
+ value: 'CacheStorage',
+ configurable: true
+ },
+ match: kEnumerableProperty,
+ has: kEnumerableProperty,
+ open: kEnumerableProperty,
+ delete: kEnumerableProperty,
+ keys: kEnumerableProperty
+})
+
+module.exports = {
+ CacheStorage
+}
+
+
+/***/ }),
+
+/***/ 29174:
+/***/ ((module) => {
+
+"use strict";
+
+
+module.exports = {
+ kConstruct: Symbol('constructable')
+}
+
+
+/***/ }),
+
+/***/ 82396:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+"use strict";
+
+
+const assert = __nccwpck_require__(39491)
+const { URLSerializer } = __nccwpck_require__(685)
+const { isValidHeaderName } = __nccwpck_require__(52538)
+
+/**
+ * @see https://url.spec.whatwg.org/#concept-url-equals
+ * @param {URL} A
+ * @param {URL} B
+ * @param {boolean | undefined} excludeFragment
+ * @returns {boolean}
+ */
+function urlEquals (A, B, excludeFragment = false) {
+ const serializedA = URLSerializer(A, excludeFragment)
+
+ const serializedB = URLSerializer(B, excludeFragment)
+
+ return serializedA === serializedB
+}
+
+/**
+ * @see https://github.com/chromium/chromium/blob/694d20d134cb553d8d89e5500b9148012b1ba299/content/browser/cache_storage/cache_storage_cache.cc#L260-L262
+ * @param {string} header
+ */
+function fieldValues (header) {
+ assert(header !== null)
+
+ const values = []
+
+ for (let value of header.split(',')) {
+ value = value.trim()
+
+ if (!value.length) {
+ continue
+ } else if (!isValidHeaderName(value)) {
+ continue
+ }
+
+ values.push(value)
+ }
+
+ return values
+}
+
+module.exports = {
+ urlEquals,
+ fieldValues
+}
+
+
+/***/ }),
+
+/***/ 33598:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+"use strict";
+// @ts-check
+
+
+
+/* global WebAssembly */
+
+const assert = __nccwpck_require__(39491)
+const net = __nccwpck_require__(41808)
+const http = __nccwpck_require__(13685)
+const { pipeline } = __nccwpck_require__(12781)
+const util = __nccwpck_require__(83983)
+const timers = __nccwpck_require__(29459)
+const Request = __nccwpck_require__(62905)
+const DispatcherBase = __nccwpck_require__(74839)
+const {
+ RequestContentLengthMismatchError,
+ ResponseContentLengthMismatchError,
+ InvalidArgumentError,
+ RequestAbortedError,
+ HeadersTimeoutError,
+ HeadersOverflowError,
+ SocketError,
+ InformationalError,
+ BodyTimeoutError,
+ HTTPParserError,
+ ResponseExceededMaxSizeError,
+ ClientDestroyedError
+} = __nccwpck_require__(48045)
+const buildConnector = __nccwpck_require__(82067)
+const {
+ kUrl,
+ kReset,
+ kServerName,
+ kClient,
+ kBusy,
+ kParser,
+ kConnect,
+ kBlocking,
+ kResuming,
+ kRunning,
+ kPending,
+ kSize,
+ kWriting,
+ kQueue,
+ kConnected,
+ kConnecting,
+ kNeedDrain,
+ kNoRef,
+ kKeepAliveDefaultTimeout,
+ kHostHeader,
+ kPendingIdx,
+ kRunningIdx,
+ kError,
+ kPipelining,
+ kSocket,
+ kKeepAliveTimeoutValue,
+ kMaxHeadersSize,
+ kKeepAliveMaxTimeout,
+ kKeepAliveTimeoutThreshold,
+ kHeadersTimeout,
+ kBodyTimeout,
+ kStrictContentLength,
+ kConnector,
+ kMaxRedirections,
+ kMaxRequests,
+ kCounter,
+ kClose,
+ kDestroy,
+ kDispatch,
+ kInterceptors,
+ kLocalAddress,
+ kMaxResponseSize,
+ kHTTPConnVersion,
+ // HTTP2
+ kHost,
+ kHTTP2Session,
+ kHTTP2SessionState,
+ kHTTP2BuildRequest,
+ kHTTP2CopyHeaders,
+ kHTTP1BuildRequest
+} = __nccwpck_require__(72785)
+
+/** @type {import('http2')} */
+let http2
+try {
+ http2 = __nccwpck_require__(85158)
+} catch {
+ // @ts-ignore
+ http2 = { constants: {} }
+}
+
+const {
+ constants: {
+ HTTP2_HEADER_AUTHORITY,
+ HTTP2_HEADER_METHOD,
+ HTTP2_HEADER_PATH,
+ HTTP2_HEADER_SCHEME,
+ HTTP2_HEADER_CONTENT_LENGTH,
+ HTTP2_HEADER_EXPECT,
+ HTTP2_HEADER_STATUS
+ }
+} = http2
+
+// Experimental
+let h2ExperimentalWarned = false
+
+const FastBuffer = Buffer[Symbol.species]
+
+const kClosedResolve = Symbol('kClosedResolve')
+
+const channels = {}
+
+try {
+ const diagnosticsChannel = __nccwpck_require__(67643)
+ channels.sendHeaders = diagnosticsChannel.channel('undici:client:sendHeaders')
+ channels.beforeConnect = diagnosticsChannel.channel('undici:client:beforeConnect')
+ channels.connectError = diagnosticsChannel.channel('undici:client:connectError')
+ channels.connected = diagnosticsChannel.channel('undici:client:connected')
+} catch {
+ channels.sendHeaders = { hasSubscribers: false }
+ channels.beforeConnect = { hasSubscribers: false }
+ channels.connectError = { hasSubscribers: false }
+ channels.connected = { hasSubscribers: false }
+}
+
+/**
+ * @type {import('../types/client').default}
+ */
+class Client extends DispatcherBase {
+ /**
+ *
+ * @param {string|URL} url
+ * @param {import('../types/client').Client.Options} options
+ */
+ constructor (url, {
+ interceptors,
+ maxHeaderSize,
+ headersTimeout,
+ socketTimeout,
+ requestTimeout,
+ connectTimeout,
+ bodyTimeout,
+ idleTimeout,
+ keepAlive,
+ keepAliveTimeout,
+ maxKeepAliveTimeout,
+ keepAliveMaxTimeout,
+ keepAliveTimeoutThreshold,
+ socketPath,
+ pipelining,
+ tls,
+ strictContentLength,
+ maxCachedSessions,
+ maxRedirections,
+ connect,
+ maxRequestsPerClient,
+ localAddress,
+ maxResponseSize,
+ autoSelectFamily,
+ autoSelectFamilyAttemptTimeout,
+ // h2
+ allowH2,
+ maxConcurrentStreams
+ } = {}) {
+ super()
+
+ if (keepAlive !== undefined) {
+ throw new InvalidArgumentError('unsupported keepAlive, use pipelining=0 instead')
+ }
+
+ if (socketTimeout !== undefined) {
+ throw new InvalidArgumentError('unsupported socketTimeout, use headersTimeout & bodyTimeout instead')
+ }
+
+ if (requestTimeout !== undefined) {
+ throw new InvalidArgumentError('unsupported requestTimeout, use headersTimeout & bodyTimeout instead')
+ }
+
+ if (idleTimeout !== undefined) {
+ throw new InvalidArgumentError('unsupported idleTimeout, use keepAliveTimeout instead')
+ }
+
+ if (maxKeepAliveTimeout !== undefined) {
+ throw new InvalidArgumentError('unsupported maxKeepAliveTimeout, use keepAliveMaxTimeout instead')
+ }
+
+ if (maxHeaderSize != null && !Number.isFinite(maxHeaderSize)) {
+ throw new InvalidArgumentError('invalid maxHeaderSize')
+ }
+
+ if (socketPath != null && typeof socketPath !== 'string') {
+ throw new InvalidArgumentError('invalid socketPath')
+ }
+
+ if (connectTimeout != null && (!Number.isFinite(connectTimeout) || connectTimeout < 0)) {
+ throw new InvalidArgumentError('invalid connectTimeout')
+ }
+
+ if (keepAliveTimeout != null && (!Number.isFinite(keepAliveTimeout) || keepAliveTimeout <= 0)) {
+ throw new InvalidArgumentError('invalid keepAliveTimeout')
+ }
+
+ if (keepAliveMaxTimeout != null && (!Number.isFinite(keepAliveMaxTimeout) || keepAliveMaxTimeout <= 0)) {
+ throw new InvalidArgumentError('invalid keepAliveMaxTimeout')
+ }
+
+ if (keepAliveTimeoutThreshold != null && !Number.isFinite(keepAliveTimeoutThreshold)) {
+ throw new InvalidArgumentError('invalid keepAliveTimeoutThreshold')
+ }
+
+ if (headersTimeout != null && (!Number.isInteger(headersTimeout) || headersTimeout < 0)) {
+ throw new InvalidArgumentError('headersTimeout must be a positive integer or zero')
+ }
+
+ if (bodyTimeout != null && (!Number.isInteger(bodyTimeout) || bodyTimeout < 0)) {
+ throw new InvalidArgumentError('bodyTimeout must be a positive integer or zero')
+ }
+
+ if (connect != null && typeof connect !== 'function' && typeof connect !== 'object') {
+ throw new InvalidArgumentError('connect must be a function or an object')
+ }
+
+ if (maxRedirections != null && (!Number.isInteger(maxRedirections) || maxRedirections < 0)) {
+ throw new InvalidArgumentError('maxRedirections must be a positive number')
+ }
+
+ if (maxRequestsPerClient != null && (!Number.isInteger(maxRequestsPerClient) || maxRequestsPerClient < 0)) {
+ throw new InvalidArgumentError('maxRequestsPerClient must be a positive number')
+ }
+
+ if (localAddress != null && (typeof localAddress !== 'string' || net.isIP(localAddress) === 0)) {
+ throw new InvalidArgumentError('localAddress must be valid string IP address')
+ }
+
+ if (maxResponseSize != null && (!Number.isInteger(maxResponseSize) || maxResponseSize < -1)) {
+ throw new InvalidArgumentError('maxResponseSize must be a positive number')
+ }
+
+ if (
+ autoSelectFamilyAttemptTimeout != null &&
+ (!Number.isInteger(autoSelectFamilyAttemptTimeout) || autoSelectFamilyAttemptTimeout < -1)
+ ) {
+ throw new InvalidArgumentError('autoSelectFamilyAttemptTimeout must be a positive number')
+ }
+
+ // h2
+ if (allowH2 != null && typeof allowH2 !== 'boolean') {
+ throw new InvalidArgumentError('allowH2 must be a valid boolean value')
+ }
+
+ if (maxConcurrentStreams != null && (typeof maxConcurrentStreams !== 'number' || maxConcurrentStreams < 1)) {
+ throw new InvalidArgumentError('maxConcurrentStreams must be a possitive integer, greater than 0')
+ }
+
+ if (typeof connect !== 'function') {
+ connect = buildConnector({
+ ...tls,
+ maxCachedSessions,
+ allowH2,
+ socketPath,
+ timeout: connectTimeout,
+ ...(util.nodeHasAutoSelectFamily && autoSelectFamily ? { autoSelectFamily, autoSelectFamilyAttemptTimeout } : undefined),
+ ...connect
+ })
+ }
+
+ this[kInterceptors] = interceptors && interceptors.Client && Array.isArray(interceptors.Client)
+ ? interceptors.Client
+ : [createRedirectInterceptor({ maxRedirections })]
+ this[kUrl] = util.parseOrigin(url)
+ this[kConnector] = connect
+ this[kSocket] = null
+ this[kPipelining] = pipelining != null ? pipelining : 1
+ this[kMaxHeadersSize] = maxHeaderSize || http.maxHeaderSize
+ this[kKeepAliveDefaultTimeout] = keepAliveTimeout == null ? 4e3 : keepAliveTimeout
+ this[kKeepAliveMaxTimeout] = keepAliveMaxTimeout == null ? 600e3 : keepAliveMaxTimeout
+ this[kKeepAliveTimeoutThreshold] = keepAliveTimeoutThreshold == null ? 1e3 : keepAliveTimeoutThreshold
+ this[kKeepAliveTimeoutValue] = this[kKeepAliveDefaultTimeout]
+ this[kServerName] = null
+ this[kLocalAddress] = localAddress != null ? localAddress : null
+ this[kResuming] = 0 // 0, idle, 1, scheduled, 2 resuming
+ this[kNeedDrain] = 0 // 0, idle, 1, scheduled, 2 resuming
+ this[kHostHeader] = `host: ${this[kUrl].hostname}${this[kUrl].port ? `:${this[kUrl].port}` : ''}\r\n`
+ this[kBodyTimeout] = bodyTimeout != null ? bodyTimeout : 300e3
+ this[kHeadersTimeout] = headersTimeout != null ? headersTimeout : 300e3
+ this[kStrictContentLength] = strictContentLength == null ? true : strictContentLength
+ this[kMaxRedirections] = maxRedirections
+ this[kMaxRequests] = maxRequestsPerClient
+ this[kClosedResolve] = null
+ this[kMaxResponseSize] = maxResponseSize > -1 ? maxResponseSize : -1
+ this[kHTTPConnVersion] = 'h1'
+
+ // HTTP/2
+ this[kHTTP2Session] = null
+ this[kHTTP2SessionState] = !allowH2
+ ? null
+ : {
+ // streams: null, // Fixed queue of streams - For future support of `push`
+ openStreams: 0, // Keep track of them to decide wether or not unref the session
+ maxConcurrentStreams: maxConcurrentStreams != null ? maxConcurrentStreams : 100 // Max peerConcurrentStreams for a Node h2 server
+ }
+ this[kHost] = `${this[kUrl].hostname}${this[kUrl].port ? `:${this[kUrl].port}` : ''}`
+
+ // kQueue is built up of 3 sections separated by
+ // the kRunningIdx and kPendingIdx indices.
+ // | complete | running | pending |
+ // ^ kRunningIdx ^ kPendingIdx ^ kQueue.length
+ // kRunningIdx points to the first running element.
+ // kPendingIdx points to the first pending element.
+ // This implements a fast queue with an amortized
+ // time of O(1).
+
+ this[kQueue] = []
+ this[kRunningIdx] = 0
+ this[kPendingIdx] = 0
+ }
+
+ get pipelining () {
+ return this[kPipelining]
+ }
+
+ set pipelining (value) {
+ this[kPipelining] = value
+ resume(this, true)
+ }
+
+ get [kPending] () {
+ return this[kQueue].length - this[kPendingIdx]
+ }
+
+ get [kRunning] () {
+ return this[kPendingIdx] - this[kRunningIdx]
+ }
+
+ get [kSize] () {
+ return this[kQueue].length - this[kRunningIdx]
+ }
+
+ get [kConnected] () {
+ return !!this[kSocket] && !this[kConnecting] && !this[kSocket].destroyed
+ }
+
+ get [kBusy] () {
+ const socket = this[kSocket]
+ return (
+ (socket && (socket[kReset] || socket[kWriting] || socket[kBlocking])) ||
+ (this[kSize] >= (this[kPipelining] || 1)) ||
+ this[kPending] > 0
+ )
+ }
+
+ /* istanbul ignore: only used for test */
+ [kConnect] (cb) {
+ connect(this)
+ this.once('connect', cb)
+ }
+
+ [kDispatch] (opts, handler) {
+ const origin = opts.origin || this[kUrl].origin
+
+ const request = this[kHTTPConnVersion] === 'h2'
+ ? Request[kHTTP2BuildRequest](origin, opts, handler)
+ : Request[kHTTP1BuildRequest](origin, opts, handler)
+
+ this[kQueue].push(request)
+ if (this[kResuming]) {
+ // Do nothing.
+ } else if (util.bodyLength(request.body) == null && util.isIterable(request.body)) {
+ // Wait a tick in case stream/iterator is ended in the same tick.
+ this[kResuming] = 1
+ process.nextTick(resume, this)
+ } else {
+ resume(this, true)
+ }
+
+ if (this[kResuming] && this[kNeedDrain] !== 2 && this[kBusy]) {
+ this[kNeedDrain] = 2
+ }
+
+ return this[kNeedDrain] < 2
+ }
+
+ async [kClose] () {
+ // TODO: for H2 we need to gracefully flush the remaining enqueued
+ // request and close each stream.
+ return new Promise((resolve) => {
+ if (!this[kSize]) {
+ resolve(null)
+ } else {
+ this[kClosedResolve] = resolve
+ }
+ })
+ }
+
+ async [kDestroy] (err) {
+ return new Promise((resolve) => {
+ const requests = this[kQueue].splice(this[kPendingIdx])
+ for (let i = 0; i < requests.length; i++) {
+ const request = requests[i]
+ errorRequest(this, request, err)
+ }
+
+ const callback = () => {
+ if (this[kClosedResolve]) {
+ // TODO (fix): Should we error here with ClientDestroyedError?
+ this[kClosedResolve]()
+ this[kClosedResolve] = null
+ }
+ resolve()
+ }
+
+ if (this[kHTTP2Session] != null) {
+ util.destroy(this[kHTTP2Session], err)
+ this[kHTTP2Session] = null
+ this[kHTTP2SessionState] = null
+ }
+
+ if (!this[kSocket]) {
+ queueMicrotask(callback)
+ } else {
+ util.destroy(this[kSocket].on('close', callback), err)
+ }
+
+ resume(this)
+ })
+ }
+}
+
+function onHttp2SessionError (err) {
+ assert(err.code !== 'ERR_TLS_CERT_ALTNAME_INVALID')
+
+ this[kSocket][kError] = err
+
+ onError(this[kClient], err)
+}
+
+function onHttp2FrameError (type, code, id) {
+ const err = new InformationalError(`HTTP/2: "frameError" received - type ${type}, code ${code}`)
+
+ if (id === 0) {
+ this[kSocket][kError] = err
+ onError(this[kClient], err)
+ }
+}
+
+function onHttp2SessionEnd () {
+ util.destroy(this, new SocketError('other side closed'))
+ util.destroy(this[kSocket], new SocketError('other side closed'))
+}
+
+function onHTTP2GoAway (code) {
+ const client = this[kClient]
+ const err = new InformationalError(`HTTP/2: "GOAWAY" frame received with code ${code}`)
+ client[kSocket] = null
+ client[kHTTP2Session] = null
+
+ if (client.destroyed) {
+ assert(this[kPending] === 0)
+
+ // Fail entire queue.
+ const requests = client[kQueue].splice(client[kRunningIdx])
+ for (let i = 0; i < requests.length; i++) {
+ const request = requests[i]
+ errorRequest(this, request, err)
+ }
+ } else if (client[kRunning] > 0) {
+ // Fail head of pipeline.
+ const request = client[kQueue][client[kRunningIdx]]
+ client[kQueue][client[kRunningIdx]++] = null
+
+ errorRequest(client, request, err)
+ }
+
+ client[kPendingIdx] = client[kRunningIdx]
+
+ assert(client[kRunning] === 0)
+
+ client.emit('disconnect',
+ client[kUrl],
+ [client],
+ err
+ )
+
+ resume(client)
+}
+
+const constants = __nccwpck_require__(30953)
+const createRedirectInterceptor = __nccwpck_require__(38861)
+const EMPTY_BUF = Buffer.alloc(0)
+
+async function lazyllhttp () {
+ const llhttpWasmData = process.env.JEST_WORKER_ID ? __nccwpck_require__(61145) : undefined
+
+ let mod
+ try {
+ mod = await WebAssembly.compile(Buffer.from(__nccwpck_require__(95627), 'base64'))
+ } catch (e) {
+ /* istanbul ignore next */
+
+ // We could check if the error was caused by the simd option not
+ // being enabled, but the occurring of this other error
+ // * https://github.com/emscripten-core/emscripten/issues/11495
+ // got me to remove that check to avoid breaking Node 12.
+ mod = await WebAssembly.compile(Buffer.from(llhttpWasmData || __nccwpck_require__(61145), 'base64'))
+ }
+
+ return await WebAssembly.instantiate(mod, {
+ env: {
+ /* eslint-disable camelcase */
+
+ wasm_on_url: (p, at, len) => {
+ /* istanbul ignore next */
+ return 0
+ },
+ wasm_on_status: (p, at, len) => {
+ assert.strictEqual(currentParser.ptr, p)
+ const start = at - currentBufferPtr + currentBufferRef.byteOffset
+ return currentParser.onStatus(new FastBuffer(currentBufferRef.buffer, start, len)) || 0
+ },
+ wasm_on_message_begin: (p) => {
+ assert.strictEqual(currentParser.ptr, p)
+ return currentParser.onMessageBegin() || 0
+ },
+ wasm_on_header_field: (p, at, len) => {
+ assert.strictEqual(currentParser.ptr, p)
+ const start = at - currentBufferPtr + currentBufferRef.byteOffset
+ return currentParser.onHeaderField(new FastBuffer(currentBufferRef.buffer, start, len)) || 0
+ },
+ wasm_on_header_value: (p, at, len) => {
+ assert.strictEqual(currentParser.ptr, p)
+ const start = at - currentBufferPtr + currentBufferRef.byteOffset
+ return currentParser.onHeaderValue(new FastBuffer(currentBufferRef.buffer, start, len)) || 0
+ },
+ wasm_on_headers_complete: (p, statusCode, upgrade, shouldKeepAlive) => {
+ assert.strictEqual(currentParser.ptr, p)
+ return currentParser.onHeadersComplete(statusCode, Boolean(upgrade), Boolean(shouldKeepAlive)) || 0
+ },
+ wasm_on_body: (p, at, len) => {
+ assert.strictEqual(currentParser.ptr, p)
+ const start = at - currentBufferPtr + currentBufferRef.byteOffset
+ return currentParser.onBody(new FastBuffer(currentBufferRef.buffer, start, len)) || 0
+ },
+ wasm_on_message_complete: (p) => {
+ assert.strictEqual(currentParser.ptr, p)
+ return currentParser.onMessageComplete() || 0
+ }
+
+ /* eslint-enable camelcase */
+ }
+ })
+}
+
+let llhttpInstance = null
+let llhttpPromise = lazyllhttp()
+llhttpPromise.catch()
+
+let currentParser = null
+let currentBufferRef = null
+let currentBufferSize = 0
+let currentBufferPtr = null
+
+const TIMEOUT_HEADERS = 1
+const TIMEOUT_BODY = 2
+const TIMEOUT_IDLE = 3
+
+class Parser {
+ constructor (client, socket, { exports }) {
+ assert(Number.isFinite(client[kMaxHeadersSize]) && client[kMaxHeadersSize] > 0)
+
+ this.llhttp = exports
+ this.ptr = this.llhttp.llhttp_alloc(constants.TYPE.RESPONSE)
+ this.client = client
+ this.socket = socket
+ this.timeout = null
+ this.timeoutValue = null
+ this.timeoutType = null
+ this.statusCode = null
+ this.statusText = ''
+ this.upgrade = false
+ this.headers = []
+ this.headersSize = 0
+ this.headersMaxSize = client[kMaxHeadersSize]
+ this.shouldKeepAlive = false
+ this.paused = false
+ this.resume = this.resume.bind(this)
+
+ this.bytesRead = 0
+
+ this.keepAlive = ''
+ this.contentLength = ''
+ this.connection = ''
+ this.maxResponseSize = client[kMaxResponseSize]
+ }
+
+ setTimeout (value, type) {
+ this.timeoutType = type
+ if (value !== this.timeoutValue) {
+ timers.clearTimeout(this.timeout)
+ if (value) {
+ this.timeout = timers.setTimeout(onParserTimeout, value, this)
+ // istanbul ignore else: only for jest
+ if (this.timeout.unref) {
+ this.timeout.unref()
+ }
+ } else {
+ this.timeout = null
+ }
+ this.timeoutValue = value
+ } else if (this.timeout) {
+ // istanbul ignore else: only for jest
+ if (this.timeout.refresh) {
+ this.timeout.refresh()
+ }
+ }
+ }
+
+ resume () {
+ if (this.socket.destroyed || !this.paused) {
+ return
+ }
+
+ assert(this.ptr != null)
+ assert(currentParser == null)
+
+ this.llhttp.llhttp_resume(this.ptr)
+
+ assert(this.timeoutType === TIMEOUT_BODY)
+ if (this.timeout) {
+ // istanbul ignore else: only for jest
+ if (this.timeout.refresh) {
+ this.timeout.refresh()
+ }
+ }
+
+ this.paused = false
+ this.execute(this.socket.read() || EMPTY_BUF) // Flush parser.
+ this.readMore()
+ }
+
+ readMore () {
+ while (!this.paused && this.ptr) {
+ const chunk = this.socket.read()
+ if (chunk === null) {
+ break
+ }
+ this.execute(chunk)
+ }
+ }
+
+ execute (data) {
+ assert(this.ptr != null)
+ assert(currentParser == null)
+ assert(!this.paused)
+
+ const { socket, llhttp } = this
+
+ if (data.length > currentBufferSize) {
+ if (currentBufferPtr) {
+ llhttp.free(currentBufferPtr)
+ }
+ currentBufferSize = Math.ceil(data.length / 4096) * 4096
+ currentBufferPtr = llhttp.malloc(currentBufferSize)
+ }
+
+ new Uint8Array(llhttp.memory.buffer, currentBufferPtr, currentBufferSize).set(data)
+
+ // Call `execute` on the wasm parser.
+ // We pass the `llhttp_parser` pointer address, the pointer address of buffer view data,
+ // and finally the length of bytes to parse.
+ // The return value is an error code or `constants.ERROR.OK`.
+ try {
+ let ret
+
+ try {
+ currentBufferRef = data
+ currentParser = this
+ ret = llhttp.llhttp_execute(this.ptr, currentBufferPtr, data.length)
+ /* eslint-disable-next-line no-useless-catch */
+ } catch (err) {
+ /* istanbul ignore next: difficult to make a test case for */
+ throw err
+ } finally {
+ currentParser = null
+ currentBufferRef = null
+ }
+
+ const offset = llhttp.llhttp_get_error_pos(this.ptr) - currentBufferPtr
+
+ if (ret === constants.ERROR.PAUSED_UPGRADE) {
+ this.onUpgrade(data.slice(offset))
+ } else if (ret === constants.ERROR.PAUSED) {
+ this.paused = true
+ socket.unshift(data.slice(offset))
+ } else if (ret !== constants.ERROR.OK) {
+ const ptr = llhttp.llhttp_get_error_reason(this.ptr)
+ let message = ''
+ /* istanbul ignore else: difficult to make a test case for */
+ if (ptr) {
+ const len = new Uint8Array(llhttp.memory.buffer, ptr).indexOf(0)
+ message =
+ 'Response does not match the HTTP/1.1 protocol (' +
+ Buffer.from(llhttp.memory.buffer, ptr, len).toString() +
+ ')'
+ }
+ throw new HTTPParserError(message, constants.ERROR[ret], data.slice(offset))
+ }
+ } catch (err) {
+ util.destroy(socket, err)
+ }
+ }
+
+ destroy () {
+ assert(this.ptr != null)
+ assert(currentParser == null)
+
+ this.llhttp.llhttp_free(this.ptr)
+ this.ptr = null
+
+ timers.clearTimeout(this.timeout)
+ this.timeout = null
+ this.timeoutValue = null
+ this.timeoutType = null
+
+ this.paused = false
+ }
+
+ onStatus (buf) {
+ this.statusText = buf.toString()
+ }
+
+ onMessageBegin () {
+ const { socket, client } = this
+
+ /* istanbul ignore next: difficult to make a test case for */
+ if (socket.destroyed) {
+ return -1
+ }
+
+ const request = client[kQueue][client[kRunningIdx]]
+ if (!request) {
+ return -1
+ }
+ }
+
+ onHeaderField (buf) {
+ const len = this.headers.length
+
+ if ((len & 1) === 0) {
+ this.headers.push(buf)
+ } else {
+ this.headers[len - 1] = Buffer.concat([this.headers[len - 1], buf])
+ }
+
+ this.trackHeader(buf.length)
+ }
+
+ onHeaderValue (buf) {
+ let len = this.headers.length
+
+ if ((len & 1) === 1) {
+ this.headers.push(buf)
+ len += 1
+ } else {
+ this.headers[len - 1] = Buffer.concat([this.headers[len - 1], buf])
+ }
+
+ const key = this.headers[len - 2]
+ if (key.length === 10 && key.toString().toLowerCase() === 'keep-alive') {
+ this.keepAlive += buf.toString()
+ } else if (key.length === 10 && key.toString().toLowerCase() === 'connection') {
+ this.connection += buf.toString()
+ } else if (key.length === 14 && key.toString().toLowerCase() === 'content-length') {
+ this.contentLength += buf.toString()
+ }
+
+ this.trackHeader(buf.length)
+ }
+
+ trackHeader (len) {
+ this.headersSize += len
+ if (this.headersSize >= this.headersMaxSize) {
+ util.destroy(this.socket, new HeadersOverflowError())
+ }
+ }
+
+ onUpgrade (head) {
+ const { upgrade, client, socket, headers, statusCode } = this
+
+ assert(upgrade)
+
+ const request = client[kQueue][client[kRunningIdx]]
+ assert(request)
+
+ assert(!socket.destroyed)
+ assert(socket === client[kSocket])
+ assert(!this.paused)
+ assert(request.upgrade || request.method === 'CONNECT')
+
+ this.statusCode = null
+ this.statusText = ''
+ this.shouldKeepAlive = null
+
+ assert(this.headers.length % 2 === 0)
+ this.headers = []
+ this.headersSize = 0
+
+ socket.unshift(head)
+
+ socket[kParser].destroy()
+ socket[kParser] = null
+
+ socket[kClient] = null
+ socket[kError] = null
+ socket
+ .removeListener('error', onSocketError)
+ .removeListener('readable', onSocketReadable)
+ .removeListener('end', onSocketEnd)
+ .removeListener('close', onSocketClose)
+
+ client[kSocket] = null
+ client[kQueue][client[kRunningIdx]++] = null
+ client.emit('disconnect', client[kUrl], [client], new InformationalError('upgrade'))
+
+ try {
+ request.onUpgrade(statusCode, headers, socket)
+ } catch (err) {
+ util.destroy(socket, err)
+ }
+
+ resume(client)
+ }
+
+ onHeadersComplete (statusCode, upgrade, shouldKeepAlive) {
+ const { client, socket, headers, statusText } = this
+
+ /* istanbul ignore next: difficult to make a test case for */
+ if (socket.destroyed) {
+ return -1
+ }
+
+ const request = client[kQueue][client[kRunningIdx]]
+
+ /* istanbul ignore next: difficult to make a test case for */
+ if (!request) {
+ return -1
+ }
+
+ assert(!this.upgrade)
+ assert(this.statusCode < 200)
+
+ if (statusCode === 100) {
+ util.destroy(socket, new SocketError('bad response', util.getSocketInfo(socket)))
+ return -1
+ }
+
+ /* this can only happen if server is misbehaving */
+ if (upgrade && !request.upgrade) {
+ util.destroy(socket, new SocketError('bad upgrade', util.getSocketInfo(socket)))
+ return -1
+ }
+
+ assert.strictEqual(this.timeoutType, TIMEOUT_HEADERS)
+
+ this.statusCode = statusCode
+ this.shouldKeepAlive = (
+ shouldKeepAlive ||
+ // Override llhttp value which does not allow keepAlive for HEAD.
+ (request.method === 'HEAD' && !socket[kReset] && this.connection.toLowerCase() === 'keep-alive')
+ )
+
+ if (this.statusCode >= 200) {
+ const bodyTimeout = request.bodyTimeout != null
+ ? request.bodyTimeout
+ : client[kBodyTimeout]
+ this.setTimeout(bodyTimeout, TIMEOUT_BODY)
+ } else if (this.timeout) {
+ // istanbul ignore else: only for jest
+ if (this.timeout.refresh) {
+ this.timeout.refresh()
+ }
+ }
+
+ if (request.method === 'CONNECT') {
+ assert(client[kRunning] === 1)
+ this.upgrade = true
+ return 2
+ }
+
+ if (upgrade) {
+ assert(client[kRunning] === 1)
+ this.upgrade = true
+ return 2
+ }
+
+ assert(this.headers.length % 2 === 0)
+ this.headers = []
+ this.headersSize = 0
+
+ if (this.shouldKeepAlive && client[kPipelining]) {
+ const keepAliveTimeout = this.keepAlive ? util.parseKeepAliveTimeout(this.keepAlive) : null
+
+ if (keepAliveTimeout != null) {
+ const timeout = Math.min(
+ keepAliveTimeout - client[kKeepAliveTimeoutThreshold],
+ client[kKeepAliveMaxTimeout]
+ )
+ if (timeout <= 0) {
+ socket[kReset] = true
+ } else {
+ client[kKeepAliveTimeoutValue] = timeout
+ }
+ } else {
+ client[kKeepAliveTimeoutValue] = client[kKeepAliveDefaultTimeout]
+ }
+ } else {
+ // Stop more requests from being dispatched.
+ socket[kReset] = true
+ }
+
+ let pause
+ try {
+ pause = request.onHeaders(statusCode, headers, this.resume, statusText) === false
+ } catch (err) {
+ util.destroy(socket, err)
+ return -1
+ }
+
+ if (request.method === 'HEAD') {
+ return 1
+ }
+
+ if (statusCode < 200) {
+ return 1
+ }
+
+ if (socket[kBlocking]) {
+ socket[kBlocking] = false
+ resume(client)
+ }
+
+ return pause ? constants.ERROR.PAUSED : 0
+ }
+
+ onBody (buf) {
+ const { client, socket, statusCode, maxResponseSize } = this
+
+ if (socket.destroyed) {
+ return -1
+ }
+
+ const request = client[kQueue][client[kRunningIdx]]
+ assert(request)
+
+ assert.strictEqual(this.timeoutType, TIMEOUT_BODY)
+ if (this.timeout) {
+ // istanbul ignore else: only for jest
+ if (this.timeout.refresh) {
+ this.timeout.refresh()
+ }
+ }
+
+ assert(statusCode >= 200)
+
+ if (maxResponseSize > -1 && this.bytesRead + buf.length > maxResponseSize) {
+ util.destroy(socket, new ResponseExceededMaxSizeError())
+ return -1
+ }
+
+ this.bytesRead += buf.length
+
+ try {
+ if (request.onData(buf) === false) {
+ return constants.ERROR.PAUSED
+ }
+ } catch (err) {
+ util.destroy(socket, err)
+ return -1
+ }
+ }
+
+ onMessageComplete () {
+ const { client, socket, statusCode, upgrade, headers, contentLength, bytesRead, shouldKeepAlive } = this
+
+ if (socket.destroyed && (!statusCode || shouldKeepAlive)) {
+ return -1
+ }
+
+ if (upgrade) {
+ return
+ }
+
+ const request = client[kQueue][client[kRunningIdx]]
+ assert(request)
+
+ assert(statusCode >= 100)
+
+ this.statusCode = null
+ this.statusText = ''
+ this.bytesRead = 0
+ this.contentLength = ''
+ this.keepAlive = ''
+ this.connection = ''
+
+ assert(this.headers.length % 2 === 0)
+ this.headers = []
+ this.headersSize = 0
+
+ if (statusCode < 200) {
+ return
+ }
+
+ /* istanbul ignore next: should be handled by llhttp? */
+ if (request.method !== 'HEAD' && contentLength && bytesRead !== parseInt(contentLength, 10)) {
+ util.destroy(socket, new ResponseContentLengthMismatchError())
+ return -1
+ }
+
+ try {
+ request.onComplete(headers)
+ } catch (err) {
+ errorRequest(client, request, err)
+ }
+
+ client[kQueue][client[kRunningIdx]++] = null
+
+ if (socket[kWriting]) {
+ assert.strictEqual(client[kRunning], 0)
+ // Response completed before request.
+ util.destroy(socket, new InformationalError('reset'))
+ return constants.ERROR.PAUSED
+ } else if (!shouldKeepAlive) {
+ util.destroy(socket, new InformationalError('reset'))
+ return constants.ERROR.PAUSED
+ } else if (socket[kReset] && client[kRunning] === 0) {
+ // Destroy socket once all requests have completed.
+ // The request at the tail of the pipeline is the one
+ // that requested reset and no further requests should
+ // have been queued since then.
+ util.destroy(socket, new InformationalError('reset'))
+ return constants.ERROR.PAUSED
+ } else if (client[kPipelining] === 1) {
+ // We must wait a full event loop cycle to reuse this socket to make sure
+ // that non-spec compliant servers are not closing the connection even if they
+ // said they won't.
+ setImmediate(resume, client)
+ } else {
+ resume(client)
+ }
+ }
+}
+
+function onParserTimeout (parser) {
+ const { socket, timeoutType, client } = parser
+
+ /* istanbul ignore else */
+ if (timeoutType === TIMEOUT_HEADERS) {
+ if (!socket[kWriting] || socket.writableNeedDrain || client[kRunning] > 1) {
+ assert(!parser.paused, 'cannot be paused while waiting for headers')
+ util.destroy(socket, new HeadersTimeoutError())
+ }
+ } else if (timeoutType === TIMEOUT_BODY) {
+ if (!parser.paused) {
+ util.destroy(socket, new BodyTimeoutError())
+ }
+ } else if (timeoutType === TIMEOUT_IDLE) {
+ assert(client[kRunning] === 0 && client[kKeepAliveTimeoutValue])
+ util.destroy(socket, new InformationalError('socket idle timeout'))
+ }
+}
+
+function onSocketReadable () {
+ const { [kParser]: parser } = this
+ if (parser) {
+ parser.readMore()
+ }
+}
+
+function onSocketError (err) {
+ const { [kClient]: client, [kParser]: parser } = this
+
+ assert(err.code !== 'ERR_TLS_CERT_ALTNAME_INVALID')
+
+ if (client[kHTTPConnVersion] !== 'h2') {
+ // On Mac OS, we get an ECONNRESET even if there is a full body to be forwarded
+ // to the user.
+ if (err.code === 'ECONNRESET' && parser.statusCode && !parser.shouldKeepAlive) {
+ // We treat all incoming data so for as a valid response.
+ parser.onMessageComplete()
+ return
+ }
+ }
+
+ this[kError] = err
+
+ onError(this[kClient], err)
+}
+
+function onError (client, err) {
+ if (
+ client[kRunning] === 0 &&
+ err.code !== 'UND_ERR_INFO' &&
+ err.code !== 'UND_ERR_SOCKET'
+ ) {
+ // Error is not caused by running request and not a recoverable
+ // socket error.
+
+ assert(client[kPendingIdx] === client[kRunningIdx])
+
+ const requests = client[kQueue].splice(client[kRunningIdx])
+ for (let i = 0; i < requests.length; i++) {
+ const request = requests[i]
+ errorRequest(client, request, err)
+ }
+ assert(client[kSize] === 0)
+ }
+}
+
+function onSocketEnd () {
+ const { [kParser]: parser, [kClient]: client } = this
+
+ if (client[kHTTPConnVersion] !== 'h2') {
+ if (parser.statusCode && !parser.shouldKeepAlive) {
+ // We treat all incoming data so far as a valid response.
+ parser.onMessageComplete()
+ return
+ }
+ }
+
+ util.destroy(this, new SocketError('other side closed', util.getSocketInfo(this)))
+}
+
+function onSocketClose () {
+ const { [kClient]: client, [kParser]: parser } = this
+
+ if (client[kHTTPConnVersion] === 'h1' && parser) {
+ if (!this[kError] && parser.statusCode && !parser.shouldKeepAlive) {
+ // We treat all incoming data so far as a valid response.
+ parser.onMessageComplete()
+ }
+
+ this[kParser].destroy()
+ this[kParser] = null
+ }
+
+ const err = this[kError] || new SocketError('closed', util.getSocketInfo(this))
+
+ client[kSocket] = null
+
+ if (client.destroyed) {
+ assert(client[kPending] === 0)
+
+ // Fail entire queue.
+ const requests = client[kQueue].splice(client[kRunningIdx])
+ for (let i = 0; i < requests.length; i++) {
+ const request = requests[i]
+ errorRequest(client, request, err)
+ }
+ } else if (client[kRunning] > 0 && err.code !== 'UND_ERR_INFO') {
+ // Fail head of pipeline.
+ const request = client[kQueue][client[kRunningIdx]]
+ client[kQueue][client[kRunningIdx]++] = null
+
+ errorRequest(client, request, err)
+ }
+
+ client[kPendingIdx] = client[kRunningIdx]
+
+ assert(client[kRunning] === 0)
+
+ client.emit('disconnect', client[kUrl], [client], err)
+
+ resume(client)
+}
+
+async function connect (client) {
+ assert(!client[kConnecting])
+ assert(!client[kSocket])
+
+ let { host, hostname, protocol, port } = client[kUrl]
+
+ // Resolve ipv6
+ if (hostname[0] === '[') {
+ const idx = hostname.indexOf(']')
+
+ assert(idx !== -1)
+ const ip = hostname.substr(1, idx - 1)
+
+ assert(net.isIP(ip))
+ hostname = ip
+ }
+
+ client[kConnecting] = true
+
+ if (channels.beforeConnect.hasSubscribers) {
+ channels.beforeConnect.publish({
+ connectParams: {
+ host,
+ hostname,
+ protocol,
+ port,
+ servername: client[kServerName],
+ localAddress: client[kLocalAddress]
+ },
+ connector: client[kConnector]
+ })
+ }
+
+ try {
+ const socket = await new Promise((resolve, reject) => {
+ client[kConnector]({
+ host,
+ hostname,
+ protocol,
+ port,
+ servername: client[kServerName],
+ localAddress: client[kLocalAddress]
+ }, (err, socket) => {
+ if (err) {
+ reject(err)
+ } else {
+ resolve(socket)
+ }
+ })
+ })
+
+ if (client.destroyed) {
+ util.destroy(socket.on('error', () => {}), new ClientDestroyedError())
+ return
+ }
+
+ client[kConnecting] = false
+
+ assert(socket)
+
+ const isH2 = socket.alpnProtocol === 'h2'
+ if (isH2) {
+ if (!h2ExperimentalWarned) {
+ h2ExperimentalWarned = true
+ process.emitWarning('H2 support is experimental, expect them to change at any time.', {
+ code: 'UNDICI-H2'
+ })
+ }
+
+ const session = http2.connect(client[kUrl], {
+ createConnection: () => socket,
+ peerMaxConcurrentStreams: client[kHTTP2SessionState].maxConcurrentStreams
+ })
+
+ client[kHTTPConnVersion] = 'h2'
+ session[kClient] = client
+ session[kSocket] = socket
+ session.on('error', onHttp2SessionError)
+ session.on('frameError', onHttp2FrameError)
+ session.on('end', onHttp2SessionEnd)
+ session.on('goaway', onHTTP2GoAway)
+ session.on('close', onSocketClose)
+ session.unref()
+
+ client[kHTTP2Session] = session
+ socket[kHTTP2Session] = session
+ } else {
+ if (!llhttpInstance) {
+ llhttpInstance = await llhttpPromise
+ llhttpPromise = null
+ }
+
+ socket[kNoRef] = false
+ socket[kWriting] = false
+ socket[kReset] = false
+ socket[kBlocking] = false
+ socket[kParser] = new Parser(client, socket, llhttpInstance)
+ }
+
+ socket[kCounter] = 0
+ socket[kMaxRequests] = client[kMaxRequests]
+ socket[kClient] = client
+ socket[kError] = null
+
+ socket
+ .on('error', onSocketError)
+ .on('readable', onSocketReadable)
+ .on('end', onSocketEnd)
+ .on('close', onSocketClose)
+
+ client[kSocket] = socket
+
+ if (channels.connected.hasSubscribers) {
+ channels.connected.publish({
+ connectParams: {
+ host,
+ hostname,
+ protocol,
+ port,
+ servername: client[kServerName],
+ localAddress: client[kLocalAddress]
+ },
+ connector: client[kConnector],
+ socket
+ })
+ }
+ client.emit('connect', client[kUrl], [client])
+ } catch (err) {
+ if (client.destroyed) {
+ return
+ }
+
+ client[kConnecting] = false
+
+ if (channels.connectError.hasSubscribers) {
+ channels.connectError.publish({
+ connectParams: {
+ host,
+ hostname,
+ protocol,
+ port,
+ servername: client[kServerName],
+ localAddress: client[kLocalAddress]
+ },
+ connector: client[kConnector],
+ error: err
+ })
+ }
+
+ if (err.code === 'ERR_TLS_CERT_ALTNAME_INVALID') {
+ assert(client[kRunning] === 0)
+ while (client[kPending] > 0 && client[kQueue][client[kPendingIdx]].servername === client[kServerName]) {
+ const request = client[kQueue][client[kPendingIdx]++]
+ errorRequest(client, request, err)
+ }
+ } else {
+ onError(client, err)
+ }
+
+ client.emit('connectionError', client[kUrl], [client], err)
+ }
+
+ resume(client)
+}
+
+function emitDrain (client) {
+ client[kNeedDrain] = 0
+ client.emit('drain', client[kUrl], [client])
+}
+
+function resume (client, sync) {
+ if (client[kResuming] === 2) {
+ return
+ }
+
+ client[kResuming] = 2
+
+ _resume(client, sync)
+ client[kResuming] = 0
+
+ if (client[kRunningIdx] > 256) {
+ client[kQueue].splice(0, client[kRunningIdx])
+ client[kPendingIdx] -= client[kRunningIdx]
+ client[kRunningIdx] = 0
+ }
+}
+
+function _resume (client, sync) {
+ while (true) {
+ if (client.destroyed) {
+ assert(client[kPending] === 0)
+ return
+ }
+
+ if (client[kClosedResolve] && !client[kSize]) {
+ client[kClosedResolve]()
+ client[kClosedResolve] = null
+ return
+ }
+
+ const socket = client[kSocket]
+
+ if (socket && !socket.destroyed && socket.alpnProtocol !== 'h2') {
+ if (client[kSize] === 0) {
+ if (!socket[kNoRef] && socket.unref) {
+ socket.unref()
+ socket[kNoRef] = true
+ }
+ } else if (socket[kNoRef] && socket.ref) {
+ socket.ref()
+ socket[kNoRef] = false
+ }
+
+ if (client[kSize] === 0) {
+ if (socket[kParser].timeoutType !== TIMEOUT_IDLE) {
+ socket[kParser].setTimeout(client[kKeepAliveTimeoutValue], TIMEOUT_IDLE)
+ }
+ } else if (client[kRunning] > 0 && socket[kParser].statusCode < 200) {
+ if (socket[kParser].timeoutType !== TIMEOUT_HEADERS) {
+ const request = client[kQueue][client[kRunningIdx]]
+ const headersTimeout = request.headersTimeout != null
+ ? request.headersTimeout
+ : client[kHeadersTimeout]
+ socket[kParser].setTimeout(headersTimeout, TIMEOUT_HEADERS)
+ }
+ }
+ }
+
+ if (client[kBusy]) {
+ client[kNeedDrain] = 2
+ } else if (client[kNeedDrain] === 2) {
+ if (sync) {
+ client[kNeedDrain] = 1
+ process.nextTick(emitDrain, client)
+ } else {
+ emitDrain(client)
+ }
+ continue
+ }
+
+ if (client[kPending] === 0) {
+ return
+ }
+
+ if (client[kRunning] >= (client[kPipelining] || 1)) {
+ return
+ }
+
+ const request = client[kQueue][client[kPendingIdx]]
+
+ if (client[kUrl].protocol === 'https:' && client[kServerName] !== request.servername) {
+ if (client[kRunning] > 0) {
+ return
+ }
+
+ client[kServerName] = request.servername
+
+ if (socket && socket.servername !== request.servername) {
+ util.destroy(socket, new InformationalError('servername changed'))
+ return
+ }
+ }
+
+ if (client[kConnecting]) {
+ return
+ }
+
+ if (!socket && !client[kHTTP2Session]) {
+ connect(client)
+ return
+ }
+
+ if (socket.destroyed || socket[kWriting] || socket[kReset] || socket[kBlocking]) {
+ return
+ }
+
+ if (client[kRunning] > 0 && !request.idempotent) {
+ // Non-idempotent request cannot be retried.
+ // Ensure that no other requests are inflight and
+ // could cause failure.
+ return
+ }
+
+ if (client[kRunning] > 0 && (request.upgrade || request.method === 'CONNECT')) {
+ // Don't dispatch an upgrade until all preceding requests have completed.
+ // A misbehaving server might upgrade the connection before all pipelined
+ // request has completed.
+ return
+ }
+
+ if (util.isStream(request.body) && util.bodyLength(request.body) === 0) {
+ request.body
+ .on('data', /* istanbul ignore next */ function () {
+ /* istanbul ignore next */
+ assert(false)
+ })
+ .on('error', function (err) {
+ errorRequest(client, request, err)
+ })
+ .on('end', function () {
+ util.destroy(this)
+ })
+
+ request.body = null
+ }
+
+ if (client[kRunning] > 0 &&
+ (util.isStream(request.body) || util.isAsyncIterable(request.body))) {
+ // Request with stream or iterator body can error while other requests
+ // are inflight and indirectly error those as well.
+ // Ensure this doesn't happen by waiting for inflight
+ // to complete before dispatching.
+
+ // Request with stream or iterator body cannot be retried.
+ // Ensure that no other requests are inflight and
+ // could cause failure.
+ return
+ }
+
+ if (!request.aborted && write(client, request)) {
+ client[kPendingIdx]++
+ } else {
+ client[kQueue].splice(client[kPendingIdx], 1)
+ }
+ }
+}
+
+function write (client, request) {
+ if (client[kHTTPConnVersion] === 'h2') {
+ writeH2(client, client[kHTTP2Session], request)
+ return
+ }
+
+ const { body, method, path, host, upgrade, headers, blocking, reset } = request
+
+ // https://tools.ietf.org/html/rfc7231#section-4.3.1
+ // https://tools.ietf.org/html/rfc7231#section-4.3.2
+ // https://tools.ietf.org/html/rfc7231#section-4.3.5
+
+ // Sending a payload body on a request that does not
+ // expect it can cause undefined behavior on some
+ // servers and corrupt connection state. Do not
+ // re-use the connection for further requests.
+
+ const expectsPayload = (
+ method === 'PUT' ||
+ method === 'POST' ||
+ method === 'PATCH'
+ )
+
+ if (body && typeof body.read === 'function') {
+ // Try to read EOF in order to get length.
+ body.read(0)
+ }
+
+ let contentLength = util.bodyLength(body)
+
+ if (contentLength === null) {
+ contentLength = request.contentLength
+ }
+
+ if (contentLength === 0 && !expectsPayload) {
+ // https://tools.ietf.org/html/rfc7230#section-3.3.2
+ // A user agent SHOULD NOT send a Content-Length header field when
+ // the request message does not contain a payload body and the method
+ // semantics do not anticipate such a body.
+
+ contentLength = null
+ }
+
+ if (request.contentLength !== null && request.contentLength !== contentLength) {
+ if (client[kStrictContentLength]) {
+ errorRequest(client, request, new RequestContentLengthMismatchError())
+ return false
+ }
+
+ process.emitWarning(new RequestContentLengthMismatchError())
+ }
+
+ const socket = client[kSocket]
+
+ try {
+ request.onConnect((err) => {
+ if (request.aborted || request.completed) {
+ return
+ }
+
+ errorRequest(client, request, err || new RequestAbortedError())
+
+ util.destroy(socket, new InformationalError('aborted'))
+ })
+ } catch (err) {
+ errorRequest(client, request, err)
+ }
+
+ if (request.aborted) {
+ return false
+ }
+
+ if (method === 'HEAD') {
+ // https://github.com/mcollina/undici/issues/258
+ // Close after a HEAD request to interop with misbehaving servers
+ // that may send a body in the response.
+
+ socket[kReset] = true
+ }
+
+ if (upgrade || method === 'CONNECT') {
+ // On CONNECT or upgrade, block pipeline from dispatching further
+ // requests on this connection.
+
+ socket[kReset] = true
+ }
+
+ if (reset != null) {
+ socket[kReset] = reset
+ }
+
+ if (client[kMaxRequests] && socket[kCounter]++ >= client[kMaxRequests]) {
+ socket[kReset] = true
+ }
+
+ if (blocking) {
+ socket[kBlocking] = true
+ }
+
+ let header = `${method} ${path} HTTP/1.1\r\n`
+
+ if (typeof host === 'string') {
+ header += `host: ${host}\r\n`
+ } else {
+ header += client[kHostHeader]
+ }
+
+ if (upgrade) {
+ header += `connection: upgrade\r\nupgrade: ${upgrade}\r\n`
+ } else if (client[kPipelining] && !socket[kReset]) {
+ header += 'connection: keep-alive\r\n'
+ } else {
+ header += 'connection: close\r\n'
+ }
+
+ if (headers) {
+ header += headers
+ }
+
+ if (channels.sendHeaders.hasSubscribers) {
+ channels.sendHeaders.publish({ request, headers: header, socket })
+ }
+
+ /* istanbul ignore else: assertion */
+ if (!body) {
+ if (contentLength === 0) {
+ socket.write(`${header}content-length: 0\r\n\r\n`, 'latin1')
+ } else {
+ assert(contentLength === null, 'no body must not have content length')
+ socket.write(`${header}\r\n`, 'latin1')
+ }
+ request.onRequestSent()
+ } else if (util.isBuffer(body)) {
+ assert(contentLength === body.byteLength, 'buffer body must have content length')
+
+ socket.cork()
+ socket.write(`${header}content-length: ${contentLength}\r\n\r\n`, 'latin1')
+ socket.write(body)
+ socket.uncork()
+ request.onBodySent(body)
+ request.onRequestSent()
+ if (!expectsPayload) {
+ socket[kReset] = true
+ }
+ } else if (util.isBlobLike(body)) {
+ if (typeof body.stream === 'function') {
+ writeIterable({ body: body.stream(), client, request, socket, contentLength, header, expectsPayload })
+ } else {
+ writeBlob({ body, client, request, socket, contentLength, header, expectsPayload })
+ }
+ } else if (util.isStream(body)) {
+ writeStream({ body, client, request, socket, contentLength, header, expectsPayload })
+ } else if (util.isIterable(body)) {
+ writeIterable({ body, client, request, socket, contentLength, header, expectsPayload })
+ } else {
+ assert(false)
+ }
+
+ return true
+}
+
+function writeH2 (client, session, request) {
+ const { body, method, path, host, upgrade, expectContinue, signal, headers: reqHeaders } = request
+
+ let headers
+ if (typeof reqHeaders === 'string') headers = Request[kHTTP2CopyHeaders](reqHeaders.trim())
+ else headers = reqHeaders
+
+ if (upgrade) {
+ errorRequest(client, request, new Error('Upgrade not supported for H2'))
+ return false
+ }
+
+ try {
+ // TODO(HTTP/2): Should we call onConnect immediately or on stream ready event?
+ request.onConnect((err) => {
+ if (request.aborted || request.completed) {
+ return
+ }
+
+ errorRequest(client, request, err || new RequestAbortedError())
+ })
+ } catch (err) {
+ errorRequest(client, request, err)
+ }
+
+ if (request.aborted) {
+ return false
+ }
+
+ let stream
+ const h2State = client[kHTTP2SessionState]
+
+ headers[HTTP2_HEADER_AUTHORITY] = host || client[kHost]
+ headers[HTTP2_HEADER_METHOD] = method
+
+ if (method === 'CONNECT') {
+ session.ref()
+ // we are already connected, streams are pending, first request
+ // will create a new stream. We trigger a request to create the stream and wait until
+ // `ready` event is triggered
+ // We disabled endStream to allow the user to write to the stream
+ stream = session.request(headers, { endStream: false, signal })
+
+ if (stream.id && !stream.pending) {
+ request.onUpgrade(null, null, stream)
+ ++h2State.openStreams
+ } else {
+ stream.once('ready', () => {
+ request.onUpgrade(null, null, stream)
+ ++h2State.openStreams
+ })
+ }
+
+ stream.once('close', () => {
+ h2State.openStreams -= 1
+ // TODO(HTTP/2): unref only if current streams count is 0
+ if (h2State.openStreams === 0) session.unref()
+ })
+
+ return true
+ }
+
+ // https://tools.ietf.org/html/rfc7540#section-8.3
+ // :path and :scheme headers must be omited when sending CONNECT
+
+ headers[HTTP2_HEADER_PATH] = path
+ headers[HTTP2_HEADER_SCHEME] = 'https'
+
+ // https://tools.ietf.org/html/rfc7231#section-4.3.1
+ // https://tools.ietf.org/html/rfc7231#section-4.3.2
+ // https://tools.ietf.org/html/rfc7231#section-4.3.5
+
+ // Sending a payload body on a request that does not
+ // expect it can cause undefined behavior on some
+ // servers and corrupt connection state. Do not
+ // re-use the connection for further requests.
+
+ const expectsPayload = (
+ method === 'PUT' ||
+ method === 'POST' ||
+ method === 'PATCH'
+ )
+
+ if (body && typeof body.read === 'function') {
+ // Try to read EOF in order to get length.
+ body.read(0)
+ }
+
+ let contentLength = util.bodyLength(body)
+
+ if (contentLength == null) {
+ contentLength = request.contentLength
+ }
+
+ if (contentLength === 0 || !expectsPayload) {
+ // https://tools.ietf.org/html/rfc7230#section-3.3.2
+ // A user agent SHOULD NOT send a Content-Length header field when
+ // the request message does not contain a payload body and the method
+ // semantics do not anticipate such a body.
+
+ contentLength = null
+ }
+
+ if (request.contentLength != null && request.contentLength !== contentLength) {
+ if (client[kStrictContentLength]) {
+ errorRequest(client, request, new RequestContentLengthMismatchError())
+ return false
+ }
+
+ process.emitWarning(new RequestContentLengthMismatchError())
+ }
+
+ if (contentLength != null) {
+ assert(body, 'no body must not have content length')
+ headers[HTTP2_HEADER_CONTENT_LENGTH] = `${contentLength}`
+ }
+
+ session.ref()
+
+ const shouldEndStream = method === 'GET' || method === 'HEAD'
+ if (expectContinue) {
+ headers[HTTP2_HEADER_EXPECT] = '100-continue'
+ /**
+ * @type {import('node:http2').ClientHttp2Stream}
+ */
+ stream = session.request(headers, { endStream: shouldEndStream, signal })
+
+ stream.once('continue', writeBodyH2)
+ } else {
+ /** @type {import('node:http2').ClientHttp2Stream} */
+ stream = session.request(headers, {
+ endStream: shouldEndStream,
+ signal
+ })
+ writeBodyH2()
+ }
+
+ // Increment counter as we have new several streams open
+ ++h2State.openStreams
+
+ stream.once('response', headers => {
+ if (request.onHeaders(Number(headers[HTTP2_HEADER_STATUS]), headers, stream.resume.bind(stream), '') === false) {
+ stream.pause()
+ }
+ })
+
+ stream.once('end', () => {
+ request.onComplete([])
+ })
+
+ stream.on('data', (chunk) => {
+ if (request.onData(chunk) === false) stream.pause()
+ })
+
+ stream.once('close', () => {
+ h2State.openStreams -= 1
+ // TODO(HTTP/2): unref only if current streams count is 0
+ if (h2State.openStreams === 0) session.unref()
+ })
+
+ stream.once('error', function (err) {
+ if (client[kHTTP2Session] && !client[kHTTP2Session].destroyed && !this.closed && !this.destroyed) {
+ h2State.streams -= 1
+ util.destroy(stream, err)
+ }
+ })
+
+ stream.once('frameError', (type, code) => {
+ const err = new InformationalError(`HTTP/2: "frameError" received - type ${type}, code ${code}`)
+ errorRequest(client, request, err)
+
+ if (client[kHTTP2Session] && !client[kHTTP2Session].destroyed && !this.closed && !this.destroyed) {
+ h2State.streams -= 1
+ util.destroy(stream, err)
+ }
+ })
+
+ // stream.on('aborted', () => {
+ // // TODO(HTTP/2): Support aborted
+ // })
+
+ // stream.on('timeout', () => {
+ // // TODO(HTTP/2): Support timeout
+ // })
+
+ // stream.on('push', headers => {
+ // // TODO(HTTP/2): Suppor push
+ // })
+
+ // stream.on('trailers', headers => {
+ // // TODO(HTTP/2): Support trailers
+ // })
+
+ return true
+
+ function writeBodyH2 () {
+ /* istanbul ignore else: assertion */
+ if (!body) {
+ request.onRequestSent()
+ } else if (util.isBuffer(body)) {
+ assert(contentLength === body.byteLength, 'buffer body must have content length')
+ stream.cork()
+ stream.write(body)
+ stream.uncork()
+ stream.end()
+ request.onBodySent(body)
+ request.onRequestSent()
+ } else if (util.isBlobLike(body)) {
+ if (typeof body.stream === 'function') {
+ writeIterable({
+ client,
+ request,
+ contentLength,
+ h2stream: stream,
+ expectsPayload,
+ body: body.stream(),
+ socket: client[kSocket],
+ header: ''
+ })
+ } else {
+ writeBlob({
+ body,
+ client,
+ request,
+ contentLength,
+ expectsPayload,
+ h2stream: stream,
+ header: '',
+ socket: client[kSocket]
+ })
+ }
+ } else if (util.isStream(body)) {
+ writeStream({
+ body,
+ client,
+ request,
+ contentLength,
+ expectsPayload,
+ socket: client[kSocket],
+ h2stream: stream,
+ header: ''
+ })
+ } else if (util.isIterable(body)) {
+ writeIterable({
+ body,
+ client,
+ request,
+ contentLength,
+ expectsPayload,
+ header: '',
+ h2stream: stream,
+ socket: client[kSocket]
+ })
+ } else {
+ assert(false)
+ }
+ }
+}
+
+function writeStream ({ h2stream, body, client, request, socket, contentLength, header, expectsPayload }) {
+ assert(contentLength !== 0 || client[kRunning] === 0, 'stream body cannot be pipelined')
+
+ if (client[kHTTPConnVersion] === 'h2') {
+ // For HTTP/2, is enough to pipe the stream
+ const pipe = pipeline(
+ body,
+ h2stream,
+ (err) => {
+ if (err) {
+ util.destroy(body, err)
+ util.destroy(h2stream, err)
+ } else {
+ request.onRequestSent()
+ }
+ }
+ )
+
+ pipe.on('data', onPipeData)
+ pipe.once('end', () => {
+ pipe.removeListener('data', onPipeData)
+ util.destroy(pipe)
+ })
+
+ function onPipeData (chunk) {
+ request.onBodySent(chunk)
+ }
+
+ return
+ }
+
+ let finished = false
+
+ const writer = new AsyncWriter({ socket, request, contentLength, client, expectsPayload, header })
+
+ const onData = function (chunk) {
+ if (finished) {
+ return
+ }
+
+ try {
+ if (!writer.write(chunk) && this.pause) {
+ this.pause()
+ }
+ } catch (err) {
+ util.destroy(this, err)
+ }
+ }
+ const onDrain = function () {
+ if (finished) {
+ return
+ }
+
+ if (body.resume) {
+ body.resume()
+ }
+ }
+ const onAbort = function () {
+ onFinished(new RequestAbortedError())
+ }
+ const onFinished = function (err) {
+ if (finished) {
+ return
+ }
+
+ finished = true
+
+ assert(socket.destroyed || (socket[kWriting] && client[kRunning] <= 1))
+
+ socket
+ .off('drain', onDrain)
+ .off('error', onFinished)
+
+ body
+ .removeListener('data', onData)
+ .removeListener('end', onFinished)
+ .removeListener('error', onFinished)
+ .removeListener('close', onAbort)
+
+ if (!err) {
+ try {
+ writer.end()
+ } catch (er) {
+ err = er
+ }
+ }
+
+ writer.destroy(err)
+
+ if (err && (err.code !== 'UND_ERR_INFO' || err.message !== 'reset')) {
+ util.destroy(body, err)
+ } else {
+ util.destroy(body)
+ }
+ }
+
+ body
+ .on('data', onData)
+ .on('end', onFinished)
+ .on('error', onFinished)
+ .on('close', onAbort)
+
+ if (body.resume) {
+ body.resume()
+ }
+
+ socket
+ .on('drain', onDrain)
+ .on('error', onFinished)
+}
+
+async function writeBlob ({ h2stream, body, client, request, socket, contentLength, header, expectsPayload }) {
+ assert(contentLength === body.size, 'blob body must have content length')
+
+ const isH2 = client[kHTTPConnVersion] === 'h2'
+ try {
+ if (contentLength != null && contentLength !== body.size) {
+ throw new RequestContentLengthMismatchError()
+ }
+
+ const buffer = Buffer.from(await body.arrayBuffer())
+
+ if (isH2) {
+ h2stream.cork()
+ h2stream.write(buffer)
+ h2stream.uncork()
+ } else {
+ socket.cork()
+ socket.write(`${header}content-length: ${contentLength}\r\n\r\n`, 'latin1')
+ socket.write(buffer)
+ socket.uncork()
+ }
+
+ request.onBodySent(buffer)
+ request.onRequestSent()
+
+ if (!expectsPayload) {
+ socket[kReset] = true
+ }
+
+ resume(client)
+ } catch (err) {
+ util.destroy(isH2 ? h2stream : socket, err)
+ }
+}
+
+async function writeIterable ({ h2stream, body, client, request, socket, contentLength, header, expectsPayload }) {
+ assert(contentLength !== 0 || client[kRunning] === 0, 'iterator body cannot be pipelined')
+
+ let callback = null
+ function onDrain () {
+ if (callback) {
+ const cb = callback
+ callback = null
+ cb()
+ }
+ }
+
+ const waitForDrain = () => new Promise((resolve, reject) => {
+ assert(callback === null)
+
+ if (socket[kError]) {
+ reject(socket[kError])
+ } else {
+ callback = resolve
+ }
+ })
+
+ if (client[kHTTPConnVersion] === 'h2') {
+ h2stream
+ .on('close', onDrain)
+ .on('drain', onDrain)
+
+ try {
+ // It's up to the user to somehow abort the async iterable.
+ for await (const chunk of body) {
+ if (socket[kError]) {
+ throw socket[kError]
+ }
+
+ const res = h2stream.write(chunk)
+ request.onBodySent(chunk)
+ if (!res) {
+ await waitForDrain()
+ }
+ }
+ } catch (err) {
+ h2stream.destroy(err)
+ } finally {
+ request.onRequestSent()
+ h2stream.end()
+ h2stream
+ .off('close', onDrain)
+ .off('drain', onDrain)
+ }
+
+ return
+ }
+
+ socket
+ .on('close', onDrain)
+ .on('drain', onDrain)
+
+ const writer = new AsyncWriter({ socket, request, contentLength, client, expectsPayload, header })
+ try {
+ // It's up to the user to somehow abort the async iterable.
+ for await (const chunk of body) {
+ if (socket[kError]) {
+ throw socket[kError]
+ }
+
+ if (!writer.write(chunk)) {
+ await waitForDrain()
+ }
+ }
+
+ writer.end()
+ } catch (err) {
+ writer.destroy(err)
+ } finally {
+ socket
+ .off('close', onDrain)
+ .off('drain', onDrain)
+ }
+}
+
+class AsyncWriter {
+ constructor ({ socket, request, contentLength, client, expectsPayload, header }) {
+ this.socket = socket
+ this.request = request
+ this.contentLength = contentLength
+ this.client = client
+ this.bytesWritten = 0
+ this.expectsPayload = expectsPayload
+ this.header = header
+
+ socket[kWriting] = true
+ }
+
+ write (chunk) {
+ const { socket, request, contentLength, client, bytesWritten, expectsPayload, header } = this
+
+ if (socket[kError]) {
+ throw socket[kError]
+ }
+
+ if (socket.destroyed) {
+ return false
+ }
+
+ const len = Buffer.byteLength(chunk)
+ if (!len) {
+ return true
+ }
+
+ // We should defer writing chunks.
+ if (contentLength !== null && bytesWritten + len > contentLength) {
+ if (client[kStrictContentLength]) {
+ throw new RequestContentLengthMismatchError()
+ }
+
+ process.emitWarning(new RequestContentLengthMismatchError())
+ }
+
+ socket.cork()
+
+ if (bytesWritten === 0) {
+ if (!expectsPayload) {
+ socket[kReset] = true
+ }
+
+ if (contentLength === null) {
+ socket.write(`${header}transfer-encoding: chunked\r\n`, 'latin1')
+ } else {
+ socket.write(`${header}content-length: ${contentLength}\r\n\r\n`, 'latin1')
+ }
+ }
+
+ if (contentLength === null) {
+ socket.write(`\r\n${len.toString(16)}\r\n`, 'latin1')
+ }
+
+ this.bytesWritten += len
+
+ const ret = socket.write(chunk)
+
+ socket.uncork()
+
+ request.onBodySent(chunk)
+
+ if (!ret) {
+ if (socket[kParser].timeout && socket[kParser].timeoutType === TIMEOUT_HEADERS) {
+ // istanbul ignore else: only for jest
+ if (socket[kParser].timeout.refresh) {
+ socket[kParser].timeout.refresh()
+ }
+ }
+ }
+
+ return ret
+ }
+
+ end () {
+ const { socket, contentLength, client, bytesWritten, expectsPayload, header, request } = this
+ request.onRequestSent()
+
+ socket[kWriting] = false
+
+ if (socket[kError]) {
+ throw socket[kError]
+ }
+
+ if (socket.destroyed) {
+ return
+ }
+
+ if (bytesWritten === 0) {
+ if (expectsPayload) {
+ // https://tools.ietf.org/html/rfc7230#section-3.3.2
+ // A user agent SHOULD send a Content-Length in a request message when
+ // no Transfer-Encoding is sent and the request method defines a meaning
+ // for an enclosed payload body.
+
+ socket.write(`${header}content-length: 0\r\n\r\n`, 'latin1')
+ } else {
+ socket.write(`${header}\r\n`, 'latin1')
+ }
+ } else if (contentLength === null) {
+ socket.write('\r\n0\r\n\r\n', 'latin1')
+ }
+
+ if (contentLength !== null && bytesWritten !== contentLength) {
+ if (client[kStrictContentLength]) {
+ throw new RequestContentLengthMismatchError()
+ } else {
+ process.emitWarning(new RequestContentLengthMismatchError())
+ }
+ }
+
+ if (socket[kParser].timeout && socket[kParser].timeoutType === TIMEOUT_HEADERS) {
+ // istanbul ignore else: only for jest
+ if (socket[kParser].timeout.refresh) {
+ socket[kParser].timeout.refresh()
+ }
+ }
+
+ resume(client)
+ }
+
+ destroy (err) {
+ const { socket, client } = this
+
+ socket[kWriting] = false
+
+ if (err) {
+ assert(client[kRunning] <= 1, 'pipeline should only contain this request')
+ util.destroy(socket, err)
+ }
+ }
+}
+
+function errorRequest (client, request, err) {
+ try {
+ request.onError(err)
+ assert(request.aborted)
+ } catch (err) {
+ client.emit('error', err)
+ }
+}
+
+module.exports = Client
+
+
+/***/ }),
+
+/***/ 56436:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+"use strict";
+
+
+/* istanbul ignore file: only for Node 12 */
+
+const { kConnected, kSize } = __nccwpck_require__(72785)
+
+class CompatWeakRef {
+ constructor (value) {
+ this.value = value
+ }
+
+ deref () {
+ return this.value[kConnected] === 0 && this.value[kSize] === 0
+ ? undefined
+ : this.value
+ }
+}
+
+class CompatFinalizer {
+ constructor (finalizer) {
+ this.finalizer = finalizer
+ }
+
+ register (dispatcher, key) {
+ if (dispatcher.on) {
+ dispatcher.on('disconnect', () => {
+ if (dispatcher[kConnected] === 0 && dispatcher[kSize] === 0) {
+ this.finalizer(key)
+ }
+ })
+ }
+ }
+}
+
+module.exports = function () {
+ // FIXME: remove workaround when the Node bug is fixed
+ // https://github.com/nodejs/node/issues/49344#issuecomment-1741776308
+ if (process.env.NODE_V8_COVERAGE) {
+ return {
+ WeakRef: CompatWeakRef,
+ FinalizationRegistry: CompatFinalizer
+ }
+ }
+ return {
+ WeakRef: global.WeakRef || CompatWeakRef,
+ FinalizationRegistry: global.FinalizationRegistry || CompatFinalizer
+ }
+}
+
+
+/***/ }),
+
+/***/ 20663:
+/***/ ((module) => {
+
+"use strict";
+
+
+// https://wicg.github.io/cookie-store/#cookie-maximum-attribute-value-size
+const maxAttributeValueSize = 1024
+
+// https://wicg.github.io/cookie-store/#cookie-maximum-name-value-pair-size
+const maxNameValuePairSize = 4096
+
+module.exports = {
+ maxAttributeValueSize,
+ maxNameValuePairSize
+}
+
+
+/***/ }),
+
+/***/ 41724:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+"use strict";
+
+
+const { parseSetCookie } = __nccwpck_require__(24408)
+const { stringify, getHeadersList } = __nccwpck_require__(43121)
+const { webidl } = __nccwpck_require__(21744)
+const { Headers } = __nccwpck_require__(10554)
+
+/**
+ * @typedef {Object} Cookie
+ * @property {string} name
+ * @property {string} value
+ * @property {Date|number|undefined} expires
+ * @property {number|undefined} maxAge
+ * @property {string|undefined} domain
+ * @property {string|undefined} path
+ * @property {boolean|undefined} secure
+ * @property {boolean|undefined} httpOnly
+ * @property {'Strict'|'Lax'|'None'} sameSite
+ * @property {string[]} unparsed
+ */
+
+/**
+ * @param {Headers} headers
+ * @returns {Record}
+ */
+function getCookies (headers) {
+ webidl.argumentLengthCheck(arguments, 1, { header: 'getCookies' })
+
+ webidl.brandCheck(headers, Headers, { strict: false })
+
+ const cookie = headers.get('cookie')
+ const out = {}
+
+ if (!cookie) {
+ return out
+ }
+
+ for (const piece of cookie.split(';')) {
+ const [name, ...value] = piece.split('=')
+
+ out[name.trim()] = value.join('=')
+ }
+
+ return out
+}
+
+/**
+ * @param {Headers} headers
+ * @param {string} name
+ * @param {{ path?: string, domain?: string }|undefined} attributes
+ * @returns {void}
+ */
+function deleteCookie (headers, name, attributes) {
+ webidl.argumentLengthCheck(arguments, 2, { header: 'deleteCookie' })
+
+ webidl.brandCheck(headers, Headers, { strict: false })
+
+ name = webidl.converters.DOMString(name)
+ attributes = webidl.converters.DeleteCookieAttributes(attributes)
+
+ // Matches behavior of
+ // https://github.com/denoland/deno_std/blob/63827b16330b82489a04614027c33b7904e08be5/http/cookie.ts#L278
+ setCookie(headers, {
+ name,
+ value: '',
+ expires: new Date(0),
+ ...attributes
+ })
+}
+
+/**
+ * @param {Headers} headers
+ * @returns {Cookie[]}
+ */
+function getSetCookies (headers) {
+ webidl.argumentLengthCheck(arguments, 1, { header: 'getSetCookies' })
+
+ webidl.brandCheck(headers, Headers, { strict: false })
+
+ const cookies = getHeadersList(headers).cookies
+
+ if (!cookies) {
+ return []
+ }
+
+ // In older versions of undici, cookies is a list of name:value.
+ return cookies.map((pair) => parseSetCookie(Array.isArray(pair) ? pair[1] : pair))
+}
+
+/**
+ * @param {Headers} headers
+ * @param {Cookie} cookie
+ * @returns {void}
+ */
+function setCookie (headers, cookie) {
+ webidl.argumentLengthCheck(arguments, 2, { header: 'setCookie' })
+
+ webidl.brandCheck(headers, Headers, { strict: false })
+
+ cookie = webidl.converters.Cookie(cookie)
+
+ const str = stringify(cookie)
+
+ if (str) {
+ headers.append('Set-Cookie', stringify(cookie))
+ }
+}
+
+webidl.converters.DeleteCookieAttributes = webidl.dictionaryConverter([
+ {
+ converter: webidl.nullableConverter(webidl.converters.DOMString),
+ key: 'path',
+ defaultValue: null
+ },
+ {
+ converter: webidl.nullableConverter(webidl.converters.DOMString),
+ key: 'domain',
+ defaultValue: null
+ }
+])
+
+webidl.converters.Cookie = webidl.dictionaryConverter([
+ {
+ converter: webidl.converters.DOMString,
+ key: 'name'
+ },
+ {
+ converter: webidl.converters.DOMString,
+ key: 'value'
+ },
+ {
+ converter: webidl.nullableConverter((value) => {
+ if (typeof value === 'number') {
+ return webidl.converters['unsigned long long'](value)
+ }
+
+ return new Date(value)
+ }),
+ key: 'expires',
+ defaultValue: null
+ },
+ {
+ converter: webidl.nullableConverter(webidl.converters['long long']),
+ key: 'maxAge',
+ defaultValue: null
+ },
+ {
+ converter: webidl.nullableConverter(webidl.converters.DOMString),
+ key: 'domain',
+ defaultValue: null
+ },
+ {
+ converter: webidl.nullableConverter(webidl.converters.DOMString),
+ key: 'path',
+ defaultValue: null
+ },
+ {
+ converter: webidl.nullableConverter(webidl.converters.boolean),
+ key: 'secure',
+ defaultValue: null
+ },
+ {
+ converter: webidl.nullableConverter(webidl.converters.boolean),
+ key: 'httpOnly',
+ defaultValue: null
+ },
+ {
+ converter: webidl.converters.USVString,
+ key: 'sameSite',
+ allowedValues: ['Strict', 'Lax', 'None']
+ },
+ {
+ converter: webidl.sequenceConverter(webidl.converters.DOMString),
+ key: 'unparsed',
+ defaultValue: []
+ }
+])
+
+module.exports = {
+ getCookies,
+ deleteCookie,
+ getSetCookies,
+ setCookie
+}
+
+
+/***/ }),
+
+/***/ 24408:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+"use strict";
+
+
+const { maxNameValuePairSize, maxAttributeValueSize } = __nccwpck_require__(20663)
+const { isCTLExcludingHtab } = __nccwpck_require__(43121)
+const { collectASequenceOfCodePointsFast } = __nccwpck_require__(685)
+const assert = __nccwpck_require__(39491)
+
+/**
+ * @description Parses the field-value attributes of a set-cookie header string.
+ * @see https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-rfc6265bis#section-5.4
+ * @param {string} header
+ * @returns if the header is invalid, null will be returned
+ */
+function parseSetCookie (header) {
+ // 1. If the set-cookie-string contains a %x00-08 / %x0A-1F / %x7F
+ // character (CTL characters excluding HTAB): Abort these steps and
+ // ignore the set-cookie-string entirely.
+ if (isCTLExcludingHtab(header)) {
+ return null
+ }
+
+ let nameValuePair = ''
+ let unparsedAttributes = ''
+ let name = ''
+ let value = ''
+
+ // 2. If the set-cookie-string contains a %x3B (";") character:
+ if (header.includes(';')) {
+ // 1. The name-value-pair string consists of the characters up to,
+ // but not including, the first %x3B (";"), and the unparsed-
+ // attributes consist of the remainder of the set-cookie-string
+ // (including the %x3B (";") in question).
+ const position = { position: 0 }
+
+ nameValuePair = collectASequenceOfCodePointsFast(';', header, position)
+ unparsedAttributes = header.slice(position.position)
+ } else {
+ // Otherwise:
+
+ // 1. The name-value-pair string consists of all the characters
+ // contained in the set-cookie-string, and the unparsed-
+ // attributes is the empty string.
+ nameValuePair = header
+ }
+
+ // 3. If the name-value-pair string lacks a %x3D ("=") character, then
+ // the name string is empty, and the value string is the value of
+ // name-value-pair.
+ if (!nameValuePair.includes('=')) {
+ value = nameValuePair
+ } else {
+ // Otherwise, the name string consists of the characters up to, but
+ // not including, the first %x3D ("=") character, and the (possibly
+ // empty) value string consists of the characters after the first
+ // %x3D ("=") character.
+ const position = { position: 0 }
+ name = collectASequenceOfCodePointsFast(
+ '=',
+ nameValuePair,
+ position
+ )
+ value = nameValuePair.slice(position.position + 1)
+ }
+
+ // 4. Remove any leading or trailing WSP characters from the name
+ // string and the value string.
+ name = name.trim()
+ value = value.trim()
+
+ // 5. If the sum of the lengths of the name string and the value string
+ // is more than 4096 octets, abort these steps and ignore the set-
+ // cookie-string entirely.
+ if (name.length + value.length > maxNameValuePairSize) {
+ return null
+ }
+
+ // 6. The cookie-name is the name string, and the cookie-value is the
+ // value string.
+ return {
+ name, value, ...parseUnparsedAttributes(unparsedAttributes)
+ }
+}
+
+/**
+ * Parses the remaining attributes of a set-cookie header
+ * @see https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-rfc6265bis#section-5.4
+ * @param {string} unparsedAttributes
+ * @param {[Object.]={}} cookieAttributeList
+ */
+function parseUnparsedAttributes (unparsedAttributes, cookieAttributeList = {}) {
+ // 1. If the unparsed-attributes string is empty, skip the rest of
+ // these steps.
+ if (unparsedAttributes.length === 0) {
+ return cookieAttributeList
+ }
+
+ // 2. Discard the first character of the unparsed-attributes (which
+ // will be a %x3B (";") character).
+ assert(unparsedAttributes[0] === ';')
+ unparsedAttributes = unparsedAttributes.slice(1)
+
+ let cookieAv = ''
+
+ // 3. If the remaining unparsed-attributes contains a %x3B (";")
+ // character:
+ if (unparsedAttributes.includes(';')) {
+ // 1. Consume the characters of the unparsed-attributes up to, but
+ // not including, the first %x3B (";") character.
+ cookieAv = collectASequenceOfCodePointsFast(
+ ';',
+ unparsedAttributes,
+ { position: 0 }
+ )
+ unparsedAttributes = unparsedAttributes.slice(cookieAv.length)
+ } else {
+ // Otherwise:
+
+ // 1. Consume the remainder of the unparsed-attributes.
+ cookieAv = unparsedAttributes
+ unparsedAttributes = ''
+ }
+
+ // Let the cookie-av string be the characters consumed in this step.
+
+ let attributeName = ''
+ let attributeValue = ''
+
+ // 4. If the cookie-av string contains a %x3D ("=") character:
+ if (cookieAv.includes('=')) {
+ // 1. The (possibly empty) attribute-name string consists of the
+ // characters up to, but not including, the first %x3D ("=")
+ // character, and the (possibly empty) attribute-value string
+ // consists of the characters after the first %x3D ("=")
+ // character.
+ const position = { position: 0 }
+
+ attributeName = collectASequenceOfCodePointsFast(
+ '=',
+ cookieAv,
+ position
+ )
+ attributeValue = cookieAv.slice(position.position + 1)
+ } else {
+ // Otherwise:
+
+ // 1. The attribute-name string consists of the entire cookie-av
+ // string, and the attribute-value string is empty.
+ attributeName = cookieAv
+ }
+
+ // 5. Remove any leading or trailing WSP characters from the attribute-
+ // name string and the attribute-value string.
+ attributeName = attributeName.trim()
+ attributeValue = attributeValue.trim()
+
+ // 6. If the attribute-value is longer than 1024 octets, ignore the
+ // cookie-av string and return to Step 1 of this algorithm.
+ if (attributeValue.length > maxAttributeValueSize) {
+ return parseUnparsedAttributes(unparsedAttributes, cookieAttributeList)
+ }
+
+ // 7. Process the attribute-name and attribute-value according to the
+ // requirements in the following subsections. (Notice that
+ // attributes with unrecognized attribute-names are ignored.)
+ const attributeNameLowercase = attributeName.toLowerCase()
+
+ // https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-rfc6265bis#section-5.4.1
+ // If the attribute-name case-insensitively matches the string
+ // "Expires", the user agent MUST process the cookie-av as follows.
+ if (attributeNameLowercase === 'expires') {
+ // 1. Let the expiry-time be the result of parsing the attribute-value
+ // as cookie-date (see Section 5.1.1).
+ const expiryTime = new Date(attributeValue)
+
+ // 2. If the attribute-value failed to parse as a cookie date, ignore
+ // the cookie-av.
+
+ cookieAttributeList.expires = expiryTime
+ } else if (attributeNameLowercase === 'max-age') {
+ // https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-rfc6265bis#section-5.4.2
+ // If the attribute-name case-insensitively matches the string "Max-
+ // Age", the user agent MUST process the cookie-av as follows.
+
+ // 1. If the first character of the attribute-value is not a DIGIT or a
+ // "-" character, ignore the cookie-av.
+ const charCode = attributeValue.charCodeAt(0)
+
+ if ((charCode < 48 || charCode > 57) && attributeValue[0] !== '-') {
+ return parseUnparsedAttributes(unparsedAttributes, cookieAttributeList)
+ }
+
+ // 2. If the remainder of attribute-value contains a non-DIGIT
+ // character, ignore the cookie-av.
+ if (!/^\d+$/.test(attributeValue)) {
+ return parseUnparsedAttributes(unparsedAttributes, cookieAttributeList)
+ }
+
+ // 3. Let delta-seconds be the attribute-value converted to an integer.
+ const deltaSeconds = Number(attributeValue)
+
+ // 4. Let cookie-age-limit be the maximum age of the cookie (which
+ // SHOULD be 400 days or less, see Section 4.1.2.2).
+
+ // 5. Set delta-seconds to the smaller of its present value and cookie-
+ // age-limit.
+ // deltaSeconds = Math.min(deltaSeconds * 1000, maxExpiresMs)
+
+ // 6. If delta-seconds is less than or equal to zero (0), let expiry-
+ // time be the earliest representable date and time. Otherwise, let
+ // the expiry-time be the current date and time plus delta-seconds
+ // seconds.
+ // const expiryTime = deltaSeconds <= 0 ? Date.now() : Date.now() + deltaSeconds
+
+ // 7. Append an attribute to the cookie-attribute-list with an
+ // attribute-name of Max-Age and an attribute-value of expiry-time.
+ cookieAttributeList.maxAge = deltaSeconds
+ } else if (attributeNameLowercase === 'domain') {
+ // https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-rfc6265bis#section-5.4.3
+ // If the attribute-name case-insensitively matches the string "Domain",
+ // the user agent MUST process the cookie-av as follows.
+
+ // 1. Let cookie-domain be the attribute-value.
+ let cookieDomain = attributeValue
+
+ // 2. If cookie-domain starts with %x2E ("."), let cookie-domain be
+ // cookie-domain without its leading %x2E (".").
+ if (cookieDomain[0] === '.') {
+ cookieDomain = cookieDomain.slice(1)
+ }
+
+ // 3. Convert the cookie-domain to lower case.
+ cookieDomain = cookieDomain.toLowerCase()
+
+ // 4. Append an attribute to the cookie-attribute-list with an
+ // attribute-name of Domain and an attribute-value of cookie-domain.
+ cookieAttributeList.domain = cookieDomain
+ } else if (attributeNameLowercase === 'path') {
+ // https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-rfc6265bis#section-5.4.4
+ // If the attribute-name case-insensitively matches the string "Path",
+ // the user agent MUST process the cookie-av as follows.
+
+ // 1. If the attribute-value is empty or if the first character of the
+ // attribute-value is not %x2F ("/"):
+ let cookiePath = ''
+ if (attributeValue.length === 0 || attributeValue[0] !== '/') {
+ // 1. Let cookie-path be the default-path.
+ cookiePath = '/'
+ } else {
+ // Otherwise:
+
+ // 1. Let cookie-path be the attribute-value.
+ cookiePath = attributeValue
+ }
+
+ // 2. Append an attribute to the cookie-attribute-list with an
+ // attribute-name of Path and an attribute-value of cookie-path.
+ cookieAttributeList.path = cookiePath
+ } else if (attributeNameLowercase === 'secure') {
+ // https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-rfc6265bis#section-5.4.5
+ // If the attribute-name case-insensitively matches the string "Secure",
+ // the user agent MUST append an attribute to the cookie-attribute-list
+ // with an attribute-name of Secure and an empty attribute-value.
+
+ cookieAttributeList.secure = true
+ } else if (attributeNameLowercase === 'httponly') {
+ // https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-rfc6265bis#section-5.4.6
+ // If the attribute-name case-insensitively matches the string
+ // "HttpOnly", the user agent MUST append an attribute to the cookie-
+ // attribute-list with an attribute-name of HttpOnly and an empty
+ // attribute-value.
+
+ cookieAttributeList.httpOnly = true
+ } else if (attributeNameLowercase === 'samesite') {
+ // https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-rfc6265bis#section-5.4.7
+ // If the attribute-name case-insensitively matches the string
+ // "SameSite", the user agent MUST process the cookie-av as follows:
+
+ // 1. Let enforcement be "Default".
+ let enforcement = 'Default'
+
+ const attributeValueLowercase = attributeValue.toLowerCase()
+ // 2. If cookie-av's attribute-value is a case-insensitive match for
+ // "None", set enforcement to "None".
+ if (attributeValueLowercase.includes('none')) {
+ enforcement = 'None'
+ }
+
+ // 3. If cookie-av's attribute-value is a case-insensitive match for
+ // "Strict", set enforcement to "Strict".
+ if (attributeValueLowercase.includes('strict')) {
+ enforcement = 'Strict'
+ }
+
+ // 4. If cookie-av's attribute-value is a case-insensitive match for
+ // "Lax", set enforcement to "Lax".
+ if (attributeValueLowercase.includes('lax')) {
+ enforcement = 'Lax'
+ }
+
+ // 5. Append an attribute to the cookie-attribute-list with an
+ // attribute-name of "SameSite" and an attribute-value of
+ // enforcement.
+ cookieAttributeList.sameSite = enforcement
+ } else {
+ cookieAttributeList.unparsed ??= []
+
+ cookieAttributeList.unparsed.push(`${attributeName}=${attributeValue}`)
+ }
+
+ // 8. Return to Step 1 of this algorithm.
+ return parseUnparsedAttributes(unparsedAttributes, cookieAttributeList)
+}
+
+module.exports = {
+ parseSetCookie,
+ parseUnparsedAttributes
+}
+
+
+/***/ }),
+
+/***/ 43121:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+"use strict";
+
+
+const assert = __nccwpck_require__(39491)
+const { kHeadersList } = __nccwpck_require__(72785)
+
+function isCTLExcludingHtab (value) {
+ if (value.length === 0) {
+ return false
+ }
+
+ for (const char of value) {
+ const code = char.charCodeAt(0)
+
+ if (
+ (code >= 0x00 || code <= 0x08) ||
+ (code >= 0x0A || code <= 0x1F) ||
+ code === 0x7F
+ ) {
+ return false
+ }
+ }
+}
+
+/**
+ CHAR =
+ token = 1*
+ separators = "(" | ")" | "<" | ">" | "@"
+ | "," | ";" | ":" | "\" | <">
+ | "/" | "[" | "]" | "?" | "="
+ | "{" | "}" | SP | HT
+ * @param {string} name
+ */
+function validateCookieName (name) {
+ for (const char of name) {
+ const code = char.charCodeAt(0)
+
+ if (
+ (code <= 0x20 || code > 0x7F) ||
+ char === '(' ||
+ char === ')' ||
+ char === '>' ||
+ char === '<' ||
+ char === '@' ||
+ char === ',' ||
+ char === ';' ||
+ char === ':' ||
+ char === '\\' ||
+ char === '"' ||
+ char === '/' ||
+ char === '[' ||
+ char === ']' ||
+ char === '?' ||
+ char === '=' ||
+ char === '{' ||
+ char === '}'
+ ) {
+ throw new Error('Invalid cookie name')
+ }
+ }
+}
+
+/**
+ cookie-value = *cookie-octet / ( DQUOTE *cookie-octet DQUOTE )
+ cookie-octet = %x21 / %x23-2B / %x2D-3A / %x3C-5B / %x5D-7E
+ ; US-ASCII characters excluding CTLs,
+ ; whitespace DQUOTE, comma, semicolon,
+ ; and backslash
+ * @param {string} value
+ */
+function validateCookieValue (value) {
+ for (const char of value) {
+ const code = char.charCodeAt(0)
+
+ if (
+ code < 0x21 || // exclude CTLs (0-31)
+ code === 0x22 ||
+ code === 0x2C ||
+ code === 0x3B ||
+ code === 0x5C ||
+ code > 0x7E // non-ascii
+ ) {
+ throw new Error('Invalid header value')
+ }
+ }
+}
+
+/**
+ * path-value =
+ * @param {string} path
+ */
+function validateCookiePath (path) {
+ for (const char of path) {
+ const code = char.charCodeAt(0)
+
+ if (code < 0x21 || char === ';') {
+ throw new Error('Invalid cookie path')
+ }
+ }
+}
+
+/**
+ * I have no idea why these values aren't allowed to be honest,
+ * but Deno tests these. - Khafra
+ * @param {string} domain
+ */
+function validateCookieDomain (domain) {
+ if (
+ domain.startsWith('-') ||
+ domain.endsWith('.') ||
+ domain.endsWith('-')
+ ) {
+ throw new Error('Invalid cookie domain')
+ }
+}
+
+/**
+ * @see https://www.rfc-editor.org/rfc/rfc7231#section-7.1.1.1
+ * @param {number|Date} date
+ IMF-fixdate = day-name "," SP date1 SP time-of-day SP GMT
+ ; fixed length/zone/capitalization subset of the format
+ ; see Section 3.3 of [RFC5322]
+
+ day-name = %x4D.6F.6E ; "Mon", case-sensitive
+ / %x54.75.65 ; "Tue", case-sensitive
+ / %x57.65.64 ; "Wed", case-sensitive
+ / %x54.68.75 ; "Thu", case-sensitive
+ / %x46.72.69 ; "Fri", case-sensitive
+ / %x53.61.74 ; "Sat", case-sensitive
+ / %x53.75.6E ; "Sun", case-sensitive
+ date1 = day SP month SP year
+ ; e.g., 02 Jun 1982
+
+ day = 2DIGIT
+ month = %x4A.61.6E ; "Jan", case-sensitive
+ / %x46.65.62 ; "Feb", case-sensitive
+ / %x4D.61.72 ; "Mar", case-sensitive
+ / %x41.70.72 ; "Apr", case-sensitive
+ / %x4D.61.79 ; "May", case-sensitive
+ / %x4A.75.6E ; "Jun", case-sensitive
+ / %x4A.75.6C ; "Jul", case-sensitive
+ / %x41.75.67 ; "Aug", case-sensitive
+ / %x53.65.70 ; "Sep", case-sensitive
+ / %x4F.63.74 ; "Oct", case-sensitive
+ / %x4E.6F.76 ; "Nov", case-sensitive
+ / %x44.65.63 ; "Dec", case-sensitive
+ year = 4DIGIT
+
+ GMT = %x47.4D.54 ; "GMT", case-sensitive
+
+ time-of-day = hour ":" minute ":" second
+ ; 00:00:00 - 23:59:60 (leap second)
+
+ hour = 2DIGIT
+ minute = 2DIGIT
+ second = 2DIGIT
+ */
+function toIMFDate (date) {
+ if (typeof date === 'number') {
+ date = new Date(date)
+ }
+
+ const days = [
+ 'Sun', 'Mon', 'Tue', 'Wed',
+ 'Thu', 'Fri', 'Sat'
+ ]
+
+ const months = [
+ 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
+ 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'
+ ]
+
+ const dayName = days[date.getUTCDay()]
+ const day = date.getUTCDate().toString().padStart(2, '0')
+ const month = months[date.getUTCMonth()]
+ const year = date.getUTCFullYear()
+ const hour = date.getUTCHours().toString().padStart(2, '0')
+ const minute = date.getUTCMinutes().toString().padStart(2, '0')
+ const second = date.getUTCSeconds().toString().padStart(2, '0')
+
+ return `${dayName}, ${day} ${month} ${year} ${hour}:${minute}:${second} GMT`
+}
+
+/**
+ max-age-av = "Max-Age=" non-zero-digit *DIGIT
+ ; In practice, both expires-av and max-age-av
+ ; are limited to dates representable by the
+ ; user agent.
+ * @param {number} maxAge
+ */
+function validateCookieMaxAge (maxAge) {
+ if (maxAge < 0) {
+ throw new Error('Invalid cookie max-age')
+ }
+}
+
+/**
+ * @see https://www.rfc-editor.org/rfc/rfc6265#section-4.1.1
+ * @param {import('./index').Cookie} cookie
+ */
+function stringify (cookie) {
+ if (cookie.name.length === 0) {
+ return null
+ }
+
+ validateCookieName(cookie.name)
+ validateCookieValue(cookie.value)
+
+ const out = [`${cookie.name}=${cookie.value}`]
+
+ // https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-cookie-prefixes-00#section-3.1
+ // https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-cookie-prefixes-00#section-3.2
+ if (cookie.name.startsWith('__Secure-')) {
+ cookie.secure = true
+ }
+
+ if (cookie.name.startsWith('__Host-')) {
+ cookie.secure = true
+ cookie.domain = null
+ cookie.path = '/'
+ }
+
+ if (cookie.secure) {
+ out.push('Secure')
+ }
+
+ if (cookie.httpOnly) {
+ out.push('HttpOnly')
+ }
+
+ if (typeof cookie.maxAge === 'number') {
+ validateCookieMaxAge(cookie.maxAge)
+ out.push(`Max-Age=${cookie.maxAge}`)
+ }
+
+ if (cookie.domain) {
+ validateCookieDomain(cookie.domain)
+ out.push(`Domain=${cookie.domain}`)
+ }
+
+ if (cookie.path) {
+ validateCookiePath(cookie.path)
+ out.push(`Path=${cookie.path}`)
+ }
+
+ if (cookie.expires && cookie.expires.toString() !== 'Invalid Date') {
+ out.push(`Expires=${toIMFDate(cookie.expires)}`)
+ }
+
+ if (cookie.sameSite) {
+ out.push(`SameSite=${cookie.sameSite}`)
+ }
+
+ for (const part of cookie.unparsed) {
+ if (!part.includes('=')) {
+ throw new Error('Invalid unparsed')
+ }
+
+ const [key, ...value] = part.split('=')
+
+ out.push(`${key.trim()}=${value.join('=')}`)
+ }
+
+ return out.join('; ')
+}
+
+let kHeadersListNode
+
+function getHeadersList (headers) {
+ if (headers[kHeadersList]) {
+ return headers[kHeadersList]
+ }
+
+ if (!kHeadersListNode) {
+ kHeadersListNode = Object.getOwnPropertySymbols(headers).find(
+ (symbol) => symbol.description === 'headers list'
+ )
+
+ assert(kHeadersListNode, 'Headers cannot be parsed')
+ }
+
+ const headersList = headers[kHeadersListNode]
+ assert(headersList)
+
+ return headersList
+}
+
+module.exports = {
+ isCTLExcludingHtab,
+ stringify,
+ getHeadersList
+}
+
+
+/***/ }),
+
+/***/ 82067:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+"use strict";
+
+
+const net = __nccwpck_require__(41808)
+const assert = __nccwpck_require__(39491)
+const util = __nccwpck_require__(83983)
+const { InvalidArgumentError, ConnectTimeoutError } = __nccwpck_require__(48045)
+
+let tls // include tls conditionally since it is not always available
+
+// TODO: session re-use does not wait for the first
+// connection to resolve the session and might therefore
+// resolve the same servername multiple times even when
+// re-use is enabled.
+
+let SessionCache
+// FIXME: remove workaround when the Node bug is fixed
+// https://github.com/nodejs/node/issues/49344#issuecomment-1741776308
+if (global.FinalizationRegistry && !process.env.NODE_V8_COVERAGE) {
+ SessionCache = class WeakSessionCache {
+ constructor (maxCachedSessions) {
+ this._maxCachedSessions = maxCachedSessions
+ this._sessionCache = new Map()
+ this._sessionRegistry = new global.FinalizationRegistry((key) => {
+ if (this._sessionCache.size < this._maxCachedSessions) {
+ return
+ }
+
+ const ref = this._sessionCache.get(key)
+ if (ref !== undefined && ref.deref() === undefined) {
+ this._sessionCache.delete(key)
+ }
+ })
+ }
+
+ get (sessionKey) {
+ const ref = this._sessionCache.get(sessionKey)
+ return ref ? ref.deref() : null
+ }
+
+ set (sessionKey, session) {
+ if (this._maxCachedSessions === 0) {
+ return
+ }
+
+ this._sessionCache.set(sessionKey, new WeakRef(session))
+ this._sessionRegistry.register(session, sessionKey)
+ }
+ }
+} else {
+ SessionCache = class SimpleSessionCache {
+ constructor (maxCachedSessions) {
+ this._maxCachedSessions = maxCachedSessions
+ this._sessionCache = new Map()
+ }
+
+ get (sessionKey) {
+ return this._sessionCache.get(sessionKey)
+ }
+
+ set (sessionKey, session) {
+ if (this._maxCachedSessions === 0) {
+ return
+ }
+
+ if (this._sessionCache.size >= this._maxCachedSessions) {
+ // remove the oldest session
+ const { value: oldestKey } = this._sessionCache.keys().next()
+ this._sessionCache.delete(oldestKey)
+ }
+
+ this._sessionCache.set(sessionKey, session)
+ }
+ }
+}
+
+function buildConnector ({ allowH2, maxCachedSessions, socketPath, timeout, ...opts }) {
+ if (maxCachedSessions != null && (!Number.isInteger(maxCachedSessions) || maxCachedSessions < 0)) {
+ throw new InvalidArgumentError('maxCachedSessions must be a positive integer or zero')
+ }
+
+ const options = { path: socketPath, ...opts }
+ const sessionCache = new SessionCache(maxCachedSessions == null ? 100 : maxCachedSessions)
+ timeout = timeout == null ? 10e3 : timeout
+ allowH2 = allowH2 != null ? allowH2 : false
+ return function connect ({ hostname, host, protocol, port, servername, localAddress, httpSocket }, callback) {
+ let socket
+ if (protocol === 'https:') {
+ if (!tls) {
+ tls = __nccwpck_require__(24404)
+ }
+ servername = servername || options.servername || util.getServerName(host) || null
+
+ const sessionKey = servername || hostname
+ const session = sessionCache.get(sessionKey) || null
+
+ assert(sessionKey)
+
+ socket = tls.connect({
+ highWaterMark: 16384, // TLS in node can't have bigger HWM anyway...
+ ...options,
+ servername,
+ session,
+ localAddress,
+ // TODO(HTTP/2): Add support for h2c
+ ALPNProtocols: allowH2 ? ['http/1.1', 'h2'] : ['http/1.1'],
+ socket: httpSocket, // upgrade socket connection
+ port: port || 443,
+ host: hostname
+ })
+
+ socket
+ .on('session', function (session) {
+ // TODO (fix): Can a session become invalid once established? Don't think so?
+ sessionCache.set(sessionKey, session)
+ })
+ } else {
+ assert(!httpSocket, 'httpSocket can only be sent on TLS update')
+ socket = net.connect({
+ highWaterMark: 64 * 1024, // Same as nodejs fs streams.
+ ...options,
+ localAddress,
+ port: port || 80,
+ host: hostname
+ })
+ }
+
+ // Set TCP keep alive options on the socket here instead of in connect() for the case of assigning the socket
+ if (options.keepAlive == null || options.keepAlive) {
+ const keepAliveInitialDelay = options.keepAliveInitialDelay === undefined ? 60e3 : options.keepAliveInitialDelay
+ socket.setKeepAlive(true, keepAliveInitialDelay)
+ }
+
+ const cancelTimeout = setupTimeout(() => onConnectTimeout(socket), timeout)
+
+ socket
+ .setNoDelay(true)
+ .once(protocol === 'https:' ? 'secureConnect' : 'connect', function () {
+ cancelTimeout()
+
+ if (callback) {
+ const cb = callback
+ callback = null
+ cb(null, this)
+ }
+ })
+ .on('error', function (err) {
+ cancelTimeout()
+
+ if (callback) {
+ const cb = callback
+ callback = null
+ cb(err)
+ }
+ })
+
+ return socket
+ }
+}
+
+function setupTimeout (onConnectTimeout, timeout) {
+ if (!timeout) {
+ return () => {}
+ }
+
+ let s1 = null
+ let s2 = null
+ const timeoutId = setTimeout(() => {
+ // setImmediate is added to make sure that we priotorise socket error events over timeouts
+ s1 = setImmediate(() => {
+ if (process.platform === 'win32') {
+ // Windows needs an extra setImmediate probably due to implementation differences in the socket logic
+ s2 = setImmediate(() => onConnectTimeout())
+ } else {
+ onConnectTimeout()
+ }
+ })
+ }, timeout)
+ return () => {
+ clearTimeout(timeoutId)
+ clearImmediate(s1)
+ clearImmediate(s2)
+ }
+}
+
+function onConnectTimeout (socket) {
+ util.destroy(socket, new ConnectTimeoutError())
+}
+
+module.exports = buildConnector
+
+
+/***/ }),
+
+/***/ 48045:
+/***/ ((module) => {
+
+"use strict";
+
+
+class UndiciError extends Error {
+ constructor (message) {
+ super(message)
+ this.name = 'UndiciError'
+ this.code = 'UND_ERR'
+ }
+}
+
+class ConnectTimeoutError extends UndiciError {
+ constructor (message) {
+ super(message)
+ Error.captureStackTrace(this, ConnectTimeoutError)
+ this.name = 'ConnectTimeoutError'
+ this.message = message || 'Connect Timeout Error'
+ this.code = 'UND_ERR_CONNECT_TIMEOUT'
+ }
+}
+
+class HeadersTimeoutError extends UndiciError {
+ constructor (message) {
+ super(message)
+ Error.captureStackTrace(this, HeadersTimeoutError)
+ this.name = 'HeadersTimeoutError'
+ this.message = message || 'Headers Timeout Error'
+ this.code = 'UND_ERR_HEADERS_TIMEOUT'
+ }
+}
+
+class HeadersOverflowError extends UndiciError {
+ constructor (message) {
+ super(message)
+ Error.captureStackTrace(this, HeadersOverflowError)
+ this.name = 'HeadersOverflowError'
+ this.message = message || 'Headers Overflow Error'
+ this.code = 'UND_ERR_HEADERS_OVERFLOW'
+ }
+}
+
+class BodyTimeoutError extends UndiciError {
+ constructor (message) {
+ super(message)
+ Error.captureStackTrace(this, BodyTimeoutError)
+ this.name = 'BodyTimeoutError'
+ this.message = message || 'Body Timeout Error'
+ this.code = 'UND_ERR_BODY_TIMEOUT'
+ }
+}
+
+class ResponseStatusCodeError extends UndiciError {
+ constructor (message, statusCode, headers, body) {
+ super(message)
+ Error.captureStackTrace(this, ResponseStatusCodeError)
+ this.name = 'ResponseStatusCodeError'
+ this.message = message || 'Response Status Code Error'
+ this.code = 'UND_ERR_RESPONSE_STATUS_CODE'
+ this.body = body
+ this.status = statusCode
+ this.statusCode = statusCode
+ this.headers = headers
+ }
+}
+
+class InvalidArgumentError extends UndiciError {
+ constructor (message) {
+ super(message)
+ Error.captureStackTrace(this, InvalidArgumentError)
+ this.name = 'InvalidArgumentError'
+ this.message = message || 'Invalid Argument Error'
+ this.code = 'UND_ERR_INVALID_ARG'
+ }
+}
+
+class InvalidReturnValueError extends UndiciError {
+ constructor (message) {
+ super(message)
+ Error.captureStackTrace(this, InvalidReturnValueError)
+ this.name = 'InvalidReturnValueError'
+ this.message = message || 'Invalid Return Value Error'
+ this.code = 'UND_ERR_INVALID_RETURN_VALUE'
+ }
+}
+
+class RequestAbortedError extends UndiciError {
+ constructor (message) {
+ super(message)
+ Error.captureStackTrace(this, RequestAbortedError)
+ this.name = 'AbortError'
+ this.message = message || 'Request aborted'
+ this.code = 'UND_ERR_ABORTED'
+ }
+}
+
+class InformationalError extends UndiciError {
+ constructor (message) {
+ super(message)
+ Error.captureStackTrace(this, InformationalError)
+ this.name = 'InformationalError'
+ this.message = message || 'Request information'
+ this.code = 'UND_ERR_INFO'
+ }
+}
+
+class RequestContentLengthMismatchError extends UndiciError {
+ constructor (message) {
+ super(message)
+ Error.captureStackTrace(this, RequestContentLengthMismatchError)
+ this.name = 'RequestContentLengthMismatchError'
+ this.message = message || 'Request body length does not match content-length header'
+ this.code = 'UND_ERR_REQ_CONTENT_LENGTH_MISMATCH'
+ }
+}
+
+class ResponseContentLengthMismatchError extends UndiciError {
+ constructor (message) {
+ super(message)
+ Error.captureStackTrace(this, ResponseContentLengthMismatchError)
+ this.name = 'ResponseContentLengthMismatchError'
+ this.message = message || 'Response body length does not match content-length header'
+ this.code = 'UND_ERR_RES_CONTENT_LENGTH_MISMATCH'
+ }
+}
+
+class ClientDestroyedError extends UndiciError {
+ constructor (message) {
+ super(message)
+ Error.captureStackTrace(this, ClientDestroyedError)
+ this.name = 'ClientDestroyedError'
+ this.message = message || 'The client is destroyed'
+ this.code = 'UND_ERR_DESTROYED'
+ }
+}
+
+class ClientClosedError extends UndiciError {
+ constructor (message) {
+ super(message)
+ Error.captureStackTrace(this, ClientClosedError)
+ this.name = 'ClientClosedError'
+ this.message = message || 'The client is closed'
+ this.code = 'UND_ERR_CLOSED'
+ }
+}
+
+class SocketError extends UndiciError {
+ constructor (message, socket) {
+ super(message)
+ Error.captureStackTrace(this, SocketError)
+ this.name = 'SocketError'
+ this.message = message || 'Socket error'
+ this.code = 'UND_ERR_SOCKET'
+ this.socket = socket
+ }
+}
+
+class NotSupportedError extends UndiciError {
+ constructor (message) {
+ super(message)
+ Error.captureStackTrace(this, NotSupportedError)
+ this.name = 'NotSupportedError'
+ this.message = message || 'Not supported error'
+ this.code = 'UND_ERR_NOT_SUPPORTED'
+ }
+}
+
+class BalancedPoolMissingUpstreamError extends UndiciError {
+ constructor (message) {
+ super(message)
+ Error.captureStackTrace(this, NotSupportedError)
+ this.name = 'MissingUpstreamError'
+ this.message = message || 'No upstream has been added to the BalancedPool'
+ this.code = 'UND_ERR_BPL_MISSING_UPSTREAM'
+ }
+}
+
+class HTTPParserError extends Error {
+ constructor (message, code, data) {
+ super(message)
+ Error.captureStackTrace(this, HTTPParserError)
+ this.name = 'HTTPParserError'
+ this.code = code ? `HPE_${code}` : undefined
+ this.data = data ? data.toString() : undefined
+ }
+}
+
+class ResponseExceededMaxSizeError extends UndiciError {
+ constructor (message) {
+ super(message)
+ Error.captureStackTrace(this, ResponseExceededMaxSizeError)
+ this.name = 'ResponseExceededMaxSizeError'
+ this.message = message || 'Response content exceeded max size'
+ this.code = 'UND_ERR_RES_EXCEEDED_MAX_SIZE'
+ }
+}
+
+module.exports = {
+ HTTPParserError,
+ UndiciError,
+ HeadersTimeoutError,
+ HeadersOverflowError,
+ BodyTimeoutError,
+ RequestContentLengthMismatchError,
+ ConnectTimeoutError,
+ ResponseStatusCodeError,
+ InvalidArgumentError,
+ InvalidReturnValueError,
+ RequestAbortedError,
+ ClientDestroyedError,
+ ClientClosedError,
+ InformationalError,
+ SocketError,
+ NotSupportedError,
+ ResponseContentLengthMismatchError,
+ BalancedPoolMissingUpstreamError,
+ ResponseExceededMaxSizeError
+}
+
+
+/***/ }),
+
+/***/ 62905:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+"use strict";
+
+
+const {
+ InvalidArgumentError,
+ NotSupportedError
+} = __nccwpck_require__(48045)
+const assert = __nccwpck_require__(39491)
+const { kHTTP2BuildRequest, kHTTP2CopyHeaders, kHTTP1BuildRequest } = __nccwpck_require__(72785)
+const util = __nccwpck_require__(83983)
+
+// tokenRegExp and headerCharRegex have been lifted from
+// https://github.com/nodejs/node/blob/main/lib/_http_common.js
+
+/**
+ * Verifies that the given val is a valid HTTP token
+ * per the rules defined in RFC 7230
+ * See https://tools.ietf.org/html/rfc7230#section-3.2.6
+ */
+const tokenRegExp = /^[\^_`a-zA-Z\-0-9!#$%&'*+.|~]+$/
+
+/**
+ * Matches if val contains an invalid field-vchar
+ * field-value = *( field-content / obs-fold )
+ * field-content = field-vchar [ 1*( SP / HTAB ) field-vchar ]
+ * field-vchar = VCHAR / obs-text
+ */
+const headerCharRegex = /[^\t\x20-\x7e\x80-\xff]/
+
+// Verifies that a given path is valid does not contain control chars \x00 to \x20
+const invalidPathRegex = /[^\u0021-\u00ff]/
+
+const kHandler = Symbol('handler')
+
+const channels = {}
+
+let extractBody
+
+try {
+ const diagnosticsChannel = __nccwpck_require__(67643)
+ channels.create = diagnosticsChannel.channel('undici:request:create')
+ channels.bodySent = diagnosticsChannel.channel('undici:request:bodySent')
+ channels.headers = diagnosticsChannel.channel('undici:request:headers')
+ channels.trailers = diagnosticsChannel.channel('undici:request:trailers')
+ channels.error = diagnosticsChannel.channel('undici:request:error')
+} catch {
+ channels.create = { hasSubscribers: false }
+ channels.bodySent = { hasSubscribers: false }
+ channels.headers = { hasSubscribers: false }
+ channels.trailers = { hasSubscribers: false }
+ channels.error = { hasSubscribers: false }
+}
+
+class Request {
+ constructor (origin, {
+ path,
+ method,
+ body,
+ headers,
+ query,
+ idempotent,
+ blocking,
+ upgrade,
+ headersTimeout,
+ bodyTimeout,
+ reset,
+ throwOnError,
+ expectContinue
+ }, handler) {
+ if (typeof path !== 'string') {
+ throw new InvalidArgumentError('path must be a string')
+ } else if (
+ path[0] !== '/' &&
+ !(path.startsWith('http://') || path.startsWith('https://')) &&
+ method !== 'CONNECT'
+ ) {
+ throw new InvalidArgumentError('path must be an absolute URL or start with a slash')
+ } else if (invalidPathRegex.exec(path) !== null) {
+ throw new InvalidArgumentError('invalid request path')
+ }
+
+ if (typeof method !== 'string') {
+ throw new InvalidArgumentError('method must be a string')
+ } else if (tokenRegExp.exec(method) === null) {
+ throw new InvalidArgumentError('invalid request method')
+ }
+
+ if (upgrade && typeof upgrade !== 'string') {
+ throw new InvalidArgumentError('upgrade must be a string')
+ }
+
+ if (headersTimeout != null && (!Number.isFinite(headersTimeout) || headersTimeout < 0)) {
+ throw new InvalidArgumentError('invalid headersTimeout')
+ }
+
+ if (bodyTimeout != null && (!Number.isFinite(bodyTimeout) || bodyTimeout < 0)) {
+ throw new InvalidArgumentError('invalid bodyTimeout')
+ }
+
+ if (reset != null && typeof reset !== 'boolean') {
+ throw new InvalidArgumentError('invalid reset')
+ }
+
+ if (expectContinue != null && typeof expectContinue !== 'boolean') {
+ throw new InvalidArgumentError('invalid expectContinue')
+ }
+
+ this.headersTimeout = headersTimeout
+
+ this.bodyTimeout = bodyTimeout
+
+ this.throwOnError = throwOnError === true
+
+ this.method = method
+
+ if (body == null) {
+ this.body = null
+ } else if (util.isStream(body)) {
+ this.body = body
+ } else if (util.isBuffer(body)) {
+ this.body = body.byteLength ? body : null
+ } else if (ArrayBuffer.isView(body)) {
+ this.body = body.buffer.byteLength ? Buffer.from(body.buffer, body.byteOffset, body.byteLength) : null
+ } else if (body instanceof ArrayBuffer) {
+ this.body = body.byteLength ? Buffer.from(body) : null
+ } else if (typeof body === 'string') {
+ this.body = body.length ? Buffer.from(body) : null
+ } else if (util.isFormDataLike(body) || util.isIterable(body) || util.isBlobLike(body)) {
+ this.body = body
+ } else {
+ throw new InvalidArgumentError('body must be a string, a Buffer, a Readable stream, an iterable, or an async iterable')
+ }
+
+ this.completed = false
+
+ this.aborted = false
+
+ this.upgrade = upgrade || null
+
+ this.path = query ? util.buildURL(path, query) : path
+
+ this.origin = origin
+
+ this.idempotent = idempotent == null
+ ? method === 'HEAD' || method === 'GET'
+ : idempotent
+
+ this.blocking = blocking == null ? false : blocking
+
+ this.reset = reset == null ? null : reset
+
+ this.host = null
+
+ this.contentLength = null
+
+ this.contentType = null
+
+ this.headers = ''
+
+ // Only for H2
+ this.expectContinue = expectContinue != null ? expectContinue : false
+
+ if (Array.isArray(headers)) {
+ if (headers.length % 2 !== 0) {
+ throw new InvalidArgumentError('headers array must be even')
+ }
+ for (let i = 0; i < headers.length; i += 2) {
+ processHeader(this, headers[i], headers[i + 1])
+ }
+ } else if (headers && typeof headers === 'object') {
+ const keys = Object.keys(headers)
+ for (let i = 0; i < keys.length; i++) {
+ const key = keys[i]
+ processHeader(this, key, headers[key])
+ }
+ } else if (headers != null) {
+ throw new InvalidArgumentError('headers must be an object or an array')
+ }
+
+ if (util.isFormDataLike(this.body)) {
+ if (util.nodeMajor < 16 || (util.nodeMajor === 16 && util.nodeMinor < 8)) {
+ throw new InvalidArgumentError('Form-Data bodies are only supported in node v16.8 and newer.')
+ }
+
+ if (!extractBody) {
+ extractBody = (__nccwpck_require__(41472).extractBody)
+ }
+
+ const [bodyStream, contentType] = extractBody(body)
+ if (this.contentType == null) {
+ this.contentType = contentType
+ this.headers += `content-type: ${contentType}\r\n`
+ }
+ this.body = bodyStream.stream
+ this.contentLength = bodyStream.length
+ } else if (util.isBlobLike(body) && this.contentType == null && body.type) {
+ this.contentType = body.type
+ this.headers += `content-type: ${body.type}\r\n`
+ }
+
+ util.validateHandler(handler, method, upgrade)
+
+ this.servername = util.getServerName(this.host)
+
+ this[kHandler] = handler
+
+ if (channels.create.hasSubscribers) {
+ channels.create.publish({ request: this })
+ }
+ }
+
+ onBodySent (chunk) {
+ if (this[kHandler].onBodySent) {
+ try {
+ this[kHandler].onBodySent(chunk)
+ } catch (err) {
+ this.onError(err)
+ }
+ }
+ }
+
+ onRequestSent () {
+ if (channels.bodySent.hasSubscribers) {
+ channels.bodySent.publish({ request: this })
+ }
+ }
+
+ onConnect (abort) {
+ assert(!this.aborted)
+ assert(!this.completed)
+
+ return this[kHandler].onConnect(abort)
+ }
+
+ onHeaders (statusCode, headers, resume, statusText) {
+ assert(!this.aborted)
+ assert(!this.completed)
+
+ if (channels.headers.hasSubscribers) {
+ channels.headers.publish({ request: this, response: { statusCode, headers, statusText } })
+ }
+
+ return this[kHandler].onHeaders(statusCode, headers, resume, statusText)
+ }
+
+ onData (chunk) {
+ assert(!this.aborted)
+ assert(!this.completed)
+
+ return this[kHandler].onData(chunk)
+ }
+
+ onUpgrade (statusCode, headers, socket) {
+ assert(!this.aborted)
+ assert(!this.completed)
+
+ return this[kHandler].onUpgrade(statusCode, headers, socket)
+ }
+
+ onComplete (trailers) {
+ assert(!this.aborted)
+
+ this.completed = true
+ if (channels.trailers.hasSubscribers) {
+ channels.trailers.publish({ request: this, trailers })
+ }
+ return this[kHandler].onComplete(trailers)
+ }
+
+ onError (error) {
+ if (channels.error.hasSubscribers) {
+ channels.error.publish({ request: this, error })
+ }
+
+ if (this.aborted) {
+ return
+ }
+ this.aborted = true
+ return this[kHandler].onError(error)
+ }
+
+ // TODO: adjust to support H2
+ addHeader (key, value) {
+ processHeader(this, key, value)
+ return this
+ }
+
+ static [kHTTP1BuildRequest] (origin, opts, handler) {
+ // TODO: Migrate header parsing here, to make Requests
+ // HTTP agnostic
+ return new Request(origin, opts, handler)
+ }
+
+ static [kHTTP2BuildRequest] (origin, opts, handler) {
+ const headers = opts.headers
+ opts = { ...opts, headers: null }
+
+ const request = new Request(origin, opts, handler)
+
+ request.headers = {}
+
+ if (Array.isArray(headers)) {
+ if (headers.length % 2 !== 0) {
+ throw new InvalidArgumentError('headers array must be even')
+ }
+ for (let i = 0; i < headers.length; i += 2) {
+ processHeader(request, headers[i], headers[i + 1], true)
+ }
+ } else if (headers && typeof headers === 'object') {
+ const keys = Object.keys(headers)
+ for (let i = 0; i < keys.length; i++) {
+ const key = keys[i]
+ processHeader(request, key, headers[key], true)
+ }
+ } else if (headers != null) {
+ throw new InvalidArgumentError('headers must be an object or an array')
+ }
+
+ return request
+ }
+
+ static [kHTTP2CopyHeaders] (raw) {
+ const rawHeaders = raw.split('\r\n')
+ const headers = {}
+
+ for (const header of rawHeaders) {
+ const [key, value] = header.split(': ')
+
+ if (value == null || value.length === 0) continue
+
+ if (headers[key]) headers[key] += `,${value}`
+ else headers[key] = value
+ }
+
+ return headers
+ }
+}
+
+function processHeaderValue (key, val, skipAppend) {
+ if (val && typeof val === 'object') {
+ throw new InvalidArgumentError(`invalid ${key} header`)
+ }
+
+ val = val != null ? `${val}` : ''
+
+ if (headerCharRegex.exec(val) !== null) {
+ throw new InvalidArgumentError(`invalid ${key} header`)
+ }
+
+ return skipAppend ? val : `${key}: ${val}\r\n`
+}
+
+function processHeader (request, key, val, skipAppend = false) {
+ if (val && (typeof val === 'object' && !Array.isArray(val))) {
+ throw new InvalidArgumentError(`invalid ${key} header`)
+ } else if (val === undefined) {
+ return
+ }
+
+ if (
+ request.host === null &&
+ key.length === 4 &&
+ key.toLowerCase() === 'host'
+ ) {
+ if (headerCharRegex.exec(val) !== null) {
+ throw new InvalidArgumentError(`invalid ${key} header`)
+ }
+ // Consumed by Client
+ request.host = val
+ } else if (
+ request.contentLength === null &&
+ key.length === 14 &&
+ key.toLowerCase() === 'content-length'
+ ) {
+ request.contentLength = parseInt(val, 10)
+ if (!Number.isFinite(request.contentLength)) {
+ throw new InvalidArgumentError('invalid content-length header')
+ }
+ } else if (
+ request.contentType === null &&
+ key.length === 12 &&
+ key.toLowerCase() === 'content-type'
+ ) {
+ request.contentType = val
+ if (skipAppend) request.headers[key] = processHeaderValue(key, val, skipAppend)
+ else request.headers += processHeaderValue(key, val)
+ } else if (
+ key.length === 17 &&
+ key.toLowerCase() === 'transfer-encoding'
+ ) {
+ throw new InvalidArgumentError('invalid transfer-encoding header')
+ } else if (
+ key.length === 10 &&
+ key.toLowerCase() === 'connection'
+ ) {
+ const value = typeof val === 'string' ? val.toLowerCase() : null
+ if (value !== 'close' && value !== 'keep-alive') {
+ throw new InvalidArgumentError('invalid connection header')
+ } else if (value === 'close') {
+ request.reset = true
+ }
+ } else if (
+ key.length === 10 &&
+ key.toLowerCase() === 'keep-alive'
+ ) {
+ throw new InvalidArgumentError('invalid keep-alive header')
+ } else if (
+ key.length === 7 &&
+ key.toLowerCase() === 'upgrade'
+ ) {
+ throw new InvalidArgumentError('invalid upgrade header')
+ } else if (
+ key.length === 6 &&
+ key.toLowerCase() === 'expect'
+ ) {
+ throw new NotSupportedError('expect header not supported')
+ } else if (tokenRegExp.exec(key) === null) {
+ throw new InvalidArgumentError('invalid header key')
+ } else {
+ if (Array.isArray(val)) {
+ for (let i = 0; i < val.length; i++) {
+ if (skipAppend) {
+ if (request.headers[key]) request.headers[key] += `,${processHeaderValue(key, val[i], skipAppend)}`
+ else request.headers[key] = processHeaderValue(key, val[i], skipAppend)
+ } else {
+ request.headers += processHeaderValue(key, val[i])
+ }
+ }
+ } else {
+ if (skipAppend) request.headers[key] = processHeaderValue(key, val, skipAppend)
+ else request.headers += processHeaderValue(key, val)
+ }
+ }
+}
+
+module.exports = Request
+
+
+/***/ }),
+
+/***/ 72785:
+/***/ ((module) => {
+
+module.exports = {
+ kClose: Symbol('close'),
+ kDestroy: Symbol('destroy'),
+ kDispatch: Symbol('dispatch'),
+ kUrl: Symbol('url'),
+ kWriting: Symbol('writing'),
+ kResuming: Symbol('resuming'),
+ kQueue: Symbol('queue'),
+ kConnect: Symbol('connect'),
+ kConnecting: Symbol('connecting'),
+ kHeadersList: Symbol('headers list'),
+ kKeepAliveDefaultTimeout: Symbol('default keep alive timeout'),
+ kKeepAliveMaxTimeout: Symbol('max keep alive timeout'),
+ kKeepAliveTimeoutThreshold: Symbol('keep alive timeout threshold'),
+ kKeepAliveTimeoutValue: Symbol('keep alive timeout'),
+ kKeepAlive: Symbol('keep alive'),
+ kHeadersTimeout: Symbol('headers timeout'),
+ kBodyTimeout: Symbol('body timeout'),
+ kServerName: Symbol('server name'),
+ kLocalAddress: Symbol('local address'),
+ kHost: Symbol('host'),
+ kNoRef: Symbol('no ref'),
+ kBodyUsed: Symbol('used'),
+ kRunning: Symbol('running'),
+ kBlocking: Symbol('blocking'),
+ kPending: Symbol('pending'),
+ kSize: Symbol('size'),
+ kBusy: Symbol('busy'),
+ kQueued: Symbol('queued'),
+ kFree: Symbol('free'),
+ kConnected: Symbol('connected'),
+ kClosed: Symbol('closed'),
+ kNeedDrain: Symbol('need drain'),
+ kReset: Symbol('reset'),
+ kDestroyed: Symbol.for('nodejs.stream.destroyed'),
+ kMaxHeadersSize: Symbol('max headers size'),
+ kRunningIdx: Symbol('running index'),
+ kPendingIdx: Symbol('pending index'),
+ kError: Symbol('error'),
+ kClients: Symbol('clients'),
+ kClient: Symbol('client'),
+ kParser: Symbol('parser'),
+ kOnDestroyed: Symbol('destroy callbacks'),
+ kPipelining: Symbol('pipelining'),
+ kSocket: Symbol('socket'),
+ kHostHeader: Symbol('host header'),
+ kConnector: Symbol('connector'),
+ kStrictContentLength: Symbol('strict content length'),
+ kMaxRedirections: Symbol('maxRedirections'),
+ kMaxRequests: Symbol('maxRequestsPerClient'),
+ kProxy: Symbol('proxy agent options'),
+ kCounter: Symbol('socket request counter'),
+ kInterceptors: Symbol('dispatch interceptors'),
+ kMaxResponseSize: Symbol('max response size'),
+ kHTTP2Session: Symbol('http2Session'),
+ kHTTP2SessionState: Symbol('http2Session state'),
+ kHTTP2BuildRequest: Symbol('http2 build request'),
+ kHTTP1BuildRequest: Symbol('http1 build request'),
+ kHTTP2CopyHeaders: Symbol('http2 copy headers'),
+ kHTTPConnVersion: Symbol('http connection version')
+}
+
+
+/***/ }),
+
+/***/ 83983:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+"use strict";
+
+
+const assert = __nccwpck_require__(39491)
+const { kDestroyed, kBodyUsed } = __nccwpck_require__(72785)
+const { IncomingMessage } = __nccwpck_require__(13685)
+const stream = __nccwpck_require__(12781)
+const net = __nccwpck_require__(41808)
+const { InvalidArgumentError } = __nccwpck_require__(48045)
+const { Blob } = __nccwpck_require__(14300)
+const nodeUtil = __nccwpck_require__(73837)
+const { stringify } = __nccwpck_require__(63477)
+
+const [nodeMajor, nodeMinor] = process.versions.node.split('.').map(v => Number(v))
+
+function nop () {}
+
+function isStream (obj) {
+ return obj && typeof obj === 'object' && typeof obj.pipe === 'function' && typeof obj.on === 'function'
+}
+
+// based on https://github.com/node-fetch/fetch-blob/blob/8ab587d34080de94140b54f07168451e7d0b655e/index.js#L229-L241 (MIT License)
+function isBlobLike (object) {
+ return (Blob && object instanceof Blob) || (
+ object &&
+ typeof object === 'object' &&
+ (typeof object.stream === 'function' ||
+ typeof object.arrayBuffer === 'function') &&
+ /^(Blob|File)$/.test(object[Symbol.toStringTag])
+ )
+}
+
+function buildURL (url, queryParams) {
+ if (url.includes('?') || url.includes('#')) {
+ throw new Error('Query params cannot be passed when url already contains "?" or "#".')
+ }
+
+ const stringified = stringify(queryParams)
+
+ if (stringified) {
+ url += '?' + stringified
+ }
+
+ return url
+}
+
+function parseURL (url) {
+ if (typeof url === 'string') {
+ url = new URL(url)
+
+ if (!/^https?:/.test(url.origin || url.protocol)) {
+ throw new InvalidArgumentError('Invalid URL protocol: the URL must start with `http:` or `https:`.')
+ }
+
+ return url
+ }
+
+ if (!url || typeof url !== 'object') {
+ throw new InvalidArgumentError('Invalid URL: The URL argument must be a non-null object.')
+ }
+
+ if (!/^https?:/.test(url.origin || url.protocol)) {
+ throw new InvalidArgumentError('Invalid URL protocol: the URL must start with `http:` or `https:`.')
+ }
+
+ if (!(url instanceof URL)) {
+ if (url.port != null && url.port !== '' && !Number.isFinite(parseInt(url.port))) {
+ throw new InvalidArgumentError('Invalid URL: port must be a valid integer or a string representation of an integer.')
+ }
+
+ if (url.path != null && typeof url.path !== 'string') {
+ throw new InvalidArgumentError('Invalid URL path: the path must be a string or null/undefined.')
+ }
+
+ if (url.pathname != null && typeof url.pathname !== 'string') {
+ throw new InvalidArgumentError('Invalid URL pathname: the pathname must be a string or null/undefined.')
+ }
+
+ if (url.hostname != null && typeof url.hostname !== 'string') {
+ throw new InvalidArgumentError('Invalid URL hostname: the hostname must be a string or null/undefined.')
+ }
+
+ if (url.origin != null && typeof url.origin !== 'string') {
+ throw new InvalidArgumentError('Invalid URL origin: the origin must be a string or null/undefined.')
+ }
+
+ const port = url.port != null
+ ? url.port
+ : (url.protocol === 'https:' ? 443 : 80)
+ let origin = url.origin != null
+ ? url.origin
+ : `${url.protocol}//${url.hostname}:${port}`
+ let path = url.path != null
+ ? url.path
+ : `${url.pathname || ''}${url.search || ''}`
+
+ if (origin.endsWith('/')) {
+ origin = origin.substring(0, origin.length - 1)
+ }
+
+ if (path && !path.startsWith('/')) {
+ path = `/${path}`
+ }
+ // new URL(path, origin) is unsafe when `path` contains an absolute URL
+ // From https://developer.mozilla.org/en-US/docs/Web/API/URL/URL:
+ // If first parameter is a relative URL, second param is required, and will be used as the base URL.
+ // If first parameter is an absolute URL, a given second param will be ignored.
+ url = new URL(origin + path)
+ }
+
+ return url
+}
+
+function parseOrigin (url) {
+ url = parseURL(url)
+
+ if (url.pathname !== '/' || url.search || url.hash) {
+ throw new InvalidArgumentError('invalid url')
+ }
+
+ return url
+}
+
+function getHostname (host) {
+ if (host[0] === '[') {
+ const idx = host.indexOf(']')
+
+ assert(idx !== -1)
+ return host.substr(1, idx - 1)
+ }
+
+ const idx = host.indexOf(':')
+ if (idx === -1) return host
+
+ return host.substr(0, idx)
+}
+
+// IP addresses are not valid server names per RFC6066
+// > Currently, the only server names supported are DNS hostnames
+function getServerName (host) {
+ if (!host) {
+ return null
+ }
+
+ assert.strictEqual(typeof host, 'string')
+
+ const servername = getHostname(host)
+ if (net.isIP(servername)) {
+ return ''
+ }
+
+ return servername
+}
+
+function deepClone (obj) {
+ return JSON.parse(JSON.stringify(obj))
+}
+
+function isAsyncIterable (obj) {
+ return !!(obj != null && typeof obj[Symbol.asyncIterator] === 'function')
+}
+
+function isIterable (obj) {
+ return !!(obj != null && (typeof obj[Symbol.iterator] === 'function' || typeof obj[Symbol.asyncIterator] === 'function'))
+}
+
+function bodyLength (body) {
+ if (body == null) {
+ return 0
+ } else if (isStream(body)) {
+ const state = body._readableState
+ return state && state.objectMode === false && state.ended === true && Number.isFinite(state.length)
+ ? state.length
+ : null
+ } else if (isBlobLike(body)) {
+ return body.size != null ? body.size : null
+ } else if (isBuffer(body)) {
+ return body.byteLength
+ }
+
+ return null
+}
+
+function isDestroyed (stream) {
+ return !stream || !!(stream.destroyed || stream[kDestroyed])
+}
+
+function isReadableAborted (stream) {
+ const state = stream && stream._readableState
+ return isDestroyed(stream) && state && !state.endEmitted
+}
+
+function destroy (stream, err) {
+ if (!isStream(stream) || isDestroyed(stream)) {
+ return
+ }
+
+ if (typeof stream.destroy === 'function') {
+ if (Object.getPrototypeOf(stream).constructor === IncomingMessage) {
+ // See: https://github.com/nodejs/node/pull/38505/files
+ stream.socket = null
+ }
+
+ stream.destroy(err)
+ } else if (err) {
+ process.nextTick((stream, err) => {
+ stream.emit('error', err)
+ }, stream, err)
+ }
+
+ if (stream.destroyed !== true) {
+ stream[kDestroyed] = true
+ }
+}
+
+const KEEPALIVE_TIMEOUT_EXPR = /timeout=(\d+)/
+function parseKeepAliveTimeout (val) {
+ const m = val.toString().match(KEEPALIVE_TIMEOUT_EXPR)
+ return m ? parseInt(m[1], 10) * 1000 : null
+}
+
+function parseHeaders (headers, obj = {}) {
+ // For H2 support
+ if (!Array.isArray(headers)) return headers
+
+ for (let i = 0; i < headers.length; i += 2) {
+ const key = headers[i].toString().toLowerCase()
+ let val = obj[key]
+
+ if (!val) {
+ if (Array.isArray(headers[i + 1])) {
+ obj[key] = headers[i + 1]
+ } else {
+ obj[key] = headers[i + 1].toString('utf8')
+ }
+ } else {
+ if (!Array.isArray(val)) {
+ val = [val]
+ obj[key] = val
+ }
+ val.push(headers[i + 1].toString('utf8'))
+ }
+ }
+
+ // See https://github.com/nodejs/node/pull/46528
+ if ('content-length' in obj && 'content-disposition' in obj) {
+ obj['content-disposition'] = Buffer.from(obj['content-disposition']).toString('latin1')
+ }
+
+ return obj
+}
+
+function parseRawHeaders (headers) {
+ const ret = []
+ let hasContentLength = false
+ let contentDispositionIdx = -1
+
+ for (let n = 0; n < headers.length; n += 2) {
+ const key = headers[n + 0].toString()
+ const val = headers[n + 1].toString('utf8')
+
+ if (key.length === 14 && (key === 'content-length' || key.toLowerCase() === 'content-length')) {
+ ret.push(key, val)
+ hasContentLength = true
+ } else if (key.length === 19 && (key === 'content-disposition' || key.toLowerCase() === 'content-disposition')) {
+ contentDispositionIdx = ret.push(key, val) - 1
+ } else {
+ ret.push(key, val)
+ }
+ }
+
+ // See https://github.com/nodejs/node/pull/46528
+ if (hasContentLength && contentDispositionIdx !== -1) {
+ ret[contentDispositionIdx] = Buffer.from(ret[contentDispositionIdx]).toString('latin1')
+ }
+
+ return ret
+}
+
+function isBuffer (buffer) {
+ // See, https://github.com/mcollina/undici/pull/319
+ return buffer instanceof Uint8Array || Buffer.isBuffer(buffer)
+}
+
+function validateHandler (handler, method, upgrade) {
+ if (!handler || typeof handler !== 'object') {
+ throw new InvalidArgumentError('handler must be an object')
+ }
+
+ if (typeof handler.onConnect !== 'function') {
+ throw new InvalidArgumentError('invalid onConnect method')
+ }
+
+ if (typeof handler.onError !== 'function') {
+ throw new InvalidArgumentError('invalid onError method')
+ }
+
+ if (typeof handler.onBodySent !== 'function' && handler.onBodySent !== undefined) {
+ throw new InvalidArgumentError('invalid onBodySent method')
+ }
+
+ if (upgrade || method === 'CONNECT') {
+ if (typeof handler.onUpgrade !== 'function') {
+ throw new InvalidArgumentError('invalid onUpgrade method')
+ }
+ } else {
+ if (typeof handler.onHeaders !== 'function') {
+ throw new InvalidArgumentError('invalid onHeaders method')
+ }
+
+ if (typeof handler.onData !== 'function') {
+ throw new InvalidArgumentError('invalid onData method')
+ }
+
+ if (typeof handler.onComplete !== 'function') {
+ throw new InvalidArgumentError('invalid onComplete method')
+ }
+ }
+}
+
+// A body is disturbed if it has been read from and it cannot
+// be re-used without losing state or data.
+function isDisturbed (body) {
+ return !!(body && (
+ stream.isDisturbed
+ ? stream.isDisturbed(body) || body[kBodyUsed] // TODO (fix): Why is body[kBodyUsed] needed?
+ : body[kBodyUsed] ||
+ body.readableDidRead ||
+ (body._readableState && body._readableState.dataEmitted) ||
+ isReadableAborted(body)
+ ))
+}
+
+function isErrored (body) {
+ return !!(body && (
+ stream.isErrored
+ ? stream.isErrored(body)
+ : /state: 'errored'/.test(nodeUtil.inspect(body)
+ )))
+}
+
+function isReadable (body) {
+ return !!(body && (
+ stream.isReadable
+ ? stream.isReadable(body)
+ : /state: 'readable'/.test(nodeUtil.inspect(body)
+ )))
+}
+
+function getSocketInfo (socket) {
+ return {
+ localAddress: socket.localAddress,
+ localPort: socket.localPort,
+ remoteAddress: socket.remoteAddress,
+ remotePort: socket.remotePort,
+ remoteFamily: socket.remoteFamily,
+ timeout: socket.timeout,
+ bytesWritten: socket.bytesWritten,
+ bytesRead: socket.bytesRead
+ }
+}
+
+async function * convertIterableToBuffer (iterable) {
+ for await (const chunk of iterable) {
+ yield Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk)
+ }
+}
+
+let ReadableStream
+function ReadableStreamFrom (iterable) {
+ if (!ReadableStream) {
+ ReadableStream = (__nccwpck_require__(35356).ReadableStream)
+ }
+
+ if (ReadableStream.from) {
+ return ReadableStream.from(convertIterableToBuffer(iterable))
+ }
+
+ let iterator
+ return new ReadableStream(
+ {
+ async start () {
+ iterator = iterable[Symbol.asyncIterator]()
+ },
+ async pull (controller) {
+ const { done, value } = await iterator.next()
+ if (done) {
+ queueMicrotask(() => {
+ controller.close()
+ })
+ } else {
+ const buf = Buffer.isBuffer(value) ? value : Buffer.from(value)
+ controller.enqueue(new Uint8Array(buf))
+ }
+ return controller.desiredSize > 0
+ },
+ async cancel (reason) {
+ await iterator.return()
+ }
+ },
+ 0
+ )
+}
+
+// The chunk should be a FormData instance and contains
+// all the required methods.
+function isFormDataLike (object) {
+ return (
+ object &&
+ typeof object === 'object' &&
+ typeof object.append === 'function' &&
+ typeof object.delete === 'function' &&
+ typeof object.get === 'function' &&
+ typeof object.getAll === 'function' &&
+ typeof object.has === 'function' &&
+ typeof object.set === 'function' &&
+ object[Symbol.toStringTag] === 'FormData'
+ )
+}
+
+function throwIfAborted (signal) {
+ if (!signal) { return }
+ if (typeof signal.throwIfAborted === 'function') {
+ signal.throwIfAborted()
+ } else {
+ if (signal.aborted) {
+ // DOMException not available < v17.0.0
+ const err = new Error('The operation was aborted')
+ err.name = 'AbortError'
+ throw err
+ }
+ }
+}
+
+let events
+function addAbortListener (signal, listener) {
+ if (typeof Symbol.dispose === 'symbol') {
+ if (!events) {
+ events = __nccwpck_require__(82361)
+ }
+ if (typeof events.addAbortListener === 'function' && 'aborted' in signal) {
+ return events.addAbortListener(signal, listener)
+ }
+ }
+ if ('addEventListener' in signal) {
+ signal.addEventListener('abort', listener, { once: true })
+ return () => signal.removeEventListener('abort', listener)
+ }
+ signal.addListener('abort', listener)
+ return () => signal.removeListener('abort', listener)
+}
+
+const hasToWellFormed = !!String.prototype.toWellFormed
+
+/**
+ * @param {string} val
+ */
+function toUSVString (val) {
+ if (hasToWellFormed) {
+ return `${val}`.toWellFormed()
+ } else if (nodeUtil.toUSVString) {
+ return nodeUtil.toUSVString(val)
+ }
+
+ return `${val}`
+}
+
+const kEnumerableProperty = Object.create(null)
+kEnumerableProperty.enumerable = true
+
+module.exports = {
+ kEnumerableProperty,
+ nop,
+ isDisturbed,
+ isErrored,
+ isReadable,
+ toUSVString,
+ isReadableAborted,
+ isBlobLike,
+ parseOrigin,
+ parseURL,
+ getServerName,
+ isStream,
+ isIterable,
+ isAsyncIterable,
+ isDestroyed,
+ parseRawHeaders,
+ parseHeaders,
+ parseKeepAliveTimeout,
+ destroy,
+ bodyLength,
+ deepClone,
+ ReadableStreamFrom,
+ isBuffer,
+ validateHandler,
+ getSocketInfo,
+ isFormDataLike,
+ buildURL,
+ throwIfAborted,
+ addAbortListener,
+ nodeMajor,
+ nodeMinor,
+ nodeHasAutoSelectFamily: nodeMajor > 18 || (nodeMajor === 18 && nodeMinor >= 13)
+}
+
+
+/***/ }),
+
+/***/ 74839:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+"use strict";
+
+
+const Dispatcher = __nccwpck_require__(60412)
+const {
+ ClientDestroyedError,
+ ClientClosedError,
+ InvalidArgumentError
+} = __nccwpck_require__(48045)
+const { kDestroy, kClose, kDispatch, kInterceptors } = __nccwpck_require__(72785)
+
+const kDestroyed = Symbol('destroyed')
+const kClosed = Symbol('closed')
+const kOnDestroyed = Symbol('onDestroyed')
+const kOnClosed = Symbol('onClosed')
+const kInterceptedDispatch = Symbol('Intercepted Dispatch')
+
+class DispatcherBase extends Dispatcher {
+ constructor () {
+ super()
+
+ this[kDestroyed] = false
+ this[kOnDestroyed] = null
+ this[kClosed] = false
+ this[kOnClosed] = []
+ }
+
+ get destroyed () {
+ return this[kDestroyed]
+ }
+
+ get closed () {
+ return this[kClosed]
+ }
+
+ get interceptors () {
+ return this[kInterceptors]
+ }
+
+ set interceptors (newInterceptors) {
+ if (newInterceptors) {
+ for (let i = newInterceptors.length - 1; i >= 0; i--) {
+ const interceptor = this[kInterceptors][i]
+ if (typeof interceptor !== 'function') {
+ throw new InvalidArgumentError('interceptor must be an function')
+ }
+ }
+ }
+
+ this[kInterceptors] = newInterceptors
+ }
+
+ close (callback) {
+ if (callback === undefined) {
+ return new Promise((resolve, reject) => {
+ this.close((err, data) => {
+ return err ? reject(err) : resolve(data)
+ })
+ })
+ }
+
+ if (typeof callback !== 'function') {
+ throw new InvalidArgumentError('invalid callback')
+ }
+
+ if (this[kDestroyed]) {
+ queueMicrotask(() => callback(new ClientDestroyedError(), null))
+ return
+ }
+
+ if (this[kClosed]) {
+ if (this[kOnClosed]) {
+ this[kOnClosed].push(callback)
+ } else {
+ queueMicrotask(() => callback(null, null))
+ }
+ return
+ }
+
+ this[kClosed] = true
+ this[kOnClosed].push(callback)
+
+ const onClosed = () => {
+ const callbacks = this[kOnClosed]
+ this[kOnClosed] = null
+ for (let i = 0; i < callbacks.length; i++) {
+ callbacks[i](null, null)
+ }
+ }
+
+ // Should not error.
+ this[kClose]()
+ .then(() => this.destroy())
+ .then(() => {
+ queueMicrotask(onClosed)
+ })
+ }
+
+ destroy (err, callback) {
+ if (typeof err === 'function') {
+ callback = err
+ err = null
+ }
+
+ if (callback === undefined) {
+ return new Promise((resolve, reject) => {
+ this.destroy(err, (err, data) => {
+ return err ? /* istanbul ignore next: should never error */ reject(err) : resolve(data)
+ })
+ })
+ }
+
+ if (typeof callback !== 'function') {
+ throw new InvalidArgumentError('invalid callback')
+ }
+
+ if (this[kDestroyed]) {
+ if (this[kOnDestroyed]) {
+ this[kOnDestroyed].push(callback)
+ } else {
+ queueMicrotask(() => callback(null, null))
+ }
+ return
+ }
+
+ if (!err) {
+ err = new ClientDestroyedError()
+ }
+
+ this[kDestroyed] = true
+ this[kOnDestroyed] = this[kOnDestroyed] || []
+ this[kOnDestroyed].push(callback)
+
+ const onDestroyed = () => {
+ const callbacks = this[kOnDestroyed]
+ this[kOnDestroyed] = null
+ for (let i = 0; i < callbacks.length; i++) {
+ callbacks[i](null, null)
+ }
+ }
+
+ // Should not error.
+ this[kDestroy](err).then(() => {
+ queueMicrotask(onDestroyed)
+ })
+ }
+
+ [kInterceptedDispatch] (opts, handler) {
+ if (!this[kInterceptors] || this[kInterceptors].length === 0) {
+ this[kInterceptedDispatch] = this[kDispatch]
+ return this[kDispatch](opts, handler)
+ }
+
+ let dispatch = this[kDispatch].bind(this)
+ for (let i = this[kInterceptors].length - 1; i >= 0; i--) {
+ dispatch = this[kInterceptors][i](dispatch)
+ }
+ this[kInterceptedDispatch] = dispatch
+ return dispatch(opts, handler)
+ }
+
+ dispatch (opts, handler) {
+ if (!handler || typeof handler !== 'object') {
+ throw new InvalidArgumentError('handler must be an object')
+ }
+
+ try {
+ if (!opts || typeof opts !== 'object') {
+ throw new InvalidArgumentError('opts must be an object.')
+ }
+
+ if (this[kDestroyed] || this[kOnDestroyed]) {
+ throw new ClientDestroyedError()
+ }
+
+ if (this[kClosed]) {
+ throw new ClientClosedError()
+ }
+
+ return this[kInterceptedDispatch](opts, handler)
+ } catch (err) {
+ if (typeof handler.onError !== 'function') {
+ throw new InvalidArgumentError('invalid onError method')
+ }
+
+ handler.onError(err)
+
+ return false
+ }
+ }
+}
+
+module.exports = DispatcherBase
+
+
+/***/ }),
+
+/***/ 60412:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+"use strict";
+
+
+const EventEmitter = __nccwpck_require__(82361)
+
+class Dispatcher extends EventEmitter {
+ dispatch () {
+ throw new Error('not implemented')
+ }
+
+ close () {
+ throw new Error('not implemented')
+ }
+
+ destroy () {
+ throw new Error('not implemented')
+ }
+}
+
+module.exports = Dispatcher
+
+
+/***/ }),
+
+/***/ 41472:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+"use strict";
+
+
+const Busboy = __nccwpck_require__(33438)
+const util = __nccwpck_require__(83983)
+const {
+ ReadableStreamFrom,
+ isBlobLike,
+ isReadableStreamLike,
+ readableStreamClose,
+ createDeferredPromise,
+ fullyReadBody
+} = __nccwpck_require__(52538)
+const { FormData } = __nccwpck_require__(72015)
+const { kState } = __nccwpck_require__(15861)
+const { webidl } = __nccwpck_require__(21744)
+const { DOMException, structuredClone } = __nccwpck_require__(41037)
+const { Blob, File: NativeFile } = __nccwpck_require__(14300)
+const { kBodyUsed } = __nccwpck_require__(72785)
+const assert = __nccwpck_require__(39491)
+const { isErrored } = __nccwpck_require__(83983)
+const { isUint8Array, isArrayBuffer } = __nccwpck_require__(29830)
+const { File: UndiciFile } = __nccwpck_require__(78511)
+const { parseMIMEType, serializeAMimeType } = __nccwpck_require__(685)
+
+let ReadableStream = globalThis.ReadableStream
+
+/** @type {globalThis['File']} */
+const File = NativeFile ?? UndiciFile
+
+// https://fetch.spec.whatwg.org/#concept-bodyinit-extract
+function extractBody (object, keepalive = false) {
+ if (!ReadableStream) {
+ ReadableStream = (__nccwpck_require__(35356).ReadableStream)
+ }
+
+ // 1. Let stream be null.
+ let stream = null
+
+ // 2. If object is a ReadableStream object, then set stream to object.
+ if (object instanceof ReadableStream) {
+ stream = object
+ } else if (isBlobLike(object)) {
+ // 3. Otherwise, if object is a Blob object, set stream to the
+ // result of running object’s get stream.
+ stream = object.stream()
+ } else {
+ // 4. Otherwise, set stream to a new ReadableStream object, and set
+ // up stream.
+ stream = new ReadableStream({
+ async pull (controller) {
+ controller.enqueue(
+ typeof source === 'string' ? new TextEncoder().encode(source) : source
+ )
+ queueMicrotask(() => readableStreamClose(controller))
+ },
+ start () {},
+ type: undefined
+ })
+ }
+
+ // 5. Assert: stream is a ReadableStream object.
+ assert(isReadableStreamLike(stream))
+
+ // 6. Let action be null.
+ let action = null
+
+ // 7. Let source be null.
+ let source = null
+
+ // 8. Let length be null.
+ let length = null
+
+ // 9. Let type be null.
+ let type = null
+
+ // 10. Switch on object:
+ if (typeof object === 'string') {
+ // Set source to the UTF-8 encoding of object.
+ // Note: setting source to a Uint8Array here breaks some mocking assumptions.
+ source = object
+
+ // Set type to `text/plain;charset=UTF-8`.
+ type = 'text/plain;charset=UTF-8'
+ } else if (object instanceof URLSearchParams) {
+ // URLSearchParams
+
+ // spec says to run application/x-www-form-urlencoded on body.list
+ // this is implemented in Node.js as apart of an URLSearchParams instance toString method
+ // See: https://github.com/nodejs/node/blob/e46c680bf2b211bbd52cf959ca17ee98c7f657f5/lib/internal/url.js#L490
+ // and https://github.com/nodejs/node/blob/e46c680bf2b211bbd52cf959ca17ee98c7f657f5/lib/internal/url.js#L1100
+
+ // Set source to the result of running the application/x-www-form-urlencoded serializer with object’s list.
+ source = object.toString()
+
+ // Set type to `application/x-www-form-urlencoded;charset=UTF-8`.
+ type = 'application/x-www-form-urlencoded;charset=UTF-8'
+ } else if (isArrayBuffer(object)) {
+ // BufferSource/ArrayBuffer
+
+ // Set source to a copy of the bytes held by object.
+ source = new Uint8Array(object.slice())
+ } else if (ArrayBuffer.isView(object)) {
+ // BufferSource/ArrayBufferView
+
+ // Set source to a copy of the bytes held by object.
+ source = new Uint8Array(object.buffer.slice(object.byteOffset, object.byteOffset + object.byteLength))
+ } else if (util.isFormDataLike(object)) {
+ const boundary = `----formdata-undici-0${`${Math.floor(Math.random() * 1e11)}`.padStart(11, '0')}`
+ const prefix = `--${boundary}\r\nContent-Disposition: form-data`
+
+ /*! formdata-polyfill. MIT License. Jimmy Wärting */
+ const escape = (str) =>
+ str.replace(/\n/g, '%0A').replace(/\r/g, '%0D').replace(/"/g, '%22')
+ const normalizeLinefeeds = (value) => value.replace(/\r?\n|\r/g, '\r\n')
+
+ // Set action to this step: run the multipart/form-data
+ // encoding algorithm, with object’s entry list and UTF-8.
+ // - This ensures that the body is immutable and can't be changed afterwords
+ // - That the content-length is calculated in advance.
+ // - And that all parts are pre-encoded and ready to be sent.
+
+ const enc = new TextEncoder()
+ const blobParts = []
+ const rn = new Uint8Array([13, 10]) // '\r\n'
+ length = 0
+ let hasUnknownSizeValue = false
+
+ for (const [name, value] of object) {
+ if (typeof value === 'string') {
+ const chunk = enc.encode(prefix +
+ `; name="${escape(normalizeLinefeeds(name))}"` +
+ `\r\n\r\n${normalizeLinefeeds(value)}\r\n`)
+ blobParts.push(chunk)
+ length += chunk.byteLength
+ } else {
+ const chunk = enc.encode(`${prefix}; name="${escape(normalizeLinefeeds(name))}"` +
+ (value.name ? `; filename="${escape(value.name)}"` : '') + '\r\n' +
+ `Content-Type: ${
+ value.type || 'application/octet-stream'
+ }\r\n\r\n`)
+ blobParts.push(chunk, value, rn)
+ if (typeof value.size === 'number') {
+ length += chunk.byteLength + value.size + rn.byteLength
+ } else {
+ hasUnknownSizeValue = true
+ }
+ }
+ }
+
+ const chunk = enc.encode(`--${boundary}--`)
+ blobParts.push(chunk)
+ length += chunk.byteLength
+ if (hasUnknownSizeValue) {
+ length = null
+ }
+
+ // Set source to object.
+ source = object
+
+ action = async function * () {
+ for (const part of blobParts) {
+ if (part.stream) {
+ yield * part.stream()
+ } else {
+ yield part
+ }
+ }
+ }
+
+ // Set type to `multipart/form-data; boundary=`,
+ // followed by the multipart/form-data boundary string generated
+ // by the multipart/form-data encoding algorithm.
+ type = 'multipart/form-data; boundary=' + boundary
+ } else if (isBlobLike(object)) {
+ // Blob
+
+ // Set source to object.
+ source = object
+
+ // Set length to object’s size.
+ length = object.size
+
+ // If object’s type attribute is not the empty byte sequence, set
+ // type to its value.
+ if (object.type) {
+ type = object.type
+ }
+ } else if (typeof object[Symbol.asyncIterator] === 'function') {
+ // If keepalive is true, then throw a TypeError.
+ if (keepalive) {
+ throw new TypeError('keepalive')
+ }
+
+ // If object is disturbed or locked, then throw a TypeError.
+ if (util.isDisturbed(object) || object.locked) {
+ throw new TypeError(
+ 'Response body object should not be disturbed or locked'
+ )
+ }
+
+ stream =
+ object instanceof ReadableStream ? object : ReadableStreamFrom(object)
+ }
+
+ // 11. If source is a byte sequence, then set action to a
+ // step that returns source and length to source’s length.
+ if (typeof source === 'string' || util.isBuffer(source)) {
+ length = Buffer.byteLength(source)
+ }
+
+ // 12. If action is non-null, then run these steps in in parallel:
+ if (action != null) {
+ // Run action.
+ let iterator
+ stream = new ReadableStream({
+ async start () {
+ iterator = action(object)[Symbol.asyncIterator]()
+ },
+ async pull (controller) {
+ const { value, done } = await iterator.next()
+ if (done) {
+ // When running action is done, close stream.
+ queueMicrotask(() => {
+ controller.close()
+ })
+ } else {
+ // Whenever one or more bytes are available and stream is not errored,
+ // enqueue a Uint8Array wrapping an ArrayBuffer containing the available
+ // bytes into stream.
+ if (!isErrored(stream)) {
+ controller.enqueue(new Uint8Array(value))
+ }
+ }
+ return controller.desiredSize > 0
+ },
+ async cancel (reason) {
+ await iterator.return()
+ },
+ type: undefined
+ })
+ }
+
+ // 13. Let body be a body whose stream is stream, source is source,
+ // and length is length.
+ const body = { stream, source, length }
+
+ // 14. Return (body, type).
+ return [body, type]
+}
+
+// https://fetch.spec.whatwg.org/#bodyinit-safely-extract
+function safelyExtractBody (object, keepalive = false) {
+ if (!ReadableStream) {
+ // istanbul ignore next
+ ReadableStream = (__nccwpck_require__(35356).ReadableStream)
+ }
+
+ // To safely extract a body and a `Content-Type` value from
+ // a byte sequence or BodyInit object object, run these steps:
+
+ // 1. If object is a ReadableStream object, then:
+ if (object instanceof ReadableStream) {
+ // Assert: object is neither disturbed nor locked.
+ // istanbul ignore next
+ assert(!util.isDisturbed(object), 'The body has already been consumed.')
+ // istanbul ignore next
+ assert(!object.locked, 'The stream is locked.')
+ }
+
+ // 2. Return the results of extracting object.
+ return extractBody(object, keepalive)
+}
+
+function cloneBody (body) {
+ // To clone a body body, run these steps:
+
+ // https://fetch.spec.whatwg.org/#concept-body-clone
+
+ // 1. Let « out1, out2 » be the result of teeing body’s stream.
+ const [out1, out2] = body.stream.tee()
+ const out2Clone = structuredClone(out2, { transfer: [out2] })
+ // This, for whatever reasons, unrefs out2Clone which allows
+ // the process to exit by itself.
+ const [, finalClone] = out2Clone.tee()
+
+ // 2. Set body’s stream to out1.
+ body.stream = out1
+
+ // 3. Return a body whose stream is out2 and other members are copied from body.
+ return {
+ stream: finalClone,
+ length: body.length,
+ source: body.source
+ }
+}
+
+async function * consumeBody (body) {
+ if (body) {
+ if (isUint8Array(body)) {
+ yield body
+ } else {
+ const stream = body.stream
+
+ if (util.isDisturbed(stream)) {
+ throw new TypeError('The body has already been consumed.')
+ }
+
+ if (stream.locked) {
+ throw new TypeError('The stream is locked.')
+ }
+
+ // Compat.
+ stream[kBodyUsed] = true
+
+ yield * stream
+ }
+ }
+}
+
+function throwIfAborted (state) {
+ if (state.aborted) {
+ throw new DOMException('The operation was aborted.', 'AbortError')
+ }
+}
+
+function bodyMixinMethods (instance) {
+ const methods = {
+ blob () {
+ // The blob() method steps are to return the result of
+ // running consume body with this and the following step
+ // given a byte sequence bytes: return a Blob whose
+ // contents are bytes and whose type attribute is this’s
+ // MIME type.
+ return specConsumeBody(this, (bytes) => {
+ let mimeType = bodyMimeType(this)
+
+ if (mimeType === 'failure') {
+ mimeType = ''
+ } else if (mimeType) {
+ mimeType = serializeAMimeType(mimeType)
+ }
+
+ // Return a Blob whose contents are bytes and type attribute
+ // is mimeType.
+ return new Blob([bytes], { type: mimeType })
+ }, instance)
+ },
+
+ arrayBuffer () {
+ // The arrayBuffer() method steps are to return the result
+ // of running consume body with this and the following step
+ // given a byte sequence bytes: return a new ArrayBuffer
+ // whose contents are bytes.
+ return specConsumeBody(this, (bytes) => {
+ return new Uint8Array(bytes).buffer
+ }, instance)
+ },
+
+ text () {
+ // The text() method steps are to return the result of running
+ // consume body with this and UTF-8 decode.
+ return specConsumeBody(this, utf8DecodeBytes, instance)
+ },
+
+ json () {
+ // The json() method steps are to return the result of running
+ // consume body with this and parse JSON from bytes.
+ return specConsumeBody(this, parseJSONFromBytes, instance)
+ },
+
+ async formData () {
+ webidl.brandCheck(this, instance)
+
+ throwIfAborted(this[kState])
+
+ const contentType = this.headers.get('Content-Type')
+
+ // If mimeType’s essence is "multipart/form-data", then:
+ if (/multipart\/form-data/.test(contentType)) {
+ const headers = {}
+ for (const [key, value] of this.headers) headers[key.toLowerCase()] = value
+
+ const responseFormData = new FormData()
+
+ let busboy
+
+ try {
+ busboy = new Busboy({
+ headers,
+ preservePath: true
+ })
+ } catch (err) {
+ throw new DOMException(`${err}`, 'AbortError')
+ }
+
+ busboy.on('field', (name, value) => {
+ responseFormData.append(name, value)
+ })
+ busboy.on('file', (name, value, filename, encoding, mimeType) => {
+ const chunks = []
+
+ if (encoding === 'base64' || encoding.toLowerCase() === 'base64') {
+ let base64chunk = ''
+
+ value.on('data', (chunk) => {
+ base64chunk += chunk.toString().replace(/[\r\n]/gm, '')
+
+ const end = base64chunk.length - base64chunk.length % 4
+ chunks.push(Buffer.from(base64chunk.slice(0, end), 'base64'))
+
+ base64chunk = base64chunk.slice(end)
+ })
+ value.on('end', () => {
+ chunks.push(Buffer.from(base64chunk, 'base64'))
+ responseFormData.append(name, new File(chunks, filename, { type: mimeType }))
+ })
+ } else {
+ value.on('data', (chunk) => {
+ chunks.push(chunk)
+ })
+ value.on('end', () => {
+ responseFormData.append(name, new File(chunks, filename, { type: mimeType }))
+ })
+ }
+ })
+
+ const busboyResolve = new Promise((resolve, reject) => {
+ busboy.on('finish', resolve)
+ busboy.on('error', (err) => reject(new TypeError(err)))
+ })
+
+ if (this.body !== null) for await (const chunk of consumeBody(this[kState].body)) busboy.write(chunk)
+ busboy.end()
+ await busboyResolve
+
+ return responseFormData
+ } else if (/application\/x-www-form-urlencoded/.test(contentType)) {
+ // Otherwise, if mimeType’s essence is "application/x-www-form-urlencoded", then:
+
+ // 1. Let entries be the result of parsing bytes.
+ let entries
+ try {
+ let text = ''
+ // application/x-www-form-urlencoded parser will keep the BOM.
+ // https://url.spec.whatwg.org/#concept-urlencoded-parser
+ const textDecoder = new TextDecoder('utf-8', { ignoreBOM: true })
+ for await (const chunk of consumeBody(this[kState].body)) {
+ if (!isUint8Array(chunk)) {
+ throw new TypeError('Expected Uint8Array chunk')
+ }
+ text += textDecoder.decode(chunk, { stream: true })
+ }
+ text += textDecoder.decode()
+ entries = new URLSearchParams(text)
+ } catch (err) {
+ // istanbul ignore next: Unclear when new URLSearchParams can fail on a string.
+ // 2. If entries is failure, then throw a TypeError.
+ throw Object.assign(new TypeError(), { cause: err })
+ }
+
+ // 3. Return a new FormData object whose entries are entries.
+ const formData = new FormData()
+ for (const [name, value] of entries) {
+ formData.append(name, value)
+ }
+ return formData
+ } else {
+ // Wait a tick before checking if the request has been aborted.
+ // Otherwise, a TypeError can be thrown when an AbortError should.
+ await Promise.resolve()
+
+ throwIfAborted(this[kState])
+
+ // Otherwise, throw a TypeError.
+ throw webidl.errors.exception({
+ header: `${instance.name}.formData`,
+ message: 'Could not parse content as FormData.'
+ })
+ }
+ }
+ }
+
+ return methods
+}
+
+function mixinBody (prototype) {
+ Object.assign(prototype.prototype, bodyMixinMethods(prototype))
+}
+
+/**
+ * @see https://fetch.spec.whatwg.org/#concept-body-consume-body
+ * @param {Response|Request} object
+ * @param {(value: unknown) => unknown} convertBytesToJSValue
+ * @param {Response|Request} instance
+ */
+async function specConsumeBody (object, convertBytesToJSValue, instance) {
+ webidl.brandCheck(object, instance)
+
+ throwIfAborted(object[kState])
+
+ // 1. If object is unusable, then return a promise rejected
+ // with a TypeError.
+ if (bodyUnusable(object[kState].body)) {
+ throw new TypeError('Body is unusable')
+ }
+
+ // 2. Let promise be a new promise.
+ const promise = createDeferredPromise()
+
+ // 3. Let errorSteps given error be to reject promise with error.
+ const errorSteps = (error) => promise.reject(error)
+
+ // 4. Let successSteps given a byte sequence data be to resolve
+ // promise with the result of running convertBytesToJSValue
+ // with data. If that threw an exception, then run errorSteps
+ // with that exception.
+ const successSteps = (data) => {
+ try {
+ promise.resolve(convertBytesToJSValue(data))
+ } catch (e) {
+ errorSteps(e)
+ }
+ }
+
+ // 5. If object’s body is null, then run successSteps with an
+ // empty byte sequence.
+ if (object[kState].body == null) {
+ successSteps(new Uint8Array())
+ return promise.promise
+ }
+
+ // 6. Otherwise, fully read object’s body given successSteps,
+ // errorSteps, and object’s relevant global object.
+ await fullyReadBody(object[kState].body, successSteps, errorSteps)
+
+ // 7. Return promise.
+ return promise.promise
+}
+
+// https://fetch.spec.whatwg.org/#body-unusable
+function bodyUnusable (body) {
+ // An object including the Body interface mixin is
+ // said to be unusable if its body is non-null and
+ // its body’s stream is disturbed or locked.
+ return body != null && (body.stream.locked || util.isDisturbed(body.stream))
+}
+
+/**
+ * @see https://encoding.spec.whatwg.org/#utf-8-decode
+ * @param {Buffer} buffer
+ */
+function utf8DecodeBytes (buffer) {
+ if (buffer.length === 0) {
+ return ''
+ }
+
+ // 1. Let buffer be the result of peeking three bytes from
+ // ioQueue, converted to a byte sequence.
+
+ // 2. If buffer is 0xEF 0xBB 0xBF, then read three
+ // bytes from ioQueue. (Do nothing with those bytes.)
+ if (buffer[0] === 0xEF && buffer[1] === 0xBB && buffer[2] === 0xBF) {
+ buffer = buffer.subarray(3)
+ }
+
+ // 3. Process a queue with an instance of UTF-8’s
+ // decoder, ioQueue, output, and "replacement".
+ const output = new TextDecoder().decode(buffer)
+
+ // 4. Return output.
+ return output
+}
+
+/**
+ * @see https://infra.spec.whatwg.org/#parse-json-bytes-to-a-javascript-value
+ * @param {Uint8Array} bytes
+ */
+function parseJSONFromBytes (bytes) {
+ return JSON.parse(utf8DecodeBytes(bytes))
+}
+
+/**
+ * @see https://fetch.spec.whatwg.org/#concept-body-mime-type
+ * @param {import('./response').Response|import('./request').Request} object
+ */
+function bodyMimeType (object) {
+ const { headersList } = object[kState]
+ const contentType = headersList.get('content-type')
+
+ if (contentType === null) {
+ return 'failure'
+ }
+
+ return parseMIMEType(contentType)
+}
+
+module.exports = {
+ extractBody,
+ safelyExtractBody,
+ cloneBody,
+ mixinBody
+}
+
+
+/***/ }),
+
+/***/ 41037:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+"use strict";
+
+
+const { MessageChannel, receiveMessageOnPort } = __nccwpck_require__(71267)
+
+const corsSafeListedMethods = ['GET', 'HEAD', 'POST']
+
+const nullBodyStatus = [101, 204, 205, 304]
+
+const redirectStatus = [301, 302, 303, 307, 308]
+
+// https://fetch.spec.whatwg.org/#block-bad-port
+const badPorts = [
+ '1', '7', '9', '11', '13', '15', '17', '19', '20', '21', '22', '23', '25', '37', '42', '43', '53', '69', '77', '79',
+ '87', '95', '101', '102', '103', '104', '109', '110', '111', '113', '115', '117', '119', '123', '135', '137',
+ '139', '143', '161', '179', '389', '427', '465', '512', '513', '514', '515', '526', '530', '531', '532',
+ '540', '548', '554', '556', '563', '587', '601', '636', '989', '990', '993', '995', '1719', '1720', '1723',
+ '2049', '3659', '4045', '5060', '5061', '6000', '6566', '6665', '6666', '6667', '6668', '6669', '6697',
+ '10080'
+]
+
+// https://w3c.github.io/webappsec-referrer-policy/#referrer-policies
+const referrerPolicy = [
+ '',
+ 'no-referrer',
+ 'no-referrer-when-downgrade',
+ 'same-origin',
+ 'origin',
+ 'strict-origin',
+ 'origin-when-cross-origin',
+ 'strict-origin-when-cross-origin',
+ 'unsafe-url'
+]
+
+const requestRedirect = ['follow', 'manual', 'error']
+
+const safeMethods = ['GET', 'HEAD', 'OPTIONS', 'TRACE']
+
+const requestMode = ['navigate', 'same-origin', 'no-cors', 'cors']
+
+const requestCredentials = ['omit', 'same-origin', 'include']
+
+const requestCache = [
+ 'default',
+ 'no-store',
+ 'reload',
+ 'no-cache',
+ 'force-cache',
+ 'only-if-cached'
+]
+
+// https://fetch.spec.whatwg.org/#request-body-header-name
+const requestBodyHeader = [
+ 'content-encoding',
+ 'content-language',
+ 'content-location',
+ 'content-type',
+ // See https://github.com/nodejs/undici/issues/2021
+ // 'Content-Length' is a forbidden header name, which is typically
+ // removed in the Headers implementation. However, undici doesn't
+ // filter out headers, so we add it here.
+ 'content-length'
+]
+
+// https://fetch.spec.whatwg.org/#enumdef-requestduplex
+const requestDuplex = [
+ 'half'
+]
+
+// http://fetch.spec.whatwg.org/#forbidden-method
+const forbiddenMethods = ['CONNECT', 'TRACE', 'TRACK']
+
+const subresource = [
+ 'audio',
+ 'audioworklet',
+ 'font',
+ 'image',
+ 'manifest',
+ 'paintworklet',
+ 'script',
+ 'style',
+ 'track',
+ 'video',
+ 'xslt',
+ ''
+]
+
+/** @type {globalThis['DOMException']} */
+const DOMException = globalThis.DOMException ?? (() => {
+ // DOMException was only made a global in Node v17.0.0,
+ // but fetch supports >= v16.8.
+ try {
+ atob('~')
+ } catch (err) {
+ return Object.getPrototypeOf(err).constructor
+ }
+})()
+
+let channel
+
+/** @type {globalThis['structuredClone']} */
+const structuredClone =
+ globalThis.structuredClone ??
+ // https://github.com/nodejs/node/blob/b27ae24dcc4251bad726d9d84baf678d1f707fed/lib/internal/structured_clone.js
+ // structuredClone was added in v17.0.0, but fetch supports v16.8
+ function structuredClone (value, options = undefined) {
+ if (arguments.length === 0) {
+ throw new TypeError('missing argument')
+ }
+
+ if (!channel) {
+ channel = new MessageChannel()
+ }
+ channel.port1.unref()
+ channel.port2.unref()
+ channel.port1.postMessage(value, options?.transfer)
+ return receiveMessageOnPort(channel.port2).message
+ }
+
+module.exports = {
+ DOMException,
+ structuredClone,
+ subresource,
+ forbiddenMethods,
+ requestBodyHeader,
+ referrerPolicy,
+ requestRedirect,
+ requestMode,
+ requestCredentials,
+ requestCache,
+ redirectStatus,
+ corsSafeListedMethods,
+ nullBodyStatus,
+ safeMethods,
+ badPorts,
+ requestDuplex
+}
+
+
+/***/ }),
+
+/***/ 685:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+const assert = __nccwpck_require__(39491)
+const { atob } = __nccwpck_require__(14300)
+const { isomorphicDecode } = __nccwpck_require__(52538)
+
+const encoder = new TextEncoder()
+
+/**
+ * @see https://mimesniff.spec.whatwg.org/#http-token-code-point
+ */
+const HTTP_TOKEN_CODEPOINTS = /^[!#$%&'*+-.^_|~A-Za-z0-9]+$/
+const HTTP_WHITESPACE_REGEX = /(\u000A|\u000D|\u0009|\u0020)/ // eslint-disable-line
+/**
+ * @see https://mimesniff.spec.whatwg.org/#http-quoted-string-token-code-point
+ */
+const HTTP_QUOTED_STRING_TOKENS = /[\u0009|\u0020-\u007E|\u0080-\u00FF]/ // eslint-disable-line
+
+// https://fetch.spec.whatwg.org/#data-url-processor
+/** @param {URL} dataURL */
+function dataURLProcessor (dataURL) {
+ // 1. Assert: dataURL’s scheme is "data".
+ assert(dataURL.protocol === 'data:')
+
+ // 2. Let input be the result of running the URL
+ // serializer on dataURL with exclude fragment
+ // set to true.
+ let input = URLSerializer(dataURL, true)
+
+ // 3. Remove the leading "data:" string from input.
+ input = input.slice(5)
+
+ // 4. Let position point at the start of input.
+ const position = { position: 0 }
+
+ // 5. Let mimeType be the result of collecting a
+ // sequence of code points that are not equal
+ // to U+002C (,), given position.
+ let mimeType = collectASequenceOfCodePointsFast(
+ ',',
+ input,
+ position
+ )
+
+ // 6. Strip leading and trailing ASCII whitespace
+ // from mimeType.
+ // Undici implementation note: we need to store the
+ // length because if the mimetype has spaces removed,
+ // the wrong amount will be sliced from the input in
+ // step #9
+ const mimeTypeLength = mimeType.length
+ mimeType = removeASCIIWhitespace(mimeType, true, true)
+
+ // 7. If position is past the end of input, then
+ // return failure
+ if (position.position >= input.length) {
+ return 'failure'
+ }
+
+ // 8. Advance position by 1.
+ position.position++
+
+ // 9. Let encodedBody be the remainder of input.
+ const encodedBody = input.slice(mimeTypeLength + 1)
+
+ // 10. Let body be the percent-decoding of encodedBody.
+ let body = stringPercentDecode(encodedBody)
+
+ // 11. If mimeType ends with U+003B (;), followed by
+ // zero or more U+0020 SPACE, followed by an ASCII
+ // case-insensitive match for "base64", then:
+ if (/;(\u0020){0,}base64$/i.test(mimeType)) {
+ // 1. Let stringBody be the isomorphic decode of body.
+ const stringBody = isomorphicDecode(body)
+
+ // 2. Set body to the forgiving-base64 decode of
+ // stringBody.
+ body = forgivingBase64(stringBody)
+
+ // 3. If body is failure, then return failure.
+ if (body === 'failure') {
+ return 'failure'
+ }
+
+ // 4. Remove the last 6 code points from mimeType.
+ mimeType = mimeType.slice(0, -6)
+
+ // 5. Remove trailing U+0020 SPACE code points from mimeType,
+ // if any.
+ mimeType = mimeType.replace(/(\u0020)+$/, '')
+
+ // 6. Remove the last U+003B (;) code point from mimeType.
+ mimeType = mimeType.slice(0, -1)
+ }
+
+ // 12. If mimeType starts with U+003B (;), then prepend
+ // "text/plain" to mimeType.
+ if (mimeType.startsWith(';')) {
+ mimeType = 'text/plain' + mimeType
+ }
+
+ // 13. Let mimeTypeRecord be the result of parsing
+ // mimeType.
+ let mimeTypeRecord = parseMIMEType(mimeType)
+
+ // 14. If mimeTypeRecord is failure, then set
+ // mimeTypeRecord to text/plain;charset=US-ASCII.
+ if (mimeTypeRecord === 'failure') {
+ mimeTypeRecord = parseMIMEType('text/plain;charset=US-ASCII')
+ }
+
+ // 15. Return a new data: URL struct whose MIME
+ // type is mimeTypeRecord and body is body.
+ // https://fetch.spec.whatwg.org/#data-url-struct
+ return { mimeType: mimeTypeRecord, body }
+}
+
+// https://url.spec.whatwg.org/#concept-url-serializer
+/**
+ * @param {URL} url
+ * @param {boolean} excludeFragment
+ */
+function URLSerializer (url, excludeFragment = false) {
+ const href = url.href
+
+ if (!excludeFragment) {
+ return href
+ }
+
+ const hash = href.lastIndexOf('#')
+ if (hash === -1) {
+ return href
+ }
+ return href.slice(0, hash)
+}
+
+// https://infra.spec.whatwg.org/#collect-a-sequence-of-code-points
+/**
+ * @param {(char: string) => boolean} condition
+ * @param {string} input
+ * @param {{ position: number }} position
+ */
+function collectASequenceOfCodePoints (condition, input, position) {
+ // 1. Let result be the empty string.
+ let result = ''
+
+ // 2. While position doesn’t point past the end of input and the
+ // code point at position within input meets the condition condition:
+ while (position.position < input.length && condition(input[position.position])) {
+ // 1. Append that code point to the end of result.
+ result += input[position.position]
+
+ // 2. Advance position by 1.
+ position.position++
+ }
+
+ // 3. Return result.
+ return result
+}
+
+/**
+ * A faster collectASequenceOfCodePoints that only works when comparing a single character.
+ * @param {string} char
+ * @param {string} input
+ * @param {{ position: number }} position
+ */
+function collectASequenceOfCodePointsFast (char, input, position) {
+ const idx = input.indexOf(char, position.position)
+ const start = position.position
+
+ if (idx === -1) {
+ position.position = input.length
+ return input.slice(start)
+ }
+
+ position.position = idx
+ return input.slice(start, position.position)
+}
+
+// https://url.spec.whatwg.org/#string-percent-decode
+/** @param {string} input */
+function stringPercentDecode (input) {
+ // 1. Let bytes be the UTF-8 encoding of input.
+ const bytes = encoder.encode(input)
+
+ // 2. Return the percent-decoding of bytes.
+ return percentDecode(bytes)
+}
+
+// https://url.spec.whatwg.org/#percent-decode
+/** @param {Uint8Array} input */
+function percentDecode (input) {
+ // 1. Let output be an empty byte sequence.
+ /** @type {number[]} */
+ const output = []
+
+ // 2. For each byte byte in input:
+ for (let i = 0; i < input.length; i++) {
+ const byte = input[i]
+
+ // 1. If byte is not 0x25 (%), then append byte to output.
+ if (byte !== 0x25) {
+ output.push(byte)
+
+ // 2. Otherwise, if byte is 0x25 (%) and the next two bytes
+ // after byte in input are not in the ranges
+ // 0x30 (0) to 0x39 (9), 0x41 (A) to 0x46 (F),
+ // and 0x61 (a) to 0x66 (f), all inclusive, append byte
+ // to output.
+ } else if (
+ byte === 0x25 &&
+ !/^[0-9A-Fa-f]{2}$/i.test(String.fromCharCode(input[i + 1], input[i + 2]))
+ ) {
+ output.push(0x25)
+
+ // 3. Otherwise:
+ } else {
+ // 1. Let bytePoint be the two bytes after byte in input,
+ // decoded, and then interpreted as hexadecimal number.
+ const nextTwoBytes = String.fromCharCode(input[i + 1], input[i + 2])
+ const bytePoint = Number.parseInt(nextTwoBytes, 16)
+
+ // 2. Append a byte whose value is bytePoint to output.
+ output.push(bytePoint)
+
+ // 3. Skip the next two bytes in input.
+ i += 2
+ }
+ }
+
+ // 3. Return output.
+ return Uint8Array.from(output)
+}
+
+// https://mimesniff.spec.whatwg.org/#parse-a-mime-type
+/** @param {string} input */
+function parseMIMEType (input) {
+ // 1. Remove any leading and trailing HTTP whitespace
+ // from input.
+ input = removeHTTPWhitespace(input, true, true)
+
+ // 2. Let position be a position variable for input,
+ // initially pointing at the start of input.
+ const position = { position: 0 }
+
+ // 3. Let type be the result of collecting a sequence
+ // of code points that are not U+002F (/) from
+ // input, given position.
+ const type = collectASequenceOfCodePointsFast(
+ '/',
+ input,
+ position
+ )
+
+ // 4. If type is the empty string or does not solely
+ // contain HTTP token code points, then return failure.
+ // https://mimesniff.spec.whatwg.org/#http-token-code-point
+ if (type.length === 0 || !HTTP_TOKEN_CODEPOINTS.test(type)) {
+ return 'failure'
+ }
+
+ // 5. If position is past the end of input, then return
+ // failure
+ if (position.position > input.length) {
+ return 'failure'
+ }
+
+ // 6. Advance position by 1. (This skips past U+002F (/).)
+ position.position++
+
+ // 7. Let subtype be the result of collecting a sequence of
+ // code points that are not U+003B (;) from input, given
+ // position.
+ let subtype = collectASequenceOfCodePointsFast(
+ ';',
+ input,
+ position
+ )
+
+ // 8. Remove any trailing HTTP whitespace from subtype.
+ subtype = removeHTTPWhitespace(subtype, false, true)
+
+ // 9. If subtype is the empty string or does not solely
+ // contain HTTP token code points, then return failure.
+ if (subtype.length === 0 || !HTTP_TOKEN_CODEPOINTS.test(subtype)) {
+ return 'failure'
+ }
+
+ const typeLowercase = type.toLowerCase()
+ const subtypeLowercase = subtype.toLowerCase()
+
+ // 10. Let mimeType be a new MIME type record whose type
+ // is type, in ASCII lowercase, and subtype is subtype,
+ // in ASCII lowercase.
+ // https://mimesniff.spec.whatwg.org/#mime-type
+ const mimeType = {
+ type: typeLowercase,
+ subtype: subtypeLowercase,
+ /** @type {Map} */
+ parameters: new Map(),
+ // https://mimesniff.spec.whatwg.org/#mime-type-essence
+ essence: `${typeLowercase}/${subtypeLowercase}`
+ }
+
+ // 11. While position is not past the end of input:
+ while (position.position < input.length) {
+ // 1. Advance position by 1. (This skips past U+003B (;).)
+ position.position++
+
+ // 2. Collect a sequence of code points that are HTTP
+ // whitespace from input given position.
+ collectASequenceOfCodePoints(
+ // https://fetch.spec.whatwg.org/#http-whitespace
+ char => HTTP_WHITESPACE_REGEX.test(char),
+ input,
+ position
+ )
+
+ // 3. Let parameterName be the result of collecting a
+ // sequence of code points that are not U+003B (;)
+ // or U+003D (=) from input, given position.
+ let parameterName = collectASequenceOfCodePoints(
+ (char) => char !== ';' && char !== '=',
+ input,
+ position
+ )
+
+ // 4. Set parameterName to parameterName, in ASCII
+ // lowercase.
+ parameterName = parameterName.toLowerCase()
+
+ // 5. If position is not past the end of input, then:
+ if (position.position < input.length) {
+ // 1. If the code point at position within input is
+ // U+003B (;), then continue.
+ if (input[position.position] === ';') {
+ continue
+ }
+
+ // 2. Advance position by 1. (This skips past U+003D (=).)
+ position.position++
+ }
+
+ // 6. If position is past the end of input, then break.
+ if (position.position > input.length) {
+ break
+ }
+
+ // 7. Let parameterValue be null.
+ let parameterValue = null
+
+ // 8. If the code point at position within input is
+ // U+0022 ("), then:
+ if (input[position.position] === '"') {
+ // 1. Set parameterValue to the result of collecting
+ // an HTTP quoted string from input, given position
+ // and the extract-value flag.
+ parameterValue = collectAnHTTPQuotedString(input, position, true)
+
+ // 2. Collect a sequence of code points that are not
+ // U+003B (;) from input, given position.
+ collectASequenceOfCodePointsFast(
+ ';',
+ input,
+ position
+ )
+
+ // 9. Otherwise:
+ } else {
+ // 1. Set parameterValue to the result of collecting
+ // a sequence of code points that are not U+003B (;)
+ // from input, given position.
+ parameterValue = collectASequenceOfCodePointsFast(
+ ';',
+ input,
+ position
+ )
+
+ // 2. Remove any trailing HTTP whitespace from parameterValue.
+ parameterValue = removeHTTPWhitespace(parameterValue, false, true)
+
+ // 3. If parameterValue is the empty string, then continue.
+ if (parameterValue.length === 0) {
+ continue
+ }
+ }
+
+ // 10. If all of the following are true
+ // - parameterName is not the empty string
+ // - parameterName solely contains HTTP token code points
+ // - parameterValue solely contains HTTP quoted-string token code points
+ // - mimeType’s parameters[parameterName] does not exist
+ // then set mimeType’s parameters[parameterName] to parameterValue.
+ if (
+ parameterName.length !== 0 &&
+ HTTP_TOKEN_CODEPOINTS.test(parameterName) &&
+ (parameterValue.length === 0 || HTTP_QUOTED_STRING_TOKENS.test(parameterValue)) &&
+ !mimeType.parameters.has(parameterName)
+ ) {
+ mimeType.parameters.set(parameterName, parameterValue)
+ }
+ }
+
+ // 12. Return mimeType.
+ return mimeType
+}
+
+// https://infra.spec.whatwg.org/#forgiving-base64-decode
+/** @param {string} data */
+function forgivingBase64 (data) {
+ // 1. Remove all ASCII whitespace from data.
+ data = data.replace(/[\u0009\u000A\u000C\u000D\u0020]/g, '') // eslint-disable-line
+
+ // 2. If data’s code point length divides by 4 leaving
+ // no remainder, then:
+ if (data.length % 4 === 0) {
+ // 1. If data ends with one or two U+003D (=) code points,
+ // then remove them from data.
+ data = data.replace(/=?=$/, '')
+ }
+
+ // 3. If data’s code point length divides by 4 leaving
+ // a remainder of 1, then return failure.
+ if (data.length % 4 === 1) {
+ return 'failure'
+ }
+
+ // 4. If data contains a code point that is not one of
+ // U+002B (+)
+ // U+002F (/)
+ // ASCII alphanumeric
+ // then return failure.
+ if (/[^+/0-9A-Za-z]/.test(data)) {
+ return 'failure'
+ }
+
+ const binary = atob(data)
+ const bytes = new Uint8Array(binary.length)
+
+ for (let byte = 0; byte < binary.length; byte++) {
+ bytes[byte] = binary.charCodeAt(byte)
+ }
+
+ return bytes
+}
+
+// https://fetch.spec.whatwg.org/#collect-an-http-quoted-string
+// tests: https://fetch.spec.whatwg.org/#example-http-quoted-string
+/**
+ * @param {string} input
+ * @param {{ position: number }} position
+ * @param {boolean?} extractValue
+ */
+function collectAnHTTPQuotedString (input, position, extractValue) {
+ // 1. Let positionStart be position.
+ const positionStart = position.position
+
+ // 2. Let value be the empty string.
+ let value = ''
+
+ // 3. Assert: the code point at position within input
+ // is U+0022 (").
+ assert(input[position.position] === '"')
+
+ // 4. Advance position by 1.
+ position.position++
+
+ // 5. While true:
+ while (true) {
+ // 1. Append the result of collecting a sequence of code points
+ // that are not U+0022 (") or U+005C (\) from input, given
+ // position, to value.
+ value += collectASequenceOfCodePoints(
+ (char) => char !== '"' && char !== '\\',
+ input,
+ position
+ )
+
+ // 2. If position is past the end of input, then break.
+ if (position.position >= input.length) {
+ break
+ }
+
+ // 3. Let quoteOrBackslash be the code point at position within
+ // input.
+ const quoteOrBackslash = input[position.position]
+
+ // 4. Advance position by 1.
+ position.position++
+
+ // 5. If quoteOrBackslash is U+005C (\), then:
+ if (quoteOrBackslash === '\\') {
+ // 1. If position is past the end of input, then append
+ // U+005C (\) to value and break.
+ if (position.position >= input.length) {
+ value += '\\'
+ break
+ }
+
+ // 2. Append the code point at position within input to value.
+ value += input[position.position]
+
+ // 3. Advance position by 1.
+ position.position++
+
+ // 6. Otherwise:
+ } else {
+ // 1. Assert: quoteOrBackslash is U+0022 (").
+ assert(quoteOrBackslash === '"')
+
+ // 2. Break.
+ break
+ }
+ }
+
+ // 6. If the extract-value flag is set, then return value.
+ if (extractValue) {
+ return value
+ }
+
+ // 7. Return the code points from positionStart to position,
+ // inclusive, within input.
+ return input.slice(positionStart, position.position)
+}
+
+/**
+ * @see https://mimesniff.spec.whatwg.org/#serialize-a-mime-type
+ */
+function serializeAMimeType (mimeType) {
+ assert(mimeType !== 'failure')
+ const { parameters, essence } = mimeType
+
+ // 1. Let serialization be the concatenation of mimeType’s
+ // type, U+002F (/), and mimeType’s subtype.
+ let serialization = essence
+
+ // 2. For each name → value of mimeType’s parameters:
+ for (let [name, value] of parameters.entries()) {
+ // 1. Append U+003B (;) to serialization.
+ serialization += ';'
+
+ // 2. Append name to serialization.
+ serialization += name
+
+ // 3. Append U+003D (=) to serialization.
+ serialization += '='
+
+ // 4. If value does not solely contain HTTP token code
+ // points or value is the empty string, then:
+ if (!HTTP_TOKEN_CODEPOINTS.test(value)) {
+ // 1. Precede each occurence of U+0022 (") or
+ // U+005C (\) in value with U+005C (\).
+ value = value.replace(/(\\|")/g, '\\$1')
+
+ // 2. Prepend U+0022 (") to value.
+ value = '"' + value
+
+ // 3. Append U+0022 (") to value.
+ value += '"'
+ }
+
+ // 5. Append value to serialization.
+ serialization += value
+ }
+
+ // 3. Return serialization.
+ return serialization
+}
+
+/**
+ * @see https://fetch.spec.whatwg.org/#http-whitespace
+ * @param {string} char
+ */
+function isHTTPWhiteSpace (char) {
+ return char === '\r' || char === '\n' || char === '\t' || char === ' '
+}
+
+/**
+ * @see https://fetch.spec.whatwg.org/#http-whitespace
+ * @param {string} str
+ */
+function removeHTTPWhitespace (str, leading = true, trailing = true) {
+ let lead = 0
+ let trail = str.length - 1
+
+ if (leading) {
+ for (; lead < str.length && isHTTPWhiteSpace(str[lead]); lead++);
+ }
+
+ if (trailing) {
+ for (; trail > 0 && isHTTPWhiteSpace(str[trail]); trail--);
+ }
+
+ return str.slice(lead, trail + 1)
+}
+
+/**
+ * @see https://infra.spec.whatwg.org/#ascii-whitespace
+ * @param {string} char
+ */
+function isASCIIWhitespace (char) {
+ return char === '\r' || char === '\n' || char === '\t' || char === '\f' || char === ' '
+}
+
+/**
+ * @see https://infra.spec.whatwg.org/#strip-leading-and-trailing-ascii-whitespace
+ */
+function removeASCIIWhitespace (str, leading = true, trailing = true) {
+ let lead = 0
+ let trail = str.length - 1
+
+ if (leading) {
+ for (; lead < str.length && isASCIIWhitespace(str[lead]); lead++);
+ }
+
+ if (trailing) {
+ for (; trail > 0 && isASCIIWhitespace(str[trail]); trail--);
+ }
+
+ return str.slice(lead, trail + 1)
+}
+
+module.exports = {
+ dataURLProcessor,
+ URLSerializer,
+ collectASequenceOfCodePoints,
+ collectASequenceOfCodePointsFast,
+ stringPercentDecode,
+ parseMIMEType,
+ collectAnHTTPQuotedString,
+ serializeAMimeType
+}
+
+
+/***/ }),
+
+/***/ 78511:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+"use strict";
+
+
+const { Blob, File: NativeFile } = __nccwpck_require__(14300)
+const { types } = __nccwpck_require__(73837)
+const { kState } = __nccwpck_require__(15861)
+const { isBlobLike } = __nccwpck_require__(52538)
+const { webidl } = __nccwpck_require__(21744)
+const { parseMIMEType, serializeAMimeType } = __nccwpck_require__(685)
+const { kEnumerableProperty } = __nccwpck_require__(83983)
+
+class File extends Blob {
+ constructor (fileBits, fileName, options = {}) {
+ // The File constructor is invoked with two or three parameters, depending
+ // on whether the optional dictionary parameter is used. When the File()
+ // constructor is invoked, user agents must run the following steps:
+ webidl.argumentLengthCheck(arguments, 2, { header: 'File constructor' })
+
+ fileBits = webidl.converters['sequence'](fileBits)
+ fileName = webidl.converters.USVString(fileName)
+ options = webidl.converters.FilePropertyBag(options)
+
+ // 1. Let bytes be the result of processing blob parts given fileBits and
+ // options.
+ // Note: Blob handles this for us
+
+ // 2. Let n be the fileName argument to the constructor.
+ const n = fileName
+
+ // 3. Process FilePropertyBag dictionary argument by running the following
+ // substeps:
+
+ // 1. If the type member is provided and is not the empty string, let t
+ // be set to the type dictionary member. If t contains any characters
+ // outside the range U+0020 to U+007E, then set t to the empty string
+ // and return from these substeps.
+ // 2. Convert every character in t to ASCII lowercase.
+ let t = options.type
+ let d
+
+ // eslint-disable-next-line no-labels
+ substep: {
+ if (t) {
+ t = parseMIMEType(t)
+
+ if (t === 'failure') {
+ t = ''
+ // eslint-disable-next-line no-labels
+ break substep
+ }
+
+ t = serializeAMimeType(t).toLowerCase()
+ }
+
+ // 3. If the lastModified member is provided, let d be set to the
+ // lastModified dictionary member. If it is not provided, set d to the
+ // current date and time represented as the number of milliseconds since
+ // the Unix Epoch (which is the equivalent of Date.now() [ECMA-262]).
+ d = options.lastModified
+ }
+
+ // 4. Return a new File object F such that:
+ // F refers to the bytes byte sequence.
+ // F.size is set to the number of total bytes in bytes.
+ // F.name is set to n.
+ // F.type is set to t.
+ // F.lastModified is set to d.
+
+ super(processBlobParts(fileBits, options), { type: t })
+ this[kState] = {
+ name: n,
+ lastModified: d,
+ type: t
+ }
+ }
+
+ get name () {
+ webidl.brandCheck(this, File)
+
+ return this[kState].name
+ }
+
+ get lastModified () {
+ webidl.brandCheck(this, File)
+
+ return this[kState].lastModified
+ }
+
+ get type () {
+ webidl.brandCheck(this, File)
+
+ return this[kState].type
+ }
+}
+
+class FileLike {
+ constructor (blobLike, fileName, options = {}) {
+ // TODO: argument idl type check
+
+ // The File constructor is invoked with two or three parameters, depending
+ // on whether the optional dictionary parameter is used. When the File()
+ // constructor is invoked, user agents must run the following steps:
+
+ // 1. Let bytes be the result of processing blob parts given fileBits and
+ // options.
+
+ // 2. Let n be the fileName argument to the constructor.
+ const n = fileName
+
+ // 3. Process FilePropertyBag dictionary argument by running the following
+ // substeps:
+
+ // 1. If the type member is provided and is not the empty string, let t
+ // be set to the type dictionary member. If t contains any characters
+ // outside the range U+0020 to U+007E, then set t to the empty string
+ // and return from these substeps.
+ // TODO
+ const t = options.type
+
+ // 2. Convert every character in t to ASCII lowercase.
+ // TODO
+
+ // 3. If the lastModified member is provided, let d be set to the
+ // lastModified dictionary member. If it is not provided, set d to the
+ // current date and time represented as the number of milliseconds since
+ // the Unix Epoch (which is the equivalent of Date.now() [ECMA-262]).
+ const d = options.lastModified ?? Date.now()
+
+ // 4. Return a new File object F such that:
+ // F refers to the bytes byte sequence.
+ // F.size is set to the number of total bytes in bytes.
+ // F.name is set to n.
+ // F.type is set to t.
+ // F.lastModified is set to d.
+
+ this[kState] = {
+ blobLike,
+ name: n,
+ type: t,
+ lastModified: d
+ }
+ }
+
+ stream (...args) {
+ webidl.brandCheck(this, FileLike)
+
+ return this[kState].blobLike.stream(...args)
+ }
+
+ arrayBuffer (...args) {
+ webidl.brandCheck(this, FileLike)
+
+ return this[kState].blobLike.arrayBuffer(...args)
+ }
+
+ slice (...args) {
+ webidl.brandCheck(this, FileLike)
+
+ return this[kState].blobLike.slice(...args)
+ }
+
+ text (...args) {
+ webidl.brandCheck(this, FileLike)
+
+ return this[kState].blobLike.text(...args)
+ }
+
+ get size () {
+ webidl.brandCheck(this, FileLike)
+
+ return this[kState].blobLike.size
+ }
+
+ get type () {
+ webidl.brandCheck(this, FileLike)
+
+ return this[kState].blobLike.type
+ }
+
+ get name () {
+ webidl.brandCheck(this, FileLike)
+
+ return this[kState].name
+ }
+
+ get lastModified () {
+ webidl.brandCheck(this, FileLike)
+
+ return this[kState].lastModified
+ }
+
+ get [Symbol.toStringTag] () {
+ return 'File'
+ }
+}
+
+Object.defineProperties(File.prototype, {
+ [Symbol.toStringTag]: {
+ value: 'File',
+ configurable: true
+ },
+ name: kEnumerableProperty,
+ lastModified: kEnumerableProperty
+})
+
+webidl.converters.Blob = webidl.interfaceConverter(Blob)
+
+webidl.converters.BlobPart = function (V, opts) {
+ if (webidl.util.Type(V) === 'Object') {
+ if (isBlobLike(V)) {
+ return webidl.converters.Blob(V, { strict: false })
+ }
+
+ if (
+ ArrayBuffer.isView(V) ||
+ types.isAnyArrayBuffer(V)
+ ) {
+ return webidl.converters.BufferSource(V, opts)
+ }
+ }
+
+ return webidl.converters.USVString(V, opts)
+}
+
+webidl.converters['sequence'] = webidl.sequenceConverter(
+ webidl.converters.BlobPart
+)
+
+// https://www.w3.org/TR/FileAPI/#dfn-FilePropertyBag
+webidl.converters.FilePropertyBag = webidl.dictionaryConverter([
+ {
+ key: 'lastModified',
+ converter: webidl.converters['long long'],
+ get defaultValue () {
+ return Date.now()
+ }
+ },
+ {
+ key: 'type',
+ converter: webidl.converters.DOMString,
+ defaultValue: ''
+ },
+ {
+ key: 'endings',
+ converter: (value) => {
+ value = webidl.converters.DOMString(value)
+ value = value.toLowerCase()
+
+ if (value !== 'native') {
+ value = 'transparent'
+ }
+
+ return value
+ },
+ defaultValue: 'transparent'
+ }
+])
+
+/**
+ * @see https://www.w3.org/TR/FileAPI/#process-blob-parts
+ * @param {(NodeJS.TypedArray|Blob|string)[]} parts
+ * @param {{ type: string, endings: string }} options
+ */
+function processBlobParts (parts, options) {
+ // 1. Let bytes be an empty sequence of bytes.
+ /** @type {NodeJS.TypedArray[]} */
+ const bytes = []
+
+ // 2. For each element in parts:
+ for (const element of parts) {
+ // 1. If element is a USVString, run the following substeps:
+ if (typeof element === 'string') {
+ // 1. Let s be element.
+ let s = element
+
+ // 2. If the endings member of options is "native", set s
+ // to the result of converting line endings to native
+ // of element.
+ if (options.endings === 'native') {
+ s = convertLineEndingsNative(s)
+ }
+
+ // 3. Append the result of UTF-8 encoding s to bytes.
+ bytes.push(new TextEncoder().encode(s))
+ } else if (
+ types.isAnyArrayBuffer(element) ||
+ types.isTypedArray(element)
+ ) {
+ // 2. If element is a BufferSource, get a copy of the
+ // bytes held by the buffer source, and append those
+ // bytes to bytes.
+ if (!element.buffer) { // ArrayBuffer
+ bytes.push(new Uint8Array(element))
+ } else {
+ bytes.push(
+ new Uint8Array(element.buffer, element.byteOffset, element.byteLength)
+ )
+ }
+ } else if (isBlobLike(element)) {
+ // 3. If element is a Blob, append the bytes it represents
+ // to bytes.
+ bytes.push(element)
+ }
+ }
+
+ // 3. Return bytes.
+ return bytes
+}
+
+/**
+ * @see https://www.w3.org/TR/FileAPI/#convert-line-endings-to-native
+ * @param {string} s
+ */
+function convertLineEndingsNative (s) {
+ // 1. Let native line ending be be the code point U+000A LF.
+ let nativeLineEnding = '\n'
+
+ // 2. If the underlying platform’s conventions are to
+ // represent newlines as a carriage return and line feed
+ // sequence, set native line ending to the code point
+ // U+000D CR followed by the code point U+000A LF.
+ if (process.platform === 'win32') {
+ nativeLineEnding = '\r\n'
+ }
+
+ return s.replace(/\r?\n/g, nativeLineEnding)
+}
+
+// If this function is moved to ./util.js, some tools (such as
+// rollup) will warn about circular dependencies. See:
+// https://github.com/nodejs/undici/issues/1629
+function isFileLike (object) {
+ return (
+ (NativeFile && object instanceof NativeFile) ||
+ object instanceof File || (
+ object &&
+ (typeof object.stream === 'function' ||
+ typeof object.arrayBuffer === 'function') &&
+ object[Symbol.toStringTag] === 'File'
+ )
+ )
+}
+
+module.exports = { File, FileLike, isFileLike }
+
+
+/***/ }),
+
+/***/ 72015:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+"use strict";
+
+
+const { isBlobLike, toUSVString, makeIterator } = __nccwpck_require__(52538)
+const { kState } = __nccwpck_require__(15861)
+const { File: UndiciFile, FileLike, isFileLike } = __nccwpck_require__(78511)
+const { webidl } = __nccwpck_require__(21744)
+const { Blob, File: NativeFile } = __nccwpck_require__(14300)
+
+/** @type {globalThis['File']} */
+const File = NativeFile ?? UndiciFile
+
+// https://xhr.spec.whatwg.org/#formdata
+class FormData {
+ constructor (form) {
+ if (form !== undefined) {
+ throw webidl.errors.conversionFailed({
+ prefix: 'FormData constructor',
+ argument: 'Argument 1',
+ types: ['undefined']
+ })
+ }
+
+ this[kState] = []
+ }
+
+ append (name, value, filename = undefined) {
+ webidl.brandCheck(this, FormData)
+
+ webidl.argumentLengthCheck(arguments, 2, { header: 'FormData.append' })
+
+ if (arguments.length === 3 && !isBlobLike(value)) {
+ throw new TypeError(
+ "Failed to execute 'append' on 'FormData': parameter 2 is not of type 'Blob'"
+ )
+ }
+
+ // 1. Let value be value if given; otherwise blobValue.
+
+ name = webidl.converters.USVString(name)
+ value = isBlobLike(value)
+ ? webidl.converters.Blob(value, { strict: false })
+ : webidl.converters.USVString(value)
+ filename = arguments.length === 3
+ ? webidl.converters.USVString(filename)
+ : undefined
+
+ // 2. Let entry be the result of creating an entry with
+ // name, value, and filename if given.
+ const entry = makeEntry(name, value, filename)
+
+ // 3. Append entry to this’s entry list.
+ this[kState].push(entry)
+ }
+
+ delete (name) {
+ webidl.brandCheck(this, FormData)
+
+ webidl.argumentLengthCheck(arguments, 1, { header: 'FormData.delete' })
+
+ name = webidl.converters.USVString(name)
+
+ // The delete(name) method steps are to remove all entries whose name
+ // is name from this’s entry list.
+ this[kState] = this[kState].filter(entry => entry.name !== name)
+ }
+
+ get (name) {
+ webidl.brandCheck(this, FormData)
+
+ webidl.argumentLengthCheck(arguments, 1, { header: 'FormData.get' })
+
+ name = webidl.converters.USVString(name)
+
+ // 1. If there is no entry whose name is name in this’s entry list,
+ // then return null.
+ const idx = this[kState].findIndex((entry) => entry.name === name)
+ if (idx === -1) {
+ return null
+ }
+
+ // 2. Return the value of the first entry whose name is name from
+ // this’s entry list.
+ return this[kState][idx].value
+ }
+
+ getAll (name) {
+ webidl.brandCheck(this, FormData)
+
+ webidl.argumentLengthCheck(arguments, 1, { header: 'FormData.getAll' })
+
+ name = webidl.converters.USVString(name)
+
+ // 1. If there is no entry whose name is name in this’s entry list,
+ // then return the empty list.
+ // 2. Return the values of all entries whose name is name, in order,
+ // from this’s entry list.
+ return this[kState]
+ .filter((entry) => entry.name === name)
+ .map((entry) => entry.value)
+ }
+
+ has (name) {
+ webidl.brandCheck(this, FormData)
+
+ webidl.argumentLengthCheck(arguments, 1, { header: 'FormData.has' })
+
+ name = webidl.converters.USVString(name)
+
+ // The has(name) method steps are to return true if there is an entry
+ // whose name is name in this’s entry list; otherwise false.
+ return this[kState].findIndex((entry) => entry.name === name) !== -1
+ }
+
+ set (name, value, filename = undefined) {
+ webidl.brandCheck(this, FormData)
+
+ webidl.argumentLengthCheck(arguments, 2, { header: 'FormData.set' })
+
+ if (arguments.length === 3 && !isBlobLike(value)) {
+ throw new TypeError(
+ "Failed to execute 'set' on 'FormData': parameter 2 is not of type 'Blob'"
+ )
+ }
+
+ // The set(name, value) and set(name, blobValue, filename) method steps
+ // are:
+
+ // 1. Let value be value if given; otherwise blobValue.
+
+ name = webidl.converters.USVString(name)
+ value = isBlobLike(value)
+ ? webidl.converters.Blob(value, { strict: false })
+ : webidl.converters.USVString(value)
+ filename = arguments.length === 3
+ ? toUSVString(filename)
+ : undefined
+
+ // 2. Let entry be the result of creating an entry with name, value, and
+ // filename if given.
+ const entry = makeEntry(name, value, filename)
+
+ // 3. If there are entries in this’s entry list whose name is name, then
+ // replace the first such entry with entry and remove the others.
+ const idx = this[kState].findIndex((entry) => entry.name === name)
+ if (idx !== -1) {
+ this[kState] = [
+ ...this[kState].slice(0, idx),
+ entry,
+ ...this[kState].slice(idx + 1).filter((entry) => entry.name !== name)
+ ]
+ } else {
+ // 4. Otherwise, append entry to this’s entry list.
+ this[kState].push(entry)
+ }
+ }
+
+ entries () {
+ webidl.brandCheck(this, FormData)
+
+ return makeIterator(
+ () => this[kState].map(pair => [pair.name, pair.value]),
+ 'FormData',
+ 'key+value'
+ )
+ }
+
+ keys () {
+ webidl.brandCheck(this, FormData)
+
+ return makeIterator(
+ () => this[kState].map(pair => [pair.name, pair.value]),
+ 'FormData',
+ 'key'
+ )
+ }
+
+ values () {
+ webidl.brandCheck(this, FormData)
+
+ return makeIterator(
+ () => this[kState].map(pair => [pair.name, pair.value]),
+ 'FormData',
+ 'value'
+ )
+ }
+
+ /**
+ * @param {(value: string, key: string, self: FormData) => void} callbackFn
+ * @param {unknown} thisArg
+ */
+ forEach (callbackFn, thisArg = globalThis) {
+ webidl.brandCheck(this, FormData)
+
+ webidl.argumentLengthCheck(arguments, 1, { header: 'FormData.forEach' })
+
+ if (typeof callbackFn !== 'function') {
+ throw new TypeError(
+ "Failed to execute 'forEach' on 'FormData': parameter 1 is not of type 'Function'."
+ )
+ }
+
+ for (const [key, value] of this) {
+ callbackFn.apply(thisArg, [value, key, this])
+ }
+ }
+}
+
+FormData.prototype[Symbol.iterator] = FormData.prototype.entries
+
+Object.defineProperties(FormData.prototype, {
+ [Symbol.toStringTag]: {
+ value: 'FormData',
+ configurable: true
+ }
+})
+
+/**
+ * @see https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#create-an-entry
+ * @param {string} name
+ * @param {string|Blob} value
+ * @param {?string} filename
+ * @returns
+ */
+function makeEntry (name, value, filename) {
+ // 1. Set name to the result of converting name into a scalar value string.
+ // "To convert a string into a scalar value string, replace any surrogates
+ // with U+FFFD."
+ // see: https://nodejs.org/dist/latest-v18.x/docs/api/buffer.html#buftostringencoding-start-end
+ name = Buffer.from(name).toString('utf8')
+
+ // 2. If value is a string, then set value to the result of converting
+ // value into a scalar value string.
+ if (typeof value === 'string') {
+ value = Buffer.from(value).toString('utf8')
+ } else {
+ // 3. Otherwise:
+
+ // 1. If value is not a File object, then set value to a new File object,
+ // representing the same bytes, whose name attribute value is "blob"
+ if (!isFileLike(value)) {
+ value = value instanceof Blob
+ ? new File([value], 'blob', { type: value.type })
+ : new FileLike(value, 'blob', { type: value.type })
+ }
+
+ // 2. If filename is given, then set value to a new File object,
+ // representing the same bytes, whose name attribute is filename.
+ if (filename !== undefined) {
+ /** @type {FilePropertyBag} */
+ const options = {
+ type: value.type,
+ lastModified: value.lastModified
+ }
+
+ value = (NativeFile && value instanceof NativeFile) || value instanceof UndiciFile
+ ? new File([value], filename, options)
+ : new FileLike(value, filename, options)
+ }
+ }
+
+ // 4. Return an entry whose name is name and whose value is value.
+ return { name, value }
+}
+
+module.exports = { FormData }
+
+
+/***/ }),
+
+/***/ 71246:
+/***/ ((module) => {
+
+"use strict";
+
+
+// In case of breaking changes, increase the version
+// number to avoid conflicts.
+const globalOrigin = Symbol.for('undici.globalOrigin.1')
+
+function getGlobalOrigin () {
+ return globalThis[globalOrigin]
+}
+
+function setGlobalOrigin (newOrigin) {
+ if (newOrigin === undefined) {
+ Object.defineProperty(globalThis, globalOrigin, {
+ value: undefined,
+ writable: true,
+ enumerable: false,
+ configurable: false
+ })
+
+ return
+ }
+
+ const parsedURL = new URL(newOrigin)
+
+ if (parsedURL.protocol !== 'http:' && parsedURL.protocol !== 'https:') {
+ throw new TypeError(`Only http & https urls are allowed, received ${parsedURL.protocol}`)
+ }
+
+ Object.defineProperty(globalThis, globalOrigin, {
+ value: parsedURL,
+ writable: true,
+ enumerable: false,
+ configurable: false
+ })
+}
+
+module.exports = {
+ getGlobalOrigin,
+ setGlobalOrigin
+}
+
+
+/***/ }),
+
+/***/ 10554:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+"use strict";
+// https://github.com/Ethan-Arrowood/undici-fetch
+
+
+
+const { kHeadersList } = __nccwpck_require__(72785)
+const { kGuard } = __nccwpck_require__(15861)
+const { kEnumerableProperty } = __nccwpck_require__(83983)
+const {
+ makeIterator,
+ isValidHeaderName,
+ isValidHeaderValue
+} = __nccwpck_require__(52538)
+const { webidl } = __nccwpck_require__(21744)
+const assert = __nccwpck_require__(39491)
+
+const kHeadersMap = Symbol('headers map')
+const kHeadersSortedMap = Symbol('headers map sorted')
+
+/**
+ * @see https://fetch.spec.whatwg.org/#concept-header-value-normalize
+ * @param {string} potentialValue
+ */
+function headerValueNormalize (potentialValue) {
+ // To normalize a byte sequence potentialValue, remove
+ // any leading and trailing HTTP whitespace bytes from
+ // potentialValue.
+
+ // Trimming the end with `.replace()` and a RegExp is typically subject to
+ // ReDoS. This is safer and faster.
+ let i = potentialValue.length
+ while (/[\r\n\t ]/.test(potentialValue.charAt(--i)));
+ return potentialValue.slice(0, i + 1).replace(/^[\r\n\t ]+/, '')
+}
+
+function fill (headers, object) {
+ // To fill a Headers object headers with a given object object, run these steps:
+
+ // 1. If object is a sequence, then for each header in object:
+ // Note: webidl conversion to array has already been done.
+ if (Array.isArray(object)) {
+ for (const header of object) {
+ // 1. If header does not contain exactly two items, then throw a TypeError.
+ if (header.length !== 2) {
+ throw webidl.errors.exception({
+ header: 'Headers constructor',
+ message: `expected name/value pair to be length 2, found ${header.length}.`
+ })
+ }
+
+ // 2. Append (header’s first item, header’s second item) to headers.
+ headers.append(header[0], header[1])
+ }
+ } else if (typeof object === 'object' && object !== null) {
+ // Note: null should throw
+
+ // 2. Otherwise, object is a record, then for each key → value in object,
+ // append (key, value) to headers
+ for (const [key, value] of Object.entries(object)) {
+ headers.append(key, value)
+ }
+ } else {
+ throw webidl.errors.conversionFailed({
+ prefix: 'Headers constructor',
+ argument: 'Argument 1',
+ types: ['sequence>', 'record']
+ })
+ }
+}
+
+class HeadersList {
+ /** @type {[string, string][]|null} */
+ cookies = null
+
+ constructor (init) {
+ if (init instanceof HeadersList) {
+ this[kHeadersMap] = new Map(init[kHeadersMap])
+ this[kHeadersSortedMap] = init[kHeadersSortedMap]
+ this.cookies = init.cookies
+ } else {
+ this[kHeadersMap] = new Map(init)
+ this[kHeadersSortedMap] = null
+ }
+ }
+
+ // https://fetch.spec.whatwg.org/#header-list-contains
+ contains (name) {
+ // A header list list contains a header name name if list
+ // contains a header whose name is a byte-case-insensitive
+ // match for name.
+ name = name.toLowerCase()
+
+ return this[kHeadersMap].has(name)
+ }
+
+ clear () {
+ this[kHeadersMap].clear()
+ this[kHeadersSortedMap] = null
+ this.cookies = null
+ }
+
+ // https://fetch.spec.whatwg.org/#concept-header-list-append
+ append (name, value) {
+ this[kHeadersSortedMap] = null
+
+ // 1. If list contains name, then set name to the first such
+ // header’s name.
+ const lowercaseName = name.toLowerCase()
+ const exists = this[kHeadersMap].get(lowercaseName)
+
+ // 2. Append (name, value) to list.
+ if (exists) {
+ const delimiter = lowercaseName === 'cookie' ? '; ' : ', '
+ this[kHeadersMap].set(lowercaseName, {
+ name: exists.name,
+ value: `${exists.value}${delimiter}${value}`
+ })
+ } else {
+ this[kHeadersMap].set(lowercaseName, { name, value })
+ }
+
+ if (lowercaseName === 'set-cookie') {
+ this.cookies ??= []
+ this.cookies.push(value)
+ }
+ }
+
+ // https://fetch.spec.whatwg.org/#concept-header-list-set
+ set (name, value) {
+ this[kHeadersSortedMap] = null
+ const lowercaseName = name.toLowerCase()
+
+ if (lowercaseName === 'set-cookie') {
+ this.cookies = [value]
+ }
+
+ // 1. If list contains name, then set the value of
+ // the first such header to value and remove the
+ // others.
+ // 2. Otherwise, append header (name, value) to list.
+ return this[kHeadersMap].set(lowercaseName, { name, value })
+ }
+
+ // https://fetch.spec.whatwg.org/#concept-header-list-delete
+ delete (name) {
+ this[kHeadersSortedMap] = null
+
+ name = name.toLowerCase()
+
+ if (name === 'set-cookie') {
+ this.cookies = null
+ }
+
+ return this[kHeadersMap].delete(name)
+ }
+
+ // https://fetch.spec.whatwg.org/#concept-header-list-get
+ get (name) {
+ // 1. If list does not contain name, then return null.
+ if (!this.contains(name)) {
+ return null
+ }
+
+ // 2. Return the values of all headers in list whose name
+ // is a byte-case-insensitive match for name,
+ // separated from each other by 0x2C 0x20, in order.
+ return this[kHeadersMap].get(name.toLowerCase())?.value ?? null
+ }
+
+ * [Symbol.iterator] () {
+ // use the lowercased name
+ for (const [name, { value }] of this[kHeadersMap]) {
+ yield [name, value]
+ }
+ }
+
+ get entries () {
+ const headers = {}
+
+ if (this[kHeadersMap].size) {
+ for (const { name, value } of this[kHeadersMap].values()) {
+ headers[name] = value
+ }
+ }
+
+ return headers
+ }
+}
+
+// https://fetch.spec.whatwg.org/#headers-class
+class Headers {
+ constructor (init = undefined) {
+ this[kHeadersList] = new HeadersList()
+
+ // The new Headers(init) constructor steps are:
+
+ // 1. Set this’s guard to "none".
+ this[kGuard] = 'none'
+
+ // 2. If init is given, then fill this with init.
+ if (init !== undefined) {
+ init = webidl.converters.HeadersInit(init)
+ fill(this, init)
+ }
+ }
+
+ // https://fetch.spec.whatwg.org/#dom-headers-append
+ append (name, value) {
+ webidl.brandCheck(this, Headers)
+
+ webidl.argumentLengthCheck(arguments, 2, { header: 'Headers.append' })
+
+ name = webidl.converters.ByteString(name)
+ value = webidl.converters.ByteString(value)
+
+ // 1. Normalize value.
+ value = headerValueNormalize(value)
+
+ // 2. If name is not a header name or value is not a
+ // header value, then throw a TypeError.
+ if (!isValidHeaderName(name)) {
+ throw webidl.errors.invalidArgument({
+ prefix: 'Headers.append',
+ value: name,
+ type: 'header name'
+ })
+ } else if (!isValidHeaderValue(value)) {
+ throw webidl.errors.invalidArgument({
+ prefix: 'Headers.append',
+ value,
+ type: 'header value'
+ })
+ }
+
+ // 3. If headers’s guard is "immutable", then throw a TypeError.
+ // 4. Otherwise, if headers’s guard is "request" and name is a
+ // forbidden header name, return.
+ // Note: undici does not implement forbidden header names
+ if (this[kGuard] === 'immutable') {
+ throw new TypeError('immutable')
+ } else if (this[kGuard] === 'request-no-cors') {
+ // 5. Otherwise, if headers’s guard is "request-no-cors":
+ // TODO
+ }
+
+ // 6. Otherwise, if headers’s guard is "response" and name is a
+ // forbidden response-header name, return.
+
+ // 7. Append (name, value) to headers’s header list.
+ // 8. If headers’s guard is "request-no-cors", then remove
+ // privileged no-CORS request headers from headers
+ return this[kHeadersList].append(name, value)
+ }
+
+ // https://fetch.spec.whatwg.org/#dom-headers-delete
+ delete (name) {
+ webidl.brandCheck(this, Headers)
+
+ webidl.argumentLengthCheck(arguments, 1, { header: 'Headers.delete' })
+
+ name = webidl.converters.ByteString(name)
+
+ // 1. If name is not a header name, then throw a TypeError.
+ if (!isValidHeaderName(name)) {
+ throw webidl.errors.invalidArgument({
+ prefix: 'Headers.delete',
+ value: name,
+ type: 'header name'
+ })
+ }
+
+ // 2. If this’s guard is "immutable", then throw a TypeError.
+ // 3. Otherwise, if this’s guard is "request" and name is a
+ // forbidden header name, return.
+ // 4. Otherwise, if this’s guard is "request-no-cors", name
+ // is not a no-CORS-safelisted request-header name, and
+ // name is not a privileged no-CORS request-header name,
+ // return.
+ // 5. Otherwise, if this’s guard is "response" and name is
+ // a forbidden response-header name, return.
+ // Note: undici does not implement forbidden header names
+ if (this[kGuard] === 'immutable') {
+ throw new TypeError('immutable')
+ } else if (this[kGuard] === 'request-no-cors') {
+ // TODO
+ }
+
+ // 6. If this’s header list does not contain name, then
+ // return.
+ if (!this[kHeadersList].contains(name)) {
+ return
+ }
+
+ // 7. Delete name from this’s header list.
+ // 8. If this’s guard is "request-no-cors", then remove
+ // privileged no-CORS request headers from this.
+ return this[kHeadersList].delete(name)
+ }
+
+ // https://fetch.spec.whatwg.org/#dom-headers-get
+ get (name) {
+ webidl.brandCheck(this, Headers)
+
+ webidl.argumentLengthCheck(arguments, 1, { header: 'Headers.get' })
+
+ name = webidl.converters.ByteString(name)
+
+ // 1. If name is not a header name, then throw a TypeError.
+ if (!isValidHeaderName(name)) {
+ throw webidl.errors.invalidArgument({
+ prefix: 'Headers.get',
+ value: name,
+ type: 'header name'
+ })
+ }
+
+ // 2. Return the result of getting name from this’s header
+ // list.
+ return this[kHeadersList].get(name)
+ }
+
+ // https://fetch.spec.whatwg.org/#dom-headers-has
+ has (name) {
+ webidl.brandCheck(this, Headers)
+
+ webidl.argumentLengthCheck(arguments, 1, { header: 'Headers.has' })
+
+ name = webidl.converters.ByteString(name)
+
+ // 1. If name is not a header name, then throw a TypeError.
+ if (!isValidHeaderName(name)) {
+ throw webidl.errors.invalidArgument({
+ prefix: 'Headers.has',
+ value: name,
+ type: 'header name'
+ })
+ }
+
+ // 2. Return true if this’s header list contains name;
+ // otherwise false.
+ return this[kHeadersList].contains(name)
+ }
+
+ // https://fetch.spec.whatwg.org/#dom-headers-set
+ set (name, value) {
+ webidl.brandCheck(this, Headers)
+
+ webidl.argumentLengthCheck(arguments, 2, { header: 'Headers.set' })
+
+ name = webidl.converters.ByteString(name)
+ value = webidl.converters.ByteString(value)
+
+ // 1. Normalize value.
+ value = headerValueNormalize(value)
+
+ // 2. If name is not a header name or value is not a
+ // header value, then throw a TypeError.
+ if (!isValidHeaderName(name)) {
+ throw webidl.errors.invalidArgument({
+ prefix: 'Headers.set',
+ value: name,
+ type: 'header name'
+ })
+ } else if (!isValidHeaderValue(value)) {
+ throw webidl.errors.invalidArgument({
+ prefix: 'Headers.set',
+ value,
+ type: 'header value'
+ })
+ }
+
+ // 3. If this’s guard is "immutable", then throw a TypeError.
+ // 4. Otherwise, if this’s guard is "request" and name is a
+ // forbidden header name, return.
+ // 5. Otherwise, if this’s guard is "request-no-cors" and
+ // name/value is not a no-CORS-safelisted request-header,
+ // return.
+ // 6. Otherwise, if this’s guard is "response" and name is a
+ // forbidden response-header name, return.
+ // Note: undici does not implement forbidden header names
+ if (this[kGuard] === 'immutable') {
+ throw new TypeError('immutable')
+ } else if (this[kGuard] === 'request-no-cors') {
+ // TODO
+ }
+
+ // 7. Set (name, value) in this’s header list.
+ // 8. If this’s guard is "request-no-cors", then remove
+ // privileged no-CORS request headers from this
+ return this[kHeadersList].set(name, value)
+ }
+
+ // https://fetch.spec.whatwg.org/#dom-headers-getsetcookie
+ getSetCookie () {
+ webidl.brandCheck(this, Headers)
+
+ // 1. If this’s header list does not contain `Set-Cookie`, then return « ».
+ // 2. Return the values of all headers in this’s header list whose name is
+ // a byte-case-insensitive match for `Set-Cookie`, in order.
+
+ const list = this[kHeadersList].cookies
+
+ if (list) {
+ return [...list]
+ }
+
+ return []
+ }
+
+ // https://fetch.spec.whatwg.org/#concept-header-list-sort-and-combine
+ get [kHeadersSortedMap] () {
+ if (this[kHeadersList][kHeadersSortedMap]) {
+ return this[kHeadersList][kHeadersSortedMap]
+ }
+
+ // 1. Let headers be an empty list of headers with the key being the name
+ // and value the value.
+ const headers = []
+
+ // 2. Let names be the result of convert header names to a sorted-lowercase
+ // set with all the names of the headers in list.
+ const names = [...this[kHeadersList]].sort((a, b) => a[0] < b[0] ? -1 : 1)
+ const cookies = this[kHeadersList].cookies
+
+ // 3. For each name of names:
+ for (const [name, value] of names) {
+ // 1. If name is `set-cookie`, then:
+ if (name === 'set-cookie') {
+ // 1. Let values be a list of all values of headers in list whose name
+ // is a byte-case-insensitive match for name, in order.
+
+ // 2. For each value of values:
+ // 1. Append (name, value) to headers.
+ for (const value of cookies) {
+ headers.push([name, value])
+ }
+ } else {
+ // 2. Otherwise:
+
+ // 1. Let value be the result of getting name from list.
+
+ // 2. Assert: value is non-null.
+ assert(value !== null)
+
+ // 3. Append (name, value) to headers.
+ headers.push([name, value])
+ }
+ }
+
+ this[kHeadersList][kHeadersSortedMap] = headers
+
+ // 4. Return headers.
+ return headers
+ }
+
+ keys () {
+ webidl.brandCheck(this, Headers)
+
+ return makeIterator(
+ () => [...this[kHeadersSortedMap].values()],
+ 'Headers',
+ 'key'
+ )
+ }
+
+ values () {
+ webidl.brandCheck(this, Headers)
+
+ return makeIterator(
+ () => [...this[kHeadersSortedMap].values()],
+ 'Headers',
+ 'value'
+ )
+ }
+
+ entries () {
+ webidl.brandCheck(this, Headers)
+
+ return makeIterator(
+ () => [...this[kHeadersSortedMap].values()],
+ 'Headers',
+ 'key+value'
+ )
+ }
+
+ /**
+ * @param {(value: string, key: string, self: Headers) => void} callbackFn
+ * @param {unknown} thisArg
+ */
+ forEach (callbackFn, thisArg = globalThis) {
+ webidl.brandCheck(this, Headers)
+
+ webidl.argumentLengthCheck(arguments, 1, { header: 'Headers.forEach' })
+
+ if (typeof callbackFn !== 'function') {
+ throw new TypeError(
+ "Failed to execute 'forEach' on 'Headers': parameter 1 is not of type 'Function'."
+ )
+ }
+
+ for (const [key, value] of this) {
+ callbackFn.apply(thisArg, [value, key, this])
+ }
+ }
+
+ [Symbol.for('nodejs.util.inspect.custom')] () {
+ webidl.brandCheck(this, Headers)
+
+ return this[kHeadersList]
+ }
+}
+
+Headers.prototype[Symbol.iterator] = Headers.prototype.entries
+
+Object.defineProperties(Headers.prototype, {
+ append: kEnumerableProperty,
+ delete: kEnumerableProperty,
+ get: kEnumerableProperty,
+ has: kEnumerableProperty,
+ set: kEnumerableProperty,
+ getSetCookie: kEnumerableProperty,
+ keys: kEnumerableProperty,
+ values: kEnumerableProperty,
+ entries: kEnumerableProperty,
+ forEach: kEnumerableProperty,
+ [Symbol.iterator]: { enumerable: false },
+ [Symbol.toStringTag]: {
+ value: 'Headers',
+ configurable: true
+ }
+})
+
+webidl.converters.HeadersInit = function (V) {
+ if (webidl.util.Type(V) === 'Object') {
+ if (V[Symbol.iterator]) {
+ return webidl.converters['sequence>'](V)
+ }
+
+ return webidl.converters['record'](V)
+ }
+
+ throw webidl.errors.conversionFailed({
+ prefix: 'Headers constructor',
+ argument: 'Argument 1',
+ types: ['sequence>', 'record']
+ })
+}
+
+module.exports = {
+ fill,
+ Headers,
+ HeadersList
+}
+
+
+/***/ }),
+
+/***/ 74881:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+"use strict";
+// https://github.com/Ethan-Arrowood/undici-fetch
+
+
+
+const {
+ Response,
+ makeNetworkError,
+ makeAppropriateNetworkError,
+ filterResponse,
+ makeResponse
+} = __nccwpck_require__(27823)
+const { Headers } = __nccwpck_require__(10554)
+const { Request, makeRequest } = __nccwpck_require__(48359)
+const zlib = __nccwpck_require__(59796)
+const {
+ bytesMatch,
+ makePolicyContainer,
+ clonePolicyContainer,
+ requestBadPort,
+ TAOCheck,
+ appendRequestOriginHeader,
+ responseLocationURL,
+ requestCurrentURL,
+ setRequestReferrerPolicyOnRedirect,
+ tryUpgradeRequestToAPotentiallyTrustworthyURL,
+ createOpaqueTimingInfo,
+ appendFetchMetadata,
+ corsCheck,
+ crossOriginResourcePolicyCheck,
+ determineRequestsReferrer,
+ coarsenedSharedCurrentTime,
+ createDeferredPromise,
+ isBlobLike,
+ sameOrigin,
+ isCancelled,
+ isAborted,
+ isErrorLike,
+ fullyReadBody,
+ readableStreamClose,
+ isomorphicEncode,
+ urlIsLocal,
+ urlIsHttpHttpsScheme,
+ urlHasHttpsScheme
+} = __nccwpck_require__(52538)
+const { kState, kHeaders, kGuard, kRealm } = __nccwpck_require__(15861)
+const assert = __nccwpck_require__(39491)
+const { safelyExtractBody } = __nccwpck_require__(41472)
+const {
+ redirectStatus,
+ nullBodyStatus,
+ safeMethods,
+ requestBodyHeader,
+ subresource,
+ DOMException
+} = __nccwpck_require__(41037)
+const { kHeadersList } = __nccwpck_require__(72785)
+const EE = __nccwpck_require__(82361)
+const { Readable, pipeline } = __nccwpck_require__(12781)
+const { addAbortListener, isErrored, isReadable, nodeMajor, nodeMinor } = __nccwpck_require__(83983)
+const { dataURLProcessor, serializeAMimeType } = __nccwpck_require__(685)
+const { TransformStream } = __nccwpck_require__(35356)
+const { getGlobalDispatcher } = __nccwpck_require__(21892)
+const { webidl } = __nccwpck_require__(21744)
+const { STATUS_CODES } = __nccwpck_require__(13685)
+
+/** @type {import('buffer').resolveObjectURL} */
+let resolveObjectURL
+let ReadableStream = globalThis.ReadableStream
+
+class Fetch extends EE {
+ constructor (dispatcher) {
+ super()
+
+ this.dispatcher = dispatcher
+ this.connection = null
+ this.dump = false
+ this.state = 'ongoing'
+ // 2 terminated listeners get added per request,
+ // but only 1 gets removed. If there are 20 redirects,
+ // 21 listeners will be added.
+ // See https://github.com/nodejs/undici/issues/1711
+ // TODO (fix): Find and fix root cause for leaked listener.
+ this.setMaxListeners(21)
+ }
+
+ terminate (reason) {
+ if (this.state !== 'ongoing') {
+ return
+ }
+
+ this.state = 'terminated'
+ this.connection?.destroy(reason)
+ this.emit('terminated', reason)
+ }
+
+ // https://fetch.spec.whatwg.org/#fetch-controller-abort
+ abort (error) {
+ if (this.state !== 'ongoing') {
+ return
+ }
+
+ // 1. Set controller’s state to "aborted".
+ this.state = 'aborted'
+
+ // 2. Let fallbackError be an "AbortError" DOMException.
+ // 3. Set error to fallbackError if it is not given.
+ if (!error) {
+ error = new DOMException('The operation was aborted.', 'AbortError')
+ }
+
+ // 4. Let serializedError be StructuredSerialize(error).
+ // If that threw an exception, catch it, and let
+ // serializedError be StructuredSerialize(fallbackError).
+
+ // 5. Set controller’s serialized abort reason to serializedError.
+ this.serializedAbortReason = error
+
+ this.connection?.destroy(error)
+ this.emit('terminated', error)
+ }
+}
+
+// https://fetch.spec.whatwg.org/#fetch-method
+async function fetch (input, init = {}) {
+ webidl.argumentLengthCheck(arguments, 1, { header: 'globalThis.fetch' })
+
+ // 1. Let p be a new promise.
+ const p = createDeferredPromise()
+
+ // 2. Let requestObject be the result of invoking the initial value of
+ // Request as constructor with input and init as arguments. If this throws
+ // an exception, reject p with it and return p.
+ let requestObject
+
+ try {
+ requestObject = new Request(input, init)
+ } catch (e) {
+ p.reject(e)
+ return p.promise
+ }
+
+ // 3. Let request be requestObject’s request.
+ const request = requestObject[kState]
+
+ // 4. If requestObject’s signal’s aborted flag is set, then:
+ if (requestObject.signal.aborted) {
+ // 1. Abort the fetch() call with p, request, null, and
+ // requestObject’s signal’s abort reason.
+ abortFetch(p, request, null, requestObject.signal.reason)
+
+ // 2. Return p.
+ return p.promise
+ }
+
+ // 5. Let globalObject be request’s client’s global object.
+ const globalObject = request.client.globalObject
+
+ // 6. If globalObject is a ServiceWorkerGlobalScope object, then set
+ // request’s service-workers mode to "none".
+ if (globalObject?.constructor?.name === 'ServiceWorkerGlobalScope') {
+ request.serviceWorkers = 'none'
+ }
+
+ // 7. Let responseObject be null.
+ let responseObject = null
+
+ // 8. Let relevantRealm be this’s relevant Realm.
+ const relevantRealm = null
+
+ // 9. Let locallyAborted be false.
+ let locallyAborted = false
+
+ // 10. Let controller be null.
+ let controller = null
+
+ // 11. Add the following abort steps to requestObject’s signal:
+ addAbortListener(
+ requestObject.signal,
+ () => {
+ // 1. Set locallyAborted to true.
+ locallyAborted = true
+
+ // 2. Assert: controller is non-null.
+ assert(controller != null)
+
+ // 3. Abort controller with requestObject’s signal’s abort reason.
+ controller.abort(requestObject.signal.reason)
+
+ // 4. Abort the fetch() call with p, request, responseObject,
+ // and requestObject’s signal’s abort reason.
+ abortFetch(p, request, responseObject, requestObject.signal.reason)
+ }
+ )
+
+ // 12. Let handleFetchDone given response response be to finalize and
+ // report timing with response, globalObject, and "fetch".
+ const handleFetchDone = (response) =>
+ finalizeAndReportTiming(response, 'fetch')
+
+ // 13. Set controller to the result of calling fetch given request,
+ // with processResponseEndOfBody set to handleFetchDone, and processResponse
+ // given response being these substeps:
+
+ const processResponse = (response) => {
+ // 1. If locallyAborted is true, terminate these substeps.
+ if (locallyAborted) {
+ return
+ }
+
+ // 2. If response’s aborted flag is set, then:
+ if (response.aborted) {
+ // 1. Let deserializedError be the result of deserialize a serialized
+ // abort reason given controller’s serialized abort reason and
+ // relevantRealm.
+
+ // 2. Abort the fetch() call with p, request, responseObject, and
+ // deserializedError.
+
+ abortFetch(p, request, responseObject, controller.serializedAbortReason)
+ return
+ }
+
+ // 3. If response is a network error, then reject p with a TypeError
+ // and terminate these substeps.
+ if (response.type === 'error') {
+ p.reject(
+ Object.assign(new TypeError('fetch failed'), { cause: response.error })
+ )
+ return
+ }
+
+ // 4. Set responseObject to the result of creating a Response object,
+ // given response, "immutable", and relevantRealm.
+ responseObject = new Response()
+ responseObject[kState] = response
+ responseObject[kRealm] = relevantRealm
+ responseObject[kHeaders][kHeadersList] = response.headersList
+ responseObject[kHeaders][kGuard] = 'immutable'
+ responseObject[kHeaders][kRealm] = relevantRealm
+
+ // 5. Resolve p with responseObject.
+ p.resolve(responseObject)
+ }
+
+ controller = fetching({
+ request,
+ processResponseEndOfBody: handleFetchDone,
+ processResponse,
+ dispatcher: init.dispatcher ?? getGlobalDispatcher() // undici
+ })
+
+ // 14. Return p.
+ return p.promise
+}
+
+// https://fetch.spec.whatwg.org/#finalize-and-report-timing
+function finalizeAndReportTiming (response, initiatorType = 'other') {
+ // 1. If response is an aborted network error, then return.
+ if (response.type === 'error' && response.aborted) {
+ return
+ }
+
+ // 2. If response’s URL list is null or empty, then return.
+ if (!response.urlList?.length) {
+ return
+ }
+
+ // 3. Let originalURL be response’s URL list[0].
+ const originalURL = response.urlList[0]
+
+ // 4. Let timingInfo be response’s timing info.
+ let timingInfo = response.timingInfo
+
+ // 5. Let cacheState be response’s cache state.
+ let cacheState = response.cacheState
+
+ // 6. If originalURL’s scheme is not an HTTP(S) scheme, then return.
+ if (!urlIsHttpHttpsScheme(originalURL)) {
+ return
+ }
+
+ // 7. If timingInfo is null, then return.
+ if (timingInfo === null) {
+ return
+ }
+
+ // 8. If response’s timing allow passed flag is not set, then:
+ if (!timingInfo.timingAllowPassed) {
+ // 1. Set timingInfo to a the result of creating an opaque timing info for timingInfo.
+ timingInfo = createOpaqueTimingInfo({
+ startTime: timingInfo.startTime
+ })
+
+ // 2. Set cacheState to the empty string.
+ cacheState = ''
+ }
+
+ // 9. Set timingInfo’s end time to the coarsened shared current time
+ // given global’s relevant settings object’s cross-origin isolated
+ // capability.
+ // TODO: given global’s relevant settings object’s cross-origin isolated
+ // capability?
+ timingInfo.endTime = coarsenedSharedCurrentTime()
+
+ // 10. Set response’s timing info to timingInfo.
+ response.timingInfo = timingInfo
+
+ // 11. Mark resource timing for timingInfo, originalURL, initiatorType,
+ // global, and cacheState.
+ markResourceTiming(
+ timingInfo,
+ originalURL,
+ initiatorType,
+ globalThis,
+ cacheState
+ )
+}
+
+// https://w3c.github.io/resource-timing/#dfn-mark-resource-timing
+function markResourceTiming (timingInfo, originalURL, initiatorType, globalThis, cacheState) {
+ if (nodeMajor > 18 || (nodeMajor === 18 && nodeMinor >= 2)) {
+ performance.markResourceTiming(timingInfo, originalURL.href, initiatorType, globalThis, cacheState)
+ }
+}
+
+// https://fetch.spec.whatwg.org/#abort-fetch
+function abortFetch (p, request, responseObject, error) {
+ // Note: AbortSignal.reason was added in node v17.2.0
+ // which would give us an undefined error to reject with.
+ // Remove this once node v16 is no longer supported.
+ if (!error) {
+ error = new DOMException('The operation was aborted.', 'AbortError')
+ }
+
+ // 1. Reject promise with error.
+ p.reject(error)
+
+ // 2. If request’s body is not null and is readable, then cancel request’s
+ // body with error.
+ if (request.body != null && isReadable(request.body?.stream)) {
+ request.body.stream.cancel(error).catch((err) => {
+ if (err.code === 'ERR_INVALID_STATE') {
+ // Node bug?
+ return
+ }
+ throw err
+ })
+ }
+
+ // 3. If responseObject is null, then return.
+ if (responseObject == null) {
+ return
+ }
+
+ // 4. Let response be responseObject’s response.
+ const response = responseObject[kState]
+
+ // 5. If response’s body is not null and is readable, then error response’s
+ // body with error.
+ if (response.body != null && isReadable(response.body?.stream)) {
+ response.body.stream.cancel(error).catch((err) => {
+ if (err.code === 'ERR_INVALID_STATE') {
+ // Node bug?
+ return
+ }
+ throw err
+ })
+ }
+}
+
+// https://fetch.spec.whatwg.org/#fetching
+function fetching ({
+ request,
+ processRequestBodyChunkLength,
+ processRequestEndOfBody,
+ processResponse,
+ processResponseEndOfBody,
+ processResponseConsumeBody,
+ useParallelQueue = false,
+ dispatcher // undici
+}) {
+ // 1. Let taskDestination be null.
+ let taskDestination = null
+
+ // 2. Let crossOriginIsolatedCapability be false.
+ let crossOriginIsolatedCapability = false
+
+ // 3. If request’s client is non-null, then:
+ if (request.client != null) {
+ // 1. Set taskDestination to request’s client’s global object.
+ taskDestination = request.client.globalObject
+
+ // 2. Set crossOriginIsolatedCapability to request’s client’s cross-origin
+ // isolated capability.
+ crossOriginIsolatedCapability =
+ request.client.crossOriginIsolatedCapability
+ }
+
+ // 4. If useParallelQueue is true, then set taskDestination to the result of
+ // starting a new parallel queue.
+ // TODO
+
+ // 5. Let timingInfo be a new fetch timing info whose start time and
+ // post-redirect start time are the coarsened shared current time given
+ // crossOriginIsolatedCapability.
+ const currenTime = coarsenedSharedCurrentTime(crossOriginIsolatedCapability)
+ const timingInfo = createOpaqueTimingInfo({
+ startTime: currenTime
+ })
+
+ // 6. Let fetchParams be a new fetch params whose
+ // request is request,
+ // timing info is timingInfo,
+ // process request body chunk length is processRequestBodyChunkLength,
+ // process request end-of-body is processRequestEndOfBody,
+ // process response is processResponse,
+ // process response consume body is processResponseConsumeBody,
+ // process response end-of-body is processResponseEndOfBody,
+ // task destination is taskDestination,
+ // and cross-origin isolated capability is crossOriginIsolatedCapability.
+ const fetchParams = {
+ controller: new Fetch(dispatcher),
+ request,
+ timingInfo,
+ processRequestBodyChunkLength,
+ processRequestEndOfBody,
+ processResponse,
+ processResponseConsumeBody,
+ processResponseEndOfBody,
+ taskDestination,
+ crossOriginIsolatedCapability
+ }
+
+ // 7. If request’s body is a byte sequence, then set request’s body to
+ // request’s body as a body.
+ // NOTE: Since fetching is only called from fetch, body should already be
+ // extracted.
+ assert(!request.body || request.body.stream)
+
+ // 8. If request’s window is "client", then set request’s window to request’s
+ // client, if request’s client’s global object is a Window object; otherwise
+ // "no-window".
+ if (request.window === 'client') {
+ // TODO: What if request.client is null?
+ request.window =
+ request.client?.globalObject?.constructor?.name === 'Window'
+ ? request.client
+ : 'no-window'
+ }
+
+ // 9. If request’s origin is "client", then set request’s origin to request’s
+ // client’s origin.
+ if (request.origin === 'client') {
+ // TODO: What if request.client is null?
+ request.origin = request.client?.origin
+ }
+
+ // 10. If all of the following conditions are true:
+ // TODO
+
+ // 11. If request’s policy container is "client", then:
+ if (request.policyContainer === 'client') {
+ // 1. If request’s client is non-null, then set request’s policy
+ // container to a clone of request’s client’s policy container. [HTML]
+ if (request.client != null) {
+ request.policyContainer = clonePolicyContainer(
+ request.client.policyContainer
+ )
+ } else {
+ // 2. Otherwise, set request’s policy container to a new policy
+ // container.
+ request.policyContainer = makePolicyContainer()
+ }
+ }
+
+ // 12. If request’s header list does not contain `Accept`, then:
+ if (!request.headersList.contains('accept')) {
+ // 1. Let value be `*/*`.
+ const value = '*/*'
+
+ // 2. A user agent should set value to the first matching statement, if
+ // any, switching on request’s destination:
+ // "document"
+ // "frame"
+ // "iframe"
+ // `text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8`
+ // "image"
+ // `image/png,image/svg+xml,image/*;q=0.8,*/*;q=0.5`
+ // "style"
+ // `text/css,*/*;q=0.1`
+ // TODO
+
+ // 3. Append `Accept`/value to request’s header list.
+ request.headersList.append('accept', value)
+ }
+
+ // 13. If request’s header list does not contain `Accept-Language`, then
+ // user agents should append `Accept-Language`/an appropriate value to
+ // request’s header list.
+ if (!request.headersList.contains('accept-language')) {
+ request.headersList.append('accept-language', '*')
+ }
+
+ // 14. If request’s priority is null, then use request’s initiator and
+ // destination appropriately in setting request’s priority to a
+ // user-agent-defined object.
+ if (request.priority === null) {
+ // TODO
+ }
+
+ // 15. If request is a subresource request, then:
+ if (subresource.includes(request.destination)) {
+ // TODO
+ }
+
+ // 16. Run main fetch given fetchParams.
+ mainFetch(fetchParams)
+ .catch(err => {
+ fetchParams.controller.terminate(err)
+ })
+
+ // 17. Return fetchParam's controller
+ return fetchParams.controller
+}
+
+// https://fetch.spec.whatwg.org/#concept-main-fetch
+async function mainFetch (fetchParams, recursive = false) {
+ // 1. Let request be fetchParams’s request.
+ const request = fetchParams.request
+
+ // 2. Let response be null.
+ let response = null
+
+ // 3. If request’s local-URLs-only flag is set and request’s current URL is
+ // not local, then set response to a network error.
+ if (request.localURLsOnly && !urlIsLocal(requestCurrentURL(request))) {
+ response = makeNetworkError('local URLs only')
+ }
+
+ // 4. Run report Content Security Policy violations for request.
+ // TODO
+
+ // 5. Upgrade request to a potentially trustworthy URL, if appropriate.
+ tryUpgradeRequestToAPotentiallyTrustworthyURL(request)
+
+ // 6. If should request be blocked due to a bad port, should fetching request
+ // be blocked as mixed content, or should request be blocked by Content
+ // Security Policy returns blocked, then set response to a network error.
+ if (requestBadPort(request) === 'blocked') {
+ response = makeNetworkError('bad port')
+ }
+ // TODO: should fetching request be blocked as mixed content?
+ // TODO: should request be blocked by Content Security Policy?
+
+ // 7. If request’s referrer policy is the empty string, then set request’s
+ // referrer policy to request’s policy container’s referrer policy.
+ if (request.referrerPolicy === '') {
+ request.referrerPolicy = request.policyContainer.referrerPolicy
+ }
+
+ // 8. If request’s referrer is not "no-referrer", then set request’s
+ // referrer to the result of invoking determine request’s referrer.
+ if (request.referrer !== 'no-referrer') {
+ request.referrer = determineRequestsReferrer(request)
+ }
+
+ // 9. Set request’s current URL’s scheme to "https" if all of the following
+ // conditions are true:
+ // - request’s current URL’s scheme is "http"
+ // - request’s current URL’s host is a domain
+ // - Matching request’s current URL’s host per Known HSTS Host Domain Name
+ // Matching results in either a superdomain match with an asserted
+ // includeSubDomains directive or a congruent match (with or without an
+ // asserted includeSubDomains directive). [HSTS]
+ // TODO
+
+ // 10. If recursive is false, then run the remaining steps in parallel.
+ // TODO
+
+ // 11. If response is null, then set response to the result of running
+ // the steps corresponding to the first matching statement:
+ if (response === null) {
+ response = await (async () => {
+ const currentURL = requestCurrentURL(request)
+
+ if (
+ // - request’s current URL’s origin is same origin with request’s origin,
+ // and request’s response tainting is "basic"
+ (sameOrigin(currentURL, request.url) && request.responseTainting === 'basic') ||
+ // request’s current URL’s scheme is "data"
+ (currentURL.protocol === 'data:') ||
+ // - request’s mode is "navigate" or "websocket"
+ (request.mode === 'navigate' || request.mode === 'websocket')
+ ) {
+ // 1. Set request’s response tainting to "basic".
+ request.responseTainting = 'basic'
+
+ // 2. Return the result of running scheme fetch given fetchParams.
+ return await schemeFetch(fetchParams)
+ }
+
+ // request’s mode is "same-origin"
+ if (request.mode === 'same-origin') {
+ // 1. Return a network error.
+ return makeNetworkError('request mode cannot be "same-origin"')
+ }
+
+ // request’s mode is "no-cors"
+ if (request.mode === 'no-cors') {
+ // 1. If request’s redirect mode is not "follow", then return a network
+ // error.
+ if (request.redirect !== 'follow') {
+ return makeNetworkError(
+ 'redirect mode cannot be "follow" for "no-cors" request'
+ )
+ }
+
+ // 2. Set request’s response tainting to "opaque".
+ request.responseTainting = 'opaque'
+
+ // 3. Return the result of running scheme fetch given fetchParams.
+ return await schemeFetch(fetchParams)
+ }
+
+ // request’s current URL’s scheme is not an HTTP(S) scheme
+ if (!urlIsHttpHttpsScheme(requestCurrentURL(request))) {
+ // Return a network error.
+ return makeNetworkError('URL scheme must be a HTTP(S) scheme')
+ }
+
+ // - request’s use-CORS-preflight flag is set
+ // - request’s unsafe-request flag is set and either request’s method is
+ // not a CORS-safelisted method or CORS-unsafe request-header names with
+ // request’s header list is not empty
+ // 1. Set request’s response tainting to "cors".
+ // 2. Let corsWithPreflightResponse be the result of running HTTP fetch
+ // given fetchParams and true.
+ // 3. If corsWithPreflightResponse is a network error, then clear cache
+ // entries using request.
+ // 4. Return corsWithPreflightResponse.
+ // TODO
+
+ // Otherwise
+ // 1. Set request’s response tainting to "cors".
+ request.responseTainting = 'cors'
+
+ // 2. Return the result of running HTTP fetch given fetchParams.
+ return await httpFetch(fetchParams)
+ })()
+ }
+
+ // 12. If recursive is true, then return response.
+ if (recursive) {
+ return response
+ }
+
+ // 13. If response is not a network error and response is not a filtered
+ // response, then:
+ if (response.status !== 0 && !response.internalResponse) {
+ // If request’s response tainting is "cors", then:
+ if (request.responseTainting === 'cors') {
+ // 1. Let headerNames be the result of extracting header list values
+ // given `Access-Control-Expose-Headers` and response’s header list.
+ // TODO
+ // 2. If request’s credentials mode is not "include" and headerNames
+ // contains `*`, then set response’s CORS-exposed header-name list to
+ // all unique header names in response’s header list.
+ // TODO
+ // 3. Otherwise, if headerNames is not null or failure, then set
+ // response’s CORS-exposed header-name list to headerNames.
+ // TODO
+ }
+
+ // Set response to the following filtered response with response as its
+ // internal response, depending on request’s response tainting:
+ if (request.responseTainting === 'basic') {
+ response = filterResponse(response, 'basic')
+ } else if (request.responseTainting === 'cors') {
+ response = filterResponse(response, 'cors')
+ } else if (request.responseTainting === 'opaque') {
+ response = filterResponse(response, 'opaque')
+ } else {
+ assert(false)
+ }
+ }
+
+ // 14. Let internalResponse be response, if response is a network error,
+ // and response’s internal response otherwise.
+ let internalResponse =
+ response.status === 0 ? response : response.internalResponse
+
+ // 15. If internalResponse’s URL list is empty, then set it to a clone of
+ // request’s URL list.
+ if (internalResponse.urlList.length === 0) {
+ internalResponse.urlList.push(...request.urlList)
+ }
+
+ // 16. If request’s timing allow failed flag is unset, then set
+ // internalResponse’s timing allow passed flag.
+ if (!request.timingAllowFailed) {
+ response.timingAllowPassed = true
+ }
+
+ // 17. If response is not a network error and any of the following returns
+ // blocked
+ // - should internalResponse to request be blocked as mixed content
+ // - should internalResponse to request be blocked by Content Security Policy
+ // - should internalResponse to request be blocked due to its MIME type
+ // - should internalResponse to request be blocked due to nosniff
+ // TODO
+
+ // 18. If response’s type is "opaque", internalResponse’s status is 206,
+ // internalResponse’s range-requested flag is set, and request’s header
+ // list does not contain `Range`, then set response and internalResponse
+ // to a network error.
+ if (
+ response.type === 'opaque' &&
+ internalResponse.status === 206 &&
+ internalResponse.rangeRequested &&
+ !request.headers.contains('range')
+ ) {
+ response = internalResponse = makeNetworkError()
+ }
+
+ // 19. If response is not a network error and either request’s method is
+ // `HEAD` or `CONNECT`, or internalResponse’s status is a null body status,
+ // set internalResponse’s body to null and disregard any enqueuing toward
+ // it (if any).
+ if (
+ response.status !== 0 &&
+ (request.method === 'HEAD' ||
+ request.method === 'CONNECT' ||
+ nullBodyStatus.includes(internalResponse.status))
+ ) {
+ internalResponse.body = null
+ fetchParams.controller.dump = true
+ }
+
+ // 20. If request’s integrity metadata is not the empty string, then:
+ if (request.integrity) {
+ // 1. Let processBodyError be this step: run fetch finale given fetchParams
+ // and a network error.
+ const processBodyError = (reason) =>
+ fetchFinale(fetchParams, makeNetworkError(reason))
+
+ // 2. If request’s response tainting is "opaque", or response’s body is null,
+ // then run processBodyError and abort these steps.
+ if (request.responseTainting === 'opaque' || response.body == null) {
+ processBodyError(response.error)
+ return
+ }
+
+ // 3. Let processBody given bytes be these steps:
+ const processBody = (bytes) => {
+ // 1. If bytes do not match request’s integrity metadata,
+ // then run processBodyError and abort these steps. [SRI]
+ if (!bytesMatch(bytes, request.integrity)) {
+ processBodyError('integrity mismatch')
+ return
+ }
+
+ // 2. Set response’s body to bytes as a body.
+ response.body = safelyExtractBody(bytes)[0]
+
+ // 3. Run fetch finale given fetchParams and response.
+ fetchFinale(fetchParams, response)
+ }
+
+ // 4. Fully read response’s body given processBody and processBodyError.
+ await fullyReadBody(response.body, processBody, processBodyError)
+ } else {
+ // 21. Otherwise, run fetch finale given fetchParams and response.
+ fetchFinale(fetchParams, response)
+ }
+}
+
+// https://fetch.spec.whatwg.org/#concept-scheme-fetch
+// given a fetch params fetchParams
+async function schemeFetch (fetchParams) {
+ // Note: since the connection is destroyed on redirect, which sets fetchParams to a
+ // cancelled state, we do not want this condition to trigger *unless* there have been
+ // no redirects. See https://github.com/nodejs/undici/issues/1776
+ // 1. If fetchParams is canceled, then return the appropriate network error for fetchParams.
+ if (isCancelled(fetchParams) && fetchParams.request.redirectCount === 0) {
+ return makeAppropriateNetworkError(fetchParams)
+ }
+
+ // 2. Let request be fetchParams’s request.
+ const { request } = fetchParams
+
+ const { protocol: scheme } = requestCurrentURL(request)
+
+ // 3. Switch on request’s current URL’s scheme and run the associated steps:
+ switch (scheme) {
+ case 'about:': {
+ // If request’s current URL’s path is the string "blank", then return a new response
+ // whose status message is `OK`, header list is « (`Content-Type`, `text/html;charset=utf-8`) »,
+ // and body is the empty byte sequence as a body.
+
+ // Otherwise, return a network error.
+ return makeNetworkError('about scheme is not supported')
+ }
+ case 'blob:': {
+ if (!resolveObjectURL) {
+ resolveObjectURL = (__nccwpck_require__(14300).resolveObjectURL)
+ }
+
+ // 1. Let blobURLEntry be request’s current URL’s blob URL entry.
+ const blobURLEntry = requestCurrentURL(request)
+
+ // https://github.com/web-platform-tests/wpt/blob/7b0ebaccc62b566a1965396e5be7bb2bc06f841f/FileAPI/url/resources/fetch-tests.js#L52-L56
+ // Buffer.resolveObjectURL does not ignore URL queries.
+ if (blobURLEntry.search.length !== 0) {
+ return makeNetworkError('NetworkError when attempting to fetch resource.')
+ }
+
+ const blobURLEntryObject = resolveObjectURL(blobURLEntry.toString())
+
+ // 2. If request’s method is not `GET`, blobURLEntry is null, or blobURLEntry’s
+ // object is not a Blob object, then return a network error.
+ if (request.method !== 'GET' || !isBlobLike(blobURLEntryObject)) {
+ return makeNetworkError('invalid method')
+ }
+
+ // 3. Let bodyWithType be the result of safely extracting blobURLEntry’s object.
+ const bodyWithType = safelyExtractBody(blobURLEntryObject)
+
+ // 4. Let body be bodyWithType’s body.
+ const body = bodyWithType[0]
+
+ // 5. Let length be body’s length, serialized and isomorphic encoded.
+ const length = isomorphicEncode(`${body.length}`)
+
+ // 6. Let type be bodyWithType’s type if it is non-null; otherwise the empty byte sequence.
+ const type = bodyWithType[1] ?? ''
+
+ // 7. Return a new response whose status message is `OK`, header list is
+ // « (`Content-Length`, length), (`Content-Type`, type) », and body is body.
+ const response = makeResponse({
+ statusText: 'OK',
+ headersList: [
+ ['content-length', { name: 'Content-Length', value: length }],
+ ['content-type', { name: 'Content-Type', value: type }]
+ ]
+ })
+
+ response.body = body
+
+ return response
+ }
+ case 'data:': {
+ // 1. Let dataURLStruct be the result of running the
+ // data: URL processor on request’s current URL.
+ const currentURL = requestCurrentURL(request)
+ const dataURLStruct = dataURLProcessor(currentURL)
+
+ // 2. If dataURLStruct is failure, then return a
+ // network error.
+ if (dataURLStruct === 'failure') {
+ return makeNetworkError('failed to fetch the data URL')
+ }
+
+ // 3. Let mimeType be dataURLStruct’s MIME type, serialized.
+ const mimeType = serializeAMimeType(dataURLStruct.mimeType)
+
+ // 4. Return a response whose status message is `OK`,
+ // header list is « (`Content-Type`, mimeType) »,
+ // and body is dataURLStruct’s body as a body.
+ return makeResponse({
+ statusText: 'OK',
+ headersList: [
+ ['content-type', { name: 'Content-Type', value: mimeType }]
+ ],
+ body: safelyExtractBody(dataURLStruct.body)[0]
+ })
+ }
+ case 'file:': {
+ // For now, unfortunate as it is, file URLs are left as an exercise for the reader.
+ // When in doubt, return a network error.
+ return makeNetworkError('not implemented... yet...')
+ }
+ case 'http:':
+ case 'https:': {
+ // Return the result of running HTTP fetch given fetchParams.
+
+ return await httpFetch(fetchParams)
+ .catch((err) => makeNetworkError(err))
+ }
+ default: {
+ return makeNetworkError('unknown scheme')
+ }
+ }
+}
+
+// https://fetch.spec.whatwg.org/#finalize-response
+function finalizeResponse (fetchParams, response) {
+ // 1. Set fetchParams’s request’s done flag.
+ fetchParams.request.done = true
+
+ // 2, If fetchParams’s process response done is not null, then queue a fetch
+ // task to run fetchParams’s process response done given response, with
+ // fetchParams’s task destination.
+ if (fetchParams.processResponseDone != null) {
+ queueMicrotask(() => fetchParams.processResponseDone(response))
+ }
+}
+
+// https://fetch.spec.whatwg.org/#fetch-finale
+async function fetchFinale (fetchParams, response) {
+ // 1. If response is a network error, then:
+ if (response.type === 'error') {
+ // 1. Set response’s URL list to « fetchParams’s request’s URL list[0] ».
+ response.urlList = [fetchParams.request.urlList[0]]
+
+ // 2. Set response’s timing info to the result of creating an opaque timing
+ // info for fetchParams’s timing info.
+ response.timingInfo = createOpaqueTimingInfo({
+ startTime: fetchParams.timingInfo.startTime
+ })
+ }
+
+ // 2. Let processResponseEndOfBody be the following steps:
+ const processResponseEndOfBody = () => {
+ // 1. Set fetchParams’s request’s done flag.
+ fetchParams.request.done = true
+
+ // If fetchParams’s process response end-of-body is not null,
+ // then queue a fetch task to run fetchParams’s process response
+ // end-of-body given response with fetchParams’s task destination.
+ if (fetchParams.processResponseEndOfBody != null) {
+ queueMicrotask(() => fetchParams.processResponseEndOfBody(response))
+ }
+ }
+
+ // 3. If fetchParams’s process response is non-null, then queue a fetch task
+ // to run fetchParams’s process response given response, with fetchParams’s
+ // task destination.
+ if (fetchParams.processResponse != null) {
+ queueMicrotask(() => fetchParams.processResponse(response))
+ }
+
+ // 4. If response’s body is null, then run processResponseEndOfBody.
+ if (response.body == null) {
+ processResponseEndOfBody()
+ } else {
+ // 5. Otherwise:
+
+ // 1. Let transformStream be a new a TransformStream.
+
+ // 2. Let identityTransformAlgorithm be an algorithm which, given chunk,
+ // enqueues chunk in transformStream.
+ const identityTransformAlgorithm = (chunk, controller) => {
+ controller.enqueue(chunk)
+ }
+
+ // 3. Set up transformStream with transformAlgorithm set to identityTransformAlgorithm
+ // and flushAlgorithm set to processResponseEndOfBody.
+ const transformStream = new TransformStream({
+ start () {},
+ transform: identityTransformAlgorithm,
+ flush: processResponseEndOfBody
+ }, {
+ size () {
+ return 1
+ }
+ }, {
+ size () {
+ return 1
+ }
+ })
+
+ // 4. Set response’s body to the result of piping response’s body through transformStream.
+ response.body = { stream: response.body.stream.pipeThrough(transformStream) }
+ }
+
+ // 6. If fetchParams’s process response consume body is non-null, then:
+ if (fetchParams.processResponseConsumeBody != null) {
+ // 1. Let processBody given nullOrBytes be this step: run fetchParams’s
+ // process response consume body given response and nullOrBytes.
+ const processBody = (nullOrBytes) => fetchParams.processResponseConsumeBody(response, nullOrBytes)
+
+ // 2. Let processBodyError be this step: run fetchParams’s process
+ // response consume body given response and failure.
+ const processBodyError = (failure) => fetchParams.processResponseConsumeBody(response, failure)
+
+ // 3. If response’s body is null, then queue a fetch task to run processBody
+ // given null, with fetchParams’s task destination.
+ if (response.body == null) {
+ queueMicrotask(() => processBody(null))
+ } else {
+ // 4. Otherwise, fully read response’s body given processBody, processBodyError,
+ // and fetchParams’s task destination.
+ await fullyReadBody(response.body, processBody, processBodyError)
+ }
+ }
+}
+
+// https://fetch.spec.whatwg.org/#http-fetch
+async function httpFetch (fetchParams) {
+ // 1. Let request be fetchParams’s request.
+ const request = fetchParams.request
+
+ // 2. Let response be null.
+ let response = null
+
+ // 3. Let actualResponse be null.
+ let actualResponse = null
+
+ // 4. Let timingInfo be fetchParams’s timing info.
+ const timingInfo = fetchParams.timingInfo
+
+ // 5. If request’s service-workers mode is "all", then:
+ if (request.serviceWorkers === 'all') {
+ // TODO
+ }
+
+ // 6. If response is null, then:
+ if (response === null) {
+ // 1. If makeCORSPreflight is true and one of these conditions is true:
+ // TODO
+
+ // 2. If request’s redirect mode is "follow", then set request’s
+ // service-workers mode to "none".
+ if (request.redirect === 'follow') {
+ request.serviceWorkers = 'none'
+ }
+
+ // 3. Set response and actualResponse to the result of running
+ // HTTP-network-or-cache fetch given fetchParams.
+ actualResponse = response = await httpNetworkOrCacheFetch(fetchParams)
+
+ // 4. If request’s response tainting is "cors" and a CORS check
+ // for request and response returns failure, then return a network error.
+ if (
+ request.responseTainting === 'cors' &&
+ corsCheck(request, response) === 'failure'
+ ) {
+ return makeNetworkError('cors failure')
+ }
+
+ // 5. If the TAO check for request and response returns failure, then set
+ // request’s timing allow failed flag.
+ if (TAOCheck(request, response) === 'failure') {
+ request.timingAllowFailed = true
+ }
+ }
+
+ // 7. If either request’s response tainting or response’s type
+ // is "opaque", and the cross-origin resource policy check with
+ // request’s origin, request’s client, request’s destination,
+ // and actualResponse returns blocked, then return a network error.
+ if (
+ (request.responseTainting === 'opaque' || response.type === 'opaque') &&
+ crossOriginResourcePolicyCheck(
+ request.origin,
+ request.client,
+ request.destination,
+ actualResponse
+ ) === 'blocked'
+ ) {
+ return makeNetworkError('blocked')
+ }
+
+ // 8. If actualResponse’s status is a redirect status, then:
+ if (redirectStatus.includes(actualResponse.status)) {
+ // 1. If actualResponse’s status is not 303, request’s body is not null,
+ // and the connection uses HTTP/2, then user agents may, and are even
+ // encouraged to, transmit an RST_STREAM frame.
+ // See, https://github.com/whatwg/fetch/issues/1288
+ if (request.redirect !== 'manual') {
+ fetchParams.controller.connection.destroy()
+ }
+
+ // 2. Switch on request’s redirect mode:
+ if (request.redirect === 'error') {
+ // Set response to a network error.
+ response = makeNetworkError('unexpected redirect')
+ } else if (request.redirect === 'manual') {
+ // Set response to an opaque-redirect filtered response whose internal
+ // response is actualResponse.
+ // NOTE(spec): On the web this would return an `opaqueredirect` response,
+ // but that doesn't make sense server side.
+ // See https://github.com/nodejs/undici/issues/1193.
+ response = actualResponse
+ } else if (request.redirect === 'follow') {
+ // Set response to the result of running HTTP-redirect fetch given
+ // fetchParams and response.
+ response = await httpRedirectFetch(fetchParams, response)
+ } else {
+ assert(false)
+ }
+ }
+
+ // 9. Set response’s timing info to timingInfo.
+ response.timingInfo = timingInfo
+
+ // 10. Return response.
+ return response
+}
+
+// https://fetch.spec.whatwg.org/#http-redirect-fetch
+async function httpRedirectFetch (fetchParams, response) {
+ // 1. Let request be fetchParams’s request.
+ const request = fetchParams.request
+
+ // 2. Let actualResponse be response, if response is not a filtered response,
+ // and response’s internal response otherwise.
+ const actualResponse = response.internalResponse
+ ? response.internalResponse
+ : response
+
+ // 3. Let locationURL be actualResponse’s location URL given request’s current
+ // URL’s fragment.
+ let locationURL
+
+ try {
+ locationURL = responseLocationURL(
+ actualResponse,
+ requestCurrentURL(request).hash
+ )
+
+ // 4. If locationURL is null, then return response.
+ if (locationURL == null) {
+ return response
+ }
+ } catch (err) {
+ // 5. If locationURL is failure, then return a network error.
+ return makeNetworkError(err)
+ }
+
+ // 6. If locationURL’s scheme is not an HTTP(S) scheme, then return a network
+ // error.
+ if (!urlIsHttpHttpsScheme(locationURL)) {
+ return makeNetworkError('URL scheme must be a HTTP(S) scheme')
+ }
+
+ // 7. If request’s redirect count is 20, then return a network error.
+ if (request.redirectCount === 20) {
+ return makeNetworkError('redirect count exceeded')
+ }
+
+ // 8. Increase request’s redirect count by 1.
+ request.redirectCount += 1
+
+ // 9. If request’s mode is "cors", locationURL includes credentials, and
+ // request’s origin is not same origin with locationURL’s origin, then return
+ // a network error.
+ if (
+ request.mode === 'cors' &&
+ (locationURL.username || locationURL.password) &&
+ !sameOrigin(request, locationURL)
+ ) {
+ return makeNetworkError('cross origin not allowed for request mode "cors"')
+ }
+
+ // 10. If request’s response tainting is "cors" and locationURL includes
+ // credentials, then return a network error.
+ if (
+ request.responseTainting === 'cors' &&
+ (locationURL.username || locationURL.password)
+ ) {
+ return makeNetworkError(
+ 'URL cannot contain credentials for request mode "cors"'
+ )
+ }
+
+ // 11. If actualResponse’s status is not 303, request’s body is non-null,
+ // and request’s body’s source is null, then return a network error.
+ if (
+ actualResponse.status !== 303 &&
+ request.body != null &&
+ request.body.source == null
+ ) {
+ return makeNetworkError()
+ }
+
+ // 12. If one of the following is true
+ // - actualResponse’s status is 301 or 302 and request’s method is `POST`
+ // - actualResponse’s status is 303 and request’s method is not `GET` or `HEAD`
+ if (
+ ([301, 302].includes(actualResponse.status) && request.method === 'POST') ||
+ (actualResponse.status === 303 &&
+ !['GET', 'HEAD'].includes(request.method))
+ ) {
+ // then:
+ // 1. Set request’s method to `GET` and request’s body to null.
+ request.method = 'GET'
+ request.body = null
+
+ // 2. For each headerName of request-body-header name, delete headerName from
+ // request’s header list.
+ for (const headerName of requestBodyHeader) {
+ request.headersList.delete(headerName)
+ }
+ }
+
+ // 13. If request’s current URL’s origin is not same origin with locationURL’s
+ // origin, then for each headerName of CORS non-wildcard request-header name,
+ // delete headerName from request’s header list.
+ if (!sameOrigin(requestCurrentURL(request), locationURL)) {
+ // https://fetch.spec.whatwg.org/#cors-non-wildcard-request-header-name
+ request.headersList.delete('authorization')
+
+ // "Cookie" and "Host" are forbidden request-headers, which undici doesn't implement.
+ request.headersList.delete('cookie')
+ request.headersList.delete('host')
+ }
+
+ // 14. If request’s body is non-null, then set request’s body to the first return
+ // value of safely extracting request’s body’s source.
+ if (request.body != null) {
+ assert(request.body.source != null)
+ request.body = safelyExtractBody(request.body.source)[0]
+ }
+
+ // 15. Let timingInfo be fetchParams’s timing info.
+ const timingInfo = fetchParams.timingInfo
+
+ // 16. Set timingInfo’s redirect end time and post-redirect start time to the
+ // coarsened shared current time given fetchParams’s cross-origin isolated
+ // capability.
+ timingInfo.redirectEndTime = timingInfo.postRedirectStartTime =
+ coarsenedSharedCurrentTime(fetchParams.crossOriginIsolatedCapability)
+
+ // 17. If timingInfo’s redirect start time is 0, then set timingInfo’s
+ // redirect start time to timingInfo’s start time.
+ if (timingInfo.redirectStartTime === 0) {
+ timingInfo.redirectStartTime = timingInfo.startTime
+ }
+
+ // 18. Append locationURL to request’s URL list.
+ request.urlList.push(locationURL)
+
+ // 19. Invoke set request’s referrer policy on redirect on request and
+ // actualResponse.
+ setRequestReferrerPolicyOnRedirect(request, actualResponse)
+
+ // 20. Return the result of running main fetch given fetchParams and true.
+ return mainFetch(fetchParams, true)
+}
+
+// https://fetch.spec.whatwg.org/#http-network-or-cache-fetch
+async function httpNetworkOrCacheFetch (
+ fetchParams,
+ isAuthenticationFetch = false,
+ isNewConnectionFetch = false
+) {
+ // 1. Let request be fetchParams’s request.
+ const request = fetchParams.request
+
+ // 2. Let httpFetchParams be null.
+ let httpFetchParams = null
+
+ // 3. Let httpRequest be null.
+ let httpRequest = null
+
+ // 4. Let response be null.
+ let response = null
+
+ // 5. Let storedResponse be null.
+ // TODO: cache
+
+ // 6. Let httpCache be null.
+ const httpCache = null
+
+ // 7. Let the revalidatingFlag be unset.
+ const revalidatingFlag = false
+
+ // 8. Run these steps, but abort when the ongoing fetch is terminated:
+
+ // 1. If request’s window is "no-window" and request’s redirect mode is
+ // "error", then set httpFetchParams to fetchParams and httpRequest to
+ // request.
+ if (request.window === 'no-window' && request.redirect === 'error') {
+ httpFetchParams = fetchParams
+ httpRequest = request
+ } else {
+ // Otherwise:
+
+ // 1. Set httpRequest to a clone of request.
+ httpRequest = makeRequest(request)
+
+ // 2. Set httpFetchParams to a copy of fetchParams.
+ httpFetchParams = { ...fetchParams }
+
+ // 3. Set httpFetchParams’s request to httpRequest.
+ httpFetchParams.request = httpRequest
+ }
+
+ // 3. Let includeCredentials be true if one of
+ const includeCredentials =
+ request.credentials === 'include' ||
+ (request.credentials === 'same-origin' &&
+ request.responseTainting === 'basic')
+
+ // 4. Let contentLength be httpRequest’s body’s length, if httpRequest’s
+ // body is non-null; otherwise null.
+ const contentLength = httpRequest.body ? httpRequest.body.length : null
+
+ // 5. Let contentLengthHeaderValue be null.
+ let contentLengthHeaderValue = null
+
+ // 6. If httpRequest’s body is null and httpRequest’s method is `POST` or
+ // `PUT`, then set contentLengthHeaderValue to `0`.
+ if (
+ httpRequest.body == null &&
+ ['POST', 'PUT'].includes(httpRequest.method)
+ ) {
+ contentLengthHeaderValue = '0'
+ }
+
+ // 7. If contentLength is non-null, then set contentLengthHeaderValue to
+ // contentLength, serialized and isomorphic encoded.
+ if (contentLength != null) {
+ contentLengthHeaderValue = isomorphicEncode(`${contentLength}`)
+ }
+
+ // 8. If contentLengthHeaderValue is non-null, then append
+ // `Content-Length`/contentLengthHeaderValue to httpRequest’s header
+ // list.
+ if (contentLengthHeaderValue != null) {
+ httpRequest.headersList.append('content-length', contentLengthHeaderValue)
+ }
+
+ // 9. If contentLengthHeaderValue is non-null, then append (`Content-Length`,
+ // contentLengthHeaderValue) to httpRequest’s header list.
+
+ // 10. If contentLength is non-null and httpRequest’s keepalive is true,
+ // then:
+ if (contentLength != null && httpRequest.keepalive) {
+ // NOTE: keepalive is a noop outside of browser context.
+ }
+
+ // 11. If httpRequest’s referrer is a URL, then append
+ // `Referer`/httpRequest’s referrer, serialized and isomorphic encoded,
+ // to httpRequest’s header list.
+ if (httpRequest.referrer instanceof URL) {
+ httpRequest.headersList.append('referer', isomorphicEncode(httpRequest.referrer.href))
+ }
+
+ // 12. Append a request `Origin` header for httpRequest.
+ appendRequestOriginHeader(httpRequest)
+
+ // 13. Append the Fetch metadata headers for httpRequest. [FETCH-METADATA]
+ appendFetchMetadata(httpRequest)
+
+ // 14. If httpRequest’s header list does not contain `User-Agent`, then
+ // user agents should append `User-Agent`/default `User-Agent` value to
+ // httpRequest’s header list.
+ if (!httpRequest.headersList.contains('user-agent')) {
+ httpRequest.headersList.append('user-agent', typeof esbuildDetection === 'undefined' ? 'undici' : 'node')
+ }
+
+ // 15. If httpRequest’s cache mode is "default" and httpRequest’s header
+ // list contains `If-Modified-Since`, `If-None-Match`,
+ // `If-Unmodified-Since`, `If-Match`, or `If-Range`, then set
+ // httpRequest’s cache mode to "no-store".
+ if (
+ httpRequest.cache === 'default' &&
+ (httpRequest.headersList.contains('if-modified-since') ||
+ httpRequest.headersList.contains('if-none-match') ||
+ httpRequest.headersList.contains('if-unmodified-since') ||
+ httpRequest.headersList.contains('if-match') ||
+ httpRequest.headersList.contains('if-range'))
+ ) {
+ httpRequest.cache = 'no-store'
+ }
+
+ // 16. If httpRequest’s cache mode is "no-cache", httpRequest’s prevent
+ // no-cache cache-control header modification flag is unset, and
+ // httpRequest’s header list does not contain `Cache-Control`, then append
+ // `Cache-Control`/`max-age=0` to httpRequest’s header list.
+ if (
+ httpRequest.cache === 'no-cache' &&
+ !httpRequest.preventNoCacheCacheControlHeaderModification &&
+ !httpRequest.headersList.contains('cache-control')
+ ) {
+ httpRequest.headersList.append('cache-control', 'max-age=0')
+ }
+
+ // 17. If httpRequest’s cache mode is "no-store" or "reload", then:
+ if (httpRequest.cache === 'no-store' || httpRequest.cache === 'reload') {
+ // 1. If httpRequest’s header list does not contain `Pragma`, then append
+ // `Pragma`/`no-cache` to httpRequest’s header list.
+ if (!httpRequest.headersList.contains('pragma')) {
+ httpRequest.headersList.append('pragma', 'no-cache')
+ }
+
+ // 2. If httpRequest’s header list does not contain `Cache-Control`,
+ // then append `Cache-Control`/`no-cache` to httpRequest’s header list.
+ if (!httpRequest.headersList.contains('cache-control')) {
+ httpRequest.headersList.append('cache-control', 'no-cache')
+ }
+ }
+
+ // 18. If httpRequest’s header list contains `Range`, then append
+ // `Accept-Encoding`/`identity` to httpRequest’s header list.
+ if (httpRequest.headersList.contains('range')) {
+ httpRequest.headersList.append('accept-encoding', 'identity')
+ }
+
+ // 19. Modify httpRequest’s header list per HTTP. Do not append a given
+ // header if httpRequest’s header list contains that header’s name.
+ // TODO: https://github.com/whatwg/fetch/issues/1285#issuecomment-896560129
+ if (!httpRequest.headersList.contains('accept-encoding')) {
+ if (urlHasHttpsScheme(requestCurrentURL(httpRequest))) {
+ httpRequest.headersList.append('accept-encoding', 'br, gzip, deflate')
+ } else {
+ httpRequest.headersList.append('accept-encoding', 'gzip, deflate')
+ }
+ }
+
+ httpRequest.headersList.delete('host')
+
+ // 20. If includeCredentials is true, then:
+ if (includeCredentials) {
+ // 1. If the user agent is not configured to block cookies for httpRequest
+ // (see section 7 of [COOKIES]), then:
+ // TODO: credentials
+ // 2. If httpRequest’s header list does not contain `Authorization`, then:
+ // TODO: credentials
+ }
+
+ // 21. If there’s a proxy-authentication entry, use it as appropriate.
+ // TODO: proxy-authentication
+
+ // 22. Set httpCache to the result of determining the HTTP cache
+ // partition, given httpRequest.
+ // TODO: cache
+
+ // 23. If httpCache is null, then set httpRequest’s cache mode to
+ // "no-store".
+ if (httpCache == null) {
+ httpRequest.cache = 'no-store'
+ }
+
+ // 24. If httpRequest’s cache mode is neither "no-store" nor "reload",
+ // then:
+ if (httpRequest.mode !== 'no-store' && httpRequest.mode !== 'reload') {
+ // TODO: cache
+ }
+
+ // 9. If aborted, then return the appropriate network error for fetchParams.
+ // TODO
+
+ // 10. If response is null, then:
+ if (response == null) {
+ // 1. If httpRequest’s cache mode is "only-if-cached", then return a
+ // network error.
+ if (httpRequest.mode === 'only-if-cached') {
+ return makeNetworkError('only if cached')
+ }
+
+ // 2. Let forwardResponse be the result of running HTTP-network fetch
+ // given httpFetchParams, includeCredentials, and isNewConnectionFetch.
+ const forwardResponse = await httpNetworkFetch(
+ httpFetchParams,
+ includeCredentials,
+ isNewConnectionFetch
+ )
+
+ // 3. If httpRequest’s method is unsafe and forwardResponse’s status is
+ // in the range 200 to 399, inclusive, invalidate appropriate stored
+ // responses in httpCache, as per the "Invalidation" chapter of HTTP
+ // Caching, and set storedResponse to null. [HTTP-CACHING]
+ if (
+ !safeMethods.includes(httpRequest.method) &&
+ forwardResponse.status >= 200 &&
+ forwardResponse.status <= 399
+ ) {
+ // TODO: cache
+ }
+
+ // 4. If the revalidatingFlag is set and forwardResponse’s status is 304,
+ // then:
+ if (revalidatingFlag && forwardResponse.status === 304) {
+ // TODO: cache
+ }
+
+ // 5. If response is null, then:
+ if (response == null) {
+ // 1. Set response to forwardResponse.
+ response = forwardResponse
+
+ // 2. Store httpRequest and forwardResponse in httpCache, as per the
+ // "Storing Responses in Caches" chapter of HTTP Caching. [HTTP-CACHING]
+ // TODO: cache
+ }
+ }
+
+ // 11. Set response’s URL list to a clone of httpRequest’s URL list.
+ response.urlList = [...httpRequest.urlList]
+
+ // 12. If httpRequest’s header list contains `Range`, then set response’s
+ // range-requested flag.
+ if (httpRequest.headersList.contains('range')) {
+ response.rangeRequested = true
+ }
+
+ // 13. Set response’s request-includes-credentials to includeCredentials.
+ response.requestIncludesCredentials = includeCredentials
+
+ // 14. If response’s status is 401, httpRequest’s response tainting is not
+ // "cors", includeCredentials is true, and request’s window is an environment
+ // settings object, then:
+ // TODO
+
+ // 15. If response’s status is 407, then:
+ if (response.status === 407) {
+ // 1. If request’s window is "no-window", then return a network error.
+ if (request.window === 'no-window') {
+ return makeNetworkError()
+ }
+
+ // 2. ???
+
+ // 3. If fetchParams is canceled, then return the appropriate network error for fetchParams.
+ if (isCancelled(fetchParams)) {
+ return makeAppropriateNetworkError(fetchParams)
+ }
+
+ // 4. Prompt the end user as appropriate in request’s window and store
+ // the result as a proxy-authentication entry. [HTTP-AUTH]
+ // TODO: Invoke some kind of callback?
+
+ // 5. Set response to the result of running HTTP-network-or-cache fetch given
+ // fetchParams.
+ // TODO
+ return makeNetworkError('proxy authentication required')
+ }
+
+ // 16. If all of the following are true
+ if (
+ // response’s status is 421
+ response.status === 421 &&
+ // isNewConnectionFetch is false
+ !isNewConnectionFetch &&
+ // request’s body is null, or request’s body is non-null and request’s body’s source is non-null
+ (request.body == null || request.body.source != null)
+ ) {
+ // then:
+
+ // 1. If fetchParams is canceled, then return the appropriate network error for fetchParams.
+ if (isCancelled(fetchParams)) {
+ return makeAppropriateNetworkError(fetchParams)
+ }
+
+ // 2. Set response to the result of running HTTP-network-or-cache
+ // fetch given fetchParams, isAuthenticationFetch, and true.
+
+ // TODO (spec): The spec doesn't specify this but we need to cancel
+ // the active response before we can start a new one.
+ // https://github.com/whatwg/fetch/issues/1293
+ fetchParams.controller.connection.destroy()
+
+ response = await httpNetworkOrCacheFetch(
+ fetchParams,
+ isAuthenticationFetch,
+ true
+ )
+ }
+
+ // 17. If isAuthenticationFetch is true, then create an authentication entry
+ if (isAuthenticationFetch) {
+ // TODO
+ }
+
+ // 18. Return response.
+ return response
+}
+
+// https://fetch.spec.whatwg.org/#http-network-fetch
+async function httpNetworkFetch (
+ fetchParams,
+ includeCredentials = false,
+ forceNewConnection = false
+) {
+ assert(!fetchParams.controller.connection || fetchParams.controller.connection.destroyed)
+
+ fetchParams.controller.connection = {
+ abort: null,
+ destroyed: false,
+ destroy (err) {
+ if (!this.destroyed) {
+ this.destroyed = true
+ this.abort?.(err ?? new DOMException('The operation was aborted.', 'AbortError'))
+ }
+ }
+ }
+
+ // 1. Let request be fetchParams’s request.
+ const request = fetchParams.request
+
+ // 2. Let response be null.
+ let response = null
+
+ // 3. Let timingInfo be fetchParams’s timing info.
+ const timingInfo = fetchParams.timingInfo
+
+ // 4. Let httpCache be the result of determining the HTTP cache partition,
+ // given request.
+ // TODO: cache
+ const httpCache = null
+
+ // 5. If httpCache is null, then set request’s cache mode to "no-store".
+ if (httpCache == null) {
+ request.cache = 'no-store'
+ }
+
+ // 6. Let networkPartitionKey be the result of determining the network
+ // partition key given request.
+ // TODO
+
+ // 7. Let newConnection be "yes" if forceNewConnection is true; otherwise
+ // "no".
+ const newConnection = forceNewConnection ? 'yes' : 'no' // eslint-disable-line no-unused-vars
+
+ // 8. Switch on request’s mode:
+ if (request.mode === 'websocket') {
+ // Let connection be the result of obtaining a WebSocket connection,
+ // given request’s current URL.
+ // TODO
+ } else {
+ // Let connection be the result of obtaining a connection, given
+ // networkPartitionKey, request’s current URL’s origin,
+ // includeCredentials, and forceNewConnection.
+ // TODO
+ }
+
+ // 9. Run these steps, but abort when the ongoing fetch is terminated:
+
+ // 1. If connection is failure, then return a network error.
+
+ // 2. Set timingInfo’s final connection timing info to the result of
+ // calling clamp and coarsen connection timing info with connection’s
+ // timing info, timingInfo’s post-redirect start time, and fetchParams’s
+ // cross-origin isolated capability.
+
+ // 3. If connection is not an HTTP/2 connection, request’s body is non-null,
+ // and request’s body’s source is null, then append (`Transfer-Encoding`,
+ // `chunked`) to request’s header list.
+
+ // 4. Set timingInfo’s final network-request start time to the coarsened
+ // shared current time given fetchParams’s cross-origin isolated
+ // capability.
+
+ // 5. Set response to the result of making an HTTP request over connection
+ // using request with the following caveats:
+
+ // - Follow the relevant requirements from HTTP. [HTTP] [HTTP-SEMANTICS]
+ // [HTTP-COND] [HTTP-CACHING] [HTTP-AUTH]
+
+ // - If request’s body is non-null, and request’s body’s source is null,
+ // then the user agent may have a buffer of up to 64 kibibytes and store
+ // a part of request’s body in that buffer. If the user agent reads from
+ // request’s body beyond that buffer’s size and the user agent needs to
+ // resend request, then instead return a network error.
+
+ // - Set timingInfo’s final network-response start time to the coarsened
+ // shared current time given fetchParams’s cross-origin isolated capability,
+ // immediately after the user agent’s HTTP parser receives the first byte
+ // of the response (e.g., frame header bytes for HTTP/2 or response status
+ // line for HTTP/1.x).
+
+ // - Wait until all the headers are transmitted.
+
+ // - Any responses whose status is in the range 100 to 199, inclusive,
+ // and is not 101, are to be ignored, except for the purposes of setting
+ // timingInfo’s final network-response start time above.
+
+ // - If request’s header list contains `Transfer-Encoding`/`chunked` and
+ // response is transferred via HTTP/1.0 or older, then return a network
+ // error.
+
+ // - If the HTTP request results in a TLS client certificate dialog, then:
+
+ // 1. If request’s window is an environment settings object, make the
+ // dialog available in request’s window.
+
+ // 2. Otherwise, return a network error.
+
+ // To transmit request’s body body, run these steps:
+ let requestBody = null
+ // 1. If body is null and fetchParams’s process request end-of-body is
+ // non-null, then queue a fetch task given fetchParams’s process request
+ // end-of-body and fetchParams’s task destination.
+ if (request.body == null && fetchParams.processRequestEndOfBody) {
+ queueMicrotask(() => fetchParams.processRequestEndOfBody())
+ } else if (request.body != null) {
+ // 2. Otherwise, if body is non-null:
+
+ // 1. Let processBodyChunk given bytes be these steps:
+ const processBodyChunk = async function * (bytes) {
+ // 1. If the ongoing fetch is terminated, then abort these steps.
+ if (isCancelled(fetchParams)) {
+ return
+ }
+
+ // 2. Run this step in parallel: transmit bytes.
+ yield bytes
+
+ // 3. If fetchParams’s process request body is non-null, then run
+ // fetchParams’s process request body given bytes’s length.
+ fetchParams.processRequestBodyChunkLength?.(bytes.byteLength)
+ }
+
+ // 2. Let processEndOfBody be these steps:
+ const processEndOfBody = () => {
+ // 1. If fetchParams is canceled, then abort these steps.
+ if (isCancelled(fetchParams)) {
+ return
+ }
+
+ // 2. If fetchParams’s process request end-of-body is non-null,
+ // then run fetchParams’s process request end-of-body.
+ if (fetchParams.processRequestEndOfBody) {
+ fetchParams.processRequestEndOfBody()
+ }
+ }
+
+ // 3. Let processBodyError given e be these steps:
+ const processBodyError = (e) => {
+ // 1. If fetchParams is canceled, then abort these steps.
+ if (isCancelled(fetchParams)) {
+ return
+ }
+
+ // 2. If e is an "AbortError" DOMException, then abort fetchParams’s controller.
+ if (e.name === 'AbortError') {
+ fetchParams.controller.abort()
+ } else {
+ fetchParams.controller.terminate(e)
+ }
+ }
+
+ // 4. Incrementally read request’s body given processBodyChunk, processEndOfBody,
+ // processBodyError, and fetchParams’s task destination.
+ requestBody = (async function * () {
+ try {
+ for await (const bytes of request.body.stream) {
+ yield * processBodyChunk(bytes)
+ }
+ processEndOfBody()
+ } catch (err) {
+ processBodyError(err)
+ }
+ })()
+ }
+
+ try {
+ // socket is only provided for websockets
+ const { body, status, statusText, headersList, socket } = await dispatch({ body: requestBody })
+
+ if (socket) {
+ response = makeResponse({ status, statusText, headersList, socket })
+ } else {
+ const iterator = body[Symbol.asyncIterator]()
+ fetchParams.controller.next = () => iterator.next()
+
+ response = makeResponse({ status, statusText, headersList })
+ }
+ } catch (err) {
+ // 10. If aborted, then:
+ if (err.name === 'AbortError') {
+ // 1. If connection uses HTTP/2, then transmit an RST_STREAM frame.
+ fetchParams.controller.connection.destroy()
+
+ // 2. Return the appropriate network error for fetchParams.
+ return makeAppropriateNetworkError(fetchParams, err)
+ }
+
+ return makeNetworkError(err)
+ }
+
+ // 11. Let pullAlgorithm be an action that resumes the ongoing fetch
+ // if it is suspended.
+ const pullAlgorithm = () => {
+ fetchParams.controller.resume()
+ }
+
+ // 12. Let cancelAlgorithm be an algorithm that aborts fetchParams’s
+ // controller with reason, given reason.
+ const cancelAlgorithm = (reason) => {
+ fetchParams.controller.abort(reason)
+ }
+
+ // 13. Let highWaterMark be a non-negative, non-NaN number, chosen by
+ // the user agent.
+ // TODO
+
+ // 14. Let sizeAlgorithm be an algorithm that accepts a chunk object
+ // and returns a non-negative, non-NaN, non-infinite number, chosen by the user agent.
+ // TODO
+
+ // 15. Let stream be a new ReadableStream.
+ // 16. Set up stream with pullAlgorithm set to pullAlgorithm,
+ // cancelAlgorithm set to cancelAlgorithm, highWaterMark set to
+ // highWaterMark, and sizeAlgorithm set to sizeAlgorithm.
+ if (!ReadableStream) {
+ ReadableStream = (__nccwpck_require__(35356).ReadableStream)
+ }
+
+ const stream = new ReadableStream(
+ {
+ async start (controller) {
+ fetchParams.controller.controller = controller
+ },
+ async pull (controller) {
+ await pullAlgorithm(controller)
+ },
+ async cancel (reason) {
+ await cancelAlgorithm(reason)
+ }
+ },
+ {
+ highWaterMark: 0,
+ size () {
+ return 1
+ }
+ }
+ )
+
+ // 17. Run these steps, but abort when the ongoing fetch is terminated:
+
+ // 1. Set response’s body to a new body whose stream is stream.
+ response.body = { stream }
+
+ // 2. If response is not a network error and request’s cache mode is
+ // not "no-store", then update response in httpCache for request.
+ // TODO
+
+ // 3. If includeCredentials is true and the user agent is not configured
+ // to block cookies for request (see section 7 of [COOKIES]), then run the
+ // "set-cookie-string" parsing algorithm (see section 5.2 of [COOKIES]) on
+ // the value of each header whose name is a byte-case-insensitive match for
+ // `Set-Cookie` in response’s header list, if any, and request’s current URL.
+ // TODO
+
+ // 18. If aborted, then:
+ // TODO
+
+ // 19. Run these steps in parallel:
+
+ // 1. Run these steps, but abort when fetchParams is canceled:
+ fetchParams.controller.on('terminated', onAborted)
+ fetchParams.controller.resume = async () => {
+ // 1. While true
+ while (true) {
+ // 1-3. See onData...
+
+ // 4. Set bytes to the result of handling content codings given
+ // codings and bytes.
+ let bytes
+ let isFailure
+ try {
+ const { done, value } = await fetchParams.controller.next()
+
+ if (isAborted(fetchParams)) {
+ break
+ }
+
+ bytes = done ? undefined : value
+ } catch (err) {
+ if (fetchParams.controller.ended && !timingInfo.encodedBodySize) {
+ // zlib doesn't like empty streams.
+ bytes = undefined
+ } else {
+ bytes = err
+
+ // err may be propagated from the result of calling readablestream.cancel,
+ // which might not be an error. https://github.com/nodejs/undici/issues/2009
+ isFailure = true
+ }
+ }
+
+ if (bytes === undefined) {
+ // 2. Otherwise, if the bytes transmission for response’s message
+ // body is done normally and stream is readable, then close
+ // stream, finalize response for fetchParams and response, and
+ // abort these in-parallel steps.
+ readableStreamClose(fetchParams.controller.controller)
+
+ finalizeResponse(fetchParams, response)
+
+ return
+ }
+
+ // 5. Increase timingInfo’s decoded body size by bytes’s length.
+ timingInfo.decodedBodySize += bytes?.byteLength ?? 0
+
+ // 6. If bytes is failure, then terminate fetchParams’s controller.
+ if (isFailure) {
+ fetchParams.controller.terminate(bytes)
+ return
+ }
+
+ // 7. Enqueue a Uint8Array wrapping an ArrayBuffer containing bytes
+ // into stream.
+ fetchParams.controller.controller.enqueue(new Uint8Array(bytes))
+
+ // 8. If stream is errored, then terminate the ongoing fetch.
+ if (isErrored(stream)) {
+ fetchParams.controller.terminate()
+ return
+ }
+
+ // 9. If stream doesn’t need more data ask the user agent to suspend
+ // the ongoing fetch.
+ if (!fetchParams.controller.controller.desiredSize) {
+ return
+ }
+ }
+ }
+
+ // 2. If aborted, then:
+ function onAborted (reason) {
+ // 2. If fetchParams is aborted, then:
+ if (isAborted(fetchParams)) {
+ // 1. Set response’s aborted flag.
+ response.aborted = true
+
+ // 2. If stream is readable, then error stream with the result of
+ // deserialize a serialized abort reason given fetchParams’s
+ // controller’s serialized abort reason and an
+ // implementation-defined realm.
+ if (isReadable(stream)) {
+ fetchParams.controller.controller.error(
+ fetchParams.controller.serializedAbortReason
+ )
+ }
+ } else {
+ // 3. Otherwise, if stream is readable, error stream with a TypeError.
+ if (isReadable(stream)) {
+ fetchParams.controller.controller.error(new TypeError('terminated', {
+ cause: isErrorLike(reason) ? reason : undefined
+ }))
+ }
+ }
+
+ // 4. If connection uses HTTP/2, then transmit an RST_STREAM frame.
+ // 5. Otherwise, the user agent should close connection unless it would be bad for performance to do so.
+ fetchParams.controller.connection.destroy()
+ }
+
+ // 20. Return response.
+ return response
+
+ async function dispatch ({ body }) {
+ const url = requestCurrentURL(request)
+ /** @type {import('../..').Agent} */
+ const agent = fetchParams.controller.dispatcher
+
+ return new Promise((resolve, reject) => agent.dispatch(
+ {
+ path: url.pathname + url.search,
+ origin: url.origin,
+ method: request.method,
+ body: fetchParams.controller.dispatcher.isMockActive ? request.body && request.body.source : body,
+ headers: request.headersList.entries,
+ maxRedirections: 0,
+ upgrade: request.mode === 'websocket' ? 'websocket' : undefined
+ },
+ {
+ body: null,
+ abort: null,
+
+ onConnect (abort) {
+ // TODO (fix): Do we need connection here?
+ const { connection } = fetchParams.controller
+
+ if (connection.destroyed) {
+ abort(new DOMException('The operation was aborted.', 'AbortError'))
+ } else {
+ fetchParams.controller.on('terminated', abort)
+ this.abort = connection.abort = abort
+ }
+ },
+
+ onHeaders (status, headersList, resume, statusText) {
+ if (status < 200) {
+ return
+ }
+
+ let codings = []
+ let location = ''
+
+ const headers = new Headers()
+
+ // For H2, the headers are a plain JS object
+ // We distinguish between them and iterate accordingly
+ if (Array.isArray(headersList)) {
+ for (let n = 0; n < headersList.length; n += 2) {
+ const key = headersList[n + 0].toString('latin1')
+ const val = headersList[n + 1].toString('latin1')
+ if (key.toLowerCase() === 'content-encoding') {
+ // https://www.rfc-editor.org/rfc/rfc7231#section-3.1.2.1
+ // "All content-coding values are case-insensitive..."
+ codings = val.toLowerCase().split(',').map((x) => x.trim())
+ } else if (key.toLowerCase() === 'location') {
+ location = val
+ }
+
+ headers.append(key, val)
+ }
+ } else {
+ const keys = Object.keys(headersList)
+ for (const key of keys) {
+ const val = headersList[key]
+ if (key.toLowerCase() === 'content-encoding') {
+ // https://www.rfc-editor.org/rfc/rfc7231#section-3.1.2.1
+ // "All content-coding values are case-insensitive..."
+ codings = val.toLowerCase().split(',').map((x) => x.trim()).reverse()
+ } else if (key.toLowerCase() === 'location') {
+ location = val
+ }
+
+ headers.append(key, val)
+ }
+ }
+
+ this.body = new Readable({ read: resume })
+
+ const decoders = []
+
+ const willFollow = request.redirect === 'follow' &&
+ location &&
+ redirectStatus.includes(status)
+
+ // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Encoding
+ if (request.method !== 'HEAD' && request.method !== 'CONNECT' && !nullBodyStatus.includes(status) && !willFollow) {
+ for (const coding of codings) {
+ // https://www.rfc-editor.org/rfc/rfc9112.html#section-7.2
+ if (coding === 'x-gzip' || coding === 'gzip') {
+ decoders.push(zlib.createGunzip({
+ // Be less strict when decoding compressed responses, since sometimes
+ // servers send slightly invalid responses that are still accepted
+ // by common browsers.
+ // Always using Z_SYNC_FLUSH is what cURL does.
+ flush: zlib.constants.Z_SYNC_FLUSH,
+ finishFlush: zlib.constants.Z_SYNC_FLUSH
+ }))
+ } else if (coding === 'deflate') {
+ decoders.push(zlib.createInflate())
+ } else if (coding === 'br') {
+ decoders.push(zlib.createBrotliDecompress())
+ } else {
+ decoders.length = 0
+ break
+ }
+ }
+ }
+
+ resolve({
+ status,
+ statusText,
+ headersList: headers[kHeadersList],
+ body: decoders.length
+ ? pipeline(this.body, ...decoders, () => { })
+ : this.body.on('error', () => {})
+ })
+
+ return true
+ },
+
+ onData (chunk) {
+ if (fetchParams.controller.dump) {
+ return
+ }
+
+ // 1. If one or more bytes have been transmitted from response’s
+ // message body, then:
+
+ // 1. Let bytes be the transmitted bytes.
+ const bytes = chunk
+
+ // 2. Let codings be the result of extracting header list values
+ // given `Content-Encoding` and response’s header list.
+ // See pullAlgorithm.
+
+ // 3. Increase timingInfo’s encoded body size by bytes’s length.
+ timingInfo.encodedBodySize += bytes.byteLength
+
+ // 4. See pullAlgorithm...
+
+ return this.body.push(bytes)
+ },
+
+ onComplete () {
+ if (this.abort) {
+ fetchParams.controller.off('terminated', this.abort)
+ }
+
+ fetchParams.controller.ended = true
+
+ this.body.push(null)
+ },
+
+ onError (error) {
+ if (this.abort) {
+ fetchParams.controller.off('terminated', this.abort)
+ }
+
+ this.body?.destroy(error)
+
+ fetchParams.controller.terminate(error)
+
+ reject(error)
+ },
+
+ onUpgrade (status, headersList, socket) {
+ if (status !== 101) {
+ return
+ }
+
+ const headers = new Headers()
+
+ for (let n = 0; n < headersList.length; n += 2) {
+ const key = headersList[n + 0].toString('latin1')
+ const val = headersList[n + 1].toString('latin1')
+
+ headers.append(key, val)
+ }
+
+ resolve({
+ status,
+ statusText: STATUS_CODES[status],
+ headersList: headers[kHeadersList],
+ socket
+ })
+
+ return true
+ }
+ }
+ ))
+ }
+}
+
+module.exports = {
+ fetch,
+ Fetch,
+ fetching,
+ finalizeAndReportTiming
+}
+
+
+/***/ }),
+
+/***/ 48359:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+"use strict";
+/* globals AbortController */
+
+
+
+const { extractBody, mixinBody, cloneBody } = __nccwpck_require__(41472)
+const { Headers, fill: fillHeaders, HeadersList } = __nccwpck_require__(10554)
+const { FinalizationRegistry } = __nccwpck_require__(56436)()
+const util = __nccwpck_require__(83983)
+const {
+ isValidHTTPToken,
+ sameOrigin,
+ normalizeMethod,
+ makePolicyContainer
+} = __nccwpck_require__(52538)
+const {
+ forbiddenMethods,
+ corsSafeListedMethods,
+ referrerPolicy,
+ requestRedirect,
+ requestMode,
+ requestCredentials,
+ requestCache,
+ requestDuplex
+} = __nccwpck_require__(41037)
+const { kEnumerableProperty } = util
+const { kHeaders, kSignal, kState, kGuard, kRealm } = __nccwpck_require__(15861)
+const { webidl } = __nccwpck_require__(21744)
+const { getGlobalOrigin } = __nccwpck_require__(71246)
+const { URLSerializer } = __nccwpck_require__(685)
+const { kHeadersList } = __nccwpck_require__(72785)
+const assert = __nccwpck_require__(39491)
+const { getMaxListeners, setMaxListeners, getEventListeners, defaultMaxListeners } = __nccwpck_require__(82361)
+
+let TransformStream = globalThis.TransformStream
+
+const kInit = Symbol('init')
+const kAbortController = Symbol('abortController')
+
+const requestFinalizer = new FinalizationRegistry(({ signal, abort }) => {
+ signal.removeEventListener('abort', abort)
+})
+
+// https://fetch.spec.whatwg.org/#request-class
+class Request {
+ // https://fetch.spec.whatwg.org/#dom-request
+ constructor (input, init = {}) {
+ if (input === kInit) {
+ return
+ }
+
+ webidl.argumentLengthCheck(arguments, 1, { header: 'Request constructor' })
+
+ input = webidl.converters.RequestInfo(input)
+ init = webidl.converters.RequestInit(init)
+
+ // https://html.spec.whatwg.org/multipage/webappapis.html#environment-settings-object
+ this[kRealm] = {
+ settingsObject: {
+ baseUrl: getGlobalOrigin(),
+ get origin () {
+ return this.baseUrl?.origin
+ },
+ policyContainer: makePolicyContainer()
+ }
+ }
+
+ // 1. Let request be null.
+ let request = null
+
+ // 2. Let fallbackMode be null.
+ let fallbackMode = null
+
+ // 3. Let baseURL be this’s relevant settings object’s API base URL.
+ const baseUrl = this[kRealm].settingsObject.baseUrl
+
+ // 4. Let signal be null.
+ let signal = null
+
+ // 5. If input is a string, then:
+ if (typeof input === 'string') {
+ // 1. Let parsedURL be the result of parsing input with baseURL.
+ // 2. If parsedURL is failure, then throw a TypeError.
+ let parsedURL
+ try {
+ parsedURL = new URL(input, baseUrl)
+ } catch (err) {
+ throw new TypeError('Failed to parse URL from ' + input, { cause: err })
+ }
+
+ // 3. If parsedURL includes credentials, then throw a TypeError.
+ if (parsedURL.username || parsedURL.password) {
+ throw new TypeError(
+ 'Request cannot be constructed from a URL that includes credentials: ' +
+ input
+ )
+ }
+
+ // 4. Set request to a new request whose URL is parsedURL.
+ request = makeRequest({ urlList: [parsedURL] })
+
+ // 5. Set fallbackMode to "cors".
+ fallbackMode = 'cors'
+ } else {
+ // 6. Otherwise:
+
+ // 7. Assert: input is a Request object.
+ assert(input instanceof Request)
+
+ // 8. Set request to input’s request.
+ request = input[kState]
+
+ // 9. Set signal to input’s signal.
+ signal = input[kSignal]
+ }
+
+ // 7. Let origin be this’s relevant settings object’s origin.
+ const origin = this[kRealm].settingsObject.origin
+
+ // 8. Let window be "client".
+ let window = 'client'
+
+ // 9. If request’s window is an environment settings object and its origin
+ // is same origin with origin, then set window to request’s window.
+ if (
+ request.window?.constructor?.name === 'EnvironmentSettingsObject' &&
+ sameOrigin(request.window, origin)
+ ) {
+ window = request.window
+ }
+
+ // 10. If init["window"] exists and is non-null, then throw a TypeError.
+ if (init.window != null) {
+ throw new TypeError(`'window' option '${window}' must be null`)
+ }
+
+ // 11. If init["window"] exists, then set window to "no-window".
+ if ('window' in init) {
+ window = 'no-window'
+ }
+
+ // 12. Set request to a new request with the following properties:
+ request = makeRequest({
+ // URL request’s URL.
+ // undici implementation note: this is set as the first item in request's urlList in makeRequest
+ // method request’s method.
+ method: request.method,
+ // header list A copy of request’s header list.
+ // undici implementation note: headersList is cloned in makeRequest
+ headersList: request.headersList,
+ // unsafe-request flag Set.
+ unsafeRequest: request.unsafeRequest,
+ // client This’s relevant settings object.
+ client: this[kRealm].settingsObject,
+ // window window.
+ window,
+ // priority request’s priority.
+ priority: request.priority,
+ // origin request’s origin. The propagation of the origin is only significant for navigation requests
+ // being handled by a service worker. In this scenario a request can have an origin that is different
+ // from the current client.
+ origin: request.origin,
+ // referrer request’s referrer.
+ referrer: request.referrer,
+ // referrer policy request’s referrer policy.
+ referrerPolicy: request.referrerPolicy,
+ // mode request’s mode.
+ mode: request.mode,
+ // credentials mode request’s credentials mode.
+ credentials: request.credentials,
+ // cache mode request’s cache mode.
+ cache: request.cache,
+ // redirect mode request’s redirect mode.
+ redirect: request.redirect,
+ // integrity metadata request’s integrity metadata.
+ integrity: request.integrity,
+ // keepalive request’s keepalive.
+ keepalive: request.keepalive,
+ // reload-navigation flag request’s reload-navigation flag.
+ reloadNavigation: request.reloadNavigation,
+ // history-navigation flag request’s history-navigation flag.
+ historyNavigation: request.historyNavigation,
+ // URL list A clone of request’s URL list.
+ urlList: [...request.urlList]
+ })
+
+ // 13. If init is not empty, then:
+ if (Object.keys(init).length > 0) {
+ // 1. If request’s mode is "navigate", then set it to "same-origin".
+ if (request.mode === 'navigate') {
+ request.mode = 'same-origin'
+ }
+
+ // 2. Unset request’s reload-navigation flag.
+ request.reloadNavigation = false
+
+ // 3. Unset request’s history-navigation flag.
+ request.historyNavigation = false
+
+ // 4. Set request’s origin to "client".
+ request.origin = 'client'
+
+ // 5. Set request’s referrer to "client"
+ request.referrer = 'client'
+
+ // 6. Set request’s referrer policy to the empty string.
+ request.referrerPolicy = ''
+
+ // 7. Set request’s URL to request’s current URL.
+ request.url = request.urlList[request.urlList.length - 1]
+
+ // 8. Set request’s URL list to « request’s URL ».
+ request.urlList = [request.url]
+ }
+
+ // 14. If init["referrer"] exists, then:
+ if (init.referrer !== undefined) {
+ // 1. Let referrer be init["referrer"].
+ const referrer = init.referrer
+
+ // 2. If referrer is the empty string, then set request’s referrer to "no-referrer".
+ if (referrer === '') {
+ request.referrer = 'no-referrer'
+ } else {
+ // 1. Let parsedReferrer be the result of parsing referrer with
+ // baseURL.
+ // 2. If parsedReferrer is failure, then throw a TypeError.
+ let parsedReferrer
+ try {
+ parsedReferrer = new URL(referrer, baseUrl)
+ } catch (err) {
+ throw new TypeError(`Referrer "${referrer}" is not a valid URL.`, { cause: err })
+ }
+
+ // 3. If one of the following is true
+ // - parsedReferrer’s scheme is "about" and path is the string "client"
+ // - parsedReferrer’s origin is not same origin with origin
+ // then set request’s referrer to "client".
+ if (
+ (parsedReferrer.protocol === 'about:' && parsedReferrer.hostname === 'client') ||
+ (origin && !sameOrigin(parsedReferrer, this[kRealm].settingsObject.baseUrl))
+ ) {
+ request.referrer = 'client'
+ } else {
+ // 4. Otherwise, set request’s referrer to parsedReferrer.
+ request.referrer = parsedReferrer
+ }
+ }
+ }
+
+ // 15. If init["referrerPolicy"] exists, then set request’s referrer policy
+ // to it.
+ if (init.referrerPolicy !== undefined) {
+ request.referrerPolicy = init.referrerPolicy
+ }
+
+ // 16. Let mode be init["mode"] if it exists, and fallbackMode otherwise.
+ let mode
+ if (init.mode !== undefined) {
+ mode = init.mode
+ } else {
+ mode = fallbackMode
+ }
+
+ // 17. If mode is "navigate", then throw a TypeError.
+ if (mode === 'navigate') {
+ throw webidl.errors.exception({
+ header: 'Request constructor',
+ message: 'invalid request mode navigate.'
+ })
+ }
+
+ // 18. If mode is non-null, set request’s mode to mode.
+ if (mode != null) {
+ request.mode = mode
+ }
+
+ // 19. If init["credentials"] exists, then set request’s credentials mode
+ // to it.
+ if (init.credentials !== undefined) {
+ request.credentials = init.credentials
+ }
+
+ // 18. If init["cache"] exists, then set request’s cache mode to it.
+ if (init.cache !== undefined) {
+ request.cache = init.cache
+ }
+
+ // 21. If request’s cache mode is "only-if-cached" and request’s mode is
+ // not "same-origin", then throw a TypeError.
+ if (request.cache === 'only-if-cached' && request.mode !== 'same-origin') {
+ throw new TypeError(
+ "'only-if-cached' can be set only with 'same-origin' mode"
+ )
+ }
+
+ // 22. If init["redirect"] exists, then set request’s redirect mode to it.
+ if (init.redirect !== undefined) {
+ request.redirect = init.redirect
+ }
+
+ // 23. If init["integrity"] exists, then set request’s integrity metadata to it.
+ if (init.integrity !== undefined && init.integrity != null) {
+ request.integrity = String(init.integrity)
+ }
+
+ // 24. If init["keepalive"] exists, then set request’s keepalive to it.
+ if (init.keepalive !== undefined) {
+ request.keepalive = Boolean(init.keepalive)
+ }
+
+ // 25. If init["method"] exists, then:
+ if (init.method !== undefined) {
+ // 1. Let method be init["method"].
+ let method = init.method
+
+ // 2. If method is not a method or method is a forbidden method, then
+ // throw a TypeError.
+ if (!isValidHTTPToken(init.method)) {
+ throw TypeError(`'${init.method}' is not a valid HTTP method.`)
+ }
+
+ if (forbiddenMethods.indexOf(method.toUpperCase()) !== -1) {
+ throw TypeError(`'${init.method}' HTTP method is unsupported.`)
+ }
+
+ // 3. Normalize method.
+ method = normalizeMethod(init.method)
+
+ // 4. Set request’s method to method.
+ request.method = method
+ }
+
+ // 26. If init["signal"] exists, then set signal to it.
+ if (init.signal !== undefined) {
+ signal = init.signal
+ }
+
+ // 27. Set this’s request to request.
+ this[kState] = request
+
+ // 28. Set this’s signal to a new AbortSignal object with this’s relevant
+ // Realm.
+ // TODO: could this be simplified with AbortSignal.any
+ // (https://dom.spec.whatwg.org/#dom-abortsignal-any)
+ const ac = new AbortController()
+ this[kSignal] = ac.signal
+ this[kSignal][kRealm] = this[kRealm]
+
+ // 29. If signal is not null, then make this’s signal follow signal.
+ if (signal != null) {
+ if (
+ !signal ||
+ typeof signal.aborted !== 'boolean' ||
+ typeof signal.addEventListener !== 'function'
+ ) {
+ throw new TypeError(
+ "Failed to construct 'Request': member signal is not of type AbortSignal."
+ )
+ }
+
+ if (signal.aborted) {
+ ac.abort(signal.reason)
+ } else {
+ // Keep a strong ref to ac while request object
+ // is alive. This is needed to prevent AbortController
+ // from being prematurely garbage collected.
+ // See, https://github.com/nodejs/undici/issues/1926.
+ this[kAbortController] = ac
+
+ const acRef = new WeakRef(ac)
+ const abort = function () {
+ const ac = acRef.deref()
+ if (ac !== undefined) {
+ ac.abort(this.reason)
+ }
+ }
+
+ // Third-party AbortControllers may not work with these.
+ // See, https://github.com/nodejs/undici/pull/1910#issuecomment-1464495619.
+ try {
+ // If the max amount of listeners is equal to the default, increase it
+ // This is only available in node >= v19.9.0
+ if (typeof getMaxListeners === 'function' && getMaxListeners(signal) === defaultMaxListeners) {
+ setMaxListeners(100, signal)
+ } else if (getEventListeners(signal, 'abort').length >= defaultMaxListeners) {
+ setMaxListeners(100, signal)
+ }
+ } catch {}
+
+ util.addAbortListener(signal, abort)
+ requestFinalizer.register(ac, { signal, abort })
+ }
+ }
+
+ // 30. Set this’s headers to a new Headers object with this’s relevant
+ // Realm, whose header list is request’s header list and guard is
+ // "request".
+ this[kHeaders] = new Headers()
+ this[kHeaders][kHeadersList] = request.headersList
+ this[kHeaders][kGuard] = 'request'
+ this[kHeaders][kRealm] = this[kRealm]
+
+ // 31. If this’s request’s mode is "no-cors", then:
+ if (mode === 'no-cors') {
+ // 1. If this’s request’s method is not a CORS-safelisted method,
+ // then throw a TypeError.
+ if (!corsSafeListedMethods.includes(request.method)) {
+ throw new TypeError(
+ `'${request.method} is unsupported in no-cors mode.`
+ )
+ }
+
+ // 2. Set this’s headers’s guard to "request-no-cors".
+ this[kHeaders][kGuard] = 'request-no-cors'
+ }
+
+ // 32. If init is not empty, then:
+ if (Object.keys(init).length !== 0) {
+ // 1. Let headers be a copy of this’s headers and its associated header
+ // list.
+ let headers = new Headers(this[kHeaders])
+
+ // 2. If init["headers"] exists, then set headers to init["headers"].
+ if (init.headers !== undefined) {
+ headers = init.headers
+ }
+
+ // 3. Empty this’s headers’s header list.
+ this[kHeaders][kHeadersList].clear()
+
+ // 4. If headers is a Headers object, then for each header in its header
+ // list, append header’s name/header’s value to this’s headers.
+ if (headers.constructor.name === 'Headers') {
+ for (const [key, val] of headers) {
+ this[kHeaders].append(key, val)
+ }
+ } else {
+ // 5. Otherwise, fill this’s headers with headers.
+ fillHeaders(this[kHeaders], headers)
+ }
+ }
+
+ // 33. Let inputBody be input’s request’s body if input is a Request
+ // object; otherwise null.
+ const inputBody = input instanceof Request ? input[kState].body : null
+
+ // 34. If either init["body"] exists and is non-null or inputBody is
+ // non-null, and request’s method is `GET` or `HEAD`, then throw a
+ // TypeError.
+ if (
+ (init.body != null || inputBody != null) &&
+ (request.method === 'GET' || request.method === 'HEAD')
+ ) {
+ throw new TypeError('Request with GET/HEAD method cannot have body.')
+ }
+
+ // 35. Let initBody be null.
+ let initBody = null
+
+ // 36. If init["body"] exists and is non-null, then:
+ if (init.body != null) {
+ // 1. Let Content-Type be null.
+ // 2. Set initBody and Content-Type to the result of extracting
+ // init["body"], with keepalive set to request’s keepalive.
+ const [extractedBody, contentType] = extractBody(
+ init.body,
+ request.keepalive
+ )
+ initBody = extractedBody
+
+ // 3, If Content-Type is non-null and this’s headers’s header list does
+ // not contain `Content-Type`, then append `Content-Type`/Content-Type to
+ // this’s headers.
+ if (contentType && !this[kHeaders][kHeadersList].contains('content-type')) {
+ this[kHeaders].append('content-type', contentType)
+ }
+ }
+
+ // 37. Let inputOrInitBody be initBody if it is non-null; otherwise
+ // inputBody.
+ const inputOrInitBody = initBody ?? inputBody
+
+ // 38. If inputOrInitBody is non-null and inputOrInitBody’s source is
+ // null, then:
+ if (inputOrInitBody != null && inputOrInitBody.source == null) {
+ // 1. If initBody is non-null and init["duplex"] does not exist,
+ // then throw a TypeError.
+ if (initBody != null && init.duplex == null) {
+ throw new TypeError('RequestInit: duplex option is required when sending a body.')
+ }
+
+ // 2. If this’s request’s mode is neither "same-origin" nor "cors",
+ // then throw a TypeError.
+ if (request.mode !== 'same-origin' && request.mode !== 'cors') {
+ throw new TypeError(
+ 'If request is made from ReadableStream, mode should be "same-origin" or "cors"'
+ )
+ }
+
+ // 3. Set this’s request’s use-CORS-preflight flag.
+ request.useCORSPreflightFlag = true
+ }
+
+ // 39. Let finalBody be inputOrInitBody.
+ let finalBody = inputOrInitBody
+
+ // 40. If initBody is null and inputBody is non-null, then:
+ if (initBody == null && inputBody != null) {
+ // 1. If input is unusable, then throw a TypeError.
+ if (util.isDisturbed(inputBody.stream) || inputBody.stream.locked) {
+ throw new TypeError(
+ 'Cannot construct a Request with a Request object that has already been used.'
+ )
+ }
+
+ // 2. Set finalBody to the result of creating a proxy for inputBody.
+ if (!TransformStream) {
+ TransformStream = (__nccwpck_require__(35356).TransformStream)
+ }
+
+ // https://streams.spec.whatwg.org/#readablestream-create-a-proxy
+ const identityTransform = new TransformStream()
+ inputBody.stream.pipeThrough(identityTransform)
+ finalBody = {
+ source: inputBody.source,
+ length: inputBody.length,
+ stream: identityTransform.readable
+ }
+ }
+
+ // 41. Set this’s request’s body to finalBody.
+ this[kState].body = finalBody
+ }
+
+ // Returns request’s HTTP method, which is "GET" by default.
+ get method () {
+ webidl.brandCheck(this, Request)
+
+ // The method getter steps are to return this’s request’s method.
+ return this[kState].method
+ }
+
+ // Returns the URL of request as a string.
+ get url () {
+ webidl.brandCheck(this, Request)
+
+ // The url getter steps are to return this’s request’s URL, serialized.
+ return URLSerializer(this[kState].url)
+ }
+
+ // Returns a Headers object consisting of the headers associated with request.
+ // Note that headers added in the network layer by the user agent will not
+ // be accounted for in this object, e.g., the "Host" header.
+ get headers () {
+ webidl.brandCheck(this, Request)
+
+ // The headers getter steps are to return this’s headers.
+ return this[kHeaders]
+ }
+
+ // Returns the kind of resource requested by request, e.g., "document"
+ // or "script".
+ get destination () {
+ webidl.brandCheck(this, Request)
+
+ // The destination getter are to return this’s request’s destination.
+ return this[kState].destination
+ }
+
+ // Returns the referrer of request. Its value can be a same-origin URL if
+ // explicitly set in init, the empty string to indicate no referrer, and
+ // "about:client" when defaulting to the global’s default. This is used
+ // during fetching to determine the value of the `Referer` header of the
+ // request being made.
+ get referrer () {
+ webidl.brandCheck(this, Request)
+
+ // 1. If this’s request’s referrer is "no-referrer", then return the
+ // empty string.
+ if (this[kState].referrer === 'no-referrer') {
+ return ''
+ }
+
+ // 2. If this’s request’s referrer is "client", then return
+ // "about:client".
+ if (this[kState].referrer === 'client') {
+ return 'about:client'
+ }
+
+ // Return this’s request’s referrer, serialized.
+ return this[kState].referrer.toString()
+ }
+
+ // Returns the referrer policy associated with request.
+ // This is used during fetching to compute the value of the request’s
+ // referrer.
+ get referrerPolicy () {
+ webidl.brandCheck(this, Request)
+
+ // The referrerPolicy getter steps are to return this’s request’s referrer policy.
+ return this[kState].referrerPolicy
+ }
+
+ // Returns the mode associated with request, which is a string indicating
+ // whether the request will use CORS, or will be restricted to same-origin
+ // URLs.
+ get mode () {
+ webidl.brandCheck(this, Request)
+
+ // The mode getter steps are to return this’s request’s mode.
+ return this[kState].mode
+ }
+
+ // Returns the credentials mode associated with request,
+ // which is a string indicating whether credentials will be sent with the
+ // request always, never, or only when sent to a same-origin URL.
+ get credentials () {
+ // The credentials getter steps are to return this’s request’s credentials mode.
+ return this[kState].credentials
+ }
+
+ // Returns the cache mode associated with request,
+ // which is a string indicating how the request will
+ // interact with the browser’s cache when fetching.
+ get cache () {
+ webidl.brandCheck(this, Request)
+
+ // The cache getter steps are to return this’s request’s cache mode.
+ return this[kState].cache
+ }
+
+ // Returns the redirect mode associated with request,
+ // which is a string indicating how redirects for the
+ // request will be handled during fetching. A request
+ // will follow redirects by default.
+ get redirect () {
+ webidl.brandCheck(this, Request)
+
+ // The redirect getter steps are to return this’s request’s redirect mode.
+ return this[kState].redirect
+ }
+
+ // Returns request’s subresource integrity metadata, which is a
+ // cryptographic hash of the resource being fetched. Its value
+ // consists of multiple hashes separated by whitespace. [SRI]
+ get integrity () {
+ webidl.brandCheck(this, Request)
+
+ // The integrity getter steps are to return this’s request’s integrity
+ // metadata.
+ return this[kState].integrity
+ }
+
+ // Returns a boolean indicating whether or not request can outlive the
+ // global in which it was created.
+ get keepalive () {
+ webidl.brandCheck(this, Request)
+
+ // The keepalive getter steps are to return this’s request’s keepalive.
+ return this[kState].keepalive
+ }
+
+ // Returns a boolean indicating whether or not request is for a reload
+ // navigation.
+ get isReloadNavigation () {
+ webidl.brandCheck(this, Request)
+
+ // The isReloadNavigation getter steps are to return true if this’s
+ // request’s reload-navigation flag is set; otherwise false.
+ return this[kState].reloadNavigation
+ }
+
+ // Returns a boolean indicating whether or not request is for a history
+ // navigation (a.k.a. back-foward navigation).
+ get isHistoryNavigation () {
+ webidl.brandCheck(this, Request)
+
+ // The isHistoryNavigation getter steps are to return true if this’s request’s
+ // history-navigation flag is set; otherwise false.
+ return this[kState].historyNavigation
+ }
+
+ // Returns the signal associated with request, which is an AbortSignal
+ // object indicating whether or not request has been aborted, and its
+ // abort event handler.
+ get signal () {
+ webidl.brandCheck(this, Request)
+
+ // The signal getter steps are to return this’s signal.
+ return this[kSignal]
+ }
+
+ get body () {
+ webidl.brandCheck(this, Request)
+
+ return this[kState].body ? this[kState].body.stream : null
+ }
+
+ get bodyUsed () {
+ webidl.brandCheck(this, Request)
+
+ return !!this[kState].body && util.isDisturbed(this[kState].body.stream)
+ }
+
+ get duplex () {
+ webidl.brandCheck(this, Request)
+
+ return 'half'
+ }
+
+ // Returns a clone of request.
+ clone () {
+ webidl.brandCheck(this, Request)
+
+ // 1. If this is unusable, then throw a TypeError.
+ if (this.bodyUsed || this.body?.locked) {
+ throw new TypeError('unusable')
+ }
+
+ // 2. Let clonedRequest be the result of cloning this’s request.
+ const clonedRequest = cloneRequest(this[kState])
+
+ // 3. Let clonedRequestObject be the result of creating a Request object,
+ // given clonedRequest, this’s headers’s guard, and this’s relevant Realm.
+ const clonedRequestObject = new Request(kInit)
+ clonedRequestObject[kState] = clonedRequest
+ clonedRequestObject[kRealm] = this[kRealm]
+ clonedRequestObject[kHeaders] = new Headers()
+ clonedRequestObject[kHeaders][kHeadersList] = clonedRequest.headersList
+ clonedRequestObject[kHeaders][kGuard] = this[kHeaders][kGuard]
+ clonedRequestObject[kHeaders][kRealm] = this[kHeaders][kRealm]
+
+ // 4. Make clonedRequestObject’s signal follow this’s signal.
+ const ac = new AbortController()
+ if (this.signal.aborted) {
+ ac.abort(this.signal.reason)
+ } else {
+ util.addAbortListener(
+ this.signal,
+ () => {
+ ac.abort(this.signal.reason)
+ }
+ )
+ }
+ clonedRequestObject[kSignal] = ac.signal
+
+ // 4. Return clonedRequestObject.
+ return clonedRequestObject
+ }
+}
+
+mixinBody(Request)
+
+function makeRequest (init) {
+ // https://fetch.spec.whatwg.org/#requests
+ const request = {
+ method: 'GET',
+ localURLsOnly: false,
+ unsafeRequest: false,
+ body: null,
+ client: null,
+ reservedClient: null,
+ replacesClientId: '',
+ window: 'client',
+ keepalive: false,
+ serviceWorkers: 'all',
+ initiator: '',
+ destination: '',
+ priority: null,
+ origin: 'client',
+ policyContainer: 'client',
+ referrer: 'client',
+ referrerPolicy: '',
+ mode: 'no-cors',
+ useCORSPreflightFlag: false,
+ credentials: 'same-origin',
+ useCredentials: false,
+ cache: 'default',
+ redirect: 'follow',
+ integrity: '',
+ cryptoGraphicsNonceMetadata: '',
+ parserMetadata: '',
+ reloadNavigation: false,
+ historyNavigation: false,
+ userActivation: false,
+ taintedOrigin: false,
+ redirectCount: 0,
+ responseTainting: 'basic',
+ preventNoCacheCacheControlHeaderModification: false,
+ done: false,
+ timingAllowFailed: false,
+ ...init,
+ headersList: init.headersList
+ ? new HeadersList(init.headersList)
+ : new HeadersList()
+ }
+ request.url = request.urlList[0]
+ return request
+}
+
+// https://fetch.spec.whatwg.org/#concept-request-clone
+function cloneRequest (request) {
+ // To clone a request request, run these steps:
+
+ // 1. Let newRequest be a copy of request, except for its body.
+ const newRequest = makeRequest({ ...request, body: null })
+
+ // 2. If request’s body is non-null, set newRequest’s body to the
+ // result of cloning request’s body.
+ if (request.body != null) {
+ newRequest.body = cloneBody(request.body)
+ }
+
+ // 3. Return newRequest.
+ return newRequest
+}
+
+Object.defineProperties(Request.prototype, {
+ method: kEnumerableProperty,
+ url: kEnumerableProperty,
+ headers: kEnumerableProperty,
+ redirect: kEnumerableProperty,
+ clone: kEnumerableProperty,
+ signal: kEnumerableProperty,
+ duplex: kEnumerableProperty,
+ destination: kEnumerableProperty,
+ body: kEnumerableProperty,
+ bodyUsed: kEnumerableProperty,
+ isHistoryNavigation: kEnumerableProperty,
+ isReloadNavigation: kEnumerableProperty,
+ keepalive: kEnumerableProperty,
+ integrity: kEnumerableProperty,
+ cache: kEnumerableProperty,
+ credentials: kEnumerableProperty,
+ attribute: kEnumerableProperty,
+ referrerPolicy: kEnumerableProperty,
+ referrer: kEnumerableProperty,
+ mode: kEnumerableProperty,
+ [Symbol.toStringTag]: {
+ value: 'Request',
+ configurable: true
+ }
+})
+
+webidl.converters.Request = webidl.interfaceConverter(
+ Request
+)
+
+// https://fetch.spec.whatwg.org/#requestinfo
+webidl.converters.RequestInfo = function (V) {
+ if (typeof V === 'string') {
+ return webidl.converters.USVString(V)
+ }
+
+ if (V instanceof Request) {
+ return webidl.converters.Request(V)
+ }
+
+ return webidl.converters.USVString(V)
+}
+
+webidl.converters.AbortSignal = webidl.interfaceConverter(
+ AbortSignal
+)
+
+// https://fetch.spec.whatwg.org/#requestinit
+webidl.converters.RequestInit = webidl.dictionaryConverter([
+ {
+ key: 'method',
+ converter: webidl.converters.ByteString
+ },
+ {
+ key: 'headers',
+ converter: webidl.converters.HeadersInit
+ },
+ {
+ key: 'body',
+ converter: webidl.nullableConverter(
+ webidl.converters.BodyInit
+ )
+ },
+ {
+ key: 'referrer',
+ converter: webidl.converters.USVString
+ },
+ {
+ key: 'referrerPolicy',
+ converter: webidl.converters.DOMString,
+ // https://w3c.github.io/webappsec-referrer-policy/#referrer-policy
+ allowedValues: referrerPolicy
+ },
+ {
+ key: 'mode',
+ converter: webidl.converters.DOMString,
+ // https://fetch.spec.whatwg.org/#concept-request-mode
+ allowedValues: requestMode
+ },
+ {
+ key: 'credentials',
+ converter: webidl.converters.DOMString,
+ // https://fetch.spec.whatwg.org/#requestcredentials
+ allowedValues: requestCredentials
+ },
+ {
+ key: 'cache',
+ converter: webidl.converters.DOMString,
+ // https://fetch.spec.whatwg.org/#requestcache
+ allowedValues: requestCache
+ },
+ {
+ key: 'redirect',
+ converter: webidl.converters.DOMString,
+ // https://fetch.spec.whatwg.org/#requestredirect
+ allowedValues: requestRedirect
+ },
+ {
+ key: 'integrity',
+ converter: webidl.converters.DOMString
+ },
+ {
+ key: 'keepalive',
+ converter: webidl.converters.boolean
+ },
+ {
+ key: 'signal',
+ converter: webidl.nullableConverter(
+ (signal) => webidl.converters.AbortSignal(
+ signal,
+ { strict: false }
+ )
+ )
+ },
+ {
+ key: 'window',
+ converter: webidl.converters.any
+ },
+ {
+ key: 'duplex',
+ converter: webidl.converters.DOMString,
+ allowedValues: requestDuplex
+ }
+])
+
+module.exports = { Request, makeRequest }
+
+
+/***/ }),
+
+/***/ 27823:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+"use strict";
+
+
+const { Headers, HeadersList, fill } = __nccwpck_require__(10554)
+const { extractBody, cloneBody, mixinBody } = __nccwpck_require__(41472)
+const util = __nccwpck_require__(83983)
+const { kEnumerableProperty } = util
+const {
+ isValidReasonPhrase,
+ isCancelled,
+ isAborted,
+ isBlobLike,
+ serializeJavascriptValueToJSONString,
+ isErrorLike,
+ isomorphicEncode
+} = __nccwpck_require__(52538)
+const {
+ redirectStatus,
+ nullBodyStatus,
+ DOMException
+} = __nccwpck_require__(41037)
+const { kState, kHeaders, kGuard, kRealm } = __nccwpck_require__(15861)
+const { webidl } = __nccwpck_require__(21744)
+const { FormData } = __nccwpck_require__(72015)
+const { getGlobalOrigin } = __nccwpck_require__(71246)
+const { URLSerializer } = __nccwpck_require__(685)
+const { kHeadersList } = __nccwpck_require__(72785)
+const assert = __nccwpck_require__(39491)
+const { types } = __nccwpck_require__(73837)
+
+const ReadableStream = globalThis.ReadableStream || (__nccwpck_require__(35356).ReadableStream)
+
+// https://fetch.spec.whatwg.org/#response-class
+class Response {
+ // Creates network error Response.
+ static error () {
+ // TODO
+ const relevantRealm = { settingsObject: {} }
+
+ // The static error() method steps are to return the result of creating a
+ // Response object, given a new network error, "immutable", and this’s
+ // relevant Realm.
+ const responseObject = new Response()
+ responseObject[kState] = makeNetworkError()
+ responseObject[kRealm] = relevantRealm
+ responseObject[kHeaders][kHeadersList] = responseObject[kState].headersList
+ responseObject[kHeaders][kGuard] = 'immutable'
+ responseObject[kHeaders][kRealm] = relevantRealm
+ return responseObject
+ }
+
+ // https://fetch.spec.whatwg.org/#dom-response-json
+ static json (data, init = {}) {
+ webidl.argumentLengthCheck(arguments, 1, { header: 'Response.json' })
+
+ if (init !== null) {
+ init = webidl.converters.ResponseInit(init)
+ }
+
+ // 1. Let bytes the result of running serialize a JavaScript value to JSON bytes on data.
+ const bytes = new TextEncoder('utf-8').encode(
+ serializeJavascriptValueToJSONString(data)
+ )
+
+ // 2. Let body be the result of extracting bytes.
+ const body = extractBody(bytes)
+
+ // 3. Let responseObject be the result of creating a Response object, given a new response,
+ // "response", and this’s relevant Realm.
+ const relevantRealm = { settingsObject: {} }
+ const responseObject = new Response()
+ responseObject[kRealm] = relevantRealm
+ responseObject[kHeaders][kGuard] = 'response'
+ responseObject[kHeaders][kRealm] = relevantRealm
+
+ // 4. Perform initialize a response given responseObject, init, and (body, "application/json").
+ initializeResponse(responseObject, init, { body: body[0], type: 'application/json' })
+
+ // 5. Return responseObject.
+ return responseObject
+ }
+
+ // Creates a redirect Response that redirects to url with status status.
+ static redirect (url, status = 302) {
+ const relevantRealm = { settingsObject: {} }
+
+ webidl.argumentLengthCheck(arguments, 1, { header: 'Response.redirect' })
+
+ url = webidl.converters.USVString(url)
+ status = webidl.converters['unsigned short'](status)
+
+ // 1. Let parsedURL be the result of parsing url with current settings
+ // object’s API base URL.
+ // 2. If parsedURL is failure, then throw a TypeError.
+ // TODO: base-URL?
+ let parsedURL
+ try {
+ parsedURL = new URL(url, getGlobalOrigin())
+ } catch (err) {
+ throw Object.assign(new TypeError('Failed to parse URL from ' + url), {
+ cause: err
+ })
+ }
+
+ // 3. If status is not a redirect status, then throw a RangeError.
+ if (!redirectStatus.includes(status)) {
+ throw new RangeError('Invalid status code ' + status)
+ }
+
+ // 4. Let responseObject be the result of creating a Response object,
+ // given a new response, "immutable", and this’s relevant Realm.
+ const responseObject = new Response()
+ responseObject[kRealm] = relevantRealm
+ responseObject[kHeaders][kGuard] = 'immutable'
+ responseObject[kHeaders][kRealm] = relevantRealm
+
+ // 5. Set responseObject’s response’s status to status.
+ responseObject[kState].status = status
+
+ // 6. Let value be parsedURL, serialized and isomorphic encoded.
+ const value = isomorphicEncode(URLSerializer(parsedURL))
+
+ // 7. Append `Location`/value to responseObject’s response’s header list.
+ responseObject[kState].headersList.append('location', value)
+
+ // 8. Return responseObject.
+ return responseObject
+ }
+
+ // https://fetch.spec.whatwg.org/#dom-response
+ constructor (body = null, init = {}) {
+ if (body !== null) {
+ body = webidl.converters.BodyInit(body)
+ }
+
+ init = webidl.converters.ResponseInit(init)
+
+ // TODO
+ this[kRealm] = { settingsObject: {} }
+
+ // 1. Set this’s response to a new response.
+ this[kState] = makeResponse({})
+
+ // 2. Set this’s headers to a new Headers object with this’s relevant
+ // Realm, whose header list is this’s response’s header list and guard
+ // is "response".
+ this[kHeaders] = new Headers()
+ this[kHeaders][kGuard] = 'response'
+ this[kHeaders][kHeadersList] = this[kState].headersList
+ this[kHeaders][kRealm] = this[kRealm]
+
+ // 3. Let bodyWithType be null.
+ let bodyWithType = null
+
+ // 4. If body is non-null, then set bodyWithType to the result of extracting body.
+ if (body != null) {
+ const [extractedBody, type] = extractBody(body)
+ bodyWithType = { body: extractedBody, type }
+ }
+
+ // 5. Perform initialize a response given this, init, and bodyWithType.
+ initializeResponse(this, init, bodyWithType)
+ }
+
+ // Returns response’s type, e.g., "cors".
+ get type () {
+ webidl.brandCheck(this, Response)
+
+ // The type getter steps are to return this’s response’s type.
+ return this[kState].type
+ }
+
+ // Returns response’s URL, if it has one; otherwise the empty string.
+ get url () {
+ webidl.brandCheck(this, Response)
+
+ const urlList = this[kState].urlList
+
+ // The url getter steps are to return the empty string if this’s
+ // response’s URL is null; otherwise this’s response’s URL,
+ // serialized with exclude fragment set to true.
+ const url = urlList[urlList.length - 1] ?? null
+
+ if (url === null) {
+ return ''
+ }
+
+ return URLSerializer(url, true)
+ }
+
+ // Returns whether response was obtained through a redirect.
+ get redirected () {
+ webidl.brandCheck(this, Response)
+
+ // The redirected getter steps are to return true if this’s response’s URL
+ // list has more than one item; otherwise false.
+ return this[kState].urlList.length > 1
+ }
+
+ // Returns response’s status.
+ get status () {
+ webidl.brandCheck(this, Response)
+
+ // The status getter steps are to return this’s response’s status.
+ return this[kState].status
+ }
+
+ // Returns whether response’s status is an ok status.
+ get ok () {
+ webidl.brandCheck(this, Response)
+
+ // The ok getter steps are to return true if this’s response’s status is an
+ // ok status; otherwise false.
+ return this[kState].status >= 200 && this[kState].status <= 299
+ }
+
+ // Returns response’s status message.
+ get statusText () {
+ webidl.brandCheck(this, Response)
+
+ // The statusText getter steps are to return this’s response’s status
+ // message.
+ return this[kState].statusText
+ }
+
+ // Returns response’s headers as Headers.
+ get headers () {
+ webidl.brandCheck(this, Response)
+
+ // The headers getter steps are to return this’s headers.
+ return this[kHeaders]
+ }
+
+ get body () {
+ webidl.brandCheck(this, Response)
+
+ return this[kState].body ? this[kState].body.stream : null
+ }
+
+ get bodyUsed () {
+ webidl.brandCheck(this, Response)
+
+ return !!this[kState].body && util.isDisturbed(this[kState].body.stream)
+ }
+
+ // Returns a clone of response.
+ clone () {
+ webidl.brandCheck(this, Response)
+
+ // 1. If this is unusable, then throw a TypeError.
+ if (this.bodyUsed || (this.body && this.body.locked)) {
+ throw webidl.errors.exception({
+ header: 'Response.clone',
+ message: 'Body has already been consumed.'
+ })
+ }
+
+ // 2. Let clonedResponse be the result of cloning this’s response.
+ const clonedResponse = cloneResponse(this[kState])
+
+ // 3. Return the result of creating a Response object, given
+ // clonedResponse, this’s headers’s guard, and this’s relevant Realm.
+ const clonedResponseObject = new Response()
+ clonedResponseObject[kState] = clonedResponse
+ clonedResponseObject[kRealm] = this[kRealm]
+ clonedResponseObject[kHeaders][kHeadersList] = clonedResponse.headersList
+ clonedResponseObject[kHeaders][kGuard] = this[kHeaders][kGuard]
+ clonedResponseObject[kHeaders][kRealm] = this[kHeaders][kRealm]
+
+ return clonedResponseObject
+ }
+}
+
+mixinBody(Response)
+
+Object.defineProperties(Response.prototype, {
+ type: kEnumerableProperty,
+ url: kEnumerableProperty,
+ status: kEnumerableProperty,
+ ok: kEnumerableProperty,
+ redirected: kEnumerableProperty,
+ statusText: kEnumerableProperty,
+ headers: kEnumerableProperty,
+ clone: kEnumerableProperty,
+ body: kEnumerableProperty,
+ bodyUsed: kEnumerableProperty,
+ [Symbol.toStringTag]: {
+ value: 'Response',
+ configurable: true
+ }
+})
+
+Object.defineProperties(Response, {
+ json: kEnumerableProperty,
+ redirect: kEnumerableProperty,
+ error: kEnumerableProperty
+})
+
+// https://fetch.spec.whatwg.org/#concept-response-clone
+function cloneResponse (response) {
+ // To clone a response response, run these steps:
+
+ // 1. If response is a filtered response, then return a new identical
+ // filtered response whose internal response is a clone of response’s
+ // internal response.
+ if (response.internalResponse) {
+ return filterResponse(
+ cloneResponse(response.internalResponse),
+ response.type
+ )
+ }
+
+ // 2. Let newResponse be a copy of response, except for its body.
+ const newResponse = makeResponse({ ...response, body: null })
+
+ // 3. If response’s body is non-null, then set newResponse’s body to the
+ // result of cloning response’s body.
+ if (response.body != null) {
+ newResponse.body = cloneBody(response.body)
+ }
+
+ // 4. Return newResponse.
+ return newResponse
+}
+
+function makeResponse (init) {
+ return {
+ aborted: false,
+ rangeRequested: false,
+ timingAllowPassed: false,
+ requestIncludesCredentials: false,
+ type: 'default',
+ status: 200,
+ timingInfo: null,
+ cacheState: '',
+ statusText: '',
+ ...init,
+ headersList: init.headersList
+ ? new HeadersList(init.headersList)
+ : new HeadersList(),
+ urlList: init.urlList ? [...init.urlList] : []
+ }
+}
+
+function makeNetworkError (reason) {
+ const isError = isErrorLike(reason)
+ return makeResponse({
+ type: 'error',
+ status: 0,
+ error: isError
+ ? reason
+ : new Error(reason ? String(reason) : reason),
+ aborted: reason && reason.name === 'AbortError'
+ })
+}
+
+function makeFilteredResponse (response, state) {
+ state = {
+ internalResponse: response,
+ ...state
+ }
+
+ return new Proxy(response, {
+ get (target, p) {
+ return p in state ? state[p] : target[p]
+ },
+ set (target, p, value) {
+ assert(!(p in state))
+ target[p] = value
+ return true
+ }
+ })
+}
+
+// https://fetch.spec.whatwg.org/#concept-filtered-response
+function filterResponse (response, type) {
+ // Set response to the following filtered response with response as its
+ // internal response, depending on request’s response tainting:
+ if (type === 'basic') {
+ // A basic filtered response is a filtered response whose type is "basic"
+ // and header list excludes any headers in internal response’s header list
+ // whose name is a forbidden response-header name.
+
+ // Note: undici does not implement forbidden response-header names
+ return makeFilteredResponse(response, {
+ type: 'basic',
+ headersList: response.headersList
+ })
+ } else if (type === 'cors') {
+ // A CORS filtered response is a filtered response whose type is "cors"
+ // and header list excludes any headers in internal response’s header
+ // list whose name is not a CORS-safelisted response-header name, given
+ // internal response’s CORS-exposed header-name list.
+
+ // Note: undici does not implement CORS-safelisted response-header names
+ return makeFilteredResponse(response, {
+ type: 'cors',
+ headersList: response.headersList
+ })
+ } else if (type === 'opaque') {
+ // An opaque filtered response is a filtered response whose type is
+ // "opaque", URL list is the empty list, status is 0, status message
+ // is the empty byte sequence, header list is empty, and body is null.
+
+ return makeFilteredResponse(response, {
+ type: 'opaque',
+ urlList: Object.freeze([]),
+ status: 0,
+ statusText: '',
+ body: null
+ })
+ } else if (type === 'opaqueredirect') {
+ // An opaque-redirect filtered response is a filtered response whose type
+ // is "opaqueredirect", status is 0, status message is the empty byte
+ // sequence, header list is empty, and body is null.
+
+ return makeFilteredResponse(response, {
+ type: 'opaqueredirect',
+ status: 0,
+ statusText: '',
+ headersList: [],
+ body: null
+ })
+ } else {
+ assert(false)
+ }
+}
+
+// https://fetch.spec.whatwg.org/#appropriate-network-error
+function makeAppropriateNetworkError (fetchParams, err = null) {
+ // 1. Assert: fetchParams is canceled.
+ assert(isCancelled(fetchParams))
+
+ // 2. Return an aborted network error if fetchParams is aborted;
+ // otherwise return a network error.
+ return isAborted(fetchParams)
+ ? makeNetworkError(Object.assign(new DOMException('The operation was aborted.', 'AbortError'), { cause: err }))
+ : makeNetworkError(Object.assign(new DOMException('Request was cancelled.'), { cause: err }))
+}
+
+// https://whatpr.org/fetch/1392.html#initialize-a-response
+function initializeResponse (response, init, body) {
+ // 1. If init["status"] is not in the range 200 to 599, inclusive, then
+ // throw a RangeError.
+ if (init.status !== null && (init.status < 200 || init.status > 599)) {
+ throw new RangeError('init["status"] must be in the range of 200 to 599, inclusive.')
+ }
+
+ // 2. If init["statusText"] does not match the reason-phrase token production,
+ // then throw a TypeError.
+ if ('statusText' in init && init.statusText != null) {
+ // See, https://datatracker.ietf.org/doc/html/rfc7230#section-3.1.2:
+ // reason-phrase = *( HTAB / SP / VCHAR / obs-text )
+ if (!isValidReasonPhrase(String(init.statusText))) {
+ throw new TypeError('Invalid statusText')
+ }
+ }
+
+ // 3. Set response’s response’s status to init["status"].
+ if ('status' in init && init.status != null) {
+ response[kState].status = init.status
+ }
+
+ // 4. Set response’s response’s status message to init["statusText"].
+ if ('statusText' in init && init.statusText != null) {
+ response[kState].statusText = init.statusText
+ }
+
+ // 5. If init["headers"] exists, then fill response’s headers with init["headers"].
+ if ('headers' in init && init.headers != null) {
+ fill(response[kHeaders], init.headers)
+ }
+
+ // 6. If body was given, then:
+ if (body) {
+ // 1. If response's status is a null body status, then throw a TypeError.
+ if (nullBodyStatus.includes(response.status)) {
+ throw webidl.errors.exception({
+ header: 'Response constructor',
+ message: 'Invalid response status code ' + response.status
+ })
+ }
+
+ // 2. Set response's body to body's body.
+ response[kState].body = body.body
+
+ // 3. If body's type is non-null and response's header list does not contain
+ // `Content-Type`, then append (`Content-Type`, body's type) to response's header list.
+ if (body.type != null && !response[kState].headersList.contains('Content-Type')) {
+ response[kState].headersList.append('content-type', body.type)
+ }
+ }
+}
+
+webidl.converters.ReadableStream = webidl.interfaceConverter(
+ ReadableStream
+)
+
+webidl.converters.FormData = webidl.interfaceConverter(
+ FormData
+)
+
+webidl.converters.URLSearchParams = webidl.interfaceConverter(
+ URLSearchParams
+)
+
+// https://fetch.spec.whatwg.org/#typedefdef-xmlhttprequestbodyinit
+webidl.converters.XMLHttpRequestBodyInit = function (V) {
+ if (typeof V === 'string') {
+ return webidl.converters.USVString(V)
+ }
+
+ if (isBlobLike(V)) {
+ return webidl.converters.Blob(V, { strict: false })
+ }
+
+ if (
+ types.isAnyArrayBuffer(V) ||
+ types.isTypedArray(V) ||
+ types.isDataView(V)
+ ) {
+ return webidl.converters.BufferSource(V)
+ }
+
+ if (util.isFormDataLike(V)) {
+ return webidl.converters.FormData(V, { strict: false })
+ }
+
+ if (V instanceof URLSearchParams) {
+ return webidl.converters.URLSearchParams(V)
+ }
+
+ return webidl.converters.DOMString(V)
+}
+
+// https://fetch.spec.whatwg.org/#bodyinit
+webidl.converters.BodyInit = function (V) {
+ if (V instanceof ReadableStream) {
+ return webidl.converters.ReadableStream(V)
+ }
+
+ // Note: the spec doesn't include async iterables,
+ // this is an undici extension.
+ if (V?.[Symbol.asyncIterator]) {
+ return V
+ }
+
+ return webidl.converters.XMLHttpRequestBodyInit(V)
+}
+
+webidl.converters.ResponseInit = webidl.dictionaryConverter([
+ {
+ key: 'status',
+ converter: webidl.converters['unsigned short'],
+ defaultValue: 200
+ },
+ {
+ key: 'statusText',
+ converter: webidl.converters.ByteString,
+ defaultValue: ''
+ },
+ {
+ key: 'headers',
+ converter: webidl.converters.HeadersInit
+ }
+])
+
+module.exports = {
+ makeNetworkError,
+ makeResponse,
+ makeAppropriateNetworkError,
+ filterResponse,
+ Response,
+ cloneResponse
+}
+
+
+/***/ }),
+
+/***/ 15861:
+/***/ ((module) => {
+
+"use strict";
+
+
+module.exports = {
+ kUrl: Symbol('url'),
+ kHeaders: Symbol('headers'),
+ kSignal: Symbol('signal'),
+ kState: Symbol('state'),
+ kGuard: Symbol('guard'),
+ kRealm: Symbol('realm')
+}
+
+
+/***/ }),
+
+/***/ 52538:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+"use strict";
+
+
+const { redirectStatus, badPorts, referrerPolicy: referrerPolicyTokens } = __nccwpck_require__(41037)
+const { getGlobalOrigin } = __nccwpck_require__(71246)
+const { performance } = __nccwpck_require__(4074)
+const { isBlobLike, toUSVString, ReadableStreamFrom } = __nccwpck_require__(83983)
+const assert = __nccwpck_require__(39491)
+const { isUint8Array } = __nccwpck_require__(29830)
+
+// https://nodejs.org/api/crypto.html#determining-if-crypto-support-is-unavailable
+/** @type {import('crypto')|undefined} */
+let crypto
+
+try {
+ crypto = __nccwpck_require__(6113)
+} catch {
+
+}
+
+function responseURL (response) {
+ // https://fetch.spec.whatwg.org/#responses
+ // A response has an associated URL. It is a pointer to the last URL
+ // in response’s URL list and null if response’s URL list is empty.
+ const urlList = response.urlList
+ const length = urlList.length
+ return length === 0 ? null : urlList[length - 1].toString()
+}
+
+// https://fetch.spec.whatwg.org/#concept-response-location-url
+function responseLocationURL (response, requestFragment) {
+ // 1. If response’s status is not a redirect status, then return null.
+ if (!redirectStatus.includes(response.status)) {
+ return null
+ }
+
+ // 2. Let location be the result of extracting header list values given
+ // `Location` and response’s header list.
+ let location = response.headersList.get('location')
+
+ // 3. If location is a header value, then set location to the result of
+ // parsing location with response’s URL.
+ if (location !== null && isValidHeaderValue(location)) {
+ location = new URL(location, responseURL(response))
+ }
+
+ // 4. If location is a URL whose fragment is null, then set location’s
+ // fragment to requestFragment.
+ if (location && !location.hash) {
+ location.hash = requestFragment
+ }
+
+ // 5. Return location.
+ return location
+}
+
+/** @returns {URL} */
+function requestCurrentURL (request) {
+ return request.urlList[request.urlList.length - 1]
+}
+
+function requestBadPort (request) {
+ // 1. Let url be request’s current URL.
+ const url = requestCurrentURL(request)
+
+ // 2. If url’s scheme is an HTTP(S) scheme and url’s port is a bad port,
+ // then return blocked.
+ if (urlIsHttpHttpsScheme(url) && badPorts.includes(url.port)) {
+ return 'blocked'
+ }
+
+ // 3. Return allowed.
+ return 'allowed'
+}
+
+function isErrorLike (object) {
+ return object instanceof Error || (
+ object?.constructor?.name === 'Error' ||
+ object?.constructor?.name === 'DOMException'
+ )
+}
+
+// Check whether |statusText| is a ByteString and
+// matches the Reason-Phrase token production.
+// RFC 2616: https://tools.ietf.org/html/rfc2616
+// RFC 7230: https://tools.ietf.org/html/rfc7230
+// "reason-phrase = *( HTAB / SP / VCHAR / obs-text )"
+// https://github.com/chromium/chromium/blob/94.0.4604.1/third_party/blink/renderer/core/fetch/response.cc#L116
+function isValidReasonPhrase (statusText) {
+ for (let i = 0; i < statusText.length; ++i) {
+ const c = statusText.charCodeAt(i)
+ if (
+ !(
+ (
+ c === 0x09 || // HTAB
+ (c >= 0x20 && c <= 0x7e) || // SP / VCHAR
+ (c >= 0x80 && c <= 0xff)
+ ) // obs-text
+ )
+ ) {
+ return false
+ }
+ }
+ return true
+}
+
+function isTokenChar (c) {
+ return !(
+ c >= 0x7f ||
+ c <= 0x20 ||
+ c === '(' ||
+ c === ')' ||
+ c === '<' ||
+ c === '>' ||
+ c === '@' ||
+ c === ',' ||
+ c === ';' ||
+ c === ':' ||
+ c === '\\' ||
+ c === '"' ||
+ c === '/' ||
+ c === '[' ||
+ c === ']' ||
+ c === '?' ||
+ c === '=' ||
+ c === '{' ||
+ c === '}'
+ )
+}
+
+// See RFC 7230, Section 3.2.6.
+// https://github.com/chromium/chromium/blob/d7da0240cae77824d1eda25745c4022757499131/third_party/blink/renderer/platform/network/http_parsers.cc#L321
+function isValidHTTPToken (characters) {
+ if (!characters || typeof characters !== 'string') {
+ return false
+ }
+ for (let i = 0; i < characters.length; ++i) {
+ const c = characters.charCodeAt(i)
+ if (c > 0x7f || !isTokenChar(c)) {
+ return false
+ }
+ }
+ return true
+}
+
+// https://fetch.spec.whatwg.org/#header-name
+// https://github.com/chromium/chromium/blob/b3d37e6f94f87d59e44662d6078f6a12de845d17/net/http/http_util.cc#L342
+function isValidHeaderName (potentialValue) {
+ if (potentialValue.length === 0) {
+ return false
+ }
+
+ return isValidHTTPToken(potentialValue)
+}
+
+/**
+ * @see https://fetch.spec.whatwg.org/#header-value
+ * @param {string} potentialValue
+ */
+function isValidHeaderValue (potentialValue) {
+ // - Has no leading or trailing HTTP tab or space bytes.
+ // - Contains no 0x00 (NUL) or HTTP newline bytes.
+ if (
+ potentialValue.startsWith('\t') ||
+ potentialValue.startsWith(' ') ||
+ potentialValue.endsWith('\t') ||
+ potentialValue.endsWith(' ')
+ ) {
+ return false
+ }
+
+ if (
+ potentialValue.includes('\0') ||
+ potentialValue.includes('\r') ||
+ potentialValue.includes('\n')
+ ) {
+ return false
+ }
+
+ return true
+}
+
+// https://w3c.github.io/webappsec-referrer-policy/#set-requests-referrer-policy-on-redirect
+function setRequestReferrerPolicyOnRedirect (request, actualResponse) {
+ // Given a request request and a response actualResponse, this algorithm
+ // updates request’s referrer policy according to the Referrer-Policy
+ // header (if any) in actualResponse.
+
+ // 1. Let policy be the result of executing § 8.1 Parse a referrer policy
+ // from a Referrer-Policy header on actualResponse.
+
+ // 8.1 Parse a referrer policy from a Referrer-Policy header
+ // 1. Let policy-tokens be the result of extracting header list values given `Referrer-Policy` and response’s header list.
+ const { headersList } = actualResponse
+ // 2. Let policy be the empty string.
+ // 3. For each token in policy-tokens, if token is a referrer policy and token is not the empty string, then set policy to token.
+ // 4. Return policy.
+ const policyHeader = (headersList.get('referrer-policy') ?? '').split(',')
+
+ // Note: As the referrer-policy can contain multiple policies
+ // separated by comma, we need to loop through all of them
+ // and pick the first valid one.
+ // Ref: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Referrer-Policy#specify_a_fallback_policy
+ let policy = ''
+ if (policyHeader.length > 0) {
+ // The right-most policy takes precedence.
+ // The left-most policy is the fallback.
+ for (let i = policyHeader.length; i !== 0; i--) {
+ const token = policyHeader[i - 1].trim()
+ if (referrerPolicyTokens.includes(token)) {
+ policy = token
+ break
+ }
+ }
+ }
+
+ // 2. If policy is not the empty string, then set request’s referrer policy to policy.
+ if (policy !== '') {
+ request.referrerPolicy = policy
+ }
+}
+
+// https://fetch.spec.whatwg.org/#cross-origin-resource-policy-check
+function crossOriginResourcePolicyCheck () {
+ // TODO
+ return 'allowed'
+}
+
+// https://fetch.spec.whatwg.org/#concept-cors-check
+function corsCheck () {
+ // TODO
+ return 'success'
+}
+
+// https://fetch.spec.whatwg.org/#concept-tao-check
+function TAOCheck () {
+ // TODO
+ return 'success'
+}
+
+function appendFetchMetadata (httpRequest) {
+ // https://w3c.github.io/webappsec-fetch-metadata/#sec-fetch-dest-header
+ // TODO
+
+ // https://w3c.github.io/webappsec-fetch-metadata/#sec-fetch-mode-header
+
+ // 1. Assert: r’s url is a potentially trustworthy URL.
+ // TODO
+
+ // 2. Let header be a Structured Header whose value is a token.
+ let header = null
+
+ // 3. Set header’s value to r’s mode.
+ header = httpRequest.mode
+
+ // 4. Set a structured field value `Sec-Fetch-Mode`/header in r’s header list.
+ httpRequest.headersList.set('sec-fetch-mode', header)
+
+ // https://w3c.github.io/webappsec-fetch-metadata/#sec-fetch-site-header
+ // TODO
+
+ // https://w3c.github.io/webappsec-fetch-metadata/#sec-fetch-user-header
+ // TODO
+}
+
+// https://fetch.spec.whatwg.org/#append-a-request-origin-header
+function appendRequestOriginHeader (request) {
+ // 1. Let serializedOrigin be the result of byte-serializing a request origin with request.
+ let serializedOrigin = request.origin
+
+ // 2. If request’s response tainting is "cors" or request’s mode is "websocket", then append (`Origin`, serializedOrigin) to request’s header list.
+ if (request.responseTainting === 'cors' || request.mode === 'websocket') {
+ if (serializedOrigin) {
+ request.headersList.append('origin', serializedOrigin)
+ }
+
+ // 3. Otherwise, if request’s method is neither `GET` nor `HEAD`, then:
+ } else if (request.method !== 'GET' && request.method !== 'HEAD') {
+ // 1. Switch on request’s referrer policy:
+ switch (request.referrerPolicy) {
+ case 'no-referrer':
+ // Set serializedOrigin to `null`.
+ serializedOrigin = null
+ break
+ case 'no-referrer-when-downgrade':
+ case 'strict-origin':
+ case 'strict-origin-when-cross-origin':
+ // If request’s origin is a tuple origin, its scheme is "https", and request’s current URL’s scheme is not "https", then set serializedOrigin to `null`.
+ if (request.origin && urlHasHttpsScheme(request.origin) && !urlHasHttpsScheme(requestCurrentURL(request))) {
+ serializedOrigin = null
+ }
+ break
+ case 'same-origin':
+ // If request’s origin is not same origin with request’s current URL’s origin, then set serializedOrigin to `null`.
+ if (!sameOrigin(request, requestCurrentURL(request))) {
+ serializedOrigin = null
+ }
+ break
+ default:
+ // Do nothing.
+ }
+
+ if (serializedOrigin) {
+ // 2. Append (`Origin`, serializedOrigin) to request’s header list.
+ request.headersList.append('origin', serializedOrigin)
+ }
+ }
+}
+
+function coarsenedSharedCurrentTime (crossOriginIsolatedCapability) {
+ // TODO
+ return performance.now()
+}
+
+// https://fetch.spec.whatwg.org/#create-an-opaque-timing-info
+function createOpaqueTimingInfo (timingInfo) {
+ return {
+ startTime: timingInfo.startTime ?? 0,
+ redirectStartTime: 0,
+ redirectEndTime: 0,
+ postRedirectStartTime: timingInfo.startTime ?? 0,
+ finalServiceWorkerStartTime: 0,
+ finalNetworkResponseStartTime: 0,
+ finalNetworkRequestStartTime: 0,
+ endTime: 0,
+ encodedBodySize: 0,
+ decodedBodySize: 0,
+ finalConnectionTimingInfo: null
+ }
+}
+
+// https://html.spec.whatwg.org/multipage/origin.html#policy-container
+function makePolicyContainer () {
+ // Note: the fetch spec doesn't make use of embedder policy or CSP list
+ return {
+ referrerPolicy: 'strict-origin-when-cross-origin'
+ }
+}
+
+// https://html.spec.whatwg.org/multipage/origin.html#clone-a-policy-container
+function clonePolicyContainer (policyContainer) {
+ return {
+ referrerPolicy: policyContainer.referrerPolicy
+ }
+}
+
+// https://w3c.github.io/webappsec-referrer-policy/#determine-requests-referrer
+function determineRequestsReferrer (request) {
+ // 1. Let policy be request's referrer policy.
+ const policy = request.referrerPolicy
+
+ // Note: policy cannot (shouldn't) be null or an empty string.
+ assert(policy)
+
+ // 2. Let environment be request’s client.
+
+ let referrerSource = null
+
+ // 3. Switch on request’s referrer:
+ if (request.referrer === 'client') {
+ // Note: node isn't a browser and doesn't implement document/iframes,
+ // so we bypass this step and replace it with our own.
+
+ const globalOrigin = getGlobalOrigin()
+
+ if (!globalOrigin || globalOrigin.origin === 'null') {
+ return 'no-referrer'
+ }
+
+ // note: we need to clone it as it's mutated
+ referrerSource = new URL(globalOrigin)
+ } else if (request.referrer instanceof URL) {
+ // Let referrerSource be request’s referrer.
+ referrerSource = request.referrer
+ }
+
+ // 4. Let request’s referrerURL be the result of stripping referrerSource for
+ // use as a referrer.
+ let referrerURL = stripURLForReferrer(referrerSource)
+
+ // 5. Let referrerOrigin be the result of stripping referrerSource for use as
+ // a referrer, with the origin-only flag set to true.
+ const referrerOrigin = stripURLForReferrer(referrerSource, true)
+
+ // 6. If the result of serializing referrerURL is a string whose length is
+ // greater than 4096, set referrerURL to referrerOrigin.
+ if (referrerURL.toString().length > 4096) {
+ referrerURL = referrerOrigin
+ }
+
+ const areSameOrigin = sameOrigin(request, referrerURL)
+ const isNonPotentiallyTrustWorthy = isURLPotentiallyTrustworthy(referrerURL) &&
+ !isURLPotentiallyTrustworthy(request.url)
+
+ // 8. Execute the switch statements corresponding to the value of policy:
+ switch (policy) {
+ case 'origin': return referrerOrigin != null ? referrerOrigin : stripURLForReferrer(referrerSource, true)
+ case 'unsafe-url': return referrerURL
+ case 'same-origin':
+ return areSameOrigin ? referrerOrigin : 'no-referrer'
+ case 'origin-when-cross-origin':
+ return areSameOrigin ? referrerURL : referrerOrigin
+ case 'strict-origin-when-cross-origin': {
+ const currentURL = requestCurrentURL(request)
+
+ // 1. If the origin of referrerURL and the origin of request’s current
+ // URL are the same, then return referrerURL.
+ if (sameOrigin(referrerURL, currentURL)) {
+ return referrerURL
+ }
+
+ // 2. If referrerURL is a potentially trustworthy URL and request’s
+ // current URL is not a potentially trustworthy URL, then return no
+ // referrer.
+ if (isURLPotentiallyTrustworthy(referrerURL) && !isURLPotentiallyTrustworthy(currentURL)) {
+ return 'no-referrer'
+ }
+
+ // 3. Return referrerOrigin.
+ return referrerOrigin
+ }
+ case 'strict-origin': // eslint-disable-line
+ /**
+ * 1. If referrerURL is a potentially trustworthy URL and
+ * request’s current URL is not a potentially trustworthy URL,
+ * then return no referrer.
+ * 2. Return referrerOrigin
+ */
+ case 'no-referrer-when-downgrade': // eslint-disable-line
+ /**
+ * 1. If referrerURL is a potentially trustworthy URL and
+ * request’s current URL is not a potentially trustworthy URL,
+ * then return no referrer.
+ * 2. Return referrerOrigin
+ */
+
+ default: // eslint-disable-line
+ return isNonPotentiallyTrustWorthy ? 'no-referrer' : referrerOrigin
+ }
+}
+
+/**
+ * @see https://w3c.github.io/webappsec-referrer-policy/#strip-url
+ * @param {URL} url
+ * @param {boolean|undefined} originOnly
+ */
+function stripURLForReferrer (url, originOnly) {
+ // 1. Assert: url is a URL.
+ assert(url instanceof URL)
+
+ // 2. If url’s scheme is a local scheme, then return no referrer.
+ if (url.protocol === 'file:' || url.protocol === 'about:' || url.protocol === 'blank:') {
+ return 'no-referrer'
+ }
+
+ // 3. Set url’s username to the empty string.
+ url.username = ''
+
+ // 4. Set url’s password to the empty string.
+ url.password = ''
+
+ // 5. Set url’s fragment to null.
+ url.hash = ''
+
+ // 6. If the origin-only flag is true, then:
+ if (originOnly) {
+ // 1. Set url’s path to « the empty string ».
+ url.pathname = ''
+
+ // 2. Set url’s query to null.
+ url.search = ''
+ }
+
+ // 7. Return url.
+ return url
+}
+
+function isURLPotentiallyTrustworthy (url) {
+ if (!(url instanceof URL)) {
+ return false
+ }
+
+ // If child of about, return true
+ if (url.href === 'about:blank' || url.href === 'about:srcdoc') {
+ return true
+ }
+
+ // If scheme is data, return true
+ if (url.protocol === 'data:') return true
+
+ // If file, return true
+ if (url.protocol === 'file:') return true
+
+ return isOriginPotentiallyTrustworthy(url.origin)
+
+ function isOriginPotentiallyTrustworthy (origin) {
+ // If origin is explicitly null, return false
+ if (origin == null || origin === 'null') return false
+
+ const originAsURL = new URL(origin)
+
+ // If secure, return true
+ if (originAsURL.protocol === 'https:' || originAsURL.protocol === 'wss:') {
+ return true
+ }
+
+ // If localhost or variants, return true
+ if (/^127(?:\.[0-9]+){0,2}\.[0-9]+$|^\[(?:0*:)*?:?0*1\]$/.test(originAsURL.hostname) ||
+ (originAsURL.hostname === 'localhost' || originAsURL.hostname.includes('localhost.')) ||
+ (originAsURL.hostname.endsWith('.localhost'))) {
+ return true
+ }
+
+ // If any other, return false
+ return false
+ }
+}
+
+/**
+ * @see https://w3c.github.io/webappsec-subresource-integrity/#does-response-match-metadatalist
+ * @param {Uint8Array} bytes
+ * @param {string} metadataList
+ */
+function bytesMatch (bytes, metadataList) {
+ // If node is not built with OpenSSL support, we cannot check
+ // a request's integrity, so allow it by default (the spec will
+ // allow requests if an invalid hash is given, as precedence).
+ /* istanbul ignore if: only if node is built with --without-ssl */
+ if (crypto === undefined) {
+ return true
+ }
+
+ // 1. Let parsedMetadata be the result of parsing metadataList.
+ const parsedMetadata = parseMetadata(metadataList)
+
+ // 2. If parsedMetadata is no metadata, return true.
+ if (parsedMetadata === 'no metadata') {
+ return true
+ }
+
+ // 3. If parsedMetadata is the empty set, return true.
+ if (parsedMetadata.length === 0) {
+ return true
+ }
+
+ // 4. Let metadata be the result of getting the strongest
+ // metadata from parsedMetadata.
+ const list = parsedMetadata.sort((c, d) => d.algo.localeCompare(c.algo))
+ // get the strongest algorithm
+ const strongest = list[0].algo
+ // get all entries that use the strongest algorithm; ignore weaker
+ const metadata = list.filter((item) => item.algo === strongest)
+
+ // 5. For each item in metadata:
+ for (const item of metadata) {
+ // 1. Let algorithm be the alg component of item.
+ const algorithm = item.algo
+
+ // 2. Let expectedValue be the val component of item.
+ let expectedValue = item.hash
+
+ // See https://github.com/web-platform-tests/wpt/commit/e4c5cc7a5e48093220528dfdd1c4012dc3837a0e
+ // "be liberal with padding". This is annoying, and it's not even in the spec.
+
+ if (expectedValue.endsWith('==')) {
+ expectedValue = expectedValue.slice(0, -2)
+ }
+
+ // 3. Let actualValue be the result of applying algorithm to bytes.
+ let actualValue = crypto.createHash(algorithm).update(bytes).digest('base64')
+
+ if (actualValue.endsWith('==')) {
+ actualValue = actualValue.slice(0, -2)
+ }
+
+ // 4. If actualValue is a case-sensitive match for expectedValue,
+ // return true.
+ if (actualValue === expectedValue) {
+ return true
+ }
+
+ let actualBase64URL = crypto.createHash(algorithm).update(bytes).digest('base64url')
+
+ if (actualBase64URL.endsWith('==')) {
+ actualBase64URL = actualBase64URL.slice(0, -2)
+ }
+
+ if (actualBase64URL === expectedValue) {
+ return true
+ }
+ }
+
+ // 6. Return false.
+ return false
+}
+
+// https://w3c.github.io/webappsec-subresource-integrity/#grammardef-hash-with-options
+// https://www.w3.org/TR/CSP2/#source-list-syntax
+// https://www.rfc-editor.org/rfc/rfc5234#appendix-B.1
+const parseHashWithOptions = /((?sha256|sha384|sha512)-(?[A-z0-9+/]{1}.*={0,2}))( +[\x21-\x7e]?)?/i
+
+/**
+ * @see https://w3c.github.io/webappsec-subresource-integrity/#parse-metadata
+ * @param {string} metadata
+ */
+function parseMetadata (metadata) {
+ // 1. Let result be the empty set.
+ /** @type {{ algo: string, hash: string }[]} */
+ const result = []
+
+ // 2. Let empty be equal to true.
+ let empty = true
+
+ const supportedHashes = crypto.getHashes()
+
+ // 3. For each token returned by splitting metadata on spaces:
+ for (const token of metadata.split(' ')) {
+ // 1. Set empty to false.
+ empty = false
+
+ // 2. Parse token as a hash-with-options.
+ const parsedToken = parseHashWithOptions.exec(token)
+
+ // 3. If token does not parse, continue to the next token.
+ if (parsedToken === null || parsedToken.groups === undefined) {
+ // Note: Chromium blocks the request at this point, but Firefox
+ // gives a warning that an invalid integrity was given. The
+ // correct behavior is to ignore these, and subsequently not
+ // check the integrity of the resource.
+ continue
+ }
+
+ // 4. Let algorithm be the hash-algo component of token.
+ const algorithm = parsedToken.groups.algo
+
+ // 5. If algorithm is a hash function recognized by the user
+ // agent, add the parsed token to result.
+ if (supportedHashes.includes(algorithm.toLowerCase())) {
+ result.push(parsedToken.groups)
+ }
+ }
+
+ // 4. Return no metadata if empty is true, otherwise return result.
+ if (empty === true) {
+ return 'no metadata'
+ }
+
+ return result
+}
+
+// https://w3c.github.io/webappsec-upgrade-insecure-requests/#upgrade-request
+function tryUpgradeRequestToAPotentiallyTrustworthyURL (request) {
+ // TODO
+}
+
+/**
+ * @link {https://html.spec.whatwg.org/multipage/origin.html#same-origin}
+ * @param {URL} A
+ * @param {URL} B
+ */
+function sameOrigin (A, B) {
+ // 1. If A and B are the same opaque origin, then return true.
+ if (A.origin === B.origin && A.origin === 'null') {
+ return true
+ }
+
+ // 2. If A and B are both tuple origins and their schemes,
+ // hosts, and port are identical, then return true.
+ if (A.protocol === B.protocol && A.hostname === B.hostname && A.port === B.port) {
+ return true
+ }
+
+ // 3. Return false.
+ return false
+}
+
+function createDeferredPromise () {
+ let res
+ let rej
+ const promise = new Promise((resolve, reject) => {
+ res = resolve
+ rej = reject
+ })
+
+ return { promise, resolve: res, reject: rej }
+}
+
+function isAborted (fetchParams) {
+ return fetchParams.controller.state === 'aborted'
+}
+
+function isCancelled (fetchParams) {
+ return fetchParams.controller.state === 'aborted' ||
+ fetchParams.controller.state === 'terminated'
+}
+
+// https://fetch.spec.whatwg.org/#concept-method-normalize
+function normalizeMethod (method) {
+ return /^(DELETE|GET|HEAD|OPTIONS|POST|PUT)$/i.test(method)
+ ? method.toUpperCase()
+ : method
+}
+
+// https://infra.spec.whatwg.org/#serialize-a-javascript-value-to-a-json-string
+function serializeJavascriptValueToJSONString (value) {
+ // 1. Let result be ? Call(%JSON.stringify%, undefined, « value »).
+ const result = JSON.stringify(value)
+
+ // 2. If result is undefined, then throw a TypeError.
+ if (result === undefined) {
+ throw new TypeError('Value is not JSON serializable')
+ }
+
+ // 3. Assert: result is a string.
+ assert(typeof result === 'string')
+
+ // 4. Return result.
+ return result
+}
+
+// https://tc39.es/ecma262/#sec-%25iteratorprototype%25-object
+const esIteratorPrototype = Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]()))
+
+/**
+ * @see https://webidl.spec.whatwg.org/#dfn-iterator-prototype-object
+ * @param {() => unknown[]} iterator
+ * @param {string} name name of the instance
+ * @param {'key'|'value'|'key+value'} kind
+ */
+function makeIterator (iterator, name, kind) {
+ const object = {
+ index: 0,
+ kind,
+ target: iterator
+ }
+
+ const i = {
+ next () {
+ // 1. Let interface be the interface for which the iterator prototype object exists.
+
+ // 2. Let thisValue be the this value.
+
+ // 3. Let object be ? ToObject(thisValue).
+
+ // 4. If object is a platform object, then perform a security
+ // check, passing:
+
+ // 5. If object is not a default iterator object for interface,
+ // then throw a TypeError.
+ if (Object.getPrototypeOf(this) !== i) {
+ throw new TypeError(
+ `'next' called on an object that does not implement interface ${name} Iterator.`
+ )
+ }
+
+ // 6. Let index be object’s index.
+ // 7. Let kind be object’s kind.
+ // 8. Let values be object’s target's value pairs to iterate over.
+ const { index, kind, target } = object
+ const values = target()
+
+ // 9. Let len be the length of values.
+ const len = values.length
+
+ // 10. If index is greater than or equal to len, then return
+ // CreateIterResultObject(undefined, true).
+ if (index >= len) {
+ return { value: undefined, done: true }
+ }
+
+ // 11. Let pair be the entry in values at index index.
+ const pair = values[index]
+
+ // 12. Set object’s index to index + 1.
+ object.index = index + 1
+
+ // 13. Return the iterator result for pair and kind.
+ return iteratorResult(pair, kind)
+ },
+ // The class string of an iterator prototype object for a given interface is the
+ // result of concatenating the identifier of the interface and the string " Iterator".
+ [Symbol.toStringTag]: `${name} Iterator`
+ }
+
+ // The [[Prototype]] internal slot of an iterator prototype object must be %IteratorPrototype%.
+ Object.setPrototypeOf(i, esIteratorPrototype)
+ // esIteratorPrototype needs to be the prototype of i
+ // which is the prototype of an empty object. Yes, it's confusing.
+ return Object.setPrototypeOf({}, i)
+}
+
+// https://webidl.spec.whatwg.org/#iterator-result
+function iteratorResult (pair, kind) {
+ let result
+
+ // 1. Let result be a value determined by the value of kind:
+ switch (kind) {
+ case 'key': {
+ // 1. Let idlKey be pair’s key.
+ // 2. Let key be the result of converting idlKey to an
+ // ECMAScript value.
+ // 3. result is key.
+ result = pair[0]
+ break
+ }
+ case 'value': {
+ // 1. Let idlValue be pair’s value.
+ // 2. Let value be the result of converting idlValue to
+ // an ECMAScript value.
+ // 3. result is value.
+ result = pair[1]
+ break
+ }
+ case 'key+value': {
+ // 1. Let idlKey be pair’s key.
+ // 2. Let idlValue be pair’s value.
+ // 3. Let key be the result of converting idlKey to an
+ // ECMAScript value.
+ // 4. Let value be the result of converting idlValue to
+ // an ECMAScript value.
+ // 5. Let array be ! ArrayCreate(2).
+ // 6. Call ! CreateDataProperty(array, "0", key).
+ // 7. Call ! CreateDataProperty(array, "1", value).
+ // 8. result is array.
+ result = pair
+ break
+ }
+ }
+
+ // 2. Return CreateIterResultObject(result, false).
+ return { value: result, done: false }
+}
+
+/**
+ * @see https://fetch.spec.whatwg.org/#body-fully-read
+ */
+async function fullyReadBody (body, processBody, processBodyError) {
+ // 1. If taskDestination is null, then set taskDestination to
+ // the result of starting a new parallel queue.
+
+ // 2. Let successSteps given a byte sequence bytes be to queue a
+ // fetch task to run processBody given bytes, with taskDestination.
+ const successSteps = processBody
+
+ // 3. Let errorSteps be to queue a fetch task to run processBodyError,
+ // with taskDestination.
+ const errorSteps = processBodyError
+
+ // 4. Let reader be the result of getting a reader for body’s stream.
+ // If that threw an exception, then run errorSteps with that
+ // exception and return.
+ let reader
+
+ try {
+ reader = body.stream.getReader()
+ } catch (e) {
+ errorSteps(e)
+ return
+ }
+
+ // 5. Read all bytes from reader, given successSteps and errorSteps.
+ try {
+ const result = await readAllBytes(reader)
+ successSteps(result)
+ } catch (e) {
+ errorSteps(e)
+ }
+}
+
+/** @type {ReadableStream} */
+let ReadableStream = globalThis.ReadableStream
+
+function isReadableStreamLike (stream) {
+ if (!ReadableStream) {
+ ReadableStream = (__nccwpck_require__(35356).ReadableStream)
+ }
+
+ return stream instanceof ReadableStream || (
+ stream[Symbol.toStringTag] === 'ReadableStream' &&
+ typeof stream.tee === 'function'
+ )
+}
+
+const MAXIMUM_ARGUMENT_LENGTH = 65535
+
+/**
+ * @see https://infra.spec.whatwg.org/#isomorphic-decode
+ * @param {number[]|Uint8Array} input
+ */
+function isomorphicDecode (input) {
+ // 1. To isomorphic decode a byte sequence input, return a string whose code point
+ // length is equal to input’s length and whose code points have the same values
+ // as the values of input’s bytes, in the same order.
+
+ if (input.length < MAXIMUM_ARGUMENT_LENGTH) {
+ return String.fromCharCode(...input)
+ }
+
+ return input.reduce((previous, current) => previous + String.fromCharCode(current), '')
+}
+
+/**
+ * @param {ReadableStreamController} controller
+ */
+function readableStreamClose (controller) {
+ try {
+ controller.close()
+ } catch (err) {
+ // TODO: add comment explaining why this error occurs.
+ if (!err.message.includes('Controller is already closed')) {
+ throw err
+ }
+ }
+}
+
+/**
+ * @see https://infra.spec.whatwg.org/#isomorphic-encode
+ * @param {string} input
+ */
+function isomorphicEncode (input) {
+ // 1. Assert: input contains no code points greater than U+00FF.
+ for (let i = 0; i < input.length; i++) {
+ assert(input.charCodeAt(i) <= 0xFF)
+ }
+
+ // 2. Return a byte sequence whose length is equal to input’s code
+ // point length and whose bytes have the same values as the
+ // values of input’s code points, in the same order
+ return input
+}
+
+/**
+ * @see https://streams.spec.whatwg.org/#readablestreamdefaultreader-read-all-bytes
+ * @see https://streams.spec.whatwg.org/#read-loop
+ * @param {ReadableStreamDefaultReader} reader
+ */
+async function readAllBytes (reader) {
+ const bytes = []
+ let byteLength = 0
+
+ while (true) {
+ const { done, value: chunk } = await reader.read()
+
+ if (done) {
+ // 1. Call successSteps with bytes.
+ return Buffer.concat(bytes, byteLength)
+ }
+
+ // 1. If chunk is not a Uint8Array object, call failureSteps
+ // with a TypeError and abort these steps.
+ if (!isUint8Array(chunk)) {
+ throw new TypeError('Received non-Uint8Array chunk')
+ }
+
+ // 2. Append the bytes represented by chunk to bytes.
+ bytes.push(chunk)
+ byteLength += chunk.length
+
+ // 3. Read-loop given reader, bytes, successSteps, and failureSteps.
+ }
+}
+
+/**
+ * @see https://fetch.spec.whatwg.org/#is-local
+ * @param {URL} url
+ */
+function urlIsLocal (url) {
+ assert('protocol' in url) // ensure it's a url object
+
+ const protocol = url.protocol
+
+ return protocol === 'about:' || protocol === 'blob:' || protocol === 'data:'
+}
+
+/**
+ * @param {string|URL} url
+ */
+function urlHasHttpsScheme (url) {
+ if (typeof url === 'string') {
+ return url.startsWith('https:')
+ }
+
+ return url.protocol === 'https:'
+}
+
+/**
+ * @see https://fetch.spec.whatwg.org/#http-scheme
+ * @param {URL} url
+ */
+function urlIsHttpHttpsScheme (url) {
+ assert('protocol' in url) // ensure it's a url object
+
+ const protocol = url.protocol
+
+ return protocol === 'http:' || protocol === 'https:'
+}
+
+/**
+ * Fetch supports node >= 16.8.0, but Object.hasOwn was added in v16.9.0.
+ */
+const hasOwn = Object.hasOwn || ((dict, key) => Object.prototype.hasOwnProperty.call(dict, key))
+
+module.exports = {
+ isAborted,
+ isCancelled,
+ createDeferredPromise,
+ ReadableStreamFrom,
+ toUSVString,
+ tryUpgradeRequestToAPotentiallyTrustworthyURL,
+ coarsenedSharedCurrentTime,
+ determineRequestsReferrer,
+ makePolicyContainer,
+ clonePolicyContainer,
+ appendFetchMetadata,
+ appendRequestOriginHeader,
+ TAOCheck,
+ corsCheck,
+ crossOriginResourcePolicyCheck,
+ createOpaqueTimingInfo,
+ setRequestReferrerPolicyOnRedirect,
+ isValidHTTPToken,
+ requestBadPort,
+ requestCurrentURL,
+ responseURL,
+ responseLocationURL,
+ isBlobLike,
+ isURLPotentiallyTrustworthy,
+ isValidReasonPhrase,
+ sameOrigin,
+ normalizeMethod,
+ serializeJavascriptValueToJSONString,
+ makeIterator,
+ isValidHeaderName,
+ isValidHeaderValue,
+ hasOwn,
+ isErrorLike,
+ fullyReadBody,
+ bytesMatch,
+ isReadableStreamLike,
+ readableStreamClose,
+ isomorphicEncode,
+ isomorphicDecode,
+ urlIsLocal,
+ urlHasHttpsScheme,
+ urlIsHttpHttpsScheme,
+ readAllBytes
+}
+
+
+/***/ }),
+
+/***/ 21744:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+"use strict";
+
+
+const { types } = __nccwpck_require__(73837)
+const { hasOwn, toUSVString } = __nccwpck_require__(52538)
+
+/** @type {import('../../types/webidl').Webidl} */
+const webidl = {}
+webidl.converters = {}
+webidl.util = {}
+webidl.errors = {}
+
+webidl.errors.exception = function (message) {
+ return new TypeError(`${message.header}: ${message.message}`)
+}
+
+webidl.errors.conversionFailed = function (context) {
+ const plural = context.types.length === 1 ? '' : ' one of'
+ const message =
+ `${context.argument} could not be converted to` +
+ `${plural}: ${context.types.join(', ')}.`
+
+ return webidl.errors.exception({
+ header: context.prefix,
+ message
+ })
+}
+
+webidl.errors.invalidArgument = function (context) {
+ return webidl.errors.exception({
+ header: context.prefix,
+ message: `"${context.value}" is an invalid ${context.type}.`
+ })
+}
+
+// https://webidl.spec.whatwg.org/#implements
+webidl.brandCheck = function (V, I, opts = undefined) {
+ if (opts?.strict !== false && !(V instanceof I)) {
+ throw new TypeError('Illegal invocation')
+ } else {
+ return V?.[Symbol.toStringTag] === I.prototype[Symbol.toStringTag]
+ }
+}
+
+webidl.argumentLengthCheck = function ({ length }, min, ctx) {
+ if (length < min) {
+ throw webidl.errors.exception({
+ message: `${min} argument${min !== 1 ? 's' : ''} required, ` +
+ `but${length ? ' only' : ''} ${length} found.`,
+ ...ctx
+ })
+ }
+}
+
+webidl.illegalConstructor = function () {
+ throw webidl.errors.exception({
+ header: 'TypeError',
+ message: 'Illegal constructor'
+ })
+}
+
+// https://tc39.es/ecma262/#sec-ecmascript-data-types-and-values
+webidl.util.Type = function (V) {
+ switch (typeof V) {
+ case 'undefined': return 'Undefined'
+ case 'boolean': return 'Boolean'
+ case 'string': return 'String'
+ case 'symbol': return 'Symbol'
+ case 'number': return 'Number'
+ case 'bigint': return 'BigInt'
+ case 'function':
+ case 'object': {
+ if (V === null) {
+ return 'Null'
+ }
+
+ return 'Object'
+ }
+ }
+}
+
+// https://webidl.spec.whatwg.org/#abstract-opdef-converttoint
+webidl.util.ConvertToInt = function (V, bitLength, signedness, opts = {}) {
+ let upperBound
+ let lowerBound
+
+ // 1. If bitLength is 64, then:
+ if (bitLength === 64) {
+ // 1. Let upperBound be 2^53 − 1.
+ upperBound = Math.pow(2, 53) - 1
+
+ // 2. If signedness is "unsigned", then let lowerBound be 0.
+ if (signedness === 'unsigned') {
+ lowerBound = 0
+ } else {
+ // 3. Otherwise let lowerBound be −2^53 + 1.
+ lowerBound = Math.pow(-2, 53) + 1
+ }
+ } else if (signedness === 'unsigned') {
+ // 2. Otherwise, if signedness is "unsigned", then:
+
+ // 1. Let lowerBound be 0.
+ lowerBound = 0
+
+ // 2. Let upperBound be 2^bitLength − 1.
+ upperBound = Math.pow(2, bitLength) - 1
+ } else {
+ // 3. Otherwise:
+
+ // 1. Let lowerBound be -2^bitLength − 1.
+ lowerBound = Math.pow(-2, bitLength) - 1
+
+ // 2. Let upperBound be 2^bitLength − 1 − 1.
+ upperBound = Math.pow(2, bitLength - 1) - 1
+ }
+
+ // 4. Let x be ? ToNumber(V).
+ let x = Number(V)
+
+ // 5. If x is −0, then set x to +0.
+ if (x === 0) {
+ x = 0
+ }
+
+ // 6. If the conversion is to an IDL type associated
+ // with the [EnforceRange] extended attribute, then:
+ if (opts.enforceRange === true) {
+ // 1. If x is NaN, +∞, or −∞, then throw a TypeError.
+ if (
+ Number.isNaN(x) ||
+ x === Number.POSITIVE_INFINITY ||
+ x === Number.NEGATIVE_INFINITY
+ ) {
+ throw webidl.errors.exception({
+ header: 'Integer conversion',
+ message: `Could not convert ${V} to an integer.`
+ })
+ }
+
+ // 2. Set x to IntegerPart(x).
+ x = webidl.util.IntegerPart(x)
+
+ // 3. If x < lowerBound or x > upperBound, then
+ // throw a TypeError.
+ if (x < lowerBound || x > upperBound) {
+ throw webidl.errors.exception({
+ header: 'Integer conversion',
+ message: `Value must be between ${lowerBound}-${upperBound}, got ${x}.`
+ })
+ }
+
+ // 4. Return x.
+ return x
+ }
+
+ // 7. If x is not NaN and the conversion is to an IDL
+ // type associated with the [Clamp] extended
+ // attribute, then:
+ if (!Number.isNaN(x) && opts.clamp === true) {
+ // 1. Set x to min(max(x, lowerBound), upperBound).
+ x = Math.min(Math.max(x, lowerBound), upperBound)
+
+ // 2. Round x to the nearest integer, choosing the
+ // even integer if it lies halfway between two,
+ // and choosing +0 rather than −0.
+ if (Math.floor(x) % 2 === 0) {
+ x = Math.floor(x)
+ } else {
+ x = Math.ceil(x)
+ }
+
+ // 3. Return x.
+ return x
+ }
+
+ // 8. If x is NaN, +0, +∞, or −∞, then return +0.
+ if (
+ Number.isNaN(x) ||
+ (x === 0 && Object.is(0, x)) ||
+ x === Number.POSITIVE_INFINITY ||
+ x === Number.NEGATIVE_INFINITY
+ ) {
+ return 0
+ }
+
+ // 9. Set x to IntegerPart(x).
+ x = webidl.util.IntegerPart(x)
+
+ // 10. Set x to x modulo 2^bitLength.
+ x = x % Math.pow(2, bitLength)
+
+ // 11. If signedness is "signed" and x ≥ 2^bitLength − 1,
+ // then return x − 2^bitLength.
+ if (signedness === 'signed' && x >= Math.pow(2, bitLength) - 1) {
+ return x - Math.pow(2, bitLength)
+ }
+
+ // 12. Otherwise, return x.
+ return x
+}
+
+// https://webidl.spec.whatwg.org/#abstract-opdef-integerpart
+webidl.util.IntegerPart = function (n) {
+ // 1. Let r be floor(abs(n)).
+ const r = Math.floor(Math.abs(n))
+
+ // 2. If n < 0, then return -1 × r.
+ if (n < 0) {
+ return -1 * r
+ }
+
+ // 3. Otherwise, return r.
+ return r
+}
+
+// https://webidl.spec.whatwg.org/#es-sequence
+webidl.sequenceConverter = function (converter) {
+ return (V) => {
+ // 1. If Type(V) is not Object, throw a TypeError.
+ if (webidl.util.Type(V) !== 'Object') {
+ throw webidl.errors.exception({
+ header: 'Sequence',
+ message: `Value of type ${webidl.util.Type(V)} is not an Object.`
+ })
+ }
+
+ // 2. Let method be ? GetMethod(V, @@iterator).
+ /** @type {Generator} */
+ const method = V?.[Symbol.iterator]?.()
+ const seq = []
+
+ // 3. If method is undefined, throw a TypeError.
+ if (
+ method === undefined ||
+ typeof method.next !== 'function'
+ ) {
+ throw webidl.errors.exception({
+ header: 'Sequence',
+ message: 'Object is not an iterator.'
+ })
+ }
+
+ // https://webidl.spec.whatwg.org/#create-sequence-from-iterable
+ while (true) {
+ const { done, value } = method.next()
+
+ if (done) {
+ break
+ }
+
+ seq.push(converter(value))
+ }
+
+ return seq
+ }
+}
+
+// https://webidl.spec.whatwg.org/#es-to-record
+webidl.recordConverter = function (keyConverter, valueConverter) {
+ return (O) => {
+ // 1. If Type(O) is not Object, throw a TypeError.
+ if (webidl.util.Type(O) !== 'Object') {
+ throw webidl.errors.exception({
+ header: 'Record',
+ message: `Value of type ${webidl.util.Type(O)} is not an Object.`
+ })
+ }
+
+ // 2. Let result be a new empty instance of record.
+ const result = {}
+
+ if (!types.isProxy(O)) {
+ // Object.keys only returns enumerable properties
+ const keys = Object.keys(O)
+
+ for (const key of keys) {
+ // 1. Let typedKey be key converted to an IDL value of type K.
+ const typedKey = keyConverter(key)
+
+ // 2. Let value be ? Get(O, key).
+ // 3. Let typedValue be value converted to an IDL value of type V.
+ const typedValue = valueConverter(O[key])
+
+ // 4. Set result[typedKey] to typedValue.
+ result[typedKey] = typedValue
+ }
+
+ // 5. Return result.
+ return result
+ }
+
+ // 3. Let keys be ? O.[[OwnPropertyKeys]]().
+ const keys = Reflect.ownKeys(O)
+
+ // 4. For each key of keys.
+ for (const key of keys) {
+ // 1. Let desc be ? O.[[GetOwnProperty]](key).
+ const desc = Reflect.getOwnPropertyDescriptor(O, key)
+
+ // 2. If desc is not undefined and desc.[[Enumerable]] is true:
+ if (desc?.enumerable) {
+ // 1. Let typedKey be key converted to an IDL value of type K.
+ const typedKey = keyConverter(key)
+
+ // 2. Let value be ? Get(O, key).
+ // 3. Let typedValue be value converted to an IDL value of type V.
+ const typedValue = valueConverter(O[key])
+
+ // 4. Set result[typedKey] to typedValue.
+ result[typedKey] = typedValue
+ }
+ }
+
+ // 5. Return result.
+ return result
+ }
+}
+
+webidl.interfaceConverter = function (i) {
+ return (V, opts = {}) => {
+ if (opts.strict !== false && !(V instanceof i)) {
+ throw webidl.errors.exception({
+ header: i.name,
+ message: `Expected ${V} to be an instance of ${i.name}.`
+ })
+ }
+
+ return V
+ }
+}
+
+webidl.dictionaryConverter = function (converters) {
+ return (dictionary) => {
+ const type = webidl.util.Type(dictionary)
+ const dict = {}
+
+ if (type === 'Null' || type === 'Undefined') {
+ return dict
+ } else if (type !== 'Object') {
+ throw webidl.errors.exception({
+ header: 'Dictionary',
+ message: `Expected ${dictionary} to be one of: Null, Undefined, Object.`
+ })
+ }
+
+ for (const options of converters) {
+ const { key, defaultValue, required, converter } = options
+
+ if (required === true) {
+ if (!hasOwn(dictionary, key)) {
+ throw webidl.errors.exception({
+ header: 'Dictionary',
+ message: `Missing required key "${key}".`
+ })
+ }
+ }
+
+ let value = dictionary[key]
+ const hasDefault = hasOwn(options, 'defaultValue')
+
+ // Only use defaultValue if value is undefined and
+ // a defaultValue options was provided.
+ if (hasDefault && value !== null) {
+ value = value ?? defaultValue
+ }
+
+ // A key can be optional and have no default value.
+ // When this happens, do not perform a conversion,
+ // and do not assign the key a value.
+ if (required || hasDefault || value !== undefined) {
+ value = converter(value)
+
+ if (
+ options.allowedValues &&
+ !options.allowedValues.includes(value)
+ ) {
+ throw webidl.errors.exception({
+ header: 'Dictionary',
+ message: `${value} is not an accepted type. Expected one of ${options.allowedValues.join(', ')}.`
+ })
+ }
+
+ dict[key] = value
+ }
+ }
+
+ return dict
+ }
+}
+
+webidl.nullableConverter = function (converter) {
+ return (V) => {
+ if (V === null) {
+ return V
+ }
+
+ return converter(V)
+ }
+}
+
+// https://webidl.spec.whatwg.org/#es-DOMString
+webidl.converters.DOMString = function (V, opts = {}) {
+ // 1. If V is null and the conversion is to an IDL type
+ // associated with the [LegacyNullToEmptyString]
+ // extended attribute, then return the DOMString value
+ // that represents the empty string.
+ if (V === null && opts.legacyNullToEmptyString) {
+ return ''
+ }
+
+ // 2. Let x be ? ToString(V).
+ if (typeof V === 'symbol') {
+ throw new TypeError('Could not convert argument of type symbol to string.')
+ }
+
+ // 3. Return the IDL DOMString value that represents the
+ // same sequence of code units as the one the
+ // ECMAScript String value x represents.
+ return String(V)
+}
+
+// https://webidl.spec.whatwg.org/#es-ByteString
+webidl.converters.ByteString = function (V) {
+ // 1. Let x be ? ToString(V).
+ // Note: DOMString converter perform ? ToString(V)
+ const x = webidl.converters.DOMString(V)
+
+ // 2. If the value of any element of x is greater than
+ // 255, then throw a TypeError.
+ for (let index = 0; index < x.length; index++) {
+ const charCode = x.charCodeAt(index)
+
+ if (charCode > 255) {
+ throw new TypeError(
+ 'Cannot convert argument to a ByteString because the character at ' +
+ `index ${index} has a value of ${charCode} which is greater than 255.`
+ )
+ }
+ }
+
+ // 3. Return an IDL ByteString value whose length is the
+ // length of x, and where the value of each element is
+ // the value of the corresponding element of x.
+ return x
+}
+
+// https://webidl.spec.whatwg.org/#es-USVString
+webidl.converters.USVString = toUSVString
+
+// https://webidl.spec.whatwg.org/#es-boolean
+webidl.converters.boolean = function (V) {
+ // 1. Let x be the result of computing ToBoolean(V).
+ const x = Boolean(V)
+
+ // 2. Return the IDL boolean value that is the one that represents
+ // the same truth value as the ECMAScript Boolean value x.
+ return x
+}
+
+// https://webidl.spec.whatwg.org/#es-any
+webidl.converters.any = function (V) {
+ return V
+}
+
+// https://webidl.spec.whatwg.org/#es-long-long
+webidl.converters['long long'] = function (V) {
+ // 1. Let x be ? ConvertToInt(V, 64, "signed").
+ const x = webidl.util.ConvertToInt(V, 64, 'signed')
+
+ // 2. Return the IDL long long value that represents
+ // the same numeric value as x.
+ return x
+}
+
+// https://webidl.spec.whatwg.org/#es-unsigned-long-long
+webidl.converters['unsigned long long'] = function (V) {
+ // 1. Let x be ? ConvertToInt(V, 64, "unsigned").
+ const x = webidl.util.ConvertToInt(V, 64, 'unsigned')
+
+ // 2. Return the IDL unsigned long long value that
+ // represents the same numeric value as x.
+ return x
+}
+
+// https://webidl.spec.whatwg.org/#es-unsigned-long
+webidl.converters['unsigned long'] = function (V) {
+ // 1. Let x be ? ConvertToInt(V, 32, "unsigned").
+ const x = webidl.util.ConvertToInt(V, 32, 'unsigned')
+
+ // 2. Return the IDL unsigned long value that
+ // represents the same numeric value as x.
+ return x
+}
+
+// https://webidl.spec.whatwg.org/#es-unsigned-short
+webidl.converters['unsigned short'] = function (V, opts) {
+ // 1. Let x be ? ConvertToInt(V, 16, "unsigned").
+ const x = webidl.util.ConvertToInt(V, 16, 'unsigned', opts)
+
+ // 2. Return the IDL unsigned short value that represents
+ // the same numeric value as x.
+ return x
+}
+
+// https://webidl.spec.whatwg.org/#idl-ArrayBuffer
+webidl.converters.ArrayBuffer = function (V, opts = {}) {
+ // 1. If Type(V) is not Object, or V does not have an
+ // [[ArrayBufferData]] internal slot, then throw a
+ // TypeError.
+ // see: https://tc39.es/ecma262/#sec-properties-of-the-arraybuffer-instances
+ // see: https://tc39.es/ecma262/#sec-properties-of-the-sharedarraybuffer-instances
+ if (
+ webidl.util.Type(V) !== 'Object' ||
+ !types.isAnyArrayBuffer(V)
+ ) {
+ throw webidl.errors.conversionFailed({
+ prefix: `${V}`,
+ argument: `${V}`,
+ types: ['ArrayBuffer']
+ })
+ }
+
+ // 2. If the conversion is not to an IDL type associated
+ // with the [AllowShared] extended attribute, and
+ // IsSharedArrayBuffer(V) is true, then throw a
+ // TypeError.
+ if (opts.allowShared === false && types.isSharedArrayBuffer(V)) {
+ throw webidl.errors.exception({
+ header: 'ArrayBuffer',
+ message: 'SharedArrayBuffer is not allowed.'
+ })
+ }
+
+ // 3. If the conversion is not to an IDL type associated
+ // with the [AllowResizable] extended attribute, and
+ // IsResizableArrayBuffer(V) is true, then throw a
+ // TypeError.
+ // Note: resizable ArrayBuffers are currently a proposal.
+
+ // 4. Return the IDL ArrayBuffer value that is a
+ // reference to the same object as V.
+ return V
+}
+
+webidl.converters.TypedArray = function (V, T, opts = {}) {
+ // 1. Let T be the IDL type V is being converted to.
+
+ // 2. If Type(V) is not Object, or V does not have a
+ // [[TypedArrayName]] internal slot with a value
+ // equal to T’s name, then throw a TypeError.
+ if (
+ webidl.util.Type(V) !== 'Object' ||
+ !types.isTypedArray(V) ||
+ V.constructor.name !== T.name
+ ) {
+ throw webidl.errors.conversionFailed({
+ prefix: `${T.name}`,
+ argument: `${V}`,
+ types: [T.name]
+ })
+ }
+
+ // 3. If the conversion is not to an IDL type associated
+ // with the [AllowShared] extended attribute, and
+ // IsSharedArrayBuffer(V.[[ViewedArrayBuffer]]) is
+ // true, then throw a TypeError.
+ if (opts.allowShared === false && types.isSharedArrayBuffer(V.buffer)) {
+ throw webidl.errors.exception({
+ header: 'ArrayBuffer',
+ message: 'SharedArrayBuffer is not allowed.'
+ })
+ }
+
+ // 4. If the conversion is not to an IDL type associated
+ // with the [AllowResizable] extended attribute, and
+ // IsResizableArrayBuffer(V.[[ViewedArrayBuffer]]) is
+ // true, then throw a TypeError.
+ // Note: resizable array buffers are currently a proposal
+
+ // 5. Return the IDL value of type T that is a reference
+ // to the same object as V.
+ return V
+}
+
+webidl.converters.DataView = function (V, opts = {}) {
+ // 1. If Type(V) is not Object, or V does not have a
+ // [[DataView]] internal slot, then throw a TypeError.
+ if (webidl.util.Type(V) !== 'Object' || !types.isDataView(V)) {
+ throw webidl.errors.exception({
+ header: 'DataView',
+ message: 'Object is not a DataView.'
+ })
+ }
+
+ // 2. If the conversion is not to an IDL type associated
+ // with the [AllowShared] extended attribute, and
+ // IsSharedArrayBuffer(V.[[ViewedArrayBuffer]]) is true,
+ // then throw a TypeError.
+ if (opts.allowShared === false && types.isSharedArrayBuffer(V.buffer)) {
+ throw webidl.errors.exception({
+ header: 'ArrayBuffer',
+ message: 'SharedArrayBuffer is not allowed.'
+ })
+ }
+
+ // 3. If the conversion is not to an IDL type associated
+ // with the [AllowResizable] extended attribute, and
+ // IsResizableArrayBuffer(V.[[ViewedArrayBuffer]]) is
+ // true, then throw a TypeError.
+ // Note: resizable ArrayBuffers are currently a proposal
+
+ // 4. Return the IDL DataView value that is a reference
+ // to the same object as V.
+ return V
+}
+
+// https://webidl.spec.whatwg.org/#BufferSource
+webidl.converters.BufferSource = function (V, opts = {}) {
+ if (types.isAnyArrayBuffer(V)) {
+ return webidl.converters.ArrayBuffer(V, opts)
+ }
+
+ if (types.isTypedArray(V)) {
+ return webidl.converters.TypedArray(V, V.constructor)
+ }
+
+ if (types.isDataView(V)) {
+ return webidl.converters.DataView(V, opts)
+ }
+
+ throw new TypeError(`Could not convert ${V} to a BufferSource.`)
+}
+
+webidl.converters['sequence'] = webidl.sequenceConverter(
+ webidl.converters.ByteString
+)
+
+webidl.converters['sequence>'] = webidl.sequenceConverter(
+ webidl.converters['sequence']
+)
+
+webidl.converters['record'] = webidl.recordConverter(
+ webidl.converters.ByteString,
+ webidl.converters.ByteString
+)
+
+module.exports = {
+ webidl
+}
+
+
+/***/ }),
+
+/***/ 84854:
+/***/ ((module) => {
+
+"use strict";
+
+
+/**
+ * @see https://encoding.spec.whatwg.org/#concept-encoding-get
+ * @param {string|undefined} label
+ */
+function getEncoding (label) {
+ if (!label) {
+ return 'failure'
+ }
+
+ // 1. Remove any leading and trailing ASCII whitespace from label.
+ // 2. If label is an ASCII case-insensitive match for any of the
+ // labels listed in the table below, then return the
+ // corresponding encoding; otherwise return failure.
+ switch (label.trim().toLowerCase()) {
+ case 'unicode-1-1-utf-8':
+ case 'unicode11utf8':
+ case 'unicode20utf8':
+ case 'utf-8':
+ case 'utf8':
+ case 'x-unicode20utf8':
+ return 'UTF-8'
+ case '866':
+ case 'cp866':
+ case 'csibm866':
+ case 'ibm866':
+ return 'IBM866'
+ case 'csisolatin2':
+ case 'iso-8859-2':
+ case 'iso-ir-101':
+ case 'iso8859-2':
+ case 'iso88592':
+ case 'iso_8859-2':
+ case 'iso_8859-2:1987':
+ case 'l2':
+ case 'latin2':
+ return 'ISO-8859-2'
+ case 'csisolatin3':
+ case 'iso-8859-3':
+ case 'iso-ir-109':
+ case 'iso8859-3':
+ case 'iso88593':
+ case 'iso_8859-3':
+ case 'iso_8859-3:1988':
+ case 'l3':
+ case 'latin3':
+ return 'ISO-8859-3'
+ case 'csisolatin4':
+ case 'iso-8859-4':
+ case 'iso-ir-110':
+ case 'iso8859-4':
+ case 'iso88594':
+ case 'iso_8859-4':
+ case 'iso_8859-4:1988':
+ case 'l4':
+ case 'latin4':
+ return 'ISO-8859-4'
+ case 'csisolatincyrillic':
+ case 'cyrillic':
+ case 'iso-8859-5':
+ case 'iso-ir-144':
+ case 'iso8859-5':
+ case 'iso88595':
+ case 'iso_8859-5':
+ case 'iso_8859-5:1988':
+ return 'ISO-8859-5'
+ case 'arabic':
+ case 'asmo-708':
+ case 'csiso88596e':
+ case 'csiso88596i':
+ case 'csisolatinarabic':
+ case 'ecma-114':
+ case 'iso-8859-6':
+ case 'iso-8859-6-e':
+ case 'iso-8859-6-i':
+ case 'iso-ir-127':
+ case 'iso8859-6':
+ case 'iso88596':
+ case 'iso_8859-6':
+ case 'iso_8859-6:1987':
+ return 'ISO-8859-6'
+ case 'csisolatingreek':
+ case 'ecma-118':
+ case 'elot_928':
+ case 'greek':
+ case 'greek8':
+ case 'iso-8859-7':
+ case 'iso-ir-126':
+ case 'iso8859-7':
+ case 'iso88597':
+ case 'iso_8859-7':
+ case 'iso_8859-7:1987':
+ case 'sun_eu_greek':
+ return 'ISO-8859-7'
+ case 'csiso88598e':
+ case 'csisolatinhebrew':
+ case 'hebrew':
+ case 'iso-8859-8':
+ case 'iso-8859-8-e':
+ case 'iso-ir-138':
+ case 'iso8859-8':
+ case 'iso88598':
+ case 'iso_8859-8':
+ case 'iso_8859-8:1988':
+ case 'visual':
+ return 'ISO-8859-8'
+ case 'csiso88598i':
+ case 'iso-8859-8-i':
+ case 'logical':
+ return 'ISO-8859-8-I'
+ case 'csisolatin6':
+ case 'iso-8859-10':
+ case 'iso-ir-157':
+ case 'iso8859-10':
+ case 'iso885910':
+ case 'l6':
+ case 'latin6':
+ return 'ISO-8859-10'
+ case 'iso-8859-13':
+ case 'iso8859-13':
+ case 'iso885913':
+ return 'ISO-8859-13'
+ case 'iso-8859-14':
+ case 'iso8859-14':
+ case 'iso885914':
+ return 'ISO-8859-14'
+ case 'csisolatin9':
+ case 'iso-8859-15':
+ case 'iso8859-15':
+ case 'iso885915':
+ case 'iso_8859-15':
+ case 'l9':
+ return 'ISO-8859-15'
+ case 'iso-8859-16':
+ return 'ISO-8859-16'
+ case 'cskoi8r':
+ case 'koi':
+ case 'koi8':
+ case 'koi8-r':
+ case 'koi8_r':
+ return 'KOI8-R'
+ case 'koi8-ru':
+ case 'koi8-u':
+ return 'KOI8-U'
+ case 'csmacintosh':
+ case 'mac':
+ case 'macintosh':
+ case 'x-mac-roman':
+ return 'macintosh'
+ case 'iso-8859-11':
+ case 'iso8859-11':
+ case 'iso885911':
+ case 'tis-620':
+ case 'windows-874':
+ return 'windows-874'
+ case 'cp1250':
+ case 'windows-1250':
+ case 'x-cp1250':
+ return 'windows-1250'
+ case 'cp1251':
+ case 'windows-1251':
+ case 'x-cp1251':
+ return 'windows-1251'
+ case 'ansi_x3.4-1968':
+ case 'ascii':
+ case 'cp1252':
+ case 'cp819':
+ case 'csisolatin1':
+ case 'ibm819':
+ case 'iso-8859-1':
+ case 'iso-ir-100':
+ case 'iso8859-1':
+ case 'iso88591':
+ case 'iso_8859-1':
+ case 'iso_8859-1:1987':
+ case 'l1':
+ case 'latin1':
+ case 'us-ascii':
+ case 'windows-1252':
+ case 'x-cp1252':
+ return 'windows-1252'
+ case 'cp1253':
+ case 'windows-1253':
+ case 'x-cp1253':
+ return 'windows-1253'
+ case 'cp1254':
+ case 'csisolatin5':
+ case 'iso-8859-9':
+ case 'iso-ir-148':
+ case 'iso8859-9':
+ case 'iso88599':
+ case 'iso_8859-9':
+ case 'iso_8859-9:1989':
+ case 'l5':
+ case 'latin5':
+ case 'windows-1254':
+ case 'x-cp1254':
+ return 'windows-1254'
+ case 'cp1255':
+ case 'windows-1255':
+ case 'x-cp1255':
+ return 'windows-1255'
+ case 'cp1256':
+ case 'windows-1256':
+ case 'x-cp1256':
+ return 'windows-1256'
+ case 'cp1257':
+ case 'windows-1257':
+ case 'x-cp1257':
+ return 'windows-1257'
+ case 'cp1258':
+ case 'windows-1258':
+ case 'x-cp1258':
+ return 'windows-1258'
+ case 'x-mac-cyrillic':
+ case 'x-mac-ukrainian':
+ return 'x-mac-cyrillic'
+ case 'chinese':
+ case 'csgb2312':
+ case 'csiso58gb231280':
+ case 'gb2312':
+ case 'gb_2312':
+ case 'gb_2312-80':
+ case 'gbk':
+ case 'iso-ir-58':
+ case 'x-gbk':
+ return 'GBK'
+ case 'gb18030':
+ return 'gb18030'
+ case 'big5':
+ case 'big5-hkscs':
+ case 'cn-big5':
+ case 'csbig5':
+ case 'x-x-big5':
+ return 'Big5'
+ case 'cseucpkdfmtjapanese':
+ case 'euc-jp':
+ case 'x-euc-jp':
+ return 'EUC-JP'
+ case 'csiso2022jp':
+ case 'iso-2022-jp':
+ return 'ISO-2022-JP'
+ case 'csshiftjis':
+ case 'ms932':
+ case 'ms_kanji':
+ case 'shift-jis':
+ case 'shift_jis':
+ case 'sjis':
+ case 'windows-31j':
+ case 'x-sjis':
+ return 'Shift_JIS'
+ case 'cseuckr':
+ case 'csksc56011987':
+ case 'euc-kr':
+ case 'iso-ir-149':
+ case 'korean':
+ case 'ks_c_5601-1987':
+ case 'ks_c_5601-1989':
+ case 'ksc5601':
+ case 'ksc_5601':
+ case 'windows-949':
+ return 'EUC-KR'
+ case 'csiso2022kr':
+ case 'hz-gb-2312':
+ case 'iso-2022-cn':
+ case 'iso-2022-cn-ext':
+ case 'iso-2022-kr':
+ case 'replacement':
+ return 'replacement'
+ case 'unicodefffe':
+ case 'utf-16be':
+ return 'UTF-16BE'
+ case 'csunicode':
+ case 'iso-10646-ucs-2':
+ case 'ucs-2':
+ case 'unicode':
+ case 'unicodefeff':
+ case 'utf-16':
+ case 'utf-16le':
+ return 'UTF-16LE'
+ case 'x-user-defined':
+ return 'x-user-defined'
+ default: return 'failure'
+ }
+}
+
+module.exports = {
+ getEncoding
+}
+
+
+/***/ }),
+
+/***/ 1446:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+"use strict";
+
+
+const {
+ staticPropertyDescriptors,
+ readOperation,
+ fireAProgressEvent
+} = __nccwpck_require__(87530)
+const {
+ kState,
+ kError,
+ kResult,
+ kEvents,
+ kAborted
+} = __nccwpck_require__(29054)
+const { webidl } = __nccwpck_require__(21744)
+const { kEnumerableProperty } = __nccwpck_require__(83983)
+
+class FileReader extends EventTarget {
+ constructor () {
+ super()
+
+ this[kState] = 'empty'
+ this[kResult] = null
+ this[kError] = null
+ this[kEvents] = {
+ loadend: null,
+ error: null,
+ abort: null,
+ load: null,
+ progress: null,
+ loadstart: null
+ }
+ }
+
+ /**
+ * @see https://w3c.github.io/FileAPI/#dfn-readAsArrayBuffer
+ * @param {import('buffer').Blob} blob
+ */
+ readAsArrayBuffer (blob) {
+ webidl.brandCheck(this, FileReader)
+
+ webidl.argumentLengthCheck(arguments, 1, { header: 'FileReader.readAsArrayBuffer' })
+
+ blob = webidl.converters.Blob(blob, { strict: false })
+
+ // The readAsArrayBuffer(blob) method, when invoked,
+ // must initiate a read operation for blob with ArrayBuffer.
+ readOperation(this, blob, 'ArrayBuffer')
+ }
+
+ /**
+ * @see https://w3c.github.io/FileAPI/#readAsBinaryString
+ * @param {import('buffer').Blob} blob
+ */
+ readAsBinaryString (blob) {
+ webidl.brandCheck(this, FileReader)
+
+ webidl.argumentLengthCheck(arguments, 1, { header: 'FileReader.readAsBinaryString' })
+
+ blob = webidl.converters.Blob(blob, { strict: false })
+
+ // The readAsBinaryString(blob) method, when invoked,
+ // must initiate a read operation for blob with BinaryString.
+ readOperation(this, blob, 'BinaryString')
+ }
+
+ /**
+ * @see https://w3c.github.io/FileAPI/#readAsDataText
+ * @param {import('buffer').Blob} blob
+ * @param {string?} encoding
+ */
+ readAsText (blob, encoding = undefined) {
+ webidl.brandCheck(this, FileReader)
+
+ webidl.argumentLengthCheck(arguments, 1, { header: 'FileReader.readAsText' })
+
+ blob = webidl.converters.Blob(blob, { strict: false })
+
+ if (encoding !== undefined) {
+ encoding = webidl.converters.DOMString(encoding)
+ }
+
+ // The readAsText(blob, encoding) method, when invoked,
+ // must initiate a read operation for blob with Text and encoding.
+ readOperation(this, blob, 'Text', encoding)
+ }
+
+ /**
+ * @see https://w3c.github.io/FileAPI/#dfn-readAsDataURL
+ * @param {import('buffer').Blob} blob
+ */
+ readAsDataURL (blob) {
+ webidl.brandCheck(this, FileReader)
+
+ webidl.argumentLengthCheck(arguments, 1, { header: 'FileReader.readAsDataURL' })
+
+ blob = webidl.converters.Blob(blob, { strict: false })
+
+ // The readAsDataURL(blob) method, when invoked, must
+ // initiate a read operation for blob with DataURL.
+ readOperation(this, blob, 'DataURL')
+ }
+
+ /**
+ * @see https://w3c.github.io/FileAPI/#dfn-abort
+ */
+ abort () {
+ // 1. If this's state is "empty" or if this's state is
+ // "done" set this's result to null and terminate
+ // this algorithm.
+ if (this[kState] === 'empty' || this[kState] === 'done') {
+ this[kResult] = null
+ return
+ }
+
+ // 2. If this's state is "loading" set this's state to
+ // "done" and set this's result to null.
+ if (this[kState] === 'loading') {
+ this[kState] = 'done'
+ this[kResult] = null
+ }
+
+ // 3. If there are any tasks from this on the file reading
+ // task source in an affiliated task queue, then remove
+ // those tasks from that task queue.
+ this[kAborted] = true
+
+ // 4. Terminate the algorithm for the read method being processed.
+ // TODO
+
+ // 5. Fire a progress event called abort at this.
+ fireAProgressEvent('abort', this)
+
+ // 6. If this's state is not "loading", fire a progress
+ // event called loadend at this.
+ if (this[kState] !== 'loading') {
+ fireAProgressEvent('loadend', this)
+ }
+ }
+
+ /**
+ * @see https://w3c.github.io/FileAPI/#dom-filereader-readystate
+ */
+ get readyState () {
+ webidl.brandCheck(this, FileReader)
+
+ switch (this[kState]) {
+ case 'empty': return this.EMPTY
+ case 'loading': return this.LOADING
+ case 'done': return this.DONE
+ }
+ }
+
+ /**
+ * @see https://w3c.github.io/FileAPI/#dom-filereader-result
+ */
+ get result () {
+ webidl.brandCheck(this, FileReader)
+
+ // The result attribute’s getter, when invoked, must return
+ // this's result.
+ return this[kResult]
+ }
+
+ /**
+ * @see https://w3c.github.io/FileAPI/#dom-filereader-error
+ */
+ get error () {
+ webidl.brandCheck(this, FileReader)
+
+ // The error attribute’s getter, when invoked, must return
+ // this's error.
+ return this[kError]
+ }
+
+ get onloadend () {
+ webidl.brandCheck(this, FileReader)
+
+ return this[kEvents].loadend
+ }
+
+ set onloadend (fn) {
+ webidl.brandCheck(this, FileReader)
+
+ if (this[kEvents].loadend) {
+ this.removeEventListener('loadend', this[kEvents].loadend)
+ }
+
+ if (typeof fn === 'function') {
+ this[kEvents].loadend = fn
+ this.addEventListener('loadend', fn)
+ } else {
+ this[kEvents].loadend = null
+ }
+ }
+
+ get onerror () {
+ webidl.brandCheck(this, FileReader)
+
+ return this[kEvents].error
+ }
+
+ set onerror (fn) {
+ webidl.brandCheck(this, FileReader)
+
+ if (this[kEvents].error) {
+ this.removeEventListener('error', this[kEvents].error)
+ }
+
+ if (typeof fn === 'function') {
+ this[kEvents].error = fn
+ this.addEventListener('error', fn)
+ } else {
+ this[kEvents].error = null
+ }
+ }
+
+ get onloadstart () {
+ webidl.brandCheck(this, FileReader)
+
+ return this[kEvents].loadstart
+ }
+
+ set onloadstart (fn) {
+ webidl.brandCheck(this, FileReader)
+
+ if (this[kEvents].loadstart) {
+ this.removeEventListener('loadstart', this[kEvents].loadstart)
+ }
+
+ if (typeof fn === 'function') {
+ this[kEvents].loadstart = fn
+ this.addEventListener('loadstart', fn)
+ } else {
+ this[kEvents].loadstart = null
+ }
+ }
+
+ get onprogress () {
+ webidl.brandCheck(this, FileReader)
+
+ return this[kEvents].progress
+ }
+
+ set onprogress (fn) {
+ webidl.brandCheck(this, FileReader)
+
+ if (this[kEvents].progress) {
+ this.removeEventListener('progress', this[kEvents].progress)
+ }
+
+ if (typeof fn === 'function') {
+ this[kEvents].progress = fn
+ this.addEventListener('progress', fn)
+ } else {
+ this[kEvents].progress = null
+ }
+ }
+
+ get onload () {
+ webidl.brandCheck(this, FileReader)
+
+ return this[kEvents].load
+ }
+
+ set onload (fn) {
+ webidl.brandCheck(this, FileReader)
+
+ if (this[kEvents].load) {
+ this.removeEventListener('load', this[kEvents].load)
+ }
+
+ if (typeof fn === 'function') {
+ this[kEvents].load = fn
+ this.addEventListener('load', fn)
+ } else {
+ this[kEvents].load = null
+ }
+ }
+
+ get onabort () {
+ webidl.brandCheck(this, FileReader)
+
+ return this[kEvents].abort
+ }
+
+ set onabort (fn) {
+ webidl.brandCheck(this, FileReader)
+
+ if (this[kEvents].abort) {
+ this.removeEventListener('abort', this[kEvents].abort)
+ }
+
+ if (typeof fn === 'function') {
+ this[kEvents].abort = fn
+ this.addEventListener('abort', fn)
+ } else {
+ this[kEvents].abort = null
+ }
+ }
+}
+
+// https://w3c.github.io/FileAPI/#dom-filereader-empty
+FileReader.EMPTY = FileReader.prototype.EMPTY = 0
+// https://w3c.github.io/FileAPI/#dom-filereader-loading
+FileReader.LOADING = FileReader.prototype.LOADING = 1
+// https://w3c.github.io/FileAPI/#dom-filereader-done
+FileReader.DONE = FileReader.prototype.DONE = 2
+
+Object.defineProperties(FileReader.prototype, {
+ EMPTY: staticPropertyDescriptors,
+ LOADING: staticPropertyDescriptors,
+ DONE: staticPropertyDescriptors,
+ readAsArrayBuffer: kEnumerableProperty,
+ readAsBinaryString: kEnumerableProperty,
+ readAsText: kEnumerableProperty,
+ readAsDataURL: kEnumerableProperty,
+ abort: kEnumerableProperty,
+ readyState: kEnumerableProperty,
+ result: kEnumerableProperty,
+ error: kEnumerableProperty,
+ onloadstart: kEnumerableProperty,
+ onprogress: kEnumerableProperty,
+ onload: kEnumerableProperty,
+ onabort: kEnumerableProperty,
+ onerror: kEnumerableProperty,
+ onloadend: kEnumerableProperty,
+ [Symbol.toStringTag]: {
+ value: 'FileReader',
+ writable: false,
+ enumerable: false,
+ configurable: true
+ }
+})
+
+Object.defineProperties(FileReader, {
+ EMPTY: staticPropertyDescriptors,
+ LOADING: staticPropertyDescriptors,
+ DONE: staticPropertyDescriptors
+})
+
+module.exports = {
+ FileReader
+}
+
+
+/***/ }),
+
+/***/ 55504:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+"use strict";
+
+
+const { webidl } = __nccwpck_require__(21744)
+
+const kState = Symbol('ProgressEvent state')
+
+/**
+ * @see https://xhr.spec.whatwg.org/#progressevent
+ */
+class ProgressEvent extends Event {
+ constructor (type, eventInitDict = {}) {
+ type = webidl.converters.DOMString(type)
+ eventInitDict = webidl.converters.ProgressEventInit(eventInitDict ?? {})
+
+ super(type, eventInitDict)
+
+ this[kState] = {
+ lengthComputable: eventInitDict.lengthComputable,
+ loaded: eventInitDict.loaded,
+ total: eventInitDict.total
+ }
+ }
+
+ get lengthComputable () {
+ webidl.brandCheck(this, ProgressEvent)
+
+ return this[kState].lengthComputable
+ }
+
+ get loaded () {
+ webidl.brandCheck(this, ProgressEvent)
+
+ return this[kState].loaded
+ }
+
+ get total () {
+ webidl.brandCheck(this, ProgressEvent)
+
+ return this[kState].total
+ }
+}
+
+webidl.converters.ProgressEventInit = webidl.dictionaryConverter([
+ {
+ key: 'lengthComputable',
+ converter: webidl.converters.boolean,
+ defaultValue: false
+ },
+ {
+ key: 'loaded',
+ converter: webidl.converters['unsigned long long'],
+ defaultValue: 0
+ },
+ {
+ key: 'total',
+ converter: webidl.converters['unsigned long long'],
+ defaultValue: 0
+ },
+ {
+ key: 'bubbles',
+ converter: webidl.converters.boolean,
+ defaultValue: false
+ },
+ {
+ key: 'cancelable',
+ converter: webidl.converters.boolean,
+ defaultValue: false
+ },
+ {
+ key: 'composed',
+ converter: webidl.converters.boolean,
+ defaultValue: false
+ }
+])
+
+module.exports = {
+ ProgressEvent
+}
+
+
+/***/ }),
+
+/***/ 29054:
+/***/ ((module) => {
+
+"use strict";
+
+
+module.exports = {
+ kState: Symbol('FileReader state'),
+ kResult: Symbol('FileReader result'),
+ kError: Symbol('FileReader error'),
+ kLastProgressEventFired: Symbol('FileReader last progress event fired timestamp'),
+ kEvents: Symbol('FileReader events'),
+ kAborted: Symbol('FileReader aborted')
+}
+
+
+/***/ }),
+
+/***/ 87530:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+"use strict";
+
+
+const {
+ kState,
+ kError,
+ kResult,
+ kAborted,
+ kLastProgressEventFired
+} = __nccwpck_require__(29054)
+const { ProgressEvent } = __nccwpck_require__(55504)
+const { getEncoding } = __nccwpck_require__(84854)
+const { DOMException } = __nccwpck_require__(41037)
+const { serializeAMimeType, parseMIMEType } = __nccwpck_require__(685)
+const { types } = __nccwpck_require__(73837)
+const { StringDecoder } = __nccwpck_require__(71576)
+const { btoa } = __nccwpck_require__(14300)
+
+/** @type {PropertyDescriptor} */
+const staticPropertyDescriptors = {
+ enumerable: true,
+ writable: false,
+ configurable: false
+}
+
+/**
+ * @see https://w3c.github.io/FileAPI/#readOperation
+ * @param {import('./filereader').FileReader} fr
+ * @param {import('buffer').Blob} blob
+ * @param {string} type
+ * @param {string?} encodingName
+ */
+function readOperation (fr, blob, type, encodingName) {
+ // 1. If fr’s state is "loading", throw an InvalidStateError
+ // DOMException.
+ if (fr[kState] === 'loading') {
+ throw new DOMException('Invalid state', 'InvalidStateError')
+ }
+
+ // 2. Set fr’s state to "loading".
+ fr[kState] = 'loading'
+
+ // 3. Set fr’s result to null.
+ fr[kResult] = null
+
+ // 4. Set fr’s error to null.
+ fr[kError] = null
+
+ // 5. Let stream be the result of calling get stream on blob.
+ /** @type {import('stream/web').ReadableStream} */
+ const stream = blob.stream()
+
+ // 6. Let reader be the result of getting a reader from stream.
+ const reader = stream.getReader()
+
+ // 7. Let bytes be an empty byte sequence.
+ /** @type {Uint8Array[]} */
+ const bytes = []
+
+ // 8. Let chunkPromise be the result of reading a chunk from
+ // stream with reader.
+ let chunkPromise = reader.read()
+
+ // 9. Let isFirstChunk be true.
+ let isFirstChunk = true
+
+ // 10. In parallel, while true:
+ // Note: "In parallel" just means non-blocking
+ // Note 2: readOperation itself cannot be async as double
+ // reading the body would then reject the promise, instead
+ // of throwing an error.
+ ;(async () => {
+ while (!fr[kAborted]) {
+ // 1. Wait for chunkPromise to be fulfilled or rejected.
+ try {
+ const { done, value } = await chunkPromise
+
+ // 2. If chunkPromise is fulfilled, and isFirstChunk is
+ // true, queue a task to fire a progress event called
+ // loadstart at fr.
+ if (isFirstChunk && !fr[kAborted]) {
+ queueMicrotask(() => {
+ fireAProgressEvent('loadstart', fr)
+ })
+ }
+
+ // 3. Set isFirstChunk to false.
+ isFirstChunk = false
+
+ // 4. If chunkPromise is fulfilled with an object whose
+ // done property is false and whose value property is
+ // a Uint8Array object, run these steps:
+ if (!done && types.isUint8Array(value)) {
+ // 1. Let bs be the byte sequence represented by the
+ // Uint8Array object.
+
+ // 2. Append bs to bytes.
+ bytes.push(value)
+
+ // 3. If roughly 50ms have passed since these steps
+ // were last invoked, queue a task to fire a
+ // progress event called progress at fr.
+ if (
+ (
+ fr[kLastProgressEventFired] === undefined ||
+ Date.now() - fr[kLastProgressEventFired] >= 50
+ ) &&
+ !fr[kAborted]
+ ) {
+ fr[kLastProgressEventFired] = Date.now()
+ queueMicrotask(() => {
+ fireAProgressEvent('progress', fr)
+ })
+ }
+
+ // 4. Set chunkPromise to the result of reading a
+ // chunk from stream with reader.
+ chunkPromise = reader.read()
+ } else if (done) {
+ // 5. Otherwise, if chunkPromise is fulfilled with an
+ // object whose done property is true, queue a task
+ // to run the following steps and abort this algorithm:
+ queueMicrotask(() => {
+ // 1. Set fr’s state to "done".
+ fr[kState] = 'done'
+
+ // 2. Let result be the result of package data given
+ // bytes, type, blob’s type, and encodingName.
+ try {
+ const result = packageData(bytes, type, blob.type, encodingName)
+
+ // 4. Else:
+
+ if (fr[kAborted]) {
+ return
+ }
+
+ // 1. Set fr’s result to result.
+ fr[kResult] = result
+
+ // 2. Fire a progress event called load at the fr.
+ fireAProgressEvent('load', fr)
+ } catch (error) {
+ // 3. If package data threw an exception error:
+
+ // 1. Set fr’s error to error.
+ fr[kError] = error
+
+ // 2. Fire a progress event called error at fr.
+ fireAProgressEvent('error', fr)
+ }
+
+ // 5. If fr’s state is not "loading", fire a progress
+ // event called loadend at the fr.
+ if (fr[kState] !== 'loading') {
+ fireAProgressEvent('loadend', fr)
+ }
+ })
+
+ break
+ }
+ } catch (error) {
+ if (fr[kAborted]) {
+ return
+ }
+
+ // 6. Otherwise, if chunkPromise is rejected with an
+ // error error, queue a task to run the following
+ // steps and abort this algorithm:
+ queueMicrotask(() => {
+ // 1. Set fr’s state to "done".
+ fr[kState] = 'done'
+
+ // 2. Set fr’s error to error.
+ fr[kError] = error
+
+ // 3. Fire a progress event called error at fr.
+ fireAProgressEvent('error', fr)
+
+ // 4. If fr’s state is not "loading", fire a progress
+ // event called loadend at fr.
+ if (fr[kState] !== 'loading') {
+ fireAProgressEvent('loadend', fr)
+ }
+ })
+
+ break
+ }
+ }
+ })()
+}
+
+/**
+ * @see https://w3c.github.io/FileAPI/#fire-a-progress-event
+ * @see https://dom.spec.whatwg.org/#concept-event-fire
+ * @param {string} e The name of the event
+ * @param {import('./filereader').FileReader} reader
+ */
+function fireAProgressEvent (e, reader) {
+ // The progress event e does not bubble. e.bubbles must be false
+ // The progress event e is NOT cancelable. e.cancelable must be false
+ const event = new ProgressEvent(e, {
+ bubbles: false,
+ cancelable: false
+ })
+
+ reader.dispatchEvent(event)
+}
+
+/**
+ * @see https://w3c.github.io/FileAPI/#blob-package-data
+ * @param {Uint8Array[]} bytes
+ * @param {string} type
+ * @param {string?} mimeType
+ * @param {string?} encodingName
+ */
+function packageData (bytes, type, mimeType, encodingName) {
+ // 1. A Blob has an associated package data algorithm, given
+ // bytes, a type, a optional mimeType, and a optional
+ // encodingName, which switches on type and runs the
+ // associated steps:
+
+ switch (type) {
+ case 'DataURL': {
+ // 1. Return bytes as a DataURL [RFC2397] subject to
+ // the considerations below:
+ // * Use mimeType as part of the Data URL if it is
+ // available in keeping with the Data URL
+ // specification [RFC2397].
+ // * If mimeType is not available return a Data URL
+ // without a media-type. [RFC2397].
+
+ // https://datatracker.ietf.org/doc/html/rfc2397#section-3
+ // dataurl := "data:" [ mediatype ] [ ";base64" ] "," data
+ // mediatype := [ type "/" subtype ] *( ";" parameter )
+ // data := *urlchar
+ // parameter := attribute "=" value
+ let dataURL = 'data:'
+
+ const parsed = parseMIMEType(mimeType || 'application/octet-stream')
+
+ if (parsed !== 'failure') {
+ dataURL += serializeAMimeType(parsed)
+ }
+
+ dataURL += ';base64,'
+
+ const decoder = new StringDecoder('latin1')
+
+ for (const chunk of bytes) {
+ dataURL += btoa(decoder.write(chunk))
+ }
+
+ dataURL += btoa(decoder.end())
+
+ return dataURL
+ }
+ case 'Text': {
+ // 1. Let encoding be failure
+ let encoding = 'failure'
+
+ // 2. If the encodingName is present, set encoding to the
+ // result of getting an encoding from encodingName.
+ if (encodingName) {
+ encoding = getEncoding(encodingName)
+ }
+
+ // 3. If encoding is failure, and mimeType is present:
+ if (encoding === 'failure' && mimeType) {
+ // 1. Let type be the result of parse a MIME type
+ // given mimeType.
+ const type = parseMIMEType(mimeType)
+
+ // 2. If type is not failure, set encoding to the result
+ // of getting an encoding from type’s parameters["charset"].
+ if (type !== 'failure') {
+ encoding = getEncoding(type.parameters.get('charset'))
+ }
+ }
+
+ // 4. If encoding is failure, then set encoding to UTF-8.
+ if (encoding === 'failure') {
+ encoding = 'UTF-8'
+ }
+
+ // 5. Decode bytes using fallback encoding encoding, and
+ // return the result.
+ return decode(bytes, encoding)
+ }
+ case 'ArrayBuffer': {
+ // Return a new ArrayBuffer whose contents are bytes.
+ const sequence = combineByteSequences(bytes)
+
+ return sequence.buffer
+ }
+ case 'BinaryString': {
+ // Return bytes as a binary string, in which every byte
+ // is represented by a code unit of equal value [0..255].
+ let binaryString = ''
+
+ const decoder = new StringDecoder('latin1')
+
+ for (const chunk of bytes) {
+ binaryString += decoder.write(chunk)
+ }
+
+ binaryString += decoder.end()
+
+ return binaryString
+ }
+ }
+}
+
+/**
+ * @see https://encoding.spec.whatwg.org/#decode
+ * @param {Uint8Array[]} ioQueue
+ * @param {string} encoding
+ */
+function decode (ioQueue, encoding) {
+ const bytes = combineByteSequences(ioQueue)
+
+ // 1. Let BOMEncoding be the result of BOM sniffing ioQueue.
+ const BOMEncoding = BOMSniffing(bytes)
+
+ let slice = 0
+
+ // 2. If BOMEncoding is non-null:
+ if (BOMEncoding !== null) {
+ // 1. Set encoding to BOMEncoding.
+ encoding = BOMEncoding
+
+ // 2. Read three bytes from ioQueue, if BOMEncoding is
+ // UTF-8; otherwise read two bytes.
+ // (Do nothing with those bytes.)
+ slice = BOMEncoding === 'UTF-8' ? 3 : 2
+ }
+
+ // 3. Process a queue with an instance of encoding’s
+ // decoder, ioQueue, output, and "replacement".
+
+ // 4. Return output.
+
+ const sliced = bytes.slice(slice)
+ return new TextDecoder(encoding).decode(sliced)
+}
+
+/**
+ * @see https://encoding.spec.whatwg.org/#bom-sniff
+ * @param {Uint8Array} ioQueue
+ */
+function BOMSniffing (ioQueue) {
+ // 1. Let BOM be the result of peeking 3 bytes from ioQueue,
+ // converted to a byte sequence.
+ const [a, b, c] = ioQueue
+
+ // 2. For each of the rows in the table below, starting with
+ // the first one and going down, if BOM starts with the
+ // bytes given in the first column, then return the
+ // encoding given in the cell in the second column of that
+ // row. Otherwise, return null.
+ if (a === 0xEF && b === 0xBB && c === 0xBF) {
+ return 'UTF-8'
+ } else if (a === 0xFE && b === 0xFF) {
+ return 'UTF-16BE'
+ } else if (a === 0xFF && b === 0xFE) {
+ return 'UTF-16LE'
+ }
+
+ return null
+}
+
+/**
+ * @param {Uint8Array[]} sequences
+ */
+function combineByteSequences (sequences) {
+ const size = sequences.reduce((a, b) => {
+ return a + b.byteLength
+ }, 0)
+
+ let offset = 0
+
+ return sequences.reduce((a, b) => {
+ a.set(b, offset)
+ offset += b.byteLength
+ return a
+ }, new Uint8Array(size))
+}
+
+module.exports = {
+ staticPropertyDescriptors,
+ readOperation,
+ fireAProgressEvent
+}
+
+
+/***/ }),
+
+/***/ 21892:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+"use strict";
+
+
+// We include a version number for the Dispatcher API. In case of breaking changes,
+// this version number must be increased to avoid conflicts.
+const globalDispatcher = Symbol.for('undici.globalDispatcher.1')
+const { InvalidArgumentError } = __nccwpck_require__(48045)
+const Agent = __nccwpck_require__(7890)
+
+if (getGlobalDispatcher() === undefined) {
+ setGlobalDispatcher(new Agent())
+}
+
+function setGlobalDispatcher (agent) {
+ if (!agent || typeof agent.dispatch !== 'function') {
+ throw new InvalidArgumentError('Argument agent must implement Agent')
+ }
+ Object.defineProperty(globalThis, globalDispatcher, {
+ value: agent,
+ writable: true,
+ enumerable: false,
+ configurable: false
+ })
+}
+
+function getGlobalDispatcher () {
+ return globalThis[globalDispatcher]
+}
+
+module.exports = {
+ setGlobalDispatcher,
+ getGlobalDispatcher
+}
+
+
+/***/ }),
+
+/***/ 46930:
+/***/ ((module) => {
+
+"use strict";
+
+
+module.exports = class DecoratorHandler {
+ constructor (handler) {
+ this.handler = handler
+ }
+
+ onConnect (...args) {
+ return this.handler.onConnect(...args)
+ }
+
+ onError (...args) {
+ return this.handler.onError(...args)
+ }
+
+ onUpgrade (...args) {
+ return this.handler.onUpgrade(...args)
+ }
+
+ onHeaders (...args) {
+ return this.handler.onHeaders(...args)
+ }
+
+ onData (...args) {
+ return this.handler.onData(...args)
+ }
+
+ onComplete (...args) {
+ return this.handler.onComplete(...args)
+ }
+
+ onBodySent (...args) {
+ return this.handler.onBodySent(...args)
+ }
+}
+
+
+/***/ }),
+
+/***/ 72860:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+"use strict";
+
+
+const util = __nccwpck_require__(83983)
+const { kBodyUsed } = __nccwpck_require__(72785)
+const assert = __nccwpck_require__(39491)
+const { InvalidArgumentError } = __nccwpck_require__(48045)
+const EE = __nccwpck_require__(82361)
+
+const redirectableStatusCodes = [300, 301, 302, 303, 307, 308]
+
+const kBody = Symbol('body')
+
+class BodyAsyncIterable {
+ constructor (body) {
+ this[kBody] = body
+ this[kBodyUsed] = false
+ }
+
+ async * [Symbol.asyncIterator] () {
+ assert(!this[kBodyUsed], 'disturbed')
+ this[kBodyUsed] = true
+ yield * this[kBody]
+ }
+}
+
+class RedirectHandler {
+ constructor (dispatch, maxRedirections, opts, handler) {
+ if (maxRedirections != null && (!Number.isInteger(maxRedirections) || maxRedirections < 0)) {
+ throw new InvalidArgumentError('maxRedirections must be a positive number')
+ }
+
+ util.validateHandler(handler, opts.method, opts.upgrade)
+
+ this.dispatch = dispatch
+ this.location = null
+ this.abort = null
+ this.opts = { ...opts, maxRedirections: 0 } // opts must be a copy
+ this.maxRedirections = maxRedirections
+ this.handler = handler
+ this.history = []
+
+ if (util.isStream(this.opts.body)) {
+ // TODO (fix): Provide some way for the user to cache the file to e.g. /tmp
+ // so that it can be dispatched again?
+ // TODO (fix): Do we need 100-expect support to provide a way to do this properly?
+ if (util.bodyLength(this.opts.body) === 0) {
+ this.opts.body
+ .on('data', function () {
+ assert(false)
+ })
+ }
+
+ if (typeof this.opts.body.readableDidRead !== 'boolean') {
+ this.opts.body[kBodyUsed] = false
+ EE.prototype.on.call(this.opts.body, 'data', function () {
+ this[kBodyUsed] = true
+ })
+ }
+ } else if (this.opts.body && typeof this.opts.body.pipeTo === 'function') {
+ // TODO (fix): We can't access ReadableStream internal state
+ // to determine whether or not it has been disturbed. This is just
+ // a workaround.
+ this.opts.body = new BodyAsyncIterable(this.opts.body)
+ } else if (
+ this.opts.body &&
+ typeof this.opts.body !== 'string' &&
+ !ArrayBuffer.isView(this.opts.body) &&
+ util.isIterable(this.opts.body)
+ ) {
+ // TODO: Should we allow re-using iterable if !this.opts.idempotent
+ // or through some other flag?
+ this.opts.body = new BodyAsyncIterable(this.opts.body)
+ }
+ }
+
+ onConnect (abort) {
+ this.abort = abort
+ this.handler.onConnect(abort, { history: this.history })
+ }
+
+ onUpgrade (statusCode, headers, socket) {
+ this.handler.onUpgrade(statusCode, headers, socket)
+ }
+
+ onError (error) {
+ this.handler.onError(error)
+ }
+
+ onHeaders (statusCode, headers, resume, statusText) {
+ this.location = this.history.length >= this.maxRedirections || util.isDisturbed(this.opts.body)
+ ? null
+ : parseLocation(statusCode, headers)
+
+ if (this.opts.origin) {
+ this.history.push(new URL(this.opts.path, this.opts.origin))
+ }
+
+ if (!this.location) {
+ return this.handler.onHeaders(statusCode, headers, resume, statusText)
+ }
+
+ const { origin, pathname, search } = util.parseURL(new URL(this.location, this.opts.origin && new URL(this.opts.path, this.opts.origin)))
+ const path = search ? `${pathname}${search}` : pathname
+
+ // Remove headers referring to the original URL.
+ // By default it is Host only, unless it's a 303 (see below), which removes also all Content-* headers.
+ // https://tools.ietf.org/html/rfc7231#section-6.4
+ this.opts.headers = cleanRequestHeaders(this.opts.headers, statusCode === 303, this.opts.origin !== origin)
+ this.opts.path = path
+ this.opts.origin = origin
+ this.opts.maxRedirections = 0
+ this.opts.query = null
+
+ // https://tools.ietf.org/html/rfc7231#section-6.4.4
+ // In case of HTTP 303, always replace method to be either HEAD or GET
+ if (statusCode === 303 && this.opts.method !== 'HEAD') {
+ this.opts.method = 'GET'
+ this.opts.body = null
+ }
+ }
+
+ onData (chunk) {
+ if (this.location) {
+ /*
+ https://tools.ietf.org/html/rfc7231#section-6.4
+
+ TLDR: undici always ignores 3xx response bodies.
+
+ Redirection is used to serve the requested resource from another URL, so it is assumes that
+ no body is generated (and thus can be ignored). Even though generating a body is not prohibited.
+
+ For status 301, 302, 303, 307 and 308 (the latter from RFC 7238), the specs mention that the body usually
+ (which means it's optional and not mandated) contain just an hyperlink to the value of
+ the Location response header, so the body can be ignored safely.
+
+ For status 300, which is "Multiple Choices", the spec mentions both generating a Location
+ response header AND a response body with the other possible location to follow.
+ Since the spec explicitily chooses not to specify a format for such body and leave it to
+ servers and browsers implementors, we ignore the body as there is no specified way to eventually parse it.
+ */
+ } else {
+ return this.handler.onData(chunk)
+ }
+ }
+
+ onComplete (trailers) {
+ if (this.location) {
+ /*
+ https://tools.ietf.org/html/rfc7231#section-6.4
+
+ TLDR: undici always ignores 3xx response trailers as they are not expected in case of redirections
+ and neither are useful if present.
+
+ See comment on onData method above for more detailed informations.
+ */
+
+ this.location = null
+ this.abort = null
+
+ this.dispatch(this.opts, this)
+ } else {
+ this.handler.onComplete(trailers)
+ }
+ }
+
+ onBodySent (chunk) {
+ if (this.handler.onBodySent) {
+ this.handler.onBodySent(chunk)
+ }
+ }
+}
+
+function parseLocation (statusCode, headers) {
+ if (redirectableStatusCodes.indexOf(statusCode) === -1) {
+ return null
+ }
+
+ for (let i = 0; i < headers.length; i += 2) {
+ if (headers[i].toString().toLowerCase() === 'location') {
+ return headers[i + 1]
+ }
+ }
+}
+
+// https://tools.ietf.org/html/rfc7231#section-6.4.4
+function shouldRemoveHeader (header, removeContent, unknownOrigin) {
+ return (
+ (header.length === 4 && header.toString().toLowerCase() === 'host') ||
+ (removeContent && header.toString().toLowerCase().indexOf('content-') === 0) ||
+ (unknownOrigin && header.length === 13 && header.toString().toLowerCase() === 'authorization') ||
+ (unknownOrigin && header.length === 6 && header.toString().toLowerCase() === 'cookie')
+ )
+}
+
+// https://tools.ietf.org/html/rfc7231#section-6.4
+function cleanRequestHeaders (headers, removeContent, unknownOrigin) {
+ const ret = []
+ if (Array.isArray(headers)) {
+ for (let i = 0; i < headers.length; i += 2) {
+ if (!shouldRemoveHeader(headers[i], removeContent, unknownOrigin)) {
+ ret.push(headers[i], headers[i + 1])
+ }
+ }
+ } else if (headers && typeof headers === 'object') {
+ for (const key of Object.keys(headers)) {
+ if (!shouldRemoveHeader(key, removeContent, unknownOrigin)) {
+ ret.push(key, headers[key])
+ }
+ }
+ } else {
+ assert(headers == null, 'headers must be an object or an array')
+ }
+ return ret
+}
+
+module.exports = RedirectHandler
+
+
+/***/ }),
+
+/***/ 38861:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+"use strict";
+
+
+const RedirectHandler = __nccwpck_require__(72860)
+
+function createRedirectInterceptor ({ maxRedirections: defaultMaxRedirections }) {
+ return (dispatch) => {
+ return function Intercept (opts, handler) {
+ const { maxRedirections = defaultMaxRedirections } = opts
+
+ if (!maxRedirections) {
+ return dispatch(opts, handler)
+ }
+
+ const redirectHandler = new RedirectHandler(dispatch, maxRedirections, opts, handler)
+ opts = { ...opts, maxRedirections: 0 } // Stop sub dispatcher from also redirecting.
+ return dispatch(opts, redirectHandler)
+ }
+ }
+}
+
+module.exports = createRedirectInterceptor
+
+
+/***/ }),
+
+/***/ 30953:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.SPECIAL_HEADERS = exports.HEADER_STATE = exports.MINOR = exports.MAJOR = exports.CONNECTION_TOKEN_CHARS = exports.HEADER_CHARS = exports.TOKEN = exports.STRICT_TOKEN = exports.HEX = exports.URL_CHAR = exports.STRICT_URL_CHAR = exports.USERINFO_CHARS = exports.MARK = exports.ALPHANUM = exports.NUM = exports.HEX_MAP = exports.NUM_MAP = exports.ALPHA = exports.FINISH = exports.H_METHOD_MAP = exports.METHOD_MAP = exports.METHODS_RTSP = exports.METHODS_ICE = exports.METHODS_HTTP = exports.METHODS = exports.LENIENT_FLAGS = exports.FLAGS = exports.TYPE = exports.ERROR = void 0;
+const utils_1 = __nccwpck_require__(41891);
+// C headers
+var ERROR;
+(function (ERROR) {
+ ERROR[ERROR["OK"] = 0] = "OK";
+ ERROR[ERROR["INTERNAL"] = 1] = "INTERNAL";
+ ERROR[ERROR["STRICT"] = 2] = "STRICT";
+ ERROR[ERROR["LF_EXPECTED"] = 3] = "LF_EXPECTED";
+ ERROR[ERROR["UNEXPECTED_CONTENT_LENGTH"] = 4] = "UNEXPECTED_CONTENT_LENGTH";
+ ERROR[ERROR["CLOSED_CONNECTION"] = 5] = "CLOSED_CONNECTION";
+ ERROR[ERROR["INVALID_METHOD"] = 6] = "INVALID_METHOD";
+ ERROR[ERROR["INVALID_URL"] = 7] = "INVALID_URL";
+ ERROR[ERROR["INVALID_CONSTANT"] = 8] = "INVALID_CONSTANT";
+ ERROR[ERROR["INVALID_VERSION"] = 9] = "INVALID_VERSION";
+ ERROR[ERROR["INVALID_HEADER_TOKEN"] = 10] = "INVALID_HEADER_TOKEN";
+ ERROR[ERROR["INVALID_CONTENT_LENGTH"] = 11] = "INVALID_CONTENT_LENGTH";
+ ERROR[ERROR["INVALID_CHUNK_SIZE"] = 12] = "INVALID_CHUNK_SIZE";
+ ERROR[ERROR["INVALID_STATUS"] = 13] = "INVALID_STATUS";
+ ERROR[ERROR["INVALID_EOF_STATE"] = 14] = "INVALID_EOF_STATE";
+ ERROR[ERROR["INVALID_TRANSFER_ENCODING"] = 15] = "INVALID_TRANSFER_ENCODING";
+ ERROR[ERROR["CB_MESSAGE_BEGIN"] = 16] = "CB_MESSAGE_BEGIN";
+ ERROR[ERROR["CB_HEADERS_COMPLETE"] = 17] = "CB_HEADERS_COMPLETE";
+ ERROR[ERROR["CB_MESSAGE_COMPLETE"] = 18] = "CB_MESSAGE_COMPLETE";
+ ERROR[ERROR["CB_CHUNK_HEADER"] = 19] = "CB_CHUNK_HEADER";
+ ERROR[ERROR["CB_CHUNK_COMPLETE"] = 20] = "CB_CHUNK_COMPLETE";
+ ERROR[ERROR["PAUSED"] = 21] = "PAUSED";
+ ERROR[ERROR["PAUSED_UPGRADE"] = 22] = "PAUSED_UPGRADE";
+ ERROR[ERROR["PAUSED_H2_UPGRADE"] = 23] = "PAUSED_H2_UPGRADE";
+ ERROR[ERROR["USER"] = 24] = "USER";
+})(ERROR = exports.ERROR || (exports.ERROR = {}));
+var TYPE;
+(function (TYPE) {
+ TYPE[TYPE["BOTH"] = 0] = "BOTH";
+ TYPE[TYPE["REQUEST"] = 1] = "REQUEST";
+ TYPE[TYPE["RESPONSE"] = 2] = "RESPONSE";
+})(TYPE = exports.TYPE || (exports.TYPE = {}));
+var FLAGS;
+(function (FLAGS) {
+ FLAGS[FLAGS["CONNECTION_KEEP_ALIVE"] = 1] = "CONNECTION_KEEP_ALIVE";
+ FLAGS[FLAGS["CONNECTION_CLOSE"] = 2] = "CONNECTION_CLOSE";
+ FLAGS[FLAGS["CONNECTION_UPGRADE"] = 4] = "CONNECTION_UPGRADE";
+ FLAGS[FLAGS["CHUNKED"] = 8] = "CHUNKED";
+ FLAGS[FLAGS["UPGRADE"] = 16] = "UPGRADE";
+ FLAGS[FLAGS["CONTENT_LENGTH"] = 32] = "CONTENT_LENGTH";
+ FLAGS[FLAGS["SKIPBODY"] = 64] = "SKIPBODY";
+ FLAGS[FLAGS["TRAILING"] = 128] = "TRAILING";
+ // 1 << 8 is unused
+ FLAGS[FLAGS["TRANSFER_ENCODING"] = 512] = "TRANSFER_ENCODING";
+})(FLAGS = exports.FLAGS || (exports.FLAGS = {}));
+var LENIENT_FLAGS;
+(function (LENIENT_FLAGS) {
+ LENIENT_FLAGS[LENIENT_FLAGS["HEADERS"] = 1] = "HEADERS";
+ LENIENT_FLAGS[LENIENT_FLAGS["CHUNKED_LENGTH"] = 2] = "CHUNKED_LENGTH";
+ LENIENT_FLAGS[LENIENT_FLAGS["KEEP_ALIVE"] = 4] = "KEEP_ALIVE";
+})(LENIENT_FLAGS = exports.LENIENT_FLAGS || (exports.LENIENT_FLAGS = {}));
+var METHODS;
+(function (METHODS) {
+ METHODS[METHODS["DELETE"] = 0] = "DELETE";
+ METHODS[METHODS["GET"] = 1] = "GET";
+ METHODS[METHODS["HEAD"] = 2] = "HEAD";
+ METHODS[METHODS["POST"] = 3] = "POST";
+ METHODS[METHODS["PUT"] = 4] = "PUT";
+ /* pathological */
+ METHODS[METHODS["CONNECT"] = 5] = "CONNECT";
+ METHODS[METHODS["OPTIONS"] = 6] = "OPTIONS";
+ METHODS[METHODS["TRACE"] = 7] = "TRACE";
+ /* WebDAV */
+ METHODS[METHODS["COPY"] = 8] = "COPY";
+ METHODS[METHODS["LOCK"] = 9] = "LOCK";
+ METHODS[METHODS["MKCOL"] = 10] = "MKCOL";
+ METHODS[METHODS["MOVE"] = 11] = "MOVE";
+ METHODS[METHODS["PROPFIND"] = 12] = "PROPFIND";
+ METHODS[METHODS["PROPPATCH"] = 13] = "PROPPATCH";
+ METHODS[METHODS["SEARCH"] = 14] = "SEARCH";
+ METHODS[METHODS["UNLOCK"] = 15] = "UNLOCK";
+ METHODS[METHODS["BIND"] = 16] = "BIND";
+ METHODS[METHODS["REBIND"] = 17] = "REBIND";
+ METHODS[METHODS["UNBIND"] = 18] = "UNBIND";
+ METHODS[METHODS["ACL"] = 19] = "ACL";
+ /* subversion */
+ METHODS[METHODS["REPORT"] = 20] = "REPORT";
+ METHODS[METHODS["MKACTIVITY"] = 21] = "MKACTIVITY";
+ METHODS[METHODS["CHECKOUT"] = 22] = "CHECKOUT";
+ METHODS[METHODS["MERGE"] = 23] = "MERGE";
+ /* upnp */
+ METHODS[METHODS["M-SEARCH"] = 24] = "M-SEARCH";
+ METHODS[METHODS["NOTIFY"] = 25] = "NOTIFY";
+ METHODS[METHODS["SUBSCRIBE"] = 26] = "SUBSCRIBE";
+ METHODS[METHODS["UNSUBSCRIBE"] = 27] = "UNSUBSCRIBE";
+ /* RFC-5789 */
+ METHODS[METHODS["PATCH"] = 28] = "PATCH";
+ METHODS[METHODS["PURGE"] = 29] = "PURGE";
+ /* CalDAV */
+ METHODS[METHODS["MKCALENDAR"] = 30] = "MKCALENDAR";
+ /* RFC-2068, section 19.6.1.2 */
+ METHODS[METHODS["LINK"] = 31] = "LINK";
+ METHODS[METHODS["UNLINK"] = 32] = "UNLINK";
+ /* icecast */
+ METHODS[METHODS["SOURCE"] = 33] = "SOURCE";
+ /* RFC-7540, section 11.6 */
+ METHODS[METHODS["PRI"] = 34] = "PRI";
+ /* RFC-2326 RTSP */
+ METHODS[METHODS["DESCRIBE"] = 35] = "DESCRIBE";
+ METHODS[METHODS["ANNOUNCE"] = 36] = "ANNOUNCE";
+ METHODS[METHODS["SETUP"] = 37] = "SETUP";
+ METHODS[METHODS["PLAY"] = 38] = "PLAY";
+ METHODS[METHODS["PAUSE"] = 39] = "PAUSE";
+ METHODS[METHODS["TEARDOWN"] = 40] = "TEARDOWN";
+ METHODS[METHODS["GET_PARAMETER"] = 41] = "GET_PARAMETER";
+ METHODS[METHODS["SET_PARAMETER"] = 42] = "SET_PARAMETER";
+ METHODS[METHODS["REDIRECT"] = 43] = "REDIRECT";
+ METHODS[METHODS["RECORD"] = 44] = "RECORD";
+ /* RAOP */
+ METHODS[METHODS["FLUSH"] = 45] = "FLUSH";
+})(METHODS = exports.METHODS || (exports.METHODS = {}));
+exports.METHODS_HTTP = [
+ METHODS.DELETE,
+ METHODS.GET,
+ METHODS.HEAD,
+ METHODS.POST,
+ METHODS.PUT,
+ METHODS.CONNECT,
+ METHODS.OPTIONS,
+ METHODS.TRACE,
+ METHODS.COPY,
+ METHODS.LOCK,
+ METHODS.MKCOL,
+ METHODS.MOVE,
+ METHODS.PROPFIND,
+ METHODS.PROPPATCH,
+ METHODS.SEARCH,
+ METHODS.UNLOCK,
+ METHODS.BIND,
+ METHODS.REBIND,
+ METHODS.UNBIND,
+ METHODS.ACL,
+ METHODS.REPORT,
+ METHODS.MKACTIVITY,
+ METHODS.CHECKOUT,
+ METHODS.MERGE,
+ METHODS['M-SEARCH'],
+ METHODS.NOTIFY,
+ METHODS.SUBSCRIBE,
+ METHODS.UNSUBSCRIBE,
+ METHODS.PATCH,
+ METHODS.PURGE,
+ METHODS.MKCALENDAR,
+ METHODS.LINK,
+ METHODS.UNLINK,
+ METHODS.PRI,
+ // TODO(indutny): should we allow it with HTTP?
+ METHODS.SOURCE,
+];
+exports.METHODS_ICE = [
+ METHODS.SOURCE,
+];
+exports.METHODS_RTSP = [
+ METHODS.OPTIONS,
+ METHODS.DESCRIBE,
+ METHODS.ANNOUNCE,
+ METHODS.SETUP,
+ METHODS.PLAY,
+ METHODS.PAUSE,
+ METHODS.TEARDOWN,
+ METHODS.GET_PARAMETER,
+ METHODS.SET_PARAMETER,
+ METHODS.REDIRECT,
+ METHODS.RECORD,
+ METHODS.FLUSH,
+ // For AirPlay
+ METHODS.GET,
+ METHODS.POST,
+];
+exports.METHOD_MAP = utils_1.enumToMap(METHODS);
+exports.H_METHOD_MAP = {};
+Object.keys(exports.METHOD_MAP).forEach((key) => {
+ if (/^H/.test(key)) {
+ exports.H_METHOD_MAP[key] = exports.METHOD_MAP[key];
+ }
+});
+var FINISH;
+(function (FINISH) {
+ FINISH[FINISH["SAFE"] = 0] = "SAFE";
+ FINISH[FINISH["SAFE_WITH_CB"] = 1] = "SAFE_WITH_CB";
+ FINISH[FINISH["UNSAFE"] = 2] = "UNSAFE";
+})(FINISH = exports.FINISH || (exports.FINISH = {}));
+exports.ALPHA = [];
+for (let i = 'A'.charCodeAt(0); i <= 'Z'.charCodeAt(0); i++) {
+ // Upper case
+ exports.ALPHA.push(String.fromCharCode(i));
+ // Lower case
+ exports.ALPHA.push(String.fromCharCode(i + 0x20));
+}
+exports.NUM_MAP = {
+ 0: 0, 1: 1, 2: 2, 3: 3, 4: 4,
+ 5: 5, 6: 6, 7: 7, 8: 8, 9: 9,
+};
+exports.HEX_MAP = {
+ 0: 0, 1: 1, 2: 2, 3: 3, 4: 4,
+ 5: 5, 6: 6, 7: 7, 8: 8, 9: 9,
+ A: 0XA, B: 0XB, C: 0XC, D: 0XD, E: 0XE, F: 0XF,
+ a: 0xa, b: 0xb, c: 0xc, d: 0xd, e: 0xe, f: 0xf,
+};
+exports.NUM = [
+ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
+];
+exports.ALPHANUM = exports.ALPHA.concat(exports.NUM);
+exports.MARK = ['-', '_', '.', '!', '~', '*', '\'', '(', ')'];
+exports.USERINFO_CHARS = exports.ALPHANUM
+ .concat(exports.MARK)
+ .concat(['%', ';', ':', '&', '=', '+', '$', ',']);
+// TODO(indutny): use RFC
+exports.STRICT_URL_CHAR = [
+ '!', '"', '$', '%', '&', '\'',
+ '(', ')', '*', '+', ',', '-', '.', '/',
+ ':', ';', '<', '=', '>',
+ '@', '[', '\\', ']', '^', '_',
+ '`',
+ '{', '|', '}', '~',
+].concat(exports.ALPHANUM);
+exports.URL_CHAR = exports.STRICT_URL_CHAR
+ .concat(['\t', '\f']);
+// All characters with 0x80 bit set to 1
+for (let i = 0x80; i <= 0xff; i++) {
+ exports.URL_CHAR.push(i);
+}
+exports.HEX = exports.NUM.concat(['a', 'b', 'c', 'd', 'e', 'f', 'A', 'B', 'C', 'D', 'E', 'F']);
+/* Tokens as defined by rfc 2616. Also lowercases them.
+ * token = 1*
+ * separators = "(" | ")" | "<" | ">" | "@"
+ * | "," | ";" | ":" | "\" | <">
+ * | "/" | "[" | "]" | "?" | "="
+ * | "{" | "}" | SP | HT
+ */
+exports.STRICT_TOKEN = [
+ '!', '#', '$', '%', '&', '\'',
+ '*', '+', '-', '.',
+ '^', '_', '`',
+ '|', '~',
+].concat(exports.ALPHANUM);
+exports.TOKEN = exports.STRICT_TOKEN.concat([' ']);
+/*
+ * Verify that a char is a valid visible (printable) US-ASCII
+ * character or %x80-FF
+ */
+exports.HEADER_CHARS = ['\t'];
+for (let i = 32; i <= 255; i++) {
+ if (i !== 127) {
+ exports.HEADER_CHARS.push(i);
+ }
+}
+// ',' = \x44
+exports.CONNECTION_TOKEN_CHARS = exports.HEADER_CHARS.filter((c) => c !== 44);
+exports.MAJOR = exports.NUM_MAP;
+exports.MINOR = exports.MAJOR;
+var HEADER_STATE;
+(function (HEADER_STATE) {
+ HEADER_STATE[HEADER_STATE["GENERAL"] = 0] = "GENERAL";
+ HEADER_STATE[HEADER_STATE["CONNECTION"] = 1] = "CONNECTION";
+ HEADER_STATE[HEADER_STATE["CONTENT_LENGTH"] = 2] = "CONTENT_LENGTH";
+ HEADER_STATE[HEADER_STATE["TRANSFER_ENCODING"] = 3] = "TRANSFER_ENCODING";
+ HEADER_STATE[HEADER_STATE["UPGRADE"] = 4] = "UPGRADE";
+ HEADER_STATE[HEADER_STATE["CONNECTION_KEEP_ALIVE"] = 5] = "CONNECTION_KEEP_ALIVE";
+ HEADER_STATE[HEADER_STATE["CONNECTION_CLOSE"] = 6] = "CONNECTION_CLOSE";
+ HEADER_STATE[HEADER_STATE["CONNECTION_UPGRADE"] = 7] = "CONNECTION_UPGRADE";
+ HEADER_STATE[HEADER_STATE["TRANSFER_ENCODING_CHUNKED"] = 8] = "TRANSFER_ENCODING_CHUNKED";
+})(HEADER_STATE = exports.HEADER_STATE || (exports.HEADER_STATE = {}));
+exports.SPECIAL_HEADERS = {
+ 'connection': HEADER_STATE.CONNECTION,
+ 'content-length': HEADER_STATE.CONTENT_LENGTH,
+ 'proxy-connection': HEADER_STATE.CONNECTION,
+ 'transfer-encoding': HEADER_STATE.TRANSFER_ENCODING,
+ 'upgrade': HEADER_STATE.UPGRADE,
+};
+//# sourceMappingURL=constants.js.map
+
+/***/ }),
+
+/***/ 61145:
+/***/ ((module) => {
+
+module.exports = 'AGFzbQEAAAABMAhgAX8Bf2ADf39/AX9gBH9/f38Bf2AAAGADf39/AGABfwBgAn9/AGAGf39/f39/AALLAQgDZW52GHdhc21fb25faGVhZGVyc19jb21wbGV0ZQACA2VudhV3YXNtX29uX21lc3NhZ2VfYmVnaW4AAANlbnYLd2FzbV9vbl91cmwAAQNlbnYOd2FzbV9vbl9zdGF0dXMAAQNlbnYUd2FzbV9vbl9oZWFkZXJfZmllbGQAAQNlbnYUd2FzbV9vbl9oZWFkZXJfdmFsdWUAAQNlbnYMd2FzbV9vbl9ib2R5AAEDZW52GHdhc21fb25fbWVzc2FnZV9jb21wbGV0ZQAAA0ZFAwMEAAAFAAAAAAAABQEFAAUFBQAABgAAAAAGBgYGAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAAABAQcAAAUFAwABBAUBcAESEgUDAQACBggBfwFBgNQECwfRBSIGbWVtb3J5AgALX2luaXRpYWxpemUACRlfX2luZGlyZWN0X2Z1bmN0aW9uX3RhYmxlAQALbGxodHRwX2luaXQAChhsbGh0dHBfc2hvdWxkX2tlZXBfYWxpdmUAQQxsbGh0dHBfYWxsb2MADAZtYWxsb2MARgtsbGh0dHBfZnJlZQANBGZyZWUASA9sbGh0dHBfZ2V0X3R5cGUADhVsbGh0dHBfZ2V0X2h0dHBfbWFqb3IADxVsbGh0dHBfZ2V0X2h0dHBfbWlub3IAEBFsbGh0dHBfZ2V0X21ldGhvZAARFmxsaHR0cF9nZXRfc3RhdHVzX2NvZGUAEhJsbGh0dHBfZ2V0X3VwZ3JhZGUAEwxsbGh0dHBfcmVzZXQAFA5sbGh0dHBfZXhlY3V0ZQAVFGxsaHR0cF9zZXR0aW5nc19pbml0ABYNbGxodHRwX2ZpbmlzaAAXDGxsaHR0cF9wYXVzZQAYDWxsaHR0cF9yZXN1bWUAGRtsbGh0dHBfcmVzdW1lX2FmdGVyX3VwZ3JhZGUAGhBsbGh0dHBfZ2V0X2Vycm5vABsXbGxodHRwX2dldF9lcnJvcl9yZWFzb24AHBdsbGh0dHBfc2V0X2Vycm9yX3JlYXNvbgAdFGxsaHR0cF9nZXRfZXJyb3JfcG9zAB4RbGxodHRwX2Vycm5vX25hbWUAHxJsbGh0dHBfbWV0aG9kX25hbWUAIBJs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ADcDACAAQShqQgA3AwAgAEEgakIANwMAIABBEGpCADcDACAAQQhqQgA3AwAgAEHdATYCHEEAC3sBAX8CQCAAKAIMIgMNAAJAIAAoAgRFDQAgACABNgIECwJAIAAgASACEMSAgIAAIgMNACAAKAIMDwsgACADNgIcQQAhAyAAKAIEIgFFDQAgACABIAIgACgCCBGBgICAAAAiAUUNACAAIAI2AhQgACABNgIMIAEhAwsgAwvk8wEDDn8DfgR/I4CAgIAAQRBrIgMkgICAgAAgASEEIAEhBSABIQYgASEHIAEhCCABIQkgASEKIAEhCyABIQwgASENIAEhDiABIQ8CQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgACgCHCIQQX9qDt0B2gEB2QECAwQFBgcICQoLDA0O2AEPENcBERLWARMUFRYXGBkaG+AB3wEcHR7VAR8gISIjJCXUASYnKCkqKyzTAdIBLS7RAdABLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVG2wFHSElKzwHOAUvNAUzMAU1OT1BRUlNUVVZXWFlaW1xdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+f4ABgQGCAYMBhAGFAYYBhwGIAYkB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QAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAC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FCAAIBA2AgxBACEQDLIBCyAAKAIEIRAgAEEANgIEAkAgACAQIAEQp4CAgAAiEA0AIAEhAQxNCyAAQdMANgIcIAAgATYCFCAAIBA2AgxBACEQDLEBCyAAKAIEIRAgAEEANgIEAkAgACAQIAEQp4CAgAAiEA0AIAEhAQxRCyAAQeUANgIcIAAgATYCFCAAIBA2AgxBACEQDLABCyAAQQA2AhwgACABNgIUIABBxoqAgAA2AhAgAEEHNgIMQQAhEAyvAQsgACgCBCEQIABBADYCBAJAIAAgECABEKeAgIAAIhANACABIQEMSQsgAEHSADYCHCAAIAE2AhQgACAQNgIMQQAhEAyuAQsgACgCBCEQIABBADYCBAJAIAAgECABEKeAgIAAIhANACABIQEMSQsgAEHTADYCHCAAIAE2AhQgACAQNgIMQQAhEAytAQsgACgCBCEQIABBADYCBAJAIAAgECABEKeAgIAAIhANACABIQEMTQsgAEHlADYCHCAAIAE2AhQgACAQNgIMQQAhEAysAQsgAEEANgIcIAAgATYCFCAAQdyIgIAANgIQIABBBzYCDEEAIRAMqwELIBBBP0cNASABQQFqIQELQQUhEAyQAQtBACEQIABBADYCHCAAIAE2AhQgAEH9koCAADYCECAAQQc2AgwMqAELIAAoAgQhECAAQQA2AgQCQCAAIBAgARCngICAACIQDQAgASEBDEILIABB0gA2AhwgACABNgIUIAAgEDYCDEEAIRAMpwELIAAoAgQhECAAQQA2AgQCQCAAIBAgARCngICAACIQDQAgASEBDEILIABB0wA2AhwgACABNgIUIAAgEDYCDEEAIRAMpgELIAAoAgQhECAAQQA2AgQCQCAAIBAgARCngICAACIQDQAgASEBDEYLIABB5QA2AhwgACABNgIUIAAgEDYCDEEAIRAMpQELIAAoAgQhASAAQQA2AgQCQCAAIAEgFBCngICAACIBDQAgFCEBDD8LIABB0gA2AhwgACAUNgIUIAAgATYCDEEAIRAMpAELIAAoAgQhASAAQQA2AgQCQCAAIAEgFBCngICAACIBDQAgFCEBDD8LIABB0wA2AhwgACAUNgIUIAAgATYCDEEAIRAMowELIAAoAgQhASAAQQA2AgQCQCAAIAEgFBCngICAACIBDQAgFCEBDEMLIABB5QA2AhwgACAU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YWdlX2JlZ2luYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfZXh0ZW5zaW9uX3ZhbHVlYCBjYWxsYmFjayBlcnJvcgBgb25fc3RhdHVzX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fdmVyc2lvbl9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX3VybF9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX2NodW5rX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25faGVhZGVyX3ZhbHVlX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fbWVzc2FnZV9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX21ldGhvZF9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX2hlYWRlcl9maWVsZF9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX2NodW5rX2V4dGVuc2lvbl9uYW1lYCBjYWxsYmFjayBlcnJvcgBVbmV4cGVjdGVkIGNoYXIgaW4gdXJsIHNlcnZlcgBJbnZhbGlkIGhlYWRlciB2YWx1ZSBjaGFyAEludmFsaWQgaGVhZGVyIGZpZWxkIGNoYXIAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl92ZXJzaW9uAEludmFsaWQgbWlub3IgdmVyc2lvbgBJbnZhbGlkIG1ham9yIHZlcnNpb24ARXhwZWN0ZWQgc3BhY2UgYWZ0ZXIgdmVyc2lvbgBFeHBlY3RlZCBDUkxGIGFmdGVyIHZlcnNpb24ASW52YWxpZCBIVFRQIHZlcnNpb24ASW52YWxpZCBoZWFkZXIgdG9rZW4AU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl91cmwASW52YWxpZCBjaGFyYWN0ZXJzIGluIHVybABVbmV4cGVjdGVkIHN0YXJ0IGNoYXIgaW4gdXJsAERvdWJsZSBAIGluIHVybABFbXB0eSBDb250ZW50LUxlbmd0aABJbnZhbGlkIGNoYXJhY3RlciBpbiBDb250ZW50LUxlbmd0aABEdXBsaWNhdGUgQ29udGVudC1MZW5ndGgASW52YWxpZCBjaGFyIGluIHVybCBwYXRoAENvbnRlbnQtTGVuZ3RoIGNhbid0IGJlIHByZXNlbnQgd2l0aCBUcmFuc2Zlci1FbmNvZGluZwBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBzaXplAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25faGVhZGVyX3ZhbHVlAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fY2h1bmtfZXh0ZW5zaW9uX3ZhbHVlAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgdmFsdWUATWlzc2luZyBleHBlY3RlZCBMRiBhZnRlciBoZWFkZXIgdmFsdWUASW52YWxpZCBgVHJhbnNmZXItRW5jb2RpbmdgIGhlYWRlciB2YWx1ZQBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBleHRlbnNpb25zIHF1b3RlIHZhbHVlAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgcXVvdGVkIHZhbHVlAFBhdXNlZCBieSBvbl9oZWFkZXJzX2NvbXBsZXRlAEludmFsaWQgRU9GIHN0YXRlAG9uX3Jlc2V0IHBhdXNlAG9uX2NodW5rX2hlYWRlciBwYXVzZQBvbl9tZXNzYWdlX2JlZ2luIHBhdXNlAG9uX2NodW5rX2V4dGVuc2lvbl92YWx1ZSBwYXVzZQBvbl9zdGF0dXNfY29tcGxldGUgcGF1c2UAb25fdmVyc2lvbl9jb21wbGV0ZSBwYXVzZQBvbl91cmxfY29tcGxldGUgcGF1c2UAb25fY2h1bmtfY29tcGxldGUgcGF1c2UAb25faGVhZGVyX3ZhbHVlX2NvbXBsZXRlIHBhdXNlAG9uX21lc3NhZ2VfY29tcGxldGUgcGF1c2UAb25fbWV0aG9kX2NvbXBsZXRlIHBhdXNlAG9uX2hlYWRlcl9maWVsZF9jb21wbGV0ZSBwYXVzZQBvbl9jaHVua19leHRlbnNpb25fbmFtZSBwYXVzZQBVbmV4cGVjdGVkIHNwYWNlIGFmdGVyIHN0YXJ0IGxpbmUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9jaHVua19leHRlbnNpb25fbmFtZQBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBleHRlbnNpb25zIG5hbWUAUGF1c2Ugb24gQ09OTkVDVC9VcGdyYWRlAFBhdXNlIG9uIFBSSS9VcGdyYWRlAEV4cGVjdGVkIEhUVFAvMiBDb25uZWN0aW9uIFByZWZhY2UAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9tZXRob2QARXhwZWN0ZWQgc3BhY2UgYWZ0ZXIgbWV0aG9kAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25faGVhZGVyX2ZpZWxkAFBhdXNlZABJbnZhbGlkIHdvcmQgZW5jb3VudGVyZWQASW52YWxpZCBtZXRob2QgZW5jb3VudGVyZWQAVW5leHBlY3RlZCBjaGFyIGluIHVybCBzY2hlbWEAUmVxdWVzdCBoYXMgaW52YWxpZCBgVHJhbnNmZXItRW5jb2RpbmdgAFNXSVRDSF9QUk9YWQBVU0VfUFJPWFkATUtBQ1RJVklUWQBVTlBST0NFU1NBQkxFX0VOVElUWQBDT1BZAE1PVkVEX1BFUk1BTkVOVExZAFRPT19FQVJMWQBOT1RJRlkARkFJTEVEX0RFUEVOREVOQ1kAQkFEX0dBVEVXQVkAUExBWQBQVVQAQ0hFQ0tPVVQAR0FURVdBWV9USU1FT1VUAFJFUVVFU1RfVElNRU9VVABORVRXT1JLX0NPTk5FQ1RfVElNRU9VVABDT05ORUNUSU9OX1RJTUVPVVQATE9HSU5fVElNRU9VVABORVRXT1JLX1JFQURfVElNRU9VVABQT1NUAE1JU0RJUkVDVEVEX1JFUVVFU1QAQ0xJRU5UX0NMT1NFRF9SRVFVRVNUAENMSUVOVF9DTE9TRURfTE9BRF9CQUxBTkNFRF9SRVFVRVNUAEJBRF9SRVFVRVNUAEhUVFBfUkVRVUVTVF9TRU5UX1RPX0hUVFBTX1BPUlQAUkVQT1JUAElNX0FfVEVBUE9UAFJFU0VUX0NPTlRFTlQATk9fQ09OVEVOVABQQVJUSUFMX0NPTlRFTlQASFBFX0lOVkFMSURfQ09OU1RBTlQASFBFX0NCX1JFU0VUAEdFVABIUEVfU1RSSUNUAENPTkZMSUNUAFRFTVBPUkFSWV9SRURJUkVDVABQRVJNQU5FTlRfUkVESVJFQ1QAQ09OTkVDVABNVUxUSV9TVEFUVVMASFBFX0lOVkFMSURfU1RBVFVTAFRPT19NQU5ZX1JFUVVFU1RTAEVBUkxZX0hJTlRTAFVOQVZBSUxBQkxFX0ZPUl9MRUdBTF9SRUFTT05TAE9QVElPTlMAU1dJVENISU5HX1BST1RPQ09MUwBWQVJJQU5UX0FMU09fTkVHT1RJQVRFUwBNVUxUSVBMRV9DSE9JQ0VTAElOVEVSTkFMX1NFUlZFUl9FUlJPUgBXRUJfU0VSVkVSX1VOS05PV05fRVJST1IAUkFJTEdVTl9FUlJPUgBJREVOVElUWV9QUk9WSURFUl9BVVRIRU5USUNBVElPTl9FUlJPUgBTU0xfQ0VSVElGSUNBVEVfRVJST1IASU5WQUxJRF9YX0ZPUldBUkRFRF9GT1IAU0VUX1BBUkFNRVRFUgBHRVRfUEFSQU1FVEVSAEhQRV9VU0VSAFNFRV9PVEhFUgBIUEVfQ0JfQ0hVTktfSEVBREVSAE1LQ0FMRU5EQVIAU0VUVVAAV0VCX1NFUlZFUl9JU19ET1dOAFRFQVJET1dOAEhQRV9DTE9TRURfQ09OTkVDVElPTgBIRVVSSVNUSUNfRVhQSVJBVElPTgBESVNDT05ORUNURURfT1BFUkFUSU9OAE5PTl9BVVRIT1JJVEFUSVZFX0lORk9STUFUSU9OAEhQRV9JTlZBTElEX1ZFUlNJT04ASFBFX0NCX01FU1NBR0VfQkVHSU4AU0lURV9JU19GUk9aRU4ASFBFX0lOVkFMSURfSEVBREVSX1RPS0VOAElOVkFMSURfVE9LRU4ARk9SQklEREVOAEVOSEFOQ0VfWU9VUl9DQUxNAEhQRV9JTlZBTElEX1VSTABCTE9DS0VEX0JZX1BBUkVOVEFMX0NPTlRST0wATUtDT0wAQUNMAEhQRV9JTlRFUk5BTABSRVFVRVNUX0hFQURFUl9GSUVMRFNfVE9PX0xBUkdFX1VOT0ZGSUNJQUwASFBFX09LAFVOTElOSwBVTkxPQ0sAUFJJAFJFVFJZX1dJVEgASFBFX0lOVkFMSURfQ09OVEVOVF9MRU5HVEgASFBFX1VORVhQRUNURURfQ09OVEVOVF9MRU5HVEgARkxVU0gAUFJPUFBBVENIAE0tU0VBUkNIAFVSSV9UT09fTE9ORwBQUk9DRVNTSU5HAE1JU0NFTExBTkVPVVNfUEVSU0lTVEVOVF9XQVJOSU5HAE1JU0NFTExBTkVPVVNfV0FSTklORwBIUEVfSU5WQUxJRF9UUkFOU0ZFUl9FTkNPRElORwBFeHBlY3RlZCBDUkxGAEhQRV9JTlZBTElEX0NIVU5LX1NJWkUATU9WRQBDT05USU5VRQBIUEVfQ0JfU1RBVFVTX0NPTVBMRVRFAEhQRV9DQl9IRUFERVJTX0NPTVBMRVRFAEhQRV9DQl9WRVJTSU9OX0NPTVBMRVRFAEhQRV9DQl9VUkxfQ09NUExFVEUASFBFX0NCX0NIVU5LX0NPTVBMRVRFAEhQRV9DQl9IRUFERVJfVkFMVUVfQ09NUExFVEUASFBFX0NCX0NIVU5LX0VYVEVOU0lPTl9WQUxVRV9DT01QTEVURQBIUEVfQ0JfQ0hVTktfRVhURU5TSU9OX05BTUVfQ09NUExFVEUASFBFX0NCX01FU1NBR0VfQ09NUExFVEUASFBFX0NCX01FVEhPRF9DT01QTEVURQBIUEVfQ0JfSEVBREVSX0ZJRUxEX0NPTVBMRVRFAERFTEVURQBIUEVfSU5WQUxJRF9FT0ZfU1RBVEUASU5WQUxJRF9TU0xfQ0VSVElGSUNBVEUAUEFVU0UATk9fUkVTUE9OU0UAVU5TVVBQT1JURURfTUVESUFfVFlQRQBHT05FAE5PVF9BQ0NFUFRBQkxFAFNFUlZJQ0VfVU5BVkFJTEFCTEUAUkFOR0VfTk9UX1NBVElTRklBQkxFAE9SSUdJTl9JU19VTlJFQUNIQUJMRQBSRVNQT05TRV9JU19TVEFMRQBQVVJHRQBNRVJHRQBSRVFVRVNUX0hFQURFUl9GSUVMRFNfVE9PX0xBUkdFAFJFUVVFU1RfSEVBREVSX1RPT19MQVJHRQBQQVlMT0FEX1RPT19MQVJHRQBJTlNVRkZJQ0lFTlRfU1RPUkFHRQBIUEVfUEFVU0VEX1VQR1JBREUASFBFX1BBVVNFRF9IMl9VUEdSQURFAFNPVVJDRQBBTk5PVU5DRQBUUkFDRQBIUEVfVU5FWFBFQ1RFRF9TUEFDRQBERVNDUklCRQBVTlNVQlNDUklCRQBSRUNPUkQASFBFX0lOVkFMSURfTUVUSE9EAE5PVF9GT1VORABQUk9QRklORABVTkJJTkQAUkVCSU5EAFVOQVVUSE9SSVpFRABNRVRIT0RfTk9UX0FMTE9XRUQASFRUUF9WRVJTSU9OX05PVF9TVVBQT1JURUQAQUxSRUFEWV9SRVBPUlRFRABBQ0NFUFRFRABOT1RfSU1QTEVNRU5URUQATE9PUF9ERVRFQ1RFRABIUEVfQ1JfRVhQRUNURUQASFBFX0xGX0VYUEVDVEVEAENSRUFURUQASU1fVVNFRABIUEVfUEFVU0VEAFRJTUVPVVRfT0NDVVJFRABQQVlNRU5UX1JFUVVJUkVEAFBSRUNPTkRJVElPTl9SRVFVSVJFRABQUk9YWV9BVVRIRU5USUNBVElPTl9SRVFVSVJFRABORVRXT1JLX0FVVEhFTlRJQ0FUSU9OX1JFUVVJUkVEAExFTkdUSF9SRVFVSVJFRABTU0xfQ0VSVElGSUNBVEVfUkVRVUlSRUQAVVBHUkFERV9SRVFVSVJFRABQQUdFX0VYUElSRUQAUFJFQ09ORElUSU9OX0ZBSUxFRABFWFBFQ1RBVElPTl9GQUlMRUQAUkVWQUxJREFUSU9OX0ZBSUxFRABTU0xfSEFORFNIQUtFX0ZBSUxFRABMT0NLRUQAVFJBTlNGT1JNQVRJT05fQVBQTElFRABOT1RfTU9ESUZJRUQATk9UX0VYVEVOREVEAEJBTkRXSURUSF9MSU1JVF9FWENFRURFRABTSVRFX0lTX09WRVJMT0FERUQASEVBRABFeHBlY3RlZCBIVFRQLwAAXhMAACYTAAAwEAAA8BcAAJ0TAAAVEgAAORcAAPASAAAKEAAAdRIAAK0SAACCEwAATxQAAH8QAACgFQAAIxQAAIkSAACLFAAATRUAANQRAADPFAAAEBgAAMkWAADcFgAAwREAAOAXAAC7FAAAdBQAAHwVAADlFAAACBcAAB8QAABlFQAAoxQAACgVAAACFQAAmRUAACwQAACLGQAATw8AANQOAABqEAAAzhAAAAIXAACJDgAAbhMAABwTAABmFAAAVhcAAMETAADNEwAAbBMAAGgXAABmFwAAXxcAACITAADODwAAaQ4AANgOAABjFgAAyxMAAKoOAAAoFwAAJhcAAMUTAABdFgAA6BEAAGcTAABlEwAA8hYAAHMTAAAdFwAA+RYAAPMRAADPDgAAzhUAAAwSAACzEQAApREAAGEQAAAyFwAAuxMAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQIBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAIDAgICAgIAAAICAAICAAICAgICAgICAgIABAAAAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgIAAAACAgICAgICAgICAgICAgICAgICAgICAgICAgICAgACAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAACAAICAgICAAACAgACAgACAgICAgICAgICAAMABAAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAAgACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbG9zZWVlcC1hbGl2ZQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQEBAQEBAQEBAQIBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBY2h1bmtlZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEAAQEBAQEAAAEBAAEBAAEBAQEBAQEBAQEAAAAAAAAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABlY3Rpb25lbnQtbGVuZ3Rob25yb3h5LWNvbm5lY3Rpb24AAAAAAAAAAAAAAAAAAAByYW5zZmVyLWVuY29kaW5ncGdyYWRlDQoNCg0KU00NCg0KVFRQL0NFL1RTUC8AAAAAAAAAAAAAAAABAgABAwAAAAAAAAAAAAAAAAAAAAAAAAQBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAAAAAAAAAQIAAQMAAAAAAAAAAAAAAAAAAAAAAAAEAQEFAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAAAAAAAAAEAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAAAAAAAAAAAAAQAAAgAAAAAAAAAAAAAAAAAAAAAAAAMEAAAEBAQEBAQEBAQEBAUEBAQEBAQEBAQEBAQABAAGBwQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwAAAAAAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAABAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAIAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABOT1VOQ0VFQ0tPVVRORUNURVRFQ1JJQkVMVVNIRVRFQURTRUFSQ0hSR0VDVElWSVRZTEVOREFSVkVPVElGWVBUSU9OU0NIU0VBWVNUQVRDSEdFT1JESVJFQ1RPUlRSQ0hQQVJBTUVURVJVUkNFQlNDUklCRUFSRE9XTkFDRUlORE5LQ0tVQlNDUklCRUhUVFAvQURUUC8='
+
+
+/***/ }),
+
+/***/ 95627:
+/***/ ((module) => {
+
+module.exports = 'AGFzbQEAAAABMAhgAX8Bf2ADf39/AX9gBH9/f38Bf2AAAGADf39/AGABfwBgAn9/AGAGf39/f39/AALLAQgDZW52GHdhc21fb25faGVhZGVyc19jb21wbGV0ZQACA2VudhV3YXNtX29uX21lc3NhZ2VfYmVnaW4AAANlbnYLd2FzbV9vbl91cmwAAQNlbnYOd2FzbV9vbl9zdGF0dXMAAQNlbnYUd2FzbV9vbl9oZWFkZXJfZmllbGQAAQNlbnYUd2FzbV9vbl9oZWFkZXJfdmFsdWUAAQNlbnYMd2FzbV9vbl9ib2R5AAEDZW52GHdhc21fb25fbWVzc2FnZV9jb21wbGV0ZQAAA0ZFAwMEAAAFAAAAAAAABQEFAAUFBQAABgAAAAAGBgYGAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAAABAQcAAAUFAwABBAUBcAESEgUDAQACBggBfwFBgNQECwfRBSIGbWVtb3J5AgALX2luaXRpYWxpemUACRlfX2luZGlyZWN0X2Z1bmN0aW9uX3RhYmxlAQALbGxodHRwX2luaXQAChhsbGh0dHBfc2hvdWxkX2tlZXBfYWxpdmUAQQxsbGh0dHBfYWxsb2MADAZtYWxsb2MARgtsbGh0dHBfZnJlZQANBGZyZWUASA9sbGh0dHBfZ2V0X3R5cGUADhVsbGh0dHBfZ2V0X2h0dHBfbWFqb3IADxVsbGh0dHBfZ2V0X2h0dHBfbWlub3IAEBFsbGh0dHBfZ2V0X21ldGhvZAARFmxsaHR0cF9nZXRfc3RhdHVzX2NvZGUAEhJsbGh0dHBfZ2V0X3VwZ3JhZGUAEwxsbGh0dHBfcmVzZXQAFA5sbGh0dHBfZXhlY3V0ZQAVFGxsaHR0cF9zZXR0aW5nc19pbml0ABYNbGxodHRwX2ZpbmlzaAAXDGxsaHR0cF9wYXVzZQAYDWxsaHR0cF9yZXN1bWUAGRtsbGh0dHBfcmVzdW1lX2FmdGVyX3VwZ3JhZGUAGhBsbGh0dHBfZ2V0X2Vycm5vABsXbGxodHRwX2dldF9lcnJvcl9yZWFzb24AHBdsbGh0dHBfc2V0X2Vycm9yX3JlYXNvbgAdFGxsaHR0cF9nZXRfZXJyb3JfcG9zAB4RbGxodHRwX2Vycm5vX25hbWUAHxJsbGh0dHBfbWV0aG9kX25hbWUAIBJs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IAH9CwMAIABBMGogAf0LAwAgAEEgaiAB/QsDACAAQd0BNgIcQQALewEBfwJAIAAoAgwiAw0AAkAgACgCBEUNACAAIAE2AgQLAkAgACABIAIQxICAgAAiAw0AIAAoAgwPCyAAIAM2AhxBACEDIAAoAgQiAUUNACAAIAEgAiAAKAIIEYGAgIAAACIBRQ0AIAAgAjYCFCAAIAE2AgwgASEDCyADC+TzAQMOfwN+BH8jgICAgABBEGsiAySAgICAACABIQQgASEFIAEhBiABIQcgASEIIAEhCSABIQogASELIAEhDCABIQ0gASEOIAEhDwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCAAKAIcIhBBf2oO3QHaAQHZAQIDBAUGBwgJCgsMDQ7YAQ8Q1wEREtYBExQVFhcYGRob4AHfARwdHtUBHyAhIiMkJdQBJicoKSorLNMB0gEtLtEB0AEvMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUbbAUdISUrPAc4BS80BTMwBTU5PUFFSU1RVVldYWVpbXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5/gAGBAYIBgwGEAYUBhgGHAYgBiQGKAYsBjAGNAY4BjwGQAZEB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QAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIBAOxwEAAQID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YWNrIGVycm9yAGBvbl9jaHVua19leHRlbnNpb25fdmFsdWVgIGNhbGxiYWNrIGVycm9yAGBvbl9zdGF0dXNfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl92ZXJzaW9uX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fdXJsX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9oZWFkZXJfdmFsdWVfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9tZXNzYWdlX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fbWV0aG9kX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25faGVhZGVyX2ZpZWxkX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfZXh0ZW5zaW9uX25hbWVgIGNhbGxiYWNrIGVycm9yAFVuZXhwZWN0ZWQgY2hhciBpbiB1cmwgc2VydmVyAEludmFsaWQgaGVhZGVyIHZhbHVlIGNoYXIASW52YWxpZCBoZWFkZXIgZmllbGQgY2hhcgBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3ZlcnNpb24ASW52YWxpZCBtaW5vciB2ZXJzaW9uAEludmFsaWQgbWFqb3IgdmVyc2lvbgBFeHBlY3RlZCBzcGFjZSBhZnRlciB2ZXJzaW9uAEV4cGVjdGVkIENSTEYgYWZ0ZXIgdmVyc2lvbgBJbnZhbGlkIEhUVFAgdmVyc2lvbgBJbnZhbGlkIGhlYWRlciB0b2tlbgBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3VybABJbnZhbGlkIGNoYXJhY3RlcnMgaW4gdXJsAFVuZXhwZWN0ZWQgc3RhcnQgY2hhciBpbiB1cmwARG91YmxlIEAgaW4gdXJsAEVtcHR5IENvbnRlbnQtTGVuZ3RoAEludmFsaWQgY2hhcmFjdGVyIGluIENvbnRlbnQtTGVuZ3RoAER1cGxpY2F0ZSBDb250ZW50LUxlbmd0aABJbnZhbGlkIGNoYXIgaW4gdXJsIHBhdGgAQ29udGVudC1MZW5ndGggY2FuJ3QgYmUgcHJlc2VudCB3aXRoIFRyYW5zZmVyLUVuY29kaW5nAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIHNpemUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9oZWFkZXJfdmFsdWUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9jaHVua19leHRlbnNpb25fdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyB2YWx1ZQBNaXNzaW5nIGV4cGVjdGVkIExGIGFmdGVyIGhlYWRlciB2YWx1ZQBJbnZhbGlkIGBUcmFuc2Zlci1FbmNvZGluZ2AgaGVhZGVyIHZhbHVlAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgcXVvdGUgdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBxdW90ZWQgdmFsdWUAUGF1c2VkIGJ5IG9uX2hlYWRlcnNfY29tcGxldGUASW52YWxpZCBFT0Ygc3RhdGUAb25fcmVzZXQgcGF1c2UAb25fY2h1bmtfaGVhZGVyIHBhdXNlAG9uX21lc3NhZ2VfYmVnaW4gcGF1c2UAb25fY2h1bmtfZXh0ZW5zaW9uX3ZhbHVlIHBhdXNlAG9uX3N0YXR1c19jb21wbGV0ZSBwYXVzZQBvbl92ZXJzaW9uX2NvbXBsZXRlIHBhdXNlAG9uX3VybF9jb21wbGV0ZSBwYXVzZQBvbl9jaHVua19jb21wbGV0ZSBwYXVzZQBvbl9oZWFkZXJfdmFsdWVfY29tcGxldGUgcGF1c2UAb25fbWVzc2FnZV9jb21wbGV0ZSBwYXVzZQBvbl9tZXRob2RfY29tcGxldGUgcGF1c2UAb25faGVhZGVyX2ZpZWxkX2NvbXBsZXRlIHBhdXNlAG9uX2NodW5rX2V4dGVuc2lvbl9uYW1lIHBhdXNlAFVuZXhwZWN0ZWQgc3BhY2UgYWZ0ZXIgc3RhcnQgbGluZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2NodW5rX2V4dGVuc2lvbl9uYW1lAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgbmFtZQBQYXVzZSBvbiBDT05ORUNUL1VwZ3JhZGUAUGF1c2Ugb24gUFJJL1VwZ3JhZGUARXhwZWN0ZWQgSFRUUC8yIENvbm5lY3Rpb24gUHJlZmFjZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX21ldGhvZABFeHBlY3RlZCBzcGFjZSBhZnRlciBtZXRob2QAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9oZWFkZXJfZmllbGQAUGF1c2VkAEludmFsaWQgd29yZCBlbmNvdW50ZXJlZABJbnZhbGlkIG1ldGhvZCBlbmNvdW50ZXJlZABVbmV4cGVjdGVkIGNoYXIgaW4gdXJsIHNjaGVtYQBSZXF1ZXN0IGhhcyBpbnZhbGlkIGBUcmFuc2Zlci1FbmNvZGluZ2AAU1dJVENIX1BST1hZAFVTRV9QUk9YWQBNS0FDVElWSVRZAFVOUFJPQ0VTU0FCTEVfRU5USVRZAENPUFkATU9WRURfUEVSTUFORU5UTFkAVE9PX0VBUkxZAE5PVElGWQBGQUlMRURfREVQRU5ERU5DWQBCQURfR0FURVdBWQBQTEFZAFBVVABDSEVDS09VVABHQVRFV0FZX1RJTUVPVVQAUkVRVUVTVF9USU1FT1VUAE5FVFdPUktfQ09OTkVDVF9USU1FT1VUAENPTk5FQ1RJT05fVElNRU9VVABMT0dJTl9USU1FT1VUAE5FVFdPUktfUkVBRF9USU1FT1VUAFBPU1QATUlTRElSRUNURURfUkVRVUVTVABDTElFTlRfQ0xPU0VEX1JFUVVFU1QAQ0xJRU5UX0NMT1NFRF9MT0FEX0JBTEFOQ0VEX1JFUVVFU1QAQkFEX1JFUVVFU1QASFRUUF9SRVFVRVNUX1NFTlRfVE9fSFRUUFNfUE9SVABSRVBPUlQASU1fQV9URUFQT1QAUkVTRVRfQ09OVEVOVABOT19DT05URU5UAFBBUlRJQUxfQ09OVEVOVABIUEVfSU5WQUxJRF9DT05TVEFOVABIUEVfQ0JfUkVTRVQAR0VUAEhQRV9TVFJJQ1QAQ09ORkxJQ1QAVEVNUE9SQVJZX1JFRElSRUNUAFBFUk1BTkVOVF9SRURJUkVDVABDT05ORUNUAE1VTFRJX1NUQVRVUwBIUEVfSU5WQUxJRF9TVEFUVVMAVE9PX01BTllfUkVRVUVTVFMARUFSTFlfSElOVFMAVU5BVkFJTEFCTEVfRk9SX0xFR0FMX1JFQVNPTlMAT1BUSU9OUwBTV0lUQ0hJTkdfUFJPVE9DT0xTAFZBUklBTlRfQUxTT19ORUdPVElBVEVTAE1VTFRJUExFX0NIT0lDRVMASU5URVJOQUxfU0VSVkVSX0VSUk9SAFdFQl9TRVJWRVJfVU5LTk9XTl9FUlJPUgBSQUlMR1VOX0VSUk9SAElERU5USVRZX1BST1ZJREVSX0FVVEhFTlRJQ0FUSU9OX0VSUk9SAFNTTF9DRVJUSUZJQ0FURV9FUlJPUgBJTlZBTElEX1hfRk9SV0FSREVEX0ZPUgBTRVRfUEFSQU1FVEVSAEdFVF9QQVJBTUVURVIASFBFX1VTRVIAU0VFX09USEVSAEhQRV9DQl9DSFVOS19IRUFERVIATUtDQUxFTkRBUgBTRVRVUABXRUJfU0VSVkVSX0lTX0RPV04AVEVBUkRPV04ASFBFX0NMT1NFRF9DT05ORUNUSU9OAEhFVVJJU1RJQ19FWFBJUkFUSU9OAERJU0NPTk5FQ1RFRF9PUEVSQVRJT04ATk9OX0FVVEhPUklUQVRJVkVfSU5GT1JNQVRJT04ASFBFX0lOVkFMSURfVkVSU0lPTgBIUEVfQ0JfTUVTU0FHRV9CRUdJTgBTSVRFX0lTX0ZST1pFTgBIUEVfSU5WQUxJRF9IRUFERVJfVE9LRU4ASU5WQUxJRF9UT0tFTgBGT1JCSURERU4ARU5IQU5DRV9ZT1VSX0NBTE0ASFBFX0lOVkFMSURfVVJMAEJMT0NLRURfQllfUEFSRU5UQUxfQ09OVFJPTABNS0NPTABBQ0wASFBFX0lOVEVSTkFMAFJFUVVFU1RfSEVBREVSX0ZJRUxEU19UT09fTEFSR0VfVU5PRkZJQ0lBTABIUEVfT0sAVU5MSU5LAFVOTE9DSwBQUkkAUkVUUllfV0lUSABIUEVfSU5WQUxJRF9DT05URU5UX0xFTkdUSABIUEVfVU5FWFBFQ1RFRF9DT05URU5UX0xFTkdUSABGTFVTSABQUk9QUEFUQ0gATS1TRUFSQ0gAVVJJX1RPT19MT05HAFBST0NFU1NJTkcATUlTQ0VMTEFORU9VU19QRVJTSVNURU5UX1dBUk5JTkcATUlTQ0VMTEFORU9VU19XQVJOSU5HAEhQRV9JTlZBTElEX1RSQU5TRkVSX0VOQ09ESU5HAEV4cGVjdGVkIENSTEYASFBFX0lOVkFMSURfQ0hVTktfU0laRQBNT1ZFAENPTlRJTlVFAEhQRV9DQl9TVEFUVVNfQ09NUExFVEUASFBFX0NCX0hFQURFUlNfQ09NUExFVEUASFBFX0NCX1ZFUlNJT05fQ09NUExFVEUASFBFX0NCX1VSTF9DT01QTEVURQBIUEVfQ0JfQ0hVTktfQ09NUExFVEUASFBFX0NCX0hFQURFUl9WQUxVRV9DT01QTEVURQBIUEVfQ0JfQ0hVTktfRVhURU5TSU9OX1ZBTFVFX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19FWFRFTlNJT05fTkFNRV9DT01QTEVURQBIUEVfQ0JfTUVTU0FHRV9DT01QTEVURQBIUEVfQ0JfTUVUSE9EX0NPTVBMRVRFAEhQRV9DQl9IRUFERVJfRklFTERfQ09NUExFVEUAREVMRVRFAEhQRV9JTlZBTElEX0VPRl9TVEFURQBJTlZBTElEX1NTTF9DRVJUSUZJQ0FURQBQQVVTRQBOT19SRVNQT05TRQBVTlNVUFBPUlRFRF9NRURJQV9UWVBFAEdPTkUATk9UX0FDQ0VQVEFCTEUAU0VSVklDRV9VTkFWQUlMQUJMRQBSQU5HRV9OT1RfU0FUSVNGSUFCTEUAT1JJR0lOX0lTX1VOUkVBQ0hBQkxFAFJFU1BPTlNFX0lTX1NUQUxFAFBVUkdFAE1FUkdFAFJFUVVFU1RfSEVBREVSX0ZJRUxEU19UT09fTEFSR0UAUkVRVUVTVF9IRUFERVJfVE9PX0xBUkdFAFBBWUxPQURfVE9PX0xBUkdFAElOU1VGRklDSUVOVF9TVE9SQUdFAEhQRV9QQVVTRURfVVBHUkFERQBIUEVfUEFVU0VEX0gyX1VQR1JBREUAU09VUkNFAEFOTk9VTkNFAFRSQUNFAEhQRV9VTkVYUEVDVEVEX1NQQUNFAERFU0NSSUJFAFVOU1VCU0NSSUJFAFJFQ09SRABIUEVfSU5WQUxJRF9NRVRIT0QATk9UX0ZPVU5EAFBST1BGSU5EAFVOQklORABSRUJJTkQAVU5BVVRIT1JJWkVEAE1FVEhPRF9OT1RfQUxMT1dFRABIVFRQX1ZFUlNJT05fTk9UX1NVUFBPUlRFRABBTFJFQURZX1JFUE9SVEVEAEFDQ0VQVEVEAE5PVF9JTVBMRU1FTlRFRABMT09QX0RFVEVDVEVEAEhQRV9DUl9FWFBFQ1RFRABIUEVfTEZfRVhQRUNURUQAQ1JFQVRFRABJTV9VU0VEAEhQRV9QQVVTRUQAVElNRU9VVF9PQ0NVUkVEAFBBWU1FTlRfUkVRVUlSRUQAUFJFQ09ORElUSU9OX1JFUVVJUkVEAFBST1hZX0FVVEhFTlRJQ0FUSU9OX1JFUVVJUkVEAE5FVFdPUktfQVVUSEVOVElDQVRJT05fUkVRVUlSRUQATEVOR1RIX1JFUVVJUkVEAFNTTF9DRVJUSUZJQ0FURV9SRVFVSVJFRABVUEdSQURFX1JFUVVJUkVEAFBBR0VfRVhQSVJFRABQUkVDT05ESVRJT05fRkFJTEVEAEVYUEVDVEFUSU9OX0ZBSUxFRABSRVZBTElEQVRJT05fRkFJTEVEAFNTTF9IQU5EU0hBS0VfRkFJTEVEAExPQ0tFRABUUkFOU0ZPUk1BVElPTl9BUFBMSUVEAE5PVF9NT0RJRklFRABOT1RfRVhURU5ERUQAQkFORFdJRFRIX0xJTUlUX0VYQ0VFREVEAFNJVEVfSVNfT1ZFUkxPQURFRABIRUFEAEV4cGVjdGVkIEhUVFAvAABeEwAAJhMAADAQAADwFwAAnRMAABUSAAA5FwAA8BIAAAoQAAB1EgAArRIAAIITAABPFAAAfxAAAKAVAAAjFAAAiRIAAIsUAABNFQAA1BEAAM8UAAAQGAAAyRYAANwWAADBEQAA4BcAALsUAAB0FAAAfBUAAOUUAAAIFwAAHxAAAGUVAACjFAAAKBUAAAIVAACZFQAALBAAAIsZAABPDwAA1A4AAGoQAADOEAAAAhcAAIkOAABuEwAAHBMAAGYUAABWFwAAwRMAAM0TAABsEwAAaBcAAGYXAABfFwAAIhMAAM4PAABpDgAA2A4AAGMWAADLEwAAqg4AACgXAAAmFwAAxRMAAF0WAADoEQAAZxMAAGUTAADyFgAAcxMAAB0XAAD5FgAA8xEAAM8OAADOFQAADBIAALMRAAClEQAAYRAAADIXAAC7EwAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAgEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAgMCAgICAgAAAgIAAgIAAgICAgICAgICAgAEAAAAAAACAgICAgICAgICAgICAgICAgICAgICAgICAgAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAgICAAIAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAIAAgICAgIAAAICAAICAAICAgICAgICAgIAAwAEAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgIAAAACAgICAgICAgICAgICAgICAgICAgICAgICAgICAgACAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABsb3NlZWVwLWFsaXZlAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQEBAQEBAQEBAgEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQFjaHVua2VkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQABAQEBAQAAAQEAAQEAAQEBAQEBAQEBAQAAAAAAAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGVjdGlvbmVudC1sZW5ndGhvbnJveHktY29ubmVjdGlvbgAAAAAAAAAAAAAAAAAAAHJhbnNmZXItZW5jb2RpbmdwZ3JhZGUNCg0KDQpTTQ0KDQpUVFAvQ0UvVFNQLwAAAAAAAAAAAAAAAAECAAEDAAAAAAAAAAAAAAAAAAAAAAAABAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAAAAAAAAAAABAgABAwAAAAAAAAAAAAAAAAAAAAAAAAQBAQUBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAAAAAAAAAQAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAAAAAAAAAABAAACAAAAAAAAAAAAAAAAAAAAAAAAAwQAAAQEBAQEBAQEBAQEBQQEBAQEBAQEBAQEBAAEAAYHBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQABAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAAAAAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAgAAAAACAAAAAAAAAAAAAAAAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwAAAAAAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE5PVU5DRUVDS09VVE5FQ1RFVEVDUklCRUxVU0hFVEVBRFNFQVJDSFJHRUNUSVZJVFlMRU5EQVJWRU9USUZZUFRJT05TQ0hTRUFZU1RBVENIR0VPUkRJUkVDVE9SVFJDSFBBUkFNRVRFUlVSQ0VCU0NSSUJFQVJET1dOQUNFSU5ETktDS1VCU0NSSUJFSFRUUC9BRFRQLw=='
+
+
+/***/ }),
+
+/***/ 41891:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.enumToMap = void 0;
+function enumToMap(obj) {
+ const res = {};
+ Object.keys(obj).forEach((key) => {
+ const value = obj[key];
+ if (typeof value === 'number') {
+ res[key] = value;
+ }
+ });
+ return res;
+}
+exports.enumToMap = enumToMap;
+//# sourceMappingURL=utils.js.map
+
+/***/ }),
+
+/***/ 66771:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+"use strict";
+
+
+const { kClients } = __nccwpck_require__(72785)
+const Agent = __nccwpck_require__(7890)
+const {
+ kAgent,
+ kMockAgentSet,
+ kMockAgentGet,
+ kDispatches,
+ kIsMockActive,
+ kNetConnect,
+ kGetNetConnect,
+ kOptions,
+ kFactory
+} = __nccwpck_require__(24347)
+const MockClient = __nccwpck_require__(58687)
+const MockPool = __nccwpck_require__(26193)
+const { matchValue, buildMockOptions } = __nccwpck_require__(79323)
+const { InvalidArgumentError, UndiciError } = __nccwpck_require__(48045)
+const Dispatcher = __nccwpck_require__(60412)
+const Pluralizer = __nccwpck_require__(78891)
+const PendingInterceptorsFormatter = __nccwpck_require__(86823)
+
+class FakeWeakRef {
+ constructor (value) {
+ this.value = value
+ }
+
+ deref () {
+ return this.value
+ }
+}
+
+class MockAgent extends Dispatcher {
+ constructor (opts) {
+ super(opts)
+
+ this[kNetConnect] = true
+ this[kIsMockActive] = true
+
+ // Instantiate Agent and encapsulate
+ if ((opts && opts.agent && typeof opts.agent.dispatch !== 'function')) {
+ throw new InvalidArgumentError('Argument opts.agent must implement Agent')
+ }
+ const agent = opts && opts.agent ? opts.agent : new Agent(opts)
+ this[kAgent] = agent
+
+ this[kClients] = agent[kClients]
+ this[kOptions] = buildMockOptions(opts)
+ }
+
+ get (origin) {
+ let dispatcher = this[kMockAgentGet](origin)
+
+ if (!dispatcher) {
+ dispatcher = this[kFactory](origin)
+ this[kMockAgentSet](origin, dispatcher)
+ }
+ return dispatcher
+ }
+
+ dispatch (opts, handler) {
+ // Call MockAgent.get to perform additional setup before dispatching as normal
+ this.get(opts.origin)
+ return this[kAgent].dispatch(opts, handler)
+ }
+
+ async close () {
+ await this[kAgent].close()
+ this[kClients].clear()
+ }
+
+ deactivate () {
+ this[kIsMockActive] = false
+ }
+
+ activate () {
+ this[kIsMockActive] = true
+ }
+
+ enableNetConnect (matcher) {
+ if (typeof matcher === 'string' || typeof matcher === 'function' || matcher instanceof RegExp) {
+ if (Array.isArray(this[kNetConnect])) {
+ this[kNetConnect].push(matcher)
+ } else {
+ this[kNetConnect] = [matcher]
+ }
+ } else if (typeof matcher === 'undefined') {
+ this[kNetConnect] = true
+ } else {
+ throw new InvalidArgumentError('Unsupported matcher. Must be one of String|Function|RegExp.')
+ }
+ }
+
+ disableNetConnect () {
+ this[kNetConnect] = false
+ }
+
+ // This is required to bypass issues caused by using global symbols - see:
+ // https://github.com/nodejs/undici/issues/1447
+ get isMockActive () {
+ return this[kIsMockActive]
+ }
+
+ [kMockAgentSet] (origin, dispatcher) {
+ this[kClients].set(origin, new FakeWeakRef(dispatcher))
+ }
+
+ [kFactory] (origin) {
+ const mockOptions = Object.assign({ agent: this }, this[kOptions])
+ return this[kOptions] && this[kOptions].connections === 1
+ ? new MockClient(origin, mockOptions)
+ : new MockPool(origin, mockOptions)
+ }
+
+ [kMockAgentGet] (origin) {
+ // First check if we can immediately find it
+ const ref = this[kClients].get(origin)
+ if (ref) {
+ return ref.deref()
+ }
+
+ // If the origin is not a string create a dummy parent pool and return to user
+ if (typeof origin !== 'string') {
+ const dispatcher = this[kFactory]('http://localhost:9999')
+ this[kMockAgentSet](origin, dispatcher)
+ return dispatcher
+ }
+
+ // If we match, create a pool and assign the same dispatches
+ for (const [keyMatcher, nonExplicitRef] of Array.from(this[kClients])) {
+ const nonExplicitDispatcher = nonExplicitRef.deref()
+ if (nonExplicitDispatcher && typeof keyMatcher !== 'string' && matchValue(keyMatcher, origin)) {
+ const dispatcher = this[kFactory](origin)
+ this[kMockAgentSet](origin, dispatcher)
+ dispatcher[kDispatches] = nonExplicitDispatcher[kDispatches]
+ return dispatcher
+ }
+ }
+ }
+
+ [kGetNetConnect] () {
+ return this[kNetConnect]
+ }
+
+ pendingInterceptors () {
+ const mockAgentClients = this[kClients]
+
+ return Array.from(mockAgentClients.entries())
+ .flatMap(([origin, scope]) => scope.deref()[kDispatches].map(dispatch => ({ ...dispatch, origin })))
+ .filter(({ pending }) => pending)
+ }
+
+ assertNoPendingInterceptors ({ pendingInterceptorsFormatter = new PendingInterceptorsFormatter() } = {}) {
+ const pending = this.pendingInterceptors()
+
+ if (pending.length === 0) {
+ return
+ }
+
+ const pluralizer = new Pluralizer('interceptor', 'interceptors').pluralize(pending.length)
+
+ throw new UndiciError(`
+${pluralizer.count} ${pluralizer.noun} ${pluralizer.is} pending:
+
+${pendingInterceptorsFormatter.format(pending)}
+`.trim())
+ }
+}
+
+module.exports = MockAgent
+
+
+/***/ }),
+
+/***/ 58687:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+"use strict";
+
+
+const { promisify } = __nccwpck_require__(73837)
+const Client = __nccwpck_require__(33598)
+const { buildMockDispatch } = __nccwpck_require__(79323)
+const {
+ kDispatches,
+ kMockAgent,
+ kClose,
+ kOriginalClose,
+ kOrigin,
+ kOriginalDispatch,
+ kConnected
+} = __nccwpck_require__(24347)
+const { MockInterceptor } = __nccwpck_require__(90410)
+const Symbols = __nccwpck_require__(72785)
+const { InvalidArgumentError } = __nccwpck_require__(48045)
+
+/**
+ * MockClient provides an API that extends the Client to influence the mockDispatches.
+ */
+class MockClient extends Client {
+ constructor (origin, opts) {
+ super(origin, opts)
+
+ if (!opts || !opts.agent || typeof opts.agent.dispatch !== 'function') {
+ throw new InvalidArgumentError('Argument opts.agent must implement Agent')
+ }
+
+ this[kMockAgent] = opts.agent
+ this[kOrigin] = origin
+ this[kDispatches] = []
+ this[kConnected] = 1
+ this[kOriginalDispatch] = this.dispatch
+ this[kOriginalClose] = this.close.bind(this)
+
+ this.dispatch = buildMockDispatch.call(this)
+ this.close = this[kClose]
+ }
+
+ get [Symbols.kConnected] () {
+ return this[kConnected]
+ }
+
+ /**
+ * Sets up the base interceptor for mocking replies from undici.
+ */
+ intercept (opts) {
+ return new MockInterceptor(opts, this[kDispatches])
+ }
+
+ async [kClose] () {
+ await promisify(this[kOriginalClose])()
+ this[kConnected] = 0
+ this[kMockAgent][Symbols.kClients].delete(this[kOrigin])
+ }
+}
+
+module.exports = MockClient
+
+
+/***/ }),
+
+/***/ 50888:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+"use strict";
+
+
+const { UndiciError } = __nccwpck_require__(48045)
+
+class MockNotMatchedError extends UndiciError {
+ constructor (message) {
+ super(message)
+ Error.captureStackTrace(this, MockNotMatchedError)
+ this.name = 'MockNotMatchedError'
+ this.message = message || 'The request does not match any registered mock dispatches'
+ this.code = 'UND_MOCK_ERR_MOCK_NOT_MATCHED'
+ }
+}
+
+module.exports = {
+ MockNotMatchedError
+}
+
+
+/***/ }),
+
+/***/ 90410:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+"use strict";
+
+
+const { getResponseData, buildKey, addMockDispatch } = __nccwpck_require__(79323)
+const {
+ kDispatches,
+ kDispatchKey,
+ kDefaultHeaders,
+ kDefaultTrailers,
+ kContentLength,
+ kMockDispatch
+} = __nccwpck_require__(24347)
+const { InvalidArgumentError } = __nccwpck_require__(48045)
+const { buildURL } = __nccwpck_require__(83983)
+
+/**
+ * Defines the scope API for an interceptor reply
+ */
+class MockScope {
+ constructor (mockDispatch) {
+ this[kMockDispatch] = mockDispatch
+ }
+
+ /**
+ * Delay a reply by a set amount in ms.
+ */
+ delay (waitInMs) {
+ if (typeof waitInMs !== 'number' || !Number.isInteger(waitInMs) || waitInMs <= 0) {
+ throw new InvalidArgumentError('waitInMs must be a valid integer > 0')
+ }
+
+ this[kMockDispatch].delay = waitInMs
+ return this
+ }
+
+ /**
+ * For a defined reply, never mark as consumed.
+ */
+ persist () {
+ this[kMockDispatch].persist = true
+ return this
+ }
+
+ /**
+ * Allow one to define a reply for a set amount of matching requests.
+ */
+ times (repeatTimes) {
+ if (typeof repeatTimes !== 'number' || !Number.isInteger(repeatTimes) || repeatTimes <= 0) {
+ throw new InvalidArgumentError('repeatTimes must be a valid integer > 0')
+ }
+
+ this[kMockDispatch].times = repeatTimes
+ return this
+ }
+}
+
+/**
+ * Defines an interceptor for a Mock
+ */
+class MockInterceptor {
+ constructor (opts, mockDispatches) {
+ if (typeof opts !== 'object') {
+ throw new InvalidArgumentError('opts must be an object')
+ }
+ if (typeof opts.path === 'undefined') {
+ throw new InvalidArgumentError('opts.path must be defined')
+ }
+ if (typeof opts.method === 'undefined') {
+ opts.method = 'GET'
+ }
+ // See https://github.com/nodejs/undici/issues/1245
+ // As per RFC 3986, clients are not supposed to send URI
+ // fragments to servers when they retrieve a document,
+ if (typeof opts.path === 'string') {
+ if (opts.query) {
+ opts.path = buildURL(opts.path, opts.query)
+ } else {
+ // Matches https://github.com/nodejs/undici/blob/main/lib/fetch/index.js#L1811
+ const parsedURL = new URL(opts.path, 'data://')
+ opts.path = parsedURL.pathname + parsedURL.search
+ }
+ }
+ if (typeof opts.method === 'string') {
+ opts.method = opts.method.toUpperCase()
+ }
+
+ this[kDispatchKey] = buildKey(opts)
+ this[kDispatches] = mockDispatches
+ this[kDefaultHeaders] = {}
+ this[kDefaultTrailers] = {}
+ this[kContentLength] = false
+ }
+
+ createMockScopeDispatchData (statusCode, data, responseOptions = {}) {
+ const responseData = getResponseData(data)
+ const contentLength = this[kContentLength] ? { 'content-length': responseData.length } : {}
+ const headers = { ...this[kDefaultHeaders], ...contentLength, ...responseOptions.headers }
+ const trailers = { ...this[kDefaultTrailers], ...responseOptions.trailers }
+
+ return { statusCode, data, headers, trailers }
+ }
+
+ validateReplyParameters (statusCode, data, responseOptions) {
+ if (typeof statusCode === 'undefined') {
+ throw new InvalidArgumentError('statusCode must be defined')
+ }
+ if (typeof data === 'undefined') {
+ throw new InvalidArgumentError('data must be defined')
+ }
+ if (typeof responseOptions !== 'object') {
+ throw new InvalidArgumentError('responseOptions must be an object')
+ }
+ }
+
+ /**
+ * Mock an undici request with a defined reply.
+ */
+ reply (replyData) {
+ // Values of reply aren't available right now as they
+ // can only be available when the reply callback is invoked.
+ if (typeof replyData === 'function') {
+ // We'll first wrap the provided callback in another function,
+ // this function will properly resolve the data from the callback
+ // when invoked.
+ const wrappedDefaultsCallback = (opts) => {
+ // Our reply options callback contains the parameter for statusCode, data and options.
+ const resolvedData = replyData(opts)
+
+ // Check if it is in the right format
+ if (typeof resolvedData !== 'object') {
+ throw new InvalidArgumentError('reply options callback must return an object')
+ }
+
+ const { statusCode, data = '', responseOptions = {} } = resolvedData
+ this.validateReplyParameters(statusCode, data, responseOptions)
+ // Since the values can be obtained immediately we return them
+ // from this higher order function that will be resolved later.
+ return {
+ ...this.createMockScopeDispatchData(statusCode, data, responseOptions)
+ }
+ }
+
+ // Add usual dispatch data, but this time set the data parameter to function that will eventually provide data.
+ const newMockDispatch = addMockDispatch(this[kDispatches], this[kDispatchKey], wrappedDefaultsCallback)
+ return new MockScope(newMockDispatch)
+ }
+
+ // We can have either one or three parameters, if we get here,
+ // we should have 1-3 parameters. So we spread the arguments of
+ // this function to obtain the parameters, since replyData will always
+ // just be the statusCode.
+ const [statusCode, data = '', responseOptions = {}] = [...arguments]
+ this.validateReplyParameters(statusCode, data, responseOptions)
+
+ // Send in-already provided data like usual
+ const dispatchData = this.createMockScopeDispatchData(statusCode, data, responseOptions)
+ const newMockDispatch = addMockDispatch(this[kDispatches], this[kDispatchKey], dispatchData)
+ return new MockScope(newMockDispatch)
+ }
+
+ /**
+ * Mock an undici request with a defined error.
+ */
+ replyWithError (error) {
+ if (typeof error === 'undefined') {
+ throw new InvalidArgumentError('error must be defined')
+ }
+
+ const newMockDispatch = addMockDispatch(this[kDispatches], this[kDispatchKey], { error })
+ return new MockScope(newMockDispatch)
+ }
+
+ /**
+ * Set default reply headers on the interceptor for subsequent replies
+ */
+ defaultReplyHeaders (headers) {
+ if (typeof headers === 'undefined') {
+ throw new InvalidArgumentError('headers must be defined')
+ }
+
+ this[kDefaultHeaders] = headers
+ return this
+ }
+
+ /**
+ * Set default reply trailers on the interceptor for subsequent replies
+ */
+ defaultReplyTrailers (trailers) {
+ if (typeof trailers === 'undefined') {
+ throw new InvalidArgumentError('trailers must be defined')
+ }
+
+ this[kDefaultTrailers] = trailers
+ return this
+ }
+
+ /**
+ * Set reply content length header for replies on the interceptor
+ */
+ replyContentLength () {
+ this[kContentLength] = true
+ return this
+ }
+}
+
+module.exports.MockInterceptor = MockInterceptor
+module.exports.MockScope = MockScope
+
+
+/***/ }),
+
+/***/ 26193:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+"use strict";
+
+
+const { promisify } = __nccwpck_require__(73837)
+const Pool = __nccwpck_require__(4634)
+const { buildMockDispatch } = __nccwpck_require__(79323)
+const {
+ kDispatches,
+ kMockAgent,
+ kClose,
+ kOriginalClose,
+ kOrigin,
+ kOriginalDispatch,
+ kConnected
+} = __nccwpck_require__(24347)
+const { MockInterceptor } = __nccwpck_require__(90410)
+const Symbols = __nccwpck_require__(72785)
+const { InvalidArgumentError } = __nccwpck_require__(48045)
+
+/**
+ * MockPool provides an API that extends the Pool to influence the mockDispatches.
+ */
+class MockPool extends Pool {
+ constructor (origin, opts) {
+ super(origin, opts)
+
+ if (!opts || !opts.agent || typeof opts.agent.dispatch !== 'function') {
+ throw new InvalidArgumentError('Argument opts.agent must implement Agent')
+ }
+
+ this[kMockAgent] = opts.agent
+ this[kOrigin] = origin
+ this[kDispatches] = []
+ this[kConnected] = 1
+ this[kOriginalDispatch] = this.dispatch
+ this[kOriginalClose] = this.close.bind(this)
+
+ this.dispatch = buildMockDispatch.call(this)
+ this.close = this[kClose]
+ }
+
+ get [Symbols.kConnected] () {
+ return this[kConnected]
+ }
+
+ /**
+ * Sets up the base interceptor for mocking replies from undici.
+ */
+ intercept (opts) {
+ return new MockInterceptor(opts, this[kDispatches])
+ }
+
+ async [kClose] () {
+ await promisify(this[kOriginalClose])()
+ this[kConnected] = 0
+ this[kMockAgent][Symbols.kClients].delete(this[kOrigin])
+ }
+}
+
+module.exports = MockPool
+
+
+/***/ }),
+
+/***/ 24347:
+/***/ ((module) => {
+
+"use strict";
+
+
+module.exports = {
+ kAgent: Symbol('agent'),
+ kOptions: Symbol('options'),
+ kFactory: Symbol('factory'),
+ kDispatches: Symbol('dispatches'),
+ kDispatchKey: Symbol('dispatch key'),
+ kDefaultHeaders: Symbol('default headers'),
+ kDefaultTrailers: Symbol('default trailers'),
+ kContentLength: Symbol('content length'),
+ kMockAgent: Symbol('mock agent'),
+ kMockAgentSet: Symbol('mock agent set'),
+ kMockAgentGet: Symbol('mock agent get'),
+ kMockDispatch: Symbol('mock dispatch'),
+ kClose: Symbol('close'),
+ kOriginalClose: Symbol('original agent close'),
+ kOrigin: Symbol('origin'),
+ kIsMockActive: Symbol('is mock active'),
+ kNetConnect: Symbol('net connect'),
+ kGetNetConnect: Symbol('get net connect'),
+ kConnected: Symbol('connected')
+}
+
+
+/***/ }),
+
+/***/ 79323:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+"use strict";
+
+
+const { MockNotMatchedError } = __nccwpck_require__(50888)
+const {
+ kDispatches,
+ kMockAgent,
+ kOriginalDispatch,
+ kOrigin,
+ kGetNetConnect
+} = __nccwpck_require__(24347)
+const { buildURL, nop } = __nccwpck_require__(83983)
+const { STATUS_CODES } = __nccwpck_require__(13685)
+const {
+ types: {
+ isPromise
+ }
+} = __nccwpck_require__(73837)
+
+function matchValue (match, value) {
+ if (typeof match === 'string') {
+ return match === value
+ }
+ if (match instanceof RegExp) {
+ return match.test(value)
+ }
+ if (typeof match === 'function') {
+ return match(value) === true
+ }
+ return false
+}
+
+function lowerCaseEntries (headers) {
+ return Object.fromEntries(
+ Object.entries(headers).map(([headerName, headerValue]) => {
+ return [headerName.toLocaleLowerCase(), headerValue]
+ })
+ )
+}
+
+/**
+ * @param {import('../../index').Headers|string[]|Record} headers
+ * @param {string} key
+ */
+function getHeaderByName (headers, key) {
+ if (Array.isArray(headers)) {
+ for (let i = 0; i < headers.length; i += 2) {
+ if (headers[i].toLocaleLowerCase() === key.toLocaleLowerCase()) {
+ return headers[i + 1]
+ }
+ }
+
+ return undefined
+ } else if (typeof headers.get === 'function') {
+ return headers.get(key)
+ } else {
+ return lowerCaseEntries(headers)[key.toLocaleLowerCase()]
+ }
+}
+
+/** @param {string[]} headers */
+function buildHeadersFromArray (headers) { // fetch HeadersList
+ const clone = headers.slice()
+ const entries = []
+ for (let index = 0; index < clone.length; index += 2) {
+ entries.push([clone[index], clone[index + 1]])
+ }
+ return Object.fromEntries(entries)
+}
+
+function matchHeaders (mockDispatch, headers) {
+ if (typeof mockDispatch.headers === 'function') {
+ if (Array.isArray(headers)) { // fetch HeadersList
+ headers = buildHeadersFromArray(headers)
+ }
+ return mockDispatch.headers(headers ? lowerCaseEntries(headers) : {})
+ }
+ if (typeof mockDispatch.headers === 'undefined') {
+ return true
+ }
+ if (typeof headers !== 'object' || typeof mockDispatch.headers !== 'object') {
+ return false
+ }
+
+ for (const [matchHeaderName, matchHeaderValue] of Object.entries(mockDispatch.headers)) {
+ const headerValue = getHeaderByName(headers, matchHeaderName)
+
+ if (!matchValue(matchHeaderValue, headerValue)) {
+ return false
+ }
+ }
+ return true
+}
+
+function safeUrl (path) {
+ if (typeof path !== 'string') {
+ return path
+ }
+
+ const pathSegments = path.split('?')
+
+ if (pathSegments.length !== 2) {
+ return path
+ }
+
+ const qp = new URLSearchParams(pathSegments.pop())
+ qp.sort()
+ return [...pathSegments, qp.toString()].join('?')
+}
+
+function matchKey (mockDispatch, { path, method, body, headers }) {
+ const pathMatch = matchValue(mockDispatch.path, path)
+ const methodMatch = matchValue(mockDispatch.method, method)
+ const bodyMatch = typeof mockDispatch.body !== 'undefined' ? matchValue(mockDispatch.body, body) : true
+ const headersMatch = matchHeaders(mockDispatch, headers)
+ return pathMatch && methodMatch && bodyMatch && headersMatch
+}
+
+function getResponseData (data) {
+ if (Buffer.isBuffer(data)) {
+ return data
+ } else if (typeof data === 'object') {
+ return JSON.stringify(data)
+ } else {
+ return data.toString()
+ }
+}
+
+function getMockDispatch (mockDispatches, key) {
+ const basePath = key.query ? buildURL(key.path, key.query) : key.path
+ const resolvedPath = typeof basePath === 'string' ? safeUrl(basePath) : basePath
+
+ // Match path
+ let matchedMockDispatches = mockDispatches.filter(({ consumed }) => !consumed).filter(({ path }) => matchValue(safeUrl(path), resolvedPath))
+ if (matchedMockDispatches.length === 0) {
+ throw new MockNotMatchedError(`Mock dispatch not matched for path '${resolvedPath}'`)
+ }
+
+ // Match method
+ matchedMockDispatches = matchedMockDispatches.filter(({ method }) => matchValue(method, key.method))
+ if (matchedMockDispatches.length === 0) {
+ throw new MockNotMatchedError(`Mock dispatch not matched for method '${key.method}'`)
+ }
+
+ // Match body
+ matchedMockDispatches = matchedMockDispatches.filter(({ body }) => typeof body !== 'undefined' ? matchValue(body, key.body) : true)
+ if (matchedMockDispatches.length === 0) {
+ throw new MockNotMatchedError(`Mock dispatch not matched for body '${key.body}'`)
+ }
+
+ // Match headers
+ matchedMockDispatches = matchedMockDispatches.filter((mockDispatch) => matchHeaders(mockDispatch, key.headers))
+ if (matchedMockDispatches.length === 0) {
+ throw new MockNotMatchedError(`Mock dispatch not matched for headers '${typeof key.headers === 'object' ? JSON.stringify(key.headers) : key.headers}'`)
+ }
+
+ return matchedMockDispatches[0]
+}
+
+function addMockDispatch (mockDispatches, key, data) {
+ const baseData = { timesInvoked: 0, times: 1, persist: false, consumed: false }
+ const replyData = typeof data === 'function' ? { callback: data } : { ...data }
+ const newMockDispatch = { ...baseData, ...key, pending: true, data: { error: null, ...replyData } }
+ mockDispatches.push(newMockDispatch)
+ return newMockDispatch
+}
+
+function deleteMockDispatch (mockDispatches, key) {
+ const index = mockDispatches.findIndex(dispatch => {
+ if (!dispatch.consumed) {
+ return false
+ }
+ return matchKey(dispatch, key)
+ })
+ if (index !== -1) {
+ mockDispatches.splice(index, 1)
+ }
+}
+
+function buildKey (opts) {
+ const { path, method, body, headers, query } = opts
+ return {
+ path,
+ method,
+ body,
+ headers,
+ query
+ }
+}
+
+function generateKeyValues (data) {
+ return Object.entries(data).reduce((keyValuePairs, [key, value]) => [
+ ...keyValuePairs,
+ Buffer.from(`${key}`),
+ Array.isArray(value) ? value.map(x => Buffer.from(`${x}`)) : Buffer.from(`${value}`)
+ ], [])
+}
+
+/**
+ * @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Status
+ * @param {number} statusCode
+ */
+function getStatusText (statusCode) {
+ return STATUS_CODES[statusCode] || 'unknown'
+}
+
+async function getResponse (body) {
+ const buffers = []
+ for await (const data of body) {
+ buffers.push(data)
+ }
+ return Buffer.concat(buffers).toString('utf8')
+}
+
+/**
+ * Mock dispatch function used to simulate undici dispatches
+ */
+function mockDispatch (opts, handler) {
+ // Get mock dispatch from built key
+ const key = buildKey(opts)
+ const mockDispatch = getMockDispatch(this[kDispatches], key)
+
+ mockDispatch.timesInvoked++
+
+ // Here's where we resolve a callback if a callback is present for the dispatch data.
+ if (mockDispatch.data.callback) {
+ mockDispatch.data = { ...mockDispatch.data, ...mockDispatch.data.callback(opts) }
+ }
+
+ // Parse mockDispatch data
+ const { data: { statusCode, data, headers, trailers, error }, delay, persist } = mockDispatch
+ const { timesInvoked, times } = mockDispatch
+
+ // If it's used up and not persistent, mark as consumed
+ mockDispatch.consumed = !persist && timesInvoked >= times
+ mockDispatch.pending = timesInvoked < times
+
+ // If specified, trigger dispatch error
+ if (error !== null) {
+ deleteMockDispatch(this[kDispatches], key)
+ handler.onError(error)
+ return true
+ }
+
+ // Handle the request with a delay if necessary
+ if (typeof delay === 'number' && delay > 0) {
+ setTimeout(() => {
+ handleReply(this[kDispatches])
+ }, delay)
+ } else {
+ handleReply(this[kDispatches])
+ }
+
+ function handleReply (mockDispatches, _data = data) {
+ // fetch's HeadersList is a 1D string array
+ const optsHeaders = Array.isArray(opts.headers)
+ ? buildHeadersFromArray(opts.headers)
+ : opts.headers
+ const body = typeof _data === 'function'
+ ? _data({ ...opts, headers: optsHeaders })
+ : _data
+
+ // util.types.isPromise is likely needed for jest.
+ if (isPromise(body)) {
+ // If handleReply is asynchronous, throwing an error
+ // in the callback will reject the promise, rather than
+ // synchronously throw the error, which breaks some tests.
+ // Rather, we wait for the callback to resolve if it is a
+ // promise, and then re-run handleReply with the new body.
+ body.then((newData) => handleReply(mockDispatches, newData))
+ return
+ }
+
+ const responseData = getResponseData(body)
+ const responseHeaders = generateKeyValues(headers)
+ const responseTrailers = generateKeyValues(trailers)
+
+ handler.abort = nop
+ handler.onHeaders(statusCode, responseHeaders, resume, getStatusText(statusCode))
+ handler.onData(Buffer.from(responseData))
+ handler.onComplete(responseTrailers)
+ deleteMockDispatch(mockDispatches, key)
+ }
+
+ function resume () {}
+
+ return true
+}
+
+function buildMockDispatch () {
+ const agent = this[kMockAgent]
+ const origin = this[kOrigin]
+ const originalDispatch = this[kOriginalDispatch]
+
+ return function dispatch (opts, handler) {
+ if (agent.isMockActive) {
+ try {
+ mockDispatch.call(this, opts, handler)
+ } catch (error) {
+ if (error instanceof MockNotMatchedError) {
+ const netConnect = agent[kGetNetConnect]()
+ if (netConnect === false) {
+ throw new MockNotMatchedError(`${error.message}: subsequent request to origin ${origin} was not allowed (net.connect disabled)`)
+ }
+ if (checkNetConnect(netConnect, origin)) {
+ originalDispatch.call(this, opts, handler)
+ } else {
+ throw new MockNotMatchedError(`${error.message}: subsequent request to origin ${origin} was not allowed (net.connect is not enabled for this origin)`)
+ }
+ } else {
+ throw error
+ }
+ }
+ } else {
+ originalDispatch.call(this, opts, handler)
+ }
+ }
+}
+
+function checkNetConnect (netConnect, origin) {
+ const url = new URL(origin)
+ if (netConnect === true) {
+ return true
+ } else if (Array.isArray(netConnect) && netConnect.some((matcher) => matchValue(matcher, url.host))) {
+ return true
+ }
+ return false
+}
+
+function buildMockOptions (opts) {
+ if (opts) {
+ const { agent, ...mockOptions } = opts
+ return mockOptions
+ }
+}
+
+module.exports = {
+ getResponseData,
+ getMockDispatch,
+ addMockDispatch,
+ deleteMockDispatch,
+ buildKey,
+ generateKeyValues,
+ matchValue,
+ getResponse,
+ getStatusText,
+ mockDispatch,
+ buildMockDispatch,
+ checkNetConnect,
+ buildMockOptions,
+ getHeaderByName
+}
+
+
+/***/ }),
+
+/***/ 86823:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+"use strict";
+
+
+const { Transform } = __nccwpck_require__(12781)
+const { Console } = __nccwpck_require__(96206)
+
+/**
+ * Gets the output of `console.table(…)` as a string.
+ */
+module.exports = class PendingInterceptorsFormatter {
+ constructor ({ disableColors } = {}) {
+ this.transform = new Transform({
+ transform (chunk, _enc, cb) {
+ cb(null, chunk)
+ }
+ })
+
+ this.logger = new Console({
+ stdout: this.transform,
+ inspectOptions: {
+ colors: !disableColors && !process.env.CI
+ }
+ })
+ }
+
+ format (pendingInterceptors) {
+ const withPrettyHeaders = pendingInterceptors.map(
+ ({ method, path, data: { statusCode }, persist, times, timesInvoked, origin }) => ({
+ Method: method,
+ Origin: origin,
+ Path: path,
+ 'Status code': statusCode,
+ Persistent: persist ? '✅' : '❌',
+ Invocations: timesInvoked,
+ Remaining: persist ? Infinity : times - timesInvoked
+ }))
+
+ this.logger.table(withPrettyHeaders)
+ return this.transform.read().toString()
+ }
+}
+
+
+/***/ }),
+
+/***/ 78891:
+/***/ ((module) => {
+
+"use strict";
+
+
+const singulars = {
+ pronoun: 'it',
+ is: 'is',
+ was: 'was',
+ this: 'this'
+}
+
+const plurals = {
+ pronoun: 'they',
+ is: 'are',
+ was: 'were',
+ this: 'these'
+}
+
+module.exports = class Pluralizer {
+ constructor (singular, plural) {
+ this.singular = singular
+ this.plural = plural
+ }
+
+ pluralize (count) {
+ const one = count === 1
+ const keys = one ? singulars : plurals
+ const noun = one ? this.singular : this.plural
+ return { ...keys, count, noun }
+ }
+}
+
+
+/***/ }),
+
+/***/ 68266:
+/***/ ((module) => {
+
+"use strict";
+/* eslint-disable */
+
+
+
+// Extracted from node/lib/internal/fixed_queue.js
+
+// Currently optimal queue size, tested on V8 6.0 - 6.6. Must be power of two.
+const kSize = 2048;
+const kMask = kSize - 1;
+
+// The FixedQueue is implemented as a singly-linked list of fixed-size
+// circular buffers. It looks something like this:
+//
+// head tail
+// | |
+// v v
+// +-----------+ <-----\ +-----------+ <------\ +-----------+
+// | [null] | \----- | next | \------- | next |
+// +-----------+ +-----------+ +-----------+
+// | item | <-- bottom | item | <-- bottom | [empty] |
+// | item | | item | | [empty] |
+// | item | | item | | [empty] |
+// | item | | item | | [empty] |
+// | item | | item | bottom --> | item |
+// | item | | item | | item |
+// | ... | | ... | | ... |
+// | item | | item | | item |
+// | item | | item | | item |
+// | [empty] | <-- top | item | | item |
+// | [empty] | | item | | item |
+// | [empty] | | [empty] | <-- top top --> | [empty] |
+// +-----------+ +-----------+ +-----------+
+//
+// Or, if there is only one circular buffer, it looks something
+// like either of these:
+//
+// head tail head tail
+// | | | |
+// v v v v
+// +-----------+ +-----------+
+// | [null] | | [null] |
+// +-----------+ +-----------+
+// | [empty] | | item |
+// | [empty] | | item |
+// | item | <-- bottom top --> | [empty] |
+// | item | | [empty] |
+// | [empty] | <-- top bottom --> | item |
+// | [empty] | | item |
+// +-----------+ +-----------+
+//
+// Adding a value means moving `top` forward by one, removing means
+// moving `bottom` forward by one. After reaching the end, the queue
+// wraps around.
+//
+// When `top === bottom` the current queue is empty and when
+// `top + 1 === bottom` it's full. This wastes a single space of storage
+// but allows much quicker checks.
+
+class FixedCircularBuffer {
+ constructor() {
+ this.bottom = 0;
+ this.top = 0;
+ this.list = new Array(kSize);
+ this.next = null;
+ }
+
+ isEmpty() {
+ return this.top === this.bottom;
+ }
+
+ isFull() {
+ return ((this.top + 1) & kMask) === this.bottom;
+ }
+
+ push(data) {
+ this.list[this.top] = data;
+ this.top = (this.top + 1) & kMask;
+ }
+
+ shift() {
+ const nextItem = this.list[this.bottom];
+ if (nextItem === undefined)
+ return null;
+ this.list[this.bottom] = undefined;
+ this.bottom = (this.bottom + 1) & kMask;
+ return nextItem;
+ }
+}
+
+module.exports = class FixedQueue {
+ constructor() {
+ this.head = this.tail = new FixedCircularBuffer();
+ }
+
+ isEmpty() {
+ return this.head.isEmpty();
+ }
+
+ push(data) {
+ if (this.head.isFull()) {
+ // Head is full: Creates a new queue, sets the old queue's `.next` to it,
+ // and sets it as the new main queue.
+ this.head = this.head.next = new FixedCircularBuffer();
+ }
+ this.head.push(data);
+ }
+
+ shift() {
+ const tail = this.tail;
+ const next = tail.shift();
+ if (tail.isEmpty() && tail.next !== null) {
+ // If there is another queue, it forms the new tail.
+ this.tail = tail.next;
+ }
+ return next;
+ }
+};
+
+
+/***/ }),
+
+/***/ 73198:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+"use strict";
+
+
+const DispatcherBase = __nccwpck_require__(74839)
+const FixedQueue = __nccwpck_require__(68266)
+const { kConnected, kSize, kRunning, kPending, kQueued, kBusy, kFree, kUrl, kClose, kDestroy, kDispatch } = __nccwpck_require__(72785)
+const PoolStats = __nccwpck_require__(39689)
+
+const kClients = Symbol('clients')
+const kNeedDrain = Symbol('needDrain')
+const kQueue = Symbol('queue')
+const kClosedResolve = Symbol('closed resolve')
+const kOnDrain = Symbol('onDrain')
+const kOnConnect = Symbol('onConnect')
+const kOnDisconnect = Symbol('onDisconnect')
+const kOnConnectionError = Symbol('onConnectionError')
+const kGetDispatcher = Symbol('get dispatcher')
+const kAddClient = Symbol('add client')
+const kRemoveClient = Symbol('remove client')
+const kStats = Symbol('stats')
+
+class PoolBase extends DispatcherBase {
+ constructor () {
+ super()
+
+ this[kQueue] = new FixedQueue()
+ this[kClients] = []
+ this[kQueued] = 0
+
+ const pool = this
+
+ this[kOnDrain] = function onDrain (origin, targets) {
+ const queue = pool[kQueue]
+
+ let needDrain = false
+
+ while (!needDrain) {
+ const item = queue.shift()
+ if (!item) {
+ break
+ }
+ pool[kQueued]--
+ needDrain = !this.dispatch(item.opts, item.handler)
+ }
+
+ this[kNeedDrain] = needDrain
+
+ if (!this[kNeedDrain] && pool[kNeedDrain]) {
+ pool[kNeedDrain] = false
+ pool.emit('drain', origin, [pool, ...targets])
+ }
+
+ if (pool[kClosedResolve] && queue.isEmpty()) {
+ Promise
+ .all(pool[kClients].map(c => c.close()))
+ .then(pool[kClosedResolve])
+ }
+ }
+
+ this[kOnConnect] = (origin, targets) => {
+ pool.emit('connect', origin, [pool, ...targets])
+ }
+
+ this[kOnDisconnect] = (origin, targets, err) => {
+ pool.emit('disconnect', origin, [pool, ...targets], err)
+ }
+
+ this[kOnConnectionError] = (origin, targets, err) => {
+ pool.emit('connectionError', origin, [pool, ...targets], err)
+ }
+
+ this[kStats] = new PoolStats(this)
+ }
+
+ get [kBusy] () {
+ return this[kNeedDrain]
+ }
+
+ get [kConnected] () {
+ return this[kClients].filter(client => client[kConnected]).length
+ }
+
+ get [kFree] () {
+ return this[kClients].filter(client => client[kConnected] && !client[kNeedDrain]).length
+ }
+
+ get [kPending] () {
+ let ret = this[kQueued]
+ for (const { [kPending]: pending } of this[kClients]) {
+ ret += pending
+ }
+ return ret
+ }
+
+ get [kRunning] () {
+ let ret = 0
+ for (const { [kRunning]: running } of this[kClients]) {
+ ret += running
+ }
+ return ret
+ }
+
+ get [kSize] () {
+ let ret = this[kQueued]
+ for (const { [kSize]: size } of this[kClients]) {
+ ret += size
+ }
+ return ret
+ }
+
+ get stats () {
+ return this[kStats]
+ }
+
+ async [kClose] () {
+ if (this[kQueue].isEmpty()) {
+ return Promise.all(this[kClients].map(c => c.close()))
+ } else {
+ return new Promise((resolve) => {
+ this[kClosedResolve] = resolve
+ })
+ }
+ }
+
+ async [kDestroy] (err) {
+ while (true) {
+ const item = this[kQueue].shift()
+ if (!item) {
+ break
+ }
+ item.handler.onError(err)
+ }
+
+ return Promise.all(this[kClients].map(c => c.destroy(err)))
+ }
+
+ [kDispatch] (opts, handler) {
+ const dispatcher = this[kGetDispatcher]()
+
+ if (!dispatcher) {
+ this[kNeedDrain] = true
+ this[kQueue].push({ opts, handler })
+ this[kQueued]++
+ } else if (!dispatcher.dispatch(opts, handler)) {
+ dispatcher[kNeedDrain] = true
+ this[kNeedDrain] = !this[kGetDispatcher]()
+ }
+
+ return !this[kNeedDrain]
+ }
+
+ [kAddClient] (client) {
+ client
+ .on('drain', this[kOnDrain])
+ .on('connect', this[kOnConnect])
+ .on('disconnect', this[kOnDisconnect])
+ .on('connectionError', this[kOnConnectionError])
+
+ this[kClients].push(client)
+
+ if (this[kNeedDrain]) {
+ process.nextTick(() => {
+ if (this[kNeedDrain]) {
+ this[kOnDrain](client[kUrl], [this, client])
+ }
+ })
+ }
+
+ return this
+ }
+
+ [kRemoveClient] (client) {
+ client.close(() => {
+ const idx = this[kClients].indexOf(client)
+ if (idx !== -1) {
+ this[kClients].splice(idx, 1)
+ }
+ })
+
+ this[kNeedDrain] = this[kClients].some(dispatcher => (
+ !dispatcher[kNeedDrain] &&
+ dispatcher.closed !== true &&
+ dispatcher.destroyed !== true
+ ))
+ }
+}
+
+module.exports = {
+ PoolBase,
+ kClients,
+ kNeedDrain,
+ kAddClient,
+ kRemoveClient,
+ kGetDispatcher
+}
+
+
+/***/ }),
+
+/***/ 39689:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+const { kFree, kConnected, kPending, kQueued, kRunning, kSize } = __nccwpck_require__(72785)
+const kPool = Symbol('pool')
+
+class PoolStats {
+ constructor (pool) {
+ this[kPool] = pool
+ }
+
+ get connected () {
+ return this[kPool][kConnected]
+ }
+
+ get free () {
+ return this[kPool][kFree]
+ }
+
+ get pending () {
+ return this[kPool][kPending]
+ }
+
+ get queued () {
+ return this[kPool][kQueued]
+ }
+
+ get running () {
+ return this[kPool][kRunning]
+ }
+
+ get size () {
+ return this[kPool][kSize]
+ }
+}
+
+module.exports = PoolStats
+
+
+/***/ }),
+
+/***/ 4634:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+"use strict";
+
+
+const {
+ PoolBase,
+ kClients,
+ kNeedDrain,
+ kAddClient,
+ kGetDispatcher
+} = __nccwpck_require__(73198)
+const Client = __nccwpck_require__(33598)
+const {
+ InvalidArgumentError
+} = __nccwpck_require__(48045)
+const util = __nccwpck_require__(83983)
+const { kUrl, kInterceptors } = __nccwpck_require__(72785)
+const buildConnector = __nccwpck_require__(82067)
+
+const kOptions = Symbol('options')
+const kConnections = Symbol('connections')
+const kFactory = Symbol('factory')
+
+function defaultFactory (origin, opts) {
+ return new Client(origin, opts)
+}
+
+class Pool extends PoolBase {
+ constructor (origin, {
+ connections,
+ factory = defaultFactory,
+ connect,
+ connectTimeout,
+ tls,
+ maxCachedSessions,
+ socketPath,
+ autoSelectFamily,
+ autoSelectFamilyAttemptTimeout,
+ allowH2,
+ ...options
+ } = {}) {
+ super()
+
+ if (connections != null && (!Number.isFinite(connections) || connections < 0)) {
+ throw new InvalidArgumentError('invalid connections')
+ }
+
+ if (typeof factory !== 'function') {
+ throw new InvalidArgumentError('factory must be a function.')
+ }
+
+ if (connect != null && typeof connect !== 'function' && typeof connect !== 'object') {
+ throw new InvalidArgumentError('connect must be a function or an object')
+ }
+
+ if (typeof connect !== 'function') {
+ connect = buildConnector({
+ ...tls,
+ maxCachedSessions,
+ allowH2,
+ socketPath,
+ timeout: connectTimeout == null ? 10e3 : connectTimeout,
+ ...(util.nodeHasAutoSelectFamily && autoSelectFamily ? { autoSelectFamily, autoSelectFamilyAttemptTimeout } : undefined),
+ ...connect
+ })
+ }
+
+ this[kInterceptors] = options.interceptors && options.interceptors.Pool && Array.isArray(options.interceptors.Pool)
+ ? options.interceptors.Pool
+ : []
+ this[kConnections] = connections || null
+ this[kUrl] = util.parseOrigin(origin)
+ this[kOptions] = { ...util.deepClone(options), connect, allowH2 }
+ this[kOptions].interceptors = options.interceptors
+ ? { ...options.interceptors }
+ : undefined
+ this[kFactory] = factory
+ }
+
+ [kGetDispatcher] () {
+ let dispatcher = this[kClients].find(dispatcher => !dispatcher[kNeedDrain])
+
+ if (dispatcher) {
+ return dispatcher
+ }
+
+ if (!this[kConnections] || this[kClients].length < this[kConnections]) {
+ dispatcher = this[kFactory](this[kUrl], this[kOptions])
+ this[kAddClient](dispatcher)
+ }
+
+ return dispatcher
+ }
+}
+
+module.exports = Pool
+
+
+/***/ }),
+
+/***/ 97858:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+"use strict";
+
+
+const { kProxy, kClose, kDestroy, kInterceptors } = __nccwpck_require__(72785)
+const { URL } = __nccwpck_require__(57310)
+const Agent = __nccwpck_require__(7890)
+const Pool = __nccwpck_require__(4634)
+const DispatcherBase = __nccwpck_require__(74839)
+const { InvalidArgumentError, RequestAbortedError } = __nccwpck_require__(48045)
+const buildConnector = __nccwpck_require__(82067)
+
+const kAgent = Symbol('proxy agent')
+const kClient = Symbol('proxy client')
+const kProxyHeaders = Symbol('proxy headers')
+const kRequestTls = Symbol('request tls settings')
+const kProxyTls = Symbol('proxy tls settings')
+const kConnectEndpoint = Symbol('connect endpoint function')
+
+function defaultProtocolPort (protocol) {
+ return protocol === 'https:' ? 443 : 80
+}
+
+function buildProxyOptions (opts) {
+ if (typeof opts === 'string') {
+ opts = { uri: opts }
+ }
+
+ if (!opts || !opts.uri) {
+ throw new InvalidArgumentError('Proxy opts.uri is mandatory')
+ }
+
+ return {
+ uri: opts.uri,
+ protocol: opts.protocol || 'https'
+ }
+}
+
+function defaultFactory (origin, opts) {
+ return new Pool(origin, opts)
+}
+
+class ProxyAgent extends DispatcherBase {
+ constructor (opts) {
+ super(opts)
+ this[kProxy] = buildProxyOptions(opts)
+ this[kAgent] = new Agent(opts)
+ this[kInterceptors] = opts.interceptors && opts.interceptors.ProxyAgent && Array.isArray(opts.interceptors.ProxyAgent)
+ ? opts.interceptors.ProxyAgent
+ : []
+
+ if (typeof opts === 'string') {
+ opts = { uri: opts }
+ }
+
+ if (!opts || !opts.uri) {
+ throw new InvalidArgumentError('Proxy opts.uri is mandatory')
+ }
+
+ const { clientFactory = defaultFactory } = opts
+
+ if (typeof clientFactory !== 'function') {
+ throw new InvalidArgumentError('Proxy opts.clientFactory must be a function.')
+ }
+
+ this[kRequestTls] = opts.requestTls
+ this[kProxyTls] = opts.proxyTls
+ this[kProxyHeaders] = opts.headers || {}
+
+ if (opts.auth && opts.token) {
+ throw new InvalidArgumentError('opts.auth cannot be used in combination with opts.token')
+ } else if (opts.auth) {
+ /* @deprecated in favour of opts.token */
+ this[kProxyHeaders]['proxy-authorization'] = `Basic ${opts.auth}`
+ } else if (opts.token) {
+ this[kProxyHeaders]['proxy-authorization'] = opts.token
+ }
+
+ const resolvedUrl = new URL(opts.uri)
+ const { origin, port, host } = resolvedUrl
+
+ const connect = buildConnector({ ...opts.proxyTls })
+ this[kConnectEndpoint] = buildConnector({ ...opts.requestTls })
+ this[kClient] = clientFactory(resolvedUrl, { connect })
+ this[kAgent] = new Agent({
+ ...opts,
+ connect: async (opts, callback) => {
+ let requestedHost = opts.host
+ if (!opts.port) {
+ requestedHost += `:${defaultProtocolPort(opts.protocol)}`
+ }
+ try {
+ const { socket, statusCode } = await this[kClient].connect({
+ origin,
+ port,
+ path: requestedHost,
+ signal: opts.signal,
+ headers: {
+ ...this[kProxyHeaders],
+ host
+ }
+ })
+ if (statusCode !== 200) {
+ socket.on('error', () => {}).destroy()
+ callback(new RequestAbortedError('Proxy response !== 200 when HTTP Tunneling'))
+ }
+ if (opts.protocol !== 'https:') {
+ callback(null, socket)
+ return
+ }
+ let servername
+ if (this[kRequestTls]) {
+ servername = this[kRequestTls].servername
+ } else {
+ servername = opts.servername
+ }
+ this[kConnectEndpoint]({ ...opts, servername, httpSocket: socket }, callback)
+ } catch (err) {
+ callback(err)
+ }
+ }
+ })
+ }
+
+ dispatch (opts, handler) {
+ const { host } = new URL(opts.origin)
+ const headers = buildHeaders(opts.headers)
+ throwIfProxyAuthIsSent(headers)
+ return this[kAgent].dispatch(
+ {
+ ...opts,
+ headers: {
+ ...headers,
+ host
+ }
+ },
+ handler
+ )
+ }
+
+ async [kClose] () {
+ await this[kAgent].close()
+ await this[kClient].close()
+ }
+
+ async [kDestroy] () {
+ await this[kAgent].destroy()
+ await this[kClient].destroy()
+ }
+}
+
+/**
+ * @param {string[] | Record} headers
+ * @returns {Record}
+ */
+function buildHeaders (headers) {
+ // When using undici.fetch, the headers list is stored
+ // as an array.
+ if (Array.isArray(headers)) {
+ /** @type {Record} */
+ const headersPair = {}
+
+ for (let i = 0; i < headers.length; i += 2) {
+ headersPair[headers[i]] = headers[i + 1]
+ }
+
+ return headersPair
+ }
+
+ return headers
+}
+
+/**
+ * @param {Record} headers
+ *
+ * Previous versions of ProxyAgent suggests the Proxy-Authorization in request headers
+ * Nevertheless, it was changed and to avoid a security vulnerability by end users
+ * this check was created.
+ * It should be removed in the next major version for performance reasons
+ */
+function throwIfProxyAuthIsSent (headers) {
+ const existProxyAuth = headers && Object.keys(headers)
+ .find((key) => key.toLowerCase() === 'proxy-authorization')
+ if (existProxyAuth) {
+ throw new InvalidArgumentError('Proxy-Authorization should be sent in ProxyAgent constructor')
+ }
+}
+
+module.exports = ProxyAgent
+
+
+/***/ }),
+
+/***/ 29459:
+/***/ ((module) => {
+
+"use strict";
+
+
+let fastNow = Date.now()
+let fastNowTimeout
+
+const fastTimers = []
+
+function onTimeout () {
+ fastNow = Date.now()
+
+ let len = fastTimers.length
+ let idx = 0
+ while (idx < len) {
+ const timer = fastTimers[idx]
+
+ if (timer.state === 0) {
+ timer.state = fastNow + timer.delay
+ } else if (timer.state > 0 && fastNow >= timer.state) {
+ timer.state = -1
+ timer.callback(timer.opaque)
+ }
+
+ if (timer.state === -1) {
+ timer.state = -2
+ if (idx !== len - 1) {
+ fastTimers[idx] = fastTimers.pop()
+ } else {
+ fastTimers.pop()
+ }
+ len -= 1
+ } else {
+ idx += 1
+ }
+ }
+
+ if (fastTimers.length > 0) {
+ refreshTimeout()
+ }
+}
+
+function refreshTimeout () {
+ if (fastNowTimeout && fastNowTimeout.refresh) {
+ fastNowTimeout.refresh()
+ } else {
+ clearTimeout(fastNowTimeout)
+ fastNowTimeout = setTimeout(onTimeout, 1e3)
+ if (fastNowTimeout.unref) {
+ fastNowTimeout.unref()
+ }
+ }
+}
+
+class Timeout {
+ constructor (callback, delay, opaque) {
+ this.callback = callback
+ this.delay = delay
+ this.opaque = opaque
+
+ // -2 not in timer list
+ // -1 in timer list but inactive
+ // 0 in timer list waiting for time
+ // > 0 in timer list waiting for time to expire
+ this.state = -2
+
+ this.refresh()
+ }
+
+ refresh () {
+ if (this.state === -2) {
+ fastTimers.push(this)
+ if (!fastNowTimeout || fastTimers.length === 1) {
+ refreshTimeout()
+ }
+ }
+
+ this.state = 0
+ }
+
+ clear () {
+ this.state = -1
+ }
+}
+
+module.exports = {
+ setTimeout (callback, delay, opaque) {
+ return delay < 1e3
+ ? setTimeout(callback, delay, opaque)
+ : new Timeout(callback, delay, opaque)
+ },
+ clearTimeout (timeout) {
+ if (timeout instanceof Timeout) {
+ timeout.clear()
+ } else {
+ clearTimeout(timeout)
+ }
+ }
+}
+
+
+/***/ }),
+
+/***/ 35354:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+"use strict";
+
+
+const diagnosticsChannel = __nccwpck_require__(67643)
+const { uid, states } = __nccwpck_require__(19188)
+const {
+ kReadyState,
+ kSentClose,
+ kByteParser,
+ kReceivedClose
+} = __nccwpck_require__(37578)
+const { fireEvent, failWebsocketConnection } = __nccwpck_require__(25515)
+const { CloseEvent } = __nccwpck_require__(52611)
+const { makeRequest } = __nccwpck_require__(48359)
+const { fetching } = __nccwpck_require__(74881)
+const { Headers } = __nccwpck_require__(10554)
+const { getGlobalDispatcher } = __nccwpck_require__(21892)
+const { kHeadersList } = __nccwpck_require__(72785)
+
+const channels = {}
+channels.open = diagnosticsChannel.channel('undici:websocket:open')
+channels.close = diagnosticsChannel.channel('undici:websocket:close')
+channels.socketError = diagnosticsChannel.channel('undici:websocket:socket_error')
+
+/** @type {import('crypto')} */
+let crypto
+try {
+ crypto = __nccwpck_require__(6113)
+} catch {
+
+}
+
+/**
+ * @see https://websockets.spec.whatwg.org/#concept-websocket-establish
+ * @param {URL} url
+ * @param {string|string[]} protocols
+ * @param {import('./websocket').WebSocket} ws
+ * @param {(response: any) => void} onEstablish
+ * @param {Partial} options
+ */
+function establishWebSocketConnection (url, protocols, ws, onEstablish, options) {
+ // 1. Let requestURL be a copy of url, with its scheme set to "http", if url’s
+ // scheme is "ws", and to "https" otherwise.
+ const requestURL = url
+
+ requestURL.protocol = url.protocol === 'ws:' ? 'http:' : 'https:'
+
+ // 2. Let request be a new request, whose URL is requestURL, client is client,
+ // service-workers mode is "none", referrer is "no-referrer", mode is
+ // "websocket", credentials mode is "include", cache mode is "no-store" ,
+ // and redirect mode is "error".
+ const request = makeRequest({
+ urlList: [requestURL],
+ serviceWorkers: 'none',
+ referrer: 'no-referrer',
+ mode: 'websocket',
+ credentials: 'include',
+ cache: 'no-store',
+ redirect: 'error'
+ })
+
+ // Note: undici extension, allow setting custom headers.
+ if (options.headers) {
+ const headersList = new Headers(options.headers)[kHeadersList]
+
+ request.headersList = headersList
+ }
+
+ // 3. Append (`Upgrade`, `websocket`) to request’s header list.
+ // 4. Append (`Connection`, `Upgrade`) to request’s header list.
+ // Note: both of these are handled by undici currently.
+ // https://github.com/nodejs/undici/blob/68c269c4144c446f3f1220951338daef4a6b5ec4/lib/client.js#L1397
+
+ // 5. Let keyValue be a nonce consisting of a randomly selected
+ // 16-byte value that has been forgiving-base64-encoded and
+ // isomorphic encoded.
+ const keyValue = crypto.randomBytes(16).toString('base64')
+
+ // 6. Append (`Sec-WebSocket-Key`, keyValue) to request’s
+ // header list.
+ request.headersList.append('sec-websocket-key', keyValue)
+
+ // 7. Append (`Sec-WebSocket-Version`, `13`) to request’s
+ // header list.
+ request.headersList.append('sec-websocket-version', '13')
+
+ // 8. For each protocol in protocols, combine
+ // (`Sec-WebSocket-Protocol`, protocol) in request’s header
+ // list.
+ for (const protocol of protocols) {
+ request.headersList.append('sec-websocket-protocol', protocol)
+ }
+
+ // 9. Let permessageDeflate be a user-agent defined
+ // "permessage-deflate" extension header value.
+ // https://github.com/mozilla/gecko-dev/blob/ce78234f5e653a5d3916813ff990f053510227bc/netwerk/protocol/websocket/WebSocketChannel.cpp#L2673
+ // TODO: enable once permessage-deflate is supported
+ const permessageDeflate = '' // 'permessage-deflate; 15'
+
+ // 10. Append (`Sec-WebSocket-Extensions`, permessageDeflate) to
+ // request’s header list.
+ // request.headersList.append('sec-websocket-extensions', permessageDeflate)
+
+ // 11. Fetch request with useParallelQueue set to true, and
+ // processResponse given response being these steps:
+ const controller = fetching({
+ request,
+ useParallelQueue: true,
+ dispatcher: options.dispatcher ?? getGlobalDispatcher(),
+ processResponse (response) {
+ // 1. If response is a network error or its status is not 101,
+ // fail the WebSocket connection.
+ if (response.type === 'error' || response.status !== 101) {
+ failWebsocketConnection(ws, 'Received network error or non-101 status code.')
+ return
+ }
+
+ // 2. If protocols is not the empty list and extracting header
+ // list values given `Sec-WebSocket-Protocol` and response’s
+ // header list results in null, failure, or the empty byte
+ // sequence, then fail the WebSocket connection.
+ if (protocols.length !== 0 && !response.headersList.get('Sec-WebSocket-Protocol')) {
+ failWebsocketConnection(ws, 'Server did not respond with sent protocols.')
+ return
+ }
+
+ // 3. Follow the requirements stated step 2 to step 6, inclusive,
+ // of the last set of steps in section 4.1 of The WebSocket
+ // Protocol to validate response. This either results in fail
+ // the WebSocket connection or the WebSocket connection is
+ // established.
+
+ // 2. If the response lacks an |Upgrade| header field or the |Upgrade|
+ // header field contains a value that is not an ASCII case-
+ // insensitive match for the value "websocket", the client MUST
+ // _Fail the WebSocket Connection_.
+ if (response.headersList.get('Upgrade')?.toLowerCase() !== 'websocket') {
+ failWebsocketConnection(ws, 'Server did not set Upgrade header to "websocket".')
+ return
+ }
+
+ // 3. If the response lacks a |Connection| header field or the
+ // |Connection| header field doesn't contain a token that is an
+ // ASCII case-insensitive match for the value "Upgrade", the client
+ // MUST _Fail the WebSocket Connection_.
+ if (response.headersList.get('Connection')?.toLowerCase() !== 'upgrade') {
+ failWebsocketConnection(ws, 'Server did not set Connection header to "upgrade".')
+ return
+ }
+
+ // 4. If the response lacks a |Sec-WebSocket-Accept| header field or
+ // the |Sec-WebSocket-Accept| contains a value other than the
+ // base64-encoded SHA-1 of the concatenation of the |Sec-WebSocket-
+ // Key| (as a string, not base64-decoded) with the string "258EAFA5-
+ // E914-47DA-95CA-C5AB0DC85B11" but ignoring any leading and
+ // trailing whitespace, the client MUST _Fail the WebSocket
+ // Connection_.
+ const secWSAccept = response.headersList.get('Sec-WebSocket-Accept')
+ const digest = crypto.createHash('sha1').update(keyValue + uid).digest('base64')
+ if (secWSAccept !== digest) {
+ failWebsocketConnection(ws, 'Incorrect hash received in Sec-WebSocket-Accept header.')
+ return
+ }
+
+ // 5. If the response includes a |Sec-WebSocket-Extensions| header
+ // field and this header field indicates the use of an extension
+ // that was not present in the client's handshake (the server has
+ // indicated an extension not requested by the client), the client
+ // MUST _Fail the WebSocket Connection_. (The parsing of this
+ // header field to determine which extensions are requested is
+ // discussed in Section 9.1.)
+ const secExtension = response.headersList.get('Sec-WebSocket-Extensions')
+
+ if (secExtension !== null && secExtension !== permessageDeflate) {
+ failWebsocketConnection(ws, 'Received different permessage-deflate than the one set.')
+ return
+ }
+
+ // 6. If the response includes a |Sec-WebSocket-Protocol| header field
+ // and this header field indicates the use of a subprotocol that was
+ // not present in the client's handshake (the server has indicated a
+ // subprotocol not requested by the client), the client MUST _Fail
+ // the WebSocket Connection_.
+ const secProtocol = response.headersList.get('Sec-WebSocket-Protocol')
+
+ if (secProtocol !== null && secProtocol !== request.headersList.get('Sec-WebSocket-Protocol')) {
+ failWebsocketConnection(ws, 'Protocol was not set in the opening handshake.')
+ return
+ }
+
+ response.socket.on('data', onSocketData)
+ response.socket.on('close', onSocketClose)
+ response.socket.on('error', onSocketError)
+
+ if (channels.open.hasSubscribers) {
+ channels.open.publish({
+ address: response.socket.address(),
+ protocol: secProtocol,
+ extensions: secExtension
+ })
+ }
+
+ onEstablish(response)
+ }
+ })
+
+ return controller
+}
+
+/**
+ * @param {Buffer} chunk
+ */
+function onSocketData (chunk) {
+ if (!this.ws[kByteParser].write(chunk)) {
+ this.pause()
+ }
+}
+
+/**
+ * @see https://websockets.spec.whatwg.org/#feedback-from-the-protocol
+ * @see https://datatracker.ietf.org/doc/html/rfc6455#section-7.1.4
+ */
+function onSocketClose () {
+ const { ws } = this
+
+ // If the TCP connection was closed after the
+ // WebSocket closing handshake was completed, the WebSocket connection
+ // is said to have been closed _cleanly_.
+ const wasClean = ws[kSentClose] && ws[kReceivedClose]
+
+ let code = 1005
+ let reason = ''
+
+ const result = ws[kByteParser].closingInfo
+
+ if (result) {
+ code = result.code ?? 1005
+ reason = result.reason
+ } else if (!ws[kSentClose]) {
+ // If _The WebSocket
+ // Connection is Closed_ and no Close control frame was received by the
+ // endpoint (such as could occur if the underlying transport connection
+ // is lost), _The WebSocket Connection Close Code_ is considered to be
+ // 1006.
+ code = 1006
+ }
+
+ // 1. Change the ready state to CLOSED (3).
+ ws[kReadyState] = states.CLOSED
+
+ // 2. If the user agent was required to fail the WebSocket
+ // connection, or if the WebSocket connection was closed
+ // after being flagged as full, fire an event named error
+ // at the WebSocket object.
+ // TODO
+
+ // 3. Fire an event named close at the WebSocket object,
+ // using CloseEvent, with the wasClean attribute
+ // initialized to true if the connection closed cleanly
+ // and false otherwise, the code attribute initialized to
+ // the WebSocket connection close code, and the reason
+ // attribute initialized to the result of applying UTF-8
+ // decode without BOM to the WebSocket connection close
+ // reason.
+ fireEvent('close', ws, CloseEvent, {
+ wasClean, code, reason
+ })
+
+ if (channels.close.hasSubscribers) {
+ channels.close.publish({
+ websocket: ws,
+ code,
+ reason
+ })
+ }
+}
+
+function onSocketError (error) {
+ const { ws } = this
+
+ ws[kReadyState] = states.CLOSING
+
+ if (channels.socketError.hasSubscribers) {
+ channels.socketError.publish(error)
+ }
+
+ this.destroy()
+}
+
+module.exports = {
+ establishWebSocketConnection
+}
+
+
+/***/ }),
+
+/***/ 19188:
+/***/ ((module) => {
+
+"use strict";
+
+
+// This is a Globally Unique Identifier unique used
+// to validate that the endpoint accepts websocket
+// connections.
+// See https://www.rfc-editor.org/rfc/rfc6455.html#section-1.3
+const uid = '258EAFA5-E914-47DA-95CA-C5AB0DC85B11'
+
+/** @type {PropertyDescriptor} */
+const staticPropertyDescriptors = {
+ enumerable: true,
+ writable: false,
+ configurable: false
+}
+
+const states = {
+ CONNECTING: 0,
+ OPEN: 1,
+ CLOSING: 2,
+ CLOSED: 3
+}
+
+const opcodes = {
+ CONTINUATION: 0x0,
+ TEXT: 0x1,
+ BINARY: 0x2,
+ CLOSE: 0x8,
+ PING: 0x9,
+ PONG: 0xA
+}
+
+const maxUnsigned16Bit = 2 ** 16 - 1 // 65535
+
+const parserStates = {
+ INFO: 0,
+ PAYLOADLENGTH_16: 2,
+ PAYLOADLENGTH_64: 3,
+ READ_DATA: 4
+}
+
+const emptyBuffer = Buffer.allocUnsafe(0)
+
+module.exports = {
+ uid,
+ staticPropertyDescriptors,
+ states,
+ opcodes,
+ maxUnsigned16Bit,
+ parserStates,
+ emptyBuffer
+}
+
+
+/***/ }),
+
+/***/ 52611:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+"use strict";
+
+
+const { webidl } = __nccwpck_require__(21744)
+const { kEnumerableProperty } = __nccwpck_require__(83983)
+const { MessagePort } = __nccwpck_require__(71267)
+
+/**
+ * @see https://html.spec.whatwg.org/multipage/comms.html#messageevent
+ */
+class MessageEvent extends Event {
+ #eventInit
+
+ constructor (type, eventInitDict = {}) {
+ webidl.argumentLengthCheck(arguments, 1, { header: 'MessageEvent constructor' })
+
+ type = webidl.converters.DOMString(type)
+ eventInitDict = webidl.converters.MessageEventInit(eventInitDict)
+
+ super(type, eventInitDict)
+
+ this.#eventInit = eventInitDict
+ }
+
+ get data () {
+ webidl.brandCheck(this, MessageEvent)
+
+ return this.#eventInit.data
+ }
+
+ get origin () {
+ webidl.brandCheck(this, MessageEvent)
+
+ return this.#eventInit.origin
+ }
+
+ get lastEventId () {
+ webidl.brandCheck(this, MessageEvent)
+
+ return this.#eventInit.lastEventId
+ }
+
+ get source () {
+ webidl.brandCheck(this, MessageEvent)
+
+ return this.#eventInit.source
+ }
+
+ get ports () {
+ webidl.brandCheck(this, MessageEvent)
+
+ if (!Object.isFrozen(this.#eventInit.ports)) {
+ Object.freeze(this.#eventInit.ports)
+ }
+
+ return this.#eventInit.ports
+ }
+
+ initMessageEvent (
+ type,
+ bubbles = false,
+ cancelable = false,
+ data = null,
+ origin = '',
+ lastEventId = '',
+ source = null,
+ ports = []
+ ) {
+ webidl.brandCheck(this, MessageEvent)
+
+ webidl.argumentLengthCheck(arguments, 1, { header: 'MessageEvent.initMessageEvent' })
+
+ return new MessageEvent(type, {
+ bubbles, cancelable, data, origin, lastEventId, source, ports
+ })
+ }
+}
+
+/**
+ * @see https://websockets.spec.whatwg.org/#the-closeevent-interface
+ */
+class CloseEvent extends Event {
+ #eventInit
+
+ constructor (type, eventInitDict = {}) {
+ webidl.argumentLengthCheck(arguments, 1, { header: 'CloseEvent constructor' })
+
+ type = webidl.converters.DOMString(type)
+ eventInitDict = webidl.converters.CloseEventInit(eventInitDict)
+
+ super(type, eventInitDict)
+
+ this.#eventInit = eventInitDict
+ }
+
+ get wasClean () {
+ webidl.brandCheck(this, CloseEvent)
+
+ return this.#eventInit.wasClean
+ }
+
+ get code () {
+ webidl.brandCheck(this, CloseEvent)
+
+ return this.#eventInit.code
+ }
+
+ get reason () {
+ webidl.brandCheck(this, CloseEvent)
+
+ return this.#eventInit.reason
+ }
+}
+
+// https://html.spec.whatwg.org/multipage/webappapis.html#the-errorevent-interface
+class ErrorEvent extends Event {
+ #eventInit
+
+ constructor (type, eventInitDict) {
+ webidl.argumentLengthCheck(arguments, 1, { header: 'ErrorEvent constructor' })
+
+ super(type, eventInitDict)
+
+ type = webidl.converters.DOMString(type)
+ eventInitDict = webidl.converters.ErrorEventInit(eventInitDict ?? {})
+
+ this.#eventInit = eventInitDict
+ }
+
+ get message () {
+ webidl.brandCheck(this, ErrorEvent)
+
+ return this.#eventInit.message
+ }
+
+ get filename () {
+ webidl.brandCheck(this, ErrorEvent)
+
+ return this.#eventInit.filename
+ }
+
+ get lineno () {
+ webidl.brandCheck(this, ErrorEvent)
+
+ return this.#eventInit.lineno
+ }
+
+ get colno () {
+ webidl.brandCheck(this, ErrorEvent)
+
+ return this.#eventInit.colno
+ }
+
+ get error () {
+ webidl.brandCheck(this, ErrorEvent)
+
+ return this.#eventInit.error
+ }
+}
+
+Object.defineProperties(MessageEvent.prototype, {
+ [Symbol.toStringTag]: {
+ value: 'MessageEvent',
+ configurable: true
+ },
+ data: kEnumerableProperty,
+ origin: kEnumerableProperty,
+ lastEventId: kEnumerableProperty,
+ source: kEnumerableProperty,
+ ports: kEnumerableProperty,
+ initMessageEvent: kEnumerableProperty
+})
+
+Object.defineProperties(CloseEvent.prototype, {
+ [Symbol.toStringTag]: {
+ value: 'CloseEvent',
+ configurable: true
+ },
+ reason: kEnumerableProperty,
+ code: kEnumerableProperty,
+ wasClean: kEnumerableProperty
+})
+
+Object.defineProperties(ErrorEvent.prototype, {
+ [Symbol.toStringTag]: {
+ value: 'ErrorEvent',
+ configurable: true
+ },
+ message: kEnumerableProperty,
+ filename: kEnumerableProperty,
+ lineno: kEnumerableProperty,
+ colno: kEnumerableProperty,
+ error: kEnumerableProperty
+})
+
+webidl.converters.MessagePort = webidl.interfaceConverter(MessagePort)
+
+webidl.converters['sequence'] = webidl.sequenceConverter(
+ webidl.converters.MessagePort
+)
+
+const eventInit = [
+ {
+ key: 'bubbles',
+ converter: webidl.converters.boolean,
+ defaultValue: false
+ },
+ {
+ key: 'cancelable',
+ converter: webidl.converters.boolean,
+ defaultValue: false
+ },
+ {
+ key: 'composed',
+ converter: webidl.converters.boolean,
+ defaultValue: false
+ }
+]
+
+webidl.converters.MessageEventInit = webidl.dictionaryConverter([
+ ...eventInit,
+ {
+ key: 'data',
+ converter: webidl.converters.any,
+ defaultValue: null
+ },
+ {
+ key: 'origin',
+ converter: webidl.converters.USVString,
+ defaultValue: ''
+ },
+ {
+ key: 'lastEventId',
+ converter: webidl.converters.DOMString,
+ defaultValue: ''
+ },
+ {
+ key: 'source',
+ // Node doesn't implement WindowProxy or ServiceWorker, so the only
+ // valid value for source is a MessagePort.
+ converter: webidl.nullableConverter(webidl.converters.MessagePort),
+ defaultValue: null
+ },
+ {
+ key: 'ports',
+ converter: webidl.converters['sequence'],
+ get defaultValue () {
+ return []
+ }
+ }
+])
+
+webidl.converters.CloseEventInit = webidl.dictionaryConverter([
+ ...eventInit,
+ {
+ key: 'wasClean',
+ converter: webidl.converters.boolean,
+ defaultValue: false
+ },
+ {
+ key: 'code',
+ converter: webidl.converters['unsigned short'],
+ defaultValue: 0
+ },
+ {
+ key: 'reason',
+ converter: webidl.converters.USVString,
+ defaultValue: ''
+ }
+])
+
+webidl.converters.ErrorEventInit = webidl.dictionaryConverter([
+ ...eventInit,
+ {
+ key: 'message',
+ converter: webidl.converters.DOMString,
+ defaultValue: ''
+ },
+ {
+ key: 'filename',
+ converter: webidl.converters.USVString,
+ defaultValue: ''
+ },
+ {
+ key: 'lineno',
+ converter: webidl.converters['unsigned long'],
+ defaultValue: 0
+ },
+ {
+ key: 'colno',
+ converter: webidl.converters['unsigned long'],
+ defaultValue: 0
+ },
+ {
+ key: 'error',
+ converter: webidl.converters.any
+ }
+])
+
+module.exports = {
+ MessageEvent,
+ CloseEvent,
+ ErrorEvent
+}
+
+
+/***/ }),
+
+/***/ 25444:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+"use strict";
+
+
+const { maxUnsigned16Bit } = __nccwpck_require__(19188)
+
+/** @type {import('crypto')} */
+let crypto
+try {
+ crypto = __nccwpck_require__(6113)
+} catch {
+
+}
+
+class WebsocketFrameSend {
+ /**
+ * @param {Buffer|undefined} data
+ */
+ constructor (data) {
+ this.frameData = data
+ this.maskKey = crypto.randomBytes(4)
+ }
+
+ createFrame (opcode) {
+ const bodyLength = this.frameData?.byteLength ?? 0
+
+ /** @type {number} */
+ let payloadLength = bodyLength // 0-125
+ let offset = 6
+
+ if (bodyLength > maxUnsigned16Bit) {
+ offset += 8 // payload length is next 8 bytes
+ payloadLength = 127
+ } else if (bodyLength > 125) {
+ offset += 2 // payload length is next 2 bytes
+ payloadLength = 126
+ }
+
+ const buffer = Buffer.allocUnsafe(bodyLength + offset)
+
+ // Clear first 2 bytes, everything else is overwritten
+ buffer[0] = buffer[1] = 0
+ buffer[0] |= 0x80 // FIN
+ buffer[0] = (buffer[0] & 0xF0) + opcode // opcode
+
+ /*! ws. MIT License. Einar Otto Stangvik */
+ buffer[offset - 4] = this.maskKey[0]
+ buffer[offset - 3] = this.maskKey[1]
+ buffer[offset - 2] = this.maskKey[2]
+ buffer[offset - 1] = this.maskKey[3]
+
+ buffer[1] = payloadLength
+
+ if (payloadLength === 126) {
+ buffer.writeUInt16BE(bodyLength, 2)
+ } else if (payloadLength === 127) {
+ // Clear extended payload length
+ buffer[2] = buffer[3] = 0
+ buffer.writeUIntBE(bodyLength, 4, 6)
+ }
+
+ buffer[1] |= 0x80 // MASK
+
+ // mask body
+ for (let i = 0; i < bodyLength; i++) {
+ buffer[offset + i] = this.frameData[i] ^ this.maskKey[i % 4]
+ }
+
+ return buffer
+ }
+}
+
+module.exports = {
+ WebsocketFrameSend
+}
+
+
+/***/ }),
+
+/***/ 11688:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+"use strict";
+
+
+const { Writable } = __nccwpck_require__(12781)
+const diagnosticsChannel = __nccwpck_require__(67643)
+const { parserStates, opcodes, states, emptyBuffer } = __nccwpck_require__(19188)
+const { kReadyState, kSentClose, kResponse, kReceivedClose } = __nccwpck_require__(37578)
+const { isValidStatusCode, failWebsocketConnection, websocketMessageReceived } = __nccwpck_require__(25515)
+const { WebsocketFrameSend } = __nccwpck_require__(25444)
+
+// This code was influenced by ws released under the MIT license.
+// Copyright (c) 2011 Einar Otto Stangvik
+// Copyright (c) 2013 Arnout Kazemier and contributors
+// Copyright (c) 2016 Luigi Pinca and contributors
+
+const channels = {}
+channels.ping = diagnosticsChannel.channel('undici:websocket:ping')
+channels.pong = diagnosticsChannel.channel('undici:websocket:pong')
+
+class ByteParser extends Writable {
+ #buffers = []
+ #byteOffset = 0
+
+ #state = parserStates.INFO
+
+ #info = {}
+ #fragments = []
+
+ constructor (ws) {
+ super()
+
+ this.ws = ws
+ }
+
+ /**
+ * @param {Buffer} chunk
+ * @param {() => void} callback
+ */
+ _write (chunk, _, callback) {
+ this.#buffers.push(chunk)
+ this.#byteOffset += chunk.length
+
+ this.run(callback)
+ }
+
+ /**
+ * Runs whenever a new chunk is received.
+ * Callback is called whenever there are no more chunks buffering,
+ * or not enough bytes are buffered to parse.
+ */
+ run (callback) {
+ while (true) {
+ if (this.#state === parserStates.INFO) {
+ // If there aren't enough bytes to parse the payload length, etc.
+ if (this.#byteOffset < 2) {
+ return callback()
+ }
+
+ const buffer = this.consume(2)
+
+ this.#info.fin = (buffer[0] & 0x80) !== 0
+ this.#info.opcode = buffer[0] & 0x0F
+
+ // If we receive a fragmented message, we use the type of the first
+ // frame to parse the full message as binary/text, when it's terminated
+ this.#info.originalOpcode ??= this.#info.opcode
+
+ this.#info.fragmented = !this.#info.fin && this.#info.opcode !== opcodes.CONTINUATION
+
+ if (this.#info.fragmented && this.#info.opcode !== opcodes.BINARY && this.#info.opcode !== opcodes.TEXT) {
+ // Only text and binary frames can be fragmented
+ failWebsocketConnection(this.ws, 'Invalid frame type was fragmented.')
+ return
+ }
+
+ const payloadLength = buffer[1] & 0x7F
+
+ if (payloadLength <= 125) {
+ this.#info.payloadLength = payloadLength
+ this.#state = parserStates.READ_DATA
+ } else if (payloadLength === 126) {
+ this.#state = parserStates.PAYLOADLENGTH_16
+ } else if (payloadLength === 127) {
+ this.#state = parserStates.PAYLOADLENGTH_64
+ }
+
+ if (this.#info.fragmented && payloadLength > 125) {
+ // A fragmented frame can't be fragmented itself
+ failWebsocketConnection(this.ws, 'Fragmented frame exceeded 125 bytes.')
+ return
+ } else if (
+ (this.#info.opcode === opcodes.PING ||
+ this.#info.opcode === opcodes.PONG ||
+ this.#info.opcode === opcodes.CLOSE) &&
+ payloadLength > 125
+ ) {
+ // Control frames can have a payload length of 125 bytes MAX
+ failWebsocketConnection(this.ws, 'Payload length for control frame exceeded 125 bytes.')
+ return
+ } else if (this.#info.opcode === opcodes.CLOSE) {
+ if (payloadLength === 1) {
+ failWebsocketConnection(this.ws, 'Received close frame with a 1-byte body.')
+ return
+ }
+
+ const body = this.consume(payloadLength)
+
+ this.#info.closeInfo = this.parseCloseBody(false, body)
+
+ if (!this.ws[kSentClose]) {
+ // If an endpoint receives a Close frame and did not previously send a
+ // Close frame, the endpoint MUST send a Close frame in response. (When
+ // sending a Close frame in response, the endpoint typically echos the
+ // status code it received.)
+ const body = Buffer.allocUnsafe(2)
+ body.writeUInt16BE(this.#info.closeInfo.code, 0)
+ const closeFrame = new WebsocketFrameSend(body)
+
+ this.ws[kResponse].socket.write(
+ closeFrame.createFrame(opcodes.CLOSE),
+ (err) => {
+ if (!err) {
+ this.ws[kSentClose] = true
+ }
+ }
+ )
+ }
+
+ // Upon either sending or receiving a Close control frame, it is said
+ // that _The WebSocket Closing Handshake is Started_ and that the
+ // WebSocket connection is in the CLOSING state.
+ this.ws[kReadyState] = states.CLOSING
+ this.ws[kReceivedClose] = true
+
+ this.end()
+
+ return
+ } else if (this.#info.opcode === opcodes.PING) {
+ // Upon receipt of a Ping frame, an endpoint MUST send a Pong frame in
+ // response, unless it already received a Close frame.
+ // A Pong frame sent in response to a Ping frame must have identical
+ // "Application data"
+
+ const body = this.consume(payloadLength)
+
+ if (!this.ws[kReceivedClose]) {
+ const frame = new WebsocketFrameSend(body)
+
+ this.ws[kResponse].socket.write(frame.createFrame(opcodes.PONG))
+
+ if (channels.ping.hasSubscribers) {
+ channels.ping.publish({
+ payload: body
+ })
+ }
+ }
+
+ this.#state = parserStates.INFO
+
+ if (this.#byteOffset > 0) {
+ continue
+ } else {
+ callback()
+ return
+ }
+ } else if (this.#info.opcode === opcodes.PONG) {
+ // A Pong frame MAY be sent unsolicited. This serves as a
+ // unidirectional heartbeat. A response to an unsolicited Pong frame is
+ // not expected.
+
+ const body = this.consume(payloadLength)
+
+ if (channels.pong.hasSubscribers) {
+ channels.pong.publish({
+ payload: body
+ })
+ }
+
+ if (this.#byteOffset > 0) {
+ continue
+ } else {
+ callback()
+ return
+ }
+ }
+ } else if (this.#state === parserStates.PAYLOADLENGTH_16) {
+ if (this.#byteOffset < 2) {
+ return callback()
+ }
+
+ const buffer = this.consume(2)
+
+ this.#info.payloadLength = buffer.readUInt16BE(0)
+ this.#state = parserStates.READ_DATA
+ } else if (this.#state === parserStates.PAYLOADLENGTH_64) {
+ if (this.#byteOffset < 8) {
+ return callback()
+ }
+
+ const buffer = this.consume(8)
+ const upper = buffer.readUInt32BE(0)
+
+ // 2^31 is the maxinimum bytes an arraybuffer can contain
+ // on 32-bit systems. Although, on 64-bit systems, this is
+ // 2^53-1 bytes.
+ // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Invalid_array_length
+ // https://source.chromium.org/chromium/chromium/src/+/main:v8/src/common/globals.h;drc=1946212ac0100668f14eb9e2843bdd846e510a1e;bpv=1;bpt=1;l=1275
+ // https://source.chromium.org/chromium/chromium/src/+/main:v8/src/objects/js-array-buffer.h;l=34;drc=1946212ac0100668f14eb9e2843bdd846e510a1e
+ if (upper > 2 ** 31 - 1) {
+ failWebsocketConnection(this.ws, 'Received payload length > 2^31 bytes.')
+ return
+ }
+
+ const lower = buffer.readUInt32BE(4)
+
+ this.#info.payloadLength = (upper << 8) + lower
+ this.#state = parserStates.READ_DATA
+ } else if (this.#state === parserStates.READ_DATA) {
+ if (this.#byteOffset < this.#info.payloadLength) {
+ // If there is still more data in this chunk that needs to be read
+ return callback()
+ } else if (this.#byteOffset >= this.#info.payloadLength) {
+ // If the server sent multiple frames in a single chunk
+
+ const body = this.consume(this.#info.payloadLength)
+
+ this.#fragments.push(body)
+
+ // If the frame is unfragmented, or a fragmented frame was terminated,
+ // a message was received
+ if (!this.#info.fragmented || (this.#info.fin && this.#info.opcode === opcodes.CONTINUATION)) {
+ const fullMessage = Buffer.concat(this.#fragments)
+
+ websocketMessageReceived(this.ws, this.#info.originalOpcode, fullMessage)
+
+ this.#info = {}
+ this.#fragments.length = 0
+ }
+
+ this.#state = parserStates.INFO
+ }
+ }
+
+ if (this.#byteOffset > 0) {
+ continue
+ } else {
+ callback()
+ break
+ }
+ }
+ }
+
+ /**
+ * Take n bytes from the buffered Buffers
+ * @param {number} n
+ * @returns {Buffer|null}
+ */
+ consume (n) {
+ if (n > this.#byteOffset) {
+ return null
+ } else if (n === 0) {
+ return emptyBuffer
+ }
+
+ if (this.#buffers[0].length === n) {
+ this.#byteOffset -= this.#buffers[0].length
+ return this.#buffers.shift()
+ }
+
+ const buffer = Buffer.allocUnsafe(n)
+ let offset = 0
+
+ while (offset !== n) {
+ const next = this.#buffers[0]
+ const { length } = next
+
+ if (length + offset === n) {
+ buffer.set(this.#buffers.shift(), offset)
+ break
+ } else if (length + offset > n) {
+ buffer.set(next.subarray(0, n - offset), offset)
+ this.#buffers[0] = next.subarray(n - offset)
+ break
+ } else {
+ buffer.set(this.#buffers.shift(), offset)
+ offset += next.length
+ }
+ }
+
+ this.#byteOffset -= n
+
+ return buffer
+ }
+
+ parseCloseBody (onlyCode, data) {
+ // https://datatracker.ietf.org/doc/html/rfc6455#section-7.1.5
+ /** @type {number|undefined} */
+ let code
+
+ if (data.length >= 2) {
+ // _The WebSocket Connection Close Code_ is
+ // defined as the status code (Section 7.4) contained in the first Close
+ // control frame received by the application
+ code = data.readUInt16BE(0)
+ }
+
+ if (onlyCode) {
+ if (!isValidStatusCode(code)) {
+ return null
+ }
+
+ return { code }
+ }
+
+ // https://datatracker.ietf.org/doc/html/rfc6455#section-7.1.6
+ /** @type {Buffer} */
+ let reason = data.subarray(2)
+
+ // Remove BOM
+ if (reason[0] === 0xEF && reason[1] === 0xBB && reason[2] === 0xBF) {
+ reason = reason.subarray(3)
+ }
+
+ if (code !== undefined && !isValidStatusCode(code)) {
+ return null
+ }
+
+ try {
+ // TODO: optimize this
+ reason = new TextDecoder('utf-8', { fatal: true }).decode(reason)
+ } catch {
+ return null
+ }
+
+ return { code, reason }
+ }
+
+ get closingInfo () {
+ return this.#info.closeInfo
+ }
+}
+
+module.exports = {
+ ByteParser
+}
+
+
+/***/ }),
+
+/***/ 37578:
+/***/ ((module) => {
+
+"use strict";
+
+
+module.exports = {
+ kWebSocketURL: Symbol('url'),
+ kReadyState: Symbol('ready state'),
+ kController: Symbol('controller'),
+ kResponse: Symbol('response'),
+ kBinaryType: Symbol('binary type'),
+ kSentClose: Symbol('sent close'),
+ kReceivedClose: Symbol('received close'),
+ kByteParser: Symbol('byte parser')
+}
+
+
+/***/ }),
+
+/***/ 25515:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+"use strict";
+
+
+const { kReadyState, kController, kResponse, kBinaryType, kWebSocketURL } = __nccwpck_require__(37578)
+const { states, opcodes } = __nccwpck_require__(19188)
+const { MessageEvent, ErrorEvent } = __nccwpck_require__(52611)
+
+/* globals Blob */
+
+/**
+ * @param {import('./websocket').WebSocket} ws
+ */
+function isEstablished (ws) {
+ // If the server's response is validated as provided for above, it is
+ // said that _The WebSocket Connection is Established_ and that the
+ // WebSocket Connection is in the OPEN state.
+ return ws[kReadyState] === states.OPEN
+}
+
+/**
+ * @param {import('./websocket').WebSocket} ws
+ */
+function isClosing (ws) {
+ // Upon either sending or receiving a Close control frame, it is said
+ // that _The WebSocket Closing Handshake is Started_ and that the
+ // WebSocket connection is in the CLOSING state.
+ return ws[kReadyState] === states.CLOSING
+}
+
+/**
+ * @param {import('./websocket').WebSocket} ws
+ */
+function isClosed (ws) {
+ return ws[kReadyState] === states.CLOSED
+}
+
+/**
+ * @see https://dom.spec.whatwg.org/#concept-event-fire
+ * @param {string} e
+ * @param {EventTarget} target
+ * @param {EventInit | undefined} eventInitDict
+ */
+function fireEvent (e, target, eventConstructor = Event, eventInitDict) {
+ // 1. If eventConstructor is not given, then let eventConstructor be Event.
+
+ // 2. Let event be the result of creating an event given eventConstructor,
+ // in the relevant realm of target.
+ // 3. Initialize event’s type attribute to e.
+ const event = new eventConstructor(e, eventInitDict) // eslint-disable-line new-cap
+
+ // 4. Initialize any other IDL attributes of event as described in the
+ // invocation of this algorithm.
+
+ // 5. Return the result of dispatching event at target, with legacy target
+ // override flag set if set.
+ target.dispatchEvent(event)
+}
+
+/**
+ * @see https://websockets.spec.whatwg.org/#feedback-from-the-protocol
+ * @param {import('./websocket').WebSocket} ws
+ * @param {number} type Opcode
+ * @param {Buffer} data application data
+ */
+function websocketMessageReceived (ws, type, data) {
+ // 1. If ready state is not OPEN (1), then return.
+ if (ws[kReadyState] !== states.OPEN) {
+ return
+ }
+
+ // 2. Let dataForEvent be determined by switching on type and binary type:
+ let dataForEvent
+
+ if (type === opcodes.TEXT) {
+ // -> type indicates that the data is Text
+ // a new DOMString containing data
+ try {
+ dataForEvent = new TextDecoder('utf-8', { fatal: true }).decode(data)
+ } catch {
+ failWebsocketConnection(ws, 'Received invalid UTF-8 in text frame.')
+ return
+ }
+ } else if (type === opcodes.BINARY) {
+ if (ws[kBinaryType] === 'blob') {
+ // -> type indicates that the data is Binary and binary type is "blob"
+ // a new Blob object, created in the relevant Realm of the WebSocket
+ // object, that represents data as its raw data
+ dataForEvent = new Blob([data])
+ } else {
+ // -> type indicates that the data is Binary and binary type is "arraybuffer"
+ // a new ArrayBuffer object, created in the relevant Realm of the
+ // WebSocket object, whose contents are data
+ dataForEvent = new Uint8Array(data).buffer
+ }
+ }
+
+ // 3. Fire an event named message at the WebSocket object, using MessageEvent,
+ // with the origin attribute initialized to the serialization of the WebSocket
+ // object’s url's origin, and the data attribute initialized to dataForEvent.
+ fireEvent('message', ws, MessageEvent, {
+ origin: ws[kWebSocketURL].origin,
+ data: dataForEvent
+ })
+}
+
+/**
+ * @see https://datatracker.ietf.org/doc/html/rfc6455
+ * @see https://datatracker.ietf.org/doc/html/rfc2616
+ * @see https://bugs.chromium.org/p/chromium/issues/detail?id=398407
+ * @param {string} protocol
+ */
+function isValidSubprotocol (protocol) {
+ // If present, this value indicates one
+ // or more comma-separated subprotocol the client wishes to speak,
+ // ordered by preference. The elements that comprise this value
+ // MUST be non-empty strings with characters in the range U+0021 to
+ // U+007E not including separator characters as defined in
+ // [RFC2616] and MUST all be unique strings.
+ if (protocol.length === 0) {
+ return false
+ }
+
+ for (const char of protocol) {
+ const code = char.charCodeAt(0)
+
+ if (
+ code < 0x21 ||
+ code > 0x7E ||
+ char === '(' ||
+ char === ')' ||
+ char === '<' ||
+ char === '>' ||
+ char === '@' ||
+ char === ',' ||
+ char === ';' ||
+ char === ':' ||
+ char === '\\' ||
+ char === '"' ||
+ char === '/' ||
+ char === '[' ||
+ char === ']' ||
+ char === '?' ||
+ char === '=' ||
+ char === '{' ||
+ char === '}' ||
+ code === 32 || // SP
+ code === 9 // HT
+ ) {
+ return false
+ }
+ }
+
+ return true
+}
+
+/**
+ * @see https://datatracker.ietf.org/doc/html/rfc6455#section-7-4
+ * @param {number} code
+ */
+function isValidStatusCode (code) {
+ if (code >= 1000 && code < 1015) {
+ return (
+ code !== 1004 && // reserved
+ code !== 1005 && // "MUST NOT be set as a status code"
+ code !== 1006 // "MUST NOT be set as a status code"
+ )
+ }
+
+ return code >= 3000 && code <= 4999
+}
+
+/**
+ * @param {import('./websocket').WebSocket} ws
+ * @param {string|undefined} reason
+ */
+function failWebsocketConnection (ws, reason) {
+ const { [kController]: controller, [kResponse]: response } = ws
+
+ controller.abort()
+
+ if (response?.socket && !response.socket.destroyed) {
+ response.socket.destroy()
+ }
+
+ if (reason) {
+ fireEvent('error', ws, ErrorEvent, {
+ error: new Error(reason)
+ })
+ }
+}
+
+module.exports = {
+ isEstablished,
+ isClosing,
+ isClosed,
+ fireEvent,
+ isValidSubprotocol,
+ isValidStatusCode,
+ failWebsocketConnection,
+ websocketMessageReceived
+}
+
+
+/***/ }),
+
+/***/ 54284:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+"use strict";
+
+
+const { webidl } = __nccwpck_require__(21744)
+const { DOMException } = __nccwpck_require__(41037)
+const { URLSerializer } = __nccwpck_require__(685)
+const { getGlobalOrigin } = __nccwpck_require__(71246)
+const { staticPropertyDescriptors, states, opcodes, emptyBuffer } = __nccwpck_require__(19188)
+const {
+ kWebSocketURL,
+ kReadyState,
+ kController,
+ kBinaryType,
+ kResponse,
+ kSentClose,
+ kByteParser
+} = __nccwpck_require__(37578)
+const { isEstablished, isClosing, isValidSubprotocol, failWebsocketConnection, fireEvent } = __nccwpck_require__(25515)
+const { establishWebSocketConnection } = __nccwpck_require__(35354)
+const { WebsocketFrameSend } = __nccwpck_require__(25444)
+const { ByteParser } = __nccwpck_require__(11688)
+const { kEnumerableProperty, isBlobLike } = __nccwpck_require__(83983)
+const { getGlobalDispatcher } = __nccwpck_require__(21892)
+const { types } = __nccwpck_require__(73837)
+
+let experimentalWarned = false
+
+// https://websockets.spec.whatwg.org/#interface-definition
+class WebSocket extends EventTarget {
+ #events = {
+ open: null,
+ error: null,
+ close: null,
+ message: null
+ }
+
+ #bufferedAmount = 0
+ #protocol = ''
+ #extensions = ''
+
+ /**
+ * @param {string} url
+ * @param {string|string[]} protocols
+ */
+ constructor (url, protocols = []) {
+ super()
+
+ webidl.argumentLengthCheck(arguments, 1, { header: 'WebSocket constructor' })
+
+ if (!experimentalWarned) {
+ experimentalWarned = true
+ process.emitWarning('WebSockets are experimental, expect them to change at any time.', {
+ code: 'UNDICI-WS'
+ })
+ }
+
+ const options = webidl.converters['DOMString or sequence or WebSocketInit'](protocols)
+
+ url = webidl.converters.USVString(url)
+ protocols = options.protocols
+
+ // 1. Let baseURL be this's relevant settings object's API base URL.
+ const baseURL = getGlobalOrigin()
+
+ // 1. Let urlRecord be the result of applying the URL parser to url with baseURL.
+ let urlRecord
+
+ try {
+ urlRecord = new URL(url, baseURL)
+ } catch (e) {
+ // 3. If urlRecord is failure, then throw a "SyntaxError" DOMException.
+ throw new DOMException(e, 'SyntaxError')
+ }
+
+ // 4. If urlRecord’s scheme is "http", then set urlRecord’s scheme to "ws".
+ if (urlRecord.protocol === 'http:') {
+ urlRecord.protocol = 'ws:'
+ } else if (urlRecord.protocol === 'https:') {
+ // 5. Otherwise, if urlRecord’s scheme is "https", set urlRecord’s scheme to "wss".
+ urlRecord.protocol = 'wss:'
+ }
+
+ // 6. If urlRecord’s scheme is not "ws" or "wss", then throw a "SyntaxError" DOMException.
+ if (urlRecord.protocol !== 'ws:' && urlRecord.protocol !== 'wss:') {
+ throw new DOMException(
+ `Expected a ws: or wss: protocol, got ${urlRecord.protocol}`,
+ 'SyntaxError'
+ )
+ }
+
+ // 7. If urlRecord’s fragment is non-null, then throw a "SyntaxError"
+ // DOMException.
+ if (urlRecord.hash || urlRecord.href.endsWith('#')) {
+ throw new DOMException('Got fragment', 'SyntaxError')
+ }
+
+ // 8. If protocols is a string, set protocols to a sequence consisting
+ // of just that string.
+ if (typeof protocols === 'string') {
+ protocols = [protocols]
+ }
+
+ // 9. If any of the values in protocols occur more than once or otherwise
+ // fail to match the requirements for elements that comprise the value
+ // of `Sec-WebSocket-Protocol` fields as defined by The WebSocket
+ // protocol, then throw a "SyntaxError" DOMException.
+ if (protocols.length !== new Set(protocols.map(p => p.toLowerCase())).size) {
+ throw new DOMException('Invalid Sec-WebSocket-Protocol value', 'SyntaxError')
+ }
+
+ if (protocols.length > 0 && !protocols.every(p => isValidSubprotocol(p))) {
+ throw new DOMException('Invalid Sec-WebSocket-Protocol value', 'SyntaxError')
+ }
+
+ // 10. Set this's url to urlRecord.
+ this[kWebSocketURL] = new URL(urlRecord.href)
+
+ // 11. Let client be this's relevant settings object.
+
+ // 12. Run this step in parallel:
+
+ // 1. Establish a WebSocket connection given urlRecord, protocols,
+ // and client.
+ this[kController] = establishWebSocketConnection(
+ urlRecord,
+ protocols,
+ this,
+ (response) => this.#onConnectionEstablished(response),
+ options
+ )
+
+ // Each WebSocket object has an associated ready state, which is a
+ // number representing the state of the connection. Initially it must
+ // be CONNECTING (0).
+ this[kReadyState] = WebSocket.CONNECTING
+
+ // The extensions attribute must initially return the empty string.
+
+ // The protocol attribute must initially return the empty string.
+
+ // Each WebSocket object has an associated binary type, which is a
+ // BinaryType. Initially it must be "blob".
+ this[kBinaryType] = 'blob'
+ }
+
+ /**
+ * @see https://websockets.spec.whatwg.org/#dom-websocket-close
+ * @param {number|undefined} code
+ * @param {string|undefined} reason
+ */
+ close (code = undefined, reason = undefined) {
+ webidl.brandCheck(this, WebSocket)
+
+ if (code !== undefined) {
+ code = webidl.converters['unsigned short'](code, { clamp: true })
+ }
+
+ if (reason !== undefined) {
+ reason = webidl.converters.USVString(reason)
+ }
+
+ // 1. If code is present, but is neither an integer equal to 1000 nor an
+ // integer in the range 3000 to 4999, inclusive, throw an
+ // "InvalidAccessError" DOMException.
+ if (code !== undefined) {
+ if (code !== 1000 && (code < 3000 || code > 4999)) {
+ throw new DOMException('invalid code', 'InvalidAccessError')
+ }
+ }
+
+ let reasonByteLength = 0
+
+ // 2. If reason is present, then run these substeps:
+ if (reason !== undefined) {
+ // 1. Let reasonBytes be the result of encoding reason.
+ // 2. If reasonBytes is longer than 123 bytes, then throw a
+ // "SyntaxError" DOMException.
+ reasonByteLength = Buffer.byteLength(reason)
+
+ if (reasonByteLength > 123) {
+ throw new DOMException(
+ `Reason must be less than 123 bytes; received ${reasonByteLength}`,
+ 'SyntaxError'
+ )
+ }
+ }
+
+ // 3. Run the first matching steps from the following list:
+ if (this[kReadyState] === WebSocket.CLOSING || this[kReadyState] === WebSocket.CLOSED) {
+ // If this's ready state is CLOSING (2) or CLOSED (3)
+ // Do nothing.
+ } else if (!isEstablished(this)) {
+ // If the WebSocket connection is not yet established
+ // Fail the WebSocket connection and set this's ready state
+ // to CLOSING (2).
+ failWebsocketConnection(this, 'Connection was closed before it was established.')
+ this[kReadyState] = WebSocket.CLOSING
+ } else if (!isClosing(this)) {
+ // If the WebSocket closing handshake has not yet been started
+ // Start the WebSocket closing handshake and set this's ready
+ // state to CLOSING (2).
+ // - If neither code nor reason is present, the WebSocket Close
+ // message must not have a body.
+ // - If code is present, then the status code to use in the
+ // WebSocket Close message must be the integer given by code.
+ // - If reason is also present, then reasonBytes must be
+ // provided in the Close message after the status code.
+
+ const frame = new WebsocketFrameSend()
+
+ // If neither code nor reason is present, the WebSocket Close
+ // message must not have a body.
+
+ // If code is present, then the status code to use in the
+ // WebSocket Close message must be the integer given by code.
+ if (code !== undefined && reason === undefined) {
+ frame.frameData = Buffer.allocUnsafe(2)
+ frame.frameData.writeUInt16BE(code, 0)
+ } else if (code !== undefined && reason !== undefined) {
+ // If reason is also present, then reasonBytes must be
+ // provided in the Close message after the status code.
+ frame.frameData = Buffer.allocUnsafe(2 + reasonByteLength)
+ frame.frameData.writeUInt16BE(code, 0)
+ // the body MAY contain UTF-8-encoded data with value /reason/
+ frame.frameData.write(reason, 2, 'utf-8')
+ } else {
+ frame.frameData = emptyBuffer
+ }
+
+ /** @type {import('stream').Duplex} */
+ const socket = this[kResponse].socket
+
+ socket.write(frame.createFrame(opcodes.CLOSE), (err) => {
+ if (!err) {
+ this[kSentClose] = true
+ }
+ })
+
+ // Upon either sending or receiving a Close control frame, it is said
+ // that _The WebSocket Closing Handshake is Started_ and that the
+ // WebSocket connection is in the CLOSING state.
+ this[kReadyState] = states.CLOSING
+ } else {
+ // Otherwise
+ // Set this's ready state to CLOSING (2).
+ this[kReadyState] = WebSocket.CLOSING
+ }
+ }
+
+ /**
+ * @see https://websockets.spec.whatwg.org/#dom-websocket-send
+ * @param {NodeJS.TypedArray|ArrayBuffer|Blob|string} data
+ */
+ send (data) {
+ webidl.brandCheck(this, WebSocket)
+
+ webidl.argumentLengthCheck(arguments, 1, { header: 'WebSocket.send' })
+
+ data = webidl.converters.WebSocketSendData(data)
+
+ // 1. If this's ready state is CONNECTING, then throw an
+ // "InvalidStateError" DOMException.
+ if (this[kReadyState] === WebSocket.CONNECTING) {
+ throw new DOMException('Sent before connected.', 'InvalidStateError')
+ }
+
+ // 2. Run the appropriate set of steps from the following list:
+ // https://datatracker.ietf.org/doc/html/rfc6455#section-6.1
+ // https://datatracker.ietf.org/doc/html/rfc6455#section-5.2
+
+ if (!isEstablished(this) || isClosing(this)) {
+ return
+ }
+
+ /** @type {import('stream').Duplex} */
+ const socket = this[kResponse].socket
+
+ // If data is a string
+ if (typeof data === 'string') {
+ // If the WebSocket connection is established and the WebSocket
+ // closing handshake has not yet started, then the user agent
+ // must send a WebSocket Message comprised of the data argument
+ // using a text frame opcode; if the data cannot be sent, e.g.
+ // because it would need to be buffered but the buffer is full,
+ // the user agent must flag the WebSocket as full and then close
+ // the WebSocket connection. Any invocation of this method with a
+ // string argument that does not throw an exception must increase
+ // the bufferedAmount attribute by the number of bytes needed to
+ // express the argument as UTF-8.
+
+ const value = Buffer.from(data)
+ const frame = new WebsocketFrameSend(value)
+ const buffer = frame.createFrame(opcodes.TEXT)
+
+ this.#bufferedAmount += value.byteLength
+ socket.write(buffer, () => {
+ this.#bufferedAmount -= value.byteLength
+ })
+ } else if (types.isArrayBuffer(data)) {
+ // If the WebSocket connection is established, and the WebSocket
+ // closing handshake has not yet started, then the user agent must
+ // send a WebSocket Message comprised of data using a binary frame
+ // opcode; if the data cannot be sent, e.g. because it would need
+ // to be buffered but the buffer is full, the user agent must flag
+ // the WebSocket as full and then close the WebSocket connection.
+ // The data to be sent is the data stored in the buffer described
+ // by the ArrayBuffer object. Any invocation of this method with an
+ // ArrayBuffer argument that does not throw an exception must
+ // increase the bufferedAmount attribute by the length of the
+ // ArrayBuffer in bytes.
+
+ const value = Buffer.from(data)
+ const frame = new WebsocketFrameSend(value)
+ const buffer = frame.createFrame(opcodes.BINARY)
+
+ this.#bufferedAmount += value.byteLength
+ socket.write(buffer, () => {
+ this.#bufferedAmount -= value.byteLength
+ })
+ } else if (ArrayBuffer.isView(data)) {
+ // If the WebSocket connection is established, and the WebSocket
+ // closing handshake has not yet started, then the user agent must
+ // send a WebSocket Message comprised of data using a binary frame
+ // opcode; if the data cannot be sent, e.g. because it would need to
+ // be buffered but the buffer is full, the user agent must flag the
+ // WebSocket as full and then close the WebSocket connection. The
+ // data to be sent is the data stored in the section of the buffer
+ // described by the ArrayBuffer object that data references. Any
+ // invocation of this method with this kind of argument that does
+ // not throw an exception must increase the bufferedAmount attribute
+ // by the length of data’s buffer in bytes.
+
+ const ab = Buffer.from(data, data.byteOffset, data.byteLength)
+
+ const frame = new WebsocketFrameSend(ab)
+ const buffer = frame.createFrame(opcodes.BINARY)
+
+ this.#bufferedAmount += ab.byteLength
+ socket.write(buffer, () => {
+ this.#bufferedAmount -= ab.byteLength
+ })
+ } else if (isBlobLike(data)) {
+ // If the WebSocket connection is established, and the WebSocket
+ // closing handshake has not yet started, then the user agent must
+ // send a WebSocket Message comprised of data using a binary frame
+ // opcode; if the data cannot be sent, e.g. because it would need to
+ // be buffered but the buffer is full, the user agent must flag the
+ // WebSocket as full and then close the WebSocket connection. The data
+ // to be sent is the raw data represented by the Blob object. Any
+ // invocation of this method with a Blob argument that does not throw
+ // an exception must increase the bufferedAmount attribute by the size
+ // of the Blob object’s raw data, in bytes.
+
+ const frame = new WebsocketFrameSend()
+
+ data.arrayBuffer().then((ab) => {
+ const value = Buffer.from(ab)
+ frame.frameData = value
+ const buffer = frame.createFrame(opcodes.BINARY)
+
+ this.#bufferedAmount += value.byteLength
+ socket.write(buffer, () => {
+ this.#bufferedAmount -= value.byteLength
+ })
+ })
+ }
+ }
+
+ get readyState () {
+ webidl.brandCheck(this, WebSocket)
+
+ // The readyState getter steps are to return this's ready state.
+ return this[kReadyState]
+ }
+
+ get bufferedAmount () {
+ webidl.brandCheck(this, WebSocket)
+
+ return this.#bufferedAmount
+ }
+
+ get url () {
+ webidl.brandCheck(this, WebSocket)
+
+ // The url getter steps are to return this's url, serialized.
+ return URLSerializer(this[kWebSocketURL])
+ }
+
+ get extensions () {
+ webidl.brandCheck(this, WebSocket)
+
+ return this.#extensions
+ }
+
+ get protocol () {
+ webidl.brandCheck(this, WebSocket)
+
+ return this.#protocol
+ }
+
+ get onopen () {
+ webidl.brandCheck(this, WebSocket)
+
+ return this.#events.open
+ }
+
+ set onopen (fn) {
+ webidl.brandCheck(this, WebSocket)
+
+ if (this.#events.open) {
+ this.removeEventListener('open', this.#events.open)
+ }
+
+ if (typeof fn === 'function') {
+ this.#events.open = fn
+ this.addEventListener('open', fn)
+ } else {
+ this.#events.open = null
+ }
+ }
+
+ get onerror () {
+ webidl.brandCheck(this, WebSocket)
+
+ return this.#events.error
+ }
+
+ set onerror (fn) {
+ webidl.brandCheck(this, WebSocket)
+
+ if (this.#events.error) {
+ this.removeEventListener('error', this.#events.error)
+ }
+
+ if (typeof fn === 'function') {
+ this.#events.error = fn
+ this.addEventListener('error', fn)
+ } else {
+ this.#events.error = null
+ }
+ }
+
+ get onclose () {
+ webidl.brandCheck(this, WebSocket)
+
+ return this.#events.close
+ }
+
+ set onclose (fn) {
+ webidl.brandCheck(this, WebSocket)
+
+ if (this.#events.close) {
+ this.removeEventListener('close', this.#events.close)
+ }
+
+ if (typeof fn === 'function') {
+ this.#events.close = fn
+ this.addEventListener('close', fn)
+ } else {
+ this.#events.close = null
+ }
+ }
+
+ get onmessage () {
+ webidl.brandCheck(this, WebSocket)
+
+ return this.#events.message
+ }
+
+ set onmessage (fn) {
+ webidl.brandCheck(this, WebSocket)
+
+ if (this.#events.message) {
+ this.removeEventListener('message', this.#events.message)
+ }
+
+ if (typeof fn === 'function') {
+ this.#events.message = fn
+ this.addEventListener('message', fn)
+ } else {
+ this.#events.message = null
+ }
+ }
+
+ get binaryType () {
+ webidl.brandCheck(this, WebSocket)
+
+ return this[kBinaryType]
+ }
+
+ set binaryType (type) {
+ webidl.brandCheck(this, WebSocket)
+
+ if (type !== 'blob' && type !== 'arraybuffer') {
+ this[kBinaryType] = 'blob'
+ } else {
+ this[kBinaryType] = type
+ }
+ }
+
+ /**
+ * @see https://websockets.spec.whatwg.org/#feedback-from-the-protocol
+ */
+ #onConnectionEstablished (response) {
+ // processResponse is called when the "response’s header list has been received and initialized."
+ // once this happens, the connection is open
+ this[kResponse] = response
+
+ const parser = new ByteParser(this)
+ parser.on('drain', function onParserDrain () {
+ this.ws[kResponse].socket.resume()
+ })
+
+ response.socket.ws = this
+ this[kByteParser] = parser
+
+ // 1. Change the ready state to OPEN (1).
+ this[kReadyState] = states.OPEN
+
+ // 2. Change the extensions attribute’s value to the extensions in use, if
+ // it is not the null value.
+ // https://datatracker.ietf.org/doc/html/rfc6455#section-9.1
+ const extensions = response.headersList.get('sec-websocket-extensions')
+
+ if (extensions !== null) {
+ this.#extensions = extensions
+ }
+
+ // 3. Change the protocol attribute’s value to the subprotocol in use, if
+ // it is not the null value.
+ // https://datatracker.ietf.org/doc/html/rfc6455#section-1.9
+ const protocol = response.headersList.get('sec-websocket-protocol')
+
+ if (protocol !== null) {
+ this.#protocol = protocol
+ }
+
+ // 4. Fire an event named open at the WebSocket object.
+ fireEvent('open', this)
+ }
+}
+
+// https://websockets.spec.whatwg.org/#dom-websocket-connecting
+WebSocket.CONNECTING = WebSocket.prototype.CONNECTING = states.CONNECTING
+// https://websockets.spec.whatwg.org/#dom-websocket-open
+WebSocket.OPEN = WebSocket.prototype.OPEN = states.OPEN
+// https://websockets.spec.whatwg.org/#dom-websocket-closing
+WebSocket.CLOSING = WebSocket.prototype.CLOSING = states.CLOSING
+// https://websockets.spec.whatwg.org/#dom-websocket-closed
+WebSocket.CLOSED = WebSocket.prototype.CLOSED = states.CLOSED
+
+Object.defineProperties(WebSocket.prototype, {
+ CONNECTING: staticPropertyDescriptors,
+ OPEN: staticPropertyDescriptors,
+ CLOSING: staticPropertyDescriptors,
+ CLOSED: staticPropertyDescriptors,
+ url: kEnumerableProperty,
+ readyState: kEnumerableProperty,
+ bufferedAmount: kEnumerableProperty,
+ onopen: kEnumerableProperty,
+ onerror: kEnumerableProperty,
+ onclose: kEnumerableProperty,
+ close: kEnumerableProperty,
+ onmessage: kEnumerableProperty,
+ binaryType: kEnumerableProperty,
+ send: kEnumerableProperty,
+ extensions: kEnumerableProperty,
+ protocol: kEnumerableProperty,
+ [Symbol.toStringTag]: {
+ value: 'WebSocket',
+ writable: false,
+ enumerable: false,
+ configurable: true
+ }
+})
+
+Object.defineProperties(WebSocket, {
+ CONNECTING: staticPropertyDescriptors,
+ OPEN: staticPropertyDescriptors,
+ CLOSING: staticPropertyDescriptors,
+ CLOSED: staticPropertyDescriptors
+})
+
+webidl.converters['sequence'] = webidl.sequenceConverter(
+ webidl.converters.DOMString
+)
+
+webidl.converters['DOMString or sequence'] = function (V) {
+ if (webidl.util.Type(V) === 'Object' && Symbol.iterator in V) {
+ return webidl.converters['sequence'](V)
+ }
+
+ return webidl.converters.DOMString(V)
+}
+
+// This implements the propsal made in https://github.com/whatwg/websockets/issues/42
+webidl.converters.WebSocketInit = webidl.dictionaryConverter([
+ {
+ key: 'protocols',
+ converter: webidl.converters['DOMString or sequence'],
+ get defaultValue () {
+ return []
+ }
+ },
+ {
+ key: 'dispatcher',
+ converter: (V) => V,
+ get defaultValue () {
+ return getGlobalDispatcher()
+ }
+ },
+ {
+ key: 'headers',
+ converter: webidl.nullableConverter(webidl.converters.HeadersInit)
+ }
+])
+
+webidl.converters['DOMString or sequence or WebSocketInit'] = function (V) {
+ if (webidl.util.Type(V) === 'Object' && !(Symbol.iterator in V)) {
+ return webidl.converters.WebSocketInit(V)
+ }
+
+ return { protocols: webidl.converters['DOMString or sequence'](V) }
+}
+
+webidl.converters.WebSocketSendData = function (V) {
+ if (webidl.util.Type(V) === 'Object') {
+ if (isBlobLike(V)) {
+ return webidl.converters.Blob(V, { strict: false })
+ }
+
+ if (ArrayBuffer.isView(V) || types.isAnyArrayBuffer(V)) {
+ return webidl.converters.BufferSource(V)
+ }
+ }
+
+ return webidl.converters.USVString(V)
+}
+
+module.exports = {
+ WebSocket
+}
+
+
+/***/ }),
+
+/***/ 45030:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+
+function getUserAgent() {
+ if (typeof navigator === "object" && "userAgent" in navigator) {
+ return navigator.userAgent;
+ }
+
+ if (typeof process === "object" && "version" in process) {
+ return `Node.js/${process.version.substr(1)} (${process.platform}; ${process.arch})`;
+ }
+
+ return "";
+}
+
+exports.getUserAgent = getUserAgent;
+//# sourceMappingURL=index.js.map
+
+
+/***/ }),
+
+/***/ 9046:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+
+exports.fromCallback = function (fn) {
+ return Object.defineProperty(function (...args) {
+ if (typeof args[args.length - 1] === 'function') fn.apply(this, args)
+ else {
+ return new Promise((resolve, reject) => {
+ fn.call(
+ this,
+ ...args,
+ (err, res) => (err != null) ? reject(err) : resolve(res)
+ )
+ })
+ }
+ }, 'name', { value: fn.name })
+}
+
+exports.fromPromise = function (fn) {
+ return Object.defineProperty(function (...args) {
+ const cb = args[args.length - 1]
+ if (typeof cb !== 'function') return fn.apply(this, args)
+ else fn.apply(this, args.slice(0, -1)).then(r => cb(null, r), cb)
+ }, 'name', { value: fn.name })
+}
+
+
+/***/ }),
+
+/***/ 75840:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+Object.defineProperty(exports, "v1", ({
+ enumerable: true,
+ get: function () {
+ return _v.default;
+ }
+}));
+Object.defineProperty(exports, "v3", ({
+ enumerable: true,
+ get: function () {
+ return _v2.default;
+ }
+}));
+Object.defineProperty(exports, "v4", ({
+ enumerable: true,
+ get: function () {
+ return _v3.default;
+ }
+}));
+Object.defineProperty(exports, "v5", ({
+ enumerable: true,
+ get: function () {
+ return _v4.default;
+ }
+}));
+Object.defineProperty(exports, "NIL", ({
+ enumerable: true,
+ get: function () {
+ return _nil.default;
+ }
+}));
+Object.defineProperty(exports, "version", ({
+ enumerable: true,
+ get: function () {
+ return _version.default;
+ }
+}));
+Object.defineProperty(exports, "validate", ({
+ enumerable: true,
+ get: function () {
+ return _validate.default;
+ }
+}));
+Object.defineProperty(exports, "stringify", ({
+ enumerable: true,
+ get: function () {
+ return _stringify.default;
+ }
+}));
+Object.defineProperty(exports, "parse", ({
+ enumerable: true,
+ get: function () {
+ return _parse.default;
+ }
+}));
+
+var _v = _interopRequireDefault(__nccwpck_require__(78628));
+
+var _v2 = _interopRequireDefault(__nccwpck_require__(86409));
+
+var _v3 = _interopRequireDefault(__nccwpck_require__(85122));
+
+var _v4 = _interopRequireDefault(__nccwpck_require__(79120));
+
+var _nil = _interopRequireDefault(__nccwpck_require__(25332));
+
+var _version = _interopRequireDefault(__nccwpck_require__(81595));
+
+var _validate = _interopRequireDefault(__nccwpck_require__(66900));
+
+var _stringify = _interopRequireDefault(__nccwpck_require__(18950));
+
+var _parse = _interopRequireDefault(__nccwpck_require__(62746));
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+/***/ }),
+
+/***/ 4569:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports["default"] = void 0;
+
+var _crypto = _interopRequireDefault(__nccwpck_require__(6113));
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function md5(bytes) {
+ if (Array.isArray(bytes)) {
+ bytes = Buffer.from(bytes);
+ } else if (typeof bytes === 'string') {
+ bytes = Buffer.from(bytes, 'utf8');
+ }
+
+ return _crypto.default.createHash('md5').update(bytes).digest();
+}
+
+var _default = md5;
+exports["default"] = _default;
+
+/***/ }),
+
+/***/ 25332:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports["default"] = void 0;
+var _default = '00000000-0000-0000-0000-000000000000';
+exports["default"] = _default;
+
+/***/ }),
+
+/***/ 62746:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports["default"] = void 0;
+
+var _validate = _interopRequireDefault(__nccwpck_require__(66900));
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function parse(uuid) {
+ if (!(0, _validate.default)(uuid)) {
+ throw TypeError('Invalid UUID');
+ }
+
+ let v;
+ const arr = new Uint8Array(16); // Parse ########-....-....-....-............
+
+ arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24;
+ arr[1] = v >>> 16 & 0xff;
+ arr[2] = v >>> 8 & 0xff;
+ arr[3] = v & 0xff; // Parse ........-####-....-....-............
+
+ arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8;
+ arr[5] = v & 0xff; // Parse ........-....-####-....-............
+
+ arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8;
+ arr[7] = v & 0xff; // Parse ........-....-....-####-............
+
+ arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8;
+ arr[9] = v & 0xff; // Parse ........-....-....-....-############
+ // (Use "/" to avoid 32-bit truncation when bit-shifting high-order bytes)
+
+ arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff;
+ arr[11] = v / 0x100000000 & 0xff;
+ arr[12] = v >>> 24 & 0xff;
+ arr[13] = v >>> 16 & 0xff;
+ arr[14] = v >>> 8 & 0xff;
+ arr[15] = v & 0xff;
+ return arr;
+}
+
+var _default = parse;
+exports["default"] = _default;
+
+/***/ }),
+
+/***/ 40814:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports["default"] = void 0;
+var _default = /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;
+exports["default"] = _default;
+
+/***/ }),
+
+/***/ 50807:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports["default"] = rng;
+
+var _crypto = _interopRequireDefault(__nccwpck_require__(6113));
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+const rnds8Pool = new Uint8Array(256); // # of random values to pre-allocate
+
+let poolPtr = rnds8Pool.length;
+
+function rng() {
+ if (poolPtr > rnds8Pool.length - 16) {
+ _crypto.default.randomFillSync(rnds8Pool);
+
+ poolPtr = 0;
+ }
+
+ return rnds8Pool.slice(poolPtr, poolPtr += 16);
+}
+
+/***/ }),
+
+/***/ 85274:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports["default"] = void 0;
+
+var _crypto = _interopRequireDefault(__nccwpck_require__(6113));
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function sha1(bytes) {
+ if (Array.isArray(bytes)) {
+ bytes = Buffer.from(bytes);
+ } else if (typeof bytes === 'string') {
+ bytes = Buffer.from(bytes, 'utf8');
+ }
+
+ return _crypto.default.createHash('sha1').update(bytes).digest();
+}
+
+var _default = sha1;
+exports["default"] = _default;
+
+/***/ }),
+
+/***/ 18950:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports["default"] = void 0;
+
+var _validate = _interopRequireDefault(__nccwpck_require__(66900));
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+/**
+ * Convert array of 16 byte values to UUID string format of the form:
+ * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
+ */
+const byteToHex = [];
+
+for (let i = 0; i < 256; ++i) {
+ byteToHex.push((i + 0x100).toString(16).substr(1));
+}
+
+function stringify(arr, offset = 0) {
+ // Note: Be careful editing this code! It's been tuned for performance
+ // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434
+ const uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one
+ // of the following:
+ // - One or more input array values don't map to a hex octet (leading to
+ // "undefined" in the uuid)
+ // - Invalid input values for the RFC `version` or `variant` fields
+
+ if (!(0, _validate.default)(uuid)) {
+ throw TypeError('Stringified UUID is invalid');
+ }
+
+ return uuid;
+}
+
+var _default = stringify;
+exports["default"] = _default;
+
+/***/ }),
+
+/***/ 78628:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports["default"] = void 0;
+
+var _rng = _interopRequireDefault(__nccwpck_require__(50807));
+
+var _stringify = _interopRequireDefault(__nccwpck_require__(18950));
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+// **`v1()` - Generate time-based UUID**
+//
+// Inspired by https://github.com/LiosK/UUID.js
+// and http://docs.python.org/library/uuid.html
+let _nodeId;
+
+let _clockseq; // Previous uuid creation time
+
+
+let _lastMSecs = 0;
+let _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details
+
+function v1(options, buf, offset) {
+ let i = buf && offset || 0;
+ const b = buf || new Array(16);
+ options = options || {};
+ let node = options.node || _nodeId;
+ let clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not
+ // specified. We do this lazily to minimize issues related to insufficient
+ // system entropy. See #189
+
+ if (node == null || clockseq == null) {
+ const seedBytes = options.random || (options.rng || _rng.default)();
+
+ if (node == null) {
+ // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1)
+ node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]];
+ }
+
+ if (clockseq == null) {
+ // Per 4.2.2, randomize (14 bit) clockseq
+ clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff;
+ }
+ } // UUID timestamps are 100 nano-second units since the Gregorian epoch,
+ // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so
+ // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs'
+ // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00.
+
+
+ let msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock
+ // cycle to simulate higher resolution clock
+
+ let nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs)
+
+ const dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression
+
+ if (dt < 0 && options.clockseq === undefined) {
+ clockseq = clockseq + 1 & 0x3fff;
+ } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new
+ // time interval
+
+
+ if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) {
+ nsecs = 0;
+ } // Per 4.2.1.2 Throw error if too many uuids are requested
+
+
+ if (nsecs >= 10000) {
+ throw new Error("uuid.v1(): Can't create more than 10M uuids/sec");
+ }
+
+ _lastMSecs = msecs;
+ _lastNSecs = nsecs;
+ _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch
+
+ msecs += 12219292800000; // `time_low`
+
+ const tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;
+ b[i++] = tl >>> 24 & 0xff;
+ b[i++] = tl >>> 16 & 0xff;
+ b[i++] = tl >>> 8 & 0xff;
+ b[i++] = tl & 0xff; // `time_mid`
+
+ const tmh = msecs / 0x100000000 * 10000 & 0xfffffff;
+ b[i++] = tmh >>> 8 & 0xff;
+ b[i++] = tmh & 0xff; // `time_high_and_version`
+
+ b[i++] = tmh >>> 24 & 0xf | 0x10; // include version
+
+ b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant)
+
+ b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low`
+
+ b[i++] = clockseq & 0xff; // `node`
+
+ for (let n = 0; n < 6; ++n) {
+ b[i + n] = node[n];
+ }
+
+ return buf || (0, _stringify.default)(b);
+}
+
+var _default = v1;
+exports["default"] = _default;
+
+/***/ }),
+
+/***/ 86409:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports["default"] = void 0;
+
+var _v = _interopRequireDefault(__nccwpck_require__(65998));
+
+var _md = _interopRequireDefault(__nccwpck_require__(4569));
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+const v3 = (0, _v.default)('v3', 0x30, _md.default);
+var _default = v3;
+exports["default"] = _default;
+
+/***/ }),
+
+/***/ 65998:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports["default"] = _default;
+exports.URL = exports.DNS = void 0;
+
+var _stringify = _interopRequireDefault(__nccwpck_require__(18950));
+
+var _parse = _interopRequireDefault(__nccwpck_require__(62746));
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function stringToBytes(str) {
+ str = unescape(encodeURIComponent(str)); // UTF8 escape
+
+ const bytes = [];
+
+ for (let i = 0; i < str.length; ++i) {
+ bytes.push(str.charCodeAt(i));
+ }
+
+ return bytes;
+}
+
+const DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8';
+exports.DNS = DNS;
+const URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8';
+exports.URL = URL;
+
+function _default(name, version, hashfunc) {
+ function generateUUID(value, namespace, buf, offset) {
+ if (typeof value === 'string') {
+ value = stringToBytes(value);
+ }
+
+ if (typeof namespace === 'string') {
+ namespace = (0, _parse.default)(namespace);
+ }
+
+ if (namespace.length !== 16) {
+ throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)');
+ } // Compute hash of namespace and value, Per 4.3
+ // Future: Use spread syntax when supported on all platforms, e.g. `bytes =
+ // hashfunc([...namespace, ... value])`
+
+
+ let bytes = new Uint8Array(16 + value.length);
+ bytes.set(namespace);
+ bytes.set(value, namespace.length);
+ bytes = hashfunc(bytes);
+ bytes[6] = bytes[6] & 0x0f | version;
+ bytes[8] = bytes[8] & 0x3f | 0x80;
+
+ if (buf) {
+ offset = offset || 0;
+
+ for (let i = 0; i < 16; ++i) {
+ buf[offset + i] = bytes[i];
+ }
+
+ return buf;
+ }
+
+ return (0, _stringify.default)(bytes);
+ } // Function#name is not settable on some platforms (#270)
+
+
+ try {
+ generateUUID.name = name; // eslint-disable-next-line no-empty
+ } catch (err) {} // For CommonJS default export support
+
+
+ generateUUID.DNS = DNS;
+ generateUUID.URL = URL;
+ return generateUUID;
+}
+
+/***/ }),
+
+/***/ 85122:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports["default"] = void 0;
+
+var _rng = _interopRequireDefault(__nccwpck_require__(50807));
+
+var _stringify = _interopRequireDefault(__nccwpck_require__(18950));
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function v4(options, buf, offset) {
+ options = options || {};
+
+ const rnds = options.random || (options.rng || _rng.default)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`
+
+
+ rnds[6] = rnds[6] & 0x0f | 0x40;
+ rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided
+
+ if (buf) {
+ offset = offset || 0;
+
+ for (let i = 0; i < 16; ++i) {
+ buf[offset + i] = rnds[i];
+ }
+
+ return buf;
+ }
+
+ return (0, _stringify.default)(rnds);
+}
+
+var _default = v4;
+exports["default"] = _default;
+
+/***/ }),
+
+/***/ 79120:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports["default"] = void 0;
+
+var _v = _interopRequireDefault(__nccwpck_require__(65998));
+
+var _sha = _interopRequireDefault(__nccwpck_require__(85274));
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+const v5 = (0, _v.default)('v5', 0x50, _sha.default);
+var _default = v5;
+exports["default"] = _default;
+
+/***/ }),
+
+/***/ 66900:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports["default"] = void 0;
+
+var _regex = _interopRequireDefault(__nccwpck_require__(40814));
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function validate(uuid) {
+ return typeof uuid === 'string' && _regex.default.test(uuid);
+}
+
+var _default = validate;
+exports["default"] = _default;
+
+/***/ }),
+
+/***/ 81595:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports["default"] = void 0;
+
+var _validate = _interopRequireDefault(__nccwpck_require__(66900));
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function version(uuid) {
+ if (!(0, _validate.default)(uuid)) {
+ throw TypeError('Invalid UUID');
+ }
+
+ return parseInt(uuid.substr(14, 1), 16);
+}
+
+var _default = version;
+exports["default"] = _default;
+
+/***/ }),
+
+/***/ 62940:
+/***/ ((module) => {
+
+// Returns a wrapper function that returns a wrapped callback
+// The wrapper function should do some stuff, and return a
+// presumably different callback function.
+// This makes sure that own properties are retained, so that
+// decorations and such are not lost along the way.
+module.exports = wrappy
+function wrappy (fn, cb) {
+ if (fn && cb) return wrappy(fn)(cb)
+
+ if (typeof fn !== 'function')
+ throw new TypeError('need wrapper function')
+
+ Object.keys(fn).forEach(function (k) {
+ wrapper[k] = fn[k]
+ })
+
+ return wrapper
+
+ function wrapper() {
+ var args = new Array(arguments.length)
+ for (var i = 0; i < args.length; i++) {
+ args[i] = arguments[i]
+ }
+ var ret = fn.apply(this, args)
+ var cb = args[args.length-1]
+ if (typeof ret === 'function' && ret !== cb) {
+ Object.keys(cb).forEach(function (k) {
+ ret[k] = cb[k]
+ })
+ }
+ return ret
+ }
+}
+
+
+/***/ }),
+
+/***/ 39491:
+/***/ ((module) => {
+
+"use strict";
+module.exports = require("assert");
+
+/***/ }),
+
+/***/ 50852:
+/***/ ((module) => {
+
+"use strict";
+module.exports = require("async_hooks");
+
+/***/ }),
+
+/***/ 14300:
+/***/ ((module) => {
+
+"use strict";
+module.exports = require("buffer");
+
+/***/ }),
+
+/***/ 32081:
+/***/ ((module) => {
+
+"use strict";
+module.exports = require("child_process");
+
+/***/ }),
+
+/***/ 96206:
+/***/ ((module) => {
+
+"use strict";
+module.exports = require("console");
+
+/***/ }),
+
+/***/ 22057:
+/***/ ((module) => {
+
+"use strict";
+module.exports = require("constants");
+
+/***/ }),
+
+/***/ 6113:
+/***/ ((module) => {
+
+"use strict";
+module.exports = require("crypto");
+
+/***/ }),
+
+/***/ 67643:
+/***/ ((module) => {
+
+"use strict";
+module.exports = require("diagnostics_channel");
+
+/***/ }),
+
+/***/ 82361:
+/***/ ((module) => {
+
+"use strict";
+module.exports = require("events");
+
+/***/ }),
+
+/***/ 57147:
+/***/ ((module) => {
+
+"use strict";
+module.exports = require("fs");
+
+/***/ }),
+
+/***/ 73292:
+/***/ ((module) => {
+
+"use strict";
+module.exports = require("fs/promises");
+
+/***/ }),
+
+/***/ 13685:
+/***/ ((module) => {
+
+"use strict";
+module.exports = require("http");
+
+/***/ }),
+
+/***/ 85158:
+/***/ ((module) => {
+
+"use strict";
+module.exports = require("http2");
+
+/***/ }),
+
+/***/ 95687:
+/***/ ((module) => {
+
+"use strict";
+module.exports = require("https");
+
+/***/ }),
+
+/***/ 41808:
+/***/ ((module) => {
+
+"use strict";
+module.exports = require("net");
+
+/***/ }),
+
+/***/ 15673:
+/***/ ((module) => {
+
+"use strict";
+module.exports = require("node:events");
+
+/***/ }),
+
+/***/ 84492:
+/***/ ((module) => {
+
+"use strict";
+module.exports = require("node:stream");
+
+/***/ }),
+
+/***/ 47261:
+/***/ ((module) => {
+
+"use strict";
+module.exports = require("node:util");
+
+/***/ }),
+
+/***/ 22037:
+/***/ ((module) => {
+
+"use strict";
+module.exports = require("os");
+
+/***/ }),
+
+/***/ 71017:
+/***/ ((module) => {
+
+"use strict";
+module.exports = require("path");
+
+/***/ }),
+
+/***/ 4074:
+/***/ ((module) => {
+
+"use strict";
+module.exports = require("perf_hooks");
+
+/***/ }),
+
+/***/ 77282:
+/***/ ((module) => {
+
+"use strict";
+module.exports = require("process");
+
+/***/ }),
+
+/***/ 63477:
+/***/ ((module) => {
+
+"use strict";
+module.exports = require("querystring");
+
+/***/ }),
+
+/***/ 12781:
+/***/ ((module) => {
+
+"use strict";
+module.exports = require("stream");
+
+/***/ }),
+
+/***/ 35356:
+/***/ ((module) => {
+
+"use strict";
+module.exports = require("stream/web");
+
+/***/ }),
+
+/***/ 71576:
+/***/ ((module) => {
+
+"use strict";
+module.exports = require("string_decoder");
+
+/***/ }),
+
+/***/ 24404:
+/***/ ((module) => {
+
+"use strict";
+module.exports = require("tls");
+
+/***/ }),
+
+/***/ 76224:
+/***/ ((module) => {
+
+"use strict";
+module.exports = require("tty");
+
+/***/ }),
+
+/***/ 57310:
+/***/ ((module) => {
+
+"use strict";
+module.exports = require("url");
+
+/***/ }),
+
+/***/ 73837:
+/***/ ((module) => {
+
+"use strict";
+module.exports = require("util");
+
+/***/ }),
+
+/***/ 29830:
+/***/ ((module) => {
+
+"use strict";
+module.exports = require("util/types");
+
+/***/ }),
+
+/***/ 71267:
+/***/ ((module) => {
+
+"use strict";
+module.exports = require("worker_threads");
+
+/***/ }),
+
+/***/ 59796:
+/***/ ((module) => {
+
+"use strict";
+module.exports = require("zlib");
+
+/***/ }),
+
+/***/ 3102:
+/***/ ((module) => {
+
+"use strict";
+module.exports = JSON.parse('{"options":{"classFile":"vpn","class":"VpnConnectionBase","interface":"IVpnConnection"},"metrics":{"namespace":"AWS/VPN","dimensions":{"VpnId":"this.vpnId"},"metrics":[{"name":"TunnelState","documentation":"The state of the tunnel. 0 indicates DOWN and 1 indicates UP."},{"name":"TunnelDataIn","documentation":"The bytes received through the VPN tunnel.","type":"count"},{"name":"TunnelDataOut","documentation":"The bytes sent through the VPN tunnel.","type":"count"}]}}');
+
+/***/ }),
+
+/***/ 15278:
+/***/ ((module) => {
+
+"use strict";
+module.exports = JSON.parse('{"metrics":{"namespace":"AWS/Lambda","dimensions":{"FunctionName":"this.functionName"},"metrics":[{"name":"Throttles","documentation":"How often this Lambda is throttled","type":"count"},{"name":"Invocations","documentation":"How often this Lambda is invoked","type":"count"},{"name":"Errors","documentation":"How many invocations of this Lambda fail","type":"count"},{"name":"Duration","documentation":"How long execution of this Lambda takes"}]}}');
+
+/***/ }),
+
+/***/ 46602:
+/***/ ((module) => {
+
+"use strict";
+module.exports = JSON.parse('{"options":{"classFile":"cluster","class":"DatabaseClusterBase","interfaceFile":"cluster-ref","interface":"IDatabaseCluster"},"metrics":{"namespace":"AWS/RDS","dimensions":{"DBClusterIdentifier":"this.clusterIdentifier"},"metrics":[{"name":"CPUUtilization","documentation":"The percentage of CPU utilization."},{"name":"DatabaseConnections","documentation":"The number of database connections in use."},{"name":"Deadlocks","documentation":"The average number of deadlocks in the database per second."},{"name":"EngineUptime","documentation":"The amount of time that the instance has been running, in seconds."},{"name":"FreeableMemory","documentation":"The amount of available random access memory, in bytes."},{"name":"FreeLocalStorage","documentation":"The amount of local storage available, in bytes."},{"name":"NetworkReceiveThroughput","documentation":"The amount of network throughput received from clients by each instance, in bytes per second."},{"name":"NetworkThroughput","documentation":"The amount of network throughput both received from and transmitted to clients by each instance, in bytes per second."},{"name":"NetworkTransmitThroughput","documentation":"The amount of network throughput sent to clients by each instance, in bytes per second."},{"name":"SnapshotStorageUsed","documentation":"The total amount of backup storage in bytes consumed by all Aurora snapshots outside its backup retention window."},{"name":"TotalBackupStorageBilled","documentation":"The total amount of backup storage in bytes for which you are billed."},{"name":"VolumeBytesUsed","documentation":"The amount of storage used by your Aurora DB instance, in bytes."},{"name":"VolumeReadIOPs","documentation":"The number of billed read I/O operations from a cluster volume, reported at 5-minute intervals."},{"name":"VolumeWriteIOPs","documentation":"The number of write disk I/O operations to the cluster volume, reported at 5-minute intervals."}]}}');
+
+/***/ }),
+
+/***/ 48781:
+/***/ ((module) => {
+
+"use strict";
+module.exports = JSON.parse('{"options":{"classFile":"instance","class":"DatabaseInstanceBase","interface":"IDatabaseInstance"},"metrics":{"namespace":"AWS/RDS","dimensions":{"DBInstanceIdentifier":"this.instanceIdentifier"},"metrics":[{"name":"CPUUtilization","documentation":"The percentage of CPU utilization."},{"name":"DatabaseConnections","documentation":"The number of database connections in use."},{"name":"FreeStorageSpace","documentation":"The amount of available storage space."},{"name":"FreeableMemory","documentation":"The amount of available random access memory."},{"name":"WriteIOPS","documentation":"The average number of disk read I/O operations per second."},{"name":"ReadIOPS","documentation":"The average number of disk write I/O operations per second."}]}}');
+
+/***/ }),
+
+/***/ 49064:
+/***/ ((module) => {
+
+"use strict";
+module.exports = JSON.parse('{"metrics":{"namespace":"AWS/SNS","dimensions":{"TopicName":"this.topicName"},"metrics":[{"name":"PublishSize","documentation":"Metric for the size of messages published through this topic"},{"name":"NumberOfMessagesPublished","documentation":"The number of messages published to your Amazon SNS topics.","type":"count"},{"name":"NumberOfNotificationsDelivered","documentation":"The number of messages successfully delivered from your Amazon SNS topics to subscribing endpoints.","type":"count"},{"name":"NumberOfNotificationsFailed","documentation":"The number of messages that Amazon SNS failed to deliver.","type":"count"},{"name":"NumberOfNotificationsFilteredOut","documentation":"The number of messages that were rejected by subscription filter policies.","type":"count"},{"name":"NumberOfNotificationsFilteredOut-NoMessageAttributes","documentation":"The number of messages that were rejected by subscription filter policies because the messages have no attributes.","type":"count"},{"name":"NumberOfNotificationsFilteredOut-InvalidAttributes","documentation":"The number of messages that were rejected by subscription filter policies because the messages\' attributes are invalid","type":"count"},{"name":"SMSMonthToDateSpentUSD","documentation":"The charges you have accrued since the start of the current calendar month for sending SMS messages.","type":"gauge"},{"name":"SMSSuccessRate","documentation":"The rate of successful SMS message deliveries.","type":"count"}]}}');
+
+/***/ }),
+
+/***/ 27873:
+/***/ ((module) => {
+
+"use strict";
+module.exports = JSON.parse('{"metrics":{"namespace":"AWS/SQS","dimensions":{"QueueName":"this.queueName"},"metrics":[{"name":"ApproximateAgeOfOldestMessage","documentation":"The approximate age of the oldest non-deleted message in the queue.","type":"gauge"},{"name":"ApproximateNumberOfMessagesDelayed","documentation":"The number of messages in the queue that are delayed and not available for reading immediately.","type":"gauge"},{"name":"ApproximateNumberOfMessagesNotVisible","documentation":"The number of messages that are in flight.","type":"gauge"},{"name":"ApproximateNumberOfMessagesVisible","documentation":"The number of messages available for retrieval from the queue.","type":"gauge"},{"name":"NumberOfEmptyReceives","documentation":"The number of ReceiveMessage API calls that did not return a message.","type":"count"},{"name":"NumberOfMessagesDeleted","documentation":"The number of messages deleted from the queue.","type":"count"},{"name":"NumberOfMessagesReceived","documentation":"The number of messages returned by calls to the ReceiveMessage action.","type":"count"},{"name":"NumberOfMessagesSent","documentation":"The number of messages added to a queue.","type":"count"},{"name":"SentMessageSize","documentation":"The size of messages added to a queue."}]}}');
+
+/***/ }),
+
+/***/ 33522:
+/***/ ((module) => {
+
+"use strict";
+module.exports = JSON.parse('[{"id":"AWS::A4B","dashboard":"A4B","crossServiceDashboard":"A4B:CrossService","resourceTypes":[{"type":"AWS::A4B::Organization","keyMetric":"AWS::A4B::Organization:OfflineSharedDevices","dashboard":"A4B"}],"controls":{"AWS::A4B.organizations":{"type":"resource","resourceType":"AWS::A4B::Organization","labelField":"Organization","valueField":"Organization"}},"metricTemplates":[{"resourceType":"AWS::A4B::Organization","namespace":"AWS/A4B","dimensions":[{"dimensionName":"Organization","labelName":"Organization"}],"metrics":[{"id":"AWS::A4B::Organization:OfflineSharedDevices","name":"OfflineSharedDevices","defaultStat":"Sum"},{"id":"AWS::A4B::Organization:OnlineSharedDevices","name":"OnlineSharedDevices","defaultStat":"Sum"}]}],"dashboards":[{"id":"A4B:CrossService","name":"Alexa For Business","dependencies":[{"namespace":"AWS/A4B"}],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::A4B::Organization:OfflineSharedDevices"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::A4B::Organization:OnlineSharedDevices"}]}]}]},{"id":"A4B","name":"Alexa For Business","dependencies":[{"namespace":"AWS/A4B"}],"controls":["Shared::View.AlarmState","Shared::Group.ResourceGroup","AWS::A4B.organizations"],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::A4B::Organization:OfflineSharedDevices"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::A4B::Organization:OnlineSharedDevices"}]}]}]}]},{"id":"AWS::AmazonMQ","dashboard":"AmazonMQ","crossServiceDashboard":"AmazonMQ:CrossService","resourceTypes":[{"type":"AWS::AmazonMQ::Broker","keyMetric":"AWS::AmazonMQ::Broker:CpuUtilization","dashboard":"AmazonMQ","arnRegex":".*:broker:(.*):.*"}],"controls":{"AWS::AmazonMQ.brokers":{"type":"resource","resourceType":"AWS::AmazonMQ::Broker","labelField":"Broker","valueField":"Broker"}},"metricTemplates":[{"resourceType":"AWS::AmazonMQ::Broker","namespace":"AWS/AmazonMQ","dimensions":[{"dimensionName":"Broker","labelName":"Broker"}],"metrics":[{"id":"AWS::AmazonMQ::Broker:AckRate","name":"AckRate","defaultStat":"Average"},{"id":"AWS::AmazonMQ::Broker:ChannelCount","name":"ChannelCount","defaultStat":"Sum"},{"id":"AWS::AmazonMQ::Broker:ConfirmRate","name":"ConfirmRate","defaultStat":"Average"},{"id":"AWS::AmazonMQ::Broker:ConnectionCount","name":"ConnectionCount","defaultStat":"Sum"},{"id":"AWS::AmazonMQ::Broker:ConsumerCount","name":"ConsumerCount","defaultStat":"Sum"},{"id":"AWS::AmazonMQ::Broker:CpuCreditBalanceHeapUsage","name":"CpuCreditBalanceHeapUsage","defaultStat":"Maximum"},{"id":"AWS::AmazonMQ::Broker:CpuUtilization","name":"CpuUtilization","defaultStat":"Average"},{"id":"AWS::AmazonMQ::Broker:CurrentConnectionsCount","name":"CurrentConnectionsCount","defaultStat":"Sum"},{"id":"AWS::AmazonMQ::Broker:ExchangeCount","name":"ExchangeCount","defaultStat":"Sum"},{"id":"AWS::AmazonMQ::Broker:MessageCount","name":"MessageCount","defaultStat":"Sum"},{"id":"AWS::AmazonMQ::Broker:MessageReadyCount","name":"MessageReadyCount","defaultStat":"Sum"},{"id":"AWS::AmazonMQ::Broker:MessageUnacknowledgedCount","name":"MessageUnacknowledgedCount","defaultStat":"Sum"},{"id":"AWS::AmazonMQ::Broker:NetworkIn","name":"NetworkIn","defaultStat":"Sum"},{"id":"AWS::AmazonMQ::Broker:NetworkOut","name":"NetworkOut","defaultStat":"Sum"},{"id":"AWS::AmazonMQ::Broker:PublishRate","name":"PublishRate","defaultStat":"Average"},{"id":"AWS::AmazonMQ::Broker:QueueCount","name":"QueueCount","defaultStat":"Sum"},{"id":"AWS::AmazonMQ::Broker:TotalConsumerCount","name":"TotalConsumerCount","defaultStat":"Sum"},{"id":"AWS::AmazonMQ::Broker:TotalMessageCount","name":"TotalMessageCount","defaultStat":"Sum"},{"id":"AWS::AmazonMQ::Broker:TotalProducerCount","name":"TotalProducerCount","defaultStat":"Sum"}]}],"dashboards":[{"id":"AmazonMQ:CrossService","name":"Amazon MQ","dependencies":[{"namespace":"AWS/AmazonMQ"}],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::AmazonMQ::Broker:CpuUtilization"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::AmazonMQ::Broker:CurrentConnectionsCount"}]}]}]},{"id":"AmazonMQ","name":"Amazon MQ","dependencies":[{"namespace":"AWS/AmazonMQ"}],"controls":["Shared::View.AlarmState","Shared::Group.ResourceGroup","AWS::AmazonMQ.brokers"],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::AmazonMQ::Broker:CpuUtilization"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::AmazonMQ::Broker:CurrentConnectionsCount"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::AmazonMQ::Broker:CpuCreditBalanceHeapUsage"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::AmazonMQ::Broker:NetworkIn"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::AmazonMQ::Broker:NetworkOut"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::AmazonMQ::Broker:TotalConsumerCount"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::AmazonMQ::Broker:TotalMessageCount"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::AmazonMQ::Broker:TotalProducerCount"}]}]}]}]},{"id":"AWS::ApiGateway","dashboard":"ApiGateway","crossServiceDashboard":"ApiGateway:CrossService","resourceTypes":[{"type":"AWS::ApiGateway::RestApi","keyMetric":"AWS::ApiGateway::RestApi:Count","arnRegex":".*/restapis/([^/]*)","identifyingLabels":["ApiId"],"describe":"api-gateway-describe-apis","resourceDecorator":"api-gateway-resource-decorator","metricTransformer":"api-gateway-metric-transformer","consoleLink":"/apigateway/home?region={region}#/apis/{ApiId}/resources"},{"type":"AWS::ApiGateway::Stage","keyMetric":"AWS::ApiGateway::Stage:Count","identifyingLabels":["ApiId","Stage"],"resourceDecorator":"api-gateway-resource-decorator","metricTransformer":"api-gateway-metric-transformer","alarmPatterns":[{"namespace":"AWS/ApiGateway","dimensions":[{"dimensionName":"ApiName","labelName":"ApiName"},{"dimensionName":"Stage","labelName":"Stage"}]},{"namespace":"AWS/ApiGateway","dimensions":[{"dimensionName":"ApiName","labelName":"ApiName"},{"dimensionName":"Stage","dimensionValue":""}]}],"nodeNameRegex":"(.*)/(.*)","arnRegex":".*/restapis/(.*)/stages/(.*)","dashboard":"ApiGateway","isResourceNode":true}],"controls":{"AWS::ApiGateway.stages":{"type":"resource","resourceType":"AWS::ApiGateway::Stage","labelField":"ApiName","valueField":"ApiName"}},"metricTemplates":[{"resourceType":"AWS::ApiGateway::Stage","namespace":"AWS/ApiGateway","dimensions":[{"dimensionName":"ApiName","labelName":"ApiName"},{"dimensionName":"Stage","labelName":"Stage"}],"metrics":[{"id":"AWS::ApiGateway::Stage:4XXError","name":"4XXError","defaultStat":"Sum"},{"id":"AWS::ApiGateway::Stage:5XXError","name":"5XXError","defaultStat":"Sum"},{"id":"AWS::ApiGateway::Stage:CacheHitCount","name":"CacheHitCount","defaultStat":"Sum"},{"id":"AWS::ApiGateway::Stage:CacheMissCount","name":"CacheMissCount","defaultStat":"Sum"},{"id":"AWS::ApiGateway::Stage:Count","name":"Count","defaultStat":"Sum"},{"id":"AWS::ApiGateway::Stage:IntegrationLatency","name":"IntegrationLatency","defaultStat":"Average"},{"id":"AWS::ApiGateway::Stage:Latency","name":"Latency","defaultStat":"Average"}]},{"resourceType":"AWS::ApiGateway::RestApi","namespace":"AWS/ApiGateway","dimensions":[{"dimensionName":"ApiName","labelName":"ApiName"}],"metrics":[{"id":"AWS::ApiGateway::RestApi:4XXError","name":"4XXError","defaultStat":"Sum"},{"id":"AWS::ApiGateway::RestApi:5XXError","name":"5XXError","defaultStat":"Sum"},{"id":"AWS::ApiGateway::RestApi:CacheHitCount","name":"CacheHitCount","defaultStat":"Sum"},{"id":"AWS::ApiGateway::RestApi:CacheMissCount","name":"CacheMissCount","defaultStat":"Sum"},{"id":"AWS::ApiGateway::RestApi:Count","name":"Count","defaultStat":"Sum"},{"id":"AWS::ApiGateway::RestApi:IntegrationLatency","name":"IntegrationLatency","defaultStat":"Average"},{"id":"AWS::ApiGateway::RestApi:Latency","name":"Latency","defaultStat":"Average"}]},{"resourceType":"AWS::ApiGateway::Stage","id":"AWS::ApiGateway::ApiName:Method:Resource:Stage","namespace":"AWS/ApiGateway","dimensions":[{"dimensionName":"ApiName","labelName":"ApiName"},{"dimensionName":"Method","labelName":"Method"},{"dimensionName":"Resource","labelName":"Resource"},{"dimensionName":"Stage","labelName":"Stage"}],"metrics":[{"id":"AWS::ApiGateway::ApiName:Method:Resource:Stage:4XXError","name":"4XXError","defaultStat":"Sum"},{"id":"AWS::ApiGateway::ApiName:Method:Resource:Stage:5XXError","name":"5XXError","defaultStat":"Sum"},{"id":"AWS::ApiGateway::ApiName:Method:Resource:Stage:CacheHitCount","name":"CacheHitCount","defaultStat":"Sum"},{"id":"AWS::ApiGateway::ApiName:Method:Resource:Stage:CacheMissCount","name":"CacheMissCount","defaultStat":"Sum"},{"id":"AWS::ApiGateway::ApiName:Method:Resource:Stage:Count","name":"Count","defaultStat":"Sum"},{"id":"AWS::ApiGateway::ApiName:Method:Resource:Stage:IntegrationLatency","name":"IntegrationLatency","defaultStat":"Average"},{"id":"AWS::ApiGateway::ApiName:Method:Resource:Stage:Latency","name":"Latency","defaultStat":"Average"}]}],"dashboards":[{"id":"ApiGateway:CrossService","name":"API Gateway","dependencies":[{"namespace":"AWS/ApiGateway"}],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::ApiGateway::RestApi:5XXError"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::ApiGateway::RestApi:Latency"}]}]}]},{"id":"ApiGateway","name":"API Gateway","dependencies":[{"namespace":"AWS/ApiGateway"}],"controls":["Shared::View.AlarmState","Shared::Group.ResourceGroup","AWS::ApiGateway.stages"],"tables":[{"resourceType":"AWS::ApiGateway::RestApi","columns":["ApiName","EndpointTypes","CreatedDate"]}],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::ApiGateway::RestApi:Count"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::ApiGateway::RestApi:5XXError"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::ApiGateway::RestApi:4XXError"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::ApiGateway::RestApi:Latency"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::ApiGateway::RestApi:IntegrationLatency"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::ApiGateway::RestApi:CacheHitCount"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::ApiGateway::RestApi:CacheMissCount"}]}]}]}]},{"id":"AWS::ApplicationELB","dashboard":"ApplicationELB","crossServiceDashboard":"ApplicationELB:CrossService","resourceTypes":[{"type":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB","entityType":"AWS::ElasticLoadBalancingV2::LoadBalancer","keyMetric":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB:ConsumedLCUs","dashboard":"ApplicationELB","arnRegex":".*:loadbalancer/(app/.*)"}],"controls":{"AWS::ApplicationELB.loadBalancers":{"type":"resource","resourceType":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB","labelField":"LoadBalancer","valueField":"LoadBalancer"}},"metricTemplates":[{"resourceType":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB","namespace":"AWS/ApplicationELB","dimensions":[{"dimensionName":"LoadBalancer","labelName":"LoadBalancer"}],"metrics":[{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB:ActiveConnectionCount","name":"ActiveConnectionCount","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB:ClientTLSNegotiationErrorCount","name":"ClientTLSNegotiationErrorCount","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB:ConsumedLCUs","name":"ConsumedLCUs","defaultStat":"Average"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB:DesyncMitigationMode_NonCompliant_Request_Count","name":"DesyncMitigationMode_NonCompliant_Request_Count","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB:ELBAuthError","name":"ELBAuthError","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB:ELBAuthFailure","name":"ELBAuthFailure","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB:ELBAuthLatency","name":"ELBAuthLatency","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB:ELBAuthRefreshTokenSuccess","name":"ELBAuthRefreshTokenSuccess","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB:ELBAuthSuccess","name":"ELBAuthSuccess","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB:ELBAuthUserClaimsSizeExceeded","name":"ELBAuthUserClaimsSizeExceeded","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB:GrpcRequestCount","name":"GrpcRequestCount","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB:HTTP_Fixed_Response_Count","name":"HTTP_Fixed_Response_Count","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB:HTTP_Redirect_Count","name":"HTTP_Redirect_Count","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB:HTTP_Redirect_Url_Limit_Exceeded_Count","name":"HTTP_Redirect_Url_Limit_Exceeded_Count","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB:HTTPCode_ELB_3XX_Count","name":"HTTPCode_ELB_3XX_Count","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB:HTTPCode_ELB_4XX_Count","name":"HTTPCode_ELB_4XX_Count","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB:HTTPCode_ELB_5XX_Count","name":"HTTPCode_ELB_5XX_Count","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB:HTTPCode_ELB_500_Count","name":"HTTPCode_ELB_500_Count","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB:HTTPCode_ELB_502_Count","name":"HTTPCode_ELB_502_Count","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB:HTTPCode_ELB_503_Count","name":"HTTPCode_ELB_503_Count","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB:HTTPCode_ELB_504_Count","name":"HTTPCode_ELB_504_Count","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB:HTTPCode_Target_2XX_Count","name":"HTTPCode_Target_2XX_Count","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB:HTTPCode_Target_3XX_Count","name":"HTTPCode_Target_3XX_Count","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB:HTTPCode_Target_4XX_Count","name":"HTTPCode_Target_4XX_Count","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB:HTTPCode_Target_5XX_Count","name":"HTTPCode_Target_5XX_Count","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB:IPv6ProcessedBytes","name":"IPv6ProcessedBytes","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB:IPv6RequestCount","name":"IPv6RequestCount","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB:NewConnectionCount","name":"NewConnectionCount","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB:NonStickyRequestCount","name":"NonStickyRequestCount","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB:ProcessedBytes","name":"ProcessedBytes","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB:RejectedConnectionCount","name":"RejectedConnectionCount","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB:RequestCount","name":"RequestCount","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB:RuleEvaluations","name":"RuleEvaluations","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB:TargetConnectionErrorCount","name":"TargetConnectionErrorCount","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB:TargetResponseTime","name":"TargetResponseTime","defaultStat":"Average"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB:TargetTLSNegotiationErrorCount","name":"TargetTLSNegotiationErrorCount","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB:LambdaTargetProcessedBytes","name":"LambdaTargetProcessedBytes","defaultStat":"Sum"}]},{"resourceType":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB","namespace":"AWS/ApplicationELB","id":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB:TargetGroup","dimensions":[{"dimensionName":"TargetGroup","labelName":"TargetGroup"}],"metrics":[{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB:TargetGroup:RequestCountPerTarget","name":"RequestCountPerTarget","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB:TargetGroup:LambdaInternalError","name":"LambdaInternalError","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB:TargetGroup:LambdaUserError","name":"LambdaUserError","defaultStat":"Sum"}]},{"resourceType":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB","namespace":"AWS/ApplicationELB","id":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB:AvailabilityZone:LoadBalancer","dimensions":[{"dimensionName":"AvailabilityZone","labelName":"AvailabilityZone"},{"dimensionName":"LoadBalancer","labelName":"LoadBalancer"}],"metrics":[{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB:AvailabilityZone:LoadBalancer:ClientTLSNegotiationErrorCount","name":"ClientTLSNegotiationErrorCount","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB:AvailabilityZone:LoadBalancer:DesyncMitigationMode_NonCompliant_Request_Count","name":"DesyncMitigationMode_NonCompliant_Request_Count","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB:AvailabilityZone:LoadBalancer:DroppedInvalidHeaderRequestCount","name":"DroppedInvalidHeaderRequestCount","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB:AvailabilityZone:LoadBalancer:ELBAuthError","name":"ELBAuthError","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB:AvailabilityZone:LoadBalancer:ELBAuthFailure","name":"ELBAuthFailure","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB:AvailabilityZone:LoadBalancer:ELBAuthLatency","name":"ELBAuthLatency","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB:AvailabilityZone:LoadBalancer:ELBAuthRefreshTokenSuccess","name":"ELBAuthRefreshTokenSuccess","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB:AvailabilityZone:LoadBalancer:ELBAuthSuccess","name":"ELBAuthSuccess","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB:AvailabilityZone:LoadBalancer:ELBAuthUserClaimsSizeExceeded","name":"ELBAuthUserClaimsSizeExceeded","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB:AvailabilityZone:LoadBalancer:ForwardedInvalidHeaderRequestCount","name":"ForwardedInvalidHeaderRequestCount","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB:AvailabilityZone:LoadBalancer:HTTP_Fixed_Response_Count","name":"HTTP_Fixed_Response_Count","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB:AvailabilityZone:LoadBalancer:HTTP_Redirect_Count","name":"HTTP_Redirect_Count","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB:AvailabilityZone:LoadBalancer:HTTP_Redirect_Url_Limit_Exceeded_Count","name":"HTTP_Redirect_Url_Limit_Exceeded_Count","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB:AvailabilityZone:LoadBalancer:HTTPCode_ELB_3XX_Count","name":"HTTPCode_ELB_3XX_Count","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB:AvailabilityZone:LoadBalancer:HTTPCode_ELB_4XX_Count","name":"HTTPCode_ELB_4XX_Count","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB:AvailabilityZone:LoadBalancer:HTTPCode_ELB_5XX_Count","name":"HTTPCode_ELB_5XX_Count","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB:AvailabilityZone:LoadBalancer:HTTPCode_Target_2XX_Count","name":"HTTPCode_Target_2XX_Count","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB:AvailabilityZone:LoadBalancer:HTTPCode_Target_3XX_Count","name":"HTTPCode_Target_3XX_Count","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB:AvailabilityZone:LoadBalancer:HTTPCode_Target_4XX_Count","name":"HTTPCode_Target_4XX_Count","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB:AvailabilityZone:LoadBalancer:HTTPCode_Target_5XX_Count","name":"HTTPCode_Target_5XX_Count","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB:AvailabilityZone:LoadBalancer:NonStickyRequestCount","name":"NonStickyRequestCount","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB:AvailabilityZone:LoadBalancer:RejectedConnectionCount","name":"RejectedConnectionCount","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB:AvailabilityZone:LoadBalancer:TargetConnectionErrorCount","name":"TargetConnectionErrorCount","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB:AvailabilityZone:LoadBalancer:TargetResponseTime","name":"TargetResponseTime","defaultStat":"Average"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB:AvailabilityZone:LoadBalancer:TargetTLSNegotiationErrorCount","name":"TargetTLSNegotiationErrorCount","defaultStat":"Sum"}]},{"resourceType":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB","namespace":"AWS/ApplicationELB","id":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB:LoadBalancer:TargetGroup","dimensions":[{"dimensionName":"LoadBalancer","labelName":"LoadBalancer"},{"dimensionName":"TargetGroup","labelName":"TargetGroup"}],"metrics":[{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB:LoadBalancer:TargetGroup:HealthyHostCount","name":"HealthyHostCount","defaultStat":"Average"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB:LoadBalancer:TargetGroup:HTTPCode_Target_2XX_Count","name":"HTTPCode_Target_2XX_Count","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB:LoadBalancer:TargetGroup:HTTPCode_Target_3XX_Count","name":"HTTPCode_Target_3XX_Count","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB:LoadBalancer:TargetGroup:HTTPCode_Target_4XX_Count","name":"HTTPCode_Target_4XX_Count","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB:LoadBalancer:TargetGroup:HTTPCode_Target_5XX_Count","name":"HTTPCode_Target_5XX_Count","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB:LoadBalancer:TargetGroup:LambdaInternalError","name":"LambdaInternalError","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB:LoadBalancer:TargetGroup:LambdaUserError","name":"LambdaUserError","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB:LoadBalancer:TargetGroup:RequestCount","name":"RequestCount","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB:LoadBalancer:TargetGroup:RequestCountPerTarget","name":"RequestCountPerTarget","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB:LoadBalancer:TargetGroup:TargetConnectionErrorCount","name":"TargetConnectionErrorCount","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB:LoadBalancer:TargetGroup:TargetResponseTime","name":"TargetResponseTime","defaultStat":"Average"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB:LoadBalancer:TargetGroup:TargetTLSNegotiationErrorCount","name":"TargetTLSNegotiationErrorCount","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB:LoadBalancer:TargetGroup:UnHealthyHostCount","name":"UnHealthyHostCount","defaultStat":"Average"}]},{"resourceType":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB","namespace":"AWS/ApplicationELB","id":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB:AvailabilityZone:LoadBalancer:TargetGroup","dimensions":[{"dimensionName":"AvailabilityZone","labelName":"AvailabilityZone"},{"dimensionName":"LoadBalancer","labelName":"LoadBalancer"},{"dimensionName":"TargetGroup","labelName":"TargetGroup"}],"metrics":[{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB:AvailabilityZone:LoadBalancer:TargetGroup:HealthyHostCount","name":"HealthyHostCount","defaultStat":"Average"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB:AvailabilityZone:LoadBalancer:TargetGroup:HTTPCode_Target_2XX_Count","name":"HTTPCode_Target_2XX_Count","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB:AvailabilityZone:LoadBalancer:TargetGroup:HTTPCode_Target_3XX_Count","name":"HTTPCode_Target_3XX_Count","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB:AvailabilityZone:LoadBalancer:TargetGroup:HTTPCode_Target_4XX_Count","name":"HTTPCode_Target_4XX_Count","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB:AvailabilityZone:LoadBalancer:TargetGroup:HTTPCode_Target_5XX_Count","name":"HTTPCode_Target_5XX_Count","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB:AvailabilityZone:LoadBalancer:TargetGroup:TargetConnectionErrorCount","name":"TargetConnectionErrorCount","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB:AvailabilityZone:LoadBalancer:TargetGroup:TargetResponseTime","name":"TargetResponseTime","defaultStat":"Average"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB:AvailabilityZone:LoadBalancer:TargetGroup:TargetTLSNegotiationErrorCount","name":"TargetTLSNegotiationErrorCount","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB:AvailabilityZone:LoadBalancer:TargetGroup:UnHealthyHostCount","name":"UnHealthyHostCount","defaultStat":"Average"}]}],"dashboards":[{"id":"ApplicationELB:CrossService","name":"Application ELB","dependencies":[{"namespace":"AWS/ApplicationELB"}],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB:RequestCount"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB:HTTPCode_ELB_5XX_Count"}]}]}]},{"id":"ApplicationELB:LoadBalancer","name":"Application ELB LoadBalancer","dependencies":[{"namespace":"AWS/ApplicationELB"}],"controls":["Shared::View.AlarmState","Shared::Group.ResourceGroup","AWS::ApplicationELB.loadBalancers"],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB:RequestCount"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB:HTTPCode_ELB_5XX_Count"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB:ActiveConnectionCount"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB:ClientTLSNegotiationErrorCount"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB:ConsumedLCUs"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB:HTTP_Fixed_Response_Count"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB:HTTP_Redirect_Count"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB:HTTP_Redirect_Url_Limit_Exceeded_Count"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB:HTTPCode_ELB_3XX_Count"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB:HTTPCode_ELB_4XX_Count"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB:IPv6ProcessedBytes"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB:IPv6RequestCount"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB:NewConnectionCount"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB:ProcessedBytes"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB:RejectedConnectionCount"}]}]},{"widgets":[{"type":"chart","width":8,"metrics":[{"metricTemplate":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB:RuleEvaluations"}]}]}]},{"id":"ApplicationELB","name":"Application ELB","dependencies":[{"namespace":"AWS/ApplicationELB"}],"controls":["Shared::View.AlarmState","Shared::Group.ResourceGroup","AWS::ApplicationELB.loadBalancers"],"rows":[{"widgets":[{"type":"chart","properties":{"title":"RequestCount: Sum"},"metrics":[{"metricExpression":"SEARCH(\'{AWS/ApplicationELB,LoadBalancer} MetricName=\\"RequestCount\\"\', \'Sum\', {Period})","resourceType":false}]},{"type":"chart","properties":{"title":"HTTPCode_ELB_5XX_Count: Sum"},"metrics":[{"metricExpression":"SEARCH(\'{AWS/ApplicationELB,LoadBalancer} MetricName=\\"HTTPCode_ELB_5XX_Count\\"\', \'Sum\', {Period})","resourceType":false}]},{"type":"chart","properties":{"title":"ActiveConnectionCount: Sum"},"metrics":[{"metricExpression":"SEARCH(\'{AWS/ApplicationELB,LoadBalancer} MetricName=\\"ActiveConnectionCount\\"\', \'Sum\', {Period})","resourceType":false}]}]},{"widgets":[{"type":"chart","properties":{"title":"ClientTLSNegotiationErrorCount: Sum"},"metrics":[{"metricExpression":"SEARCH(\'{AWS/ApplicationELB,LoadBalancer} MetricName=\\"ClientTLSNegotiationErrorCount\\"\', \'Sum\', {Period})","resourceType":false}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::ElasticLoadBalancingV2::LoadBalancer/ApplicationELB:ConsumedLCUs"}]},{"type":"chart","properties":{"title":"HTTP_Fixed_Response_Count: Sum"},"metrics":[{"metricExpression":"SEARCH(\'{AWS/ApplicationELB,LoadBalancer} MetricName=\\"HTTP_Fixed_Response_Count\\"\', \'Sum\', {Period})","resourceType":false}]}]},{"widgets":[{"type":"chart","properties":{"title":"HTTP_Redirect_Count: Sum"},"metrics":[{"metricExpression":"SEARCH(\'{AWS/ApplicationELB,LoadBalancer} MetricName=\\"HTTP_Redirect_Count\\"\', \'Sum\', {Period})","resourceType":false}]},{"type":"chart","properties":{"title":"HTTP_Redirect_Url_Limit_Exceeded_Count: Sum"},"metrics":[{"metricExpression":"SEARCH(\'{AWS/ApplicationELB,LoadBalancer} MetricName=\\"HTTP_Redirect_Url_Limit_Exceeded_Count\\"\', \'Sum\', {Period})","resourceType":false}]},{"type":"chart","properties":{"title":"HTTPCode_ELB_3XX_Count: Sum"},"metrics":[{"metricExpression":"SEARCH(\'{AWS/ApplicationELB,LoadBalancer} MetricName=\\"HTTPCode_ELB_3XX_Count\\"\', \'Sum\', {Period})","resourceType":false}]}]},{"widgets":[{"type":"chart","properties":{"title":"HTTPCode_ELB_4XX_Count: Sum"},"metrics":[{"metricExpression":"SEARCH(\'{AWS/ApplicationELB,LoadBalancer} MetricName=\\"HTTPCode_ELB_4XX_Count\\"\', \'Sum\', {Period})","resourceType":false}]},{"type":"chart","properties":{"title":"IPv6ProcessedBytes: Sum"},"metrics":[{"metricExpression":"SEARCH(\'{AWS/ApplicationELB,LoadBalancer} MetricName=\\"IPv6ProcessedBytes\\"\', \'Sum\', {Period})","resourceType":false}]},{"type":"chart","properties":{"title":"IPv6RequestCount: Sum"},"metrics":[{"metricExpression":"SEARCH(\'{AWS/ApplicationELB,LoadBalancer} MetricName=\\"IPv6RequestCount\\"\', \'Sum\', {Period})","resourceType":false}]}]},{"widgets":[{"type":"chart","properties":{"title":"NewConnectionCount: Sum"},"metrics":[{"metricExpression":"SEARCH(\'{AWS/ApplicationELB,LoadBalancer} MetricName=\\"NewConnectionCount\\"\', \'Sum\', {Period})","resourceType":false}]},{"type":"chart","properties":{"title":"ProcessedBytes: Sum"},"metrics":[{"metricExpression":"SEARCH(\'{AWS/ApplicationELB,LoadBalancer} MetricName=\\"ProcessedBytes\\"\', \'Sum\', {Period})","resourceType":false}]},{"type":"chart","properties":{"title":"RejectedConnectionCount: Sum"},"metrics":[{"metricExpression":"SEARCH(\'{AWS/ApplicationELB,LoadBalancer} MetricName=\\"RejectedConnectionCount\\"\', \'Sum\', {Period})","resourceType":false}]}]},{"widgets":[{"type":"chart","width":8,"properties":{"title":"RuleEvaluations: Sum"},"metrics":[{"metricExpression":"SEARCH(\'{AWS/ApplicationELB,LoadBalancer} MetricName=\\"RuleEvaluations\\"\', \'Sum\', {Period})","resourceType":false}]}]}]}]},{"id":"AWS::AppStream","dashboard":"AppStream","crossServiceDashboard":"AppStream:CrossService","resourceTypes":[{"type":"AWS::AppStream::Fleet","keyMetric":"AWS::AppStream::Fleet:CapacityUtilization","dashboard":"AppStream","arnRegex":".*:fleet/(.*)"}],"controls":{"AWS::AppStream.fleets":{"type":"resource","resourceType":"AWS::AppStream::Fleet","labelField":"Fleet","valueField":"Fleet"}},"metricTemplates":[{"resourceType":"AWS::AppStream::Fleet","namespace":"AWS/AppStream","dimensions":[{"dimensionName":"Fleet","labelName":"Fleet"}],"metrics":[{"id":"AWS::AppStream::Fleet:CapacityUtilization","name":"CapacityUtilization","defaultStat":"Average"},{"id":"AWS::AppStream::Fleet:InsufficientCapacityError","name":"InsufficientCapacityError","defaultStat":"Sum"},{"id":"AWS::AppStream::Fleet:ActualCapacity","name":"ActualCapacity","defaultStat":"Average"},{"id":"AWS::AppStream::Fleet:AvailableCapacity","name":"AvailableCapacity","defaultStat":"Average"},{"id":"AWS::AppStream::Fleet:DesiredCapacity","name":"DesiredCapacity","defaultStat":"Average"},{"id":"AWS::AppStream::Fleet:InUseCapacity","name":"InUseCapacity","defaultStat":"Average"},{"id":"AWS::AppStream::Fleet:PendingCapacity","name":"PendingCapacity","defaultStat":"Average"},{"id":"AWS::AppStream::Fleet:RunningCapacity","name":"RunningCapacity","defaultStat":"Average"}]}],"dashboards":[{"id":"AppStream:CrossService","name":"AppStream","dependencies":[{"namespace":"AWS/AppStream"}],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::AppStream::Fleet:CapacityUtilization"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::AppStream::Fleet:InsufficientCapacityError"}]}]}]},{"id":"AppStream","name":"AppStream","dependencies":[{"namespace":"AWS/AppStream"}],"controls":["Shared::View.AlarmState","Shared::Group.ResourceGroup","AWS::AppStream.fleets"],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::AppStream::Fleet:CapacityUtilization"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::AppStream::Fleet:InsufficientCapacityError"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::AppStream::Fleet:ActualCapacity"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::AppStream::Fleet:AvailableCapacity"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::AppStream::Fleet:DesiredCapacity"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::AppStream::Fleet:InUseCapacity"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::AppStream::Fleet:PendingCapacity"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::AppStream::Fleet:RunningCapacity"}]}]}]}]},{"id":"AWS::AppSync","dashboard":"AppSync","crossServiceDashboard":"AppSync:CrossService","resourceTypes":[{"type":"AWS::AppSync::GraphQLApi","arnRegex":".*/(?.*)","keyMetric":"AWS::AppSync::GraphQLApi:4XXError","dashboard":"AppSync"}],"controls":{"AWS::AppSync.graphQLAPIs":{"type":"resource","resourceType":"AWS::AppSync::GraphQLApi","labelField":"GraphQLAPIId","valueField":"GraphQLAPIId"}},"metricTemplates":[{"resourceType":"AWS::AppSync::GraphQLApi","namespace":"AWS/AppSync","dimensions":[{"dimensionName":"GraphQLAPIId","labelName":"GraphQLAPIId"}],"metrics":[{"id":"AWS::AppSync::GraphQLApi:4XXError","name":"4XXError","defaultStat":"Sum"},{"id":"AWS::AppSync::GraphQLApi:5XXError","name":"5XXError","defaultStat":"Sum"},{"id":"AWS::AppSync::GraphQLApi:Latency","name":"Latency","defaultStat":"Average"}]}],"dashboards":[{"id":"AppSync:CrossService","name":"AppSync","dependencies":[{"namespace":"AWS/AppSync"}],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::AppSync::GraphQLApi:4XXError"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::AppSync::GraphQLApi:5XXError"}]}]}]},{"id":"AppSync","name":"AppSync","dependencies":[{"namespace":"AWS/AppSync"}],"controls":["Shared::View.AlarmState","Shared::Group.ResourceGroup","AWS::AppSync.graphQLAPIs"],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::AppSync::GraphQLApi:4XXError"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::AppSync::GraphQLApi:5XXError"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::AppSync::GraphQLApi:Latency"}]}]}]}]},{"id":"AWS::AutoScaling","dashboard":"AutoScaling","crossServiceDashboard":"AutoScaling:CrossService","resourceTypes":[{"type":"AWS::AutoScaling::AutoScalingGroup","consoleLink":"/ec2/autoscaling/home?region=us-east-1#AutoScalingGroups:id={AutoScalingGroupName};view=details","keyMetric":"AWS::AutoScaling::AutoScalingGroup:GroupTotalInstances","dashboard":"AutoScaling","describe":"autoscaling-describe-groups","arnRegex":".*:autoScalingGroup:(.*)"}],"controls":{"AWS::AutoScaling.autoScalingGroups":{"type":"resource","resourceType":"AWS::AutoScaling::AutoScalingGroup","labelField":"AutoScalingGroupName","valueField":"AutoScalingGroupName"}},"metricTemplates":[{"resourceType":"AWS::AutoScaling::AutoScalingGroup","namespace":"AWS/AutoScaling","dimensions":[{"dimensionName":"AutoScalingGroupName","labelName":"AutoScalingGroupName"}],"metrics":[{"id":"AWS::AutoScaling::AutoScalingGroup:GroupTotalInstances","name":"GroupTotalInstances","defaultStat":"Average"},{"id":"AWS::AutoScaling::AutoScalingGroup:GroupDesiredCapacity","name":"GroupDesiredCapacity","defaultStat":"Average"},{"id":"AWS::AutoScaling::AutoScalingGroup:GroupMaxSize","name":"GroupMaxSize","defaultStat":"Average"},{"id":"AWS::AutoScaling::AutoScalingGroup:GroupMinSize","name":"GroupMinSize","defaultStat":"Average"},{"id":"AWS::AutoScaling::AutoScalingGroup:GroupTerminatingInstances","name":"GroupTerminatingInstances","defaultStat":"Average"},{"id":"AWS::AutoScaling::AutoScalingGroup:GroupPendingInstances","name":"GroupPendingInstances","defaultStat":"Average"},{"id":"AWS::AutoScaling::AutoScalingGroup:GroupInServiceInstances","name":"GroupInServiceInstances","defaultStat":"Average"},{"id":"AWS::AutoScaling::AutoScalingGroup:GroupStandbyInstances","name":"GroupStandbyInstances","defaultStat":"Average"}]}],"dashboards":[{"id":"AutoScaling:CrossService","name":"AutoScaling","dependencies":[{"namespace":"AWS/AutoScaling"}],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::AutoScaling::AutoScalingGroup:GroupDesiredCapacity"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::AutoScaling::AutoScalingGroup:GroupInServiceInstances"}]}]}]},{"id":"AutoScaling:ResourceHealth","name":"AutoScaling","dependencies":[{"namespace":"AWS/AutoScaling"}],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::AutoScaling::AutoScalingGroup:GroupInServiceInstances"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::AutoScaling::AutoScalingGroup:GroupDesiredCapacity"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::AutoScaling::AutoScalingGroup:GroupPendingInstances"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::AutoScaling::AutoScalingGroup:GroupStandbyInstances"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::AutoScaling::AutoScalingGroup:GroupTerminatingInstances"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::AutoScaling::AutoScalingGroup:GroupMinSize"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::AutoScaling::AutoScalingGroup:GroupMaxSize"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::AutoScaling::AutoScalingGroup:GroupTotalInstances"}]}]}]},{"id":"AutoScaling","name":"AutoScaling","dependencies":[{"namespace":"AWS/AutoScaling"}],"controls":["Shared::View.AlarmState","Shared::Group.ResourceGroup","AWS::AutoScaling.autoScalingGroups"],"tables":[{"resourceType":"AWS::AutoScaling::AutoScalingGroup","columns":["AutoScalingGroupName","LaunchConfigurationName","Instances","DesiredCapacity","MinSize","MaxSize","AvailabilityZones","DefaultCooldown","HealthCheckGracePeriod"]}],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::AutoScaling::AutoScalingGroup:GroupInServiceInstances"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::AutoScaling::AutoScalingGroup:GroupDesiredCapacity"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::AutoScaling::AutoScalingGroup:GroupPendingInstances"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::AutoScaling::AutoScalingGroup:GroupStandbyInstances"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::AutoScaling::AutoScalingGroup:GroupTerminatingInstances"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::AutoScaling::AutoScalingGroup:GroupMinSize"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::AutoScaling::AutoScalingGroup:GroupMaxSize"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::AutoScaling::AutoScalingGroup:GroupTotalInstances"}]}]}]}]},{"id":"AWS::Billing","dashboard":"Billing","resourceTypes":[{"type":"CW::Billing::Service","keyMetric":"CW::Billing::Service:EstimatedCharges","dashboard":"Billing"}],"metricTemplates":[{"resourceType":"CW::Billing::Service","namespace":"AWS/Billing","defaultPeriod":21600,"dimensions":[{"dimensionName":"Currency","dimensionValue":"USD"},{"dimensionName":"ServiceName","labelName":"ServiceName"}],"metrics":[{"id":"CW::Billing::Service:EstimatedCharges","name":"EstimatedCharges","defaultStat":"Maximum","defaultPeriod":21600}]},{"resourceType":"CW::Billing::Service","id":"CW::Billing:Service:AUD","namespace":"AWS/Billing","defaultPeriod":21600,"dimensions":[{"dimensionName":"Currency","dimensionValue":"AUD"},{"dimensionName":"ServiceName","labelName":"ServiceName"}],"metrics":[{"id":"CW::Billing:Service:AUD:EstimatedCharges","name":"EstimatedCharges","defaultStat":"Maximum","defaultPeriod":21600}]},{"resourceType":"CW::Billing::Service","id":"CW::Billing:Service:CHF","namespace":"AWS/Billing","defaultPeriod":21600,"dimensions":[{"dimensionName":"Currency","dimensionValue":"CHF"},{"dimensionName":"ServiceName","labelName":"ServiceName"}],"metrics":[{"id":"CW::Billing:Service:CHF:EstimatedCharges","name":"EstimatedCharges","defaultStat":"Maximum","defaultPeriod":21600}]},{"resourceType":"CW::Billing::Service","id":"CW::Billing:Service:DKK","namespace":"AWS/Billing","defaultPeriod":21600,"dimensions":[{"dimensionName":"Currency","dimensionValue":"DKK"},{"dimensionName":"ServiceName","labelName":"ServiceName"}],"metrics":[{"id":"CW::Billing:Service:DKK:EstimatedCharges","name":"EstimatedCharges","defaultStat":"Maximum","defaultPeriod":21600}]},{"resourceType":"CW::Billing::Service","id":"CW::Billing:Service:EUR","namespace":"AWS/Billing","defaultPeriod":21600,"dimensions":[{"dimensionName":"Currency","dimensionValue":"EUR"},{"dimensionName":"ServiceName","labelName":"ServiceName"}],"metrics":[{"id":"CW::Billing:Service:EUR:EstimatedCharges","name":"EstimatedCharges","defaultStat":"Maximum","defaultPeriod":21600}]},{"resourceType":"CW::Billing::Service","id":"CW::Billing:Service:GBP","namespace":"AWS/Billing","defaultPeriod":21600,"dimensions":[{"dimensionName":"Currency","dimensionValue":"GBP"},{"dimensionName":"ServiceName","labelName":"ServiceName"}],"metrics":[{"id":"CW::Billing:Service:GBP:EstimatedCharges","name":"EstimatedCharges","defaultStat":"Maximum","defaultPeriod":21600}]},{"resourceType":"CW::Billing::Service","id":"CW::Billing:Service:HKD","namespace":"AWS/Billing","defaultPeriod":21600,"dimensions":[{"dimensionName":"Currency","dimensionValue":"HKD"},{"dimensionName":"ServiceName","labelName":"ServiceName"}],"metrics":[{"id":"CW::Billing:Service:HKD:EstimatedCharges","name":"EstimatedCharges","defaultStat":"Maximum","defaultPeriod":21600}]},{"resourceType":"CW::Billing::Service","id":"CW::Billing:Service:JPY","namespace":"AWS/Billing","defaultPeriod":21600,"dimensions":[{"dimensionName":"Currency","dimensionValue":"JPY"},{"dimensionName":"ServiceName","labelName":"ServiceName"}],"metrics":[{"id":"CW::Billing:Service:JPY:EstimatedCharges","name":"EstimatedCharges","defaultStat":"Maximum","defaultPeriod":21600}]},{"resourceType":"CW::Billing::Service","id":"CW::Billing:Service:NOK","namespace":"AWS/Billing","defaultPeriod":21600,"dimensions":[{"dimensionName":"Currency","dimensionValue":"NOK"},{"dimensionName":"ServiceName","labelName":"ServiceName"}],"metrics":[{"id":"CW::Billing:Service:NOK:EstimatedCharges","name":"EstimatedCharges","defaultStat":"Maximum","defaultPeriod":21600}]},{"resourceType":"CW::Billing::Service","id":"CW::Billing:Service:NZD","namespace":"AWS/Billing","defaultPeriod":21600,"dimensions":[{"dimensionName":"Currency","dimensionValue":"NZD"},{"dimensionName":"ServiceName","labelName":"ServiceName"}],"metrics":[{"id":"CW::Billing:Service:NZD:EstimatedCharges","name":"EstimatedCharges","defaultStat":"Maximum","defaultPeriod":21600}]},{"resourceType":"CW::Billing::Service","id":"CW::Billing:Service:SEK","namespace":"AWS/Billing","defaultPeriod":21600,"dimensions":[{"dimensionName":"Currency","dimensionValue":"SEK"},{"dimensionName":"ServiceName","labelName":"ServiceName"}],"metrics":[{"id":"CW::Billing:Service:SEK:EstimatedCharges","name":"EstimatedCharges","defaultStat":"Maximum","defaultPeriod":21600}]},{"resourceType":"CW::Billing::Service","id":"CW::Billing:Service:ZAR","namespace":"AWS/Billing","defaultPeriod":21600,"dimensions":[{"dimensionName":"Currency","dimensionValue":"ZAR"},{"dimensionName":"ServiceName","labelName":"ServiceName"}],"metrics":[{"id":"CW::Billing:Service:ZAR:EstimatedCharges","name":"EstimatedCharges","defaultStat":"Maximum","defaultPeriod":21600}]},{"resourceType":"CW::Billing::Service","id":"CW::Billing:USD","namespace":"AWS/Billing","defaultPeriod":21600,"dimensions":[{"dimensionName":"Currency","dimensionValue":"USD"}],"metrics":[{"id":"CW::Billing:USD:EstimatedCharges","name":"EstimatedCharges","defaultStat":"Maximum","defaultPeriod":21600}]},{"resourceType":"CW::Billing::Service","id":"CW::Billing:AUD","namespace":"AWS/Billing","defaultPeriod":21600,"dimensions":[{"dimensionName":"Currency","dimensionValue":"AUD"}],"metrics":[{"id":"CW::Billing:AUD:EstimatedCharges","name":"EstimatedCharges","defaultStat":"Maximum","defaultPeriod":21600}]},{"resourceType":"CW::Billing::Service","id":"CW::Billing:CHF","namespace":"AWS/Billing","defaultPeriod":21600,"dimensions":[{"dimensionName":"Currency","dimensionValue":"CHF"}],"metrics":[{"id":"CW::Billing:CHF:EstimatedCharges","name":"EstimatedCharges","defaultStat":"Maximum","defaultPeriod":21600}]},{"resourceType":"CW::Billing::Service","id":"CW::Billing:DKK","namespace":"AWS/Billing","defaultPeriod":21600,"dimensions":[{"dimensionName":"Currency","dimensionValue":"DKK"}],"metrics":[{"id":"CW::Billing:DKK:EstimatedCharges","name":"EstimatedCharges","defaultStat":"Maximum","defaultPeriod":21600}]},{"resourceType":"CW::Billing::Service","id":"CW::Billing:EUR","namespace":"AWS/Billing","defaultPeriod":21600,"dimensions":[{"dimensionName":"Currency","dimensionValue":"EUR"}],"metrics":[{"id":"CW::Billing:EUR:EstimatedCharges","name":"EstimatedCharges","defaultStat":"Maximum","defaultPeriod":21600}]},{"resourceType":"CW::Billing::Service","id":"CW::Billing:GBP","namespace":"AWS/Billing","defaultPeriod":21600,"dimensions":[{"dimensionName":"Currency","dimensionValue":"GBP"}],"metrics":[{"id":"CW::Billing:GBP:EstimatedCharges","name":"EstimatedCharges","defaultStat":"Maximum","defaultPeriod":21600}]},{"resourceType":"CW::Billing::Service","id":"CW::Billing:HKD","namespace":"AWS/Billing","defaultPeriod":21600,"dimensions":[{"dimensionName":"Currency","dimensionValue":"HKD"}],"metrics":[{"id":"CW::Billing:HKD:EstimatedCharges","name":"EstimatedCharges","defaultStat":"Maximum","defaultPeriod":21600}]},{"resourceType":"CW::Billing::Service","id":"CW::Billing:JPY","namespace":"AWS/Billing","defaultPeriod":21600,"dimensions":[{"dimensionName":"Currency","dimensionValue":"JPY"}],"metrics":[{"id":"CW::Billing:JPY:EstimatedCharges","name":"EstimatedCharges","defaultStat":"Maximum","defaultPeriod":21600}]},{"resourceType":"CW::Billing::Service","id":"CW::Billing:NOK","namespace":"AWS/Billing","defaultPeriod":21600,"dimensions":[{"dimensionName":"Currency","dimensionValue":"NOK"}],"metrics":[{"id":"CW::Billing:NOK:EstimatedCharges","name":"EstimatedCharges","defaultStat":"Maximum","defaultPeriod":21600}]},{"resourceType":"CW::Billing::Service","id":"CW::Billing:NZD","namespace":"AWS/Billing","defaultPeriod":21600,"dimensions":[{"dimensionName":"Currency","dimensionValue":"NZD"}],"metrics":[{"id":"CW::Billing:NZD:EstimatedCharges","name":"EstimatedCharges","defaultStat":"Maximum","defaultPeriod":21600}]},{"resourceType":"CW::Billing::Service","id":"CW::Billing:SEK","namespace":"AWS/Billing","defaultPeriod":21600,"dimensions":[{"dimensionName":"Currency","dimensionValue":"SEK"}],"metrics":[{"id":"CW::Billing:SEK:EstimatedCharges","name":"EstimatedCharges","defaultStat":"Maximum","defaultPeriod":21600}]},{"resourceType":"CW::Billing::Service","id":"CW::Billing:ZAR","namespace":"AWS/Billing","defaultPeriod":21600,"dimensions":[{"dimensionName":"Currency","dimensionValue":"ZAR"}],"metrics":[{"id":"CW::Billing:ZAR:EstimatedCharges","name":"EstimatedCharges","defaultStat":"Maximum","defaultPeriod":21600}]}],"dashboards":[{"id":"Billing","name":"Billing","dependencies":[{"namespace":"AWS/Billing"}],"rows":[{"widgets":[{"type":"chart","width":24,"metrics":[],"properties":{"yAxis":{"left":{"showUnits":false,"label":"USD"}},"metrics":[["AWS/Billing","EstimatedCharges","Currency","USD",{"stat":"Maximum","period":21600}]]}}]},{"widgets":[{"type":"multi-chart","width":6,"properties":{"yAxis":{"left":{"showUnits":false,"label":"USD"}}},"source":"CW::Billing::Service:EstimatedCharges"}]}]}]},{"id":"AWS::Budgeting","dashboard":"Budgeting","crossServiceDashboard":"Budgeting:CrossService","resourceTypes":[{"type":"AWS::Budgeting::Budget","keyMetric":"AWS::Budgeting::Budget:CostBudgetPercentageUsed","dashboard":"Budgeting"}],"controls":{"AWS::Budgeting.budgets":{"type":"resource","resourceType":"AWS::Budgeting::Budget","labelField":"BudgetId","valueField":"BudgetId"}},"metricTemplates":[{"resourceType":"AWS::Budgeting::Budget","namespace":"AWS/Budgeting","dimensions":[{"dimensionName":"BudgetId","labelName":"BudgetId"},{"dimensionName":"Type","labelName":"Type"}],"metrics":[{"id":"AWS::Budgeting::Budget:CostBudgetPercentageUsed","name":"CostBudgetPercentageUsed","defaultStat":"Average"}]}],"dashboards":[{"id":"Budgeting:CrossService","name":"Budgeting","dependencies":[{"namespace":"AWS/Budgeting"}],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::Budgeting::Budget:CostBudgetPercentageUsed"}]}]}]},{"id":"Budgeting","name":"Budgeting","dependencies":[{"namespace":"AWS/Budgeting"}],"controls":["Shared::View.AlarmState","Shared::Group.ResourceGroup","AWS::Budgeting.budgets"],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::Budgeting::Budget:CostBudgetPercentageUsed"}]}]}]}]},{"id":"AWS::EC2::CapacityReservation","dashboard":"EC2CapacityReservations","crossServiceDashboard":"EC2CapacityReservations:CrossService","resourceTypes":[{"type":"AWS::EC2::CapacityReservation","keyMetric":"AWS::EC2::CapacityReservation:InstanceUtilization","dashboard":"EC2CapacityReservations","arnRegex":".*:capacity-reservation/(.*)"}],"metricTemplates":[{"resourceType":"AWS::EC2::CapacityReservation","namespace":"AWS/EC2CapacityReservations","dimensions":[{"dimensionName":"CapacityReservationId","labelName":"CapacityReservationId"}],"metrics":[{"id":"AWS::EC2::CapacityReservation:InstanceUtilization","name":"InstanceUtilization","defaultStat":"Average"},{"id":"AWS::EC2::CapacityReservation:UsedInstanceCount","name":"UsedInstanceCount","defaultStat":"Average"},{"id":"AWS::EC2::CapacityReservation:AvailableInstanceCount","name":"AvailableInstanceCount","defaultStat":"Average"},{"id":"AWS::EC2::CapacityReservation:TotalInstanceCount","name":"TotalInstanceCount","defaultStat":"Average"}]}],"dashboards":[{"id":"EC2CapacityReservations:CrossService","name":"EC2 Capacity Reservations","dependencies":[{"namespace":"AWS/EC2CapacityReservations"}],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::EC2::CapacityReservation:InstanceUtilization"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::EC2::CapacityReservation:UsedInstanceCount"}]}]}]},{"id":"EC2CapacityReservations","name":"EC2 Capacity Reservations","dependencies":[{"namespace":"AWS/EC2CapacityReservations"}],"controls":["Shared::View.AlarmState","Shared::Group.ResourceGroup"],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::EC2::CapacityReservation:InstanceUtilization"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::EC2::CapacityReservation:UsedInstanceCount"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::EC2::CapacityReservation:AvailableInstanceCount"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::EC2::CapacityReservation:TotalInstanceCount"}]}]}]}]},{"id":"AWS::CloudFront","dashboard":"CloudFront","crossServiceDashboard":"CloudFront:CrossService","resourceTypes":[{"type":"AWS::CloudFront::Distribution","keyMetric":"AWS::CloudFront::Distribution:Requests","dashboard":"CloudFront","arnRegex":".*:distribution/(.*)"}],"controls":{"AWS::CloudFront.distributions":{"type":"resource","resourceType":"AWS::CloudFront::Distribution","labelField":"DistributionId","valueField":"DistributionId"}},"metricTemplates":[{"resourceType":"AWS::CloudFront::Distribution","namespace":"AWS/CloudFront","dimensions":[{"dimensionName":"DistributionId","labelName":"DistributionId"},{"dimensionName":"Region","dimensionValue":"Global"}],"metrics":[{"id":"AWS::CloudFront::Distribution:Requests","name":"Requests","defaultStat":"Sum"},{"id":"AWS::CloudFront::Distribution:TotalErrorRate","name":"TotalErrorRate","defaultStat":"Average"},{"id":"AWS::CloudFront::Distribution:BytesDownloaded","name":"BytesDownloaded","defaultStat":"Sum"},{"id":"AWS::CloudFront::Distribution:BytesUploaded","name":"BytesUploaded","defaultStat":"Sum"},{"id":"AWS::CloudFront::Distribution:4xxErrorRate","name":"4xxErrorRate","defaultStat":"Average"},{"id":"AWS::CloudFront::Distribution:5xxErrorRate","name":"5xxErrorRate","defaultStat":"Average"}]}],"dashboards":[{"id":"CloudFront:CrossService","name":"CloudFront","dependencies":[{"namespace":"AWS/CloudFront"}],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::CloudFront::Distribution:Requests"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::CloudFront::Distribution:TotalErrorRate"}]}]}]},{"id":"CloudFront","name":"CloudFront","dependencies":[{"namespace":"AWS/CloudFront"}],"controls":["Shared::View.AlarmState","Shared::Group.ResourceGroup","AWS::CloudFront.distributions"],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::CloudFront::Distribution:Requests"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::CloudFront::Distribution:TotalErrorRate"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::CloudFront::Distribution:BytesDownloaded"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::CloudFront::Distribution:BytesUploaded"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::CloudFront::Distribution:4xxErrorRate"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::CloudFront::Distribution:5xxErrorRate"}]}]}]}]},{"id":"AWS::CloudHSM","dashboard":"CloudHSM","crossServiceDashboard":"CloudHSM:CrossService","resourceTypes":[{"type":"AWS::CloudHSM::Cluster","keyMetric":"AWS::CloudHSM::Cluster:CpuActivePercent","dashboard":"CloudHSM"}],"controls":{"AWS::CloudHSM.clusters":{"type":"resource","resourceType":"AWS::CloudHSM::Cluster","labelField":"ClusterId","valueField":"ClusterId"}},"metricTemplates":[{"resourceType":"AWS::CloudHSM::Cluster","namespace":"AWS/CloudHSM","dimensions":[{"dimensionName":"ClusterId","labelName":"ClusterId"},{"dimensionName":"HsmId","labelName":"HsmId"}],"metrics":[{"id":"AWS::CloudHSM::Cluster:CpuActivePercent","name":"CpuActivePercent","defaultStat":"Average"},{"id":"AWS::CloudHSM::Cluster:HsmKeysSessionOccupied","name":"HsmKeysSessionOccupied","defaultStat":"Sum"},{"id":"AWS::CloudHSM::Cluster:HsmKeysTokenOccupied","name":"HsmKeysTokenOccupied","defaultStat":"Sum"},{"id":"AWS::CloudHSM::Cluster:HsmMemoryPrivateFree","name":"HsmMemoryPrivateFree","defaultStat":"Sum"},{"id":"AWS::CloudHSM::Cluster:HsmMemoryPublicFree","name":"HsmMemoryPublicFree","defaultStat":"Sum"},{"id":"AWS::CloudHSM::Cluster:HsmSessionCount","name":"HsmSessionCount","defaultStat":"Sum"},{"id":"AWS::CloudHSM::Cluster:HsmTemperature","name":"HsmTemperature","defaultStat":"Average"},{"id":"AWS::CloudHSM::Cluster:HsmUnhealthy","name":"HsmUnhealthy","defaultStat":"Sum"},{"id":"AWS::CloudHSM::Cluster:HsmUsersAvailable","name":"HsmUsersAvailable","defaultStat":"Sum"},{"id":"AWS::CloudHSM::Cluster:HsmUsersMax","name":"HsmUsersMax","defaultStat":"Maximum"},{"id":"AWS::CloudHSM::Cluster:InterfaceEth2DroppedInput","name":"InterfaceEth2DroppedInput","defaultStat":"Sum"},{"id":"AWS::CloudHSM::Cluster:InterfaceEth2DroppedOutput","name":"InterfaceEth2DroppedOutput","defaultStat":"Sum"},{"id":"AWS::CloudHSM::Cluster:InterfaceEth2ErrorsOutput","name":"InterfaceEth2ErrorsOutput","defaultStat":"Sum"},{"id":"AWS::CloudHSM::Cluster:InterfaceEth2OctetsInput","name":"InterfaceEth2OctetsInput","defaultStat":"Sum"},{"id":"AWS::CloudHSM::Cluster:InterfaceEth2OctetsOutput","name":"InterfaceEth2OctetsOutput","defaultStat":"Sum"},{"id":"AWS::CloudHSM::Cluster:InterfaceEth2PacketsInput","name":"InterfaceEth2PacketsInput","defaultStat":"Sum"}]}],"dashboards":[{"id":"CloudHSM:CrossService","name":"CloudHSM","dependencies":[{"namespace":"AWS/CloudHSM"}],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::CloudHSM::Cluster:CpuActivePercent"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::CloudHSM::Cluster:HsmKeysSessionOccupied"}]}]}]},{"id":"CloudHSM","name":"CloudHSM","dependencies":[{"namespace":"AWS/CloudHSM"}],"controls":["Shared::View.AlarmState","Shared::Group.ResourceGroup","AWS::CloudHSM.clusters"],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::CloudHSM::Cluster:CpuActivePercent"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::CloudHSM::Cluster:HsmKeysSessionOccupied"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::CloudHSM::Cluster:HsmKeysTokenOccupied"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::CloudHSM::Cluster:HsmMemoryPrivateFree"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::CloudHSM::Cluster:HsmMemoryPublicFree"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::CloudHSM::Cluster:HsmSessionCount"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::CloudHSM::Cluster:HsmTemperature"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::CloudHSM::Cluster:HsmUnhealthy"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::CloudHSM::Cluster:HsmUsersAvailable"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::CloudHSM::Cluster:HsmUsersMax"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::CloudHSM::Cluster:InterfaceEth2DroppedInput"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::CloudHSM::Cluster:InterfaceEth2DroppedOutput"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::CloudHSM::Cluster:InterfaceEth2ErrorsOutput"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::CloudHSM::Cluster:InterfaceEth2OctetsInput"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::CloudHSM::Cluster:InterfaceEth2OctetsOutput"}]}]},{"widgets":[{"type":"chart","width":8,"metrics":[{"metricTemplate":"AWS::CloudHSM::Cluster:InterfaceEth2PacketsInput"}]}]}]}]},{"id":"AWS::CloudSearch","dashboard":"CloudSearch","crossServiceDashboard":"CloudSearch:CrossService","resourceTypes":[{"type":"AWS::CloudSearch::Client","keyMetric":"AWS::CloudSearch::Client:SuccessfulRequests","dashboard":"CloudSearch"}],"controls":{"AWS::CloudSearch.clients":{"type":"resource","resourceType":"AWS::CloudSearch::Client","labelField":"ClientId","valueField":"ClientId"}},"metricTemplates":[{"resourceType":"AWS::CloudSearch::Client","namespace":"AWS/CloudSearch","dimensions":[{"dimensionName":"ClientId","labelName":"ClientId"},{"dimensionName":"DomainName","labelName":"DomainName"}],"metrics":[{"id":"AWS::CloudSearch::Client:SuccessfulRequests","name":"SuccessfulRequests","defaultStat":"Sum"},{"id":"AWS::CloudSearch::Client:IndexUtilization","name":"IndexUtilization","defaultStat":"Average"},{"id":"AWS::CloudSearch::Client:SearchableDocuments","name":"SearchableDocuments","defaultStat":"Maximum"},{"id":"AWS::CloudSearch::Client:Partitions","name":"Partitions","defaultStat":"Maximum"}]}],"dashboards":[{"id":"CloudSearch:CrossService","name":"CloudSearch","dependencies":[{"namespace":"AWS/CloudSearch"}],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::CloudSearch::Client:SuccessfulRequests"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::CloudSearch::Client:IndexUtilization"}]}]}]},{"id":"CloudSearch","name":"CloudSearch","dependencies":[{"namespace":"AWS/CloudSearch"}],"controls":["Shared::View.AlarmState","Shared::Group.ResourceGroup","AWS::CloudSearch.clients"],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::CloudSearch::Client:SuccessfulRequests"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::CloudSearch::Client:IndexUtilization"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::CloudSearch::Client:SearchableDocuments"}]}]},{"widgets":[{"type":"chart","width":8,"metrics":[{"metricTemplate":"AWS::CloudSearch::Client:Partitions"}]}]}]}]},{"id":"AWS::CodeBuild","dashboard":"CodeBuild","crossServiceDashboard":"CodeBuild:CrossService","resourceTypes":[{"type":"AWS::CodeBuild::Project","keyMetric":"AWS::CodeBuild::Project:SucceededBuilds","dashboard":"CodeBuild","arnRegex":".*:project/(.*)"}],"controls":{"AWS::CodeBuild.projects":{"type":"resource","resourceType":"AWS::CodeBuild::Project","labelField":"ProjectName","valueField":"ProjectName"}},"metricTemplates":[{"resourceType":"AWS::CodeBuild::Project","namespace":"AWS/CodeBuild","dimensions":[{"dimensionName":"ProjectName","labelName":"ProjectName"}],"metrics":[{"id":"AWS::CodeBuild::Project:SucceededBuilds","name":"SucceededBuilds","defaultStat":"Sum"},{"id":"AWS::CodeBuild::Project:FailedBuilds","name":"FailedBuilds","defaultStat":"Sum"},{"id":"AWS::CodeBuild::Project:Builds","name":"Builds","defaultStat":"Sum"},{"id":"AWS::CodeBuild::Project:Duration","name":"Duration","defaultStat":"Average"}]}],"dashboards":[{"id":"CodeBuild:CrossService","name":"CodeBuild","dependencies":[{"namespace":"AWS/CodeBuild"}],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::CodeBuild::Project:SucceededBuilds"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::CodeBuild::Project:FailedBuilds"}]}]}]},{"id":"CodeBuild","name":"CodeBuild","dependencies":[{"namespace":"AWS/CodeBuild"}],"controls":["Shared::View.AlarmState","Shared::Group.ResourceGroup","AWS::CodeBuild.projects"],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::CodeBuild::Project:SucceededBuilds"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::CodeBuild::Project:FailedBuilds"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::CodeBuild::Project:Builds"}]}]},{"widgets":[{"type":"chart","width":8,"metrics":[{"metricTemplate":"AWS::CodeBuild::Project:Duration"}]}]}]}]},{"id":"AWS::Cognito","dashboard":"Cognito","crossServiceDashboard":"Cognito:CrossService","resourceTypes":[{"type":"AWS::Cognito::UserPool","keyMetric":"AWS::Cognito::UserPool:Risk","dashboard":"Cognito","arnRegex":".*:userpool/(.*)"}],"controls":{"AWS::Cognito.userPools":{"type":"resource","resourceType":"AWS::Cognito::UserPool","labelField":"UserPoolId","valueField":"UserPoolId"}},"metricTemplates":[{"resourceType":"AWS::Cognito::UserPool","namespace":"AWS/Cognito","dimensions":[{"dimensionName":"Operation","labelName":"Operation"},{"dimensionName":"UserPoolId","labelName":"UserPoolId"}],"metrics":[{"id":"AWS::Cognito::UserPool:NoRisk","name":"NoRisk","defaultStat":"Sum"},{"id":"AWS::Cognito::UserPool:Risk","name":"Risk","defaultStat":"Sum"}]}],"dashboards":[{"id":"Cognito:CrossService","name":"Cognito","dependencies":[{"namespace":"AWS/Cognito"}],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::Cognito::UserPool:NoRisk"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::Cognito::UserPool:Risk"}]}]}]},{"id":"Cognito","name":"Cognito","dependencies":[{"namespace":"AWS/Cognito"}],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::Cognito::UserPool:NoRisk"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::Cognito::UserPool:Risk"}]}]}]}]},{"id":"CrossService","dashboard":"CrossService","resourceTypes":[],"controls":{},"metricTemplates":[],"dashboards":[{"id":"CrossService","name":"CrossService","dependencies":[],"controls":["Shared::Group.ResourceGroup"],"rows":[]}]},{"id":"AWS::Datasync","dashboard":"DataSync","crossServiceDashboard":"DataSync:CrossService","resourceTypes":[{"type":"AWS::Datasync::Agent","keyMetric":"AWS::Datasync::Agent:FilesTransferred","dashboard":"DataSync","arnRegex":".*:agent/(.*)"},{"type":"AWS::Datasync::Task","keyMetric":"AWS::Datasync::Task:FilesTransferred","dashboard":"DataSync","arnRegex":".*:task/(.*)"}],"metricTemplates":[{"resourceType":"AWS::Datasync::Agent","namespace":"AWS/DataSync","dimensions":[{"dimensionName":"AgentId","labelName":"AgentId"}],"metrics":[{"id":"AWS::Datasync::Agent:FilesTransferred","name":"FilesTransferred","defaultStat":"Sum"},{"id":"AWS::Datasync::Agent:BytesTransferred","name":"BytesTransferred","defaultStat":"Sum"},{"id":"AWS::Datasync::Agent:BytesPreparedDestination","name":"BytesPreparedDestination","defaultStat":"Sum"},{"id":"AWS::Datasync::Agent:BytesPreparedSource","name":"BytesPreparedSource","defaultStat":"Sum"},{"id":"AWS::Datasync::Agent:BytesVerifiedDestination","name":"BytesVerifiedDestination","defaultStat":"Sum"},{"id":"AWS::Datasync::Agent:BytesVerifiedSource","name":"BytesVerifiedSource","defaultStat":"Sum"},{"id":"AWS::Datasync::Agent:BytesWritten","name":"BytesWritten","defaultStat":"Sum"},{"id":"AWS::Datasync::Agent:FilesPreparedDestination","name":"FilesPreparedDestination","defaultStat":"Sum"},{"id":"AWS::Datasync::Agent:FilesPreparedSource","name":"FilesPreparedSource","defaultStat":"Sum"},{"id":"AWS::Datasync::Agent:FilesVerifiedDestination","name":"FilesVerifiedDestination","defaultStat":"Sum"},{"id":"AWS::Datasync::Agent:FilesVerifiedSource","name":"FilesVerifiedSource","defaultStat":"Sum"}]},{"resourceType":"AWS::Datasync::Task","namespace":"AWS/DataSync","dimensions":[{"dimensionName":"TaskId","labelName":"TaskId"}],"metrics":[{"id":"AWS::Datasync::Task:FilesTransferred","name":"FilesTransferred","defaultStat":"Sum"},{"id":"AWS::Datasync::Task:BytesTransferred","name":"BytesTransferred","defaultStat":"Sum"},{"id":"AWS::Datasync::Task:BytesPreparedDestination","name":"BytesPreparedDestination","defaultStat":"Sum"},{"id":"AWS::Datasync::Task:BytesPreparedSource","name":"BytesPreparedSource","defaultStat":"Sum"},{"id":"AWS::Datasync::Task:BytesVerifiedDestination","name":"BytesVerifiedDestination","defaultStat":"Sum"},{"id":"AWS::Datasync::Task:BytesVerifiedSource","name":"BytesVerifiedSource","defaultStat":"Sum"},{"id":"AWS::Datasync::Task:BytesWritten","name":"BytesWritten","defaultStat":"Sum"},{"id":"AWS::Datasync::Task:FilesPreparedDestination","name":"FilesPreparedDestination","defaultStat":"Sum"},{"id":"AWS::Datasync::Task:FilesPreparedSource","name":"FilesPreparedSource","defaultStat":"Sum"},{"id":"AWS::Datasync::Task:FilesVerifiedDestination","name":"FilesVerifiedDestination","defaultStat":"Sum"},{"id":"AWS::Datasync::Task:FilesVerifiedSource","name":"FilesVerifiedSource","defaultStat":"Sum"}]}],"dashboards":[{"id":"DataSync:CrossService","name":"DataSync","dependencies":[{"namespace":"AWS/DataSync"}],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::Datasync::Agent:FilesTransferred"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::Datasync::Agent:BytesTransferred"}]}]}]},{"id":"DataSync","name":"DataSync","dependencies":[{"namespace":"AWS/DataSync"}],"controls":["Shared::View.AlarmState","Shared::Group.ResourceGroup"],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::Datasync::Agent:FilesTransferred"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::Datasync::Agent:BytesTransferred"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::Datasync::Agent:BytesPreparedDestination"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::Datasync::Agent:BytesPreparedSource"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::Datasync::Agent:BytesVerifiedDestination"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::Datasync::Agent:BytesVerifiedSource"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::Datasync::Agent:BytesWritten"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::Datasync::Agent:FilesPreparedDestination"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::Datasync::Agent:FilesPreparedSource"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::Datasync::Agent:FilesVerifiedDestination"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::Datasync::Agent:FilesVerifiedSource"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::Datasync::Task:FilesTransferred"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::Datasync::Task:BytesTransferred"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::Datasync::Task:BytesPreparedDestination"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::Datasync::Task:BytesPreparedSource"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::Datasync::Task:BytesVerifiedDestination"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::Datasync::Task:BytesVerifiedSource"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::Datasync::Task:BytesWritten"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::Datasync::Task:FilesPreparedDestination"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::Datasync::Task:FilesPreparedSource"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::Datasync::Task:FilesVerifiedDestination"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::Datasync::Task:FilesVerifiedSource"}]}]}]}]},{"id":"AWS::DAX::Cluster","dashboard":"DAX","crossServiceDashboard":"DAX:CrossService","resourceTypes":[{"type":"AWS::DAX::Cluster","keyMetric":"AWS::DAX::Cluster:CPUUtilization","dashboard":"DAX","arnRegex":".*:cache/(.*)"}],"metricTemplates":[{"resourceType":"AWS::DAX::Cluster","namespace":"AWS/DAX","dimensions":[],"metrics":[{"id":"AWS::DAX::Cluster:CPUUtilization","name":"CPUUtilization","defaultStat":"Average"},{"id":"AWS::DAX::Cluster:FailedRequestCount","name":"FailedRequestCount","defaultStat":"Sum"},{"id":"AWS::DAX::Cluster:BatchGetItemRequestCount","name":"BatchGetItemRequestCount","defaultStat":"Sum"},{"id":"AWS::DAX::Cluster:ErrorRequestCount","name":"ErrorRequestCount","defaultStat":"Sum"},{"id":"AWS::DAX::Cluster:EstimatedDbSize","name":"EstimatedDbSize","defaultStat":"Average"},{"id":"AWS::DAX::Cluster:EvictedSize","name":"EvictedSize","defaultStat":"Average"},{"id":"AWS::DAX::Cluster:FaultRequestCount","name":"FaultRequestCount","defaultStat":"Sum"},{"id":"AWS::DAX::Cluster:GetItemRequestCount","name":"GetItemRequestCount","defaultStat":"Sum"},{"id":"AWS::DAX::Cluster:ItemCacheHits","name":"ItemCacheHits","defaultStat":"Sum"},{"id":"AWS::DAX::Cluster:ItemCacheMisses","name":"ItemCacheMisses","defaultStat":"Sum"},{"id":"AWS::DAX::Cluster:QueryCacheHits","name":"QueryCacheHits","defaultStat":"Sum"},{"id":"AWS::DAX::Cluster:QueryRequestCount","name":"QueryRequestCount","defaultStat":"Sum"},{"id":"AWS::DAX::Cluster:ScanCacheHits","name":"ScanCacheHits","defaultStat":"Sum"},{"id":"AWS::DAX::Cluster:TotalRequestCount","name":"TotalRequestCount","defaultStat":"Sum"}]}],"dashboards":[{"id":"DAX:CrossService","name":"DynamoDB Accelerator (DAX)","dependencies":[{"namespace":"AWS/DAX"}],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::DAX::Cluster:CPUUtilization"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::DAX::Cluster:ItemCacheHits"}]}]}]},{"id":"DAX","name":"DynamoDB Accelerator (DAX)","dependencies":[{"namespace":"AWS/DAX"}],"controls":["Shared::View.AlarmState","Shared::Group.ResourceGroup"],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::DAX::Cluster:CPUUtilization"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::DAX::Cluster:FailedRequestCount"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::DAX::Cluster:BatchGetItemRequestCount"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::DAX::Cluster:ErrorRequestCount"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::DAX::Cluster:EstimatedDbSize"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::DAX::Cluster:EvictedSize"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::DAX::Cluster:FaultRequestCount"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::DAX::Cluster:GetItemRequestCount"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::DAX::Cluster:ItemCacheHits"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::DAX::Cluster:ItemCacheMisses"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::DAX::Cluster:QueryCacheHits"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::DAX::Cluster:QueryRequestCount"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::DAX::Cluster:ScanCacheHits"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::DAX::Cluster:TotalRequestCount"}]}]}]}]},{"id":"AWS::DDoSProtection","dashboard":"DDoSProtection","crossServiceDashboard":"DDoSProtection:CrossService","resourceTypes":[{"type":"AWS::DDoSProtection::AttackVector","keyMetric":"AWS::DDoSProtection::AttackVector:DDoSAttackRequestsPerSecond","dashboard":"DDoSProtection"}],"controls":{"AWS::DDoSProtection.attackVectors":{"type":"resource","resourceType":"AWS::DDoSProtection::AttackVector","labelField":"AttackVector","valueField":"AttackVector"}},"metricTemplates":[{"resourceType":"AWS::DDoSProtection::AttackVector","namespace":"AWS/DDoSProtection","dimensions":[{"dimensionName":"AttackVector","labelName":"AttackVector"},{"dimensionName":"ResourceArn","labelName":"ResourceArn"}],"metrics":[{"id":"AWS::DDoSProtection::AttackVector:DDoSAttackRequestsPerSecond","name":"DDoSAttackRequestsPerSecond","defaultStat":"Average"},{"id":"AWS::DDoSProtection::AttackVector:DDoSAttackBitsPerSecond","name":"DDoSAttackBitsPerSecond","defaultStat":"Average"},{"id":"AWS::DDoSProtection::AttackVector:DDoSAttackPacketsPerSecond","name":"DDoSAttackPacketsPerSecond","defaultStat":"Average"}]}],"dashboards":[{"id":"DDoSProtection:CrossService","name":"DDoS Protection","dependencies":[{"namespace":"AWS/DDoSProtection"}],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::DDoSProtection::AttackVector:DDoSAttackRequestsPerSecond"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::DDoSProtection::AttackVector:DDoSAttackBitsPerSecond"}]}]}]},{"id":"DDoSProtection","name":"DDoS Protection","dependencies":[{"namespace":"AWS/DDoSProtection"}],"controls":["Shared::View.AlarmState","Shared::Group.ResourceGroup","AWS::DDoSProtection.attackVectors"],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::DDoSProtection::AttackVector:DDoSAttackRequestsPerSecond"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::DDoSProtection::AttackVector:DDoSAttackBitsPerSecond"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::DDoSProtection::AttackVector:DDoSAttackPacketsPerSecond"}]}]}]}]},{"id":"AWS::DMS::ReplicationInstance","dashboard":"DMS","crossServiceDashboard":"DMS:CrossService","resourceTypes":[{"type":"AWS::DMS::ReplicationInstance","keyMetric":"AWS::DMS::ReplicationInstance:CDCLatencyTarget","dashboard":"DMS","arnRegex":".*:rep:(.*)"}],"metricTemplates":[{"resourceType":"AWS::DMS::ReplicationInstance","namespace":"AWS/DMS","dimensions":[{"dimensionName":"ReplicationInstanceIdentifier","labelName":"ReplicationInstanceIdentifier"}],"metrics":[{"id":"AWS::DMS::ReplicationInstance:CDCLatencyTarget","name":"CDCLatencyTarget","defaultStat":"Sum"},{"id":"AWS::DMS::ReplicationInstance:CDCLatencySource","name":"CDCLatencySource","defaultStat":"Sum"},{"id":"AWS::DMS::ReplicationInstance:AvailableMemory","name":"AvailableMemory","defaultStat":"Average"},{"id":"AWS::DMS::ReplicationInstance:CDCChangesDiskTarget","name":"CDCChangesDiskTarget","defaultStat":"Sum"},{"id":"AWS::DMS::ReplicationInstance:CDCChangesMemorySource","name":"CDCChangesMemorySource","defaultStat":"Sum"},{"id":"AWS::DMS::ReplicationInstance:CDCChangesMemoryTarget","name":"CDCChangesMemoryTarget","defaultStat":"Sum"},{"id":"AWS::DMS::ReplicationInstance:CDCIncomingChanges","name":"CDCIncomingChanges","defaultStat":"Sum"},{"id":"AWS::DMS::ReplicationInstance:CDCThroughputBandwidthSource","name":"CDCThroughputBandwidthSource","defaultStat":"Sum"},{"id":"AWS::DMS::ReplicationInstance:CDCThroughputBandwidthTarget","name":"CDCThroughputBandwidthTarget","defaultStat":"Sum"},{"id":"AWS::DMS::ReplicationInstance:CDCThroughputRowsSource","name":"CDCThroughputRowsSource","defaultStat":"Sum"},{"id":"AWS::DMS::ReplicationInstance:CDCThroughputRowsTarget","name":"CDCThroughputRowsTarget","defaultStat":"Sum"},{"id":"AWS::DMS::ReplicationInstance:CPUAllocated","name":"CPUAllocated","defaultStat":"Sum"},{"id":"AWS::DMS::ReplicationInstance:CPUUtilization","name":"CPUUtilization","defaultStat":"Average"},{"id":"AWS::DMS::ReplicationInstance:FreeMemory","name":"FreeMemory","defaultStat":"Average"},{"id":"AWS::DMS::ReplicationInstance:FullLoadThroughputBandwidthSource","name":"FullLoadThroughputBandwidthSource","defaultStat":"Sum"},{"id":"AWS::DMS::ReplicationInstance:FullLoadThroughputBandwidthTarget","name":"FullLoadThroughputBandwidthTarget","defaultStat":"Sum"},{"id":"AWS::DMS::ReplicationInstance:FullLoadThroughputRowsSource","name":"FullLoadThroughputRowsSource","defaultStat":"Sum"},{"id":"AWS::DMS::ReplicationInstance:FullLoadThroughputRowsTarget","name":"FullLoadThroughputRowsTarget","defaultStat":"Sum"},{"id":"AWS::DMS::ReplicationInstance:MemoryAllocated","name":"MemoryAllocated","defaultStat":"Average"},{"id":"AWS::DMS::ReplicationInstance:MemoryUsage","name":"MemoryUsage","defaultStat":"Average"},{"id":"AWS::DMS::ReplicationInstance:SwapUsage","name":"SwapUsage","defaultStat":"Average"}]}],"dashboards":[{"id":"DMS:CrossService","name":"Database Migration Service","dependencies":[{"namespace":"AWS/DMS"}],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::DMS::ReplicationInstance:CDCLatencyTarget"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::DMS::ReplicationInstance:CDCLatencySource"}]}]}]},{"id":"DMS","name":"Database Migration Service","dependencies":[{"namespace":"AWS/DMS"}],"controls":["Shared::View.AlarmState","Shared::Group.ResourceGroup"],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::DMS::ReplicationInstance:CDCLatencyTarget"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::DMS::ReplicationInstance:CDCLatencySource"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::DMS::ReplicationInstance:AvailableMemory"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::DMS::ReplicationInstance:CDCChangesDiskTarget"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::DMS::ReplicationInstance:CDCChangesMemorySource"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::DMS::ReplicationInstance:CDCChangesMemoryTarget"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::DMS::ReplicationInstance:CDCIncomingChanges"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::DMS::ReplicationInstance:CDCThroughputBandwidthSource"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::DMS::ReplicationInstance:CDCThroughputBandwidthTarget"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::DMS::ReplicationInstance:CDCThroughputRowsSource"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::DMS::ReplicationInstance:CDCThroughputRowsTarget"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::DMS::ReplicationInstance:CPUAllocated"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::DMS::ReplicationInstance:CPUUtilization"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::DMS::ReplicationInstance:FreeMemory"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::DMS::ReplicationInstance:FullLoadThroughputBandwidthSource"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::DMS::ReplicationInstance:FullLoadThroughputBandwidthTarget"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::DMS::ReplicationInstance:FullLoadThroughputRowsSource"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::DMS::ReplicationInstance:FullLoadThroughputRowsTarget"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::DMS::ReplicationInstance:MemoryAllocated"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::DMS::ReplicationInstance:MemoryUsage"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::DMS::ReplicationInstance:SwapUsage"}]}]}]}]},{"id":"AWS::DocDB","dashboard":"DocDB","crossServiceDashboard":"DocDB:CrossService","resourceTypes":[{"type":"AWS::DocDB::DBInstance","keyMetric":"AWS::DocDB::DBInstance:CPUUtilization","dashboard":"DocDB"}],"controls":{"AWS::DocDB.dBInstances":{"type":"resource","resourceType":"AWS::DocDB::DBInstance","labelField":"DBInstanceIdentifier","valueField":"DBInstanceIdentifier"}},"metricTemplates":[{"resourceType":"AWS::DocDB::DBInstance","namespace":"AWS/DocDB","dimensions":[{"dimensionName":"DBInstanceIdentifier","labelName":"DBInstanceIdentifier"}],"metrics":[{"id":"AWS::DocDB::DBInstance:CPUUtilization","name":"CPUUtilization","defaultStat":"Average"},{"id":"AWS::DocDB::DBInstance:DatabaseConnections","name":"DatabaseConnections","defaultStat":"Average"},{"id":"AWS::DocDB::DBInstance:EngineUptime","name":"EngineUptime","defaultStat":"Average"},{"id":"AWS::DocDB::DBInstance:ReadThroughput","name":"ReadThroughput","defaultStat":"Sum"},{"id":"AWS::DocDB::DBInstance:WriteThroughput","name":"WriteThroughput","defaultStat":"Sum"}]}],"dashboards":[{"id":"DocDB:CrossService","name":"DocumentDB","dependencies":[{"namespace":"AWS/DocDB"}],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::DocDB::DBInstance:CPUUtilization"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::DocDB::DBInstance:DatabaseConnections"}]}]}]},{"id":"DocDB","name":"DocumentDB","dependencies":[{"namespace":"AWS/DocDB"}],"controls":["Shared::View.AlarmState","Shared::Group.ResourceGroup","AWS::DocDB.dBInstances"],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::DocDB::DBInstance:CPUUtilization"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::DocDB::DBInstance:DatabaseConnections"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::DocDB::DBInstance:EngineUptime"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::DocDB::DBInstance:ReadThroughput"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::DocDB::DBInstance:WriteThroughput"}]}]}]}]},{"id":"AWS::DX","dashboard":"DX","crossServiceDashboard":"DX:CrossService","resourceTypes":[{"type":"AWS::DX::Connection","keyMetric":"AWS::DX::Connection:ConnectionBpsIngress","dashboard":"DX"}],"controls":{"AWS::DX.connections":{"type":"resource","resourceType":"AWS::DX::Connection","labelField":"ConnectionId","valueField":"ConnectionId"}},"metricTemplates":[{"resourceType":"AWS::DX::Connection","namespace":"AWS/DX","dimensions":[{"dimensionName":"ConnectionId","labelName":"ConnectionId"}],"metrics":[{"id":"AWS::DX::Connection:ConnectionBpsIngress","name":"ConnectionBpsIngress","defaultStat":"Average"},{"id":"AWS::DX::Connection:ConnectionCRCErrorCount","name":"ConnectionCRCErrorCount","defaultStat":"Sum"},{"id":"AWS::DX::Connection:ConnectionState","name":"ConnectionState","defaultStat":"Average"},{"id":"AWS::DX::Connection:ConnectionBpsEgress","name":"ConnectionBpsEgress","defaultStat":"Average"},{"id":"AWS::DX::Connection:ConnectionPpsEgress","name":"ConnectionPpsEgress","defaultStat":"Average"},{"id":"AWS::DX::Connection:ConnectionPpsIngress","name":"ConnectionPpsIngress","defaultStat":"Average"},{"id":"AWS::DX::Connection:ConnectionLightLevelTx","name":"ConnectionLightLevelTx","defaultStat":"Average"},{"id":"AWS::DX::Connection:ConnectionLightLevelRx","name":"ConnectionLightLevelRx","defaultStat":"Average"}]}],"dashboards":[{"id":"DX:CrossService","name":"Direct Connect","dependencies":[{"namespace":"AWS/DX"}],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::DX::Connection:ConnectionBpsIngress"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::DX::Connection:ConnectionCRCErrorCount"}]}]}]},{"id":"DX","name":"Direct Connect","dependencies":[{"namespace":"AWS/DX"}],"controls":["Shared::View.AlarmState","Shared::Group.ResourceGroup","AWS::DX.connections"],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::DX::Connection:ConnectionBpsIngress"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::DX::Connection:ConnectionCRCErrorCount"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::DX::Connection:ConnectionState"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::DX::Connection:ConnectionBpsEgress"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::DX::Connection:ConnectionPpsEgress"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::DX::Connection:ConnectionPpsIngress"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::DX::Connection:ConnectionLightLevelTx"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::DX::Connection:ConnectionLightLevelRx"}]}]}]}]},{"id":"AWS::DynamoDB","dashboard":"DynamoDB","crossServiceDashboard":"DynamoDB:CrossService","resourceTypes":[{"type":"AWS::DynamoDB::Table","arnRegex":".*:table/(.*)","keyMetric":"AWS::DynamoDB::Table:ProvisionedReadCapacityUnits","dashboard":"DynamoDB","describe":"dynamo-db-describe-tables","consoleLink":"/dynamodb/home?region={region}#tables:selected={TableName}","isResourceNode":true}],"controls":{"AWS::DynamoDB.tables":{"type":"resource","resourceType":"AWS::DynamoDB::Table","labelField":"TableName","valueField":"TableName"}},"metricTemplates":[{"resourceType":"AWS::DynamoDB::Table","namespace":"AWS/DynamoDB","dimensions":[{"dimensionName":"TableName","labelName":"TableName"}],"metrics":[{"id":"AWS::DynamoDB::Table:ConditionalCheckFailedRequests","name":"ConditionalCheckFailedRequests","defaultStat":"Sum"},{"id":"AWS::DynamoDB::Table:ConsumedReadCapacityUnits","name":"ConsumedReadCapacityUnits","defaultStat":"Sum"},{"id":"AWS::DynamoDB::Table:ConsumedWriteCapacityUnits","name":"ConsumedWriteCapacityUnits","defaultStat":"Sum"},{"id":"AWS::DynamoDB::Table:ProvisionedReadCapacityUnits","name":"ProvisionedReadCapacityUnits","defaultStat":"Average"},{"id":"AWS::DynamoDB::Table:ProvisionedWriteCapacityUnits","name":"ProvisionedWriteCapacityUnits","defaultStat":"Average"},{"id":"AWS::DynamoDB::Table:ReadThrottleEvents","name":"ReadThrottleEvents","defaultStat":"Sum"},{"id":"AWS::DynamoDB::Table:TimeToLiveDeletedItemCount","name":"TimeToLiveDeletedItemCount","defaultStat":"Sum"},{"id":"AWS::DynamoDB::Table:TransactionConflict","name":"TransactionConflict","defaultStat":"Average"},{"id":"AWS::DynamoDB::Table:WriteThrottleEvents","name":"WriteThrottleEvents","defaultStat":"Sum"}]},{"resourceType":"AWS::DynamoDB::Table","id":"AWS::DynamoDB::Table:GetItem","namespace":"AWS/DynamoDB","dimensions":[{"dimensionName":"TableName","labelName":"TableName"},{"dimensionName":"Operation","dimensionValue":"GetItem"}],"metrics":[{"id":"AWS::DynamoDB::Table:GetItem:SuccessfulRequestLatency","name":"SuccessfulRequestLatency","defaultStat":"Average"},{"id":"AWS::DynamoDB::Table:GetItem:SystemErrors","name":"SystemErrors","defaultStat":"Sum"},{"id":"AWS::DynamoDB::Table:GetItem:ThrottledRequests","name":"ThrottledRequests","defaultStat":"Sum"}]},{"resourceType":"AWS::DynamoDB::Table","id":"AWS::DynamoDB::Table:PutItem","namespace":"AWS/DynamoDB","dimensions":[{"dimensionName":"TableName","labelName":"TableName"},{"dimensionName":"Operation","dimensionValue":"PutItem"}],"metrics":[{"id":"AWS::DynamoDB::Table:PutItem:SuccessfulRequestLatency","name":"SuccessfulRequestLatency","defaultStat":"Average"},{"id":"AWS::DynamoDB::Table:PutItem:SystemErrors","name":"SystemErrors","defaultStat":"Sum"},{"id":"AWS::DynamoDB::Table:PutItem:ThrottledRequests","name":"ThrottledRequests","defaultStat":"Sum"}]},{"resourceType":"AWS::DynamoDB::Table","id":"AWS::DynamoDB::Table:GetRecords","namespace":"AWS/DynamoDB","dimensions":[{"dimensionName":"TableName","labelName":"TableName"},{"dimensionName":"Operation","dimensionValue":"GetRecords"}],"metrics":[{"id":"AWS::DynamoDB::Table:GetRecords:SuccessfulRequestLatency","name":"SuccessfulRequestLatency","defaultStat":"Average"},{"id":"AWS::DynamoDB::Table:GetRecords:SystemErrors","name":"SystemErrors","defaultStat":"Sum"},{"id":"AWS::DynamoDB::Table:GetRecords:ThrottledRequests","name":"ThrottledRequests","defaultStat":"Sum"}]},{"resourceType":"AWS::DynamoDB::Table","id":"AWS::DynamoDB::Table:Scan","namespace":"AWS/DynamoDB","dimensions":[{"dimensionName":"TableName","labelName":"TableName"},{"dimensionName":"Operation","dimensionValue":"Scan"}],"metrics":[{"id":"AWS::DynamoDB::Table:Scan:ReturnedItemCount","name":"ReturnedItemCount","defaultStat":"Sum"},{"id":"AWS::DynamoDB::Table:Scan:SuccessfulRequestLatency","name":"SuccessfulRequestLatency","defaultStat":"Average"},{"id":"AWS::DynamoDB::Table:Scan:SystemErrors","name":"SystemErrors","defaultStat":"Sum"},{"id":"AWS::DynamoDB::Table:Scan:ThrottledRequests","name":"ThrottledRequests","defaultStat":"Sum"}]},{"resourceType":"AWS::DynamoDB::Table","id":"AWS::DynamoDB::Table:Operation:BatchExecuteStatement","namespace":"AWS/DynamoDB","dimensions":[{"dimensionName":"TableName","labelName":"TableName"},{"dimensionName":"Operation","dimensionValue":"BatchExecuteStatement"}],"metrics":[{"id":"AWS::DynamoDB::Table:Operation:BatchExecuteStatement:SuccessfulRequestLatency","name":"SuccessfulRequestLatency","defaultStat":"Average"},{"id":"AWS::DynamoDB::Table:Operation:BatchExecuteStatement:SystemErrors","name":"SystemErrors","defaultStat":"Sum"},{"id":"AWS::DynamoDB::Table:Operation:BatchExecuteStatement:ThrottledRequests","name":"ThrottledRequests","defaultStat":"Sum"}]},{"resourceType":"AWS::DynamoDB::Table","id":"AWS::DynamoDB::Table:Operation:BatchGetItem","namespace":"AWS/DynamoDB","dimensions":[{"dimensionName":"TableName","labelName":"TableName"},{"dimensionName":"Operation","dimensionValue":"BatchGetItem"}],"metrics":[{"id":"AWS::DynamoDB::Table:Operation:BatchGetItem:SuccessfulRequestLatency","name":"SuccessfulRequestLatency","defaultStat":"Average"},{"id":"AWS::DynamoDB::Table:Operation:BatchGetItem:SystemErrors","name":"SystemErrors","defaultStat":"Sum"},{"id":"AWS::DynamoDB::Table:Operation:BatchGetItem:ThrottledRequests","name":"ThrottledRequests","defaultStat":"Sum"}]},{"resourceType":"AWS::DynamoDB::Table","id":"AWS::DynamoDB::Table:Operation:BatchWriteItem","namespace":"AWS/DynamoDB","dimensions":[{"dimensionName":"TableName","labelName":"TableName"},{"dimensionName":"Operation","dimensionValue":"BatchWriteItem"}],"metrics":[{"id":"AWS::DynamoDB::Table:Operation:BatchWriteItem:SuccessfulRequestLatency","name":"SuccessfulRequestLatency","defaultStat":"Average"},{"id":"AWS::DynamoDB::Table:Operation:BatchWriteItem:SystemErrors","name":"SystemErrors","defaultStat":"Sum"},{"id":"AWS::DynamoDB::Table:Operation:BatchWriteItem:ThrottledRequests","name":"ThrottledRequests","defaultStat":"Sum"}]},{"resourceType":"AWS::DynamoDB::Table","id":"AWS::DynamoDB::Table:Operation:DeleteItem","namespace":"AWS/DynamoDB","dimensions":[{"dimensionName":"TableName","labelName":"TableName"},{"dimensionName":"Operation","dimensionValue":"DeleteItem"}],"metrics":[{"id":"AWS::DynamoDB::Table:Operation:DeleteItem:SuccessfulRequestLatency","name":"SuccessfulRequestLatency","defaultStat":"Average"},{"id":"AWS::DynamoDB::Table:Operation:DeleteItem:SystemErrors","name":"SystemErrors","defaultStat":"Sum"},{"id":"AWS::DynamoDB::Table:Operation:DeleteItem:ThrottledRequests","name":"ThrottledRequests","defaultStat":"Sum"}]},{"resourceType":"AWS::DynamoDB::Table","id":"AWS::DynamoDB::Table:Operation:ExecuteStatement","namespace":"AWS/DynamoDB","dimensions":[{"dimensionName":"TableName","labelName":"TableName"},{"dimensionName":"Operation","dimensionValue":"ExecuteStatement"}],"metrics":[{"id":"AWS::DynamoDB::Table:Operation:ExecuteStatement:ReturnedItemCount","name":"ReturnedItemCount","defaultStat":"Sum"},{"id":"AWS::DynamoDB::Table:Operation:ExecuteStatement:SuccessfulRequestLatency","name":"SuccessfulRequestLatency","defaultStat":"Average"},{"id":"AWS::DynamoDB::Table:Operation:ExecuteStatement:SystemErrors","name":"SystemErrors","defaultStat":"Sum"},{"id":"AWS::DynamoDB::Table:Operation:ExecuteStatement:ThrottledRequests","name":"ThrottledRequests","defaultStat":"Sum"}]},{"resourceType":"AWS::DynamoDB::Table","id":"AWS::DynamoDB::Table:Operation:ExecuteTransaction","namespace":"AWS/DynamoDB","dimensions":[{"dimensionName":"TableName","labelName":"TableName"},{"dimensionName":"Operation","dimensionValue":"ExecuteTransaction"}],"metrics":[{"id":"AWS::DynamoDB::Table:Operation:ExecuteTransaction:SuccessfulRequestLatency","name":"SuccessfulRequestLatency","defaultStat":"Average"},{"id":"AWS::DynamoDB::Table:Operation:ExecuteTransaction:SystemErrors","name":"SystemErrors","defaultStat":"Sum"},{"id":"AWS::DynamoDB::Table:Operation:ExecuteTransaction:ThrottledRequests","name":"ThrottledRequests","defaultStat":"Sum"},{"id":"AWS::DynamoDB::Table:Operation:ExecuteTransaction:ThrottledRequests","name":"ThrottledRequests","defaultStat":"Sum"}]},{"resourceType":"AWS::DynamoDB::Table","id":"AWS::DynamoDB::Table:Operation:Query","namespace":"AWS/DynamoDB","dimensions":[{"dimensionName":"TableName","labelName":"TableName"},{"dimensionName":"Operation","dimensionValue":"Query"}],"metrics":[{"id":"AWS::DynamoDB::Table:Operation:Query:ReturnedItemCount","name":"ReturnedItemCount","defaultStat":"Sum"},{"id":"AWS::DynamoDB::Table:Operation:Query:SuccessfulRequestLatency","name":"SuccessfulRequestLatency","defaultStat":"Average"},{"id":"AWS::DynamoDB::Table:Operation:Query:SystemErrors","name":"SystemErrors","defaultStat":"Sum"},{"id":"AWS::DynamoDB::Table:Operation:Query:ThrottledRequests","name":"ThrottledRequests","defaultStat":"Sum"}]},{"resourceType":"AWS::DynamoDB::Table","id":"AWS::DynamoDB::Table:Operation:TransactGetItems","namespace":"AWS/DynamoDB","dimensions":[{"dimensionName":"TableName","labelName":"TableName"},{"dimensionName":"Operation","dimensionValue":"TransactGetItems"}],"metrics":[{"id":"AWS::DynamoDB::Table:Operation:TransactGetItems:SuccessfulRequestLatency","name":"SuccessfulRequestLatency","defaultStat":"Average"},{"id":"AWS::DynamoDB::Table:Operation:TransactGetItems:SystemErrors","name":"SystemErrors","defaultStat":"Sum"},{"id":"AWS::DynamoDB::Table:Operation:TransactGetItems:ThrottledRequests","name":"ThrottledRequests","defaultStat":"Sum"}]},{"resourceType":"AWS::DynamoDB::Table","id":"AWS::DynamoDB::Table:Operation:TransactWriteItems","namespace":"AWS/DynamoDB","dimensions":[{"dimensionName":"TableName","labelName":"TableName"},{"dimensionName":"Operation","dimensionValue":"TransactWriteItems"}],"metrics":[{"id":"AWS::DynamoDB::Table:Operation:TransactWriteItems:SuccessfulRequestLatency","name":"SuccessfulRequestLatency","defaultStat":"Average"},{"id":"AWS::DynamoDB::Table:Operation:TransactWriteItems:SystemErrors","name":"SystemErrors","defaultStat":"Sum"},{"id":"AWS::DynamoDB::Table:Operation:TransactWriteItems:ThrottledRequests","name":"ThrottledRequests","defaultStat":"Sum"}]},{"resourceType":"AWS::DynamoDB::Table","id":"AWS::DynamoDB::Table:Operation:UpdateItem","namespace":"AWS/DynamoDB","dimensions":[{"dimensionName":"TableName","labelName":"TableName"},{"dimensionName":"Operation","dimensionValue":"UpdateItem"}],"metrics":[{"id":"AWS::DynamoDB::Table:Operation:UpdateItem:SuccessfulRequestLatency","name":"SuccessfulRequestLatency","defaultStat":"Average"},{"id":"AWS::DynamoDB::Table:Operation:UpdateItem:SystemErrors","name":"SystemErrors","defaultStat":"Sum"},{"id":"AWS::DynamoDB::Table:Operation:UpdateItem:ThrottledRequests","name":"ThrottledRequests","defaultStat":"Sum"}]},{"resourceType":"AWS::DynamoDB::Table","id":"AWS::DynamoDB::Table:Operation:GlobalSecondaryIndexName","namespace":"AWS/DynamoDB","dimensions":[{"dimensionName":"TableName","labelName":"TableName"},{"dimensionName":"GlobalSecondaryIndexName","dimensionValue":"GlobalSecondaryIndexName"}],"metrics":[{"id":"AWS::DynamoDB::Table:Operation:GlobalSecondaryIndexName:ConsumedReadCapacityUnits","name":"ConsumedReadCapacityUnits","defaultStat":"Sum"},{"id":"AWS::DynamoDB::Table:Operation:GlobalSecondaryIndexName:ConsumedWriteCapacityUnits","name":"ConsumedWriteCapacityUnits","defaultStat":"Sum"},{"id":"AWS::DynamoDB::Table:Operation:GlobalSecondaryIndexName:OnlineIndexConsumedWriteCapacity","name":"OnlineIndexConsumedWriteCapacity","defaultStat":"Sum"},{"id":"AWS::DynamoDB::Table:Operation:GlobalSecondaryIndexName:OnlineIndexPercentageProgress","name":"OnlineIndexPercentageProgress","defaultStat":"Average"},{"id":"AWS::DynamoDB::Table:Operation:GlobalSecondaryIndexName:OnlineIndexThrottleEvents","name":"OnlineIndexThrottleEvents","defaultStat":"Sum"},{"id":"AWS::DynamoDB::Table:Operation:GlobalSecondaryIndexName:ProvisionedReadCapacityUnits","name":"ProvisionedReadCapacityUnits","defaultStat":"Average"},{"id":"AWS::DynamoDB::Table:Operation:GlobalSecondaryIndexName:ProvisionedWriteCapacityUnits","name":"ProvisionedWriteCapacityUnits","defaultStat":"Average"},{"id":"AWS::DynamoDB::Table:Operation:GlobalSecondaryIndexName:ReadThrottleEvents","name":"ReadThrottleEvents","defaultStat":"Sum"},{"id":"AWS::DynamoDB::Table:Operation:GlobalSecondaryIndexName:WriteThrottleEvents","name":"WriteThrottleEvents","defaultStat":"Sum"}]},{"resourceType":"AWS::DynamoDB::Table","id":"AWS::DynamoDB::Table:DelegatedOperation","namespace":"AWS/DynamoDB","dimensions":[{"dimensionName":"TableName","labelName":"TableName"},{"dimensionName":"DelegatedOperation","labelName":"DelegatedOperation"}],"metrics":[{"id":"AWS::DynamoDB::Table:DelegatedOperation:AgeOfOldestUnreplicatedRecord","name":"AgeOfOldestUnreplicatedRecord","defaultStat":"Average"},{"id":"AWS::DynamoDB::Table:DelegatedOperation:ConsumedChangeDataCaptureUnits","name":"ConsumedChangeDataCaptureUnits","defaultStat":"Average"},{"id":"AWS::DynamoDB::Table:DelegatedOperation:ThrottledPutRecordCount","name":"ThrottledPutRecordCount","defaultStat":"Average"}]},{"resourceType":"AWS::DynamoDB::Table","id":"AWS::DynamoDB::Table:ReceivingRegion","namespace":"AWS/DynamoDB","dimensions":[{"dimensionName":"TableName","labelName":"TableName"},{"dimensionName":"ReceivingRegion","labelName":"ReceivingRegion"}],"metrics":[{"id":"AWS::DynamoDB::Table:ReceivingRegion:PendingReplicationCount","name":"PendingReplicationCount","defaultStat":"Average"},{"id":"AWS::DynamoDB::Table:ReceivingRegion:ReplicationLatency","name":"ReplicationLatency","defaultStat":"Average"}]},{"resourceType":"AWS::DynamoDB::Table","id":"AWS::DynamoDB::Table:StreamLabel:Operation","namespace":"AWS/DynamoDB","dimensions":[{"dimensionName":"TableName","labelName":"TableName"},{"dimensionName":"StreamLabel","labelName":"StreamLabel"},{"dimensionName":"Operation","labelName":"GetRecords"}],"metrics":[{"id":"AWS::DynamoDB::Table:StreamLabel:Operation:ReturnedBytes","name":"ReturnedBytes","defaultStat":"Average"},{"id":"AWS::DynamoDB::Table:StreamLabel:Operation:ReturnedRecordsCount","name":"ReturnedRecordsCount","defaultStat":"Average"}]},{"resourceType":"AWS::DynamoDB::Table","id":"AWS::DynamoDB::AcrossAccount","namespace":"AWS/DynamoDB","dimensions":[],"metrics":[{"id":"AWS::DynamoDB::AcrossAccount:AccountMaxReads","name":"AccountMaxReads","defaultStat":"Maximum"},{"id":"AWS::DynamoDB::AcrossAccount:AccountMaxTableLevelReads","name":"AccountMaxTableLevelReads","defaultStat":"Maximum"},{"id":"AWS::DynamoDB::AcrossAccount:AccountMaxTableLevelWrites","name":"AccountMaxTableLevelWrites","defaultStat":"Maximum"},{"id":"AWS::DynamoDB::AcrossAccount:AccountMaxWrites","name":"AccountMaxWrites","defaultStat":"Maximum"},{"id":"AWS::DynamoDB::AcrossAccount:AccountProvisionedReadCapacityUtilization","name":"AccountProvisionedReadCapacityUtilization","defaultStat":"Average"},{"id":"AWS::DynamoDB::AcrossAccount:AccountProvisionedWriteCapacityUtilization","name":"AccountProvisionedWriteCapacityUtilization","defaultStat":"Average"},{"id":"AWS::DynamoDB::AcrossAccount:MaxProvisionedTableReadCapacityUtilization","name":"MaxProvisionedTableReadCapacityUtilization","defaultStat":"Average"},{"id":"AWS::DynamoDB::AcrossAccount:MaxProvisionedTableWriteCapacityUtilization","name":"MaxProvisionedTableWriteCapacityUtilization","defaultStat":"Average"},{"id":"AWS::DynamoDB::AcrossAccount:UserErrors","name":"UserErrors","defaultStat":"Sum"}]}],"dashboards":[{"id":"DynamoDB:CrossService","name":"DynamoDB","dependencies":[{"namespace":"AWS/DynamoDB"}],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::DynamoDB::AcrossAccount:UserErrors"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::DynamoDB::Table:ReadThrottleEvents"}]}]}]},{"id":"DynamoDB","name":"DynamoDB","dependencies":[{"namespace":"AWS/DynamoDB"}],"controls":["Shared::View.AlarmState","Shared::Group.ResourceGroup","AWS::DynamoDB.tables"],"tables":[{"resourceType":"AWS::DynamoDB::Table","columns":["TableName","TableStatus","TableSizeBytes","ItemCount","ReadCapacityUnits","WriteCapacityUnits"]}],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::DynamoDB::Table:GetItem:SuccessfulRequestLatency"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::DynamoDB::Table:PutItem:SuccessfulRequestLatency"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::DynamoDB::Table:GetItem:ThrottledRequests"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::DynamoDB::AcrossAccount:UserErrors"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::DynamoDB::Table:ConsumedReadCapacityUnits"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::DynamoDB::Table:ProvisionedReadCapacityUnits"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::DynamoDB::Table:ConsumedWriteCapacityUnits"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::DynamoDB::Table:ProvisionedWriteCapacityUnits"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::DynamoDB::Table:StreamLabel:Operation:ReturnedBytes"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::DynamoDB::Table:Scan:ReturnedItemCount"}]}]}]}]},{"id":"AWS::EBS","dashboard":"EBS","crossServiceDashboard":"EBS:CrossService","resourceTypes":[{"type":"AWS::EC2::Volume","keyMetric":"AWS::EC2::Volume:VolumeReadBytes","dashboard":"EBS","arnRegex":".*:volume/(.*)","consoleLink":"/ec2/v2/home?region={region}#Volumes:volumeId={VolumeId}","describe":"ebs-describe-volumes"}],"controls":{"AWS::EBS.volumes":{"type":"resource","resourceType":"AWS::EC2::Volume","labelField":"VolumeId","valueField":"VolumeId"}},"metricTemplates":[{"resourceType":"AWS::EC2::Volume","namespace":"AWS/EBS","dimensions":[{"dimensionName":"VolumeId","labelName":"VolumeId"}],"metrics":[{"id":"AWS::EC2::Volume:VolumeReadBytes","name":"VolumeReadBytes","defaultStat":"Sum"},{"id":"AWS::EC2::Volume:VolumeWriteBytes","name":"VolumeWriteBytes","defaultStat":"Sum"},{"id":"AWS::EC2::Volume:VolumeReadOps","name":"VolumeReadOps","defaultStat":"Sum"},{"id":"AWS::EC2::Volume:VolumeTotalReadTime","name":"VolumeTotalReadTime","defaultStat":"Average"},{"id":"AWS::EC2::Volume:VolumeWriteOps","name":"VolumeWriteOps","defaultStat":"Sum"},{"id":"AWS::EC2::Volume:VolumeTotalWriteTime","name":"VolumeTotalWriteTime","defaultStat":"Average"},{"id":"AWS::EC2::Volume:VolumeIdleTime","name":"VolumeIdleTime","defaultStat":"Average"},{"id":"AWS::EC2::Volume:VolumeQueueLength","name":"VolumeQueueLength","defaultStat":"Average"},{"id":"AWS::EC2::Volume:BurstBalance","name":"BurstBalance","defaultStat":"Average"}]}],"dashboards":[{"id":"EBS:CrossService","name":"Elastic Block Store (EBS)","dependencies":[{"namespace":"AWS/EBS"}],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::EC2::Volume:VolumeReadBytes"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::EC2::Volume:VolumeWriteBytes"}]}]}]},{"id":"EBS:ResourceHealth","name":"Elastic Block Store (EBS)","dependencies":[{"namespace":"AWS/EBS"}],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::EC2::Volume:VolumeReadBytes"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::EC2::Volume:VolumeReadOps"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::EC2::Volume:VolumeTotalReadTime"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::EC2::Volume:VolumeWriteBytes"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::EC2::Volume:VolumeWriteOps"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::EC2::Volume:VolumeTotalWriteTime"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::EC2::Volume:VolumeIdleTime"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::EC2::Volume:VolumeQueueLength"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::EC2::Volume:BurstBalance"}]}]}]},{"id":"EBS","name":"Elastic Block Store (EBS)","dependencies":[{"namespace":"AWS/EBS"}],"controls":["Shared::View.AlarmState","Shared::Group.ResourceGroup","AWS::EBS.volumes"],"tables":[{"resourceType":"AWS::EC2::Volume","columns":["VolumeId","Name","Size","VolumeType","SnapshotId","CreateTime","AvailabilityZone","State","Attachments","Encrypted"]}],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::EC2::Volume:VolumeReadBytes"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::EC2::Volume:VolumeReadOps"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::EC2::Volume:VolumeTotalReadTime"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::EC2::Volume:VolumeWriteBytes"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::EC2::Volume:VolumeWriteOps"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::EC2::Volume:VolumeTotalWriteTime"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::EC2::Volume:VolumeIdleTime"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::EC2::Volume:VolumeQueueLength"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::EC2::Volume:BurstBalance"}]}]}]}]},{"id":"AWS::EC2","dashboard":"EC2","crossServiceDashboard":"EC2:CrossService","resourceTypes":[{"type":"AWS::EC2::Instance","keyMetric":"AWS::EC2::Instance:CPUUtilization","list":"ec2-describe-instances","dashboard":"EC2:Instance","arnRegex":".*:instance/(.*)","consoleLink":"/ec2/home?region={region}#Instances:search={InstanceId};sort=instanceId","describe":"ec2-describe-instances"}],"controls":{"AWS::EC2.instances":{"type":"resource","resourceType":"AWS::EC2::Instance","labelField":"InstanceId","valueField":"InstanceId"}},"metricTemplates":[{"resourceType":"AWS::EC2::Instance","namespace":"AWS/EC2","dimensions":[{"dimensionName":"InstanceId","labelName":"InstanceId"}],"metrics":[{"id":"AWS::EC2::Instance:CPUCreditUsage","name":"CPUCreditUsage","defaultStat":"Average"},{"id":"AWS::EC2::Instance:CPUCreditBalance","name":"CPUCreditBalance","defaultStat":"Average"},{"id":"AWS::EC2::Instance:CPUSurplusCreditBalance","name":"CPUSurplusCreditBalance","defaultStat":"Average"},{"id":"AWS::EC2::Instance:CPUSurplusCreditsCharged","name":"CPUSurplusCreditsCharged","defaultStat":"Average"},{"id":"AWS::EC2::Instance:CPUUtilization","name":"CPUUtilization","defaultStat":"Average"},{"id":"AWS::EC2::Instance:DiskReadBytes","name":"DiskReadBytes","defaultStat":"Average"},{"id":"AWS::EC2::Instance:DiskReadOps","name":"DiskReadOps","defaultStat":"Average"},{"id":"AWS::EC2::Instance:DiskWriteBytes","name":"DiskWriteBytes","defaultStat":"Average"},{"id":"AWS::EC2::Instance:DiskWriteOps","name":"DiskWriteOps","defaultStat":"Average"},{"id":"AWS::EC2::Instance:MetadataNoToken","name":"MetadataNoToken","defaultStat":"Sum"},{"id":"AWS::EC2::Instance:NetworkIn","name":"NetworkIn","defaultStat":"Average"},{"id":"AWS::EC2::Instance:NetworkOut","name":"NetworkOut","defaultStat":"Average"},{"id":"AWS::EC2::Instance:NetworkPacketsIn","name":"NetworkPacketsIn","defaultStat":"Average"},{"id":"AWS::EC2::Instance:NetworkPacketsOut","name":"NetworkPacketsOut","defaultStat":"Average"},{"id":"AWS::EC2::Instance:StatusCheckFailed","name":"StatusCheckFailed","defaultStat":"Sum"},{"id":"AWS::EC2::Instance:StatusCheckFailed_Instance","name":"StatusCheckFailed_Instance","defaultStat":"Sum"},{"id":"AWS::EC2::Instance:StatusCheckFailed_System","name":"StatusCheckFailed_System","defaultStat":"Sum"}]},{"resourceType":"AWS::EC2::Instance","id":"AWS::EC2::Instance:AcrossAllInstances","namespace":"AWS/EC2","dimensions":[],"metrics":[{"id":"AWS::EC2::Instance:AcrossAllInstances:CPUUtilization","name":"CPUUtilization","defaultStat":"Average"},{"id":"AWS::EC2::Instance:AcrossAllInstances:DiskReadBytes","name":"DiskReadBytes","defaultStat":"Average"},{"id":"AWS::EC2::Instance:AcrossAllInstances:DiskReadOps","name":"DiskReadOps","defaultStat":"Average"},{"id":"AWS::EC2::Instance:AcrossAllInstances:DiskWriteBytes","name":"DiskWriteBytes","defaultStat":"Average"},{"id":"AWS::EC2::Instance:AcrossAllInstances:DiskWriteOps","name":"DiskWriteOps","defaultStat":"Average"},{"id":"AWS::EC2::Instance:AcrossAllInstances:MetadataNoToken","name":"MetadataNoToken","defaultStat":"Sum"},{"id":"AWS::EC2::Instance:AcrossAllInstances:NetworkIn","name":"NetworkIn","defaultStat":"Average"},{"id":"AWS::EC2::Instance:AcrossAllInstances:NetworkOut","name":"NetworkOut","defaultStat":"Average"},{"id":"AWS::EC2::Instance:AcrossAllInstances:NetworkPacketsIn","name":"NetworkPacketsIn","defaultStat":"Average"},{"id":"AWS::EC2::Instance:AcrossAllInstances:NetworkPacketsOut","name":"NetworkPacketsOut","defaultStat":"Average"}]},{"resourceType":"AWS::EC2::Instance","id":"AWS::EC2::Instance:AutoScalingGroupName","namespace":"AWS/EC2","dimensions":[{"dimensionName":"AutoScalingGroupName","labelName":"AutoScalingGroupName"}],"metrics":[{"id":"AWS::EC2::Instance:AutoScalingGroupName:CPUUtilization","name":"CPUUtilization","defaultStat":"Average"},{"id":"AWS::EC2::Instance:AutoScalingGroupName:DiskReadBytes","name":"DiskReadBytes","defaultStat":"Average"},{"id":"AWS::EC2::Instance:AutoScalingGroupName:DiskReadOps","name":"DiskReadOps","defaultStat":"Average"},{"id":"AWS::EC2::Instance:AutoScalingGroupName:DiskWriteBytes","name":"DiskWriteBytes","defaultStat":"Average"},{"id":"AWS::EC2::Instance:AutoScalingGroupName:DiskWriteOps","name":"DiskWriteOps","defaultStat":"Average"},{"id":"AWS::EC2::Instance:AutoScalingGroupName:NetworkIn","name":"NetworkIn","defaultStat":"Average"},{"id":"AWS::EC2::Instance:AutoScalingGroupName:NetworkOut","name":"NetworkOut","defaultStat":"Average"},{"id":"AWS::EC2::Instance:AutoScalingGroupName:NetworkPacketsIn","name":"NetworkPacketsIn","defaultStat":"Average"},{"id":"AWS::EC2::Instance:AutoScalingGroupName:NetworkPacketsOut","name":"NetworkPacketsOut","defaultStat":"Average"}]},{"resourceType":"AWS::EC2::Instance","id":"AWS::EC2::Instance:ImageId","namespace":"AWS/EC2","dimensions":[{"dimensionName":"ImageId","labelName":"ImageId"}],"metrics":[{"id":"AWS::EC2::Instance:ImageId:CPUUtilization","name":"CPUUtilization","defaultStat":"Average"},{"id":"AWS::EC2::Instance:ImageId:DiskReadBytes","name":"DiskReadBytes","defaultStat":"Average"},{"id":"AWS::EC2::Instance:ImageId:DiskReadOps","name":"DiskReadOps","defaultStat":"Average"},{"id":"AWS::EC2::Instance:ImageId:DiskWriteBytes","name":"DiskWriteBytes","defaultStat":"Average"},{"id":"AWS::EC2::Instance:ImageId:DiskWriteOps","name":"DiskWriteOps","defaultStat":"Average"},{"id":"AWS::EC2::Instance:ImageId:NetworkIn","name":"NetworkIn","defaultStat":"Average"},{"id":"AWS::EC2::Instance:ImageId:NetworkOut","name":"NetworkOut","defaultStat":"Average"}]},{"resourceType":"AWS::EC2::Instance","id":"AWS::EC2::Instance:InstanceType","namespace":"AWS/EC2","dimensions":[{"dimensionName":"InstanceType","labelName":"InstanceType"}],"metrics":[{"id":"AWS::EC2::Instance:InstanceType:CPUUtilization","name":"CPUUtilization","defaultStat":"Average"},{"id":"AWS::EC2::Instance:InstanceType:DiskReadBytes","name":"DiskReadBytes","defaultStat":"Average"},{"id":"AWS::EC2::Instance:InstanceType:DiskReadOps","name":"DiskReadOps","defaultStat":"Average"},{"id":"AWS::EC2::Instance:InstanceType:DiskWriteBytes","name":"DiskWriteBytes","defaultStat":"Average"},{"id":"AWS::EC2::Instance:InstanceType:DiskWriteOps","name":"DiskWriteOps","defaultStat":"Average"},{"id":"AWS::EC2::Instance:InstanceType:NetworkIn","name":"NetworkIn","defaultStat":"Average"},{"id":"AWS::EC2::Instance:InstanceType:NetworkOut","name":"NetworkOut","defaultStat":"Average"}]},{"resourceType":"AWS::EC2::Instance","id":"AWS::EC2::Instance:CWAgent","namespace":"CWAgent","dimensions":[{"dimensionName":"InstanceId","labelName":"InstanceId"}],"metrics":[{"id":"AWS::EC2::Instance:CWAgent:cpu_usage_idle","name":"cpu_usage_idle","defaultStat":"Average"},{"id":"AWS::EC2::Instance:CWAgent:cpu_usage_iowait","name":"cpu_usage_iowait","defaultStat":"Average"},{"id":"AWS::EC2::Instance:CWAgent:cpu_usage_steal","name":"cpu_usage_steal","defaultStat":"Average"},{"id":"AWS::EC2::Instance:CWAgent:cpu_usage_system","name":"cpu_usage_system","defaultStat":"Average"},{"id":"AWS::EC2::Instance:CWAgent:cpu_usage_user","name":"cpu_usage_user","defaultStat":"Average"},{"id":"AWS::EC2::Instance:CWAgent:disk_inodes_free","name":"disk_inodes_free","defaultStat":"Sum"},{"id":"AWS::EC2::Instance:CWAgent:disk_inodes_total","name":"disk_inodes_total","defaultStat":"Sum"},{"id":"AWS::EC2::Instance:CWAgent:disk_inodes_used","name":"disk_inodes_used","defaultStat":"Sum"},{"id":"AWS::EC2::Instance:CWAgent:disk_used_percent","name":"disk_used_percent","defaultStat":"Average"},{"id":"AWS::EC2::Instance:CWAgent:diskio_io_time","name":"diskio_io_time","defaultStat":"Average"},{"id":"AWS::EC2::Instance:CWAgent:diskio_read_bytes","name":"diskio_read_bytes","defaultStat":"Average"},{"id":"AWS::EC2::Instance:CWAgent:diskio_reads","name":"diskio_reads","defaultStat":"Average"},{"id":"AWS::EC2::Instance:CWAgent:diskio_write_bytes","name":"diskio_write_bytes","defaultStat":"Average"},{"id":"AWS::EC2::Instance:CWAgent:diskio_writes","name":"diskio_writes","defaultStat":"Average"},{"id":"AWS::EC2::Instance:CWAgent:mem_cached","name":"mem_cached","defaultStat":"Average"},{"id":"AWS::EC2::Instance:CWAgent:mem_total","name":"mem_total","defaultStat":"Average"},{"id":"AWS::EC2::Instance:CWAgent:mem_used","name":"mem_used","defaultStat":"Average"},{"id":"AWS::EC2::Instance:CWAgent:mem_used_percent","name":"mem_used_percent","defaultStat":"Average"},{"id":"AWS::EC2::Instance:CWAgent:netstat_tcp_established","name":"netstat_tcp_established","defaultStat":"Sum"},{"id":"AWS::EC2::Instance:CWAgent:netstat_tcp_time_wait","name":"netstat_tcp_time_wait","defaultStat":"Sum"},{"id":"AWS::EC2::Instance:CWAgent:swap_used_percent","name":"swap_used_percent","defaultStat":"Average"},{"id":"AWS::EC2::Instance:CWAgent:TCPv4 Connections Established","name":"TCPv4 Connections Established","defaultStat":"Sum"},{"id":"AWS::EC2::Instance:CWAgent:TCPv6 Connections Established","name":"TCPv6 Connections Established","defaultStat":"Sum"},{"id":"AWS::EC2::Instance:CWAgent:Memory % Committed Bytes In Use","name":"Memory % Committed Bytes In Use","defaultStat":"Average"},{"id":"AWS::EC2::Instance:CWAgent:Processor % Idle Time","name":"Processor % Idle Time","defaultStat":"Average"},{"id":"AWS::EC2::Instance:CWAgent:Processor % Interrupt Time","name":"Processor % Interrupt Time","defaultStat":"Average"},{"id":"AWS::EC2::Instance:CWAgent:Processor % User Time","name":"Processor % User Time","defaultStat":"Average"},{"id":"AWS::EC2::Instance:CWAgent:LogicalDisk % Free Space","name":"LogicalDisk % Free Space","defaultStat":"Average"},{"id":"AWS::EC2::Instance:CWAgent:Paging File % Usage","name":"Paging File % Usage","defaultStat":"Average"}]}],"dashboards":[{"id":"EC2:CrossService","name":"EC2","dependencies":[{"namespace":"AWS/EC2"}],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::EC2::Instance:CPUUtilization"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::EC2::Instance:StatusCheckFailed"}]}]}]},{"id":"EC2:Instance","name":"EC2 Instance","dependencies":[{"namespace":"AWS/EC2"}],"controls":["Shared::View.AlarmState","Shared::Group.ResourceGroup","AWS::EC2.instances"],"rows":[{"widgets":[{"type":"chart","width":4,"properties":{"view":"singleValue"},"metrics":[{"metricTemplate":"AWS::EC2::Instance:CPUUtilization"}]},{"type":"chart","width":10,"metrics":[{"metricTemplate":"AWS::EC2::Instance:CPUUtilization"}]},{"type":"chart","width":10,"metrics":[{"metricTemplate":"AWS::EC2::Instance:StatusCheckFailed"},{"metricOptions":{"yAxis":"right"},"metricTemplate":"AWS::EC2::Instance:StatusCheckFailed_Instance"},{"metricOptions":{"yAxis":"right"},"metricTemplate":"AWS::EC2::Instance:StatusCheckFailed_System"}]}]}]},{"id":"EC2:ResourceHealth","name":"EC2 Instance","dependencies":[{"namespace":"AWS/EC2"}],"rows":[{"widgets":[{"type":"chart","properties":{"yAxis":{"left":{"min":0,"showUnits":false,"label":"Percent"}}},"metrics":[{"metricTemplate":"AWS::EC2::Instance:CPUUtilization"}]},{"type":"chart","properties":{"title":"Memory Utilization: Average","yAxis":{"left":{"min":0,"showUnits":false,"label":"Percent"}}},"metrics":[{"metricExpression":"AVG(SEARCH(\'InstanceId=\\"{InstanceId}\\" AND (MetricName=\\"mem_used_percent\\" OR \\"Memory % Committed Bytes In Use\\")\', \'Average\', 300))","resourceType":"AWS::EC2::Instance","metricOptions":{"id":"expr1","label":"MemoryUtilization"}}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::EC2::Instance:DiskReadBytes"},{"metricTemplate":"AWS::EC2::Instance:DiskWriteBytes"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::EC2::Instance:NetworkIn"},{"metricTemplate":"AWS::EC2::Instance:NetworkOut"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::EC2::Instance:StatusCheckFailed"}]}]}]},{"id":"EC2","name":"EC2","dependencies":[{"namespace":"AWS/EC2"}],"controls":["Shared::View.AlarmState","Shared::Group.ResourceGroup","AWS::EC2.instances"],"tables":[{"resourceType":"AWS::EC2::Instance","columns":["InstanceId","Name","InstanceType","Monitoring","State","AvailabilityZone"]}],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::EC2::Instance:CPUUtilization"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::EC2::Instance:DiskReadBytes"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::EC2::Instance:DiskReadOps"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::EC2::Instance:DiskWriteBytes"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::EC2::Instance:DiskWriteOps"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::EC2::Instance:NetworkIn"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::EC2::Instance:NetworkOut"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::EC2::Instance:NetworkPacketsIn"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::EC2::Instance:NetworkPacketsOut"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::EC2::Instance:StatusCheckFailed"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::EC2::Instance:StatusCheckFailed_Instance"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::EC2::Instance:StatusCheckFailed_System"}]}]}]}]},{"id":"AWS::EC2Spot","dashboard":"EC2Spot","crossServiceDashboard":"EC2Spot:CrossService","resourceTypes":[{"type":"AWS::EC2Spot::FleetRequest","keyMetric":"AWS::EC2Spot::FleetRequest:PendingCapacity","dashboard":"EC2Spot"}],"controls":{"AWS::EC2Spot.fleetRequests":{"type":"resource","resourceType":"AWS::EC2Spot::FleetRequest","labelField":"FleetRequestId","valueField":"FleetRequestId"}},"metricTemplates":[{"resourceType":"AWS::EC2Spot::FleetRequest","namespace":"AWS/EC2Spot","dimensions":[{"dimensionName":"FleetRequestId","labelName":"FleetRequestId"}],"metrics":[{"id":"AWS::EC2Spot::FleetRequest:PendingCapacity","name":"PendingCapacity","defaultStat":"Average"},{"id":"AWS::EC2Spot::FleetRequest:MaxPercentCapacityAllocation","name":"MaxPercentCapacityAllocation","defaultStat":"Average"},{"id":"AWS::EC2Spot::FleetRequest:AvailableInstancePoolsCount","name":"AvailableInstancePoolsCount","defaultStat":"Average"},{"id":"AWS::EC2Spot::FleetRequest:BidsSubmittedForCapacity","name":"BidsSubmittedForCapacity","defaultStat":"Average"},{"id":"AWS::EC2Spot::FleetRequest:EligibleInstancePoolCount","name":"EligibleInstancePoolCount","defaultStat":"Average"},{"id":"AWS::EC2Spot::FleetRequest:FulfilledCapacity","name":"FulfilledCapacity","defaultStat":"Average"},{"id":"AWS::EC2Spot::FleetRequest:PercentCapacityAllocation","name":"PercentCapacityAllocation","defaultStat":"Average"},{"id":"AWS::EC2Spot::FleetRequest:TargetCapacity","name":"TargetCapacity","defaultStat":"Average"},{"id":"AWS::EC2Spot::FleetRequest:TerminatingCapacity","name":"TerminatingCapacity","defaultStat":"Average"}]}],"dashboards":[{"id":"EC2Spot:CrossService","name":"EC2 Spot","dependencies":[{"namespace":"AWS/EC2Spot"}],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::EC2Spot::FleetRequest:PendingCapacity"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::EC2Spot::FleetRequest:MaxPercentCapacityAllocation"}]}]}]},{"id":"EC2Spot","name":"EC2 Spot","dependencies":[{"namespace":"AWS/EC2Spot"}],"controls":["Shared::View.AlarmState","Shared::Group.ResourceGroup","AWS::EC2Spot.fleetRequests"],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::EC2Spot::FleetRequest:PendingCapacity"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::EC2Spot::FleetRequest:MaxPercentCapacityAllocation"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::EC2Spot::FleetRequest:AvailableInstancePoolsCount"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::EC2Spot::FleetRequest:BidsSubmittedForCapacity"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::EC2Spot::FleetRequest:EligibleInstancePoolCount"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::EC2Spot::FleetRequest:FulfilledCapacity"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::EC2Spot::FleetRequest:PercentCapacityAllocation"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::EC2Spot::FleetRequest:TargetCapacity"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::EC2Spot::FleetRequest:TerminatingCapacity"}]}]}]}]},{"id":"AWS::ECS","dashboard":"ECS","resourceTypes":[{"type":"AWS::ECS::Cluster","keyMetric":"AWS::ECS::Cluster:CPUUtilization","dashboard":"ECS","arnRegex":".*:cluster/(.*)","describe":"ecs-describe-clusters","consoleLink":"/ecs/home?region={region}#/clusters/{ClusterName}/services"},{"type":"AWS::ECS::Service","keyMetric":"AWS::ECS::Service:CPUUtilization","arnRegex":".*:service/(.*)","dashboard":"ECS"}],"controls":{"AWS::ECS.clusters":{"type":"resource","resourceType":"AWS::ECS::Cluster","labelField":"ClusterName","valueField":"ClusterName"}},"metricTemplates":[{"resourceType":"AWS::ECS::Service","namespace":"AWS/ECS","dimensions":[{"dimensionName":"ClusterName","labelName":"ClusterName"},{"dimensionName":"ServiceName","labelName":"ServiceName"}],"metrics":[{"id":"AWS::ECS::Service:CPUUtilization","name":"CPUUtilization","defaultStat":"Average"},{"id":"AWS::ECS::Service:MemoryUtilization","name":"MemoryUtilization","defaultStat":"Average"}]},{"resourceType":"AWS::ECS::Cluster","namespace":"AWS/ECS","dimensions":[{"dimensionName":"ClusterName","labelName":"ClusterName"}],"metrics":[{"id":"AWS::ECS::Cluster:CPUUtilization","name":"CPUUtilization","defaultStat":"Average"},{"id":"AWS::ECS::Cluster:MemoryUtilization","name":"MemoryUtilization","defaultStat":"Average"},{"id":"AWS::ECS::Cluster:CPUReservation","name":"CPUReservation","defaultStat":"Average"},{"id":"AWS::ECS::Cluster:MemoryReservation","name":"MemoryReservation","defaultStat":"Average"},{"id":"AWS::ECS::Cluster:GPUReservation","name":"GPUReservation","defaultStat":"Average"}]}],"dashboards":[{"id":"ECS","name":"Elastic Container Service","dependencies":[{"namespace":"AWS/ECS"}],"controls":["Shared::View.AlarmState","Shared::Group.ResourceGroup","AWS::ECS.clusters"],"tables":[{"resourceType":"AWS::ECS::Cluster","columns":["ClusterName","Status","RegisteredInstancesCount","RunningTasksCount","PendingTasksCount","ActiveServicesCount"]}],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::ECS::Service:CPUUtilization"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::ECS::Service:MemoryUtilization"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::ECS::Cluster:CPUUtilization"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::ECS::Cluster:MemoryUtilization"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::ECS::Cluster:CPUReservation"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::ECS::Cluster:MemoryReservation"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::ECS::Cluster:GPUReservation"}]}]}]}]},{"id":"CW::ECS","dashboard":"ECS:Cluster","resourceTypes":[{"type":"CW::ECS::Cluster","keyMetric":"CW::ECS::Cluster:MemoryUtilized","dashboard":"ECS:Cluster","drawerDashboard":"ECS:Cluster:Drawer","alarmPatterns":[{"namespace":"AWS/ECS","dimensions":[{"dimensionName":"ClusterName","labelName":"ClusterName"},{"dimensionName":"ServiceName","labelName":""}]},{"namespace":"ECS/ContainerInsights","dimensions":[{"dimensionName":"ClusterName","labelName":"ClusterName"},{"dimensionName":"ServiceName","labelName":""},{"dimensionName":"TaskDefinitionFamily","labelName":""}]}]},{"type":"CW::ECS::ServiceName","keyMetric":"CW::ECS::ServiceName:MemoryUtilized","dashboard":"ECS:Service","drawerDashboard":"ECS:Service:Drawer","foreignKeys":[{"resourceType":"CW::ECS::Cluster","fields":["ClusterName"]}],"alarmPatterns":[{"namespace":"AWS/ECS","dimensions":[{"dimensionName":"ClusterName","labelName":"ClusterName"},{"dimensionName":"ServiceName","labelName":"ServiceName"}]},{"namespace":"ECS/ContainerInsights","dimensions":[{"dimensionName":"ClusterName","labelName":"ClusterName"},{"dimensionName":"ServiceName","labelName":"ServiceName"}]}]},{"type":"CW::ECS::Task","keyMetric":"CW::ECS::Task:MemoryUtilized","dashboard":"ECS:Task","drawerDashboard":"ECS:Task:Drawer","foreignKeys":[{"resourceType":"CW::ECS::Cluster","fields":["ClusterName"]}],"alarmPatterns":[{"namespace":"ECS/ContainerInsights","dimensions":[{"dimensionName":"ClusterName","labelName":"ClusterName"},{"dimensionName":"TaskDefinitionFamily","labelName":"TaskDefinitionFamily"}]}]},{"type":"CW::ECS::Instance","keyMetric":"CW::ECS::Instance:instance_memory_utilization","dashboard":"ECS:Instance","foreignKeys":[{"resourceType":"CW::ECS::Cluster","fields":["ClusterName"]}]}],"controls":{"CW::ECS.cluster":{"type":"resource","resourceType":"CW::ECS::Cluster","labelField":"ClusterName","valueField":"ClusterName"}},"metricTemplates":[{"resourceType":"CW::ECS::Cluster","namespace":"ECS/ContainerInsights","dimensions":[{"dimensionName":"ClusterName","labelName":"ClusterName"}],"metrics":[{"id":"CW::ECS::Cluster:CpuReserved","name":"CpuReserved","defaultStat":"Sum"},{"id":"CW::ECS::Cluster:CpuUtilized","name":"CpuUtilized","defaultStat":"Sum"},{"id":"CW::ECS::Cluster:MemoryReserved","name":"MemoryReserved","defaultStat":"Sum"},{"id":"CW::ECS::Cluster:MemoryUtilized","name":"MemoryUtilized","defaultStat":"Sum"},{"id":"CW::ECS::Cluster:NetworkRxBytes","name":"NetworkRxBytes","defaultStat":"Average"},{"id":"CW::ECS::Cluster:NetworkTxBytes","name":"NetworkTxBytes","defaultStat":"Average"},{"id":"CW::ECS::Cluster:ContainerInstanceCount","name":"ContainerInstanceCount","defaultStat":"Average"},{"id":"CW::ECS::Cluster:TaskCount","name":"TaskCount","defaultStat":"Average"},{"id":"CW::ECS::Cluster:ServiceCount","name":"ServiceCount","defaultStat":"Average"}]},{"resourceType":"CW::ECS::Instance","namespace":"ECS/ContainerInsights","dimensions":[{"dimensionName":"ClusterName","labelName":"ClusterName"},{"dimensionName":"InstanceId","labelName":"InstanceId"},{"dimensionName":"ContainerInstanceId","labelName":"ContainerInstanceId"}],"metrics":[{"id":"CW::ECS::Instance:instance_cpu_utilization","name":"instance_cpu_utilization","defaultStat":"Average"},{"id":"CW::ECS::Instance:instance_memory_utilization","name":"instance_memory_utilization","defaultStat":"Average"},{"id":"CW::ECS::Instance:instance_network_total_bytes","name":"instance_network_total_bytes","defaultStat":"Average"},{"id":"CW::ECS::Instance:instance_number_of_running_tasks","name":"instance_number_of_running_tasks","defaultStat":"Average"},{"id":"CW::ECS::Instance:instance_cpu_reserved_capacity","name":"instance_cpu_reserved_capacity","defaultStat":"Average"},{"id":"CW::ECS::Instance:instance_memory_reserved_capacity","name":"instance_memory_reserved_capacity","defaultStat":"Average"}]},{"resourceType":"CW::ECS::ServiceName","namespace":"ECS/ContainerInsights","dimensions":[{"dimensionName":"ClusterName","labelName":"ClusterName"},{"dimensionName":"ServiceName","labelName":"ServiceName"}],"metrics":[{"id":"CW::ECS::ServiceName:-","name":"-","defaultStat":"Average"},{"id":"CW::ECS::ServiceName:CpuReserved","name":"CpuReserved","defaultStat":"Sum"},{"id":"CW::ECS::ServiceName:CpuUtilized","name":"CpuUtilized","defaultStat":"Sum"},{"id":"CW::ECS::ServiceName:MemoryReserved","name":"MemoryReserved","defaultStat":"Sum"},{"id":"CW::ECS::ServiceName:MemoryUtilized","name":"MemoryUtilized","defaultStat":"Sum"},{"id":"CW::ECS::ServiceName:NetworkTxBytes","name":"NetworkTxBytes","defaultStat":"Average"},{"id":"CW::ECS::ServiceName:NetworkRxBytes","name":"NetworkRxBytes","defaultStat":"Average"},{"id":"CW::ECS::ServiceName:DesiredTaskCount","name":"DesiredTaskCount","defaultStat":"Average"},{"id":"CW::ECS::ServiceName:RunningTaskCount","name":"RunningTaskCount","defaultStat":"Average"},{"id":"CW::ECS::ServiceName:PendingTaskCount","name":"PendingTaskCount","defaultStat":"Average"},{"id":"CW::ECS::ServiceName:TaskSetCount","name":"TaskSetCount","defaultStat":"Average"},{"id":"CW::ECS::ServiceName:DeploymentCount","name":"DeploymentCount","defaultStat":"Average"}]},{"resourceType":"CW::ECS::Task","namespace":"ECS/ContainerInsights","dimensions":[{"dimensionName":"ClusterName","labelName":"ClusterName"},{"dimensionName":"TaskDefinitionFamily","labelName":"TaskDefinitionFamily"}],"metrics":[{"id":"CW::ECS::Task:CpuReserved","name":"CpuReserved","defaultStat":"Sum"},{"id":"CW::ECS::Task:CpuUtilized","name":"CpuUtilized","defaultStat":"Sum"},{"id":"CW::ECS::Task:MemoryReserved","name":"MemoryReserved","defaultStat":"Sum"},{"id":"CW::ECS::Task:MemoryUtilized","name":"MemoryUtilized","defaultStat":"Sum"},{"id":"CW::ECS::Task:NetworkTxBytes","name":"NetworkTxBytes","defaultStat":"Average"},{"id":"CW::ECS::Task:NetworkRxBytes","name":"NetworkRxBytes","defaultStat":"Average"},{"id":"CW::ECS::Task:StorageReadBytes","name":"StorageReadBytes","defaultStat":"Average"},{"id":"CW::ECS::Task:StorageWriteBytes","name":"StorageWriteBytes","defaultStat":"Average"}]}],"dashboards":[{"id":"ECS:Cluster:Drawer","rows":[{"widgets":[{"type":"chart","properties":{"title":"CPUUtilization","yAxis":{"left":{"min":0,"showUnits":false,"label":"Percent"}}},"metrics":[{"metricOptions":{"id":"expr1","label":"CPU (avg)"},"metricExpression":"mm1 * 100 / mm0","resourceType":"CW::ECS::Cluster"},{"metricOptions":{"id":"mm0","visible":false},"metricTemplate":"CW::ECS::Cluster:CpuReserved"},{"metricOptions":{"id":"mm1","visible":false},"metricTemplate":"CW::ECS::Cluster:CpuUtilized"}]},{"type":"chart","properties":{"title":"MemoryUtilization","yAxis":{"left":{"min":0,"showUnits":false,"label":"Percent"}}},"metrics":[{"metricOptions":{"id":"expr1","label":"Memory (avg)"},"metricExpression":"mm1 * 100 / mm0","resourceType":"CW::ECS::Cluster"},{"metricOptions":{"id":"mm0","visible":false},"metricTemplate":"CW::ECS::Cluster:MemoryReserved"},{"metricOptions":{"id":"mm1","visible":false},"metricTemplate":"CW::ECS::Cluster:MemoryUtilized"}]},{"type":"chart","properties":{"title":"Network","yAxis":{"left":{"showUnits":false,"label":"Bytes/Second"},"right":{"showUnits":false,"label":"Bytes/Second"}}},"metrics":[{"metricOptions":{"id":"expr1","label":"RX (avg)","yAxis":"left"},"metricExpression":"RATE(mm0)","resourceType":"CW::ECS::Cluster"},{"metricOptions":{"id":"expr2","label":"TX (avg)","yAxis":"right"},"metricExpression":"RATE(mm1)","resourceType":"CW::ECS::Cluster"},{"metricOptions":{"id":"mm0","visible":false},"metricTemplate":"CW::ECS::Cluster:NetworkRxBytes"},{"metricOptions":{"id":"mm1","visible":false},"metricTemplate":"CW::ECS::Cluster:NetworkTxBytes"}]}]}]},{"id":"ECS:Cluster","name":"ECS Cluster","dependencies":[{"namespace":"ECS/ContainerInsights"}],"controls":["CW::ECS.cluster"],"rows":[{"widgets":[{"type":"chart","properties":{"title":"CPUUtilization","yAxis":{"left":{"min":0,"showUnits":false,"label":"Percent"}}},"metrics":[{"metricOptions":{"id":"expr1","label":"{ClusterName}"},"metricExpression":"mm1 * 100 / mm0","resourceType":"CW::ECS::Cluster"},{"metricOptions":{"id":"mm0","visible":false},"metricTemplate":"CW::ECS::Cluster:CpuReserved"},{"metricOptions":{"id":"mm1","visible":false},"metricTemplate":"CW::ECS::Cluster:CpuUtilized"}]},{"type":"chart","properties":{"title":"MemoryUtilization","yAxis":{"left":{"min":0,"showUnits":false,"label":"Percent"}}},"metrics":[{"metricOptions":{"id":"expr1","label":"{ClusterName}"},"metricExpression":"mm1 * 100 / mm0","resourceType":"CW::ECS::Cluster"},{"metricOptions":{"id":"mm0","visible":false},"metricTemplate":"CW::ECS::Cluster:MemoryReserved"},{"metricOptions":{"id":"mm1","visible":false},"metricTemplate":"CW::ECS::Cluster:MemoryUtilized"}]},{"type":"chart","properties":{"title":"Network","yAxis":{"left":{"showUnits":false,"label":"Bytes/Second"}}},"metrics":[{"metricOptions":{"id":"expr1","label":"{ClusterName}"},"metricExpression":"RATE(mm0) + RATE(mm1)","resourceType":"CW::ECS::Cluster"},{"metricOptions":{"id":"mm0","visible":false},"metricTemplate":"CW::ECS::Cluster:NetworkRxBytes"},{"metricOptions":{"id":"mm1","visible":false},"metricTemplate":"CW::ECS::Cluster:NetworkTxBytes"}]}]},{"widgets":[{"type":"chart","properties":{"title":"ContainerInstanceCount"},"metrics":[{"metricTemplate":"CW::ECS::Cluster:ContainerInstanceCount"}]},{"type":"chart","properties":{"title":"TaskCount"},"metrics":[{"metricTemplate":"CW::ECS::Cluster:TaskCount"}]},{"type":"chart","properties":{"title":"ServiceCount"},"metrics":[{"metricTemplate":"CW::ECS::Cluster:ServiceCount"}]}]}]},{"id":"ECS:Instance","name":"ECS Instance","dependencies":[{"namespace":"ECS/ContainerInsights"}],"controls":["CW::ECS.cluster"],"rows":[{"widgets":[{"type":"chart","properties":{"title":"CPUUtilization"},"metrics":[{"metricTemplate":"CW::ECS::Instance:instance_cpu_utilization"}]},{"type":"chart","properties":{"title":"MemoryUtilization"},"metrics":[{"metricTemplate":"CW::ECS::Instance:instance_memory_utilization"}]},{"type":"chart","properties":{"title":"Network"},"metrics":[{"metricTemplate":"CW::ECS::Instance:instance_network_total_bytes"}]}]},{"widgets":[{"type":"chart","properties":{"title":"DiskUtilization"},"metrics":[{"metricTemplate":"CW::ECS::Instance:instance_cpu_utilization"}]},{"type":"chart","properties":{"title":"ECS:Instance.NumberOfTasks"},"metrics":[{"metricTemplate":"CW::ECS::Instance:instance_number_of_running_tasks"}]},{"type":"chart","properties":{"title":"ECS:Instance.CPUReservedCapacity"},"metrics":[{"metricTemplate":"CW::ECS::Instance:instance_cpu_reserved_capacity"}]},{"type":"chart","properties":{"title":"ECS:Instance.MemoryReservedCapacity"},"metrics":[{"metricTemplate":"CW::ECS::Instance:instance_memory_reserved_capacity"}]}]}]},{"id":"ECS:Service:Drawer","rows":[{"widgets":[{"type":"chart","properties":{"title":"CPUUtilization","yAxis":{"left":{"min":0,"showUnits":false,"label":"Percent"}}},"metrics":[{"metricExpression":"mm1 * 100 / mm0","resourceType":"CW::ECS::ServiceName","metricOptions":{"id":"expr1","label":"{ServiceName}"}},{"metricTemplate":"CW::ECS::ServiceName:CpuReserved","metricOptions":{"id":"mm0","visible":false}},{"metricTemplate":"CW::ECS::ServiceName:CpuUtilized","metricOptions":{"id":"mm1","visible":false}}]},{"type":"chart","properties":{"title":"MemoryUtilization","yAxis":{"left":{"min":0,"showUnits":false,"label":"Percent"}}},"metrics":[{"metricOptions":{"id":"expr1","label":"{ServiceName}"},"metricExpression":"mm1 * 100 / mm0","resourceType":"CW::ECS::ServiceName"},{"metricOptions":{"id":"mm0","visible":false},"metricTemplate":"CW::ECS::ServiceName:MemoryReserved"},{"metricOptions":{"id":"mm1","visible":false},"metricTemplate":"CW::ECS::ServiceName:MemoryUtilized"}]},{"type":"chart","properties":{"title":"Network","yAxis":{"left":{"showUnits":false,"label":"Bytes/Second"},"right":{"showUnits":false,"label":"Bytes/Second"}}},"metrics":[{"metricOptions":{"id":"expr1","label":"TX (avg)","yAxis":"right"},"metricExpression":"RATE(mm0)","resourceType":"CW::ECS::ServiceName"},{"metricOptions":{"id":"mm0","visible":false},"metricTemplate":"CW::ECS::ServiceName:NetworkTxBytes"},{"metricOptions":{"id":"expr2","label":"RX (avg)","yAxis":"left"},"metricExpression":"RATE(mm1)","resourceType":"CW::ECS::ServiceName"},{"metricOptions":{"id":"mm1","visible":false},"metricTemplate":"CW::ECS::ServiceName:NetworkRxBytes"}]}]}]},{"id":"ECS:Service","name":"ECS Service","dependencies":[{"namespace":"ECS/ContainerInsights"}],"controls":["CW::ECS.cluster"],"rows":[{"widgets":[{"type":"chart","properties":{"title":"CPUUtilization","yAxis":{"left":{"min":0,"showUnits":false,"label":"Percent"}}},"metrics":[{"metricOptions":{"id":"expr1","label":"{ServiceName}"},"metricExpression":"mm1 * 100 / mm0","resourceType":"CW::ECS::ServiceName"},{"metricOptions":{"id":"mm0","visible":false},"metricTemplate":"CW::ECS::ServiceName:CpuReserved"},{"metricOptions":{"id":"mm1","visible":false},"metricTemplate":"CW::ECS::ServiceName:CpuUtilized"}]},{"type":"chart","properties":{"title":"MemoryUtilization","yAxis":{"left":{"min":0,"showUnits":false,"label":"Percent"}}},"metrics":[{"metricOptions":{"id":"expr1","label":"{ServiceName}"},"metricExpression":"mm1 * 100 / mm0","resourceType":"CW::ECS::ServiceName"},{"metricOptions":{"id":"mm0","visible":false},"metricTemplate":"CW::ECS::ServiceName:MemoryReserved"},{"metricOptions":{"id":"mm1","visible":false},"metricTemplate":"CW::ECS::ServiceName:MemoryUtilized"}]},{"type":"chart","properties":{"title":"NetworkTX","yAxis":{"left":{"showUnits":false,"label":"Bytes/Second"}}},"metrics":[{"metricOptions":{"id":"expr1","label":"{ServiceName}"},"metricExpression":"RATE(mm0)","resourceType":"CW::ECS::ServiceName"},{"metricOptions":{"id":"mm0","visible":false},"metricTemplate":"CW::ECS::ServiceName:NetworkTxBytes"}]}]},{"widgets":[{"type":"chart","properties":{"title":"NetworkRX","yAxis":{"left":{"showUnits":false,"label":"Bytes/Second"}}},"metrics":[{"metricOptions":{"id":"expr1","label":"{ServiceName}"},"metricExpression":"RATE(mm0)","resourceType":"CW::ECS::ServiceName"},{"metricOptions":{"id":"mm0","visible":false},"metricTemplate":"CW::ECS::ServiceName:NetworkRxBytes"}]},{"type":"chart","properties":{"title":"ECS:Services.DesiredTaskCount"},"metrics":[{"metricTemplate":"CW::ECS::ServiceName:DesiredTaskCount"}]},{"type":"chart","properties":{"title":"ECS:Services.RunningTaskCount"},"metrics":[{"metricTemplate":"CW::ECS::ServiceName:RunningTaskCount"}]}]},{"widgets":[{"type":"chart","properties":{"title":"ECS:Services.PendingTaskCount"},"metrics":[{"metricTemplate":"CW::ECS::ServiceName:PendingTaskCount"}]},{"type":"chart","properties":{"title":"ECS:Services.TaskSetCount"},"metrics":[{"metricTemplate":"CW::ECS::ServiceName:TaskSetCount"}]},{"type":"chart","properties":{"title":"ECS:Services.DeploymentCount"},"metrics":[{"metricTemplate":"CW::ECS::ServiceName:DeploymentCount"}]}]}]},{"id":"ECS:Task:Drawer","rows":[{"widgets":[{"type":"chart","properties":{"title":"CPUUtilization","yAxis":{"left":{"min":0,"showUnits":false,"label":"Percent"}}},"metrics":[{"metricOptions":{"id":"expr1","label":"CPU (avg)"},"metricExpression":"mm1 * 100 / mm0","resourceType":"CW::ECS::Task"},{"metricTemplate":"CW::ECS::Task:CpuReserved","metricOptions":{"id":"mm0","visible":false}},{"metricTemplate":"CW::ECS::Task:CpuUtilized","metricOptions":{"id":"mm1","visible":false}}]},{"type":"chart","properties":{"title":"MemoryUtilization","yAxis":{"left":{"min":0,"showUnits":false,"label":"Percent"}}},"metrics":[{"metricExpression":"mm1 * 100 / mm0","resourceType":"CW::ECS::Task","metricOptions":{"id":"expr1","label":"Memory (avg)"}},{"metricTemplate":"CW::ECS::Task:MemoryReserved","metricOptions":{"id":"mm0","visible":false}},{"metricTemplate":"CW::ECS::Task:MemoryUtilized","metricOptions":{"id":"mm1","visible":false}}]},{"type":"chart","properties":{"title":"Network","yAxis":{"left":{"showUnits":false,"label":"Bytes/Second"},"right":{"showUnits":false,"label":"Bytes/Second"}}},"metrics":[{"metricExpression":"RATE(mm0)","resourceType":"CW::ECS::Task","metricOptions":{"id":"expr1","label":"TX (avg)","yAxis":"right"}},{"metricTemplate":"CW::ECS::Task:NetworkTxBytes","metricOptions":{"id":"mm0","visible":false}},{"metricExpression":"RATE(mm1)","resourceType":"CW::ECS::Task","metricOptions":{"id":"expr2","label":"RX (avg)","yAxis":"left"}},{"metricTemplate":"CW::ECS::Task:NetworkRxBytes","metricOptions":{"id":"mm1","visible":false}}]}]}]},{"id":"ECS:Task","name":"ECS Task","dependencies":[{"namespace":"ECS/ContainerInsights"}],"controls":["CW::ECS.cluster"],"rows":[{"widgets":[{"type":"chart","properties":{"title":"CPUUtilization","yAxis":{"left":{"min":0,"showUnits":false,"label":"Percent"}}},"metrics":[{"metricOptions":{"id":"expr1","label":"{TaskDefinitionFamily}"},"metricExpression":"mm1 * 100 / mm0","resourceType":"CW::ECS::Task"},{"metricOptions":{"id":"mm0","visible":false},"metricTemplate":"CW::ECS::Task:CpuReserved"},{"metricOptions":{"id":"mm1","visible":false},"metricTemplate":"CW::ECS::Task:CpuUtilized"}]},{"type":"chart","properties":{"title":"MemoryUtilization","yAxis":{"left":{"min":0,"showUnits":false,"label":"Percent"}}},"metrics":[{"metricOptions":{"id":"expr1","label":"{TaskDefinitionFamily}"},"metricExpression":"mm1 * 100 / mm0","resourceType":"CW::ECS::Task"},{"metricOptions":{"id":"mm0","visible":false},"metricTemplate":"CW::ECS::Task:MemoryReserved"},{"metricOptions":{"id":"mm1","visible":false},"metricTemplate":"CW::ECS::Task:MemoryUtilized"}]},{"type":"chart","properties":{"title":"NetworkTX","yAxis":{"left":{"showUnits":false,"label":"Bytes/Second"}}},"metrics":[{"metricOptions":{"id":"expr1","label":"{TaskDefinitionFamily}"},"metricExpression":"RATE(mm0)","resourceType":"CW::ECS::Task"},{"metricOptions":{"id":"mm0","visible":false},"metricTemplate":"CW::ECS::Task:NetworkTxBytes"}]}]},{"widgets":[{"type":"chart","properties":{"title":"NetworkRX","yAxis":{"left":{"showUnits":false,"label":"Bytes/Second"}}},"metrics":[{"metricOptions":{"id":"expr1","label":"{TaskDefinitionFamily}"},"metricExpression":"RATE(mm0)","resourceType":"CW::ECS::Task"},{"metricOptions":{"id":"mm0","visible":false},"metricTemplate":"CW::ECS::Task:NetworkRxBytes"}]},{"type":"chart","properties":{"title":"ECS:Task.StorageReadBytes"},"metrics":[{"metricTemplate":"CW::ECS::Task:StorageReadBytes"}]},{"type":"chart","properties":{"title":"ECS:Task.StorageWriteBytes"},"metrics":[{"metricTemplate":"CW::ECS::Task:StorageWriteBytes"}]}]}]}]},{"id":"AWS::EFS","dashboard":"EFS","crossServiceDashboard":"EFS:CrossService","resourceTypes":[{"type":"AWS::EFS::FileSystem","consoleLink":"/efs/home?region={region}#/file-systems/{FileSystemId}","keyMetric":"AWS::EFS::FileSystem:PermittedThroughput","dashboard":"EFS","arnRegex":".*:file-system/(.*)","describe":"efs-describe-file-systems"}],"controls":{"AWS::EFS.filesystems":{"type":"resource","resourceType":"AWS::EFS::FileSystem","labelField":"FileSystemId","valueField":"FileSystemId"}},"metricTemplates":[{"resourceType":"AWS::EFS::FileSystem","namespace":"AWS/EFS","dimensions":[{"dimensionName":"FileSystemId","labelName":"FileSystemId"}],"metrics":[{"id":"AWS::EFS::FileSystem:BurstCreditBalance","name":"BurstCreditBalance","defaultStat":"Average"},{"id":"AWS::EFS::FileSystem:ClientConnections","name":"ClientConnections","defaultStat":"Sum"},{"id":"AWS::EFS::FileSystem:DataReadIOBytes","name":"DataReadIOBytes","defaultStat":"Average"},{"id":"AWS::EFS::FileSystem:DataWriteIOBytes","name":"DataWriteIOBytes","defaultStat":"Average"},{"id":"AWS::EFS::FileSystem:MetaDataIOBytes","name":"MetaDataIOBytes","defaultStat":"Average"},{"id":"AWS::EFS::FileSystem:MeteredIOBytes","name":"MeteredIOBytes","defaultStat":"Average"},{"id":"AWS::EFS::FileSystem:PercentIOLimit","name":"PercentIOLimit","defaultStat":"Average"},{"id":"AWS::EFS::FileSystem:PermittedThroughput","name":"PermittedThroughput","defaultStat":"Average"},{"id":"AWS::EFS::FileSystem:TotalIOBytes","name":"TotalIOBytes","defaultStat":"Sum"}]},{"resourceType":"AWS::EFS::FileSystem","id":"AWS::EFS::FileSystem:StorageClass:Total","namespace":"AWS/EFS","dimensions":[{"dimensionName":"FileSystemId","labelName":"FileSystemId"},{"dimensionName":"StorageClass","dimensionValue":"Total"}],"metrics":[{"id":"AWS::EFS::FileSystem:StorageClass:Total:StorageBytes","name":"StorageBytes","defaultStat":"Average"}]}],"dashboards":[{"id":"EFS:CrossService","name":"Elastic File System (EFS)","dependencies":[{"namespace":"AWS/EFS"}],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::EFS::FileSystem:TotalIOBytes"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::EFS::FileSystem:PercentIOLimit"}]}]}]},{"id":"EFS","name":"Elastic File System (EFS)","dependencies":[{"namespace":"AWS/EFS"}],"controls":["Shared::View.AlarmState","Shared::Group.ResourceGroup","AWS::EFS.filesystems"],"tables":[{"resourceType":"AWS::EFS::FileSystem","columns":["FileSystemId","Name","SizeInBytes","NumberOfMountTargets","LifeCycleState","PerformanceMode","Encrypted","CreationTime"]}],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::EFS::FileSystem:ClientConnections"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::EFS::FileSystem:DataReadIOBytes"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::EFS::FileSystem:DataWriteIOBytes"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::EFS::FileSystem:BurstCreditBalance"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::EFS::FileSystem:PercentIOLimit"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::EFS::FileSystem:PermittedThroughput"}]}]}]}]},{"id":"CW::EKS","dashboard":"EKS:Cluster","resourceTypes":[{"type":"AWS::EKS::Cluster","keyMetric":"AWS::EKS::Cluster:pod_cpu_utilization","dashboard":"EKS:Cluster","arnRegex":".*:cluster/(.*)","drawerDashboard":"EKS:Cluster:Drawer","alarmPatterns":[{"namespace":"ContainerInsights","dimensions":[{"dimensionName":"ClusterName","labelName":"ClusterName"},{"dimensionName":"Namespace","labelName":""},{"dimensionName":"Service","labelName":""},{"dimensionName":"PodName","labelName":""},{"dimensionName":"NodeName","labelName":""}]}]},{"type":"CW::EKS::Node","keyMetric":"CW::EKS::Node:node_cpu_utilization","dashboard":"EKS:Node","foreignKeys":[{"resourceType":"AWS::EKS::Cluster","fields":["ClusterName"]}]},{"type":"CW::EKS::Namespace","keyMetric":"CW::EKS::Namespace:pod_cpu_utilization","dashboard":"EKS:Namespace","drawerDashboard":"EKS:Namespace:Drawer","foreignKeys":[{"resourceType":"AWS::EKS::Cluster","fields":["ClusterName"]}],"alarmPatterns":[{"namespace":"ContainerInsights","dimensions":[{"dimensionName":"ClusterName","labelName":"ClusterName"},{"dimensionName":"Namespace","labelName":"Namespace"},{"dimensionName":"Service","labelName":""},{"dimensionName":"PodName","labelName":""},{"dimensionName":"NodeName","labelName":""}]}]},{"type":"CW::EKS::Service","keyMetric":"CW::EKS::Service:pod_cpu_utilization","dashboard":"EKS:Service","drawerDashboard":"EKS:Service:Drawer","foreignKeys":[{"resourceType":"AWS::EKS::Cluster","fields":["ClusterName"]},{"resourceType":"CW::EKS::Namespace","fields":["Namespace"]}],"alarmPatterns":[{"namespace":"ContainerInsights","dimensions":[{"dimensionName":"ClusterName","labelName":"ClusterName"},{"dimensionName":"Namespace","labelName":"Namespace"},{"dimensionName":"Service","labelName":"Service"}]},{"namespace":"ContainerInsights/Prometheus","dimensions":[{"dimensionName":"ClusterName","labelName":"ClusterName"},{"dimensionName":"Namespace","labelName":"Namespace"},{"dimensionName":"Service","labelName":"Service"}]}]},{"type":"CW::EKS::Pod","keyMetric":"CW::EKS::Pod:pod_cpu_utilization","dashboard":"EKS:Pod","drawerDashboard":"EKS:Pod:Drawer","foreignKeys":[{"resourceType":"AWS::EKS::Cluster","fields":["ClusterName"]},{"resourceType":"CW::EKS::Namespace","fields":["Namespace"]}],"alarmPatterns":[{"namespace":"ContainerInsights","dimensions":[{"dimensionName":"ClusterName","labelName":"ClusterName"},{"dimensionName":"Namespace","labelName":"Namespace"},{"dimensionName":"PodName","labelName":"PodName"}]}]},{"type":"CW::EKS::Nginx","keyMetric":"CW::EKS::Nginx:nginx_ingress_controller_requests","dashboard":"EKS:Nginx"},{"type":"CW::EKS::AppMesh","keyMetric":"CW::EKS::AppMesh:envoy_server_memory_allocated","dashboard":"EKS:AppMesh"},{"type":"CW::EKS::JavaJMX","keyMetric":"CW::EKS::JavaJMX:java_lang_operatingsystem_totalphysicalmemorysize","dashboard":"EKS:JavaJMX"}],"controls":{"CW::EKS.service":{"type":"resource","resourceType":"CW::EKS::Service","labelField":"Service","valueField":"Service","resourceDashboard":"EKS:Service","serviceDashboard":"EKS:Service"},"CW::EKS.pod":{"type":"resource","resourceType":"CW::EKS::Pod","labelField":"PodName","valueField":"PodName","resourceDashboard":"EKS:Pod","serviceDashboard":"EKS:Pod"},"CW::EKS.namespace":{"type":"resource","resourceType":"CW::EKS::Namespace","labelField":"Namespace","valueField":"Namespace","resourceDashboard":"EKS:Namespace","serviceDashboard":"EKS:Namespace"},"CW::EKS.cluster":{"type":"resource","resourceType":"AWS::EKS::Cluster","labelField":"ClusterName","valueField":"ClusterName"},"CW::EKS.node":{"type":"resource","resourceType":"CW::EKS::Node","labelField":"NodeName","valueField":"NodeName"}},"metricTemplates":[{"resourceType":"AWS::EKS::Cluster","namespace":"ContainerInsights","dimensions":[{"dimensionName":"ClusterName","labelName":"ClusterName"}],"metrics":[{"id":"AWS::EKS::Cluster:node_cpu_limit","name":"node_cpu_limit","defaultStat":"Sum"},{"id":"AWS::EKS::Cluster:node_cpu_usage_total","name":"node_cpu_usage_total","defaultStat":"Sum"},{"id":"AWS::EKS::Cluster:node_memory_limit","name":"node_memory_limit","defaultStat":"Sum"},{"id":"AWS::EKS::Cluster:node_memory_working_set","name":"node_memory_working_set","defaultStat":"Sum"},{"id":"AWS::EKS::Cluster:pod_network_rx_bytes","name":"pod_network_rx_bytes","defaultStat":"Average"},{"id":"AWS::EKS::Cluster:pod_network_tx_bytes","name":"pod_network_tx_bytes","defaultStat":"Average"},{"id":"AWS::EKS::Cluster:node_network_total_bytes","name":"node_network_total_bytes","defaultStat":"Average"},{"id":"AWS::EKS::Cluster:cluster_failed_node_count","name":"cluster_failed_node_count","defaultStat":"Average"},{"id":"AWS::EKS::Cluster:node_filesystem_utilization","name":"node_filesystem_utilization","defaultStat":"p90"},{"id":"AWS::EKS::Cluster:cluster_node_count","name":"cluster_node_count","defaultStat":"Average"},{"id":"AWS::EKS::Cluster:pod_cpu_utilization","name":"pod_cpu_utilization","defaultStat":"Average"}]},{"resourceType":"CW::EKS::Namespace","namespace":"ContainerInsights","dimensions":[{"dimensionName":"Namespace","labelName":"Namespace"},{"dimensionName":"ClusterName","labelName":"ClusterName"}],"metrics":[{"id":"CW::EKS::Namespace:pod_cpu_utilization","name":"pod_cpu_utilization","defaultStat":"Average"},{"id":"CW::EKS::Namespace:pod_memory_utilization","name":"pod_memory_utilization","defaultStat":"Average"},{"id":"CW::EKS::Namespace:pod_network_tx_bytes","name":"pod_network_tx_bytes","defaultStat":"Average"},{"id":"CW::EKS::Namespace:pod_network_rx_bytes","name":"pod_network_rx_bytes","defaultStat":"Average"},{"id":"CW::EKS::Namespace:pod_cpu_utilization_over_pod_limit","name":"pod_cpu_utilization_over_pod_limit","defaultStat":"Average"},{"id":"CW::EKS::Namespace:pod_memory_utilization_over_pod_limit","name":"pod_memory_utilization_over_pod_limit","defaultStat":"Average"},{"id":"CW::EKS::Namespace:namespace_number_of_running_pods","name":"namespace_number_of_running_pods","defaultStat":"Average"}]},{"resourceType":"CW::EKS::Service","namespace":"ContainerInsights","dimensions":[{"dimensionName":"Service","labelName":"Service"},{"dimensionName":"Namespace","labelName":"Namespace"},{"dimensionName":"ClusterName","labelName":"ClusterName"}],"metrics":[{"id":"CW::EKS::Service:nginx_ingress_controller_requests","name":"nginx_ingress_controller_requests","defaultStat":"Sum"},{"id":"CW::EKS::Service:nginx_ingress_controller_nginx_process_connections","name":"nginx_ingress_controller_nginx_process_connections","defaultStat":"Average"},{"id":"CW::EKS::Service:nginx_ingress_controller_nginx_process_cpu_seconds_total","name":"nginx_ingress_controller_nginx_process_cpu_seconds_total","defaultStat":"Average"},{"id":"CW::EKS::Service:nginx_ingress_controller_nginx_process_resident_memory_bytes","name":"nginx_ingress_controller_nginx_process_resident_memory_bytes","defaultStat":"Average"},{"id":"CW::EKS::Service:pod_cpu_utilization","name":"pod_cpu_utilization","defaultStat":"Average"},{"id":"CW::EKS::Service:pod_memory_utilization","name":"pod_memory_utilization","defaultStat":"Average"},{"id":"CW::EKS::Service:pod_network_tx_bytes","name":"pod_network_tx_bytes","defaultStat":"Average"},{"id":"CW::EKS::Service:pod_network_rx_bytes","name":"pod_network_rx_bytes","defaultStat":"Average"},{"id":"CW::EKS::Service:pod_cpu_utilization_over_pod_limit","name":"pod_cpu_utilization_over_pod_limit","defaultStat":"Average"},{"id":"CW::EKS::Service:pod_memory_utilization_over_pod_limit","name":"pod_memory_utilization_over_pod_limit","defaultStat":"Average"},{"id":"CW::EKS::Service:service_number_of_running_pods","name":"service_number_of_running_pods","defaultStat":"Average"}]},{"resourceType":"CW::EKS::Node","namespace":"ContainerInsights","dimensions":[{"dimensionName":"InstanceId","labelName":"InstanceId"},{"dimensionName":"NodeName","labelName":"NodeName"},{"dimensionName":"ClusterName","labelName":"ClusterName"}],"metrics":[{"id":"CW::EKS::Node:node_cpu_utilization","name":"node_cpu_utilization","defaultStat":"Average"},{"id":"CW::EKS::Node:node_cpu_reserved_capacity","name":"node_cpu_reserved_capacity","defaultStat":"Average"},{"id":"CW::EKS::Node:node_memory_utilization","name":"node_memory_utilization","defaultStat":"Average"},{"id":"CW::EKS::Node:node_memory_reserved_capacity","name":"node_memory_reserved_capacity","defaultStat":"Average"},{"id":"CW::EKS::Node:node_filesystem_utilization","name":"node_filesystem_utilization","defaultStat":"Average"},{"id":"CW::EKS::Node:node_network_total_bytes","name":"node_network_total_bytes","defaultStat":"Average"},{"id":"CW::EKS::Node:node_number_of_running_pods","name":"node_number_of_running_pods","defaultStat":"Average"},{"id":"CW::EKS::Node:node_number_of_running_containers","name":"node_number_of_running_containers","defaultStat":"Average"}]},{"resourceType":"CW::EKS::Pod","namespace":"ContainerInsights","dimensions":[{"dimensionName":"PodName","labelName":"PodName"},{"dimensionName":"Namespace","labelName":"Namespace"},{"dimensionName":"ClusterName","labelName":"ClusterName"}],"metrics":[{"id":"CW::EKS::Pod:pod_cpu_utilization","name":"pod_cpu_utilization","defaultStat":"Average"},{"id":"CW::EKS::Pod:pod_memory_utilization","name":"pod_memory_utilization","defaultStat":"Average"},{"id":"CW::EKS::Pod:pod_network_tx_bytes","name":"pod_network_tx_bytes","defaultStat":"Average"},{"id":"CW::EKS::Pod:pod_network_rx_bytes","name":"pod_network_rx_bytes","defaultStat":"Average"},{"id":"CW::EKS::Pod:pod_cpu_utilization_over_pod_limit","name":"pod_cpu_utilization_over_pod_limit","defaultStat":"Average"},{"id":"CW::EKS::Pod:pod_memory_utilization_over_pod_limit","name":"pod_memory_utilization_over_pod_limit","defaultStat":"Average"},{"id":"CW::EKS::Pod:pod_cpu_reserved_capacity","name":"pod_cpu_reserved_capacity","defaultStat":"Average"},{"id":"CW::EKS::Pod:pod_memory_reserved_capacity","name":"pod_memory_reserved_capacity","defaultStat":"Average"}]},{"resourceType":"CW::EKS::Nginx","namespace":"ContainerInsights/Prometheus","dimensions":[{"dimensionName":"Service","labelName":"Service"},{"dimensionName":"Namespace","labelName":"Namespace"},{"dimensionName":"ClusterName","labelName":"ClusterName"}],"metrics":[{"id":"CW::EKS::Nginx:nginx_ingress_controller_requests","name":"nginx_ingress_controller_requests","defaultStat":"Sum"}]},{"resourceType":"CW::EKS::AppMesh","namespace":"ContainerInsights/Prometheus","dimensions":[{"dimensionName":"Namespace","labelName":"Namespace"},{"dimensionName":"ClusterName","labelName":"ClusterName"}],"metrics":[{"id":"CW::EKS::AppMesh:envoy_server_memory_allocated","name":"envoy_server_memory_allocated","defaultStat":"Sum"}]},{"resourceType":"CW::EKS::JavaJMX","namespace":"ContainerInsights/Prometheus","dimensions":[{"dimensionName":"Namespace","labelName":"Namespace"},{"dimensionName":"ClusterName","labelName":"ClusterName"}],"metrics":[{"id":"CW::EKS::JavaJMX:java_lang_operatingsystem_totalphysicalmemorysize","name":"java_lang_operatingsystem_totalphysicalmemorysize","defaultStat":"Average"}]}],"dashboards":[{"id":"EKS:AppMesh","name":"EKS AppMesh Report","dependencies":[{"namespace":"ContainerInsights"},{"namespace":"ContainerInsights/Prometheus"}],"controls":["CW::EKS.cluster"],"rows":[{"widgets":[{"type":"chart","width":4,"properties":{"title":"EKS:AppMesh.MeshedPods","view":"singleValue"},"metrics":[{"metricOptions":{"id":"expr1","label":"{ClusterName}"},"resourceType":false,"metricExpression":"SUM(SEARCH(\'{ContainerInsights/Prometheus,ClusterName, Namespace} envoy_server_live ClusterName=\\"{ClusterName}\\"\', \'Sum\', 60))"}]},{"type":"chart","width":4,"properties":{"title":"EKS:AppMesh.RPS","view":"singleValue"},"metrics":[{"metricOptions":{"id":"expr1","label":"{ClusterName}"},"resourceType":false,"metricExpression":"SUM(SEARCH(\'{ContainerInsights/Prometheus,ClusterName,Namespace} ClusterName=\\"{ClusterName}\\" envoy_http_downstream_rq_total\', \'Sum\', 60))/60"}]},{"type":"chart","width":4,"properties":{"title":"EKS:AppMesh.FailuresPerSecond","view":"singleValue"},"metrics":[{"metricOptions":{"id":"expr1","label":"{ClusterName}"},"resourceType":false,"metricExpression":"(SUM(SEARCH(\'{ContainerInsights/Prometheus,ClusterName,Namespace,envoy_http_conn_manager_prefix,envoy_response_code_class} envoy_http_downstream_rq_xx$ {ClusterName} (envoy_http_conn_manager_prefix=\\"ingress\\" OR envoy_http_conn_manager_prefix=\\"egress\\") envoy_response_code_class=\\"4\\"\', \'Sum\', 60)) + SUM(SEARCH(\'{ContainerInsights/Prometheus,ClusterName,Namespace,envoy_http_conn_manager_prefix,envoy_response_code_class} envoy_http_downstream_rq_xx$ {ClusterName} (envoy_http_conn_manager_prefix=\\"ingress\\" OR envoy_http_conn_manager_prefix=\\"egress\\") envoy_response_code_class=\\"5\\"\', \'Sum\', 60)))/60"}]},{"type":"chart","width":6,"properties":{"title":"EKS:AppMesh.EnvoyHeap","view":"singleValue"},"metrics":[{"metricOptions":{"id":"expr1","label":"{ClusterName}"},"resourceType":false,"metricExpression":"SUM(SEARCH(\'{ContainerInsights/Prometheus,ClusterName,Namespace} ClusterName=\\"{ClusterName}\\" envoy_server_memory_heap_size\', \'Sum\', 60))"}]},{"type":"chart","width":6,"properties":{"title":"EKS:AppMesh.MemoryUsage","view":"singleValue"},"metrics":[{"metricOptions":{"id":"expr1","label":"{ClusterName}"},"resourceType":false,"metricExpression":"SUM(SEARCH(\'{ContainerInsights/Prometheus,ClusterName,Namespace} ClusterName=\\"{ClusterName}\\" envoy_server_memory_allocated\', \'Sum\', 60))"}]}]},{"widgets":[{"type":"chart","width":4,"properties":{"title":"EKS:AppMesh.AverageUptime","view":"singleValue"},"metrics":[{"metricOptions":{"id":"expr1","label":"{ClusterName}"},"resourceType":false,"metricExpression":"AVG(REMOVE_EMPTY(SEARCH(\'{ContainerInsights/Prometheus,ClusterName,Namespace} ClusterName=\\"{ClusterName}\\" envoy_server_uptime\', \'Average\', 60)/3600))"}]},{"type":"chart","width":4,"properties":{"title":"EKS:AppMesh.InboundTraffic","view":"singleValue"},"metrics":[{"metricOptions":{"id":"expr1","label":"{ClusterName}"},"resourceType":false,"metricExpression":" SUM(REMOVE_EMPTY(SEARCH(\'{ContainerInsights/Prometheus,ClusterName,Namespace} ClusterName=\\"{ClusterName}\\" envoy_cluster_upstream_cx_rx_bytes_total\', \'Sum\', 60)))/60"}]},{"type":"chart","width":4,"properties":{"title":"EKS:AppMesh.OutboundTraffic","view":"singleValue"},"metrics":[{"metricOptions":{"id":"expr1","label":"{ClusterName}"},"resourceType":false,"metricExpression":"SUM(REMOVE_EMPTY(SEARCH(\'{ContainerInsights/Prometheus,ClusterName,Namespace} ClusterName=\\"{ClusterName}\\" envoy_cluster_upstream_cx_tx_bytes_total\', \'Sum\', 60)))/60"}]},{"type":"chart","width":6,"properties":{"title":"EKS:AppMesh.UnhealthyPods","view":"singleValue"},"metrics":[{"metricOptions":{"id":"expr1","label":"{ClusterName}"},"resourceType":false,"metricExpression":"SUM(REMOVE_EMPTY(SEARCH(\'{ContainerInsights/Prometheus,ClusterName,Namespace} ClusterName=\\"{ClusterName}\\" envoy_cluster_membership_total\', \'Sum\', 60))) - SUM(REMOVE_EMPTY(SEARCH(\'{ContainerInsights/Prometheus,ClusterName,Namespace} ClusterName=\\"{ClusterName}\\" envoy_cluster_membership_healthy\', \'Sum\', 60)))"}]},{"type":"chart","width":6,"properties":{"title":"EKS:AppMesh.ConnectionTimeouts","view":"singleValue"},"metrics":[{"metricOptions":{"id":"expr1","label":"{ClusterName}"},"resourceType":false,"metricExpression":"AVG(REMOVE_EMPTY(SEARCH(\'{ContainerInsights/Prometheus,ClusterName,Namespace} envoy_cluster_upstream_cx_connect_timeout ClusterName=\\"{ClusterName}\\"\', \'Average\', 60)))"}]}]},{"widgets":[{"type":"chart","properties":{"title":"EKS:AppMesh.InboundOutboundTraffic"},"metrics":[{"metricOptions":{"id":"expr1","label":"InBound (TX) {ClusterName}"},"resourceType":false,"metricExpression":"SUM(REMOVE_EMPTY(SEARCH(\'{ContainerInsights/Prometheus,ClusterName,Namespace} ClusterName=\\"{ClusterName}\\" envoy_cluster_upstream_cx_rx_bytes_total\', \'Sum\', 60)))/60"},{"metricOptions":{"id":"expr2","label":"OutBound (RX) {ClusterName}"},"resourceType":false,"metricExpression":"SUM(REMOVE_EMPTY(SEARCH(\'{ContainerInsights/Prometheus,ClusterName,Namespace} ClusterName=\\"{ClusterName}\\" envoy_cluster_upstream_cx_tx_bytes_total\', \'Sum\', 60)))/60"}]}]},{"widgets":[{"type":"chart","properties":{"title":"EKS:AppMesh.IngressHttpRequestsPerSecond"},"metrics":[{"metricOptions":{"id":"expr1","label":"[avg: ${AVG}] HTTP 1XX {ClusterName}"},"resourceType":false,"metricExpression":"SUM(SEARCH(\'{ContainerInsights/Prometheus,ClusterName,Namespace,envoy_http_conn_manager_prefix,envoy_response_code_class} envoy_http_downstream_rq_xx ClusterName=\\"{ClusterName}\\" envoy_http_conn_manager_prefix=\\"ingress\\" envoy_response_code_class=\\"1\\"\', \'Sum\', 60))/60"},{"metricOptions":{"id":"expr2","label":"[avg: ${AVG}] HTTP 2XX {ClusterName}"},"resourceType":false,"metricExpression":"SUM(SEARCH(\'{ContainerInsights/Prometheus,ClusterName,Namespace,envoy_http_conn_manager_prefix,envoy_response_code_class} envoy_http_downstream_rq_xx ClusterName=\\"{ClusterName}\\" envoy_http_conn_manager_prefix=\\"ingress\\" envoy_response_code_class=\\"2\\"\', \'Sum\', 60))/60"},{"metricOptions":{"id":"expr3","label":"[avg: ${AVG}] HTTP 3XX {ClusterName}"},"resourceType":false,"metricExpression":"SUM(SEARCH(\'{ContainerInsights/Prometheus,ClusterName,Namespace,envoy_http_conn_manager_prefix,envoy_response_code_class} envoy_http_downstream_rq_xx ClusterName=\\"{ClusterName}\\" envoy_http_conn_manager_prefix=\\"ingress\\" envoy_response_code_class=\\"3\\"\', \'Sum\', 60))/60"},{"metricOptions":{"id":"expr4","label":"[avg: ${AVG}] HTTP 4XX {ClusterName}"},"resourceType":false,"metricExpression":"SUM(SEARCH(\'{ContainerInsights/Prometheus,ClusterName,Namespace,envoy_http_conn_manager_prefix,envoy_response_code_class} envoy_http_downstream_rq_xx ClusterName=\\"{ClusterName}\\" envoy_http_conn_manager_prefix=\\"ingress\\" envoy_response_code_class=\\"4\\"\', \'Sum\', 60))/60"},{"metricOptions":{"id":"expr5","label":"[avg: ${AVG}] HTTP 5XX {ClusterName}"},"resourceType":false,"metricExpression":"SUM(SEARCH(\'{ContainerInsights/Prometheus,ClusterName,Namespace,envoy_http_conn_manager_prefix,envoy_response_code_class} envoy_http_downstream_rq_xx ClusterName=\\"{ClusterName}\\" envoy_http_conn_manager_prefix=\\"ingress\\" envoy_response_code_class=\\"5\\"\', \'Sum\', 60))/60"}]},{"type":"chart","properties":{"title":"EKS:AppMesh.EgressHttpRequestsPerSecond"},"metrics":[{"metricOptions":{"id":"expr1","label":"[avg: ${AVG}] HTTP 1XX {ClusterName}"},"resourceType":false,"metricExpression":"SUM(SEARCH(\'{ContainerInsights/Prometheus,ClusterName,Namespace,envoy_http_conn_manager_prefix,envoy_response_code_class} envoy_http_downstream_rq_xx ClusterName=\\"{ClusterName}\\" envoy_http_conn_manager_prefix=\\"egress\\" envoy_response_code_class=\\"1\\"\', \'Sum\', 60))/60"},{"metricOptions":{"id":"expr2","label":"[avg: ${AVG}] HTTP 2XX {ClusterName}"},"resourceType":false,"metricExpression":"SUM(SEARCH(\'{ContainerInsights/Prometheus,ClusterName,Namespace,envoy_http_conn_manager_prefix,envoy_response_code_class} envoy_http_downstream_rq_xx ClusterName=\\"{ClusterName}\\" envoy_http_conn_manager_prefix=\\"egress\\" envoy_response_code_class=\\"2\\"\', \'Sum\', 60))/60"},{"metricOptions":{"id":"expr3","label":"[avg: ${AVG}] HTTP 3XX {ClusterName}"},"resourceType":false,"metricExpression":"SUM(SEARCH(\'{ContainerInsights/Prometheus,ClusterName,Namespace,envoy_http_conn_manager_prefix,envoy_response_code_class} envoy_http_downstream_rq_xx ClusterName=\\"{ClusterName}\\" envoy_http_conn_manager_prefix=\\"egress\\" envoy_response_code_class=\\"3\\"\', \'Sum\', 60))/60"},{"metricOptions":{"id":"expr4","label":"[avg: ${AVG}] HTTP 4XX {ClusterName}"},"resourceType":false,"metricExpression":"SUM(SEARCH(\'{ContainerInsights/Prometheus,ClusterName,Namespace,envoy_http_conn_manager_prefix,envoy_response_code_class} envoy_http_downstream_rq_xx ClusterName=\\"{ClusterName}\\" envoy_http_conn_manager_prefix=\\"egress\\" envoy_response_code_class=\\"4\\"\', \'Sum\', 60))/60"},{"metricOptions":{"id":"expr5","label":"[avg: ${AVG}] HTTP 5XX {ClusterName}"},"resourceType":false,"metricExpression":"SUM(SEARCH(\'{ContainerInsights/Prometheus,ClusterName,Namespace,envoy_http_conn_manager_prefix,envoy_response_code_class} envoy_http_downstream_rq_xx ClusterName=\\"{ClusterName}\\" envoy_http_conn_manager_prefix=\\"egress\\" envoy_response_code_class=\\"5\\"\', \'Sum\', 60))/60"}]}]},{"widgets":[{"type":"chart","properties":{"title":"EKS:AppMesh.UpstreamRequestErrorsPerSecond"},"metrics":[{"metricOptions":{"id":"expr1","label":"[min: ${MIN}, max: ${MAX}, avg: ${AVG}, last: ${LAST}] pending failure ejection {ClusterName}"},"resourceType":false,"metricExpression":"SUM(SEARCH(\'{ContainerInsights/Prometheus,ClusterName,Namespace} ClusterName=\\"{ClusterName}\\" envoy_cluster_upstream_rq_pending_failure_eject\', \'Sum\', 60))/60"},{"metricOptions":{"id":"expr2","label":"[min: ${MIN}, max: ${MAX}, avg: ${AVG}, last: ${LAST}] pending overflow {ClusterName}"},"resourceType":false,"metricExpression":"SUM(SEARCH(\'{ContainerInsights/Prometheus,ClusterName,Namespace} ClusterName=\\"{ClusterName}\\" envoy_cluster_upstream_rq_pending_overflow\', \'Sum\', 60))/60"},{"metricOptions":{"id":"expr3","label":"[min: ${MIN}, max: ${MAX}, avg: ${AVG}, last: ${LAST}] connect timeout {ClusterName}"},"resourceType":false,"metricExpression":"SUM(SEARCH(\'{ContainerInsights/Prometheus,ClusterName,Namespace} ClusterName=\\"{ClusterName}\\" envoy_cluster_upstream_cx_connect_timeout\', \'Sum\', 60))/60"},{"metricOptions":{"id":"expr4","label":"[min: ${MIN}, max: ${MAX}, avg: ${AVG}, last: ${LAST}] request timeout {ClusterName}"},"resourceType":false,"metricExpression":"SUM(SEARCH(\'{ContainerInsights/Prometheus,ClusterName,Namespace} ClusterName=\\"{ClusterName}\\" envoy_cluster_upstream_rq_timeout\', \'Sum\', 60))/60"},{"metricOptions":{"id":"expr5","label":"[min: ${MIN}, max: ${MAX}, avg: ${AVG}, last: ${LAST}] per try request timeout {ClusterName}"},"resourceType":false,"metricExpression":"SUM(SEARCH(\'{ContainerInsights/Prometheus,ClusterName,Namespace} ClusterName=\\"{ClusterName}\\" envoy_cluster_upstream_rq_per_try_timeout\', \'Sum\', 60))/60"},{"metricOptions":{"id":"expr6","label":"[min: ${MIN}, max: ${MAX}, avg: ${AVG}, last: ${LAST}] request reset {ClusterName}"},"resourceType":false,"metricExpression":"SUM(SEARCH(\'{ContainerInsights/Prometheus,ClusterName,Namespace} ClusterName=\\"{ClusterName}\\" envoy_cluster_upstream_rq_rx_reset\', \'Sum\', 60))/60"},{"metricOptions":{"id":"expr7","label":"[min: ${MIN}, max: ${MAX}, avg: ${AVG}, last: ${LAST}] destroy initialized from originating service {ClusterName}"},"resourceType":false,"metricExpression":"SUM(SEARCH(\'{ContainerInsights/Prometheus,ClusterName,Namespace} ClusterName=\\"{ClusterName}\\" envoy_cluster_upstream_cx_destroy_local_with_active_rq\', \'Sum\', 60))/60"},{"metricOptions":{"id":"expr8","label":"[min: ${MIN}, max: ${MAX}, avg: ${AVG}, last: ${LAST}] destroy initialized from remote service {ClusterName}"},"resourceType":false,"metricExpression":"SUM(SEARCH(\'{ContainerInsights/Prometheus,ClusterName,Namespace} ClusterName=\\"{ClusterName}\\" envoy_http_downstream_cx_destroy_remote_active_rq\', \'Sum\', 60))/60"},{"metricOptions":{"id":"expr9","label":"[min: ${MIN}, max: ${MAX}, avg: ${AVG}, last: ${LAST}] request failed maintenance mode {ClusterName}"},"resourceType":false,"metricExpression":"SUM(SEARCH(\'{ContainerInsights/Prometheus,ClusterName,Namespace} ClusterName=\\"{ClusterName}\\" envoy_cluster_upstream_rq_maintenance_mode\', \'Sum\', 60))/60"}]},{"type":"chart","properties":{"title":"EKS:AppMesh.UpstreamFlowControl"},"metrics":[{"metricOptions":{"id":"expr1","label":" [avg: ${AVG}] paused reading from destination service {ClusterName}"},"resourceType":false,"metricExpression":"SUM(SEARCH(\'{ContainerInsights/Prometheus,ClusterName,Namespace} ClusterName=\\"{ClusterName}\\" envoy_cluster_upstream_flow_control_paused_reading_total\', \'Sum\', 60))/60"},{"metricOptions":{"id":"expr2","label":" [avg: ${AVG}] resumed reading from destination service {ClusterName}"},"resourceType":false,"metricExpression":"SUM(SEARCH(\'{ContainerInsights/Prometheus,ClusterName,Namespace} ClusterName=\\"{ClusterName}\\" envoy_cluster_upstream_flow_control_resumed_reading_total\', \'Sum\', 60))/60"},{"metricOptions":{"id":"expr3","label":" [avg: ${AVG}] paused reading from originating service {ClusterName}"},"resourceType":false,"metricExpression":"SUM(SEARCH(\'{ContainerInsights/Prometheus,ClusterName,Namespace} ClusterName=\\"{ClusterName}\\" envoy_cluster_upstream_flow_control_backed_up_total\', \'Sum\', 60))/60"},{"metricOptions":{"id":"expr4","label":" [avg: ${AVG}] resumed reading from originating service {ClusterName}"},"resourceType":false,"metricExpression":"SUM(SEARCH(\'{ContainerInsights/Prometheus,ClusterName,Namespace} ClusterName=\\"{ClusterName}\\" envoy_cluster_upstream_flow_control_drained_total\', \'Sum\', 60))/60"}]}]},{"widgets":[{"type":"chart","properties":{"title":"EKS:AppMesh.UpstreamRequestRetry"},"metrics":[{"metricOptions":{"id":"expr1","label":" [avg: ${AVG}] request retry {ClusterName}"},"resourceType":false,"metricExpression":"SUM(SEARCH(\'{ContainerInsights/Prometheus,ClusterName,Namespace} {ClusterName} envoy_cluster_upstream_flow_control_resumed_reading_total\', \'Sum\', 60))/60"},{"metricOptions":{"id":"expr2","label":" [avg: ${AVG}] request retry success {ClusterName}"},"resourceType":false,"metricExpression":"SUM(SEARCH(\'{ContainerInsights/Prometheus,ClusterName,Namespace} {ClusterName} envoy_cluster_upstream_rq_retry_success\', \'Sum\', 60))/60"},{"metricOptions":{"id":"expr3","label":" [avg: ${AVG}] request retry overflow {ClusterName}"},"resourceType":false,"metricExpression":"SUM(SEARCH(\'{ContainerInsights/Prometheus,ClusterName,Namespace} {ClusterName} envoy_cluster_upstream_rq_retry_overflow\', \'Sum\', 60))/60"}]}]}]},{"id":"EKS:Cluster:Drawer","rows":[{"widgets":[{"type":"chart","properties":{"title":"CPUUtilization","yAxis":{"left":{"min":0,"showUnits":false,"label":"Percent"}}},"metrics":[{"metricOptions":{"id":"expr1","label":"CPU (avg)"},"metricExpression":"mm1 * 100 / mm0","resourceType":"AWS::EKS::Cluster"},{"metricOptions":{"id":"mm0","visible":false},"metricTemplate":"AWS::EKS::Cluster:node_cpu_limit"},{"metricOptions":{"id":"mm1","visible":false},"metricTemplate":"AWS::EKS::Cluster:node_cpu_usage_total"}]},{"type":"chart","properties":{"title":"MemoryUtilization","yAxis":{"left":{"min":0,"showUnits":false,"label":"Percent"}}},"metrics":[{"metricOptions":{"id":"expr1","label":"Memory (avg)"},"metricExpression":"mm1 * 100 / mm0","resourceType":"AWS::EKS::Cluster"},{"metricOptions":{"id":"mm0","visible":false},"metricTemplate":"AWS::EKS::Cluster:node_memory_limit"},{"metricOptions":{"id":"mm1","visible":false},"metricTemplate":"AWS::EKS::Cluster:node_memory_working_set"}]},{"type":"chart","properties":{"title":"Network"},"metrics":[{"metricOptions":{"yAxis":"left","label":"RX (avg)"},"metricTemplate":"AWS::EKS::Cluster:pod_network_rx_bytes"},{"metricOptions":{"yAxis":"right","label":"TX (avg)"},"metricTemplate":"AWS::EKS::Cluster:pod_network_tx_bytes"}]}]}]},{"id":"EKS:Cluster","name":"EKS Cluster","dependencies":[{"namespace":"ContainerInsights"}],"controls":["CW::EKS.cluster"],"rows":[{"widgets":[{"type":"chart","properties":{"title":"CPUUtilization","yAxis":{"left":{"min":0,"showUnits":false,"label":"Percent"}}},"metrics":[{"metricOptions":{"id":"expr1","label":"{ClusterName}"},"metricExpression":"mm1 * 100 / mm0","resourceType":"AWS::EKS::Cluster"},{"metricOptions":{"id":"mm0","visible":false},"metricTemplate":"AWS::EKS::Cluster:node_cpu_limit"},{"metricOptions":{"id":"mm1","visible":false},"metricTemplate":"AWS::EKS::Cluster:node_cpu_usage_total"}]},{"type":"chart","properties":{"title":"MemoryUtilization","yAxis":{"left":{"min":0,"showUnits":false,"label":"Percent"}}},"metrics":[{"metricOptions":{"id":"expr1","label":"{ClusterName}"},"metricExpression":"mm1 * 100 / mm0","resourceType":"AWS::EKS::Cluster"},{"metricOptions":{"id":"mm0","visible":false},"metricTemplate":"AWS::EKS::Cluster:node_memory_limit"},{"metricOptions":{"id":"mm1","visible":false},"metricTemplate":"AWS::EKS::Cluster:node_memory_working_set"}]},{"type":"chart","properties":{"title":"Network"},"metrics":[{"metricTemplate":"AWS::EKS::Cluster:node_network_total_bytes"}]}]},{"widgets":[{"type":"chart","properties":{"title":"EKS:Clusters.ClusterFailures"},"metrics":[{"metricTemplate":"AWS::EKS::Cluster:cluster_failed_node_count"}]},{"type":"chart","properties":{"title":"DiskUtilization"},"metrics":[{"metricTemplate":"AWS::EKS::Cluster:node_filesystem_utilization"}]},{"type":"chart","properties":{"title":"EKS:Clusters.NumberOfNodes"},"metrics":[{"metricTemplate":"AWS::EKS::Cluster:cluster_node_count"}]}]}]},{"id":"EKS:JavaJMX","name":"EKS JavaJMX Report","dependencies":[{"namespace":"ContainerInsights"},{"namespace":"ContainerInsights/Prometheus"}],"controls":["CW::EKS.cluster"],"rows":[{"widgets":[{"type":"chart","properties":{"title":"EKS:JavaJMX.TotalRAM","view":"singleValue"},"metrics":[{"metricExpression":"AVG(REMOVE_EMPTY(SEARCH(\'{ContainerInsights/Prometheus,ClusterName,Namespace} ClusterName=\\"{ClusterName}\\" java_lang_operatingsystem_totalphysicalmemorysize\', \'Average\', 60)))","resourceType":"AWS::EKS::Cluster","metricOptions":{"id":"expr1","label":"{ClusterName}"}}]},{"type":"chart","properties":{"title":"EKS:JavaJMX.SWAP","view":"singleValue"},"metrics":[{"metricExpression":"AVG(REMOVE_EMPTY(SEARCH(\'{ContainerInsights/Prometheus,ClusterName,Namespace} ClusterName=\\"{ClusterName}\\" java_lang_operatingsystem_totalswapspacesize\', \'Average\', 60)))","resourceType":"AWS::EKS::Cluster","metricOptions":{"id":"expr1","label":"{ClusterName}"}}]},{"type":"chart","properties":{"title":"EKS:JavaJMX.CPUSystemLoad","view":"singleValue"},"metrics":[{"metricExpression":"AVG(REMOVE_EMPTY(SEARCH(\'{ContainerInsights/Prometheus,ClusterName,Namespace} ClusterName=\\"{ClusterName}\\" java_lang_operatingsystem_systemcpuload\', \'Average\', 60)) * 100)","resourceType":"AWS::EKS::Cluster","metricOptions":{"id":"expr1","label":"{ClusterName}"}}]},{"type":"chart","properties":{"title":"EKS:JavaJMX.CPUCores","view":"singleValue"},"metrics":[{"metricExpression":"AVG(REMOVE_EMPTY(SEARCH(\'{ContainerInsights/Prometheus,ClusterName,Namespace} ClusterName=\\"{ClusterName}\\" jvm_classes_loaded\', \'Average\', 60)) * 100)","resourceType":"AWS::EKS::Cluster","metricOptions":{"id":"expr1","label":"{ClusterName}"}}]}]},{"widgets":[{"type":"chart","properties":{"title":"EKS:JavaJMX.CPUUsage"},"metrics":[{"metricExpression":"AVG(REMOVE_EMPTY(SEARCH(\'{ContainerInsights/Prometheus,ClusterName,Namespace} ClusterName=\\"{ClusterName}\\" java_lang_operatingsystem_systemcpuload\', \'Average\', 60)) * 100)","resourceType":"AWS::EKS::Cluster","metricOptions":{"id":"expr1","label":"System cpu load {ClusterName}"}},{"metricExpression":"AVG(REMOVE_EMPTY(SEARCH(\'{ContainerInsights/Prometheus,ClusterName,Namespace} ClusterName=\\"{ClusterName}\\" java_lang_operatingsystem_processcpuload\', \'Average\', 60)) * 100)","resourceType":"AWS::EKS::Cluster","metricOptions":{"id":"expr2","label":"Process cpu load {ClusterName}"}}]},{"type":"chart","properties":{"title":"EKS:JavaJMX.Memory"},"metrics":[{"metricExpression":"AVG(REMOVE_EMPTY(SEARCH(\'{ContainerInsights/Prometheus,ClusterName,Namespace, area} ClusterName=\\"{ClusterName}\\" jvm_memory_bytes_used\', \'Average\', 60))/AVG(REMOVE_EMPTY(SEARCH(\'{ContainerInsights/Prometheus,ClusterName,Namespace} java_lang_operatingsystem_totalphysicalmemorysize\', \'Average\', 60))) * 100)","resourceType":"AWS::EKS::Cluster","metricOptions":{"id":"expr1","label":"{ClusterName}"}}]}]},{"widgets":[{"type":"chart","properties":{"title":"EKS:JavaJMX.MemoryPoolUsed"},"metrics":[{"metricExpression":"AVG(REMOVE_EMPTY(SEARCH(\'{ContainerInsights/Prometheus,ClusterName,Namespace, pool} ClusterName=\\"{ClusterName}\\" jvm_memory_pool_bytes_used\', \'Average\', 60)))","resourceType":"AWS::EKS::Cluster","metricOptions":{"id":"expr1","label":"{ClusterName}"}}]},{"type":"chart","properties":{"title":"EKS:JavaJMX.ThreadsUsed"},"metrics":[{"metricExpression":"AVG(REMOVE_EMPTY(SEARCH(\'{ContainerInsights/Prometheus,ClusterName,Namespace} ClusterName=\\"{ClusterName}\\" jvm_threads_daemon\', \'Average\', 60)))","resourceType":"AWS::EKS::Cluster","metricOptions":{"id":"expr2","label":"Daemon {ClusterName}"}},{"metricExpression":"AVG(REMOVE_EMPTY(SEARCH(\'{ContainerInsights/Prometheus,ClusterName,Namespace} ClusterName=\\"{ClusterName}\\" jvm_threads_current\', \'Average\', 60)))","resourceType":"AWS::EKS::Cluster","metricOptions":{"id":"expr1","label":"Current {ClusterName}"}}]}]},{"widgets":[{"type":"chart","properties":{"title":"EKS:JavaJMX.OpenFileDescriptors"},"metrics":[{"metricExpression":"AVG(REMOVE_EMPTY(SEARCH(\'{ContainerInsights/Prometheus,ClusterName,Namespace} ClusterName=\\"{ClusterName}\\" java_lang_operatingsystem_openfiledescriptorcount\', \'Average\', 60)))","resourceType":"AWS::EKS::Cluster","metricOptions":{"id":"expr1","label":"{ClusterName}"}}]},{"type":"chart","properties":{"title":"EKS:JavaJMX.ClassLoading"},"metrics":[{"metricExpression":"AVG(REMOVE_EMPTY(SEARCH(\'{ContainerInsights/Prometheus,ClusterName,Namespace} ClusterName=\\"{ClusterName}\\" jvm_classes_loaded\', \'Average\', 60)) * 100)","resourceType":"AWS::EKS::Cluster","metricOptions":{"id":"expr1","label":"{ClusterName}"}}]}]},{"widgets":[{"type":"chart","properties":{"title":"EKS:JavaJMX.CatalinaManagerSessions"},"metrics":[{"metricExpression":"AVG(REMOVE_EMPTY(SEARCH(\'{ContainerInsights/Prometheus,ClusterName,Namespace} ClusterName=\\"{ClusterName}\\" catalina_manager_activesessions\', \'Average\', 60)))","resourceType":"AWS::EKS::Cluster","metricOptions":{"id":"expr1","label":"Active sessions {ClusterName}"}},{"metricExpression":"AVG(REMOVE_EMPTY(SEARCH(\'{ContainerInsights/Prometheus,ClusterName,Namespace} ClusterName=\\"{ClusterName}\\" catalina_manager_rejectedsessions\', \'Average\', 60)))","resourceType":"AWS::EKS::Cluster","metricOptions":{"id":"expr2","label":"Rejected sessions {ClusterName}"}}]},{"type":"chart","properties":{"title":"EKS:JavaJMX.CatalinaRequestProcessorBytes"},"metrics":[{"metricExpression":"AVG(REMOVE_EMPTY(SEARCH(\'{ContainerInsights/Prometheus,ClusterName,Namespace} ClusterName=\\"{ClusterName}\\" catalina_globalrequestprocessor_bytesreceived\', \'Average\', 60)))","resourceType":"AWS::EKS::Cluster","metricOptions":{"id":"expr1","label":"Bytes received {ClusterName}"}},{"metricExpression":"AVG(REMOVE_EMPTY(SEARCH(\'{ContainerInsights/Prometheus,ClusterName,Namespace} ClusterName=\\"{ClusterName}\\" catalina_globalrequestprocessor_bytessent\', \'Average\', 60)))","resourceType":"AWS::EKS::Cluster","metricOptions":{"id":"expr2","label":"Bytes sent {ClusterName}"}}]}]},{"widgets":[{"type":"chart","properties":{"title":"EKS:JavaJMX.CatalinaRequestProcessorRequests"},"metrics":[{"metricExpression":"AVG(REMOVE_EMPTY(SEARCH(\'{ContainerInsights/Prometheus,ClusterName,Namespace} ClusterName=\\"{ClusterName}\\" catalina_globalrequestprocessor_requestcount\', \'Average\', 60)))","resourceType":"AWS::EKS::Cluster","metricOptions":{"id":"expr1","label":"Request count{ClusterName}"}},{"metricExpression":"AVG(REMOVE_EMPTY(SEARCH(\'{ContainerInsights/Prometheus,ClusterName,Namespace} ClusterName=\\"{ClusterName}\\" catalina_globalrequestprocessor_errorcount\', \'Average\', 60)))","resourceType":"AWS::EKS::Cluster","metricOptions":{"id":"expr2","label":"Error count {ClusterName}"}}]},{"type":"chart","properties":{"title":"EKS:JavaJMX.CatalinaRequestProcessorTime","yAxis":{"left":{"showUnits":false,"label":"ms"}}},"metrics":[{"metricExpression":"REMOVE_EMPTY(SEARCH(\'{ContainerInsights/Prometheus,ClusterName,Namespace} ClusterName=\\"{ClusterName}\\" catalina_globalrequestprocessor_processingtime\', \'Average\', 60))","resourceType":"AWS::EKS::Cluster","metricOptions":{"id":"expr1","label":"{ClusterName}"}}]}]}]},{"id":"EKS:Namespace:Drawer","rows":[{"widgets":[{"type":"chart","properties":{"title":"CPUUtilization"},"metrics":[{"metricOptions":{"label":"CPU (avg)"},"metricTemplate":"CW::EKS::Namespace:pod_cpu_utilization"}]},{"type":"chart","properties":{"title":"MemoryUtilization"},"metrics":[{"metricOptions":{"label":"Memory (avg)"},"metricTemplate":"CW::EKS::Namespace:pod_memory_utilization"}]},{"type":"chart","properties":{"title":"Network"},"metrics":[{"metricOptions":{"yAxis":"right","label":"TX (avg)"},"metricTemplate":"CW::EKS::Namespace:pod_network_tx_bytes"},{"metricOptions":{"yAxis":"left","label":"RX (avg)"},"metricTemplate":"CW::EKS::Namespace:pod_network_rx_bytes"}]}]}]},{"id":"EKS:Namespace","name":"EKS Namespace","dependencies":[{"namespace":"ContainerInsights"}],"controls":["CW::EKS.namespace","CW::EKS.cluster"],"rows":[{"widgets":[{"type":"chart","properties":{"title":"CPUUtilization"},"metrics":[{"metricTemplate":"CW::EKS::Namespace:pod_cpu_utilization"}]},{"type":"chart","properties":{"title":"MemoryUtilization"},"metrics":[{"metricTemplate":"CW::EKS::Namespace:pod_memory_utilization"}]},{"type":"chart","properties":{"title":"Network"},"metrics":[{"metricTemplate":"CW::EKS::Namespace:pod_network_tx_bytes"},{"metricTemplate":"CW::EKS::Namespace:pod_network_rx_bytes"}]}]},{"widgets":[{"type":"chart","properties":{"title":"CPUUtilizationOverLimit"},"metrics":[{"metricTemplate":"CW::EKS::Namespace:pod_cpu_utilization_over_pod_limit"}]},{"type":"chart","properties":{"title":"MemoryUtilizationOverLimit"},"metrics":[{"metricTemplate":"CW::EKS::Namespace:pod_memory_utilization_over_pod_limit"}]},{"type":"chart","properties":{"title":"NumberOfPods"},"metrics":[{"metricTemplate":"CW::EKS::Namespace:namespace_number_of_running_pods"}]}]}]},{"id":"EKS:Nginx","name":"EKS Nginx Report","dependencies":[{"namespace":"ContainerInsights"},{"namespace":"ContainerInsights/Prometheus"}],"controls":["CW::EKS.cluster","CW::EKS.namespace","CW::EKS.service"],"rows":[{"widgets":[{"type":"chart","properties":{"title":"EKS:Nginx.RequestVolume","yAxis":{"left":{"label":"Count"}}},"metrics":[{"metricTemplate":"CW::EKS::Service:nginx_ingress_controller_requests"}]},{"type":"chart","properties":{"title":"EKS:Nginx.ControllerConnections","yAxis":{"left":{"showUnits":false,"label":"Count"}}},"metrics":[{"metricTemplate":"CW::EKS::Service:nginx_ingress_controller_nginx_process_connections"}]},{"type":"chart","properties":{"title":"EKS:Nginx.SuccessRate","yAxis":{"left":{"showUnits":false,"label":"Count"}}},"metrics":[{"metricTemplate":"CW::EKS::Service:nginx_ingress_controller_requests"}]}]},{"widgets":[{"type":"chart","properties":{"title":"EKS:Nginx.IngressRequestVolume","yAxis":{"left":{"showUnits":false,"label":"Count"}}},"metrics":[{"metricTemplate":"CW::EKS::Service:nginx_ingress_controller_nginx_process_cpu_seconds_total"}]},{"type":"chart","properties":{"title":"EKS:Nginx.AverageMemoryUsage","yAxis":{"left":{"showUnits":false,"label":"MiB"}}},"metrics":[{"metricTemplate":"CW::EKS::Service:nginx_ingress_controller_nginx_process_resident_memory_bytes"}]},{"type":"chart","properties":{"title":"EKS:Nginx.AverageCPUUsage","yAxis":{"left":{"showUnits":false,"label":"%"}}},"metrics":[{"metricTemplate":"CW::EKS::Service:nginx_ingress_controller_nginx_process_cpu_seconds_total"}]}]}]},{"id":"EKS:Node","name":"EKS Node","dependencies":[{"namespace":"ContainerInsights"}],"controls":["CW::EKS.cluster"],"rows":[{"widgets":[{"type":"chart","properties":{"title":"CPUUtilization"},"metrics":[{"metricTemplate":"CW::EKS::Node:node_cpu_utilization"}]},{"type":"chart","properties":{"title":"CPUReservedCapacity"},"metrics":[{"metricTemplate":"CW::EKS::Node:node_cpu_reserved_capacity"}]},{"type":"chart","properties":{"title":"MemoryUtilization"},"metrics":[{"metricTemplate":"CW::EKS::Node:node_memory_utilization"}]},{"type":"chart","properties":{"title":"MemoryReservedCapacity"},"metrics":[{"metricTemplate":"CW::EKS::Node:node_memory_reserved_capacity"}]}]},{"widgets":[{"type":"chart","properties":{"title":"DiskUtilization"},"metrics":[{"metricTemplate":"CW::EKS::Node:node_filesystem_utilization"}]},{"type":"chart","properties":{"title":"Network"},"metrics":[{"metricTemplate":"CW::EKS::Node:node_network_total_bytes"}]},{"type":"chart","properties":{"title":"NumberOfPods"},"metrics":[{"metricTemplate":"CW::EKS::Node:node_number_of_running_pods"}]},{"type":"chart","properties":{"title":"EKS:Nodes.NumberOfContainers"},"metrics":[{"metricTemplate":"CW::EKS::Node:node_number_of_running_containers"}]}]}]},{"id":"EKS:Pod:Drawer","rows":[{"widgets":[{"type":"chart","properties":{"title":"CPUUtilization"},"metrics":[{"metricOptions":{"label":"CPU (avg)"},"metricTemplate":"CW::EKS::Pod:pod_cpu_utilization"}]},{"type":"chart","properties":{"title":"MemoryUtilization"},"metrics":[{"metricOptions":{"label":"Memory (avg)"},"metricTemplate":"CW::EKS::Pod:pod_memory_utilization"}]},{"type":"chart","properties":{"title":"Network"},"metrics":[{"metricOptions":{"label":"TX (avg)","yAxis":"right"},"metricTemplate":"CW::EKS::Pod:pod_network_tx_bytes"},{"metricOptions":{"label":"RX (avg)","yAxis":"left"},"metricTemplate":"CW::EKS::Pod:pod_network_rx_bytes"}]}]}]},{"id":"EKS:Pod","name":"EKS Pod","dependencies":[{"namespace":"ContainerInsights"}],"controls":["CW::EKS.cluster","CW::EKS.namespace","CW::EKS.pod"],"rows":[{"widgets":[{"type":"chart","properties":{"title":"CPUUtilization"},"metrics":[{"metricTemplate":"CW::EKS::Pod:pod_cpu_utilization"}]},{"type":"chart","properties":{"title":"MemoryUtilization"},"metrics":[{"metricTemplate":"CW::EKS::Pod:pod_memory_utilization"}]},{"type":"chart","properties":{"title":"Network"},"metrics":[{"metricTemplate":"CW::EKS::Pod:pod_network_tx_bytes"},{"metricTemplate":"CW::EKS::Pod:pod_network_rx_bytes"}]}]},{"widgets":[{"type":"chart","properties":{"title":"CPUUtilizationOverLimit"},"metrics":[{"metricTemplate":"CW::EKS::Pod:pod_cpu_utilization_over_pod_limit"}]},{"type":"chart","properties":{"title":"MemoryUtilizationOverLimit"},"metrics":[{"metricTemplate":"CW::EKS::Pod:pod_memory_utilization_over_pod_limit"}]},{"type":"chart","properties":{"title":"CPUReservedCapacity"},"metrics":[{"metricTemplate":"CW::EKS::Pod:pod_cpu_reserved_capacity"}]},{"type":"chart","properties":{"title":"Network"},"metrics":[{"metricTemplate":"CW::EKS::Pod:pod_memory_reserved_capacity"}]}]}]},{"id":"EKS:Service:Drawer","rows":[{"widgets":[{"type":"chart","properties":{"title":"CPUUtilization"},"metrics":[{"metricOptions":{"label":"CPU (avg)"},"metricTemplate":"CW::EKS::Service:pod_cpu_utilization"}]},{"type":"chart","properties":{"title":"MemoryUtilization"},"metrics":[{"metricOptions":{"label":"Memory (avg)"},"metricTemplate":"CW::EKS::Service:pod_memory_utilization"}]},{"type":"chart","properties":{"title":"Network"},"metrics":[{"metricOptions":{"label":"TX (avg)","yAxis":"right"},"metricTemplate":"CW::EKS::Service:pod_network_tx_bytes"},{"metricOptions":{"label":"RX (avg)","yAxis":"left"},"metricTemplate":"CW::EKS::Service:pod_network_rx_bytes"}]}]}]},{"id":"EKS:Service","name":"EKS Service","dependencies":[{"namespace":"ContainerInsights"}],"controls":["CW::EKS.cluster","CW::EKS.namespace","CW::EKS.service"],"rows":[{"widgets":[{"type":"chart","properties":{"title":"CPUUtilization"},"metrics":[{"metricTemplate":"CW::EKS::Service:pod_cpu_utilization"}]},{"type":"chart","properties":{"title":"MemoryUtilization"},"metrics":[{"metricTemplate":"CW::EKS::Service:pod_memory_utilization"}]},{"type":"chart","properties":{"title":"Network"},"metrics":[{"metricTemplate":"CW::EKS::Service:pod_network_tx_bytes"},{"metricTemplate":"CW::EKS::Service:pod_network_rx_bytes"}]}]},{"widgets":[{"type":"chart","properties":{"title":"CPUUtilizationOverLimit"},"metrics":[{"metricTemplate":"CW::EKS::Service:pod_cpu_utilization_over_pod_limit"}]},{"type":"chart","properties":{"title":"MemoryUtilizationOverLimit"},"metrics":[{"metricTemplate":"CW::EKS::Service:pod_memory_utilization_over_pod_limit"}]},{"type":"chart","properties":{"title":"NumberOfPods"},"metrics":[{"metricTemplate":"CW::EKS::Service:service_number_of_running_pods"}]}]}]}]},{"id":"AWS::ElastiCache","dashboard":"ElastiCache","crossServiceDashboard":"ElastiCache:CrossService","resourceTypes":[{"type":"AWS::ElastiCache::CacheCluster","consoleLink":"/elasticache/home?region={region}#memcached-nodes:id={CacheClusterId};nodes","keyMetric":"AWS::ElastiCache::CacheCluster:CPUUtilization","dashboard":"ElastiCache","arnRegex":".*:cluster:(.*)","describe":"elasticache-describe-cluster"}],"controls":{"AWS::ElastiCache.cacheClusters":{"type":"resource","resourceType":"AWS::ElastiCache::CacheCluster","labelField":"CacheClusterId","valueField":"CacheClusterId"}},"metricTemplates":[{"resourceType":"AWS::ElastiCache::CacheCluster","namespace":"AWS/ElastiCache","dimensions":[{"dimensionName":"CacheClusterId","labelName":"CacheClusterId"}],"metrics":[{"id":"AWS::ElastiCache::CacheCluster:ActiveDefragHits","name":"ActiveDefragHits","defaultStat":"Sum"},{"id":"AWS::ElastiCache::CacheCluster:AuthenticationFailures","name":"AuthenticationFailures","defaultStat":"Sum"},{"id":"AWS::ElastiCache::CacheCluster:BytesReadIntoMemcached","name":"BytesReadIntoMemcached","defaultStat":"Average"},{"id":"AWS::ElastiCache::CacheCluster:BytesUsedForCache","name":"BytesUsedForCache","defaultStat":"Average"},{"id":"AWS::ElastiCache::CacheCluster:BytesUsedForCacheItems","name":"BytesUsedForCacheItems","defaultStat":"Average"},{"id":"AWS::ElastiCache::CacheCluster:BytesUsedForHash","name":"BytesUsedForHash","defaultStat":"Average"},{"id":"AWS::ElastiCache::CacheCluster:BytesWrittenOutFromMemcached","name":"BytesWrittenOutFromMemcached","defaultStat":"Average"},{"id":"AWS::ElastiCache::CacheCluster:CacheHitRate","name":"CacheHitRate","defaultStat":"Average"},{"id":"AWS::ElastiCache::CacheCluster:CacheHits","name":"CacheHits","defaultStat":"Sum"},{"id":"AWS::ElastiCache::CacheCluster:CacheMisses","name":"CacheMisses","defaultStat":"Sum"},{"id":"AWS::ElastiCache::CacheCluster:CasBadval","name":"CasBadval","defaultStat":"Sum"},{"id":"AWS::ElastiCache::CacheCluster:CasHits","name":"CasHits","defaultStat":"Sum"},{"id":"AWS::ElastiCache::CacheCluster:CasMisses","name":"CasMisses","defaultStat":"Sum"},{"id":"AWS::ElastiCache::CacheCluster:CmdConfigGet","name":"CmdConfigGet","defaultStat":"Sum"},{"id":"AWS::ElastiCache::CacheCluster:CmdConfigSet","name":"CmdConfigSet","defaultStat":"Sum"},{"id":"AWS::ElastiCache::CacheCluster:CmdFlush","name":"CmdFlush","defaultStat":"Sum"},{"id":"AWS::ElastiCache::CacheCluster:CmdGets","name":"CmdGets","defaultStat":"Sum"},{"id":"AWS::ElastiCache::CacheCluster:CmdSet","name":"CmdSet","defaultStat":"Sum"},{"id":"AWS::ElastiCache::CacheCluster:CmdTouch","name":"CmdTouch","defaultStat":"Sum"},{"id":"AWS::ElastiCache::CacheCluster:CommandAuthorizationFailures","name":"CommandAuthorizationFailures","defaultStat":"Sum"},{"id":"AWS::ElastiCache::CacheCluster:CPUCreditBalance","name":"CPUCreditBalance","defaultStat":"Average"},{"id":"AWS::ElastiCache::CacheCluster:CPUCreditUsage","name":"CPUCreditUsage","defaultStat":"Average"},{"id":"AWS::ElastiCache::CacheCluster:CPUUtilization","name":"CPUUtilization","defaultStat":"Average"},{"id":"AWS::ElastiCache::CacheCluster:CurrConfig","name":"CurrConfig","defaultStat":"Sum"},{"id":"AWS::ElastiCache::CacheCluster:CurrConnections","name":"CurrConnections","defaultStat":"Sum"},{"id":"AWS::ElastiCache::CacheCluster:CurrItems","name":"CurrItems","defaultStat":"Sum"},{"id":"AWS::ElastiCache::CacheCluster:DatabaseMemoryUsagePercentage","name":"DatabaseMemoryUsagePercentage","defaultStat":"Average"},{"id":"AWS::ElastiCache::CacheCluster:DB0AverageTTL","name":"DB0AverageTTL","defaultStat":"Average"},{"id":"AWS::ElastiCache::CacheCluster:DecrHits","name":"DecrHits","defaultStat":"Sum"},{"id":"AWS::ElastiCache::CacheCluster:DecrMisses","name":"DecrMisses","defaultStat":"Sum"},{"id":"AWS::ElastiCache::CacheCluster:DeleteHits","name":"DeleteHits","defaultStat":"Sum"},{"id":"AWS::ElastiCache::CacheCluster:DeleteMisses","name":"DeleteMisses","defaultStat":"Sum"},{"id":"AWS::ElastiCache::CacheCluster:EngineCPUUtilization","name":"EngineCPUUtilization","defaultStat":"Average"},{"id":"AWS::ElastiCache::CacheCluster:EvalBasedCmds","name":"EvalBasedCmds","defaultStat":"Sum"},{"id":"AWS::ElastiCache::CacheCluster:EvalBasedCmdsLatency","name":"EvalBasedCmdsLatency","defaultStat":"Average"},{"id":"AWS::ElastiCache::CacheCluster:EvictedUnfetched","name":"EvictedUnfetched","defaultStat":"Sum"},{"id":"AWS::ElastiCache::CacheCluster:Evictions","name":"Evictions","defaultStat":"Sum"},{"id":"AWS::ElastiCache::CacheCluster:ExpiredUnfetched","name":"ExpiredUnfetched","defaultStat":"Sum"},{"id":"AWS::ElastiCache::CacheCluster:FreeableMemory","name":"FreeableMemory","defaultStat":"Average"},{"id":"AWS::ElastiCache::CacheCluster:GeoSpatialBasedCmds","name":"GeoSpatialBasedCmds","defaultStat":"Sum"},{"id":"AWS::ElastiCache::CacheCluster:GeoSpatialBasedCmdsLatency","name":"GeoSpatialBasedCmdsLatency","defaultStat":"Average"},{"id":"AWS::ElastiCache::CacheCluster:GetHits","name":"GetHits","defaultStat":"Sum"},{"id":"AWS::ElastiCache::CacheCluster:GetMisses","name":"GetMisses","defaultStat":"Sum"},{"id":"AWS::ElastiCache::CacheCluster:GetTypeCmds","name":"GetTypeCmds","defaultStat":"Sum"},{"id":"AWS::ElastiCache::CacheCluster:GetTypeCmdsLatency","name":"GetTypeCmdsLatency","defaultStat":"Average"},{"id":"AWS::ElastiCache::CacheCluster:GlobalDatastoreReplicationLag","name":"GlobalDatastoreReplicationLag","defaultStat":"Average"},{"id":"AWS::ElastiCache::CacheCluster:HashBasedCmds","name":"HashBasedCmds","defaultStat":"Sum"},{"id":"AWS::ElastiCache::CacheCluster:HashBasedCmdsLatency","name":"HashBasedCmdsLatency","defaultStat":"Average"},{"id":"AWS::ElastiCache::CacheCluster:HyperLogLogBasedCmds","name":"HyperLogLogBasedCmds","defaultStat":"Sum"},{"id":"AWS::ElastiCache::CacheCluster:HyperLogLogBasedCmdsLatency","name":"HyperLogLogBasedCmdsLatency","defaultStat":"Average"},{"id":"AWS::ElastiCache::CacheCluster:IncrHits","name":"IncrHits","defaultStat":"Sum"},{"id":"AWS::ElastiCache::CacheCluster:IncrMisses","name":"IncrMisses","defaultStat":"Sum"},{"id":"AWS::ElastiCache::CacheCluster:IsMaster","name":"IsMaster","defaultStat":"Average"},{"id":"AWS::ElastiCache::CacheCluster:KeyAuthorizationFailures","name":"KeyAuthorizationFailures","defaultStat":"Sum"},{"id":"AWS::ElastiCache::CacheCluster:KeyBasedCmds","name":"KeyBasedCmds","defaultStat":"Sum"},{"id":"AWS::ElastiCache::CacheCluster:KeyBasedCmdsLatency","name":"KeyBasedCmdsLatency","defaultStat":"Average"},{"id":"AWS::ElastiCache::CacheCluster:KeysTracked","name":"KeysTracked","defaultStat":"Sum"},{"id":"AWS::ElastiCache::CacheCluster:ListBasedCmds","name":"ListBasedCmds","defaultStat":"Sum"},{"id":"AWS::ElastiCache::CacheCluster:ListBasedCmdsLatency","name":"ListBasedCmdsLatency","defaultStat":"Average"},{"id":"AWS::ElastiCache::CacheCluster:MasterLinkHealthStatus","name":"MasterLinkHealthStatus","defaultStat":"Average"},{"id":"AWS::ElastiCache::CacheCluster:MemoryFragmentationRatio","name":"MemoryFragmentationRatio","defaultStat":"Average"},{"id":"AWS::ElastiCache::CacheCluster:NetworkBytesIn","name":"NetworkBytesIn","defaultStat":"Average"},{"id":"AWS::ElastiCache::CacheCluster:NetworkBytesOut","name":"NetworkBytesOut","defaultStat":"Average"},{"id":"AWS::ElastiCache::CacheCluster:NetworkPacketsIn","name":"NetworkPacketsIn","defaultStat":"Average"},{"id":"AWS::ElastiCache::CacheCluster:NetworkPacketsOut","name":"NetworkPacketsOut","defaultStat":"Average"},{"id":"AWS::ElastiCache::CacheCluster:NewConnections","name":"NewConnections","defaultStat":"Sum"},{"id":"AWS::ElastiCache::CacheCluster:NewItems","name":"NewItems","defaultStat":"Sum"},{"id":"AWS::ElastiCache::CacheCluster:PubSubBasedCmds","name":"PubSubBasedCmds","defaultStat":"Sum"},{"id":"AWS::ElastiCache::CacheCluster:PubSubBasedCmdsLatency","name":"PubSubBasedCmdsLatency","defaultStat":"Average"},{"id":"AWS::ElastiCache::CacheCluster:Reclaimed","name":"Reclaimed","defaultStat":"Sum"},{"id":"AWS::ElastiCache::CacheCluster:ReplicationBytes","name":"ReplicationBytes","defaultStat":"Sum"},{"id":"AWS::ElastiCache::CacheCluster:ReplicationLag","name":"ReplicationLag","defaultStat":"Average"},{"id":"AWS::ElastiCache::CacheCluster:SaveInProgress","name":"SaveInProgress","defaultStat":"Sum"},{"id":"AWS::ElastiCache::CacheCluster:SetBasedCmds","name":"SetBasedCmds","defaultStat":"Sum"},{"id":"AWS::ElastiCache::CacheCluster:SetBasedCmdsLatency","name":"SetBasedCmdsLatency","defaultStat":"Average"},{"id":"AWS::ElastiCache::CacheCluster:SetTypeCmds","name":"SetTypeCmds","defaultStat":"Sum"},{"id":"AWS::ElastiCache::CacheCluster:SetTypeCmdsLatency","name":"SetTypeCmdsLatency","defaultStat":"Average"},{"id":"AWS::ElastiCache::CacheCluster:SlabsMoved","name":"SlabsMoved","defaultStat":"Sum"},{"id":"AWS::ElastiCache::CacheCluster:SortedSetBasedCmds","name":"SortedSetBasedCmds","defaultStat":"Sum"},{"id":"AWS::ElastiCache::CacheCluster:SortedSetBasedCmdsLatency","name":"SortedSetBasedCmdsLatency","defaultStat":"Average"},{"id":"AWS::ElastiCache::CacheCluster:StreamBasedCmds","name":"StreamBasedCmds","defaultStat":"Sum"},{"id":"AWS::ElastiCache::CacheCluster:StreamBasedCmdsLatency","name":"StreamBasedCmdsLatency","defaultStat":"Average"},{"id":"AWS::ElastiCache::CacheCluster:StringBasedCmds","name":"StringBasedCmds","defaultStat":"Sum"},{"id":"AWS::ElastiCache::CacheCluster:StringBasedCmdsLatency","name":"StringBasedCmdsLatency","defaultStat":"Average"},{"id":"AWS::ElastiCache::CacheCluster:SwapUsage","name":"SwapUsage","defaultStat":"Average"},{"id":"AWS::ElastiCache::CacheCluster:TouchHits","name":"TouchHits","defaultStat":"Sum"},{"id":"AWS::ElastiCache::CacheCluster:TouchMisses","name":"TouchMisses","defaultStat":"Sum"},{"id":"AWS::ElastiCache::CacheCluster:UnusedMemory","name":"UnusedMemory","defaultStat":"Average"}]},{"resourceType":"AWS::ElastiCache::CacheCluster","id":"AWS::ElastiCache::CacheCluster:CacheNodeId","namespace":"AWS/ElastiCache","dimensions":[{"dimensionName":"CacheClusterId","labelName":"CacheClusterId"},{"dimensionName":"CacheNodeId","labelName":"CacheNodeId"}],"metrics":[{"id":"AWS::ElastiCache::CacheCluster:CacheNodeId:ActiveDefragHits","name":"ActiveDefragHits","defaultStat":"Sum"},{"id":"AWS::ElastiCache::CacheCluster:CacheNodeId:AuthenticationFailures","name":"AuthenticationFailures","defaultStat":"Sum"},{"id":"AWS::ElastiCache::CacheCluster:CacheNodeId:BytesReadIntoMemcached","name":"BytesReadIntoMemcached","defaultStat":"Average"},{"id":"AWS::ElastiCache::CacheCluster:CacheNodeId:BytesUsedForCache","name":"BytesUsedForCache","defaultStat":"Average"},{"id":"AWS::ElastiCache::CacheCluster:CacheNodeId:BytesUsedForCacheItems","name":"BytesUsedForCacheItems","defaultStat":"Average"},{"id":"AWS::ElastiCache::CacheCluster:CacheNodeId:BytesUsedForHash","name":"BytesUsedForHash","defaultStat":"Average"},{"id":"AWS::ElastiCache::CacheCluster:CacheNodeId:BytesWrittenOutFromMemcached","name":"BytesWrittenOutFromMemcached","defaultStat":"Average"},{"id":"AWS::ElastiCache::CacheCluster:CacheNodeId:CacheHitRate","name":"CacheHitRate","defaultStat":"Average"},{"id":"AWS::ElastiCache::CacheCluster:CacheNodeId:CacheHits","name":"CacheHits","defaultStat":"Sum"},{"id":"AWS::ElastiCache::CacheCluster:CacheNodeId:CacheMisses","name":"CacheMisses","defaultStat":"Sum"},{"id":"AWS::ElastiCache::CacheCluster:CacheNodeId:CasBadval","name":"CasBadval","defaultStat":"Sum"},{"id":"AWS::ElastiCache::CacheCluster:CacheNodeId:CasHits","name":"CasHits","defaultStat":"Sum"},{"id":"AWS::ElastiCache::CacheCluster:CacheNodeId:CasMisses","name":"CasMisses","defaultStat":"Sum"},{"id":"AWS::ElastiCache::CacheCluster:CacheNodeId:CmdConfigGet","name":"CmdConfigGet","defaultStat":"Sum"},{"id":"AWS::ElastiCache::CacheCluster:CacheNodeId:CmdConfigSet","name":"CmdConfigSet","defaultStat":"Sum"},{"id":"AWS::ElastiCache::CacheCluster:CacheNodeId:CmdFlush","name":"CmdFlush","defaultStat":"Sum"},{"id":"AWS::ElastiCache::CacheCluster:CacheNodeId:CmdGets","name":"CmdGets","defaultStat":"Sum"},{"id":"AWS::ElastiCache::CacheCluster:CacheNodeId:CmdSet","name":"CmdSet","defaultStat":"Sum"},{"id":"AWS::ElastiCache::CacheCluster:CacheNodeId:CmdTouch","name":"CmdTouch","defaultStat":"Sum"},{"id":"AWS::ElastiCache::CacheCluster:CacheNodeId:CommandAuthorizationFailures","name":"CommandAuthorizationFailures","defaultStat":"Sum"},{"id":"AWS::ElastiCache::CacheCluster:CacheNodeId:CPUCreditBalance","name":"CPUCreditBalance","defaultStat":"Average"},{"id":"AWS::ElastiCache::CacheCluster:CacheNodeId:CPUCreditUsage","name":"CPUCreditUsage","defaultStat":"Average"},{"id":"AWS::ElastiCache::CacheCluster:CacheNodeId:CPUUtilization","name":"CPUUtilization","defaultStat":"Average"},{"id":"AWS::ElastiCache::CacheCluster:CacheNodeId:CurrConfig","name":"CurrConfig","defaultStat":"Sum"},{"id":"AWS::ElastiCache::CacheCluster:CacheNodeId:CurrConnections","name":"CurrConnections","defaultStat":"Sum"},{"id":"AWS::ElastiCache::CacheCluster:CacheNodeId:CurrItems","name":"CurrItems","defaultStat":"Sum"},{"id":"AWS::ElastiCache::CacheCluster:CacheNodeId:DatabaseMemoryUsagePercentage","name":"DatabaseMemoryUsagePercentage","defaultStat":"Average"},{"id":"AWS::ElastiCache::CacheCluster:CacheNodeId:DB0AverageTTL","name":"DB0AverageTTL","defaultStat":"Average"},{"id":"AWS::ElastiCache::CacheCluster:CacheNodeId:DecrHits","name":"DecrHits","defaultStat":"Sum"},{"id":"AWS::ElastiCache::CacheCluster:CacheNodeId:DecrMisses","name":"DecrMisses","defaultStat":"Sum"},{"id":"AWS::ElastiCache::CacheCluster:CacheNodeId:DeleteHits","name":"DeleteHits","defaultStat":"Sum"},{"id":"AWS::ElastiCache::CacheCluster:CacheNodeId:DeleteMisses","name":"DeleteMisses","defaultStat":"Sum"},{"id":"AWS::ElastiCache::CacheCluster:CacheNodeId:EngineCPUUtilization","name":"EngineCPUUtilization","defaultStat":"Average"},{"id":"AWS::ElastiCache::CacheCluster:CacheNodeId:EvalBasedCmds","name":"EvalBasedCmds","defaultStat":"Sum"},{"id":"AWS::ElastiCache::CacheCluster:CacheNodeId:EvalBasedCmdsLatency","name":"EvalBasedCmdsLatency","defaultStat":"Average"},{"id":"AWS::ElastiCache::CacheCluster:CacheNodeId:EvictedUnfetched","name":"EvictedUnfetched","defaultStat":"Sum"},{"id":"AWS::ElastiCache::CacheCluster:CacheNodeId:Evictions","name":"Evictions","defaultStat":"Sum"},{"id":"AWS::ElastiCache::CacheCluster:CacheNodeId:ExpiredUnfetched","name":"ExpiredUnfetched","defaultStat":"Sum"},{"id":"AWS::ElastiCache::CacheCluster:CacheNodeId:FreeableMemory","name":"FreeableMemory","defaultStat":"Average"},{"id":"AWS::ElastiCache::CacheCluster:CacheNodeId:GeoSpatialBasedCmds","name":"GeoSpatialBasedCmds","defaultStat":"Sum"},{"id":"AWS::ElastiCache::CacheCluster:CacheNodeId:GeoSpatialBasedCmdsLatency","name":"GeoSpatialBasedCmdsLatency","defaultStat":"Average"},{"id":"AWS::ElastiCache::CacheCluster:CacheNodeId:GetHits","name":"GetHits","defaultStat":"Sum"},{"id":"AWS::ElastiCache::CacheCluster:CacheNodeId:GetMisses","name":"GetMisses","defaultStat":"Sum"},{"id":"AWS::ElastiCache::CacheCluster:CacheNodeId:GetTypeCmds","name":"GetTypeCmds","defaultStat":"Sum"},{"id":"AWS::ElastiCache::CacheCluster:CacheNodeId:GetTypeCmdsLatency","name":"GetTypeCmdsLatency","defaultStat":"Average"},{"id":"AWS::ElastiCache::CacheCluster:CacheNodeId:GlobalDatastoreReplicationLag","name":"GlobalDatastoreReplicationLag","defaultStat":"Average"},{"id":"AWS::ElastiCache::CacheCluster:CacheNodeId:HashBasedCmds","name":"HashBasedCmds","defaultStat":"Sum"},{"id":"AWS::ElastiCache::CacheCluster:CacheNodeId:HashBasedCmdsLatency","name":"HashBasedCmdsLatency","defaultStat":"Average"},{"id":"AWS::ElastiCache::CacheCluster:CacheNodeId:HyperLogLogBasedCmds","name":"HyperLogLogBasedCmds","defaultStat":"Sum"},{"id":"AWS::ElastiCache::CacheCluster:CacheNodeId:HyperLogLogBasedCmdsLatency","name":"HyperLogLogBasedCmdsLatency","defaultStat":"Average"},{"id":"AWS::ElastiCache::CacheCluster:CacheNodeId:IncrHits","name":"IncrHits","defaultStat":"Sum"},{"id":"AWS::ElastiCache::CacheCluster:CacheNodeId:IncrMisses","name":"IncrMisses","defaultStat":"Sum"},{"id":"AWS::ElastiCache::CacheCluster:CacheNodeId:IsMaster","name":"IsMaster","defaultStat":"Average"},{"id":"AWS::ElastiCache::CacheCluster:CacheNodeId:KeyAuthorizationFailures","name":"KeyAuthorizationFailures","defaultStat":"Sum"},{"id":"AWS::ElastiCache::CacheCluster:CacheNodeId:KeyBasedCmds","name":"KeyBasedCmds","defaultStat":"Sum"},{"id":"AWS::ElastiCache::CacheCluster:CacheNodeId:KeyBasedCmdsLatency","name":"KeyBasedCmdsLatency","defaultStat":"Average"},{"id":"AWS::ElastiCache::CacheCluster:CacheNodeId:KeysTracked","name":"KeysTracked","defaultStat":"Sum"},{"id":"AWS::ElastiCache::CacheCluster:CacheNodeId:ListBasedCmds","name":"ListBasedCmds","defaultStat":"Sum"},{"id":"AWS::ElastiCache::CacheCluster:CacheNodeId:ListBasedCmdsLatency","name":"ListBasedCmdsLatency","defaultStat":"Average"},{"id":"AWS::ElastiCache::CacheCluster:CacheNodeId:MasterLinkHealthStatus","name":"MasterLinkHealthStatus","defaultStat":"Average"},{"id":"AWS::ElastiCache::CacheCluster:CacheNodeId:MemoryFragmentationRatio","name":"MemoryFragmentationRatio","defaultStat":"Average"},{"id":"AWS::ElastiCache::CacheCluster:CacheNodeId:NetworkBytesIn","name":"NetworkBytesIn","defaultStat":"Average"},{"id":"AWS::ElastiCache::CacheCluster:CacheNodeId:NetworkBytesOut","name":"NetworkBytesOut","defaultStat":"Average"},{"id":"AWS::ElastiCache::CacheCluster:CacheNodeId:NetworkPacketsIn","name":"NetworkPacketsIn","defaultStat":"Average"},{"id":"AWS::ElastiCache::CacheCluster:CacheNodeId:NetworkPacketsOut","name":"NetworkPacketsOut","defaultStat":"Average"},{"id":"AWS::ElastiCache::CacheCluster:CacheNodeId:NewConnections","name":"NewConnections","defaultStat":"Sum"},{"id":"AWS::ElastiCache::CacheCluster:CacheNodeId:NewItems","name":"NewItems","defaultStat":"Sum"},{"id":"AWS::ElastiCache::CacheCluster:CacheNodeId:PubSubBasedCmds","name":"PubSubBasedCmds","defaultStat":"Sum"},{"id":"AWS::ElastiCache::CacheCluster:CacheNodeId:PubSubBasedCmdsLatency","name":"PubSubBasedCmdsLatency","defaultStat":"Average"},{"id":"AWS::ElastiCache::CacheCluster:CacheNodeId:Reclaimed","name":"Reclaimed","defaultStat":"Sum"},{"id":"AWS::ElastiCache::CacheCluster:CacheNodeId:ReplicationBytes","name":"ReplicationBytes","defaultStat":"Sum"},{"id":"AWS::ElastiCache::CacheCluster:CacheNodeId:ReplicationLag","name":"ReplicationLag","defaultStat":"Average"},{"id":"AWS::ElastiCache::CacheCluster:CacheNodeId:SaveInProgress","name":"SaveInProgress","defaultStat":"Sum"},{"id":"AWS::ElastiCache::CacheCluster:CacheNodeId:SetBasedCmds","name":"SetBasedCmds","defaultStat":"Sum"},{"id":"AWS::ElastiCache::CacheCluster:CacheNodeId:SetBasedCmdsLatency","name":"SetBasedCmdsLatency","defaultStat":"Average"},{"id":"AWS::ElastiCache::CacheCluster:CacheNodeId:SetTypeCmds","name":"SetTypeCmds","defaultStat":"Sum"},{"id":"AWS::ElastiCache::CacheCluster:CacheNodeId:SetTypeCmdsLatency","name":"SetTypeCmdsLatency","defaultStat":"Average"},{"id":"AWS::ElastiCache::CacheCluster:CacheNodeId:SlabsMoved","name":"SlabsMoved","defaultStat":"Sum"},{"id":"AWS::ElastiCache::CacheCluster:CacheNodeId:SortedSetBasedCmds","name":"SortedSetBasedCmds","defaultStat":"Sum"},{"id":"AWS::ElastiCache::CacheCluster:CacheNodeId:SortedSetBasedCmdsLatency","name":"SortedSetBasedCmdsLatency","defaultStat":"Average"},{"id":"AWS::ElastiCache::CacheCluster:CacheNodeId:StreamBasedCmds","name":"StreamBasedCmds","defaultStat":"Sum"},{"id":"AWS::ElastiCache::CacheCluster:CacheNodeId:StreamBasedCmdsLatency","name":"StreamBasedCmdsLatency","defaultStat":"Average"},{"id":"AWS::ElastiCache::CacheCluster:CacheNodeId:StringBasedCmds","name":"StringBasedCmds","defaultStat":"Sum"},{"id":"AWS::ElastiCache::CacheCluster:CacheNodeId:StringBasedCmdsLatency","name":"StringBasedCmdsLatency","defaultStat":"Average"},{"id":"AWS::ElastiCache::CacheCluster:CacheNodeId:SwapUsage","name":"SwapUsage","defaultStat":"Average"},{"id":"AWS::ElastiCache::CacheCluster:CacheNodeId:TouchHits","name":"TouchHits","defaultStat":"Sum"},{"id":"AWS::ElastiCache::CacheCluster:CacheNodeId:TouchMisses","name":"TouchMisses","defaultStat":"Sum"},{"id":"AWS::ElastiCache::CacheCluster:CacheNodeId:UnusedMemory","name":"UnusedMemory","defaultStat":"Average"}]},{"resourceType":"AWS::ElastiCache::CacheCluster","id":"AWS::ElastiCache::AcrossClusters","namespace":"AWS/ElastiCache","dimensions":[],"metrics":[{"id":"AWS::ElastiCache::AcrossClusters:ActiveDefragHits","name":"ActiveDefragHits","defaultStat":"Sum"},{"id":"AWS::ElastiCache::AcrossClusters:AuthenticationFailures","name":"AuthenticationFailures","defaultStat":"Sum"},{"id":"AWS::ElastiCache::AcrossClusters:BytesReadIntoMemcached","name":"BytesReadIntoMemcached","defaultStat":"Average"},{"id":"AWS::ElastiCache::AcrossClusters:BytesUsedForCache","name":"BytesUsedForCache","defaultStat":"Average"},{"id":"AWS::ElastiCache::AcrossClusters:BytesUsedForCacheItems","name":"BytesUsedForCacheItems","defaultStat":"Average"},{"id":"AWS::ElastiCache::AcrossClusters:BytesUsedForHash","name":"BytesUsedForHash","defaultStat":"Average"},{"id":"AWS::ElastiCache::AcrossClusters:BytesWrittenOutFromMemcached","name":"BytesWrittenOutFromMemcached","defaultStat":"Average"},{"id":"AWS::ElastiCache::AcrossClusters:CacheHitRate","name":"CacheHitRate","defaultStat":"Average"},{"id":"AWS::ElastiCache::AcrossClusters:CacheHits","name":"CacheHits","defaultStat":"Sum"},{"id":"AWS::ElastiCache::AcrossClusters:CacheMisses","name":"CacheMisses","defaultStat":"Sum"},{"id":"AWS::ElastiCache::AcrossClusters:CasBadval","name":"CasBadval","defaultStat":"Sum"},{"id":"AWS::ElastiCache::AcrossClusters:CasHits","name":"CasHits","defaultStat":"Sum"},{"id":"AWS::ElastiCache::AcrossClusters:CasMisses","name":"CasMisses","defaultStat":"Sum"},{"id":"AWS::ElastiCache::AcrossClusters:CmdConfigGet","name":"CmdConfigGet","defaultStat":"Sum"},{"id":"AWS::ElastiCache::AcrossClusters:CmdConfigSet","name":"CmdConfigSet","defaultStat":"Sum"},{"id":"AWS::ElastiCache::AcrossClusters:CmdFlush","name":"CmdFlush","defaultStat":"Sum"},{"id":"AWS::ElastiCache::AcrossClusters:CmdGets","name":"CmdGets","defaultStat":"Sum"},{"id":"AWS::ElastiCache::AcrossClusters:CmdSet","name":"CmdSet","defaultStat":"Sum"},{"id":"AWS::ElastiCache::AcrossClusters:CmdTouch","name":"CmdTouch","defaultStat":"Sum"},{"id":"AWS::ElastiCache::AcrossClusters:CommandAuthorizationFailures","name":"CommandAuthorizationFailures","defaultStat":"Sum"},{"id":"AWS::ElastiCache::AcrossClusters:CPUCreditBalance","name":"CPUCreditBalance","defaultStat":"Average"},{"id":"AWS::ElastiCache::AcrossClusters:CPUCreditUsage","name":"CPUCreditUsage","defaultStat":"Average"},{"id":"AWS::ElastiCache::AcrossClusters:CPUUtilization","name":"CPUUtilization","defaultStat":"Average"},{"id":"AWS::ElastiCache::AcrossClusters:CurrConfig","name":"CurrConfig","defaultStat":"Sum"},{"id":"AWS::ElastiCache::AcrossClusters:CurrConnections","name":"CurrConnections","defaultStat":"Sum"},{"id":"AWS::ElastiCache::AcrossClusters:CurrItems","name":"CurrItems","defaultStat":"Sum"},{"id":"AWS::ElastiCache::AcrossClusters:DatabaseMemoryUsagePercentage","name":"DatabaseMemoryUsagePercentage","defaultStat":"Average"},{"id":"AWS::ElastiCache::AcrossClusters:DB0AverageTTL","name":"DB0AverageTTL","defaultStat":"Average"},{"id":"AWS::ElastiCache::AcrossClusters:DecrHits","name":"DecrHits","defaultStat":"Sum"},{"id":"AWS::ElastiCache::AcrossClusters:DecrMisses","name":"DecrMisses","defaultStat":"Sum"},{"id":"AWS::ElastiCache::AcrossClusters:DeleteHits","name":"DeleteHits","defaultStat":"Sum"},{"id":"AWS::ElastiCache::AcrossClusters:DeleteMisses","name":"DeleteMisses","defaultStat":"Sum"},{"id":"AWS::ElastiCache::AcrossClusters:EngineCPUUtilization","name":"EngineCPUUtilization","defaultStat":"Average"},{"id":"AWS::ElastiCache::AcrossClusters:EvalBasedCmds","name":"EvalBasedCmds","defaultStat":"Sum"},{"id":"AWS::ElastiCache::AcrossClusters:EvalBasedCmdsLatency","name":"EvalBasedCmdsLatency","defaultStat":"Average"},{"id":"AWS::ElastiCache::AcrossClusters:EvictedUnfetched","name":"EvictedUnfetched","defaultStat":"Sum"},{"id":"AWS::ElastiCache::AcrossClusters:Evictions","name":"Evictions","defaultStat":"Sum"},{"id":"AWS::ElastiCache::AcrossClusters:ExpiredUnfetched","name":"ExpiredUnfetched","defaultStat":"Sum"},{"id":"AWS::ElastiCache::AcrossClusters:FreeableMemory","name":"FreeableMemory","defaultStat":"Average"},{"id":"AWS::ElastiCache::AcrossClusters:GeoSpatialBasedCmds","name":"GeoSpatialBasedCmds","defaultStat":"Sum"},{"id":"AWS::ElastiCache::AcrossClusters:GeoSpatialBasedCmdsLatency","name":"GeoSpatialBasedCmdsLatency","defaultStat":"Average"},{"id":"AWS::ElastiCache::AcrossClusters:GetHits","name":"GetHits","defaultStat":"Sum"},{"id":"AWS::ElastiCache::AcrossClusters:GetMisses","name":"GetMisses","defaultStat":"Sum"},{"id":"AWS::ElastiCache::AcrossClusters:GetTypeCmds","name":"GetTypeCmds","defaultStat":"Sum"},{"id":"AWS::ElastiCache::AcrossClusters:GetTypeCmdsLatency","name":"GetTypeCmdsLatency","defaultStat":"Average"},{"id":"AWS::ElastiCache::AcrossClusters:GlobalDatastoreReplicationLag","name":"GlobalDatastoreReplicationLag","defaultStat":"Average"},{"id":"AWS::ElastiCache::AcrossClusters:HashBasedCmds","name":"HashBasedCmds","defaultStat":"Sum"},{"id":"AWS::ElastiCache::AcrossClusters:HashBasedCmdsLatency","name":"HashBasedCmdsLatency","defaultStat":"Average"},{"id":"AWS::ElastiCache::AcrossClusters:HyperLogLogBasedCmds","name":"HyperLogLogBasedCmds","defaultStat":"Sum"},{"id":"AWS::ElastiCache::AcrossClusters:HyperLogLogBasedCmdsLatency","name":"HyperLogLogBasedCmdsLatency","defaultStat":"Average"},{"id":"AWS::ElastiCache::AcrossClusters:IncrHits","name":"IncrHits","defaultStat":"Sum"},{"id":"AWS::ElastiCache::AcrossClusters:IncrMisses","name":"IncrMisses","defaultStat":"Sum"},{"id":"AWS::ElastiCache::AcrossClusters:IsMaster","name":"IsMaster","defaultStat":"Average"},{"id":"AWS::ElastiCache::AcrossClusters:KeyAuthorizationFailures","name":"KeyAuthorizationFailures","defaultStat":"Sum"},{"id":"AWS::ElastiCache::AcrossClusters:KeyBasedCmds","name":"KeyBasedCmds","defaultStat":"Sum"},{"id":"AWS::ElastiCache::AcrossClusters:KeyBasedCmdsLatency","name":"KeyBasedCmdsLatency","defaultStat":"Average"},{"id":"AWS::ElastiCache::AcrossClusters:KeysTracked","name":"KeysTracked","defaultStat":"Sum"},{"id":"AWS::ElastiCache::AcrossClusters:ListBasedCmds","name":"ListBasedCmds","defaultStat":"Sum"},{"id":"AWS::ElastiCache::AcrossClusters:ListBasedCmdsLatency","name":"ListBasedCmdsLatency","defaultStat":"Average"},{"id":"AWS::ElastiCache::AcrossClusters:MasterLinkHealthStatus","name":"MasterLinkHealthStatus","defaultStat":"Average"},{"id":"AWS::ElastiCache::AcrossClusters:MemoryFragmentationRatio","name":"MemoryFragmentationRatio","defaultStat":"Average"},{"id":"AWS::ElastiCache::AcrossClusters:NetworkBytesIn","name":"NetworkBytesIn","defaultStat":"Average"},{"id":"AWS::ElastiCache::AcrossClusters:NetworkBytesOut","name":"NetworkBytesOut","defaultStat":"Average"},{"id":"AWS::ElastiCache::AcrossClusters:NetworkPacketsIn","name":"NetworkPacketsIn","defaultStat":"Average"},{"id":"AWS::ElastiCache::AcrossClusters:NetworkPacketsOut","name":"NetworkPacketsOut","defaultStat":"Average"},{"id":"AWS::ElastiCache::AcrossClusters:NewConnections","name":"NewConnections","defaultStat":"Sum"},{"id":"AWS::ElastiCache::AcrossClusters:NewItems","name":"NewItems","defaultStat":"Sum"},{"id":"AWS::ElastiCache::AcrossClusters:PubSubBasedCmds","name":"PubSubBasedCmds","defaultStat":"Sum"},{"id":"AWS::ElastiCache::AcrossClusters:PubSubBasedCmdsLatency","name":"PubSubBasedCmdsLatency","defaultStat":"Average"},{"id":"AWS::ElastiCache::AcrossClusters:Reclaimed","name":"Reclaimed","defaultStat":"Sum"},{"id":"AWS::ElastiCache::AcrossClusters:ReplicationBytes","name":"ReplicationBytes","defaultStat":"Sum"},{"id":"AWS::ElastiCache::AcrossClusters:ReplicationLag","name":"ReplicationLag","defaultStat":"Average"},{"id":"AWS::ElastiCache::AcrossClusters:SaveInProgress","name":"SaveInProgress","defaultStat":"Sum"},{"id":"AWS::ElastiCache::AcrossClusters:SetBasedCmds","name":"SetBasedCmds","defaultStat":"Sum"},{"id":"AWS::ElastiCache::AcrossClusters:SetBasedCmdsLatency","name":"SetBasedCmdsLatency","defaultStat":"Average"},{"id":"AWS::ElastiCache::AcrossClusters:SetTypeCmds","name":"SetTypeCmds","defaultStat":"Sum"},{"id":"AWS::ElastiCache::AcrossClusters:SetTypeCmdsLatency","name":"SetTypeCmdsLatency","defaultStat":"Average"},{"id":"AWS::ElastiCache::AcrossClusters:SlabsMoved","name":"SlabsMoved","defaultStat":"Sum"},{"id":"AWS::ElastiCache::AcrossClusters:SortedSetBasedCmds","name":"SortedSetBasedCmds","defaultStat":"Sum"},{"id":"AWS::ElastiCache::AcrossClusters:SortedSetBasedCmdsLatency","name":"SortedSetBasedCmdsLatency","defaultStat":"Average"},{"id":"AWS::ElastiCache::AcrossClusters:StreamBasedCmds","name":"StreamBasedCmds","defaultStat":"Sum"},{"id":"AWS::ElastiCache::AcrossClusters:StreamBasedCmdsLatency","name":"StreamBasedCmdsLatency","defaultStat":"Average"},{"id":"AWS::ElastiCache::AcrossClusters:StringBasedCmds","name":"StringBasedCmds","defaultStat":"Sum"},{"id":"AWS::ElastiCache::AcrossClusters:StringBasedCmdsLatency","name":"StringBasedCmdsLatency","defaultStat":"Average"},{"id":"AWS::ElastiCache::AcrossClusters:SwapUsage","name":"SwapUsage","defaultStat":"Average"},{"id":"AWS::ElastiCache::AcrossClusters:TouchHits","name":"TouchHits","defaultStat":"Sum"},{"id":"AWS::ElastiCache::AcrossClusters:TouchMisses","name":"TouchMisses","defaultStat":"Sum"},{"id":"AWS::ElastiCache::AcrossClusters:UnusedMemory","name":"UnusedMemory","defaultStat":"Average"}]}],"dashboards":[{"id":"ElastiCache:CrossService","name":"ElastiCache","dependencies":[{"namespace":"AWS/ElastiCache"}],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::ElastiCache::CacheCluster:CPUUtilization"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::ElastiCache::CacheCluster:Evictions"}]}]}]},{"id":"ElastiCache","name":"ElastiCache","dependencies":[{"namespace":"AWS/ElastiCache"}],"controls":["Shared::View.AlarmState","Shared::Group.ResourceGroup","AWS::ElastiCache.cacheClusters"],"tables":[{"resourceType":"AWS::ElastiCache::CacheCluster","columns":["CacheClusterId","NumCacheNodes","CacheNodeType","PreferredAvailabilityZone","ConfigurationEndpoint","CacheClusterStatus"]}],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::ElastiCache::CacheCluster:CPUUtilization"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::ElastiCache::CacheCluster:FreeableMemory"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::ElastiCache::CacheCluster:SwapUsage"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::ElastiCache::CacheCluster:NetworkBytesIn"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::ElastiCache::CacheCluster:NetworkBytesOut"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::ElastiCache::CacheCluster:CurrConnections"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::ElastiCache::CacheCluster:Evictions"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::ElastiCache::CacheCluster:Reclaimed"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::ElastiCache::CacheCluster:CacheHits"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::ElastiCache::CacheCluster:CacheMisses"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::ElastiCache::CacheCluster:ReplicationBytes"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::ElastiCache::CacheCluster:ReplicationLag"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::ElastiCache::CacheCluster:BytesUsedForCache"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::ElastiCache::CacheCluster:CurrItems"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::ElastiCache::CacheCluster:CasHits"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::ElastiCache::CacheCluster:CasMisses"}]}]}]}]},{"id":"AWS::ElasticBeanstalk","dashboard":"ElasticBeanstalk","crossServiceDashboard":"ElasticBeanstalk:CrossService","resourceTypes":[{"type":"AWS::ElasticBeanstalk::Environment","keyMetric":"AWS::ElasticBeanstalk::Environment:EnvironmentHealth","dashboard":"ElasticBeanstalk","arnRegex":".*:environment/.*/(.*)","consoleLink":"/elasticbeanstalk/home?region={region}#/environment/dashboard?environmentId={EnvironmentId}","describe":"elasticbeanstalk-describe-environments"}],"controls":{"AWS::ElasticBeanstalk.environments":{"type":"resource","resourceType":"AWS::ElasticBeanstalk::Environment","labelField":"EnvironmentName","valueField":"EnvironmentName"}},"metricTemplates":[{"resourceType":"AWS::ElasticBeanstalk::Environment","namespace":"AWS/ElasticBeanstalk","dimensions":[{"dimensionName":"EnvironmentName","labelName":"EnvironmentName"}],"metrics":[{"id":"AWS::ElasticBeanstalk::Environment:EnvironmentHealth","name":"EnvironmentHealth","defaultStat":"Average"},{"id":"AWS::ElasticBeanstalk::Environment:ApplicationRequests5xx","name":"ApplicationRequests5xx","defaultStat":"Average"},{"id":"AWS::ElasticBeanstalk::Environment:ApplicationRequests2xx","name":"ApplicationRequests2xx","defaultStat":"Average"},{"id":"AWS::ElasticBeanstalk::Environment:ApplicationRequests3xx","name":"ApplicationRequests3xx","defaultStat":"Average"},{"id":"AWS::ElasticBeanstalk::Environment:ApplicationRequests4xx","name":"ApplicationRequests4xx","defaultStat":"Average"}]}],"dashboards":[{"id":"ElasticBeanstalk:CrossService","name":"Elastic Beanstalk","dependencies":[{"namespace":"AWS/ElasticBeanstalk"}],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::ElasticBeanstalk::Environment:EnvironmentHealth"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::ElasticBeanstalk::Environment:ApplicationRequests5xx"}]}]}]},{"id":"ElasticBeanstalk","name":"Elastic Beanstalk","dependencies":[{"namespace":"AWS/ElasticBeanstalk"}],"controls":["Shared::View.AlarmState","Shared::Group.ResourceGroup","AWS::ElasticBeanstalk.environments"],"tables":[{"resourceType":"AWS::ElasticBeanstalk::Environment","columns":["EnvironmentName","Health","Status","HealthStatus"]}],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::ElasticBeanstalk::Environment:EnvironmentHealth"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::ElasticBeanstalk::Environment:ApplicationRequests2xx"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::ElasticBeanstalk::Environment:ApplicationRequests3xx"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::ElasticBeanstalk::Environment:ApplicationRequests4xx"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::ElasticBeanstalk::Environment:ApplicationRequests5xx"}]}]}]}]},{"id":"AWS::ElasticInference","dashboard":"ElasticInference","crossServiceDashboard":"ElasticInference:CrossService","resourceTypes":[{"type":"AWS::ElasticInference::ElasticInferenceAccelerator","keyMetric":"AWS::ElasticInference::ElasticInferenceAccelerator:AcceleratorHealthCheckFailed","dashboard":"ElasticInference"}],"controls":{"AWS::ElasticInference.elasticInferenceAccelerators":{"type":"resource","resourceType":"AWS::ElasticInference::ElasticInferenceAccelerator","labelField":"ElasticInferenceAcceleratorId","valueField":"ElasticInferenceAcceleratorId"}},"metricTemplates":[{"resourceType":"AWS::ElasticInference::ElasticInferenceAccelerator","namespace":"AWS/ElasticInference","dimensions":[{"dimensionName":"ElasticInferenceAcceleratorId","labelName":"ElasticInferenceAcceleratorId"},{"dimensionName":"InstanceId","labelName":"InstanceId"}],"metrics":[{"id":"AWS::ElasticInference::ElasticInferenceAccelerator:AcceleratorHealthCheckFailed","name":"AcceleratorHealthCheckFailed","defaultStat":"Average"},{"id":"AWS::ElasticInference::ElasticInferenceAccelerator:ConnectivityCheckFailed","name":"ConnectivityCheckFailed","defaultStat":"Average"},{"id":"AWS::ElasticInference::ElasticInferenceAccelerator:AcceleratorMemoryUsage","name":"AcceleratorMemoryUsage","defaultStat":"Maximum"}]}],"dashboards":[{"id":"ElasticInference:CrossService","name":"Elastic Inference","dependencies":[{"namespace":"AWS/ElasticInference"}],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::ElasticInference::ElasticInferenceAccelerator:AcceleratorHealthCheckFailed"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::ElasticInference::ElasticInferenceAccelerator:ConnectivityCheckFailed"}]}]}]},{"id":"ElasticInference","name":"Elastic Inference","dependencies":[{"namespace":"AWS/ElasticInference"}],"controls":["Shared::View.AlarmState","Shared::Group.ResourceGroup","AWS::ElasticInference.elasticInferenceAccelerators"],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::ElasticInference::ElasticInferenceAccelerator:AcceleratorHealthCheckFailed"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::ElasticInference::ElasticInferenceAccelerator:ConnectivityCheckFailed"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::ElasticInference::ElasticInferenceAccelerator:AcceleratorMemoryUsage"}]}]}]}]},{"id":"AWS::EMR","dashboard":"ElasticMapReduce","crossServiceDashboard":"ElasticMapReduce:CrossService","resourceTypes":[{"type":"AWS::EMR::Cluster","keyMetric":"AWS::EMR::Cluster:IsIdle","dashboard":"ElasticMapReduce","arnRegex":".*:cluster/(.*)"}],"controls":{"AWS::EMR.clusters":{"type":"resource","resourceType":"AWS::EMR::Cluster","labelField":"JobFlowId","valueField":"JobFlowId"}},"metricTemplates":[{"resourceType":"AWS::EMR::Cluster","namespace":"AWS/ElasticMapReduce","dimensions":[{"dimensionName":"JobFlowId","labelName":"JobFlowId"}],"metrics":[{"id":"AWS::EMR::Cluster:AppsCompleted","name":"AppsCompleted","defaultStat":"Sum"},{"id":"AWS::EMR::Cluster:AppsFailed","name":"AppsFailed","defaultStat":"Sum"},{"id":"AWS::EMR::Cluster:AppsKilled","name":"AppsKilled","defaultStat":"Sum"},{"id":"AWS::EMR::Cluster:AppsPending","name":"AppsPending","defaultStat":"Sum"},{"id":"AWS::EMR::Cluster:AppsRunning","name":"AppsRunning","defaultStat":"Sum"},{"id":"AWS::EMR::Cluster:AppsSubmitted","name":"AppsSubmitted","defaultStat":"Sum"},{"id":"AWS::EMR::Cluster:BackupFailed","name":"BackupFailed","defaultStat":"Average"},{"id":"AWS::EMR::Cluster:CapacityRemainingGB","name":"CapacityRemainingGB","defaultStat":"Sum"},{"id":"AWS::EMR::Cluster:ContainerAllocated","name":"ContainerAllocated","defaultStat":"Sum"},{"id":"AWS::EMR::Cluster:ContainerPending","name":"ContainerPending","defaultStat":"Sum"},{"id":"AWS::EMR::Cluster:ContainerPendingRatio","name":"ContainerPendingRatio","defaultStat":"Sum"},{"id":"AWS::EMR::Cluster:ContainerReserved","name":"ContainerReserved","defaultStat":"Sum"},{"id":"AWS::EMR::Cluster:CoreNodesPending","name":"CoreNodesPending","defaultStat":"Average"},{"id":"AWS::EMR::Cluster:CoreNodesRunning","name":"CoreNodesRunning","defaultStat":"Average"},{"id":"AWS::EMR::Cluster:CorruptBlocks","name":"CorruptBlocks","defaultStat":"Sum"},{"id":"AWS::EMR::Cluster:DfsPendingReplicationBlocks","name":"DfsPendingReplicationBlocks","defaultStat":"Sum"},{"id":"AWS::EMR::Cluster:HbaseBackupFailed","name":"HbaseBackupFailed","defaultStat":"Sum"},{"id":"AWS::EMR::Cluster:HDFSBytesRead","name":"HDFSBytesRead","defaultStat":"Sum"},{"id":"AWS::EMR::Cluster:HDFSBytesWritten","name":"HDFSBytesWritten","defaultStat":"Sum"},{"id":"AWS::EMR::Cluster:HDFSUtilization","name":"HDFSUtilization","defaultStat":"Average"},{"id":"AWS::EMR::Cluster:IsIdle","name":"IsIdle","defaultStat":"Average"},{"id":"AWS::EMR::Cluster:JobsFailed","name":"JobsFailed","defaultStat":"Average"},{"id":"AWS::EMR::Cluster:JobsRunning","name":"JobsRunning","defaultStat":"Average"},{"id":"AWS::EMR::Cluster:LiveDataNodes","name":"LiveDataNodes","defaultStat":"Average"},{"id":"AWS::EMR::Cluster:LiveTaskTrackers","name":"LiveTaskTrackers","defaultStat":"Average"},{"id":"AWS::EMR::Cluster:MapSlotsOpen","name":"MapSlotsOpen","defaultStat":"Average"},{"id":"AWS::EMR::Cluster:MapTasksRemaining","name":"MapTasksRemaining","defaultStat":"Average"},{"id":"AWS::EMR::Cluster:MapTasksRunning","name":"MapTasksRunning","defaultStat":"Average"},{"id":"AWS::EMR::Cluster:MemoryAllocatedMB","name":"MemoryAllocatedMB","defaultStat":"Sum"},{"id":"AWS::EMR::Cluster:MemoryReservedMB","name":"MemoryReservedMB","defaultStat":"Sum"},{"id":"AWS::EMR::Cluster:MemoryTotalMB","name":"MemoryTotalMB","defaultStat":"Sum"},{"id":"AWS::EMR::Cluster:MissingBlocks","name":"MissingBlocks","defaultStat":"Average"},{"id":"AWS::EMR::Cluster:MostRecentBackupDuration","name":"MostRecentBackupDuration","defaultStat":"Average"},{"id":"AWS::EMR::Cluster:MRActiveNodes","name":"MRActiveNodes","defaultStat":"Sum"},{"id":"AWS::EMR::Cluster:MRDecommissionedNodes","name":"MRDecommissionedNodes","defaultStat":"Sum"},{"id":"AWS::EMR::Cluster:MRLostNodes","name":"MRLostNodes","defaultStat":"Sum"},{"id":"AWS::EMR::Cluster:MRRebootedNodes","name":"MRRebootedNodes","defaultStat":"Sum"},{"id":"AWS::EMR::Cluster:MRTotalNodes","name":"MRTotalNodes","defaultStat":"Sum"},{"id":"AWS::EMR::Cluster:MRUnhealthyNodes","name":"MRUnhealthyNodes","defaultStat":"Sum"},{"id":"AWS::EMR::Cluster:MultiMasterInstanceGroupNodesRequested","name":"MultiMasterInstanceGroupNodesRequested","defaultStat":"Sum"},{"id":"AWS::EMR::Cluster:MultiMasterInstanceGroupNodesRunning","name":"MultiMasterInstanceGroupNodesRunning","defaultStat":"Sum"},{"id":"AWS::EMR::Cluster:MultiMasterInstanceGroupNodesRunningPercentage","name":"MultiMasterInstanceGroupNodesRunningPercentage","defaultStat":"Average"},{"id":"AWS::EMR::Cluster:PendingDeletionBlocks","name":"PendingDeletionBlocks","defaultStat":"Sum"},{"id":"AWS::EMR::Cluster:ReduceSlotsOpen","name":"ReduceSlotsOpen","defaultStat":"Average"},{"id":"AWS::EMR::Cluster:ReduceTasksRemaining","name":"ReduceTasksRemaining","defaultStat":"Average"},{"id":"AWS::EMR::Cluster:ReduceTasksRunning","name":"ReduceTasksRunning","defaultStat":"Average"},{"id":"AWS::EMR::Cluster:RemainingMapTasksPerSlot","name":"RemainingMapTasksPerSlot","defaultStat":"Average"},{"id":"AWS::EMR::Cluster:S3BytesRead","name":"S3BytesRead","defaultStat":"Sum"},{"id":"AWS::EMR::Cluster:S3BytesWritten","name":"S3BytesWritten","defaultStat":"Sum"},{"id":"AWS::EMR::Cluster:TaskNodesPending","name":"TaskNodesPending","defaultStat":"Average"},{"id":"AWS::EMR::Cluster:TaskNodesRunning","name":"TaskNodesRunning","defaultStat":"Average"},{"id":"AWS::EMR::Cluster:TimeSinceLastSuccessfulBackup","name":"TimeSinceLastSuccessfulBackup","defaultStat":"Average"},{"id":"AWS::EMR::Cluster:TotalLoad","name":"TotalLoad","defaultStat":"Average"},{"id":"AWS::EMR::Cluster:UnderReplicatedBlocks","name":"UnderReplicatedBlocks","defaultStat":"Sum"},{"id":"AWS::EMR::Cluster:YARNMemoryAvailablePercentage","name":"YARNMemoryAvailablePercentage","defaultStat":"Average"}]}],"dashboards":[{"id":"ElasticMapReduce:CrossService","name":"EMR","dependencies":[{"namespace":"AWS/ElasticMapReduce"}],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::EMR::Cluster:JobsRunning"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::EMR::Cluster:JobsFailed"}]}]}]},{"id":"ElasticMapReduce","name":"EMR","dependencies":[{"namespace":"AWS/ElasticMapReduce"}],"controls":["Shared::View.AlarmState","Shared::Group.ResourceGroup","AWS::EMR.clusters"],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::EMR::Cluster:JobsRunning"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::EMR::Cluster:JobsFailed"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::EMR::Cluster:IsIdle"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::EMR::Cluster:MapTasksRunning"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::EMR::Cluster:MapTasksRemaining"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::EMR::Cluster:MapSlotsOpen"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::EMR::Cluster:RemainingMapTasksPerSlot"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::EMR::Cluster:ReduceTasksRunning"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::EMR::Cluster:ReduceTasksRemaining"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::EMR::Cluster:ReduceSlotsOpen"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::EMR::Cluster:CoreNodesRunning"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::EMR::Cluster:CoreNodesPending"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::EMR::Cluster:LiveDataNodes"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::EMR::Cluster:TaskNodesRunning"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::EMR::Cluster:TaskNodesPending"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::EMR::Cluster:LiveTaskTrackers"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::EMR::Cluster:S3BytesWritten"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::EMR::Cluster:S3BytesRead"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::EMR::Cluster:HDFSUtilization"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::EMR::Cluster:HDFSBytesRead"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::EMR::Cluster:HDFSBytesWritten"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::EMR::Cluster:MissingBlocks"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::EMR::Cluster:TotalLoad"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::EMR::Cluster:BackupFailed"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::EMR::Cluster:MostRecentBackupDuration"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::EMR::Cluster:TimeSinceLastSuccessfulBackup"}]}]}]}]},{"id":"AWS::DRS","dashboard":"ElasticRecoveryService","crossServiceDashboard":"ElasticRecoveryService:CrossService","resourceTypes":[{"type":"AWS::DRS::SourceServer","keyMetric":"AWS::DRS::SourceServer:LagDuration","dashboard":"ElasticRecoveryService"}],"controls":{"AWS::DRS.SourceServer":{"type":"resource","resourceType":"AWS::DRS::SourceServer","labelField":"SourceServerID","valueField":"SourceServerID"}},"metricTemplates":[{"resourceType":"AWS::DRS::SourceServer","namespace":"AWS/DRS","dimensions":[{"dimensionName":"SourceServerID","labelName":"SourceServerID"}],"metrics":[{"id":"AWS::DRS::SourceServer:LagDuration","name":"LagDuration","defaultStat":"Average"},{"id":"AWS::DRS::SourceServer:Backlog","name":"Backlog","defaultStat":"Average"},{"id":"AWS::DRS::SourceServer:DurationSinceLastSuccessfullRecoveryLaunch","name":"DurationSinceLastSuccessfullRecoveryLaunch","defaultStat":"Maximum"},{"id":"AWS::DRS::SourceServer:ElapsedReplicationDuration","name":"ElapsedReplicationDuration","defaultStat":"Maximum"}]},{"resourceType":"AWS::DRS::SourceServer","id":"AWS::DRS::SourceServer:AcrossAllServers","namespace":"AWS/DRS","dimensions":[],"metrics":[{"id":"AWS::DRS::SourceServer:AcrossAllServers:ActiveSourceServerCount","name":"ActiveSourceServerCount","defaultStat":"Average"},{"id":"AWS::DRS::SourceServer:AcrossAllServers:TotalSourceServerCount","name":"TotalSourceServerCount","defaultStat":"Average"}]}],"dashboards":[{"id":"ElasticRecoveryService:CrossService","name":"Elastic Recovery Services","dependencies":[{"namespace":"AWS/DRS"}],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::DRS::SourceServer:LagDuration"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::DRS::SourceServer:AcrossAllServers:ActiveSourceServerCount"}]}]}]},{"id":"ElasticRecoveryService","name":"Elastic Recovery Service","dependencies":[{"namespace":"AWS/DRS"}],"controls":["Shared::View.AlarmState","Shared::Group.ResourceGroup","AWS::DRS.SourceServer"],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::DRS::SourceServer:LagDuration"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::DRS::SourceServer:Backlog"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::DRS::SourceServer:DurationSinceLastSuccessfullRecoveryLaunch"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::DRS::SourceServer:ElapsedReplicationDuration"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::DRS::SourceServer:AcrossAllServers:ActiveSourceServerCount"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::DRS::SourceServer:AcrossAllServers:TotalSourceServerCount"}]}]}]}]},{"id":"AWS::ElasticTranscoder","dashboard":"ElasticTranscoder","crossServiceDashboard":"ElasticTranscoder:CrossService","resourceTypes":[{"type":"AWS::ElasticTranscoder::Operation","keyMetric":"AWS::ElasticTranscoder::Operation:Errors","dashboard":"ElasticTranscoder"}],"controls":{"AWS::ElasticTranscoder.operations":{"type":"resource","resourceType":"AWS::ElasticTranscoder::Operation","labelField":"Operation","valueField":"Operation"}},"metricTemplates":[{"resourceType":"AWS::ElasticTranscoder::Operation","namespace":"AWS/ElasticTranscoder","dimensions":[{"dimensionName":"Operation","labelName":"Operation"}],"metrics":[{"id":"AWS::ElasticTranscoder::Operation:Errors","name":"Errors","defaultStat":"Sum"},{"id":"AWS::ElasticTranscoder::Operation:Throttles","name":"Throttles","defaultStat":"Sum"},{"id":"AWS::ElasticTranscoder::Operation:BilledHDOutput","name":"BilledHDOutput","defaultStat":"Sum"},{"id":"AWS::ElasticTranscoder::Operation:BilledSDOutput","name":"BilledSDOutput","defaultStat":"Sum"},{"id":"AWS::ElasticTranscoder::Operation:BilledAudioOutput","name":"BilledAudioOutput","defaultStat":"Sum"},{"id":"AWS::ElasticTranscoder::Operation:JobsCompleted","name":"JobsCompleted","defaultStat":"Sum"},{"id":"AWS::ElasticTranscoder::Operation:JobsErrored","name":"JobsErrored","defaultStat":"Sum"},{"id":"AWS::ElasticTranscoder::Operation:OutputsPerJob","name":"OutputsPerJob","defaultStat":"Sum"},{"id":"AWS::ElasticTranscoder::Operation:StandbyTime","name":"StandbyTime","defaultStat":"Average"}]}],"dashboards":[{"id":"ElasticTranscoder:CrossService","name":"Elastic Transcoder","dependencies":[{"namespace":"AWS/ElasticTranscoder"}],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::ElasticTranscoder::Operation:Errors"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::ElasticTranscoder::Operation:Throttles"}]}]}]},{"id":"ElasticTranscoder","name":"Elastic Transcoder","dependencies":[{"namespace":"AWS/ElasticTranscoder"}],"controls":["Shared::View.AlarmState","Shared::Group.ResourceGroup","AWS::ElasticTranscoder.operations"],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::ElasticTranscoder::Operation:Errors"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::ElasticTranscoder::Operation:Throttles"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::ElasticTranscoder::Operation:BilledHDOutput"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::ElasticTranscoder::Operation:BilledSDOutput"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::ElasticTranscoder::Operation:BilledAudioOutput"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::ElasticTranscoder::Operation:JobsCompleted"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::ElasticTranscoder::Operation:JobsErrored"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::ElasticTranscoder::Operation:OutputsPerJob"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::ElasticTranscoder::Operation:StandbyTime"}]}]}]}]},{"id":"AWS::ELB","dashboard":"ELB","crossServiceDashboard":"ELB:CrossService","resourceTypes":[{"type":"AWS::ElasticLoadBalancing::LoadBalancer","keyMetric":"AWS::ElasticLoadBalancing::LoadBalancer:RequestCount","dashboard":"ELB","arnRegex":".*:loadbalancer\\\\/(?!.*net|app|gwy)(.*)"}],"controls":{"AWS::ELB.loadBalancers":{"type":"resource","resourceType":"AWS::ElasticLoadBalancing::LoadBalancer","labelField":"LoadBalancerName","valueField":"LoadBalancerName"}},"metricTemplates":[{"resourceType":"AWS::ElasticLoadBalancing::LoadBalancer","namespace":"AWS/ELB","dimensions":[{"dimensionName":"LoadBalancerName","labelName":"LoadBalancerName"}],"metrics":[{"id":"AWS::ElasticLoadBalancing::LoadBalancer:BackendConnectionErrors","name":"BackendConnectionErrors","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancing::LoadBalancer:DesyncMitigationMode_NonCompliant_Request_Count","name":"DesyncMitigationMode_NonCompliant_Request_Count","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancing::LoadBalancer:HTTPCode_Backend_2XX","name":"HTTPCode_Backend_2XX","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancing::LoadBalancer:HTTPCode_Backend_3XX","name":"HTTPCode_Backend_3XX","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancing::LoadBalancer:HTTPCode_Backend_4XX","name":"HTTPCode_Backend_4XX","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancing::LoadBalancer:HTTPCode_Backend_5XX","name":"HTTPCode_Backend_5XX","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancing::LoadBalancer:HTTPCode_ELB_4XX","name":"HTTPCode_ELB_4XX","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancing::LoadBalancer:HTTPCode_ELB_5XX","name":"HTTPCode_ELB_5XX","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancing::LoadBalancer:HealthyHostCount","name":"HealthyHostCount","defaultStat":"Average"},{"id":"AWS::ElasticLoadBalancing::LoadBalancer:Latency","name":"Latency","defaultStat":"Average"},{"id":"AWS::ElasticLoadBalancing::LoadBalancer:RequestCount","name":"RequestCount","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancing::LoadBalancer:SpilloverCount","name":"SpilloverCount","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancing::LoadBalancer:SurgeQueueLength","name":"SurgeQueueLength","defaultStat":"Average"},{"id":"AWS::ElasticLoadBalancing::LoadBalancer:UnHealthyHostCount","name":"UnHealthyHostCount","defaultStat":"Average"}]},{"resourceType":"AWS::ElasticLoadBalancing::LoadBalancer","id":"AWS::ElasticLoadBalancing::LoadBalancer:AvailabilityZone","namespace":"AWS/ELB","dimensions":[{"dimensionName":"AvailabilityZone","labelName":"AvailabilityZone"},{"dimensionName":"LoadBalancerName","labelName":"LoadBalancerName"}],"metrics":[{"id":"AWS::ElasticLoadBalancing::LoadBalancer:AvailabilityZone:BackendConnectionErrors","name":"BackendConnectionErrors","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancing::LoadBalancer:AvailabilityZone:DesyncMitigationMode_NonCompliant_Request_Count","name":"DesyncMitigationMode_NonCompliant_Request_Count","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancing::LoadBalancer:AvailabilityZone:HTTPCode_Backend_2XX","name":"HTTPCode_Backend_2XX","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancing::LoadBalancer:AvailabilityZone:HTTPCode_Backend_3XX","name":"HTTPCode_Backend_3XX","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancing::LoadBalancer:AvailabilityZone:HTTPCode_Backend_4XX","name":"HTTPCode_Backend_4XX","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancing::LoadBalancer:AvailabilityZone:HTTPCode_Backend_5XX","name":"HTTPCode_Backend_5XX","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancing::LoadBalancer:AvailabilityZone:HTTPCode_ELB_4XX","name":"HTTPCode_ELB_4XX","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancing::LoadBalancer:AvailabilityZone:HTTPCode_ELB_5XX","name":"HTTPCode_ELB_5XX","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancing::LoadBalancer:AvailabilityZone:HealthyHostCount","name":"HealthyHostCount","defaultStat":"Average"},{"id":"AWS::ElasticLoadBalancing::LoadBalancer:AvailabilityZone:Latency","name":"Latency","defaultStat":"Average"},{"id":"AWS::ElasticLoadBalancing::LoadBalancer:AvailabilityZone:RequestCount","name":"RequestCount","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancing::LoadBalancer:AvailabilityZone:SpilloverCount","name":"SpilloverCount","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancing::LoadBalancer:AvailabilityZone:SurgeQueueLength","name":"SurgeQueueLength","defaultStat":"Average"},{"id":"AWS::ElasticLoadBalancing::LoadBalancer:AvailabilityZone:UnHealthyHostCount","name":"UnHealthyHostCount","defaultStat":"Average"}]}],"dashboards":[{"id":"ELB:CrossService","name":"Elastic Load Balancing","dependencies":[{"namespace":"AWS/ELB"}],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::ElasticLoadBalancing::LoadBalancer:Latency"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::ElasticLoadBalancing::LoadBalancer:BackendConnectionErrors"}]}]}]},{"id":"ELB:ResourceHealth","name":"Elastic Load Balancing","dependencies":[{"namespace":"AWS/ELB"}],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::ElasticLoadBalancing::LoadBalancer:RequestCount"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::ElasticLoadBalancing::LoadBalancer:Latency"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::ElasticLoadBalancing::LoadBalancer:BackendConnectionErrors"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::ElasticLoadBalancing::LoadBalancer:SpilloverCount"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::ElasticLoadBalancing::LoadBalancer:SurgeQueueLength"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::ElasticLoadBalancing::LoadBalancer:HealthyHostCount"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::ElasticLoadBalancing::LoadBalancer:UnHealthyHostCount"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::ElasticLoadBalancing::LoadBalancer:HTTPCode_Backend_2XX"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::ElasticLoadBalancing::LoadBalancer:HTTPCode_Backend_3XX"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::ElasticLoadBalancing::LoadBalancer:HTTPCode_Backend_4XX"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::ElasticLoadBalancing::LoadBalancer:HTTPCode_Backend_5XX"}]}]}]},{"id":"ELB","name":"Elastic Load Balancing","dependencies":[{"namespace":"AWS/ELB"}],"controls":["Shared::View.AlarmState","Shared::Group.ResourceGroup","AWS::ELB.loadBalancers"],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::ElasticLoadBalancing::LoadBalancer:RequestCount"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::ElasticLoadBalancing::LoadBalancer:Latency"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::ElasticLoadBalancing::LoadBalancer:BackendConnectionErrors"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::ElasticLoadBalancing::LoadBalancer:SpilloverCount"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::ElasticLoadBalancing::LoadBalancer:SurgeQueueLength"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::ElasticLoadBalancing::LoadBalancer:HealthyHostCount"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::ElasticLoadBalancing::LoadBalancer:UnHealthyHostCount"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::ElasticLoadBalancing::LoadBalancer:HTTPCode_Backend_2XX"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::ElasticLoadBalancing::LoadBalancer:HTTPCode_Backend_3XX"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::ElasticLoadBalancing::LoadBalancer:HTTPCode_Backend_4XX"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::ElasticLoadBalancing::LoadBalancer:HTTPCode_Backend_5XX"}]}]}]}]},{"id":"AWS::ElasticLoadBalancingV2::TargetGroup","resourceTypes":[{"type":"AWS::ElasticLoadBalancingV2::TargetGroup","keyMetric":"AWS::ElasticLoadBalancingV2::TargetGroup:RequestCountPerTarget","dashboard":"ApplicationELB","arnRegex":".*:(targetgroup/.*)"}],"metricTemplates":[{"resourceType":"AWS::ElasticLoadBalancingV2::TargetGroup","namespace":"AWS/ApplicationELB","dimensions":[{"dimensionName":"TargetGroup","labelName":"TargetGroup"}],"metrics":[{"id":"AWS::ElasticLoadBalancingV2::TargetGroup:LambdaInternalError","name":"LambdaInternalError","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancingV2::TargetGroup:LambdaUserError","name":"LambdaUserError","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancingV2::TargetGroup:RequestCountPerTarget","name":"RequestCountPerTarget","defaultStat":"Sum"}]}],"dashboards":[]},{"id":"AWS::ES","dashboard":"ES","crossServiceDashboard":"ES:CrossService","resourceTypes":[{"type":"AWS::ES::Client","keyMetric":"AWS::ES::Client:CPUUtilization","dashboard":"ES"}],"controls":{"AWS::ES.clients":{"type":"resource","resourceType":"AWS::ES::Client","labelField":"ClientId","valueField":"ClientId"}},"metricTemplates":[{"resourceType":"AWS::ES::Client","namespace":"AWS/ES","dimensions":[{"dimensionName":"ClientId","labelName":"ClientId"},{"dimensionName":"DomainName","labelName":"DomainName"}],"metrics":[{"id":"AWS::ES::Client:CPUUtilization","name":"CPUUtilization","defaultStat":"Average"},{"id":"AWS::ES::Client:ElasticsearchRequests","name":"ElasticsearchRequests","defaultStat":"Sum"},{"id":"AWS::ES::Client:SearchableDocuments","name":"SearchableDocuments","defaultStat":"Average"},{"id":"AWS::ES::Client:ClusterStatus.green","name":"ClusterStatus.green","defaultStat":"Average"},{"id":"AWS::ES::Client:ClusterStatus.yellow","name":"ClusterStatus.yellow","defaultStat":"Average"},{"id":"AWS::ES::Client:ClusterStatus.red","name":"ClusterStatus.red","defaultStat":"Average"},{"id":"AWS::ES::Client:Nodes","name":"Nodes","defaultStat":"Average"},{"id":"AWS::ES::Client:DeletedDocuments","name":"DeletedDocuments","defaultStat":"Sum"},{"id":"AWS::ES::Client:FreeStorageSpace","name":"FreeStorageSpace","defaultStat":"Average"},{"id":"AWS::ES::Client:ClusterUsedSpace","name":"ClusterUsedSpace","defaultStat":"Average"},{"id":"AWS::ES::Client:ClusterIndexWritesBlocked","name":"ClusterIndexWritesBlocked","defaultStat":"Maximum"},{"id":"AWS::ES::Client:JVMMemoryPressure","name":"JVMMemoryPressure","defaultStat":"Maximum"},{"id":"AWS::ES::Client:AutomatedSnapshotFailure","name":"AutomatedSnapshotFailure","defaultStat":"Maximum"},{"id":"AWS::ES::Client:CPUCreditBalance","name":"CPUCreditBalance","defaultStat":"Minimum"},{"id":"AWS::ES::Client:KibanaHealthyNodes","name":"KibanaHealthyNodes","defaultStat":"Minimum"},{"id":"AWS::ES::Client:KMSKeyError","name":"KMSKeyError","defaultStat":"Maximum"},{"id":"AWS::ES::Client:KMSKeyInaccessible","name":"KMSKeyInaccessible","defaultStat":"Maximum"},{"id":"AWS::ES::Client:InvalidHostHeaderRequests","name":"InvalidHostHeaderRequests","defaultStat":"Sum"}]}],"dashboards":[{"id":"ES:CrossService","name":"Elasticsearch Service","dependencies":[{"namespace":"AWS/ES"}],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::ES::Client:CPUUtilization"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::ES::Client:ElasticsearchRequests"}]}]}]},{"id":"ES","name":"Elasticsearch Service","dependencies":[{"namespace":"AWS/ES"}],"controls":["Shared::View.AlarmState","Shared::Group.ResourceGroup","AWS::ES.clients"],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::ES::Client:CPUUtilization"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::ES::Client:ElasticsearchRequests"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::ES::Client:SearchableDocuments"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::ES::Client:ClusterStatus.green"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::ES::Client:ClusterStatus.yellow"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::ES::Client:ClusterStatus.red"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::ES::Client:Nodes"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::ES::Client:DeletedDocuments"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::ES::Client:FreeStorageSpace"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::ES::Client:ClusterUsedSpace"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::ES::Client:ClusterIndexWritesBlocked"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::ES::Client:JVMMemoryPressure"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::ES::Client:AutomatedSnapshotFailure"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::ES::Client:CPUCreditBalance"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::ES::Client:KibanaHealthyNodes"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::ES::Client:KMSKeyError"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::ES::Client:KMSKeyInaccessible"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::ES::Client:InvalidHostHeaderRequests"}]}]}]}]},{"id":"AWS::Events","dashboard":"Events","crossServiceDashboard":"Events:CrossService","resourceTypes":[{"type":"AWS::Events::Rule","keyMetric":"AWS::Events::Rule:Invocations","dashboard":"Events","arnRegex":".*:rule/(.*)"}],"controls":{"AWS::Events.rules":{"type":"resource","resourceType":"AWS::Events::Rule","labelField":"RuleName","valueField":"RuleName"}},"metricTemplates":[{"resourceType":"AWS::Events::Rule","namespace":"AWS/Events","dimensions":[{"dimensionName":"RuleName","labelName":"RuleName"}],"metrics":[{"id":"AWS::Events::Rule:Invocations","name":"Invocations","defaultStat":"Sum"},{"id":"AWS::Events::Rule:FailedInvocations","name":"FailedInvocations","defaultStat":"Sum"},{"id":"AWS::Events::Rule:DeadLetterInvocations","name":"DeadLetterInvocations","defaultStat":"Sum"},{"id":"AWS::Events::Rule:TriggeredRules","name":"TriggeredRules","defaultStat":"Sum"},{"id":"AWS::Events::Rule:MatchedEvents","name":"MatchedEvents","defaultStat":"Sum"},{"id":"AWS::Events::Rule:ThrottledRules","name":"ThrottledRules","defaultStat":"Sum"}]}],"dashboards":[{"id":"Events:CrossService","name":"CloudWatch Events","dependencies":[{"namespace":"AWS/Events"}],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::Events::Rule:Invocations"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::Events::Rule:FailedInvocations"}]}]}]},{"id":"Events","name":"CloudWatch Events","dependencies":[{"namespace":"AWS/Events"}],"controls":["Shared::View.AlarmState","Shared::Group.ResourceGroup","AWS::Events.rules"],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::Events::Rule:Invocations"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::Events::Rule:FailedInvocations"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::Events::Rule:DeadLetterInvocations"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::Events::Rule:TriggeredRules"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::Events::Rule:MatchedEvents"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::Events::Rule:ThrottledRules"}]}]}]}]},{"id":"AWS::FileSync","dashboard":"FileSync","crossServiceDashboard":"FileSync:CrossService","resourceTypes":[{"type":"AWS::FileSync::Host","keyMetric":"AWS::FileSync::Host:FilesTransferred","dashboard":"FileSync"}],"controls":{"AWS::FileSync.hosts":{"type":"resource","resourceType":"AWS::FileSync::Host","labelField":"HostId","valueField":"HostId"}},"metricTemplates":[{"resourceType":"AWS::FileSync::Host","namespace":"AWS/FileSync","dimensions":[{"dimensionName":"HostId","labelName":"HostId"},{"dimensionName":"HostName","labelName":"HostName"}],"metrics":[{"id":"AWS::FileSync::Host:FilesTransferred","name":"FilesTransferred","defaultStat":"Sum"}]}],"dashboards":[{"id":"FileSync:CrossService","name":"EFS File Sync","dependencies":[{"namespace":"AWS/FileSync"}],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::FileSync::Host:FilesTransferred"}]}]}]},{"id":"FileSync","name":"EFS File Sync","dependencies":[{"namespace":"AWS/FileSync"}],"controls":["Shared::View.AlarmState","Shared::Group.ResourceGroup","AWS::FileSync.hosts"],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::FileSync::Host:FilesTransferred"}]}]}]}]},{"id":"AWS::KinesisFirehose","dashboard":"Firehose","crossServiceDashboard":"Firehose:CrossService","resourceTypes":[{"type":"AWS::KinesisFirehose::DeliveryStream","keyMetric":"AWS::KinesisFirehose::DeliveryStream:IncomingBytes","dashboard":"Firehose","arnRegex":".*:deliverystream/(.*)"}],"controls":{"AWS::KinesisFirehose.deliveryStreams":{"type":"resource","resourceType":"AWS::KinesisFirehose::DeliveryStream","labelField":"DeliveryStreamName","valueField":"DeliveryStreamName"}},"metricTemplates":[{"resourceType":"AWS::KinesisFirehose::DeliveryStream","namespace":"AWS/Firehose","dimensions":[{"dimensionName":"DeliveryStreamName","labelName":"DeliveryStreamName"}],"metrics":[{"id":"AWS::KinesisFirehose::DeliveryStream:IncomingBytes","name":"IncomingBytes","defaultStat":"Sum"},{"id":"AWS::KinesisFirehose::DeliveryStream:IncomingRecords","name":"IncomingRecords","defaultStat":"Sum"},{"id":"AWS::KinesisFirehose::DeliveryStream:BackupToS3.Bytes","name":"BackupToS3.Bytes","defaultStat":"Sum"},{"id":"AWS::KinesisFirehose::DeliveryStream:BackupToS3.DataFreshness","name":"BackupToS3.DataFreshness","defaultStat":"Average"},{"id":"AWS::KinesisFirehose::DeliveryStream:BackupToS3.Records","name":"BackupToS3.Records","defaultStat":"Sum"},{"id":"AWS::KinesisFirehose::DeliveryStream:BackupToS3.Success","name":"BackupToS3.Success","defaultStat":"Sum"},{"id":"AWS::KinesisFirehose::DeliveryStream:DataReadFromKinesisStream.Bytes","name":"DataReadFromKinesisStream.Bytes","defaultStat":"Sum"},{"id":"AWS::KinesisFirehose::DeliveryStream:DataReadFromKinesisStream.Records","name":"DataReadFromKinesisStream.Records","defaultStat":"Sum"},{"id":"AWS::KinesisFirehose::DeliveryStream:DeliveryToElasticsearch.Bytes","name":"DeliveryToElasticsearch.Bytes","defaultStat":"Sum"},{"id":"AWS::KinesisFirehose::DeliveryStream:DeliveryToElasticsearch.Records","name":"DeliveryToElasticsearch.Records","defaultStat":"Sum"},{"id":"AWS::KinesisFirehose::DeliveryStream:DeliveryToElasticsearch.Success","name":"DeliveryToElasticsearch.Success","defaultStat":"Sum"},{"id":"AWS::KinesisFirehose::DeliveryStream:DeliveryToRedshift.Bytes","name":"DeliveryToRedshift.Bytes","defaultStat":"Sum"},{"id":"AWS::KinesisFirehose::DeliveryStream:DeliveryToRedshift.Records","name":"DeliveryToRedshift.Records","defaultStat":"Sum"},{"id":"AWS::KinesisFirehose::DeliveryStream:DeliveryToRedshift.Success","name":"DeliveryToRedshift.Success","defaultStat":"Sum"},{"id":"AWS::KinesisFirehose::DeliveryStream:DeliveryToS3.Bytes","name":"DeliveryToS3.Bytes","defaultStat":"Sum"},{"id":"AWS::KinesisFirehose::DeliveryStream:DeliveryToS3.DataFreshness","name":"DeliveryToS3.DataFreshness","defaultStat":"Average"},{"id":"AWS::KinesisFirehose::DeliveryStream:DeliveryToS3.Records","name":"DeliveryToS3.Records","defaultStat":"Sum"},{"id":"AWS::KinesisFirehose::DeliveryStream:DeliveryToS3.Success","name":"DeliveryToS3.Success","defaultStat":"Sum"},{"id":"AWS::KinesisFirehose::DeliveryStream:DeliveryToSplunk.Bytes","name":"DeliveryToSplunk.Bytes","defaultStat":"Sum"},{"id":"AWS::KinesisFirehose::DeliveryStream:DeliveryToSplunk.DataAckLatency","name":"DeliveryToSplunk.DataAckLatency","defaultStat":"Average"},{"id":"AWS::KinesisFirehose::DeliveryStream:DeliveryToSplunk.DataFreshness","name":"DeliveryToSplunk.DataFreshness","defaultStat":"Average"},{"id":"AWS::KinesisFirehose::DeliveryStream:DeliveryToSplunk.Records","name":"DeliveryToSplunk.Records","defaultStat":"Sum"},{"id":"AWS::KinesisFirehose::DeliveryStream:DeliveryToSplunk.Success","name":"DeliveryToSplunk.Success","defaultStat":"Sum"},{"id":"AWS::KinesisFirehose::DeliveryStream:KinesisMillisBehindLatest","name":"KinesisMillisBehindLatest","defaultStat":"Average"}]}],"dashboards":[{"id":"Firehose:CrossService","name":"Kinesis Firehose","dependencies":[{"namespace":"AWS/Firehose"}],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::KinesisFirehose::DeliveryStream:IncomingBytes"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::KinesisFirehose::DeliveryStream:IncomingRecords"}]}]}]},{"id":"Firehose","name":"Kinesis Firehose","dependencies":[{"namespace":"AWS/Firehose"}],"controls":["Shared::View.AlarmState","Shared::Group.ResourceGroup","AWS::KinesisFirehose.deliveryStreams"],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::KinesisFirehose::DeliveryStream:IncomingBytes"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::KinesisFirehose::DeliveryStream:IncomingRecords"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::KinesisFirehose::DeliveryStream:BackupToS3.Bytes"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::KinesisFirehose::DeliveryStream:BackupToS3.DataFreshness"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::KinesisFirehose::DeliveryStream:BackupToS3.Records"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::KinesisFirehose::DeliveryStream:BackupToS3.Success"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::KinesisFirehose::DeliveryStream:DataReadFromKinesisStream.Bytes"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::KinesisFirehose::DeliveryStream:DataReadFromKinesisStream.Records"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::KinesisFirehose::DeliveryStream:DeliveryToElasticsearch.Bytes"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::KinesisFirehose::DeliveryStream:DeliveryToElasticsearch.Records"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::KinesisFirehose::DeliveryStream:DeliveryToElasticsearch.Success"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::KinesisFirehose::DeliveryStream:DeliveryToRedshift.Bytes"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::KinesisFirehose::DeliveryStream:DeliveryToRedshift.Records"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::KinesisFirehose::DeliveryStream:DeliveryToRedshift.Success"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::KinesisFirehose::DeliveryStream:DeliveryToS3.Bytes"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::KinesisFirehose::DeliveryStream:DeliveryToS3.DataFreshness"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::KinesisFirehose::DeliveryStream:DeliveryToS3.Records"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::KinesisFirehose::DeliveryStream:DeliveryToS3.Success"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::KinesisFirehose::DeliveryStream:DeliveryToSplunk.Bytes"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::KinesisFirehose::DeliveryStream:DeliveryToSplunk.DataAckLatency"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::KinesisFirehose::DeliveryStream:DeliveryToSplunk.DataFreshness"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::KinesisFirehose::DeliveryStream:DeliveryToSplunk.Records"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::KinesisFirehose::DeliveryStream:DeliveryToSplunk.Success"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::KinesisFirehose::DeliveryStream:KinesisMillisBehindLatest"}]}]}]}]},{"id":"AWS::FSx","dashboard":"FSx","crossServiceDashboard":"FSx:CrossService","resourceTypes":[{"type":"AWS::FSx::FileSystem","keyMetric":"AWS::FSx::FileSystem:DataReadBytes","dashboard":"FSx","arnRegex":".*:file-system/(.*)"}],"controls":{"AWS::FSx.fileSystems":{"type":"resource","resourceType":"AWS::FSx::FileSystem","labelField":"FileSystemId","valueField":"FileSystemId"}},"metricTemplates":[{"resourceType":"AWS::FSx::FileSystem","namespace":"AWS/FSx","dimensions":[{"dimensionName":"FileSystemId","labelName":"FileSystemId"}],"metrics":[{"id":"AWS::FSx::FileSystem:DataReadBytes","name":"DataReadBytes","defaultStat":"Sum"},{"id":"AWS::FSx::FileSystem:DataWriteBytes","name":"DataWriteBytes","defaultStat":"Sum"},{"id":"AWS::FSx::FileSystem:FreeStorageCapacity","name":"FreeStorageCapacity","defaultStat":"Average"},{"id":"AWS::FSx::FileSystem:FreeDataStorageCapacity","name":"FreeDataStorageCapacity","defaultStat":"Sum"},{"id":"AWS::FSx::FileSystem:DataReadOperations","name":"DataReadOperations","defaultStat":"Sum"},{"id":"AWS::FSx::FileSystem:DataWriteOperations","name":"DataWriteOperations","defaultStat":"Sum"},{"id":"AWS::FSx::FileSystem:MetadataOperations","name":"MetadataOperations","defaultStat":"Sum"}]}],"dashboards":[{"id":"FSx:CrossService","name":"FSx","dependencies":[{"namespace":"AWS/FSx"}],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::FSx::FileSystem:DataReadBytes"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::FSx::FileSystem:DataWriteBytes"}]}]}]},{"id":"FSx","name":"FSx","dependencies":[{"namespace":"AWS/FSx"}],"controls":["Shared::View.AlarmState","Shared::Group.ResourceGroup","AWS::FSx.fileSystems"],"rows":[{"widgets":[{"type":"chart","properties":{"title":"Read Throughput (bytes/sec)"},"metrics":[{"metricOptions":{"id":"expr2"},"metricExpression":"METRICS()/expr1","resourceType":"AWS::FSx::FileSystem"},{"metricOptions":{"id":"expr1","visible":false},"metricExpression":"PERIOD(FIRST(METRICS()))","resourceType":"AWS::FSx::FileSystem"},{"metricOptions":{"visible":false},"metricTemplate":"AWS::FSx::FileSystem:DataReadBytes"}]},{"type":"chart","properties":{"title":"Write Throughput (bytes/sec)"},"metrics":[{"metricOptions":{"id":"expr2"},"metricExpression":"METRICS()/expr1","resourceType":"AWS::FSx::FileSystem"},{"metricOptions":{"id":"expr1","visible":false},"metricExpression":"PERIOD(FIRST(METRICS()))","resourceType":"AWS::FSx::FileSystem"},{"metricOptions":{"visible":false},"metricTemplate":"AWS::FSx::FileSystem:DataWriteBytes"}]}]},{"widgets":[{"type":"chart","properties":{"title":"Free Storage Capacity (FSx Windows): Sum"},"metrics":[{"metricTemplate":"AWS::FSx::FileSystem:FreeStorageCapacity"}]},{"type":"chart","properties":{"title":"Free Data Storage Capacity (FSx Lustre): Sum"},"metrics":[{"metricOptions":{"id":"expr2"},"metricExpression":"METRICS()/expr1*60","resourceType":"AWS::FSx::FileSystem"},{"metricOptions":{"id":"expr1","visible":false},"metricExpression":"PERIOD(FIRST(METRICS()))","resourceType":"AWS::FSx::FileSystem"},{"metricOptions":{"visible":false},"metricTemplate":"AWS::FSx::FileSystem:FreeDataStorageCapacity"}]}]},{"widgets":[{"type":"chart","properties":{"title":"Read IOPS (operations/sec)"},"metrics":[{"metricOptions":{"id":"expr2"},"metricExpression":"METRICS()/expr1","resourceType":"AWS::FSx::FileSystem"},{"metricOptions":{"id":"expr1","visible":false},"metricExpression":"PERIOD(FIRST(METRICS()))","resourceType":"AWS::FSx::FileSystem"},{"metricOptions":{"visible":false},"metricTemplate":"AWS::FSx::FileSystem:DataReadOperations"}]},{"type":"chart","properties":{"title":"Write IOPS (operations/sec)"},"metrics":[{"metricOptions":{"id":"expr2"},"metricExpression":"METRICS()/expr1","resourceType":"AWS::FSx::FileSystem"},{"metricOptions":{"id":"expr1","visible":false},"metricExpression":"PERIOD(FIRST(METRICS()))","resourceType":"AWS::FSx::FileSystem"},{"metricOptions":{"visible":false},"metricTemplate":"AWS::FSx::FileSystem:DataWriteOperations"}]},{"type":"chart","properties":{"title":"Metadata IOPS (operations/sec)"},"metrics":[{"metricOptions":{"id":"expr2"},"metricExpression":"METRICS()/expr1","resourceType":"AWS::FSx::FileSystem"},{"metricOptions":{"id":"expr1","visible":false},"metricExpression":"PERIOD(FIRST(METRICS()))","resourceType":"AWS::FSx::FileSystem"},{"metricOptions":{"visible":false},"metricTemplate":"AWS::FSx::FileSystem:MetadataOperations"}]}]}]}]},{"id":"AWS::GameLift","dashboard":"GameLift","crossServiceDashboard":"GameLift:CrossService","resourceTypes":[{"type":"AWS::GameLift::Fleet","keyMetric":"AWS::GameLift::Fleet:ActiveInstances","dashboard":"GameLift","arnRegex":".*:fleet/(.*)"}],"controls":{"AWS::GameLift.fleets":{"type":"resource","resourceType":"AWS::GameLift::Fleet","labelField":"FleetId","valueField":"FleetId"}},"metricTemplates":[{"resourceType":"AWS::GameLift::Fleet","namespace":"AWS/GameLift","dimensions":[{"dimensionName":"FleetId","labelName":"FleetId"}],"metrics":[{"id":"AWS::GameLift::Fleet:ActiveInstances","name":"ActiveInstances","defaultStat":"Average"},{"id":"AWS::GameLift::Fleet:PercentIdleInstances","name":"PercentIdleInstances","defaultStat":"Average"},{"id":"AWS::GameLift::Fleet:DesiredInstances","name":"DesiredInstances","defaultStat":"Average"},{"id":"AWS::GameLift::Fleet:IdleInstances","name":"IdleInstances","defaultStat":"Average"},{"id":"AWS::GameLift::Fleet:MaxInstances","name":"MaxInstances","defaultStat":"Average"},{"id":"AWS::GameLift::Fleet:MinInstances","name":"MinInstances","defaultStat":"Average"},{"id":"AWS::GameLift::Fleet:InstanceInterruptions","name":"InstanceInterruptions","defaultStat":"Sum"}]}],"dashboards":[{"id":"GameLift:CrossService","name":"GameLift","dependencies":[{"namespace":"AWS/GameLift"}],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::GameLift::Fleet:ActiveInstances"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::GameLift::Fleet:PercentIdleInstances"}]}]}]},{"id":"GameLift","name":"GameLift","dependencies":[{"namespace":"AWS/GameLift"}],"controls":["Shared::View.AlarmState","Shared::Group.ResourceGroup","AWS::GameLift.fleets"],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::GameLift::Fleet:ActiveInstances"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::GameLift::Fleet:PercentIdleInstances"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::GameLift::Fleet:DesiredInstances"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::GameLift::Fleet:IdleInstances"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::GameLift::Fleet:MaxInstances"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::GameLift::Fleet:MinInstances"}]}]},{"widgets":[{"type":"chart","width":8,"metrics":[{"metricTemplate":"AWS::GameLift::Fleet:InstanceInterruptions"}]}]}]}]},{"id":"AWS::GatewayELB","dashboard":"GatewayELB","crossServiceDashboard":"GatewayELB:CrossService","resourceTypes":[{"type":"AWS::ElasticLoadBalancingV2::LoadBalancer/GatewayELB","entityType":"AWS::ElasticLoadBalancingV2::LoadBalancer","keyMetric":"AWS::ElasticLoadBalancingV2::LoadBalancer/GatewayELB:ConsumedLCUs","dashboard":"GatewayELB","arnRegex":".*:loadbalancer/(gwy/.*)"}],"controls":{"AWS::GatewayELB.LoadBalancers":{"type":"resource","resourceType":"AWS::ElasticLoadBalancingV2::LoadBalancer/GatewayELB","labelField":"LoadBalancer","valueField":"LoadBalancer"}},"metricTemplates":[{"resourceType":"AWS::ElasticLoadBalancingV2::LoadBalancer/GatewayELB","namespace":"AWS/GatewayELB","dimensions":[{"dimensionName":"LoadBalancer","labelName":"LoadBalancer"}],"metrics":[{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/GatewayELB:HealthyHostCount","name":"HealthyHostCount","defaultStat":"Average"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/GatewayELB:UnHealthyHostCount","name":"UnHealthyHostCount","defaultStat":"Average"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/GatewayELB:ActiveFlowCount","name":"ActiveFlowCount","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/GatewayELB:ConsumedLCUs","name":"ConsumedLCUs","defaultStat":"Average"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/GatewayELB:NewFlowCount","name":"NewFlowCount","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/GatewayELB:ProcessedBytes","name":"ProcessedBytes","defaultStat":"Sum"}]}],"dashboards":[{"id":"GatewayELB:CrossService","name":"Gateway ELB","dependencies":[{"namespace":"AWS/GatewayELB"}],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::ElasticLoadBalancingV2::LoadBalancer/GatewayELB:HealthyHostCount"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::ElasticLoadBalancingV2::LoadBalancer/GatewayELB:UnHealthyHostCount"}]}]}]},{"id":"GatewayELB","name":"Gateway ELB","dependencies":[{"namespace":"AWS/GatewayELB"}],"controls":["Shared::View.AlarmState","Shared::Group.ResourceGroup","AWS::GatewayELB.LoadBalancers"],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::ElasticLoadBalancingV2::LoadBalancer/GatewayELB:HealthyHostCount"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::ElasticLoadBalancingV2::LoadBalancer/GatewayELB:UnHealthyHostCount"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::ElasticLoadBalancingV2::LoadBalancer/GatewayELB:ActiveFlowCount"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::ElasticLoadBalancingV2::LoadBalancer/GatewayELB:ConsumedLCUs"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::ElasticLoadBalancingV2::LoadBalancer/GatewayELB:NewFlowCount"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::ElasticLoadBalancingV2::LoadBalancer/GatewayELB:ProcessedBytes"}]}]}]}]},{"id":"AWS::GlobalAccelerator::Accelerator","dashboard":"GlobalAccelerator","crossServiceDashboard":"GlobalAccelerator:CrossService","resourceTypes":[{"type":"AWS::GlobalAccelerator::Accelerator","keyMetric":"AWS::GlobalAccelerator::Accelerator:NewFlowCount","dashboard":"GlobalAccelerator","arnRegex":".*:accelerator/(.*)"}],"metricTemplates":[{"resourceType":"AWS::GlobalAccelerator::Accelerator","namespace":"AWS/GlobalAccelerator","dimensions":[{"dimensionName":"Accelerator","labelName":"Accelerator"}],"metrics":[{"id":"AWS::GlobalAccelerator::Accelerator:NewFlowCount","name":"NewFlowCount","defaultStat":"Sum"},{"id":"AWS::GlobalAccelerator::Accelerator:ProcessedBytesIn","name":"ProcessedBytesIn","defaultStat":"Sum"},{"id":"AWS::GlobalAccelerator::Accelerator:ProcessedBytesOut","name":"ProcessedBytesOut","defaultStat":"Sum"}]}],"dashboards":[{"id":"GlobalAccelerator:CrossService","name":"Global Accelerator","dependencies":[{"namespace":"AWS/GlobalAccelerator"}],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::GlobalAccelerator::Accelerator:NewFlowCount"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::GlobalAccelerator::Accelerator:ProcessedBytesIn"}]}]}]},{"id":"GlobalAccelerator","name":"Global Accelerator","dependencies":[{"namespace":"AWS/GlobalAccelerator"}],"controls":["Shared::View.AlarmState","Shared::Group.ResourceGroup"],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::GlobalAccelerator::Accelerator:NewFlowCount"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::GlobalAccelerator::Accelerator:ProcessedBytesIn"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::GlobalAccelerator::Accelerator:ProcessedBytesOut"}]}]}]}]},{"id":"AWS::Inspector","dashboard":"Inspector","crossServiceDashboard":"Inspector:CrossService","resourceTypes":[{"type":"AWS::Inspector::AssessmentTemplateName","keyMetric":"AWS::Inspector::AssessmentTemplateName:TotalAssessmentRuns","dashboard":"Inspector"}],"controls":{"AWS::Inspector.assessmentTemplateNames":{"type":"resource","resourceType":"AWS::Inspector::AssessmentTemplateName","labelField":"AssessmentTemplateName","valueField":"AssessmentTemplateName"}},"metricTemplates":[{"resourceType":"AWS::Inspector::AssessmentTemplateName","namespace":"AWS/Inspector","dimensions":[{"dimensionName":"AssessmentTemplateArn","labelName":"AssessmentTemplateArn"},{"dimensionName":"AssessmentTemplateName","labelName":"AssessmentTemplateName"}],"metrics":[{"id":"AWS::Inspector::AssessmentTemplateName:TotalHealthyAgents","name":"TotalHealthyAgents","defaultStat":"Average"},{"id":"AWS::Inspector::AssessmentTemplateName:TotalAssessmentRuns","name":"TotalAssessmentRuns","defaultStat":"Average"},{"id":"AWS::Inspector::AssessmentTemplateName:TotalMatchingAgents","name":"TotalMatchingAgents","defaultStat":"Average"},{"id":"AWS::Inspector::AssessmentTemplateName:TotalFindings","name":"TotalFindings","defaultStat":"Average"}]}],"dashboards":[{"id":"Inspector:CrossService","name":"Inspector","dependencies":[{"namespace":"AWS/Inspector"}],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::Inspector::AssessmentTemplateName:TotalHealthyAgents"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::Inspector::AssessmentTemplateName:TotalAssessmentRuns"}]}]}]},{"id":"Inspector","name":"Inspector","dependencies":[{"namespace":"AWS/Inspector"}],"controls":["Shared::View.AlarmState","Shared::Group.ResourceGroup","AWS::Inspector.assessmentTemplateNames"],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::Inspector::AssessmentTemplateName:TotalHealthyAgents"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::Inspector::AssessmentTemplateName:TotalAssessmentRuns"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::Inspector::AssessmentTemplateName:TotalMatchingAgents"}]}]},{"widgets":[{"type":"chart","width":8,"metrics":[{"metricTemplate":"AWS::Inspector::AssessmentTemplateName:TotalFindings"}]}]}]}]},{"id":"AWS::IoT::TopicRule","dashboard":"IoT","crossServiceDashboard":"IoT:CrossService","resourceTypes":[{"type":"AWS::IoT::TopicRule","keyMetric":"AWS::IoT::TopicRule:TopicMatch","dashboard":"IoT","arnRegex":".*:rule/(.*)"}],"metricTemplates":[{"resourceType":"AWS::IoT::TopicRule","namespace":"AWS/IoT","dimensions":[{"dimensionName":"RuleName","labelName":"RuleName"}],"metrics":[{"id":"AWS::IoT::TopicRule:TopicMatch","name":"TopicMatch","defaultStat":"Sum"},{"id":"AWS::IoT::TopicRule:ParseError","name":"ParseError","defaultStat":"Sum"},{"id":"AWS::IoT::TopicRule:RuleMessageThrottled","name":"RuleMessageThrottled","defaultStat":"Sum"},{"id":"AWS::IoT::TopicRule:RuleNotFound","name":"RuleNotFound","defaultStat":"Sum"}]}],"dashboards":[{"id":"IoT:CrossService","name":"IoT","dependencies":[{"namespace":"AWS/IoT"}],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::IoT::TopicRule:TopicMatch"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::IoT::TopicRule:ParseError"}]}]}]},{"id":"IoT","name":"IoT","dependencies":[{"namespace":"AWS/IoT"}],"controls":["Shared::View.AlarmState","Shared::Group.ResourceGroup"],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::IoT::TopicRule:TopicMatch"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::IoT::TopicRule:ParseError"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::IoT::TopicRule:RuleMessageThrottled"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::IoT::TopicRule:RuleNotFound"}]}]}]}]},{"id":"AWS::IoT1Click::Device","dashboard":"IoT1Click","crossServiceDashboard":"IoT1Click:CrossService","resourceTypes":[{"type":"AWS::IoT1Click::Device","keyMetric":"AWS::IoT1Click::Device:TotalEvents","dashboard":"IoT1Click","arnRegex":".*:devices/(.*)"}],"metricTemplates":[{"resourceType":"AWS::IoT1Click::Device","namespace":"AWS/IoT1Click","dimensions":[{"dimensionName":"DeviceType","labelName":"DeviceType"}],"metrics":[{"id":"AWS::IoT1Click::Device:TotalEvents","name":"TotalEvents","defaultStat":"Sum"},{"id":"AWS::IoT1Click::Device:RemainingLife","name":"RemainingLife","defaultStat":"Average"},{"id":"AWS::IoT1Click::Device:CallbackInvocationErrors","name":"CallbackInvocationErrors","defaultStat":"Sum"}]}],"dashboards":[{"id":"IoT1Click:CrossService","name":"IoT 1-Click","dependencies":[{"namespace":"AWS/IoT1Click"}],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::IoT1Click::Device:TotalEvents"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::IoT1Click::Device:RemainingLife"}]}]}]},{"id":"IoT1Click","name":"IoT 1-Click","dependencies":[{"namespace":"AWS/IoT1Click"}],"controls":["Shared::View.AlarmState","Shared::Group.ResourceGroup"],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::IoT1Click::Device:TotalEvents"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::IoT1Click::Device:RemainingLife"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::IoT1Click::Device:CallbackInvocationErrors"}]}]}]}]},{"id":"AWS::IoTAnalytics","dashboard":"IoTAnalytics","crossServiceDashboard":"IoTAnalytics:CrossService","resourceTypes":[{"type":"AWS::IoTAnalytics::Channel","keyMetric":"AWS::IoTAnalytics::Channel:IncomingMessages","dashboard":"IoTAnalytics","arnRegex":".*:channel/(.*)"},{"type":"AWS::IoTAnalytics::Dataset","keyMetric":"AWS::IoTAnalytics::Dataset:ActionExecution","dashboard":"IoTAnalytics","arnRegex":".*:dataset/(.*)"},{"type":"AWS::IoTAnalytics::Datastore","keyMetric":"AWS::IoTAnalytics::Datastore:ActionExecution","dashboard":"IoTAnalytics","arnRegex":".*:datastore/(.*)"},{"type":"AWS::IoTAnalytics::Pipeline","keyMetric":"AWS::IoTAnalytics::Pipeline:ActionExecution","dashboard":"IoTAnalytics","arnRegex":".*:pipeline/(.*)"}],"controls":{"AWS::IoTAnalytics.channels":{"type":"resource","resourceType":"AWS::IoTAnalytics::Channel","labelField":"ChannelName","valueField":"ChannelName"}},"metricTemplates":[{"resourceType":"AWS::IoTAnalytics::Channel","namespace":"AWS/IoTAnalytics","dimensions":[{"dimensionName":"ChannelName","labelName":"ChannelName"}],"metrics":[{"id":"AWS::IoTAnalytics::Channel:IncomingMessages","name":"IncomingMessages","defaultStat":"Sum"}]},{"resourceType":"AWS::IoTAnalytics::Dataset","namespace":"AWS/IoTAnalytics","dimensions":[{"dimensionName":"DatasetName","labelName":"DatasetName"}],"metrics":[{"id":"AWS::IoTAnalytics::Dataset:ActionExecution","name":"ActionExecution","defaultStat":"Sum"},{"id":"AWS::IoTAnalytics::Dataset:IncomingMessages","name":"IncomingMessages","defaultStat":"Sum"},{"id":"AWS::IoTAnalytics::Dataset:ActionExecutionThrottled","name":"ActionExecutionThrottled","defaultStat":"Sum"},{"id":"AWS::IoTAnalytics::Dataset:ActivityExecutionError","name":"ActivityExecutionError","defaultStat":"Sum"},{"id":"AWS::IoTAnalytics::Dataset:PipelineConcurrentExecutionCount","name":"PipelineConcurrentExecutionCount","defaultStat":"Sum"}]},{"resourceType":"AWS::IoTAnalytics::Datastore","namespace":"AWS/IoTAnalytics","dimensions":[{"dimensionName":"DatastoreName","labelName":"DatastoreName"}],"metrics":[{"id":"AWS::IoTAnalytics::Datastore:ActionExecution","name":"ActionExecution","defaultStat":"Sum"},{"id":"AWS::IoTAnalytics::Datastore:IncomingMessages","name":"IncomingMessages","defaultStat":"Sum"},{"id":"AWS::IoTAnalytics::Datastore:ActionExecutionThrottled","name":"ActionExecutionThrottled","defaultStat":"Sum"},{"id":"AWS::IoTAnalytics::Datastore:ActivityExecutionError","name":"ActivityExecutionError","defaultStat":"Sum"},{"id":"AWS::IoTAnalytics::Datastore:PipelineConcurrentExecutionCount","name":"PipelineConcurrentExecutionCount","defaultStat":"Sum"}]},{"resourceType":"AWS::IoTAnalytics::Pipeline","namespace":"AWS/IoTAnalytics","dimensions":[{"dimensionName":"PipelineActivityName","labelName":"PipelineActivityName"}],"metrics":[{"id":"AWS::IoTAnalytics::Pipeline:ActionExecution","name":"ActionExecution","defaultStat":"Sum"},{"id":"AWS::IoTAnalytics::Pipeline:IncomingMessages","name":"IncomingMessages","defaultStat":"Sum"},{"id":"AWS::IoTAnalytics::Pipeline:ActionExecutionThrottled","name":"ActionExecutionThrottled","defaultStat":"Sum"},{"id":"AWS::IoTAnalytics::Pipeline:ActivityExecutionError","name":"ActivityExecutionError","defaultStat":"Sum"},{"id":"AWS::IoTAnalytics::Pipeline:PipelineConcurrentExecutionCount","name":"PipelineConcurrentExecutionCount","defaultStat":"Sum"}]}],"dashboards":[{"id":"IoTAnalytics:CrossService","name":"IoT Analytics","dependencies":[{"namespace":"AWS/IoTAnalytics"}],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::IoTAnalytics::Channel:IncomingMessages"}]}]}]},{"id":"IoTAnalytics","name":"IoT Analytics","dependencies":[{"namespace":"AWS/IoTAnalytics"}],"controls":["Shared::View.AlarmState","Shared::Group.ResourceGroup","AWS::IoTAnalytics.channels"],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::IoTAnalytics::Channel:IncomingMessages"}]}]}]}]},{"id":"AWS::Kafka::Cluster","dashboard":"Kafka","crossServiceDashboard":"Kafka:CrossService","resourceTypes":[{"type":"AWS::Kafka::Cluster","keyMetric":"AWS::Kafka::Cluster:ActiveControllerCount","arnRegex":".*:cluster/(.*)/.*"},{"type":"CW::Kafka::Cluster","keyMetric":"CW::Kafka::Cluster:CpuUser","dashboard":"Kafka","arnRegex":".*:cluster/(.*)/.*"}],"metricTemplates":[{"resourceType":"AWS::Kafka::Cluster","namespace":"AWS/Kafka","dimensions":[{"dimensionName":"Cluster Name","labelName":"Cluster Name"}],"metrics":[{"id":"AWS::Kafka::Cluster:ActiveControllerCount","name":"ActiveControllerCount","defaultStat":"Average"},{"id":"AWS::Kafka::Cluster:GlobalPartitionCount","name":"GlobalPartitionCount","defaultStat":"Average"},{"id":"AWS::Kafka::Cluster:GlobalTopicCount","name":"GlobalTopicCount","defaultStat":"Average"},{"id":"AWS::Kafka::Cluster:KafkaDataLogsDiskUsed","name":"KafkaDataLogsDiskUsed","defaultStat":"Average"},{"id":"AWS::Kafka::Cluster:OfflinePartitionsCount","name":"OfflinePartitionsCount","defaultStat":"Average"},{"id":"AWS::Kafka::Cluster:ZooKeeperRequestLatencyMsMean","name":"ZooKeeperRequestLatencyMsMean","defaultStat":"Average"},{"id":"AWS::Kafka::Cluster:ZooKeeperSessionState","name":"ZooKeeperSessionState","defaultStat":"Average"}]},{"resourceType":"CW::Kafka::Cluster","namespace":"AWS/Kafka","dimensions":[{"dimensionName":"Cluster Name","labelName":"Cluster Name"},{"dimensionName":"Broker ID","labelName":"Broker ID"}],"metrics":[{"id":"CW::Kafka::Cluster:CpuIdle","name":"CpuIdle","defaultStat":"Average"},{"id":"CW::Kafka::Cluster:CpuSystem","name":"CpuSystem","defaultStat":"Average"},{"id":"CW::Kafka::Cluster:CpuUser","name":"CpuUser","defaultStat":"Average"},{"id":"CW::Kafka::Cluster:KafkaAppLogsDiskUsed","name":"KafkaAppLogsDiskUsed","defaultStat":"Average"},{"id":"CW::Kafka::Cluster:KafkaDataLogsDiskUsed","name":"KafkaDataLogsDiskUsed","defaultStat":"Average"},{"id":"CW::Kafka::Cluster:MemoryBuffered","name":"MemoryBuffered","defaultStat":"Average"},{"id":"CW::Kafka::Cluster:MemoryCached","name":"MemoryCached","defaultStat":"Average"},{"id":"CW::Kafka::Cluster:MemoryFree","name":"MemoryFree","defaultStat":"Average"},{"id":"CW::Kafka::Cluster:MemoryUsed","name":"MemoryUsed","defaultStat":"Average"},{"id":"CW::Kafka::Cluster:NetworkRxDropped","name":"NetworkRxDropped","defaultStat":"Sum"},{"id":"CW::Kafka::Cluster:NetworkRxErrors","name":"NetworkRxErrors","defaultStat":"Sum"},{"id":"CW::Kafka::Cluster:NetworkRxPackets","name":"NetworkRxPackets","defaultStat":"Sum"},{"id":"CW::Kafka::Cluster:NetworkTxDropped","name":"NetworkTxDropped","defaultStat":"Sum"},{"id":"CW::Kafka::Cluster:NetworkTxErrors","name":"NetworkTxErrors","defaultStat":"Sum"},{"id":"CW::Kafka::Cluster:NetworkTxPackets","name":"NetworkTxPackets","defaultStat":"Sum"},{"id":"CW::Kafka::Cluster:RootDiskUsed","name":"RootDiskUsed","defaultStat":"Average"},{"id":"CW::Kafka::Cluster:SwapFree","name":"SwapFree","defaultStat":"Average"},{"id":"CW::Kafka::Cluster:SwapUsed","name":"SwapUsed","defaultStat":"Average"},{"id":"CW::Kafka::Cluster:ZooKeeperRequestLatencyMsMean","name":"ZooKeeperRequestLatencyMsMean","defaultStat":"Average"},{"id":"CW::Kafka::Cluster:ZooKeeperSessionState","name":"ZooKeeperSessionState","defaultStat":"Average"}]}],"dashboards":[{"id":"Kafka:CrossService","name":"MSK (Kafka)","dependencies":[{"namespace":"AWS/Kafka"}],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::Kafka::Cluster:ActiveControllerCount"}]},{"type":"chart","metrics":[{"metricTemplate":"CW::Kafka::Cluster:CpuIdle"}]}]}]},{"id":"Kafka","name":"MSK (Kafka)","dependencies":[{"namespace":"AWS/Kafka"}],"controls":["Shared::View.AlarmState","Shared::Group.ResourceGroup"],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::Kafka::Cluster:ActiveControllerCount"}]},{"type":"chart","metrics":[{"metricTemplate":"CW::Kafka::Cluster:CpuIdle"}]},{"type":"chart","metrics":[{"metricTemplate":"CW::Kafka::Cluster:CpuSystem"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"CW::Kafka::Cluster:CpuUser"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::Kafka::Cluster:GlobalPartitionCount"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::Kafka::Cluster:GlobalTopicCount"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"CW::Kafka::Cluster:KafkaAppLogsDiskUsed"}]},{"type":"chart","metrics":[{"metricTemplate":"CW::Kafka::Cluster:KafkaDataLogsDiskUsed"}]},{"type":"chart","metrics":[{"metricTemplate":"CW::Kafka::Cluster:MemoryBuffered"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"CW::Kafka::Cluster:MemoryCached"}]},{"type":"chart","metrics":[{"metricTemplate":"CW::Kafka::Cluster:MemoryFree"}]},{"type":"chart","metrics":[{"metricTemplate":"CW::Kafka::Cluster:MemoryUsed"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"CW::Kafka::Cluster:NetworkRxDropped"}]},{"type":"chart","metrics":[{"metricTemplate":"CW::Kafka::Cluster:NetworkRxErrors"}]},{"type":"chart","metrics":[{"metricTemplate":"CW::Kafka::Cluster:NetworkRxPackets"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"CW::Kafka::Cluster:NetworkTxDropped"}]},{"type":"chart","metrics":[{"metricTemplate":"CW::Kafka::Cluster:NetworkTxErrors"}]},{"type":"chart","metrics":[{"metricTemplate":"CW::Kafka::Cluster:NetworkTxPackets"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::Kafka::Cluster:OfflinePartitionsCount"}]},{"type":"chart","metrics":[{"metricTemplate":"CW::Kafka::Cluster:RootDiskUsed"}]},{"type":"chart","metrics":[{"metricTemplate":"CW::Kafka::Cluster:SwapFree"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"CW::Kafka::Cluster:SwapUsed"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::Kafka::Cluster:ZooKeeperRequestLatencyMsMean"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::Kafka::Cluster:ZooKeeperSessionState"}]}]}]}]},{"id":"AWS::Kinesis","dashboard":"Kinesis","crossServiceDashboard":"Kinesis:CrossService","resourceTypes":[{"type":"AWS::Kinesis::Stream","keyMetric":"AWS::Kinesis::Stream:GetRecords.Records","dashboard":"Kinesis","arnRegex":".*:stream/(.*)"}],"controls":{"AWS::Kinesis.streams":{"type":"resource","resourceType":"AWS::Kinesis::Stream","labelField":"StreamName","valueField":"StreamName"}},"metricTemplates":[{"resourceType":"AWS::Kinesis::Stream","namespace":"AWS/Kinesis","dimensions":[{"dimensionName":"StreamName","labelName":"StreamName"}],"metrics":[{"id":"AWS::Kinesis::Stream:ReadProvisionedThroughputExceeded","name":"ReadProvisionedThroughputExceeded","defaultStat":"Sum"},{"id":"AWS::Kinesis::Stream:WriteProvisionedThroughputExceeded","name":"WriteProvisionedThroughputExceeded","defaultStat":"Sum"},{"id":"AWS::Kinesis::Stream:GetRecords.IteratorAgeMilliseconds","name":"GetRecords.IteratorAgeMilliseconds","defaultStat":"Maximum"},{"id":"AWS::Kinesis::Stream:PutRecord.Success","name":"PutRecord.Success","defaultStat":"Sum"},{"id":"AWS::Kinesis::Stream:PutRecords.Success","name":"PutRecords.Success","defaultStat":"Sum"},{"id":"AWS::Kinesis::Stream:PutRecords.Bytes","name":"PutRecords.Bytes","defaultStat":"Sum"},{"id":"AWS::Kinesis::Stream:GetRecords.Success","name":"GetRecords.Success","defaultStat":"Sum"},{"id":"AWS::Kinesis::Stream:GetRecords.Bytes","name":"GetRecords.Bytes","defaultStat":"Sum"},{"id":"AWS::Kinesis::Stream:GetRecords.Records","name":"GetRecords.Records","defaultStat":"Sum"},{"id":"AWS::Kinesis::Stream:GetRecords.Latency","name":"GetRecords.Latency","defaultStat":"Maximum"},{"id":"AWS::Kinesis::Stream:IncomingBytes","name":"IncomingBytes","defaultStat":"Sum"},{"id":"AWS::Kinesis::Stream:IncomingRecords","name":"IncomingRecords","defaultStat":"Sum"}]}],"dashboards":[{"id":"Kinesis:CrossService","name":"Kinesis Data Stream","dependencies":[{"namespace":"AWS/Kinesis"}],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::Kinesis::Stream:ReadProvisionedThroughputExceeded"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::Kinesis::Stream:WriteProvisionedThroughputExceeded"}]}]}]},{"id":"Kinesis","name":"Kinesis Data Stream","dependencies":[{"namespace":"AWS/Kinesis"}],"controls":["Shared::View.AlarmState","Shared::Group.ResourceGroup","AWS::Kinesis.streams"],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::Kinesis::Stream:GetRecords.IteratorAgeMilliseconds"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::Kinesis::Stream:ReadProvisionedThroughputExceeded"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::Kinesis::Stream:WriteProvisionedThroughputExceeded"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::Kinesis::Stream:PutRecord.Success"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::Kinesis::Stream:PutRecords.Success"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::Kinesis::Stream:GetRecords.Success"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::Kinesis::Stream:GetRecords.Bytes"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::Kinesis::Stream:GetRecords.Records"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::Kinesis::Stream:GetRecords.Latency"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::Kinesis::Stream:IncomingBytes"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::Kinesis::Stream:IncomingRecords"}]}]}]}]},{"id":"AWS::KinesisAnalytics","dashboard":"KinesisAnalytics","crossServiceDashboard":"KinesisAnalytics:CrossService","resourceTypes":[{"type":"AWS::KinesisAnalytics::Application","keyMetric":"AWS::KinesisAnalytics::Application:KPUs","arnRegex":".*:application/(.*)"},{"type":"CW::KinesisAnalytics::Application","keyMetric":"CW::KinesisAnalytics::Application:Bytes","dashboard":"KinesisAnalytics","arnRegex":".*:application/(.*)"}],"controls":{"AWS::KinesisAnalytics.applications":{"type":"resource","resourceType":"CW::KinesisAnalytics::Application","labelField":"Application","valueField":"Application"}},"metricTemplates":[{"resourceType":"AWS::KinesisAnalytics::Application","namespace":"AWS/KinesisAnalytics","dimensions":[{"dimensionName":"Application","labelName":"Application"}],"metrics":[{"id":"AWS::KinesisAnalytics::Application:KPUs","name":"KPUs","defaultStat":"Average"},{"id":"AWS::KinesisAnalytics::Application:MillisBehindLatest","name":"MillisBehindLatest","defaultStat":"Average"}]},{"resourceType":"CW::KinesisAnalytics::Application","namespace":"AWS/KinesisAnalytics","dimensions":[{"dimensionName":"Application","labelName":"Application"},{"dimensionName":"Flow","labelName":"Flow"},{"dimensionName":"Id","labelName":"Id"}],"metrics":[{"id":"CW::KinesisAnalytics::Application:Bytes","name":"Bytes","defaultStat":"Average"},{"id":"CW::KinesisAnalytics::Application:KPUs","name":"KPUs","defaultStat":"Average"},{"id":"CW::KinesisAnalytics::Application:MillisBehindLatest","name":"MillisBehindLatest","defaultStat":"Average"},{"id":"CW::KinesisAnalytics::Application:Records","name":"Records","defaultStat":"Average"},{"id":"CW::KinesisAnalytics::Application:Success","name":"Success","defaultStat":"Average"},{"id":"CW::KinesisAnalytics::Application:InputProcessing.Duration","name":"InputProcessing.Duration","defaultStat":"Average"},{"id":"CW::KinesisAnalytics::Application:InputProcessing.OkRecords","name":"InputProcessing.OkRecords","defaultStat":"Sum"},{"id":"CW::KinesisAnalytics::Application:InputProcessing.OkBytes","name":"InputProcessing.OkBytes","defaultStat":"Sum"},{"id":"CW::KinesisAnalytics::Application:InputProcessing.DroppedRecords","name":"InputProcessing.DroppedRecords","defaultStat":"Sum"},{"id":"CW::KinesisAnalytics::Application:InputProcessing.ProcessingFailedRecords","name":"InputProcessing.ProcessingFailedRecords","defaultStat":"Sum"},{"id":"CW::KinesisAnalytics::Application:InputProcessing.Success","name":"InputProcessing.Success","defaultStat":"Sum"},{"id":"CW::KinesisAnalytics::Application:LambdaDelivery.OkRecords","name":"LambdaDelivery.OkRecords","defaultStat":"Sum"},{"id":"CW::KinesisAnalytics::Application:LambdaDelivery.DeliveryFailedRecords","name":"LambdaDelivery.DeliveryFailedRecords","defaultStat":"Sum"},{"id":"CW::KinesisAnalytics::Application:LambdaDelivery.Duration","name":"LambdaDelivery.Duration","defaultStat":"Average"}]}],"dashboards":[{"id":"KinesisAnalytics:CrossService","name":"Kinesis Analytics","dependencies":[{"namespace":"AWS/KinesisAnalytics"}],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"CW::KinesisAnalytics::Application:Bytes"}]},{"type":"chart","metrics":[{"metricTemplate":"CW::KinesisAnalytics::Application:KPUs"}]}]}]},{"id":"KinesisAnalytics","name":"Kinesis Analytics","dependencies":[{"namespace":"AWS/KinesisAnalytics"}],"controls":["Shared::View.AlarmState","Shared::Group.ResourceGroup","AWS::KinesisAnalytics.applications"],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"CW::KinesisAnalytics::Application:Bytes"}]},{"type":"chart","metrics":[{"metricTemplate":"CW::KinesisAnalytics::Application:KPUs"}]},{"type":"chart","metrics":[{"metricTemplate":"CW::KinesisAnalytics::Application:MillisBehindLatest"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"CW::KinesisAnalytics::Application:Records"}]},{"type":"chart","metrics":[{"metricTemplate":"CW::KinesisAnalytics::Application:Success"}]},{"type":"chart","metrics":[{"metricTemplate":"CW::KinesisAnalytics::Application:InputProcessing.Duration"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"CW::KinesisAnalytics::Application:InputProcessing.OkRecords"}]},{"type":"chart","metrics":[{"metricTemplate":"CW::KinesisAnalytics::Application:InputProcessing.OkBytes"}]},{"type":"chart","metrics":[{"metricTemplate":"CW::KinesisAnalytics::Application:InputProcessing.DroppedRecords"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"CW::KinesisAnalytics::Application:InputProcessing.ProcessingFailedRecords"}]},{"type":"chart","metrics":[{"metricTemplate":"CW::KinesisAnalytics::Application:InputProcessing.Success"}]},{"type":"chart","metrics":[{"metricTemplate":"CW::KinesisAnalytics::Application:LambdaDelivery.OkRecords"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"CW::KinesisAnalytics::Application:LambdaDelivery.DeliveryFailedRecords"}]},{"type":"chart","metrics":[{"metricTemplate":"CW::KinesisAnalytics::Application:LambdaDelivery.Duration"}]}]}]}]},{"id":"AWS::KinesisVideo","dashboard":"KinesisVideo","crossServiceDashboard":"KinesisVideo:CrossService","resourceTypes":[{"type":"AWS::KinesisVideo::Stream","keyMetric":"AWS::KinesisVideo::Stream:GetMedia.Success","dashboard":"KinesisVideo","arnRegex":".*:stream/(.*)/.*"}],"controls":{"AWS::KinesisVideo.streams":{"type":"resource","resourceType":"AWS::KinesisVideo::Stream","labelField":"StreamName","valueField":"StreamName"}},"metricTemplates":[{"resourceType":"AWS::KinesisVideo::Stream","namespace":"AWS/KinesisVideo","dimensions":[{"dimensionName":"StreamName","labelName":"StreamName"}],"metrics":[{"id":"AWS::KinesisVideo::Stream:GetMedia.Success","name":"GetMedia.Success","defaultStat":"Sum"},{"id":"AWS::KinesisVideo::Stream:PutMedia.Success","name":"PutMedia.Success","defaultStat":"Sum"},{"id":"AWS::KinesisVideo::Stream:GetMedia.MillisBehindNow","name":"GetMedia.MillisBehindNow","defaultStat":"Sum"},{"id":"AWS::KinesisVideo::Stream:ListFragments.Latency","name":"ListFragments.Latency","defaultStat":"Sum"},{"id":"AWS::KinesisVideo::Stream:PutMedia.FragmentIngestionLatency","name":"PutMedia.FragmentIngestionLatency","defaultStat":"Sum"},{"id":"AWS::KinesisVideo::Stream:PutMedia.FragmentPersistLatency","name":"PutMedia.FragmentPersistLatency","defaultStat":"Sum"},{"id":"AWS::KinesisVideo::Stream:PutMedia.IncomingBytes","name":"PutMedia.IncomingBytes","defaultStat":"Sum"},{"id":"AWS::KinesisVideo::Stream:PutMedia.IncomingFrames","name":"PutMedia.IncomingFrames","defaultStat":"Sum"}]}],"dashboards":[{"id":"KinesisVideo:CrossService","name":"Kinesis Video","dependencies":[{"namespace":"AWS/KinesisVideo"}],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::KinesisVideo::Stream:GetMedia.Success"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::KinesisVideo::Stream:PutMedia.Success"}]}]}]},{"id":"KinesisVideo","name":"Kinesis Video","dependencies":[{"namespace":"AWS/KinesisVideo"}],"controls":["Shared::View.AlarmState","Shared::Group.ResourceGroup","AWS::KinesisVideo.streams"],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::KinesisVideo::Stream:GetMedia.Success"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::KinesisVideo::Stream:PutMedia.Success"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::KinesisVideo::Stream:GetMedia.MillisBehindNow"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::KinesisVideo::Stream:ListFragments.Latency"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::KinesisVideo::Stream:PutMedia.FragmentIngestionLatency"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::KinesisVideo::Stream:PutMedia.FragmentPersistLatency"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::KinesisVideo::Stream:PutMedia.IncomingBytes"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::KinesisVideo::Stream:PutMedia.IncomingFrames"}]}]}]}]},{"id":"AWS::KMS","dashboard":"KMS","crossServiceDashboard":"KMS:CrossService","resourceTypes":[{"type":"AWS::KMS::Key","keyMetric":"AWS::KMS::Key:SecondsUntilKeyMaterialExpiration","dashboard":"KMS","arnRegex":".*:key/(.*)"}],"controls":{"AWS::KMS.keys":{"type":"resource","resourceType":"AWS::KMS::Key","labelField":"KeyId","valueField":"KeyId"}},"metricTemplates":[{"resourceType":"AWS::KMS::Key","namespace":"AWS/KMS","dimensions":[{"dimensionName":"KeyId","labelName":"KeyId"}],"metrics":[{"id":"AWS::KMS::Key:SecondsUntilKeyMaterialExpiration","name":"SecondsUntilKeyMaterialExpiration","defaultStat":"Average"}]}],"dashboards":[{"id":"KMS:CrossService","name":"Key Management Service","dependencies":[{"namespace":"AWS/KMS"}],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::KMS::Key:SecondsUntilKeyMaterialExpiration"}]}]}]},{"id":"KMS","name":"Key Management Service","dependencies":[{"namespace":"AWS/KMS"}],"controls":["Shared::View.AlarmState","Shared::Group.ResourceGroup","AWS::KMS.keys"],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::KMS::Key:SecondsUntilKeyMaterialExpiration"}]}]}]}]},{"id":"AWS::Lambda","dashboard":"Lambda","crossServiceDashboard":"Lambda:CrossService","resourceTypes":[{"type":"AWS::Lambda::Function","consoleLink":"/lambda/home?region={region}#/functions/{FunctionName}","keyMetric":"AWS::Lambda::Function:Duration","describe":"lambda-describe-functions","dashboard":"Lambda","isResourceNode":true,"arnRegex":".*:function:(.*)"}],"controls":{"AWS::Lambda.functions":{"type":"resource","resourceType":"AWS::Lambda::Function","labelField":"FunctionName","valueField":"FunctionName"}},"metricTemplates":[{"resourceType":"AWS::Lambda::Function","namespace":"AWS/Lambda","dimensions":[{"dimensionName":"FunctionName","labelName":"FunctionName"}],"metrics":[{"id":"AWS::Lambda::Function:ConcurrentExecutions","name":"ConcurrentExecutions","defaultStat":"Maximum"},{"id":"AWS::Lambda::Function:DeadLetterErrors","name":"DeadLetterErrors","defaultStat":"Sum"},{"id":"AWS::Lambda::Function:DestinationDeliveryFailures","name":"DestinationDeliveryFailures","defaultStat":"Sum"},{"id":"AWS::Lambda::Function:Duration","name":"Duration","defaultStat":"Average"},{"id":"AWS::Lambda::Function:Errors","name":"Errors","defaultStat":"Sum"},{"id":"AWS::Lambda::Function:Invocations","name":"Invocations","defaultStat":"Sum"},{"id":"AWS::Lambda::Function:IteratorAge","name":"IteratorAge","defaultStat":"Average"},{"id":"AWS::Lambda::Function:PostRuntimeExtensionsDuration","name":"PostRuntimeExtensionsDuration","defaultStat":"Average"},{"id":"AWS::Lambda::Function:ProvisionedConcurrencyInvocations","name":"ProvisionedConcurrencyInvocations","defaultStat":"Sum"},{"id":"AWS::Lambda::Function:ProvisionedConcurrencySpilloverInvocations","name":"ProvisionedConcurrencySpilloverInvocations","defaultStat":"Sum"},{"id":"AWS::Lambda::Function:ProvisionedConcurrencyUtilization","name":"ProvisionedConcurrencyUtilization","defaultStat":"Maximum"},{"id":"AWS::Lambda::Function:ProvisionedConcurrentExecutions","name":"ProvisionedConcurrentExecutions","defaultStat":"Maximum"},{"id":"AWS::Lambda::Function:Throttles","name":"Throttles","defaultStat":"Sum"},{"id":"AWS::Lambda::Function:UnreservedConcurrentExecutions","name":"UnreservedConcurrentExecutions","defaultStat":"Maximum"}]},{"resourceType":"AWS::Lambda::Function","id":"AWS::Lambda::Function:FunctionName:Resource","namespace":"AWS/Lambda","dimensions":[{"dimensionName":"FunctionName","labelName":"FunctionName"},{"dimensionName":"Resource","labelName":"Resource"}],"metrics":[{"id":"AWS::Lambda::Function:FunctionName:Resource:ConcurrentExecutions","name":"ConcurrentExecutions","defaultStat":"Maximum"},{"id":"AWS::Lambda::Function:FunctionName:Resource:DeadLetterErrors","name":"DeadLetterErrors","defaultStat":"Sum"},{"id":"AWS::Lambda::Function:FunctionName:Resource:DestinationDeliveryFailures","name":"DestinationDeliveryFailures","defaultStat":"Sum"},{"id":"AWS::Lambda::Function:FunctionName:Resource:Duration","name":"Duration","defaultStat":"Average"},{"id":"AWS::Lambda::Function:FunctionName:Resource:Errors","name":"Errors","defaultStat":"Sum"},{"id":"AWS::Lambda::Function:FunctionName:Resource:Invocations","name":"Invocations","defaultStat":"Sum"},{"id":"AWS::Lambda::Function:FunctionName:Resource:IteratorAge","name":"IteratorAge","defaultStat":"Average"},{"id":"AWS::Lambda::Function:FunctionName:Resource:PostRuntimeExtensionsDuration","name":"PostRuntimeExtensionsDuration","defaultStat":"Average"},{"id":"AWS::Lambda::Function:FunctionName:Resource:ProvisionedConcurrencyInvocations","name":"ProvisionedConcurrencyInvocations","defaultStat":"Sum"},{"id":"AWS::Lambda::Function:FunctionName:Resource:ProvisionedConcurrencySpilloverInvocations","name":"ProvisionedConcurrencySpilloverInvocations","defaultStat":"Sum"},{"id":"AWS::Lambda::Function:FunctionName:Resource:ProvisionedConcurrencyUtilization","name":"ProvisionedConcurrencyUtilization","defaultStat":"Maximum"},{"id":"AWS::Lambda::Function:FunctionName:Resource:ProvisionedConcurrentExecutions","name":"ProvisionedConcurrentExecutions","defaultStat":"Maximum"},{"id":"AWS::Lambda::Function:FunctionName:Resource:Throttles","name":"Throttles","defaultStat":"Sum"},{"id":"AWS::Lambda::Function:FunctionName:Resource:UnreservedConcurrentExecutions","name":"UnreservedConcurrentExecutions","defaultStat":"Maximum"}]},{"resourceType":"AWS::Lambda::Function","id":"AWS::Lambda::Function:FunctionName:Resource:ExecutedVersion","namespace":"AWS/Lambda","dimensions":[{"dimensionName":"ExecutedVersion","labelName":"ExecutedVersion"},{"dimensionName":"FunctionName","labelName":"FunctionName"},{"dimensionName":"Resource","labelName":"Resource"}],"metrics":[{"id":"AWS::Lambda::Function:FunctionName:Resource:ExecutedVersion:ConcurrentExecutions","name":"ConcurrentExecutions","defaultStat":"Maximum"},{"id":"AWS::Lambda::Function:FunctionName:Resource:ExecutedVersion:DeadLetterErrors","name":"DeadLetterErrors","defaultStat":"Sum"},{"id":"AWS::Lambda::Function:FunctionName:Resource:ExecutedVersion:DestinationDeliveryFailures","name":"DestinationDeliveryFailures","defaultStat":"Sum"},{"id":"AWS::Lambda::Function:FunctionName:Resource:ExecutedVersion:Duration","name":"Duration","defaultStat":"Average"},{"id":"AWS::Lambda::Function:FunctionName:Resource:ExecutedVersion:Errors","name":"Errors","defaultStat":"Sum"},{"id":"AWS::Lambda::Function:FunctionName:Resource:ExecutedVersion:Invocations","name":"Invocations","defaultStat":"Sum"},{"id":"AWS::Lambda::Function:FunctionName:Resource:ExecutedVersion:IteratorAge","name":"IteratorAge","defaultStat":"Average"},{"id":"AWS::Lambda::Function:FunctionName:Resource:ExecutedVersion:PostRuntimeExtensionsDuration","name":"PostRuntimeExtensionsDuration","defaultStat":"Average"},{"id":"AWS::Lambda::Function:FunctionName:Resource:ExecutedVersion:ProvisionedConcurrencyInvocations","name":"ProvisionedConcurrencyInvocations","defaultStat":"Sum"},{"id":"AWS::Lambda::Function:FunctionName:Resource:ExecutedVersion:ProvisionedConcurrencySpilloverInvocations","name":"ProvisionedConcurrencySpilloverInvocations","defaultStat":"Sum"},{"id":"AWS::Lambda::Function:FunctionName:Resource:ExecutedVersion:ProvisionedConcurrencyUtilization","name":"ProvisionedConcurrencyUtilization","defaultStat":"Maximum"},{"id":"AWS::Lambda::Function:FunctionName:Resource:ExecutedVersion:ProvisionedConcurrentExecutions","name":"ProvisionedConcurrentExecutions","defaultStat":"Maximum"},{"id":"AWS::Lambda::Function:FunctionName:Resource:ExecutedVersion:Throttles","name":"Throttles","defaultStat":"Sum"},{"id":"AWS::Lambda::Function:FunctionName:Resource:ExecutedVersion:UnreservedConcurrentExecutions","name":"UnreservedConcurrentExecutions","defaultStat":"Maximum"}]},{"resourceType":"AWS::Lambda::Function","id":"AWS::Lambda::Function:AcrossAllFunctions","namespace":"AWS/Lambda","dimensions":[],"metrics":[{"id":"AWS::Lambda::Function:AcrossAllFunctions:ConcurrentExecutions","name":"ConcurrentExecutions","defaultStat":"Maximum"},{"id":"AWS::Lambda::Function:AcrossAllFunctions:DeadLetterErrors","name":"DeadLetterErrors","defaultStat":"Sum"},{"id":"AWS::Lambda::Function:AcrossAllFunctions:DestinationDeliveryFailures","name":"DestinationDeliveryFailures","defaultStat":"Sum"},{"id":"AWS::Lambda::Function:AcrossAllFunctions:Duration","name":"Duration","defaultStat":"Average"},{"id":"AWS::Lambda::Function:AcrossAllFunctions:Errors","name":"Errors","defaultStat":"Sum"},{"id":"AWS::Lambda::Function:AcrossAllFunctions:Invocations","name":"Invocations","defaultStat":"Sum"},{"id":"AWS::Lambda::Function:AcrossAllFunctions:IteratorAge","name":"IteratorAge","defaultStat":"Average"},{"id":"AWS::Lambda::Function:AcrossAllFunctions:PostRuntimeExtensionsDuration","name":"PostRuntimeExtensionsDuration","defaultStat":"Average"},{"id":"AWS::Lambda::Function:AcrossAllFunctions:ProvisionedConcurrencyInvocations","name":"ProvisionedConcurrencyInvocations","defaultStat":"Sum"},{"id":"AWS::Lambda::Function:AcrossAllFunctions:ProvisionedConcurrencySpilloverInvocations","name":"ProvisionedConcurrencySpilloverInvocations","defaultStat":"Sum"},{"id":"AWS::Lambda::Function:AcrossAllFunctions:ProvisionedConcurrencyUtilization","name":"ProvisionedConcurrencyUtilization","defaultStat":"Maximum"},{"id":"AWS::Lambda::Function:AcrossAllFunctions:ProvisionedConcurrentExecutions","name":"ProvisionedConcurrentExecutions","defaultStat":"Maximum"},{"id":"AWS::Lambda::Function:AcrossAllFunctions:Throttles","name":"Throttles","defaultStat":"Sum"},{"id":"AWS::Lambda::Function:AcrossAllFunctions:UnreservedConcurrentExecutions","name":"UnreservedConcurrentExecutions","defaultStat":"Maximum"}]}],"dashboards":[{"id":"Lambda:CrossService","name":"Lambda","dependencies":[{"namespace":"AWS/Lambda"}],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::Lambda::Function:Duration"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::Lambda::Function:Errors"}]}]}]},{"id":"Lambda","name":"Lambda","dependencies":[{"namespace":"AWS/Lambda"}],"controls":["Shared::View.AlarmState","Shared::Group.ResourceGroup","AWS::Lambda.functions"],"tables":[{"resourceType":"AWS::Lambda::Function","columns":["FunctionName","Description","Runtime","CodeSize","MemorySize","LastModified"]}],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::Lambda::Function:Invocations"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::Lambda::Function:Duration"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::Lambda::Function:Errors"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::Lambda::Function:Throttles"}]}]}]}]},{"id":"AWS::Lex","dashboard":"Lex","crossServiceDashboard":"Lex:CrossService","resourceTypes":[{"type":"AWS::Lex::BotAlias","keyMetric":"AWS::Lex::BotAlias:RuntimeRequestCount","dashboard":"Lex"}],"controls":{"AWS::Lex.botAliass":{"type":"resource","resourceType":"AWS::Lex::BotAlias","labelField":"BotAlias","valueField":"BotAlias"}},"metricTemplates":[{"resourceType":"AWS::Lex::BotAlias","namespace":"AWS/Lex","dimensions":[{"dimensionName":"BotAlias","labelName":"BotAlias"},{"dimensionName":"BotName","labelName":"BotName"},{"dimensionName":"Operation","labelName":"Operation"}],"metrics":[{"id":"AWS::Lex::BotAlias:RuntimeRequestCount","name":"RuntimeRequestCount","defaultStat":"Sum"},{"id":"AWS::Lex::BotAlias:RuntimeSuccessfulRequestLatency","name":"RuntimeSuccessfulRequestLatency","defaultStat":"Average"},{"id":"AWS::Lex::BotAlias:RuntimeInvalidLambdaResponses","name":"RuntimeInvalidLambdaResponses","defaultStat":"Sum"},{"id":"AWS::Lex::BotAlias:RuntimeLambdaErrors","name":"RuntimeLambdaErrors","defaultStat":"Sum"},{"id":"AWS::Lex::BotAlias:MissedUtteranceCount","name":"MissedUtteranceCount","defaultStat":"Sum"},{"id":"AWS::Lex::BotAlias:RuntimePollyErrors","name":"RuntimePollyErrors","defaultStat":"Sum"},{"id":"AWS::Lex::BotAlias:RuntimeSystemErrors","name":"RuntimeSystemErrors","defaultStat":"Sum"},{"id":"AWS::Lex::BotAlias:RuntimeThrottledEvents","name":"RuntimeThrottledEvents","defaultStat":"Sum"},{"id":"AWS::Lex::BotAlias:RuntimeUserErrors","name":"RuntimeUserErrors","defaultStat":"Sum"}]}],"dashboards":[{"id":"Lex:CrossService","name":"Lex","dependencies":[{"namespace":"AWS/Lex"}],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::Lex::BotAlias:RuntimeRequestCount"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::Lex::BotAlias:RuntimeSuccessfulRequestLatency"}]}]}]},{"id":"Lex","name":"Lex","dependencies":[{"namespace":"AWS/Lex"}],"controls":["Shared::View.AlarmState","Shared::Group.ResourceGroup","AWS::Lex.botAliass"],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::Lex::BotAlias:RuntimeRequestCount"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::Lex::BotAlias:RuntimeSuccessfulRequestLatency"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::Lex::BotAlias:RuntimeInvalidLambdaResponses"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::Lex::BotAlias:RuntimeLambdaErrors"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::Lex::BotAlias:MissedUtteranceCount"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::Lex::BotAlias:RuntimePollyErrors"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::Lex::BotAlias:RuntimeSystemErrors"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::Lex::BotAlias:RuntimeThrottledEvents"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::Lex::BotAlias:RuntimeUserErrors"}]}]}]}]},{"id":"AWS::Logs","dashboard":"Logs","crossServiceDashboard":"Logs:CrossService","resourceTypes":[{"type":"AWS::Logs::LogGroup","keyMetric":"AWS::Logs::LogGroup:IncomingLogEvents","dashboard":"Logs","arnRegex":".*:log-group:(.*)"}],"controls":{"AWS::Logs.logGroups":{"type":"resource","resourceType":"AWS::Logs::LogGroup","labelField":"LogGroupName","valueField":"LogGroupName"}},"metricTemplates":[{"resourceType":"AWS::Logs::LogGroup","namespace":"AWS/Logs","dimensions":[{"dimensionName":"LogGroupName","labelName":"LogGroupName"}],"metrics":[{"id":"AWS::Logs::LogGroup:IncomingLogEvents","name":"IncomingLogEvents","defaultStat":"Sum"},{"id":"AWS::Logs::LogGroup:IncomingBytes","name":"IncomingBytes","defaultStat":"Sum"}]}],"dashboards":[{"id":"Logs:CrossService","name":"CloudWatch Logs","dependencies":[{"namespace":"AWS/Logs"}],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::Logs::LogGroup:IncomingLogEvents"}]},{"type":"chart","properties":{"title":"DeliveryErrors Sum","legend":{"position":"right"}},"metrics":[{"metricExpression":"SEARCH(\'{AWS/Logs,LogGroupName,DestinationType,FilterName} MetricName=\\"DeliveryErrors\\"\', \'Sum\', 60)","resourceType":false}]}]}]},{"id":"Logs","name":"CloudWatch Logs","dependencies":[{"namespace":"AWS/Logs"}],"controls":["Shared::View.AlarmState","Shared::Group.ResourceGroup","AWS::Logs.logGroups"],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::Logs::LogGroup:IncomingLogEvents"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::Logs::LogGroup:IncomingBytes"}]}]}]}]},{"id":"AWS::Logs:Subscriptions","dashboard":"LogsSubscriptions","resourceTypes":[{"type":"AWS::Logs::Subscription","keyMetric":"AWS::Logs::Subscription:ForwardedLogEvents","dashboard":"LogsSubscriptions"}],"metricTemplates":[{"resourceType":"AWS::Logs::Subscription","namespace":"AWS/Logs","dimensions":[{"dimensionName":"LogGroupName","labelName":"LogGroupName"},{"dimensionName":"DestinationType","labelName":"DestinationType"},{"dimensionName":"FilterName","labelName":"FilterName"}],"metrics":[{"id":"AWS::Logs::Subscription:DeliveryErrors","name":"DeliveryErrors","defaultStat":"Sum"},{"id":"AWS::Logs::Subscription:DeliveryThrottling","name":"DeliveryThrottling","defaultStat":"Sum"},{"id":"AWS::Logs::Subscription:ForwardedBytes","name":"ForwardedBytes","defaultStat":"Sum"},{"id":"AWS::Logs::Subscription:ForwardedLogEvents","name":"ForwardedLogEvents","defaultStat":"Sum"},{"id":"AWS::Logs::Subscription:ThrottleCount","name":"ThrottleCount","defaultStat":"Sum"}]}],"dashboards":[{"id":"LogsSubscriptions","name":"CloudWatch Logs Subscriptions","dependencies":[{"namespace":"AWS/Logs"}],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::Logs::Subscription:ForwardedBytes"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::Logs::Subscription:ForwardedLogEvents"}]}]},{"widgets":[{"type":"chart","properties":{"title":"DeliveryErrors Sum","legend":{"position":"right"}},"metrics":[{"metricExpression":"SEARCH(\'{AWS/Logs,LogGroupName,DestinationType,FilterName} MetricName=\\"DeliveryErrors\\"\', \'Sum\', 60)","resourceType":false}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::Logs::Subscription:DeliveryThrottling"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::Logs::Subscription:ThrottleCount"}]}]}]}]},{"id":"AWS::MediaConvert::Queue","dashboard":"MediaConvert","crossServiceDashboard":"MediaConvert:CrossService","resourceTypes":[{"type":"AWS::MediaConvert::Queue","keyMetric":"AWS::MediaConvert::Queue:TranscodingTime","dashboard":"MediaConvert","arnRegex":".*:queues/(.*)"}],"metricTemplates":[{"resourceType":"AWS::MediaConvert::Queue","namespace":"AWS/MediaConvert","dimensions":[{"dimensionName":"Queue","labelName":"Queue"}],"metrics":[{"id":"AWS::MediaConvert::Queue:TranscodingTime","name":"TranscodingTime","defaultStat":"Average"},{"id":"AWS::MediaConvert::Queue:JobsCompletedCount","name":"JobsCompletedCount","defaultStat":"Sum"},{"id":"AWS::MediaConvert::Queue:8KOutputDuration","name":"8KOutputDuration","defaultStat":"Average"},{"id":"AWS::MediaConvert::Queue:AudioOutputDuration","name":"AudioOutputDuration","defaultStat":"Average"},{"id":"AWS::MediaConvert::Queue:HDOutputDuration","name":"HDOutputDuration","defaultStat":"Average"},{"id":"AWS::MediaConvert::Queue:JobsErroredCount","name":"JobsErroredCount","defaultStat":"Sum"},{"id":"AWS::MediaConvert::Queue:SDOutputDuration","name":"SDOutputDuration","defaultStat":"Average"},{"id":"AWS::MediaConvert::Queue:StandbyTime","name":"StandbyTime","defaultStat":"Sum"},{"id":"AWS::MediaConvert::Queue:UHDOutputDuration","name":"UHDOutputDuration","defaultStat":"Average"}]}],"dashboards":[{"id":"MediaConvert:CrossService","name":"MediaConvert","dependencies":[{"namespace":"AWS/MediaConvert"}],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::MediaConvert::Queue:TranscodingTime"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::MediaConvert::Queue:JobsCompletedCount"}]}]}]},{"id":"MediaConvert","name":"MediaConvert","dependencies":[{"namespace":"AWS/MediaConvert"}],"controls":["Shared::View.AlarmState","Shared::Group.ResourceGroup"],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::MediaConvert::Queue:TranscodingTime"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::MediaConvert::Queue:JobsCompletedCount"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::MediaConvert::Queue:8KOutputDuration"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::MediaConvert::Queue:AudioOutputDuration"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::MediaConvert::Queue:HDOutputDuration"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::MediaConvert::Queue:JobsErroredCount"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::MediaConvert::Queue:SDOutputDuration"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::MediaConvert::Queue:StandbyTime"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::MediaConvert::Queue:UHDOutputDuration"}]}]}]}]},{"id":"AWS::MediaLive","dashboard":"MediaLive","crossServiceDashboard":"MediaLive:CrossService","resourceTypes":[{"type":"AWS::MediaLive::Channel","keyMetric":"AWS::MediaLive::Channel:ActiveAlerts","dashboard":"MediaLive","arnRegex":".*:medialive:channel:(.*)"},{"type":"AWS::MediaLive::Channel:ActiveInputFailoverLabel","keyMetric":"AWS::MediaLive::Channel:ActiveInputFailoverLabel:InputVideoFrameRate","dashboard":"MediaLive"},{"type":"AWS::MediaLive::Channel:OutputGroupName","keyMetric":"AWS::MediaLive::Channel:OutputGroupName:ActiveOutputs","dashboard":"MediaLive"},{"type":"AWS::MediaLive::Channel:AudioDescriptionName","keyMetric":"AWS::MediaLive::Channel:AudioDescriptionName:AudioLevel","dashboard":"MediaLive"}],"controls":{"AWS::MediaLive.channel":{"type":"resource","resourceType":"AWS::MediaLive::Channel","labelField":"ChannelId","valueField":"ChannelId"}},"metricTemplates":[{"resourceType":"AWS::MediaLive::Channel","namespace":"AWS/MediaLive","dimensions":[{"dimensionName":"ChannelId","labelName":"ChannelId"},{"dimensionName":"Pipeline","labelName":"Pipeline"}],"metrics":[{"id":"AWS::MediaLive::Channel:ActiveAlerts","name":"ActiveAlerts","defaultStat":"Maximum"},{"id":"AWS::MediaLive::Channel:InputVideoFrameRate","name":"InputVideoFrameRate","defaultStat":"Average"},{"id":"AWS::MediaLive::Channel:FillMsec","name":"FillMsec","defaultStat":"Average"},{"id":"AWS::MediaLive::Channel:InputLossSeconds","name":"InputLossSeconds","defaultStat":"Sum"},{"id":"AWS::MediaLive::Channel:RtpPacketsReceived","name":"RtpPacketsReceived","defaultStat":"Sum"},{"id":"AWS::MediaLive::Channel:RtpPacketsRecoveredViaFec","name":"RtpPacketsRecoveredViaFec","defaultStat":"Sum"},{"id":"AWS::MediaLive::Channel:RtpPacketsLost","name":"RtpPacketsLost","defaultStat":"Sum"},{"id":"AWS::MediaLive::Channel:FecRowPacketsReceived","name":"FecRowPacketsReceived","defaultStat":"Sum"},{"id":"AWS::MediaLive::Channel:FecColumnPacketsReceived","name":"FecColumnPacketsReceived","defaultStat":"Sum"},{"id":"AWS::MediaLive::Channel:PrimaryInputActive","name":"PrimaryInputActive","defaultStat":"Minimum"},{"id":"AWS::MediaLive::Channel:NetworkIn","name":"NetworkIn","defaultStat":"Average"},{"id":"AWS::MediaLive::Channel:NetworkOut","name":"NetworkOut","defaultStat":"Average"},{"id":"AWS::MediaLive::Channel:PipelinesLocked","name":"PipelinesLocked","defaultStat":"Minimum"},{"id":"AWS::MediaLive::Channel:InputTimecodesPresent","name":"InputTimecodesPresent","defaultStat":"Minimum"}]},{"resourceType":"AWS::MediaLive::Channel:ActiveInputFailoverLabel","namespace":"AWS/MediaLive","dimensions":[{"dimensionName":"ActiveInputFailoverLabel","labelName":"ActiveInputFailoverLabel"},{"dimensionName":"ChannelId","labelName":"ChannelId"},{"dimensionName":"Pipeline","labelName":"Pipeline"}],"metrics":[{"id":"AWS::MediaLive::Channel:ActiveInputFailoverLabel:InputVideoFrameRate","name":"InputVideoFrameRate","defaultStat":"Average"},{"id":"AWS::MediaLive::Channel:ActiveInputFailoverLabel:InputLossSeconds","name":"InputLossSeconds","defaultStat":"Sum"},{"id":"AWS::MediaLive::Channel:ActiveInputFailoverLabel:RtpPacketsReceived","name":"RtpPacketsReceived","defaultStat":"Sum"},{"id":"AWS::MediaLive::Channel:ActiveInputFailoverLabel:RtpPacketsRecoveredViaFec","name":"RtpPacketsRecoveredViaFec","defaultStat":"Sum"},{"id":"AWS::MediaLive::Channel:ActiveInputFailoverLabel:RtpPacketsLost","name":"RtpPacketsLost","defaultStat":"Sum"},{"id":"AWS::MediaLive::Channel:ActiveInputFailoverLabel:FecRowPacketsReceived","name":"FecRowPacketsReceived","defaultStat":"Sum"},{"id":"AWS::MediaLive::Channel:ActiveInputFailoverLabel:FecColumnPacketsReceived","name":"FecColumnPacketsReceived","defaultStat":"Sum"},{"id":"AWS::MediaLive::Channel:ActiveInputFailoverLabel:InputTimecodesPresent","name":"InputTimecodesPresent","defaultStat":"Minimum"}]},{"resourceType":"AWS::MediaLive::Channel:OutputGroupName","namespace":"AWS/MediaLive","dimensions":[{"dimensionName":"OutputGroupName","labelName":"OutputGroupName"},{"dimensionName":"ChannelId","labelName":"ChannelId"},{"dimensionName":"Pipeline","labelName":"Pipeline"}],"metrics":[{"id":"AWS::MediaLive::Channel:OutputGroupName:ActiveOutputs","name":"ActiveOutputs","defaultStat":"Maximum"},{"id":"AWS::MediaLive::Channel:OutputGroupName:Output4xxErrors","name":"Output4xxErrors","defaultStat":"Sum"},{"id":"AWS::MediaLive::Channel:OutputGroupName:Output5xxErrors","name":"Output5xxErrors","defaultStat":"Sum"}]},{"resourceType":"AWS::MediaLive::Channel:AudioDescriptionName","namespace":"AWS/MediaLive","dimensions":[{"dimensionName":"AudioDescriptionName","labelName":"AudioDescriptionName"},{"dimensionName":"ChannelId","labelName":"ChannelId"},{"dimensionName":"Pipeline","labelName":"Pipeline"}],"metrics":[{"id":"AWS::MediaLive::Channel:AudioDescriptionName:AudioLevel","name":"AudioLevel","defaultStat":"Maximum"},{"id":"AWS::MediaLive::Channel:AudioDescriptionName:OutputAudioLevelDbfs","name":"OutputAudioLevelDbfs","defaultStat":"Maximum"},{"id":"AWS::MediaLive::Channel:AudioDescriptionName:OutputAudioLevelLkfs","name":"OutputAudioLevelLkfs","defaultStat":"Maximum"}]}],"dashboards":[{"id":"MediaLive:CrossService","name":"MediaLive","dependencies":[{"namespace":"AWS/MediaLive"}],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::MediaLive::Channel:ActiveAlerts"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::MediaLive::Channel:InputVideoFrameRate"}]}]}]},{"id":"MediaLive","name":"MediaLive","dependencies":[{"namespace":"AWS/MediaLive"}],"controls":["Shared::View.AlarmState","Shared::Group.ResourceGroup","AWS::MediaLive.channel"],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::MediaLive::Channel:ActiveAlerts"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::MediaLive::Channel:InputVideoFrameRate"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::MediaLive::Channel:ActiveInputFailoverLabel:InputVideoFrameRate"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::MediaLive::Channel:FillMsec"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::MediaLive::Channel:InputLossSeconds"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::MediaLive::Channel:ActiveInputFailoverLabel:InputLossSeconds"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::MediaLive::Channel:RtpPacketsReceived"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::MediaLive::Channel:ActiveInputFailoverLabel:RtpPacketsReceived"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::MediaLive::Channel:RtpPacketsRecoveredViaFec"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::MediaLive::Channel:ActiveInputFailoverLabel:RtpPacketsRecoveredViaFec"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::MediaLive::Channel:RtpPacketsLost"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::MediaLive::Channel:ActiveInputFailoverLabel:RtpPacketsLost"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::MediaLive::Channel:FecRowPacketsReceived"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::MediaLive::Channel:ActiveInputFailoverLabel:FecRowPacketsReceived"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::MediaLive::Channel:FecColumnPacketsReceived"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::MediaLive::Channel:ActiveInputFailoverLabel:FecColumnPacketsReceived"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::MediaLive::Channel:OutputGroupName:ActiveOutputs"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::MediaLive::Channel:OutputGroupName:Output4xxErrors"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::MediaLive::Channel:OutputGroupName:Output5xxErrors"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::MediaLive::Channel:PrimaryInputActive"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::MediaLive::Channel:NetworkIn"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::MediaLive::Channel:NetworkOut"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::MediaLive::Channel:AudioDescriptionName:OutputAudioLevelDbfs"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::MediaLive::Channel:AudioDescriptionName:OutputAudioLevelLkfs"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::MediaLive::Channel:PipelinesLocked"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::MediaLive::Channel:InputTimecodesPresent"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::MediaLive::Channel:ActiveInputFailoverLabel:InputTimecodesPresent"}]}]}]}]},{"id":"AWS::MediaPackage","dashboard":"MediaPackage","crossServiceDashboard":"MediaPackage:CrossService","resourceTypes":[{"type":"AWS::MediaPackage::Channel","keyMetric":"AWS::MediaPackage::Channel:EgressRequestCount","arnRegex":".*:channels/(.*)"},{"type":"CW::MediaPackage::Channel","keyMetric":"CW::MediaPackage::Channel:EgressRequestCount","dashboard":"MediaPackage","arnRegex":".*:channels/(.*)"}],"controls":{"AWS::MediaPackage.channels":{"type":"resource","resourceType":"CW::MediaPackage::Channel","labelField":"Channel","valueField":"Channel"}},"metricTemplates":[{"resourceType":"AWS::MediaPackage::Channel","namespace":"AWS/MediaPackage","dimensions":[{"dimensionName":"Channel","labelName":"Channel"}],"metrics":[{"id":"AWS::MediaPackage::Channel:EgressRequestCount","name":"EgressRequestCount","defaultStat":"Sum"},{"id":"AWS::MediaPackage::Channel:EgressResponseTime","name":"EgressResponseTime","defaultStat":"Average"},{"id":"AWS::MediaPackage::Channel:EgressBytes","name":"EgressBytes","defaultStat":"Sum"}]},{"resourceType":"CW::MediaPackage::Channel","namespace":"AWS/MediaPackage","dimensions":[{"dimensionName":"Channel","labelName":"Channel"},{"dimensionName":"OriginEndpoint","labelName":"OriginEndpoint"}],"metrics":[{"id":"CW::MediaPackage::Channel:EgressRequestCount","name":"EgressRequestCount","defaultStat":"Sum"},{"id":"CW::MediaPackage::Channel:EgressResponseTime","name":"EgressResponseTime","defaultStat":"Average"},{"id":"CW::MediaPackage::Channel:EgressBytes","name":"EgressBytes","defaultStat":"Sum"}]}],"dashboards":[{"id":"MediaPackage:CrossService","name":"MediaPackage","dependencies":[{"namespace":"AWS/MediaPackage"}],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"CW::MediaPackage::Channel:EgressRequestCount"}]},{"type":"chart","metrics":[{"metricTemplate":"CW::MediaPackage::Channel:EgressResponseTime"}]}]}]},{"id":"MediaPackage","name":"MediaPackage","dependencies":[{"namespace":"AWS/MediaPackage"}],"controls":["Shared::View.AlarmState","Shared::Group.ResourceGroup","AWS::MediaPackage.channels"],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"CW::MediaPackage::Channel:EgressRequestCount"}]},{"type":"chart","metrics":[{"metricTemplate":"CW::MediaPackage::Channel:EgressResponseTime"}]},{"type":"chart","metrics":[{"metricTemplate":"CW::MediaPackage::Channel:EgressBytes"}]}]}]}]},{"id":"AWS::MediaStore::Container","dashboard":"MediaStore","crossServiceDashboard":"MediaStore:CrossService","resourceTypes":[{"type":"AWS::MediaStore::Container","keyMetric":"AWS::MediaStore::Container:RequestCount","dashboard":"MediaStore","arnRegex":".*:container/(.*)"}],"metricTemplates":[{"resourceType":"AWS::MediaStore::Container","namespace":"AWS/MediaStore","dimensions":[{"dimensionName":"ContainerName","labelName":"ContainerName"}],"metrics":[{"id":"AWS::MediaStore::Container:RequestCount","name":"RequestCount","defaultStat":"Sum"},{"id":"AWS::MediaStore::Container:TurnaroundTime","name":"TurnaroundTime","defaultStat":"Average"},{"id":"AWS::MediaStore::Container:4xxErrorCount","name":"4xxErrorCount","defaultStat":"Sum"},{"id":"AWS::MediaStore::Container:5xxErrorCount","name":"5xxErrorCount","defaultStat":"Sum"},{"id":"AWS::MediaStore::Container:BytesDownloaded","name":"BytesDownloaded","defaultStat":"Sum"},{"id":"AWS::MediaStore::Container:BytesUploaded","name":"BytesUploaded","defaultStat":"Sum"},{"id":"AWS::MediaStore::Container:TotalTime","name":"TotalTime","defaultStat":"Average"}]}],"dashboards":[{"id":"MediaStore:CrossService","name":"MediaStore","dependencies":[{"namespace":"AWS/MediaStore"}],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::MediaStore::Container:RequestCount"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::MediaStore::Container:TurnaroundTime"}]}]}]},{"id":"MediaStore","name":"MediaStore","dependencies":[{"namespace":"AWS/MediaStore"}],"controls":["Shared::View.AlarmState","Shared::Group.ResourceGroup"],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::MediaStore::Container:RequestCount"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::MediaStore::Container:TurnaroundTime"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::MediaStore::Container:4xxErrorCount"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::MediaStore::Container:5xxErrorCount"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::MediaStore::Container:BytesDownloaded"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::MediaStore::Container:BytesUploaded"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::MediaStore::Container:TotalTime"}]}]}]}]},{"id":"AWS::MediaTailor","dashboard":"MediaTailor","crossServiceDashboard":"MediaTailor:CrossService","resourceTypes":[{"type":"AWS::MediaTailor::Configuration","keyMetric":"AWS::MediaTailor::Configuration:AdDecisionServer.Ads","dashboard":"MediaTailor"}],"controls":{"AWS::MediaTailor.configurations":{"type":"resource","resourceType":"AWS::MediaTailor::Configuration","labelField":"ConfigurationName","valueField":"ConfigurationName"}},"metricTemplates":[{"resourceType":"AWS::MediaTailor::Configuration","namespace":"AWS/MediaTailor","dimensions":[{"dimensionName":"ConfigurationName","labelName":"ConfigurationName"}],"metrics":[{"id":"AWS::MediaTailor::Configuration:AdDecisionServer.Ads","name":"AdDecisionServer.Ads","defaultStat":"Sum"},{"id":"AWS::MediaTailor::Configuration:AdDecisionServer.Duration","name":"AdDecisionServer.Duration","defaultStat":"Average"},{"id":"AWS::MediaTailor::Configuration:AdDecisionServer.Errors","name":"AdDecisionServer.Errors","defaultStat":"Sum"},{"id":"AWS::MediaTailor::Configuration:AdDecisionServer.FillRate","name":"AdDecisionServer.FillRate","defaultStat":"Sum"},{"id":"AWS::MediaTailor::Configuration:AdDecisionServer.Latency","name":"AdDecisionServer.Latency","defaultStat":"Average"},{"id":"AWS::MediaTailor::Configuration:AdNotReady","name":"AdNotReady","defaultStat":"Sum"},{"id":"AWS::MediaTailor::Configuration:Avail.Duration","name":"Avail.Duration","defaultStat":"Sum"},{"id":"AWS::MediaTailor::Configuration:Avail.FillRate","name":"Avail.FillRate","defaultStat":"Sum"},{"id":"AWS::MediaTailor::Configuration:Avail.FilledDuration","name":"Avail.FilledDuration","defaultStat":"Average"},{"id":"AWS::MediaTailor::Configuration:GetManifest.Errors","name":"GetManifest.Errors","defaultStat":"Sum"},{"id":"AWS::MediaTailor::Configuration:GetManifest.Latency","name":"GetManifest.Latency","defaultStat":"Average"},{"id":"AWS::MediaTailor::Configuration:Origin.Errors","name":"Origin.Errors","defaultStat":"Sum"},{"id":"AWS::MediaTailor::Configuration:Origin.Latency","name":"Origin.Latency","defaultStat":"Average"}]}],"dashboards":[{"id":"MediaTailor:CrossService","name":"MediaTailor","dependencies":[{"namespace":"AWS/MediaTailor"}],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::MediaTailor::Configuration:AdDecisionServer.Ads"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::MediaTailor::Configuration:AdDecisionServer.Duration"}]}]}]},{"id":"MediaTailor","name":"MediaTailor","dependencies":[{"namespace":"AWS/MediaTailor"}],"controls":["Shared::View.AlarmState","Shared::Group.ResourceGroup","AWS::MediaTailor.configurations"],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::MediaTailor::Configuration:AdDecisionServer.Ads"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::MediaTailor::Configuration:AdDecisionServer.Duration"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::MediaTailor::Configuration:AdDecisionServer.Errors"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::MediaTailor::Configuration:AdDecisionServer.FillRate"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::MediaTailor::Configuration:AdDecisionServer.Latency"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::MediaTailor::Configuration:AdNotReady"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::MediaTailor::Configuration:Avail.Duration"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::MediaTailor::Configuration:Avail.FillRate"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::MediaTailor::Configuration:Avail.FilledDuration"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::MediaTailor::Configuration:GetManifest.Errors"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::MediaTailor::Configuration:GetManifest.Latency"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::MediaTailor::Configuration:Origin.Errors"}]}]},{"widgets":[{"type":"chart","width":8,"metrics":[{"metricTemplate":"AWS::MediaTailor::Configuration:Origin.Latency"}]}]}]}]},{"id":"AWS::MetricStreams","dashboard":"MetricStreams","crossServiceDashboard":"MetricStreams:CrossService","resourceTypes":[{"type":"AWS::CloudWatch::MetricStream","keyMetric":"AWS::CloudWatch::MetricStream:MetricUpdate","arnRegex":".*:metric-stream/(.*)","dashboard":"MetricStreams"}],"controls":{"AWS::MetricStreams.streams":{"type":"resource","resourceType":"AWS::CloudWatch::MetricStream","labelField":"MetricStreamName","valueField":"MetricStreamName"}},"metricTemplates":[{"resourceType":"AWS::CloudWatch::MetricStream","namespace":"AWS/CloudWatch/MetricStreams","dimensions":[{"dimensionName":"MetricStreamName","labelName":"MetricStreamName"}],"metrics":[{"id":"AWS::CloudWatch::MetricStream:MetricUpdate","name":"MetricUpdate","defaultStat":"Sum"},{"id":"AWS::CloudWatch::MetricStream:PublishErrorRate","name":"PublishErrorRate","defaultStat":"Average"}]}],"dashboards":[{"id":"MetricStreams:CrossService","name":"Metric Streams","dependencies":[{"namespace":"AWS/CloudWatch/MetricStreams"}],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::CloudWatch::MetricStream:MetricUpdate"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::CloudWatch::MetricStream:PublishErrorRate"}]}]}]},{"id":"MetricStreams","name":"Metric Streams","dependencies":[{"namespace":"AWS/CloudWatch/MetricStreams"}],"controls":["Shared::View.AlarmState","Shared::Group.ResourceGroup","AWS::MetricStreams.streams"],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::CloudWatch::MetricStream:MetricUpdate"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::CloudWatch::MetricStream:PublishErrorRate"}]}]}]}]},{"id":"AWS::MGN","dashboard":"MGN","crossServiceDashboard":"MGN:CrossService","resourceTypes":[{"type":"AWS::MGN::SourceServer","keyMetric":"AWS::MGN::SourceServer:LagDuration","dashboard":"MGN","arnRegex":".*:source-server/(.*)"},{"type":"AWS::MGN::SourceServer:AcrossAllServers","keyMetric":"AWS::MGN::SourceServer:AcrossAllServers:ActiveSourceServerCount","dashboard":"MGN"}],"metricTemplates":[{"resourceType":"AWS::MGN::SourceServer","namespace":"AWS/MGN","dimensions":[{"dimensionName":"SourceServerID","labelName":"SourceServerID"}],"metrics":[{"id":"AWS::MGN::SourceServer:LagDuration","name":"LagDuration","defaultStat":"Average"},{"id":"AWS::MGN::SourceServer:Backlog","name":"Backlog","defaultStat":"Average"},{"id":"AWS::MGN::SourceServer:DurationSinceLastTest","name":"DurationSinceLastTest","defaultStat":"Maximum"},{"id":"AWS::MGN::SourceServer:ElapsedReplicationDuration","name":"ElapsedReplicationDuration","defaultStat":"Maximum"}]},{"resourceType":"AWS::MGN::SourceServer:AcrossAllServers","namespace":"AWS/MGN","dimensions":[],"metrics":[{"id":"AWS::MGN::SourceServer:AcrossAllServers:ActiveSourceServerCount","name":"ActiveSourceServerCount","defaultStat":"Average"},{"id":"AWS::MGN::SourceServer:AcrossAllServers:TotalSourceServerCount","name":"TotalSourceServerCount","defaultStat":"Average"}]}],"dashboards":[{"id":"MGN:CrossService","name":"Application Migration Service","dependencies":[{"namespace":"AWS/MGN"}],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::MGN::SourceServer:LagDuration"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::MGN::SourceServer:AcrossAllServers:ActiveSourceServerCount"}]}]}]},{"id":"MGN","name":"Application Migration Service","dependencies":[{"namespace":"AWS/MGN"}],"controls":["Shared::View.AlarmState","Shared::Group.ResourceGroup"],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::MGN::SourceServer:LagDuration"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::MGN::SourceServer:Backlog"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::MGN::SourceServer:DurationSinceLastTest"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::MGN::SourceServer:ElapsedReplicationDuration"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::MGN::SourceServer:AcrossAllServers:ActiveSourceServerCount"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::MGN::SourceServer:AcrossAllServers:TotalSourceServerCount"}]}]}]}]},{"id":"AWS::EC2::NATGateway","dashboard":"NATGateway","crossServiceDashboard":"NATGateway:CrossService","resourceTypes":[{"type":"AWS::EC2::NatGateway","keyMetric":"AWS::EC2::NatGateway:ActiveConnectionCount","dashboard":"NATGateway","arnRegex":".*:natgateway/(.*)"}],"controls":{"AWS::EC2::NATGateway.natGateways":{"type":"resource","resourceType":"AWS::EC2::NatGateway","labelField":"NatGatewayId","valueField":"NatGatewayId"}},"metricTemplates":[{"resourceType":"AWS::EC2::NatGateway","namespace":"AWS/NATGateway","dimensions":[{"dimensionName":"NatGatewayId","labelName":"NatGatewayId"}],"metrics":[{"id":"AWS::EC2::NatGateway:ActiveConnectionCount","name":"ActiveConnectionCount","defaultStat":"Maximum"},{"id":"AWS::EC2::NatGateway:PacketsDropCount","name":"PacketsDropCount","defaultStat":"Sum"},{"id":"AWS::EC2::NatGateway:BytesInFromDestination","name":"BytesInFromDestination","defaultStat":"Sum"},{"id":"AWS::EC2::NatGateway:BytesInFromSource","name":"BytesInFromSource","defaultStat":"Sum"},{"id":"AWS::EC2::NatGateway:BytesOutToDestination","name":"BytesOutToDestination","defaultStat":"Sum"},{"id":"AWS::EC2::NatGateway:BytesOutToSource","name":"BytesOutToSource","defaultStat":"Sum"},{"id":"AWS::EC2::NatGateway:ConnectionAttemptCount","name":"ConnectionAttemptCount","defaultStat":"Sum"},{"id":"AWS::EC2::NatGateway:ConnectionEstablishedCount","name":"ConnectionEstablishedCount","defaultStat":"Sum"},{"id":"AWS::EC2::NatGateway:ErrorPortAllocation","name":"ErrorPortAllocation","defaultStat":"Sum"},{"id":"AWS::EC2::NatGateway:IdleTimeoutCount","name":"IdleTimeoutCount","defaultStat":"Sum"},{"id":"AWS::EC2::NatGateway:PacketsInFromDestination","name":"PacketsInFromDestination","defaultStat":"Sum"},{"id":"AWS::EC2::NatGateway:PacketsInFromSource","name":"PacketsInFromSource","defaultStat":"Sum"},{"id":"AWS::EC2::NatGateway:PacketsOutToDestination","name":"PacketsOutToDestination","defaultStat":"Sum"},{"id":"AWS::EC2::NatGateway:PacketsOutToSource","name":"PacketsOutToSource","defaultStat":"Sum"}]}],"dashboards":[{"id":"NATGateway:CrossService","name":"VPC NAT Gateways","dependencies":[{"namespace":"AWS/NATGateway"}],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::EC2::NatGateway:ActiveConnectionCount"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::EC2::NatGateway:PacketsDropCount"}]}]}]},{"id":"NATGateway","name":"VPC NAT Gateways","dependencies":[{"namespace":"AWS/NATGateway"}],"controls":["Shared::View.AlarmState","Shared::Group.ResourceGroup","AWS::EC2::NATGateway.natGateways"],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::EC2::NatGateway:ActiveConnectionCount"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::EC2::NatGateway:PacketsDropCount"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::EC2::NatGateway:BytesInFromDestination"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::EC2::NatGateway:BytesInFromSource"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::EC2::NatGateway:BytesOutToDestination"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::EC2::NatGateway:BytesOutToSource"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::EC2::NatGateway:ConnectionAttemptCount"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::EC2::NatGateway:ConnectionEstablishedCount"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::EC2::NatGateway:ErrorPortAllocation"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::EC2::NatGateway:IdleTimeoutCount"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::EC2::NatGateway:PacketsInFromDestination"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::EC2::NatGateway:PacketsInFromSource"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::EC2::NatGateway:PacketsOutToDestination"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::EC2::NatGateway:PacketsOutToSource"}]}]}]}]},{"id":"AWS::Neptune","dashboard":"Neptune","crossServiceDashboard":"Neptune:CrossService","resourceTypes":[{"type":"AWS::Neptune::DBCluster","keyMetric":"AWS::Neptune::DBCluster:CPUUtilization","dashboard":"Neptune"}],"controls":{"AWS::Neptune.dBClusters":{"type":"resource","resourceType":"AWS::Neptune::DBCluster","labelField":"DBClusterIdentifier","valueField":"DBClusterIdentifier"}},"metricTemplates":[{"resourceType":"AWS::Neptune::DBCluster","namespace":"AWS/Neptune","dimensions":[{"dimensionName":"DBClusterIdentifier","labelName":"DBClusterIdentifier"}],"metrics":[{"id":"AWS::Neptune::DBCluster:CPUUtilization","name":"CPUUtilization","defaultStat":"Average"},{"id":"AWS::Neptune::DBCluster:FreeLocalStorage","name":"FreeLocalStorage","defaultStat":"Minimum"},{"id":"AWS::Neptune::DBCluster:FreeableMemory","name":"FreeableMemory","defaultStat":"Minimum"},{"id":"AWS::Neptune::DBCluster:GremlinErrors","name":"GremlinErrors","defaultStat":"Sum"},{"id":"AWS::Neptune::DBCluster:GremlinRequests","name":"GremlinRequests","defaultStat":"Sum"},{"id":"AWS::Neptune::DBCluster:GremlinRequestsPerSec","name":"GremlinRequestsPerSec","defaultStat":"Average"},{"id":"AWS::Neptune::DBCluster:Http413","name":"Http413","defaultStat":"Sum"},{"id":"AWS::Neptune::DBCluster:Http500","name":"Http500","defaultStat":"Sum"},{"id":"AWS::Neptune::DBCluster:LoaderRequests","name":"LoaderRequests","defaultStat":"Sum"},{"id":"AWS::Neptune::DBCluster:NetworkReceiveThroughput","name":"NetworkReceiveThroughput","defaultStat":"Sum"},{"id":"AWS::Neptune::DBCluster:SparqlErrors","name":"SparqlErrors","defaultStat":"Sum"},{"id":"AWS::Neptune::DBCluster:SparqlRequestsPerSec","name":"SparqlRequestsPerSec","defaultStat":"Sum"},{"id":"AWS::Neptune::DBCluster:VolumeBytesUsed","name":"VolumeBytesUsed","defaultStat":"Sum"},{"id":"AWS::Neptune::DBCluster:VolumeReadIOPs","name":"VolumeReadIOPs","defaultStat":"Sum"},{"id":"AWS::Neptune::DBCluster:VolumeWriteIOPs","name":"VolumeWriteIOPs","defaultStat":"Sum"}]}],"dashboards":[{"id":"Neptune:CrossService","name":"Neptune","dependencies":[{"namespace":"AWS/Neptune"}],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::Neptune::DBCluster:CPUUtilization"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::Neptune::DBCluster:FreeLocalStorage"}]}]}]},{"id":"Neptune","name":"Neptune","dependencies":[{"namespace":"AWS/Neptune"}],"controls":["Shared::View.AlarmState","Shared::Group.ResourceGroup","AWS::Neptune.dBClusters"],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::Neptune::DBCluster:CPUUtilization"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::Neptune::DBCluster:FreeLocalStorage"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::Neptune::DBCluster:FreeableMemory"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::Neptune::DBCluster:GremlinErrors"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::Neptune::DBCluster:GremlinRequests"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::Neptune::DBCluster:GremlinRequestsPerSec"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::Neptune::DBCluster:Http413"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::Neptune::DBCluster:Http500"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::Neptune::DBCluster:LoaderRequests"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::Neptune::DBCluster:NetworkReceiveThroughput"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::Neptune::DBCluster:SparqlErrors"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::Neptune::DBCluster:SparqlRequestsPerSec"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::Neptune::DBCluster:VolumeBytesUsed"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::Neptune::DBCluster:VolumeReadIOPs"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::Neptune::DBCluster:VolumeWriteIOPs"}]}]}]}]},{"id":"AWS::NetworkELB","dashboard":"NetworkELB","crossServiceDashboard":"NetworkELB:CrossService","resourceTypes":[{"type":"AWS::ElasticLoadBalancingV2::LoadBalancer/NetworkELB","entityType":"AWS::ElasticLoadBalancingV2::LoadBalancer","keyMetric":"AWS::ElasticLoadBalancingV2::LoadBalancer/NetworkELB:ConsumedLCUs","dashboard":"NetworkELB","arnRegex":".*:loadbalancer/(net/.*)"},{"type":"AWS::ElasticLoadBalancingV2::LoadBalancer/NetworkELB:LoadBalancer:TargetGroup","entityType":"AWS::ElasticLoadBalancingV2::LoadBalancer","keyMetric":"AWS::ElasticLoadBalancingV2::LoadBalancer/NetworkELB:LoadBalancer:TargetGroup:HealthyHostCount","dashboard":"NetworkELB","arnRegex":".*:loadbalancer/(net/.*)"}],"controls":{"AWS::NetworkELB.loadBalancers":{"type":"resource","resourceType":"AWS::ElasticLoadBalancingV2::LoadBalancer/NetworkELB","labelField":"LoadBalancer","valueField":"LoadBalancer"}},"metricTemplates":[{"resourceType":"AWS::ElasticLoadBalancingV2::LoadBalancer/NetworkELB","namespace":"AWS/NetworkELB","dimensions":[{"dimensionName":"LoadBalancer","labelName":"LoadBalancer"}],"metrics":[{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/NetworkELB:ActiveFlowCount","name":"ActiveFlowCount","defaultStat":"Average"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/NetworkELB:ActiveFlowCount_TCP","name":"ActiveFlowCount_TCP","defaultStat":"Average"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/NetworkELB:ActiveFlowCount_TLS","name":"ActiveFlowCount_TLS","defaultStat":"Average"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/NetworkELB:ActiveFlowCount_UDP","name":"ActiveFlowCount_UDP","defaultStat":"Average"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/NetworkELB:ClientTLSNegotiationErrorCount","name":"ClientTLSNegotiationErrorCount","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/NetworkELB:ConsumedLCUs","name":"ConsumedLCUs","defaultStat":"Average"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/NetworkELB:ConsumedLCUs_TCP","name":"ConsumedLCUs_TCP","defaultStat":"Average"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/NetworkELB:ConsumedLCUs_TLS","name":"ConsumedLCUs_TLS","defaultStat":"Average"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/NetworkELB:ConsumedLCUs_UDP","name":"ConsumedLCUs_UDP","defaultStat":"Average"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/NetworkELB:NewFlowCount","name":"NewFlowCount","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/NetworkELB:NewFlowCount_TCP","name":"NewFlowCount_TCP","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/NetworkELB:NewFlowCount_TLS","name":"NewFlowCount_TLS","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/NetworkELB:NewFlowCount_UDP","name":"NewFlowCount_UDP","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/NetworkELB:ProcessedBytes","name":"ProcessedBytes","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/NetworkELB:ProcessedBytes_TCP","name":"ProcessedBytes_TCP","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/NetworkELB:ProcessedBytes_TLS","name":"ProcessedBytes_TLS","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/NetworkELB:ProcessedBytes_UDP","name":"ProcessedBytes_UDP","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/NetworkELB:TargetTLSNegotiationErrorCount","name":"TargetTLSNegotiationErrorCount","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/NetworkELB:TCP_Client_Reset_Count","name":"TCP_Client_Reset_Count","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/NetworkELB:TCP_ELB_Reset_Count","name":"TCP_ELB_Reset_Count","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/NetworkELB:TCP_Target_Reset_Count","name":"TCP_Target_Reset_Count","defaultStat":"Sum"}]},{"resourceType":"AWS::ElasticLoadBalancingV2::LoadBalancer/NetworkELB","id":"AWS::ElasticLoadBalancingV2::LoadBalancer/NetworkELB:AvailabilityZone:LoadBalancer","namespace":"AWS/NetworkELB","dimensions":[{"dimensionName":"AvailabilityZone","labelName":"AvailabilityZone"},{"dimensionName":"LoadBalancer","labelName":"LoadBalancer"}],"metrics":[{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/NetworkELB:AvailabilityZone:LoadBalancer:ActiveFlowCount","name":"ActiveFlowCount","defaultStat":"Average"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/NetworkELB:AvailabilityZone:LoadBalancer:ActiveFlowCount_TCP","name":"ActiveFlowCount_TCP","defaultStat":"Average"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/NetworkELB:AvailabilityZone:LoadBalancer:ActiveFlowCount_TLS","name":"ActiveFlowCount_TLS","defaultStat":"Average"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/NetworkELB:AvailabilityZone:LoadBalancer:ActiveFlowCount_UDP","name":"ActiveFlowCount_UDP","defaultStat":"Average"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/NetworkELB:AvailabilityZone:LoadBalancer:ClientTLSNegotiationErrorCount","name":"ClientTLSNegotiationErrorCount","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/NetworkELB:AvailabilityZone:LoadBalancer:NewFlowCount","name":"NewFlowCount","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/NetworkELB:AvailabilityZone:LoadBalancer:NewFlowCount_TCP","name":"NewFlowCount_TCP","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/NetworkELB:AvailabilityZone:LoadBalancer:NewFlowCount_TLS","name":"NewFlowCount_TLS","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/NetworkELB:AvailabilityZone:LoadBalancer:NewFlowCount_UDP","name":"NewFlowCount_UDP","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/NetworkELB:AvailabilityZone:LoadBalancer:ProcessedBytes","name":"ProcessedBytes","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/NetworkELB:AvailabilityZone:LoadBalancer:ProcessedBytes_TCP","name":"ProcessedBytes_TCP","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/NetworkELB:AvailabilityZone:LoadBalancer:ProcessedBytes_TLS","name":"ProcessedBytes_TLS","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/NetworkELB:AvailabilityZone:LoadBalancer:ProcessedBytes_UDP","name":"ProcessedBytes_UDP","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/NetworkELB:AvailabilityZone:LoadBalancer:TargetTLSNegotiationErrorCount","name":"TargetTLSNegotiationErrorCount","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/NetworkELB:AvailabilityZone:LoadBalancer:TCP_Client_Reset_Count","name":"TCP_Client_Reset_Count","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/NetworkELB:AvailabilityZone:LoadBalancer:TCP_ELB_Reset_Count","name":"TCP_ELB_Reset_Count","defaultStat":"Sum"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/NetworkELB:AvailabilityZone:LoadBalancer:TCP_Target_Reset_Count","name":"TCP_Target_Reset_Count","defaultStat":"Sum"}]},{"resourceType":"AWS::ElasticLoadBalancingV2::LoadBalancer/NetworkELB:LoadBalancer:TargetGroup","namespace":"AWS/NetworkELB","dimensions":[{"dimensionName":"LoadBalancer","labelName":"LoadBalancer"},{"dimensionName":"TargetGroup","labelName":"TargetGroup"}],"metrics":[{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/NetworkELB:LoadBalancer:TargetGroup:HealthyHostCount","name":"HealthyHostCount","defaultStat":"Minimum"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/NetworkELB:LoadBalancer:TargetGroup:UnHealthyHostCount","name":"UnHealthyHostCount","defaultStat":"Maximum"}]},{"resourceType":"AWS::ElasticLoadBalancingV2::LoadBalancer/NetworkELB","id":"AWS::ElasticLoadBalancingV2::LoadBalancer/NetworkELB:AvailabilityZone:LoadBalancer:TargetGroup","namespace":"AWS/NetworkELB","dimensions":[{"dimensionName":"AvailabilityZone","labelName":"AvailabilityZone"},{"dimensionName":"LoadBalancer","labelName":"LoadBalancer"},{"dimensionName":"TargetGroup","labelName":"TargetGroup"}],"metrics":[{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/NetworkELB:AvailabilityZone:LoadBalancer:TargetGroup:HealthyHostCount","name":"HealthyHostCount","defaultStat":"Minimum"},{"id":"AWS::ElasticLoadBalancingV2::LoadBalancer/NetworkELB:AvailabilityZone:LoadBalancer:TargetGroup:UnHealthyHostCount","name":"UnHealthyHostCount","defaultStat":"Maximum"}]}],"dashboards":[{"id":"NetworkELB:CrossService","name":"Network ELB","dependencies":[{"namespace":"AWS/NetworkELB"}],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::ElasticLoadBalancingV2::LoadBalancer/NetworkELB:LoadBalancer:TargetGroup:HealthyHostCount"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::ElasticLoadBalancingV2::LoadBalancer/NetworkELB:LoadBalancer:TargetGroup:UnHealthyHostCount"}]}]}]},{"id":"NetworkELB","name":"Network ELB","dependencies":[{"namespace":"AWS/NetworkELB"}],"controls":["Shared::View.AlarmState","Shared::Group.ResourceGroup","AWS::NetworkELB.loadBalancers"],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::ElasticLoadBalancingV2::LoadBalancer/NetworkELB:LoadBalancer:TargetGroup:HealthyHostCount"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::ElasticLoadBalancingV2::LoadBalancer/NetworkELB:LoadBalancer:TargetGroup:UnHealthyHostCount"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::ElasticLoadBalancingV2::LoadBalancer/NetworkELB:ActiveFlowCount"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::ElasticLoadBalancingV2::LoadBalancer/NetworkELB:ConsumedLCUs"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::ElasticLoadBalancingV2::LoadBalancer/NetworkELB:NewFlowCount"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::ElasticLoadBalancingV2::LoadBalancer/NetworkELB:ProcessedBytes"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::ElasticLoadBalancingV2::LoadBalancer/NetworkELB:TCP_Client_Reset_Count"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::ElasticLoadBalancingV2::LoadBalancer/NetworkELB:TCP_ELB_Reset_Count"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::ElasticLoadBalancingV2::LoadBalancer/NetworkELB:TCP_Target_Reset_Count"}]}]}]}]},{"id":"AWS::OpsWorks::Instance","dashboard":"OpsWorks:Instance","crossServiceDashboard":"OpsWorks:CrossService","resourceTypes":[{"type":"AWS::OpsWorks::Instance","keyMetric":"AWS::OpsWorks::Instance:procs","dashboard":"OpsWorks:Instance","arnRegex":".*:instance/(.*)"},{"type":"AWS::OpsWorks::Layer","keyMetric":"AWS::OpsWorks::Layer:cpu_user","dashboard":"OpsWorks:Layer","arnRegex":".*:layer/(.*)"},{"type":"AWS::OpsWorks::Stack","keyMetric":"AWS::OpsWorks::Stack:cpu_user","dashboard":"OpsWorks:Stack","arnRegex":".*:stack/(.*)/"}],"metricTemplates":[{"resourceType":"AWS::OpsWorks::Instance","namespace":"AWS/OpsWorks","dimensions":[{"dimensionName":"InstanceId","labelName":"InstanceId"}],"metrics":[{"id":"AWS::OpsWorks::Instance:procs","name":"procs","defaultStat":"Average"},{"id":"AWS::OpsWorks::Instance:memory_used","name":"memory_used","defaultStat":"Average"},{"id":"AWS::OpsWorks::Instance:cpu_idle","name":"cpu_idle","defaultStat":"Average"},{"id":"AWS::OpsWorks::Instance:cpu_nice","name":"cpu_nice","defaultStat":"Average"},{"id":"AWS::OpsWorks::Instance:cpu_steal","name":"cpu_steal","defaultStat":"Average"},{"id":"AWS::OpsWorks::Instance:cpu_system","name":"cpu_system","defaultStat":"Average"},{"id":"AWS::OpsWorks::Instance:cpu_user","name":"cpu_user","defaultStat":"Average"},{"id":"AWS::OpsWorks::Instance:cpu_waitio","name":"cpu_waitio","defaultStat":"Average"},{"id":"AWS::OpsWorks::Instance:load_1","name":"load_1","defaultStat":"Average"},{"id":"AWS::OpsWorks::Instance:load_15","name":"load_15","defaultStat":"Average"},{"id":"AWS::OpsWorks::Instance:load_5","name":"load_5","defaultStat":"Average"},{"id":"AWS::OpsWorks::Instance:memory_buffers","name":"memory_buffers","defaultStat":"Average"},{"id":"AWS::OpsWorks::Instance:memory_cached","name":"memory_cached","defaultStat":"Average"},{"id":"AWS::OpsWorks::Instance:memory_free","name":"memory_free","defaultStat":"Average"},{"id":"AWS::OpsWorks::Instance:memory_swap","name":"memory_swap","defaultStat":"Average"},{"id":"AWS::OpsWorks::Instance:memory_total","name":"memory_total","defaultStat":"Average"}]},{"id":"AWS::OpsWorks::Instance::Maximum","resourceType":"AWS::OpsWorks::Instance","namespace":"AWS/OpsWorks","dimensions":[{"dimensionName":"InstanceId","labelName":"InstanceId"}],"metrics":[{"id":"AWS::OpsWorks::Instance::Maximum:memory_used","name":"memory_used","defaultStat":"Maximum"},{"id":"AWS::OpsWorks::Instance::Maximum:load_1","name":"load_1","defaultStat":"Maximum"}]},{"resourceType":"AWS::OpsWorks::Layer","namespace":"AWS/OpsWorks","dimensions":[{"dimensionName":"LayerId","labelName":"LayerId"}],"metrics":[{"id":"AWS::OpsWorks::Layer:cpu_user","name":"cpu_user","defaultStat":"Average"},{"id":"AWS::OpsWorks::Layer:load_1","name":"load_1","defaultStat":"Average"},{"id":"AWS::OpsWorks::Layer:cpu_idle","name":"cpu_idle","defaultStat":"Average"},{"id":"AWS::OpsWorks::Layer:cpu_nice","name":"cpu_nice","defaultStat":"Average"},{"id":"AWS::OpsWorks::Layer:cpu_steal","name":"cpu_steal","defaultStat":"Average"},{"id":"AWS::OpsWorks::Layer:cpu_system","name":"cpu_system","defaultStat":"Average"},{"id":"AWS::OpsWorks::Layer:cpu_waitio","name":"cpu_waitio","defaultStat":"Average"},{"id":"AWS::OpsWorks::Layer:load_15","name":"load_15","defaultStat":"Average"},{"id":"AWS::OpsWorks::Layer:load_5","name":"load_5","defaultStat":"Average"},{"id":"AWS::OpsWorks::Layer:memory_buffers","name":"memory_buffers","defaultStat":"Average"},{"id":"AWS::OpsWorks::Layer:memory_cached","name":"memory_cached","defaultStat":"Average"},{"id":"AWS::OpsWorks::Layer:memory_free","name":"memory_free","defaultStat":"Average"},{"id":"AWS::OpsWorks::Layer:memory_swap","name":"memory_swap","defaultStat":"Average"},{"id":"AWS::OpsWorks::Layer:memory_total","name":"memory_total","defaultStat":"Average"},{"id":"AWS::OpsWorks::Layer:memory_used","name":"memory_used","defaultStat":"Average"},{"id":"AWS::OpsWorks::Layer:procs","name":"procs","defaultStat":"Average"}]},{"id":"AWS::OpsWorks::Layer::Maximum","resourceType":"AWS::OpsWorks::Layer","namespace":"AWS/OpsWorks","dimensions":[{"dimensionName":"LayerId","labelName":"LayerId"}],"metrics":[{"id":"AWS::OpsWorks::Layer::Maximum:memory_used","name":"memory_used","defaultStat":"Maximum"},{"id":"AWS::OpsWorks::Layer::Maximum:load_1","name":"load_1","defaultStat":"Maximum"}]},{"resourceType":"AWS::OpsWorks::Stack","namespace":"AWS/OpsWorks","dimensions":[{"dimensionName":"StackId","labelName":"StackId"}],"metrics":[{"id":"AWS::OpsWorks::Stack:cpu_user","name":"cpu_user","defaultStat":"Average"},{"id":"AWS::OpsWorks::Stack:load_1","name":"load_1","defaultStat":"Average"},{"id":"AWS::OpsWorks::Stack:cpu_idle","name":"cpu_idle","defaultStat":"Average"},{"id":"AWS::OpsWorks::Stack:cpu_nice","name":"cpu_nice","defaultStat":"Average"},{"id":"AWS::OpsWorks::Stack:cpu_steal","name":"cpu_steal","defaultStat":"Average"},{"id":"AWS::OpsWorks::Stack:cpu_system","name":"cpu_system","defaultStat":"Average"},{"id":"AWS::OpsWorks::Stack:cpu_waitio","name":"cpu_waitio","defaultStat":"Average"},{"id":"AWS::OpsWorks::Stack:load_15","name":"load_15","defaultStat":"Average"},{"id":"AWS::OpsWorks::Stack:load_5","name":"load_5","defaultStat":"Average"},{"id":"AWS::OpsWorks::Stack:memory_buffers","name":"memory_buffers","defaultStat":"Average"},{"id":"AWS::OpsWorks::Stack:memory_cached","name":"memory_cached","defaultStat":"Average"},{"id":"AWS::OpsWorks::Stack:memory_free","name":"memory_free","defaultStat":"Average"},{"id":"AWS::OpsWorks::Stack:memory_swap","name":"memory_swap","defaultStat":"Average"},{"id":"AWS::OpsWorks::Stack:memory_total","name":"memory_total","defaultStat":"Average"},{"id":"AWS::OpsWorks::Stack:memory_used","name":"memory_used","defaultStat":"Average"},{"id":"AWS::OpsWorks::Stack:procs","name":"procs","defaultStat":"Average"}]},{"id":"AWS::OpsWorks::Stack::Maximum","resourceType":"AWS::OpsWorks::Stack","namespace":"AWS/OpsWorks","dimensions":[{"dimensionName":"StackId","labelName":"StackId"}],"metrics":[{"id":"AWS::OpsWorks::Stack::Maximum:memory_used","name":"memory_used","defaultStat":"Maximum"},{"id":"AWS::OpsWorks::Stack::Maximum:load_1","name":"load_1","defaultStat":"Maximum"}]}],"dashboards":[{"id":"OpsWorks:CrossService","name":"OpsWorks","dependencies":[{"namespace":"AWS/OpsWorks"}],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::OpsWorks::Instance:memory_used"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::OpsWorks::Instance::Maximum:load_1"}]}]}]},{"id":"OpsWorks:Instance","name":"OpsWorks Instances","dependencies":[{"namespace":"AWS/OpsWorks"}],"controls":["Shared::View.AlarmState","Shared::Group.ResourceGroup"],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::OpsWorks::Instance::Maximum:memory_used"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::OpsWorks::Instance:load_1"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::OpsWorks::Instance:cpu_idle"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::OpsWorks::Instance:cpu_nice"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::OpsWorks::Instance:cpu_steal"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::OpsWorks::Instance:cpu_system"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::OpsWorks::Instance:cpu_user"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::OpsWorks::Instance:cpu_waitio"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::OpsWorks::Instance:load_5"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::OpsWorks::Instance:load_15"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::OpsWorks::Instance:memory_buffers"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::OpsWorks::Instance:memory_cached"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::OpsWorks::Instance:memory_free"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::OpsWorks::Instance:memory_swap"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::OpsWorks::Instance:memory_total"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::OpsWorks::Instance:procs"}]}]}]},{"id":"OpsWorks:Layer","name":"OpsWorks Layers","dependencies":[{"namespace":"AWS/OpsWorks"}],"controls":["Shared::View.AlarmState","Shared::Group.ResourceGroup"],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::OpsWorks::Layer::Maximum:memory_used"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::OpsWorks::Layer:load_1"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::OpsWorks::Layer:cpu_idle"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::OpsWorks::Layer:cpu_nice"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::OpsWorks::Layer:cpu_steal"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::OpsWorks::Layer:cpu_system"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::OpsWorks::Layer:cpu_user"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::OpsWorks::Layer:cpu_waitio"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::OpsWorks::Layer:load_5"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::OpsWorks::Layer:load_15"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::OpsWorks::Layer:memory_buffers"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::OpsWorks::Layer:memory_cached"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::OpsWorks::Layer:memory_free"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::OpsWorks::Layer:memory_swap"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::OpsWorks::Layer:memory_total"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::OpsWorks::Layer:procs"}]}]}]},{"id":"OpsWorks:Stack","name":"OpsWorks Stacks","dependencies":[{"namespace":"AWS/OpsWorks"}],"controls":["Shared::View.AlarmState","Shared::Group.ResourceGroup"],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::OpsWorks::Stack::Maximum:memory_used"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::OpsWorks::Stack:load_1"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::OpsWorks::Stack:cpu_idle"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::OpsWorks::Stack:cpu_nice"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::OpsWorks::Stack:cpu_steal"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::OpsWorks::Stack:cpu_system"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::OpsWorks::Stack:cpu_user"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::OpsWorks::Stack:cpu_waitio"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::OpsWorks::Stack:load_5"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::OpsWorks::Stack:load_15"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::OpsWorks::Stack:memory_buffers"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::OpsWorks::Stack:memory_cached"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::OpsWorks::Stack:memory_free"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::OpsWorks::Stack:memory_swap"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::OpsWorks::Stack:memory_total"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::OpsWorks::Stack:procs"}]}]}]},{"id":"OpsWorks","name":"OpsWorks","dependencies":[{"namespace":"AWS/OpsWorks"}],"controls":["Shared::View.AlarmState","Shared::Group.ResourceGroup"],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::OpsWorks::Instance::Maximum:memory_used"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::OpsWorks::Instance:load_1"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::OpsWorks::Instance:cpu_idle"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::OpsWorks::Instance:cpu_nice"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::OpsWorks::Instance:cpu_steal"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::OpsWorks::Instance:cpu_system"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::OpsWorks::Instance:cpu_user"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::OpsWorks::Instance:cpu_waitio"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::OpsWorks::Instance:load_5"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::OpsWorks::Instance:load_15"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::OpsWorks::Instance:memory_buffers"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::OpsWorks::Instance:memory_cached"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::OpsWorks::Instance:memory_free"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::OpsWorks::Instance:memory_swap"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::OpsWorks::Instance:memory_total"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::OpsWorks::Instance:procs"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::OpsWorks::Layer::Maximum:memory_used"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::OpsWorks::Layer:load_1"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::OpsWorks::Layer:cpu_idle"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::OpsWorks::Layer:cpu_nice"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::OpsWorks::Layer:cpu_steal"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::OpsWorks::Layer:cpu_system"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::OpsWorks::Layer:cpu_user"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::OpsWorks::Layer:cpu_waitio"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::OpsWorks::Layer:load_5"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::OpsWorks::Layer:load_15"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::OpsWorks::Layer:memory_buffers"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::OpsWorks::Layer:memory_cached"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::OpsWorks::Layer:memory_free"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::OpsWorks::Layer:memory_swap"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::OpsWorks::Layer:memory_total"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::OpsWorks::Layer:procs"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::OpsWorks::Stack::Maximum:memory_used"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::OpsWorks::Stack:load_1"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::OpsWorks::Stack:cpu_idle"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::OpsWorks::Stack:cpu_nice"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::OpsWorks::Stack:cpu_steal"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::OpsWorks::Stack:cpu_system"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::OpsWorks::Stack:cpu_user"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::OpsWorks::Stack:cpu_waitio"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::OpsWorks::Stack:load_5"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::OpsWorks::Stack:load_15"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::OpsWorks::Stack:memory_buffers"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::OpsWorks::Stack:memory_cached"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::OpsWorks::Stack:memory_free"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::OpsWorks::Stack:memory_swap"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::OpsWorks::Stack:memory_total"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::OpsWorks::Stack:procs"}]}]}]}]},{"id":"Overview","dashboard":"Overview","resourceTypes":[],"controls":{},"metricTemplates":[],"dashboards":[{"id":"Overview","name":"Overview","controls":["Shared::Group.ResourceGroup"],"rows":[]}]},{"id":"AWS::Polly","dashboard":"Polly","crossServiceDashboard":"Polly:CrossService","resourceTypes":[{"type":"AWS::Polly::Operation","keyMetric":"AWS::Polly::Operation:RequestCharacters","dashboard":"Polly"}],"controls":{"AWS::Polly.operations":{"type":"resource","resourceType":"AWS::Polly::Operation","labelField":"Operation","valueField":"Operation"}},"metricTemplates":[{"resourceType":"AWS::Polly::Operation","namespace":"AWS/Polly","dimensions":[{"dimensionName":"Operation","labelName":"Operation"}],"metrics":[{"id":"AWS::Polly::Operation:RequestCharacters","name":"RequestCharacters","defaultStat":"Average"},{"id":"AWS::Polly::Operation:5XXCount","name":"5XXCount","defaultStat":"Sum"},{"id":"AWS::Polly::Operation:ResponseLatency","name":"ResponseLatency","defaultStat":"Average"},{"id":"AWS::Polly::Operation:2XXCount","name":"2XXCount","defaultStat":"Sum"},{"id":"AWS::Polly::Operation:4XXCount","name":"4XXCount","defaultStat":"Sum"}]}],"dashboards":[{"id":"Polly:CrossService","name":"Polly","dependencies":[{"namespace":"AWS/Polly"}],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::Polly::Operation:RequestCharacters"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::Polly::Operation:5XXCount"}]}]}]},{"id":"Polly","name":"Polly","dependencies":[{"namespace":"AWS/Polly"}],"controls":["Shared::View.AlarmState","Shared::Group.ResourceGroup","AWS::Polly.operations"],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::Polly::Operation:RequestCharacters"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::Polly::Operation:5XXCount"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::Polly::Operation:ResponseLatency"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::Polly::Operation:2XXCount"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::Polly::Operation:4XXCount"}]}]}]}]},{"id":"AWS::QLDB::Ledger","dashboard":"QLDB","crossServiceDashboard":"QLDB:CrossService","resourceTypes":[{"type":"AWS::QLDB::Ledger","keyMetric":"AWS::QLDB::Ledger:CommandLatency","dashboard":"QLDB","arnRegex":".*:ledger/(.*)"}],"metricTemplates":[{"resourceType":"AWS::QLDB::Ledger","namespace":"AWS/QLDB","dimensions":[{"dimensionName":"LedgerName","labelName":"LedgerName"}],"metrics":[{"id":"AWS::QLDB::Ledger:CommandLatency","name":"CommandLatency","defaultStat":"Average"},{"id":"AWS::QLDB::Ledger:JournalStorage","name":"JournalStorage","defaultStat":"Sum"},{"id":"AWS::QLDB::Ledger:IndexedStorage","name":"IndexedStorage","defaultStat":"Sum"},{"id":"AWS::QLDB::Ledger:IsImpaired","name":"IsImpaired","defaultStat":"Sum"},{"id":"AWS::QLDB::Ledger:OccConflictExceptions","name":"OccConflictExceptions","defaultStat":"Sum"},{"id":"AWS::QLDB::Ledger:ReadIOs","name":"ReadIOs","defaultStat":"Sum"},{"id":"AWS::QLDB::Ledger:Session4xxExceptions","name":"Session4xxExceptions","defaultStat":"Sum"},{"id":"AWS::QLDB::Ledger:Session5xxExceptions","name":"Session5xxExceptions","defaultStat":"Sum"},{"id":"AWS::QLDB::Ledger:SessionRateExceededExceptions","name":"SessionRateExceededExceptions","defaultStat":"Sum"},{"id":"AWS::QLDB::Ledger:WriteIOs","name":"WriteIOs","defaultStat":"Sum"}]}],"dashboards":[{"id":"QLDB:CrossService","name":"QLDB","dependencies":[{"namespace":"AWS/QLDB"}],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::QLDB::Ledger:CommandLatency"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::QLDB::Ledger:JournalStorage"}]}]}]},{"id":"QLDB","name":"QLDB","dependencies":[{"namespace":"AWS/QLDB"}],"controls":["Shared::View.AlarmState","Shared::Group.ResourceGroup"],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::QLDB::Ledger:CommandLatency"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::QLDB::Ledger:JournalStorage"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::QLDB::Ledger:IndexedStorage"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::QLDB::Ledger:IsImpaired"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::QLDB::Ledger:OccConflictExceptions"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::QLDB::Ledger:ReadIOs"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::QLDB::Ledger:Session4xxExceptions"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::QLDB::Ledger:Session5xxExceptions"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::QLDB::Ledger:SessionRateExceededExceptions"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::QLDB::Ledger:WriteIOs"}]}]}]}]},{"id":"AWS::RDS","dashboard":"RDS","crossServiceDashboard":"RDS:CrossService","resourceTypes":[{"type":"AWS::RDS::DBInstance","keyMetric":"AWS::RDS::DBInstance:CPUUtilization","dashboard":"RDS","arnRegex":".*:db:(.*)","describe":"rds-describe-instances","consoleLink":"/rds/home?region={region}#dbinstance:id={DBInstanceIdentifier}"}],"controls":{"AWS::RDS.dbinstances":{"type":"resource","resourceType":"AWS::RDS::DBInstance","labelField":"DBInstanceIdentifier","valueField":"DBInstanceIdentifier"}},"metricTemplates":[{"resourceType":"AWS::RDS::DBInstance","namespace":"AWS/RDS","dimensions":[{"dimensionName":"DBInstanceIdentifier","labelName":"DBInstanceIdentifier"}],"metrics":[{"id":"AWS::RDS::DBInstance:CPUUtilization","name":"CPUUtilization","defaultStat":"Average"},{"id":"AWS::RDS::DBInstance:ReadLatency","name":"ReadLatency","defaultStat":"Average"},{"id":"AWS::RDS::DBInstance:DatabaseConnections","name":"DatabaseConnections","defaultStat":"Sum"},{"id":"AWS::RDS::DBInstance:FreeStorageSpace","name":"FreeStorageSpace","defaultStat":"Average"},{"id":"AWS::RDS::DBInstance:FreeableMemory","name":"FreeableMemory","defaultStat":"Average"},{"id":"AWS::RDS::DBInstance:ReadThroughput","name":"ReadThroughput","defaultStat":"Average"},{"id":"AWS::RDS::DBInstance:ReadIOPS","name":"ReadIOPS","defaultStat":"Average"},{"id":"AWS::RDS::DBInstance:WriteLatency","name":"WriteLatency","defaultStat":"Average"},{"id":"AWS::RDS::DBInstance:WriteThroughput","name":"WriteThroughput","defaultStat":"Average"},{"id":"AWS::RDS::DBInstance:WriteIOPS","name":"WriteIOPS","defaultStat":"Average"}]}],"dashboards":[{"id":"RDS:CrossService","name":"RDS","dependencies":[{"namespace":"AWS/RDS"}],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::RDS::DBInstance:CPUUtilization"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::RDS::DBInstance:ReadLatency"}]}]}]},{"id":"RDS","name":"RDS","dependencies":[{"namespace":"AWS/RDS"}],"controls":["Shared::View.AlarmState","Shared::Group.ResourceGroup","AWS::RDS.dbinstances"],"tables":[{"resourceType":"AWS::RDS::DBInstance","columns":["DBInstanceIdentifier","Engine","DBInstanceStatus","DBInstanceClass","MultiAZ","StorageEncrypted","StorageType"]}],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::RDS::DBInstance:CPUUtilization"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::RDS::DBInstance:DatabaseConnections"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::RDS::DBInstance:FreeStorageSpace"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::RDS::DBInstance:FreeableMemory"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::RDS::DBInstance:ReadLatency"}]},{"type":"chart","metrics":[{"metricOptions":{"yAxis":"right"},"metricTemplate":"AWS::RDS::DBInstance:ReadThroughput"}]},{"type":"chart","metrics":[{"metricOptions":{"yAxis":"right"},"metricTemplate":"AWS::RDS::DBInstance:ReadIOPS"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::RDS::DBInstance:WriteLatency"}]},{"type":"chart","metrics":[{"metricOptions":{"yAxis":"right"},"metricTemplate":"AWS::RDS::DBInstance:WriteThroughput"}]},{"type":"chart","metrics":[{"metricOptions":{"yAxis":"right"},"metricTemplate":"AWS::RDS::DBInstance:WriteIOPS"}]}]}]}]},{"id":"AWS::RDSCluster","dashboard":"RDSCluster","crossServiceDashboard":"RDSCluster:CrossService","resourceTypes":[{"type":"AWS::RDS::DBCluster","keyMetric":"AWS::RDS::DBCluster:CPUUtilization","dashboard":"RDS","arnRegex":".*:DBClusters(.*)","describe":"rds-describe-clusters","consoleLink":"/rds/home?region={region}#database:id={DBClusterIdentifier};is-cluster=true"}],"controls":{"AWS::RDSCluster.dbclusters":{"type":"resource","resourceType":"AWS::RDS::DBCluster","labelField":"DBClusterIdentifier","valueField":"DBClusterIdentifier"}},"metricTemplates":[{"resourceType":"AWS::RDS::DBCluster","namespace":"AWS/RDS","dimensions":[{"dimensionName":"DBClusterIdentifier","labelName":"DBClusterIdentifier"}],"metrics":[{"id":"AWS::RDS::DBCluster:CPUUtilization","name":"CPUUtilization","defaultStat":"Average"},{"id":"AWS::RDS::DBCluster:DatabaseConnections","name":"DatabaseConnections","defaultStat":"Sum"},{"id":"AWS::RDS::DBCluster:FreeStorageSpace","name":"FreeStorageSpace","defaultStat":"Average"},{"id":"AWS::RDS::DBCluster:FreeableMemory","name":"FreeableMemory","defaultStat":"Average"},{"id":"AWS::RDS::DBCluster:ReadLatency","name":"ReadLatency","defaultStat":"Average"},{"id":"AWS::RDS::DBCluster:ReadThroughput","name":"ReadThroughput","defaultStat":"Average"},{"id":"AWS::RDS::DBCluster:ReadIOPS","name":"ReadIOPS","defaultStat":"Average"},{"id":"AWS::RDS::DBCluster:WriteLatency","name":"WriteLatency","defaultStat":"Average"},{"id":"AWS::RDS::DBCluster:WriteThroughput","name":"WriteThroughput","defaultStat":"Average"},{"id":"AWS::RDS::DBCluster:WriteIOPS","name":"WriteIOPS","defaultStat":"Average"}]}],"dashboards":[{"id":"RDSCluster:CrossService","name":"RDS Cluster","dependencies":[{"namespace":"AWS/RDS"}],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::RDS::DBCluster:CPUUtilization"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::RDS::DBCluster:ReadLatency"}]}]}]},{"id":"RDSCluster","name":"RDS Cluster","dependencies":[{"namespace":"AWS/RDS"}],"controls":["Shared::View.AlarmState","Shared::Group.ResourceGroup","AWS::RDSCluster.dbclusters"],"tables":[{"resourceType":"AWS::RDS::DBCluster","columns":["DBClusterIdentifier","Engine","Status","MultiAZ","StorageEncrypted"]}],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::RDS::DBCluster:CPUUtilization"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::RDS::DBCluster:DatabaseConnections"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::RDS::DBCluster:FreeStorageSpace"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::RDS::DBCluster:FreeableMemory"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::RDS::DBCluster:ReadLatency"}]},{"type":"chart","metrics":[{"metricOptions":{"yAxis":"right"},"metricTemplate":"AWS::RDS::DBCluster:ReadThroughput"}]},{"type":"chart","metrics":[{"metricOptions":{"yAxis":"right"},"metricTemplate":"AWS::RDS::DBCluster:ReadIOPS"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::RDS::DBCluster:WriteLatency"}]},{"type":"chart","metrics":[{"metricOptions":{"yAxis":"right"},"metricTemplate":"AWS::RDS::DBCluster:WriteThroughput"}]},{"type":"chart","metrics":[{"metricOptions":{"yAxis":"right"},"metricTemplate":"AWS::RDS::DBCluster:WriteIOPS"}]}]}]}]},{"id":"RecentAlarms","dashboard":"RecentAlarms","resourceTypes":[],"metricTemplates":[],"dashboards":[{"id":"RecentAlarms","name":"Recent Alarms","dependencies":[],"rows":[]}]},{"id":"AWS::Redshift","dashboard":"Redshift","crossServiceDashboard":"Redshift:CrossService","resourceTypes":[{"type":"AWS::Redshift::Cluster","keyMetric":"AWS::Redshift::Cluster:CPUUtilization","dashboard":"Redshift","arnRegex":".*:cluster:(.*)"}],"controls":{"AWS::Redshift.clusters":{"type":"resource","resourceType":"AWS::Redshift::Cluster","labelField":"ClusterIdentifier","valueField":"ClusterIdentifier"}},"metricTemplates":[{"resourceType":"AWS::Redshift::Cluster","namespace":"AWS/Redshift","dimensions":[{"dimensionName":"ClusterIdentifier","labelName":"ClusterIdentifier"}],"metrics":[{"id":"AWS::Redshift::Cluster:CommitQueueLength","name":"CommitQueueLength","defaultStat":"Average"},{"id":"AWS::Redshift::Cluster:ConcurrencyScalingActiveClusters","name":"ConcurrencyScalingActiveClusters","defaultStat":"Average"},{"id":"AWS::Redshift::Cluster:ConcurrencyScalingSeconds","name":"ConcurrencyScalingSeconds","defaultStat":"Average"},{"id":"AWS::Redshift::Cluster:CPUUtilization","name":"CPUUtilization","defaultStat":"Average"},{"id":"AWS::Redshift::Cluster:DatabaseConnections","name":"DatabaseConnections","defaultStat":"Average"},{"id":"AWS::Redshift::Cluster:HealthStatus","name":"HealthStatus","defaultStat":"Sum"},{"id":"AWS::Redshift::Cluster:MaintenanceMode","name":"MaintenanceMode","defaultStat":"Sum"},{"id":"AWS::Redshift::Cluster:MaxConfiguredConcurrencyScalingClusters","name":"MaxConfiguredConcurrencyScalingClusters","defaultStat":"Sum"},{"id":"AWS::Redshift::Cluster:NetworkReceiveThroughput","name":"NetworkReceiveThroughput","defaultStat":"Sum"},{"id":"AWS::Redshift::Cluster:NetworkTransmitThroughput","name":"NetworkTransmitThroughput","defaultStat":"Sum"},{"id":"AWS::Redshift::Cluster:NumExceededSchemaQuotas","name":"NumExceededSchemaQuotas","defaultStat":"Average"},{"id":"AWS::Redshift::Cluster:PercentageDiskSpaceUsed","name":"PercentageDiskSpaceUsed","defaultStat":"Average"},{"id":"AWS::Redshift::Cluster:PercentageQuotaUsed","name":"PercentageQuotaUsed","defaultStat":"Average"},{"id":"AWS::Redshift::Cluster:QueriesCompletedPerSecond","name":"QueriesCompletedPerSecond","defaultStat":"Sum"},{"id":"AWS::Redshift::Cluster:QueryDuration","name":"QueryDuration","defaultStat":"Average"},{"id":"AWS::Redshift::Cluster:QueryRuntimeBreakdown","name":"QueryRuntimeBreakdown","defaultStat":"Sum"},{"id":"AWS::Redshift::Cluster:ReadIOPS","name":"ReadIOPS","defaultStat":"Sum"},{"id":"AWS::Redshift::Cluster:ReadLatency","name":"ReadLatency","defaultStat":"Average"},{"id":"AWS::Redshift::Cluster:ReadThroughput","name":"ReadThroughput","defaultStat":"Sum"},{"id":"AWS::Redshift::Cluster:StorageUsed","name":"StorageUsed","defaultStat":"Average"},{"id":"AWS::Redshift::Cluster:TotalTableCount","name":"TotalTableCount","defaultStat":"Average"},{"id":"AWS::Redshift::Cluster:WLMQueriesCompletedPerSecond","name":"WLMQueriesCompletedPerSecond","defaultStat":"Average"},{"id":"AWS::Redshift::Cluster:WLMQueryDuration","name":"WLMQueryDuration","defaultStat":"Average"},{"id":"AWS::Redshift::Cluster:WLMQueueLength","name":"WLMQueueLength","defaultStat":"Sum"},{"id":"AWS::Redshift::Cluster:WriteIOPS","name":"WriteIOPS","defaultStat":"Sum"},{"id":"AWS::Redshift::Cluster:WriteLatency","name":"WriteLatency","defaultStat":"Average"},{"id":"AWS::Redshift::Cluster:WriteThroughput","name":"WriteThroughput","defaultStat":"Sum"}]},{"resourceType":"AWS::Redshift::Cluster","id":"AWS::Redshift::Cluster:NodeID","namespace":"AWS/Redshift","dimensions":[{"dimensionName":"ClusterIdentifier","labelName":"ClusterIdentifier"},{"dimensionName":"NodeID","labelName":"NodeID"}],"metrics":[{"id":"AWS::Redshift::Cluster:NodeID:CPUUtilization","name":"CPUUtilization","defaultStat":"Average"},{"id":"AWS::Redshift::Cluster:NodeID:NetworkReceiveThroughput","name":"NetworkReceiveThroughput","defaultStat":"Average"},{"id":"AWS::Redshift::Cluster:NodeID:NetworkTransmitThroughput","name":"NetworkTransmitThroughput","defaultStat":"Average"},{"id":"AWS::Redshift::Cluster:NodeID:ReadIOPS","name":"ReadIOPS","defaultStat":"Average"},{"id":"AWS::Redshift::Cluster:NodeID:ReadLatency","name":"ReadLatency","defaultStat":"Average"},{"id":"AWS::Redshift::Cluster:NodeID:ReadThroughput","name":"ReadThroughput","defaultStat":"Average"},{"id":"AWS::Redshift::Cluster:NodeID:WriteIOPS","name":"WriteIOPS","defaultStat":"Average"},{"id":"AWS::Redshift::Cluster:NodeID:WriteLatency","name":"WriteLatency","defaultStat":"Average"},{"id":"AWS::Redshift::Cluster:NodeID:WriteThroughput","name":"WriteThroughput","defaultStat":"Average"}]},{"resourceType":"AWS::Redshift::Cluster","id":"AWS::Redshift::Cluster:wlmid","namespace":"AWS/Redshift","dimensions":[{"dimensionName":"ClusterIdentifier","labelName":"ClusterIdentifier"},{"dimensionName":"wlmid","labelName":"wlmid"}],"metrics":[{"id":"AWS::Redshift::Cluster:wlmid:QueriesCompletedPerSecond","name":"QueriesCompletedPerSecond","defaultStat":"Average"},{"id":"AWS::Redshift::Cluster:wlmid:WLMQueriesCompletedPerSecond","name":"WLMQueriesCompletedPerSecond","defaultStat":"Average"},{"id":"AWS::Redshift::Cluster:wlmid:WLMQueryDuration","name":"WLMQueryDuration","defaultStat":"Average"},{"id":"AWS::Redshift::Cluster:wlmid:WLMQueueWaitTime","name":"WLMQueueWaitTime","defaultStat":"Average"},{"id":"AWS::Redshift::Cluster:wlmid:WLMRunningQueries","name":"WLMRunningQueries","defaultStat":"Average"}]},{"resourceType":"AWS::Redshift::Cluster","id":"AWS::Redshift::Cluster:QueueName","namespace":"AWS/Redshift","dimensions":[{"dimensionName":"ClusterIdentifier","labelName":"ClusterIdentifier"},{"dimensionName":"QueueName","labelName":"QueueName"}],"metrics":[{"id":"AWS::Redshift::Cluster:QueueName:WLMQueriesCompletedPerSecond","name":"WLMQueriesCompletedPerSecond","defaultStat":"Average"},{"id":"AWS::Redshift::Cluster:QueueName:WLMQueryDuration","name":"WLMQueryDuration","defaultStat":"Average"},{"id":"AWS::Redshift::Cluster:QueueName:WLMQueueLength","name":"WLMQueueLength","defaultStat":"Average"},{"id":"AWS::Redshift::Cluster:QueueName:WLMQueueWaitTime","name":"WLMQueueWaitTime","defaultStat":"Average"},{"id":"AWS::Redshift::Cluster:QueueName:WLMRunningQueries","name":"WLMRunningQueries","defaultStat":"Average"}]}],"dashboards":[{"id":"Redshift:CrossService","name":"Redshift","dependencies":[{"namespace":"AWS/Redshift"}],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::Redshift::Cluster:CPUUtilization"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::Redshift::Cluster:PercentageDiskSpaceUsed"}]}]}]},{"id":"Redshift","name":"Redshift","dependencies":[{"namespace":"AWS/Redshift"}],"controls":["Shared::View.AlarmState","Shared::Group.ResourceGroup","AWS::Redshift.clusters"],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::Redshift::Cluster:CPUUtilization"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::Redshift::Cluster:PercentageDiskSpaceUsed"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::Redshift::Cluster:DatabaseConnections"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::Redshift::Cluster:HealthStatus"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::Redshift::Cluster:MaintenanceMode"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::Redshift::Cluster:NetworkReceiveThroughput"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::Redshift::Cluster:NetworkTransmitThroughput"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::Redshift::Cluster:QueriesCompletedPerSecond"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::Redshift::Cluster:QueryDuration"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::Redshift::Cluster:QueryRuntimeBreakdown"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::Redshift::Cluster:ReadIOPS"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::Redshift::Cluster:ReadLatency"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::Redshift::Cluster:ReadThroughput"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::Redshift::Cluster:WLMQueriesCompletedPerSecond"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::Redshift::Cluster:WLMQueryDuration"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::Redshift::Cluster:WLMQueueLength"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::Redshift::Cluster:WriteIOPS"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::Redshift::Cluster:WriteLatency"}]}]},{"widgets":[{"type":"chart","width":8,"metrics":[{"metricTemplate":"AWS::Redshift::Cluster:WriteThroughput"}]}]}]}]},{"id":"AWS::Rekognition","dashboard":"Rekognition","crossServiceDashboard":"Rekognition:CrossService","resourceTypes":[{"type":"AWS::Rekognition::Operation","keyMetric":"AWS::Rekognition::Operation:SuccessfulRequestCount","dashboard":"Rekognition"}],"controls":{"AWS::Rekognition.operations":{"type":"resource","resourceType":"AWS::Rekognition::Operation","labelField":"Operation","valueField":"Operation"}},"metricTemplates":[{"resourceType":"AWS::Rekognition::Operation","namespace":"AWS/Rekognition","dimensions":[{"dimensionName":"Operation","labelName":"Operation"}],"metrics":[{"id":"AWS::Rekognition::Operation:SuccessfulRequestCount","name":"SuccessfulRequestCount","defaultStat":"Sum"},{"id":"AWS::Rekognition::Operation:ServerErrorCount","name":"ServerErrorCount","defaultStat":"Sum"},{"id":"AWS::Rekognition::Operation:DetectedFaceCount","name":"DetectedFaceCount","defaultStat":"Sum"},{"id":"AWS::Rekognition::Operation:DetectedLabelCount","name":"DetectedLabelCount","defaultStat":"Sum"},{"id":"AWS::Rekognition::Operation:ResponseTime","name":"ResponseTime","defaultStat":"Average"},{"id":"AWS::Rekognition::Operation:UserErrorCount","name":"UserErrorCount","defaultStat":"Sum"}]}],"dashboards":[{"id":"Rekognition:CrossService","name":"Rekognition","dependencies":[{"namespace":"AWS/Rekognition"}],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::Rekognition::Operation:SuccessfulRequestCount"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::Rekognition::Operation:ServerErrorCount"}]}]}]},{"id":"Rekognition","name":"Rekognition","dependencies":[{"namespace":"AWS/Rekognition"}],"controls":["Shared::View.AlarmState","Shared::Group.ResourceGroup","AWS::Rekognition.operations"],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::Rekognition::Operation:SuccessfulRequestCount"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::Rekognition::Operation:ServerErrorCount"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::Rekognition::Operation:DetectedFaceCount"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::Rekognition::Operation:DetectedLabelCount"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::Rekognition::Operation:ResponseTime"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::Rekognition::Operation:UserErrorCount"}]}]}]}]},{"id":"AWS::RoboMaker","dashboard":"RoboMaker","crossServiceDashboard":"RoboMaker:CrossService","resourceTypes":[{"type":"AWS::RoboMaker::SimulationJob","keyMetric":"AWS::RoboMaker::SimulationJob:vCPU","dashboard":"RoboMaker","arnRegex":".*simulation-job/(.*)"}],"controls":{"AWS::RoboMaker.simulationJobs":{"type":"resource","resourceType":"AWS::RoboMaker::SimulationJob","labelField":"SimulationJobId","valueField":"SimulationJobId"}},"metricTemplates":[{"resourceType":"AWS::RoboMaker::SimulationJob","namespace":"AWS/RoboMaker","dimensions":[{"dimensionName":"SimulationJobId","labelName":"SimulationJobId"}],"metrics":[{"id":"AWS::RoboMaker::SimulationJob:vCPU","name":"vCPU","defaultStat":"Average"},{"id":"AWS::RoboMaker::SimulationJob:Memory","name":"Memory","defaultStat":"Maximum"},{"id":"AWS::RoboMaker::SimulationJob:RealTimeRatio","name":"RealTimeRatio","defaultStat":"Average"},{"id":"AWS::RoboMaker::SimulationJob:SimulationUnit","name":"SimulationUnit","defaultStat":"Sum"}]}],"dashboards":[{"id":"RoboMaker:CrossService","name":"RoboMaker","dependencies":[{"namespace":"AWS/RoboMaker"}],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::RoboMaker::SimulationJob:vCPU"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::RoboMaker::SimulationJob:Memory"}]}]}]},{"id":"RoboMaker","name":"RoboMaker","dependencies":[{"namespace":"AWS/RoboMaker"}],"controls":["Shared::View.AlarmState","Shared::Group.ResourceGroup","AWS::RoboMaker.simulationJobs"],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::RoboMaker::SimulationJob:vCPU"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::RoboMaker::SimulationJob:Memory"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::RoboMaker::SimulationJob:RealTimeRatio"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::RoboMaker::SimulationJob:SimulationUnit"}]}]}]}]},{"id":"AWS::Route53","dashboard":"Route53","crossServiceDashboard":"Route53:CrossService","resourceTypes":[{"type":"AWS::Route53::HealthCheck","keyMetric":"AWS::Route53::HealthCheck:HealthCheckPercentageHealthy","dashboard":"Route53","arnRegex":".*:healthcheck/(.*)","describe":"route53-describe-health-checks","consoleLink":"/route53/healthchecks/home#/details/{HealthCheckId}"}],"controls":{"AWS::Route53.healthchecks":{"type":"resource","resourceType":"AWS::Route53::HealthCheck","labelField":"HealthCheckId","valueField":"HealthCheckId"}},"metricTemplates":[{"resourceType":"AWS::Route53::HealthCheck","namespace":"AWS/Route53","dimensions":[{"dimensionName":"HealthCheckId","labelName":"HealthCheckId"}],"metrics":[{"id":"AWS::Route53::HealthCheck:HealthCheckPercentageHealthy","name":"HealthCheckPercentageHealthy","defaultStat":"Average"},{"id":"AWS::Route53::HealthCheck:ConnectionTime","name":"ConnectionTime","defaultStat":"Average"},{"id":"AWS::Route53::HealthCheck:HealthCheckStatus","name":"HealthCheckStatus","defaultStat":"Minimum"},{"id":"AWS::Route53::HealthCheck:SSLHandshakeTime","name":"SSLHandshakeTime","defaultStat":"Average"},{"id":"AWS::Route53::HealthCheck:ChildHealthCheckHealthyCount","name":"ChildHealthCheckHealthyCount","defaultStat":"Average"},{"id":"AWS::Route53::HealthCheck:TimeToFirstByte","name":"TimeToFirstByte","defaultStat":"Average"}]}],"dashboards":[{"id":"Route53:CrossService","name":"Route 53","dependencies":[{"namespace":"AWS/Route53"}],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::Route53::HealthCheck:HealthCheckPercentageHealthy"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::Route53::HealthCheck:ConnectionTime"}]}]}]},{"id":"Route53","name":"Route 53","dependencies":[{"namespace":"AWS/Route53"}],"controls":["Shared::View.AlarmState","Shared::Group.ResourceGroup","AWS::Route53.healthchecks"],"tables":[{"resourceType":"AWS::Route53::HealthCheck","columns":["HealthCheckId","Description"]}],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::Route53::HealthCheck:HealthCheckPercentageHealthy"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::Route53::HealthCheck:ConnectionTime"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::Route53::HealthCheck:HealthCheckStatus"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::Route53::HealthCheck:SSLHandshakeTime"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::Route53::HealthCheck:ChildHealthCheckHealthyCount"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::Route53::HealthCheck:TimeToFirstByte"}]}]}]}]},{"id":"AWS::Route53Resolver::ResolverEndpoint","dashboard":"Route53Resolver","crossServiceDashboard":"Route53Resolver:CrossService","resourceTypes":[{"type":"AWS::Route53Resolver::ResolverEndpoint","keyMetric":"AWS::Route53Resolver::ResolverEndpoint:InboundQueryVolume","dashboard":"Route53Resolver","arnRegex":".*:resolver-endpoint/(.*)"}],"metricTemplates":[{"resourceType":"AWS::Route53Resolver::ResolverEndpoint","namespace":"AWS/Route53Resolver","dimensions":[{"dimensionName":"EndpointId","labelName":"EndpointId"}],"metrics":[{"id":"AWS::Route53Resolver::ResolverEndpoint:InboundQueryVolume","name":"InboundQueryVolume","defaultStat":"Sum"},{"id":"AWS::Route53Resolver::ResolverEndpoint:OutboundQueryVolume","name":"OutboundQueryVolume","defaultStat":"Sum"},{"id":"AWS::Route53Resolver::ResolverEndpoint:OutboundQueryAggregateVolume","name":"OutboundQueryAggregateVolume","defaultStat":"Sum"}]}],"dashboards":[{"id":"Route53Resolver:CrossService","name":"Route 53 Resolver","dependencies":[{"namespace":"AWS/Route53Resolver"}],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::Route53Resolver::ResolverEndpoint:InboundQueryVolume"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::Route53Resolver::ResolverEndpoint:OutboundQueryVolume"}]}]}]},{"id":"Route53Resolver","name":"Route 53 Resolver","dependencies":[{"namespace":"AWS/Route53Resolver"}],"controls":["Shared::View.AlarmState","Shared::Group.ResourceGroup"],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::Route53Resolver::ResolverEndpoint:InboundQueryVolume"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::Route53Resolver::ResolverEndpoint:OutboundQueryVolume"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::Route53Resolver::ResolverEndpoint:OutboundQueryAggregateVolume"}]}]}]}]},{"id":"AWS::S3","dashboard":"S3","crossServiceDashboard":"S3:CrossService","resourceTypes":[{"type":"AWS::S3::Bucket","keyMetric":"AWS::S3::Bucket:BucketSizeBytes","dashboard":"S3","arnRegex":"s3:::(.*)","list":"s3-describe-buckets","describe":"s3-describe-buckets","consoleLink":"/s3/buckets/{BucketName}/?region={region}&tab=objects"},{"type":"CW::S3::BucketFilter","keyMetric":"CW::S3::BucketFilter:AllRequests"}],"controls":{"AWS::S3.buckets":{"type":"resource","resourceType":"AWS::S3::Bucket","labelField":"BucketName","valueField":"BucketName"}},"metricTemplates":[{"resourceType":"AWS::S3::Bucket","namespace":"AWS/S3","defaultPeriod":86400,"dimensions":[{"dimensionName":"BucketName","labelName":"BucketName"},{"dimensionName":"StorageType","dimensionValue":"StandardStorage"}],"metrics":[{"id":"AWS::S3::Bucket:BucketSizeBytes","name":"BucketSizeBytes","defaultStat":"Average","defaultPeriod":86400}]},{"resourceType":"AWS::S3::Bucket","id":"AWS::S3::Bucket:AllStorageTypes","namespace":"AWS/S3","defaultPeriod":86400,"dimensions":[{"dimensionName":"BucketName","labelName":"BucketName"},{"dimensionName":"StorageType","dimensionValue":"AllStorageTypes"}],"metrics":[{"id":"AWS::S3::Bucket:AllStorageTypes:NumberOfObjects","name":"NumberOfObjects","defaultStat":"Average","defaultPeriod":86400}]},{"resourceType":"CW::S3::BucketFilter","namespace":"AWS/S3","dimensions":[{"dimensionName":"BucketName","labelName":"BucketName"},{"dimensionName":"FilterId","labelName":"FilterId"}],"metrics":[{"id":"CW::S3::BucketFilter:AllRequests","name":"AllRequests","defaultStat":"Sum"},{"id":"CW::S3::BucketFilter:GetRequests","name":"GetRequests","defaultStat":"Sum"},{"id":"CW::S3::BucketFilter:PutRequests","name":"PutRequests","defaultStat":"Sum"},{"id":"CW::S3::BucketFilter:DeleteRequests","name":"DeleteRequests","defaultStat":"Sum"},{"id":"CW::S3::BucketFilter:HeadRequests","name":"HeadRequests","defaultStat":"Sum"},{"id":"CW::S3::BucketFilter:PostRequests","name":"PostRequests","defaultStat":"Sum"},{"id":"CW::S3::BucketFilter:ListRequests","name":"ListRequests","defaultStat":"Sum"},{"id":"CW::S3::BucketFilter:BytesDownloaded","name":"BytesDownloaded","defaultStat":"Sum"},{"id":"CW::S3::BucketFilter:BytesUploaded","name":"BytesUploaded","defaultStat":"Sum"},{"id":"CW::S3::BucketFilter:4xxErrors","name":"4xxErrors","defaultStat":"Sum"},{"id":"CW::S3::BucketFilter:5xxErrors","name":"5xxErrors","defaultStat":"Sum"},{"id":"CW::S3::BucketFilter:FirstByteLatency","name":"FirstByteLatency","defaultStat":"Average"},{"id":"CW::S3::BucketFilter:TotalRequestLatency","name":"TotalRequestLatency","defaultStat":"Average"}]}],"dashboards":[{"id":"S3:CrossService","name":"S3","dependencies":[{"namespace":"AWS/S3"}],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::S3::Bucket:BucketSizeBytes"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::S3::Bucket:AllStorageTypes:NumberOfObjects"}]}]}]},{"id":"S3","name":"S3","dependencies":[{"namespace":"AWS/S3"}],"controls":["Shared::View.AlarmState","Shared::Group.ResourceGroup","AWS::S3.buckets"],"tables":[{"resourceType":"AWS::S3::Bucket","columns":["BucketName","CreationDate"]}],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::S3::Bucket:BucketSizeBytes"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::S3::Bucket:AllStorageTypes:NumberOfObjects"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"CW::S3::BucketFilter:AllRequests"}]},{"type":"chart","metrics":[{"metricTemplate":"CW::S3::BucketFilter:GetRequests"}]},{"type":"chart","metrics":[{"metricTemplate":"CW::S3::BucketFilter:PutRequests"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"CW::S3::BucketFilter:DeleteRequests"}]},{"type":"chart","metrics":[{"metricTemplate":"CW::S3::BucketFilter:HeadRequests"}]},{"type":"chart","metrics":[{"metricTemplate":"CW::S3::BucketFilter:PostRequests"}]},{"type":"chart","metrics":[{"metricTemplate":"CW::S3::BucketFilter:ListRequests"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"CW::S3::BucketFilter:BytesDownloaded"}]},{"type":"chart","metrics":[{"metricTemplate":"CW::S3::BucketFilter:BytesUploaded"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"CW::S3::BucketFilter:4xxErrors"}]},{"type":"chart","metrics":[{"metricTemplate":"CW::S3::BucketFilter:5xxErrors"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"CW::S3::BucketFilter:FirstByteLatency"}]},{"type":"chart","metrics":[{"metricTemplate":"CW::S3::BucketFilter:TotalRequestLatency"}]}]}]}]},{"id":"AWS::SageMaker","dashboard":"SageMaker","crossServiceDashboard":"SageMaker:CrossService","resourceTypes":[{"type":"AWS::SageMaker::Endpoint","keyMetric":"AWS::SageMaker::Endpoint:Invocations","dashboard":"SageMaker","arnRegex":".*:endpoint/(.*)"}],"controls":{"AWS::SageMaker.endpoints":{"type":"resource","resourceType":"AWS::SageMaker::Endpoint","labelField":"EndpointName","valueField":"EndpointName"}},"metricTemplates":[{"resourceType":"AWS::SageMaker::Endpoint","namespace":"AWS/SageMaker","dimensions":[{"dimensionName":"EndpointName","labelName":"EndpointName"},{"dimensionName":"VariantName","labelName":"VariantName"}],"metrics":[{"id":"AWS::SageMaker::Endpoint:Invocations","name":"Invocations","defaultStat":"Sum"},{"id":"AWS::SageMaker::Endpoint:Invocation5XXErrors","name":"Invocation5XXErrors","defaultStat":"Sum"},{"id":"AWS::SageMaker::Endpoint:Invocation4XXErrors","name":"Invocation4XXErrors","defaultStat":"Sum"},{"id":"AWS::SageMaker::Endpoint:InvocationsPerInstance","name":"InvocationsPerInstance","defaultStat":"Sum"},{"id":"AWS::SageMaker::Endpoint:ModelLatency","name":"ModelLatency","defaultStat":"Sum"},{"id":"AWS::SageMaker::Endpoint:OverheadLatency","name":"OverheadLatency","defaultStat":"Sum"}]}],"dashboards":[{"id":"SageMaker:CrossService","name":"SageMaker","dependencies":[{"namespace":"AWS/SageMaker"}],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::SageMaker::Endpoint:Invocations"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::SageMaker::Endpoint:Invocation5XXErrors"}]}]}]},{"id":"SageMaker","name":"SageMaker","dependencies":[{"namespace":"AWS/SageMaker"}],"controls":["Shared::View.AlarmState","Shared::Group.ResourceGroup","AWS::SageMaker.endpoints"],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::SageMaker::Endpoint:Invocations"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::SageMaker::Endpoint:Invocation5XXErrors"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::SageMaker::Endpoint:Invocation4XXErrors"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::SageMaker::Endpoint:InvocationsPerInstance"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::SageMaker::Endpoint:ModelLatency"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::SageMaker::Endpoint:OverheadLatency"}]}]}]}]},{"id":"AWS::SDKMetrics","dashboard":"SDKMetrics","crossServiceDashboard":"SDKMetrics:CrossService","resourceTypes":[{"type":"AWS::SDKMetrics::DestinationRegion","keyMetric":"AWS::SDKMetrics::DestinationRegion:CallCount","dashboard":"SDKMetrics"}],"controls":{"AWS::SDKMetrics.destinationRegions":{"type":"resource","resourceType":"AWS::SDKMetrics::DestinationRegion","labelField":"DestinationRegion","valueField":"DestinationRegion"}},"metricTemplates":[{"resourceType":"AWS::SDKMetrics::DestinationRegion","namespace":"AWS/SDKMetrics","dimensions":[{"dimensionName":"DestinationRegion","labelName":"DestinationRegion"},{"dimensionName":"Service","labelName":"Service"}],"metrics":[{"id":"AWS::SDKMetrics::DestinationRegion:CallCount","name":"CallCount","defaultStat":"Sum"},{"id":"AWS::SDKMetrics::DestinationRegion:ServerErrorCount","name":"ServerErrorCount","defaultStat":"Sum"},{"id":"AWS::SDKMetrics::DestinationRegion:ThrottleCount","name":"ThrottleCount","defaultStat":"Sum"},{"id":"AWS::SDKMetrics::DestinationRegion:Latency","name":"Latency","defaultStat":"p50"},{"id":"AWS::SDKMetrics::DestinationRegion:RetryCount","name":"RetryCount","defaultStat":"Sum"},{"id":"AWS::SDKMetrics::DestinationRegion:ClientErrorCount","name":"ClientErrorCount","defaultStat":"Sum"},{"id":"AWS::SDKMetrics::DestinationRegion:ConnectionErrorCount","name":"ConnectionErrorCount","defaultStat":"Sum"}]},{"id":"AWS::SDKMetrics::DestinationRegion::p90","resourceType":"AWS::SDKMetrics::DestinationRegion","namespace":"AWS/SDKMetrics","dimensions":[{"dimensionName":"DestinationRegion","labelName":"DestinationRegion"},{"dimensionName":"Service","labelName":"Service"}],"metrics":[{"id":"AWS::SDKMetrics::DestinationRegion::p90:Latency","name":"Latency","defaultStat":"p90"}]}],"dashboards":[{"id":"SDKMetrics:CrossService","name":"SDK Metrics","dependencies":[{"namespace":"AWS/SDKMetrics"}],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::SDKMetrics::DestinationRegion:CallCount"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::SDKMetrics::DestinationRegion:ServerErrorCount"}]}]}]},{"id":"SDKMetrics","name":"SDK Metrics","dependencies":[{"namespace":"AWS/SDKMetrics"}],"controls":["Shared::View.AlarmState","Shared::Group.ResourceGroup","AWS::SDKMetrics.destinationRegions"],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::SDKMetrics::DestinationRegion:CallCount"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::SDKMetrics::DestinationRegion:ServerErrorCount"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::SDKMetrics::DestinationRegion:ThrottleCount"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::SDKMetrics::DestinationRegion:Latency"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::SDKMetrics::DestinationRegion::p90:Latency"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::SDKMetrics::DestinationRegion:RetryCount"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::SDKMetrics::DestinationRegion:ClientErrorCount"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::SDKMetrics::DestinationRegion:ConnectionErrorCount"}]}]}]}]},{"id":"AWS::ServiceCatalog::CloudFormationProduct","dashboard":"ServiceCatalog","crossServiceDashboard":"ServiceCatalog:CrossService","resourceTypes":[{"type":"AWS::ServiceCatalog::CloudFormationProduct","keyMetric":"AWS::ServiceCatalog::CloudFormationProduct:ProvisionedProductLaunch","dashboard":"ServiceCatalog","arnRegex":".*:product/(.*)"}],"metricTemplates":[{"resourceType":"AWS::ServiceCatalog::CloudFormationProduct","namespace":"AWS/ServiceCatalog","dimensions":[{"dimensionName":"ProductId","labelName":"ProductId"}],"metrics":[{"id":"AWS::ServiceCatalog::CloudFormationProduct:ProvisionedProductLaunch","name":"ProvisionedProductLaunch","defaultStat":"Sum"}]}],"dashboards":[{"id":"ServiceCatalog:CrossService","name":"Service Catalog","dependencies":[{"namespace":"AWS/ServiceCatalog"}],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::ServiceCatalog::CloudFormationProduct:ProvisionedProductLaunch"}]}]}]},{"id":"ServiceCatalog","name":"Service Catalog","dependencies":[{"namespace":"AWS/ServiceCatalog"}],"controls":["Shared::View.AlarmState","Shared::Group.ResourceGroup"],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::ServiceCatalog::CloudFormationProduct:ProvisionedProductLaunch"}]}]}]}]},{"id":"AWS::SES","dashboard":"SES","crossServiceDashboard":"SES:CrossService","resourceTypes":[{"type":"AWS::SES::ReceiptRule","keyMetric":"AWS::SES::ReceiptRule:Send","dashboard":"SES"},{"type":"AWS::SES::ConfigurationSet","keyMetric":"AWS::SES::ConfigurationSet:Send","dashboard":"SES","arnRegex":".*:configuration-set/(.*)"}],"controls":{"AWS::SES.ReceiptRules":{"type":"resource","resourceType":"AWS::SES::ReceiptRule","labelField":"RuleName","valueField":"RuleName"}},"metricTemplates":[{"resourceType":"AWS::SES::ReceiptRule","namespace":"AWS/SES","dimensions":[{"dimensionName":"RuleName","labelName":"RuleName"}],"metrics":[{"id":"AWS::SES::ReceiptRule:Bounce","name":"Bounce","defaultStat":"Sum"},{"id":"AWS::SES::ReceiptRule:Click","name":"Click","defaultStat":"Sum"},{"id":"AWS::SES::ReceiptRule:Complaint","name":"Complaint","defaultStat":"Sum"},{"id":"AWS::SES::ReceiptRule:Delivery","name":"Delivery","defaultStat":"Sum"},{"id":"AWS::SES::ReceiptRule:Open","name":"Open","defaultStat":"Sum"},{"id":"AWS::SES::ReceiptRule:Reject","name":"Reject","defaultStat":"Sum"},{"id":"AWS::SES::ReceiptRule:RenderingFailure","name":"RenderingFailure","defaultStat":"Sum"},{"id":"AWS::SES::ReceiptRule:Reputation.BounceRate","name":"Reputation.BounceRate","defaultStat":"Average"},{"id":"AWS::SES::ReceiptRule:Reputation.ComplaintRate","name":"Reputation.ComplaintRate","defaultStat":"Average"},{"id":"AWS::SES::ReceiptRule:Send","name":"Send","defaultStat":"Sum"}]},{"resourceType":"AWS::SES::ConfigurationSet","namespace":"AWS/SES","dimensions":[{"dimensionName":"ses:configuration-set","labelName":"ses:configuration-set"}],"metrics":[{"id":"AWS::SES::ConfigurationSet:Bounce","name":"Bounce","defaultStat":"Sum"},{"id":"AWS::SES::ConfigurationSet:Click","name":"Click","defaultStat":"Sum"},{"id":"AWS::SES::ConfigurationSet:Complaint","name":"Complaint","defaultStat":"Sum"},{"id":"AWS::SES::ConfigurationSet:Delivery","name":"Delivery","defaultStat":"Sum"},{"id":"AWS::SES::ConfigurationSet:Open","name":"Open","defaultStat":"Sum"},{"id":"AWS::SES::ConfigurationSet:Reject","name":"Reject","defaultStat":"Sum"},{"id":"AWS::SES::ConfigurationSet:RenderingFailure","name":"RenderingFailure","defaultStat":"Sum"},{"id":"AWS::SES::ConfigurationSet:Reputation.BounceRate","name":"Reputation.BounceRate","defaultStat":"Sum"},{"id":"AWS::SES::ConfigurationSet:Reputation.ComplaintRate","name":"Reputation.ComplaintRate","defaultStat":"Sum"},{"id":"AWS::SES::ConfigurationSet:Send","name":"Send","defaultStat":"Sum"}]}],"dashboards":[{"id":"SES:CrossService","name":"Simple Email Service","dependencies":[{"namespace":"AWS/SES"}],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::SES::ReceiptRule:Send"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::SES::ReceiptRule:Reject"}]}]}]},{"id":"SES","name":"Simple Email Service","dependencies":[{"namespace":"AWS/SES"}],"controls":["Shared::View.AlarmState","Shared::Group.ResourceGroup","AWS::SES.ReceiptRules"],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::SES::ReceiptRule:Send"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::SES::ReceiptRule:Reject"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::SES::ReceiptRule:Bounce"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::SES::ReceiptRule:Complaint"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::SES::ReceiptRule:Delivery"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::SES::ReceiptRule:Open"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::SES::ReceiptRule:Click"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::SES::ReceiptRule:RenderingFailure"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::SES::ReceiptRule:Reputation.BounceRate"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::SES::ReceiptRule:Reputation.ComplaintRate"}]}]}]}]},{"id":"AWS::SNS","dashboard":"SNS","crossServiceDashboard":"SNS:CrossService","resourceTypes":[{"type":"AWS::SNS::Topic","keyMetric":"AWS::SNS::Topic:NumberOfMessagesPublished","dashboard":"SNS","isResourceNode":true,"arnRegex":".*:(.*)"}],"controls":{"AWS::SNS.topics":{"type":"resource","resourceType":"AWS::SNS::Topic","labelField":"TopicName","valueField":"TopicName"}},"metricTemplates":[{"resourceType":"AWS::SNS::Topic","namespace":"AWS/SNS","dimensions":[{"dimensionName":"TopicName","labelName":"TopicName"}],"metrics":[{"id":"AWS::SNS::Topic:NumberOfNotificationsDelivered","name":"NumberOfNotificationsDelivered","defaultStat":"Sum"},{"id":"AWS::SNS::Topic:NumberOfNotificationsFailed","name":"NumberOfNotificationsFailed","defaultStat":"Sum"},{"id":"AWS::SNS::Topic:NumberOfMessagesPublished","name":"NumberOfMessagesPublished","defaultStat":"Sum"},{"id":"AWS::SNS::Topic:PublishSize","name":"PublishSize","defaultStat":"Average"},{"id":"AWS::SNS::Topic:SMSSuccessRate","name":"SMSSuccessRate","defaultStat":"Sum"}]}],"dashboards":[{"id":"SNS:CrossService","name":"Simple Notification Service","dependencies":[{"namespace":"AWS/SNS"}],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::SNS::Topic:NumberOfNotificationsDelivered"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::SNS::Topic:NumberOfNotificationsFailed"}]}]}]},{"id":"SNS","name":"Simple Notification Service","dependencies":[{"namespace":"AWS/SNS"}],"controls":["Shared::View.AlarmState","Shared::Group.ResourceGroup","AWS::SNS.topics"],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::SNS::Topic:NumberOfNotificationsDelivered"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::SNS::Topic:NumberOfNotificationsFailed"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::SNS::Topic:NumberOfMessagesPublished"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::SNS::Topic:PublishSize"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::SNS::Topic:SMSSuccessRate"}]}]}]}]},{"id":"AWS::SQS","dashboard":"SQS","crossServiceDashboard":"SQS:CrossService","resourceTypes":[{"type":"AWS::SQS::Queue","keyMetric":"AWS::SQS::Queue:NumberOfMessagesSent","dashboard":"SQS","isResourceNode":true,"arnRegex":".*:(.*)","describe":"sqs-describe-queues","consoleLink":"/sqs/v2/home?region={region}#/queues/{QueueUrl}"}],"controls":{"AWS::SQS.queues":{"type":"resource","resourceType":"AWS::SQS::Queue","labelField":"QueueName","valueField":"QueueName"}},"metricTemplates":[{"resourceType":"AWS::SQS::Queue","namespace":"AWS/SQS","dimensions":[{"dimensionName":"QueueName","labelName":"QueueName"}],"metrics":[{"id":"AWS::SQS::Queue:NumberOfMessagesSent","name":"NumberOfMessagesSent","defaultStat":"Average"},{"id":"AWS::SQS::Queue:ApproximateNumberOfMessagesDelayed","name":"ApproximateNumberOfMessagesDelayed","defaultStat":"Average"},{"id":"AWS::SQS::Queue:NumberOfMessagesReceived","name":"NumberOfMessagesReceived","defaultStat":"Average"},{"id":"AWS::SQS::Queue:NumberOfMessagesDeleted","name":"NumberOfMessagesDeleted","defaultStat":"Average"},{"id":"AWS::SQS::Queue:ApproximateNumberOfMessagesNotVisible","name":"ApproximateNumberOfMessagesNotVisible","defaultStat":"Average"},{"id":"AWS::SQS::Queue:ApproximateNumberOfMessagesVisible","name":"ApproximateNumberOfMessagesVisible","defaultStat":"Average"},{"id":"AWS::SQS::Queue:ApproximateAgeOfOldestMessage","name":"ApproximateAgeOfOldestMessage","defaultStat":"Average"},{"id":"AWS::SQS::Queue:NumberOfEmptyReceives","name":"NumberOfEmptyReceives","defaultStat":"Average"},{"id":"AWS::SQS::Queue:SentMessageSize","name":"SentMessageSize","defaultStat":"Average"}]}],"dashboards":[{"id":"SQS:CrossService","name":"Simple Queue Service","dependencies":[{"namespace":"AWS/SQS"}],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::SQS::Queue:NumberOfMessagesSent"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::SQS::Queue:ApproximateNumberOfMessagesDelayed"}]}]}]},{"id":"SQS","name":"Simple Queue Service","dependencies":[{"namespace":"AWS/SQS"}],"controls":["Shared::View.AlarmState","Shared::Group.ResourceGroup","AWS::SQS.queues"],"tables":[{"resourceType":"AWS::SQS::Queue","columns":["QueueName","ApproximateNumberOfMessages","ApproximateNumberOfMessagesDelayed","ApproximateNumberOfMessagesNotVisible","DelaySeconds","CreatedTimestamp"]}],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::SQS::Queue:NumberOfMessagesSent"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::SQS::Queue:NumberOfMessagesReceived"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::SQS::Queue:NumberOfMessagesDeleted"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::SQS::Queue:ApproximateNumberOfMessagesDelayed"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::SQS::Queue:ApproximateNumberOfMessagesNotVisible"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::SQS::Queue:ApproximateNumberOfMessagesVisible"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::SQS::Queue:ApproximateAgeOfOldestMessage"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::SQS::Queue:NumberOfEmptyReceives"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::SQS::Queue:SentMessageSize"}]}]}]}]},{"id":"AWS::SSM-RunCommand","dashboard":"SSM-RunCommand","crossServiceDashboard":"SSM-RunCommand:CrossService","resourceTypes":[{"type":"AWS::SSM-RunCommand::Command","keyMetric":"AWS::SSM-RunCommand::Command:CommandsSucceeded","dashboard":"SSM-RunCommand"}],"metricTemplates":[{"resourceType":"AWS::SSM-RunCommand::Command","namespace":"AWS/SSM-RunCommand","dimensions":[],"metrics":[{"id":"AWS::SSM-RunCommand::Command:CommandsDeliveryTimedOut","name":"CommandsDeliveryTimedOut","defaultStat":"Sum"},{"id":"AWS::SSM-RunCommand::Command:CommandsFailed","name":"CommandsFailed","defaultStat":"Sum"},{"id":"AWS::SSM-RunCommand::Command:CommandsSucceeded","name":"CommandsSucceeded","defaultStat":"Sum"}]}],"dashboards":[{"id":"SSM-RunCommand:CrossService","name":"Systems Manager Run Command","dependencies":[{"namespace":"AWS/SSM-RunCommand"}],"controls":["Shared::View.AlarmState","Shared::Group.ResourceGroup"],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::SSM-RunCommand::Command:CommandsFailed"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::SSM-RunCommand::Command:CommandsSucceeded"}]}]}]},{"id":"SSM-RunCommand","name":"Systems Manager Run Command","dependencies":[{"namespace":"AWS/SSM-RunCommand"}],"controls":["Shared::View.AlarmState","Shared::Group.ResourceGroup"],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::SSM-RunCommand::Command:CommandsDeliveryTimedOut"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::SSM-RunCommand::Command:CommandsFailed"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::SSM-RunCommand::Command:CommandsSucceeded"}]}]}]}]},{"id":"AWS::StepFunctions","dashboard":"States","crossServiceDashboard":"States:CrossService","resourceTypes":[{"type":"AWS::StepFunctions::StateMachine","keyMetric":"AWS::StepFunctions::StateMachine:ExecutionTime","dashboard":"States","arnRegex":"(.*)"},{"type":"AWS::StepFunctions::Activity","keyMetric":"AWS::StepFunctions::Activity:ActivityTime","dashboard":"States","arnRegex":"(.*)"}],"controls":{"AWS::StepFunctions.stateMachineArns":{"type":"resource","resourceType":"AWS::StepFunctions::StateMachine","labelField":"StateMachine","valueField":"StateMachine"}},"metricTemplates":[{"resourceType":"AWS::StepFunctions::StateMachine","namespace":"AWS/States","dimensions":[{"dimensionName":"StateMachineArn","labelName":"StateMachineArn"}],"metrics":[{"id":"AWS::StepFunctions::StateMachine:ExecutionTime","name":"ExecutionTime","defaultStat":"Average"},{"id":"AWS::StepFunctions::StateMachine:ExecutionsFailed","name":"ExecutionsFailed","defaultStat":"Sum"},{"id":"AWS::StepFunctions::StateMachine:ExecutionsSucceeded","name":"ExecutionsSucceeded","defaultStat":"Sum"},{"id":"AWS::StepFunctions::StateMachine:ExecutionsThrottled","name":"ExecutionsThrottled","defaultStat":"Sum"},{"id":"AWS::StepFunctions::StateMachine:ExecutionsAborted","name":"ExecutionsAborted","defaultStat":"Sum"},{"id":"AWS::StepFunctions::StateMachine:ExecutionsTimedOut","name":"ExecutionsTimedOut","defaultStat":"Sum"}]},{"resourceType":"AWS::StepFunctions::Activity","namespace":"AWS/States","dimensions":[{"dimensionName":"ActivityArn","labelName":"ActivityArn"}],"metrics":[{"id":"AWS::StepFunctions::Activity:ActivityTime","name":"ActivityTime","defaultStat":"Average"},{"id":"AWS::StepFunctions::Activity:ActivitiesSucceeded","name":"ActivitiesSucceeded","defaultStat":"Sum"},{"id":"AWS::StepFunctions::Activity:ActivitiesFailed","name":"ActivitiesFailed","defaultStat":"Sum"},{"id":"AWS::StepFunctions::Activity:ActivitiesHeartbeatTimedOut","name":"ActivitiesHeartbeatTimedOut","defaultStat":"Sum"},{"id":"AWS::StepFunctions::Activity:ActivitiesScheduled","name":"ActivitiesScheduled","defaultStat":"Sum"},{"id":"AWS::StepFunctions::Activity:ActivitiesStarted","name":"ActivitiesStarted","defaultStat":"Sum"},{"id":"AWS::StepFunctions::Activity:ActivitiesTimedOut","name":"ActivitiesTimedOut","defaultStat":"Sum"},{"id":"AWS::StepFunctions::Activity:ActivityRunTime","name":"ActivityRunTime","defaultStat":"Average"},{"id":"AWS::StepFunctions::Activity:ActivityScheduleTime","name":"ActivityScheduleTime","defaultStat":"Average"}]}],"dashboards":[{"id":"States:CrossService","name":"Step Functions","dependencies":[{"namespace":"AWS/States"}],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::StepFunctions::StateMachine:ExecutionTime"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::StepFunctions::StateMachine:ExecutionsFailed"}]}]}]},{"id":"States","name":"Step Functions","dependencies":[{"namespace":"AWS/States"}],"controls":["Shared::View.AlarmState","Shared::Group.ResourceGroup","AWS::StepFunctions.stateMachineArns"],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::StepFunctions::StateMachine:ExecutionTime"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::StepFunctions::StateMachine:ExecutionsSucceeded"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::StepFunctions::StateMachine:ExecutionsFailed"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::StepFunctions::StateMachine:ExecutionsThrottled"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::StepFunctions::StateMachine:ExecutionsAborted"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::StepFunctions::StateMachine:ExecutionsTimedOut"}]}]}]}]},{"id":"AWS::StorageGateway","dashboard":"StorageGateway","crossServiceDashboard":"StorageGateway:CrossService","resourceTypes":[{"type":"AWS::StorageGateway::Gateway","keyMetric":"AWS::StorageGateway::Gateway:CacheHitPercent","dashboard":"StorageGateway","arnRegex":".*:gateway/(.*)"}],"controls":{"AWS::StorageGateway.gateways":{"type":"resource","resourceType":"AWS::StorageGateway::Gateway","labelField":"GatewayId","valueField":"GatewayId"}},"metricTemplates":[{"resourceType":"AWS::StorageGateway::Gateway","namespace":"AWS/StorageGateway","dimensions":[{"dimensionName":"GatewayId","labelName":"GatewayId"}],"metrics":[{"id":"AWS::StorageGateway::Gateway:CacheFree","name":"CacheFree","defaultStat":"Average"},{"id":"AWS::StorageGateway::Gateway:CacheHitPercent","name":"CacheHitPercent","defaultStat":"Average"},{"id":"AWS::StorageGateway::Gateway:CachePercentDirty","name":"CachePercentDirty","defaultStat":"Average"},{"id":"AWS::StorageGateway::Gateway:CachePercentUsed","name":"CachePercentUsed","defaultStat":"Average"},{"id":"AWS::StorageGateway::Gateway:CacheUsed","name":"CacheUsed","defaultStat":"Average"},{"id":"AWS::StorageGateway::Gateway:CloudBytesDownloaded","name":"CloudBytesDownloaded","defaultStat":"Sum"},{"id":"AWS::StorageGateway::Gateway:CloudBytesUploaded","name":"CloudBytesUploaded","defaultStat":"Sum"},{"id":"AWS::StorageGateway::Gateway:CloudDownloadLatency","name":"CloudDownloadLatency","defaultStat":"Average"},{"id":"AWS::StorageGateway::Gateway:QueuedWrites","name":"QueuedWrites","defaultStat":"Sum"},{"id":"AWS::StorageGateway::Gateway:ReadBytes","name":"ReadBytes","defaultStat":"Sum"},{"id":"AWS::StorageGateway::Gateway:ReadTime","name":"ReadTime","defaultStat":"Average"},{"id":"AWS::StorageGateway::Gateway:TimeSinceLastRecoveryPoint","name":"TimeSinceLastRecoveryPoint","defaultStat":"Average"},{"id":"AWS::StorageGateway::Gateway:TotalCacheSize","name":"TotalCacheSize","defaultStat":"Average"},{"id":"AWS::StorageGateway::Gateway:UploadBufferFree","name":"UploadBufferFree","defaultStat":"Average"},{"id":"AWS::StorageGateway::Gateway:UploadBufferPercentUsed","name":"UploadBufferPercentUsed","defaultStat":"Average"},{"id":"AWS::StorageGateway::Gateway:UploadBufferUsed","name":"UploadBufferUsed","defaultStat":"Average"},{"id":"AWS::StorageGateway::Gateway:WorkingStorageFree","name":"WorkingStorageFree","defaultStat":"Average"},{"id":"AWS::StorageGateway::Gateway:WorkingStoragePercentUsed","name":"WorkingStoragePercentUsed","defaultStat":"Average"},{"id":"AWS::StorageGateway::Gateway:WorkingStorageUsed","name":"WorkingStorageUsed","defaultStat":"Average"},{"id":"AWS::StorageGateway::Gateway:WriteBytes","name":"WriteBytes","defaultStat":"Sum"},{"id":"AWS::StorageGateway::Gateway:WriteTime","name":"WriteTime","defaultStat":"Average"}]}],"dashboards":[{"id":"StorageGateway:CrossService","name":"Storage Gateway","dependencies":[{"namespace":"AWS/StorageGateway"}],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::StorageGateway::Gateway:CacheHitPercent"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::StorageGateway::Gateway:CachePercentUsed"}]}]}]},{"id":"StorageGateway","name":"Storage Gateway","dependencies":[{"namespace":"AWS/StorageGateway"}],"controls":["Shared::View.AlarmState","Shared::Group.ResourceGroup","AWS::StorageGateway.gateways"],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::StorageGateway::Gateway:CacheHitPercent"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::StorageGateway::Gateway:CachePercentUsed"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::StorageGateway::Gateway:CachePercentDirty"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::StorageGateway::Gateway:CloudBytesDownloaded"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::StorageGateway::Gateway:CloudDownloadLatency"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::StorageGateway::Gateway:CloudBytesUploaded"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::StorageGateway::Gateway:UploadBufferFree"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::StorageGateway::Gateway:CacheFree"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::StorageGateway::Gateway:UploadBufferPercentUsed"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::StorageGateway::Gateway:UploadBufferUsed"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::StorageGateway::Gateway:CacheUsed"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::StorageGateway::Gateway:QueuedWrites"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::StorageGateway::Gateway:ReadBytes"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::StorageGateway::Gateway:ReadTime"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::StorageGateway::Gateway:TotalCacheSize"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::StorageGateway::Gateway:WriteBytes"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::StorageGateway::Gateway:WriteTime"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::StorageGateway::Gateway:TimeSinceLastRecoveryPoint"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::StorageGateway::Gateway:WorkingStorageFree"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::StorageGateway::Gateway:WorkingStoragePercentUsed"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::StorageGateway::Gateway:WorkingStorageUsed"}]}]}]}]},{"id":"AWS::SWF","dashboard":"SWF","crossServiceDashboard":"SWF:CrossService","resourceTypes":[{"type":"AWS::SWF::API","keyMetric":"AWS::SWF::API:ConsumedCapacity","dashboard":"SWF"}],"controls":{"AWS::SWF.apis":{"type":"resource","resourceType":"AWS::SWF::API","labelField":"APIName","valueField":"APIName"}},"metricTemplates":[{"resourceType":"AWS::SWF::API","namespace":"AWS/SWF","dimensions":[{"dimensionName":"APIName","labelName":"APIName"}],"metrics":[{"id":"AWS::SWF::API:ConsumedCapacity","name":"ConsumedCapacity","defaultStat":"Average"},{"id":"AWS::SWF::API:ThrottledEvents","name":"ThrottledEvents","defaultStat":"Sum"},{"id":"AWS::SWF::API:ProvisionedBucketSize","name":"ProvisionedBucketSize","defaultStat":"Average"},{"id":"AWS::SWF::API:ProvisionedRefillRate","name":"ProvisionedRefillRate","defaultStat":"Average"}]}],"dashboards":[{"id":"SWF:CrossService","name":"SWF","dependencies":[{"namespace":"AWS/SWF"}],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::SWF::API:ConsumedCapacity"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::SWF::API:ThrottledEvents"}]}]}]},{"id":"SWF","name":"SWF","dependencies":[{"namespace":"AWS/SWF"}],"controls":["Shared::View.AlarmState","Shared::Group.ResourceGroup","AWS::SWF.apis"],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::SWF::API:ConsumedCapacity"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::SWF::API:ThrottledEvents"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::SWF::API:ProvisionedBucketSize"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::SWF::API:ProvisionedRefillRate"}]}]}]}]},{"id":"AWS::Synthetics::Canary","dashboard":"CloudWatchSynthetics","crossServiceDashboard":"CloudWatchSynthetics:CrossService","resourceTypes":[{"type":"AWS::Synthetics::Canary","keyMetric":"AWS::Synthetics::Canary:Duration","dashboard":"CloudWatchSynthetics","arnRegex":".*:canary:(.*)","describe":"synthetics-describe-canaries-last-run","consoleLink":"/cloudwatch/home?region={region}#synthetics:canary/detail/{CanaryName}"}],"metricTemplates":[{"resourceType":"AWS::Synthetics::Canary","namespace":"CloudWatchSynthetics","dimensions":[{"dimensionName":"CanaryName","labelName":"CanaryName"}],"metrics":[{"id":"AWS::Synthetics::Canary:2xx","name":"2xx","defaultStat":"Sum"},{"id":"AWS::Synthetics::Canary:4xx","name":"4xx","defaultStat":"Sum"},{"id":"AWS::Synthetics::Canary:5xx","name":"5xx","defaultStat":"Sum"},{"id":"AWS::Synthetics::Canary:Duration","name":"Duration","defaultStat":"Maximum"},{"id":"AWS::Synthetics::Canary:Failed","name":"Failed","defaultStat":"Sum"},{"id":"AWS::Synthetics::Canary:Failed requests","name":"Failed requests","defaultStat":"Sum"},{"id":"AWS::Synthetics::Canary:SuccessPercent","name":"SuccessPercent","defaultStat":"Average"}]}],"dashboards":[{"id":"CloudWatchSynthetics:CrossService","name":"Synthetics","dependencies":[{"namespace":"CloudWatchSynthetics"}],"rows":[{"widgets":[{"type":"chart","metrics":[],"properties":{"metrics":[["CloudWatchSynthetics","Duration"]],"title":"Duration:Aggregate"}},{"type":"chart","metrics":[],"properties":{"metrics":[["CloudWatchSynthetics","SuccessPercent"]],"yAxis":{"left":{"max":100,"min":0}},"title":"SuccessPercent:Aggregate"}}]}]},{"id":"CloudWatchSynthetics","name":"Synthetics","dependencies":[{"namespace":"CloudWatchSynthetics"}],"controls":["Shared::View.AlarmState","Shared::Group.ResourceGroup"],"tables":[{"resourceType":"AWS::Synthetics::Canary","columns":["CanaryName","LastRun"]}],"rows":[{"widgets":[{"type":"text","height":1,"properties":{"markdown":"\\n# Aggregate metrics\\n"}}]},{"widgets":[{"type":"chart","metrics":[],"properties":{"metrics":[["CloudWatchSynthetics","SuccessPercent",{"label":"Canary count"}]],"view":"singleValue","title":"Canaries","stat":"SampleCount"}},{"type":"chart","metrics":[],"properties":{"metrics":[["CloudWatchSynthetics","Duration",{"label":"Average duration"}]],"view":"singleValue","title":"Duration"}},{"type":"chart","metrics":[],"properties":{"metrics":[["CloudWatchSynthetics","SuccessPercent",{"label":"Success percentage"}]],"view":"singleValue","title":"SuccessPercent"}},{"type":"chart","metrics":[],"properties":{"metrics":[["CloudWatchSynthetics","Failed",{"label":"Failed count","stat":"Sum"}]],"view":"singleValue","title":"Failed"}},{"type":"chart","metrics":[],"properties":{"metrics":[["CloudWatchSynthetics","4xx",{"label":"Errors count"}]],"view":"singleValue","title":"Errors (4xx)","stat":"Sum"}},{"type":"chart","metrics":[],"properties":{"metrics":[["CloudWatchSynthetics","5xx",{"label":"Fault count"}]],"view":"singleValue","title":"Faults (5xx)","stat":"Sum"}}]},{"widgets":[{"type":"chart","width":4,"metrics":[],"properties":{"metrics":[[{"expression":"m2 - m1","label":"Passed","id":"e1"}],["CloudWatchSynthetics","SuccessPercent",{"id":"m2","label":"SuccessPercent","visible":false}],[".","Failed",{"id":"m1","label":"Failed","color":"#d62728","stat":"Sum"}]],"view":"pie","title":"Status","stat":"SampleCount"}},{"type":"chart","width":20,"metrics":[],"properties":{"metrics":[["CloudWatchSynthetics","SuccessPercent",{"label":"Passed (%)"}],["CloudWatchSynthetics","Failed",{"color":"#d62728","stat":"SampleCount","yAxis":"right","label":"Failed (count)"}]],"title":"Canary run","yAxis":{"left":{"max":100,"min":0}}}}]},{"widgets":[{"type":"chart","metrics":[],"properties":{"title":"Duration","metrics":[["CloudWatchSynthetics","Duration",{"label":"p50","stat":"p50"}],["...",{"label":"p90"}],["...",{"stat":"p95","label":"p95"}]],"stat":"p90"}}]},{"widgets":[{"type":"chart","metrics":[],"properties":{"metrics":[["CloudWatchSynthetics","Duration",{"id":"m1"}],[{"expression":"ANOMALY_DETECTION_BAND(m1,2)","label":"Duration (expected)","color":"#95A5A6","id":"e1"}]],"title":"Canary duration"}},{"type":"chart","metrics":[],"properties":{"metrics":[["CloudWatchSynthetics","SuccessPercent"]],"yAxis":{"left":{"max":100,"min":0}}}},{"type":"chart","metrics":[],"properties":{"metrics":[["CloudWatchSynthetics","Failed"]],"title":"Failed canary runs","stat":"Sum"}}]},{"widgets":[{"type":"text","height":1,"properties":{"markdown":"\\n# Resource metrics\\n"}}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::Synthetics::Canary:Duration"}]},{"type":"chart","properties":{"yAxis":{"left":{"max":100,"min":0}}},"metrics":[{"metricTemplate":"AWS::Synthetics::Canary:SuccessPercent"}]}]}]}]},{"id":"AWS::Tardigrade","dashboard":"Tardigrade","crossServiceDashboard":"Tardigrade:CrossService","resourceTypes":[{"type":"AWS::Tardigrade::LoadBalancer","keyMetric":"AWS::Tardigrade::LoadBalancer:ProcessedBytes","dashboard":"Tardigrade"}],"controls":{"AWS::Tardigrade.loadBalancers":{"type":"resource","resourceType":"AWS::Tardigrade::LoadBalancer","labelField":"LoadBalancer","valueField":"LoadBalancer"}},"metricTemplates":[{"resourceType":"AWS::Tardigrade::LoadBalancer","namespace":"AWS/Tardigrade","dimensions":[{"dimensionName":"LoadBalancer","labelName":"LoadBalancer"}],"metrics":[{"id":"AWS::Tardigrade::LoadBalancer:ProcessedBytes","name":"ProcessedBytes","defaultStat":"Sum"}]}],"dashboards":[{"id":"Tardigrade:CrossService","name":"Tardigrade","dependencies":[{"namespace":"AWS/Tardigrade"}],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::Tardigrade::LoadBalancer:ProcessedBytes"}]}]}]},{"id":"Tardigrade","name":"Tardigrade","dependencies":[{"namespace":"AWS/Tardigrade"}],"controls":["Shared::View.AlarmState","Shared::Group.ResourceGroup","AWS::Tardigrade.loadBalancers"],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::Tardigrade::LoadBalancer:ProcessedBytes"}]}]}]}]},{"id":"AWS::Timestream","dashboard":"Timestream","crossServiceDashboard":"Timestream:CrossService","resourceTypes":[{"type":"AWS::Timestream::Account","keyMetric":"AWS::Timestream::Account::QueryLatency:SuccessfulRequestLatency","dashboard":"Timestream"},{"type":"AWS::Timestream::Table","keyMetric":"AWS::Timestream::Table::WriteLatency:SuccessfulRequestLatency","dashboard":"Timestream"}],"metricTemplates":[{"id":"AWS::Timestream::CrossService::QueryAccount","resourceType":"AWS::Timestream::Account","namespace":"AWS/Timestream","dimensions":[{"dimensionName":"Operation","dimensionValue":"Query"}],"metrics":[{"id":"AWS::Timestream::CrossService::QueryAccount:UserErrors","name":"UserErrors","defaultStat":"Sum"},{"id":"AWS::Timestream::CrossService::QueryAccount:SystemErrors","name":"SystemErrors","defaultStat":"Sum"},{"id":"AWS::Timestream::CrossService::QueryAccount:SuccessfulRequestLatency","name":"SuccessfulRequestLatency","defaultStat":"SampleCount"}]},{"id":"AWS::Timestream::CrossService::WriteTable","resourceType":"AWS::Timestream::Table","namespace":"AWS/Timestream","dimensions":[{"dimensionName":"Operation","dimensionValue":"WriteRecords"},{"dimensionName":"DatabaseName","labelName":"DatabaseName"},{"dimensionName":"TableName","labelName":"TableName"}],"metrics":[{"id":"AWS::Timestream::CrossService::WriteTable:UserErrors","name":"UserErrors","defaultStat":"Sum"},{"id":"AWS::Timestream::CrossService::WriteTable:SystemErrors","name":"SystemErrors","defaultStat":"Sum"},{"id":"AWS::Timestream::CrossService::WriteTable:SuccessfulRequestLatency","name":"SuccessfulRequestLatency","defaultStat":"SampleCount"}]},{"id":"AWS::Timestream::Account::QueryLatency","resourceType":"AWS::Timestream::Account","namespace":"AWS/Timestream","dimensions":[{"dimensionName":"Operation","dimensionValue":"Query"}],"metrics":[{"id":"AWS::Timestream::Account::QueryLatency:SuccessfulRequestLatency","name":"SuccessfulRequestLatency","defaultStat":"p95"}]},{"id":"AWS::Timestream::Account::QueryCount","resourceType":"AWS::Timestream::Account","namespace":"AWS/Timestream","dimensions":[{"dimensionName":"Operation","dimensionValue":"Query"}],"metrics":[{"id":"AWS::Timestream::Account::QueryCount:UserErrors","name":"UserErrors","defaultStat":"Sum"},{"id":"AWS::Timestream::Account::QueryCount:SystemErrors","name":"SystemErrors","defaultStat":"Sum"},{"id":"AWS::Timestream::Account::QueryCount:SuccessfulRequestLatency","name":"SuccessfulRequestLatency","defaultStat":"SampleCount"}]},{"id":"AWS::Timestream::Table::WriteLatency","resourceType":"AWS::Timestream::Table","namespace":"AWS/Timestream","dimensions":[{"dimensionName":"Operation","dimensionValue":"WriteRecords"},{"dimensionName":"DatabaseName","labelName":"DatabaseName"},{"dimensionName":"TableName","labelName":"TableName"}],"metrics":[{"id":"AWS::Timestream::Table::WriteLatency:SuccessfulRequestLatency","name":"SuccessfulRequestLatency","defaultStat":"p95"}]},{"id":"AWS::Timestream::Table::WriteCount","resourceType":"AWS::Timestream::Table","namespace":"AWS/Timestream","dimensions":[{"dimensionName":"Operation","dimensionValue":"WriteRecords"},{"dimensionName":"DatabaseName","labelName":"DatabaseName"},{"dimensionName":"TableName","labelName":"TableName"}],"metrics":[{"id":"AWS::Timestream::Table::WriteCount:SuccessfulRequestLatency","name":"SuccessfulRequestLatency","defaultStat":"SampleCount"},{"id":"AWS::Timestream::Table::WriteCount:UserErrors","name":"UserErrors","defaultStat":"Sum"},{"id":"AWS::Timestream::Table::WriteCount:SystemErrors","name":"SystemErrors","defaultStat":"Sum"}]}],"dashboards":[{"id":"Timestream:CrossService","name":"Timestream","dependencies":[{"namespace":"AWS/Timestream"}],"rows":[{"widgets":[{"type":"chart","properties":{"title":"Total Queries"},"metrics":[{"metricExpression":"SUM(METRICS())","resourceType":"AWS::Timestream::Account","metricOptions":{"label":"Count"}},{"metricTemplate":"AWS::Timestream::CrossService::QueryAccount:SuccessfulRequestLatency","metricOptions":{"visible":false}},{"metricTemplate":"AWS::Timestream::CrossService::QueryAccount:UserErrors","metricOptions":{"visible":false}},{"metricTemplate":"AWS::Timestream::CrossService::QueryAccount:SystemErrors","metricOptions":{"visible":false}}]},{"type":"chart","properties":{"title":"Total Ingest"},"metrics":[{"metricExpression":"SUM(METRICS())","resourceType":"AWS::Timestream::Table","metricOptions":{"label":"Count"}},{"metricTemplate":"AWS::Timestream::CrossService::WriteTable:SuccessfulRequestLatency","metricOptions":{"visible":false}},{"metricTemplate":"AWS::Timestream::CrossService::WriteTable:UserErrors","metricOptions":{"visible":false}},{"metricTemplate":"AWS::Timestream::CrossService::WriteTable:SystemErrors","metricOptions":{"visible":false}}]}]}]},{"id":"Timestream","name":"Timestream","dependencies":[{"namespace":"AWS/Timestream"}],"rows":[{"widgets":[{"type":"chart","properties":{"title":"Query Latency"},"metrics":[{"metricTemplate":"AWS::Timestream::Account::QueryLatency:SuccessfulRequestLatency"}]},{"type":"chart","properties":{"title":"WriteRecords Latency"},"metrics":[{"metricExpression":"AVG(METRICS())","resourceType":"AWS::Timestream::Table","metricOptions":{"label":"SuccessfulRequestLatency"}},{"metricTemplate":"AWS::Timestream::Table::WriteLatency:SuccessfulRequestLatency","metricOptions":{"visible":false}}]}]},{"widgets":[{"type":"chart","properties":{"title":"Query Count"},"metrics":[{"metricTemplate":"AWS::Timestream::Account::QueryCount:SuccessfulRequestLatency","metricOptions":{"label":"Count"}}]},{"type":"chart","properties":{"title":"WriteRecords Count"},"metrics":[{"metricExpression":"SUM(METRICS())","resourceType":"AWS::Timestream::Table","metricOptions":{"label":"Count"}},{"metricTemplate":"AWS::Timestream::Table::WriteCount:SuccessfulRequestLatency","metricOptions":{"visible":false}}]}]},{"widgets":[{"type":"chart","properties":{"title":"Query Errors"},"metrics":[{"metricExpression":"SUM(METRICS())","resourceType":"AWS::Timestream::Account","metricOptions":{"label":"Errors"}},{"metricTemplate":"AWS::Timestream::Account::QueryCount:UserErrors","metricOptions":{"visible":false}},{"metricTemplate":"AWS::Timestream::Account::QueryCount:SystemErrors","metricOptions":{"visible":false}}]},{"type":"chart","properties":{"title":"WriteRecords Errors"},"metrics":[{"metricExpression":"SUM(METRICS())","resourceType":"AWS::Timestream::Table","metricOptions":{"label":"Errors"}},{"metricTemplate":"AWS::Timestream::Table::WriteCount:UserErrors","metricOptions":{"visible":false}},{"metricTemplate":"AWS::Timestream::Table::WriteCount:SystemErrors","metricOptions":{"visible":false}}]},{"type":"chart","properties":{"title":"Other Operations Errors"},"metrics":[{"metricExpression":"SUM(SEARCH(\'{AWS/Timestream,Operation} MetricName=\\"UserErrors\\" AND (Operation=\\"ListDatabases\\" OR Operation=\\"ListTables\\" OR Operation=\\"DescribeDatabase\\" OR Operation=\\"DescribeTable\\" OR Operation=\\"CreateDatabase\\" OR Operation=\\"CreateTable\\" OR Operation=\\"DeleteDatabase\\" OR Operation=\\"DeleteTable\\" OR Operation=\\"UpdateTable\\" )\', \'Sum\', 300))","resourceType":false,"metricOptions":{"label":"Errors"}}]}]}]}]},{"id":"AWS::Tiros","dashboard":"Tiros","crossServiceDashboard":"Tiros:CrossService","resourceTypes":[{"type":"AWS::Tiros::ApiCall","keyMetric":"AWS::Tiros::ApiCall:ErrorCount","dashboard":"Tiros"}],"controls":{"AWS::Tiros.apiCalls":{"type":"resource","resourceType":"AWS::Tiros::ApiCall","labelField":"ApiCall","valueField":"ApiCall"}},"metricTemplates":[{"resourceType":"AWS::Tiros::ApiCall","namespace":"AWS/Tiros","dimensions":[{"dimensionName":"ApiCall","labelName":"ApiCall"},{"dimensionName":"ServerType","labelName":"ServerType"}],"metrics":[{"id":"AWS::Tiros::ApiCall:ErrorCount","name":"ErrorCount","defaultStat":"Sum"},{"id":"AWS::Tiros::ApiCall:RequestCount","name":"RequestCount","defaultStat":"Sum"},{"id":"AWS::Tiros::ApiCall:ResponseCount","name":"ResponseCount","defaultStat":"Sum"}]}],"dashboards":[{"id":"Tiros:CrossService","name":"Tiros","dependencies":[{"namespace":"AWS/Tiros"}],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::Tiros::ApiCall:ErrorCount"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::Tiros::ApiCall:RequestCount"}]}]}]},{"id":"Tiros","name":"Tiros","dependencies":[{"namespace":"AWS/Tiros"}],"controls":["Shared::View.AlarmState","Shared::Group.ResourceGroup","AWS::Tiros.apiCalls"],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::Tiros::ApiCall:ErrorCount"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::Tiros::ApiCall:RequestCount"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::Tiros::ApiCall:ResponseCount"}]}]}]}]},{"id":"AWS::Transfer::Server","dashboard":"Transfer","crossServiceDashboard":"Transfer:CrossService","resourceTypes":[{"type":"AWS::Transfer::Server","keyMetric":"AWS::Transfer::Server:BytesIn","dashboard":"Transfer","arnRegex":".*:server/(.*)"}],"metricTemplates":[{"resourceType":"AWS::Transfer::Server","namespace":"AWS/Transfer","dimensions":[{"dimensionName":"ServerId","labelName":"ServerId"}],"metrics":[{"id":"AWS::Transfer::Server:BytesIn","name":"BytesIn","defaultStat":"Sum"},{"id":"AWS::Transfer::Server:BytesOut","name":"BytesOut","defaultStat":"Sum"}]}],"dashboards":[{"id":"Transfer:CrossService","name":"Transfer","dependencies":[{"namespace":"AWS/Transfer"}],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::Transfer::Server:BytesIn"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::Transfer::Server:BytesOut"}]}]}]},{"id":"Transfer","name":"Transfer","dependencies":[{"namespace":"AWS/Transfer"}],"controls":["Shared::View.AlarmState","Shared::Group.ResourceGroup"],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::Transfer::Server:BytesIn"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::Transfer::Server:BytesOut"}]}]}]}]},{"id":"AWS::EC2::TransitGateway","dashboard":"TransitGateway","crossServiceDashboard":"TransitGateway:CrossService","resourceTypes":[{"type":"AWS::EC2::TransitGateway","keyMetric":"AWS::EC2::TransitGateway:BytesIn","dashboard":"TransitGateway","arnRegex":".*:transit-gateway/(.*)"}],"metricTemplates":[{"resourceType":"AWS::EC2::TransitGateway","namespace":"AWS/TransitGateway","dimensions":[{"dimensionName":"TransitGateway","labelName":"TransitGateway"}],"metrics":[{"id":"AWS::EC2::TransitGateway:BytesIn","name":"BytesIn","defaultStat":"Sum"},{"id":"AWS::EC2::TransitGateway:BytesOut","name":"BytesOut","defaultStat":"Sum"},{"id":"AWS::EC2::TransitGateway:PacketDropCountBlackhole","name":"PacketDropCountBlackhole","defaultStat":"Sum"},{"id":"AWS::EC2::TransitGateway:PacketDropCountNoRoute","name":"PacketDropCountNoRoute","defaultStat":"Sum"},{"id":"AWS::EC2::TransitGateway:PacketsIn","name":"PacketsIn","defaultStat":"Sum"},{"id":"AWS::EC2::TransitGateway:PacketsOut","name":"PacketsOut","defaultStat":"Sum"}]}],"dashboards":[{"id":"TransitGateway:CrossService","name":"VPC Transit Gateway","dependencies":[{"namespace":"AWS/TransitGateway"}],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::EC2::TransitGateway:BytesIn"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::EC2::TransitGateway:BytesOut"}]}]}]},{"id":"TransitGateway","name":"VPC Transit Gateway","dependencies":[{"namespace":"AWS/TransitGateway"}],"controls":["Shared::View.AlarmState","Shared::Group.ResourceGroup"],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::EC2::TransitGateway:BytesIn"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::EC2::TransitGateway:BytesOut"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::EC2::TransitGateway:PacketDropCountBlackhole"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::EC2::TransitGateway:PacketDropCountNoRoute"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::EC2::TransitGateway:PacketsIn"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::EC2::TransitGateway:PacketsOut"}]}]}]}]},{"id":"AWS::Translate","dashboard":"Translate","crossServiceDashboard":"Translate:CrossService","resourceTypes":[{"type":"AWS::Translate::LanguagePair","keyMetric":"AWS::Translate::LanguagePair:CharacterCount","dashboard":"Translate"}],"controls":{"AWS::Translate.languagePairs":{"type":"resource","resourceType":"AWS::Translate::LanguagePair","labelField":"LanguagePair","valueField":"LanguagePair"}},"metricTemplates":[{"resourceType":"AWS::Translate::LanguagePair","namespace":"AWS/Translate","dimensions":[{"dimensionName":"LanguagePair","labelName":"LanguagePair"},{"dimensionName":"Operation","labelName":"Operation"}],"metrics":[{"id":"AWS::Translate::LanguagePair:CharacterCount","name":"CharacterCount","defaultStat":"Sum"},{"id":"AWS::Translate::LanguagePair:ResponseTime","name":"ResponseTime","defaultStat":"Average"},{"id":"AWS::Translate::LanguagePair:ServerErrorCount","name":"ServerErrorCount","defaultStat":"Sum"},{"id":"AWS::Translate::LanguagePair:SuccessfulRequestCount","name":"SuccessfulRequestCount","defaultStat":"Sum"},{"id":"AWS::Translate::LanguagePair:ThrottledCount","name":"ThrottledCount","defaultStat":"Sum"},{"id":"AWS::Translate::LanguagePair:UserErrorCount","name":"UserErrorCount","defaultStat":"Sum"}]}],"dashboards":[{"id":"Translate:CrossService","name":"Translate","dependencies":[{"namespace":"AWS/Translate"}],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::Translate::LanguagePair:CharacterCount"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::Translate::LanguagePair:ResponseTime"}]}]}]},{"id":"Translate","name":"Translate","dependencies":[{"namespace":"AWS/Translate"}],"controls":["Shared::View.AlarmState","Shared::Group.ResourceGroup","AWS::Translate.languagePairs"],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::Translate::LanguagePair:CharacterCount"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::Translate::LanguagePair:ResponseTime"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::Translate::LanguagePair:ServerErrorCount"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::Translate::LanguagePair:SuccessfulRequestCount"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::Translate::LanguagePair:ThrottledCount"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::Translate::LanguagePair:UserErrorCount"}]}]}]}]},{"id":"AWS::TrustedAdvisor","dashboard":"TrustedAdvisor","crossServiceDashboard":"TrustedAdvisor:CrossService","resourceTypes":[{"type":"AWS::TrustedAdvisor::Check","keyMetric":"AWS::TrustedAdvisor::Check:RedResources","dashboard":"TrustedAdvisor"}],"controls":{"AWS::TrustedAdvisor.checks":{"type":"resource","resourceType":"AWS::TrustedAdvisor::Check","labelField":"CheckName","valueField":"CheckName"}},"metricTemplates":[{"resourceType":"AWS::TrustedAdvisor::Check","namespace":"AWS/TrustedAdvisor","dimensions":[{"dimensionName":"CheckName","labelName":"CheckName"}],"metrics":[{"id":"AWS::TrustedAdvisor::Check:RedResources","name":"RedResources","defaultStat":"Average"},{"id":"AWS::TrustedAdvisor::Check:YellowResources","name":"YellowResources","defaultStat":"Average"}]}],"dashboards":[{"id":"TrustedAdvisor:CrossService","name":"Trusted Advisor","dependencies":[{"namespace":"AWS/TrustedAdvisor"}],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::TrustedAdvisor::Check:RedResources"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::TrustedAdvisor::Check:YellowResources"}]}]}]},{"id":"TrustedAdvisor","name":"Trusted Advisor","dependencies":[{"namespace":"AWS/TrustedAdvisor"}],"controls":["Shared::View.AlarmState","Shared::Group.ResourceGroup","AWS::TrustedAdvisor.checks"],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::TrustedAdvisor::Check:RedResources"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::TrustedAdvisor::Check:YellowResources"}]}]}]}]},{"id":"AWS::Usage","dashboard":"Usage","resourceTypes":[{"type":"AWS::Usage::API","keyMetric":"AWS::Usage::API:CallCount","dashboard":"Usage"}],"metricTemplates":[{"resourceType":"AWS::Usage::API","namespace":"AWS/Usage","dimensions":[{"dimensionName":"Service","labelName":"Service"},{"dimensionName":"Resource","labelName":"Resource"},{"dimensionName":"Type","labelName":"Type"},{"dimensionName":"Class","labelName":"Class"}],"metrics":[{"id":"AWS::Usage::API:CallCount","name":"CallCount","defaultStat":"Sum"}]}],"dashboards":[{"id":"Usage:CrossService","name":"Usage","dependencies":[{"namespace":"AWS/Usage"}],"rows":[{"widgets":[{"type":"chart","metrics":[],"properties":{"title":"PutMetricData","metrics":[["AWS/Usage","CallCount","Service","CloudWatch","Resource","PutMetricData","Type","API","Class","None",{"stat":"Sum","period":300}]]}},{"type":"chart","metrics":[],"properties":{"title":"GetMetricData","metrics":[["AWS/Usage","CallCount","Service","CloudWatch","Resource","GetMetricData","Type","API","Class","None",{"stat":"Sum","period":300}]]}}]}]},{"id":"Usage","name":"Usage","dependencies":[{"namespace":"AWS/Usage"}],"rows":[{"widgets":[{"type":"chart","metrics":[],"properties":{"title":"PutMetricData","metrics":[["AWS/Usage","CallCount","Service","CloudWatch","Resource","PutMetricData","Type","API","Class","None",{"stat":"Sum","period":300}]]}},{"type":"chart","metrics":[],"properties":{"title":"GetMetricData","metrics":[["AWS/Usage","CallCount","Service","CloudWatch","Resource","GetMetricData","Type","API","Class","None",{"stat":"Sum","period":300}]]}}]},{"widgets":[{"type":"chart","metrics":[],"properties":{"title":"GetMetricStatistics","metrics":[["AWS/Usage","CallCount","Service","CloudWatch","Resource","GetMetricStatistics","Type","API","Class","None",{"stat":"Sum","period":300}]]}},{"type":"chart","metrics":[],"properties":{"title":"ListMetrics","metrics":[["AWS/Usage","CallCount","Service","CloudWatch","Resource","ListMetrics","Type","API","Class","None",{"stat":"Sum","period":300}]]}},{"type":"chart","metrics":[],"properties":{"title":"GetMetricWidgetImage","metrics":[["AWS/Usage","CallCount","Service","CloudWatch","Resource","GetMetricWidgetImage","Type","API","Class","None",{"stat":"Sum","period":300}]]}}]},{"widgets":[{"type":"chart","metrics":[],"properties":{"title":"PutDashboard","metrics":[["AWS/Usage","CallCount","Service","CloudWatch","Resource","PutDashboard","Type","API","Class","None",{"stat":"Sum","period":300}]]}},{"type":"chart","metrics":[],"properties":{"title":"GetDashboard","metrics":[["AWS/Usage","CallCount","Service","CloudWatch","Resource","GetDashboard","Type","API","Class","None",{"stat":"Sum","period":300}]]}},{"type":"chart","metrics":[],"properties":{"title":"ListDashboards","metrics":[["AWS/Usage","CallCount","Service","CloudWatch","Resource","ListDashboards","Type","API","Class","None",{"stat":"Sum","period":300}]]}},{"type":"chart","metrics":[],"properties":{"title":"DeleteDashboards","metrics":[["AWS/Usage","CallCount","Service","CloudWatch","Resource","DeleteDashboards","Type","API","Class","None",{"stat":"Sum","period":300}]]}}]},{"widgets":[{"type":"chart","metrics":[],"properties":{"title":"DisableAlarmActions","metrics":[["AWS/Usage","CallCount","Service","CloudWatch","Resource","DisableAlarmActions","Type","API","Class","None",{"stat":"Sum","period":300}]]}},{"type":"chart","metrics":[],"properties":{"title":"EnableAlarmActions","metrics":[["AWS/Usage","CallCount","Service","CloudWatch","Resource","EnableAlarmActions","Type","API","Class","None",{"stat":"Sum","period":300}]]}},{"type":"chart","metrics":[],"properties":{"title":"DescribeAlarms","metrics":[["AWS/Usage","CallCount","Service","CloudWatch","Resource","DescribeAlarms","Type","API","Class","None",{"stat":"Sum","period":300}]]}},{"type":"chart","metrics":[],"properties":{"title":"DescribeAlarmsForMetric","metrics":[["AWS/Usage","CallCount","Service","CloudWatch","Resource","DescribeAlarmsForMetric","Type","API","Class","None",{"stat":"Sum","period":300}]]}}]},{"widgets":[{"type":"chart","metrics":[],"properties":{"title":"DeleteAlarms","metrics":[["AWS/Usage","CallCount","Service","CloudWatch","Resource","DeleteAlarms","Type","API","Class","None",{"stat":"Sum","period":300}]]}},{"type":"chart","metrics":[],"properties":{"title":"DescribeAlarmHistory","metrics":[["AWS/Usage","CallCount","Service","CloudWatch","Resource","DescribeAlarmHistory","Type","API","Class","None",{"stat":"Sum","period":300}]]}},{"type":"chart","metrics":[],"properties":{"title":"PutMetricAlarm","metrics":[["AWS/Usage","CallCount","Service","CloudWatch","Resource","PutMetricAlarm","Type","API","Class","None",{"stat":"Sum","period":300}]]}},{"type":"chart","metrics":[],"properties":{"title":"SetAlarmState","metrics":[["AWS/Usage","CallCount","Service","CloudWatch","Resource","SetAlarmState","Type","API","Class","None",{"stat":"Sum","period":300}]]}}]},{"widgets":[{"type":"chart","metrics":[],"properties":{"title":"TagResource","metrics":[["AWS/Usage","CallCount","Service","CloudWatch","Resource","TagResource","Type","API","Class","None",{"stat":"Sum","period":300}]]}},{"type":"chart","metrics":[],"properties":{"title":"UntagResource","metrics":[["AWS/Usage","CallCount","Service","CloudWatch","Resource","UntagResource","Type","API","Class","None",{"stat":"Sum","period":300}]]}},{"type":"chart","metrics":[],"properties":{"title":"ListTagsForResource","metrics":[["AWS/Usage","CallCount","Service","CloudWatch","Resource","ListTagsForResource","Type","API","Class","None",{"stat":"Sum","period":300}]]}}]}]}]},{"id":"AWS::EC2::VPNConnection","dashboard":"VPN","crossServiceDashboard":"VPN:CrossService","resourceTypes":[{"type":"AWS::EC2::VPNConnection","keyMetric":"AWS::EC2::VPNConnection:TunnelDataIn","dashboard":"VPN","arnRegex":".*:vpn-connection/(.*)"}],"controls":{"AWS::EC2::VPNConnection.resources":{"type":"resource","resourceType":"AWS::EC2::VPNConnection","labelField":"VpnId","valueField":"VpnId"}},"metricTemplates":[{"resourceType":"AWS::EC2::VPNConnection","namespace":"AWS/VPN","dimensions":[{"dimensionName":"VpnId","labelName":"VpnId"}],"metrics":[{"id":"AWS::EC2::VPNConnection:TunnelDataIn","name":"TunnelDataIn","defaultStat":"Sum"},{"id":"AWS::EC2::VPNConnection:TunnelState","name":"TunnelState","defaultStat":"Average"},{"id":"AWS::EC2::VPNConnection:TunnelDataOut","name":"TunnelDataOut","defaultStat":"Sum"}]}],"dashboards":[{"id":"VPN:CrossService","name":"VPC VPN","dependencies":[{"namespace":"AWS/VPN"}],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::EC2::VPNConnection:TunnelDataIn"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::EC2::VPNConnection:TunnelState"}]}]}]},{"id":"VPN","name":"VPC VPN","dependencies":[{"namespace":"AWS/VPN"}],"controls":["Shared::View.AlarmState","Shared::Group.ResourceGroup","AWS::EC2::VPNConnection.resources"],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::EC2::VPNConnection:TunnelDataIn"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::EC2::VPNConnection:TunnelState"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::EC2::VPNConnection:TunnelDataOut"}]}]}]}]},{"id":"AWS::WorkMail","dashboard":"WorkMail","crossServiceDashboard":"WorkMail:CrossService","resourceTypes":[{"type":"AWS::WorkMail::Organization","keyMetric":"AWS::WorkMail::Organization:OrganizationEmailReceived","dashboard":"WorkMail","arnRegex":".*:organization/(.*)"}],"controls":{"AWS::WorkMail.organizations":{"type":"resource","resourceType":"AWS::WorkMail::Organization","labelField":"OrganizationId","valueField":"OrganizationId"}},"metricTemplates":[{"resourceType":"AWS::WorkMail::Organization","namespace":"AWS/WorkMail","dimensions":[{"dimensionName":"OrganizationId","labelName":"OrganizationId"}],"metrics":[{"id":"AWS::WorkMail::Organization:OrganizationEmailReceived","name":"OrganizationEmailReceived","defaultStat":"Sum"},{"id":"AWS::WorkMail::Organization:OutgoingEmailSent","name":"OutgoingEmailSent","defaultStat":"Sum"},{"id":"AWS::WorkMail::Organization:MailboxEmailDelivered","name":"MailboxEmailDelivered","defaultStat":"Sum"},{"id":"AWS::WorkMail::Organization:OutgoingEmailBounced","name":"OutgoingEmailBounced","defaultStat":"Sum"},{"id":"AWS::WorkMail::Organization:IncomingEmailBounced","name":"IncomingEmailBounced","defaultStat":"Sum"}]}],"dashboards":[{"id":"WorkMail:CrossService","name":"WorkMail","dependencies":[{"namespace":"AWS/WorkMail"}],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::WorkMail::Organization:OrganizationEmailReceived"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::WorkMail::Organization:OutgoingEmailSent"}]}]}]},{"id":"WorkMail","name":"WorkMail","dependencies":[{"namespace":"AWS/WorkMail"}],"controls":["Shared::View.AlarmState","Shared::Group.ResourceGroup","AWS::WorkMail.organizations"],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::WorkMail::Organization:OrganizationEmailReceived"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::WorkMail::Organization:MailboxEmailDelivered"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::WorkMail::Organization:OutgoingEmailBounced"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::WorkMail::Organization:IncomingEmailBounced"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::WorkMail::Organization:OutgoingEmailSent"}]}]}]}]},{"id":"AWS::WorkSpaces","dashboard":"WorkSpaces","crossServiceDashboard":"WorkSpaces:CrossService","resourceTypes":[{"type":"AWS::WorkSpaces::Workspace","keyMetric":"AWS::WorkSpaces::Workspace:Available","dashboard":"WorkSpaces","arnRegex":".*:workspace/(.*)"}],"controls":{"AWS::WorkSpaces.workspaces":{"type":"resource","resourceType":"AWS::WorkSpaces::Workspace","labelField":"WorkspaceId","valueField":"WorkspaceId"}},"metricTemplates":[{"resourceType":"AWS::WorkSpaces::Workspace","namespace":"AWS/WorkSpaces","dimensions":[{"dimensionName":"WorkspaceId","labelName":"WorkspaceId"}],"metrics":[{"id":"AWS::WorkSpaces::Workspace:Available","name":"Available","defaultStat":"Average"},{"id":"AWS::WorkSpaces::Workspace:Unhealthy","name":"Unhealthy","defaultStat":"Average"},{"id":"AWS::WorkSpaces::Workspace:SessionLaunchTime","name":"SessionLaunchTime","defaultStat":"Average"},{"id":"AWS::WorkSpaces::Workspace:ConnectionSuccess","name":"ConnectionSuccess","defaultStat":"Sum"},{"id":"AWS::WorkSpaces::Workspace:ConnectionFailure","name":"ConnectionFailure","defaultStat":"Sum"},{"id":"AWS::WorkSpaces::Workspace:ConnectionAttempt","name":"ConnectionAttempt","defaultStat":"Sum"},{"id":"AWS::WorkSpaces::Workspace:InSessionLatency","name":"InSessionLatency","defaultStat":"Average"},{"id":"AWS::WorkSpaces::Workspace:SessionDisconnect","name":"SessionDisconnect","defaultStat":"Sum"},{"id":"AWS::WorkSpaces::Workspace:UserConnected","name":"UserConnected","defaultStat":"Sum"},{"id":"AWS::WorkSpaces::Workspace:Stopped","name":"Stopped","defaultStat":"Sum"},{"id":"AWS::WorkSpaces::Workspace:Maintenance","name":"Maintenance","defaultStat":"Sum"}]}],"dashboards":[{"id":"WorkSpaces:CrossService","name":"WorkSpaces","dependencies":[{"namespace":"AWS/WorkSpaces"}],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::WorkSpaces::Workspace:Available"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::WorkSpaces::Workspace:Unhealthy"}]}]}]},{"id":"WorkSpaces","name":"WorkSpaces","dependencies":[{"namespace":"AWS/WorkSpaces"}],"controls":["Shared::View.AlarmState","Shared::Group.ResourceGroup","AWS::WorkSpaces.workspaces"],"rows":[{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::WorkSpaces::Workspace:Available"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::WorkSpaces::Workspace:Unhealthy"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::WorkSpaces::Workspace:SessionLaunchTime"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::WorkSpaces::Workspace:ConnectionSuccess"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::WorkSpaces::Workspace:ConnectionFailure"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::WorkSpaces::Workspace:ConnectionAttempt"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::WorkSpaces::Workspace:InSessionLatency"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::WorkSpaces::Workspace:SessionDisconnect"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::WorkSpaces::Workspace:UserConnected"}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"AWS::WorkSpaces::Workspace:Stopped"}]},{"type":"chart","metrics":[{"metricTemplate":"AWS::WorkSpaces::Workspace:Maintenance"}]}]}]}]},{"id":"AWS::XRay","resourceTypes":[{"type":"CW::XRay::Node","keyMetric":"CW::XRay::Node:TracedRequestCount","dashboard":"XRay:Node","drawerDashboard":"XRay:Drawer","alarmPatterns":[{"namespace":"AWS/X-Ray","dimensions":[{"dimensionName":"ServiceName","labelName":"ServiceName"},{"dimensionName":"ServiceType","labelName":"ServiceType"},{"dimensionName":"GroupName","labelName":"GroupName"}]},{"namespace":"AWS/X-Ray","dimensions":[{"dimensionName":"ServiceName","labelName":"ServiceName"},{"dimensionName":"ServiceType","labelName":"ServiceType"},{"dimensionName":"GroupName","labelName":""}]}]}],"metricTemplates":[{"resourceType":"CW::XRay::Node","namespace":"AWS/X-Ray","dimensions":[{"dimensionName":"GroupName","labelName":"GroupName"},{"dimensionName":"ServiceName","labelName":"ServiceName"},{"dimensionName":"ServiceType","labelName":"ServiceType"}],"metrics":[{"id":"CW::XRay::Node:ResponseTime","name":"ResponseTime","defaultStat":"p50"},{"id":"CW::XRay::Node:TracedRequestCount","name":"TracedRequestCount","defaultStat":"Sum"},{"id":"CW::XRay::Node:FaultRate","name":"FaultRate","defaultStat":"Average"},{"id":"CW::XRay::Node:OkRate","name":"OkRate","defaultStat":"Average"},{"id":"CW::XRay::Node:ThrottleRate","name":"ThrottleRate","defaultStat":"Average"},{"id":"CW::XRay::Node:ErrorRate","name":"ErrorRate","defaultStat":"Average"}]}],"dashboards":[{"id":"XRay:Drawer","name":"XRay Node","dependencies":[{"namespace":"AWS/X-Ray"}],"rows":[{"widgets":[{"type":"chart","properties":{"title":"Latency"},"metrics":[{"metricTemplate":"CW::XRay::Node:ResponseTime","metricOptions":{"stat":"p50","color":"#1f77b4"}},{"metricTemplate":"CW::XRay::Node:ResponseTime","metricOptions":{"stat":"p90","color":"#e377c2"}}]},{"type":"chart","metrics":[{"metricTemplate":"CW::XRay::Node:TracedRequestCount","metricOptions":{"stat":"Sum","id":"m1","visible":false}},{"metricExpression":"FILL(m1, 0)","resourceType":"CW::XRay::Node","metricOptions":{"id":"e1","label":"TracedRequestCount","color":"#8c564b"}}]},{"type":"chart","metrics":[{"metricTemplate":"CW::XRay::Node:FaultRate","metricOptions":{"stat":"Average","id":"m1","visible":false}},{"metricExpression":"100 * FILL(m1, 0)","resourceType":"CW::XRay::Node","metricOptions":{"id":"e1","label":"FaultRate","color":"#d62728"}}]}]}]},{"id":"XRay:Node","name":"XRay Node","dependencies":[{"namespace":"AWS/X-Ray"}],"rows":[{"widgets":[{"type":"chart","properties":{"title":"Latency"},"metrics":[{"metricTemplate":"CW::XRay::Node:ResponseTime","metricOptions":{"stat":"p50","color":"#1f77b4"}},{"metricTemplate":"CW::XRay::Node:ResponseTime","metricOptions":{"stat":"p90","color":"#e377c2"}}]},{"type":"chart","metrics":[{"metricTemplate":"CW::XRay::Node:TracedRequestCount","metricOptions":{"stat":"Sum","id":"m1","visible":false}},{"metricExpression":"FILL(m1, 0)","resourceType":"CW::XRay::Node","metricOptions":{"id":"e1","label":"TracedRequestCount","color":"#8c564b"}}]},{"type":"chart","metrics":[{"metricTemplate":"CW::XRay::Node:FaultRate","metricOptions":{"stat":"Average","id":"m1","visible":false}},{"metricExpression":"100 * FILL(m1, 0)","resourceType":"CW::XRay::Node","metricOptions":{"id":"e1","label":"FaultRate","color":"#d62728"}}]}]},{"widgets":[{"type":"chart","metrics":[{"metricTemplate":"CW::XRay::Node:OkRate","metricOptions":{"stat":"Average","id":"m1","visible":false}},{"metricExpression":"100 * FILL(m1, 0)","resourceType":"CW::XRay::Node","metricOptions":{"id":"e1","label":"OkRate","color":"#2ca02c"}}]},{"type":"chart","metrics":[{"metricTemplate":"CW::XRay::Node:ErrorRate","metricOptions":{"stat":"Average","id":"m1","visible":false}},{"metricExpression":"100 * FILL(m1, 0)","resourceType":"CW::XRay::Node","metricOptions":{"id":"e1","label":"ErrorRate","color":"#ff7f0e"}}]},{"type":"chart","metrics":[{"metricTemplate":"CW::XRay::Node:ThrottleRate","metricOptions":{"stat":"Average","id":"m1","visible":false}},{"metricExpression":"100 * FILL(m1, 0)","resourceType":"CW::XRay::Node","metricOptions":{"id":"e1","label":"ThrottleRate","color":"#9467bd"}}]}]}]}]}]');
+
+/***/ }),
+
+/***/ 46510:
+/***/ ((module) => {
+
+"use strict";
+module.exports = JSON.parse('{"Types":{"AWS::ACMPCA::Certificate":{"attributes":{"Arn":"The Amazon Resource Name (ARN) of the issued certificate.","Certificate":"The issued Base64 PEM-encoded certificate.","Ref":"This reference should not be used in CloudFormation templates. Instead, use `AWS::ACMPCA::Certificate.Arn` to identify a certificate, and use `AWS::ACMPCA::Certificate.CertificateAuthorityArn` to identify a certificate authority."},"description":"The `AWS::ACMPCA::Certificate` resource is used to issue a certificate using your private certificate authority. For more information, see the [IssueCertificate](https://docs.aws.amazon.com/privateca/latest/APIReference/API_IssueCertificate.html) action.","properties":{"ApiPassthrough":"Specifies X.509 certificate information to be included in the issued certificate. An `APIPassthrough` or `APICSRPassthrough` template variant must be selected, or else this parameter is ignored.","CertificateAuthorityArn":"The Amazon Resource Name (ARN) for the private CA issues the certificate.","CertificateSigningRequest":"The certificate signing request (CSR) for the certificate.","SigningAlgorithm":"The name of the algorithm that will be used to sign the certificate to be issued.\\n\\nThis parameter should not be confused with the `SigningAlgorithm` parameter used to sign a CSR in the `CreateCertificateAuthority` action.\\n\\n> The specified signing algorithm family (RSA or ECDSA) must match the algorithm family of the CA\'s secret key.","TemplateArn":"Specifies a custom configuration template to use when issuing a certificate. If this parameter is not provided, AWS Private CA defaults to the `EndEntityCertificate/V1` template. For more information about AWS Private CA templates, see [Using Templates](https://docs.aws.amazon.com/privateca/latest/userguide/UsingTemplates.html) .","Validity":"The period of time during which the certificate will be valid.","ValidityNotBefore":"Information describing the start of the validity period of the certificate. This parameter sets the “Not Before\\" date for the certificate.\\n\\nBy default, when issuing a certificate, AWS Private CA sets the \\"Not Before\\" date to the issuance time minus 60 minutes. This compensates for clock inconsistencies across computer systems. The `ValidityNotBefore` parameter can be used to customize the “Not Before” value.\\n\\nUnlike the `Validity` parameter, the `ValidityNotBefore` parameter is optional.\\n\\nThe `ValidityNotBefore` value is expressed as an explicit date and time, using the `Validity` type value `ABSOLUTE` ."}},"AWS::ACMPCA::Certificate.ApiPassthrough":{"attributes":{},"description":"Contains X.509 certificate information to be placed in an issued certificate. An `APIPassthrough` or `APICSRPassthrough` template variant must be selected, or else this parameter is ignored.\\n\\nIf conflicting or duplicate certificate information is supplied from other sources, AWS Private CA applies [order of operation rules](https://docs.aws.amazon.com/privateca/latest/userguide/UsingTemplates.html#template-order-of-operations) to determine what information is used.","properties":{"Extensions":"Specifies X.509 extension information for a certificate.","Subject":"Contains information about the certificate subject. The Subject field in the certificate identifies the entity that owns or controls the public key in the certificate. The entity can be a user, computer, device, or service. The Subject must contain an X.500 distinguished name (DN). A DN is a sequence of relative distinguished names (RDNs). The RDNs are separated by commas in the certificate."}},"AWS::ACMPCA::Certificate.CustomAttribute":{"attributes":{},"description":"Defines the X.500 relative distinguished name (RDN).","properties":{"ObjectIdentifier":"Specifies the object identifier (OID) of the attribute type of the relative distinguished name (RDN).","Value":"Specifies the attribute value of relative distinguished name (RDN)."}},"AWS::ACMPCA::Certificate.CustomExtension":{"attributes":{},"description":"Specifies the X.509 extension information for a certificate.\\n\\nExtensions present in `CustomExtensions` follow the `ApiPassthrough` [template rules](https://docs.aws.amazon.com/privateca/latest/userguide/UsingTemplates.html#template-order-of-operations) .","properties":{"Critical":"Specifies the critical flag of the X.509 extension.","ObjectIdentifier":"Specifies the object identifier (OID) of the X.509 extension. For more information, see the [Global OID reference database.](https://docs.aws.amazon.com/https://oidref.com/2.5.29)","Value":"Specifies the base64-encoded value of the X.509 extension."}},"AWS::ACMPCA::Certificate.EdiPartyName":{"attributes":{},"description":"Describes an Electronic Data Interchange (EDI) entity as described in as defined in [Subject Alternative Name](https://docs.aws.amazon.com/https://datatracker.ietf.org/doc/html/rfc5280) in RFC 5280.","properties":{"NameAssigner":"Specifies the name assigner.","PartyName":"Specifies the party name."}},"AWS::ACMPCA::Certificate.ExtendedKeyUsage":{"attributes":{},"description":"Specifies additional purposes for which the certified public key may be used other than basic purposes indicated in the `KeyUsage` extension.","properties":{"ExtendedKeyUsageObjectIdentifier":"Specifies a custom `ExtendedKeyUsage` with an object identifier (OID).","ExtendedKeyUsageType":"Specifies a standard `ExtendedKeyUsage` as defined as in [RFC 5280](https://docs.aws.amazon.com/https://datatracker.ietf.org/doc/html/rfc5280#section-4.2.1.12) ."}},"AWS::ACMPCA::Certificate.Extensions":{"attributes":{},"description":"Contains X.509 extension information for a certificate.","properties":{"CertificatePolicies":"Contains a sequence of one or more policy information terms, each of which consists of an object identifier (OID) and optional qualifiers. For more information, see NIST\'s definition of [Object Identifier (OID)](https://docs.aws.amazon.com/https://csrc.nist.gov/glossary/term/Object_Identifier) .\\n\\nIn an end-entity certificate, these terms indicate the policy under which the certificate was issued and the purposes for which it may be used. In a CA certificate, these terms limit the set of policies for certification paths that include this certificate.","CustomExtensions":"Contains a sequence of one or more X.509 extensions, each of which consists of an object identifier (OID), a base64-encoded value, and the critical flag. For more information, see the [Global OID reference database.](https://docs.aws.amazon.com/https://oidref.com/2.5.29)","ExtendedKeyUsage":"Specifies additional purposes for which the certified public key may be used other than basic purposes indicated in the `KeyUsage` extension.","KeyUsage":"Defines one or more purposes for which the key contained in the certificate can be used. Default value for each option is false.","SubjectAlternativeNames":"The subject alternative name extension allows identities to be bound to the subject of the certificate. These identities may be included in addition to or in place of the identity in the subject field of the certificate."}},"AWS::ACMPCA::Certificate.GeneralName":{"attributes":{},"description":"Describes an ASN.1 X.400 `GeneralName` as defined in [RFC 5280](https://docs.aws.amazon.com/https://datatracker.ietf.org/doc/html/rfc5280) . Only one of the following naming options should be provided. Providing more than one option results in an `InvalidArgsException` error.","properties":{"DirectoryName":"Contains information about the certificate subject. The certificate can be one issued by your private certificate authority (CA) or it can be your private CA certificate. The Subject field in the certificate identifies the entity that owns or controls the public key in the certificate. The entity can be a user, computer, device, or service. The Subject must contain an X.500 distinguished name (DN). A DN is a sequence of relative distinguished names (RDNs). The RDNs are separated by commas in the certificate. The DN must be unique for each entity, but your private CA can issue more than one certificate with the same DN to the same entity.","DnsName":"Represents `GeneralName` as a DNS name.","EdiPartyName":"Represents `GeneralName` as an `EdiPartyName` object.","IpAddress":"Represents `GeneralName` as an IPv4 or IPv6 address.","OtherName":"Represents `GeneralName` using an `OtherName` object.","RegisteredId":"Represents `GeneralName` as an object identifier (OID).","Rfc822Name":"Represents `GeneralName` as an [RFC 822](https://docs.aws.amazon.com/https://datatracker.ietf.org/doc/html/rfc822) email address.","UniformResourceIdentifier":"Represents `GeneralName` as a URI."}},"AWS::ACMPCA::Certificate.KeyUsage":{"attributes":{},"description":"Defines one or more purposes for which the key contained in the certificate can be used. Default value for each option is false.","properties":{"CRLSign":"Key can be used to sign CRLs.","DataEncipherment":"Key can be used to decipher data.","DecipherOnly":"Key can be used only to decipher data.","DigitalSignature":"Key can be used for digital signing.","EncipherOnly":"Key can be used only to encipher data.","KeyAgreement":"Key can be used in a key-agreement protocol.","KeyCertSign":"Key can be used to sign certificates.","KeyEncipherment":"Key can be used to encipher data.","NonRepudiation":"Key can be used for non-repudiation."}},"AWS::ACMPCA::Certificate.OtherName":{"attributes":{},"description":"Defines a custom ASN.1 X.400 `GeneralName` using an object identifier (OID) and value. The OID must satisfy the regular expression shown below. For more information, see NIST\'s definition of [Object Identifier (OID)](https://docs.aws.amazon.com/https://csrc.nist.gov/glossary/term/Object_Identifier) .","properties":{"TypeId":"Specifies an OID.","Value":"Specifies an OID value."}},"AWS::ACMPCA::Certificate.PolicyInformation":{"attributes":{},"description":"Defines the X.509 `CertificatePolicies` extension.","properties":{"CertPolicyId":"Specifies the object identifier (OID) of the certificate policy under which the certificate was issued. For more information, see NIST\'s definition of [Object Identifier (OID)](https://docs.aws.amazon.com/https://csrc.nist.gov/glossary/term/Object_Identifier) .","PolicyQualifiers":"Modifies the given `CertPolicyId` with a qualifier. AWS Private CA supports the certification practice statement (CPS) qualifier."}},"AWS::ACMPCA::Certificate.PolicyQualifierInfo":{"attributes":{},"description":"Modifies the `CertPolicyId` of a `PolicyInformation` object with a qualifier. AWS Private CA supports the certification practice statement (CPS) qualifier.","properties":{"PolicyQualifierId":"Identifies the qualifier modifying a `CertPolicyId` .","Qualifier":"Defines the qualifier type. AWS Private CA supports the use of a URI for a CPS qualifier in this field."}},"AWS::ACMPCA::Certificate.Qualifier":{"attributes":{},"description":"Defines a `PolicyInformation` qualifier. AWS Private CA supports the [certification practice statement (CPS) qualifier](https://docs.aws.amazon.com/https://datatracker.ietf.org/doc/html/rfc5280#section-4.2.1.4) defined in RFC 5280.","properties":{"CpsUri":"Contains a pointer to a certification practice statement (CPS) published by the CA."}},"AWS::ACMPCA::Certificate.Subject":{"attributes":{},"description":"Contains information about the certificate subject. The `Subject` field in the certificate identifies the entity that owns or controls the public key in the certificate. The entity can be a user, computer, device, or service. The `Subject` must contain an X.500 distinguished name (DN). A DN is a sequence of relative distinguished names (RDNs). The RDNs are separated by commas in the certificate.","properties":{"CommonName":"For CA and end-entity certificates in a private PKI, the common name (CN) can be any string within the length limit.\\n\\nNote: In publicly trusted certificates, the common name must be a fully qualified domain name (FQDN) associated with the certificate subject.","Country":"Two-digit code that specifies the country in which the certificate subject located.","CustomAttributes":"Contains a sequence of one or more X.500 relative distinguished names (RDNs), each of which consists of an object identifier (OID) and a value. For more information, see NIST’s definition of [Object Identifier (OID)](https://docs.aws.amazon.com/https://csrc.nist.gov/glossary/term/Object_Identifier) .\\n\\n> Custom attributes cannot be used in combination with standard attributes.","DistinguishedNameQualifier":"Disambiguating information for the certificate subject.","GenerationQualifier":"Typically a qualifier appended to the name of an individual. Examples include Jr. for junior, Sr. for senior, and III for third.","GivenName":"First name.","Initials":"Concatenation that typically contains the first letter of the *GivenName* , the first letter of the middle name if one exists, and the first letter of the *Surname* .","Locality":"The locality (such as a city or town) in which the certificate subject is located.","Organization":"Legal name of the organization with which the certificate subject is affiliated.","OrganizationalUnit":"A subdivision or unit of the organization (such as sales or finance) with which the certificate subject is affiliated.","Pseudonym":"Typically a shortened version of a longer *GivenName* . For example, Jonathan is often shortened to John. Elizabeth is often shortened to Beth, Liz, or Eliza.","SerialNumber":"The certificate serial number.","State":"State in which the subject of the certificate is located.","Surname":"Family name. In the US and the UK, for example, the surname of an individual is ordered last. In Asian cultures the surname is typically ordered first.","Title":"A title such as Mr. or Ms., which is pre-pended to the name to refer formally to the certificate subject."}},"AWS::ACMPCA::Certificate.Validity":{"attributes":{},"description":"Length of time for which the certificate issued by your private certificate authority (CA), or by the private CA itself, is valid in days, months, or years. You can issue a certificate by calling the `IssueCertificate` operation.","properties":{"Type":"Specifies whether the `Value` parameter represents days, months, or years.","Value":"A long integer interpreted according to the value of `Type` , below."}},"AWS::ACMPCA::CertificateAuthority":{"attributes":{"Arn":"The Amazon Resource Name (ARN) for the private CA that issued the certificate.","CertificateSigningRequest":"The Base64 PEM-encoded certificate signing request (CSR) for your certificate authority certificate.","Ref":"The Amazon Resource Name (ARN) of the certificate authority."},"description":"Use the `AWS::ACMPCA::CertificateAuthority` resource to create a private CA. Once the CA exists, you can use the `AWS::ACMPCA::Certificate` resource to issue a new CA certificate. Alternatively, you can issue a CA certificate using an on-premises CA, and then use the `AWS::ACMPCA::CertificateAuthorityActivation` resource to import the new CA certificate and activate the CA.\\n\\n> Before removing a `AWS::ACMPCA::CertificateAuthority` resource from the CloudFormation stack, disable the affected CA. Otherwise, the action will fail. You can disable the CA by removing its associated `AWS::ACMPCA::CertificateAuthorityActivation` resource from CloudFormation.","properties":{"CsrExtensions":"Specifies information to be added to the extension section of the certificate signing request (CSR).","KeyAlgorithm":"Type of the public key algorithm and size, in bits, of the key pair that your CA creates when it issues a certificate. When you create a subordinate CA, you must use a key algorithm supported by the parent CA.","KeyStorageSecurityStandard":"Specifies a cryptographic key management compliance standard used for handling CA keys.\\n\\nDefault: FIPS_140_2_LEVEL_3_OR_HIGHER\\n\\n> Some AWS Regions do not support the default. When creating a CA in these Regions, you must provide `FIPS_140_2_LEVEL_2_OR_HIGHER` as the argument for `KeyStorageSecurityStandard` . Failure to do this results in an `InvalidArgsException` with the message, \\"A certificate authority cannot be created in this region with the specified security standard.\\"\\n> \\n> For information about security standard support in various Regions, see [Storage and security compliance of AWS Private CA private keys](https://docs.aws.amazon.com/privateca/latest/userguide/data-protection.html#private-keys) .","RevocationConfiguration":"Certificate revocation information used by the [CreateCertificateAuthority](https://docs.aws.amazon.com/privateca/latest/APIReference/API_CreateCertificateAuthority.html) and [UpdateCertificateAuthority](https://docs.aws.amazon.com/privateca/latest/APIReference/API_UpdateCertificateAuthority.html) actions. Your private certificate authority (CA) can configure Online Certificate Status Protocol (OCSP) support and/or maintain a certificate revocation list (CRL). OCSP returns validation information about certificates as requested by clients, and a CRL contains an updated list of certificates revoked by your CA. For more information, see [RevokeCertificate](https://docs.aws.amazon.com/privateca/latest/APIReference/API_RevokeCertificate.html) in the *AWS Private CA API Reference* and [Setting up a certificate revocation method](https://docs.aws.amazon.com/privateca/latest/userguide/revocation-setup.html) in the *AWS Private CA User Guide* .\\n\\n> The following requirements apply to revocation configurations.\\n> \\n> - A configuration disabling CRLs or OCSP must contain only the `Enabled=False` parameter, and will fail if other parameters such as `CustomCname` or `ExpirationInDays` are included.\\n> - In a CRL configuration, the `S3BucketName` parameter must conform to the [Amazon S3 bucket naming rules](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucketnamingrules.html) .\\n> - A configuration containing a custom Canonical Name (CNAME) parameter for CRLs or OCSP must conform to [RFC2396](https://docs.aws.amazon.com/https://www.ietf.org/rfc/rfc2396.txt) restrictions on the use of special characters in a CNAME.\\n> - In a CRL or OCSP configuration, the value of a CNAME parameter must not include a protocol prefix such as \\"http://\\" or \\"https://\\".","SigningAlgorithm":"Name of the algorithm your private CA uses to sign certificate requests.\\n\\nThis parameter should not be confused with the `SigningAlgorithm` parameter used to sign certificates when they are issued.","Subject":"Structure that contains X.500 distinguished name information for your private CA.","Tags":"Key-value pairs that will be attached to the new private CA. You can associate up to 50 tags with a private CA. For information using tags with IAM to manage permissions, see [Controlling Access Using IAM Tags](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_iam-tags.html) .","Type":"Type of your private CA.","UsageMode":"Specifies whether the CA issues general-purpose certificates that typically require a revocation mechanism, or short-lived certificates that may optionally omit revocation because they expire quickly. Short-lived certificate validity is limited to seven days.\\n\\nThe default value is GENERAL_PURPOSE."}},"AWS::ACMPCA::CertificateAuthority.AccessDescription":{"attributes":{},"description":"Provides access information used by the `authorityInfoAccess` and `subjectInfoAccess` extensions described in [RFC 5280](https://docs.aws.amazon.com/https://datatracker.ietf.org/doc/html/rfc5280) .","properties":{"AccessLocation":"The location of `AccessDescription` information.","AccessMethod":"The type and format of `AccessDescription` information."}},"AWS::ACMPCA::CertificateAuthority.AccessMethod":{"attributes":{},"description":"Describes the type and format of extension access. Only one of `CustomObjectIdentifier` or `AccessMethodType` may be provided. Providing both results in `InvalidArgsException` .","properties":{"AccessMethodType":"Specifies the `AccessMethod` .","CustomObjectIdentifier":"An object identifier (OID) specifying the `AccessMethod` . The OID must satisfy the regular expression shown below. For more information, see NIST\'s definition of [Object Identifier (OID)](https://docs.aws.amazon.com/https://csrc.nist.gov/glossary/term/Object_Identifier) ."}},"AWS::ACMPCA::CertificateAuthority.CrlConfiguration":{"attributes":{},"description":"Contains configuration information for a certificate revocation list (CRL). Your private certificate authority (CA) creates base CRLs. Delta CRLs are not supported. You can enable CRLs for your new or an existing private CA by setting the *Enabled* parameter to `true` . Your private CA writes CRLs to an S3 bucket that you specify in the *S3BucketName* parameter. You can hide the name of your bucket by specifying a value for the *CustomCname* parameter. Your private CA copies the CNAME or the S3 bucket name to the *CRL Distribution Points* extension of each certificate it issues. Your S3 bucket policy must give write permission to AWS Private CA.\\n\\nAWS Private CA assets that are stored in Amazon S3 can be protected with encryption. For more information, see [Encrypting Your CRLs](https://docs.aws.amazon.com/privateca/latest/userguide/PcaCreateCa.html#crl-encryption) .\\n\\nYour private CA uses the value in the *ExpirationInDays* parameter to calculate the *nextUpdate* field in the CRL. The CRL is refreshed prior to a certificate\'s expiration date or when a certificate is revoked. When a certificate is revoked, it appears in the CRL until the certificate expires, and then in one additional CRL after expiration, and it always appears in the audit report.\\n\\nA CRL is typically updated approximately 30 minutes after a certificate is revoked. If for any reason a CRL update fails, AWS Private CA makes further attempts every 15 minutes.\\n\\nCRLs contain the following fields:\\n\\n- *Version* : The current version number defined in RFC 5280 is V2. The integer value is 0x1.\\n- *Signature Algorithm* : The name of the algorithm used to sign the CRL.\\n- *Issuer* : The X.500 distinguished name of your private CA that issued the CRL.\\n- *Last Update* : The issue date and time of this CRL.\\n- *Next Update* : The day and time by which the next CRL will be issued.\\n- *Revoked Certificates* : List of revoked certificates. Each list item contains the following information.\\n\\n- *Serial Number* : The serial number, in hexadecimal format, of the revoked certificate.\\n- *Revocation Date* : Date and time the certificate was revoked.\\n- *CRL Entry Extensions* : Optional extensions for the CRL entry.\\n\\n- *X509v3 CRL Reason Code* : Reason the certificate was revoked.\\n- *CRL Extensions* : Optional extensions for the CRL.\\n\\n- *X509v3 Authority Key Identifier* : Identifies the public key associated with the private key used to sign the certificate.\\n- *X509v3 CRL Number:* : Decimal sequence number for the CRL.\\n- *Signature Algorithm* : Algorithm used by your private CA to sign the CRL.\\n- *Signature Value* : Signature computed over the CRL.\\n\\nCertificate revocation lists created by AWS Private CA are DER-encoded. You can use the following OpenSSL command to list a CRL.\\n\\n`openssl crl -inform DER -text -in *crl_path* -noout`\\n\\nFor more information, see [Planning a certificate revocation list (CRL)](https://docs.aws.amazon.com/privateca/latest/userguide/crl-planning.html) in the *AWS Private Certificate Authority User Guide*","properties":{"CustomCname":"Name inserted into the certificate *CRL Distribution Points* extension that enables the use of an alias for the CRL distribution point. Use this value if you don\'t want the name of your S3 bucket to be public.\\n\\n> The content of a Canonical Name (CNAME) record must conform to [RFC2396](https://docs.aws.amazon.com/https://www.ietf.org/rfc/rfc2396.txt) restrictions on the use of special characters in URIs. Additionally, the value of the CNAME must not include a protocol prefix such as \\"http://\\" or \\"https://\\".","Enabled":"Boolean value that specifies whether certificate revocation lists (CRLs) are enabled. You can use this value to enable certificate revocation for a new CA when you call the `CreateCertificateAuthority` operation or for an existing CA when you call the `UpdateCertificateAuthority` operation.","ExpirationInDays":"Validity period of the CRL in days.","S3BucketName":"Name of the S3 bucket that contains the CRL. If you do not provide a value for the *CustomCname* argument, the name of your S3 bucket is placed into the *CRL Distribution Points* extension of the issued certificate. You can change the name of your bucket by calling the [UpdateCertificateAuthority](https://docs.aws.amazon.com/privateca/latest/APIReference/API_UpdateCertificateAuthority.html) operation. You must specify a [bucket policy](https://docs.aws.amazon.com/privateca/latest/userguide/PcaCreateCa.html#s3-policies) that allows AWS Private CA to write the CRL to your bucket.\\n\\n> The `S3BucketName` parameter must conform to the [S3 bucket naming rules](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucketnamingrules.html) .","S3ObjectAcl":"Determines whether the CRL will be publicly readable or privately held in the CRL Amazon S3 bucket. If you choose PUBLIC_READ, the CRL will be accessible over the public internet. If you choose BUCKET_OWNER_FULL_CONTROL, only the owner of the CRL S3 bucket can access the CRL, and your PKI clients may need an alternative method of access.\\n\\nIf no value is specified, the default is PUBLIC_READ.\\n\\n*Note:* This default can cause CA creation to fail in some circumstances. If you have have enabled the Block Public Access (BPA) feature in your S3 account, then you must specify the value of this parameter as `BUCKET_OWNER_FULL_CONTROL` , and not doing so results in an error. If you have disabled BPA in S3, then you can specify either `BUCKET_OWNER_FULL_CONTROL` or `PUBLIC_READ` as the value.\\n\\nFor more information, see [Blocking public access to the S3 bucket](https://docs.aws.amazon.com/privateca/latest/userguide/PcaCreateCa.html#s3-bpa) ."}},"AWS::ACMPCA::CertificateAuthority.CsrExtensions":{"attributes":{},"description":"Describes the certificate extensions to be added to the certificate signing request (CSR).","properties":{"KeyUsage":"Indicates the purpose of the certificate and of the key contained in the certificate.","SubjectInformationAccess":"For CA certificates, provides a path to additional information pertaining to the CA, such as revocation and policy. For more information, see [Subject Information Access](https://docs.aws.amazon.com/https://datatracker.ietf.org/doc/html/rfc5280#section-4.2.2.2) in RFC 5280."}},"AWS::ACMPCA::CertificateAuthority.CustomAttribute":{"attributes":{},"description":"Defines the X.500 relative distinguished name (RDN).","properties":{"ObjectIdentifier":"Specifies the object identifier (OID) of the attribute type of the relative distinguished name (RDN).","Value":"Specifies the attribute value of relative distinguished name (RDN)."}},"AWS::ACMPCA::CertificateAuthority.EdiPartyName":{"attributes":{},"description":"Describes an Electronic Data Interchange (EDI) entity as described in as defined in [Subject Alternative Name](https://docs.aws.amazon.com/https://datatracker.ietf.org/doc/html/rfc5280) in RFC 5280.","properties":{"NameAssigner":"Specifies the name assigner.","PartyName":"Specifies the party name."}},"AWS::ACMPCA::CertificateAuthority.GeneralName":{"attributes":{},"description":"Describes an ASN.1 X.400 `GeneralName` as defined in [RFC 5280](https://docs.aws.amazon.com/https://datatracker.ietf.org/doc/html/rfc5280) . Only one of the following naming options should be provided. Providing more than one option results in an `InvalidArgsException` error.","properties":{"DirectoryName":"Contains information about the certificate subject. The certificate can be one issued by your private certificate authority (CA) or it can be your private CA certificate. The Subject field in the certificate identifies the entity that owns or controls the public key in the certificate. The entity can be a user, computer, device, or service. The Subject must contain an X.500 distinguished name (DN). A DN is a sequence of relative distinguished names (RDNs). The RDNs are separated by commas in the certificate. The DN must be unique for each entity, but your private CA can issue more than one certificate with the same DN to the same entity.","DnsName":"Represents `GeneralName` as a DNS name.","EdiPartyName":"Represents `GeneralName` as an `EdiPartyName` object.","IpAddress":"Represents `GeneralName` as an IPv4 or IPv6 address.","OtherName":"Represents `GeneralName` using an `OtherName` object.","RegisteredId":"Represents `GeneralName` as an object identifier (OID).","Rfc822Name":"Represents `GeneralName` as an [RFC 822](https://docs.aws.amazon.com/https://datatracker.ietf.org/doc/html/rfc822) email address.","UniformResourceIdentifier":"Represents `GeneralName` as a URI."}},"AWS::ACMPCA::CertificateAuthority.KeyUsage":{"attributes":{},"description":"Defines one or more purposes for which the key contained in the certificate can be used. Default value for each option is false.","properties":{"CRLSign":"Key can be used to sign CRLs.","DataEncipherment":"Key can be used to decipher data.","DecipherOnly":"Key can be used only to decipher data.","DigitalSignature":"Key can be used for digital signing.","EncipherOnly":"Key can be used only to encipher data.","KeyAgreement":"Key can be used in a key-agreement protocol.","KeyCertSign":"Key can be used to sign certificates.","KeyEncipherment":"Key can be used to encipher data.","NonRepudiation":"Key can be used for non-repudiation."}},"AWS::ACMPCA::CertificateAuthority.OcspConfiguration":{"attributes":{},"description":"Contains information to enable and configure Online Certificate Status Protocol (OCSP) for validating certificate revocation status.","properties":{"Enabled":"Flag enabling use of the Online Certificate Status Protocol (OCSP) for validating certificate revocation status.","OcspCustomCname":"By default, AWS Private CA injects an Amazon domain into certificates being validated by the Online Certificate Status Protocol (OCSP). A customer can alternatively use this object to define a CNAME specifying a customized OCSP domain.\\n\\n> The content of a Canonical Name (CNAME) record must conform to [RFC2396](https://docs.aws.amazon.com/https://www.ietf.org/rfc/rfc2396.txt) restrictions on the use of special characters in URIs. Additionally, the value of the CNAME must not include a protocol prefix such as \\"http://\\" or \\"https://\\"."}},"AWS::ACMPCA::CertificateAuthority.OtherName":{"attributes":{},"description":"Defines a custom ASN.1 X.400 `GeneralName` using an object identifier (OID) and value. The OID must satisfy the regular expression shown below. For more information, see NIST\'s definition of [Object Identifier (OID)](https://docs.aws.amazon.com/https://csrc.nist.gov/glossary/term/Object_Identifier) .","properties":{"TypeId":"Specifies an OID.","Value":"Specifies an OID value."}},"AWS::ACMPCA::CertificateAuthority.RevocationConfiguration":{"attributes":{},"description":"Certificate revocation information used by the [CreateCertificateAuthority](https://docs.aws.amazon.com/privateca/latest/APIReference/API_CreateCertificateAuthority.html) and [UpdateCertificateAuthority](https://docs.aws.amazon.com/privateca/latest/APIReference/API_UpdateCertificateAuthority.html) actions. Your private certificate authority (CA) can configure Online Certificate Status Protocol (OCSP) support and/or maintain a certificate revocation list (CRL). OCSP returns validation information about certificates as requested by clients, and a CRL contains an updated list of certificates revoked by your CA. For more information, see [RevokeCertificate](https://docs.aws.amazon.com/privateca/latest/APIReference/API_RevokeCertificate.html) in the *AWS Private CA API Reference* and [Setting up a certificate revocation method](https://docs.aws.amazon.com/privateca/latest/userguide/revocation-setup.html) in the *AWS Private CA User Guide* .\\n\\n> The following requirements apply to revocation configurations.\\n> \\n> - A configuration disabling CRLs or OCSP must contain only the `Enabled=False` parameter, and will fail if other parameters such as `CustomCname` or `ExpirationInDays` are included.\\n> - In a CRL configuration, the `S3BucketName` parameter must conform to the [Amazon S3 bucket naming rules](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucketnamingrules.html) .\\n> - A configuration containing a custom Canonical Name (CNAME) parameter for CRLs or OCSP must conform to [RFC2396](https://docs.aws.amazon.com/https://www.ietf.org/rfc/rfc2396.txt) restrictions on the use of special characters in a CNAME.\\n> - In a CRL or OCSP configuration, the value of a CNAME parameter must not include a protocol prefix such as \\"http://\\" or \\"https://\\".","properties":{"CrlConfiguration":"Configuration of the certificate revocation list (CRL), if any, maintained by your private CA.","OcspConfiguration":"Configuration of Online Certificate Status Protocol (OCSP) support, if any, maintained by your private CA."}},"AWS::ACMPCA::CertificateAuthority.Subject":{"attributes":{},"description":"ASN1 subject for the certificate authority.","properties":{"CommonName":"Fully qualified domain name (FQDN) associated with the certificate subject.","Country":"Two-digit code that specifies the country in which the certificate subject located.","CustomAttributes":"Contains a sequence of one or more X.500 relative distinguished names (RDNs), each of which consists of an object identifier (OID) and a value. For more information, see NIST’s definition of [Object Identifier (OID)](https://docs.aws.amazon.com/https://csrc.nist.gov/glossary/term/Object_Identifier) .\\n\\n> Custom attributes cannot be used in combination with standard attributes.","DistinguishedNameQualifier":"Disambiguating information for the certificate subject.","GenerationQualifier":"Typically a qualifier appended to the name of an individual. Examples include Jr. for junior, Sr. for senior, and III for third.","GivenName":"First name.","Initials":"Concatenation that typically contains the first letter of the GivenName, the first letter of the middle name if one exists, and the first letter of the SurName.","Locality":"The locality (such as a city or town) in which the certificate subject is located.","Organization":"Legal name of the organization with which the certificate subject is affiliated.","OrganizationalUnit":"A subdivision or unit of the organization (such as sales or finance) with which the certificate subject is affiliated.","Pseudonym":"Typically a shortened version of a longer GivenName. For example, Jonathan is often shortened to John. Elizabeth is often shortened to Beth, Liz, or Eliza.","SerialNumber":"The certificate serial number.","State":"State in which the subject of the certificate is located.","Surname":"Family name.","Title":"A personal title such as Mr."}},"AWS::ACMPCA::CertificateAuthorityActivation":{"attributes":{"CompleteCertificateChain":"The complete Base64 PEM-encoded certificate chain, including the certificate authority certificate.","Ref":"The Amazon Resource Name (ARN) of the certificate authority."},"description":"The `AWS::ACMPCA::CertificateAuthorityActivation` resource creates and installs a CA certificate on a CA. If no status is specified, the `AWS::ACMPCA::CertificateAuthorityActivation` resource status defaults to ACTIVE. Once the CA has a CA certificate installed, you can use the resource to toggle the CA status field between `ACTIVE` and `DISABLED` .","properties":{"Certificate":"The Base64 PEM-encoded certificate authority certificate.","CertificateAuthorityArn":"The Amazon Resource Name (ARN) of your private CA.","CertificateChain":"The Base64 PEM-encoded certificate chain that chains up to the root CA certificate that you used to sign your private CA certificate.","Status":"Status of your private CA."}},"AWS::ACMPCA::Permission":{"attributes":{},"description":"Grants permissions to the AWS Certificate Manager ( ACM ) service principal ( `acm.amazonaws.com` ) to perform [IssueCertificate](https://docs.aws.amazon.com/privateca/latest/APIReference/API_IssueCertificate.html) , [GetCertificate](https://docs.aws.amazon.com/privateca/latest/APIReference/API_GetCertificate.html) , and [ListPermissions](https://docs.aws.amazon.com/privateca/latest/APIReference/API_ListPermissions.html) actions on a CA. These actions are needed for the ACM principal to renew private PKI certificates requested through ACM and residing in the same AWS account as the CA.\\n\\n**About permissions** - If the private CA and the certificates it issues reside in the same account, you can use `AWS::ACMPCA::Permission` to grant permissions for ACM to carry out automatic certificate renewals.\\n- For automatic certificate renewal to succeed, the ACM service principal needs permissions to create, retrieve, and list permissions.\\n- If the private CA and the ACM certificates reside in different accounts, then permissions cannot be used to enable automatic renewals. Instead, the ACM certificate owner must set up a resource-based policy to enable cross-account issuance and renewals. For more information, see [Using a Resource Based Policy with AWS Private CA](https://docs.aws.amazon.com/privateca/latest/userguide/pca-rbp.html) .\\n\\n> To update an `AWS::ACMPCA::Permission` resource, you must first delete the existing permission resource from the CloudFormation stack and then create a new permission resource with updated properties.","properties":{"Actions":"The private CA actions that can be performed by the designated AWS service. Supported actions are `IssueCertificate` , `GetCertificate` , and `ListPermissions` .","CertificateAuthorityArn":"The Amazon Resource Number (ARN) of the private CA from which the permission was issued.","Principal":"The AWS service or entity that holds the permission. At this time, the only valid principal is `acm.amazonaws.com` .","SourceAccount":"The ID of the account that assigned the permission."}},"AWS::APS::RuleGroupsNamespace":{"attributes":{"Arn":"The ARN of the rules group namespace. For example, `arn:aws:aps:us-west-2:123456789012:rulegroupsnamespace/ws-EXAMPLE-3687-4ac9-853c-EXAMPLEe8f/amp=rules`","Ref":"`Ref` returns the ARN of the rules group namespace. For example, `arn:aws:aps:us-west-2:123456789012:rulegroupsnamespace/ws-EXAMPLE-3687-4ac9-853c-EXAMPLEe8f/amp-rules` ."},"description":"The `AWS::APS::RuleGroupsNamespace` resource creates or updates a rule groups namespace within a Amazon Managed Service for Prometheus workspace. For more information, see [Recording rules and alerting rules](https://docs.aws.amazon.com/prometheus/latest/userguide/AMP-Ruler.html) .","properties":{"Data":"The rules definition file for this namespace.","Name":"The name of the rule groups namespace. This property is required.","Tags":"A list of key and value pairs for the workspace resources.","Workspace":"The ARN of the workspace that contains this rule groups namespace."}},"AWS::APS::Workspace":{"attributes":{"Arn":"The ARN of the workspace. For example: `arn:aws:aps:us-west-2:123456789012:workspace/ws-EXAMPLE-3687-4ac9-853c-EXAMPLEe8f` .","PrometheusEndpoint":"The Prometheus endpoint attribute of the workspace. This is the endpoint prefix without the remote_write or query API appended. For example: `https://aps-workspaces.us-west-2.amazonaws.com/workspaces/ws-EXAMPLE-3687-4ac9-853c-EXAMPLEe8f/` .","Ref":"`Ref` returns the ARN of the workspace. For example, `arn:aws:aps:us-west-2:123456789012:workspace/ws-EXAMPLE-3687-4ac9-853c-EXAMPLEe8f` .","WorkspaceId":"The workspace ID. For example: `ws-EXAMPLE-3687-4ac9-853c-EXAMPLEe8f` ."},"description":"The `AWS::APS::Workspace` type specifies an Amazon Managed Service for Prometheus ( Amazon Managed Service for Prometheus ) workspace. A *workspace* is a logical and isolated Prometheus server dedicated to Prometheus resources such as metrics. You can have one or more workspaces in each Region in your account.","properties":{"AlertManagerDefinition":"The alert manager definition for the workspace, as a string. For more information, see [Alert manager and templating](https://docs.aws.amazon.com/prometheus/latest/userguide/AMP-alert-manager.html) .","Alias":"An alias that you assign to this workspace to help you identify it. It does not need to be unique.\\n\\nThe alias can be as many as 100 characters and can include any type of characters. Amazon Managed Service for Prometheus automatically strips any blank spaces from the beginning and end of the alias that you specify.","LoggingConfiguration":"The LoggingConfiguration attribute is used to set the logging configuration for the workspace.","Tags":"A list of tag keys and values to associate with the workspace."}},"AWS::APS::Workspace.LoggingConfiguration":{"attributes":{},"description":"The LoggingConfiguration attribute sets the logging configuration for the workspace.","properties":{"LogGroupArn":"The Amazon Resource Name (ARN) of the CloudWatch log group the logs are emitted to."}},"AWS::AccessAnalyzer::Analyzer":{"attributes":{"Ref":"`Ref` returns the ARN of the analyzer created."},"description":"The `AWS::AccessAnalyzer::Analyzer` resource specifies a new analyzer. The analyzer is an object that represents the IAM Access Analyzer feature. An analyzer is required for Access Analyzer to become operational.","properties":{"AnalyzerName":"The name of the analyzer.","ArchiveRules":"Specifies the archive rules to add for the analyzer.","Tags":"The tags to apply to the analyzer.","Type":"The type represents the zone of trust for the analyzer.\\n\\n*Allowed Values* : ACCOUNT | ORGANIZATION"}},"AWS::AccessAnalyzer::Analyzer.ArchiveRule":{"attributes":{},"description":"The criteria for an archive rule.","properties":{"Filter":"The criteria for the rule.","RuleName":"The name of the archive rule."}},"AWS::AccessAnalyzer::Analyzer.Filter":{"attributes":{},"description":"The criteria that defines the rule.\\n\\nTo learn about filter keys that you can use to create an archive rule, see [filter keys](https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-reference-filter-keys.html) in the *User Guide* .","properties":{"Contains":"A \\"contains\\" condition to match for the rule.","Eq":"An \\"equals\\" condition to match for the rule.","Exists":"An \\"exists\\" condition to match for the rule.","Neq":"A \\"not equal\\" condition to match for the rule.","Property":"The property used to define the criteria in the filter for the rule."}},"AWS::AmazonMQ::Broker":{"attributes":{"AmqpEndpoints":"The AMQP endpoints of each broker instance as a list of strings.\\n\\n`amqp+ssl://b-4aada85d-a80c-4be0-9d30-e344a01b921e-1.mq.eu-central-amazonaws.com:5671`","Arn":"The Amazon Resource Name (ARN) of the Amazon MQ broker.\\n\\n`arn:aws:mq:us-east-2:123456789012:broker:MyBroker:b-1234a5b6-78cd-901e-2fgh-3i45j6k178l9`","ConfigurationId":"The unique ID that Amazon MQ generates for the configuration.\\n\\n`c-1234a5b6-78cd-901e-2fgh-3i45j6k178l9`","ConfigurationRevision":"The revision number of the configuration.\\n\\n`1`","IpAddresses":"The IP addresses of each broker instance as a list of strings. Does not apply to RabbitMQ brokers.\\n\\n`[\'198.51.100.2\', \'203.0.113.9\']`","MqttEndpoints":"The MQTT endpoints of each broker instance as a list of strings.\\n\\n`mqtt+ssl://b-4aada85d-a80c-4be0-9d30-e344a01b921e-1.mq.eu-central-amazonaws.com:8883`","OpenWireEndpoints":"The OpenWire endpoints of each broker instance as a list of strings.\\n\\n`ssl://b-4aada85d-a80c-4be0-9d30-e344a01b921e-1.mq.eu-central-amazonaws.com:61617`","Ref":"`Ref` returns the Amazon MQ broker ID. For example:\\n\\n`b-1234a5b6-78cd-901e-2fgh-3i45j6k178l9`","StompEndpoints":"The STOMP endpoints of each broker instance as a list of strings.\\n\\n`stomp+ssl://b-4aada85d-a80c-4be0-9d30-e344a01b921e-1.mq.eu-central-amazonaws.com:61614`","WssEndpoints":"The WSS endpoints of each broker instance as a list of strings.\\n\\n`wss://b-4aada85d-a80c-4be0-9d30-e344a01b921e-1.mq.eu-central-amazonaws.com:61619`"},"description":"A *broker* is a message broker environment running on Amazon MQ . It is the basic building block of Amazon MQ .\\n\\nThe `AWS::AmazonMQ::Broker` resource lets you create Amazon MQ for ActiveMQ and Amazon MQ for RabbitMQ brokers, add configuration changes or modify users for a speified ActiveMQ broker, return information about the specified broker, and delete the broker. For more information, see [How Amazon MQ works](https://docs.aws.amazon.com//amazon-mq/latest/developer-guide/amazon-mq-how-it-works.html) in the *Amazon MQ Developer Guide* .\\n\\n- `ec2:CreateNetworkInterface`\\n\\nThis permission is required to allow Amazon MQ to create an elastic network interface (ENI) on behalf of your account.\\n- `ec2:CreateNetworkInterfacePermission`\\n\\nThis permission is required to attach the ENI to the broker instance.\\n- `ec2:DeleteNetworkInterface`\\n- `ec2:DeleteNetworkInterfacePermission`\\n- `ec2:DetachNetworkInterface`\\n- `ec2:DescribeInternetGateways`\\n- `ec2:DescribeNetworkInterfaces`\\n- `ec2:DescribeNetworkInterfacePermissions`\\n- `ec2:DescribeRouteTables`\\n- `ec2:DescribeSecurityGroups`\\n- `ec2:DescribeSubnets`\\n- `ec2:DescribeVpcs`","properties":{"AuthenticationStrategy":"Optional. The authentication strategy used to secure the broker. The default is `SIMPLE` .","AutoMinorVersionUpgrade":"Enables automatic upgrades to new minor versions for brokers, as new broker engine versions are released and supported by Amazon MQ. Automatic upgrades occur during the scheduled maintenance window of the broker or after a manual broker reboot.","BrokerName":"The name of the broker. This value must be unique in your AWS account , 1-50 characters long, must contain only letters, numbers, dashes, and underscores, and must not contain white spaces, brackets, wildcard characters, or special characters.\\n\\n> Do not add personally identifiable information (PII) or other confidential or sensitive information in broker names. Broker names are accessible to other AWS services, including C CloudWatch Logs . Broker names are not intended to be used for private or sensitive data.","Configuration":"A list of information about the configuration. Does not apply to RabbitMQ brokers.","DeploymentMode":"The deployment mode of the broker. Available values:\\n\\n- `SINGLE_INSTANCE`\\n- `ACTIVE_STANDBY_MULTI_AZ`\\n- `CLUSTER_MULTI_AZ`","EncryptionOptions":"Encryption options for the broker. Does not apply to RabbitMQ brokers.","EngineType":"The type of broker engine. Currently, Amazon MQ supports `ACTIVEMQ` and `RABBITMQ` .","EngineVersion":"The version of the broker engine. For a list of supported engine versions, see [Engine](https://docs.aws.amazon.com/amazon-mq/latest/developer-guide/broker-engine.html) in the *Amazon MQ Developer Guide* .","HostInstanceType":"The broker\'s instance type.","LdapServerMetadata":"Optional. The metadata of the LDAP server used to authenticate and authorize connections to the broker. Does not apply to RabbitMQ brokers.","Logs":"Enables Amazon CloudWatch logging for brokers.","MaintenanceWindowStartTime":"The scheduled time period relative to UTC during which Amazon MQ begins to apply pending updates or patches to the broker.","PubliclyAccessible":"Enables connections from applications outside of the VPC that hosts the broker\'s subnets.","SecurityGroups":"The list of rules (1 minimum, 125 maximum) that authorize connections to brokers.","StorageType":"The broker\'s storage type.","SubnetIds":"The list of groups that define which subnets and IP ranges the broker can use from different Availability Zones. If you specify more than one subnet, the subnets must be in different Availability Zones. Amazon MQ will not be able to create VPC endpoints for your broker with multiple subnets in the same Availability Zone. A SINGLE_INSTANCE deployment requires one subnet (for example, the default subnet). An ACTIVE_STANDBY_MULTI_AZ deployment (ACTIVEMQ) requires two subnets. A CLUSTER_MULTI_AZ deployment (RABBITMQ) has no subnet requirements when deployed with public accessibility, deployment without public accessibility requires at least one subnet.\\n\\n> If you specify subnets in a shared VPC for a RabbitMQ broker, the associated VPC to which the specified subnets belong must be owned by your AWS account . Amazon MQ will not be able to create VPC enpoints in VPCs that are not owned by your AWS account .","Tags":"An array of key-value pairs. For more information, see [Using Cost Allocation Tags](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/cost-alloc-tags.html) in the *Billing and Cost Management User Guide* .","Users":"The list of broker users (persons or applications) who can access queues and topics. For Amazon MQ for RabbitMQ brokers, one and only one administrative user is accepted and created when a broker is first provisioned. All subsequent RabbitMQ users are created by via the RabbitMQ web console or by using the RabbitMQ management API."}},"AWS::AmazonMQ::Broker.ConfigurationId":{"attributes":{},"description":"A list of information about the configuration.\\n\\n> Does not apply to RabbitMQ brokers.","properties":{"Id":"The unique ID that Amazon MQ generates for the configuration.","Revision":"The revision number of the configuration."}},"AWS::AmazonMQ::Broker.EncryptionOptions":{"attributes":{},"description":"Encryption options for the broker.\\n\\n> Does not apply to RabbitMQ brokers.","properties":{"KmsKeyId":"The customer master key (CMK) to use for the A AWS KMS (KMS). This key is used to encrypt your data at rest. If not provided, Amazon MQ will use a default CMK to encrypt your data.","UseAwsOwnedKey":"Enables the use of an AWS owned CMK using AWS KMS (KMS). Set to `true` by default, if no value is provided, for example, for RabbitMQ brokers."}},"AWS::AmazonMQ::Broker.LdapServerMetadata":{"attributes":{},"description":"Optional. The metadata of the LDAP server used to authenticate and authorize connections to the broker.\\n\\n> Does not apply to RabbitMQ brokers.","properties":{"Hosts":"Specifies the location of the LDAP server such as AWS Directory Service for Microsoft Active Directory . Optional failover server.","RoleBase":"The distinguished name of the node in the directory information tree (DIT) to search for roles or groups. For example, `ou=group` , `ou=corp` , `dc=corp` , `dc=example` , `dc=com` .","RoleName":"The group name attribute in a role entry whose value is the name of that role. For example, you can specify `cn` for a group entry\'s common name. If authentication succeeds, then the user is assigned the the value of the `cn` attribute for each role entry that they are a member of.","RoleSearchMatching":"The LDAP search filter used to find roles within the roleBase. The distinguished name of the user matched by userSearchMatching is substituted into the `{0}` placeholder in the search filter. The client\'s username is substituted into the `{1}` placeholder. For example, if you set this option to `(member=uid={1})` for the user janedoe, the search filter becomes `(member=uid=janedoe)` after string substitution. It matches all role entries that have a member attribute equal to `uid=janedoe` under the subtree selected by the `RoleBases` .","RoleSearchSubtree":"The directory search scope for the role. If set to true, scope is to search the entire subtree.","ServiceAccountPassword":"Service account password. A service account is an account in your LDAP server that has access to initiate a connection. For example, `cn=admin` , `dc=corp` , `dc=example` , `dc=com` .","ServiceAccountUsername":"Service account username. A service account is an account in your LDAP server that has access to initiate a connection. For example, `cn=admin` , `ou=corp` , `dc=corp` , `dc=example` , `dc=com` .","UserBase":"Select a particular subtree of the directory information tree (DIT) to search for user entries. The subtree is specified by a DN, which specifies the base node of the subtree. For example, by setting this option to `ou=Users` , `ou=corp` , `dc=corp` , `dc=example` , `dc=com` , the search for user entries is restricted to the subtree beneath `ou=Users` , `ou=corp` , `dc=corp` , `dc=example` , `dc=com` .","UserRoleName":"The name of the LDAP attribute in the user\'s directory entry for the user\'s group membership. In some cases, user roles may be identified by the value of an attribute in the user\'s directory entry. The `UserRoleName` option allows you to provide the name of this attribute.","UserSearchMatching":"The LDAP search filter used to find users within the `userBase` . The client\'s username is substituted into the `{0}` placeholder in the search filter. For example, if this option is set to `(uid={0})` and the received username is `janedoe` , the search filter becomes `(uid=janedoe)` after string substitution. It will result in matching an entry like `uid=janedoe` , `ou=Users` , `ou=corp` , `dc=corp` , `dc=example` , `dc=com` .","UserSearchSubtree":"The directory search scope for the user. If set to true, scope is to search the entire subtree."}},"AWS::AmazonMQ::Broker.LogList":{"attributes":{},"description":"The list of information about logs to be enabled for the specified broker.","properties":{"Audit":"Enables audit logging. Every user management action made using JMX or the ActiveMQ Web Console is logged. Does not apply to RabbitMQ brokers.","General":"Enables general logging."}},"AWS::AmazonMQ::Broker.MaintenanceWindow":{"attributes":{},"description":"The parameters that determine the `WeeklyStartTime` to apply pending updates or patches to the broker.","properties":{"DayOfWeek":"The day of the week.","TimeOfDay":"The time, in 24-hour format.","TimeZone":"The time zone, UTC by default, in either the Country/City format, or the UTC offset format."}},"AWS::AmazonMQ::Broker.TagsEntry":{"attributes":{},"description":"A key-value pair to associate with the broker.","properties":{"Key":"The key in a key-value pair.","Value":"The value in a key-value pair."}},"AWS::AmazonMQ::Broker.User":{"attributes":{},"description":"The list of broker users (persons or applications) who can access queues and topics. For Amazon MQ for RabbitMQ brokers, one and only one administrative user is accepted and created when a broker is first provisioned. All subsequent broker users are created via the RabbitMQ web console or by using the RabbitMQ management API.","properties":{"ConsoleAccess":"Enables access to the ActiveMQ web console for the ActiveMQ user. Does not apply to RabbitMQ brokers.","Groups":"The list of groups (20 maximum) to which the ActiveMQ user belongs. This value can contain only alphanumeric characters, dashes, periods, underscores, and tildes (- . _ ~). This value must be 2-100 characters long. Does not apply to RabbitMQ brokers.","Password":"The password of the user. This value must be at least 12 characters long, must contain at least 4 unique characters, and must not contain commas, colons, or equal signs (,:=).","Username":"The username of the broker user. For Amazon MQ for ActiveMQ brokers, this value can contain only alphanumeric characters, dashes, periods, underscores, and tildes (- . _ ~). For Amazon MQ for RabbitMQ brokers, this value can contain only alphanumeric characters, dashes, periods, underscores (- . _). This value must not contain a tilde (~) character. Amazon MQ prohibts using guest as a valid usename. This value must be 2-100 characters long.\\n\\n> Do not add personally identifiable information (PII) or other confidential or sensitive information in broker usernames. Broker usernames are accessible to other AWS services, including CloudWatch Logs . Broker usernames are not intended to be used for private or sensitive data."}},"AWS::AmazonMQ::Configuration":{"attributes":{"Arn":"The Amazon Resource Name (ARN) of the Amazon MQ configuration.\\n\\n`arn:aws:mq:us-east-2:123456789012:configuration:MyConfigurationDevelopment:c-1234a5b6-78cd-901e-2fgh-3i45j6k178l9`","Id":"The ID of the Amazon MQ configuration.\\n\\n`c-1234a5b6-78cd-901e-2fgh-3i45j6k178l9`","Ref":"`Ref` returns the Amazon MQ configuration ID. For example:\\n\\n`c-1234a5b6-78cd-901e-2fgh-3i45j6k178l9`","Revision":"The revision number of the configuration.\\n\\n`1`"},"description":"Creates a new configuration for the specified configuration name. Amazon MQ uses the default configuration (the engine type and version).\\n\\n> Does not apply to RabbitMQ brokers.","properties":{"AuthenticationStrategy":"Optional. The authentication strategy associated with the configuration. The default is `SIMPLE` .","Data":"The base64-encoded XML configuration.","Description":"The description of the configuration.","EngineType":"The type of broker engine. Note: Currently, Amazon MQ only supports ACTIVEMQ for creating and editing broker configurations.","EngineVersion":"The version of the broker engine. For a list of supported engine versions, see [](https://docs.aws.amazon.com/amazon-mq/latest/developer-guide/broker-engine.html)","Name":"The name of the configuration. This value can contain only alphanumeric characters, dashes, periods, underscores, and tildes (- . _ ~). This value must be 1-150 characters long.","Tags":"Create tags when creating the configuration."}},"AWS::AmazonMQ::Configuration.TagsEntry":{"attributes":{},"description":"A key-value pair to associate with the configuration.","properties":{"Key":"The key in a key-value pair.","Value":"The value in a key-value pair."}},"AWS::AmazonMQ::ConfigurationAssociation":{"attributes":{"Ref":"`Ref` returns the Amazon MQ configurationassociation ID. For example:\\n\\n`c-1234a5b6-78cd-901e-2fgh-3i45j6k178l9`"},"description":"Use the AWS CloudFormation `AWS::AmazonMQ::ConfigurationAssociation` resource to associate a configuration with a broker, or return information about the specified ConfigurationAssociation. Only use one per broker, and don\'t use a configuration on the broker resource if you have associated a configuration with that broker.\\n\\n> Does not apply to RabbitMQ brokers.","properties":{"Broker":"The broker to associate with a configuration.","Configuration":"The configuration to associate with a broker."}},"AWS::AmazonMQ::ConfigurationAssociation.ConfigurationId":{"attributes":{},"description":"The `ConfigurationId` property type specifies a configuration Id and the revision of a configuration.","properties":{"Id":"The unique ID that Amazon MQ generates for the configuration.","Revision":"The revision number of the configuration."}},"AWS::Amplify::App":{"attributes":{"AppId":"Unique Id for the Amplify App.","AppName":"Name for the Amplify App.","Arn":"ARN for the Amplify App.","DefaultDomain":"Default domain for the Amplify App."},"description":"The AWS::Amplify::App resource specifies Apps in Amplify Hosting. An App is a collection of branches.","properties":{"AccessToken":"The personal access token for a GitHub repository for an Amplify app. The personal access token is used to authorize access to a GitHub repository using the Amplify GitHub App. The token is not stored.\\n\\nUse `AccessToken` for GitHub repositories only. To authorize access to a repository provider such as Bitbucket or CodeCommit, use `OauthToken` .\\n\\nYou must specify either `AccessToken` or `OauthToken` when you create a new app.\\n\\nExisting Amplify apps deployed from a GitHub repository using OAuth continue to work with CI/CD. However, we strongly recommend that you migrate these apps to use the GitHub App. For more information, see [Migrating an existing OAuth app to the Amplify GitHub App](https://docs.aws.amazon.com/amplify/latest/userguide/setting-up-GitHub-access.html#migrating-to-github-app-auth) in the *Amplify User Guide* .\\n\\n*Length Constraints:* Minimum length of 1. Maximum length of 255.","AutoBranchCreationConfig":"Sets the configuration for your automatic branch creation.","BasicAuthConfig":"The credentials for basic authorization for an Amplify app. You must base64-encode the authorization credentials and provide them in the format `user:password` .","BuildSpec":"The build specification (build spec) for an Amplify app.\\n\\n*Length Constraints:* Minimum length of 1. Maximum length of 25000.\\n\\n*Pattern:* (?s).+","CustomHeaders":"The custom HTTP headers for an Amplify app.\\n\\n*Length Constraints:* Minimum length of 0. Maximum length of 25000.\\n\\n*Pattern:* (?s).*","CustomRules":"The custom rewrite and redirect rules for an Amplify app.","Description":"The description for an Amplify app.\\n\\n*Length Constraints:* Maximum length of 1000.\\n\\n*Pattern:* (?s).*","EnableBranchAutoDeletion":"Automatically disconnect a branch in Amplify Hosting when you delete a branch from your Git repository.","EnvironmentVariables":"The environment variables map for an Amplify app.\\n\\nFor a list of the environment variables that are accessible to Amplify by default, see [Amplify Environment variables](https://docs.aws.amazon.com/amplify/latest/userguide/amplify-console-environment-variables.html) in the *Amplify Hosting User Guide* .","IAMServiceRole":"The AWS Identity and Access Management (IAM) service role for the Amazon Resource Name (ARN) of the Amplify app.\\n\\n*Length Constraints:* Minimum length of 0. Maximum length of 1000.\\n\\n*Pattern:* (?s).*","Name":"The name for an Amplify app.\\n\\n*Length Constraints:* Minimum length of 1. Maximum length of 255.\\n\\n*Pattern:* (?s).+","OauthToken":"The OAuth token for a third-party source control system for an Amplify app. The OAuth token is used to create a webhook and a read-only deploy key using SSH cloning. The OAuth token is not stored.\\n\\nUse `OauthToken` for repository providers other than GitHub, such as Bitbucket or CodeCommit. To authorize access to GitHub as your repository provider, use `AccessToken` .\\n\\nYou must specify either `OauthToken` or `AccessToken` when you create a new app.\\n\\nExisting Amplify apps deployed from a GitHub repository using OAuth continue to work with CI/CD. However, we strongly recommend that you migrate these apps to use the GitHub App. For more information, see [Migrating an existing OAuth app to the Amplify GitHub App](https://docs.aws.amazon.com/amplify/latest/userguide/setting-up-GitHub-access.html#migrating-to-github-app-auth) in the *Amplify User Guide* .\\n\\n*Length Constraints:* Maximum length of 1000.\\n\\n*Pattern:* (?s).*","Platform":"The platform for the Amplify app. For a static app, set the platform type to `WEB` . For a dynamic server-side rendered (SSR) app, set the platform type to `WEB_COMPUTE` . For an app requiring Amplify Hosting\'s original SSR support only, set the platform type to `WEB_DYNAMIC` .","Repository":"The repository for an Amplify app.\\n\\n*Pattern:* (?s).*","Tags":"The tag for an Amplify app."}},"AWS::Amplify::App.AutoBranchCreationConfig":{"attributes":{},"description":"Use the AutoBranchCreationConfig property type to automatically create branches that match a certain pattern.","properties":{"AutoBranchCreationPatterns":"Automated branch creation glob patterns for the Amplify app.","BasicAuthConfig":"Sets password protection for your auto created branch.","BuildSpec":"The build specification (build spec) for the autocreated branch.\\n\\n*Length Constraints:* Minimum length of 1. Maximum length of 25000.","EnableAutoBranchCreation":"Enables automated branch creation for the Amplify app.","EnableAutoBuild":"Enables auto building for the auto created branch.","EnablePerformanceMode":"Enables performance mode for the branch.\\n\\nPerformance mode optimizes for faster hosting performance by keeping content cached at the edge for a longer interval. When performance mode is enabled, hosting configuration or code changes can take up to 10 minutes to roll out.","EnablePullRequestPreview":"Sets whether pull request previews are enabled for each branch that Amplify Hosting automatically creates for your app. Amplify creates previews by deploying your app to a unique URL whenever a pull request is opened for the branch. Development and QA teams can use this preview to test the pull request before it\'s merged into a production or integration branch.\\n\\nTo provide backend support for your preview, Amplify Hosting automatically provisions a temporary backend environment that it deletes when the pull request is closed. If you want to specify a dedicated backend environment for your previews, use the `PullRequestEnvironmentName` property.\\n\\nFor more information, see [Web Previews](https://docs.aws.amazon.com/amplify/latest/userguide/pr-previews.html) in the *AWS Amplify Hosting User Guide* .","EnvironmentVariables":"Environment variables for the auto created branch.","Framework":"The framework for the autocreated branch.","PullRequestEnvironmentName":"If pull request previews are enabled, you can use this property to specify a dedicated backend environment for your previews. For example, you could specify an environment named `prod` , `test` , or `dev` that you initialized with the Amplify CLI.\\n\\nTo enable pull request previews, set the `EnablePullRequestPreview` property to `true` .\\n\\nIf you don\'t specify an environment, Amplify Hosting provides backend support for each preview by automatically provisioning a temporary backend environment. Amplify deletes this environment when the pull request is closed.\\n\\nFor more information about creating backend environments, see [Feature Branch Deployments and Team Workflows](https://docs.aws.amazon.com/amplify/latest/userguide/multi-environments.html) in the *AWS Amplify Hosting User Guide* .\\n\\n*Length Constraints:* Maximum length of 20.\\n\\n*Pattern:* (?s).*","Stage":"Stage for the auto created branch."}},"AWS::Amplify::App.BasicAuthConfig":{"attributes":{},"description":"Use the BasicAuthConfig property type to set password protection at an app level to all your branches.","properties":{"EnableBasicAuth":"Enables basic authorization for the Amplify app\'s branches.","Password":"The password for basic authorization.\\n\\n*Length Constraints:* Minimum length of 1. Maximum length of 255.","Username":"The user name for basic authorization.\\n\\n*Length Constraints:* Minimum length of 1. Maximum length of 255."}},"AWS::Amplify::App.CustomRule":{"attributes":{},"description":"The CustomRule property type allows you to specify redirects, rewrites, and reverse proxies. Redirects enable a web app to reroute navigation from one URL to another.","properties":{"Condition":"The condition for a URL rewrite or redirect rule, such as a country code.\\n\\n*Length Constraints:* Minimum length of 0. Maximum length of 2048.\\n\\n*Pattern:* (?s).*","Source":"The source pattern for a URL rewrite or redirect rule.\\n\\n*Length Constraints:* Minimum length of 1. Maximum length of 2048.\\n\\n*Pattern:* (?s).+","Status":"The status code for a URL rewrite or redirect rule.\\n\\n- **200** - Represents a 200 rewrite rule.\\n- **301** - Represents a 301 (moved pemanently) redirect rule. This and all future requests should be directed to the target URL.\\n- **302** - Represents a 302 temporary redirect rule.\\n- **404** - Represents a 404 redirect rule.\\n- **404-200** - Represents a 404 rewrite rule.\\n\\n*Length Constraints:* Minimum length of 3. Maximum length of 7.\\n\\n*Pattern:* .{3,7}","Target":"The target pattern for a URL rewrite or redirect rule.\\n\\n*Length Constraints:* Minimum length of 1. Maximum length of 2048.\\n\\n*Pattern:* (?s).+"}},"AWS::Amplify::App.EnvironmentVariable":{"attributes":{},"description":"Environment variables are key-value pairs that are available at build time. Set environment variables for all branches in your app.","properties":{"Name":"The environment variable name.\\n\\n*Length Constraints:* Maximum length of 255.\\n\\n*Pattern:* (?s).*","Value":"The environment variable value.\\n\\n*Length Constraints:* Maximum length of 5500.\\n\\n*Pattern:* (?s).*"}},"AWS::Amplify::Branch":{"attributes":{"Arn":"ARN for a branch, part of an Amplify App.","BranchName":"Name for a branch, part of an Amplify App."},"description":"The AWS::Amplify::Branch resource specifies a new branch within an app.","properties":{"AppId":"The unique ID for an Amplify app.\\n\\n*Length Constraints:* Minimum length of 1. Maximum length of 20.\\n\\n*Pattern:* d[a-z0-9]+","BasicAuthConfig":"The basic authorization credentials for a branch of an Amplify app. You must base64-encode the authorization credentials and provide them in the format `user:password` .","BranchName":"The name for the branch.\\n\\n*Length Constraints:* Minimum length of 1. Maximum length of 255.\\n\\n*Pattern:* (?s).+","BuildSpec":"The build specification (build spec) for the branch.\\n\\n*Length Constraints:* Minimum length of 1. Maximum length of 25000.\\n\\n*Pattern:* (?s).+","Description":"The description for the branch that is part of an Amplify app.\\n\\n*Length Constraints:* Maximum length of 1000.\\n\\n*Pattern:* (?s).*","EnableAutoBuild":"Enables auto building for the branch.","EnablePerformanceMode":"Enables performance mode for the branch.\\n\\nPerformance mode optimizes for faster hosting performance by keeping content cached at the edge for a longer interval. When performance mode is enabled, hosting configuration or code changes can take up to 10 minutes to roll out.","EnablePullRequestPreview":"Specifies whether Amplify Hosting creates a preview for each pull request that is made for this branch. If this property is enabled, Amplify deploys your app to a unique preview URL after each pull request is opened. Development and QA teams can use this preview to test the pull request before it\'s merged into a production or integration branch.\\n\\nTo provide backend support for your preview, Amplify automatically provisions a temporary backend environment that it deletes when the pull request is closed. If you want to specify a dedicated backend environment for your previews, use the `PullRequestEnvironmentName` property.\\n\\nFor more information, see [Web Previews](https://docs.aws.amazon.com/amplify/latest/userguide/pr-previews.html) in the *AWS Amplify Hosting User Guide* .","EnvironmentVariables":"The environment variables for the branch.","Framework":"The framework for the branch.","PullRequestEnvironmentName":"If pull request previews are enabled for this branch, you can use this property to specify a dedicated backend environment for your previews. For example, you could specify an environment named `prod` , `test` , or `dev` that you initialized with the Amplify CLI and mapped to this branch.\\n\\nTo enable pull request previews, set the `EnablePullRequestPreview` property to `true` .\\n\\nIf you don\'t specify an environment, Amplify Hosting provides backend support for each preview by automatically provisioning a temporary backend environment. Amplify Hosting deletes this environment when the pull request is closed.\\n\\nFor more information about creating backend environments, see [Feature Branch Deployments and Team Workflows](https://docs.aws.amazon.com/amplify/latest/userguide/multi-environments.html) in the *AWS Amplify Hosting User Guide* .\\n\\n*Length Constraints:* Maximum length of 20.\\n\\n*Pattern:* (?s).*","Stage":"Describes the current stage for the branch.\\n\\n*Valid Values:* PRODUCTION | BETA | DEVELOPMENT | EXPERIMENTAL | PULL_REQUEST","Tags":"The tag for the branch."}},"AWS::Amplify::Branch.BasicAuthConfig":{"attributes":{},"description":"Use the BasicAuthConfig property type to set password protection for a specific branch.","properties":{"EnableBasicAuth":"Enables basic authorization for the branch.","Password":"The password for basic authorization.\\n\\n*Length Constraints:* Minimum length of 1. Maximum length of 255.","Username":"The user name for basic authorization.\\n\\n*Length Constraints:* Minimum length of 1. Maximum length of 255."}},"AWS::Amplify::Branch.EnvironmentVariable":{"attributes":{},"description":"The EnvironmentVariable property type sets environment variables for a specific branch. Environment variables are key-value pairs that are available at build time.","properties":{"Name":"The environment variable name.\\n\\n*Length Constraints:* Maximum length of 255.\\n\\n*Pattern:* (?s).*","Value":"The environment variable value.\\n\\n*Length Constraints:* Maximum length of 5500.\\n\\n*Pattern:* (?s).*"}},"AWS::Amplify::Domain":{"attributes":{"Arn":"ARN for the Domain Association.","AutoSubDomainCreationPatterns":"Branch patterns for the automatically created subdomain.","AutoSubDomainIAMRole":"The IAM service role for the subdomain.","CertificateRecord":"DNS Record for certificate verification.","DomainName":"Name of the domain.","DomainStatus":"Status for the Domain Association.","EnableAutoSubDomain":"Specifies whether the automated creation of subdomains for branches is enabled.","StatusReason":"Reason for the current status of the domain."},"description":"The AWS::Amplify::Domain resource allows you to connect a custom domain to your app.","properties":{"AppId":"The unique ID for an Amplify app.\\n\\n*Length Constraints:* Minimum length of 1. Maximum length of 20.\\n\\n*Pattern:* d[a-z0-9]+","AutoSubDomainCreationPatterns":"Sets the branch patterns for automatic subdomain creation.","AutoSubDomainIAMRole":"The required AWS Identity and Access Management (IAM) service role for the Amazon Resource Name (ARN) for automatically creating subdomains.\\n\\n*Length Constraints:* Maximum length of 1000.\\n\\n*Pattern:* ^$|^arn:aws:iam::\\\\d{12}:role.+","DomainName":"The domain name for the domain association.\\n\\n*Length Constraints:* Maximum length of 255.\\n\\n*Pattern:* ^(((?!-)[A-Za-z0-9-]{0,62}[A-Za-z0-9])\\\\.)+((?!-)[A-Za-z0-9-]{1,62}[A-Za-z0-9])(\\\\.)?$","EnableAutoSubDomain":"Enables the automated creation of subdomains for branches.","SubDomainSettings":"The setting for the subdomain."}},"AWS::Amplify::Domain.SubDomainSetting":{"attributes":{},"description":"The SubDomainSetting property type enables you to connect a subdomain (for example, example.exampledomain.com) to a specific branch.","properties":{"BranchName":"The branch name setting for the subdomain.\\n\\n*Length Constraints:* Minimum length of 1. Maximum length of 255.\\n\\n*Pattern:* (?s).+","Prefix":"The prefix setting for the subdomain.\\n\\n*Length Constraints:* Maximum length of 255.\\n\\n*Pattern:* (?s).*"}},"AWS::AmplifyUIBuilder::Component":{"attributes":{"Id":"The unique ID of the component."},"description":"The AWS::AmplifyUIBuilder::Component resource specifies a component within an Amplify app. A component is a user interface (UI) element that you can customize. Use `ComponentChild` to configure an instance of a `Component` . A `ComponentChild` instance inherits the configuration of the main `Component` .","properties":{"AppId":"The unique ID of the Amplify app associated with the component.","BindingProperties":"The information to connect a component\'s properties to data at runtime. You can\'t specify `tags` as a valid property for `bindingProperties` .","Children":"A list of the component\'s `ComponentChild` instances.","CollectionProperties":"The data binding configuration for the component\'s properties. Use this for a collection component. You can\'t specify `tags` as a valid property for `collectionProperties` .","ComponentType":"The type of the component. This can be an Amplify custom UI component or another custom component.","EnvironmentName":"The name of the backend environment that is a part of the Amplify app.","Events":"Describes the events that can be raised on the component. Use for the workflow feature in Amplify Studio that allows you to bind events and actions to components.","Name":"The name of the component.","Overrides":"Describes the component\'s properties that can be overriden in a customized instance of the component. You can\'t specify `tags` as a valid property for `overrides` .","Properties":"Describes the component\'s properties. You can\'t specify `tags` as a valid property for `properties` .","SchemaVersion":"The schema version of the component when it was imported.","SourceId":"The unique ID of the component in its original source system, such as Figma.","Tags":"One or more key-value pairs to use when tagging the component.","Variants":"A list of the component\'s variants. A variant is a unique style configuration of a main component."}},"AWS::AmplifyUIBuilder::Component.ActionParameters":{"attributes":{},"description":"Represents the event action configuration for an element of a `Component` or `ComponentChild` . Use for the workflow feature in Amplify Studio that allows you to bind events and actions to components. `ActionParameters` defines the action that is performed when an event occurs on the component.","properties":{"Anchor":"The HTML anchor link to the location to open. Specify this value for a navigation action.","Fields":"A dictionary of key-value pairs mapping Amplify Studio properties to fields in a data model. Use when the action performs an operation on an Amplify DataStore model.","Global":"Specifies whether the user should be signed out globally. Specify this value for an auth sign out action.","Id":"The unique ID of the component that the `ActionParameters` apply to.","Model":"The name of the data model. Use when the action performs an operation on an Amplify DataStore model.","State":"A key-value pair that specifies the state property name and its initial value.","Target":"The element within the same component to modify when the action occurs.","Type":"The type of navigation action. Valid values are `url` and `anchor` . This value is required for a navigation action.","Url":"The URL to the location to open. Specify this value for a navigation action."}},"AWS::AmplifyUIBuilder::Component.ComponentBindingPropertiesValue":{"attributes":{},"description":"The `ComponentBindingPropertiesValue` property specifies the data binding configuration for a component at runtime. You can use `ComponentBindingPropertiesValue` to add exposed properties to a component to allow different values to be entered when a component is reused in different places in an app.","properties":{"BindingProperties":"Describes the properties to customize with data at runtime.","DefaultValue":"The default value of the property.","Type":"The property type."}},"AWS::AmplifyUIBuilder::Component.ComponentBindingPropertiesValueProperties":{"attributes":{},"description":"The `ComponentBindingPropertiesValueProperties` property specifies the data binding configuration for a specific property using data stored in AWS . For AWS connected properties, you can bind a property to data stored in an Amazon S3 bucket, an Amplify DataStore model or an authenticated user attribute.","properties":{"Bucket":"An Amazon S3 bucket.","DefaultValue":"The default value to assign to the property.","Field":"The field to bind the data to.","Key":"The storage key for an Amazon S3 bucket.","Model":"An Amplify DataStore model.","Predicates":"A list of predicates for binding a component\'s properties to data.","UserAttribute":"An authenticated user attribute."}},"AWS::AmplifyUIBuilder::Component.ComponentChild":{"attributes":{},"description":"The `ComponentChild` property specifies a nested UI configuration within a parent `Component` .","properties":{"Children":"The list of `ComponentChild` instances for this component.","ComponentType":"The type of the child component.","Events":"Describes the events that can be raised on the child component. Use for the workflow feature in Amplify Studio that allows you to bind events and actions to components.","Name":"The name of the child component.","Properties":"Describes the properties of the child component. You can\'t specify `tags` as a valid property for `properties` ."}},"AWS::AmplifyUIBuilder::Component.ComponentConditionProperty":{"attributes":{},"description":"The `ComponentConditionProperty` property specifies a conditional expression for setting a component property. Use `ComponentConditionProperty` to set a property to different values conditionally, based on the value of another property.","properties":{"Else":"The value to assign to the property if the condition is not met.","Field":"The name of a field. Specify this when the property is a data model.","Operand":"The value of the property to evaluate.","OperandType":"The type of the property to evaluate.","Operator":"The operator to use to perform the evaluation, such as `eq` to represent equals.","Property":"The name of the conditional property.","Then":"The value to assign to the property if the condition is met."}},"AWS::AmplifyUIBuilder::Component.ComponentDataConfiguration":{"attributes":{},"description":"The `ComponentDataConfiguration` property specifies the configuration for binding a component\'s properties to data.","properties":{"Identifiers":"A list of IDs to use to bind data to a component. Use this property to bind specifically chosen data, rather than data retrieved from a query.","Model":"The name of the data model to use to bind data to a component.","Predicate":"Represents the conditional logic to use when binding data to a component. Use this property to retrieve only a subset of the data in a collection.","Sort":"Describes how to sort the component\'s properties."}},"AWS::AmplifyUIBuilder::Component.ComponentEvent":{"attributes":{},"description":"The `ComponentEvent` property specifies the configuration of an event. You can bind an event and a corresponding action to a `Component` or a `ComponentChild` . A button click is an example of an event.","properties":{"Action":"The action to perform when a specific event is raised.","Parameters":"Describes information about the action."}},"AWS::AmplifyUIBuilder::Component.ComponentProperty":{"attributes":{},"description":"The `ComponentProperty` property specifies the configuration for all of a component\'s properties. Use `ComponentProperty` to specify the values to render or bind by default.","properties":{"BindingProperties":"The information to bind the component property to data at runtime.","Bindings":"The information to bind the component property to form data.","CollectionBindingProperties":"The information to bind the component property to data at runtime. Use this for collection components.","ComponentName":"The name of the component that is affected by an event.","Concat":"A list of component properties to concatenate to create the value to assign to this component property.","Condition":"The conditional expression to use to assign a value to the component property.","Configured":"Specifies whether the user configured the property in Amplify Studio after importing it.","DefaultValue":"The default value to assign to the component property.","Event":"An event that occurs in your app. Use this for workflow data binding.","ImportedValue":"The default value assigned to the property when the component is imported into an app.","Model":"The data model to use to assign a value to the component property.","Property":"The name of the component\'s property that is affected by an event.","Type":"The component type.","UserAttribute":"An authenticated user attribute to use to assign a value to the component property.","Value":"The value to assign to the component property."}},"AWS::AmplifyUIBuilder::Component.ComponentPropertyBindingProperties":{"attributes":{},"description":"The `ComponentPropertyBindingProperties` property specifies a component property to associate with a binding property. This enables exposed properties on the top level component to propagate data to the component\'s property values.","properties":{"Field":"The data field to bind the property to.","Property":"The component property to bind to the data field."}},"AWS::AmplifyUIBuilder::Component.ComponentVariant":{"attributes":{},"description":"The `ComponentVariant` property specifies the style configuration of a unique variation of a main component.","properties":{"Overrides":"The properties of the component variant that can be overriden when customizing an instance of the component. You can\'t specify `tags` as a valid property for `overrides` .","VariantValues":"The combination of variants that comprise this variant."}},"AWS::AmplifyUIBuilder::Component.FormBindingElement":{"attributes":{},"description":"Describes how to bind a component property to form data.","properties":{"Element":"The name of the component to retrieve a value from.","Property":"The property to retrieve a value from."}},"AWS::AmplifyUIBuilder::Component.MutationActionSetStateParameter":{"attributes":{},"description":"Represents the state configuration when an action modifies a property of another element within the same component.","properties":{"ComponentName":"The name of the component that is being modified.","Property":"The name of the component property to apply the state configuration to.","Set":"The state configuration to assign to the property."}},"AWS::AmplifyUIBuilder::Component.Predicate":{"attributes":{},"description":"The `Predicate` property specifies information for generating Amplify DataStore queries. Use `Predicate` to retrieve a subset of the data in a collection.","properties":{"And":"A list of predicates to combine logically.","Field":"The field to query.","Operand":"The value to use when performing the evaluation.","Operator":"The operator to use to perform the evaluation.","Or":"A list of predicates to combine logically."}},"AWS::AmplifyUIBuilder::Component.SortProperty":{"attributes":{},"description":"The `SortProperty` property specifies how to sort the data that you bind to a component.","properties":{"Direction":"The direction of the sort, either ascending or descending.","Field":"The field to perform the sort on."}},"AWS::AmplifyUIBuilder::Form":{"attributes":{"Id":"The ID for the form."},"description":"The AWS::AmplifyUIBuilder::Form resource specifies all of the information that is required to create a form.","properties":{"AppId":"The unique ID of the Amplify app associated with the form.","Cta":"The `FormCTA` object that stores the call to action configuration for the form.","DataType":"The type of data source to use to create the form.","EnvironmentName":"The name of the backend environment that is a part of the Amplify app.","Fields":"The configuration information for the form\'s fields.","FormActionType":"Specifies whether to perform a create or update action on the form.","LabelDecorator":"Specifies an icon or decoration to display on the form.","Name":"The name of the form.","SchemaVersion":"The schema version of the form.","SectionalElements":"The configuration information for the visual helper elements for the form. These elements are not associated with any data.","Style":"The configuration for the form\'s style.","Tags":"One or more key-value pairs to use when tagging the form data."}},"AWS::AmplifyUIBuilder::Form.FieldConfig":{"attributes":{},"description":"The `FieldConfig` property specifies the configuration information for a field in a table.","properties":{"Excluded":"Specifies whether to hide a field.","InputType":"Describes the configuration for the default input value to display for a field.","Label":"The label for the field.","Position":"Specifies the field position.","Validations":"The validations to perform on the value in the field."}},"AWS::AmplifyUIBuilder::Form.FieldInputConfig":{"attributes":{},"description":"The `FieldInputConfig` property specifies the configuration for the default input values to display for a field.","properties":{"DefaultChecked":"Specifies whether a field has a default value.","DefaultCountryCode":"The default country code for a phone number.","DefaultValue":"The default value for the field.","DescriptiveText":"The text to display to describe the field.","FileUploaderConfig":"The configuration for the file uploader field.","IsArray":"Specifies whether to render the field as an array. This property is ignored if the `dataSourceType` for the form is a Data Store.","MaxValue":"The maximum value to display for the field.","MinValue":"The minimum value to display for the field.","Name":"The name of the field.","Placeholder":"The text to display as a placeholder for the field.","ReadOnly":"Specifies a read only field.","Required":"Specifies a field that requires input.","Step":"The stepping increment for a numeric value in a field.","Type":"The input type for the field.","Value":"The value for the field.","ValueMappings":"The information to use to customize the input fields with data at runtime."}},"AWS::AmplifyUIBuilder::Form.FieldPosition":{"attributes":{},"description":"The `FieldPosition` property specifies the field position.","properties":{"Below":"The field position is below the field specified by the string.","Fixed":"The field position is fixed and doesn\'t change in relation to other fields.","RightOf":"The field position is to the right of the field specified by the string."}},"AWS::AmplifyUIBuilder::Form.FieldValidationConfiguration":{"attributes":{},"description":"The `FieldValidationConfiguration` property specifies the validation configuration for a field.","properties":{"NumValues":"The validation to perform on a number value.","StrValues":"The validation to perform on a string value.","Type":"The validation to perform on an object type. ``","ValidationMessage":"The validation message to display."}},"AWS::AmplifyUIBuilder::Form.FileUploaderFieldConfig":{"attributes":{},"description":"Describes the configuration for the file uploader field.","properties":{"AcceptedFileTypes":"The file types that are allowed to be uploaded by the file uploader. Provide this information in an array of strings specifying the valid file extensions.","AccessLevel":"The access level to assign to the uploaded files in the Amazon S3 bucket where they are stored. The valid values for this property are `private` , `protected` , or `public` . For detailed information about the permissions associated with each access level, see [File access levels](https://docs.aws.amazon.com/https://docs.amplify.aws/lib/storage/configureaccess/q/platform/js/) in the *Amplify documentation* .","IsResumable":"Allows the file upload operation to be paused and resumed. The default value is `false` .\\n\\nWhen `isResumable` is set to `true` , the file uploader uses a multipart upload to break the files into chunks before upload. The progress of the upload isn\'t continuous, because the file uploader uploads a chunk at a time.","MaxFileCount":"Specifies the maximum number of files that can be selected to upload. The default value is an unlimited number of files.","MaxSize":"The maximum file size in bytes that the file uploader will accept. The default value is an unlimited file size.","ShowThumbnails":"Specifies whether to display or hide the image preview after selecting a file for upload. The default value is `true` to display the image preview."}},"AWS::AmplifyUIBuilder::Form.FormButton":{"attributes":{},"description":"The `FormButton` property specifies the configuration for a button UI element that is a part of a form.","properties":{"Children":"Describes the button\'s properties.","Excluded":"Specifies whether the button is visible on the form.","Position":"The position of the button."}},"AWS::AmplifyUIBuilder::Form.FormCTA":{"attributes":{},"description":"The `FormCTA` property specifies the call to action button configuration for the form.","properties":{"Cancel":"Displays a cancel button.","Clear":"Displays a clear button.","Position":"The position of the button.","Submit":"Displays a submit button."}},"AWS::AmplifyUIBuilder::Form.FormDataTypeConfig":{"attributes":{},"description":"The `FormDataTypeConfig` property specifies the data type configuration for the data source associated with a form.","properties":{"DataSourceType":"The data source type, either an Amplify DataStore model or a custom data type.","DataTypeName":"The unique name of the data type you are using as the data source for the form."}},"AWS::AmplifyUIBuilder::Form.FormInputValueProperty":{"attributes":{},"description":"The `FormInputValueProperty` property specifies the configuration for an input field on a form. Use `FormInputValueProperty` to specify the values to render or bind by default.","properties":{"Value":"The value to assign to the input field."}},"AWS::AmplifyUIBuilder::Form.FormStyle":{"attributes":{},"description":"The `FormStyle` property specifies the configuration for the form\'s style.","properties":{"HorizontalGap":"The spacing for the horizontal gap.","OuterPadding":"The size of the outer padding for the form.","VerticalGap":"The spacing for the vertical gap."}},"AWS::AmplifyUIBuilder::Form.FormStyleConfig":{"attributes":{},"description":"The `FormStyleConfig` property specifies the configuration settings for the form\'s style properties.","properties":{"TokenReference":"A reference to a design token to use to bind the form\'s style properties to an existing theme.","Value":"The value of the style setting."}},"AWS::AmplifyUIBuilder::Form.SectionalElement":{"attributes":{},"description":"The `SectionalElement` property specifies the configuration information for a visual helper element for a form. A sectional element can be a header, a text block, or a divider. These elements are static and not associated with any data.","properties":{"Excluded":"Excludes a sectional element that was generated by default for a specified data model.","Level":"Specifies the size of the font for a `Heading` sectional element. Valid values are `1 | 2 | 3 | 4 | 5 | 6` .","Orientation":"Specifies the orientation for a `Divider` sectional element. Valid values are `horizontal` or `vertical` .","Position":"Specifies the position of the text in a field for a `Text` sectional element.","Text":"The text for a `Text` sectional element.","Type":"The type of sectional element. Valid values are `Heading` , `Text` , and `Divider` ."}},"AWS::AmplifyUIBuilder::Form.ValueMapping":{"attributes":{},"description":"The `ValueMapping` property specifies the association between a complex object and a display value. Use `ValueMapping` to store how to represent complex objects when they are displayed.","properties":{"DisplayValue":"The value to display for the complex object.","Value":"The complex object."}},"AWS::AmplifyUIBuilder::Form.ValueMappings":{"attributes":{},"description":"The `ValueMappings` property specifies the data binding configuration for a value map.","properties":{"Values":"The value and display value pairs."}},"AWS::AmplifyUIBuilder::Theme":{"attributes":{"Id":"The ID for the theme."},"description":"The AWS::AmplifyUIBuilder::Theme resource specifies a theme within an Amplify app. A theme is a collection of style settings that apply globally to the components associated with the app.","properties":{"AppId":"The unique ID for the Amplify app associated with the theme.","EnvironmentName":"The name of the backend environment that is a part of the Amplify app.","Name":"The name of the theme.","Overrides":"Describes the properties that can be overriden to customize a theme.","Tags":"One or more key-value pairs to use when tagging the theme.","Values":"A list of key-value pairs that defines the properties of the theme."}},"AWS::AmplifyUIBuilder::Theme.ThemeValue":{"attributes":{},"description":"The `ThemeValue` property specifies the configuration of a theme\'s properties.","properties":{"Children":"A list of key-value pairs that define the theme\'s properties.","Value":"The value of a theme property."}},"AWS::AmplifyUIBuilder::Theme.ThemeValues":{"attributes":{},"description":"The `ThemeValues` property specifies key-value pair that defines a property of a theme.","properties":{"Key":"The name of the property.","Value":"The value of the property."}},"AWS::ApiGateway::Account":{"attributes":{"Id":"The ID for the account. For example: `abc123` .","Ref":"`Ref` returns the ID of the resource, such as `mysta-accou-01234b567890example` ."},"description":"The `AWS::ApiGateway::Account` resource specifies the IAM role that Amazon API Gateway uses to write API logs to Amazon CloudWatch Logs. To avoid overwriting other roles, you should only have one `AWS::ApiGateway::Account` resource per region per account.","properties":{"CloudWatchRoleArn":"The ARN of an Amazon CloudWatch role for the current Account."}},"AWS::ApiGateway::ApiKey":{"attributes":{"APIKeyId":"The ID for the API key. For example: `abc123` .","Ref":"`Ref` returns the API key ID, such as `m2m1k7sybf` ."},"description":"The `AWS::ApiGateway::ApiKey` resource creates a unique key that you can distribute to clients who are executing API Gateway `Method` resources that require an API key. To specify which API key clients must use, map the API key with the `RestApi` and `Stage` resources that include the methods that require a key.","properties":{"CustomerId":"An AWS Marketplace customer identifier, when integrating with the AWS SaaS Marketplace.","Description":"The description of the ApiKey.","Enabled":"Specifies whether the ApiKey can be used by callers.","GenerateDistinctId":"Specifies whether ( `true` ) or not ( `false` ) the key identifier is distinct from the created API key value. This parameter is deprecated and should not be used.","Name":"A name for the API key. If you don\'t specify a name, AWS CloudFormation generates a unique physical ID and uses that ID for the API key name. For more information, see [Name Type](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-name.html) .\\n\\n> If you specify a name, you cannot perform updates that require replacement of this resource. You can perform updates that require no or some interruption. If you must replace the resource, specify a new name.","StageKeys":"DEPRECATED FOR USAGE PLANS - Specifies stages associated with the API key.","Tags":"The key-value map of strings. The valid character set is [a-zA-Z+-=._:/]. The tag key can be up to 128 characters and must not start with `aws:` . The tag value can be up to 256 characters.","Value":"Specifies a value of the API key."}},"AWS::ApiGateway::ApiKey.StageKey":{"attributes":{},"description":"`StageKey` is a property of the [AWS::ApiGateway::ApiKey](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-apikey.html) resource that specifies the stage to associate with the API key. This association allows only clients with the key to make requests to methods in that stage.","properties":{"RestApiId":"The string identifier of the associated RestApi.","StageName":"The stage name associated with the stage key."}},"AWS::ApiGateway::Authorizer":{"attributes":{"AuthorizerId":"The ID for the authorizer. For example: `abc123` .","Ref":"`Ref` returns the authorizer\'s ID, such as `abcde1` ."},"description":"The `AWS::ApiGateway::Authorizer` resource creates an authorization layer that API Gateway activates for methods that have authorization enabled. API Gateway activates the authorizer when a client calls those methods.","properties":{"AuthType":"Optional customer-defined field, used in OpenAPI imports and exports without functional impact.","AuthorizerCredentials":"Specifies the required credentials as an IAM role for API Gateway to invoke the authorizer. To specify an IAM role for API Gateway to assume, use the role\'s Amazon Resource Name (ARN). To use resource-based permissions on the Lambda function, specify null.","AuthorizerResultTtlInSeconds":"The TTL in seconds of cached authorizer results. If it equals 0, authorization caching is disabled. If it is greater than 0, API Gateway will cache authorizer responses. If this field is not set, the default value is 300. The maximum value is 3600, or 1 hour.","AuthorizerUri":"Specifies the authorizer\'s Uniform Resource Identifier (URI). For `TOKEN` or `REQUEST` authorizers, this must be a well-formed Lambda function URI, for example, `arn:aws:apigateway:us-west-2:lambda:path/2015-03-31/functions/arn:aws:lambda:us-west-2:{account_id}:function:{lambda_function_name}/invocations` . In general, the URI has this form `arn:aws:apigateway:{region}:lambda:path/{service_api}` , where `{region}` is the same as the region hosting the Lambda function, `path` indicates that the remaining substring in the URI should be treated as the path to the resource, including the initial `/` . For Lambda functions, this is usually of the form `/2015-03-31/functions/[FunctionARN]/invocations` .","IdentitySource":"The identity source for which authorization is requested. For a `TOKEN` or `COGNITO_USER_POOLS` authorizer, this is required and specifies the request header mapping expression for the custom header holding the authorization token submitted by the client. For example, if the token header name is `Auth` , the header mapping expression is `method.request.header.Auth` . For the `REQUEST` authorizer, this is required when authorization caching is enabled. The value is a comma-separated string of one or more mapping expressions of the specified request parameters. For example, if an `Auth` header, a `Name` query string parameter are defined as identity sources, this value is `method.request.header.Auth, method.request.querystring.Name` . These parameters will be used to derive the authorization caching key and to perform runtime validation of the `REQUEST` authorizer by verifying all of the identity-related request parameters are present, not null and non-empty. Only when this is true does the authorizer invoke the authorizer Lambda function, otherwise, it returns a 401 Unauthorized response without calling the Lambda function. The valid value is a string of comma-separated mapping expressions of the specified request parameters. When the authorization caching is not enabled, this property is optional.","IdentityValidationExpression":"A validation expression for the incoming identity token. For `TOKEN` authorizers, this value is a regular expression. For `COGNITO_USER_POOLS` authorizers, API Gateway will match the `aud` field of the incoming token from the client against the specified regular expression. It will invoke the authorizer\'s Lambda function when there is a match. Otherwise, it will return a 401 Unauthorized response without calling the Lambda function. The validation expression does not apply to the `REQUEST` authorizer.","Name":"The name of the authorizer.","ProviderARNs":"A list of the Amazon Cognito user pool ARNs for the `COGNITO_USER_POOLS` authorizer. Each element is of this format: `arn:aws:cognito-idp:{region}:{account_id}:userpool/{user_pool_id}` . For a `TOKEN` or `REQUEST` authorizer, this is not defined.","RestApiId":"The string identifier of the associated RestApi.","Type":"The authorizer type. Valid values are `TOKEN` for a Lambda function using a single authorization token submitted in a custom header, `REQUEST` for a Lambda function using incoming request parameters, and `COGNITO_USER_POOLS` for using an Amazon Cognito user pool."}},"AWS::ApiGateway::BasePathMapping":{"attributes":{},"description":"The `AWS::ApiGateway::BasePathMapping` resource creates a base path that clients who call your API must use in the invocation URL.","properties":{"BasePath":"The base path name that callers of the API must provide as part of the URL after the domain name.","DomainName":"The domain name of the BasePathMapping resource to be described.","Id":"","RestApiId":"The string identifier of the associated RestApi.","Stage":"The name of the associated stage."}},"AWS::ApiGateway::ClientCertificate":{"attributes":{"ClientCertificateId":"The ID for the client certificate. For example: `abc123` .","Ref":"`Ref` returns the client certificate name, such as `abc123` ."},"description":"The `AWS::ApiGateway::ClientCertificate` resource creates a client certificate that API Gateway uses to configure client-side SSL authentication for sending requests to the integration endpoint.","properties":{"Description":"The description of the client certificate.","Tags":"The collection of tags. Each tag element is associated with a given resource."}},"AWS::ApiGateway::Deployment":{"attributes":{"DeploymentId":"The ID for the deployment. For example: `abc123` .","Ref":"`Ref` returns the deployment ID, such as `123abc` ."},"description":"The `AWS::ApiGateway::Deployment` resource deploys an API Gateway `RestApi` resource to a stage so that clients can call the API over the internet. The stage acts as an environment.","properties":{"DeploymentCanarySettings":"The input configuration for a canary deployment.","Description":"The description for the Deployment resource to create.","RestApiId":"The string identifier of the associated RestApi.","StageDescription":"The description of the Stage resource for the Deployment resource to create. To specify a stage description, you must also provide a stage name.","StageName":"The name of the Stage resource for the Deployment resource to create."}},"AWS::ApiGateway::Deployment.AccessLogSetting":{"attributes":{},"description":"The `AccessLogSetting` property type specifies settings for logging access in this stage.\\n\\n`AccessLogSetting` is a property of the [StageDescription](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-deployment-stagedescription.html) property type.","properties":{"DestinationArn":"The Amazon Resource Name (ARN) of the CloudWatch Logs log group or Kinesis Data Firehose delivery stream to receive access logs. If you specify a Kinesis Data Firehose delivery stream, the stream name must begin with `amazon-apigateway-` .","Format":"A single line format of the access logs of data, as specified by selected $context variables. The format must include at least `$context.requestId` ."}},"AWS::ApiGateway::Deployment.CanarySetting":{"attributes":{},"description":"The `CanarySetting` property type specifies settings for the canary deployment in this stage.\\n\\n`CanarySetting` is a property of the [StageDescription](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-deployment-stagedescription.html) property type.","properties":{"PercentTraffic":"The percent (0-100) of traffic diverted to a canary deployment.","StageVariableOverrides":"Stage variables overridden for a canary release deployment, including new stage variables introduced in the canary. These stage variables are represented as a string-to-string map between stage variable names and their values.","UseStageCache":"A Boolean flag to indicate whether the canary deployment uses the stage cache or not."}},"AWS::ApiGateway::Deployment.DeploymentCanarySettings":{"attributes":{},"description":"The `DeploymentCanarySettings` property type specifies settings for the canary deployment.","properties":{"PercentTraffic":"The percentage (0.0-100.0) of traffic routed to the canary deployment.","StageVariableOverrides":"A stage variable overrides used for the canary release deployment. They can override existing stage variables or add new stage variables for the canary release deployment. These stage variables are represented as a string-to-string map between stage variable names and their values.","UseStageCache":"A Boolean flag to indicate whether the canary release deployment uses the stage cache or not."}},"AWS::ApiGateway::Deployment.MethodSetting":{"attributes":{},"description":"The `MethodSetting` property type configures settings for all methods in a stage.\\n\\nThe `MethodSettings` property of the [Amazon API Gateway Deployment StageDescription](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-deployment-stagedescription.html) property type contains a list of `MethodSetting` property types.","properties":{"CacheDataEncrypted":"Specifies whether the cached responses are encrypted.","CacheTtlInSeconds":"Specifies the time to live (TTL), in seconds, for cached responses. The higher the TTL, the longer the response will be cached.","CachingEnabled":"Specifies whether responses should be cached and returned for requests. A cache cluster must be enabled on the stage for responses to be cached.","DataTraceEnabled":"Specifies whether data trace logging is enabled for this method, which affects the log entries pushed to Amazon CloudWatch Logs.","HttpMethod":"The HTTP method.","LoggingLevel":"Specifies the logging level for this method, which affects the log entries pushed to Amazon CloudWatch Logs. Valid values are `OFF` , `ERROR` , and `INFO` . Choose `ERROR` to write only error-level entries to CloudWatch Logs, or choose `INFO` to include all `ERROR` events as well as extra informational events.","MetricsEnabled":"Specifies whether Amazon CloudWatch metrics are enabled for this method.","ResourcePath":"The resource path for this method. Forward slashes ( `/` ) are encoded as `~1` and the initial slash must include a forward slash. For example, the path value `/resource/subresource` must be encoded as `/~1resource~1subresource` . To specify the root path, use only a slash ( `/` ).","ThrottlingBurstLimit":"Specifies the throttling burst limit.","ThrottlingRateLimit":"Specifies the throttling rate limit."}},"AWS::ApiGateway::Deployment.StageDescription":{"attributes":{},"description":"`StageDescription` is a property of the [AWS::ApiGateway::Deployment](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-deployment.html) resource that configures a deployment stage.","properties":{"AccessLogSetting":"Specifies settings for logging access in this stage.","CacheClusterEnabled":"Specifies whether a cache cluster is enabled for the stage.","CacheClusterSize":"The size of the stage\'s cache cluster. For more information, see [cacheClusterSize](https://docs.aws.amazon.com/apigateway/latest/api/API_CreateStage.html#apigw-CreateStage-request-cacheClusterSize) in the *API Gateway API Reference* .","CacheDataEncrypted":"Indicates whether the cached responses are encrypted.","CacheTtlInSeconds":"The time-to-live (TTL) period, in seconds, that specifies how long API Gateway caches responses.","CachingEnabled":"Indicates whether responses are cached and returned for requests. You must enable a cache cluster on the stage to cache responses. For more information, see [Enable API Gateway Caching in a Stage to Enhance API Performance](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-caching.html) in the *API Gateway Developer Guide* .","CanarySetting":"Specifies settings for the canary deployment in this stage.","ClientCertificateId":"The identifier of the client certificate that API Gateway uses to call your integration endpoints in the stage.","DataTraceEnabled":"Indicates whether data trace logging is enabled for methods in the stage. API Gateway pushes these logs to Amazon CloudWatch Logs.","Description":"A description of the purpose of the stage.","DocumentationVersion":"The version identifier of the API documentation snapshot.","LoggingLevel":"The logging level for this method. For valid values, see the `loggingLevel` property of the [MethodSetting](https://docs.aws.amazon.com/apigateway/latest/api/API_MethodSetting.html) resource in the *Amazon API Gateway API Reference* .","MethodSettings":"Configures settings for all of the stage\'s methods.","MetricsEnabled":"Indicates whether Amazon CloudWatch metrics are enabled for methods in the stage.","Tags":"An array of arbitrary tags (key-value pairs) to associate with the stage.","ThrottlingBurstLimit":"The target request burst rate limit. This allows more requests through for a period of time than the target rate limit. For more information, see [Manage API Request Throttling](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-request-throttling.html) in the *API Gateway Developer Guide* .","ThrottlingRateLimit":"The target request steady-state rate limit. For more information, see [Manage API Request Throttling](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-request-throttling.html) in the *API Gateway Developer Guide* .","TracingEnabled":"Specifies whether active tracing with X-ray is enabled for this stage.\\n\\nFor more information, see [Trace API Gateway API Execution with AWS X-Ray](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-xray.html) in the *API Gateway Developer Guide* .","Variables":"A map that defines the stage variables. Variable names must consist of alphanumeric characters, and the values must match the following regular expression: `[A-Za-z0-9-._~:/?#&=,]+` ."}},"AWS::ApiGateway::DocumentationPart":{"attributes":{"DocumentationPartId":"The ID for the documentation part.","Ref":"`Ref` returns the ID of the documentation part, such as `abc123` ."},"description":"The `AWS::ApiGateway::DocumentationPart` resource creates a documentation part for an API. For more information, see [Representation of API Documentation in API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-documenting-api-content-representation.html) in the *API Gateway Developer Guide* .","properties":{"Location":"The location of the targeted API entity of the to-be-created documentation part.","Properties":"The new documentation content map of the targeted API entity. Enclosed key-value pairs are API-specific, but only OpenAPI-compliant key-value pairs can be exported and, hence, published.","RestApiId":"The string identifier of the associated RestApi."}},"AWS::ApiGateway::DocumentationPart.Location":{"attributes":{},"description":"The `Location` property specifies the location of the Amazon API Gateway API entity that the documentation applies to. `Location` is a property of the [AWS::ApiGateway::DocumentationPart](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-documentationpart.html) resource.\\n\\n> For more information about each property, including constraints and valid values, see [DocumentationPart](https://docs.aws.amazon.com/apigateway/latest/api/API_DocumentationPartLocation.html) in the *Amazon API Gateway REST API Reference* .","properties":{"Method":"The HTTP verb of a method. It is a valid field for the API entity types of `METHOD` , `PATH_PARAMETER` , `QUERY_PARAMETER` , `REQUEST_HEADER` , `REQUEST_BODY` , `RESPONSE` , `RESPONSE_HEADER` , and `RESPONSE_BODY` . The default value is `*` for any method. When an applicable child entity inherits the content of an entity of the same type with more general specifications of the other `location` attributes, the child entity\'s `method` attribute must match that of the parent entity exactly.","Name":"The name of the targeted API entity. It is a valid and required field for the API entity types of `AUTHORIZER` , `MODEL` , `PATH_PARAMETER` , `QUERY_PARAMETER` , `REQUEST_HEADER` , `REQUEST_BODY` and `RESPONSE_HEADER` . It is an invalid field for any other entity type.","Path":"The URL path of the target. It is a valid field for the API entity types of `RESOURCE` , `METHOD` , `PATH_PARAMETER` , `QUERY_PARAMETER` , `REQUEST_HEADER` , `REQUEST_BODY` , `RESPONSE` , `RESPONSE_HEADER` , and `RESPONSE_BODY` . The default value is `/` for the root resource. When an applicable child entity inherits the content of another entity of the same type with more general specifications of the other `location` attributes, the child entity\'s `path` attribute must match that of the parent entity as a prefix.","StatusCode":"The HTTP status code of a response. It is a valid field for the API entity types of `RESPONSE` , `RESPONSE_HEADER` , and `RESPONSE_BODY` . The default value is `*` for any status code. When an applicable child entity inherits the content of an entity of the same type with more general specifications of the other `location` attributes, the child entity\'s `statusCode` attribute must match that of the parent entity exactly.","Type":"The type of API entity to which the documentation content applies. Valid values are `API` , `AUTHORIZER` , `MODEL` , `RESOURCE` , `METHOD` , `PATH_PARAMETER` , `QUERY_PARAMETER` , `REQUEST_HEADER` , `REQUEST_BODY` , `RESPONSE` , `RESPONSE_HEADER` , and `RESPONSE_BODY` . Content inheritance does not apply to any entity of the `API` , `AUTHORIZER` , `METHOD` , `MODEL` , `REQUEST_BODY` , or `RESOURCE` type."}},"AWS::ApiGateway::DocumentationVersion":{"attributes":{},"description":"The `AWS::ApiGateway::DocumentationVersion` resource creates a snapshot of the documentation for an API. For more information, see [Representation of API Documentation in API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-documenting-api-content-representation.html) in the *API Gateway Developer Guide* .","properties":{"Description":"A description about the new documentation snapshot.","DocumentationVersion":"The version identifier of the to-be-updated documentation version.","RestApiId":"The string identifier of the associated RestApi."}},"AWS::ApiGateway::DomainName":{"attributes":{"DistributionDomainName":"The Amazon CloudFront distribution domain name that\'s mapped to the custom domain name. This is only applicable for endpoints whose type is `EDGE` .\\n\\nExample: `d111111abcdef8.cloudfront.net`","DistributionHostedZoneId":"The region-agnostic Amazon Route 53 Hosted Zone ID of the edge-optimized endpoint. The only valid value is `Z2FDTNDATAQYW2` for all regions.","Ref":"`Ref` returns the domain name.","RegionalDomainName":"The domain name associated with the regional endpoint for this custom domain name. You set up this association by adding a DNS record that points the custom domain name to this regional domain name.","RegionalHostedZoneId":"The region-specific Amazon Route 53 Hosted Zone ID of the regional endpoint."},"description":"The `AWS::ApiGateway::DomainName` resource specifies a custom domain name for your API in API Gateway.\\n\\nYou can use a custom domain name to provide a URL that\'s more intuitive and easier to recall. For more information about using custom domain names, see [Set up Custom Domain Name for an API in API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-custom-domains.html) in the *API Gateway Developer Guide* .","properties":{"CertificateArn":"The reference to an AWS -managed certificate that will be used by edge-optimized endpoint for this domain name. AWS Certificate Manager is the only supported source.","DomainName":"The custom domain name as an API host name, for example, `my-api.example.com` .","EndpointConfiguration":"The endpoint configuration of this DomainName showing the endpoint types of the domain name.","MutualTlsAuthentication":"The mutual TLS authentication configuration for a custom domain name. If specified, API Gateway performs two-way authentication between the client and the server. Clients must present a trusted certificate to access your API.","OwnershipVerificationCertificateArn":"The ARN of the public certificate issued by ACM to validate ownership of your custom domain. Only required when configuring mutual TLS and using an ACM imported or private CA certificate ARN as the RegionalCertificateArn.","RegionalCertificateArn":"The reference to an AWS -managed certificate that will be used for validating the regional domain name. AWS Certificate Manager is the only supported source.","SecurityPolicy":"The Transport Layer Security (TLS) version + cipher suite for this DomainName. The valid values are `TLS_1_0` and `TLS_1_2` .","Tags":"The collection of tags. Each tag element is associated with a given resource."}},"AWS::ApiGateway::DomainName.EndpointConfiguration":{"attributes":{},"description":"The `EndpointConfiguration` property type specifies the endpoint types of an Amazon API Gateway domain name.\\n\\n`EndpointConfiguration` is a property of the [AWS::ApiGateway::DomainName](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-domainname.html) resource.","properties":{"Types":"A list of endpoint types of an API (RestApi) or its custom domain name (DomainName). For an edge-optimized API and its custom domain name, the endpoint type is `\\"EDGE\\"` . For a regional API and its custom domain name, the endpoint type is `REGIONAL` . For a private API, the endpoint type is `PRIVATE` ."}},"AWS::ApiGateway::DomainName.MutualTlsAuthentication":{"attributes":{},"description":"The mutual TLS authentication configuration for a custom domain name. If specified, API Gateway performs two-way authentication between the client and the server. Clients must present a trusted certificate to access your API.","properties":{"TruststoreUri":"An Amazon S3 URL that specifies the truststore for mutual TLS authentication, for example `s3://bucket-name/key-name` . The truststore can contain certificates from public or private certificate authorities. To update the truststore, upload a new version to S3, and then update your custom domain name to use the new version. To update the truststore, you must have permissions to access the S3 object.","TruststoreVersion":"The version of the S3 object that contains your truststore. To specify a version, you must have versioning enabled for the S3 bucket."}},"AWS::ApiGateway::GatewayResponse":{"attributes":{},"description":"The `AWS::ApiGateway::GatewayResponse` resource creates a gateway response for your API. For more information, see [API Gateway Responses](https://docs.aws.amazon.com/apigateway/latest/developerguide/customize-gateway-responses.html#api-gateway-gatewayResponse-definition) in the *API Gateway Developer Guide* .","properties":{"ResponseParameters":"Response parameters (paths, query strings and headers) of the GatewayResponse as a string-to-string map of key-value pairs.","ResponseTemplates":"Response templates of the GatewayResponse as a string-to-string map of key-value pairs.","ResponseType":"The response type of the associated GatewayResponse.","RestApiId":"The string identifier of the associated RestApi.","StatusCode":"The HTTP status code for this GatewayResponse."}},"AWS::ApiGateway::Method":{"attributes":{"Ref":"`Ref` returns the method ID, such as `mysta-metho-01234b567890example` ."},"description":"The `AWS::ApiGateway::Method` resource creates API Gateway methods that define the parameters and body that clients must send in their requests.","properties":{"ApiKeyRequired":"A boolean flag specifying whether a valid ApiKey is required to invoke this method.","AuthorizationScopes":"A list of authorization scopes configured on the method. The scopes are used with a `COGNITO_USER_POOLS` authorizer to authorize the method invocation. The authorization works by matching the method scopes against the scopes parsed from the access token in the incoming request. The method invocation is authorized if any method scopes matches a claimed scope in the access token. Otherwise, the invocation is not authorized. When the method scope is configured, the client must provide an access token instead of an identity token for authorization purposes.","AuthorizationType":"The method\'s authorization type. This parameter is required. For valid values, see [Method](https://docs.aws.amazon.com/apigateway/latest/api/API_Method.html) in the *API Gateway API Reference* .\\n\\n> If you specify the `AuthorizerId` property, specify `CUSTOM` or `COGNITO_USER_POOLS` for this property.","AuthorizerId":"The identifier of an authorizer to use on this method. The method\'s authorization type must be `CUSTOM` or `COGNITO_USER_POOLS` .","HttpMethod":"The method\'s HTTP verb.","Integration":"Represents an `HTTP` , `HTTP_PROXY` , `AWS` , `AWS_PROXY` , or Mock integration.","MethodResponses":"Gets a method response associated with a given HTTP status code.","OperationName":"A human-friendly operation identifier for the method. For example, you can assign the `operationName` of `ListPets` for the `GET /pets` method in the `PetStore` example.","RequestModels":"A key-value map specifying data schemas, represented by Model resources, (as the mapped value) of the request payloads of given content types (as the mapping key).","RequestParameters":"A key-value map defining required or optional method request parameters that can be accepted by API Gateway. A key is a method request parameter name matching the pattern of `method.request.{location}.{name}` , where `location` is `querystring` , `path` , or `header` and `name` is a valid and unique parameter name. The value associated with the key is a Boolean flag indicating whether the parameter is required ( `true` ) or optional ( `false` ). The method request parameter names defined here are available in Integration to be mapped to integration request parameters or templates.","RequestValidatorId":"The identifier of a RequestValidator for request validation.","ResourceId":"The Resource identifier for the MethodResponse resource.","RestApiId":"The string identifier of the associated RestApi."}},"AWS::ApiGateway::Method.Integration":{"attributes":{},"description":"`Integration` is a property of the [AWS::ApiGateway::Method](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-method.html) resource that specifies information about the target backend that a method calls.","properties":{"CacheKeyParameters":"A list of request parameters whose values API Gateway caches. To be valid values for `cacheKeyParameters` , these parameters must also be specified for Method `requestParameters` .","CacheNamespace":"Specifies a group of related cached parameters. By default, API Gateway uses the resource ID as the `cacheNamespace` . You can specify the same `cacheNamespace` across resources to return the same cached data for requests to different resources.","ConnectionId":"The ID of the VpcLink used for the integration when `connectionType=VPC_LINK` and undefined, otherwise.","ConnectionType":"The type of the network connection to the integration endpoint. The valid value is `INTERNET` for connections through the public routable internet or `VPC_LINK` for private connections between API Gateway and a network load balancer in a VPC. The default value is `INTERNET` .","ContentHandling":"Specifies how to handle request payload content type conversions. Supported values are `CONVERT_TO_BINARY` and `CONVERT_TO_TEXT` , with the following behaviors:\\n\\nIf this property is not defined, the request payload will be passed through from the method request to integration request without modification, provided that the `passthroughBehavior` is configured to support payload pass-through.","Credentials":"Specifies the credentials required for the integration, if any. For AWS integrations, three options are available. To specify an IAM Role for API Gateway to assume, use the role\'s Amazon Resource Name (ARN). To require that the caller\'s identity be passed through from the request, specify the string `arn:aws:iam::\\\\*:user/\\\\*` . To use resource-based permissions on supported AWS services, specify null.","IntegrationHttpMethod":"Specifies the integration\'s HTTP method type. For the Type property, if you specify `MOCK` , this property is optional. For Lambda integrations, you must set the integration method to `POST` . For all other types, you must specify this property.","IntegrationResponses":"Specifies the integration\'s responses.","PassthroughBehavior":"Specifies how the method request body of an unmapped content type will be passed through the integration request to the back end without transformation. A content type is unmapped if no mapping template is defined in the integration or the content type does not match any of the mapped content types, as specified in `requestTemplates` . The valid value is one of the following: `WHEN_NO_MATCH` : passes the method request body through the integration request to the back end without transformation when the method request content type does not match any content type associated with the mapping templates defined in the integration request. `WHEN_NO_TEMPLATES` : passes the method request body through the integration request to the back end without transformation when no mapping template is defined in the integration request. If a template is defined when this option is selected, the method request of an unmapped content-type will be rejected with an HTTP 415 Unsupported Media Type response. `NEVER` : rejects the method request with an HTTP 415 Unsupported Media Type response when either the method request content type does not match any content type associated with the mapping templates defined in the integration request or no mapping template is defined in the integration request.","RequestParameters":"A key-value map specifying request parameters that are passed from the method request to the back end. The key is an integration request parameter name and the associated value is a method request parameter value or static value that must be enclosed within single quotes and pre-encoded as required by the back end. The method request parameter value must match the pattern of `method.request.{location}.{name}` , where `location` is `querystring` , `path` , or `header` and `name` must be a valid and unique method request parameter name.","RequestTemplates":"Represents a map of Velocity templates that are applied on the request payload based on the value of the Content-Type header sent by the client. The content type value is the key in this map, and the template (as a String) is the value.","TimeoutInMillis":"Custom timeout between 50 and 29,000 milliseconds. The default value is 29,000 milliseconds or 29 seconds.","Type":"Specifies an API method integration type. The valid value is one of the following:\\n\\nFor the HTTP and HTTP proxy integrations, each integration can specify a protocol ( `http/https` ), port and path. Standard 80 and 443 ports are supported as well as custom ports above 1024. An HTTP or HTTP proxy integration with a `connectionType` of `VPC_LINK` is referred to as a private integration and uses a VpcLink to connect API Gateway to a network load balancer of a VPC.","Uri":"Specifies Uniform Resource Identifier (URI) of the integration endpoint.\\n\\nFor `HTTP` or `HTTP_PROXY` integrations, the URI must be a fully formed, encoded HTTP(S) URL according to the RFC-3986 specification for standard integrations. If `connectionType` is `VPC_LINK` specify the Network Load Balancer DNS name. For `AWS` or `AWS_PROXY` integrations, the URI is of the form `arn:aws:apigateway:{region}:{subdomain.service|service}:path|action/{service_api}` . Here, {Region} is the API Gateway region (e.g., us-east-1); {service} is the name of the integrated AWS service (e.g., s3); and {subdomain} is a designated subdomain supported by certain AWS service for fast host-name lookup. action can be used for an AWS service action-based API, using an Action={name}&{p1}={v1}&p2={v2}... query string. The ensuing {service_api} refers to a supported action {name} plus any required input parameters. Alternatively, path can be used for an AWS service path-based API. The ensuing service_api refers to the path to an AWS service resource, including the region of the integrated AWS service, if applicable. For example, for integration with the S3 API of GetObject, the uri can be either `arn:aws:apigateway:us-west-2:s3:action/GetObject&Bucket={bucket}&Key={key}` or `arn:aws:apigateway:us-west-2:s3:path/{bucket}/{key}`"}},"AWS::ApiGateway::Method.IntegrationResponse":{"attributes":{},"description":"`IntegrationResponse` is a property of the [Amazon API Gateway Method Integration](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apitgateway-method-integration.html) property type that specifies the response that API Gateway sends after a method\'s backend finishes processing a request.","properties":{"ContentHandling":"Specifies how to handle response payload content type conversions. Supported values are `CONVERT_TO_BINARY` and `CONVERT_TO_TEXT` , with the following behaviors:\\n\\nIf this property is not defined, the response payload will be passed through from the integration response to the method response without modification.","ResponseParameters":"A key-value map specifying response parameters that are passed to the method response from the back end. The key is a method response header parameter name and the mapped value is an integration response header value, a static value enclosed within a pair of single quotes, or a JSON expression from the integration response body. The mapping key must match the pattern of `method.response.header.{name}` , where `name` is a valid and unique header name. The mapped non-static value must match the pattern of `integration.response.header.{name}` or `integration.response.body.{JSON-expression}` , where `name` is a valid and unique response header name and `JSON-expression` is a valid JSON expression without the `$` prefix.","ResponseTemplates":"Specifies the templates used to transform the integration response body. Response templates are represented as a key/value map, with a content-type as the key and a template as the value.","SelectionPattern":"Specifies the regular expression (regex) pattern used to choose an integration response based on the response from the back end. For example, if the success response returns nothing and the error response returns some string, you could use the `.+` regex to match error response. However, make sure that the error response does not contain any newline ( `\\\\n` ) character in such cases. If the back end is an AWS Lambda function, the AWS Lambda function error header is matched. For all other HTTP and AWS back ends, the HTTP status code is matched.","StatusCode":"Specifies the status code that is used to map the integration response to an existing MethodResponse."}},"AWS::ApiGateway::Method.MethodResponse":{"attributes":{},"description":"Represents a method response of a given HTTP status code returned to the client. The method response is passed from the back end through the associated integration response that can be transformed using a mapping template.","properties":{"ResponseModels":"Specifies the Model resources used for the response\'s content-type. Response models are represented as a key/value map, with a content-type as the key and a Model name as the value.","ResponseParameters":"A key-value map specifying required or optional response parameters that API Gateway can send back to the caller. A key defines a method response header and the value specifies whether the associated method response header is required or not. The expression of the key must match the pattern `method.response.header.{name}` , where `name` is a valid and unique header name. API Gateway passes certain integration response data to the method response headers specified here according to the mapping you prescribe in the API\'s IntegrationResponse. The integration response data that can be mapped include an integration response header expressed in `integration.response.header.{name}` , a static value enclosed within a pair of single quotes (e.g., `\'application/json\'` ), or a JSON expression from the back-end response payload in the form of `integration.response.body.{JSON-expression}` , where `JSON-expression` is a valid JSON expression without the `$` prefix.)","StatusCode":"The method response\'s status code."}},"AWS::ApiGateway::Model":{"attributes":{"Ref":"`Ref` returns the model name, such as `myModel` ."},"description":"The `AWS::ApiGateway::Model` resource defines the structure of a request or response payload for an API method.","properties":{"ContentType":"The content-type for the model.","Description":"The description of the model.","Name":"A name for the model. If you don\'t specify a name, AWS CloudFormation generates a unique physical ID and uses that ID for the model name. For more information, see [Name Type](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-name.html) .\\n\\n> If you specify a name, you cannot perform updates that require replacement of this resource. You can perform updates that require no or some interruption. If you must replace the resource, specify a new name.","RestApiId":"The string identifier of the associated RestApi.","Schema":"The schema for the model. For `application/json` models, this should be JSON schema draft 4 model. Do not include \\"\\\\*/\\" characters in the description of any properties because such \\"\\\\*/\\" characters may be interpreted as the closing marker for comments in some languages, such as Java or JavaScript, causing the installation of your API\'s SDK generated by API Gateway to fail."}},"AWS::ApiGateway::RequestValidator":{"attributes":{"Ref":"`Ref` returns the ID of the request validator, such as `abc123` .","RequestValidatorId":"The ID for the request validator. For example: `abc123` ."},"description":"The `AWS::ApiGateway::RequestValidator` resource sets up basic validation rules for incoming requests to your API. For more information, see [Enable Basic Request Validation for an API in API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-method-request-validation.html) in the *API Gateway Developer Guide* .","properties":{"Name":"The name of this RequestValidator","RestApiId":"The string identifier of the associated RestApi.","ValidateRequestBody":"A Boolean flag to indicate whether to validate a request body according to the configured Model schema.","ValidateRequestParameters":"A Boolean flag to indicate whether to validate request parameters ( `true` ) or not ( `false` )."}},"AWS::ApiGateway::Resource":{"attributes":{"Ref":"`Ref` returns the resource ID, such as `abc123` .","ResourceId":"The ID for the resource. For example: `abc123` ."},"description":"The `AWS::ApiGateway::Resource` resource creates a resource in an API.","properties":{"ParentId":"The parent resource\'s identifier.","PathPart":"The last path segment for this resource.","RestApiId":"The string identifier of the associated RestApi."}},"AWS::ApiGateway::RestApi":{"attributes":{"Ref":"`Ref` returns the `RestApi` ID, such as `a1bcdef2gh` .","RestApiId":"The string identifier of the associated RestApi.","RootResourceId":"The root resource ID for a `RestApi` resource, such as `a0bc123d4e` ."},"description":"The `AWS::ApiGateway::RestApi` resource creates a REST API. For more information, see [restapi:create](https://docs.aws.amazon.com/apigateway/latest/api/API_CreateRestApi.html) in the *Amazon API Gateway REST API Reference* .\\n\\n> On January 1, 2016, the Swagger Specification was donated to the [OpenAPI initiative](https://docs.aws.amazon.com/https://www.openapis.org/) , becoming the foundation of the OpenAPI Specification.","properties":{"ApiKeySourceType":"The source of the API key for metering requests according to a usage plan. Valid values are: `HEADER` to read the API key from the `X-API-Key` header of a request. `AUTHORIZER` to read the API key from the `UsageIdentifierKey` from a custom authorizer.","BinaryMediaTypes":"The list of binary media types supported by the RestApi. By default, the RestApi supports only UTF-8-encoded text payloads.","Body":"An OpenAPI specification that defines a set of RESTful APIs in JSON format. For YAML templates, you can also provide the specification in YAML format.","BodyS3Location":"The Amazon Simple Storage Service (Amazon S3) location that points to an OpenAPI file, which defines a set of RESTful APIs in JSON or YAML format.","CloneFrom":"The ID of the RestApi that you want to clone from.","Description":"The description of the RestApi.","DisableExecuteApiEndpoint":"Specifies whether clients can invoke your API by using the default `execute-api` endpoint. By default, clients can invoke your API with the default `https://{api_id}.execute-api.{region}.amazonaws.com` endpoint. To require that clients use a custom domain name to invoke your API, disable the default endpoint","EndpointConfiguration":"A list of the endpoint types of the API. Use this property when creating an API. When importing an existing API, specify the endpoint configuration types using the `Parameters` property.","FailOnWarnings":"A query parameter to indicate whether to rollback the API update ( `true` ) or not ( `false` ) when a warning is encountered. The default value is `false` .","MinimumCompressionSize":"A nullable integer that is used to enable compression (with non-negative between 0 and 10485760 (10M) bytes, inclusive) or disable compression (with a null value) on an API. When compression is enabled, compression or decompression is not applied on the payload if the payload size is smaller than this value. Setting it to zero allows compression for any payload size.","Mode":"This property applies only when you use OpenAPI to define your REST API. The `Mode` determines how API Gateway handles resource updates.\\n\\nValid values are `overwrite` or `merge` .\\n\\nFor `overwrite` , the new API definition replaces the existing one. The existing API identifier remains unchanged.\\n\\nFor `merge` , the new API definition is merged with the existing API.\\n\\nIf you don\'t specify this property, a default value is chosen. For REST APIs created before March 29, 2021, the default is `overwrite` . For REST APIs created after March 29, 2021, the new API definition takes precedence, but any container types such as endpoint configurations and binary media types are merged with the existing API.\\n\\nUse the default mode to define top-level `RestApi` properties in addition to using OpenAPI. Generally, it\'s preferred to use API Gateway\'s OpenAPI extensions to model these properties.","Name":"The name of the RestApi. A name is required if the REST API is not based on an OpenAPI specification.","Parameters":"Custom header parameters as part of the request. For example, to exclude DocumentationParts from an imported API, set `ignore=documentation` as a `parameters` value, as in the AWS CLI command of `aws apigateway import-rest-api --parameters ignore=documentation --body \'file:///path/to/imported-api-body.json\'` .","Policy":"A policy document that contains the permissions for the `RestApi` resource. To set the ARN for the policy, use the `!Join` intrinsic function with `\\"\\"` as delimiter and values of `\\"execute-api:/\\"` and `\\"*\\"` .","Tags":"The key-value map of strings. The valid character set is [a-zA-Z+-=._:/]. The tag key can be up to 128 characters and must not start with `aws:` . The tag value can be up to 256 characters."}},"AWS::ApiGateway::RestApi.EndpointConfiguration":{"attributes":{},"description":"The `EndpointConfiguration` property type specifies the endpoint types of a REST API.\\n\\n`EndpointConfiguration` is a property of the [AWS::ApiGateway::RestApi](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-restapi.html) resource.","properties":{"Types":"A list of endpoint types of an API (RestApi) or its custom domain name (DomainName). For an edge-optimized API and its custom domain name, the endpoint type is `\\"EDGE\\"` . For a regional API and its custom domain name, the endpoint type is `REGIONAL` . For a private API, the endpoint type is `PRIVATE` .","VpcEndpointIds":"A list of VpcEndpointIds of an API (RestApi) against which to create Route53 ALIASes. It is only supported for `PRIVATE` endpoint type."}},"AWS::ApiGateway::RestApi.S3Location":{"attributes":{},"description":"`S3Location` is a property of the [AWS::ApiGateway::RestApi](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-restapi.html) resource that specifies the Amazon S3 location of a OpenAPI (formerly Swagger) file that defines a set of RESTful APIs in JSON or YAML.\\n\\n> On January 1, 2016, the Swagger Specification was donated to the [OpenAPI initiative](https://docs.aws.amazon.com/https://www.openapis.org/) , becoming the foundation of the OpenAPI Specification.","properties":{"Bucket":"The name of the S3 bucket where the OpenAPI file is stored.","ETag":"The Amazon S3 ETag (a file checksum) of the OpenAPI file. If you don\'t specify a value, API Gateway skips ETag validation of your OpenAPI file.","Key":"The file name of the OpenAPI file (Amazon S3 object name).","Version":"For versioning-enabled buckets, a specific version of the OpenAPI file."}},"AWS::ApiGateway::Stage":{"attributes":{"Ref":"`Ref` returns the name of the stage, such as `MyTestStage` ."},"description":"The `AWS::ApiGateway::Stage` resource creates a stage for a deployment.","properties":{"AccessLogSetting":"Access log settings, including the access log format and access log destination ARN.","CacheClusterEnabled":"Specifies whether a cache cluster is enabled for the stage.","CacheClusterSize":"The stage\'s cache capacity in GB. For more information about choosing a cache size, see [Enabling API caching to enhance responsiveness](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-caching.html) .","CanarySetting":"Settings for the canary deployment in this stage.","ClientCertificateId":"The identifier of a client certificate for an API stage.","DeploymentId":"The identifier of the Deployment that the stage points to.","Description":"The stage\'s description.","DocumentationVersion":"The version of the associated API documentation.","MethodSettings":"A map that defines the method settings for a Stage resource. Keys (designated as `/{method_setting_key` below) are method paths defined as `{resource_path}/{http_method}` for an individual method override, or `/\\\\*/\\\\*` for overriding all methods in the stage.","RestApiId":"The string identifier of the associated RestApi.","StageName":"The name of the stage is the first path segment in the Uniform Resource Identifier (URI) of a call to API Gateway. Stage names can only contain alphanumeric characters, hyphens, and underscores. Maximum length is 128 characters.","Tags":"The collection of tags. Each tag element is associated with a given resource.","TracingEnabled":"Specifies whether active tracing with X-ray is enabled for the Stage.","Variables":"A map (string-to-string map) that defines the stage variables, where the variable name is the key and the variable value is the value. Variable names are limited to alphanumeric characters. Values must match the following regular expression: `[A-Za-z0-9-._~:/?#&=,]+` ."}},"AWS::ApiGateway::Stage.AccessLogSetting":{"attributes":{},"description":"The `AccessLogSetting` property type specifies settings for logging access in this stage.\\n\\n`AccessLogSetting` is a property of the [AWS::ApiGateway::Stage](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-stage.html) resource.","properties":{"DestinationArn":"The Amazon Resource Name (ARN) of the CloudWatch Logs log group or Kinesis Data Firehose delivery stream to receive access logs. If you specify a Kinesis Data Firehose delivery stream, the stream name must begin with `amazon-apigateway-` . This parameter is required to enable access logging.","Format":"A single line format of the access logs of data, as specified by selected [$context variables](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-mapping-template-reference.html#context-variable-reference) . The format must include at least `$context.requestId` . This parameter is required to enable access logging."}},"AWS::ApiGateway::Stage.CanarySetting":{"attributes":{},"description":"Configuration settings of a canary deployment.","properties":{"DeploymentId":"The ID of the canary deployment.","PercentTraffic":"The percent (0-100) of traffic diverted to a canary deployment.","StageVariableOverrides":"Stage variables overridden for a canary release deployment, including new stage variables introduced in the canary. These stage variables are represented as a string-to-string map between stage variable names and their values.","UseStageCache":"A Boolean flag to indicate whether the canary deployment uses the stage cache or not."}},"AWS::ApiGateway::Stage.MethodSetting":{"attributes":{},"description":"The `MethodSetting` property type configures settings for all methods in a stage.\\n\\nThe `MethodSettings` property of the `AWS::ApiGateway::Stage` resource contains a list of `MethodSetting` property types.","properties":{"CacheDataEncrypted":"Specifies whether the cached responses are encrypted.","CacheTtlInSeconds":"Specifies the time to live (TTL), in seconds, for cached responses. The higher the TTL, the longer the response will be cached.","CachingEnabled":"Specifies whether responses should be cached and returned for requests. A cache cluster must be enabled on the stage for responses to be cached.","DataTraceEnabled":"Specifies whether data trace logging is enabled for this method, which affects the log entries pushed to Amazon CloudWatch Logs.","HttpMethod":"The HTTP method. To apply settings to multiple resources and methods, specify an asterisk ( `*` ) for the `HttpMethod` and `/*` for the `ResourcePath` . This parameter is required when you specify a `MethodSetting` .","LoggingLevel":"Specifies the logging level for this method, which affects the log entries pushed to Amazon CloudWatch Logs. Valid values are `OFF` , `ERROR` , and `INFO` . Choose `ERROR` to write only error-level entries to CloudWatch Logs, or choose `INFO` to include all `ERROR` events as well as extra informational events.","MetricsEnabled":"Specifies whether Amazon CloudWatch metrics are enabled for this method.","ResourcePath":"The resource path for this method. Forward slashes ( `/` ) are encoded as `~1` and the initial slash must include a forward slash. For example, the path value `/resource/subresource` must be encoded as `/~1resource~1subresource` . To specify the root path, use only a slash ( `/` ). To apply settings to multiple resources and methods, specify an asterisk ( `*` ) for the `HttpMethod` and `/*` for the `ResourcePath` . This parameter is required when you specify a `MethodSetting` .","ThrottlingBurstLimit":"Specifies the throttling burst limit.","ThrottlingRateLimit":"Specifies the throttling rate limit."}},"AWS::ApiGateway::UsagePlan":{"attributes":{"Id":"The ID for the usage plan. For example: `abc123` .","Ref":"`Ref` returns the usage plan ID, such as `abc123` ."},"description":"The `AWS::ApiGateway::UsagePlan` resource creates a usage plan for deployed APIs. A usage plan sets a target for the throttling and quota limits on individual client API keys. For more information, see [Creating and Using API Usage Plans in Amazon API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-api-usage-plans.html) in the *API Gateway Developer Guide* .\\n\\nIn some cases clients can exceed the targets that you set. Don’t rely on usage plans to control costs. Consider using [AWS Budgets](https://docs.aws.amazon.com/cost-management/latest/userguide/budgets-managing-costs.html) to monitor costs and [AWS WAF](https://docs.aws.amazon.com/waf/latest/developerguide/waf-chapter.html) to manage API requests.","properties":{"ApiStages":"The associated API stages of a usage plan.","Description":"The description of a usage plan.","Quota":"The target maximum number of permitted requests per a given unit time interval.","Tags":"The collection of tags. Each tag element is associated with a given resource.","Throttle":"A map containing method level throttling information for API stage in a usage plan.","UsagePlanName":"The name of a usage plan."}},"AWS::ApiGateway::UsagePlan.ApiStage":{"attributes":{},"description":"API stage name of the associated API stage in a usage plan.","properties":{"ApiId":"API Id of the associated API stage in a usage plan.","Stage":"API stage name of the associated API stage in a usage plan.","Throttle":"Map containing method level throttling information for API stage in a usage plan."}},"AWS::ApiGateway::UsagePlan.QuotaSettings":{"attributes":{},"description":"`QuotaSettings` is a property of the [AWS::ApiGateway::UsagePlan](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-usageplan.html) resource that specifies a target for the maximum number of requests users can make to your REST APIs.\\n\\nIn some cases clients can exceed the targets that you set. Don’t rely on usage plans to control costs. Consider using [AWS Budgets](https://docs.aws.amazon.com/cost-management/latest/userguide/budgets-managing-costs.html) to monitor costs and [AWS WAF](https://docs.aws.amazon.com/waf/latest/developerguide/waf-chapter.html) to manage API requests.","properties":{"Limit":"The target maximum number of requests that can be made in a given time period.","Offset":"The number of requests subtracted from the given limit in the initial time period.","Period":"The time period in which the limit applies. Valid values are \\"DAY\\", \\"WEEK\\" or \\"MONTH\\"."}},"AWS::ApiGateway::UsagePlan.ThrottleSettings":{"attributes":{},"description":"`ThrottleSettings` is a property of the [AWS::ApiGateway::UsagePlan](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-usageplan.html) resource that specifies the overall request rate (average requests per second) and burst capacity when users call your REST APIs.","properties":{"BurstLimit":"The API target request burst rate limit. This allows more requests through for a period of time than the target rate limit.","RateLimit":"The API target request rate limit."}},"AWS::ApiGateway::UsagePlanKey":{"attributes":{"Id":"The ID for the usage plan key. For example: `abc123` .","Ref":"`Ref` returns the ID of the key and ID of the usage plan combined with a \\":\\", such as `123abcdef:abc123` ."},"description":"The `AWS::ApiGateway::UsagePlanKey` resource associates an API key with a usage plan. This association determines which users the usage plan is applied to.","properties":{"KeyId":"The Id of the UsagePlanKey resource.","KeyType":"The type of a UsagePlanKey resource for a plan customer.","UsagePlanId":"The Id of the UsagePlan resource representing the usage plan containing the UsagePlanKey resource representing a plan customer."}},"AWS::ApiGateway::VpcLink":{"attributes":{"Ref":"`Ref` returns the ID of the `VpcLink` .","VpcLinkId":""},"description":"The `AWS::ApiGateway::VpcLink` resource creates an API Gateway VPC link for a REST API to access resources in an Amazon Virtual Private Cloud (VPC). For more information, see [vpclink:create](https://docs.aws.amazon.com/apigateway/latest/api/API_CreateVpcLink.html) in the `Amazon API Gateway REST API Reference` .","properties":{"Description":"The description of the VPC link.","Name":"The name used to label and identify the VPC link.","Tags":"An array of arbitrary tags (key-value pairs) to associate with the VPC link.","TargetArns":"The ARN of the network load balancer of the VPC targeted by the VPC link. The network load balancer must be owned by the same AWS account of the API owner."}},"AWS::ApiGatewayV2::Api":{"attributes":{"ApiEndpoint":"The default endpoint for an API. For example: `https://abcdef.execute-api.us-west-2.amazonaws.com` .","ApiId":"The API identifier.","Ref":"`Ref` returns the API ID, such as `a1bcdef2gh` ."},"description":"The `AWS::ApiGatewayV2::Api` resource creates an API. WebSocket APIs and HTTP APIs are supported. For more information about WebSocket APIs, see [About WebSocket APIs in API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-websocket-api-overview.html) in the *API Gateway Developer Guide* . For more information about HTTP APIs, see [HTTP APIs](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api.html) in the *API Gateway Developer Guide.*","properties":{"ApiKeySelectionExpression":"An API key selection expression. Supported only for WebSocket APIs. See [API Key Selection Expressions](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-websocket-api-selection-expressions.html#apigateway-websocket-api-apikey-selection-expressions) .","BasePath":"Specifies how to interpret the base path of the API during import. Valid values are `ignore` , `prepend` , and `split` . The default value is `ignore` . To learn more, see [Set the OpenAPI basePath Property](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-import-api-basePath.html) . Supported only for HTTP APIs.","Body":"The OpenAPI definition. Supported only for HTTP APIs. To import an HTTP API, you must specify a `Body` or `BodyS3Location` . If you specify a `Body` or `BodyS3Location` , don\'t specify CloudFormation resources such as `AWS::ApiGatewayV2::Authorizer` or `AWS::ApiGatewayV2::Route` . API Gateway doesn\'t support the combination of OpenAPI and CloudFormation resources.","BodyS3Location":"The S3 location of an OpenAPI definition. Supported only for HTTP APIs. To import an HTTP API, you must specify a `Body` or `BodyS3Location` . If you specify a `Body` or `BodyS3Location` , don\'t specify CloudFormation resources such as `AWS::ApiGatewayV2::Authorizer` or `AWS::ApiGatewayV2::Route` . API Gateway doesn\'t support the combination of OpenAPI and CloudFormation resources.","CorsConfiguration":"A CORS configuration. Supported only for HTTP APIs. See [Configuring CORS](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-cors.html) for more information.","CredentialsArn":"This property is part of quick create. It specifies the credentials required for the integration, if any. For a Lambda integration, three options are available. To specify an IAM Role for API Gateway to assume, use the role\'s Amazon Resource Name (ARN). To require that the caller\'s identity be passed through from the request, specify `arn:aws:iam::*:user/*` . To use resource-based permissions on supported AWS services, specify `null` . Currently, this property is not used for HTTP integrations. Supported only for HTTP APIs.","Description":"The description of the API.","DisableExecuteApiEndpoint":"Specifies whether clients can invoke your API by using the default `execute-api` endpoint. By default, clients can invoke your API with the default https://{api_id}.execute-api.{region}.amazonaws.com endpoint. To require that clients use a custom domain name to invoke your API, disable the default endpoint.","DisableSchemaValidation":"Avoid validating models when creating a deployment. Supported only for WebSocket APIs.","FailOnWarnings":"Specifies whether to rollback the API creation when a warning is encountered. By default, API creation continues if a warning is encountered.","Name":"The name of the API. Required unless you specify an OpenAPI definition for `Body` or `S3BodyLocation` .","ProtocolType":"The API protocol. Valid values are `WEBSOCKET` or `HTTP` . Required unless you specify an OpenAPI definition for `Body` or `S3BodyLocation` .","RouteKey":"This property is part of quick create. If you don\'t specify a `routeKey` , a default route of `$default` is created. The `$default` route acts as a catch-all for any request made to your API, for a particular stage. The `$default` route key can\'t be modified. You can add routes after creating the API, and you can update the route keys of additional routes. Supported only for HTTP APIs.","RouteSelectionExpression":"The route selection expression for the API. For HTTP APIs, the `routeSelectionExpression` must be `${request.method} ${request.path}` . If not provided, this will be the default for HTTP APIs. This property is required for WebSocket APIs.","Tags":"The collection of tags. Each tag element is associated with a given resource.","Target":"This property is part of quick create. Quick create produces an API with an integration, a default catch-all route, and a default stage which is configured to automatically deploy changes. For HTTP integrations, specify a fully qualified URL. For Lambda integrations, specify a function ARN. The type of the integration will be HTTP_PROXY or AWS_PROXY, respectively. Supported only for HTTP APIs.","Version":"A version identifier for the API."}},"AWS::ApiGatewayV2::Api.BodyS3Location":{"attributes":{},"description":"The `BodyS3Location` property specifies an S3 location from which to import an OpenAPI definition. Supported only for HTTP APIs.","properties":{"Bucket":"The S3 bucket that contains the OpenAPI definition to import. Required if you specify a `BodyS3Location` for an API.","Etag":"The Etag of the S3 object.","Key":"The key of the S3 object. Required if you specify a `BodyS3Location` for an API.","Version":"The version of the S3 object."}},"AWS::ApiGatewayV2::Api.Cors":{"attributes":{},"description":"The `Cors` property specifies a CORS configuration for an API. Supported only for HTTP APIs. See [Configuring CORS](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-cors.html) for more information.","properties":{"AllowCredentials":"Specifies whether credentials are included in the CORS request. Supported only for HTTP APIs.","AllowHeaders":"Represents a collection of allowed headers. Supported only for HTTP APIs.","AllowMethods":"Represents a collection of allowed HTTP methods. Supported only for HTTP APIs.","AllowOrigins":"Represents a collection of allowed origins. Supported only for HTTP APIs.","ExposeHeaders":"Represents a collection of exposed headers. Supported only for HTTP APIs.","MaxAge":"The number of seconds that the browser should cache preflight request results. Supported only for HTTP APIs."}},"AWS::ApiGatewayV2::ApiGatewayManagedOverrides":{"attributes":{},"description":"The `AWS::ApiGatewayV2::ApiGatewayManagedOverrides` resource overrides the default properties of API Gateway-managed resources that are implicitly configured for you when you use quick create. When you create an API by using quick create, an `AWS::ApiGatewayV2::Route` , `AWS::ApiGatewayV2::Integration` , and `AWS::ApiGatewayV2::Stage` are created for you and associated with your `AWS::ApiGatewayV2::Api` . The `AWS::ApiGatewayV2::ApiGatewayManagedOverrides` resource enables you to set, or override the properties of these implicit resources. Supported only for HTTP APIs.","properties":{"ApiId":"The ID of the API for which to override the configuration of API Gateway-managed resources.","Integration":"Overrides the integration configuration for an API Gateway-managed integration.","Route":"Overrides the route configuration for an API Gateway-managed route.","Stage":"Overrides the stage configuration for an API Gateway-managed stage."}},"AWS::ApiGatewayV2::ApiGatewayManagedOverrides.AccessLogSettings":{"attributes":{},"description":"The `AccessLogSettings` property overrides the access log settings for an API Gateway-managed stage.","properties":{"DestinationArn":"The ARN of the CloudWatch Logs log group to receive access logs.","Format":"A single line format of the access logs of data, as specified by selected $context variables. The format must include at least $context.requestId."}},"AWS::ApiGatewayV2::ApiGatewayManagedOverrides.IntegrationOverrides":{"attributes":{},"description":"The `IntegrationOverrides` property overrides the integration settings for an API Gateway-managed integration. If you remove this property, API Gateway restores the default values.","properties":{"Description":"The description of the integration.","IntegrationMethod":"Specifies the integration\'s HTTP method type.","PayloadFormatVersion":"Specifies the format of the payload sent to an integration. Required for HTTP APIs. For HTTP APIs, supported values for Lambda proxy integrations are `1.0` and `2.0` . For all other integrations, `1.0` is the only supported value. To learn more, see [Working with AWS Lambda proxy integrations for HTTP APIs](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-lambda.html) .","TimeoutInMillis":"Custom timeout between 50 and 29,000 milliseconds for WebSocket APIs and between 50 and 30,000 milliseconds for HTTP APIs. The default timeout is 29 seconds for WebSocket APIs and 30 seconds for HTTP APIs."}},"AWS::ApiGatewayV2::ApiGatewayManagedOverrides.RouteOverrides":{"attributes":{},"description":"The `RouteOverrides` property overrides the route configuration for an API Gateway-managed route. If you remove this property, API Gateway restores the default values.","properties":{"AuthorizationScopes":"The authorization scopes supported by this route.","AuthorizationType":"The authorization type for the route. To learn more, see [AuthorizationType](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-route.html#cfn-apigatewayv2-route-authorizationtype) .","AuthorizerId":"The identifier of the `Authorizer` resource to be associated with this route. The authorizer identifier is generated by API Gateway when you created the authorizer.","OperationName":"The operation name for the route.","Target":"For HTTP integrations, specify a fully qualified URL. For Lambda integrations, specify a function ARN. The type of the integration will be HTTP_PROXY or AWS_PROXY, respectively."}},"AWS::ApiGatewayV2::ApiGatewayManagedOverrides.RouteSettings":{"attributes":{},"description":"The `RouteSettings` property overrides the route settings for an API Gateway-managed route.","properties":{"DataTraceEnabled":"Specifies whether ( `true` ) or not ( `false` ) data trace logging is enabled for this route. This property affects the log entries pushed to Amazon CloudWatch Logs. Supported only for WebSocket APIs.","DetailedMetricsEnabled":"Specifies whether detailed metrics are enabled.","LoggingLevel":"Specifies the logging level for this route: `INFO` , `ERROR` , or `OFF` . This property affects the log entries pushed to Amazon CloudWatch Logs. Supported only for WebSocket APIs.","ThrottlingBurstLimit":"Specifies the throttling burst limit.","ThrottlingRateLimit":"Specifies the throttling rate limit."}},"AWS::ApiGatewayV2::ApiGatewayManagedOverrides.StageOverrides":{"attributes":{},"description":"The `StageOverrides` property overrides the stage configuration for an API Gateway-managed stage. If you remove this property, API Gateway restores the default values.","properties":{"AccessLogSettings":"Settings for logging access in a stage.","AutoDeploy":"Specifies whether updates to an API automatically trigger a new deployment. The default value is `true` .","DefaultRouteSettings":"The default route settings for the stage.","Description":"The description for the API stage.","RouteSettings":"Route settings for the stage.","StageVariables":"A map that defines the stage variables for a `Stage` . Variable names can have alphanumeric and underscore characters, and the values must match [A-Za-z0-9-._~:/?#&=,]+."}},"AWS::ApiGatewayV2::ApiMapping":{"attributes":{"ApiMappingId":"The API mapping resource ID.","Ref":"`Ref` returns the API mapping resource ID."},"description":"The `AWS::ApiGatewayV2::ApiMapping` resource contains an API mapping. An API mapping relates a path of your custom domain name to a stage of your API. A custom domain name can have multiple API mappings, but the paths can\'t overlap. A custom domain can map only to APIs of the same protocol type. For more information, see [CreateApiMapping](https://docs.aws.amazon.com/apigatewayv2/latest/api-reference/domainnames-domainname-apimappings.html#CreateApiMapping) in the *Amazon API Gateway V2 API Reference* .","properties":{"ApiId":"The identifier of the API.","ApiMappingKey":"The API mapping key.","DomainName":"The domain name.","Stage":"The API stage."}},"AWS::ApiGatewayV2::Authorizer":{"attributes":{"AuthorizerId":"The authorizer ID.","Ref":"`Ref` returns the authorizer\'s ID, such as `abcde1` ."},"description":"The `AWS::ApiGatewayV2::Authorizer` resource creates an authorizer for a WebSocket API or an HTTP API. To learn more, see [Controlling and managing access to a WebSocket API in API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-websocket-api-control-access.html) and [Controlling and managing access to an HTTP API in API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-access-control.html) in the *API Gateway Developer Guide* .","properties":{"ApiId":"The API identifier.","AuthorizerCredentialsArn":"Specifies the required credentials as an IAM role for API Gateway to invoke the authorizer. To specify an IAM role for API Gateway to assume, use the role\'s Amazon Resource Name (ARN). To use resource-based permissions on the Lambda function, specify null. Supported only for `REQUEST` authorizers.","AuthorizerPayloadFormatVersion":"Specifies the format of the payload sent to an HTTP API Lambda authorizer. Required for HTTP API Lambda authorizers. Supported values are `1.0` and `2.0` . To learn more, see [Working with AWS Lambda authorizers for HTTP APIs](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html) .","AuthorizerResultTtlInSeconds":"The time to live (TTL) for cached authorizer results, in seconds. If it equals 0, authorization caching is disabled. If it is greater than 0, API Gateway caches authorizer responses. The maximum value is 3600, or 1 hour. Supported only for HTTP API Lambda authorizers.","AuthorizerType":"The authorizer type. Specify `REQUEST` for a Lambda function using incoming request parameters. Specify `JWT` to use JSON Web Tokens (supported only for HTTP APIs).","AuthorizerUri":"The authorizer\'s Uniform Resource Identifier (URI). For `REQUEST` authorizers, this must be a well-formed Lambda function URI, for example, `arn:aws:apigateway:us-west-2:lambda:path/2015-03-31/functions/arn:aws:lambda:us-west-2: *{account_id}* :function: *{lambda_function_name}* /invocations` . In general, the URI has this form: `arn:aws:apigateway: *{region}* :lambda:path/ *{service_api}*` , where *{region}* is the same as the region hosting the Lambda function, path indicates that the remaining substring in the URI should be treated as the path to the resource, including the initial `/` . For Lambda functions, this is usually of the form `/2015-03-31/functions/[FunctionARN]/invocations` .","EnableSimpleResponses":"Specifies whether a Lambda authorizer returns a response in a simple format. By default, a Lambda authorizer must return an IAM policy. If enabled, the Lambda authorizer can return a boolean value instead of an IAM policy. Supported only for HTTP APIs. To learn more, see [Working with AWS Lambda authorizers for HTTP APIs](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html) .","IdentitySource":"The identity source for which authorization is requested.\\n\\nFor a `REQUEST` authorizer, this is optional. The value is a set of one or more mapping expressions of the specified request parameters. The identity source can be headers, query string parameters, stage variables, and context parameters. For example, if an Auth header and a Name query string parameter are defined as identity sources, this value is route.request.header.Auth, route.request.querystring.Name for WebSocket APIs. For HTTP APIs, use selection expressions prefixed with `$` , for example, `$request.header.Auth` , `$request.querystring.Name` . These parameters are used to perform runtime validation for Lambda-based authorizers by verifying all of the identity-related request parameters are present in the request, not null, and non-empty. Only when this is true does the authorizer invoke the authorizer Lambda function. Otherwise, it returns a 401 Unauthorized response without calling the Lambda function. For HTTP APIs, identity sources are also used as the cache key when caching is enabled. To learn more, see [Working with AWS Lambda authorizers for HTTP APIs](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html) .\\n\\nFor `JWT` , a single entry that specifies where to extract the JSON Web Token (JWT) from inbound requests. Currently only header-based and query parameter-based selections are supported, for example `$request.header.Authorization` .","IdentityValidationExpression":"This parameter is not used.","JwtConfiguration":"The `JWTConfiguration` property specifies the configuration of a JWT authorizer. Required for the `JWT` authorizer type. Supported only for HTTP APIs.","Name":"The name of the authorizer."}},"AWS::ApiGatewayV2::Authorizer.JWTConfiguration":{"attributes":{},"description":"The `JWTConfiguration` property specifies the configuration of a JWT authorizer. Required for the `JWT` authorizer type. Supported only for HTTP APIs.","properties":{"Audience":"A list of the intended recipients of the JWT. A valid JWT must provide an `aud` that matches at least one entry in this list. See [RFC 7519](https://docs.aws.amazon.com/https://tools.ietf.org/html/rfc7519#section-4.1.3) . Required for the `JWT` authorizer type. Supported only for HTTP APIs.","Issuer":"The base domain of the identity provider that issues JSON Web Tokens. For example, an Amazon Cognito user pool has the following format: `https://cognito-idp. {region} .amazonaws.com/ {userPoolId}` . Required for the `JWT` authorizer type. Supported only for HTTP APIs."}},"AWS::ApiGatewayV2::Deployment":{"attributes":{"DeploymentId":"The deployment ID.","Ref":"`Ref` returns the deployment ID, such as `123abc` ."},"description":"The `AWS::ApiGatewayV2::Deployment` resource creates a deployment for an API.","properties":{"ApiId":"The API identifier.","Description":"The description for the deployment resource.","StageName":"The name of an existing stage to associate with the deployment."}},"AWS::ApiGatewayV2::DomainName":{"attributes":{"Ref":"`Ref` returns the domain name, such as `example.mydomain.com` .","RegionalDomainName":"The domain name associated with the regional endpoint for this custom domain name. You set up this association by adding a DNS record that points the custom domain name to this regional domain name.","RegionalHostedZoneId":"The region-specific Amazon Route 53 Hosted Zone ID of the regional endpoint."},"description":"The `AWS::ApiGatewayV2::DomainName` resource specifies a custom domain name for your API in Amazon API Gateway (API Gateway).\\n\\nYou can use a custom domain name to provide a URL that\'s more intuitive and easier to recall. For more information about using custom domain names, see [Set up Custom Domain Name for an API in API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-custom-domains.html) in the *API Gateway Developer Guide* .","properties":{"DomainName":"The custom domain name for your API in Amazon API Gateway. Uppercase letters are not supported.","DomainNameConfigurations":"The domain name configurations.","MutualTlsAuthentication":"The mutual TLS authentication configuration for a custom domain name.","Tags":"The collection of tags associated with a domain name."}},"AWS::ApiGatewayV2::DomainName.DomainNameConfiguration":{"attributes":{},"description":"The `DomainNameConfiguration` property type specifies the configuration for a an API\'s domain name.\\n\\n`DomainNameConfiguration` is a property of the [AWS::ApiGatewayV2::DomainName](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-domainname.html) resource.","properties":{"CertificateArn":"An AWS -managed certificate that will be used by the edge-optimized endpoint for this domain name. AWS Certificate Manager is the only supported source.","CertificateName":"The user-friendly name of the certificate that will be used by the edge-optimized endpoint for this domain name.","EndpointType":"The endpoint type.","OwnershipVerificationCertificateArn":"The Amazon resource name (ARN) for the public certificate issued by AWS Certificate Manager . This ARN is used to validate custom domain ownership. It\'s required only if you configure mutual TLS and use either an ACM-imported or a private CA certificate ARN as the regionalCertificateArn.","SecurityPolicy":"The Transport Layer Security (TLS) version of the security policy for this domain name. The valid values are `TLS_1_0` and `TLS_1_2` ."}},"AWS::ApiGatewayV2::DomainName.MutualTlsAuthentication":{"attributes":{},"description":"If specified, API Gateway performs two-way authentication between the client and the server. Clients must present a trusted certificate to access your API.","properties":{"TruststoreUri":"An Amazon S3 URL that specifies the truststore for mutual TLS authentication, for example, `s3:// bucket-name / key-name` . The truststore can contain certificates from public or private certificate authorities. To update the truststore, upload a new version to S3, and then update your custom domain name to use the new version. To update the truststore, you must have permissions to access the S3 object.","TruststoreVersion":"The version of the S3 object that contains your truststore. To specify a version, you must have versioning enabled for the S3 bucket."}},"AWS::ApiGatewayV2::Integration":{"attributes":{"Ref":"`Ref` returns the Integration resource ID, such as `abcd123` ."},"description":"The `AWS::ApiGatewayV2::Integration` resource creates an integration for an API.","properties":{"ApiId":"The API identifier.","ConnectionId":"The ID of the VPC link for a private integration. Supported only for HTTP APIs.","ConnectionType":"The type of the network connection to the integration endpoint. Specify `INTERNET` for connections through the public routable internet or `VPC_LINK` for private connections between API Gateway and resources in a VPC. The default value is `INTERNET` .","ContentHandlingStrategy":"Supported only for WebSocket APIs. Specifies how to handle response payload content type conversions. Supported values are `CONVERT_TO_BINARY` and `CONVERT_TO_TEXT` , with the following behaviors:\\n\\n`CONVERT_TO_BINARY` : Converts a response payload from a Base64-encoded string to the corresponding binary blob.\\n\\n`CONVERT_TO_TEXT` : Converts a response payload from a binary blob to a Base64-encoded string.\\n\\nIf this property is not defined, the response payload will be passed through from the integration response to the route response or method response without modification.","CredentialsArn":"Specifies the credentials required for the integration, if any. For AWS integrations, three options are available. To specify an IAM Role for API Gateway to assume, use the role\'s Amazon Resource Name (ARN). To require that the caller\'s identity be passed through from the request, specify the string `arn:aws:iam::*:user/*` . To use resource-based permissions on supported AWS services, don\'t specify this parameter.","Description":"The description of the integration.","IntegrationMethod":"Specifies the integration\'s HTTP method type.","IntegrationSubtype":"Supported only for HTTP API `AWS_PROXY` integrations. Specifies the AWS service action to invoke. To learn more, see [Integration subtype reference](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-aws-services-reference.html) .","IntegrationType":"The integration type of an integration. One of the following:\\n\\n`AWS` : for integrating the route or method request with an AWS service action, including the Lambda function-invoking action. With the Lambda function-invoking action, this is referred to as the Lambda custom integration. With any other AWS service action, this is known as AWS integration. Supported only for WebSocket APIs.\\n\\n`AWS_PROXY` : for integrating the route or method request with a Lambda function or other AWS service action. This integration is also referred to as a Lambda proxy integration.\\n\\n`HTTP` : for integrating the route or method request with an HTTP endpoint. This integration is also referred to as the HTTP custom integration. Supported only for WebSocket APIs.\\n\\n`HTTP_PROXY` : for integrating the route or method request with an HTTP endpoint, with the client request passed through as-is. This is also referred to as HTTP proxy integration. For HTTP API private integrations, use an `HTTP_PROXY` integration.\\n\\n`MOCK` : for integrating the route or method request with API Gateway as a \\"loopback\\" endpoint without invoking any backend. Supported only for WebSocket APIs.","IntegrationUri":"For a Lambda integration, specify the URI of a Lambda function.\\n\\nFor an HTTP integration, specify a fully-qualified URL.\\n\\nFor an HTTP API private integration, specify the ARN of an Application Load Balancer listener, Network Load Balancer listener, or AWS Cloud Map service. If you specify the ARN of an AWS Cloud Map service, API Gateway uses `DiscoverInstances` to identify resources. You can use query parameters to target specific resources. To learn more, see [DiscoverInstances](https://docs.aws.amazon.com/cloud-map/latest/api/API_DiscoverInstances.html) . For private integrations, all resources must be owned by the same AWS account .","PassthroughBehavior":"Specifies the pass-through behavior for incoming requests based on the `Content-Type` header in the request, and the available mapping templates specified as the `requestTemplates` property on the `Integration` resource. There are three valid values: `WHEN_NO_MATCH` , `WHEN_NO_TEMPLATES` , and `NEVER` . Supported only for WebSocket APIs.\\n\\n`WHEN_NO_MATCH` passes the request body for unmapped content types through to the integration backend without transformation.\\n\\n`NEVER` rejects unmapped content types with an `HTTP 415 Unsupported Media Type` response.\\n\\n`WHEN_NO_TEMPLATES` allows pass-through when the integration has no content types mapped to templates. However, if there is at least one content type defined, unmapped content types will be rejected with the same `HTTP 415 Unsupported Media Type` response.","PayloadFormatVersion":"Specifies the format of the payload sent to an integration. Required for HTTP APIs. For HTTP APIs, supported values for Lambda proxy integrations are `1.0` and `2.0` . For all other integrations, `1.0` is the only supported value. To learn more, see [Working with AWS Lambda proxy integrations for HTTP APIs](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-lambda.html) .","RequestParameters":"For WebSocket APIs, a key-value map specifying request parameters that are passed from the method request to the backend. The key is an integration request parameter name and the associated value is a method request parameter value or static value that must be enclosed within single quotes and pre-encoded as required by the backend. The method request parameter value must match the pattern of `method.request. {location} . {name}` , where `{location}` is `querystring` , `path` , or `header` ; and `{name}` must be a valid and unique method request parameter name.\\n\\nFor HTTP API integrations with a specified `integrationSubtype` , request parameters are a key-value map specifying parameters that are passed to `AWS_PROXY` integrations. You can provide static values, or map request data, stage variables, or context variables that are evaluated at runtime. To learn more, see [Working with AWS service integrations for HTTP APIs](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-aws-services.html) .\\n\\nFor HTTP API integrations without a specified `integrationSubtype` request parameters are a key-value map specifying how to transform HTTP requests before sending them to the backend. The key should follow the pattern :. where action can be `append` , `overwrite` or `remove` . For values, you can provide static values, or map request data, stage variables, or context variables that are evaluated at runtime. To learn more, see [Transforming API requests and responses](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-parameter-mapping.html) .","RequestTemplates":"Represents a map of Velocity templates that are applied on the request payload based on the value of the Content-Type header sent by the client. The content type value is the key in this map, and the template (as a String) is the value. Supported only for WebSocket APIs.","ResponseParameters":"Supported only for HTTP APIs. You use response parameters to transform the HTTP response from a backend integration before returning the response to clients. Specify a key-value map from a selection key to response parameters. The selection key must be a valid HTTP status code within the range of 200-599. The value is of type [`ResponseParameterList`](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigatewayv2-integration-responseparameterlist.html) . To learn more, see [Transforming API requests and responses](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-parameter-mapping.html) .","TemplateSelectionExpression":"The template selection expression for the integration. Supported only for WebSocket APIs.","TimeoutInMillis":"Custom timeout between 50 and 29,000 milliseconds for WebSocket APIs and between 50 and 30,000 milliseconds for HTTP APIs. The default timeout is 29 seconds for WebSocket APIs and 30 seconds for HTTP APIs.","TlsConfig":"The TLS configuration for a private integration. If you specify a TLS configuration, private integration traffic uses the HTTPS protocol. Supported only for HTTP APIs."}},"AWS::ApiGatewayV2::Integration.ResponseParameter":{"attributes":{},"description":"Supported only for HTTP APIs. You use response parameters to transform the HTTP response from a backend integration before returning the response to clients. Specify a key-value map from a selection key to response parameters. The selection key must be a valid HTTP status code within the range of 200-599. Response parameters are a key-value map. The key must match the pattern `:.` or `overwrite.statuscode` . The action can be `append` , `overwrite` or `remove` . The value can be a static value, or map to response data, stage variables, or context variables that are evaluated at runtime. To learn more, see [Transforming API requests and responses](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-parameter-mapping.html) .","properties":{"Destination":"Specifies the location of the response to modify, and how to modify it. To learn more, see [Transforming API requests and responses](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-parameter-mapping.html) .","Source":"Specifies the data to update the parameter with. To learn more, see [Transforming API requests and responses](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-parameter-mapping.html) ."}},"AWS::ApiGatewayV2::Integration.ResponseParameterList":{"attributes":{},"description":"Specifies a list of response parameters for an HTTP API.","properties":{"ResponseParameters":"Supported only for HTTP APIs. You use response parameters to transform the HTTP response from a backend integration before returning the response to clients. Specify a key-value map from a selection key to response parameters. The selection key must be a valid HTTP status code within the range of 200-599. Response parameters are a key-value map. The key must match the pattern `:.` or `overwrite.statuscode` . The action can be `append` , `overwrite` or `remove` . The value can be a static value, or map to response data, stage variables, or context variables that are evaluated at runtime. To learn more, see [Transforming API requests and responses](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-parameter-mapping.html) ."}},"AWS::ApiGatewayV2::Integration.TlsConfig":{"attributes":{},"description":"The `TlsConfig` property specifies the TLS configuration for a private integration. If you specify a TLS configuration, private integration traffic uses the HTTPS protocol. Supported only for HTTP APIs.","properties":{"ServerNameToVerify":"If you specify a server name, API Gateway uses it to verify the hostname on the integration\'s certificate. The server name is also included in the TLS handshake to support Server Name Indication (SNI) or virtual hosting."}},"AWS::ApiGatewayV2::IntegrationResponse":{"attributes":{"IntegrationResponseId":"The integration response ID.","Ref":"`Ref` returns the integration response resource ID, such as `abcd123` ."},"description":"The `AWS::ApiGatewayV2::IntegrationResponse` resource updates an integration response for an WebSocket API. For more information, see [Set up WebSocket API Integration Responses in API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-websocket-api-integration-responses.html) in the *API Gateway Developer Guide* .","properties":{"ApiId":"The API identifier.","ContentHandlingStrategy":"Supported only for WebSocket APIs. Specifies how to handle response payload content type conversions. Supported values are `CONVERT_TO_BINARY` and `CONVERT_TO_TEXT` , with the following behaviors:\\n\\n`CONVERT_TO_BINARY` : Converts a response payload from a Base64-encoded string to the corresponding binary blob.\\n\\n`CONVERT_TO_TEXT` : Converts a response payload from a binary blob to a Base64-encoded string.\\n\\nIf this property is not defined, the response payload will be passed through from the integration response to the route response or method response without modification.","IntegrationId":"The integration ID.","IntegrationResponseKey":"The integration response key.","ResponseParameters":"A key-value map specifying response parameters that are passed to the method response from the backend. The key is a method response header parameter name and the mapped value is an integration response header value, a static value enclosed within a pair of single quotes, or a JSON expression from the integration response body. The mapping key must match the pattern of `method.response.header. *{name}*` , where name is a valid and unique header name. The mapped non-static value must match the pattern of `integration.response.header. *{name}*` or `integration.response.body. *{JSON-expression}*` , where `*{name}*` is a valid and unique response header name and `*{JSON-expression}*` is a valid JSON expression without the `$` prefix.","ResponseTemplates":"The collection of response templates for the integration response as a string-to-string map of key-value pairs. Response templates are represented as a key/value map, with a content-type as the key and a template as the value.","TemplateSelectionExpression":"The template selection expression for the integration response. Supported only for WebSocket APIs."}},"AWS::ApiGatewayV2::Model":{"attributes":{"ModelId":"The model ID.","Ref":"`Ref` returns the model ID, such as `abc123` ."},"description":"The `AWS::ApiGatewayV2::Model` resource updates data model for a WebSocket API. For more information, see [Model Selection Expressions](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-websocket-api-selection-expressions.html#apigateway-websocket-api-model-selection-expressions) in the *API Gateway Developer Guide* .","properties":{"ApiId":"The API identifier.","ContentType":"The content-type for the model, for example, \\"application/json\\".","Description":"The description of the model.","Name":"The name of the model.","Schema":"The schema for the model. For application/json models, this should be JSON schema draft 4 model."}},"AWS::ApiGatewayV2::Route":{"attributes":{"Ref":"`Ref` returns the Route resource ID, such as `abcd123` .","RouteId":"The route ID."},"description":"The `AWS::ApiGatewayV2::Route` resource creates a route for an API.","properties":{"ApiId":"The API identifier.","ApiKeyRequired":"Specifies whether an API key is required for the route. Supported only for WebSocket APIs.","AuthorizationScopes":"The authorization scopes supported by this route.","AuthorizationType":"The authorization type for the route. For WebSocket APIs, valid values are `NONE` for open access, `AWS_IAM` for using AWS IAM permissions, and `CUSTOM` for using a Lambda authorizer. For HTTP APIs, valid values are `NONE` for open access, `JWT` for using JSON Web Tokens, `AWS_IAM` for using AWS IAM permissions, and `CUSTOM` for using a Lambda authorizer.","AuthorizerId":"The identifier of the `Authorizer` resource to be associated with this route. The authorizer identifier is generated by API Gateway when you created the authorizer.","ModelSelectionExpression":"The model selection expression for the route. Supported only for WebSocket APIs.","OperationName":"The operation name for the route.","RequestModels":"The request models for the route. Supported only for WebSocket APIs.","RequestParameters":"The request parameters for the route. Supported only for WebSocket APIs.","RouteKey":"The route key for the route. For HTTP APIs, the route key can be either `$default` , or a combination of an HTTP method and resource path, for example, `GET /pets` .","RouteResponseSelectionExpression":"The route response selection expression for the route. Supported only for WebSocket APIs.","Target":"The target for the route."}},"AWS::ApiGatewayV2::RouteResponse":{"attributes":{"Ref":"`Ref` returns the Route Response resource ID, such as `abc123` .","RouteResponseId":"The route response ID."},"description":"The `AWS::ApiGatewayV2::RouteResponse` resource creates a route response for a WebSocket API. For more information, see [Set up Route Responses for a WebSocket API in API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-websocket-api-route-response.html) in the *API Gateway Developer Guide* .","properties":{"ApiId":"The API identifier.","ModelSelectionExpression":"The model selection expression for the route response. Supported only for WebSocket APIs.","ResponseModels":"The response models for the route response.","ResponseParameters":"The route response parameters.","RouteId":"The route ID.","RouteResponseKey":"The route response key."}},"AWS::ApiGatewayV2::RouteResponse.ParameterConstraints":{"attributes":{},"description":"Specifies whether the parameter is required.","properties":{"Required":"Specifies whether the parameter is required."}},"AWS::ApiGatewayV2::Stage":{"attributes":{"Ref":"`Ref` returns the stage name, such as `MyTestStage` ."},"description":"The `AWS::ApiGatewayV2::Stage` resource specifies a stage for an API. Each stage is a named reference to a deployment of the API and is made available for client applications to call. To learn more, see [Working with stages for HTTP APIs](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-stages.html) and [Deploy a WebSocket API in API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-set-up-websocket-deployment.html) .","properties":{"AccessLogSettings":"Settings for logging access in this stage.","AccessPolicyId":"This parameter is not currently supported.","ApiId":"The API identifier.","AutoDeploy":"Specifies whether updates to an API automatically trigger a new deployment. The default value is `false` .","ClientCertificateId":"The identifier of a client certificate for a `Stage` . Supported only for WebSocket APIs.","DefaultRouteSettings":"The default route settings for the stage.","DeploymentId":"The deployment identifier for the API stage. Can\'t be updated if `autoDeploy` is enabled.","Description":"The description for the API stage.","RouteSettings":"Route settings for the stage.","StageName":"The stage name. Stage names can contain only alphanumeric characters, hyphens, and underscores, or be `$default` . Maximum length is 128 characters.","StageVariables":"A map that defines the stage variables for a `Stage` . Variable names can have alphanumeric and underscore characters, and the values must match [A-Za-z0-9-._~:/?#&=,]+.","Tags":"The collection of tags. Each tag element is associated with a given resource."}},"AWS::ApiGatewayV2::Stage.AccessLogSettings":{"attributes":{},"description":"Settings for logging access in a stage.","properties":{"DestinationArn":"The ARN of the CloudWatch Logs log group to receive access logs. This parameter is required to enable access logging.","Format":"A single line format of the access logs of data, as specified by selected $context variables. The format must include at least $context.requestId. This parameter is required to enable access logging."}},"AWS::ApiGatewayV2::Stage.RouteSettings":{"attributes":{},"description":"Represents a collection of route settings.","properties":{"DataTraceEnabled":"Specifies whether ( `true` ) or not ( `false` ) data trace logging is enabled for this route. This property affects the log entries pushed to Amazon CloudWatch Logs. Supported only for WebSocket APIs.","DetailedMetricsEnabled":"Specifies whether detailed metrics are enabled.","LoggingLevel":"Specifies the logging level for this route: `INFO` , `ERROR` , or `OFF` . This property affects the log entries pushed to Amazon CloudWatch Logs. Supported only for WebSocket APIs.","ThrottlingBurstLimit":"Specifies the throttling burst limit.","ThrottlingRateLimit":"Specifies the throttling rate limit."}},"AWS::ApiGatewayV2::VpcLink":{"attributes":{"Ref":"`Ref` returns the VPC link\'s ID, such as `abcde1` .","VpcLinkId":"The VPC link ID."},"description":"The `AWS::ApiGatewayV2::VpcLink` resource creates a VPC link. Supported only for HTTP APIs. The VPC link status must transition from `PENDING` to `AVAILABLE` to successfully create a VPC link, which can take up to 10 minutes. To learn more, see [Working with VPC Links for HTTP APIs](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-vpc-links.html) in the *API Gateway Developer Guide* .","properties":{"Name":"The name of the VPC link.","SecurityGroupIds":"A list of security group IDs for the VPC link.","SubnetIds":"A list of subnet IDs to include in the VPC link.","Tags":"The collection of tags. Each tag element is associated with a given resource."}},"AWS::AppConfig::Application":{"attributes":{"Ref":"`Ref` returns the application ID."},"description":"The `AWS::AppConfig::Application` resource creates an application. In AWS AppConfig , an application is simply an organizational construct like a folder. This organizational construct has a relationship with some unit of executable code. For example, you could create an application called MyMobileApp to organize and manage configuration data for a mobile application installed by your users.\\n\\nAWS AppConfig requires that you create resources and deploy a configuration in the following order:\\n\\n- Create an application\\n- Create an environment\\n- Create a configuration profile\\n- Create a deployment strategy\\n- Deploy the configuration\\n\\nFor more information, see [AWS AppConfig](https://docs.aws.amazon.com/appconfig/latest/userguide/what-is-appconfig.html) in the *AWS AppConfig User Guide* .","properties":{"Description":"A description of the application.","Name":"A name for the application.","Tags":"Metadata to assign to the application. Tags help organize and categorize your AWS AppConfig resources. Each tag consists of a key and an optional value, both of which you define."}},"AWS::AppConfig::Application.Tags":{"attributes":{},"description":"Metadata to assign to the application. Tags help organize and categorize your AWS AppConfig resources. Each tag consists of a key and an optional value, both of which you define.","properties":{"Key":"The key-value string map. The valid character set is `[a-zA-Z+-=._:/]` . The tag key can be up to 128 characters and must not start with `aws:` .","Value":"The tag value can be up to 256 characters."}},"AWS::AppConfig::ConfigurationProfile":{"attributes":{"Ref":"`Ref` returns the configuration profile ID."},"description":"The `AWS::AppConfig::ConfigurationProfile` resource creates a configuration profile that enables AWS AppConfig to access the configuration source. Valid configuration sources include AWS Systems Manager (SSM) documents, SSM Parameter Store parameters, and Amazon S3 . A configuration profile includes the following information.\\n\\n- The Uri location of the configuration data.\\n- The AWS Identity and Access Management ( IAM ) role that provides access to the configuration data.\\n- A validator for the configuration data. Available validators include either a JSON Schema or the Amazon Resource Name (ARN) of an AWS Lambda function.\\n\\nAWS AppConfig requires that you create resources and deploy a configuration in the following order:\\n\\n- Create an application\\n- Create an environment\\n- Create a configuration profile\\n- Create a deployment strategy\\n- Deploy the configuration\\n\\nFor more information, see [AWS AppConfig](https://docs.aws.amazon.com/appconfig/latest/userguide/what-is-appconfig.html) in the *AWS AppConfig User Guide* .","properties":{"ApplicationId":"The application ID.","Description":"A description of the configuration profile.","LocationUri":"A URI to locate the configuration. You can specify the following:\\n\\n- For the AWS AppConfig hosted configuration store and for feature flags, specify `hosted` .\\n- For an AWS Systems Manager Parameter Store parameter, specify either the parameter name in the format `ssm-parameter://` or the ARN.\\n- For an AWS CodePipeline pipeline, specify the URI in the following format: `codepipeline` ://.\\n- For an AWS Secrets Manager secret, specify the URI in the following format: `secretsmanager` ://.\\n- For an Amazon S3 object, specify the URI in the following format: `s3:///` . Here is an example: `s3://my-bucket/my-app/us-east-1/my-config.json`\\n- For an SSM document, specify either the document name in the format `ssm-document://` or the Amazon Resource Name (ARN).","Name":"A name for the configuration profile.","RetrievalRoleArn":"The ARN of an IAM role with permission to access the configuration at the specified `LocationUri` .\\n\\n> A retrieval role ARN is not required for configurations stored in the AWS AppConfig hosted configuration store. It is required for all other sources that store your configuration.","Tags":"Metadata to assign to the configuration profile. Tags help organize and categorize your AWS AppConfig resources. Each tag consists of a key and an optional value, both of which you define.","Type":"The type of configurations contained in the profile. AWS AppConfig supports `feature flags` and `freeform` configurations. We recommend you create feature flag configurations to enable or disable new features and freeform configurations to distribute configurations to an application. When calling this API, enter one of the following values for `Type` :\\n\\n`AWS.AppConfig.FeatureFlags`\\n\\n`AWS.Freeform`","Validators":"A list of methods for validating the configuration."}},"AWS::AppConfig::ConfigurationProfile.Tags":{"attributes":{},"description":"Metadata to assign to the configuration profile. Tags help organize and categorize your AWS AppConfig resources. Each tag consists of a key and an optional value, both of which you define.","properties":{"Key":"The key-value string map. The valid character set is `[a-zA-Z+-=._:/]` . The tag key can be up to 128 characters and must not start with `aws:` .","Value":"The tag value can be up to 256 characters."}},"AWS::AppConfig::ConfigurationProfile.Validators":{"attributes":{},"description":"A validator provides a syntactic or semantic check to ensure the configuration that you want to deploy functions as intended. To validate your application configuration data, you provide a schema or an AWS Lambda function that runs against the configuration. The configuration deployment or update can only proceed when the configuration data is valid.","properties":{"Content":"Either the JSON Schema content or the Amazon Resource Name (ARN) of an Lambda function.","Type":"AWS AppConfig supports validators of type `JSON_SCHEMA` and `LAMBDA`"}},"AWS::AppConfig::Deployment":{"attributes":{"Ref":""},"description":"The `AWS::AppConfig::Deployment` resource starts a deployment. Starting a deployment in AWS AppConfig calls the `StartDeployment` API action. This call includes the IDs of the AWS AppConfig application, the environment, the configuration profile, and (optionally) the configuration data version to deploy. The call also includes the ID of the deployment strategy to use, which determines how the configuration data is deployed.\\n\\nAWS AppConfig monitors the distribution to all hosts and reports status. If a distribution fails, then AWS AppConfig rolls back the configuration.\\n\\nAWS AppConfig requires that you create resources and deploy a configuration in the following order:\\n\\n- Create an application\\n- Create an environment\\n- Create a configuration profile\\n- Create a deployment strategy\\n- Deploy the configuration\\n\\nFor more information, see [AWS AppConfig](https://docs.aws.amazon.com/appconfig/latest/userguide/what-is-appconfig.html) in the *AWS AppConfig User Guide* .","properties":{"ApplicationId":"The application ID.","ConfigurationProfileId":"The configuration profile ID.","ConfigurationVersion":"The configuration version to deploy. If deploying an AWS AppConfig hosted configuration version, you can specify either the version number or version label. For all other configurations, you must specify the version number.","DeploymentStrategyId":"The deployment strategy ID.","Description":"A description of the deployment.","EnvironmentId":"The environment ID.","KmsKeyIdentifier":"The AWS KMS key identifier (key ID, key alias, or key ARN). AWS AppConfig uses this ID to encrypt the configuration data using a customer managed key.","Tags":"Metadata to assign to the deployment. Tags help organize and categorize your AWS AppConfig resources. Each tag consists of a key and an optional value, both of which you define."}},"AWS::AppConfig::Deployment.Tags":{"attributes":{},"description":"Metadata to assign to the deployment strategy. Tags help organize and categorize your AWS AppConfig resources. Each tag consists of a key and an optional value, both of which you define.","properties":{"Key":"The key-value string map. The valid character set is `[a-zA-Z+-=._:/]` . The tag key can be up to 128 characters and must not start with `aws:` .","Value":"The tag value can be up to 256 characters."}},"AWS::AppConfig::DeploymentStrategy":{"attributes":{"Ref":"`Ref` returns the deployment strategy ID."},"description":"The `AWS::AppConfig::DeploymentStrategy` resource creates an AWS AppConfig deployment strategy. A deployment strategy defines important criteria for rolling out your configuration to the designated targets. A deployment strategy includes: the overall duration required, a percentage of targets to receive the deployment during each interval, an algorithm that defines how percentage grows, and bake time.\\n\\nAWS AppConfig requires that you create resources and deploy a configuration in the following order:\\n\\n- Create an application\\n- Create an environment\\n- Create a configuration profile\\n- Create a deployment strategy\\n- Deploy the configuration\\n\\nFor more information, see [AWS AppConfig](https://docs.aws.amazon.com/appconfig/latest/userguide/what-is-appconfig.html) in the *AWS AppConfig User Guide* .","properties":{"DeploymentDurationInMinutes":"Total amount of time for a deployment to last.","Description":"A description of the deployment strategy.","FinalBakeTimeInMinutes":"Specifies the amount of time AWS AppConfig monitors for Amazon CloudWatch alarms after the configuration has been deployed to 100% of its targets, before considering the deployment to be complete. If an alarm is triggered during this time, AWS AppConfig rolls back the deployment. You must configure permissions for AWS AppConfig to roll back based on CloudWatch alarms. For more information, see [Configuring permissions for rollback based on Amazon CloudWatch alarms](https://docs.aws.amazon.com/appconfig/latest/userguide/getting-started-with-appconfig-cloudwatch-alarms-permissions.html) in the *AWS AppConfig User Guide* .","GrowthFactor":"The percentage of targets to receive a deployed configuration during each interval.","GrowthType":"The algorithm used to define how percentage grows over time. AWS AppConfig supports the following growth types:\\n\\n*Linear* : For this type, AWS AppConfig processes the deployment by dividing the total number of targets by the value specified for `Step percentage` . For example, a linear deployment that uses a `Step percentage` of 10 deploys the configuration to 10 percent of the hosts. After those deployments are complete, the system deploys the configuration to the next 10 percent. This continues until 100% of the targets have successfully received the configuration.\\n\\n*Exponential* : For this type, AWS AppConfig processes the deployment exponentially using the following formula: `G*(2^N)` . In this formula, `G` is the growth factor specified by the user and `N` is the number of steps until the configuration is deployed to all targets. For example, if you specify a growth factor of 2, then the system rolls out the configuration as follows:\\n\\n`2*(2^0)`\\n\\n`2*(2^1)`\\n\\n`2*(2^2)`\\n\\nExpressed numerically, the deployment rolls out as follows: 2% of the targets, 4% of the targets, 8% of the targets, and continues until the configuration has been deployed to all targets.","Name":"A name for the deployment strategy.","ReplicateTo":"Save the deployment strategy to a Systems Manager (SSM) document.","Tags":"Assigns metadata to an AWS AppConfig resource. Tags help organize and categorize your AWS AppConfig resources. Each tag consists of a key and an optional value, both of which you define. You can specify a maximum of 50 tags for a resource."}},"AWS::AppConfig::DeploymentStrategy.Tags":{"attributes":{},"description":"Metadata to assign to the deployment strategy. Tags help organize and categorize your AWS AppConfig resources. Each tag consists of a key and an optional value, both of which you define.","properties":{"Key":"The key-value string map. The valid character set is `[a-zA-Z+-=._:/]` . The tag key can be up to 128 characters and must not start with `aws:` .","Value":"The tag value can be up to 256 characters."}},"AWS::AppConfig::Environment":{"attributes":{"Ref":"`Ref` returns the environment ID."},"description":"The `AWS::AppConfig::Environment` resource creates an environment, which is a logical deployment group of AWS AppConfig targets, such as applications in a `Beta` or `Production` environment. You define one or more environments for each AWS AppConfig application. You can also define environments for application subcomponents such as the `Web` , `Mobile` and `Back-end` components for your application. You can configure Amazon CloudWatch alarms for each environment. The system monitors alarms during a configuration deployment. If an alarm is triggered, the system rolls back the configuration.\\n\\nAWS AppConfig requires that you create resources and deploy a configuration in the following order:\\n\\n- Create an application\\n- Create an environment\\n- Create a configuration profile\\n- Create a deployment strategy\\n- Deploy the configuration\\n\\nFor more information, see [AWS AppConfig](https://docs.aws.amazon.com/appconfig/latest/userguide/what-is-appconfig.html) in the *AWS AppConfig User Guide* .","properties":{"ApplicationId":"The application ID.","Description":"A description of the environment.","Monitors":"Amazon CloudWatch alarms to monitor during the deployment process.","Name":"A name for the environment.","Tags":"Metadata to assign to the environment. Tags help organize and categorize your AWS AppConfig resources. Each tag consists of a key and an optional value, both of which you define."}},"AWS::AppConfig::Environment.Monitors":{"attributes":{},"description":"Amazon CloudWatch alarms to monitor during the deployment process.","properties":{"AlarmArn":"Amazon Resource Name (ARN) of the Amazon CloudWatch alarm.","AlarmRoleArn":"ARN of an AWS Identity and Access Management (IAM) role for AWS AppConfig to monitor `AlarmArn` ."}},"AWS::AppConfig::Environment.Tags":{"attributes":{},"description":"Metadata to assign to the environment. Tags help organize and categorize your AWS AppConfig resources. Each tag consists of a key and an optional value, both of which you define.","properties":{"Key":"The key-value string map. The valid character set is `[a-zA-Z+-=._:/]` . The tag key can be up to 128 characters and must not start with `aws:` .","Value":"The tag value can be up to 256 characters."}},"AWS::AppConfig::Extension":{"attributes":{"Arn":"The system-generated Amazon Resource Name (ARN) for the extension.","Id":"The system-generated ID of the extension.","Ref":"`Ref` returns information about the extension.","VersionNumber":"The extension version number."},"description":"Creates an AWS AppConfig extension. An extension augments your ability to inject logic or behavior at different points during the AWS AppConfig workflow of creating or deploying a configuration.\\n\\nYou can create your own extensions or use the AWS authored extensions provided by AWS AppConfig . For an AWS AppConfig extension that uses AWS Lambda , you must create a Lambda function to perform any computation and processing defined in the extension. If you plan to create custom versions of the AWS authored notification extensions, you only need to specify an Amazon Resource Name (ARN) in the `Uri` field for the new extension version.\\n\\n- For a custom EventBridge notification extension, enter the ARN of the EventBridge default events in the `Uri` field.\\n- For a custom Amazon SNS notification extension, enter the ARN of an Amazon SNS topic in the `Uri` field.\\n- For a custom Amazon SQS notification extension, enter the ARN of an Amazon SQS message queue in the `Uri` field.\\n\\nFor more information about extensions, see [Working with AWS AppConfig extensions](https://docs.aws.amazon.com/appconfig/latest/userguide/working-with-appconfig-extensions.html) in the *AWS AppConfig User Guide* .","properties":{"Actions":"The actions defined in the extension.","Description":"Information about the extension.","LatestVersionNumber":"You can omit this field when you create an extension. When you create a new version, specify the most recent current version number. For example, you create version 3, enter 2 for this field.","Name":"A name for the extension. Each extension name in your account must be unique. Extension versions use the same name.","Parameters":"The parameters accepted by the extension. You specify parameter values when you associate the extension to an AWS AppConfig resource by using the `CreateExtensionAssociation` API action. For AWS Lambda extension actions, these parameters are included in the Lambda request object.","Tags":"Adds one or more tags for the specified extension. Tags are metadata that help you categorize resources in different ways, for example, by purpose, owner, or environment. Each tag consists of a key and an optional value, both of which you define."}},"AWS::AppConfig::Extension.Parameter":{"attributes":{},"description":"A value such as an Amazon Resource Name (ARN) or an Amazon Simple Notification Service topic entered in an extension when invoked. Parameter values are specified in an extension association. For more information about extensions, see [Working with AWS AppConfig extensions](https://docs.aws.amazon.com/appconfig/latest/userguide/working-with-appconfig-extensions.html) in the *AWS AppConfig User Guide* .","properties":{"Description":"Information about the parameter.","Required":"A parameter value must be specified in the extension association."}},"AWS::AppConfig::ExtensionAssociation":{"attributes":{"Arn":"The ARN of the extension defined in the association.","ExtensionArn":"The ARN of the extension defined in the association.","Id":"The system-generated ID for the association.","Ref":"`Ref` returns information about the extension association.","ResourceArn":"The ARNs of applications, configuration profiles, or environments defined in the association."},"description":"When you create an extension or configure an AWS authored extension, you associate the extension with an AWS AppConfig application, environment, or configuration profile. For example, you can choose to run the `AWS AppConfig deployment events to Amazon SNS` AWS authored extension and receive notifications on an Amazon SNS topic anytime a configuration deployment is started for a specific application. Defining which extension to associate with an AWS AppConfig resource is called an *extension association* . An extension association is a specified relationship between an extension and an AWS AppConfig resource, such as an application or a configuration profile. For more information about extensions and associations, see [Working with AWS AppConfig extensions](https://docs.aws.amazon.com/appconfig/latest/userguide/working-with-appconfig-extensions.html) in the *AWS AppConfig User Guide* .","properties":{"ExtensionIdentifier":"The name, the ID, or the Amazon Resource Name (ARN) of the extension.","ExtensionVersionNumber":"The version number of the extension. If not specified, AWS AppConfig uses the maximum version of the extension.","Parameters":"The parameter names and values defined in the extensions. Extension parameters marked `Required` must be entered for this field.","ResourceIdentifier":"The ARN of an application, configuration profile, or environment.","Tags":"Adds one or more tags for the specified extension association. Tags are metadata that help you categorize resources in different ways, for example, by purpose, owner, or environment. Each tag consists of a key and an optional value, both of which you define."}},"AWS::AppConfig::HostedConfigurationVersion":{"attributes":{"Ref":"`Ref` returns the version number."},"description":"Create a new configuration in the AWS AppConfig hosted configuration store. Configurations must be 1 MB or smaller. The AWS AppConfig hosted configuration store provides the following benefits over other configuration store options.\\n\\n- You don\'t need to set up and configure other services such as Amazon Simple Storage Service ( Amazon S3 ) or Parameter Store.\\n- You don\'t need to configure AWS Identity and Access Management ( IAM ) permissions to use the configuration store.\\n- You can store configurations in any content type.\\n- There is no cost to use the store.\\n- You can create a configuration and add it to the store when you create a configuration profile.","properties":{"ApplicationId":"The application ID.","ConfigurationProfileId":"The configuration profile ID.","Content":"The content of the configuration or the configuration data.","ContentType":"A standard MIME type describing the format of the configuration content. For more information, see [Content-Type](https://docs.aws.amazon.com/https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.17) .","Description":"A description of the configuration.","LatestVersionNumber":"An optional locking token used to prevent race conditions from overwriting configuration updates when creating a new version. To ensure your data is not overwritten when creating multiple hosted configuration versions in rapid succession, specify the version number of the latest hosted configuration version.","VersionLabel":"A user-defined label for an AWS AppConfig hosted configuration version."}},"AWS::AppFlow::Connector":{"attributes":{"ConnectorArn":"","Ref":""},"description":"Creates a new connector profile associated with your AWS account . There is a soft quota of 100 connector profiles per AWS account . If you need more connector profiles than this quota allows, you can submit a request to the Amazon AppFlow team through the Amazon AppFlow support channel. In each connector profile that you create, you can provide the credentials and properties for only one connector.","properties":{"ConnectorLabel":"The label used for registering the connector.","ConnectorProvisioningConfig":"The configuration required for registering the connector.","ConnectorProvisioningType":"The provisioning type used to register the connector.","Description":"A description about the connector runtime setting."}},"AWS::AppFlow::Connector.ConnectorProvisioningConfig":{"attributes":{},"description":"Contains information about the configuration of the connector being registered.","properties":{"Lambda":"Contains information about the configuration of the lambda which is being registered as the connector."}},"AWS::AppFlow::Connector.LambdaConnectorProvisioningConfig":{"attributes":{},"description":"Contains information about the configuration of the lambda which is being registered as the connector.","properties":{"LambdaArn":"Lambda ARN of the connector being registered."}},"AWS::AppFlow::ConnectorProfile":{"attributes":{"ConnectorProfileArn":"The Amazon Resource Name (ARN) of the connector profile.","CredentialsArn":"The Amazon Resource Name (ARN) of the connector profile credentials.","Ref":"`Ref` returns the connector profile name. For example:\\n\\n`{ \\"Ref\\": \\"myConnectorProfile\\" }`"},"description":"The `AWS::AppFlow::ConnectorProfile` resource is an Amazon AppFlow resource type that specifies the configuration profile for an instance of a connector. This includes the provided name, credentials ARN, connection-mode, and so on. The fields that are common to all types of connector profiles are explicitly specified under the `Properties` field. The rest of the connector-specific properties are specified under `Properties/ConnectorProfileConfig` .\\n\\n> If you want to use AWS CloudFormation to create a connector profile for connectors that implement OAuth (such as Salesforce, Slack, Zendesk, and Google Analytics), you must fetch the access and refresh tokens. You can do this by implementing your own UI for OAuth, or by retrieving the tokens from elsewhere. Alternatively, you can use the Amazon AppFlow console to create the connector profile, and then use that connector profile in the flow creation CloudFormation template.","properties":{"ConnectionMode":"Indicates the connection mode and if it is public or private.","ConnectorLabel":"The label for the connector profile being created.","ConnectorProfileConfig":"Defines the connector-specific configuration and credentials.","ConnectorProfileName":"The name of the connector profile. The name is unique for each `ConnectorProfile` in the AWS account .","ConnectorType":"The type of connector, such as Salesforce, Amplitude, and so on.","KMSArn":"The ARN (Amazon Resource Name) of the Key Management Service (KMS) key you provide for encryption. This is required if you do not want to use the Amazon AppFlow-managed KMS key. If you don\'t provide anything here, Amazon AppFlow uses the Amazon AppFlow-managed KMS key."}},"AWS::AppFlow::ConnectorProfile.AmplitudeConnectorProfileCredentials":{"attributes":{},"description":"The connector-specific credentials required when using Amplitude.","properties":{"ApiKey":"A unique alphanumeric identifier used to authenticate a user, developer, or calling program to your API.","SecretKey":"The Secret Access Key portion of the credentials."}},"AWS::AppFlow::ConnectorProfile.ApiKeyCredentials":{"attributes":{},"description":"The API key credentials required for API key authentication.","properties":{"ApiKey":"The API key required for API key authentication.","ApiSecretKey":"The API secret key required for API key authentication."}},"AWS::AppFlow::ConnectorProfile.BasicAuthCredentials":{"attributes":{},"description":"The basic auth credentials required for basic authentication.","properties":{"Password":"The password to use to connect to a resource.","Username":"The username to use to connect to a resource."}},"AWS::AppFlow::ConnectorProfile.ConnectorOAuthRequest":{"attributes":{},"description":"Used by select connectors for which the OAuth workflow is supported, such as Salesforce, Google Analytics, Marketo, Zendesk, and Slack.","properties":{"AuthCode":"The code provided by the connector when it has been authenticated via the connected app.","RedirectUri":"The URL to which the authentication server redirects the browser after authorization has been granted."}},"AWS::AppFlow::ConnectorProfile.ConnectorProfileConfig":{"attributes":{},"description":"Defines the connector-specific configuration and credentials for the connector profile.","properties":{"ConnectorProfileCredentials":"The connector-specific credentials required by each connector.","ConnectorProfileProperties":"The connector-specific properties of the profile configuration."}},"AWS::AppFlow::ConnectorProfile.ConnectorProfileCredentials":{"attributes":{},"description":"The connector-specific credentials required by a connector.","properties":{"Amplitude":"The connector-specific credentials required when using Amplitude.","CustomConnector":"The connector-specific profile credentials that are required when using the custom connector.","Datadog":"The connector-specific credentials required when using Datadog.","Dynatrace":"The connector-specific credentials required when using Dynatrace.","GoogleAnalytics":"The connector-specific credentials required when using Google Analytics.","InforNexus":"The connector-specific credentials required when using Infor Nexus.","Marketo":"The connector-specific credentials required when using Marketo.","Pardot":"","Redshift":"The connector-specific credentials required when using Amazon Redshift.","SAPOData":"The connector-specific profile credentials required when using SAPOData.","Salesforce":"The connector-specific credentials required when using Salesforce.","ServiceNow":"The connector-specific credentials required when using ServiceNow.","Singular":"The connector-specific credentials required when using Singular.","Slack":"The connector-specific credentials required when using Slack.","Snowflake":"The connector-specific credentials required when using Snowflake.","Trendmicro":"The connector-specific credentials required when using Trend Micro.","Veeva":"The connector-specific credentials required when using Veeva.","Zendesk":"The connector-specific credentials required when using Zendesk."}},"AWS::AppFlow::ConnectorProfile.ConnectorProfileProperties":{"attributes":{},"description":"The connector-specific profile properties required by each connector.","properties":{"CustomConnector":"The properties required by the custom connector.","Datadog":"The connector-specific properties required by Datadog.","Dynatrace":"The connector-specific properties required by Dynatrace.","InforNexus":"The connector-specific properties required by Infor Nexus.","Marketo":"The connector-specific properties required by Marketo.","Pardot":"","Redshift":"The connector-specific properties required by Amazon Redshift.","SAPOData":"The connector-specific profile properties required when using SAPOData.","Salesforce":"The connector-specific properties required by Salesforce.","ServiceNow":"The connector-specific properties required by serviceNow.","Slack":"The connector-specific properties required by Slack.","Snowflake":"The connector-specific properties required by Snowflake.","Veeva":"The connector-specific properties required by Veeva.","Zendesk":"The connector-specific properties required by Zendesk."}},"AWS::AppFlow::ConnectorProfile.CustomAuthCredentials":{"attributes":{},"description":"The custom credentials required for custom authentication.","properties":{"CredentialsMap":"A map that holds custom authentication credentials.","CustomAuthenticationType":"The custom authentication type that the connector uses."}},"AWS::AppFlow::ConnectorProfile.CustomConnectorProfileCredentials":{"attributes":{},"description":"The connector-specific profile credentials that are required when using the custom connector.","properties":{"ApiKey":"The API keys required for the authentication of the user.","AuthenticationType":"The authentication type that the custom connector uses for authenticating while creating a connector profile.","Basic":"The basic credentials that are required for the authentication of the user.","Custom":"If the connector uses the custom authentication mechanism, this holds the required credentials.","Oauth2":"The OAuth 2.0 credentials required for the authentication of the user."}},"AWS::AppFlow::ConnectorProfile.CustomConnectorProfileProperties":{"attributes":{},"description":"The profile properties required by the custom connector.","properties":{"OAuth2Properties":"The OAuth 2.0 properties required for OAuth 2.0 authentication.","ProfileProperties":"A map of properties that are required to create a profile for the custom connector."}},"AWS::AppFlow::ConnectorProfile.DatadogConnectorProfileCredentials":{"attributes":{},"description":"The connector-specific credentials required by Datadog.","properties":{"ApiKey":"A unique alphanumeric identifier used to authenticate a user, developer, or calling program to your API.","ApplicationKey":"Application keys, in conjunction with your API key, give you full access to Datadog’s programmatic API. Application keys are associated with the user account that created them. The application key is used to log all requests made to the API."}},"AWS::AppFlow::ConnectorProfile.DatadogConnectorProfileProperties":{"attributes":{},"description":"The connector-specific profile properties required by Datadog.","properties":{"InstanceUrl":"The location of the Datadog resource."}},"AWS::AppFlow::ConnectorProfile.DynatraceConnectorProfileCredentials":{"attributes":{},"description":"The connector-specific profile credentials required by Dynatrace.","properties":{"ApiToken":"The API tokens used by Dynatrace API to authenticate various API calls."}},"AWS::AppFlow::ConnectorProfile.DynatraceConnectorProfileProperties":{"attributes":{},"description":"The connector-specific profile properties required by Dynatrace.","properties":{"InstanceUrl":"The location of the Dynatrace resource."}},"AWS::AppFlow::ConnectorProfile.GoogleAnalyticsConnectorProfileCredentials":{"attributes":{},"description":"The connector-specific profile credentials required by Google Analytics.","properties":{"AccessToken":"The credentials used to access protected Google Analytics resources.","ClientId":"The identifier for the desired client.","ClientSecret":"The client secret used by the OAuth client to authenticate to the authorization server.","ConnectorOAuthRequest":"Used by select connectors for which the OAuth workflow is supported, such as Salesforce, Google Analytics, Marketo, Zendesk, and Slack.","RefreshToken":"The credentials used to acquire new access tokens. This is required only for OAuth2 access tokens, and is not required for OAuth1 access tokens."}},"AWS::AppFlow::ConnectorProfile.InforNexusConnectorProfileCredentials":{"attributes":{},"description":"The connector-specific profile credentials required by Infor Nexus.","properties":{"AccessKeyId":"The Access Key portion of the credentials.","Datakey":"The encryption keys used to encrypt data.","SecretAccessKey":"The secret key used to sign requests.","UserId":"The identifier for the user."}},"AWS::AppFlow::ConnectorProfile.InforNexusConnectorProfileProperties":{"attributes":{},"description":"The connector-specific profile properties required by Infor Nexus.","properties":{"InstanceUrl":"The location of the Infor Nexus resource."}},"AWS::AppFlow::ConnectorProfile.MarketoConnectorProfileCredentials":{"attributes":{},"description":"The connector-specific profile credentials required by Marketo.","properties":{"AccessToken":"The credentials used to access protected Marketo resources.","ClientId":"The identifier for the desired client.","ClientSecret":"The client secret used by the OAuth client to authenticate to the authorization server.","ConnectorOAuthRequest":"Used by select connectors for which the OAuth workflow is supported, such as Salesforce, Google Analytics, Marketo, Zendesk, and Slack."}},"AWS::AppFlow::ConnectorProfile.MarketoConnectorProfileProperties":{"attributes":{},"description":"The connector-specific profile properties required when using Marketo.","properties":{"InstanceUrl":"The location of the Marketo resource."}},"AWS::AppFlow::ConnectorProfile.OAuth2Credentials":{"attributes":{},"description":"The OAuth 2.0 credentials required for OAuth 2.0 authentication.","properties":{"AccessToken":"The access token used to access the connector on your behalf.","ClientId":"The identifier for the desired client.","ClientSecret":"The client secret used by the OAuth client to authenticate to the authorization server.","OAuthRequest":"","RefreshToken":"The refresh token used to refresh an expired access token."}},"AWS::AppFlow::ConnectorProfile.OAuth2Properties":{"attributes":{},"description":"The OAuth 2.0 properties required for OAuth 2.0 authentication.","properties":{"OAuth2GrantType":"The OAuth 2.0 grant type used by connector for OAuth 2.0 authentication.","TokenUrl":"The token URL required for OAuth 2.0 authentication.","TokenUrlCustomProperties":"Associates your token URL with a map of properties that you define. Use this parameter to provide any additional details that the connector requires to authenticate your request."}},"AWS::AppFlow::ConnectorProfile.OAuthCredentials":{"attributes":{},"description":"The OAuth credentials required for OAuth type authentication.","properties":{"AccessToken":"The access token used to access protected SAPOData resources.","ClientId":"The identifier for the desired client.","ClientSecret":"The client secret used by the OAuth client to authenticate to the authorization server.","ConnectorOAuthRequest":"","RefreshToken":"The refresh token used to refresh expired access token."}},"AWS::AppFlow::ConnectorProfile.OAuthProperties":{"attributes":{},"description":"The OAuth properties required for OAuth type authentication.","properties":{"AuthCodeUrl":"The authorization code url required to redirect to SAP Login Page to fetch authorization code for OAuth type authentication.","OAuthScopes":"The OAuth scopes required for OAuth type authentication.","TokenUrl":"The token url required to fetch access/refresh tokens using authorization code and also to refresh expired access token using refresh token."}},"AWS::AppFlow::ConnectorProfile.PardotConnectorProfileCredentials":{"attributes":{},"description":"","properties":{"AccessToken":"","ClientCredentialsArn":"","ConnectorOAuthRequest":"","RefreshToken":""}},"AWS::AppFlow::ConnectorProfile.PardotConnectorProfileProperties":{"attributes":{},"description":"","properties":{"BusinessUnitId":"","InstanceUrl":"","IsSandboxEnvironment":""}},"AWS::AppFlow::ConnectorProfile.RedshiftConnectorProfileCredentials":{"attributes":{},"description":"The connector-specific profile credentials required when using Amazon Redshift.","properties":{"Password":"The password that corresponds to the user name.","Username":"The name of the user."}},"AWS::AppFlow::ConnectorProfile.RedshiftConnectorProfileProperties":{"attributes":{},"description":"The connector-specific profile properties when using Amazon Redshift.","properties":{"BucketName":"A name for the associated Amazon S3 bucket.","BucketPrefix":"The object key for the destination bucket in which Amazon AppFlow places the files.","ClusterIdentifier":"","DataApiRoleArn":"","DatabaseName":"","DatabaseUrl":"The JDBC URL of the Amazon Redshift cluster.","IsRedshiftServerless":"","RoleArn":"The Amazon Resource Name (ARN) of IAM role that grants Amazon Redshift read-only access to Amazon S3. For more information, and for the polices that you attach to this role, see [Allow Amazon Redshift to access your Amazon AppFlow data in Amazon S3](https://docs.aws.amazon.com/appflow/latest/userguide/security_iam_service-role-policies.html#redshift-access-s3) .","WorkgroupName":""}},"AWS::AppFlow::ConnectorProfile.SAPODataConnectorProfileCredentials":{"attributes":{},"description":"The connector-specific profile credentials required when using SAPOData.","properties":{"BasicAuthCredentials":"The SAPOData basic authentication credentials.","OAuthCredentials":"The SAPOData OAuth type authentication credentials."}},"AWS::AppFlow::ConnectorProfile.SAPODataConnectorProfileProperties":{"attributes":{},"description":"The connector-specific profile properties required when using SAPOData.","properties":{"ApplicationHostUrl":"The location of the SAPOData resource.","ApplicationServicePath":"The application path to catalog service.","ClientNumber":"The client number for the client creating the connection.","DisableSSO":"","LogonLanguage":"The logon language of SAPOData instance.","OAuthProperties":"The SAPOData OAuth properties required for OAuth type authentication.","PortNumber":"The port number of the SAPOData instance.","PrivateLinkServiceName":"The SAPOData Private Link service name to be used for private data transfers."}},"AWS::AppFlow::ConnectorProfile.SalesforceConnectorProfileCredentials":{"attributes":{},"description":"The connector-specific profile credentials required when using Salesforce.","properties":{"AccessToken":"The credentials used to access protected Salesforce resources.","ClientCredentialsArn":"The secret manager ARN, which contains the client ID and client secret of the connected app.","ConnectorOAuthRequest":"Used by select connectors for which the OAuth workflow is supported, such as Salesforce, Google Analytics, Marketo, Zendesk, and Slack.","JwtToken":"","OAuth2GrantType":"","RefreshToken":"The credentials used to acquire new access tokens."}},"AWS::AppFlow::ConnectorProfile.SalesforceConnectorProfileProperties":{"attributes":{},"description":"The connector-specific profile properties required when using Salesforce.","properties":{"InstanceUrl":"The location of the Salesforce resource.","isSandboxEnvironment":"Indicates whether the connector profile applies to a sandbox or production environment.","usePrivateLinkForMetadataAndAuthorization":""}},"AWS::AppFlow::ConnectorProfile.ServiceNowConnectorProfileCredentials":{"attributes":{},"description":"The connector-specific profile credentials required when using ServiceNow.","properties":{"Password":"The password that corresponds to the user name.","Username":"The name of the user."}},"AWS::AppFlow::ConnectorProfile.ServiceNowConnectorProfileProperties":{"attributes":{},"description":"The connector-specific profile properties required when using ServiceNow.","properties":{"InstanceUrl":"The location of the ServiceNow resource."}},"AWS::AppFlow::ConnectorProfile.SingularConnectorProfileCredentials":{"attributes":{},"description":"The connector-specific profile credentials required when using Singular.","properties":{"ApiKey":"A unique alphanumeric identifier used to authenticate a user, developer, or calling program to your API."}},"AWS::AppFlow::ConnectorProfile.SlackConnectorProfileCredentials":{"attributes":{},"description":"The connector-specific profile credentials required when using Slack.","properties":{"AccessToken":"The credentials used to access protected Slack resources.","ClientId":"The identifier for the client.","ClientSecret":"The client secret used by the OAuth client to authenticate to the authorization server.","ConnectorOAuthRequest":"Used by select connectors for which the OAuth workflow is supported, such as Salesforce, Google Analytics, Marketo, Zendesk, and Slack."}},"AWS::AppFlow::ConnectorProfile.SlackConnectorProfileProperties":{"attributes":{},"description":"The connector-specific profile properties required when using Slack.","properties":{"InstanceUrl":"The location of the Slack resource."}},"AWS::AppFlow::ConnectorProfile.SnowflakeConnectorProfileCredentials":{"attributes":{},"description":"The connector-specific profile credentials required when using Snowflake.","properties":{"Password":"The password that corresponds to the user name.","Username":"The name of the user."}},"AWS::AppFlow::ConnectorProfile.SnowflakeConnectorProfileProperties":{"attributes":{},"description":"The connector-specific profile properties required when using Snowflake.","properties":{"AccountName":"The name of the account.","BucketName":"The name of the Amazon S3 bucket associated with Snowflake.","BucketPrefix":"The bucket path that refers to the Amazon S3 bucket associated with Snowflake.","PrivateLinkServiceName":"The Snowflake Private Link service name to be used for private data transfers.","Region":"The AWS Region of the Snowflake account.","Stage":"The name of the Amazon S3 stage that was created while setting up an Amazon S3 stage in the Snowflake account. This is written in the following format: < Database>< Schema>.","Warehouse":"The name of the Snowflake warehouse."}},"AWS::AppFlow::ConnectorProfile.TrendmicroConnectorProfileCredentials":{"attributes":{},"description":"The connector-specific profile credentials required when using Trend Micro.","properties":{"ApiSecretKey":"The Secret Access Key portion of the credentials."}},"AWS::AppFlow::ConnectorProfile.VeevaConnectorProfileCredentials":{"attributes":{},"description":"The connector-specific profile credentials required when using Veeva.","properties":{"Password":"The password that corresponds to the user name.","Username":"The name of the user."}},"AWS::AppFlow::ConnectorProfile.VeevaConnectorProfileProperties":{"attributes":{},"description":"The connector-specific profile properties required when using Veeva.","properties":{"InstanceUrl":"The location of the Veeva resource."}},"AWS::AppFlow::ConnectorProfile.ZendeskConnectorProfileCredentials":{"attributes":{},"description":"The connector-specific profile credentials required when using Zendesk.","properties":{"AccessToken":"The credentials used to access protected Zendesk resources.","ClientId":"The identifier for the desired client.","ClientSecret":"The client secret used by the OAuth client to authenticate to the authorization server.","ConnectorOAuthRequest":"Used by select connectors for which the OAuth workflow is supported, such as Salesforce, Google Analytics, Marketo, Zendesk, and Slack."}},"AWS::AppFlow::ConnectorProfile.ZendeskConnectorProfileProperties":{"attributes":{},"description":"The connector-specific profile properties required when using Zendesk.","properties":{"InstanceUrl":"The location of the Zendesk resource."}},"AWS::AppFlow::Flow":{"attributes":{"FlowArn":"The flow\'s Amazon Resource Name (ARN).","Ref":"`Ref` returns the flow name. For example:\\n\\n`{ \\"Ref\\": \\"myFlowName\\" }`"},"description":"The `AWS::AppFlow::Flow` resource is an Amazon AppFlow resource type that specifies a new flow.\\n\\n> If you want to use AWS CloudFormation to create a connector profile for connectors that implement OAuth (such as Salesforce, Slack, Zendesk, and Google Analytics), you must fetch the access and refresh tokens. You can do this by implementing your own UI for OAuth, or by retrieving the tokens from elsewhere. Alternatively, you can use the Amazon AppFlow console to create the connector profile, and then use that connector profile in the flow creation CloudFormation template.","properties":{"Description":"A user-entered description of the flow.","DestinationFlowConfigList":"The configuration that controls how Amazon AppFlow places data in the destination connector.","FlowName":"The specified name of the flow. Spaces are not allowed. Use underscores (_) or hyphens (-) only.","FlowStatus":"Sets the status of the flow. You can specify one of the following values:\\n\\n- **Active** - The flow runs based on the trigger settings that you defined. Active scheduled flows run as scheduled, and active event-triggered flows run when the specified change event occurs. However, active on-demand flows run only when you manually start them by using Amazon AppFlow.\\n- **Suspended** - You can use this option to deactivate an active flow. Scheduled and event-triggered flows will cease to run until you reactive them. This value only affects scheduled and event-triggered flows. It has no effect for on-demand flows.\\n\\nIf you omit the FlowStatus parameter, Amazon AppFlow creates the flow with a default status. The default status for on-demand flows is Active. The default status for scheduled and event-triggered flows is Draft, which means they’re not yet active.","KMSArn":"The ARN (Amazon Resource Name) of the Key Management Service (KMS) key you provide for encryption. This is required if you do not want to use the Amazon AppFlow-managed KMS key. If you don\'t provide anything here, Amazon AppFlow uses the Amazon AppFlow-managed KMS key.","MetadataCatalogConfig":"","SourceFlowConfig":"Contains information about the configuration of the source connector used in the flow.","Tags":"The tags used to organize, track, or control access for your flow.","Tasks":"A list of tasks that Amazon AppFlow performs while transferring the data in the flow run.","TriggerConfig":"The trigger settings that determine how and when Amazon AppFlow runs the specified flow."}},"AWS::AppFlow::Flow.AggregationConfig":{"attributes":{},"description":"The aggregation settings that you can use to customize the output format of your flow data.","properties":{"AggregationType":"Specifies whether Amazon AppFlow aggregates the flow records into a single file, or leave them unaggregated.","TargetFileSize":""}},"AWS::AppFlow::Flow.AmplitudeSourceProperties":{"attributes":{},"description":"The properties that are applied when Amplitude is being used as a source.","properties":{"Object":"The object specified in the Amplitude flow source."}},"AWS::AppFlow::Flow.ConnectorOperator":{"attributes":{},"description":"The operation to be performed on the provided source fields.","properties":{"Amplitude":"The operation to be performed on the provided Amplitude source fields.","CustomConnector":"Operators supported by the custom connector.","Datadog":"The operation to be performed on the provided Datadog source fields.","Dynatrace":"The operation to be performed on the provided Dynatrace source fields.","GoogleAnalytics":"The operation to be performed on the provided Google Analytics source fields.","InforNexus":"The operation to be performed on the provided Infor Nexus source fields.","Marketo":"The operation to be performed on the provided Marketo source fields.","Pardot":"","S3":"The operation to be performed on the provided Amazon S3 source fields.","SAPOData":"The operation to be performed on the provided SAPOData source fields.","Salesforce":"The operation to be performed on the provided Salesforce source fields.","ServiceNow":"The operation to be performed on the provided ServiceNow source fields.","Singular":"The operation to be performed on the provided Singular source fields.","Slack":"The operation to be performed on the provided Slack source fields.","Trendmicro":"The operation to be performed on the provided Trend Micro source fields.","Veeva":"The operation to be performed on the provided Veeva source fields.","Zendesk":"The operation to be performed on the provided Zendesk source fields."}},"AWS::AppFlow::Flow.CustomConnectorDestinationProperties":{"attributes":{},"description":"The properties that are applied when the custom connector is being used as a destination.","properties":{"CustomProperties":"The custom properties that are specific to the connector when it\'s used as a destination in the flow.","EntityName":"The entity specified in the custom connector as a destination in the flow.","ErrorHandlingConfig":"The settings that determine how Amazon AppFlow handles an error when placing data in the custom connector as destination.","IdFieldNames":"The name of the field that Amazon AppFlow uses as an ID when performing a write operation such as update, delete, or upsert.","WriteOperationType":"Specifies the type of write operation to be performed in the custom connector when it\'s used as destination."}},"AWS::AppFlow::Flow.CustomConnectorSourceProperties":{"attributes":{},"description":"The properties that are applied when the custom connector is being used as a source.","properties":{"CustomProperties":"Custom properties that are required to use the custom connector as a source.","DataTransferApi":"","EntityName":"The entity specified in the custom connector as a source in the flow."}},"AWS::AppFlow::Flow.DataTransferApi":{"attributes":{},"description":"","properties":{"Name":"","Type":""}},"AWS::AppFlow::Flow.DatadogSourceProperties":{"attributes":{},"description":"The properties that are applied when Datadog is being used as a source.","properties":{"Object":"The object specified in the Datadog flow source."}},"AWS::AppFlow::Flow.DestinationConnectorProperties":{"attributes":{},"description":"This stores the information that is required to query a particular connector.","properties":{"CustomConnector":"The properties that are required to query the custom Connector.","EventBridge":"The properties required to query Amazon EventBridge.","LookoutMetrics":"The properties required to query Amazon Lookout for Metrics.","Marketo":"The properties required to query Marketo.","Redshift":"The properties required to query Amazon Redshift.","S3":"The properties required to query Amazon S3.","SAPOData":"The properties required to query SAPOData.","Salesforce":"The properties required to query Salesforce.","Snowflake":"The properties required to query Snowflake.","Upsolver":"The properties required to query Upsolver.","Zendesk":"The properties required to query Zendesk."}},"AWS::AppFlow::Flow.DestinationFlowConfig":{"attributes":{},"description":"Contains information about the configuration of destination connectors present in the flow.","properties":{"ApiVersion":"The API version that the destination connector uses.","ConnectorProfileName":"The name of the connector profile. This name must be unique for each connector profile in the AWS account .","ConnectorType":"The type of destination connector, such as Sales force, Amazon S3, and so on.\\n\\n*Allowed Values* : `EventBridge | Redshift | S3 | Salesforce | Snowflake`","DestinationConnectorProperties":"This stores the information that is required to query a particular connector."}},"AWS::AppFlow::Flow.DynatraceSourceProperties":{"attributes":{},"description":"The properties that are applied when Dynatrace is being used as a source.","properties":{"Object":"The object specified in the Dynatrace flow source."}},"AWS::AppFlow::Flow.ErrorHandlingConfig":{"attributes":{},"description":"The settings that determine how Amazon AppFlow handles an error when placing data in the destination. For example, this setting would determine if the flow should fail after one insertion error, or continue and attempt to insert every record regardless of the initial failure. `ErrorHandlingConfig` is a part of the destination connector details.","properties":{"BucketName":"Specifies the name of the Amazon S3 bucket.","BucketPrefix":"Specifies the Amazon S3 bucket prefix.","FailOnFirstError":"Specifies if the flow should fail after the first instance of a failure when attempting to place data in the destination."}},"AWS::AppFlow::Flow.EventBridgeDestinationProperties":{"attributes":{},"description":"The properties that are applied when Amazon EventBridge is being used as a destination.","properties":{"ErrorHandlingConfig":"The object specified in the Amplitude flow source.","Object":"The object specified in the Amazon EventBridge flow destination."}},"AWS::AppFlow::Flow.GlueDataCatalog":{"attributes":{},"description":"","properties":{"DatabaseName":"","RoleArn":"","TablePrefix":""}},"AWS::AppFlow::Flow.GoogleAnalyticsSourceProperties":{"attributes":{},"description":"The properties that are applied when Google Analytics is being used as a source.","properties":{"Object":"The object specified in the Google Analytics flow source."}},"AWS::AppFlow::Flow.IncrementalPullConfig":{"attributes":{},"description":"Specifies the configuration used when importing incremental records from the source.","properties":{"DatetimeTypeFieldName":"A field that specifies the date time or timestamp field as the criteria to use when importing incremental records from the source."}},"AWS::AppFlow::Flow.InforNexusSourceProperties":{"attributes":{},"description":"The properties that are applied when Infor Nexus is being used as a source.","properties":{"Object":"The object specified in the Infor Nexus flow source."}},"AWS::AppFlow::Flow.LookoutMetricsDestinationProperties":{"attributes":{},"description":"The properties that are applied when Amazon Lookout for Metrics is used as a destination.","properties":{"Object":"The object specified in the Amazon Lookout for Metrics flow destination."}},"AWS::AppFlow::Flow.MarketoDestinationProperties":{"attributes":{},"description":"The properties that Amazon AppFlow applies when you use Marketo as a flow destination.","properties":{"ErrorHandlingConfig":"The settings that determine how Amazon AppFlow handles an error when placing data in the destination. For example, this setting would determine if the flow should fail after one insertion error, or continue and attempt to insert every record regardless of the initial failure. `ErrorHandlingConfig` is a part of the destination connector details.","Object":"The object specified in the Marketo flow destination."}},"AWS::AppFlow::Flow.MarketoSourceProperties":{"attributes":{},"description":"The properties that are applied when Marketo is being used as a source.","properties":{"Object":"The object specified in the Marketo flow source."}},"AWS::AppFlow::Flow.MetadataCatalogConfig":{"attributes":{},"description":"","properties":{"GlueDataCatalog":""}},"AWS::AppFlow::Flow.PardotSourceProperties":{"attributes":{},"description":"","properties":{"Object":""}},"AWS::AppFlow::Flow.PrefixConfig":{"attributes":{},"description":"Specifies elements that Amazon AppFlow includes in the file and folder names in the flow destination.","properties":{"PathPrefixHierarchy":"","PrefixFormat":"Determines the level of granularity for the date and time that\'s included in the prefix.","PrefixType":"Determines the format of the prefix, and whether it applies to the file name, file path, or both."}},"AWS::AppFlow::Flow.RedshiftDestinationProperties":{"attributes":{},"description":"The properties that are applied when Amazon Redshift is being used as a destination.","properties":{"BucketPrefix":"The object key for the bucket in which Amazon AppFlow places the destination files.","ErrorHandlingConfig":"The settings that determine how Amazon AppFlow handles an error when placing data in the Amazon Redshift destination. For example, this setting would determine if the flow should fail after one insertion error, or continue and attempt to insert every record regardless of the initial failure. `ErrorHandlingConfig` is a part of the destination connector details.","IntermediateBucketName":"The intermediate bucket that Amazon AppFlow uses when moving data into Amazon Redshift.","Object":"The object specified in the Amazon Redshift flow destination."}},"AWS::AppFlow::Flow.S3DestinationProperties":{"attributes":{},"description":"The properties that are applied when Amazon S3 is used as a destination.","properties":{"BucketName":"The Amazon S3 bucket name in which Amazon AppFlow places the transferred data.","BucketPrefix":"The object key for the destination bucket in which Amazon AppFlow places the files.","S3OutputFormatConfig":"The configuration that determines how Amazon AppFlow should format the flow output data when Amazon S3 is used as the destination."}},"AWS::AppFlow::Flow.S3InputFormatConfig":{"attributes":{},"description":"When you use Amazon S3 as the source, the configuration format that you provide the flow input data.","properties":{"S3InputFileType":"The file type that Amazon AppFlow gets from your Amazon S3 bucket."}},"AWS::AppFlow::Flow.S3OutputFormatConfig":{"attributes":{},"description":"The configuration that determines how Amazon AppFlow should format the flow output data when Amazon S3 is used as the destination.","properties":{"AggregationConfig":"The aggregation settings that you can use to customize the output format of your flow data.","FileType":"Indicates the file type that Amazon AppFlow places in the Amazon S3 bucket.","PrefixConfig":"Determines the prefix that Amazon AppFlow applies to the folder name in the Amazon S3 bucket. You can name folders according to the flow frequency and date.","PreserveSourceDataTyping":""}},"AWS::AppFlow::Flow.S3SourceProperties":{"attributes":{},"description":"The properties that are applied when Amazon S3 is being used as the flow source.","properties":{"BucketName":"The Amazon S3 bucket name where the source files are stored.","BucketPrefix":"The object key for the Amazon S3 bucket in which the source files are stored.","S3InputFormatConfig":"When you use Amazon S3 as the source, the configuration format that you provide the flow input data."}},"AWS::AppFlow::Flow.SAPODataDestinationProperties":{"attributes":{},"description":"The properties that are applied when using SAPOData as a flow destination","properties":{"ErrorHandlingConfig":"The settings that determine how Amazon AppFlow handles an error when placing data in the destination. For example, this setting would determine if the flow should fail after one insertion error, or continue and attempt to insert every record regardless of the initial failure. `ErrorHandlingConfig` is a part of the destination connector details.","IdFieldNames":"A list of field names that can be used as an ID field when performing a write operation.","ObjectPath":"The object path specified in the SAPOData flow destination.","SuccessResponseHandlingConfig":"Determines how Amazon AppFlow handles the success response that it gets from the connector after placing data.\\n\\nFor example, this setting would determine where to write the response from a destination connector upon a successful insert operation.","WriteOperationType":"The possible write operations in the destination connector. When this value is not provided, this defaults to the `INSERT` operation."}},"AWS::AppFlow::Flow.SAPODataSourceProperties":{"attributes":{},"description":"The properties that are applied when using SAPOData as a flow source.","properties":{"ObjectPath":"The object path specified in the SAPOData flow source."}},"AWS::AppFlow::Flow.SalesforceDestinationProperties":{"attributes":{},"description":"The properties that are applied when Salesforce is being used as a destination.","properties":{"DataTransferApi":"Specifies which Salesforce API is used by Amazon AppFlow when your flow transfers data to Salesforce.\\n\\n- **AUTOMATIC** - The default. Amazon AppFlow selects which API to use based on the number of records that your flow transfers to Salesforce. If your flow transfers fewer than 1,000 records, Amazon AppFlow uses Salesforce REST API. If your flow transfers 1,000 records or more, Amazon AppFlow uses Salesforce Bulk API 2.0.\\n\\nEach of these Salesforce APIs structures data differently. If Amazon AppFlow selects the API automatically, be aware that, for recurring flows, the data output might vary from one flow run to the next. For example, if a flow runs daily, it might use REST API on one day to transfer 900 records, and it might use Bulk API 2.0 on the next day to transfer 1,100 records. For each of these flow runs, the respective Salesforce API formats the data differently. Some of the differences include how dates are formatted and null values are represented. Also, Bulk API 2.0 doesn\'t transfer Salesforce compound fields.\\n\\nBy choosing this option, you optimize flow performance for both small and large data transfers, but the tradeoff is inconsistent formatting in the output.\\n- **BULKV2** - Amazon AppFlow uses only Salesforce Bulk API 2.0. This API runs asynchronous data transfers, and it\'s optimal for large sets of data. By choosing this option, you ensure that your flow writes consistent output, but you optimize performance only for large data transfers.\\n\\nNote that Bulk API 2.0 does not transfer Salesforce compound fields.\\n- **REST_SYNC** - Amazon AppFlow uses only Salesforce REST API. By choosing this option, you ensure that your flow writes consistent output, but you decrease performance for large data transfers that are better suited for Bulk API 2.0. In some cases, if your flow attempts to transfer a vary large set of data, it might fail with a timed out error.","ErrorHandlingConfig":"The settings that determine how Amazon AppFlow handles an error when placing data in the Salesforce destination. For example, this setting would determine if the flow should fail after one insertion error, or continue and attempt to insert every record regardless of the initial failure. `ErrorHandlingConfig` is a part of the destination connector details.","IdFieldNames":"The name of the field that Amazon AppFlow uses as an ID when performing a write operation such as update or delete.","Object":"The object specified in the Salesforce flow destination.","WriteOperationType":"This specifies the type of write operation to be performed in Salesforce. When the value is `UPSERT` , then `idFieldNames` is required."}},"AWS::AppFlow::Flow.SalesforceSourceProperties":{"attributes":{},"description":"The properties that are applied when Salesforce is being used as a source.","properties":{"DataTransferApi":"Specifies which Salesforce API is used by Amazon AppFlow when your flow transfers data from Salesforce.\\n\\n- **AUTOMATIC** - The default. Amazon AppFlow selects which API to use based on the number of records that your flow transfers from Salesforce. If your flow transfers fewer than 1,000,000 records, Amazon AppFlow uses Salesforce REST API. If your flow transfers 1,000,000 records or more, Amazon AppFlow uses Salesforce Bulk API 2.0.\\n\\nEach of these Salesforce APIs structures data differently. If Amazon AppFlow selects the API automatically, be aware that, for recurring flows, the data output might vary from one flow run to the next. For example, if a flow runs daily, it might use REST API on one day to transfer 900,000 records, and it might use Bulk API 2.0 on the next day to transfer 1,100,000 records. For each of these flow runs, the respective Salesforce API formats the data differently. Some of the differences include how dates are formatted and null values are represented. Also, Bulk API 2.0 doesn\'t transfer Salesforce compound fields.\\n\\nBy choosing this option, you optimize flow performance for both small and large data transfers, but the tradeoff is inconsistent formatting in the output.\\n- **BULKV2** - Amazon AppFlow uses only Salesforce Bulk API 2.0. This API runs asynchronous data transfers, and it\'s optimal for large sets of data. By choosing this option, you ensure that your flow writes consistent output, but you optimize performance only for large data transfers.\\n\\nNote that Bulk API 2.0 does not transfer Salesforce compound fields.\\n- **REST_SYNC** - Amazon AppFlow uses only Salesforce REST API. By choosing this option, you ensure that your flow writes consistent output, but you decrease performance for large data transfers that are better suited for Bulk API 2.0. In some cases, if your flow attempts to transfer a vary large set of data, it might fail wituh a timed out error.","EnableDynamicFieldUpdate":"The flag that enables dynamic fetching of new (recently added) fields in the Salesforce objects while running a flow.","IncludeDeletedRecords":"Indicates whether Amazon AppFlow includes deleted files in the flow run.","Object":"The object specified in the Salesforce flow source."}},"AWS::AppFlow::Flow.ScheduledTriggerProperties":{"attributes":{},"description":"Specifies the configuration details of a schedule-triggered flow as defined by the user. Currently, these settings only apply to the `Scheduled` trigger type.","properties":{"DataPullMode":"Specifies whether a scheduled flow has an incremental data transfer or a complete data transfer for each flow run.","FirstExecutionFrom":"Specifies the date range for the records to import from the connector in the first flow run.","FlowErrorDeactivationThreshold":"","ScheduleEndTime":"The time at which the scheduled flow ends. The time is formatted as a timestamp that follows the ISO 8601 standard, such as `2022-04-27T13:00:00-07:00` .","ScheduleExpression":"The scheduling expression that determines the rate at which the schedule will run, for example `rate(5minutes)` .","ScheduleOffset":"Specifies the optional offset that is added to the time interval for a schedule-triggered flow.","ScheduleStartTime":"The time at which the scheduled flow starts. The time is formatted as a timestamp that follows the ISO 8601 standard, such as `2022-04-26T13:00:00-07:00` .","TimeZone":"Specifies the time zone used when referring to the dates and times of a scheduled flow, such as `America/New_York` . This time zone is only a descriptive label. It doesn\'t affect how Amazon AppFlow interprets the timestamps that you specify to schedule the flow.\\n\\nIf you want to schedule a flow by using times in a particular time zone, indicate the time zone as a UTC offset in your timestamps. For example, the UTC offsets for the `America/New_York` timezone are `-04:00` EDT and `-05:00 EST` ."}},"AWS::AppFlow::Flow.ServiceNowSourceProperties":{"attributes":{},"description":"The properties that are applied when ServiceNow is being used as a source.","properties":{"Object":"The object specified in the ServiceNow flow source."}},"AWS::AppFlow::Flow.SingularSourceProperties":{"attributes":{},"description":"The properties that are applied when Singular is being used as a source.","properties":{"Object":"The object specified in the Singular flow source."}},"AWS::AppFlow::Flow.SlackSourceProperties":{"attributes":{},"description":"The properties that are applied when Slack is being used as a source.","properties":{"Object":"The object specified in the Slack flow source."}},"AWS::AppFlow::Flow.SnowflakeDestinationProperties":{"attributes":{},"description":"The properties that are applied when Snowflake is being used as a destination.","properties":{"BucketPrefix":"The object key for the destination bucket in which Amazon AppFlow places the files.","ErrorHandlingConfig":"The settings that determine how Amazon AppFlow handles an error when placing data in the Snowflake destination. For example, this setting would determine if the flow should fail after one insertion error, or continue and attempt to insert every record regardless of the initial failure. `ErrorHandlingConfig` is a part of the destination connector details.","IntermediateBucketName":"The intermediate bucket that Amazon AppFlow uses when moving data into Snowflake.","Object":"The object specified in the Snowflake flow destination."}},"AWS::AppFlow::Flow.SourceConnectorProperties":{"attributes":{},"description":"Specifies the information that is required to query a particular connector.","properties":{"Amplitude":"Specifies the information that is required for querying Amplitude.","CustomConnector":"The properties that are applied when the custom connector is being used as a source.","Datadog":"Specifies the information that is required for querying Datadog.","Dynatrace":"Specifies the information that is required for querying Dynatrace.","GoogleAnalytics":"Specifies the information that is required for querying Google Analytics.","InforNexus":"Specifies the information that is required for querying Infor Nexus.","Marketo":"Specifies the information that is required for querying Marketo.","Pardot":"","S3":"Specifies the information that is required for querying Amazon S3.","SAPOData":"The properties that are applied when using SAPOData as a flow source.","Salesforce":"Specifies the information that is required for querying Salesforce.","ServiceNow":"Specifies the information that is required for querying ServiceNow.","Singular":"Specifies the information that is required for querying Singular.","Slack":"Specifies the information that is required for querying Slack.","Trendmicro":"Specifies the information that is required for querying Trend Micro.","Veeva":"Specifies the information that is required for querying Veeva.","Zendesk":"Specifies the information that is required for querying Zendesk."}},"AWS::AppFlow::Flow.SourceFlowConfig":{"attributes":{},"description":"Contains information about the configuration of the source connector used in the flow.","properties":{"ApiVersion":"The API version of the connector when it\'s used as a source in the flow.","ConnectorProfileName":"The name of the connector profile. This name must be unique for each connector profile in the AWS account .","ConnectorType":"The type of connector, such as Salesforce, Amplitude, and so on.","IncrementalPullConfig":"Defines the configuration for a scheduled incremental data pull. If a valid configuration is provided, the fields specified in the configuration are used when querying for the incremental data pull.","SourceConnectorProperties":"Specifies the information that is required to query a particular source connector."}},"AWS::AppFlow::Flow.SuccessResponseHandlingConfig":{"attributes":{},"description":"Determines how Amazon AppFlow handles the success response that it gets from the connector after placing data.\\n\\nFor example, this setting would determine where to write the response from the destination connector upon a successful insert operation.","properties":{"BucketName":"The name of the Amazon S3 bucket.","BucketPrefix":"The Amazon S3 bucket prefix."}},"AWS::AppFlow::Flow.Task":{"attributes":{},"description":"A class for modeling different type of tasks. Task implementation varies based on the `TaskType` .","properties":{"ConnectorOperator":"The operation to be performed on the provided source fields.","DestinationField":"A field in a destination connector, or a field value against which Amazon AppFlow validates a source field.","SourceFields":"The source fields to which a particular task is applied.","TaskProperties":"A map used to store task-related information. The execution service looks for particular information based on the `TaskType` .","TaskType":"Specifies the particular task implementation that Amazon AppFlow performs.\\n\\n*Allowed values* : `Arithmetic` | `Filter` | `Map` | `Map_all` | `Mask` | `Merge` | `Truncate` | `Validate`"}},"AWS::AppFlow::Flow.TaskPropertiesObject":{"attributes":{},"description":"A map used to store task-related information. The execution service looks for particular information based on the `TaskType` .","properties":{"Key":"The task property key.\\n\\n*Allowed Values* : `VALUE | VALUES | DATA_TYPE | UPPER_BOUND | LOWER_BOUND | SOURCE_DATA_TYPE | DESTINATION_DATA_TYPE | VALIDATION_ACTION | MASK_VALUE | MASK_LENGTH | TRUNCATE_LENGTH | MATH_OPERATION_FIELDS_ORDER | CONCAT_FORMAT | SUBFIELD_CATEGORY_MAP` | `EXCLUDE_SOURCE_FIELDS_LIST`","Value":"The task property value."}},"AWS::AppFlow::Flow.TrendmicroSourceProperties":{"attributes":{},"description":"The properties that are applied when using Trend Micro as a flow source.","properties":{"Object":"The object specified in the Trend Micro flow source."}},"AWS::AppFlow::Flow.TriggerConfig":{"attributes":{},"description":"The trigger settings that determine how and when Amazon AppFlow runs the specified flow.","properties":{"TriggerProperties":"Specifies the configuration details of a schedule-triggered flow as defined by the user. Currently, these settings only apply to the `Scheduled` trigger type.","TriggerType":"Specifies the type of flow trigger. This can be `OnDemand` , `Scheduled` , or `Event` ."}},"AWS::AppFlow::Flow.UpsolverDestinationProperties":{"attributes":{},"description":"The properties that are applied when Upsolver is used as a destination.","properties":{"BucketName":"The Upsolver Amazon S3 bucket name in which Amazon AppFlow places the transferred data.","BucketPrefix":"The object key for the destination Upsolver Amazon S3 bucket in which Amazon AppFlow places the files.","S3OutputFormatConfig":"The configuration that determines how data is formatted when Upsolver is used as the flow destination."}},"AWS::AppFlow::Flow.UpsolverS3OutputFormatConfig":{"attributes":{},"description":"The configuration that determines how Amazon AppFlow formats the flow output data when Upsolver is used as the destination.","properties":{"AggregationConfig":"The aggregation settings that you can use to customize the output format of your flow data.","FileType":"Indicates the file type that Amazon AppFlow places in the Upsolver Amazon S3 bucket.","PrefixConfig":"Specifies elements that Amazon AppFlow includes in the file and folder names in the flow destination."}},"AWS::AppFlow::Flow.VeevaSourceProperties":{"attributes":{},"description":"The properties that are applied when using Veeva as a flow source.","properties":{"DocumentType":"The document type specified in the Veeva document extract flow.","IncludeAllVersions":"Boolean value to include All Versions of files in Veeva document extract flow.","IncludeRenditions":"Boolean value to include file renditions in Veeva document extract flow.","IncludeSourceFiles":"Boolean value to include source files in Veeva document extract flow.","Object":"The object specified in the Veeva flow source."}},"AWS::AppFlow::Flow.ZendeskDestinationProperties":{"attributes":{},"description":"The properties that are applied when Zendesk is used as a destination.","properties":{"ErrorHandlingConfig":"The settings that determine how Amazon AppFlow handles an error when placing data in the destination. For example, this setting would determine if the flow should fail after one insertion error, or continue and attempt to insert every record regardless of the initial failure. `ErrorHandlingConfig` is a part of the destination connector details.","IdFieldNames":"A list of field names that can be used as an ID field when performing a write operation.","Object":"The object specified in the Zendesk flow destination.","WriteOperationType":"The possible write operations in the destination connector. When this value is not provided, this defaults to the `INSERT` operation."}},"AWS::AppFlow::Flow.ZendeskSourceProperties":{"attributes":{},"description":"The properties that are applied when using Zendesk as a flow source.","properties":{"Object":"The object specified in the Zendesk flow source."}},"AWS::AppIntegrations::DataIntegration":{"attributes":{"DataIntegrationArn":"The Amazon Resource Name (ARN) for the DataIntegration.","Id":"A unique identifier.","Ref":"`Ref` returns the DataIntegration name. For example:\\n\\n`{ \\"Ref\\": \\"myDataIntegrationName\\" }`"},"description":"Creates and persists a DataIntegration resource.","properties":{"Description":"A description of the DataIntegration.","FileConfiguration":"","KmsKey":"The KMS key for the DataIntegration.","Name":"The name of the DataIntegration.","ObjectConfiguration":"","ScheduleConfig":"The name of the data and how often it should be pulled from the source.","SourceURI":"The URI of the data source.","Tags":"An array of key-value pairs to apply to this resource.\\n\\nFor more information, see [Tag](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-resource-tags.html) ."}},"AWS::AppIntegrations::DataIntegration.FileConfiguration":{"attributes":{},"description":"","properties":{"Filters":"","Folders":""}},"AWS::AppIntegrations::DataIntegration.ScheduleConfig":{"attributes":{},"description":"The name of the data and how often it should be pulled from the source.","properties":{"FirstExecutionFrom":"The start date for objects to import in the first flow run as an Unix/epoch timestamp in milliseconds or in ISO-8601 format.","Object":"The name of the object to pull from the data source.","ScheduleExpression":"How often the data should be pulled from data source."}},"AWS::AppIntegrations::EventIntegration":{"attributes":{"EventIntegrationArn":"The Amazon Resource Name (ARN) of the event integration.","Ref":"`Ref` returns the EventIntegration name. For example:\\n\\n`{ \\"Ref\\": \\"myEventIntegrationName\\" }`"},"description":"Creates an event integration. You provide a name, description, and a reference to an Amazon EventBridge bus in your account and a partner event source that will push events to that bus. No objects are created in your account, only metadata that is persisted on the EventIntegration control plane.","properties":{"Description":"The event integration description.","EventBridgeBus":"The Amazon EventBridge bus for the event integration.","EventFilter":"The event integration filter.","Name":"The name of the event integration.","Tags":"An array of key-value pairs to apply to this resource.\\n\\nFor more information, see [Tag](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-resource-tags.html) ."}},"AWS::AppIntegrations::EventIntegration.EventFilter":{"attributes":{},"description":"The event integration filter.","properties":{"Source":"The source of the events."}},"AWS::AppMesh::GatewayRoute":{"attributes":{"Arn":"The full Amazon Resource Name (ARN) for the gateway route.","GatewayRouteName":"The name of the gateway route.","MeshName":"The name of the service mesh that the gateway route resides in.","MeshOwner":"The AWS IAM account ID of the service mesh owner. If the account ID is not your own, then it\'s the ID of the account that shared the mesh with your account. For more information about mesh sharing, see [Working with Shared Meshes](https://docs.aws.amazon.com/app-mesh/latest/userguide/sharing.html) .","Ref":"`Ref` returns the resource ARN. For example:\\n\\n`{ \\"Ref\\": \\"myGatewayRoute\\" }`\\n\\nWhen you pass the logical ID of an `AWS::AppMesh::GatewayRoute` resource to the intrinsic Ref function, the function returns the gateway route ARN, such as `arn:aws:appmesh: *us-east-1* : *555555555555* :gatewayRoute/ *myGatewayRoute*` .","ResourceOwner":"The IAM account ID of the resource owner. If the account ID is not your own, then it\'s the ID of the mesh owner or of another account that the mesh is shared with. For more information about mesh sharing, see [Working with Shared Meshes](https://docs.aws.amazon.com/app-mesh/latest/userguide/sharing.html) .","Uid":"The unique identifier for the gateway route.","VirtualGatewayName":"The name of the virtual gateway that the gateway route is associated with."},"description":"Creates a gateway route.\\n\\nA gateway route is attached to a virtual gateway and routes traffic to an existing virtual service. If a route matches a request, it can distribute traffic to a target virtual service.\\n\\nFor more information about gateway routes, see [Gateway routes](https://docs.aws.amazon.com/app-mesh/latest/userguide/gateway-routes.html) .","properties":{"GatewayRouteName":"The name of the gateway route.","MeshName":"The name of the service mesh that the resource resides in.","MeshOwner":"The AWS IAM account ID of the service mesh owner. If the account ID is not your own, then it\'s the ID of the account that shared the mesh with your account. For more information about mesh sharing, see [Working with shared meshes](https://docs.aws.amazon.com/app-mesh/latest/userguide/sharing.html) .","Spec":"The specifications of the gateway route.","Tags":"Optional metadata that you can apply to the gateway route to assist with categorization and organization. Each tag consists of a key and an optional value, both of which you define. Tag keys can have a maximum character length of 128 characters, and tag values can have a maximum length of 256 characters.","VirtualGatewayName":"The virtual gateway that the gateway route is associated with."}},"AWS::AppMesh::GatewayRoute.GatewayRouteHostnameMatch":{"attributes":{},"description":"An object representing the gateway route host name to match.","properties":{"Exact":"The exact host name to match on.","Suffix":"The specified ending characters of the host name to match on."}},"AWS::AppMesh::GatewayRoute.GatewayRouteHostnameRewrite":{"attributes":{},"description":"An object representing the gateway route host name to rewrite.","properties":{"DefaultTargetHostname":"The default target host name to write to."}},"AWS::AppMesh::GatewayRoute.GatewayRouteMetadataMatch":{"attributes":{},"description":"An object representing the method header to be matched.","properties":{"Exact":"The exact method header to be matched on.","Prefix":"The specified beginning characters of the method header to be matched on.","Range":"An object that represents the range of values to match on.","Regex":"The regex used to match the method header.","Suffix":"The specified ending characters of the method header to match on."}},"AWS::AppMesh::GatewayRoute.GatewayRouteRangeMatch":{"attributes":{},"description":"An object that represents the range of values to match on. The first character of the range is included in the range, though the last character is not. For example, if the range specified were 1-100, only values 1-99 would be matched.","properties":{"End":"The end of the range.","Start":"The start of the range."}},"AWS::AppMesh::GatewayRoute.GatewayRouteSpec":{"attributes":{},"description":"An object that represents a gateway route specification. Specify one gateway route type.","properties":{"GrpcRoute":"An object that represents the specification of a gRPC gateway route.","Http2Route":"An object that represents the specification of an HTTP/2 gateway route.","HttpRoute":"An object that represents the specification of an HTTP gateway route.","Priority":"The ordering of the gateway routes spec."}},"AWS::AppMesh::GatewayRoute.GatewayRouteTarget":{"attributes":{},"description":"An object that represents a gateway route target.","properties":{"Port":"The port number of the gateway route target.","VirtualService":"An object that represents a virtual service gateway route target."}},"AWS::AppMesh::GatewayRoute.GatewayRouteVirtualService":{"attributes":{},"description":"An object that represents the virtual service that traffic is routed to.","properties":{"VirtualServiceName":"The name of the virtual service that traffic is routed to."}},"AWS::AppMesh::GatewayRoute.GrpcGatewayRoute":{"attributes":{},"description":"An object that represents a gRPC gateway route.","properties":{"Action":"An object that represents the action to take if a match is determined.","Match":"An object that represents the criteria for determining a request match."}},"AWS::AppMesh::GatewayRoute.GrpcGatewayRouteAction":{"attributes":{},"description":"An object that represents the action to take if a match is determined.","properties":{"Rewrite":"The gateway route action to rewrite.","Target":"An object that represents the target that traffic is routed to when a request matches the gateway route."}},"AWS::AppMesh::GatewayRoute.GrpcGatewayRouteMatch":{"attributes":{},"description":"An object that represents the criteria for determining a request match.","properties":{"Hostname":"The gateway route host name to be matched on.","Metadata":"The gateway route metadata to be matched on.","Port":"The gateway route port to be matched on.","ServiceName":"The fully qualified domain name for the service to match from the request."}},"AWS::AppMesh::GatewayRoute.GrpcGatewayRouteMetadata":{"attributes":{},"description":"An object representing the metadata of the gateway route.","properties":{"Invert":"Specify `True` to match anything except the match criteria. The default value is `False` .","Match":"The criteria for determining a metadata match.","Name":"A name for the gateway route metadata."}},"AWS::AppMesh::GatewayRoute.GrpcGatewayRouteRewrite":{"attributes":{},"description":"An object that represents the gateway route to rewrite.","properties":{"Hostname":"The host name of the gateway route to rewrite."}},"AWS::AppMesh::GatewayRoute.HttpGatewayRoute":{"attributes":{},"description":"An object that represents an HTTP gateway route.","properties":{"Action":"An object that represents the action to take if a match is determined.","Match":"An object that represents the criteria for determining a request match."}},"AWS::AppMesh::GatewayRoute.HttpGatewayRouteAction":{"attributes":{},"description":"An object that represents the action to take if a match is determined.","properties":{"Rewrite":"The gateway route action to rewrite.","Target":"An object that represents the target that traffic is routed to when a request matches the gateway route."}},"AWS::AppMesh::GatewayRoute.HttpGatewayRouteHeader":{"attributes":{},"description":"An object that represents the HTTP header in the gateway route.","properties":{"Invert":"Specify `True` to match anything except the match criteria. The default value is `False` .","Match":"An object that represents the method and value to match with the header value sent in a request. Specify one match method.","Name":"A name for the HTTP header in the gateway route that will be matched on."}},"AWS::AppMesh::GatewayRoute.HttpGatewayRouteHeaderMatch":{"attributes":{},"description":"An object that represents the method and value to match with the header value sent in a request. Specify one match method.","properties":{"Exact":"The value sent by the client must match the specified value exactly.","Prefix":"The value sent by the client must begin with the specified characters.","Range":"An object that represents the range of values to match on.","Regex":"The value sent by the client must include the specified characters.","Suffix":"The value sent by the client must end with the specified characters."}},"AWS::AppMesh::GatewayRoute.HttpGatewayRouteMatch":{"attributes":{},"description":"An object that represents the criteria for determining a request match.","properties":{"Headers":"The client request headers to match on.","Hostname":"The host name to match on.","Method":"The method to match on.","Path":"The path to match on.","Port":"The port number to match on.","Prefix":"Specifies the path to match requests with. This parameter must always start with `/` , which by itself matches all requests to the virtual service name. You can also match for path-based routing of requests. For example, if your virtual service name is `my-service.local` and you want the route to match requests to `my-service.local/metrics` , your prefix should be `/metrics` .","QueryParameters":"The query parameter to match on."}},"AWS::AppMesh::GatewayRoute.HttpGatewayRoutePathRewrite":{"attributes":{},"description":"An object that represents the path to rewrite.","properties":{"Exact":"The exact path to rewrite."}},"AWS::AppMesh::GatewayRoute.HttpGatewayRoutePrefixRewrite":{"attributes":{},"description":"An object representing the beginning characters of the route to rewrite.","properties":{"DefaultPrefix":"The default prefix used to replace the incoming route prefix when rewritten.","Value":"The value used to replace the incoming route prefix when rewritten."}},"AWS::AppMesh::GatewayRoute.HttpGatewayRouteRewrite":{"attributes":{},"description":"An object representing the gateway route to rewrite.","properties":{"Hostname":"The host name to rewrite.","Path":"The path to rewrite.","Prefix":"The specified beginning characters to rewrite."}},"AWS::AppMesh::GatewayRoute.HttpPathMatch":{"attributes":{},"description":"An object representing the path to match in the request.","properties":{"Exact":"The exact path to match on.","Regex":"The regex used to match the path."}},"AWS::AppMesh::GatewayRoute.HttpQueryParameterMatch":{"attributes":{},"description":"An object representing the query parameter to match.","properties":{"Exact":"The exact query parameter to match on."}},"AWS::AppMesh::GatewayRoute.QueryParameter":{"attributes":{},"description":"An object that represents the query parameter in the request.","properties":{"Match":"The query parameter to match on.","Name":"A name for the query parameter that will be matched on."}},"AWS::AppMesh::Mesh":{"attributes":{"Arn":"The full Amazon Resource Name (ARN) for the mesh.","MeshName":"The name of the service mesh.","MeshOwner":"The IAM account ID of the service mesh owner. If the account ID is not your own, then it\'s the ID of the account that shared the mesh with your account. For more information about mesh sharing, see [Working with Shared Meshes](https://docs.aws.amazon.com/app-mesh/latest/userguide/sharing.html) .","Ref":"`Ref` returns the resource ARN. For example:\\n\\n`{ \\"Ref\\": \\"myMesh\\" }`\\n\\nWhen you pass the logical ID of an `AWS::AppMesh::Mesh` resource to the intrinsic Ref function, the function returns the mesh ARN, such as `arn:aws:appmesh: *us-east-1* : *555555555555* :mesh/ *myMesh*` .","ResourceOwner":"The IAM account ID of the resource owner. If the account ID is not your own, then it\'s the ID of the mesh owner or of another account that the mesh is shared with. For more information about mesh sharing, see [Working with Shared Meshes](https://docs.aws.amazon.com/app-mesh/latest/userguide/sharing.html) .","Uid":"The unique identifier for the mesh."},"description":"Creates a service mesh.\\n\\nA service mesh is a logical boundary for network traffic between services that are represented by resources within the mesh. After you create your service mesh, you can create virtual services, virtual nodes, virtual routers, and routes to distribute traffic between the applications in your mesh.\\n\\nFor more information about service meshes, see [Service meshes](https://docs.aws.amazon.com/app-mesh/latest/userguide/meshes.html) .","properties":{"MeshName":"The name to use for the service mesh.","Spec":"The service mesh specification to apply.","Tags":"Optional metadata that you can apply to the service mesh to assist with categorization and organization. Each tag consists of a key and an optional value, both of which you define. Tag keys can have a maximum character length of 128 characters, and tag values can have a maximum length of 256 characters."}},"AWS::AppMesh::Mesh.EgressFilter":{"attributes":{},"description":"An object that represents the egress filter rules for a service mesh.","properties":{"Type":"The egress filter type. By default, the type is `DROP_ALL` , which allows egress only from virtual nodes to other defined resources in the service mesh (and any traffic to `*.amazonaws.com` for AWS API calls). You can set the egress filter type to `ALLOW_ALL` to allow egress to any endpoint inside or outside of the service mesh.\\n\\n> If you specify any backends on a virtual node when using `ALLOW_ALL` , you must specifiy all egress for that virtual node as backends. Otherwise, `ALLOW_ALL` will no longer work for that virtual node."}},"AWS::AppMesh::Mesh.MeshServiceDiscovery":{"attributes":{},"description":"An object that represents the service discovery information for a service mesh.","properties":{"IpPreference":"The IP version to use to control traffic within the mesh."}},"AWS::AppMesh::Mesh.MeshSpec":{"attributes":{},"description":"An object that represents the specification of a service mesh.","properties":{"EgressFilter":"The egress filter rules for the service mesh.","ServiceDiscovery":""}},"AWS::AppMesh::Route":{"attributes":{"Arn":"The full Amazon Resource Name (ARN) for the route.","MeshName":"The name of the service mesh that the route resides in.","MeshOwner":"The AWS IAM account ID of the service mesh owner. If the account ID is not your own, then it\'s the ID of the account that shared the mesh with your account. For more information about mesh sharing, see [Working with Shared Meshes](https://docs.aws.amazon.com/app-mesh/latest/userguide/sharing.html) .","Ref":"`Ref` returns the resource ARN. For example:\\n\\n`{ \\"Ref\\": \\"myRoute\\" }`\\n\\nWhen you pass the logical ID of an `AWS::AppMesh::Route` resource to the intrinsic Ref function, the function returns the route ARN, such as `arn:aws:appmesh: *us-east-1* : *555555555555* :route/ *myRoute*` .","ResourceOwner":"The AWS IAM account ID of the resource owner. If the account ID is not your own, then it\'s the ID of the mesh owner or of another account that the mesh is shared with. For more information about mesh sharing, see [Working with Shared Meshes](https://docs.aws.amazon.com/app-mesh/latest/userguide/sharing.html) .","RouteName":"The name of the route.","Uid":"The unique identifier for the route.","VirtualRouterName":"The name of the virtual router that the route is associated with."},"description":"Creates a route that is associated with a virtual router.\\n\\nYou can route several different protocols and define a retry policy for a route. Traffic can be routed to one or more virtual nodes.\\n\\nFor more information about routes, see [Routes](https://docs.aws.amazon.com/app-mesh/latest/userguide/routes.html) .","properties":{"MeshName":"The name of the service mesh to create the route in.","MeshOwner":"The AWS IAM account ID of the service mesh owner. If the account ID is not your own, then the account that you specify must share the mesh with your account before you can create the resource in the service mesh. For more information about mesh sharing, see [Working with shared meshes](https://docs.aws.amazon.com/app-mesh/latest/userguide/sharing.html) .","RouteName":"The name to use for the route.","Spec":"The route specification to apply.","Tags":"Optional metadata that you can apply to the route to assist with categorization and organization. Each tag consists of a key and an optional value, both of which you define. Tag keys can have a maximum character length of 128 characters, and tag values can have a maximum length of 256 characters.","VirtualRouterName":"The name of the virtual router in which to create the route. If the virtual router is in a shared mesh, then you must be the owner of the virtual router resource."}},"AWS::AppMesh::Route.Duration":{"attributes":{},"description":"An object that represents a duration of time.","properties":{"Unit":"A unit of time.","Value":"A number of time units."}},"AWS::AppMesh::Route.GrpcRetryPolicy":{"attributes":{},"description":"An object that represents a retry policy. Specify at least one value for at least one of the types of `RetryEvents` , a value for `maxRetries` , and a value for `perRetryTimeout` . Both `server-error` and `gateway-error` under `httpRetryEvents` include the Envoy `reset` policy. For more information on the `reset` policy, see the [Envoy documentation](https://docs.aws.amazon.com/https://www.envoyproxy.io/docs/envoy/latest/configuration/http/http_filters/router_filter#x-envoy-retry-on) .","properties":{"GrpcRetryEvents":"Specify at least one of the valid values.","HttpRetryEvents":"Specify at least one of the following values.\\n\\n- *server-error* – HTTP status codes 500, 501, 502, 503, 504, 505, 506, 507, 508, 510, and 511\\n- *gateway-error* – HTTP status codes 502, 503, and 504\\n- *client-error* – HTTP status code 409\\n- *stream-error* – Retry on refused stream","MaxRetries":"The maximum number of retry attempts.","PerRetryTimeout":"The timeout for each retry attempt.","TcpRetryEvents":"Specify a valid value. The event occurs before any processing of a request has started and is encountered when the upstream is temporarily or permanently unavailable."}},"AWS::AppMesh::Route.GrpcRoute":{"attributes":{},"description":"An object that represents a gRPC route type.","properties":{"Action":"An object that represents the action to take if a match is determined.","Match":"An object that represents the criteria for determining a request match.","RetryPolicy":"An object that represents a retry policy.","Timeout":"An object that represents types of timeouts."}},"AWS::AppMesh::Route.GrpcRouteAction":{"attributes":{},"description":"An object that represents the action to take if a match is determined.","properties":{"WeightedTargets":"An object that represents the targets that traffic is routed to when a request matches the route."}},"AWS::AppMesh::Route.GrpcRouteMatch":{"attributes":{},"description":"An object that represents the criteria for determining a request match.","properties":{"Metadata":"An object that represents the data to match from the request.","MethodName":"The method name to match from the request. If you specify a name, you must also specify a `serviceName` .","Port":"The port number to match on.","ServiceName":"The fully qualified domain name for the service to match from the request."}},"AWS::AppMesh::Route.GrpcRouteMetadata":{"attributes":{},"description":"An object that represents the match metadata for the route.","properties":{"Invert":"Specify `True` to match anything except the match criteria. The default value is `False` .","Match":"An object that represents the data to match from the request.","Name":"The name of the route."}},"AWS::AppMesh::Route.GrpcRouteMetadataMatchMethod":{"attributes":{},"description":"An object that represents the match method. Specify one of the match values.","properties":{"Exact":"The value sent by the client must match the specified value exactly.","Prefix":"The value sent by the client must begin with the specified characters.","Range":"An object that represents the range of values to match on.","Regex":"The value sent by the client must include the specified characters.","Suffix":"The value sent by the client must end with the specified characters."}},"AWS::AppMesh::Route.GrpcTimeout":{"attributes":{},"description":"An object that represents types of timeouts.","properties":{"Idle":"An object that represents an idle timeout. An idle timeout bounds the amount of time that a connection may be idle. The default value is none.","PerRequest":"An object that represents a per request timeout. The default value is 15 seconds. If you set a higher timeout, then make sure that the higher value is set for each App Mesh resource in a conversation. For example, if a virtual node backend uses a virtual router provider to route to another virtual node, then the timeout should be greater than 15 seconds for the source and destination virtual node and the route."}},"AWS::AppMesh::Route.HeaderMatchMethod":{"attributes":{},"description":"An object that represents the method and value to match with the header value sent in a request. Specify one match method.","properties":{"Exact":"The value sent by the client must match the specified value exactly.","Prefix":"The value sent by the client must begin with the specified characters.","Range":"An object that represents the range of values to match on.","Regex":"The value sent by the client must include the specified characters.","Suffix":"The value sent by the client must end with the specified characters."}},"AWS::AppMesh::Route.HttpPathMatch":{"attributes":{},"description":"An object representing the path to match in the request.","properties":{"Exact":"The exact path to match on.","Regex":"The regex used to match the path."}},"AWS::AppMesh::Route.HttpQueryParameterMatch":{"attributes":{},"description":"An object representing the query parameter to match.","properties":{"Exact":"The exact query parameter to match on."}},"AWS::AppMesh::Route.HttpRetryPolicy":{"attributes":{},"description":"An object that represents a retry policy. Specify at least one value for at least one of the types of `RetryEvents` , a value for `maxRetries` , and a value for `perRetryTimeout` . Both `server-error` and `gateway-error` under `httpRetryEvents` include the Envoy `reset` policy. For more information on the `reset` policy, see the [Envoy documentation](https://docs.aws.amazon.com/https://www.envoyproxy.io/docs/envoy/latest/configuration/http/http_filters/router_filter#x-envoy-retry-on) .","properties":{"HttpRetryEvents":"Specify at least one of the following values.\\n\\n- *server-error* – HTTP status codes 500, 501, 502, 503, 504, 505, 506, 507, 508, 510, and 511\\n- *gateway-error* – HTTP status codes 502, 503, and 504\\n- *client-error* – HTTP status code 409\\n- *stream-error* – Retry on refused stream","MaxRetries":"The maximum number of retry attempts.","PerRetryTimeout":"The timeout for each retry attempt.","TcpRetryEvents":"Specify a valid value. The event occurs before any processing of a request has started and is encountered when the upstream is temporarily or permanently unavailable."}},"AWS::AppMesh::Route.HttpRoute":{"attributes":{},"description":"An object that represents an HTTP or HTTP/2 route type.","properties":{"Action":"An object that represents the action to take if a match is determined.","Match":"An object that represents the criteria for determining a request match.","RetryPolicy":"An object that represents a retry policy.","Timeout":"An object that represents types of timeouts."}},"AWS::AppMesh::Route.HttpRouteAction":{"attributes":{},"description":"An object that represents the action to take if a match is determined.","properties":{"WeightedTargets":"An object that represents the targets that traffic is routed to when a request matches the route."}},"AWS::AppMesh::Route.HttpRouteHeader":{"attributes":{},"description":"An object that represents the HTTP header in the request.","properties":{"Invert":"Specify `True` to match anything except the match criteria. The default value is `False` .","Match":"The `HeaderMatchMethod` object.","Name":"A name for the HTTP header in the client request that will be matched on."}},"AWS::AppMesh::Route.HttpRouteMatch":{"attributes":{},"description":"An object that represents the requirements for a route to match HTTP requests for a virtual router.","properties":{"Headers":"The client request headers to match on.","Method":"The client request method to match on. Specify only one.","Path":"The client request path to match on.","Port":"The port number to match on.","Prefix":"Specifies the path to match requests with. This parameter must always start with `/` , which by itself matches all requests to the virtual service name. You can also match for path-based routing of requests. For example, if your virtual service name is `my-service.local` and you want the route to match requests to `my-service.local/metrics` , your prefix should be `/metrics` .","QueryParameters":"The client request query parameters to match on.","Scheme":"The client request scheme to match on. Specify only one. Applicable only for HTTP2 routes."}},"AWS::AppMesh::Route.HttpTimeout":{"attributes":{},"description":"An object that represents types of timeouts.","properties":{"Idle":"An object that represents an idle timeout. An idle timeout bounds the amount of time that a connection may be idle. The default value is none.","PerRequest":"An object that represents a per request timeout. The default value is 15 seconds. If you set a higher timeout, then make sure that the higher value is set for each App Mesh resource in a conversation. For example, if a virtual node backend uses a virtual router provider to route to another virtual node, then the timeout should be greater than 15 seconds for the source and destination virtual node and the route."}},"AWS::AppMesh::Route.MatchRange":{"attributes":{},"description":"An object that represents the range of values to match on. The first character of the range is included in the range, though the last character is not. For example, if the range specified were 1-100, only values 1-99 would be matched.","properties":{"End":"The end of the range.","Start":"The start of the range."}},"AWS::AppMesh::Route.QueryParameter":{"attributes":{},"description":"An object that represents the query parameter in the request.","properties":{"Match":"The query parameter to match on.","Name":"A name for the query parameter that will be matched on."}},"AWS::AppMesh::Route.RouteSpec":{"attributes":{},"description":"An object that represents a route specification. Specify one route type.","properties":{"GrpcRoute":"An object that represents the specification of a gRPC route.","Http2Route":"An object that represents the specification of an HTTP/2 route.","HttpRoute":"An object that represents the specification of an HTTP route.","Priority":"The priority for the route. Routes are matched based on the specified value, where 0 is the highest priority.","TcpRoute":"An object that represents the specification of a TCP route."}},"AWS::AppMesh::Route.TcpRoute":{"attributes":{},"description":"An object that represents a TCP route type.","properties":{"Action":"The action to take if a match is determined.","Match":"An object that represents the criteria for determining a request match.","Timeout":"An object that represents types of timeouts."}},"AWS::AppMesh::Route.TcpRouteAction":{"attributes":{},"description":"An object that represents the action to take if a match is determined.","properties":{"WeightedTargets":"An object that represents the targets that traffic is routed to when a request matches the route."}},"AWS::AppMesh::Route.TcpRouteMatch":{"attributes":{},"description":"An object representing the TCP route to match.","properties":{"Port":"The port number to match on."}},"AWS::AppMesh::Route.TcpTimeout":{"attributes":{},"description":"An object that represents types of timeouts.","properties":{"Idle":"An object that represents an idle timeout. An idle timeout bounds the amount of time that a connection may be idle. The default value is none."}},"AWS::AppMesh::Route.WeightedTarget":{"attributes":{},"description":"An object that represents a target and its relative weight. Traffic is distributed across targets according to their relative weight. For example, a weighted target with a relative weight of 50 receives five times as much traffic as one with a relative weight of 10. The total weight for all targets combined must be less than or equal to 100.","properties":{"Port":"The targeted port of the weighted object.","VirtualNode":"The virtual node to associate with the weighted target.","Weight":"The relative weight of the weighted target."}},"AWS::AppMesh::VirtualGateway":{"attributes":{"Arn":"The full Amazon Resource Name (ARN) for the virtual gateway.","MeshName":"The name of the service mesh that the virtual gateway resides in.","MeshOwner":"The AWS IAM account ID of the service mesh owner. If the account ID is not your own, then it\'s the ID of the account that shared the mesh with your account. For more information about mesh sharing, see [Working with Shared Meshes](https://docs.aws.amazon.com/app-mesh/latest/userguide/sharing.html) .","Ref":"`Ref` returns the resource ARN. For example:\\n\\n`{ \\"Ref\\": \\"myVirtualGateway\\" }`\\n\\nWhen you pass the logical ID of an `AWS::AppMesh::VirtualGateway` resource to the intrinsic Ref function, the function returns the gateway route ARN, such as `arn:aws:appmesh: *us-east-1* : *555555555555* :virtualGateway/ *myVirtualGateway*` .","ResourceOwner":"The AWS IAM account ID of the resource owner. If the account ID is not your own, then it\'s the ID of the mesh owner or of another account that the mesh is shared with. For more information about mesh sharing, see [Working with Shared Meshes](https://docs.aws.amazon.com/app-mesh/latest/userguide/sharing.html) .","Uid":"The unique identifier for the virtual gateway.","VirtualGatewayName":"The name of the virtual gateway."},"description":"Creates a virtual gateway.\\n\\nA virtual gateway allows resources outside your mesh to communicate to resources that are inside your mesh. The virtual gateway represents an Envoy proxy running in an Amazon ECS task, in a Kubernetes service, or on an Amazon EC2 instance. Unlike a virtual node, which represents an Envoy running with an application, a virtual gateway represents Envoy deployed by itself.\\n\\nFor more information about virtual gateways, see [Virtual gateways](https://docs.aws.amazon.com/app-mesh/latest/userguide/virtual_gateways.html) .","properties":{"MeshName":"The name of the service mesh that the virtual gateway resides in.","MeshOwner":"The AWS IAM account ID of the service mesh owner. If the account ID is not your own, then it\'s the ID of the account that shared the mesh with your account. For more information about mesh sharing, see [Working with shared meshes](https://docs.aws.amazon.com/app-mesh/latest/userguide/sharing.html) .","Spec":"The specifications of the virtual gateway.","Tags":"Optional metadata that you can apply to the virtual gateway to assist with categorization and organization. Each tag consists of a key and an optional value, both of which you define. Tag keys can have a maximum character length of 128 characters, and tag values can have a maximum length of 256 characters.","VirtualGatewayName":"The name of the virtual gateway."}},"AWS::AppMesh::VirtualGateway.JsonFormatRef":{"attributes":{},"description":"An object that represents the key value pairs for the JSON.","properties":{"Key":"The specified key for the JSON.","Value":"The specified value for the JSON."}},"AWS::AppMesh::VirtualGateway.LoggingFormat":{"attributes":{},"description":"An object that represents the format for the logs.","properties":{"Json":"The logging format for JSON.","Text":"The logging format for text."}},"AWS::AppMesh::VirtualGateway.SubjectAlternativeNameMatchers":{"attributes":{},"description":"An object that represents the methods by which a subject alternative name on a peer Transport Layer Security (TLS) certificate can be matched.","properties":{"Exact":"The values sent must match the specified values exactly."}},"AWS::AppMesh::VirtualGateway.SubjectAlternativeNames":{"attributes":{},"description":"An object that represents the subject alternative names secured by the certificate.","properties":{"Match":"An object that represents the criteria for determining a SANs match."}},"AWS::AppMesh::VirtualGateway.VirtualGatewayAccessLog":{"attributes":{},"description":"The access log configuration for a virtual gateway.","properties":{"File":"The file object to send virtual gateway access logs to."}},"AWS::AppMesh::VirtualGateway.VirtualGatewayBackendDefaults":{"attributes":{},"description":"An object that represents the default properties for a backend.","properties":{"ClientPolicy":"A reference to an object that represents a client policy."}},"AWS::AppMesh::VirtualGateway.VirtualGatewayClientPolicy":{"attributes":{},"description":"An object that represents a client policy.","properties":{"TLS":"A reference to an object that represents a Transport Layer Security (TLS) client policy."}},"AWS::AppMesh::VirtualGateway.VirtualGatewayClientPolicyTls":{"attributes":{},"description":"An object that represents a Transport Layer Security (TLS) client policy.","properties":{"Certificate":"A reference to an object that represents a virtual gateway\'s client\'s Transport Layer Security (TLS) certificate.","Enforce":"Whether the policy is enforced. The default is `True` , if a value isn\'t specified.","Ports":"One or more ports that the policy is enforced for.","Validation":"A reference to an object that represents a Transport Layer Security (TLS) validation context."}},"AWS::AppMesh::VirtualGateway.VirtualGatewayClientTlsCertificate":{"attributes":{},"description":"An object that represents the virtual gateway\'s client\'s Transport Layer Security (TLS) certificate.","properties":{"File":"An object that represents a local file certificate. The certificate must meet specific requirements and you must have proxy authorization enabled. For more information, see [Transport Layer Security (TLS)](https://docs.aws.amazon.com/app-mesh/latest/userguide/tls.html) .","SDS":"A reference to an object that represents a virtual gateway\'s client\'s Secret Discovery Service certificate."}},"AWS::AppMesh::VirtualGateway.VirtualGatewayConnectionPool":{"attributes":{},"description":"An object that represents the type of virtual gateway connection pool.\\n\\nOnly one protocol is used at a time and should be the same protocol as the one chosen under port mapping.\\n\\nIf not present the default value for `maxPendingRequests` is `2147483647` .","properties":{"GRPC":"An object that represents a type of connection pool.","HTTP":"An object that represents a type of connection pool.","HTTP2":"An object that represents a type of connection pool."}},"AWS::AppMesh::VirtualGateway.VirtualGatewayFileAccessLog":{"attributes":{},"description":"An object that represents an access log file.","properties":{"Format":"The specified format for the virtual gateway access logs. It can be either `json_format` or `text_format` .","Path":"The file path to write access logs to. You can use `/dev/stdout` to send access logs to standard out and configure your Envoy container to use a log driver, such as `awslogs` , to export the access logs to a log storage service such as Amazon CloudWatch Logs. You can also specify a path in the Envoy container\'s file system to write the files to disk."}},"AWS::AppMesh::VirtualGateway.VirtualGatewayGrpcConnectionPool":{"attributes":{},"description":"An object that represents a type of connection pool.","properties":{"MaxRequests":"Maximum number of inflight requests Envoy can concurrently support across hosts in upstream cluster."}},"AWS::AppMesh::VirtualGateway.VirtualGatewayHealthCheckPolicy":{"attributes":{},"description":"An object that represents the health check policy for a virtual gateway\'s listener.","properties":{"HealthyThreshold":"The number of consecutive successful health checks that must occur before declaring the listener healthy.","IntervalMillis":"The time period in milliseconds between each health check execution.","Path":"The destination path for the health check request. This value is only used if the specified protocol is HTTP or HTTP/2. For any other protocol, this value is ignored.","Port":"The destination port for the health check request. This port must match the port defined in the `PortMapping` for the listener.","Protocol":"The protocol for the health check request. If you specify `grpc` , then your service must conform to the [GRPC Health Checking Protocol](https://docs.aws.amazon.com/https://github.com/grpc/grpc/blob/master/doc/health-checking.md) .","TimeoutMillis":"The amount of time to wait when receiving a response from the health check, in milliseconds.","UnhealthyThreshold":"The number of consecutive failed health checks that must occur before declaring a virtual gateway unhealthy."}},"AWS::AppMesh::VirtualGateway.VirtualGatewayHttp2ConnectionPool":{"attributes":{},"description":"An object that represents a type of connection pool.","properties":{"MaxRequests":"Maximum number of inflight requests Envoy can concurrently support across hosts in upstream cluster."}},"AWS::AppMesh::VirtualGateway.VirtualGatewayHttpConnectionPool":{"attributes":{},"description":"An object that represents a type of connection pool.","properties":{"MaxConnections":"Maximum number of outbound TCP connections Envoy can establish concurrently with all hosts in upstream cluster.","MaxPendingRequests":"Number of overflowing requests after `max_connections` Envoy will queue to upstream cluster."}},"AWS::AppMesh::VirtualGateway.VirtualGatewayListener":{"attributes":{},"description":"An object that represents a listener for a virtual gateway.","properties":{"ConnectionPool":"The connection pool information for the listener.","HealthCheck":"The health check information for the listener.","PortMapping":"The port mapping information for the listener.","TLS":"A reference to an object that represents the Transport Layer Security (TLS) properties for the listener."}},"AWS::AppMesh::VirtualGateway.VirtualGatewayListenerTls":{"attributes":{},"description":"An object that represents the Transport Layer Security (TLS) properties for a listener.","properties":{"Certificate":"An object that represents a Transport Layer Security (TLS) certificate.","Mode":"Specify one of the following modes.\\n\\n- ** STRICT – Listener only accepts connections with TLS enabled.\\n- ** PERMISSIVE – Listener accepts connections with or without TLS enabled.\\n- ** DISABLED – Listener only accepts connections without TLS.","Validation":"A reference to an object that represents a virtual gateway\'s listener\'s Transport Layer Security (TLS) validation context."}},"AWS::AppMesh::VirtualGateway.VirtualGatewayListenerTlsAcmCertificate":{"attributes":{},"description":"An object that represents an AWS Certificate Manager certificate.","properties":{"CertificateArn":"The Amazon Resource Name (ARN) for the certificate. The certificate must meet specific requirements and you must have proxy authorization enabled. For more information, see [Transport Layer Security (TLS)](https://docs.aws.amazon.com/app-mesh/latest/userguide/tls.html#virtual-node-tls-prerequisites) ."}},"AWS::AppMesh::VirtualGateway.VirtualGatewayListenerTlsCertificate":{"attributes":{},"description":"An object that represents a listener\'s Transport Layer Security (TLS) certificate.","properties":{"ACM":"A reference to an object that represents an AWS Certificate Manager certificate.","File":"A reference to an object that represents a local file certificate.","SDS":"A reference to an object that represents a virtual gateway\'s listener\'s Secret Discovery Service certificate."}},"AWS::AppMesh::VirtualGateway.VirtualGatewayListenerTlsFileCertificate":{"attributes":{},"description":"An object that represents a local file certificate. The certificate must meet specific requirements and you must have proxy authorization enabled. For more information, see [Transport Layer Security (TLS)](https://docs.aws.amazon.com/app-mesh/latest/userguide/tls.html#virtual-node-tls-prerequisites) .","properties":{"CertificateChain":"The certificate chain for the certificate.","PrivateKey":"The private key for a certificate stored on the file system of the mesh endpoint that the proxy is running on."}},"AWS::AppMesh::VirtualGateway.VirtualGatewayListenerTlsSdsCertificate":{"attributes":{},"description":"An object that represents the virtual gateway\'s listener\'s Secret Discovery Service certificate.The proxy must be configured with a local SDS provider via a Unix Domain Socket. See App Mesh [TLS documentation](https://docs.aws.amazon.com/app-mesh/latest/userguide/tls.html) for more info.","properties":{"SecretName":"A reference to an object that represents the name of the secret secret requested from the Secret Discovery Service provider representing Transport Layer Security (TLS) materials like a certificate or certificate chain."}},"AWS::AppMesh::VirtualGateway.VirtualGatewayListenerTlsValidationContext":{"attributes":{},"description":"An object that represents a virtual gateway\'s listener\'s Transport Layer Security (TLS) validation context.","properties":{"SubjectAlternativeNames":"A reference to an object that represents the SANs for a virtual gateway listener\'s Transport Layer Security (TLS) validation context.","Trust":"A reference to where to retrieve the trust chain when validating a peer’s Transport Layer Security (TLS) certificate."}},"AWS::AppMesh::VirtualGateway.VirtualGatewayListenerTlsValidationContextTrust":{"attributes":{},"description":"An object that represents a virtual gateway\'s listener\'s Transport Layer Security (TLS) validation context trust.","properties":{"File":"An object that represents a Transport Layer Security (TLS) validation context trust for a local file.","SDS":"A reference to an object that represents a virtual gateway\'s listener\'s Transport Layer Security (TLS) Secret Discovery Service validation context trust."}},"AWS::AppMesh::VirtualGateway.VirtualGatewayLogging":{"attributes":{},"description":"An object that represents logging information.","properties":{"AccessLog":"The access log configuration."}},"AWS::AppMesh::VirtualGateway.VirtualGatewayPortMapping":{"attributes":{},"description":"An object that represents a port mapping.","properties":{"Port":"The port used for the port mapping. Specify one protocol.","Protocol":"The protocol used for the port mapping."}},"AWS::AppMesh::VirtualGateway.VirtualGatewaySpec":{"attributes":{},"description":"An object that represents the specification of a service mesh resource.","properties":{"BackendDefaults":"A reference to an object that represents the defaults for backends.","Listeners":"The listeners that the mesh endpoint is expected to receive inbound traffic from. You can specify one listener.","Logging":"An object that represents logging information."}},"AWS::AppMesh::VirtualGateway.VirtualGatewayTlsValidationContext":{"attributes":{},"description":"An object that represents a Transport Layer Security (TLS) validation context.","properties":{"SubjectAlternativeNames":"A reference to an object that represents the SANs for a virtual gateway\'s listener\'s Transport Layer Security (TLS) validation context.","Trust":"A reference to where to retrieve the trust chain when validating a peer’s Transport Layer Security (TLS) certificate."}},"AWS::AppMesh::VirtualGateway.VirtualGatewayTlsValidationContextAcmTrust":{"attributes":{},"description":"An object that represents a Transport Layer Security (TLS) validation context trust for an AWS Certificate Manager certificate.","properties":{"CertificateAuthorityArns":"One or more ACM Amazon Resource Name (ARN)s."}},"AWS::AppMesh::VirtualGateway.VirtualGatewayTlsValidationContextFileTrust":{"attributes":{},"description":"An object that represents a Transport Layer Security (TLS) validation context trust for a local file.","properties":{"CertificateChain":"The certificate trust chain for a certificate stored on the file system of the virtual node that the proxy is running on."}},"AWS::AppMesh::VirtualGateway.VirtualGatewayTlsValidationContextSdsTrust":{"attributes":{},"description":"An object that represents a virtual gateway\'s listener\'s Transport Layer Security (TLS) Secret Discovery Service validation context trust. The proxy must be configured with a local SDS provider via a Unix Domain Socket. See App Mesh [TLS documentation](https://docs.aws.amazon.com/app-mesh/latest/userguide/tls.html) for more info.","properties":{"SecretName":"A reference to an object that represents the name of the secret for a virtual gateway\'s Transport Layer Security (TLS) Secret Discovery Service validation context trust."}},"AWS::AppMesh::VirtualGateway.VirtualGatewayTlsValidationContextTrust":{"attributes":{},"description":"An object that represents a Transport Layer Security (TLS) validation context trust.","properties":{"ACM":"A reference to an object that represents a Transport Layer Security (TLS) validation context trust for an AWS Certificate Manager certificate.","File":"An object that represents a Transport Layer Security (TLS) validation context trust for a local file.","SDS":"A reference to an object that represents a virtual gateway\'s Transport Layer Security (TLS) Secret Discovery Service validation context trust."}},"AWS::AppMesh::VirtualNode":{"attributes":{"Arn":"The full Amazon Resource Name (ARN) for the virtual node.","MeshName":"The name of the service mesh that the virtual node resides in.","MeshOwner":"The AWS IAM account ID of the service mesh owner. If the account ID is not your own, then it\'s the ID of the account that shared the mesh with your account. For more information about mesh sharing, see [Working with Shared Meshes](https://docs.aws.amazon.com/app-mesh/latest/userguide/sharing.html) .","Ref":"`Ref` returns the resource ARN. For example:\\n\\n`{ \\"Ref\\": \\"myVirtualNode\\" }`\\n\\nWhen you pass the logical ID of an `AWS::AppMesh::VirtualNode` resource to the intrinsic Ref function, the function returns the virtual node ARN, such as `arn:aws:appmesh: *us-east-1* : *555555555555* :virtualNode/ *myVirtualNode*` .","ResourceOwner":"The AWS IAM account ID of the resource owner. If the account ID is not your own, then it\'s the ID of the mesh owner or of another account that the mesh is shared with. For more information about mesh sharing, see [Working with Shared Meshes](https://docs.aws.amazon.com/app-mesh/latest/userguide/sharing.html) .","Uid":"The unique identifier for the virtual node.","VirtualNodeName":"The name of the virtual node."},"description":"Creates a virtual node within a service mesh.\\n\\nA virtual node acts as a logical pointer to a particular task group, such as an Amazon ECS service or a Kubernetes deployment. When you create a virtual node, you can specify the service discovery information for your task group, and whether the proxy running in a task group will communicate with other proxies using Transport Layer Security (TLS).\\n\\nYou define a `listener` for any inbound traffic that your virtual node expects. Any virtual service that your virtual node expects to communicate to is specified as a `backend` .\\n\\nThe response metadata for your new virtual node contains the `arn` that is associated with the virtual node. Set this value to the full ARN; for example, `arn:aws:appmesh:us-west-2:123456789012:myMesh/default/virtualNode/myApp` ) as the `APPMESH_RESOURCE_ARN` environment variable for your task group\'s Envoy proxy container in your task definition or pod spec. This is then mapped to the `node.id` and `node.cluster` Envoy parameters.\\n\\n> By default, App Mesh uses the name of the resource you specified in `APPMESH_RESOURCE_ARN` when Envoy is referring to itself in metrics and traces. You can override this behavior by setting the `APPMESH_RESOURCE_CLUSTER` environment variable with your own name. \\n\\nFor more information about virtual nodes, see [Virtual nodes](https://docs.aws.amazon.com/app-mesh/latest/userguide/virtual_nodes.html) . You must be using `1.15.0` or later of the Envoy image when setting these variables. For more information about App Mesh Envoy variables, see [Envoy image](https://docs.aws.amazon.com/app-mesh/latest/userguide/envoy.html) in the AWS App Mesh User Guide.","properties":{"MeshName":"The name of the service mesh to create the virtual node in.","MeshOwner":"The AWS IAM account ID of the service mesh owner. If the account ID is not your own, then the account that you specify must share the mesh with your account before you can create the resource in the service mesh. For more information about mesh sharing, see [Working with shared meshes](https://docs.aws.amazon.com/app-mesh/latest/userguide/sharing.html) .","Spec":"The virtual node specification to apply.","Tags":"Optional metadata that you can apply to the virtual node to assist with categorization and organization. Each tag consists of a key and an optional value, both of which you define. Tag keys can have a maximum character length of 128 characters, and tag values can have a maximum length of 256 characters.","VirtualNodeName":"The name to use for the virtual node."}},"AWS::AppMesh::VirtualNode.AccessLog":{"attributes":{},"description":"An object that represents the access logging information for a virtual node.","properties":{"File":"The file object to send virtual node access logs to."}},"AWS::AppMesh::VirtualNode.AwsCloudMapInstanceAttribute":{"attributes":{},"description":"An object that represents the AWS Cloud Map attribute information for your virtual node.\\n\\n> AWS Cloud Map is not available in the eu-south-1 Region.","properties":{"Key":"The name of an AWS Cloud Map service instance attribute key. Any AWS Cloud Map service instance that contains the specified key and value is returned.","Value":"The value of an AWS Cloud Map service instance attribute key. Any AWS Cloud Map service instance that contains the specified key and value is returned."}},"AWS::AppMesh::VirtualNode.AwsCloudMapServiceDiscovery":{"attributes":{},"description":"An object that represents the AWS Cloud Map service discovery information for your virtual node.\\n\\n> AWS Cloud Map is not available in the eu-south-1 Region.","properties":{"Attributes":"A string map that contains attributes with values that you can use to filter instances by any custom attribute that you specified when you registered the instance. Only instances that match all of the specified key/value pairs will be returned.","IpPreference":"The preferred IP version that this virtual node uses. Setting the IP preference on the virtual node only overrides the IP preference set for the mesh on this specific node.","NamespaceName":"The HTTP name of the AWS Cloud Map namespace to use.","ServiceName":"The name of the AWS Cloud Map service to use."}},"AWS::AppMesh::VirtualNode.Backend":{"attributes":{},"description":"An object that represents the backends that a virtual node is expected to send outbound traffic to.","properties":{"VirtualService":"Specifies a virtual service to use as a backend."}},"AWS::AppMesh::VirtualNode.BackendDefaults":{"attributes":{},"description":"An object that represents the default properties for a backend.","properties":{"ClientPolicy":"A reference to an object that represents a client policy."}},"AWS::AppMesh::VirtualNode.ClientPolicy":{"attributes":{},"description":"An object that represents a client policy.","properties":{"TLS":"A reference to an object that represents a Transport Layer Security (TLS) client policy."}},"AWS::AppMesh::VirtualNode.ClientPolicyTls":{"attributes":{},"description":"A reference to an object that represents a Transport Layer Security (TLS) client policy.","properties":{"Certificate":"A reference to an object that represents a client\'s TLS certificate.","Enforce":"Whether the policy is enforced. The default is `True` , if a value isn\'t specified.","Ports":"One or more ports that the policy is enforced for.","Validation":"A reference to an object that represents a TLS validation context."}},"AWS::AppMesh::VirtualNode.ClientTlsCertificate":{"attributes":{},"description":"An object that represents the client\'s certificate.","properties":{"File":"An object that represents a local file certificate. The certificate must meet specific requirements and you must have proxy authorization enabled. For more information, see [Transport Layer Security (TLS)](https://docs.aws.amazon.com/app-mesh/latest/userguide/tls.html) .","SDS":"A reference to an object that represents a client\'s TLS Secret Discovery Service certificate."}},"AWS::AppMesh::VirtualNode.DnsServiceDiscovery":{"attributes":{},"description":"An object that represents the DNS service discovery information for your virtual node.","properties":{"Hostname":"Specifies the DNS service discovery hostname for the virtual node.","IpPreference":"The preferred IP version that this virtual node uses. Setting the IP preference on the virtual node only overrides the IP preference set for the mesh on this specific node.","ResponseType":"Specifies the DNS response type for the virtual node."}},"AWS::AppMesh::VirtualNode.Duration":{"attributes":{},"description":"An object that represents a duration of time.","properties":{"Unit":"A unit of time.","Value":"A number of time units."}},"AWS::AppMesh::VirtualNode.FileAccessLog":{"attributes":{},"description":"An object that represents an access log file.","properties":{"Format":"The specified format for the logs. The format is either `json_format` or `text_format` .","Path":"The file path to write access logs to. You can use `/dev/stdout` to send access logs to standard out and configure your Envoy container to use a log driver, such as `awslogs` , to export the access logs to a log storage service such as Amazon CloudWatch Logs. You can also specify a path in the Envoy container\'s file system to write the files to disk.\\n\\n> The Envoy process must have write permissions to the path that you specify here. Otherwise, Envoy fails to bootstrap properly."}},"AWS::AppMesh::VirtualNode.GrpcTimeout":{"attributes":{},"description":"An object that represents types of timeouts.","properties":{"Idle":"An object that represents an idle timeout. An idle timeout bounds the amount of time that a connection may be idle. The default value is none.","PerRequest":"An object that represents a per request timeout. The default value is 15 seconds. If you set a higher timeout, then make sure that the higher value is set for each App Mesh resource in a conversation. For example, if a virtual node backend uses a virtual router provider to route to another virtual node, then the timeout should be greater than 15 seconds for the source and destination virtual node and the route."}},"AWS::AppMesh::VirtualNode.HealthCheck":{"attributes":{},"description":"An object that represents the health check policy for a virtual node\'s listener.","properties":{"HealthyThreshold":"The number of consecutive successful health checks that must occur before declaring listener healthy.","IntervalMillis":"The time period in milliseconds between each health check execution.","Path":"The destination path for the health check request. This value is only used if the specified protocol is HTTP or HTTP/2. For any other protocol, this value is ignored.","Port":"The destination port for the health check request. This port must match the port defined in the `PortMapping` for the listener.","Protocol":"The protocol for the health check request. If you specify `grpc` , then your service must conform to the [GRPC Health Checking Protocol](https://docs.aws.amazon.com/https://github.com/grpc/grpc/blob/master/doc/health-checking.md) .","TimeoutMillis":"The amount of time to wait when receiving a response from the health check, in milliseconds.","UnhealthyThreshold":"The number of consecutive failed health checks that must occur before declaring a virtual node unhealthy."}},"AWS::AppMesh::VirtualNode.HttpTimeout":{"attributes":{},"description":"An object that represents types of timeouts.","properties":{"Idle":"An object that represents an idle timeout. An idle timeout bounds the amount of time that a connection may be idle. The default value is none.","PerRequest":"An object that represents a per request timeout. The default value is 15 seconds. If you set a higher timeout, then make sure that the higher value is set for each App Mesh resource in a conversation. For example, if a virtual node backend uses a virtual router provider to route to another virtual node, then the timeout should be greater than 15 seconds for the source and destination virtual node and the route."}},"AWS::AppMesh::VirtualNode.JsonFormatRef":{"attributes":{},"description":"An object that represents the key value pairs for the JSON.","properties":{"Key":"The specified key for the JSON.","Value":"The specified value for the JSON."}},"AWS::AppMesh::VirtualNode.Listener":{"attributes":{},"description":"An object that represents a listener for a virtual node.","properties":{"ConnectionPool":"The connection pool information for the listener.","HealthCheck":"The health check information for the listener.","OutlierDetection":"The outlier detection information for the listener.","PortMapping":"The port mapping information for the listener.","TLS":"A reference to an object that represents the Transport Layer Security (TLS) properties for a listener.","Timeout":"An object that represents timeouts for different protocols."}},"AWS::AppMesh::VirtualNode.ListenerTimeout":{"attributes":{},"description":"An object that represents timeouts for different protocols.","properties":{"GRPC":"An object that represents types of timeouts.","HTTP":"An object that represents types of timeouts.","HTTP2":"An object that represents types of timeouts.","TCP":"An object that represents types of timeouts."}},"AWS::AppMesh::VirtualNode.ListenerTls":{"attributes":{},"description":"An object that represents the Transport Layer Security (TLS) properties for a listener.","properties":{"Certificate":"A reference to an object that represents a listener\'s Transport Layer Security (TLS) certificate.","Mode":"Specify one of the following modes.\\n\\n- ** STRICT – Listener only accepts connections with TLS enabled.\\n- ** PERMISSIVE – Listener accepts connections with or without TLS enabled.\\n- ** DISABLED – Listener only accepts connections without TLS.","Validation":"A reference to an object that represents a listener\'s Transport Layer Security (TLS) validation context."}},"AWS::AppMesh::VirtualNode.ListenerTlsAcmCertificate":{"attributes":{},"description":"An object that represents an AWS Certificate Manager certificate.","properties":{"CertificateArn":"The Amazon Resource Name (ARN) for the certificate. The certificate must meet specific requirements and you must have proxy authorization enabled. For more information, see [Transport Layer Security (TLS)](https://docs.aws.amazon.com/app-mesh/latest/userguide/tls.html#virtual-node-tls-prerequisites) ."}},"AWS::AppMesh::VirtualNode.ListenerTlsCertificate":{"attributes":{},"description":"An object that represents a listener\'s Transport Layer Security (TLS) certificate.","properties":{"ACM":"A reference to an object that represents an AWS Certificate Manager certificate.","File":"A reference to an object that represents a local file certificate.","SDS":"A reference to an object that represents a listener\'s Secret Discovery Service certificate."}},"AWS::AppMesh::VirtualNode.ListenerTlsFileCertificate":{"attributes":{},"description":"An object that represents a local file certificate. The certificate must meet specific requirements and you must have proxy authorization enabled. For more information, see [Transport Layer Security (TLS)](https://docs.aws.amazon.com/app-mesh/latest/userguide/tls.html#virtual-node-tls-prerequisites) .","properties":{"CertificateChain":"The certificate chain for the certificate.","PrivateKey":"The private key for a certificate stored on the file system of the virtual node that the proxy is running on."}},"AWS::AppMesh::VirtualNode.ListenerTlsSdsCertificate":{"attributes":{},"description":"An object that represents the listener\'s Secret Discovery Service certificate. The proxy must be configured with a local SDS provider via a Unix Domain Socket. See App Mesh [TLS documentation](https://docs.aws.amazon.com/app-mesh/latest/userguide/tls.html) for more info.","properties":{"SecretName":"A reference to an object that represents the name of the secret requested from the Secret Discovery Service provider representing Transport Layer Security (TLS) materials like a certificate or certificate chain."}},"AWS::AppMesh::VirtualNode.ListenerTlsValidationContext":{"attributes":{},"description":"An object that represents a listener\'s Transport Layer Security (TLS) validation context.","properties":{"SubjectAlternativeNames":"A reference to an object that represents the SANs for a listener\'s Transport Layer Security (TLS) validation context.","Trust":"A reference to where to retrieve the trust chain when validating a peer’s Transport Layer Security (TLS) certificate."}},"AWS::AppMesh::VirtualNode.ListenerTlsValidationContextTrust":{"attributes":{},"description":"An object that represents a listener\'s Transport Layer Security (TLS) validation context trust.","properties":{"File":"An object that represents a Transport Layer Security (TLS) validation context trust for a local file.","SDS":"A reference to an object that represents a listener\'s Transport Layer Security (TLS) Secret Discovery Service validation context trust."}},"AWS::AppMesh::VirtualNode.Logging":{"attributes":{},"description":"An object that represents the logging information for a virtual node.","properties":{"AccessLog":"The access log configuration for a virtual node."}},"AWS::AppMesh::VirtualNode.LoggingFormat":{"attributes":{},"description":"An object that represents the format for the logs.","properties":{"Json":"The logging format for JSON.","Text":"The logging format for text."}},"AWS::AppMesh::VirtualNode.OutlierDetection":{"attributes":{},"description":"An object that represents the outlier detection for a virtual node\'s listener.","properties":{"BaseEjectionDuration":"The base amount of time for which a host is ejected.","Interval":"The time interval between ejection sweep analysis.","MaxEjectionPercent":"Maximum percentage of hosts in load balancing pool for upstream service that can be ejected. Will eject at least one host regardless of the value.","MaxServerErrors":"Number of consecutive `5xx` errors required for ejection."}},"AWS::AppMesh::VirtualNode.PortMapping":{"attributes":{},"description":"An object representing a virtual node or virtual router listener port mapping.","properties":{"Port":"The port used for the port mapping.","Protocol":"The protocol used for the port mapping. Specify `http` , `http2` , `grpc` , or `tcp` ."}},"AWS::AppMesh::VirtualNode.ServiceDiscovery":{"attributes":{},"description":"An object that represents the service discovery information for a virtual node.","properties":{"AWSCloudMap":"Specifies any AWS Cloud Map information for the virtual node.","DNS":"Specifies the DNS information for the virtual node."}},"AWS::AppMesh::VirtualNode.SubjectAlternativeNameMatchers":{"attributes":{},"description":"An object that represents the methods by which a subject alternative name on a peer Transport Layer Security (TLS) certificate can be matched.","properties":{"Exact":"The values sent must match the specified values exactly."}},"AWS::AppMesh::VirtualNode.SubjectAlternativeNames":{"attributes":{},"description":"An object that represents the subject alternative names secured by the certificate.","properties":{"Match":"An object that represents the criteria for determining a SANs match."}},"AWS::AppMesh::VirtualNode.TcpTimeout":{"attributes":{},"description":"An object that represents types of timeouts.","properties":{"Idle":"An object that represents an idle timeout. An idle timeout bounds the amount of time that a connection may be idle. The default value is none."}},"AWS::AppMesh::VirtualNode.TlsValidationContext":{"attributes":{},"description":"An object that represents how the proxy will validate its peer during Transport Layer Security (TLS) negotiation.","properties":{"SubjectAlternativeNames":"A reference to an object that represents the SANs for a Transport Layer Security (TLS) validation context. If you don\'t specify SANs on the *terminating* mesh endpoint, the Envoy proxy for that node doesn\'t verify the SAN on a peer client certificate. If you don\'t specify SANs on the *originating* mesh endpoint, the SAN on the certificate provided by the terminating endpoint must match the mesh endpoint service discovery configuration. Since SPIRE vended certificates have a SPIFFE ID as a name, you must set the SAN since the name doesn\'t match the service discovery name.","Trust":"A reference to where to retrieve the trust chain when validating a peer’s Transport Layer Security (TLS) certificate."}},"AWS::AppMesh::VirtualNode.TlsValidationContextAcmTrust":{"attributes":{},"description":"An object that represents a Transport Layer Security (TLS) validation context trust for an AWS Certificate Manager certificate.","properties":{"CertificateAuthorityArns":"One or more ACM Amazon Resource Name (ARN)s."}},"AWS::AppMesh::VirtualNode.TlsValidationContextFileTrust":{"attributes":{},"description":"An object that represents a Transport Layer Security (TLS) validation context trust for a local file.","properties":{"CertificateChain":"The certificate trust chain for a certificate stored on the file system of the virtual node that the proxy is running on."}},"AWS::AppMesh::VirtualNode.TlsValidationContextSdsTrust":{"attributes":{},"description":"An object that represents a Transport Layer Security (TLS) Secret Discovery Service validation context trust. The proxy must be configured with a local SDS provider via a Unix Domain Socket. See App Mesh [TLS documentation](https://docs.aws.amazon.com/app-mesh/latest/userguide/tls.html) for more info.","properties":{"SecretName":"A reference to an object that represents the name of the secret for a Transport Layer Security (TLS) Secret Discovery Service validation context trust."}},"AWS::AppMesh::VirtualNode.TlsValidationContextTrust":{"attributes":{},"description":"An object that represents a Transport Layer Security (TLS) validation context trust.","properties":{"ACM":"A reference to an object that represents a Transport Layer Security (TLS) validation context trust for an AWS Certificate Manager certificate.","File":"An object that represents a Transport Layer Security (TLS) validation context trust for a local file.","SDS":"A reference to an object that represents a Transport Layer Security (TLS) Secret Discovery Service validation context trust."}},"AWS::AppMesh::VirtualNode.VirtualNodeConnectionPool":{"attributes":{},"description":"An object that represents the type of virtual node connection pool.\\n\\nOnly one protocol is used at a time and should be the same protocol as the one chosen under port mapping.\\n\\nIf not present the default value for `maxPendingRequests` is `2147483647` .","properties":{"GRPC":"An object that represents a type of connection pool.","HTTP":"An object that represents a type of connection pool.","HTTP2":"An object that represents a type of connection pool.","TCP":"An object that represents a type of connection pool."}},"AWS::AppMesh::VirtualNode.VirtualNodeGrpcConnectionPool":{"attributes":{},"description":"An object that represents a type of connection pool.","properties":{"MaxRequests":"Maximum number of inflight requests Envoy can concurrently support across hosts in upstream cluster."}},"AWS::AppMesh::VirtualNode.VirtualNodeHttp2ConnectionPool":{"attributes":{},"description":"An object that represents a type of connection pool.","properties":{"MaxRequests":"Maximum number of inflight requests Envoy can concurrently support across hosts in upstream cluster."}},"AWS::AppMesh::VirtualNode.VirtualNodeHttpConnectionPool":{"attributes":{},"description":"An object that represents a type of connection pool.","properties":{"MaxConnections":"Maximum number of outbound TCP connections Envoy can establish concurrently with all hosts in upstream cluster.","MaxPendingRequests":"Number of overflowing requests after `max_connections` Envoy will queue to upstream cluster."}},"AWS::AppMesh::VirtualNode.VirtualNodeSpec":{"attributes":{},"description":"An object that represents the specification of a virtual node.","properties":{"BackendDefaults":"A reference to an object that represents the defaults for backends.","Backends":"The backends that the virtual node is expected to send outbound traffic to.\\n\\n> App Mesh doesn\'t validate the existence of those virtual services specified in backends. This is to prevent a cyclic dependency between virtual nodes and virtual services creation. Make sure the virtual service name is correct. The virtual service can be created afterwards if it doesn\'t already exist.","Listeners":"The listener that the virtual node is expected to receive inbound traffic from. You can specify one listener.","Logging":"The inbound and outbound access logging information for the virtual node.","ServiceDiscovery":"The service discovery information for the virtual node. If your virtual node does not expect ingress traffic, you can omit this parameter. If you specify a `listener` , then you must specify service discovery information."}},"AWS::AppMesh::VirtualNode.VirtualNodeTcpConnectionPool":{"attributes":{},"description":"An object that represents a type of connection pool.","properties":{"MaxConnections":"Maximum number of outbound TCP connections Envoy can establish concurrently with all hosts in upstream cluster."}},"AWS::AppMesh::VirtualNode.VirtualServiceBackend":{"attributes":{},"description":"An object that represents a virtual service backend for a virtual node.","properties":{"ClientPolicy":"A reference to an object that represents the client policy for a backend.","VirtualServiceName":"The name of the virtual service that is acting as a virtual node backend.\\n\\n> App Mesh doesn\'t validate the existence of those virtual services specified in backends. This is to prevent a cyclic dependency between virtual nodes and virtual services creation. Make sure the virtual service name is correct. The virtual service can be created afterwards if it doesn\'t already exist."}},"AWS::AppMesh::VirtualRouter":{"attributes":{"Arn":"The full Amazon Resource Name (ARN) for the virtual router.","MeshName":"The name of the service mesh that the virtual router resides in.","MeshOwner":"The AWS IAM account ID of the service mesh owner. If the account ID is not your own, then it\'s the ID of the account that shared the mesh with your account. For more information about mesh sharing, see [Working with Shared Meshes](https://docs.aws.amazon.com/app-mesh/latest/userguide/sharing.html) .","Ref":"`Ref` returns the resource ARN. For example:\\n\\n`{ \\"Ref\\": \\"myVirtualRouter\\" }`\\n\\nWhen you pass the logical ID of an `AWS::AppMesh::VirtualRouter` resource to the intrinsic Ref function, the function returns the virtual router ARN, such as `arn:aws:appmesh: *us-east-1* : *555555555555* :virtualRouter/ *myVirtualRouter*` .","ResourceOwner":"The AWS IAM account ID of the resource owner. If the account ID is not your own, then it\'s the ID of the mesh owner or of another account that the mesh is shared with. For more information about mesh sharing, see [Working with Shared Meshes](https://docs.aws.amazon.com/app-mesh/latest/userguide/sharing.html) .","Uid":"The unique identifier for the virtual router.","VirtualRouterName":"The name of the virtual router."},"description":"Creates a virtual router within a service mesh.\\n\\nSpecify a `listener` for any inbound traffic that your virtual router receives. Create a virtual router for each protocol and port that you need to route. Virtual routers handle traffic for one or more virtual services within your mesh. After you create your virtual router, create and associate routes for your virtual router that direct incoming requests to different virtual nodes.\\n\\nFor more information about virtual routers, see [Virtual routers](https://docs.aws.amazon.com/app-mesh/latest/userguide/virtual_routers.html) .","properties":{"MeshName":"The name of the service mesh to create the virtual router in.","MeshOwner":"The AWS IAM account ID of the service mesh owner. If the account ID is not your own, then the account that you specify must share the mesh with your account before you can create the resource in the service mesh. For more information about mesh sharing, see [Working with shared meshes](https://docs.aws.amazon.com/app-mesh/latest/userguide/sharing.html) .","Spec":"The virtual router specification to apply.","Tags":"Optional metadata that you can apply to the virtual router to assist with categorization and organization. Each tag consists of a key and an optional value, both of which you define. Tag keys can have a maximum character length of 128 characters, and tag values can have a maximum length of 256 characters.","VirtualRouterName":"The name to use for the virtual router."}},"AWS::AppMesh::VirtualRouter.PortMapping":{"attributes":{},"description":"An object representing a virtual router listener port mapping.","properties":{"Port":"The port used for the port mapping.","Protocol":"The protocol used for the port mapping. Specify one protocol."}},"AWS::AppMesh::VirtualRouter.VirtualRouterListener":{"attributes":{},"description":"An object that represents a virtual router listener.","properties":{"PortMapping":"The port mapping information for the listener."}},"AWS::AppMesh::VirtualRouter.VirtualRouterSpec":{"attributes":{},"description":"An object that represents the specification of a virtual router.","properties":{"Listeners":"The listeners that the virtual router is expected to receive inbound traffic from."}},"AWS::AppMesh::VirtualService":{"attributes":{"Arn":"The full Amazon Resource Name (ARN) for the virtual service.","MeshName":"The name of the service mesh that the virtual service resides in.","MeshOwner":"The AWS IAM account ID of the service mesh owner. If the account ID is not your own, then it\'s the ID of the account that shared the mesh with your account. For more information about mesh sharing, see [Working with Shared Meshes](https://docs.aws.amazon.com/app-mesh/latest/userguide/sharing.html) .","Ref":"`Ref` returns the resource ARN. For example:\\n\\n`{ \\"Ref\\": \\"myVirtualService\\" }`\\n\\nWhen you pass the logical ID of an `AWS::AppMesh::VirtualService` resource to the intrinsic Ref function, the function returns the virtual service ARN, such as `arn:aws:appmesh: *us-east-1* : *555555555555* :virtualService/ *myVirtualService*` .","ResourceOwner":"The AWS IAM account ID of the resource owner. If the account ID is not your own, then it\'s the ID of the mesh owner or of another account that the mesh is shared with. For more information about mesh sharing, see [Working with Shared Meshes](https://docs.aws.amazon.com/app-mesh/latest/userguide/sharing.html) .","Uid":"The unique identifier for the virtual service.","VirtualServiceName":"The name of the virtual service."},"description":"Creates a virtual service within a service mesh.\\n\\nA virtual service is an abstraction of a real service that is provided by a virtual node directly or indirectly by means of a virtual router. Dependent services call your virtual service by its `virtualServiceName` , and those requests are routed to the virtual node or virtual router that is specified as the provider for the virtual service.\\n\\nFor more information about virtual services, see [Virtual services](https://docs.aws.amazon.com/app-mesh/latest/userguide/virtual_services.html) .","properties":{"MeshName":"The name of the service mesh to create the virtual service in.","MeshOwner":"The AWS IAM account ID of the service mesh owner. If the account ID is not your own, then the account that you specify must share the mesh with your account before you can create the resource in the service mesh. For more information about mesh sharing, see [Working with shared meshes](https://docs.aws.amazon.com/app-mesh/latest/userguide/sharing.html) .","Spec":"The virtual service specification to apply.","Tags":"Optional metadata that you can apply to the virtual service to assist with categorization and organization. Each tag consists of a key and an optional value, both of which you define. Tag keys can have a maximum character length of 128 characters, and tag values can have a maximum length of 256 characters.","VirtualServiceName":"The name to use for the virtual service."}},"AWS::AppMesh::VirtualService.VirtualNodeServiceProvider":{"attributes":{},"description":"An object that represents a virtual node service provider.","properties":{"VirtualNodeName":"The name of the virtual node that is acting as a service provider."}},"AWS::AppMesh::VirtualService.VirtualRouterServiceProvider":{"attributes":{},"description":"An object that represents a virtual node service provider.","properties":{"VirtualRouterName":"The name of the virtual router that is acting as a service provider."}},"AWS::AppMesh::VirtualService.VirtualServiceProvider":{"attributes":{},"description":"An object that represents the provider for a virtual service.","properties":{"VirtualNode":"The virtual node associated with a virtual service.","VirtualRouter":"The virtual router associated with a virtual service."}},"AWS::AppMesh::VirtualService.VirtualServiceSpec":{"attributes":{},"description":"An object that represents the specification of a virtual service.","properties":{"Provider":"The App Mesh object that is acting as the provider for a virtual service. You can specify a single virtual node or virtual router."}},"AWS::AppRunner::AutoScalingConfiguration":{"attributes":{"AutoScalingConfigurationArn":"The Amazon Resource Name (ARN) of this auto scaling configuration.","AutoScalingConfigurationRevision":"The revision of this auto scaling configuration. It\'s unique among all the active configurations that share the same `AutoScalingConfigurationName` .","Latest":"It\'s set to true for the configuration with the highest `Revision` among all configurations that share the same `AutoScalingConfigurationName` . It\'s set to false otherwise. App Runner temporarily doubles the number of provisioned instances during deployments, to maintain the same capacity for both old and new code.","Ref":""},"description":"Specify an AWS App Runner Automatic Scaling configuration by using the `AWS::AppRunner::AutoScalingConfiguration` resource in an AWS CloudFormation template. \\n\\nThe `AWS::AppRunner::AutoScalingConfiguration` resource is an AWS App Runner resource type that specifies an App Runner automatic scaling configuration.\\n\\nApp Runner requires this resource to set non-default auto scaling settings for instances used to process the web requests. You can share an auto scaling configuration across multiple services.\\n\\nCreate multiple revisions of a configuration by calling this action multiple times using the same `AutoScalingConfigurationName` . The call returns incremental `AutoScalingConfigurationRevision` values. When you create a service and configure an auto scaling configuration resource, the service uses the latest active revision of the auto scaling configuration by default. You can optionally configure the service to use a specific revision.\\n\\nConfigure a higher `MinSize` to increase the spread of your App Runner service over more Availability Zones in the AWS Region . The tradeoff is a higher minimal cost.\\n\\nConfigure a lower `MaxSize` to control your cost. The tradeoff is lower responsiveness during peak demand.","properties":{"AutoScalingConfigurationName":"The customer-provided auto scaling configuration name. It can be used in multiple revisions of a configuration.","MaxConcurrency":"The maximum number of concurrent requests that an instance processes. If the number of concurrent requests exceeds this limit, App Runner scales the service up.","MaxSize":"The maximum number of instances that a service scales up to. At most `MaxSize` instances actively serve traffic for your service.","MinSize":"The minimum number of instances that App Runner provisions for a service. The service always has at least `MinSize` provisioned instances. Some of them actively serve traffic. The rest of them (provisioned and inactive instances) are a cost-effective compute capacity reserve and are ready to be quickly activated. You pay for memory usage of all the provisioned instances. You pay for CPU usage of only the active subset.\\n\\nApp Runner temporarily doubles the number of provisioned instances during deployments, to maintain the same capacity for both old and new code.","Tags":"A list of metadata items that you can associate with your auto scaling configuration resource. A tag is a key-value pair."}},"AWS::AppRunner::ObservabilityConfiguration":{"attributes":{"Latest":"It\'s set to `true` for the configuration with the highest `Revision` among all configurations that share the same `ObservabilityConfigurationName` . It\'s set to `false` otherwise.","ObservabilityConfigurationArn":"The Amazon Resource Name (ARN) of this observability configuration.","ObservabilityConfigurationRevision":"The revision of this observability configuration. It\'s unique among all the active configurations ( `\\"Status\\": \\"ACTIVE\\"` ) that share the same `ObservabilityConfigurationName` .","Ref":""},"description":"Specify an AWS App Runner observability configuration by using the `AWS::AppRunner::ObservabilityConfiguration` resource in an AWS CloudFormation template. \\n\\nThe `AWS::AppRunner::ObservabilityConfiguration` resource is an AWS App Runner resource type that specifies an App Runner observability configuration.\\n\\nApp Runner requires this resource when you specify App Runner services and you want to enable non-default observability features. You can share an observability configuration across multiple services.\\n\\nCreate multiple revisions of a configuration by specifying this resource multiple times using the same `ObservabilityConfigurationName` . App Runner creates multiple resources with incremental `ObservabilityConfigurationRevision` values. When you specify a service and configure an observability configuration resource, the service uses the latest active revision of the observability configuration by default. You can optionally configure the service to use a specific revision.\\n\\nThe observability configuration resource is designed to configure multiple features (currently one feature, tracing). This resource takes optional parameters that describe the configuration of these features (currently one parameter, `TraceConfiguration` ). If you don\'t specify a feature parameter, App Runner doesn\'t enable the feature.","properties":{"ObservabilityConfigurationName":"A name for the observability configuration. When you use it for the first time in an AWS Region , App Runner creates revision number `1` of this name. When you use the same name in subsequent calls, App Runner creates incremental revisions of the configuration.\\n\\n> The name `DefaultConfiguration` is reserved. You can\'t use it to create a new observability configuration, and you can\'t create a revision of it.\\n> \\n> When you want to use your own observability configuration for your App Runner service, *create a configuration with a different name* , and then provide it when you create or update your service. \\n\\nIf you don\'t specify a name, AWS CloudFormation generates a name for your observability configuration.","Tags":"A list of metadata items that you can associate with your observability configuration resource. A tag is a key-value pair.","TraceConfiguration":"The configuration of the tracing feature within this observability configuration. If you don\'t specify it, App Runner doesn\'t enable tracing."}},"AWS::AppRunner::ObservabilityConfiguration.TraceConfiguration":{"attributes":{},"description":"Describes the configuration of the tracing feature within an AWS App Runner observability configuration.","properties":{"Vendor":"The implementation provider chosen for tracing App Runner services."}},"AWS::AppRunner::Service":{"attributes":{"Ref":"When the logical ID of this resource is provided to the `Ref` intrinsic function, `Ref` returns the ARN of the App Runner service.","ServiceArn":"The Amazon Resource Name (ARN) of this service.","ServiceId":"An ID that App Runner generated for this service. It\'s unique within the AWS Region .","ServiceUrl":"A subdomain URL that App Runner generated for this service. You can use this URL to access your service web application.","Status":"The current state of the App Runner service. These particular values mean the following.\\n\\n- `CREATE_FAILED` – The service failed to create. To troubleshoot this failure, read the failure events and logs, change any parameters that need to be fixed, and retry the call to create the service.\\n\\nThe failed service isn\'t usable, and still counts towards your service quota. When you\'re done analyzing the failure, delete the service.\\n- `DELETE_FAILED` – The service failed to delete and can\'t be successfully recovered. Retry the service deletion call to ensure that all related resources are removed."},"description":"Specify an AWS App Runner service by using the `AWS::AppRunner::Service` resource in an AWS CloudFormation template. \\n\\nThe `AWS::AppRunner::Service` resource is an AWS App Runner resource type that specifies an App Runner service.","properties":{"AutoScalingConfigurationArn":"The Amazon Resource Name (ARN) of an App Runner automatic scaling configuration resource that you want to associate with your service. If not provided, App Runner associates the latest revision of a default auto scaling configuration.\\n\\nSpecify an ARN with a name and a revision number to associate that revision. For example: `arn:aws:apprunner:us-east-1:123456789012:autoscalingconfiguration/high-availability/3`\\n\\nSpecify just the name to associate the latest revision. For example: `arn:aws:apprunner:us-east-1:123456789012:autoscalingconfiguration/high-availability`","EncryptionConfiguration":"An optional custom encryption key that App Runner uses to encrypt the copy of your source repository that it maintains and your service logs. By default, App Runner uses an AWS managed key .","HealthCheckConfiguration":"The settings for the health check that AWS App Runner performs to monitor the health of the App Runner service.","InstanceConfiguration":"The runtime configuration of instances (scaling units) of your service.","NetworkConfiguration":"Configuration settings related to network traffic of the web application that the App Runner service runs.","ObservabilityConfiguration":"The observability configuration of your service.","ServiceName":"A name for the App Runner service. It must be unique across all the running App Runner services in your AWS account in the AWS Region .\\n\\nIf you don\'t specify a name, AWS CloudFormation generates a name for your service.","SourceConfiguration":"The source to deploy to the App Runner service. It can be a code or an image repository.","Tags":"An optional list of metadata items that you can associate with the App Runner service resource. A tag is a key-value pair."}},"AWS::AppRunner::Service.AuthenticationConfiguration":{"attributes":{},"description":"Describes resources needed to authenticate access to some source repositories. The specific resource depends on the repository provider.","properties":{"AccessRoleArn":"The Amazon Resource Name (ARN) of the IAM role that grants the App Runner service access to a source repository. It\'s required for ECR image repositories (but not for ECR Public repositories).","ConnectionArn":"The Amazon Resource Name (ARN) of the App Runner connection that enables the App Runner service to connect to a source repository. It\'s required for GitHub code repositories."}},"AWS::AppRunner::Service.CodeConfiguration":{"attributes":{},"description":"Describes the configuration that AWS App Runner uses to build and run an App Runner service from a source code repository.","properties":{"CodeConfigurationValues":"The basic configuration for building and running the App Runner service. Use it to quickly launch an App Runner service without providing a `apprunner.yaml` file in the source code repository (or ignoring the file if it exists).","ConfigurationSource":"The source of the App Runner configuration. Values are interpreted as follows:\\n\\n- `REPOSITORY` – App Runner reads configuration values from the `apprunner.yaml` file in the source code repository and ignores `CodeConfigurationValues` .\\n- `API` – App Runner uses configuration values provided in `CodeConfigurationValues` and ignores the `apprunner.yaml` file in the source code repository."}},"AWS::AppRunner::Service.CodeConfigurationValues":{"attributes":{},"description":"Describes the basic configuration needed for building and running an AWS App Runner service. This type doesn\'t support the full set of possible configuration options. Fur full configuration capabilities, use a `apprunner.yaml` file in the source code repository.","properties":{"BuildCommand":"The command App Runner runs to build your application.","Port":"The port that your application listens to in the container.\\n\\nDefault: `8080`","Runtime":"A runtime environment type for building and running an App Runner service. It represents a programming language runtime.","RuntimeEnvironmentSecrets":"An array of key-value pairs representing the secrets and parameters that get referenced to your service as an environment variable. The supported values are either the full Amazon Resource Name (ARN) of the AWS Secrets Manager secret or the full ARN of the parameter in the AWS Systems Manager Parameter Store.\\n\\n> - If the AWS Systems Manager Parameter Store parameter exists in the same AWS Region as the service that you\'re launching, you can use either the full ARN or name of the secret. If the parameter exists in a different Region, then the full ARN must be specified.\\n> - Currently, cross account referencing of AWS Systems Manager Parameter Store parameter is not supported.","RuntimeEnvironmentVariables":"The environment variables that are available to your running AWS App Runner service. An array of key-value pairs.","StartCommand":"The command App Runner runs to start your application."}},"AWS::AppRunner::Service.CodeRepository":{"attributes":{},"description":"Describes a source code repository.","properties":{"CodeConfiguration":"Configuration for building and running the service from a source code repository.\\n\\n> `CodeConfiguration` is required only for `CreateService` request.","RepositoryUrl":"The location of the repository that contains the source code.","SourceCodeVersion":"The version that should be used within the source code repository."}},"AWS::AppRunner::Service.EgressConfiguration":{"attributes":{},"description":"Describes configuration settings related to outbound network traffic of an AWS App Runner service.","properties":{"EgressType":"The type of egress configuration.\\n\\nSet to `DEFAULT` for access to resources hosted on public networks.\\n\\nSet to `VPC` to associate your service to a custom VPC specified by `VpcConnectorArn` .","VpcConnectorArn":"The Amazon Resource Name (ARN) of the App Runner VPC connector that you want to associate with your App Runner service. Only valid when `EgressType = VPC` ."}},"AWS::AppRunner::Service.EncryptionConfiguration":{"attributes":{},"description":"Describes a custom encryption key that AWS App Runner uses to encrypt copies of the source repository and service logs.","properties":{"KmsKey":"The ARN of the KMS key that\'s used for encryption."}},"AWS::AppRunner::Service.HealthCheckConfiguration":{"attributes":{},"description":"Describes the settings for the health check that AWS App Runner performs to monitor the health of a service.","properties":{"HealthyThreshold":"The number of consecutive checks that must succeed before App Runner decides that the service is healthy.\\n\\nDefault: `1`","Interval":"The time interval, in seconds, between health checks.\\n\\nDefault: `5`","Path":"The URL that health check requests are sent to.\\n\\n`Path` is only applicable when you set `Protocol` to `HTTP` .\\n\\nDefault: `\\"/\\"`","Protocol":"The IP protocol that App Runner uses to perform health checks for your service.\\n\\nIf you set `Protocol` to `HTTP` , App Runner sends health check requests to the HTTP path specified by `Path` .\\n\\nDefault: `TCP`","Timeout":"The time, in seconds, to wait for a health check response before deciding it failed.\\n\\nDefault: `2`","UnhealthyThreshold":"The number of consecutive checks that must fail before App Runner decides that the service is unhealthy.\\n\\nDefault: `5`"}},"AWS::AppRunner::Service.ImageConfiguration":{"attributes":{},"description":"Describes the configuration that AWS App Runner uses to run an App Runner service using an image pulled from a source image repository.","properties":{"Port":"The port that your application listens to in the container.\\n\\nDefault: `8080`","RuntimeEnvironmentSecrets":"An array of key-value pairs representing the secrets and parameters that get referenced to your service as an environment variable. The supported values are either the full Amazon Resource Name (ARN) of the AWS Secrets Manager secret or the full ARN of the parameter in the AWS Systems Manager Parameter Store.\\n\\n> - If the AWS Systems Manager Parameter Store parameter exists in the same AWS Region as the service that you\'re launching, you can use either the full ARN or name of the secret. If the parameter exists in a different Region, then the full ARN must be specified.\\n> - Currently, cross account referencing of AWS Systems Manager Parameter Store parameter is not supported.","RuntimeEnvironmentVariables":"Environment variables that are available to your running App Runner service. An array of key-value pairs.","StartCommand":"An optional command that App Runner runs to start the application in the source image. If specified, this command overrides the Docker image’s default start command."}},"AWS::AppRunner::Service.ImageRepository":{"attributes":{},"description":"Describes a source image repository.","properties":{"ImageConfiguration":"Configuration for running the identified image.","ImageIdentifier":"The identifier of an image.\\n\\nFor an image in Amazon Elastic Container Registry (Amazon ECR), this is an image name. For the image name format, see [Pulling an image](https://docs.aws.amazon.com/AmazonECR/latest/userguide/docker-pull-ecr-image.html) in the *Amazon ECR User Guide* .","ImageRepositoryType":"The type of the image repository. This reflects the repository provider and whether the repository is private or public."}},"AWS::AppRunner::Service.IngressConfiguration":{"attributes":{},"description":"Network configuration settings for inbound network traffic.","properties":{"IsPubliclyAccessible":"Specifies whether your App Runner service is publicly accessible. To make the service publicly accessible set it to `True` . To make the service privately accessible, from only within an Amazon VPC set it to `False` ."}},"AWS::AppRunner::Service.InstanceConfiguration":{"attributes":{},"description":"Describes the runtime configuration of an AWS App Runner service instance (scaling unit).","properties":{"Cpu":"The number of CPU units reserved for each instance of your App Runner service.\\n\\nDefault: `1 vCPU`","InstanceRoleArn":"The Amazon Resource Name (ARN) of an IAM role that provides permissions to your App Runner service. These are permissions that your code needs when it calls any AWS APIs.","Memory":"The amount of memory, in MB or GB, reserved for each instance of your App Runner service.\\n\\nDefault: `2 GB`"}},"AWS::AppRunner::Service.KeyValuePair":{"attributes":{},"description":"Describes a key-value pair, which is a string-to-string mapping.","properties":{"Name":"The key name string to map to a value.","Value":"The value string to which the key name is mapped."}},"AWS::AppRunner::Service.NetworkConfiguration":{"attributes":{},"description":"Describes configuration settings related to network traffic of an AWS App Runner service. Consists of embedded objects for each configurable network feature.","properties":{"EgressConfiguration":"Network configuration settings for outbound message traffic.","IngressConfiguration":"Network configuration settings for inbound message traffic."}},"AWS::AppRunner::Service.ServiceObservabilityConfiguration":{"attributes":{},"description":"Describes the observability configuration of an AWS App Runner service. These are additional observability features, like tracing, that you choose to enable. They\'re configured in a separate resource that you associate with your service.","properties":{"ObservabilityConfigurationArn":"The Amazon Resource Name (ARN) of the observability configuration that is associated with the service. Specified only when `ObservabilityEnabled` is `true` .\\n\\nSpecify an ARN with a name and a revision number to associate that revision. For example: `arn:aws:apprunner:us-east-1:123456789012:observabilityconfiguration/xray-tracing/3`\\n\\nSpecify just the name to associate the latest revision. For example: `arn:aws:apprunner:us-east-1:123456789012:observabilityconfiguration/xray-tracing`","ObservabilityEnabled":"When `true` , an observability configuration resource is associated with the service, and an `ObservabilityConfigurationArn` is specified."}},"AWS::AppRunner::Service.SourceCodeVersion":{"attributes":{},"description":"Identifies a version of code that AWS App Runner refers to within a source code repository.","properties":{"Type":"The type of version identifier.\\n\\nFor a git-based repository, branches represent versions.","Value":"A source code version.\\n\\nFor a git-based repository, a branch name maps to a specific version. App Runner uses the most recent commit to the branch."}},"AWS::AppRunner::Service.SourceConfiguration":{"attributes":{},"description":"Describes the source deployed to an AWS App Runner service. It can be a code or an image repository.","properties":{"AuthenticationConfiguration":"Describes the resources that are needed to authenticate access to some source repositories.","AutoDeploymentsEnabled":"If `true` , continuous integration from the source repository is enabled for the App Runner service. Each repository change (including any source code commit or new image version) starts a deployment.\\n\\nDefault: App Runner sets to `false` for a source image that uses an ECR Public repository or an ECR repository that\'s in an AWS account other than the one that the service is in. App Runner sets to `true` in all other cases (which currently include a source code repository or a source image using a same-account ECR repository).","CodeRepository":"The description of a source code repository.\\n\\nYou must provide either this member or `ImageRepository` (but not both).","ImageRepository":"The description of a source image repository.\\n\\nYou must provide either this member or `CodeRepository` (but not both)."}},"AWS::AppRunner::VpcConnector":{"attributes":{"Ref":"","VpcConnectorArn":"The Amazon Resource Name (ARN) of this VPC connector.","VpcConnectorRevision":"The revision of this VPC connector. It\'s unique among all the active connectors ( `\\"Status\\": \\"ACTIVE\\"` ) that share the same `Name` .\\n\\n> At this time, App Runner supports only one revision per name."},"description":"Specify an AWS App Runner VPC connector by using the `AWS::AppRunner::VpcConnector` resource in an AWS CloudFormation template. \\n\\nThe `AWS::AppRunner::VpcConnector` resource is an AWS App Runner resource type that specifies an App Runner VPC connector.\\n\\nApp Runner requires this resource when you want to associate your App Runner service to a custom Amazon Virtual Private Cloud ( Amazon VPC ).","properties":{"SecurityGroups":"A list of IDs of security groups that App Runner should use for access to AWS resources under the specified subnets. If not specified, App Runner uses the default security group of the Amazon VPC. The default security group allows all outbound traffic.","Subnets":"A list of IDs of subnets that App Runner should use when it associates your service with a custom Amazon VPC. Specify IDs of subnets of a single Amazon VPC. App Runner determines the Amazon VPC from the subnets you specify.\\n\\n> App Runner currently only provides support for IPv4.","Tags":"A list of metadata items that you can associate with your VPC connector resource. A tag is a key-value pair.","VpcConnectorName":"A name for the VPC connector.\\n\\nIf you don\'t specify a name, AWS CloudFormation generates a name for your VPC connector."}},"AWS::AppRunner::VpcIngressConnection":{"attributes":{"DomainName":"The domain name associated with the VPC Ingress Connection resource.","Ref":"","Status":"The current status of the VPC Ingress Connection. The VPC Ingress Connection displays one of the following statuses: `AVAILABLE` , `PENDING_CREATION` , `PENDING_DELETION` , `FAILED_CREATION` , `FAILED_DELETION` , `PENDNG_UPDATE` , `FAILED_UPDATE` , and `DELETED` .","VpcIngressConnectionArn":"The Amazon Resource Name (ARN) of the VPC Ingress Connection."},"description":"Specify an AWS App Runner VPC Ingress Connection by using the `AWS::AppRunner::VpcIngressConnection` resource in an AWS CloudFormation template. \\n\\nThe `AWS::AppRunner::VpcIngressConnection` resource is an AWS App Runner resource type that specifies an App Runner VPC Ingress Connection.\\n\\nApp Runner requires this resource when you want to associate your App Runner service to an Amazon VPC endpoint.","properties":{"IngressVpcConfiguration":"Specifications for the customer’s Amazon VPC and the related AWS PrivateLink VPC endpoint that are used to create the VPC Ingress Connection resource.","ServiceArn":"The Amazon Resource Name (ARN) for this App Runner service that is used to create the VPC Ingress Connection resource.","Tags":"An optional list of metadata items that you can associate with the VPC Ingress Connection resource. A tag is a key-value pair.","VpcIngressConnectionName":"The customer-provided VPC Ingress Connection name."}},"AWS::AppRunner::VpcIngressConnection.IngressVpcConfiguration":{"attributes":{},"description":"Specifications for the customer’s VPC and related PrivateLink VPC endpoint that are used to associate with the VPC Ingress Connection resource.","properties":{"VpcEndpointId":"The ID of the VPC endpoint that your App Runner service connects to.","VpcId":"The ID of the VPC that is used for the VPC endpoint."}},"AWS::AppStream::AppBlock":{"attributes":{"Arn":"The ARN of the app block.","CreatedTime":"The time when the app block was created.","Ref":"When you pass the logical ID of this resource to the intrinsic `Ref` function, `Ref` returns the `Arn` of the app block, such as `arn:aws:appstream:us-west-2:123456789123:app-block/abcdefg` .\\n\\nFor more information about using the `Ref` function, see [Ref](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-ref.html) ."},"description":"This resource creates an app block. App blocks store details about the virtual hard disk that contains the files for the application in an S3 bucket. It also stores the setup script with details about how to mount the virtual hard disk. App blocks are only supported for Elastic fleets.","properties":{"Description":"The description of the app block.","DisplayName":"The display name of the app block.","Name":"The name of the app block.\\n\\n*Pattern* : `^[a-zA-Z0-9][a-zA-Z0-9_.-]{0,100}$`","PackagingType":"The packaging type of the app block.","PostSetupScriptDetails":"The post setup script details of the app block.\\n\\nThis only applies to app blocks with PackagingType `APPSTREAM2` .","SetupScriptDetails":"The setup script details of the app block.","SourceS3Location":"The source S3 location of the app block.","Tags":"The tags of the app block."}},"AWS::AppStream::AppBlock.S3Location":{"attributes":{},"description":"The S3 location of the app block.","properties":{"S3Bucket":"The S3 bucket of the app block.","S3Key":"The S3 key of the S3 object of the virtual hard disk.\\n\\nThis is required when it\'s used by `SetupScriptDetails` and `PostSetupScriptDetails` ."}},"AWS::AppStream::AppBlock.ScriptDetails":{"attributes":{},"description":"The details of the script.","properties":{"ExecutableParameters":"The parameters used in the run path for the script.","ExecutablePath":"The run path for the script.","ScriptS3Location":"The S3 object location of the script.","TimeoutInSeconds":"The run timeout, in seconds, for the script."}},"AWS::AppStream::AppBlockBuilder":{"attributes":{"Arn":"","CreatedTime":"","Ref":""},"description":"Creates an app block builder.","properties":{"AccessEndpoints":"","AppBlockArns":"","Description":"The description of the app block builder.","DisplayName":"The display name of the app block builder.","EnableDefaultInternetAccess":"Indicates whether default internet access is enabled for the app block builder.","IamRoleArn":"The ARN of the IAM role that is applied to the app block builder.","InstanceType":"The instance type of the app block builder.","Name":"The name of the app block builder.","Platform":"The platform of the app block builder.\\n\\n`WINDOWS_SERVER_2019` is the only valid value.","Tags":"","VpcConfig":"The VPC configuration for the app block builder."}},"AWS::AppStream::AppBlockBuilder.AccessEndpoint":{"attributes":{},"description":"Describes an interface VPC endpoint (interface endpoint) that lets you create a private connection between the virtual private cloud (VPC) that you specify and AppStream 2.0. When you specify an interface endpoint for a stack, users of the stack can connect to AppStream 2.0 only through that endpoint. When you specify an interface endpoint for an image builder, administrators can connect to the image builder only through that endpoint.","properties":{"EndpointType":"The type of interface endpoint.","VpceId":"The identifier (ID) of the VPC in which the interface endpoint is used."}},"AWS::AppStream::AppBlockBuilder.VpcConfig":{"attributes":{},"description":"Describes VPC configuration information for fleets and image builders.","properties":{"SecurityGroupIds":"The identifiers of the security groups for the fleet or image builder.","SubnetIds":"The identifiers of the subnets to which a network interface is attached from the fleet instance or image builder instance. Fleet instances use one or more subnets. Image builder instances use one subnet."}},"AWS::AppStream::Application":{"attributes":{"Arn":"The ARN of the application.","CreatedTime":"The time when the application was created.","Ref":"When you pass the logical ID of this resource to the intrinsic `Ref` function, `Ref` returns the `Arn` of the application, such as `arn:aws:appstream:us-west-2:123456789123:application/abcdefg` .\\n\\nFor more information about using the `Ref` function, see [Ref](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-ref.html) ."},"description":"This resource creates an application. Applications store the details about how to launch applications on streaming instances. This is only supported for Elastic fleets.","properties":{"AppBlockArn":"The app block ARN with which the application should be associated.","AttributesToDelete":"A list of attributes to delete from an application.","Description":"The description of the application.","DisplayName":"The display name of the application. This name is visible to users in the application catalog.","IconS3Location":"The icon S3 location of the application.","InstanceFamilies":"The instance families the application supports.\\n\\n*Allowed Values* : `GENERAL_PURPOSE` | `GRAPHICS_G4`","LaunchParameters":"The launch parameters of the application.","LaunchPath":"The launch path of the application.","Name":"The name of the application. This name is visible to users when a name is not specified in the DisplayName property.\\n\\n*Pattern* : `^[a-zA-Z0-9][a-zA-Z0-9_.-]{0,100}$`","Platforms":"The platforms the application supports.\\n\\n*Allowed Values* : `WINDOWS_SERVER_2019` | `AMAZON_LINUX2`","Tags":"The tags of the application.","WorkingDirectory":"The working directory of the application."}},"AWS::AppStream::Application.S3Location":{"attributes":{},"description":"The S3 location of the application icon.","properties":{"S3Bucket":"The S3 bucket of the S3 object.","S3Key":"The S3 key of the S3 object."}},"AWS::AppStream::ApplicationEntitlementAssociation":{"attributes":{"Ref":"When you pass the logical ID of this resource to the intrinsic `Ref` function, `Ref` returns the combination of the `StackName` , `EntitlementName` , and `ApplicationIdentifier` , such as `abcdefStack|abcdefEntitlement|abcdefApplication` .\\n\\nFor more information about using the `Ref` function, see [Ref](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-ref.html) ."},"description":"Associates an application to an entitlement.","properties":{"ApplicationIdentifier":"The identifier of the application.","EntitlementName":"The name of the entitlement.","StackName":"The name of the stack."}},"AWS::AppStream::ApplicationFleetAssociation":{"attributes":{"Ref":"When you pass the logical ID of this resource to the intrinsic `Ref` function, `Ref` returns a combination of the `FleetName` and `ApplicationArn` , such as `aabcdefgFleet|arn:aws:appstream:us-west-2:123456789123:application/abcdefg` .\\n\\nFor more information about using the `Ref` function, see [Ref](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-ref.html) ."},"description":"This resource associates the specified application with the specified fleet. This is only supported for Elastic fleets.","properties":{"ApplicationArn":"The ARN of the application.","FleetName":"The name of the fleet."}},"AWS::AppStream::DirectoryConfig":{"attributes":{},"description":"The `AWS::AppStream::DirectoryConfig` resource specifies the configuration information required to join Amazon AppStream 2.0 fleets and image builders to Microsoft Active Directory domains.","properties":{"CertificateBasedAuthProperties":"The certificate-based authentication properties used to authenticate SAML 2.0 Identity Provider (IdP) user identities to Active Directory domain-joined streaming instances.","DirectoryName":"The fully qualified name of the directory (for example, corp.example.com).","OrganizationalUnitDistinguishedNames":"The distinguished names of the organizational units for computer accounts.","ServiceAccountCredentials":"The credentials for the service account used by the streaming instance to connect to the directory. Do not use this parameter directly. Use `ServiceAccountCredentials` as an input parameter with `noEcho` as shown in the [Parameters](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/parameters-section-structure.html) . For best practices information, see [Do Not Embed Credentials in Your Templates](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/best-practices.html#creds) ."}},"AWS::AppStream::DirectoryConfig.CertificateBasedAuthProperties":{"attributes":{},"description":"The certificate-based authentication properties used to authenticate SAML 2.0 Identity Provider (IdP) user identities to Active Directory domain-joined streaming instances.","properties":{"CertificateAuthorityArn":"The ARN of the AWS Certificate Manager Private CA resource.","Status":"The status of the certificate-based authentication properties. Fallback is turned on by default when certificate-based authentication is *Enabled* . Fallback allows users to log in using their AD domain password if certificate-based authentication is unsuccessful, or to unlock a desktop lock screen. *Enabled_no_directory_login_fallback* enables certificate-based authentication, but does not allow users to log in using their AD domain password. Users will be disconnected to re-authenticate using certificates."}},"AWS::AppStream::DirectoryConfig.ServiceAccountCredentials":{"attributes":{},"description":"The credentials for the service account used by the streaming instance to connect to the directory.","properties":{"AccountName":"The user name of the account. This account must have the following privileges: create computer objects, join computers to the domain, and change/reset the password on descendant computer objects for the organizational units specified.","AccountPassword":"The password for the account."}},"AWS::AppStream::Entitlement":{"attributes":{"CreatedTime":"The time when the entitlement was created.","LastModifiedTime":"The time when the entitlement was last modified.","Ref":"When you pass the logical ID of this resource to the intrinsic `Ref` function, `Ref` returns the combination of the `StackName` and `Name` , such as `abcdefStack|abcdefEntitlement` .\\n\\nFor more information about using the `Ref` function, see [Ref](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-ref.html) ."},"description":"Creates an entitlement to control access, based on user attributes, to specific applications within a stack. Entitlements apply to SAML 2.0 federated user identities. Amazon AppStream 2.0 user pool and streaming URL users are entitled to all applications in a stack. Entitlements don\'t apply to the desktop stream view application or to applications managed by a dynamic app provider using the Dynamic Application Framework.","properties":{"AppVisibility":"Specifies whether to entitle all apps or only selected apps.","Attributes":"The attributes of the entitlement.","Description":"The description of the entitlement.","Name":"The name of the entitlement.","StackName":"The name of the stack."}},"AWS::AppStream::Entitlement.Attribute":{"attributes":{},"description":"An attribute that belongs to an entitlement. Application entitlements work by matching a supported SAML 2.0 attribute name to a value when a user identity federates to an AppStream 2.0 SAML application.","properties":{"Name":"A supported AWS IAM SAML PrincipalTag attribute that is matched to a value when a user identity federates to an AppStream 2.0 SAML application.\\n\\nThe following are supported values:\\n\\n- roles\\n- department\\n- organization\\n- groups\\n- title\\n- costCenter\\n- userType","Value":"A value that is matched to a supported SAML attribute name when a user identity federates to an AppStream 2.0 SAML application."}},"AWS::AppStream::Fleet":{"attributes":{},"description":"The `AWS::AppStream::Fleet` resource creates a fleet for Amazon AppStream 2.0. A fleet consists of streaming instances that run a specified image when using Always-On or On-Demand.","properties":{"ComputeCapacity":"The desired capacity for the fleet. This is not allowed for Elastic fleets.","Description":"The description to display.","DisconnectTimeoutInSeconds":"The amount of time that a streaming session remains active after users disconnect. If users try to reconnect to the streaming session after a disconnection or network interruption within this time interval, they are connected to their previous session. Otherwise, they are connected to a new session with a new streaming instance.\\n\\nSpecify a value between 60 and 360000.","DisplayName":"The fleet name to display.","DomainJoinInfo":"The name of the directory and organizational unit (OU) to use to join the fleet to a Microsoft Active Directory domain. This is not allowed for Elastic fleets.","EnableDefaultInternetAccess":"Enables or disables default internet access for the fleet.","FleetType":"The fleet type.\\n\\n- **ALWAYS_ON** - Provides users with instant-on access to their apps. You are charged for all running instances in your fleet, even if no users are streaming apps.\\n- **ON_DEMAND** - Provide users with access to applications after they connect, which takes one to two minutes. You are charged for instance streaming when users are connected and a small hourly fee for instances that are not streaming apps.\\n- **ELASTIC** - The pool of streaming instances is managed by Amazon AppStream 2.0. When a user selects their application or desktop to launch, they will start streaming after the app block has been downloaded and mounted to a streaming instance.\\n\\n*Allowed Values* : `ALWAYS_ON` | `ELASTIC` | `ON_DEMAND`","IamRoleArn":"The ARN of the IAM role that is applied to the fleet. To assume a role, the fleet instance calls the AWS Security Token Service `AssumeRole` API operation and passes the ARN of the role to use. The operation creates a new session with temporary credentials. AppStream 2.0 retrieves the temporary credentials and creates the *appstream_machine_role* credential profile on the instance.\\n\\nFor more information, see [Using an IAM Role to Grant Permissions to Applications and Scripts Running on AppStream 2.0 Streaming Instances](https://docs.aws.amazon.com/appstream2/latest/developerguide/using-iam-roles-to-grant-permissions-to-applications-scripts-streaming-instances.html) in the *Amazon AppStream 2.0 Administration Guide* .","IdleDisconnectTimeoutInSeconds":"The amount of time that users can be idle (inactive) before they are disconnected from their streaming session and the `DisconnectTimeoutInSeconds` time interval begins. Users are notified before they are disconnected due to inactivity. If they try to reconnect to the streaming session before the time interval specified in `DisconnectTimeoutInSeconds` elapses, they are connected to their previous session. Users are considered idle when they stop providing keyboard or mouse input during their streaming session. File uploads and downloads, audio in, audio out, and pixels changing do not qualify as user activity. If users continue to be idle after the time interval in `IdleDisconnectTimeoutInSeconds` elapses, they are disconnected.\\n\\nTo prevent users from being disconnected due to inactivity, specify a value of 0. Otherwise, specify a value between 60 and 3600.\\n\\nIf you enable this feature, we recommend that you specify a value that corresponds exactly to a whole number of minutes (for example, 60, 120, and 180). If you don\'t do this, the value is rounded to the nearest minute. For example, if you specify a value of 70, users are disconnected after 1 minute of inactivity. If you specify a value that is at the midpoint between two different minutes, the value is rounded up. For example, if you specify a value of 90, users are disconnected after 2 minutes of inactivity.","ImageArn":"The ARN of the public, private, or shared image to use.","ImageName":"The name of the image used to create the fleet.","InstanceType":"The instance type to use when launching fleet instances. The following instance types are available for non-Elastic fleets:\\n\\n- stream.standard.small\\n- stream.standard.medium\\n- stream.standard.large\\n- stream.compute.large\\n- stream.compute.xlarge\\n- stream.compute.2xlarge\\n- stream.compute.4xlarge\\n- stream.compute.8xlarge\\n- stream.memory.large\\n- stream.memory.xlarge\\n- stream.memory.2xlarge\\n- stream.memory.4xlarge\\n- stream.memory.8xlarge\\n- stream.memory.z1d.large\\n- stream.memory.z1d.xlarge\\n- stream.memory.z1d.2xlarge\\n- stream.memory.z1d.3xlarge\\n- stream.memory.z1d.6xlarge\\n- stream.memory.z1d.12xlarge\\n- stream.graphics-design.large\\n- stream.graphics-design.xlarge\\n- stream.graphics-design.2xlarge\\n- stream.graphics-design.4xlarge\\n- stream.graphics-desktop.2xlarge\\n- stream.graphics.g4dn.xlarge\\n- stream.graphics.g4dn.2xlarge\\n- stream.graphics.g4dn.4xlarge\\n- stream.graphics.g4dn.8xlarge\\n- stream.graphics.g4dn.12xlarge\\n- stream.graphics.g4dn.16xlarge\\n- stream.graphics-pro.4xlarge\\n- stream.graphics-pro.8xlarge\\n- stream.graphics-pro.16xlarge\\n\\nThe following instance types are available for Elastic fleets:\\n\\n- stream.standard.small\\n- stream.standard.medium","MaxConcurrentSessions":"The maximum number of concurrent sessions that can be run on an Elastic fleet. This setting is required for Elastic fleets, but is not used for other fleet types.","MaxUserDurationInSeconds":"The maximum amount of time that a streaming session can remain active, in seconds. If users are still connected to a streaming instance five minutes before this limit is reached, they are prompted to save any open documents before being disconnected. After this time elapses, the instance is terminated and replaced by a new instance.\\n\\nSpecify a value between 600 and 360000.","Name":"A unique name for the fleet.","Platform":"The platform of the fleet. Platform is a required setting for Elastic fleets, and is not used for other fleet types.\\n\\n*Allowed Values* : `WINDOWS_SERVER_2019` | `AMAZON_LINUX2`","SessionScriptS3Location":"The S3 location of the session scripts configuration zip file. This only applies to Elastic fleets.","StreamView":"The AppStream 2.0 view that is displayed to your users when they stream from the fleet. When `APP` is specified, only the windows of applications opened by users display. When `DESKTOP` is specified, the standard desktop that is provided by the operating system displays.\\n\\nThe default value is `APP` .","Tags":"An array of key-value pairs.","UsbDeviceFilterStrings":"The USB device filter strings that specify which USB devices a user can redirect to the fleet streaming session, when using the Windows native client. This is allowed but not required for Elastic fleets.","VpcConfig":"The VPC configuration for the fleet. This is required for Elastic fleets, but not required for other fleet types."}},"AWS::AppStream::Fleet.ComputeCapacity":{"attributes":{},"description":"The desired capacity for a fleet.","properties":{"DesiredInstances":"The desired number of streaming instances."}},"AWS::AppStream::Fleet.DomainJoinInfo":{"attributes":{},"description":"The name of the directory and organizational unit (OU) to use to join a fleet to a Microsoft Active Directory domain.","properties":{"DirectoryName":"The fully qualified name of the directory (for example, corp.example.com).","OrganizationalUnitDistinguishedName":"The distinguished name of the organizational unit for computer accounts."}},"AWS::AppStream::Fleet.S3Location":{"attributes":{},"description":"Describes the S3 location.","properties":{"S3Bucket":"The S3 bucket of the S3 object.","S3Key":"The S3 key of the S3 object."}},"AWS::AppStream::Fleet.VpcConfig":{"attributes":{},"description":"The VPC configuration information for the fleet.","properties":{"SecurityGroupIds":"The identifiers of the security groups for the fleet.","SubnetIds":"The identifiers of the subnets to which a network interface is attached from the fleet instance. Fleet instances can use one or two subnets."}},"AWS::AppStream::ImageBuilder":{"attributes":{"Ref":"","StreamingUrl":"The URL to start an image builder streaming session, returned as a string."},"description":"The `AWS::AppStream::ImageBuilder` resource creates an image builder for Amazon AppStream 2.0. An image builder is a virtual machine that is used to create an image.\\n\\nThe initial state of the image builder is `PENDING` . When it is ready, the state is `RUNNING` .","properties":{"AccessEndpoints":"The list of virtual private cloud (VPC) interface endpoint objects. Administrators can connect to the image builder only through the specified endpoints.","AppstreamAgentVersion":"The version of the AppStream 2.0 agent to use for this image builder. To use the latest version of the AppStream 2.0 agent, specify [LATEST].","Description":"The description to display.","DisplayName":"The image builder name to display.","DomainJoinInfo":"The name of the directory and organizational unit (OU) to use to join the image builder to a Microsoft Active Directory domain.","EnableDefaultInternetAccess":"Enables or disables default internet access for the image builder.","IamRoleArn":"The ARN of the IAM role that is applied to the image builder. To assume a role, the image builder calls the AWS Security Token Service `AssumeRole` API operation and passes the ARN of the role to use. The operation creates a new session with temporary credentials. AppStream 2.0 retrieves the temporary credentials and creates the *appstream_machine_role* credential profile on the instance.\\n\\nFor more information, see [Using an IAM Role to Grant Permissions to Applications and Scripts Running on AppStream 2.0 Streaming Instances](https://docs.aws.amazon.com/appstream2/latest/developerguide/using-iam-roles-to-grant-permissions-to-applications-scripts-streaming-instances.html) in the *Amazon AppStream 2.0 Administration Guide* .","ImageArn":"The ARN of the public, private, or shared image to use.","ImageName":"The name of the image used to create the image builder.","InstanceType":"The instance type to use when launching the image builder. The following instance types are available:\\n\\n- stream.standard.small\\n- stream.standard.medium\\n- stream.standard.large\\n- stream.compute.large\\n- stream.compute.xlarge\\n- stream.compute.2xlarge\\n- stream.compute.4xlarge\\n- stream.compute.8xlarge\\n- stream.memory.large\\n- stream.memory.xlarge\\n- stream.memory.2xlarge\\n- stream.memory.4xlarge\\n- stream.memory.8xlarge\\n- stream.memory.z1d.large\\n- stream.memory.z1d.xlarge\\n- stream.memory.z1d.2xlarge\\n- stream.memory.z1d.3xlarge\\n- stream.memory.z1d.6xlarge\\n- stream.memory.z1d.12xlarge\\n- stream.graphics-design.large\\n- stream.graphics-design.xlarge\\n- stream.graphics-design.2xlarge\\n- stream.graphics-design.4xlarge\\n- stream.graphics-desktop.2xlarge\\n- stream.graphics.g4dn.xlarge\\n- stream.graphics.g4dn.2xlarge\\n- stream.graphics.g4dn.4xlarge\\n- stream.graphics.g4dn.8xlarge\\n- stream.graphics.g4dn.12xlarge\\n- stream.graphics.g4dn.16xlarge\\n- stream.graphics-pro.4xlarge\\n- stream.graphics-pro.8xlarge\\n- stream.graphics-pro.16xlarge","Name":"A unique name for the image builder.","Tags":"An array of key-value pairs.","VpcConfig":"The VPC configuration for the image builder. You can specify only one subnet."}},"AWS::AppStream::ImageBuilder.AccessEndpoint":{"attributes":{},"description":"Describes an interface VPC endpoint (interface endpoint) that lets you create a private connection between the virtual private cloud (VPC) that you specify and AppStream 2.0. When you specify an interface endpoint for a stack, users of the stack can connect to AppStream 2.0 only through that endpoint. When you specify an interface endpoint for an image builder, administrators can connect to the image builder only through that endpoint.","properties":{"EndpointType":"The type of interface endpoint.","VpceId":"The identifier (ID) of the VPC in which the interface endpoint is used."}},"AWS::AppStream::ImageBuilder.DomainJoinInfo":{"attributes":{},"description":"The name of the directory and organizational unit (OU) to use to join the image builder to a Microsoft Active Directory domain.","properties":{"DirectoryName":"The fully qualified name of the directory (for example, corp.example.com).","OrganizationalUnitDistinguishedName":"The distinguished name of the organizational unit for computer accounts."}},"AWS::AppStream::ImageBuilder.VpcConfig":{"attributes":{},"description":"The VPC configuration for the image builder.","properties":{"SecurityGroupIds":"The identifiers of the security groups for the image builder.","SubnetIds":"The identifier of the subnet to which a network interface is attached from the image builder instance. An image builder instance can use one subnet."}},"AWS::AppStream::Stack":{"attributes":{},"description":"The `AWS::AppStream::Stack` resource creates a stack to start streaming applications to Amazon AppStream 2.0 users. A stack consists of an associated fleet, user access policies, and storage configurations.","properties":{"AccessEndpoints":"The list of virtual private cloud (VPC) interface endpoint objects. Users of the stack can connect to AppStream 2.0 only through the specified endpoints.","ApplicationSettings":"The persistent application settings for users of the stack. When these settings are enabled, changes that users make to applications and Windows settings are automatically saved after each session and applied to the next session.","AttributesToDelete":"The stack attributes to delete.","DeleteStorageConnectors":"*This parameter has been deprecated.*\\n\\nDeletes the storage connectors currently enabled for the stack.","Description":"The description to display.","DisplayName":"The stack name to display.","EmbedHostDomains":"The domains where AppStream 2.0 streaming sessions can be embedded in an iframe. You must approve the domains that you want to host embedded AppStream 2.0 streaming sessions.","FeedbackURL":"The URL that users are redirected to after they click the Send Feedback link. If no URL is specified, no Send Feedback link is displayed.","Name":"The name of the stack.","RedirectURL":"The URL that users are redirected to after their streaming session ends.","StorageConnectors":"The storage connectors to enable.","StreamingExperienceSettings":"The streaming protocol that you want your stack to prefer. This can be UDP or TCP. Currently, UDP is only supported in the Windows native client.","Tags":"An array of key-value pairs.","UserSettings":"The actions that are enabled or disabled for users during their streaming sessions. By default, these actions are enabled."}},"AWS::AppStream::Stack.AccessEndpoint":{"attributes":{},"description":"Describes an interface VPC endpoint (interface endpoint) that lets you create a private connection between the virtual private cloud (VPC) that you specify and AppStream 2.0. When you specify an interface endpoint for a stack, users of the stack can connect to AppStream 2.0 only through that endpoint. When you specify an interface endpoint for an image builder, administrators can connect to the image builder only through that endpoint.","properties":{"EndpointType":"The type of interface endpoint.","VpceId":"The identifier (ID) of the VPC in which the interface endpoint is used."}},"AWS::AppStream::Stack.ApplicationSettings":{"attributes":{},"description":"The persistent application settings for users of a stack.","properties":{"Enabled":"Enables or disables persistent application settings for users during their streaming sessions.","SettingsGroup":"The path prefix for the S3 bucket where users’ persistent application settings are stored. You can allow the same persistent application settings to be used across multiple stacks by specifying the same settings group for each stack."}},"AWS::AppStream::Stack.StorageConnector":{"attributes":{},"description":"A connector that enables persistent storage for users.","properties":{"ConnectorType":"The type of storage connector.","Domains":"The names of the domains for the account.","ResourceIdentifier":"The ARN of the storage connector."}},"AWS::AppStream::Stack.StreamingExperienceSettings":{"attributes":{},"description":"The streaming protocol that you want your stack to prefer. This can be UDP or TCP. Currently, UDP is only supported in the Windows native client.","properties":{"PreferredProtocol":"The preferred protocol that you want to use while streaming your application."}},"AWS::AppStream::Stack.UserSetting":{"attributes":{},"description":"Specifies an action and whether the action is enabled or disabled for users during their streaming sessions.","properties":{"Action":"The action that is enabled or disabled.","Permission":"Indicates whether the action is enabled or disabled."}},"AWS::AppStream::StackFleetAssociation":{"attributes":{},"description":"The `AWS::AppStream::StackFleetAssociation` resource associates the specified fleet with the specified stack for Amazon AppStream 2.0.","properties":{"FleetName":"The name of the fleet.\\n\\nTo associate a fleet with a stack, you must specify a dependency on the fleet resource. For more information, see [DependsOn Attribute](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-attribute-dependson.html) .","StackName":"The name of the stack.\\n\\nTo associate a fleet with a stack, you must specify a dependency on the stack resource. For more information, see [DependsOn Attribute](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-attribute-dependson.html) ."}},"AWS::AppStream::StackUserAssociation":{"attributes":{},"description":"The `AWS::AppStream::StackUserAssociation` resource associates the specified users with the specified stacks for Amazon AppStream 2.0. Users in an AppStream 2.0 user pool cannot be assigned to stacks with fleets that are joined to an Active Directory domain.","properties":{"AuthenticationType":"The authentication type for the user who is associated with the stack. You must specify USERPOOL.","SendEmailNotification":"Specifies whether a welcome email is sent to a user after the user is created in the user pool.","StackName":"The name of the stack that is associated with the user.","UserName":"The email address of the user who is associated with the stack.\\n\\n> Users\' email addresses are case-sensitive."}},"AWS::AppStream::User":{"attributes":{},"description":"The `AWS::AppStream::User` resource creates a new user in the AppStream 2.0 user pool.","properties":{"AuthenticationType":"The authentication type for the user. You must specify USERPOOL.","FirstName":"The first name, or given name, of the user.","LastName":"The last name, or surname, of the user.","MessageAction":"The action to take for the welcome email that is sent to a user after the user is created in the user pool. If you specify SUPPRESS, no email is sent. If you specify RESEND, do not specify the first name or last name of the user. If the value is null, the email is sent.\\n\\n> The temporary password in the welcome email is valid for only 7 days. If users don’t set their passwords within 7 days, you must send them a new welcome email.","UserName":"The email address of the user.\\n\\nUsers\' email addresses are case-sensitive. During login, if they specify an email address that doesn\'t use the same capitalization as the email address specified when their user pool account was created, a \\"user does not exist\\" error message displays."}},"AWS::AppSync::ApiCache":{"attributes":{},"description":"The `AWS::AppSync::ApiCache` resource represents the input of a `CreateApiCache` operation.","properties":{"ApiCachingBehavior":"Caching behavior.\\n\\n- *FULL_REQUEST_CACHING* : All requests are fully cached.\\n- *PER_RESOLVER_CACHING* : Individual resolvers that you specify are cached.","ApiId":"The GraphQL API ID.","AtRestEncryptionEnabled":"At-rest encryption flag for cache. You cannot update this setting after creation.","TransitEncryptionEnabled":"Transit encryption flag when connecting to cache. You cannot update this setting after creation.","Ttl":"TTL in seconds for cache entries.\\n\\nValid values are 1–3,600 seconds.","Type":"The cache instance type. Valid values are\\n\\n- `SMALL`\\n- `MEDIUM`\\n- `LARGE`\\n- `XLARGE`\\n- `LARGE_2X`\\n- `LARGE_4X`\\n- `LARGE_8X` (not available in all regions)\\n- `LARGE_12X`\\n\\nHistorically, instance types were identified by an EC2-style value. As of July 2020, this is deprecated, and the generic identifiers above should be used.\\n\\nThe following legacy instance types are available, but their use is discouraged:\\n\\n- *T2_SMALL* : A t2.small instance type.\\n- *T2_MEDIUM* : A t2.medium instance type.\\n- *R4_LARGE* : A r4.large instance type.\\n- *R4_XLARGE* : A r4.xlarge instance type.\\n- *R4_2XLARGE* : A r4.2xlarge instance type.\\n- *R4_4XLARGE* : A r4.4xlarge instance type.\\n- *R4_8XLARGE* : A r4.8xlarge instance type."}},"AWS::AppSync::ApiKey":{"attributes":{"ApiKey":"The API key.","Arn":"The Amazon Resource Name (ARN) of the API key, such as `arn:aws:appsync:us-east-1:123456789012:apis/graphqlapiid/apikey/apikeya1bzhi` .","Ref":"When you pass the logical ID of an `AWS::AppSync::ApiKey` resource to the intrinsic `Ref` function, the function returns the ARN of the API key, such as `arn:aws:appsync:us-east-1:123456789012:apis/graphqlapiid/apikey/apikeya1bzhi` .\\n\\nFor more information about using the `Ref` function, see [Ref](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-ref) ."},"description":"The `AWS::AppSync::ApiKey` resource creates a unique key that you can distribute to clients who are executing GraphQL operations with AWS AppSync that require an API key.","properties":{"ApiId":"Unique AWS AppSync GraphQL API ID for this API key.","ApiKeyId":"The API key ID.","Description":"Unique description of your API key.","Expires":"The time after which the API key expires. The date is represented as seconds since the epoch, rounded down to the nearest hour."}},"AWS::AppSync::DataSource":{"attributes":{"DataSourceArn":"The Amazon Resource Name (ARN) of the API key, such as `arn:aws:appsync:us-east-1:123456789012:apis/graphqlapiid/datasources/datasourcename` .","Name":"Friendly name for you to identify your AWS AppSync data source after creation.","Ref":"When you pass the logical ID of an `AWS::AppSync::DataSource` resource to the intrinsic `Ref` function, the function returns the ARN of the Data Source, such as `arn:aws:appsync:us-east-1:123456789012:apis/graphqlapiid/datasources/datasourcename` .\\n\\nFor more information about using the `Ref` function, see [Ref](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-ref) ."},"description":"The `AWS::AppSync::DataSource` resource creates data sources for resolvers in AWS AppSync to connect to, such as Amazon DynamoDB , AWS Lambda , and Amazon OpenSearch Service . Resolvers use these data sources to fetch data when clients make GraphQL calls.","properties":{"ApiId":"Unique AWS AppSync GraphQL API identifier where this data source will be created.","Description":"The description of the data source.","DynamoDBConfig":"AWS Region and TableName for an Amazon DynamoDB table in your account.","ElasticsearchConfig":"AWS Region and Endpoints for an Amazon OpenSearch Service domain in your account.\\n\\nAs of September 2021, Amazon Elasticsearch Service is Amazon OpenSearch Service . This property is deprecated. For new data sources, use *OpenSearchServiceConfig* to specify an OpenSearch Service data source.","EventBridgeConfig":"An EventBridge configuration that contains a valid ARN of an event bus.","HttpConfig":"Endpoints for an HTTP data source.","LambdaConfig":"An ARN of a Lambda function in valid ARN format. This can be the ARN of a Lambda function that exists in the current account or in another account.","Name":"Friendly name for you to identify your AppSync data source after creation.","OpenSearchServiceConfig":"AWS Region and Endpoints for an Amazon OpenSearch Service domain in your account.","RelationalDatabaseConfig":"Relational Database configuration of the relational database data source.","ServiceRoleArn":"The AWS Identity and Access Management service role ARN for the data source. The system assumes this role when accessing the data source.\\n\\nRequired if `Type` is specified as `AWS_LAMBDA` , `AMAZON_DYNAMODB` , `AMAZON_ELASTICSEARCH` , `AMAZON_EVENTBRIDGE` , or `AMAZON_OPENSEARCH_SERVICE` .","Type":"The type of the data source.\\n\\n- *AWS_LAMBDA* : The data source is an AWS Lambda function.\\n- *AMAZON_DYNAMODB* : The data source is an Amazon DynamoDB table.\\n- *AMAZON_ELASTICSEARCH* : The data source is an Amazon OpenSearch Service domain.\\n- *AMAZON_EVENTBRIDGE* : The data source is an Amazon EventBridge event bus.\\n- *AMAZON_OPENSEARCH_SERVICE* : The data source is an Amazon OpenSearch Service domain.\\n- *NONE* : There is no data source. This type is used when you wish to invoke a GraphQL operation without connecting to a data source, such as performing data transformation with resolvers or triggering a subscription to be invoked from a mutation.\\n- *HTTP* : The data source is an HTTP endpoint.\\n- *RELATIONAL_DATABASE* : The data source is a relational database."}},"AWS::AppSync::DataSource.AuthorizationConfig":{"attributes":{},"description":"The `AuthorizationConfig` property type specifies the authorization type and configuration for an AWS AppSync http data source.\\n\\n`AuthorizationConfig` is a property of the [AWS AppSync DataSource HttpConfig](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-datasource-httpconfig.html) property type.","properties":{"AuthorizationType":"The authorization type that the HTTP endpoint requires.\\n\\n- *AWS_IAM* : The authorization type is Signature Version 4 (SigV4).","AwsIamConfig":"The AWS Identity and Access Management settings."}},"AWS::AppSync::DataSource.AwsIamConfig":{"attributes":{},"description":"Use the `AwsIamConfig` property type to specify `AwsIamConfig` for a AWS AppSync authorizaton.\\n\\n`AwsIamConfig` is a property of the [AWS AppSync DataSource AuthorizationConfig](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-datasource-httpconfig-authorizationconfig.html) resource.","properties":{"SigningRegion":"The signing Region for AWS Identity and Access Management authorization.","SigningServiceName":"The signing service name for AWS Identity and Access Management authorization."}},"AWS::AppSync::DataSource.DeltaSyncConfig":{"attributes":{},"description":"Describes a Delta Sync configuration.","properties":{"BaseTableTTL":"The number of minutes that an Item is stored in the data source.","DeltaSyncTableName":"The Delta Sync table name.","DeltaSyncTableTTL":"The number of minutes that a Delta Sync log entry is stored in the Delta Sync table."}},"AWS::AppSync::DataSource.DynamoDBConfig":{"attributes":{},"description":"The `DynamoDBConfig` property type specifies the `AwsRegion` and `TableName` for an Amazon DynamoDB table in your account for an AWS AppSync data source.\\n\\n`DynamoDBConfig` is a property of the [AWS::AppSync::DataSource](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-datasource.html) property type.","properties":{"AwsRegion":"The AWS Region.","DeltaSyncConfig":"The `DeltaSyncConfig` for a versioned datasource.","TableName":"The table name.","UseCallerCredentials":"Set to `TRUE` to use AWS Identity and Access Management with this data source.","Versioned":"Set to TRUE to use Conflict Detection and Resolution with this data source."}},"AWS::AppSync::DataSource.ElasticsearchConfig":{"attributes":{},"description":"The `ElasticsearchConfig` property type specifies the `AwsRegion` and `Endpoints` for an Amazon OpenSearch Service domain in your account for an AWS AppSync data source.\\n\\nElasticsearchConfig is a property of the [AWS::AppSync::DataSource](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-datasource.html) property type.\\n\\nAs of September 2021, Amazon Elasticsearch Service is Amazon OpenSearch Service . This property is deprecated. For new data sources, use *OpenSearchServiceConfig* to specify an OpenSearch Service data source.","properties":{"AwsRegion":"The AWS Region.","Endpoint":"The endpoint."}},"AWS::AppSync::DataSource.EventBridgeConfig":{"attributes":{},"description":"The data source. This can be an API destination, resource, or AWS service.","properties":{"EventBusArn":"The event bus pipeline\'s ARN. For more information about event buses, see [EventBridge event buses](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-event-bus.html) ."}},"AWS::AppSync::DataSource.HttpConfig":{"attributes":{},"description":"Use the `HttpConfig` property type to specify `HttpConfig` for an AWS AppSync data source.\\n\\n`HttpConfig` is a property of the [AWS::AppSync::DataSource](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-datasource.html) resource.","properties":{"AuthorizationConfig":"The authorization configuration.","Endpoint":"The endpoint."}},"AWS::AppSync::DataSource.LambdaConfig":{"attributes":{},"description":"The `LambdaConfig` property type specifies the Lambda function ARN for an AWS AppSync data source.\\n\\n`LambdaConfig` is a property of the [AWS::AppSync::DataSource](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-datasource.html) property type.","properties":{"LambdaFunctionArn":"The ARN for the Lambda function."}},"AWS::AppSync::DataSource.OpenSearchServiceConfig":{"attributes":{},"description":"The `OpenSearchServiceConfig` property type specifies the `AwsRegion` and `Endpoints` for an Amazon OpenSearch Service domain in your account for an AWS AppSync data source.\\n\\n`OpenSearchServiceConfig` is a property of the [AWS::AppSync::DataSource](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-datasource.html) property type.","properties":{"AwsRegion":"The AWS Region.","Endpoint":"The endpoint."}},"AWS::AppSync::DataSource.RdsHttpEndpointConfig":{"attributes":{},"description":"Use the `RdsHttpEndpointConfig` property type to specify the `RdsHttpEndpoint` for an AWS AppSync relational database.\\n\\n`RdsHttpEndpointConfig` is a property of the [AWS AppSync DataSource RelationalDatabaseConfig](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-datasource-relationaldatabaseconfig.html) resource.","properties":{"AwsRegion":"AWS Region for RDS HTTP endpoint.","AwsSecretStoreArn":"The ARN for database credentials stored in AWS Secrets Manager .","DatabaseName":"Logical database name.","DbClusterIdentifier":"Amazon RDS cluster Amazon Resource Name (ARN).","Schema":"Logical schema name."}},"AWS::AppSync::DataSource.RelationalDatabaseConfig":{"attributes":{},"description":"Use the `RelationalDatabaseConfig` property type to specify `RelationalDatabaseConfig` for an AWS AppSync data source.\\n\\n`RelationalDatabaseConfig` is a property of the [AWS::AppSync::DataSource](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-datasource.html) property type.","properties":{"RdsHttpEndpointConfig":"Information about the Amazon RDS resource.","RelationalDatabaseSourceType":"The type of relational data source."}},"AWS::AppSync::DomainName":{"attributes":{"AppSyncDomainName":"The domain name provided by AWS AppSync .","DomainName":"The domain name.","HostedZoneId":"The ID of your Amazon Route 53 hosted zone.","Ref":"When you pass the logical ID of an `AWS::AppSync::DomainName` resource to the intrinsic `Ref` function, the function returns the domain name.\\n\\nFor more information about using the `Ref` function, see [Ref](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-ref) ."},"description":"The `AWS::AppSync::DomainName` resource creates a `DomainNameConfig` object to configure a custom domain.","properties":{"CertificateArn":"The Amazon Resource Name (ARN) of the certificate. This will be an AWS Certificate Manager certificate.","Description":"The decription for your domain name.","DomainName":"The domain name."}},"AWS::AppSync::DomainNameApiAssociation":{"attributes":{},"description":"The `AWS::AppSync::DomainNameApiAssociation` resource represents the mapping of your custom domain name to the assigned API URL.","properties":{"ApiId":"The API ID.","DomainName":"The domain name."}},"AWS::AppSync::FunctionConfiguration":{"attributes":{"DataSourceName":"The name of data source this function will attach.","FunctionArn":"ARN of the function, such as `arn:aws:appsync:us-east-1:123456789012:apis/graphqlapiid/functions/functionId` .","FunctionId":"The unique ID of this function.","Name":"The name of the function.","Ref":"When you pass the logical ID of an `AWS::AppSync::FunctionConfiguration` resource to the intrinsic `Ref` function, the function returns the ARN of the FunctionConfiguration, such as `arn:aws:appsync:us-east-1:123456789012:apis/graphqlapiid/functions/functionid` .\\n\\nFor more information about using the `Ref` function, see [Ref](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-ref) ."},"description":"The `AWS::AppSync::FunctionConfiguration` resource defines the functions in GraphQL APIs to perform certain operations. You can use pipeline resolvers to attach functions. For more information, see [Pipeline Resolvers](https://docs.aws.amazon.com/appsync/latest/devguide/pipeline-resolvers.html) in the *AWS AppSync Developer Guide* .\\n\\n> When you submit an update, AWS CloudFormation updates resources based on differences between what you submit and the stack\'s current template. To cause this resource to be updated you must change a property value for this resource in the AWS CloudFormation template. Changing the Amazon S3 file content without changing a property value will not result in an update operation.\\n> \\n> See [Update Behaviors of Stack Resources](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-update-behaviors.html) in the *AWS CloudFormation User Guide* .","properties":{"ApiId":"The AWS AppSync GraphQL API that you want to attach using this function.","Code":"The `resolver` code that contains the request and response functions. When code is used, the `runtime` is required. The runtime value must be `APPSYNC_JS` .","CodeS3Location":"The Amazon S3 endpoint.","DataSourceName":"The name of data source this function will attach.","Description":"The `Function` description.","FunctionVersion":"The version of the request mapping template. Currently, only the 2018-05-29 version of the template is supported.","MaxBatchSize":"The maximum number of resolver request inputs that will be sent to a single AWS Lambda function in a `BatchInvoke` operation.","Name":"The name of the function.","RequestMappingTemplate":"The `Function` request mapping template. Functions support only the 2018-05-29 version of the request mapping template.","RequestMappingTemplateS3Location":"Describes a Sync configuration for a resolver.\\n\\nContains information on which Conflict Detection, as well as Resolution strategy, should be performed when the resolver is invoked.","ResponseMappingTemplate":"The `Function` response mapping template.","ResponseMappingTemplateS3Location":"The location of a response mapping template in an Amazon S3 bucket. Use this if you want to provision with a template file in Amazon S3 rather than embedding it in your CloudFormation template.","Runtime":"Describes a runtime used by an AWS AppSync pipeline resolver or AWS AppSync function. Specifies the name and version of the runtime to use. Note that if a runtime is specified, code must also be specified.","SyncConfig":"Describes a Sync configuration for a resolver.\\n\\nSpecifies which Conflict Detection strategy and Resolution strategy to use when the resolver is invoked."}},"AWS::AppSync::FunctionConfiguration.AppSyncRuntime":{"attributes":{},"description":"Describes a runtime used by an AWS AppSync pipeline resolver or AWS AppSync function. Specifies the name and version of the runtime to use. Note that if a runtime is specified, code must also be specified.","properties":{"Name":"The `name` of the runtime to use. Currently, the only allowed value is `APPSYNC_JS` .","RuntimeVersion":"The `version` of the runtime to use. Currently, the only allowed version is `1.0.0` ."}},"AWS::AppSync::FunctionConfiguration.LambdaConflictHandlerConfig":{"attributes":{},"description":"The `LambdaConflictHandlerConfig` object when configuring `LAMBDA` as the Conflict Handler.","properties":{"LambdaConflictHandlerArn":"The Amazon Resource Name (ARN) for the Lambda function to use as the Conflict Handler."}},"AWS::AppSync::FunctionConfiguration.SyncConfig":{"attributes":{},"description":"Describes a Sync configuration for a resolver.\\n\\nSpecifies which Conflict Detection strategy and Resolution strategy to use when the resolver is invoked.","properties":{"ConflictDetection":"The Conflict Detection strategy to use.\\n\\n- *VERSION* : Detect conflicts based on object versions for this resolver.\\n- *NONE* : Do not detect conflicts when invoking this resolver.","ConflictHandler":"The Conflict Resolution strategy to perform in the event of a conflict.\\n\\n- *OPTIMISTIC_CONCURRENCY* : Resolve conflicts by rejecting mutations when versions don\'t match the latest version at the server.\\n- *AUTOMERGE* : Resolve conflicts with the Automerge conflict resolution strategy.\\n- *LAMBDA* : Resolve conflicts with an AWS Lambda function supplied in the `LambdaConflictHandlerConfig` .","LambdaConflictHandlerConfig":"The `LambdaConflictHandlerConfig` when configuring `LAMBDA` as the Conflict Handler."}},"AWS::AppSync::GraphQLApi":{"attributes":{"ApiId":"Unique AWS AppSync GraphQL API identifier.","Arn":"The Amazon Resource Name (ARN) of the API key, such as `arn:aws:appsync:us-east-1:123456789012:apis/graphqlapiid` .","GraphQLDns":"The fully qualified domain name (FQDN) of the endpoint URL of your GraphQL API.","GraphQLUrl":"The Endpoint URL of your GraphQL API.","RealtimeDns":"The fully qualified domain name (FQDN) of the real-time endpoint URL of your GraphQL API.","RealtimeUrl":"The GraphQL API real-time endpoint URL. For more information, see [Discovering the real-time endpoint from the GraphQL endpoint](https://docs.aws.amazon.com/appsync/latest/devguide/real-time-websocket-client.html#handshake-details-to-establish-the-websocket-connection) .","Ref":"When you pass the logical ID of an `AWS::AppSync::GraphQLApi` resource to the intrinsic `Ref` function, the function returns the ARN of the GraphQL API, such as `arn:aws:appsync:us-east-1:123456789012:apis/graphqlapiid` .\\n\\nFor more information about using the `Ref` function, see [Ref](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-ref) ."},"description":"The `AWS::AppSync::GraphQLApi` resource creates a new AWS AppSync GraphQL API. This is the top-level construct for your application. For more information, see [Quick Start](https://docs.aws.amazon.com/appsync/latest/devguide/quickstart.html) in the *AWS AppSync Developer Guide* .","properties":{"AdditionalAuthenticationProviders":"A list of additional authentication providers for the `GraphqlApi` API.","ApiType":"The value that indicates whether the GraphQL API is a standard API ( `GRAPHQL` ) or merged API ( `MERGED` ).\\n\\n*WARNING* : If the `ApiType` has not been defined, *explicitly* setting it to `GRAPHQL` in a template/stack update will result in an API replacement and new DNS values.\\n\\nThe following values are valid:\\n\\n`GRAPHQL | MERGED`","AuthenticationType":"Security configuration for your GraphQL API. For allowed values (such as `API_KEY` , `AWS_IAM` , `AMAZON_COGNITO_USER_POOLS` , `OPENID_CONNECT` , or `AWS_LAMBDA` ), see [Security](https://docs.aws.amazon.com/appsync/latest/devguide/security.html) in the *AWS AppSync Developer Guide* .","LambdaAuthorizerConfig":"A `LambdaAuthorizerConfig` holds configuration on how to authorize AWS AppSync API access when using the `AWS_LAMBDA` authorizer mode. Be aware that an AWS AppSync API may have only one Lambda authorizer configured at a time.","LogConfig":"The Amazon CloudWatch Logs configuration.","MergedApiExecutionRoleArn":"The AWS Identity and Access Management service role ARN for a merged API. The AppSync service assumes this role on behalf of the Merged API to validate access to source APIs at runtime and to prompt the `AUTO_MERGE` to update the merged API endpoint with the source API changes automatically.","Name":"The API name.","OpenIDConnectConfig":"The OpenID Connect configuration.","OwnerContact":"The owner contact information for an API resource.\\n\\nThis field accepts any string input with a length of 0 - 256 characters.","Tags":"An arbitrary set of tags (key-value pairs) for this GraphQL API.","UserPoolConfig":"Optional authorization configuration for using Amazon Cognito user pools with your GraphQL endpoint.","Visibility":"Sets the scope of the GraphQL API to public ( `GLOBAL` ) or private ( `PRIVATE` ). By default, the scope is set to `Global` if no value is provided.\\n\\n*WARNING* : If `Visibility` has not been defined, *explicitly* setting it to `GLOBAL` in a template/stack update will result in an API replacement and new DNS values.","XrayEnabled":"A flag indicating whether to use AWS X-Ray tracing for this `GraphqlApi` ."}},"AWS::AppSync::GraphQLApi.AdditionalAuthenticationProvider":{"attributes":{},"description":"Describes an additional authentication provider.","properties":{"AuthenticationType":"The authentication type for API key, AWS Identity and Access Management , OIDC, Amazon Cognito user pools , or AWS Lambda .\\n\\nValid Values: `API_KEY` | `AWS_IAM` | `OPENID_CONNECT` | `AMAZON_COGNITO_USER_POOLS` | `AWS_LAMBDA`","LambdaAuthorizerConfig":"Configuration for AWS Lambda function authorization.","OpenIDConnectConfig":"The OIDC configuration.","UserPoolConfig":"The Amazon Cognito user pool configuration."}},"AWS::AppSync::GraphQLApi.CognitoUserPoolConfig":{"attributes":{},"description":"Describes an Amazon Cognito user pool configuration.","properties":{"AppIdClientRegex":"A regular expression for validating the incoming Amazon Cognito user pool app client ID. If this value isn\'t set, no filtering is applied.","AwsRegion":"The AWS Region in which the user pool was created.","UserPoolId":"The user pool ID."}},"AWS::AppSync::GraphQLApi.LambdaAuthorizerConfig":{"attributes":{},"description":"Configuration for AWS Lambda function authorization.","properties":{"AuthorizerResultTtlInSeconds":"The number of seconds a response should be cached for. The default is 0 seconds, which disables caching. If you don\'t specify a value for `authorizerResultTtlInSeconds` , the default value is used. The maximum value is one hour (3600 seconds). The Lambda function can override this by returning a `ttlOverride` key in its response.","AuthorizerUri":"The ARN of the Lambda function to be called for authorization. This may be a standard Lambda ARN, a version ARN ( `.../v3` ) or alias ARN.\\n\\n*Note* : This Lambda function must have the following resource-based policy assigned to it. When configuring Lambda authorizers in the console, this is done for you. To do so with the AWS CLI , run the following:\\n\\n`aws lambda add-permission --function-name \\"arn:aws:lambda:us-east-2:111122223333:function:my-function\\" --statement-id \\"appsync\\" --principal appsync.amazonaws.com --action lambda:InvokeFunction`","IdentityValidationExpression":"A regular expression for validation of tokens before the Lambda function is called."}},"AWS::AppSync::GraphQLApi.LogConfig":{"attributes":{},"description":"The `LogConfig` property type specifies the logging configuration when writing GraphQL operations and tracing to Amazon CloudWatch for an AWS AppSync GraphQL API.\\n\\n`LogConfig` is a property of the [AWS::AppSync::GraphQLApi](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-graphqlapi.html) property type.","properties":{"CloudWatchLogsRoleArn":"The service role that AWS AppSync will assume to publish to Amazon CloudWatch Logs in your account.","ExcludeVerboseContent":"Set to TRUE to exclude sections that contain information such as headers, context, and evaluated mapping templates, regardless of logging level.","FieldLogLevel":"The field logging level. Values can be NONE, ERROR, or ALL.\\n\\n- *NONE* : No field-level logs are captured.\\n- *ERROR* : Logs the following information only for the fields that are in error:\\n\\n- The error section in the server response.\\n- Field-level errors.\\n- The generated request/response functions that got resolved for error fields.\\n- *ALL* : The following information is logged for all fields in the query:\\n\\n- Field-level tracing information.\\n- The generated request/response functions that got resolved for each field."}},"AWS::AppSync::GraphQLApi.OpenIDConnectConfig":{"attributes":{},"description":"The `OpenIDConnectConfig` property type specifies the optional authorization configuration for using an OpenID Connect compliant service with your GraphQL endpoint for an AWS AppSync GraphQL API.\\n\\n`OpenIDConnectConfig` is a property of the [AWS::AppSync::GraphQLApi](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-graphqlapi.html) property type.","properties":{"AuthTTL":"The number of milliseconds that a token is valid after being authenticated.","ClientId":"The client identifier of the Relying party at the OpenID identity provider. This identifier is typically obtained when the Relying party is registered with the OpenID identity provider. You can specify a regular expression so that AWS AppSync can validate against multiple client identifiers at a time.","IatTTL":"The number of milliseconds that a token is valid after it\'s issued to a user.","Issuer":"The issuer for the OIDC configuration. The issuer returned by discovery must exactly match the value of `iss` in the ID token."}},"AWS::AppSync::GraphQLApi.UserPoolConfig":{"attributes":{},"description":"The `UserPoolConfig` property type specifies the optional authorization configuration for using Amazon Cognito user pools with your GraphQL endpoint for an AWS AppSync GraphQL API.","properties":{"AppIdClientRegex":"A regular expression for validating the incoming Amazon Cognito user pool app client ID. If this value isn\'t set, no filtering is applied.","AwsRegion":"The AWS Region in which the user pool was created.","DefaultAction":"The action that you want your GraphQL API to take when a request that uses Amazon Cognito user pool authentication doesn\'t match the Amazon Cognito user pool configuration.\\n\\nWhen specifying Amazon Cognito user pools as the default authentication, you must set the value for `DefaultAction` to `ALLOW` if specifying `AdditionalAuthenticationProviders` .","UserPoolId":"The user pool ID."}},"AWS::AppSync::GraphQLSchema":{"attributes":{"Ref":"When you pass the logical ID of an `AWS::AppSync::GraphQLSchema` resource to the intrinsic `Ref` function, the function returns the GraphQL API ID with the literal String GraphQLSchema attached to it."},"description":"The `AWS::AppSync::GraphQLSchema` resource is used for your AWS AppSync GraphQL schema that controls the data model for your API. Schema files are text written in Schema Definition Language (SDL) format. For more information about schema authoring, see [Designing a GraphQL API](https://docs.aws.amazon.com/appsync/latest/devguide/designing-a-graphql-api.html) in the *AWS AppSync Developer Guide* .\\n\\n> When you submit an update, AWS CloudFormation updates resources based on differences between what you submit and the stack\'s current template. To cause this resource to be updated you must change a property value for this resource in the CloudFormation template. Changing the Amazon S3 file content without changing a property value will not result in an update operation.\\n> \\n> See [Update Behaviors of Stack Resources](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-update-behaviors.html) in the *AWS CloudFormation User Guide* .","properties":{"ApiId":"The AWS AppSync GraphQL API identifier to which you want to apply this schema.","Definition":"The text representation of a GraphQL schema in SDL format.\\n\\nFor more information about using the `Ref` function, see [Ref](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-ref) .","DefinitionS3Location":"The location of a GraphQL schema file in an Amazon S3 bucket. Use this if you want to provision with the schema living in Amazon S3 rather than embedding it in your CloudFormation template."}},"AWS::AppSync::Resolver":{"attributes":{"FieldName":"The GraphQL field on a type that invokes the resolver.","Ref":"When you pass the logical ID of an `AWS::AppSync::Resolver` resource to the intrinsic `Ref` function, the function returns the ARN of the Resolver, such as `arn:aws:appsync:us-east-1:123456789012:apis/graphqlapiid/types/typename/resolvers/resolvername` .\\n\\nFor more information about using the `Ref` function, see [Ref](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-ref) .","ResolverArn":"ARN of the resolver, such as `arn:aws:appsync:us-east-1:123456789012:apis/graphqlapiid/types/typename/resolvers/resolvername` .","TypeName":"The GraphQL type that invokes this resolver."},"description":"The `AWS::AppSync::Resolver` resource defines the logical GraphQL resolver that you attach to fields in a schema. Request and response templates for resolvers are written in Apache Velocity Template Language (VTL) format. For more information about resolvers, see [Resolver Mapping Template Reference](https://docs.aws.amazon.com/appsync/latest/devguide/resolver-mapping-template-reference.html) .\\n\\n> When you submit an update, AWS CloudFormation updates resources based on differences between what you submit and the stack\'s current template. To cause this resource to be updated you must change a property value for this resource in the CloudFormation template. Changing the Amazon S3 file content without changing a property value will not result in an update operation.\\n> \\n> See [Update Behaviors of Stack Resources](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-update-behaviors.html) in the *AWS CloudFormation User Guide* .","properties":{"ApiId":"The AWS AppSync GraphQL API to which you want to attach this resolver.","CachingConfig":"The caching configuration for the resolver.","Code":"The `resolver` code that contains the request and response functions. When code is used, the `runtime` is required. The runtime value must be `APPSYNC_JS` .","CodeS3Location":"The Amazon S3 endpoint.","DataSourceName":"The resolver data source name.","FieldName":"The GraphQL field on a type that invokes the resolver.","Kind":"The resolver type.\\n\\n- *UNIT* : A UNIT resolver type. A UNIT resolver is the default resolver type. You can use a UNIT resolver to run a GraphQL query against a single data source.\\n- *PIPELINE* : A PIPELINE resolver type. You can use a PIPELINE resolver to invoke a series of `Function` objects in a serial manner. You can use a pipeline resolver to run a GraphQL query against multiple data sources.","MaxBatchSize":"The maximum number of resolver request inputs that will be sent to a single AWS Lambda function in a `BatchInvoke` operation.","PipelineConfig":"Functions linked with the pipeline resolver.","RequestMappingTemplate":"The request mapping template.\\n\\nRequest mapping templates are optional when using a Lambda data source. For all other data sources, a request mapping template is required.","RequestMappingTemplateS3Location":"The location of a request mapping template in an Amazon S3 bucket. Use this if you want to provision with a template file in Amazon S3 rather than embedding it in your CloudFormation template.","ResponseMappingTemplate":"The response mapping template.","ResponseMappingTemplateS3Location":"The location of a response mapping template in an Amazon S3 bucket. Use this if you want to provision with a template file in Amazon S3 rather than embedding it in your CloudFormation template.","Runtime":"Describes a runtime used by an AWS AppSync pipeline resolver or AWS AppSync function. Specifies the name and version of the runtime to use. Note that if a runtime is specified, code must also be specified.","SyncConfig":"The `SyncConfig` for a resolver attached to a versioned data source.","TypeName":"The GraphQL type that invokes this resolver."}},"AWS::AppSync::Resolver.AppSyncRuntime":{"attributes":{},"description":"Describes a runtime used by an AWS AppSync pipeline resolver or AWS AppSync function. Specifies the name and version of the runtime to use. Note that if a runtime is specified, code must also be specified.","properties":{"Name":"The `name` of the runtime to use. Currently, the only allowed value is `APPSYNC_JS` .","RuntimeVersion":"The `version` of the runtime to use. Currently, the only allowed version is `1.0.0` ."}},"AWS::AppSync::Resolver.CachingConfig":{"attributes":{},"description":"The caching configuration for a resolver that has caching activated.","properties":{"CachingKeys":"The caching keys for a resolver that has caching activated.\\n\\nValid values are entries from the `$context.arguments` , `$context.source` , and `$context.identity` maps.","Ttl":"The TTL in seconds for a resolver that has caching activated.\\n\\nValid values are 1–3,600 seconds."}},"AWS::AppSync::Resolver.LambdaConflictHandlerConfig":{"attributes":{},"description":"The `LambdaConflictHandlerConfig` when configuring LAMBDA as the Conflict Handler.","properties":{"LambdaConflictHandlerArn":"The Amazon Resource Name (ARN) for the Lambda function to use as the Conflict Handler."}},"AWS::AppSync::Resolver.PipelineConfig":{"attributes":{},"description":"Use the `PipelineConfig` property type to specify `PipelineConfig` for an AWS AppSync resolver.\\n\\n`PipelineConfig` is a property of the [AWS::AppSync::Resolver](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-resolver.html) resource.","properties":{"Functions":"A list of `Function` objects."}},"AWS::AppSync::Resolver.SyncConfig":{"attributes":{},"description":"Describes a Sync configuration for a resolver.\\n\\nSpecifies which Conflict Detection strategy and Resolution strategy to use when the resolver is invoked.","properties":{"ConflictDetection":"The Conflict Detection strategy to use.\\n\\n- *VERSION* : Detect conflicts based on object versions for this resolver.\\n- *NONE* : Do not detect conflicts when invoking this resolver.","ConflictHandler":"The Conflict Resolution strategy to perform in the event of a conflict.\\n\\n- *OPTIMISTIC_CONCURRENCY* : Resolve conflicts by rejecting mutations when versions don\'t match the latest version at the server.\\n- *AUTOMERGE* : Resolve conflicts with the Automerge conflict resolution strategy.\\n- *LAMBDA* : Resolve conflicts with an AWS Lambda function supplied in the `LambdaConflictHandlerConfig` .","LambdaConflictHandlerConfig":"The `LambdaConflictHandlerConfig` when configuring `LAMBDA` as the Conflict Handler."}},"AWS::AppSync::SourceApiAssociation":{"attributes":{"AssociationArn":"The Amazon Resource Name (ARN) of the source API association.","AssociationId":"The ID generated by the AppSync service for the source API association.","LastSuccessfulMergeDate":"The datetime value of the last successful merge of the source API association. The result will be in UTC format and your local time zone.","MergedApiArn":"The Amazon Resource Name (ARN) of the merged API.","MergedApiId":"The ID of the merged API.","Ref":"When you pass the logical ID of an `AWS::AppSync::SourceApiAssociation` resource to the intrinsic `Ref` function, the function returns the ARN of the source API association.\\n\\nFor more information about using the `Ref` function, see [Ref](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-ref) .","SourceApiArn":"The source API\'s Amazon Resource Name (ARN) value.","SourceApiAssociationStatus":"The state of the source API association.\\n\\nThe following values are valid:\\n\\n`MERGE_SCHEDULED | MERGE_FAILED | MERGE_SUCCESS | MERGE_IN_PROGRESS | AUTO_MERGE_SCHEDULE_FAILED | DELETION_SCHEDULED | DELETION_IN_PROGRESS | DELETION_FAILED`","SourceApiAssociationStatusDetail":"The message describing the state of the source API association.","SourceApiId":"The ID of the source API."},"description":"Describes the configuration of a source API. A source API is a GraphQL API that is linked to a merged API. There can be multiple source APIs attached to each merged API. When linked to a merged API, the source API\'s schema, data sources, and resolvers will be combined with other linked source API data to form a new, singular API. Source APIs can originate from your account or from other accounts via Resource Access Manager.","properties":{"Description":"The description field of the association configuration.","MergedApiIdentifier":"The identifier of the AppSync Merged API. This is generated by the AppSync service. In most cases, Merged APIs (especially in your account) only require the API ID value or ARN of the merged API. However, Merged APIs from other accounts (cross-account use cases) strictly require the full resource ARN of the merged API.","SourceApiAssociationConfig":"The `SourceApiAssociationConfig` object data.","SourceApiIdentifier":"The identifier of the AppSync Source API. This is generated by the AppSync service. In most cases, source APIs (especially in your account) only require the API ID value or ARN of the source API. However, source APIs from other accounts (cross-account use cases) strictly require the full resource ARN of the source API."}},"AWS::AppSync::SourceApiAssociation.SourceApiAssociationConfig":{"attributes":{},"description":"Describes properties used to specify configurations related to a source API. This is a property of the `AWS:AppSync:SourceApiAssociation` type.","properties":{"MergeType":"The property that indicates which merging option is enabled in the source API association.\\n\\nValid merge types are `MANUAL_MERGE` (default) and `AUTO_MERGE` . Manual merges are the default behavior and require the user to trigger any changes from the source APIs to the merged API manually. Auto merges subscribe the merged API to the changes performed on the source APIs so that any change in the source APIs are also made to the merged API. Auto merges use `MergedApiExecutionRoleArn` to perform merge operations.\\n\\nThe following values are valid:\\n\\n`MANUAL_MERGE | AUTO_MERGE`"}},"AWS::ApplicationAutoScaling::ScalableTarget":{"attributes":{"Id":"","Ref":"When the logical ID of this resource is provided to the `Ref` intrinsic function, `Ref` returns the CloudFormation-generated ID of the resource. For example: `service/ecsStack-MyECSCluster-AB12CDE3F4GH/ecsStack-MyECSService-AB12CDE3F4GH|ecs:service:DesiredCount|ecs` .\\n\\nCloudFormation uses the following format to generate the ID: `service/ *resource_ID* | *scalable_dimension* | *service_namespace*` .\\n\\nFor more information about using the `Ref` function, see [Ref](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-ref.html) ."},"description":"The `AWS::ApplicationAutoScaling::ScalableTarget` resource specifies a resource that Application Auto Scaling can scale, such as an AWS::DynamoDB::Table or AWS::ECS::Service resource.\\n\\nFor more information, see [Getting started](https://docs.aws.amazon.com/autoscaling/application/userguide/getting-started.html) in the *Application Auto Scaling User Guide* .\\n\\n> If the resource that you want Application Auto Scaling to scale is not yet created in your account, add a dependency on the resource when registering it as a scalable target using the [DependsOn](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-attribute-dependson.html) attribute.","properties":{"MaxCapacity":"The maximum value that you plan to scale out to. When a scaling policy is in effect, Application Auto Scaling can scale out (expand) as needed to the maximum capacity limit in response to changing demand.","MinCapacity":"The minimum value that you plan to scale in to. When a scaling policy is in effect, Application Auto Scaling can scale in (contract) as needed to the minimum capacity limit in response to changing demand.","ResourceId":"The identifier of the resource associated with the scalable target. This string consists of the resource type and unique identifier.\\n\\n- ECS service - The resource type is `service` and the unique identifier is the cluster name and service name. Example: `service/default/sample-webapp` .\\n- Spot Fleet - The resource type is `spot-fleet-request` and the unique identifier is the Spot Fleet request ID. Example: `spot-fleet-request/sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE` .\\n- EMR cluster - The resource type is `instancegroup` and the unique identifier is the cluster ID and instance group ID. Example: `instancegroup/j-2EEZNYKUA1NTV/ig-1791Y4E1L8YI0` .\\n- AppStream 2.0 fleet - The resource type is `fleet` and the unique identifier is the fleet name. Example: `fleet/sample-fleet` .\\n- DynamoDB table - The resource type is `table` and the unique identifier is the table name. Example: `table/my-table` .\\n- DynamoDB global secondary index - The resource type is `index` and the unique identifier is the index name. Example: `table/my-table/index/my-table-index` .\\n- Aurora DB cluster - The resource type is `cluster` and the unique identifier is the cluster name. Example: `cluster:my-db-cluster` .\\n- SageMaker endpoint variant - The resource type is `variant` and the unique identifier is the resource ID. Example: `endpoint/my-end-point/variant/KMeansClustering` .\\n- Custom resources are not supported with a resource type. This parameter must specify the `OutputValue` from the CloudFormation template stack used to access the resources. The unique identifier is defined by the service provider. More information is available in our [GitHub repository](https://docs.aws.amazon.com/https://github.com/aws/aws-auto-scaling-custom-resource) .\\n- Amazon Comprehend document classification endpoint - The resource type and unique identifier are specified using the endpoint ARN. Example: `arn:aws:comprehend:us-west-2:123456789012:document-classifier-endpoint/EXAMPLE` .\\n- Amazon Comprehend entity recognizer endpoint - The resource type and unique identifier are specified using the endpoint ARN. Example: `arn:aws:comprehend:us-west-2:123456789012:entity-recognizer-endpoint/EXAMPLE` .\\n- Lambda provisioned concurrency - The resource type is `function` and the unique identifier is the function name with a function version or alias name suffix that is not `$LATEST` . Example: `function:my-function:prod` or `function:my-function:1` .\\n- Amazon Keyspaces table - The resource type is `table` and the unique identifier is the table name. Example: `keyspace/mykeyspace/table/mytable` .\\n- Amazon MSK cluster - The resource type and unique identifier are specified using the cluster ARN. Example: `arn:aws:kafka:us-east-1:123456789012:cluster/demo-cluster-1/6357e0b2-0e6a-4b86-a0b4-70df934c2e31-5` .\\n- Amazon ElastiCache replication group - The resource type is `replication-group` and the unique identifier is the replication group name. Example: `replication-group/mycluster` .\\n- Neptune cluster - The resource type is `cluster` and the unique identifier is the cluster name. Example: `cluster:mycluster` .\\n- SageMaker Serverless endpoint - The resource type is `variant` and the unique identifier is the resource ID. Example: `endpoint/my-end-point/variant/KMeansClustering` .","RoleARN":"Specify the Amazon Resource Name (ARN) of an Identity and Access Management (IAM) role that allows Application Auto Scaling to modify the scalable target on your behalf. This can be either an IAM service role that Application Auto Scaling can assume to make calls to other AWS resources on your behalf, or a service-linked role for the specified service. For more information, see [How Application Auto Scaling works with IAM](https://docs.aws.amazon.com/autoscaling/application/userguide/security_iam_service-with-iam.html) in the *Application Auto Scaling User Guide* .\\n\\nTo automatically create a service-linked role (recommended), specify the full ARN of the service-linked role in your stack template. To find the exact ARN of the service-linked role for your AWS or custom resource, see the [Service-linked roles](https://docs.aws.amazon.com/autoscaling/application/userguide/application-auto-scaling-service-linked-roles.html) topic in the *Application Auto Scaling User Guide* . Look for the ARN in the table at the bottom of the page.","ScalableDimension":"The scalable dimension associated with the scalable target. This string consists of the service namespace, resource type, and scaling property.\\n\\n- `ecs:service:DesiredCount` - The desired task count of an ECS service.\\n- `elasticmapreduce:instancegroup:InstanceCount` - The instance count of an EMR Instance Group.\\n- `ec2:spot-fleet-request:TargetCapacity` - The target capacity of a Spot Fleet.\\n- `appstream:fleet:DesiredCapacity` - The desired capacity of an AppStream 2.0 fleet.\\n- `dynamodb:table:ReadCapacityUnits` - The provisioned read capacity for a DynamoDB table.\\n- `dynamodb:table:WriteCapacityUnits` - The provisioned write capacity for a DynamoDB table.\\n- `dynamodb:index:ReadCapacityUnits` - The provisioned read capacity for a DynamoDB global secondary index.\\n- `dynamodb:index:WriteCapacityUnits` - The provisioned write capacity for a DynamoDB global secondary index.\\n- `rds:cluster:ReadReplicaCount` - The count of Aurora Replicas in an Aurora DB cluster. Available for Aurora MySQL-compatible edition and Aurora PostgreSQL-compatible edition.\\n- `sagemaker:variant:DesiredInstanceCount` - The number of EC2 instances for a SageMaker model endpoint variant.\\n- `custom-resource:ResourceType:Property` - The scalable dimension for a custom resource provided by your own application or service.\\n- `comprehend:document-classifier-endpoint:DesiredInferenceUnits` - The number of inference units for an Amazon Comprehend document classification endpoint.\\n- `comprehend:entity-recognizer-endpoint:DesiredInferenceUnits` - The number of inference units for an Amazon Comprehend entity recognizer endpoint.\\n- `lambda:function:ProvisionedConcurrency` - The provisioned concurrency for a Lambda function.\\n- `cassandra:table:ReadCapacityUnits` - The provisioned read capacity for an Amazon Keyspaces table.\\n- `cassandra:table:WriteCapacityUnits` - The provisioned write capacity for an Amazon Keyspaces table.\\n- `kafka:broker-storage:VolumeSize` - The provisioned volume size (in GiB) for brokers in an Amazon MSK cluster.\\n- `elasticache:replication-group:NodeGroups` - The number of node groups for an Amazon ElastiCache replication group.\\n- `elasticache:replication-group:Replicas` - The number of replicas per node group for an Amazon ElastiCache replication group.\\n- `neptune:cluster:ReadReplicaCount` - The count of read replicas in an Amazon Neptune DB cluster.\\n- `sagemaker:variant:DesiredProvisionedConcurrency` - The provisioned concurrency for a SageMaker Serverless endpoint.","ScheduledActions":"The scheduled actions for the scalable target. Duplicates aren\'t allowed.","ServiceNamespace":"The namespace of the AWS service that provides the resource, or a `custom-resource` .","SuspendedState":"An embedded object that contains attributes and attribute values that are used to suspend and resume automatic scaling. Setting the value of an attribute to `true` suspends the specified scaling activities. Setting it to `false` (default) resumes the specified scaling activities.\\n\\n*Suspension Outcomes*\\n\\n- For `DynamicScalingInSuspended` , while a suspension is in effect, all scale-in activities that are triggered by a scaling policy are suspended.\\n- For `DynamicScalingOutSuspended` , while a suspension is in effect, all scale-out activities that are triggered by a scaling policy are suspended.\\n- For `ScheduledScalingSuspended` , while a suspension is in effect, all scaling activities that involve scheduled actions are suspended."}},"AWS::ApplicationAutoScaling::ScalableTarget.ScalableTargetAction":{"attributes":{},"description":"`ScalableTargetAction` specifies the minimum and maximum capacity for the `ScalableTargetAction` property of the [AWS::ApplicationAutoScaling::ScalableTarget ScheduledAction](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationautoscaling-scalabletarget-scheduledaction.html) property type.","properties":{"MaxCapacity":"The maximum capacity.","MinCapacity":"The minimum capacity."}},"AWS::ApplicationAutoScaling::ScalableTarget.ScheduledAction":{"attributes":{},"description":"`ScheduledAction` is a property of the [AWS::ApplicationAutoScaling::ScalableTarget](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-applicationautoscaling-scalabletarget.html) resource that specifies a scheduled action for a scalable target.\\n\\nFor more information, see [Scheduled scaling](https://docs.aws.amazon.com/autoscaling/application/userguide/application-auto-scaling-scheduled-scaling.html) in the *Application Auto Scaling User Guide* .","properties":{"EndTime":"The date and time that the action is scheduled to end, in UTC.","ScalableTargetAction":"The new minimum and maximum capacity. You can set both values or just one. At the scheduled time, if the current capacity is below the minimum capacity, Application Auto Scaling scales out to the minimum capacity. If the current capacity is above the maximum capacity, Application Auto Scaling scales in to the maximum capacity.","Schedule":"The schedule for this action. The following formats are supported:\\n\\n- At expressions - \\" `at( *yyyy* - *mm* - *dd* T *hh* : *mm* : *ss* )` \\"\\n- Rate expressions - \\" `rate( *value* *unit* )` \\"\\n- Cron expressions - \\" `cron( *fields* )` \\"\\n\\nAt expressions are useful for one-time schedules. Cron expressions are useful for scheduled actions that run periodically at a specified date and time, and rate expressions are useful for scheduled actions that run at a regular interval.\\n\\nAt and cron expressions use Universal Coordinated Time (UTC) by default.\\n\\nThe cron format consists of six fields separated by white spaces: [Minutes] [Hours] [Day_of_Month] [Month] [Day_of_Week] [Year].\\n\\nFor rate expressions, *value* is a positive integer and *unit* is `minute` | `minutes` | `hour` | `hours` | `day` | `days` .","ScheduledActionName":"The name of the scheduled action. This name must be unique among all other scheduled actions on the specified scalable target.","StartTime":"The date and time that the action is scheduled to begin, in UTC.","Timezone":"The time zone used when referring to the date and time of a scheduled action, when the scheduled action uses an at or cron expression."}},"AWS::ApplicationAutoScaling::ScalableTarget.SuspendedState":{"attributes":{},"description":"`SuspendedState` is a property of the [AWS::ApplicationAutoScaling::ScalableTarget](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-applicationautoscaling-scalabletarget.html) resource that specifies whether the scaling activities for a scalable target are in a suspended state.\\n\\nFor more information, see [Suspending and resuming scaling](https://docs.aws.amazon.com/autoscaling/application/userguide/application-auto-scaling-suspend-resume-scaling.html) in the *Application Auto Scaling User Guide* .","properties":{"DynamicScalingInSuspended":"Whether scale in by a target tracking scaling policy or a step scaling policy is suspended. Set the value to `true` if you don\'t want Application Auto Scaling to remove capacity when a scaling policy is triggered. The default is `false` .","DynamicScalingOutSuspended":"Whether scale out by a target tracking scaling policy or a step scaling policy is suspended. Set the value to `true` if you don\'t want Application Auto Scaling to add capacity when a scaling policy is triggered. The default is `false` .","ScheduledScalingSuspended":"Whether scheduled scaling is suspended. Set the value to `true` if you don\'t want Application Auto Scaling to add or remove capacity by initiating scheduled actions. The default is `false` ."}},"AWS::ApplicationAutoScaling::ScalingPolicy":{"attributes":{"Ref":"When the logical ID of this resource is provided to the `Ref` intrinsic function, `Ref` returns the Application Auto Scaling scaling policy Amazon Resource Name (ARN). For example: `arn:aws:autoscaling:us-east-2:123456789012:scalingPolicy:12ab3c4d-56789-0ef1-2345-6ghi7jk8lm90:resource/ecs/service/ecsStack-MyECSCluster-AB12CDE3F4GH/ecsStack-MyECSService-AB12CDE3F4GH:policyName/MyStepPolicy` .\\n\\nFor more information about using the `Ref` function, see [Ref](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-ref.html) ."},"description":"The `AWS::ApplicationAutoScaling::ScalingPolicy` resource defines a scaling policy that Application Auto Scaling uses to adjust the capacity of a scalable target.\\n\\nFor more information, see [Target tracking scaling policies](https://docs.aws.amazon.com/autoscaling/application/userguide/application-auto-scaling-target-tracking.html) and [Step scaling policies](https://docs.aws.amazon.com/autoscaling/application/userguide/application-auto-scaling-step-scaling-policies.html) in the *Application Auto Scaling User Guide* .","properties":{"PolicyName":"The name of the scaling policy.\\n\\nUpdates to the name of a target tracking scaling policy are not supported, unless you also update the metric used for scaling. To change only a target tracking scaling policy\'s name, first delete the policy by removing the existing `AWS::ApplicationAutoScaling::ScalingPolicy` resource from the template and updating the stack. Then, recreate the resource with the same settings and a different name.","PolicyType":"The scaling policy type.\\n\\nThe following policy types are supported:\\n\\n`TargetTrackingScaling` —Not supported for Amazon EMR\\n\\n`StepScaling` —Not supported for DynamoDB, Amazon Comprehend, Lambda, Amazon Keyspaces, Amazon MSK, Amazon ElastiCache, or Neptune.","ResourceId":"The identifier of the resource associated with the scaling policy. This string consists of the resource type and unique identifier.\\n\\n- ECS service - The resource type is `service` and the unique identifier is the cluster name and service name. Example: `service/default/sample-webapp` .\\n- Spot Fleet - The resource type is `spot-fleet-request` and the unique identifier is the Spot Fleet request ID. Example: `spot-fleet-request/sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE` .\\n- EMR cluster - The resource type is `instancegroup` and the unique identifier is the cluster ID and instance group ID. Example: `instancegroup/j-2EEZNYKUA1NTV/ig-1791Y4E1L8YI0` .\\n- AppStream 2.0 fleet - The resource type is `fleet` and the unique identifier is the fleet name. Example: `fleet/sample-fleet` .\\n- DynamoDB table - The resource type is `table` and the unique identifier is the table name. Example: `table/my-table` .\\n- DynamoDB global secondary index - The resource type is `index` and the unique identifier is the index name. Example: `table/my-table/index/my-table-index` .\\n- Aurora DB cluster - The resource type is `cluster` and the unique identifier is the cluster name. Example: `cluster:my-db-cluster` .\\n- SageMaker endpoint variant - The resource type is `variant` and the unique identifier is the resource ID. Example: `endpoint/my-end-point/variant/KMeansClustering` .\\n- Custom resources are not supported with a resource type. This parameter must specify the `OutputValue` from the CloudFormation template stack used to access the resources. The unique identifier is defined by the service provider. More information is available in our [GitHub repository](https://docs.aws.amazon.com/https://github.com/aws/aws-auto-scaling-custom-resource) .\\n- Amazon Comprehend document classification endpoint - The resource type and unique identifier are specified using the endpoint ARN. Example: `arn:aws:comprehend:us-west-2:123456789012:document-classifier-endpoint/EXAMPLE` .\\n- Amazon Comprehend entity recognizer endpoint - The resource type and unique identifier are specified using the endpoint ARN. Example: `arn:aws:comprehend:us-west-2:123456789012:entity-recognizer-endpoint/EXAMPLE` .\\n- Lambda provisioned concurrency - The resource type is `function` and the unique identifier is the function name with a function version or alias name suffix that is not `$LATEST` . Example: `function:my-function:prod` or `function:my-function:1` .\\n- Amazon Keyspaces table - The resource type is `table` and the unique identifier is the table name. Example: `keyspace/mykeyspace/table/mytable` .\\n- Amazon MSK cluster - The resource type and unique identifier are specified using the cluster ARN. Example: `arn:aws:kafka:us-east-1:123456789012:cluster/demo-cluster-1/6357e0b2-0e6a-4b86-a0b4-70df934c2e31-5` .\\n- Amazon ElastiCache replication group - The resource type is `replication-group` and the unique identifier is the replication group name. Example: `replication-group/mycluster` .\\n- Neptune cluster - The resource type is `cluster` and the unique identifier is the cluster name. Example: `cluster:mycluster` .\\n- SageMaker Serverless endpoint - The resource type is `variant` and the unique identifier is the resource ID. Example: `endpoint/my-end-point/variant/KMeansClustering` .","ScalableDimension":"The scalable dimension. This string consists of the service namespace, resource type, and scaling property.\\n\\n- `ecs:service:DesiredCount` - The desired task count of an ECS service.\\n- `elasticmapreduce:instancegroup:InstanceCount` - The instance count of an EMR Instance Group.\\n- `ec2:spot-fleet-request:TargetCapacity` - The target capacity of a Spot Fleet.\\n- `appstream:fleet:DesiredCapacity` - The desired capacity of an AppStream 2.0 fleet.\\n- `dynamodb:table:ReadCapacityUnits` - The provisioned read capacity for a DynamoDB table.\\n- `dynamodb:table:WriteCapacityUnits` - The provisioned write capacity for a DynamoDB table.\\n- `dynamodb:index:ReadCapacityUnits` - The provisioned read capacity for a DynamoDB global secondary index.\\n- `dynamodb:index:WriteCapacityUnits` - The provisioned write capacity for a DynamoDB global secondary index.\\n- `rds:cluster:ReadReplicaCount` - The count of Aurora Replicas in an Aurora DB cluster. Available for Aurora MySQL-compatible edition and Aurora PostgreSQL-compatible edition.\\n- `sagemaker:variant:DesiredInstanceCount` - The number of EC2 instances for a SageMaker model endpoint variant.\\n- `custom-resource:ResourceType:Property` - The scalable dimension for a custom resource provided by your own application or service.\\n- `comprehend:document-classifier-endpoint:DesiredInferenceUnits` - The number of inference units for an Amazon Comprehend document classification endpoint.\\n- `comprehend:entity-recognizer-endpoint:DesiredInferenceUnits` - The number of inference units for an Amazon Comprehend entity recognizer endpoint.\\n- `lambda:function:ProvisionedConcurrency` - The provisioned concurrency for a Lambda function.\\n- `cassandra:table:ReadCapacityUnits` - The provisioned read capacity for an Amazon Keyspaces table.\\n- `cassandra:table:WriteCapacityUnits` - The provisioned write capacity for an Amazon Keyspaces table.\\n- `kafka:broker-storage:VolumeSize` - The provisioned volume size (in GiB) for brokers in an Amazon MSK cluster.\\n- `elasticache:replication-group:NodeGroups` - The number of node groups for an Amazon ElastiCache replication group.\\n- `elasticache:replication-group:Replicas` - The number of replicas per node group for an Amazon ElastiCache replication group.\\n- `neptune:cluster:ReadReplicaCount` - The count of read replicas in an Amazon Neptune DB cluster.\\n- `sagemaker:variant:DesiredProvisionedConcurrency` - The provisioned concurrency for a SageMaker Serverless endpoint.","ScalingTargetId":"The CloudFormation-generated ID of an Application Auto Scaling scalable target. For more information about the ID, see the Return Value section of the `AWS::ApplicationAutoScaling::ScalableTarget` resource.\\n\\n> You must specify either the `ScalingTargetId` property, or the `ResourceId` , `ScalableDimension` , and `ServiceNamespace` properties, but not both.","ServiceNamespace":"The namespace of the AWS service that provides the resource, or a `custom-resource` .","StepScalingPolicyConfiguration":"A step scaling policy.","TargetTrackingScalingPolicyConfiguration":"A target tracking scaling policy."}},"AWS::ApplicationAutoScaling::ScalingPolicy.CustomizedMetricSpecification":{"attributes":{},"description":"Contains customized metric specification information for a target tracking scaling policy for Application Auto Scaling.\\n\\nFor information about the available metrics for a service, see [AWS services that publish CloudWatch metrics](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/aws-services-cloudwatch-metrics.html) in the *Amazon CloudWatch User Guide* .\\n\\nTo create your customized metric specification:\\n\\n- Add values for each required parameter from CloudWatch. You can use an existing metric, or a new metric that you create. To use your own metric, you must first publish the metric to CloudWatch. For more information, see [Publish custom metrics](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/publishingMetrics.html) in the *Amazon CloudWatch User Guide* .\\n- Choose a metric that changes proportionally with capacity. The value of the metric should increase or decrease in inverse proportion to the number of capacity units. That is, the value of the metric should decrease when capacity increases, and increase when capacity decreases.\\n\\nFor an example of how creating new metrics can be useful, see [Scaling based on Amazon SQS](https://docs.aws.amazon.com/autoscaling/ec2/userguide/as-using-sqs-queue.html) in the *Amazon EC2 Auto Scaling User Guide* . This topic mentions Auto Scaling groups, but the same scenario for Amazon SQS can apply to the target tracking scaling policies that you create for a Spot Fleet by using Application Auto Scaling.\\n\\nFor more information about the CloudWatch terminology below, see [Amazon CloudWatch concepts](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch_concepts.html) .\\n\\n`CustomizedMetricSpecification` is a property of the [AWS::ApplicationAutoScaling::ScalingPolicy TargetTrackingScalingPolicyConfiguration](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationautoscaling-scalingpolicy-targettrackingscalingpolicyconfiguration.html) property type.","properties":{"Dimensions":"The dimensions of the metric.\\n\\nConditional: If you published your metric with dimensions, you must specify the same dimensions in your scaling policy.","MetricName":"The name of the metric. To get the exact metric name, namespace, and dimensions, inspect the [Metric](https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_Metric.html) object that\'s returned by a call to [ListMetrics](https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_ListMetrics.html) .","Namespace":"The namespace of the metric.","Statistic":"The statistic of the metric.","Unit":"The unit of the metric. For a complete list of the units that CloudWatch supports, see the [MetricDatum](https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_MetricDatum.html) data type in the *Amazon CloudWatch API Reference* ."}},"AWS::ApplicationAutoScaling::ScalingPolicy.MetricDimension":{"attributes":{},"description":"`MetricDimension` specifies a name/value pair that is part of the identity of a CloudWatch metric for the `Dimensions` property of the [AWS::ApplicationAutoScaling::ScalingPolicy CustomizedMetricSpecification](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationautoscaling-scalingpolicy-customizedmetricspecification.html) property type. Duplicate dimensions are not allowed.","properties":{"Name":"The name of the dimension.","Value":"The value of the dimension."}},"AWS::ApplicationAutoScaling::ScalingPolicy.PredefinedMetricSpecification":{"attributes":{},"description":"Contains predefined metric specification information for a target tracking scaling policy for Application Auto Scaling.\\n\\n`PredefinedMetricSpecification` is a property of the [AWS::ApplicationAutoScaling::ScalingPolicy TargetTrackingScalingPolicyConfiguration](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationautoscaling-scalingpolicy-targettrackingscalingpolicyconfiguration.html) property type.","properties":{"PredefinedMetricType":"The metric type. The `ALBRequestCountPerTarget` metric type applies only to Spot fleet requests and ECS services.","ResourceLabel":"Identifies the resource associated with the metric type. You can\'t specify a resource label unless the metric type is `ALBRequestCountPerTarget` and there is a target group attached to the Spot Fleet or ECS service.\\n\\nYou create the resource label by appending the final portion of the load balancer ARN and the final portion of the target group ARN into a single value, separated by a forward slash (/). The format of the resource label is:\\n\\n`app/my-alb/778d41231b141a0f/targetgroup/my-alb-target-group/943f017f100becff` .\\n\\nWhere:\\n\\n- app// is the final portion of the load balancer ARN\\n- targetgroup// is the final portion of the target group ARN.\\n\\nTo find the ARN for an Application Load Balancer, use the [DescribeLoadBalancers](https://docs.aws.amazon.com/elasticloadbalancing/latest/APIReference/API_DescribeLoadBalancers.html) API operation. To find the ARN for the target group, use the [DescribeTargetGroups](https://docs.aws.amazon.com/elasticloadbalancing/latest/APIReference/API_DescribeTargetGroups.html) API operation."}},"AWS::ApplicationAutoScaling::ScalingPolicy.StepAdjustment":{"attributes":{},"description":"`StepAdjustment` specifies a step adjustment for the `StepAdjustments` property of the [AWS::ApplicationAutoScaling::ScalingPolicy StepScalingPolicyConfiguration](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationautoscaling-scalingpolicy-stepscalingpolicyconfiguration.html) property type.\\n\\nFor the following examples, suppose that you have an alarm with a breach threshold of 50:\\n\\n- To trigger a step adjustment when the metric is greater than or equal to 50 and less than 60, specify a lower bound of 0 and an upper bound of 10.\\n- To trigger a step adjustment when the metric is greater than 40 and less than or equal to 50, specify a lower bound of -10 and an upper bound of 0.\\n\\nFor more information, see [Step adjustments](https://docs.aws.amazon.com/autoscaling/application/userguide/application-auto-scaling-step-scaling-policies.html#as-scaling-steps) in the *Application Auto Scaling User Guide* .\\n\\nYou can find a sample template snippet in the [Examples](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-applicationautoscaling-scalingpolicy.html#aws-resource-applicationautoscaling-scalingpolicy--examples) section of the `AWS::ApplicationAutoScaling::ScalingPolicy` documentation.","properties":{"MetricIntervalLowerBound":"The lower bound for the difference between the alarm threshold and the CloudWatch metric. If the metric value is above the breach threshold, the lower bound is inclusive (the metric must be greater than or equal to the threshold plus the lower bound). Otherwise, it is exclusive (the metric must be greater than the threshold plus the lower bound). A null value indicates negative infinity.\\n\\nYou must specify at least one upper or lower bound.","MetricIntervalUpperBound":"The upper bound for the difference between the alarm threshold and the CloudWatch metric. If the metric value is above the breach threshold, the upper bound is exclusive (the metric must be less than the threshold plus the upper bound). Otherwise, it is inclusive (the metric must be less than or equal to the threshold plus the upper bound). A null value indicates positive infinity.\\n\\nYou must specify at least one upper or lower bound.","ScalingAdjustment":"The amount by which to scale. The adjustment is based on the value that you specified in the `AdjustmentType` property (either an absolute number or a percentage). A positive value adds to the current capacity and a negative number subtracts from the current capacity."}},"AWS::ApplicationAutoScaling::ScalingPolicy.StepScalingPolicyConfiguration":{"attributes":{},"description":"`StepScalingPolicyConfiguration` is a property of the [AWS::ApplicationAutoScaling::ScalingPolicy](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-applicationautoscaling-scalingpolicy.html) resource that specifies a step scaling policy configuration for Application Auto Scaling.\\n\\nFor more information, see [Step scaling policies](https://docs.aws.amazon.com/autoscaling/application/userguide/application-auto-scaling-step-scaling-policies.html) in the *Application Auto Scaling User Guide* .","properties":{"AdjustmentType":"Specifies whether the `ScalingAdjustment` value in the `StepAdjustment` property is an absolute number or a percentage of the current capacity.","Cooldown":"The amount of time, in seconds, to wait for a previous scaling activity to take effect. If not specified, the default value is 300. For more information, see [Cooldown period](https://docs.aws.amazon.com/autoscaling/application/userguide/application-auto-scaling-step-scaling-policies.html#step-scaling-cooldown) in the *Application Auto Scaling User Guide* .","MetricAggregationType":"The aggregation type for the CloudWatch metrics. Valid values are `Minimum` , `Maximum` , and `Average` . If the aggregation type is null, the value is treated as `Average` .","MinAdjustmentMagnitude":"The minimum value to scale by when the adjustment type is `PercentChangeInCapacity` . For example, suppose that you create a step scaling policy to scale out an Amazon ECS service by 25 percent and you specify a `MinAdjustmentMagnitude` of 2. If the service has 4 tasks and the scaling policy is performed, 25 percent of 4 is 1. However, because you specified a `MinAdjustmentMagnitude` of 2, Application Auto Scaling scales out the service by 2 tasks.","StepAdjustments":"A set of adjustments that enable you to scale based on the size of the alarm breach.\\n\\nAt least one step adjustment is required if you are adding a new step scaling policy configuration."}},"AWS::ApplicationAutoScaling::ScalingPolicy.TargetTrackingScalingPolicyConfiguration":{"attributes":{},"description":"`TargetTrackingScalingPolicyConfiguration` is a property of the [AWS::ApplicationAutoScaling::ScalingPolicy](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-applicationautoscaling-scalingpolicy.html) resource that specifies a target tracking scaling policy configuration for Application Auto Scaling. Use a target tracking scaling policy to adjust the capacity of the specified scalable target in response to actual workloads, so that resource utilization remains at or near the target utilization value.\\n\\nFor more information, see [Target tracking scaling policies](https://docs.aws.amazon.com/autoscaling/application/userguide/application-auto-scaling-target-tracking.html) in the *Application Auto Scaling User Guide* .","properties":{"CustomizedMetricSpecification":"A customized metric. You can specify either a predefined metric or a customized metric.","DisableScaleIn":"Indicates whether scale in by the target tracking scaling policy is disabled. If the value is `true` , scale in is disabled and the target tracking scaling policy won\'t remove capacity from the scalable target. Otherwise, scale in is enabled and the target tracking scaling policy can remove capacity from the scalable target. The default value is `false` .","PredefinedMetricSpecification":"A predefined metric. You can specify either a predefined metric or a customized metric.","ScaleInCooldown":"The amount of time, in seconds, after a scale-in activity completes before another scale-in activity can start. For more information and for default values, see [Define cooldown periods](https://docs.aws.amazon.com/autoscaling/application/userguide/application-auto-scaling-target-tracking.html#target-tracking-cooldown) in the *Application Auto Scaling User Guide* .","ScaleOutCooldown":"The amount of time, in seconds, to wait for a previous scale-out activity to take effect. For more information and for default values, see [Define cooldown periods](https://docs.aws.amazon.com/autoscaling/application/userguide/application-auto-scaling-target-tracking.html#target-tracking-cooldown) in the *Application Auto Scaling User Guide* .","TargetValue":"The target value for the metric. Although this property accepts numbers of type Double, it won\'t accept values that are either too small or too large. Values must be in the range of -2^360 to 2^360. The value must be a valid number based on the choice of metric. For example, if the metric is CPU utilization, then the target value is a percent value that represents how much of the CPU can be used before scaling out."}},"AWS::ApplicationInsights::Application":{"attributes":{"ApplicationARN":"Returns the Amazon Resource Name (ARN) of the application, such as `arn:aws:applicationinsights:us-east-1:123456789012:application/resource-group/my_resource_group` .","Ref":"`Ref` returns the Amazon Resource Name (ARN) of the application, such as `arn:aws:applicationinsights:us-east-1:123456789012:application/resource-group/my_resource_group` ."},"description":"The `AWS::ApplicationInsights::Application` resource adds an application that is created from a resource group.","properties":{"AutoConfigurationEnabled":"If set to `true` , the application components will be configured with the monitoring configuration recommended by Application Insights.","CWEMonitorEnabled":"Indicates whether Application Insights can listen to CloudWatch events for the application resources, such as `instance terminated` , `failed deployment` , and others.","ComponentMonitoringSettings":"The monitoring settings of the components.","CustomComponents":"Describes a custom component by grouping similar standalone instances to monitor.","GroupingType":"Application Insights can create applications based on a resource group or on an account. To create an account-based application using all of the resources in the account, set this parameter to `ACCOUNT_BASED` .","LogPatternSets":"The log pattern sets.","OpsCenterEnabled":"Indicates whether Application Insights will create OpsItems for any problem that is detected by Application Insights for an application.","OpsItemSNSTopicArn":"The SNS topic provided to Application Insights that is associated with the created OpsItems to receive SNS notifications for opsItem updates.","ResourceGroupName":"The name of the resource group used for the application.","Tags":"An array of `Tags` ."}},"AWS::ApplicationInsights::Application.Alarm":{"attributes":{},"description":"The `AWS::ApplicationInsights::Application Alarm` property type defines a CloudWatch alarm to be monitored for the component.","properties":{"AlarmName":"The name of the CloudWatch alarm to be monitored for the component.","Severity":"Indicates the degree of outage when the alarm goes off."}},"AWS::ApplicationInsights::Application.AlarmMetric":{"attributes":{},"description":"The `AWS::ApplicationInsights::Application AlarmMetric` property type defines a metric to monitor for the component.","properties":{"AlarmMetricName":"The name of the metric to be monitored for the component. For metrics supported by Application Insights, see [Logs and metrics supported by Amazon CloudWatch Application Insights](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/appinsights-logs-and-metrics.html) ."}},"AWS::ApplicationInsights::Application.ComponentConfiguration":{"attributes":{},"description":"The `AWS::ApplicationInsights::Application ComponentConfiguration` property type defines the configuration settings of the component.","properties":{"ConfigurationDetails":"The configuration settings.","SubComponentTypeConfigurations":"Sub-component configurations of the component."}},"AWS::ApplicationInsights::Application.ComponentMonitoringSetting":{"attributes":{},"description":"The `AWS::ApplicationInsights::Application ComponentMonitoringSetting` property type defines the monitoring setting of the component.","properties":{"ComponentARN":"The ARN of the component.","ComponentConfigurationMode":"Component monitoring can be configured in one of the following three modes:\\n\\n- `DEFAULT` : The component will be configured with the recommended default monitoring settings of the selected `Tier` .\\n- `CUSTOM` : The component will be configured with the customized monitoring settings that are specified in `CustomComponentConfiguration` . If used, `CustomComponentConfiguration` must be provided.\\n- `DEFAULT_WITH_OVERWRITE` : The component will be configured with the recommended default monitoring settings of the selected `Tier` , and merged with customized overwrite settings that are specified in `DefaultOverwriteComponentConfiguration` . If used, `DefaultOverwriteComponentConfiguration` must be provided.","ComponentName":"The name of the component.","CustomComponentConfiguration":"Customized monitoring settings. Required if CUSTOM mode is configured in `ComponentConfigurationMode` .","DefaultOverwriteComponentConfiguration":"Customized overwrite monitoring settings. Required if CUSTOM mode is configured in `ComponentConfigurationMode` .","Tier":"The tier of the application component. Supported tiers include `DOT_NET_CORE` , `DOT_NET_WORKER` , `DOT_NET_WEB` , `SQL_SERVER` , `SQL_SERVER_ALWAYSON_AVAILABILITY_GROUP` , `SQL_SERVER_FAILOVER_CLUSTER_INSTANCE` , `MYSQL` , `POSTGRESQL` , `JAVA_JMX` , `ORACLE` , `SAP_HANA_MULTI_NODE` , `SAP_HANA_SINGLE_NODE` , `SAP_HANA_HIGH_AVAILABILITY` , `SHAREPOINT` . `ACTIVE_DIRECTORY` , and `DEFAULT` ."}},"AWS::ApplicationInsights::Application.ConfigurationDetails":{"attributes":{},"description":"The `AWS::ApplicationInsights::Application ConfigurationDetails` property type specifies the configuration settings.","properties":{"AlarmMetrics":"A list of metrics to monitor for the component. All component types can use `AlarmMetrics` .","Alarms":"A list of alarms to monitor for the component. All component types can use `Alarm` .","HAClusterPrometheusExporter":"The HA cluster Prometheus Exporter settings.","HANAPrometheusExporter":"The HANA DB Prometheus Exporter settings.","JMXPrometheusExporter":"A list of Java metrics to monitor for the component.","Logs":"A list of logs to monitor for the component. Only Amazon EC2 instances can use `Logs` .","WindowsEvents":"A list of Windows Events to monitor for the component. Only Amazon EC2 instances running on Windows can use `WindowsEvents` ."}},"AWS::ApplicationInsights::Application.CustomComponent":{"attributes":{},"description":"The `AWS::ApplicationInsights::Application CustomComponent` property type describes a custom component by grouping similar standalone instances to monitor.","properties":{"ComponentName":"The name of the component.","ResourceList":"The list of resource ARNs that belong to the component."}},"AWS::ApplicationInsights::Application.HAClusterPrometheusExporter":{"attributes":{},"description":"The `AWS::ApplicationInsights::Application HAClusterPrometheusExporter` property type defines the HA cluster Prometheus Exporter settings. For more information, see the [component configuration](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/component-config-sections.html#component-configuration-prometheus) in the CloudWatch Application Insights documentation.","properties":{"PrometheusPort":"The target port to which Prometheus sends metrics. If not specified, the default port 9668 is used."}},"AWS::ApplicationInsights::Application.HANAPrometheusExporter":{"attributes":{},"description":"The `AWS::ApplicationInsights::Application HANAPrometheusExporter` property type defines the HANA DB Prometheus Exporter settings. For more information, see the [component configuration](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/component-config-sections.html#component-configuration-prometheus) in the CloudWatch Application Insights documentation.","properties":{"AgreeToInstallHANADBClient":"Designates whether you agree to install the HANA DB client.","HANAPort":"The HANA database port by which the exporter will query HANA metrics.","HANASID":"The three-character SAP system ID (SID) of the SAP HANA system.","HANASecretName":"The AWS Secrets Manager secret that stores HANA monitoring user credentials. The HANA Prometheus exporter uses these credentials to connect to the database and query HANA metrics.","PrometheusPort":"The target port to which Prometheus sends metrics. If not specified, the default port 9668 is used."}},"AWS::ApplicationInsights::Application.JMXPrometheusExporter":{"attributes":{},"description":"The `AWS::ApplicationInsights::Application JMXPrometheusExporter` property type defines the JMXPrometheus Exporter configuration. For more information, see the [component configuration](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/component-config-sections.html#component-configuration-prometheus) in the CloudWatch Application Insights documentation.","properties":{"HostPort":"The host and port to connect to through remote JMX. Only one of `jmxURL` and `hostPort` can be specified.","JMXURL":"The complete JMX URL to connect to.","PrometheusPort":"The target port to send Prometheus metrics to. If not specified, the default port `9404` is used."}},"AWS::ApplicationInsights::Application.Log":{"attributes":{},"description":"The `AWS::ApplicationInsights::Application Log` property type specifies a log to monitor for the component.","properties":{"Encoding":"The type of encoding of the logs to be monitored. The specified encoding should be included in the list of CloudWatch agent supported encodings. If not provided, CloudWatch Application Insights uses the default encoding type for the log type:\\n\\n- `APPLICATION/DEFAULT` : utf-8 encoding\\n- `SQL_SERVER` : utf-16 encoding\\n- `IIS` : ascii encoding","LogGroupName":"The CloudWatch log group name to be associated with the monitored log.","LogPath":"The path of the logs to be monitored. The log path must be an absolute Windows or Linux system file path. For more information, see [CloudWatch Agent Configuration File: Logs Section](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Agent-Configuration-File-Details.html#CloudWatch-Agent-Configuration-File-Logssection) .","LogType":"The log type decides the log patterns against which Application Insights analyzes the log. The log type is selected from the following: `SQL_SERVER` , `MYSQL` , `MYSQL_SLOW_QUERY` , `POSTGRESQL` , `ORACLE_ALERT` , `ORACLE_LISTENER` , `IIS` , `APPLICATION` , `WINDOWS_EVENTS` , `WINDOWS_EVENTS_ACTIVE_DIRECTORY` , `WINDOWS_EVENTS_DNS` , `WINDOWS_EVENTS_IIS` , `WINDOWS_EVENTS_SHAREPOINT` , `SQL_SERVER_ALWAYSON_AVAILABILITY_GROUP` , `SQL_SERVER_FAILOVER_CLUSTER_INSTANCE` , `STEP_FUNCTION` , `API_GATEWAY_ACCESS` , `API_GATEWAY_EXECUTION` , `SAP_HANA_LOGS` , `SAP_HANA_TRACE` , `SAP_HANA_HIGH_AVAILABILITY` , and `DEFAULT` .","PatternSet":"The log pattern set."}},"AWS::ApplicationInsights::Application.LogPattern":{"attributes":{},"description":"The `AWS::ApplicationInsights::Application LogPattern` property type specifies an object that defines the log patterns that belong to a `LogPatternSet` .","properties":{"Pattern":"A regular expression that defines the log pattern. A log pattern can contain up to 50 characters, and it cannot be empty.","PatternName":"The name of the log pattern. A log pattern name can contain up to 50 characters, and it cannot be empty. The characters can be Unicode letters, digits, or one of the following symbols: period, dash, underscore.","Rank":"The rank of the log pattern."}},"AWS::ApplicationInsights::Application.LogPatternSet":{"attributes":{},"description":"The `AWS::ApplicationInsights::Application LogPatternSet` property type specifies the log pattern set.","properties":{"LogPatterns":"A list of objects that define the log patterns that belong to `LogPatternSet` .","PatternSetName":"The name of the log pattern. A log pattern name can contain up to 30 characters, and it cannot be empty. The characters can be Unicode letters, digits, or one of the following symbols: period, dash, underscore."}},"AWS::ApplicationInsights::Application.SubComponentConfigurationDetails":{"attributes":{},"description":"The `AWS::ApplicationInsights::Application SubComponentConfigurationDetails` property type specifies the configuration settings of the sub-components.","properties":{"AlarmMetrics":"A list of metrics to monitor for the component. All component types can use `AlarmMetrics` .","Logs":"A list of logs to monitor for the component. Only Amazon EC2 instances can use `Logs` .","WindowsEvents":"A list of Windows Events to monitor for the component. Only Amazon EC2 instances running on Windows can use `WindowsEvents` ."}},"AWS::ApplicationInsights::Application.SubComponentTypeConfiguration":{"attributes":{},"description":"The `AWS::ApplicationInsights::Application SubComponentTypeConfiguration` property type specifies the sub-component configurations for a component.","properties":{"SubComponentConfigurationDetails":"The configuration settings of the sub-components.","SubComponentType":"The sub-component type."}},"AWS::ApplicationInsights::Application.WindowsEvent":{"attributes":{},"description":"The `AWS::ApplicationInsights::Application WindowsEvent` property type specifies a Windows Event to monitor for the component.","properties":{"EventLevels":"The levels of event to log. You must specify each level to log. Possible values include `INFORMATION` , `WARNING` , `ERROR` , `CRITICAL` , and `VERBOSE` . This field is required for each type of Windows Event to log.","EventName":"The type of Windows Events to log, equivalent to the Windows Event log channel name. For example, System, Security, CustomEventName, and so on. This field is required for each type of Windows event to log.","LogGroupName":"The CloudWatch log group name to be associated with the monitored log.","PatternSet":"The log pattern set."}},"AWS::Athena::CapacityReservation":{"attributes":{"AllocatedDpus":"The number of data processing units currently allocated.","Arn":"The ARN of the capacity reservation.","CreationTime":"The time in UTC epoch millis when the capacity reservation was created.","LastSuccessfulAllocationTime":"The time of the most recent capacity allocation that succeeded.","Ref":"`Ref` returns the ARN of the capacity reservation.","Status":"The status of the capacity reservation."},"description":"Specifies a capacity reservation with the provided name and number of requested data processing units.","properties":{"CapacityAssignmentConfiguration":"Assigns Athena workgroups (and hence their queries) to capacity reservations. A capacity reservation can have only one capacity assignment configuration, but the capacity assignment configuration can be made up of multiple individual assignments. Each assignment specifies how Athena queries can consume capacity from the capacity reservation that their workgroup is mapped to.","Name":"The name of the capacity reservation.","Tags":"An array of key-value pairs to apply to the capacity reservation.\\n\\nFor more information, see [Tag](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-resource-tags.html) .","TargetDpus":"The number of data processing units requested."}},"AWS::Athena::CapacityReservation.CapacityAssignment":{"attributes":{},"description":"A mapping between one or more workgroups and a capacity reservation.","properties":{"WorkgroupNames":"The list of workgroup names for the capacity assignment."}},"AWS::Athena::CapacityReservation.CapacityAssignmentConfiguration":{"attributes":{},"description":"Assigns Athena workgroups (and hence their queries) to capacity reservations. A capacity reservation can have only one capacity assignment configuration, but the capacity assignment configuration can be made up of multiple individual assignments. Each assignment specifies how Athena queries can consume capacity from the capacity reservation that their workgroup is mapped to.","properties":{"CapacityAssignments":"The list of assignments that make up the capacity assignment configuration."}},"AWS::Athena::DataCatalog":{"attributes":{"Ref":"`Ref` returns the name of the data catalog."},"description":"The AWS::Athena::DataCatalog resource specifies an Amazon Athena data catalog, which contains a name, description, type, parameters, and tags. For more information, see [DataCatalog](https://docs.aws.amazon.com/athena/latest/APIReference/API_DataCatalog.html) in the *Amazon Athena API Reference* .","properties":{"Description":"A description of the data catalog.","Name":"The name of the data catalog. The catalog name must be unique for the AWS account and can use a maximum of 128 alphanumeric, underscore, at sign, or hyphen characters.","Parameters":"Specifies the Lambda function or functions to use for the data catalog. The mapping used depends on the catalog type.\\n\\n- The `HIVE` data catalog type uses the following syntax. The `metadata-function` parameter is required. `The sdk-version` parameter is optional and defaults to the currently supported version.\\n\\n`metadata-function= *lambda_arn* , sdk-version= *version_number*`\\n- The `LAMBDA` data catalog type uses one of the following sets of required parameters, but not both.\\n\\n- When one Lambda function processes metadata and another Lambda function reads data, the following syntax is used. Both parameters are required.\\n\\n`metadata-function= *lambda_arn* , record-function= *lambda_arn*`\\n- A composite Lambda function that processes both metadata and data uses the following syntax.\\n\\n`function= *lambda_arn*`\\n- The `GLUE` type takes a catalog ID parameter and is required. The `*catalog_id*` is the account ID of the AWS account to which the Glue catalog belongs.\\n\\n`catalog-id= *catalog_id*`\\n\\n- The `GLUE` data catalog type also applies to the default `AwsDataCatalog` that already exists in your account, of which you can have only one and cannot modify.\\n- Queries that specify a GLUE data catalog other than the default `AwsDataCatalog` must be run on Athena engine version 2.\\n- In Regions where Athena engine version 2 is not available, creating new GLUE data catalogs results in an `INVALID_INPUT` error.","Tags":"The tags (key-value pairs) to associate with this resource.","Type":"The type of data catalog: `LAMBDA` for a federated catalog, `GLUE` for AWS Glue Catalog, or `HIVE` for an external hive metastore."}},"AWS::Athena::NamedQuery":{"attributes":{"NamedQueryId":"The unique ID of the query.","Ref":"`Ref` returns the resource name."},"description":"The `AWS::Athena::NamedQuery` resource specifies an Amazon Athena saved query, where `QueryString` contains the SQL query statements that make up the query.","properties":{"Database":"The database to which the query belongs.","Description":"The query description.","Name":"The query name.","QueryString":"The SQL statements that make up the query.","WorkGroup":"The name of the workgroup that contains the named query."}},"AWS::Athena::PreparedStatement":{"attributes":{"Ref":"`Ref` returns the name of the prepared statement."},"description":"Specifies a prepared statement for use with SQL queries in Athena.","properties":{"Description":"The description of the prepared statement.","QueryStatement":"The query string for the prepared statement.","StatementName":"The name of the prepared statement.","WorkGroup":"The workgroup to which the prepared statement belongs."}},"AWS::Athena::WorkGroup":{"attributes":{"CreationTime":"The date and time the workgroup was created, as a UNIX timestamp in seconds. For example: `1582761016` .","Ref":"`Ref` returns the name of the WorkGroup. For example:\\n\\n`{ \\"Ref\\": \\"myWorkGroup\\" }`","WorkGroupConfiguration.EngineVersion.EffectiveEngineVersion":""},"description":"The AWS::Athena::WorkGroup resource specifies an Amazon Athena workgroup, which contains a name, description, creation time, state, and other configuration, listed under `WorkGroupConfiguration` . Each workgroup enables you to isolate queries for you or your group from other queries in the same account. For more information, see [CreateWorkGroup](https://docs.aws.amazon.com/athena/latest/APIReference/API_CreateWorkGroup.html) in the *Amazon Athena API Reference* .","properties":{"Description":"The workgroup description.","Name":"The workgroup name.","RecursiveDeleteOption":"The option to delete a workgroup and its contents even if the workgroup contains any named queries. The default is false.","State":"The state of the workgroup: ENABLED or DISABLED.","Tags":"The tags (key-value pairs) to associate with this resource.","WorkGroupConfiguration":"The configuration of the workgroup, which includes the location in Amazon S3 where query results are stored, the encryption option, if any, used for query results, whether Amazon CloudWatch Metrics are enabled for the workgroup, and the limit for the amount of bytes scanned (cutoff) per query, if it is specified. The `EnforceWorkGroupConfiguration` option determines whether workgroup settings override client-side query settings."}},"AWS::Athena::WorkGroup.AclConfiguration":{"attributes":{},"description":"Indicates that an Amazon S3 canned ACL should be set to control ownership of stored query results. When Athena stores query results in Amazon S3, the canned ACL is set with the `x-amz-acl` request header. For more information about S3 Object Ownership, see [Object Ownership settings](https://docs.aws.amazon.com/AmazonS3/latest/userguide/about-object-ownership.html#object-ownership-overview) in the *Amazon S3 User Guide* .","properties":{"S3AclOption":"The Amazon S3 canned ACL that Athena should specify when storing query results. Currently the only supported canned ACL is `BUCKET_OWNER_FULL_CONTROL` . If a query runs in a workgroup and the workgroup overrides client-side settings, then the Amazon S3 canned ACL specified in the workgroup\'s settings is used for all queries that run in the workgroup. For more information about Amazon S3 canned ACLs, see [Canned ACL](https://docs.aws.amazon.com/AmazonS3/latest/userguide/acl-overview.html#canned-acl) in the *Amazon S3 User Guide* ."}},"AWS::Athena::WorkGroup.CustomerContentEncryptionConfiguration":{"attributes":{},"description":"Specifies the KMS key that is used to encrypt the user\'s data stores in Athena. This setting does not apply to Athena SQL workgroups.","properties":{"KmsKey":"The KMS key that is used to encrypt the user\'s data stores in Athena."}},"AWS::Athena::WorkGroup.EncryptionConfiguration":{"attributes":{},"description":"If query results are encrypted in Amazon S3, indicates the encryption option used (for example, `SSE_KMS` or `CSE_KMS` ) and key information.","properties":{"EncryptionOption":"Indicates whether Amazon S3 server-side encryption with Amazon S3-managed keys ( `SSE_S3` ), server-side encryption with KMS-managed keys ( `SSE_KMS` ), or client-side encryption with KMS-managed keys ( `CSE_KMS` ) is used.\\n\\nIf a query runs in a workgroup and the workgroup overrides client-side settings, then the workgroup\'s setting for encryption is used. It specifies whether query results must be encrypted, for all queries that run in this workgroup.","KmsKey":"For `SSE_KMS` and `CSE_KMS` , this is the KMS key ARN or ID."}},"AWS::Athena::WorkGroup.EngineVersion":{"attributes":{},"description":"The Athena engine version for running queries, or the PySpark engine version for running sessions.","properties":{"EffectiveEngineVersion":"Read only. The engine version on which the query runs. If the user requests a valid engine version other than Auto, the effective engine version is the same as the engine version that the user requested. If the user requests Auto, the effective engine version is chosen by Athena. When a request to update the engine version is made by a `CreateWorkGroup` or `UpdateWorkGroup` operation, the `EffectiveEngineVersion` field is ignored.","SelectedEngineVersion":"The engine version requested by the user. Possible values are determined by the output of `ListEngineVersions` , including AUTO. The default is AUTO."}},"AWS::Athena::WorkGroup.ResultConfiguration":{"attributes":{},"description":"The location in Amazon S3 where query and calculation results are stored and the encryption option, if any, used for query and calculation results. These are known as \\"client-side settings\\". If workgroup settings override client-side settings, then the query uses the workgroup settings.","properties":{"AclConfiguration":"Indicates that an Amazon S3 canned ACL should be set to control ownership of stored query results. Currently the only supported canned ACL is `BUCKET_OWNER_FULL_CONTROL` . This is a client-side setting. If workgroup settings override client-side settings, then the query uses the ACL configuration that is specified for the workgroup, and also uses the location for storing query results specified in the workgroup. See `EnforceWorkGroupConfiguration` .","EncryptionConfiguration":"If query results are encrypted in Amazon S3, indicates the encryption option used (for example, `SSE_KMS` or `CSE_KMS` ) and key information. This is a client-side setting. If workgroup settings override client-side settings, then the query uses the encryption configuration that is specified for the workgroup, and also uses the location for storing query results specified in the workgroup. See `EnforceWorkGroupConfiguration` and [Workgroup Settings Override Client-Side Settings](https://docs.aws.amazon.com/athena/latest/ug/workgroups-settings-override.html) .","ExpectedBucketOwner":"The account ID that you expect to be the owner of the Amazon S3 bucket specified by `ResultConfiguration:OutputLocation` . If set, Athena uses the value for `ExpectedBucketOwner` when it makes Amazon S3 calls to your specified output location. If the `ExpectedBucketOwner` account ID does not match the actual owner of the Amazon S3 bucket, the call fails with a permissions error.\\n\\nThis is a client-side setting. If workgroup settings override client-side settings, then the query uses the `ExpectedBucketOwner` setting that is specified for the workgroup, and also uses the location for storing query results specified in the workgroup. See `EnforceWorkGroupConfiguration` .","OutputLocation":"The location in Amazon S3 where your query results are stored, such as `s3://path/to/query/bucket/` . To run a query, you must specify the query results location using either a client-side setting for individual queries or a location specified by the workgroup. If workgroup settings override client-side settings, then the query uses the location specified for the workgroup. If no query location is set, Athena issues an error. For more information, see [Working with Query Results, Output Files, and Query History](https://docs.aws.amazon.com/athena/latest/ug/querying.html) and `EnforceWorkGroupConfiguration` ."}},"AWS::Athena::WorkGroup.WorkGroupConfiguration":{"attributes":{},"description":"The configuration of the workgroup, which includes the location in Amazon S3 where query results are stored, the encryption option, if any, used for query results, whether Amazon CloudWatch Metrics are enabled for the workgroup, and the limit for the amount of bytes scanned (cutoff) per query, if it is specified. The `EnforceWorkGroupConfiguration` option determines whether workgroup settings override client-side query settings.","properties":{"AdditionalConfiguration":"Specifies a user defined JSON string that is passed to the session engine.","BytesScannedCutoffPerQuery":"The upper limit (cutoff) for the amount of bytes a single query in a workgroup is allowed to scan. No default is defined.\\n\\n> This property currently supports integer types. Support for long values is planned.","CustomerContentEncryptionConfiguration":"Specifies the KMS key that is used to encrypt the user\'s data stores in Athena. This setting does not apply to Athena SQL workgroups.","EnforceWorkGroupConfiguration":"If set to \\"true\\", the settings for the workgroup override client-side settings. If set to \\"false\\", client-side settings are used. For more information, see [Workgroup Settings Override Client-Side Settings](https://docs.aws.amazon.com/athena/latest/ug/workgroups-settings-override.html) .","EngineVersion":"The engine version that all queries running on the workgroup use.","ExecutionRole":"Role used to access user resources in an Athena for Apache Spark session. This property applies only to Spark-enabled workgroups in Athena.","PublishCloudWatchMetricsEnabled":"Indicates that the Amazon CloudWatch metrics are enabled for the workgroup.","RequesterPaysEnabled":"If set to `true` , allows members assigned to a workgroup to reference Amazon S3 Requester Pays buckets in queries. If set to `false` , workgroup members cannot query data from Requester Pays buckets, and queries that retrieve data from Requester Pays buckets cause an error. The default is `false` . For more information about Requester Pays buckets, see [Requester Pays Buckets](https://docs.aws.amazon.com/AmazonS3/latest/dev/RequesterPaysBuckets.html) in the *Amazon Simple Storage Service Developer Guide* .","ResultConfiguration":"Specifies the location in Amazon S3 where query results are stored and the encryption option, if any, used for query results. For more information, see [Working with Query Results, Output Files, and Query History](https://docs.aws.amazon.com/athena/latest/ug/querying.html) ."}},"AWS::AuditManager::Assessment":{"attributes":{"Arn":"The Amazon Resource Name (ARN) of the assessment. For example, `arn:aws:auditmanager:us-east-1:123456789012:assessment/111A1A1A-22B2-33C3-DDD4-55E5E5E555E5` .","AssessmentId":"The unique identifier for the assessment. For example, `111A1A1A-22B2-33C3-DDD4-55E5E5E555E5` .","CreationTime":"The time when the assessment was created. For example, `1607582033.373` .","Ref":"`Ref` returns the assessment ID. For example:\\n\\n`{ \\"Ref\\": \\"111A1A1A-22B2-33C3-DDD4-55E5E5E555E5\\" }`"},"description":"The `AWS::AuditManager::Assessment` resource is an Audit Manager resource type that defines the scope of audit evidence collected by Audit Manager . An Audit Manager assessment is an implementation of an Audit Manager framework.","properties":{"AssessmentReportsDestination":"The destination that evidence reports are stored in for the assessment.","AwsAccount":"The AWS account that\'s associated with the assessment.","Delegations":"The delegations that are associated with the assessment.","Description":"The description of the assessment.","FrameworkId":"The unique identifier for the framework.","Name":"The name of the assessment.","Roles":"The roles that are associated with the assessment.","Scope":"The wrapper of AWS accounts and services that are in scope for the assessment.","Status":"The overall status of the assessment.\\n\\nWhen you create a new assessment, the initial `Status` value is always `ACTIVE` . When you create an assessment, even if you specify the value as `INACTIVE` , the value overrides to `ACTIVE` .\\n\\nAfter you create an assessment, you can change the value of the `Status` property at any time. For example, when you want to stop collecting evidence for your assessment, you can change the assessment status to `INACTIVE` .","Tags":"The tags that are associated with the assessment."}},"AWS::AuditManager::Assessment.AWSAccount":{"attributes":{},"description":"The `AWSAccount` property type specifies the wrapper of the AWS account details, such as account ID, email address, and so on.","properties":{"EmailAddress":"The email address that\'s associated with the AWS account .","Id":"The identifier for the AWS account .","Name":"The name of the AWS account ."}},"AWS::AuditManager::Assessment.AWSService":{"attributes":{},"description":"The `AWSService` property type specifies an AWS service such as Amazon S3 , AWS CloudTrail , and so on.","properties":{"ServiceName":"The name of the AWS service ."}},"AWS::AuditManager::Assessment.AssessmentReportsDestination":{"attributes":{},"description":"The `AssessmentReportsDestination` property type specifies the location in which AWS Audit Manager saves assessment reports for the given assessment.","properties":{"Destination":"The destination bucket where Audit Manager stores assessment reports.","DestinationType":"The destination type, such as Amazon S3."}},"AWS::AuditManager::Assessment.Delegation":{"attributes":{},"description":"The `Delegation` property type specifies the assignment of a control set to a delegate for review.","properties":{"AssessmentId":"The identifier for the assessment that\'s associated with the delegation.","AssessmentName":"The name of the assessment that\'s associated with the delegation.","Comment":"The comment that\'s related to the delegation.","ControlSetId":"The identifier for the control set that\'s associated with the delegation.","CreatedBy":"The user or role that created the delegation.\\n\\n*Minimum* : `1`\\n\\n*Maximum* : `100`\\n\\n*Pattern* : `^[a-zA-Z0-9-_()\\\\\\\\[\\\\\\\\]\\\\\\\\s]+$`","CreationTime":"Specifies when the delegation was created.","Id":"The unique identifier for the delegation.","LastUpdated":"Specifies when the delegation was last updated.","RoleArn":"The Amazon Resource Name (ARN) of the IAM role.","RoleType":"The type of customer persona.\\n\\n> In `CreateAssessment` , `roleType` can only be `PROCESS_OWNER` .\\n> \\n> In `UpdateSettings` , `roleType` can only be `PROCESS_OWNER` .\\n> \\n> In `BatchCreateDelegationByAssessment` , `roleType` can only be `RESOURCE_OWNER` .","Status":"The status of the delegation."}},"AWS::AuditManager::Assessment.Role":{"attributes":{},"description":"The `Role` property type specifies the wrapper that contains AWS Audit Manager role information, such as the role type and IAM Amazon Resource Name (ARN).","properties":{"RoleArn":"The Amazon Resource Name (ARN) of the IAM role.","RoleType":"The type of customer persona.\\n\\n> In `CreateAssessment` , `roleType` can only be `PROCESS_OWNER` .\\n> \\n> In `UpdateSettings` , `roleType` can only be `PROCESS_OWNER` .\\n> \\n> In `BatchCreateDelegationByAssessment` , `roleType` can only be `RESOURCE_OWNER` ."}},"AWS::AuditManager::Assessment.Scope":{"attributes":{},"description":"The `Scope` property type specifies the wrapper that contains the AWS accounts and services that are in scope for the assessment.","properties":{"AwsAccounts":"The AWS accounts that are included in the scope of the assessment.","AwsServices":"The AWS services that are included in the scope of the assessment."}},"AWS::AutoScaling::AutoScalingGroup":{"attributes":{"Ref":"When the logical ID of this resource is provided to the `Ref` intrinsic function, `Ref` returns the resource name. For example: `mystack-myasgroup-NT5EUXTNTXXD` .\\n\\nFor more information about using the `Ref` function, see [Ref](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-ref.html) ."},"description":"The `AWS::AutoScaling::AutoScalingGroup` resource defines an Amazon EC2 Auto Scaling group, which is a collection of Amazon EC2 instances that are treated as a logical grouping for the purposes of automatic scaling and management.\\n\\nFor more information about Amazon EC2 Auto Scaling, see the [Amazon EC2 Auto Scaling User Guide](https://docs.aws.amazon.com/autoscaling/ec2/userguide/what-is-amazon-ec2-auto-scaling.html) .\\n\\n> Amazon EC2 Auto Scaling configures instances launched as part of an Auto Scaling group using either a [launch template](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-launchtemplate.html) or a launch configuration. We strongly recommend that you do not use launch configurations. They do not provide full functionality for Amazon EC2 Auto Scaling or Amazon EC2. For more information, see [Launch configurations](https://docs.aws.amazon.com/autoscaling/ec2/userguide/launch-configurations.html) and [Migrate AWS CloudFormation stacks from launch configurations to launch templates](https://docs.aws.amazon.com/autoscaling/ec2/userguide/migrate-launch-configurations-with-cloudformation.html) in the *Amazon EC2 Auto Scaling User Guide* .","properties":{"AutoScalingGroupName":"The name of the Auto Scaling group. This name must be unique per Region per account.\\n\\nThe name can contain any ASCII character 33 to 126 including most punctuation characters, digits, and upper and lowercased letters.\\n\\n> You cannot use a colon (:) in the name.","AvailabilityZones":"A list of Availability Zones where instances in the Auto Scaling group can be created. Used for launching into the default VPC subnet in each Availability Zone when not using the `VPCZoneIdentifier` property, or for attaching a network interface when an existing network interface ID is specified in a launch template.","CapacityRebalance":"Indicates whether Capacity Rebalancing is enabled. Otherwise, Capacity Rebalancing is disabled. When you turn on Capacity Rebalancing, Amazon EC2 Auto Scaling attempts to launch a Spot Instance whenever Amazon EC2 notifies that a Spot Instance is at an elevated risk of interruption. After launching a new instance, it then terminates an old instance. For more information, see [Use Capacity Rebalancing to handle Amazon EC2 Spot Interruptions](https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-capacity-rebalancing.html) in the in the *Amazon EC2 Auto Scaling User Guide* .","Context":"Reserved.","Cooldown":"*Only needed if you use simple scaling policies.*\\n\\nThe amount of time, in seconds, between one scaling activity ending and another one starting due to simple scaling policies. For more information, see [Scaling cooldowns for Amazon EC2 Auto Scaling](https://docs.aws.amazon.com/autoscaling/ec2/userguide/Cooldown.html) in the *Amazon EC2 Auto Scaling User Guide* .\\n\\nDefault: `300` seconds","DefaultInstanceWarmup":"The amount of time, in seconds, until a new instance is considered to have finished initializing and resource consumption to become stable after it enters the `InService` state.\\n\\nDuring an instance refresh, Amazon EC2 Auto Scaling waits for the warm-up period after it replaces an instance before it moves on to replacing the next instance. Amazon EC2 Auto Scaling also waits for the warm-up period before aggregating the metrics for new instances with existing instances in the Amazon CloudWatch metrics that are used for scaling, resulting in more reliable usage data. For more information, see [Set the default instance warmup for an Auto Scaling group](https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-default-instance-warmup.html) in the *Amazon EC2 Auto Scaling User Guide* .\\n\\n> To manage various warm-up settings at the group level, we recommend that you set the default instance warmup, *even if it is set to 0 seconds* . To remove a value that you previously set, include the property but specify `-1` for the value. However, we strongly recommend keeping the default instance warmup enabled by specifying a value of `0` or other nominal value. \\n\\nDefault: None","DesiredCapacity":"The desired capacity is the initial capacity of the Auto Scaling group at the time of its creation and the capacity it attempts to maintain. It can scale beyond this capacity if you configure automatic scaling.\\n\\nThe number must be greater than or equal to the minimum size of the group and less than or equal to the maximum size of the group. If you do not specify a desired capacity when creating the stack, the default is the minimum size of the group.\\n\\nCloudFormation marks the Auto Scaling group as successful (by setting its status to CREATE_COMPLETE) when the desired capacity is reached. However, if a maximum Spot price is set in the launch template or launch configuration that you specified, then desired capacity is not used as a criteria for success. Whether your request is fulfilled depends on Spot Instance capacity and your maximum price.","DesiredCapacityType":"The unit of measurement for the value specified for desired capacity. Amazon EC2 Auto Scaling supports `DesiredCapacityType` for attribute-based instance type selection only. For more information, see [Creating an Auto Scaling group using attribute-based instance type selection](https://docs.aws.amazon.com/autoscaling/ec2/userguide/create-asg-instance-type-requirements.html) in the *Amazon EC2 Auto Scaling User Guide* .\\n\\nBy default, Amazon EC2 Auto Scaling specifies `units` , which translates into number of instances.\\n\\nValid values: `units` | `vcpu` | `memory-mib`","HealthCheckGracePeriod":"The amount of time, in seconds, that Amazon EC2 Auto Scaling waits before checking the health status of an EC2 instance that has come into service and marking it unhealthy due to a failed health check. This is useful if your instances do not immediately pass their health checks after they enter the `InService` state. For more information, see [Set the health check grace period for an Auto Scaling group](https://docs.aws.amazon.com/autoscaling/ec2/userguide/health-check-grace-period.html) in the *Amazon EC2 Auto Scaling User Guide* .\\n\\nDefault: `0` seconds","HealthCheckType":"A comma-separated value string of one or more health check types.\\n\\nThe valid values are `EC2` , `ELB` , and `VPC_LATTICE` . `EC2` is the default health check and cannot be disabled. For more information, see [Health checks for Auto Scaling instances](https://docs.aws.amazon.com/autoscaling/ec2/userguide/healthcheck.html) in the *Amazon EC2 Auto Scaling User Guide* .\\n\\nOnly specify `EC2` if you must clear a value that was previously set.","InstanceId":"The ID of the instance used to base the launch configuration on. For more information, see [Create an Auto Scaling group using an EC2 instance](https://docs.aws.amazon.com/autoscaling/ec2/userguide/create-asg-from-instance.html) in the *Amazon EC2 Auto Scaling User Guide* .\\n\\nIf you specify `LaunchTemplate` , `MixedInstancesPolicy` , or `LaunchConfigurationName` , don\'t specify `InstanceId` .","LaunchConfigurationName":"The name of the launch configuration to use to launch instances.\\n\\nRequired only if you don\'t specify `LaunchTemplate` , `MixedInstancesPolicy` , or `InstanceId` .","LaunchTemplate":"Information used to specify the launch template and version to use to launch instances. You can alternatively associate a launch template to the Auto Scaling group by specifying a `MixedInstancesPolicy` . For more information about creating launch templates, see [Create a launch template for an Auto Scaling group](https://docs.aws.amazon.com/autoscaling/ec2/userguide/create-launch-template.html) in the *Amazon EC2 Auto Scaling User Guide* .\\n\\nIf you omit this property, you must specify `MixedInstancesPolicy` , `LaunchConfigurationName` , or `InstanceId` .","LifecycleHookSpecificationList":"One or more lifecycle hooks to add to the Auto Scaling group before instances are launched.","LoadBalancerNames":"A list of Classic Load Balancers associated with this Auto Scaling group. For Application Load Balancers, Network Load Balancers, and Gateway Load Balancers, specify the `TargetGroupARNs` property instead.","MaxInstanceLifetime":"The maximum amount of time, in seconds, that an instance can be in service. The default is null. If specified, the value must be either 0 or a number equal to or greater than 86,400 seconds (1 day). For more information, see [Replacing Auto Scaling instances based on maximum instance lifetime](https://docs.aws.amazon.com/autoscaling/ec2/userguide/asg-max-instance-lifetime.html) in the *Amazon EC2 Auto Scaling User Guide* .","MaxSize":"The maximum size of the group.\\n\\n> With a mixed instances policy that uses instance weighting, Amazon EC2 Auto Scaling may need to go above `MaxSize` to meet your capacity requirements. In this event, Amazon EC2 Auto Scaling will never go above `MaxSize` by more than your largest instance weight (weights that define how many units each instance contributes to the desired capacity of the group).","MetricsCollection":"Enables the monitoring of group metrics of an Auto Scaling group. By default, these metrics are disabled.","MinSize":"The minimum size of the group.","MixedInstancesPolicy":"An embedded object that specifies a mixed instances policy.\\n\\nThe policy includes properties that not only define the distribution of On-Demand Instances and Spot Instances, the maximum price to pay for Spot Instances (optional), and how the Auto Scaling group allocates instance types to fulfill On-Demand and Spot capacities, but also the properties that specify the instance configuration information—the launch template and instance types. The policy can also include a weight for each instance type and different launch templates for individual instance types.\\n\\nFor more information, see [Auto Scaling groups with multiple instance types and purchase options](https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-mixed-instances-groups.html) in the *Amazon EC2 Auto Scaling User Guide* .","NewInstancesProtectedFromScaleIn":"Indicates whether newly launched instances are protected from termination by Amazon EC2 Auto Scaling when scaling in. For more information about preventing instances from terminating on scale in, see [Using instance scale-in protection](https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-instance-protection.html) in the *Amazon EC2 Auto Scaling User Guide* .","NotificationConfigurations":"Configures an Auto Scaling group to send notifications when specified events take place.","PlacementGroup":"The name of the placement group into which to launch your instances. For more information, see [Placement groups](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/placement-groups.html) in the *Amazon EC2 User Guide for Linux Instances* .\\n\\n> A *cluster* placement group is a logical grouping of instances within a single Availability Zone. You cannot specify multiple Availability Zones and a cluster placement group.","ServiceLinkedRoleARN":"The Amazon Resource Name (ARN) of the service-linked role that the Auto Scaling group uses to call other AWS service on your behalf. By default, Amazon EC2 Auto Scaling uses a service-linked role named `AWSServiceRoleForAutoScaling` , which it creates if it does not exist. For more information, see [Service-linked roles](https://docs.aws.amazon.com/autoscaling/ec2/userguide/autoscaling-service-linked-role.html) in the *Amazon EC2 Auto Scaling User Guide* .","Tags":"One or more tags. You can tag your Auto Scaling group and propagate the tags to the Amazon EC2 instances it launches. Tags are not propagated to Amazon EBS volumes. To add tags to Amazon EBS volumes, specify the tags in a launch template but use caution. If the launch template specifies an instance tag with a key that is also specified for the Auto Scaling group, Amazon EC2 Auto Scaling overrides the value of that instance tag with the value specified by the Auto Scaling group. For more information, see [Tag Auto Scaling groups and instances](https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-tagging.html) in the *Amazon EC2 Auto Scaling User Guide* .","TargetGroupARNs":"The Amazon Resource Names (ARN) of the Elastic Load Balancing target groups to associate with the Auto Scaling group. Instances are registered as targets with the target groups. The target groups receive incoming traffic and route requests to one or more registered targets. For more information, see [Use Elastic Load Balancing to distribute traffic across the instances in your Auto Scaling group](https://docs.aws.amazon.com/autoscaling/ec2/userguide/autoscaling-load-balancer.html) in the *Amazon EC2 Auto Scaling User Guide* .","TerminationPolicies":"A policy or a list of policies that are used to select the instance to terminate. These policies are executed in the order that you list them. For more information, see [Work with Amazon EC2 Auto Scaling termination policies](https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-termination-policies.html) in the *Amazon EC2 Auto Scaling User Guide* .\\n\\nValid values: `Default` | `AllocationStrategy` | `ClosestToNextInstanceHour` | `NewestInstance` | `OldestInstance` | `OldestLaunchConfiguration` | `OldestLaunchTemplate` | `arn:aws:lambda:region:account-id:function:my-function:my-alias`","VPCZoneIdentifier":"A list of subnet IDs for a virtual private cloud (VPC) where instances in the Auto Scaling group can be created.\\n\\nIf this resource specifies public subnets and is also in a VPC that is defined in the same stack template, you must use the [DependsOn attribute](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-attribute-dependson.html) to declare a dependency on the [VPC-gateway attachment](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpc-gateway-attachment.html) .\\n\\n> When you update `VPCZoneIdentifier` , this retains the same Auto Scaling group and replaces old instances with new ones, according to the specified subnets. You can optionally specify how CloudFormation handles these updates by using an [UpdatePolicy attribute](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-attribute-updatepolicy.html) . \\n\\nRequired to launch instances into a nondefault VPC. If you specify `VPCZoneIdentifier` with `AvailabilityZones` , the subnets that you specify for this property must reside in those Availability Zones."}},"AWS::AutoScaling::AutoScalingGroup.AcceleratorCountRequest":{"attributes":{},"description":"`AcceleratorCountRequest` is a property of the `InstanceRequirements` property of the [AWS::AutoScaling::AutoScalingGroup LaunchTemplateOverrides](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-autoscaling-autoscalinggroup-launchtemplateoverrides.html) property type that describes the minimum and maximum number of accelerators for an instance type.","properties":{"Max":"The maximum value.","Min":"The minimum value."}},"AWS::AutoScaling::AutoScalingGroup.AcceleratorTotalMemoryMiBRequest":{"attributes":{},"description":"`AcceleratorTotalMemoryMiBRequest` is a property of the `InstanceRequirements` property of the [AWS::AutoScaling::AutoScalingGroup LaunchTemplateOverrides](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-autoscaling-autoscalinggroup-launchtemplateoverrides.html) property type that describes the minimum and maximum total memory size for the accelerators for an instance type, in MiB.","properties":{"Max":"The memory maximum in MiB.","Min":"The memory minimum in MiB."}},"AWS::AutoScaling::AutoScalingGroup.BaselineEbsBandwidthMbpsRequest":{"attributes":{},"description":"`BaselineEbsBandwidthMbpsRequest` is a property of the `InstanceRequirements` property of the [AWS::AutoScaling::AutoScalingGroup LaunchTemplateOverrides](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-autoscaling-autoscalinggroup-launchtemplateoverrides.html) property type that describes the minimum and maximum baseline bandwidth performance for an instance type, in Mbps.","properties":{"Max":"The maximum value in Mbps.","Min":"The minimum value in Mbps."}},"AWS::AutoScaling::AutoScalingGroup.InstanceRequirements":{"attributes":{},"description":"The attributes for the instance types for a mixed instances policy. Amazon EC2 Auto Scaling uses your specified requirements to identify instance types. Then, it uses your On-Demand and Spot allocation strategies to launch instances from these instance types.\\n\\nWhen you specify multiple attributes, you get instance types that satisfy all of the specified attributes. If you specify multiple values for an attribute, you get instance types that satisfy any of the specified values.\\n\\nTo limit the list of instance types from which Amazon EC2 Auto Scaling can identify matching instance types, you can use one of the following parameters, but not both in the same request:\\n\\n- `AllowedInstanceTypes` - The instance types to include in the list. All other instance types are ignored, even if they match your specified attributes.\\n- `ExcludedInstanceTypes` - The instance types to exclude from the list, even if they match your specified attributes.\\n\\n> You must specify `VCpuCount` and `MemoryMiB` . All other attributes are optional. Any unspecified optional attribute is set to its default. \\n\\nFor an example template, see [Auto scaling template snippets](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/quickref-autoscaling.html) .\\n\\nFor more information, see [Creating an Auto Scaling group using attribute-based instance type selection](https://docs.aws.amazon.com/autoscaling/ec2/userguide/create-asg-instance-type-requirements.html) in the *Amazon EC2 Auto Scaling User Guide* . For help determining which instance types match your attributes before you apply them to your Auto Scaling group, see [Preview instance types with specified attributes](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-fleet-attribute-based-instance-type-selection.html#ec2fleet-get-instance-types-from-instance-requirements) in the *Amazon EC2 User Guide for Linux Instances* .\\n\\n`InstanceRequirements` is a property of the `LaunchTemplateOverrides` property of the [AWS::AutoScaling::AutoScalingGroup LaunchTemplate](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-autoscaling-autoscalinggroup-launchtemplate.html) property type.","properties":{"AcceleratorCount":"The minimum and maximum number of accelerators (GPUs, FPGAs, or AWS Inferentia chips) for an instance type.\\n\\nTo exclude accelerator-enabled instance types, set `Max` to `0` .\\n\\nDefault: No minimum or maximum limits","AcceleratorManufacturers":"Indicates whether instance types must have accelerators by specific manufacturers.\\n\\n- For instance types with NVIDIA devices, specify `nvidia` .\\n- For instance types with AMD devices, specify `amd` .\\n- For instance types with AWS devices, specify `amazon-web-services` .\\n- For instance types with Xilinx devices, specify `xilinx` .\\n\\nDefault: Any manufacturer","AcceleratorNames":"Lists the accelerators that must be on an instance type.\\n\\n- For instance types with NVIDIA A100 GPUs, specify `a100` .\\n- For instance types with NVIDIA V100 GPUs, specify `v100` .\\n- For instance types with NVIDIA K80 GPUs, specify `k80` .\\n- For instance types with NVIDIA T4 GPUs, specify `t4` .\\n- For instance types with NVIDIA M60 GPUs, specify `m60` .\\n- For instance types with AMD Radeon Pro V520 GPUs, specify `radeon-pro-v520` .\\n- For instance types with Xilinx VU9P FPGAs, specify `vu9p` .\\n\\nDefault: Any accelerator","AcceleratorTotalMemoryMiB":"The minimum and maximum total memory size for the accelerators on an instance type, in MiB.\\n\\nDefault: No minimum or maximum limits","AcceleratorTypes":"Lists the accelerator types that must be on an instance type.\\n\\n- For instance types with GPU accelerators, specify `gpu` .\\n- For instance types with FPGA accelerators, specify `fpga` .\\n- For instance types with inference accelerators, specify `inference` .\\n\\nDefault: Any accelerator type","AllowedInstanceTypes":"The instance types to apply your specified attributes against. All other instance types are ignored, even if they match your specified attributes.\\n\\nYou can use strings with one or more wild cards, represented by an asterisk ( `*` ), to allow an instance type, size, or generation. The following are examples: `m5.8xlarge` , `c5*.*` , `m5a.*` , `r*` , `*3*` .\\n\\nFor example, if you specify `c5*` , Amazon EC2 Auto Scaling will allow the entire C5 instance family, which includes all C5a and C5n instance types. If you specify `m5a.*` , Amazon EC2 Auto Scaling will allow all the M5a instance types, but not the M5n instance types.\\n\\n> If you specify `AllowedInstanceTypes` , you can\'t specify `ExcludedInstanceTypes` . \\n\\nDefault: All instance types","BareMetal":"Indicates whether bare metal instance types are included, excluded, or required.\\n\\nDefault: `excluded`","BaselineEbsBandwidthMbps":"The minimum and maximum baseline bandwidth performance for an instance type, in Mbps. For more information, see [Amazon EBS–optimized instances](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-optimized.html) in the *Amazon EC2 User Guide for Linux Instances* .\\n\\nDefault: No minimum or maximum limits","BurstablePerformance":"Indicates whether burstable performance instance types are included, excluded, or required. For more information, see [Burstable performance instances](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/burstable-performance-instances.html) in the *Amazon EC2 User Guide for Linux Instances* .\\n\\nDefault: `excluded`","CpuManufacturers":"Lists which specific CPU manufacturers to include.\\n\\n- For instance types with Intel CPUs, specify `intel` .\\n- For instance types with AMD CPUs, specify `amd` .\\n- For instance types with AWS CPUs, specify `amazon-web-services` .\\n\\n> Don\'t confuse the CPU hardware manufacturer with the CPU hardware architecture. Instances will be launched with a compatible CPU architecture based on the Amazon Machine Image (AMI) that you specify in your launch template. \\n\\nDefault: Any manufacturer","ExcludedInstanceTypes":"The instance types to exclude. You can use strings with one or more wild cards, represented by an asterisk ( `*` ), to exclude an instance family, type, size, or generation. The following are examples: `m5.8xlarge` , `c5*.*` , `m5a.*` , `r*` , `*3*` .\\n\\nFor example, if you specify `c5*` , you are excluding the entire C5 instance family, which includes all C5a and C5n instance types. If you specify `m5a.*` , Amazon EC2 Auto Scaling will exclude all the M5a instance types, but not the M5n instance types.\\n\\n> If you specify `ExcludedInstanceTypes` , you can\'t specify `AllowedInstanceTypes` . \\n\\nDefault: No excluded instance types","InstanceGenerations":"Indicates whether current or previous generation instance types are included.\\n\\n- For current generation instance types, specify `current` . The current generation includes EC2 instance types currently recommended for use. This typically includes the latest two to three generations in each instance family. For more information, see [Instance types](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html) in the *Amazon EC2 User Guide for Linux Instances* .\\n- For previous generation instance types, specify `previous` .\\n\\nDefault: Any current or previous generation","LocalStorage":"Indicates whether instance types with instance store volumes are included, excluded, or required. For more information, see [Amazon EC2 instance store](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/InstanceStorage.html) in the *Amazon EC2 User Guide for Linux Instances* .\\n\\nDefault: `included`","LocalStorageTypes":"Indicates the type of local storage that is required.\\n\\n- For instance types with hard disk drive (HDD) storage, specify `hdd` .\\n- For instance types with solid state drive (SSD) storage, specify `ssd` .\\n\\nDefault: Any local storage type","MemoryGiBPerVCpu":"The minimum and maximum amount of memory per vCPU for an instance type, in GiB.\\n\\nDefault: No minimum or maximum limits","MemoryMiB":"The minimum and maximum instance memory size for an instance type, in MiB.","NetworkBandwidthGbps":"The minimum and maximum amount of network bandwidth, in gigabits per second (Gbps).\\n\\nDefault: No minimum or maximum limits","NetworkInterfaceCount":"The minimum and maximum number of network interfaces for an instance type.\\n\\nDefault: No minimum or maximum limits","OnDemandMaxPricePercentageOverLowestPrice":"The price protection threshold for On-Demand Instances. This is the maximum you’ll pay for an On-Demand Instance, expressed as a percentage higher than the least expensive current generation M, C, or R instance type with your specified attributes. When Amazon EC2 Auto Scaling selects instance types with your attributes, we will exclude instance types whose price is higher than your threshold. The parameter accepts an integer, which Amazon EC2 Auto Scaling interprets as a percentage. To turn off price protection, specify a high value, such as `999999` .\\n\\nIf you set `DesiredCapacityType` to `vcpu` or `memory-mib` , the price protection threshold is applied based on the per vCPU or per memory price instead of the per instance price.\\n\\nDefault: `20`","RequireHibernateSupport":"Indicates whether instance types must provide On-Demand Instance hibernation support.\\n\\nDefault: `false`","SpotMaxPricePercentageOverLowestPrice":"The price protection threshold for Spot Instances. This is the maximum you’ll pay for a Spot Instance, expressed as a percentage higher than the least expensive current generation M, C, or R instance type with your specified attributes. When Amazon EC2 Auto Scaling selects instance types with your attributes, we will exclude instance types whose price is higher than your threshold. The parameter accepts an integer, which Amazon EC2 Auto Scaling interprets as a percentage. To turn off price protection, specify a high value, such as `999999` .\\n\\nIf you set `DesiredCapacityType` to `vcpu` or `memory-mib` , the price protection threshold is applied based on the per vCPU or per memory price instead of the per instance price.\\n\\nDefault: `100`","TotalLocalStorageGB":"The minimum and maximum total local storage size for an instance type, in GB.\\n\\nDefault: No minimum or maximum limits","VCpuCount":"The minimum and maximum number of vCPUs for an instance type."}},"AWS::AutoScaling::AutoScalingGroup.InstancesDistribution":{"attributes":{},"description":"Use this structure to specify the distribution of On-Demand Instances and Spot Instances and the allocation strategies used to fulfill On-Demand and Spot capacities for a mixed instances policy.\\n\\nFor more information, see [Auto Scaling groups with multiple instance types and purchase options](https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-mixed-instances-groups.html) in the *Amazon EC2 Auto Scaling User Guide* .\\n\\n`InstancesDistribution` is a property of the [AWS::AutoScaling::AutoScalingGroup MixedInstancesPolicy](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-autoscaling-autoscalinggroup-mixedinstancespolicy.html) property type.","properties":{"OnDemandAllocationStrategy":"The allocation strategy to apply to your On-Demand Instances when they are launched. Possible instance types are determined by the launch template overrides that you specify.\\n\\nThe following lists the valid values:\\n\\n- **lowest-price** - Uses price to determine which instance types are the highest priority, launching the lowest priced instance types within an Availability Zone first. This is the default value for Auto Scaling groups that specify `InstanceRequirements` .\\n- **prioritized** - You set the order of instance types for the launch template overrides from highest to lowest priority (from first to last in the list). Amazon EC2 Auto Scaling launches your highest priority instance types first. If all your On-Demand capacity cannot be fulfilled using your highest priority instance type, then Amazon EC2 Auto Scaling launches the remaining capacity using the second priority instance type, and so on. This is the default value for Auto Scaling groups that don\'t specify `InstanceRequirements` and cannot be used for groups that do.","OnDemandBaseCapacity":"The minimum amount of the Auto Scaling group\'s capacity that must be fulfilled by On-Demand Instances. This base portion is launched first as your group scales.\\n\\nThis number has the same unit of measurement as the group\'s desired capacity. If you change the default unit of measurement (number of instances) by specifying weighted capacity values in your launch template overrides list, or by changing the default desired capacity type setting of the group, you must specify this number using the same unit of measurement.\\n\\nDefault: 0\\n\\n> An update to this setting means a gradual replacement of instances to adjust the current On-Demand Instance levels. When replacing instances, Amazon EC2 Auto Scaling launches new instances before terminating the previous ones.","OnDemandPercentageAboveBaseCapacity":"Controls the percentages of On-Demand Instances and Spot Instances for your additional capacity beyond `OnDemandBaseCapacity` . Expressed as a number (for example, 20 specifies 20% On-Demand Instances, 80% Spot Instances). If set to 100, only On-Demand Instances are used.\\n\\nDefault: 100\\n\\n> An update to this setting means a gradual replacement of instances to adjust the current On-Demand and Spot Instance levels for your additional capacity higher than the base capacity. When replacing instances, Amazon EC2 Auto Scaling launches new instances before terminating the previous ones.","SpotAllocationStrategy":"The allocation strategy to apply to your Spot Instances when they are launched. Possible instance types are determined by the launch template overrides that you specify.\\n\\nThe following lists the valid values:\\n\\n- **capacity-optimized** - Requests Spot Instances using pools that are optimally chosen based on the available Spot capacity. This strategy has the lowest risk of interruption. To give certain instance types a higher chance of launching first, use `capacity-optimized-prioritized` .\\n- **capacity-optimized-prioritized** - You set the order of instance types for the launch template overrides from highest to lowest priority (from first to last in the list). Amazon EC2 Auto Scaling honors the instance type priorities on a best effort basis but optimizes for capacity first. Note that if the On-Demand allocation strategy is set to `prioritized` , the same priority is applied when fulfilling On-Demand capacity. This is not a valid value for Auto Scaling groups that specify `InstanceRequirements` .\\n- **lowest-price** - Requests Spot Instances using the lowest priced pools within an Availability Zone, across the number of Spot pools that you specify for the `SpotInstancePools` property. To ensure that your desired capacity is met, you might receive Spot Instances from several pools. This is the default value, but it might lead to high interruption rates because this strategy only considers instance price and not available capacity.\\n- **price-capacity-optimized (recommended)** - The price and capacity optimized allocation strategy looks at both price and capacity to select the Spot Instance pools that are the least likely to be interrupted and have the lowest possible price.","SpotInstancePools":"The number of Spot Instance pools across which to allocate your Spot Instances. The Spot pools are determined from the different instance types in the overrides. Valid only when the `SpotAllocationStrategy` is `lowest-price` . Value must be in the range of 1–20.\\n\\nDefault: 2","SpotMaxPrice":"The maximum price per unit hour that you are willing to pay for a Spot Instance. If your maximum price is lower than the Spot price for the instance types that you selected, your Spot Instances are not launched. We do not recommend specifying a maximum price because it can lead to increased interruptions. When Spot Instances launch, you pay the current Spot price. To remove a maximum price that you previously set, include the property but specify an empty string (\\"\\") for the value.\\n\\n> If you specify a maximum price, your instances will be interrupted more frequently than if you do not specify one. \\n\\nValid Range: Minimum value of 0.001"}},"AWS::AutoScaling::AutoScalingGroup.LaunchTemplate":{"attributes":{},"description":"Use this structure to specify the launch templates and instance types (overrides) for a mixed instances policy.\\n\\n`LaunchTemplate` is a property of the [AWS::AutoScaling::AutoScalingGroup MixedInstancesPolicy](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-autoscaling-autoscalinggroup-mixedinstancespolicy.html) property type.","properties":{"LaunchTemplateSpecification":"The launch template.","Overrides":"Any properties that you specify override the same properties in the launch template."}},"AWS::AutoScaling::AutoScalingGroup.LaunchTemplateOverrides":{"attributes":{},"description":"Use this structure to let Amazon EC2 Auto Scaling do the following when the Auto Scaling group has a mixed instances policy:\\n\\n- Override the instance type that is specified in the launch template.\\n- Use multiple instance types.\\n\\nSpecify the instance types that you want, or define your instance requirements instead and let Amazon EC2 Auto Scaling provision the available instance types that meet your requirements. This can provide Amazon EC2 Auto Scaling with a larger selection of instance types to choose from when fulfilling Spot and On-Demand capacities. You can view which instance types are matched before you apply the instance requirements to your Auto Scaling group.\\n\\nAfter you define your instance requirements, you don\'t have to keep updating these settings to get new EC2 instance types automatically. Amazon EC2 Auto Scaling uses the instance requirements of the Auto Scaling group to determine whether a new EC2 instance type can be used.\\n\\n`LaunchTemplateOverrides` is a property of the [AWS::AutoScaling::AutoScalingGroup LaunchTemplate](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-autoscaling-autoscalinggroup-launchtemplate.html) property type.","properties":{"InstanceRequirements":"The instance requirements. Amazon EC2 Auto Scaling uses your specified requirements to identify instance types. Then, it uses your On-Demand and Spot allocation strategies to launch instances from these instance types.\\n\\nYou can specify up to four separate sets of instance requirements per Auto Scaling group. This is useful for provisioning instances from different Amazon Machine Images (AMIs) in the same Auto Scaling group. To do this, create the AMIs and create a new launch template for each AMI. Then, create a compatible set of instance requirements for each launch template.\\n\\n> If you specify `InstanceRequirements` , you can\'t specify `InstanceType` .","InstanceType":"The instance type, such as `m3.xlarge` . You must specify an instance type that is supported in your requested Region and Availability Zones. For more information, see [Instance types](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html) in the *Amazon Elastic Compute Cloud User Guide* .\\n\\nYou can specify up to 40 instance types per Auto Scaling group.","LaunchTemplateSpecification":"Provides a launch template for the specified instance type or set of instance requirements. For example, some instance types might require a launch template with a different AMI. If not provided, Amazon EC2 Auto Scaling uses the launch template that\'s specified in the `LaunchTemplate` definition. For more information, see [Specifying a different launch template for an instance type](https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-mixed-instances-groups-launch-template-overrides.html) in the *Amazon EC2 Auto Scaling User Guide* .\\n\\nYou can specify up to 20 launch templates per Auto Scaling group. The launch templates specified in the overrides and in the `LaunchTemplate` definition count towards this limit.","WeightedCapacity":"If you provide a list of instance types to use, you can specify the number of capacity units provided by each instance type in terms of virtual CPUs, memory, storage, throughput, or other relative performance characteristic. When a Spot or On-Demand Instance is launched, the capacity units count toward the desired capacity. Amazon EC2 Auto Scaling launches instances until the desired capacity is totally fulfilled, even if this results in an overage. For example, if there are two units remaining to fulfill capacity, and Amazon EC2 Auto Scaling can only launch an instance with a `WeightedCapacity` of five units, the instance is launched, and the desired capacity is exceeded by three units. For more information, see [Configure instance weighting for Amazon EC2 Auto Scaling](https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-mixed-instances-groups-instance-weighting.html) in the *Amazon EC2 Auto Scaling User Guide* . Value must be in the range of 1-999.\\n\\nIf you specify a value for `WeightedCapacity` for one instance type, you must specify a value for `WeightedCapacity` for all of them.\\n\\n> Every Auto Scaling group has three size parameters ( `DesiredCapacity` , `MaxSize` , and `MinSize` ). Usually, you set these sizes based on a specific number of instances. However, if you configure a mixed instances policy that defines weights for the instance types, you must specify these sizes with the same units that you use for weighting instances."}},"AWS::AutoScaling::AutoScalingGroup.LaunchTemplateSpecification":{"attributes":{},"description":"Specifies a launch template to use when provisioning EC2 instances for an Auto Scaling group.\\n\\nYou must specify the following:\\n\\n- The ID or the name of the launch template, but not both.\\n- The version of the launch template.\\n\\n`LaunchTemplateSpecification` is property of the [AWS::AutoScaling::AutoScalingGroup](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-group.html) resource. It is also a property of the [AWS::AutoScaling::AutoScalingGroup LaunchTemplate](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-autoscaling-autoscalinggroup-launchtemplate.html) and [AWS::AutoScaling::AutoScalingGroup LaunchTemplateOverrides](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-autoscaling-autoscalinggroup-launchtemplateoverrides.html) property types.\\n\\nFor information about creating a launch template, see [AWS::EC2::LaunchTemplate](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-launchtemplate.html) and [Create a launch template for an Auto Scaling group](https://docs.aws.amazon.com/autoscaling/ec2/userguide/create-launch-template.html) in the *Amazon EC2 Auto Scaling User Guide* .\\n\\nFor examples of launch templates, see [Auto scaling template snippets](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/quickref-autoscaling.html) and the [Examples](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-launchtemplate.html#aws-resource-ec2-launchtemplate--examples) section in the `AWS::EC2::LaunchTemplate` resource.","properties":{"LaunchTemplateId":"The ID of the launch template.\\n\\nYou must specify the `LaunchTemplateID` or the `LaunchTemplateName` , but not both.","LaunchTemplateName":"The name of the launch template.\\n\\nYou must specify the `LaunchTemplateName` or the `LaunchTemplateID` , but not both.","Version":"The version number of the launch template.\\n\\nSpecifying `$Latest` or `$Default` for the template version number is not supported. However, you can specify `LatestVersionNumber` or `DefaultVersionNumber` using the `Fn::GetAtt` intrinsic function. For more information, see [Fn::GetAtt](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-getatt.html) .\\n\\n> For an example of using the `Fn::GetAtt` function, see the [Examples](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-group.html#aws-properties-as-group--examples) section of the `AWS::AutoScaling::AutoScalingGroup` resource."}},"AWS::AutoScaling::AutoScalingGroup.LifecycleHookSpecification":{"attributes":{},"description":"`LifecycleHookSpecification` specifies a lifecycle hook for the `LifecycleHookSpecificationList` property of the [AWS::AutoScaling::AutoScalingGroup](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-group.html) resource. A lifecycle hook specifies actions to perform when Amazon EC2 Auto Scaling launches or terminates instances.\\n\\nFor more information, see [Amazon EC2 Auto Scaling lifecycle hooks](https://docs.aws.amazon.com/autoscaling/ec2/userguide/lifecycle-hooks.html) in the *Amazon EC2 Auto Scaling User Guide* . You can find a sample template snippet in the [Examples](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-as-lifecyclehook.html#aws-resource-as-lifecyclehook--examples) section of the `AWS::AutoScaling::LifecycleHook` resource.","properties":{"DefaultResult":"The action the Auto Scaling group takes when the lifecycle hook timeout elapses or if an unexpected failure occurs. The default value is `ABANDON` .\\n\\nValid values: `CONTINUE` | `ABANDON`","HeartbeatTimeout":"The maximum time, in seconds, that can elapse before the lifecycle hook times out. The range is from `30` to `7200` seconds. The default value is `3600` seconds (1 hour).","LifecycleHookName":"The name of the lifecycle hook.","LifecycleTransition":"The lifecycle transition. For Auto Scaling groups, there are two major lifecycle transitions.\\n\\n- To create a lifecycle hook for scale-out events, specify `autoscaling:EC2_INSTANCE_LAUNCHING` .\\n- To create a lifecycle hook for scale-in events, specify `autoscaling:EC2_INSTANCE_TERMINATING` .","NotificationMetadata":"Additional information that you want to include any time Amazon EC2 Auto Scaling sends a message to the notification target.","NotificationTargetARN":"The Amazon Resource Name (ARN) of the notification target that Amazon EC2 Auto Scaling sends notifications to when an instance is in a wait state for the lifecycle hook. You can specify an Amazon SNS topic or an Amazon SQS queue.","RoleARN":"The ARN of the IAM role that allows the Auto Scaling group to publish to the specified notification target. For information about creating this role, see [Configure a notification target for a lifecycle hook](https://docs.aws.amazon.com/autoscaling/ec2/userguide/prepare-for-lifecycle-notifications.html#lifecycle-hook-notification-target) in the *Amazon EC2 Auto Scaling User Guide* .\\n\\nValid only if the notification target is an Amazon SNS topic or an Amazon SQS queue."}},"AWS::AutoScaling::AutoScalingGroup.MemoryGiBPerVCpuRequest":{"attributes":{},"description":"`MemoryGiBPerVCpuRequest` is a property of the `InstanceRequirements` property of the [AWS::AutoScaling::AutoScalingGroup LaunchTemplateOverrides](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-autoscaling-autoscalinggroup-launchtemplateoverrides.html) property type that describes the minimum and maximum amount of memory per vCPU for an instance type, in GiB.","properties":{"Max":"The memory maximum in GiB.","Min":"The memory minimum in GiB."}},"AWS::AutoScaling::AutoScalingGroup.MemoryMiBRequest":{"attributes":{},"description":"`MemoryMiBRequest` is a property of the `InstanceRequirements` property of the [AWS::AutoScaling::AutoScalingGroup LaunchTemplateOverrides](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-autoscaling-autoscalinggroup-launchtemplateoverrides.html) property type that describes the minimum and maximum instance memory size for an instance type, in MiB.","properties":{"Max":"The memory maximum in MiB.","Min":"The memory minimum in MiB."}},"AWS::AutoScaling::AutoScalingGroup.MetricsCollection":{"attributes":{},"description":"`MetricsCollection` is a property of the [AWS::AutoScaling::AutoScalingGroup](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-group.html) resource that describes the group metrics that an Amazon EC2 Auto Scaling group sends to Amazon CloudWatch. These metrics describe the group rather than any of its instances.\\n\\nFor more information, see [Monitor CloudWatch metrics for your Auto Scaling groups and instances](https://docs.aws.amazon.com/autoscaling/ec2/userguide/as-instance-monitoring.html) in the *Amazon EC2 Auto Scaling User Guide* . You can find a sample template snippet in the [Examples](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-group.html#aws-properties-as-group--examples) section of the `AWS::AutoScaling::AutoScalingGroup` resource.","properties":{"Granularity":"The frequency at which Amazon EC2 Auto Scaling sends aggregated data to CloudWatch. The only valid value is `1Minute` .","Metrics":"Identifies the metrics to enable.\\n\\nYou can specify one or more of the following metrics:\\n\\n- `GroupMinSize`\\n- `GroupMaxSize`\\n- `GroupDesiredCapacity`\\n- `GroupInServiceInstances`\\n- `GroupPendingInstances`\\n- `GroupStandbyInstances`\\n- `GroupTerminatingInstances`\\n- `GroupTotalInstances`\\n- `GroupInServiceCapacity`\\n- `GroupPendingCapacity`\\n- `GroupStandbyCapacity`\\n- `GroupTerminatingCapacity`\\n- `GroupTotalCapacity`\\n- `WarmPoolDesiredCapacity`\\n- `WarmPoolWarmedCapacity`\\n- `WarmPoolPendingCapacity`\\n- `WarmPoolTerminatingCapacity`\\n- `WarmPoolTotalCapacity`\\n- `GroupAndWarmPoolDesiredCapacity`\\n- `GroupAndWarmPoolTotalCapacity`\\n\\nIf you specify `Granularity` and don\'t specify any metrics, all metrics are enabled.\\n\\nFor more information, see [Auto Scaling group metrics](https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-cloudwatch-monitoring.html#as-group-metrics) in the *Amazon EC2 Auto Scaling User Guide* ."}},"AWS::AutoScaling::AutoScalingGroup.MixedInstancesPolicy":{"attributes":{},"description":"Use this structure to launch multiple instance types and On-Demand Instances and Spot Instances within a single Auto Scaling group.\\n\\nA mixed instances policy contains information that Amazon EC2 Auto Scaling can use to launch instances and help optimize your costs. For more information, see [Auto Scaling groups with multiple instance types and purchase options](https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-mixed-instances-groups.html) in the *Amazon EC2 Auto Scaling User Guide* .\\n\\nYou can create a mixed instances policy for new and existing Auto Scaling groups. You must use a launch template to configure the policy. You cannot use a launch configuration.\\n\\nThere are key differences between Spot Instances and On-Demand Instances:\\n\\n- The price for Spot Instances varies based on demand\\n- Amazon EC2 can terminate an individual Spot Instance as the availability of, or price for, Spot Instances changes\\n\\nWhen a Spot Instance is terminated, Amazon EC2 Auto Scaling group attempts to launch a replacement instance to maintain the desired capacity for the group.\\n\\n`MixedInstancesPolicy` is a property of the [AWS::AutoScaling::AutoScalingGroup](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-group.html) resource.","properties":{"InstancesDistribution":"The instances distribution.","LaunchTemplate":"One or more launch templates and the instance types (overrides) that are used to launch EC2 instances to fulfill On-Demand and Spot capacities."}},"AWS::AutoScaling::AutoScalingGroup.NetworkBandwidthGbpsRequest":{"attributes":{},"description":"`NetworkBandwidthGbpsRequest` is a property of the `InstanceRequirements` property of the [AWS::AutoScaling::AutoScalingGroup LaunchTemplateOverrides](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-autoscaling-autoscalinggroup-launchtemplateoverrides.html) property type that describes the minimum and maximum network bandwidth for an instance type, in Gbps.\\n\\n> Setting the minimum bandwidth does not guarantee that your instance will achieve the minimum bandwidth. Amazon EC2 will identify instance types that support the specified minimum bandwidth, but the actual bandwidth of your instance might go below the specified minimum at times. For more information, see [Available instance bandwidth](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-network-bandwidth.html#available-instance-bandwidth) in the *Amazon EC2 User Guide for Linux Instances* .","properties":{"Max":"The maximum amount of network bandwidth, in gigabits per second (Gbps).","Min":"The minimum amount of network bandwidth, in gigabits per second (Gbps)."}},"AWS::AutoScaling::AutoScalingGroup.NetworkInterfaceCountRequest":{"attributes":{},"description":"`NetworkInterfaceCountRequest` is a property of the `InstanceRequirements` property of the [AWS::AutoScaling::AutoScalingGroup LaunchTemplateOverrides](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-autoscaling-autoscalinggroup-launchtemplateoverrides.html) property type that describes the minimum and maximum number of network interfaces for an instance type.","properties":{"Max":"The maximum number of network interfaces.","Min":"The minimum number of network interfaces."}},"AWS::AutoScaling::AutoScalingGroup.NotificationConfiguration":{"attributes":{},"description":"A structure that specifies an Amazon SNS notification configuration for the `NotificationConfigurations` property of the [AWS::AutoScaling::AutoScalingGroup](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-group.html) resource.\\n\\nFor an example template snippet, see [Auto scaling template snippets](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/quickref-autoscaling.html) .\\n\\nFor more information, see [Get Amazon SNS notifications when your Auto Scaling group scales](https://docs.aws.amazon.com/autoscaling/ec2/userguide/ASGettingNotifications.html) in the *Amazon EC2 Auto Scaling User Guide* .","properties":{"NotificationTypes":"A list of event types that send a notification. Event types can include any of the following types.\\n\\n*Allowed values* :\\n\\n- `autoscaling:EC2_INSTANCE_LAUNCH`\\n- `autoscaling:EC2_INSTANCE_LAUNCH_ERROR`\\n- `autoscaling:EC2_INSTANCE_TERMINATE`\\n- `autoscaling:EC2_INSTANCE_TERMINATE_ERROR`\\n- `autoscaling:TEST_NOTIFICATION`","TopicARN":"The Amazon Resource Name (ARN) of the Amazon SNS topic."}},"AWS::AutoScaling::AutoScalingGroup.TagProperty":{"attributes":{},"description":"A structure that specifies a tag for the `Tags` property of [AWS::AutoScaling::AutoScalingGroup](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-group.html) resource.\\n\\nFor more information, see [Tag Auto Scaling groups and instances](https://docs.aws.amazon.com/autoscaling/ec2/userguide/autoscaling-tagging.html) in the *Amazon EC2 Auto Scaling User Guide* . You can find a sample template snippet in the [Examples](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-group.html#aws-properties-as-group--examples) section of the `AWS::AutoScaling::AutoScalingGroup` resource.\\n\\nCloudFormation adds the following tags to all Auto Scaling groups and associated instances:\\n\\n- aws:cloudformation:stack-name\\n- aws:cloudformation:stack-id\\n- aws:cloudformation:logical-id","properties":{"Key":"The tag key.","PropagateAtLaunch":"Set to `true` if you want CloudFormation to copy the tag to EC2 instances that are launched as part of the Auto Scaling group. Set to `false` if you want the tag attached only to the Auto Scaling group and not copied to any instances launched as part of the Auto Scaling group.","Value":"The tag value."}},"AWS::AutoScaling::AutoScalingGroup.TotalLocalStorageGBRequest":{"attributes":{},"description":"`TotalLocalStorageGBRequest` is a property of the `InstanceRequirements` property of the [AWS::AutoScaling::AutoScalingGroup LaunchTemplateOverrides](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-autoscaling-autoscalinggroup-launchtemplateoverrides.html) property type that describes the minimum and maximum total local storage size for an instance type, in GB.","properties":{"Max":"The storage maximum in GB.","Min":"The storage minimum in GB."}},"AWS::AutoScaling::AutoScalingGroup.VCpuCountRequest":{"attributes":{},"description":"`VCpuCountRequest` is a property of the `InstanceRequirements` property of the [AWS::AutoScaling::AutoScalingGroup LaunchTemplateOverrides](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-autoscaling-autoscalinggroup-launchtemplateoverrides.html) property type that describes the minimum and maximum number of vCPUs for an instance type.","properties":{"Max":"The maximum number of vCPUs.","Min":"The minimum number of vCPUs."}},"AWS::AutoScaling::LaunchConfiguration":{"attributes":{"Ref":"When the logical ID of this resource is provided to the `Ref` intrinsic function, `Ref` returns the resource name. For example: `mystack-mylaunchconfig-1DDYF1E3B3I` .\\n\\nFor more information about using the `Ref` function, see [Ref](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-ref.html) ."},"description":"The `AWS::AutoScaling::LaunchConfiguration` resource specifies the launch configuration that can be used by an Auto Scaling group to configure Amazon EC2 instances.\\n\\nWhen you update the launch configuration for an Auto Scaling group, CloudFormation deletes that resource and creates a new launch configuration with the updated properties and a new name. Existing instances are not affected. To update existing instances when you update the `AWS::AutoScaling::LaunchConfiguration` resource, you can specify an [UpdatePolicy attribute](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-attribute-updatepolicy.html) for the group. You can find sample update policies for rolling updates in [Auto scaling template snippets](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/quickref-autoscaling.html) .\\n\\n> Amazon EC2 Auto Scaling configures instances launched as part of an Auto Scaling group using either a [launch template](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-launchtemplate.html) or a launch configuration. We strongly recommend that you do not use launch configurations. They do not provide full functionality for Amazon EC2 Auto Scaling or Amazon EC2. For more information, see [Launch configurations](https://docs.aws.amazon.com/autoscaling/ec2/userguide/launch-configurations.html) and [Migrate AWS CloudFormation stacks from launch configurations to launch templates](https://docs.aws.amazon.com/autoscaling/ec2/userguide/migrate-launch-configurations-with-cloudformation.html) in the *Amazon EC2 Auto Scaling User Guide* .","properties":{"AssociatePublicIpAddress":"Specifies whether to assign a public IPv4 address to the group\'s instances. If the instance is launched into a default subnet, the default is to assign a public IPv4 address, unless you disabled the option to assign a public IPv4 address on the subnet. If the instance is launched into a nondefault subnet, the default is not to assign a public IPv4 address, unless you enabled the option to assign a public IPv4 address on the subnet.\\n\\nIf you specify `true` , each instance in the Auto Scaling group receives a unique public IPv4 address. For more information, see [Launching Auto Scaling instances in a VPC](https://docs.aws.amazon.com/autoscaling/ec2/userguide/asg-in-vpc.html) in the *Amazon EC2 Auto Scaling User Guide* .\\n\\nIf you specify this property, you must specify at least one subnet for `VPCZoneIdentifier` when you create your group.","BlockDeviceMappings":"The block device mapping entries that define the block devices to attach to the instances at launch. By default, the block devices specified in the block device mapping for the AMI are used. For more information, see [Block device mappings](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/block-device-mapping-concepts.html) in the *Amazon EC2 User Guide for Linux Instances* .","ClassicLinkVPCId":"Available for backward compatibility.","ClassicLinkVPCSecurityGroups":"Available for backward compatibility.","EbsOptimized":"Specifies whether the launch configuration is optimized for EBS I/O ( `true` ) or not ( `false` ). The optimization provides dedicated throughput to Amazon EBS and an optimized configuration stack to provide optimal I/O performance. This optimization is not available with all instance types. Additional fees are incurred when you enable EBS optimization for an instance type that is not EBS-optimized by default. For more information, see [Amazon EBS-optimized instances](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSOptimized.html) in the *Amazon EC2 User Guide for Linux Instances* .\\n\\nThe default value is `false` .","IamInstanceProfile":"The name or the Amazon Resource Name (ARN) of the instance profile associated with the IAM role for the instance. The instance profile contains the IAM role. For more information, see [IAM role for applications that run on Amazon EC2 instances](https://docs.aws.amazon.com/autoscaling/ec2/userguide/us-iam-role.html) in the *Amazon EC2 Auto Scaling User Guide* .","ImageId":"The ID of the Amazon Machine Image (AMI) that was assigned during registration. For more information, see [Finding a Linux AMI](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/finding-an-ami.html) in the *Amazon EC2 User Guide for Linux Instances* .\\n\\nIf you specify `InstanceId` , an `ImageId` is not required.","InstanceId":"The ID of the Amazon EC2 instance to use to create the launch configuration. When you use an instance to create a launch configuration, all properties are derived from the instance with the exception of `BlockDeviceMapping` and `AssociatePublicIpAddress` . You can override any properties from the instance by specifying them in the launch configuration.","InstanceMonitoring":"Controls whether instances in this group are launched with detailed ( `true` ) or basic ( `false` ) monitoring.\\n\\nThe default value is `true` (enabled).\\n\\n> When detailed monitoring is enabled, Amazon CloudWatch generates metrics every minute and your account is charged a fee. When you disable detailed monitoring, CloudWatch generates metrics every 5 minutes. For more information, see [Configure Monitoring for Auto Scaling Instances](https://docs.aws.amazon.com/autoscaling/latest/userguide/enable-as-instance-metrics.html) in the *Amazon EC2 Auto Scaling User Guide* .","InstanceType":"Specifies the instance type of the EC2 instance. For information about available instance types, see [Available instance types](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html#AvailableInstanceTypes) in the *Amazon EC2 User Guide for Linux Instances* .\\n\\nIf you specify `InstanceId` , an `InstanceType` is not required.","KernelId":"The ID of the kernel associated with the AMI.\\n\\n> We recommend that you use PV-GRUB instead of kernels and RAM disks. For more information, see [User provided kernels](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/UserProvidedKernels.html) in the *Amazon EC2 User Guide for Linux Instances* .","KeyName":"The name of the key pair. For more information, see [Amazon EC2 key pairs and Linux instances](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html) in the *Amazon EC2 User Guide for Linux Instances* .","LaunchConfigurationName":"The name of the launch configuration. This name must be unique per Region per account.","MetadataOptions":"The metadata options for the instances. For more information, see [Configuring the Instance Metadata Options](https://docs.aws.amazon.com/autoscaling/ec2/userguide/create-launch-config.html#launch-configurations-imds) in the *Amazon EC2 Auto Scaling User Guide* .","PlacementTenancy":"The tenancy of the instance, either `default` or `dedicated` . An instance with `dedicated` tenancy runs on isolated, single-tenant hardware and can only be launched into a VPC. To launch dedicated instances into a shared tenancy VPC (a VPC with the instance placement tenancy attribute set to `default` ), you must set the value of this property to `dedicated` . For more information, see [Configuring instance tenancy with Amazon EC2 Auto Scaling](https://docs.aws.amazon.com/autoscaling/ec2/userguide/auto-scaling-dedicated-instances.html) in the *Amazon EC2 Auto Scaling User Guide* .\\n\\nIf you specify `PlacementTenancy` , you must specify at least one subnet for `VPCZoneIdentifier` when you create your group.\\n\\nValid values: `default` | `dedicated`","RamDiskId":"The ID of the RAM disk to select.\\n\\n> We recommend that you use PV-GRUB instead of kernels and RAM disks. For more information, see [User provided kernels](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/UserProvidedKernels.html) in the *Amazon EC2 User Guide for Linux Instances* .","SecurityGroups":"A list that contains the security groups to assign to the instances in the Auto Scaling group. The list can contain both the IDs of existing security groups and references to [SecurityGroup](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-security-group.html) resources created in the template.\\n\\nFor more information, see [Control traffic to resources using security groups](https://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_SecurityGroups.html) in the *Amazon Virtual Private Cloud User Guide* .","SpotPrice":"The maximum hourly price to be paid for any Spot Instance launched to fulfill the request. Spot Instances are launched when the price you specify exceeds the current Spot price. For more information, see [Request Spot Instances for fault-tolerant and flexible applications](https://docs.aws.amazon.com/autoscaling/ec2/userguide/launch-template-spot-instances.html) in the *Amazon EC2 Auto Scaling User Guide* .\\n\\nValid Range: Minimum value of 0.001\\n\\n> When you change your maximum price by creating a new launch configuration, running instances will continue to run as long as the maximum price for those running instances is higher than the current Spot price.","UserData":"The Base64-encoded user data to make available to the launched EC2 instances. For more information, see [Instance metadata and user data](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html) in the *Amazon EC2 User Guide for Linux Instances* ."}},"AWS::AutoScaling::LaunchConfiguration.BlockDevice":{"attributes":{},"description":"`BlockDevice` is a property of the `EBS` property of the [AWS::AutoScaling::LaunchConfiguration BlockDeviceMapping](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-launchconfig-blockdev-mapping.html) property type that describes an Amazon EBS volume.","properties":{"DeleteOnTermination":"Indicates whether the volume is deleted on instance termination. For Amazon EC2 Auto Scaling, the default value is `true` .","Encrypted":"Specifies whether the volume should be encrypted. Encrypted EBS volumes can only be attached to instances that support Amazon EBS encryption. For more information, see [Supported instance types](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html#EBSEncryption_supported_instances) . If your AMI uses encrypted volumes, you can also only launch it on supported instance types.\\n\\n> If you are creating a volume from a snapshot, you cannot create an unencrypted volume from an encrypted snapshot. Also, you cannot specify a KMS key ID when using a launch configuration.\\n> \\n> If you enable encryption by default, the EBS volumes that you create are always encrypted, either using the AWS managed KMS key or a customer-managed KMS key, regardless of whether the snapshot was encrypted.\\n> \\n> For more information, see [Use AWS KMS keys to encrypt Amazon EBS volumes](https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-data-protection.html#encryption) in the *Amazon EC2 Auto Scaling User Guide* .","Iops":"The number of input/output (I/O) operations per second (IOPS) to provision for the volume. For `gp3` and `io1` volumes, this represents the number of IOPS that are provisioned for the volume. For `gp2` volumes, this represents the baseline performance of the volume and the rate at which the volume accumulates I/O credits for bursting.\\n\\nThe following are the supported values for each volume type:\\n\\n- `gp3` : 3,000-16,000 IOPS\\n- `io1` : 100-64,000 IOPS\\n\\nFor `io1` volumes, we guarantee 64,000 IOPS only for [Instances built on the Nitro System](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html#ec2-nitro-instances) . Other instance families guarantee performance up to 32,000 IOPS.\\n\\n`Iops` is supported when the volume type is `gp3` or `io1` and required only when the volume type is `io1` . (Not used with `standard` , `gp2` , `st1` , or `sc1` volumes.)","SnapshotId":"The snapshot ID of the volume to use.\\n\\nYou must specify either a `VolumeSize` or a `SnapshotId` .","Throughput":"The throughput (MiBps) to provision for a `gp3` volume.","VolumeSize":"The volume size, in GiBs. The following are the supported volumes sizes for each volume type:\\n\\n- `gp2` and `gp3` : 1-16,384\\n- `io1` : 4-16,384\\n- `st1` and `sc1` : 125-16,384\\n- `standard` : 1-1,024\\n\\nYou must specify either a `SnapshotId` or a `VolumeSize` . If you specify both `SnapshotId` and `VolumeSize` , the volume size must be equal or greater than the size of the snapshot.","VolumeType":"The volume type. For more information, see [Amazon EBS volume types](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumeTypes.html) in the *Amazon EC2 User Guide for Linux Instances* .\\n\\nValid values: `standard` | `io1` | `gp2` | `st1` | `sc1` | `gp3`"}},"AWS::AutoScaling::LaunchConfiguration.BlockDeviceMapping":{"attributes":{},"description":"`BlockDeviceMapping` specifies a block device mapping for the `BlockDeviceMappings` property of the [AWS::AutoScaling::LaunchConfiguration](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-launchconfig.html) resource.\\n\\nEach instance that is launched has an associated root device volume, either an Amazon EBS volume or an instance store volume. You can use block device mappings to specify additional EBS volumes or instance store volumes to attach to an instance when it is launched.\\n\\nFor more information, see [Example block device mapping](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/block-device-mapping-concepts.html#block-device-mapping-ex) in the *Amazon EC2 User Guide for Linux Instances* .","properties":{"DeviceName":"The device name assigned to the volume (for example, `/dev/sdh` or `xvdh` ). For more information, see [Device naming on Linux instances](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/device_naming.html) in the *Amazon EC2 User Guide for Linux Instances* .\\n\\n> To define a block device mapping, set the device name and exactly one of the following properties: `Ebs` , `NoDevice` , or `VirtualName` .","Ebs":"Information to attach an EBS volume to an instance at launch.","NoDevice":"Setting this value to `true` prevents a volume that is included in the block device mapping of the AMI from being mapped to the specified device name at launch.\\n\\nIf `NoDevice` is `true` for the root device, instances might fail the EC2 health check. In that case, Amazon EC2 Auto Scaling launches replacement instances.","VirtualName":"The name of the instance store volume (virtual device) to attach to an instance at launch. The name must be in the form ephemeral *X* where *X* is a number starting from zero (0), for example, `ephemeral0` ."}},"AWS::AutoScaling::LaunchConfiguration.MetadataOptions":{"attributes":{},"description":"`MetadataOptions` is a property of [AWS::AutoScaling::LaunchConfiguration](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-launchconfig.html) that describes metadata options for the instances.\\n\\nFor more information, see [Configure the instance metadata options](https://docs.aws.amazon.com/autoscaling/ec2/userguide/create-launch-config.html#launch-configurations-imds) in the *Amazon EC2 Auto Scaling User Guide* .","properties":{"HttpEndpoint":"This parameter enables or disables the HTTP metadata endpoint on your instances. If the parameter is not specified, the default state is `enabled` .\\n\\n> If you specify a value of `disabled` , you will not be able to access your instance metadata.","HttpPutResponseHopLimit":"The desired HTTP PUT response hop limit for instance metadata requests. The larger the number, the further instance metadata requests can travel.\\n\\nDefault: 1","HttpTokens":"The state of token usage for your instance metadata requests. If the parameter is not specified in the request, the default state is `optional` .\\n\\nIf the state is `optional` , you can choose to retrieve instance metadata with or without a signed token header on your request. If you retrieve the IAM role credentials without a token, the version 1.0 role credentials are returned. If you retrieve the IAM role credentials using a valid signed token, the version 2.0 role credentials are returned.\\n\\nIf the state is `required` , you must send a signed token header with any instance metadata retrieval requests. In this state, retrieving the IAM role credentials always returns the version 2.0 credentials; the version 1.0 credentials are not available."}},"AWS::AutoScaling::LifecycleHook":{"attributes":{"Ref":"When the logical ID of this resource is provided to the `Ref` intrinsic function, `Ref` returns the resource name. For example: `mylifecyclehook` .\\n\\nFor more information about using the `Ref` function, see [Ref](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-ref.html) ."},"description":"The `AWS::AutoScaling::LifecycleHook` resource specifies lifecycle hooks for an Auto Scaling group. These hooks let you create solutions that are aware of events in the Auto Scaling instance lifecycle, and then perform a custom action on instances when the corresponding lifecycle event occurs. A lifecycle hook provides a specified amount of time (one hour by default) to wait for the action to complete before the instance transitions to the next state.\\n\\nUse lifecycle hooks to prepare new instances for use or to delay them from being registered behind a load balancer before their configuration has been applied completely. You can also use lifecycle hooks to prepare running instances to be terminated by, for example, downloading logs or other data.\\n\\nFor more information, see [Amazon EC2 Auto Scaling lifecycle hooks](https://docs.aws.amazon.com/autoscaling/ec2/userguide/lifecycle-hooks.html) in the *Amazon EC2 Auto Scaling User Guide* .","properties":{"AutoScalingGroupName":"The name of the Auto Scaling group.","DefaultResult":"The action the Auto Scaling group takes when the lifecycle hook timeout elapses or if an unexpected failure occurs. The default value is `ABANDON` .\\n\\nValid values: `CONTINUE` | `ABANDON`","HeartbeatTimeout":"The maximum time, in seconds, that can elapse before the lifecycle hook times out. The range is from `30` to `7200` seconds. The default value is `3600` seconds (1 hour).","LifecycleHookName":"The name of the lifecycle hook.","LifecycleTransition":"The lifecycle transition. For Auto Scaling groups, there are two major lifecycle transitions.\\n\\n- To create a lifecycle hook for scale-out events, specify `autoscaling:EC2_INSTANCE_LAUNCHING` .\\n- To create a lifecycle hook for scale-in events, specify `autoscaling:EC2_INSTANCE_TERMINATING` .","NotificationMetadata":"Additional information that you want to include any time Amazon EC2 Auto Scaling sends a message to the notification target.","NotificationTargetARN":"The Amazon Resource Name (ARN) of the notification target that Amazon EC2 Auto Scaling sends notifications to when an instance is in a wait state for the lifecycle hook. You can specify an Amazon SNS topic or an Amazon SQS queue.","RoleARN":"The ARN of the IAM role that allows the Auto Scaling group to publish to the specified notification target. For information about creating this role, see [Configure a notification target for a lifecycle hook](https://docs.aws.amazon.com/autoscaling/ec2/userguide/prepare-for-lifecycle-notifications.html#lifecycle-hook-notification-target) in the *Amazon EC2 Auto Scaling User Guide* .\\n\\nValid only if the notification target is an Amazon SNS topic or an Amazon SQS queue."}},"AWS::AutoScaling::ScalingPolicy":{"attributes":{"Arn":"","PolicyName":"Returns the name of a scaling policy.","Ref":"When you specify an `AWS::AutoScaling::ScalingPolicy` type as an argument to the `Ref` function, CloudFormation returns the policy Amazon Resource Name (ARN). For example: `arn:aws:autoscaling:us-east-2:123456789012:scalingPolicy:ab12c4d5-a1b2-a1b2-a1b2-ab12c4d56789:autoScalingGroupName/myStack-AutoScalingGroup-AB12C4D5E6:policyName/myStack-myScalingPolicy-AB12C4D5E6` .\\n\\nFor more information about using the `Ref` function, see [Ref](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-ref.html) ."},"description":"The `AWS::AutoScaling::ScalingPolicy` resource specifies an Amazon EC2 Auto Scaling scaling policy so that the Auto Scaling group can scale the number of instances available for your application.\\n\\nFor more information about using scaling policies to scale your Auto Scaling group automatically, see [Dynamic scaling](https://docs.aws.amazon.com/autoscaling/ec2/userguide/as-scale-based-on-demand.html) and [Predictive scaling](https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-predictive-scaling.html) in the *Amazon EC2 Auto Scaling User Guide* .","properties":{"AdjustmentType":"Specifies how the scaling adjustment is interpreted (for example, an absolute number or a percentage). The valid values are `ChangeInCapacity` , `ExactCapacity` , and `PercentChangeInCapacity` .\\n\\nRequired if the policy type is `StepScaling` or `SimpleScaling` . For more information, see [Scaling adjustment types](https://docs.aws.amazon.com/autoscaling/ec2/userguide/as-scaling-simple-step.html#as-scaling-adjustment) in the *Amazon EC2 Auto Scaling User Guide* .","AutoScalingGroupName":"The name of the Auto Scaling group.","Cooldown":"A cooldown period, in seconds, that applies to a specific simple scaling policy. When a cooldown period is specified here, it overrides the default cooldown.\\n\\nValid only if the policy type is `SimpleScaling` . For more information, see [Scaling cooldowns for Amazon EC2 Auto Scaling](https://docs.aws.amazon.com/autoscaling/ec2/userguide/Cooldown.html) in the *Amazon EC2 Auto Scaling User Guide* .\\n\\nDefault: None","EstimatedInstanceWarmup":"*Not needed if the default instance warmup is defined for the group.*\\n\\nThe estimated time, in seconds, until a newly launched instance can contribute to the CloudWatch metrics. This warm-up period applies to instances launched due to a specific target tracking or step scaling policy. When a warm-up period is specified here, it overrides the default instance warmup.\\n\\nValid only if the policy type is `TargetTrackingScaling` or `StepScaling` .\\n\\n> The default is to use the value for the default instance warmup defined for the group. If default instance warmup is null, then `EstimatedInstanceWarmup` falls back to the value of default cooldown.","MetricAggregationType":"The aggregation type for the CloudWatch metrics. The valid values are `Minimum` , `Maximum` , and `Average` . If the aggregation type is null, the value is treated as `Average` .\\n\\nValid only if the policy type is `StepScaling` .","MinAdjustmentMagnitude":"The minimum value to scale by when the adjustment type is `PercentChangeInCapacity` . For example, suppose that you create a step scaling policy to scale out an Auto Scaling group by 25 percent and you specify a `MinAdjustmentMagnitude` of 2. If the group has 4 instances and the scaling policy is performed, 25 percent of 4 is 1. However, because you specified a `MinAdjustmentMagnitude` of 2, Amazon EC2 Auto Scaling scales out the group by 2 instances.\\n\\nValid only if the policy type is `StepScaling` or `SimpleScaling` . For more information, see [Scaling adjustment types](https://docs.aws.amazon.com/autoscaling/ec2/userguide/as-scaling-simple-step.html#as-scaling-adjustment) in the *Amazon EC2 Auto Scaling User Guide* .\\n\\n> Some Auto Scaling groups use instance weights. In this case, set the `MinAdjustmentMagnitude` to a value that is at least as large as your largest instance weight.","PolicyType":"One of the following policy types:\\n\\n- `TargetTrackingScaling`\\n- `StepScaling`\\n- `SimpleScaling` (default)\\n- `PredictiveScaling`","PredictiveScalingConfiguration":"A predictive scaling policy. Provides support for predefined and custom metrics.\\n\\nPredefined metrics include CPU utilization, network in/out, and the Application Load Balancer request count.\\n\\nRequired if the policy type is `PredictiveScaling` .","ScalingAdjustment":"The amount by which to scale, based on the specified adjustment type. A positive value adds to the current capacity while a negative number removes from the current capacity. For exact capacity, you must specify a non-negative value.\\n\\nRequired if the policy type is `SimpleScaling` . (Not used with any other policy type.)","StepAdjustments":"A set of adjustments that enable you to scale based on the size of the alarm breach.\\n\\nRequired if the policy type is `StepScaling` . (Not used with any other policy type.)","TargetTrackingConfiguration":"A target tracking scaling policy. Provides support for predefined or custom metrics.\\n\\nThe following predefined metrics are available:\\n\\n- `ASGAverageCPUUtilization`\\n- `ASGAverageNetworkIn`\\n- `ASGAverageNetworkOut`\\n- `ALBRequestCountPerTarget`\\n\\nIf you specify `ALBRequestCountPerTarget` for the metric, you must specify the `ResourceLabel` property with the `PredefinedMetricSpecification` .\\n\\nRequired if the policy type is `TargetTrackingScaling` ."}},"AWS::AutoScaling::ScalingPolicy.CustomizedMetricSpecification":{"attributes":{},"description":"Contains customized metric specification information for a target tracking scaling policy for Amazon EC2 Auto Scaling.\\n\\nTo create your customized metric specification:\\n\\n- Add values for each required property from CloudWatch. You can use an existing metric, or a new metric that you create. To use your own metric, you must first publish the metric to CloudWatch. For more information, see [Publish Custom Metrics](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/publishingMetrics.html) in the *Amazon CloudWatch User Guide* .\\n- Choose a metric that changes proportionally with capacity. The value of the metric should increase or decrease in inverse proportion to the number of capacity units. That is, the value of the metric should decrease when capacity increases.\\n\\nFor more information about CloudWatch, see [Amazon CloudWatch Concepts](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch_concepts.html) .\\n\\n`CustomizedMetricSpecification` is a property of the [AWS::AutoScaling::ScalingPolicy TargetTrackingConfiguration](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-autoscaling-scalingpolicy-targettrackingconfiguration.html) property type.","properties":{"Dimensions":"The dimensions of the metric.\\n\\nConditional: If you published your metric with dimensions, you must specify the same dimensions in your scaling policy.","MetricName":"The name of the metric. To get the exact metric name, namespace, and dimensions, inspect the [Metric](https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_Metric.html) object that is returned by a call to [ListMetrics](https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_ListMetrics.html) .","Namespace":"The namespace of the metric.","Statistic":"The statistic of the metric.","Unit":"The unit of the metric. For a complete list of the units that CloudWatch supports, see the [MetricDatum](https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_MetricDatum.html) data type in the *Amazon CloudWatch API Reference* ."}},"AWS::AutoScaling::ScalingPolicy.Metric":{"attributes":{},"description":"Represents a specific metric.\\n\\n`Metric` is a property of the [AWS::AutoScaling::ScalingPolicy MetricStat](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-autoscaling-scalingpolicy-metricstat.html) property type.","properties":{"Dimensions":"The dimensions for the metric. For the list of available dimensions, see the AWS documentation available from the table in [AWS services that publish CloudWatch metrics](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/aws-services-cloudwatch-metrics.html) in the *Amazon CloudWatch User Guide* .\\n\\nConditional: If you published your metric with dimensions, you must specify the same dimensions in your scaling policy.","MetricName":"The name of the metric.","Namespace":"The namespace of the metric. For more information, see the table in [AWS services that publish CloudWatch metrics](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/aws-services-cloudwatch-metrics.html) in the *Amazon CloudWatch User Guide* ."}},"AWS::AutoScaling::ScalingPolicy.MetricDataQuery":{"attributes":{},"description":"The metric data to return. Also defines whether this call is returning data for one metric only, or whether it is performing a math expression on the values of returned metric statistics to create a new time series. A time series is a series of data points, each of which is associated with a timestamp.\\n\\n`MetricDataQuery` is a property of the following property types:\\n\\n- [AWS::AutoScaling::ScalingPolicy PredictiveScalingCustomizedScalingMetric](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-autoscaling-scalingpolicy-predictivescalingcustomizedscalingmetric.html)\\n- [AWS::AutoScaling::ScalingPolicy PredictiveScalingCustomizedLoadMetric](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-autoscaling-scalingpolicy-predictivescalingcustomizedloadmetric.html)\\n- [AWS::AutoScaling::ScalingPolicy PredictiveScalingCustomizedCapacityMetric](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-autoscaling-scalingpolicy-predictivescalingcustomizedcapacitymetric.html)\\n\\nPredictive scaling uses the time series data received from CloudWatch to understand how to schedule capacity based on your historical workload patterns.\\n\\nYou can call for a single metric or perform math expressions on multiple metrics. Any expressions used in a metric specification must eventually return a single time series.\\n\\nFor more information and examples, see [Advanced predictive scaling policy configurations using custom metrics](https://docs.aws.amazon.com/autoscaling/ec2/userguide/predictive-scaling-customized-metric-specification.html) in the *Amazon EC2 Auto Scaling User Guide* .","properties":{"Expression":"The math expression to perform on the returned data, if this object is performing a math expression. This expression can use the `Id` of the other metrics to refer to those metrics, and can also use the `Id` of other expressions to use the result of those expressions.\\n\\nConditional: Within each `MetricDataQuery` object, you must specify either `Expression` or `MetricStat` , but not both.","Id":"A short name that identifies the object\'s results in the response. This name must be unique among all `MetricDataQuery` objects specified for a single scaling policy. If you are performing math expressions on this set of data, this name represents that data and can serve as a variable in the mathematical expression. The valid characters are letters, numbers, and underscores. The first character must be a lowercase letter.","Label":"A human-readable label for this metric or expression. This is especially useful if this is a math expression, so that you know what the value represents.","MetricStat":"Information about the metric data to return.\\n\\nConditional: Within each `MetricDataQuery` object, you must specify either `Expression` or `MetricStat` , but not both.","ReturnData":"Indicates whether to return the timestamps and raw data values of this metric.\\n\\nIf you use any math expressions, specify `true` for this value for only the final math expression that the metric specification is based on. You must specify `false` for `ReturnData` for all the other metrics and expressions used in the metric specification.\\n\\nIf you are only retrieving metrics and not performing any math expressions, do not specify anything for `ReturnData` . This sets it to its default ( `true` )."}},"AWS::AutoScaling::ScalingPolicy.MetricDimension":{"attributes":{},"description":"`MetricDimension` specifies a name/value pair that is part of the identity of a CloudWatch metric for the `Dimensions` property of the [AWS::AutoScaling::ScalingPolicy CustomizedMetricSpecification](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-autoscaling-scalingpolicy-customizedmetricspecification.html) property type. Duplicate dimensions are not allowed.","properties":{"Name":"The name of the dimension.","Value":"The value of the dimension."}},"AWS::AutoScaling::ScalingPolicy.MetricStat":{"attributes":{},"description":"`MetricStat` is a property of the [AWS::AutoScaling::ScalingPolicy MetricDataQuery](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-autoscaling-scalingpolicy-metricdataquery.html) property type.\\n\\nThis structure defines the CloudWatch metric to return, along with the statistic, period, and unit.\\n\\nFor more information about the CloudWatch terminology below, see [Amazon CloudWatch concepts](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch_concepts.html) in the *Amazon CloudWatch User Guide* .","properties":{"Metric":"The CloudWatch metric to return, including the metric name, namespace, and dimensions. To get the exact metric name, namespace, and dimensions, inspect the [Metric](https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_Metric.html) object that is returned by a call to [ListMetrics](https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_ListMetrics.html) .","Stat":"The statistic to return. It can include any CloudWatch statistic or extended statistic. For a list of valid values, see the table in [Statistics](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch_concepts.html#Statistic) in the *Amazon CloudWatch User Guide* .\\n\\nThe most commonly used metrics for predictive scaling are `Average` and `Sum` .","Unit":"The unit to use for the returned data points. For a complete list of the units that CloudWatch supports, see the [MetricDatum](https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_MetricDatum.html) data type in the *Amazon CloudWatch API Reference* ."}},"AWS::AutoScaling::ScalingPolicy.PredefinedMetricSpecification":{"attributes":{},"description":"Contains predefined metric specification information for a target tracking scaling policy for Amazon EC2 Auto Scaling.\\n\\n`PredefinedMetricSpecification` is a property of the [AWS::AutoScaling::ScalingPolicy TargetTrackingConfiguration](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-autoscaling-scalingpolicy-targettrackingconfiguration.html) property type.","properties":{"PredefinedMetricType":"The metric type. The following predefined metrics are available:\\n\\n- `ASGAverageCPUUtilization` - Average CPU utilization of the Auto Scaling group.\\n- `ASGAverageNetworkIn` - Average number of bytes received on all network interfaces by the Auto Scaling group.\\n- `ASGAverageNetworkOut` - Average number of bytes sent out on all network interfaces by the Auto Scaling group.\\n- `ALBRequestCountPerTarget` - Average Application Load Balancer request count per target for your Auto Scaling group.","ResourceLabel":"A label that uniquely identifies a specific Application Load Balancer target group from which to determine the average request count served by your Auto Scaling group. You can\'t specify a resource label unless the target group is attached to the Auto Scaling group.\\n\\nYou create the resource label by appending the final portion of the load balancer ARN and the final portion of the target group ARN into a single value, separated by a forward slash (/). The format of the resource label is:\\n\\n`app/my-alb/778d41231b141a0f/targetgroup/my-alb-target-group/943f017f100becff` .\\n\\nWhere:\\n\\n- app// is the final portion of the load balancer ARN\\n- targetgroup// is the final portion of the target group ARN.\\n\\nTo find the ARN for an Application Load Balancer, use the [DescribeLoadBalancers](https://docs.aws.amazon.com/elasticloadbalancing/latest/APIReference/API_DescribeLoadBalancers.html) API operation. To find the ARN for the target group, use the [DescribeTargetGroups](https://docs.aws.amazon.com/elasticloadbalancing/latest/APIReference/API_DescribeTargetGroups.html) API operation."}},"AWS::AutoScaling::ScalingPolicy.PredictiveScalingConfiguration":{"attributes":{},"description":"`PredictiveScalingConfiguration` is a property of the [AWS::AutoScaling::ScalingPolicy](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-policy.html) resource that specifies a predictive scaling policy for Amazon EC2 Auto Scaling.\\n\\nFor more information, see [Predictive scaling](https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-predictive-scaling.html) in the *Amazon EC2 Auto Scaling User Guide* .","properties":{"MaxCapacityBreachBehavior":"Defines the behavior that should be applied if the forecast capacity approaches or exceeds the maximum capacity of the Auto Scaling group. Defaults to `HonorMaxCapacity` if not specified.\\n\\nThe following are possible values:\\n\\n- `HonorMaxCapacity` - Amazon EC2 Auto Scaling cannot scale out capacity higher than the maximum capacity. The maximum capacity is enforced as a hard limit.\\n- `IncreaseMaxCapacity` - Amazon EC2 Auto Scaling can scale out capacity higher than the maximum capacity when the forecast capacity is close to or exceeds the maximum capacity. The upper limit is determined by the forecasted capacity and the value for `MaxCapacityBuffer` .","MaxCapacityBuffer":"The size of the capacity buffer to use when the forecast capacity is close to or exceeds the maximum capacity. The value is specified as a percentage relative to the forecast capacity. For example, if the buffer is 10, this means a 10 percent buffer, such that if the forecast capacity is 50, and the maximum capacity is 40, then the effective maximum capacity is 55.\\n\\nIf set to 0, Amazon EC2 Auto Scaling may scale capacity higher than the maximum capacity to equal but not exceed forecast capacity.\\n\\nRequired if the `MaxCapacityBreachBehavior` property is set to `IncreaseMaxCapacity` , and cannot be used otherwise.","MetricSpecifications":"This structure includes the metrics and target utilization to use for predictive scaling.\\n\\nThis is an array, but we currently only support a single metric specification. That is, you can specify a target value and a single metric pair, or a target value and one scaling metric and one load metric.","Mode":"The predictive scaling mode. Defaults to `ForecastOnly` if not specified.","SchedulingBufferTime":"The amount of time, in seconds, by which the instance launch time can be advanced. For example, the forecast says to add capacity at 10:00 AM, and you choose to pre-launch instances by 5 minutes. In that case, the instances will be launched at 9:55 AM. The intention is to give resources time to be provisioned. It can take a few minutes to launch an EC2 instance. The actual amount of time required depends on several factors, such as the size of the instance and whether there are startup scripts to complete.\\n\\nThe value must be less than the forecast interval duration of 3600 seconds (60 minutes). Defaults to 300 seconds if not specified."}},"AWS::AutoScaling::ScalingPolicy.PredictiveScalingCustomizedCapacityMetric":{"attributes":{},"description":"Contains capacity metric information for the `CustomizedCapacityMetricSpecification` property of the [AWS::AutoScaling::ScalingPolicy PredictiveScalingMetricSpecification](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-autoscaling-scalingpolicy-predictivescalingmetricspecification.html) property type.","properties":{"MetricDataQueries":"One or more metric data queries to provide the data points for a capacity metric. Use multiple metric data queries only if you are performing a math expression on returned data."}},"AWS::AutoScaling::ScalingPolicy.PredictiveScalingCustomizedLoadMetric":{"attributes":{},"description":"Contains load metric information for the `CustomizedLoadMetricSpecification` property of the [AWS::AutoScaling::ScalingPolicy PredictiveScalingMetricSpecification](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-autoscaling-scalingpolicy-predictivescalingmetricspecification.html) property type.","properties":{"MetricDataQueries":"One or more metric data queries to provide the data points for a load metric. Use multiple metric data queries only if you are performing a math expression on returned data."}},"AWS::AutoScaling::ScalingPolicy.PredictiveScalingCustomizedScalingMetric":{"attributes":{},"description":"Contains scaling metric information for the `CustomizedScalingMetricSpecification` property of the [AWS::AutoScaling::ScalingPolicy PredictiveScalingMetricSpecification](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-autoscaling-scalingpolicy-predictivescalingmetricspecification.html) property type.","properties":{"MetricDataQueries":"One or more metric data queries to provide the data points for a scaling metric. Use multiple metric data queries only if you are performing a math expression on returned data."}},"AWS::AutoScaling::ScalingPolicy.PredictiveScalingMetricSpecification":{"attributes":{},"description":"A structure that specifies a metric specification for the `MetricSpecifications` property of the [AWS::AutoScaling::ScalingPolicy PredictiveScalingConfiguration](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-autoscaling-scalingpolicy-predictivescalingconfiguration.html) property type.\\n\\nYou must specify either a metric pair, or a load metric and a scaling metric individually. Specifying a metric pair instead of individual metrics provides a simpler way to configure metrics for a scaling policy. You choose the metric pair, and the policy automatically knows the correct sum and average statistics to use for the load metric and the scaling metric.\\n\\nExample\\n\\n- You create a predictive scaling policy and specify `ALBRequestCount` as the value for the metric pair and `1000.0` as the target value. For this type of metric, you must provide the metric dimension for the corresponding target group, so you also provide a resource label for the Application Load Balancer target group that is attached to your Auto Scaling group.\\n- The number of requests the target group receives per minute provides the load metric, and the request count averaged between the members of the target group provides the scaling metric. In CloudWatch, this refers to the `RequestCount` and `RequestCountPerTarget` metrics, respectively.\\n- For optimal use of predictive scaling, you adhere to the best practice of using a dynamic scaling policy to automatically scale between the minimum capacity and maximum capacity in response to real-time changes in resource utilization.\\n- Amazon EC2 Auto Scaling consumes data points for the load metric over the last 14 days and creates an hourly load forecast for predictive scaling. (A minimum of 24 hours of data is required.)\\n- After creating the load forecast, Amazon EC2 Auto Scaling determines when to reduce or increase the capacity of your Auto Scaling group in each hour of the forecast period so that the average number of requests received by each instance is as close to 1000 requests per minute as possible at all times.\\n\\nFor information about using custom metrics with predictive scaling, see [Advanced predictive scaling policy configurations using custom metrics](https://docs.aws.amazon.com/autoscaling/ec2/userguide/predictive-scaling-customized-metric-specification.html) in the *Amazon EC2 Auto Scaling User Guide* .","properties":{"CustomizedCapacityMetricSpecification":"The customized capacity metric specification.","CustomizedLoadMetricSpecification":"The customized load metric specification.","CustomizedScalingMetricSpecification":"The customized scaling metric specification.","PredefinedLoadMetricSpecification":"The predefined load metric specification.","PredefinedMetricPairSpecification":"The predefined metric pair specification from which Amazon EC2 Auto Scaling determines the appropriate scaling metric and load metric to use.","PredefinedScalingMetricSpecification":"The predefined scaling metric specification.","TargetValue":"Specifies the target utilization.\\n\\n> Some metrics are based on a count instead of a percentage, such as the request count for an Application Load Balancer or the number of messages in an SQS queue. If the scaling policy specifies one of these metrics, specify the target utilization as the optimal average request or message count per instance during any one-minute interval."}},"AWS::AutoScaling::ScalingPolicy.PredictiveScalingPredefinedLoadMetric":{"attributes":{},"description":"Contains load metric information for the `PredefinedLoadMetricSpecification` property of the [AWS::AutoScaling::ScalingPolicy PredictiveScalingMetricSpecification](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-autoscaling-scalingpolicy-predictivescalingmetricspecification.html) property type.\\n\\n> Does not apply to policies that use a *metric pair* for the metric specification.","properties":{"PredefinedMetricType":"The metric type.","ResourceLabel":"A label that uniquely identifies a specific Application Load Balancer target group from which to determine the request count served by your Auto Scaling group. You can\'t specify a resource label unless the target group is attached to the Auto Scaling group.\\n\\nYou create the resource label by appending the final portion of the load balancer ARN and the final portion of the target group ARN into a single value, separated by a forward slash (/). The format of the resource label is:\\n\\n`app/my-alb/778d41231b141a0f/targetgroup/my-alb-target-group/943f017f100becff` .\\n\\nWhere:\\n\\n- app// is the final portion of the load balancer ARN\\n- targetgroup// is the final portion of the target group ARN.\\n\\nTo find the ARN for an Application Load Balancer, use the [DescribeLoadBalancers](https://docs.aws.amazon.com/elasticloadbalancing/latest/APIReference/API_DescribeLoadBalancers.html) API operation. To find the ARN for the target group, use the [DescribeTargetGroups](https://docs.aws.amazon.com/elasticloadbalancing/latest/APIReference/API_DescribeTargetGroups.html) API operation."}},"AWS::AutoScaling::ScalingPolicy.PredictiveScalingPredefinedMetricPair":{"attributes":{},"description":"Contains metric pair information for the `PredefinedMetricPairSpecification` property of the [AWS::AutoScaling::ScalingPolicy PredictiveScalingMetricSpecification](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-autoscaling-scalingpolicy-predictivescalingmetricspecification.html) property type.\\n\\nFor more information, see [Predictive scaling](https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-predictive-scaling.html) in the *Amazon EC2 Auto Scaling User Guide* .","properties":{"PredefinedMetricType":"Indicates which metrics to use. There are two different types of metrics for each metric type: one is a load metric and one is a scaling metric. For example, if the metric type is `ASGCPUUtilization` , the Auto Scaling group\'s total CPU metric is used as the load metric, and the average CPU metric is used for the scaling metric.","ResourceLabel":"A label that uniquely identifies a specific Application Load Balancer target group from which to determine the total and average request count served by your Auto Scaling group. You can\'t specify a resource label unless the target group is attached to the Auto Scaling group.\\n\\nYou create the resource label by appending the final portion of the load balancer ARN and the final portion of the target group ARN into a single value, separated by a forward slash (/). The format of the resource label is:\\n\\n`app/my-alb/778d41231b141a0f/targetgroup/my-alb-target-group/943f017f100becff` .\\n\\nWhere:\\n\\n- app// is the final portion of the load balancer ARN\\n- targetgroup// is the final portion of the target group ARN.\\n\\nTo find the ARN for an Application Load Balancer, use the [DescribeLoadBalancers](https://docs.aws.amazon.com/elasticloadbalancing/latest/APIReference/API_DescribeLoadBalancers.html) API operation. To find the ARN for the target group, use the [DescribeTargetGroups](https://docs.aws.amazon.com/elasticloadbalancing/latest/APIReference/API_DescribeTargetGroups.html) API operation."}},"AWS::AutoScaling::ScalingPolicy.PredictiveScalingPredefinedScalingMetric":{"attributes":{},"description":"Contains scaling metric information for the `PredefinedScalingMetricSpecification` property of the [AWS::AutoScaling::ScalingPolicy PredictiveScalingMetricSpecification](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-autoscaling-scalingpolicy-predictivescalingmetricspecification.html) property type.\\n\\n> Does not apply to policies that use a *metric pair* for the metric specification.","properties":{"PredefinedMetricType":"The metric type.","ResourceLabel":"A label that uniquely identifies a specific Application Load Balancer target group from which to determine the average request count served by your Auto Scaling group. You can\'t specify a resource label unless the target group is attached to the Auto Scaling group.\\n\\nYou create the resource label by appending the final portion of the load balancer ARN and the final portion of the target group ARN into a single value, separated by a forward slash (/). The format of the resource label is:\\n\\n`app/my-alb/778d41231b141a0f/targetgroup/my-alb-target-group/943f017f100becff` .\\n\\nWhere:\\n\\n- app// is the final portion of the load balancer ARN\\n- targetgroup// is the final portion of the target group ARN.\\n\\nTo find the ARN for an Application Load Balancer, use the [DescribeLoadBalancers](https://docs.aws.amazon.com/elasticloadbalancing/latest/APIReference/API_DescribeLoadBalancers.html) API operation. To find the ARN for the target group, use the [DescribeTargetGroups](https://docs.aws.amazon.com/elasticloadbalancing/latest/APIReference/API_DescribeTargetGroups.html) API operation."}},"AWS::AutoScaling::ScalingPolicy.StepAdjustment":{"attributes":{},"description":"`StepAdjustment` specifies a step adjustment for the `StepAdjustments` property of the [AWS::AutoScaling::ScalingPolicy](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-policy.html) resource.\\n\\nFor the following examples, suppose that you have an alarm with a breach threshold of 50:\\n\\n- To trigger a step adjustment when the metric is greater than or equal to 50 and less than 60, specify a lower bound of 0 and an upper bound of 10.\\n- To trigger a step adjustment when the metric is greater than 40 and less than or equal to 50, specify a lower bound of -10 and an upper bound of 0.\\n\\nThere are a few rules for the step adjustments for your step policy:\\n\\n- The ranges of your step adjustments can\'t overlap or have a gap.\\n- At most one step adjustment can have a null lower bound. If one step adjustment has a negative lower bound, then there must be a step adjustment with a null lower bound.\\n- At most one step adjustment can have a null upper bound. If one step adjustment has a positive upper bound, then there must be a step adjustment with a null upper bound.\\n- The upper and lower bound can\'t be null in the same step adjustment.\\n\\nFor more information, see [Step adjustments](https://docs.aws.amazon.com/autoscaling/ec2/userguide/as-scaling-simple-step.html#as-scaling-steps) in the *Amazon EC2 Auto Scaling User Guide* .\\n\\nYou can find a sample template snippet in the [Examples](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-policy.html#aws-properties-as-policy--examples) section of the `AWS::AutoScaling::ScalingPolicy` resource.","properties":{"MetricIntervalLowerBound":"The lower bound for the difference between the alarm threshold and the CloudWatch metric. If the metric value is above the breach threshold, the lower bound is inclusive (the metric must be greater than or equal to the threshold plus the lower bound). Otherwise, it is exclusive (the metric must be greater than the threshold plus the lower bound). A null value indicates negative infinity.","MetricIntervalUpperBound":"The upper bound for the difference between the alarm threshold and the CloudWatch metric. If the metric value is above the breach threshold, the upper bound is exclusive (the metric must be less than the threshold plus the upper bound). Otherwise, it is inclusive (the metric must be less than or equal to the threshold plus the upper bound). A null value indicates positive infinity.\\n\\nThe upper bound must be greater than the lower bound.","ScalingAdjustment":"The amount by which to scale, based on the specified adjustment type. A positive value adds to the current capacity while a negative number removes from the current capacity. For exact capacity, you must specify a non-negative value."}},"AWS::AutoScaling::ScalingPolicy.TargetTrackingConfiguration":{"attributes":{},"description":"`TargetTrackingConfiguration` is a property of the [AWS::AutoScaling::ScalingPolicy](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-policy.html) resource that specifies a target tracking scaling policy configuration for Amazon EC2 Auto Scaling.\\n\\nFor more information about scaling policies, see [Dynamic scaling](https://docs.aws.amazon.com/autoscaling/ec2/userguide/as-scale-based-on-demand.html) in the *Amazon EC2 Auto Scaling User Guide* .","properties":{"CustomizedMetricSpecification":"A customized metric. You must specify either a predefined metric or a customized metric.","DisableScaleIn":"Indicates whether scaling in by the target tracking scaling policy is disabled. If scaling in is disabled, the target tracking scaling policy doesn\'t remove instances from the Auto Scaling group. Otherwise, the target tracking scaling policy can remove instances from the Auto Scaling group. The default is `false` .","PredefinedMetricSpecification":"A predefined metric. You must specify either a predefined metric or a customized metric.","TargetValue":"The target value for the metric.\\n\\n> Some metrics are based on a count instead of a percentage, such as the request count for an Application Load Balancer or the number of messages in an SQS queue. If the scaling policy specifies one of these metrics, specify the target utilization as the optimal average request or message count per instance during any one-minute interval."}},"AWS::AutoScaling::ScheduledAction":{"attributes":{"Ref":"When the logical ID of this resource is provided to the `Ref` intrinsic function, `Ref` returns the resource name. For example: `mystack-myscheduledaction-NT5EUXTNTXXD` .\\n\\nFor more information about using the `Ref` function, see [Ref](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-ref.html) .","ScheduledActionName":"Returns the name of a scheduled action."},"description":"The `AWS::AutoScaling::ScheduledAction` resource specifies an Amazon EC2 Auto Scaling scheduled action so that the Auto Scaling group can change the number of instances available for your application in response to predictable load changes.\\n\\nWhen you update a stack with an Auto Scaling group and scheduled action, CloudFormation always sets the min size, max size, and desired capacity properties of your group to the values that are defined in the `AWS::AutoScaling::AutoScalingGroup` section of your template. However, you might not want CloudFormation to do that when you have a scheduled action in effect. You can use an [UpdatePolicy attribute](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-attribute-updatepolicy.html) to prevent CloudFormation from changing the min size, max size, or desired capacity property values during a stack update unless you modified the individual values in your template. If you have rolling updates enabled, before you can update the Auto Scaling group, you must suspend scheduled actions by specifying an [UpdatePolicy attribute](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-attribute-updatepolicy.html) for the Auto Scaling group. You can find a sample update policy for rolling updates in [Auto scaling template snippets](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/quickref-autoscaling.html) .\\n\\nFor more information, see [Scheduled scaling](https://docs.aws.amazon.com/autoscaling/ec2/userguide/schedule_time.html) and [Suspending and resuming scaling processes](https://docs.aws.amazon.com/autoscaling/ec2/userguide/as-suspend-resume-processes.html) in the *Amazon EC2 Auto Scaling User Guide* .","properties":{"AutoScalingGroupName":"The name of the Auto Scaling group.","DesiredCapacity":"The desired capacity is the initial capacity of the Auto Scaling group after the scheduled action runs and the capacity it attempts to maintain. It can scale beyond this capacity if you add more scaling conditions.\\n\\n> You must specify at least one of the following properties: `MaxSize` , `MinSize` , or `DesiredCapacity` .","EndTime":"The date and time for the recurring schedule to end, in UTC. For example, `\\"2021-06-01T00:00:00Z\\"` .","MaxSize":"The maximum size of the Auto Scaling group.","MinSize":"The minimum size of the Auto Scaling group.","Recurrence":"The recurring schedule for this action. This format consists of five fields separated by white spaces: [Minute] [Hour] [Day_of_Month] [Month_of_Year] [Day_of_Week]. The value must be in quotes (for example, `\\"30 0 1 1,6,12 *\\"` ). For more information about this format, see [Crontab](https://docs.aws.amazon.com/http://crontab.org) .\\n\\nWhen `StartTime` and `EndTime` are specified with `Recurrence` , they form the boundaries of when the recurring action starts and stops.\\n\\nCron expressions use Universal Coordinated Time (UTC) by default.","StartTime":"The date and time for this action to start, in YYYY-MM-DDThh:mm:ssZ format in UTC/GMT only and in quotes (for example, `\\"2021-06-01T00:00:00Z\\"` ).\\n\\nIf you specify `Recurrence` and `StartTime` , Amazon EC2 Auto Scaling performs the action at this time, and then performs the action based on the specified recurrence.","TimeZone":"Specifies the time zone for a cron expression. If a time zone is not provided, UTC is used by default.\\n\\nValid values are the canonical names of the IANA time zones, derived from the IANA Time Zone Database (such as `Etc/GMT+9` or `Pacific/Tahiti` ). For more information, see [https://en.wikipedia.org/wiki/List_of_tz_database_time_zones](https://docs.aws.amazon.com/https://en.wikipedia.org/wiki/List_of_tz_database_time_zones) ."}},"AWS::AutoScaling::WarmPool":{"attributes":{},"description":"The `AWS::AutoScaling::WarmPool` resource creates a pool of pre-initialized EC2 instances that sits alongside the Auto Scaling group. Whenever your application needs to scale out, the Auto Scaling group can draw on the warm pool to meet its new desired capacity.\\n\\nWhen you create a warm pool, you can define a minimum size. When your Auto Scaling group scales out and the size of the warm pool shrinks, Amazon EC2 Auto Scaling launches new instances into the warm pool to maintain its minimum size.\\n\\nFor more information, see [Warm pools for Amazon EC2 Auto Scaling](https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-warm-pools.html) in the *Amazon EC2 Auto Scaling User Guide* .\\n\\n> CloudFormation supports the `UpdatePolicy` attribute for Auto Scaling groups. During an update, if `UpdatePolicy` is set to `AutoScalingRollingUpdate` , CloudFormation replaces `InService` instances only. Instances in the warm pool are not replaced. The difference in which instances are replaced can potentially result in different instance configurations after the stack update completes. If `UpdatePolicy` is set to `AutoScalingReplacingUpdate` , you do not encounter this issue because CloudFormation replaces both the Auto Scaling group and the warm pool.","properties":{"AutoScalingGroupName":"The name of the Auto Scaling group.","InstanceReusePolicy":"Indicates whether instances in the Auto Scaling group can be returned to the warm pool on scale in. The default is to terminate instances in the Auto Scaling group when the group scales in.","MaxGroupPreparedCapacity":"Specifies the maximum number of instances that are allowed to be in the warm pool or in any state except `Terminated` for the Auto Scaling group. This is an optional property. Specify it only if you do not want the warm pool size to be determined by the difference between the group\'s maximum capacity and its desired capacity.\\n\\n> If a value for `MaxGroupPreparedCapacity` is not specified, Amazon EC2 Auto Scaling launches and maintains the difference between the group\'s maximum capacity and its desired capacity. If you specify a value for `MaxGroupPreparedCapacity` , Amazon EC2 Auto Scaling uses the difference between the `MaxGroupPreparedCapacity` and the desired capacity instead.\\n> \\n> The size of the warm pool is dynamic. Only when `MaxGroupPreparedCapacity` and `MinSize` are set to the same value does the warm pool have an absolute size. \\n\\nIf the desired capacity of the Auto Scaling group is higher than the `MaxGroupPreparedCapacity` , the capacity of the warm pool is 0, unless you specify a value for `MinSize` . To remove a value that you previously set, include the property but specify -1 for the value.","MinSize":"Specifies the minimum number of instances to maintain in the warm pool. This helps you to ensure that there is always a certain number of warmed instances available to handle traffic spikes. Defaults to 0 if not specified.","PoolState":"Sets the instance state to transition to after the lifecycle actions are complete. Default is `Stopped` ."}},"AWS::AutoScaling::WarmPool.InstanceReusePolicy":{"attributes":{},"description":"A structure that specifies an instance reuse policy for the `InstanceReusePolicy` property of the [AWS::AutoScaling::WarmPool](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-autoscaling-warmpool.html) resource.\\n\\nFor more information, see [Warm pools for Amazon EC2 Auto Scaling](https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-warm-pools.html) in the *Amazon EC2 Auto Scaling User Guide* .","properties":{"ReuseOnScaleIn":"Specifies whether instances in the Auto Scaling group can be returned to the warm pool on scale in."}},"AWS::AutoScalingPlans::ScalingPlan":{"attributes":{"Ref":"When you pass the logical ID of an `AWS::AutoScalingPlans::ScalingPlan` resource to the intrinsic `Ref` function, the function returns the Amazon Resource Name (ARN) of the scaling plan. The format of the ARN is as follows:\\n\\n`arn:aws:autoscaling: *region* : *123456789012:* scalingPlan:scalingPlanName/ *plan-name* :scalingPlanVersion/ *plan-version*`\\n\\nFor more information about using the `Ref` function, see [Ref](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-ref.html) ."},"description":"The `AWS::AutoScalingPlans::ScalingPlan` resource defines an AWS Auto Scaling scaling plan. A scaling plan is used to scale application resources to size them appropriately to ensure that enough resource is available in the application at peak times and to reduce allocated resource during periods of low utilization. The following resources can be added to a scaling plan:\\n\\n- Amazon EC2 Auto Scaling groups\\n- Amazon EC2 Spot Fleet requests\\n- Amazon ECS services\\n- Amazon DynamoDB tables and global secondary indexes\\n- Amazon Aurora Replicas\\n\\nFor more information, see the [AWS Auto Scaling User Guide](https://docs.aws.amazon.com/autoscaling/plans/userguide/what-is-aws-auto-scaling.html) .","properties":{"ApplicationSource":"A CloudFormation stack or a set of tags. You can create one scaling plan per application source. The `ApplicationSource` property must be present to ensure interoperability with the AWS Auto Scaling console.","ScalingInstructions":"The scaling instructions."}},"AWS::AutoScalingPlans::ScalingPlan.ApplicationSource":{"attributes":{},"description":"`ApplicationSource` is a property of [ScalingPlan](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-autoscalingplans-scalingplan.html) that specifies the application source to use with AWS Auto Scaling ( Auto Scaling Plans ). You can create one scaling plan per application source.","properties":{"CloudFormationStackARN":"The Amazon Resource Name (ARN) of a CloudFormation stack.\\n\\nYou must specify either a `CloudFormationStackARN` or `TagFilters` .","TagFilters":"A set of tag filters (keys and values). Each tag filter specified must contain a key with values as optional. Each scaling plan can include up to 50 keys, and each key can include up to 20 values.\\n\\nTags are part of the syntax that you use to specify the resources you want returned when configuring a scaling plan from the AWS Auto Scaling console. You do not need to specify valid tag filter values when you create a scaling plan with CloudFormation. The `Key` and `Values` properties can accept any value as long as the combination of values is unique across scaling plans. However, if you also want to use the AWS Auto Scaling console to edit the scaling plan, then you must specify valid values.\\n\\nYou must specify either a `CloudFormationStackARN` or `TagFilters` ."}},"AWS::AutoScalingPlans::ScalingPlan.CustomizedLoadMetricSpecification":{"attributes":{},"description":"`CustomizedLoadMetricSpecification` is a subproperty of [ScalingInstruction](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-autoscalingplans-scalingplan-scalinginstruction.html) that specifies a customized load metric for predictive scaling to use with AWS Auto Scaling ( Auto Scaling Plans ).\\n\\nFor predictive scaling to work with a customized load metric specification, AWS Auto Scaling needs access to the `Sum` and `Average` statistics that CloudWatch computes from metric data.\\n\\nWhen you choose a load metric, make sure that the required `Sum` and `Average` statistics for your metric are available in CloudWatch and that they provide relevant data for predictive scaling. The `Sum` statistic must represent the total load on the resource, and the `Average` statistic must represent the average load per capacity unit of the resource. For example, there is a metric that counts the number of requests processed by your Auto Scaling group. If the `Sum` statistic represents the total request count processed by the group, then the `Average` statistic for the specified metric must represent the average request count processed by each instance of the group.\\n\\nIf you publish your own metrics, you can aggregate the data points at a given interval and then publish the aggregated data points to CloudWatch. Before AWS Auto Scaling generates the forecast, it sums up all the metric data points that occurred within each hour to match the granularity period that is used in the forecast (60 minutes).\\n\\nFor information about terminology, available metrics, or how to publish new metrics, see [Amazon CloudWatch Concepts](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch_concepts.html) in the *Amazon CloudWatch User Guide* .\\n\\nAfter creating your scaling plan, you can use the AWS Auto Scaling console to visualize forecasts for the specified metric. For more information, see [View Scaling Information for a Resource](https://docs.aws.amazon.com/autoscaling/plans/userguide/gs-create-scaling-plan.html#gs-view-resource) in the *AWS Auto Scaling User Guide* .","properties":{"Dimensions":"The dimensions of the metric.\\n\\nConditional: If you published your metric with dimensions, you must specify the same dimensions in your customized load metric specification.","MetricName":"The name of the metric.","Namespace":"The namespace of the metric.","Statistic":"The statistic of the metric.\\n\\n*Allowed Values* : `Sum`","Unit":"The unit of the metric."}},"AWS::AutoScalingPlans::ScalingPlan.CustomizedScalingMetricSpecification":{"attributes":{},"description":"`CustomizedScalingMetricSpecification` is a subproperty of [TargetTrackingConfiguration](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-autoscalingplans-scalingplan-targettrackingconfiguration.html) that specifies a customized scaling metric for a target tracking configuration to use with AWS Auto Scaling ( Auto Scaling Plans ).\\n\\nTo create your customized scaling metric specification:\\n\\n- Add values for each required property from CloudWatch. You can use an existing metric, or a new metric that you create. To use your own metric, you must first publish the metric to CloudWatch. For more information, see [Publish Custom Metrics](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/publishingMetrics.html) in the *Amazon CloudWatch User Guide* .\\n- Choose a metric that changes proportionally with capacity. The value of the metric should increase or decrease in inverse proportion to the number of capacity units. That is, the value of the metric should decrease when capacity increases.\\n\\nFor information about terminology, available metrics, or how to publish new metrics, see [Amazon CloudWatch Concepts](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch_concepts.html) in the *Amazon CloudWatch User Guide* .","properties":{"Dimensions":"The dimensions of the metric.\\n\\nConditional: If you published your metric with dimensions, you must specify the same dimensions in your scaling policy.","MetricName":"The name of the metric. To get the exact metric name, namespace, and dimensions, inspect the [Metrics](https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_Metric.html) object that is returned by a call to [ListMetrics](https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_ListMetrics.html) .","Namespace":"The namespace of the metric.","Statistic":"The statistic of the metric.","Unit":"The unit of the metric. For a complete list of the units that CloudWatch supports, see the [MetricDatum](https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_MetricDatum.html) data type in the *Amazon CloudWatch API Reference* ."}},"AWS::AutoScalingPlans::ScalingPlan.MetricDimension":{"attributes":{},"description":"`MetricDimension` is a subproperty of [CustomizedScalingMetricSpecification](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-autoscalingplans-scalingplan-customizedscalingmetricspecification.html) that specifies a dimension for a customized metric to use with AWS Auto Scaling ( Auto Scaling Plans ). Dimensions are arbitrary name/value pairs that can be associated with a CloudWatch metric. Duplicate dimensions are not allowed.","properties":{"Name":"The name of the dimension.","Value":"The value of the dimension."}},"AWS::AutoScalingPlans::ScalingPlan.PredefinedLoadMetricSpecification":{"attributes":{},"description":"`PredefinedLoadMetricSpecification` is a subproperty of [ScalingInstruction](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-autoscalingplans-scalingplan-scalinginstruction.html) that specifies a predefined load metric for predictive scaling to use with AWS Auto Scaling ( Auto Scaling Plans ).\\n\\nAfter creating your scaling plan, you can use the AWS Auto Scaling console to visualize forecasts for the specified metric. For more information, see [View Scaling Information for a Resource](https://docs.aws.amazon.com/autoscaling/plans/userguide/gs-create-scaling-plan.html#gs-view-resource) in the *AWS Auto Scaling User Guide* .","properties":{"PredefinedLoadMetricType":"The metric type.","ResourceLabel":"Identifies the resource associated with the metric type. You can\'t specify a resource label unless the metric type is `ALBTargetGroupRequestCount` and there is a target group for an Application Load Balancer attached to the Auto Scaling group.\\n\\nYou create the resource label by appending the final portion of the load balancer ARN and the final portion of the target group ARN into a single value, separated by a forward slash (/). The format is app///targetgroup//, where:\\n\\n- app// is the final portion of the load balancer ARN\\n- targetgroup// is the final portion of the target group ARN.\\n\\nThis is an example: app/EC2Co-EcsEl-1TKLTMITMM0EO/f37c06a68c1748aa/targetgroup/EC2Co-Defau-LDNM7Q3ZH1ZN/6d4ea56ca2d6a18d.\\n\\nTo find the ARN for an Application Load Balancer, use the [DescribeLoadBalancers](https://docs.aws.amazon.com/elasticloadbalancing/latest/APIReference/API_DescribeLoadBalancers.html) API operation. To find the ARN for the target group, use the [DescribeTargetGroups](https://docs.aws.amazon.com/elasticloadbalancing/latest/APIReference/API_DescribeTargetGroups.html) API operation."}},"AWS::AutoScalingPlans::ScalingPlan.PredefinedScalingMetricSpecification":{"attributes":{},"description":"`PredefinedScalingMetricSpecification` is a subproperty of [TargetTrackingConfiguration](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-autoscalingplans-scalingplan-targettrackingconfiguration.html) that specifies a customized scaling metric for a target tracking configuration to use with AWS Auto Scaling ( Auto Scaling Plans ).","properties":{"PredefinedScalingMetricType":"The metric type. The `ALBRequestCountPerTarget` metric type applies only to Auto Scaling groups, Spot Fleet requests, and ECS services.","ResourceLabel":"Identifies the resource associated with the metric type. You can\'t specify a resource label unless the metric type is `ALBRequestCountPerTarget` and there is a target group for an Application Load Balancer attached to the Auto Scaling group, Spot Fleet request, or ECS service.\\n\\nYou create the resource label by appending the final portion of the load balancer ARN and the final portion of the target group ARN into a single value, separated by a forward slash (/). The format is app///targetgroup//, where:\\n\\n- app// is the final portion of the load balancer ARN\\n- targetgroup// is the final portion of the target group ARN.\\n\\nThis is an example: app/EC2Co-EcsEl-1TKLTMITMM0EO/f37c06a68c1748aa/targetgroup/EC2Co-Defau-LDNM7Q3ZH1ZN/6d4ea56ca2d6a18d.\\n\\nTo find the ARN for an Application Load Balancer, use the [DescribeLoadBalancers](https://docs.aws.amazon.com/elasticloadbalancing/latest/APIReference/API_DescribeLoadBalancers.html) API operation. To find the ARN for the target group, use the [DescribeTargetGroups](https://docs.aws.amazon.com/elasticloadbalancing/latest/APIReference/API_DescribeTargetGroups.html) API operation."}},"AWS::AutoScalingPlans::ScalingPlan.ScalingInstruction":{"attributes":{},"description":"`ScalingInstruction` is a property of [ScalingPlan](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-autoscalingplans-scalingplan.html) that specifies the scaling instruction for a scalable resource in a scaling plan. Each scaling instruction applies to one resource.\\n\\nAWS Auto Scaling creates target tracking scaling policies based on the scaling instructions. Target tracking scaling policies adjust the capacity of your scalable resource as required to maintain resource utilization at the target value that you specified.\\n\\nAWS Auto Scaling also configures predictive scaling for your Amazon EC2 Auto Scaling groups using a subset of properties, including the load metric, the scaling metric, the target value for the scaling metric, the predictive scaling mode (forecast and scale or forecast only), and the desired behavior when the forecast capacity exceeds the maximum capacity of the resource. With predictive scaling, AWS Auto Scaling generates forecasts with traffic predictions for the two days ahead and schedules scaling actions that proactively add and remove resource capacity to match the forecast.\\n\\n> We recommend waiting a minimum of 24 hours after creating an Auto Scaling group to configure predictive scaling. At minimum, there must be 24 hours of historical data to generate a forecast. For more information, see [Best Practices for AWS Auto Scaling](https://docs.aws.amazon.com/autoscaling/plans/userguide/gs-best-practices.html) in the *AWS Auto Scaling User Guide* .","properties":{"CustomizedLoadMetricSpecification":"The customized load metric to use for predictive scaling. This property or a *PredefinedLoadMetricSpecification* is required when configuring predictive scaling, and cannot be used otherwise.","DisableDynamicScaling":"Controls whether dynamic scaling by AWS Auto Scaling is disabled. When dynamic scaling is enabled, AWS Auto Scaling creates target tracking scaling policies based on the specified target tracking configurations.\\n\\nThe default is enabled ( `false` ).","MaxCapacity":"The maximum capacity of the resource. The exception to this upper limit is if you specify a non-default setting for *PredictiveScalingMaxCapacityBehavior* .","MinCapacity":"The minimum capacity of the resource.","PredefinedLoadMetricSpecification":"The predefined load metric to use for predictive scaling. This property or a *CustomizedLoadMetricSpecification* is required when configuring predictive scaling, and cannot be used otherwise.","PredictiveScalingMaxCapacityBehavior":"Defines the behavior that should be applied if the forecast capacity approaches or exceeds the maximum capacity specified for the resource. The default value is `SetForecastCapacityToMaxCapacity` .\\n\\nThe following are possible values:\\n\\n- `SetForecastCapacityToMaxCapacity` - AWS Auto Scaling cannot scale resource capacity higher than the maximum capacity. The maximum capacity is enforced as a hard limit.\\n- `SetMaxCapacityToForecastCapacity` - AWS Auto Scaling can scale resource capacity higher than the maximum capacity to equal but not exceed forecast capacity.\\n- `SetMaxCapacityAboveForecastCapacity` - AWS Auto Scaling can scale resource capacity higher than the maximum capacity by a specified buffer value. The intention is to give the target tracking scaling policy extra capacity if unexpected traffic occurs.\\n\\nValid only when configuring predictive scaling.","PredictiveScalingMaxCapacityBuffer":"The size of the capacity buffer to use when the forecast capacity is close to or exceeds the maximum capacity. The value is specified as a percentage relative to the forecast capacity. For example, if the buffer is 10, this means a 10 percent buffer. With a 10 percent buffer, if the forecast capacity is 50, and the maximum capacity is 40, then the effective maximum capacity is 55.\\n\\nValid only when configuring predictive scaling. Required if *PredictiveScalingMaxCapacityBehavior* is set to `SetMaxCapacityAboveForecastCapacity` , and cannot be used otherwise.\\n\\nThe range is 1-100.","PredictiveScalingMode":"The predictive scaling mode. The default value is `ForecastAndScale` . Otherwise, AWS Auto Scaling forecasts capacity but does not apply any scheduled scaling actions based on the capacity forecast.","ResourceId":"The ID of the resource. This string consists of the resource type and unique identifier.\\n\\n- Auto Scaling group - The resource type is `autoScalingGroup` and the unique identifier is the name of the Auto Scaling group. Example: `autoScalingGroup/my-asg` .\\n- ECS service - The resource type is `service` and the unique identifier is the cluster name and service name. Example: `service/default/sample-webapp` .\\n- Spot Fleet request - The resource type is `spot-fleet-request` and the unique identifier is the Spot Fleet request ID. Example: `spot-fleet-request/sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE` .\\n- DynamoDB table - The resource type is `table` and the unique identifier is the resource ID. Example: `table/my-table` .\\n- DynamoDB global secondary index - The resource type is `index` and the unique identifier is the resource ID. Example: `table/my-table/index/my-table-index` .\\n- Aurora DB cluster - The resource type is `cluster` and the unique identifier is the cluster name. Example: `cluster:my-db-cluster` .","ScalableDimension":"The scalable dimension associated with the resource.\\n\\n- `autoscaling:autoScalingGroup:DesiredCapacity` - The desired capacity of an Auto Scaling group.\\n- `ecs:service:DesiredCount` - The desired task count of an ECS service.\\n- `ec2:spot-fleet-request:TargetCapacity` - The target capacity of a Spot Fleet request.\\n- `dynamodb:table:ReadCapacityUnits` - The provisioned read capacity for a DynamoDB table.\\n- `dynamodb:table:WriteCapacityUnits` - The provisioned write capacity for a DynamoDB table.\\n- `dynamodb:index:ReadCapacityUnits` - The provisioned read capacity for a DynamoDB global secondary index.\\n- `dynamodb:index:WriteCapacityUnits` - The provisioned write capacity for a DynamoDB global secondary index.\\n- `rds:cluster:ReadReplicaCount` - The count of Aurora Replicas in an Aurora DB cluster. Available for Aurora MySQL-compatible edition and Aurora PostgreSQL-compatible edition.","ScalingPolicyUpdateBehavior":"Controls whether your scaling policies that are external to AWS Auto Scaling are deleted and new target tracking scaling policies created. The default value is `KeepExternalPolicies` .\\n\\nValid only when configuring dynamic scaling.","ScheduledActionBufferTime":"The amount of time, in seconds, to buffer the run time of scheduled scaling actions when scaling out. For example, if the forecast says to add capacity at 10:00 AM, and the buffer time is 5 minutes, then the run time of the corresponding scheduled scaling action will be 9:55 AM. The intention is to give resources time to be provisioned. For example, it can take a few minutes to launch an EC2 instance. The actual amount of time required depends on several factors, such as the size of the instance and whether there are startup scripts to complete.\\n\\nThe value must be less than the forecast interval duration of 3600 seconds (60 minutes). The default is 300 seconds.\\n\\nValid only when configuring predictive scaling.","ServiceNamespace":"The namespace of the AWS service.","TargetTrackingConfigurations":"The target tracking configurations (up to 10). Each of these structures must specify a unique scaling metric and a target value for the metric."}},"AWS::AutoScalingPlans::ScalingPlan.TagFilter":{"attributes":{},"description":"`TagFilter` is a subproperty of [ApplicationSource](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-autoscalingplans-scalingplan-applicationsource.html) that specifies a tag for an application source to use with AWS Auto Scaling ( Auto Scaling Plans ).","properties":{"Key":"The tag key.","Values":"The tag values (0 to 20)."}},"AWS::AutoScalingPlans::ScalingPlan.TargetTrackingConfiguration":{"attributes":{},"description":"`TargetTrackingConfiguration` is a subproperty of [ScalingInstruction](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-autoscalingplans-scalingplan-scalinginstruction.html) that specifies a target tracking configuration to use with AWS Auto Scaling ( Auto Scaling Plans ).","properties":{"CustomizedScalingMetricSpecification":"A customized metric. You can specify either a predefined metric or a customized metric.","DisableScaleIn":"Indicates whether scale in by the target tracking scaling policy is disabled. If the value is `true` , scale in is disabled and the target tracking scaling policy doesn\'t remove capacity from the scalable resource. Otherwise, scale in is enabled and the target tracking scaling policy can remove capacity from the scalable resource.\\n\\nThe default value is `false` .","EstimatedInstanceWarmup":"The estimated time, in seconds, until a newly launched instance can contribute to the CloudWatch metrics. This value is used only if the resource is an Auto Scaling group.","PredefinedScalingMetricSpecification":"A predefined metric. You can specify either a predefined metric or a customized metric.","ScaleInCooldown":"The amount of time, in seconds, after a scale-in activity completes before another scale in activity can start. This value is not used if the scalable resource is an Auto Scaling group.","ScaleOutCooldown":"The amount of time, in seconds, after a scale-out activity completes before another scale-out activity can start. This value is not used if the scalable resource is an Auto Scaling group.","TargetValue":"The target value for the metric. Although this property accepts numbers of type Double, it won\'t accept values that are either too small or too large. Values must be in the range of -2^360 to 2^360."}},"AWS::Backup::BackupPlan":{"attributes":{"BackupPlanArn":"An Amazon Resource Name (ARN) that uniquely identifies a backup plan; for example, `arn:aws:backup:us-east-1:123456789012:plan:8F81F553-3A74-4A3F-B93D-B3360DC80C50` .","BackupPlanId":"Uniquely identifies a backup plan.","Ref":"`Ref` returns `BackupPlanId` .","VersionId":"Unique, randomly generated, Unicode, UTF-8 encoded strings that are at most 1,024 bytes long. Version Ids cannot be edited."},"description":"Contains an optional backup plan display name and an array of `BackupRule` objects, each of which specifies a backup rule. Each rule in a backup plan is a separate scheduled task and can back up a different selection of AWS resources.\\n\\nFor a sample AWS CloudFormation template, see the [AWS Backup Developer Guide](https://docs.aws.amazon.com/aws-backup/latest/devguide/assigning-resources.html#assigning-resources-cfn) .","properties":{"BackupPlan":"Uniquely identifies the backup plan to be associated with the selection of resources.","BackupPlanTags":"To help organize your resources, you can assign your own metadata to the resources that you create. Each tag is a key-value pair. The specified tags are assigned to all backups created with this plan."}},"AWS::Backup::BackupPlan.AdvancedBackupSettingResourceType":{"attributes":{},"description":"Specifies an object containing resource type and backup options. This is only supported for Windows VSS backups.","properties":{"BackupOptions":"The backup option for the resource. Each option is a key-value pair. This option is only available for Windows VSS backup jobs.\\n\\nValid values:\\n\\nSet to `\\"WindowsVSS\\":\\"enabled\\"` to enable the `WindowsVSS` backup option and create a Windows VSS backup.\\n\\nSet to `\\"WindowsVSS\\":\\"disabled\\"` to create a regular backup. The `WindowsVSS` option is not enabled by default.\\n\\nIf you specify an invalid option, you get an `InvalidParameterValueException` exception.\\n\\nFor more information about Windows VSS backups, see [Creating a VSS-Enabled Windows Backup](https://docs.aws.amazon.com/aws-backup/latest/devguide/windows-backups.html) .","ResourceType":"The name of a resource type. The only supported resource type is EC2."}},"AWS::Backup::BackupPlan.BackupPlanResourceType":{"attributes":{},"description":"Specifies an object containing properties used to create a backup plan.","properties":{"AdvancedBackupSettings":"A list of backup options for each resource type.","BackupPlanName":"The display name of a backup plan.","BackupPlanRule":"An array of `BackupRule` objects, each of which specifies a scheduled task that is used to back up a selection of resources."}},"AWS::Backup::BackupPlan.BackupRuleResourceType":{"attributes":{},"description":"Specifies an object containing properties used to schedule a task to back up a selection of resources.","properties":{"CompletionWindowMinutes":"A value in minutes after a backup job is successfully started before it must be completed or it is canceled by AWS Backup .","CopyActions":"An array of CopyAction objects, which contains the details of the copy operation.","EnableContinuousBackup":"Enables continuous backup and point-in-time restores (PITR).","Lifecycle":"The lifecycle defines when a protected resource is transitioned to cold storage and when it expires. AWS Backup transitions and expires backups automatically according to the lifecycle that you define.","RecoveryPointTags":"To help organize your resources, you can assign your own metadata to the resources that you create. Each tag is a key-value pair.","RuleName":"A display name for a backup rule.","ScheduleExpression":"A CRON expression specifying when AWS Backup initiates a backup job.","StartWindowMinutes":"An optional value that specifies a period of time in minutes after a backup is scheduled before a job is canceled if it doesn\'t start successfully.\\n\\nIf this value is included, it must be at least 60 minutes to avoid errors.","TargetBackupVault":"The name of a logical container where backups are stored. Backup vaults are identified by names that are unique to the account used to create them and the AWS Region where they are created. They consist of letters, numbers, and hyphens."}},"AWS::Backup::BackupPlan.CopyActionResourceType":{"attributes":{},"description":"Copies backups created by a backup rule to another vault.","properties":{"DestinationBackupVaultArn":"An Amazon Resource Name (ARN) that uniquely identifies the destination backup vault for the copied backup. For example, `arn:aws:backup:us-east-1:123456789012:vault:aBackupVault.`","Lifecycle":"Defines when a protected resource is transitioned to cold storage and when it expires. AWS Backup transitions and expires backups automatically according to the lifecycle that you define. If you do not specify a lifecycle, AWS Backup applies the lifecycle policy of the source backup to the destination backup.\\n\\nBackups transitioned to cold storage must be stored in cold storage for a minimum of 90 days."}},"AWS::Backup::BackupPlan.LifecycleResourceType":{"attributes":{},"description":"Specifies an object containing an array of `Transition` objects that determine how long in days before a recovery point transitions to cold storage or is deleted.","properties":{"DeleteAfterDays":"Specifies the number of days after creation that a recovery point is deleted. Must be greater than `MoveToColdStorageAfterDays` .","MoveToColdStorageAfterDays":"Specifies the number of days after creation that a recovery point is moved to cold storage."}},"AWS::Backup::BackupSelection":{"attributes":{"BackupPlanId":"Uniquely identifies a backup plan.","Id":"Uniquely identifies the backup selection.","Ref":"`Ref` returns `BackupSelectionId` .","SelectionId":"Uniquely identifies a request to assign a set of resources to a backup plan."},"description":"Specifies a set of resources to assign to a backup plan.\\n\\nFor a sample AWS CloudFormation template, see the [AWS Backup Developer Guide](https://docs.aws.amazon.com/aws-backup/latest/devguide/assigning-resources.html#assigning-resources-cfn) .","properties":{"BackupPlanId":"Uniquely identifies a backup plan.","BackupSelection":"Specifies the body of a request to assign a set of resources to a backup plan.\\n\\nIt includes an array of resources, an optional array of patterns to exclude resources, an optional role to provide access to the AWS service the resource belongs to, and an optional array of tags used to identify a set of resources."}},"AWS::Backup::BackupSelection.BackupSelectionResourceType":{"attributes":{},"description":"Specifies an object containing properties used to assign a set of resources to a backup plan.","properties":{"Conditions":"A list of conditions that you define to assign resources to your backup plans using tags. For example, `\\"StringEquals\\": { \\"ConditionKey\\": \\"aws:ResourceTag/CreatedByCryo\\", \\"ConditionValue\\": \\"true\\" },` . Condition operators are case sensitive.\\n\\n`Conditions` differs from `ListOfTags` as follows:\\n\\n- When you specify more than one condition, you only assign the resources that match ALL conditions (using AND logic).\\n- `Conditions` supports `StringEquals` , `StringLike` , `StringNotEquals` , and `StringNotLike` . `ListOfTags` only supports `StringEquals` .","IamRoleArn":"The ARN of the IAM role that AWS Backup uses to authenticate when backing up the target resource; for example, `arn:aws:iam::123456789012:role/S3Access` .","ListOfTags":"A list of conditions that you define to assign resources to your backup plans using tags. For example, `\\"StringEquals\\": { \\"ConditionKey\\": \\"aws:ResourceTag/CreatedByCryo\\", \\"ConditionValue\\": \\"true\\" },` . Condition operators are case sensitive.\\n\\n`ListOfTags` differs from `Conditions` as follows:\\n\\n- When you specify more than one condition, you assign all resources that match AT LEAST ONE condition (using OR logic).\\n- `ListOfTags` only supports `StringEquals` . `Conditions` supports `StringEquals` , `StringLike` , `StringNotEquals` , and `StringNotLike` .","NotResources":"A list of Amazon Resource Names (ARNs) to exclude from a backup plan. The maximum number of ARNs is 500 without wildcards, or 30 ARNs with wildcards.\\n\\nIf you need to exclude many resources from a backup plan, consider a different resource selection strategy, such as assigning only one or a few resource types or refining your resource selection using tags.","Resources":"An array of strings that contain Amazon Resource Names (ARNs) of resources to assign to a backup plan.","SelectionName":"The display name of a resource selection document."}},"AWS::Backup::BackupSelection.ConditionParameter":{"attributes":{},"description":"Includes information about tags you define to assign tagged resources to a backup plan.","properties":{"ConditionKey":"The key in a key-value pair. For example, in the tag `Department: Accounting` , `Department` is the key.","ConditionValue":"The value in a key-value pair. For example, in the tag `Department: Accounting` , `Accounting` is the value."}},"AWS::Backup::BackupSelection.ConditionResourceType":{"attributes":{},"description":"Specifies an object that contains an array of triplets made up of a condition type (such as `STRINGEQUALS` ), a key, and a value. Conditions are used to filter resources in a selection that is assigned to a backup plan.","properties":{"ConditionKey":"The key in a key-value pair. For example, in `\\"Department\\": \\"accounting\\"` , `\\"Department\\"` is the key.","ConditionType":"An operation, such as `STRINGEQUALS` , that is applied to a key-value pair used to filter resources in a selection.","ConditionValue":"The value in a key-value pair. For example, in `\\"Department\\": \\"accounting\\"` , `\\"accounting\\"` is the value."}},"AWS::Backup::BackupSelection.Conditions":{"attributes":{},"description":"Contains information about which resources to include or exclude from a backup plan using their tags. Conditions are case sensitive.","properties":{"StringEquals":"Filters the values of your tagged resources for only those resources that you tagged with the same value. Also called \\"exact matching.\\"","StringLike":"Filters the values of your tagged resources for matching tag values with the use of a wildcard character (*) anywhere in the string. For example, \\"prod*\\" or \\"*rod*\\" matches the tag value \\"production\\".","StringNotEquals":"Filters the values of your tagged resources for only those resources that you tagged that do not have the same value. Also called \\"negated matching.\\"","StringNotLike":"Filters the values of your tagged resources for non-matching tag values with the use of a wildcard character (*) anywhere in the string."}},"AWS::Backup::BackupVault":{"attributes":{"BackupVaultArn":"An Amazon Resource Name (ARN) that uniquely identifies a backup vault; for example, `arn:aws:backup:us-east-1:123456789012:backup-vault:aBackupVault` .","BackupVaultName":"The name of a logical container where backups are stored. Backup vaults are identified by names that are unique to the account used to create them and the Region where they are created. They consist of lowercase and uppercase letters, numbers, and hyphens.","Ref":"`Ref` returns `BackupVaultName` ."},"description":"Creates a logical container where backups are stored. A `CreateBackupVault` request includes a name, optionally one or more resource tags, an encryption key, and a request ID.\\n\\nDo not include sensitive data, such as passport numbers, in the name of a backup vault.\\n\\nFor a sample AWS CloudFormation template, see the [AWS Backup Developer Guide](https://docs.aws.amazon.com/aws-backup/latest/devguide/assigning-resources.html#assigning-resources-cfn) .","properties":{"AccessPolicy":"A resource-based policy that is used to manage access permissions on the target backup vault.","BackupVaultName":"The name of a logical container where backups are stored. Backup vaults are identified by names that are unique to the account used to create them and the AWS Region where they are created. They consist of lowercase letters, numbers, and hyphens.","BackupVaultTags":"Metadata that you can assign to help organize the resources that you create. Each tag is a key-value pair.","EncryptionKeyArn":"A server-side encryption key you can specify to encrypt your backups from services that support full AWS Backup management; for example, `arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab` . If you specify a key, you must specify its ARN, not its alias. If you do not specify a key, AWS Backup creates a KMS key for you by default.\\n\\nTo learn which AWS Backup services support full AWS Backup management and how AWS Backup handles encryption for backups from services that do not yet support full AWS Backup , see [Encryption for backups in AWS Backup](https://docs.aws.amazon.com/aws-backup/latest/devguide/encryption.html)","LockConfiguration":"Configuration for [AWS Backup Vault Lock](https://docs.aws.amazon.com/aws-backup/latest/devguide/vault-lock.html) .","Notifications":"The SNS event notifications for the specified backup vault."}},"AWS::Backup::BackupVault.LockConfigurationType":{"attributes":{},"description":"The `LockConfigurationType` property type specifies configuration for [AWS Backup Vault Lock](https://docs.aws.amazon.com/aws-backup/latest/devguide/vault-lock.html) .","properties":{"ChangeableForDays":"The AWS Backup Vault Lock configuration that specifies the number of days before the lock date. For example, setting `ChangeableForDays` to 30 on Jan. 1, 2022 at 8pm UTC will set the lock date to Jan. 31, 2022 at 8pm UTC.\\n\\nAWS Backup enforces a 72-hour cooling-off period before Vault Lock takes effect and becomes immutable. Therefore, you must set `ChangeableForDays` to 3 or greater.\\n\\nBefore the lock date, you can delete Vault Lock from the vault using `DeleteBackupVaultLockConfiguration` or change the Vault Lock configuration using `PutBackupVaultLockConfiguration` . On and after the lock date, the Vault Lock becomes immutable and cannot be changed or deleted.\\n\\nIf this parameter is not specified, you can delete Vault Lock from the vault using `DeleteBackupVaultLockConfiguration` or change the Vault Lock configuration using `PutBackupVaultLockConfiguration` at any time.","MaxRetentionDays":"The AWS Backup Vault Lock configuration that specifies the maximum retention period that the vault retains its recovery points. This setting can be useful if, for example, your organization\'s policies require you to destroy certain data after retaining it for four years (1460 days).\\n\\nIf this parameter is not included, Vault Lock does not enforce a maximum retention period on the recovery points in the vault. If this parameter is included without a value, Vault Lock will not enforce a maximum retention period.\\n\\nIf this parameter is specified, any backup or copy job to the vault must have a lifecycle policy with a retention period equal to or shorter than the maximum retention period. If the job\'s retention period is longer than that maximum retention period, then the vault fails the backup or copy job, and you should either modify your lifecycle settings or use a different vault. Recovery points already saved in the vault prior to Vault Lock are not affected.","MinRetentionDays":"The AWS Backup Vault Lock configuration that specifies the minimum retention period that the vault retains its recovery points. This setting can be useful if, for example, your organization\'s policies require you to retain certain data for at least seven years (2555 days).\\n\\nIf this parameter is not specified, Vault Lock will not enforce a minimum retention period.\\n\\nIf this parameter is specified, any backup or copy job to the vault must have a lifecycle policy with a retention period equal to or longer than the minimum retention period. If the job\'s retention period is shorter than that minimum retention period, then the vault fails that backup or copy job, and you should either modify your lifecycle settings or use a different vault. Recovery points already saved in the vault prior to Vault Lock are not affected."}},"AWS::Backup::BackupVault.NotificationObjectType":{"attributes":{},"description":"Specifies an object containing SNS event notification properties for the target backup vault.","properties":{"BackupVaultEvents":"An array of events that indicate the status of jobs to back up resources to the backup vault. For valid events, see [BackupVaultEvents](https://docs.aws.amazon.com/aws-backup/latest/devguide/API_PutBackupVaultNotifications.html#API_PutBackupVaultNotifications_RequestSyntax) in the *AWS Backup API Guide* .","SNSTopicArn":"An ARN that uniquely identifies an Amazon Simple Notification Service (Amazon SNS) topic; for example, `arn:aws:sns:us-west-2:111122223333:MyTopic` ."}},"AWS::Backup::Framework":{"attributes":{"CreationTime":"The UTC time when you created your framework.","DeploymentStatus":"Depolyment status refers to whether your framework has completed deployment. This status is usually `Completed` , but might also be `Create in progress` or another status. For a list of statuses, see [Framework compliance status](https://docs.aws.amazon.com/aws-backup/latest/devguide/viewing-frameworks.html) in the *Developer Guide* .","FrameworkArn":"The Amazon Resource Name (ARN) of your framework.","FrameworkStatus":"Framework status refers to whether you have turned on resource tracking for all of your resources. This status is `Active` when you turn on all resources the framework evaluates. For other statuses and steps to correct them, see [Framework compliance status](https://docs.aws.amazon.com/aws-backup/latest/devguide/viewing-frameworks.html) in the *Developer Guide* .","Ref":""},"description":"Creates a framework with one or more controls. A framework is a collection of controls that you can use to evaluate your backup practices. By using pre-built customizable controls to define your policies, you can evaluate whether your backup practices comply with your policies and which resources are not yet in compliance.\\n\\nFor a sample AWS CloudFormation template, see the [AWS Backup Developer Guide](https://docs.aws.amazon.com/aws-backup/latest/devguide/bam-cfn-integration.html#bam-cfn-frameworks-template) .","properties":{"FrameworkControls":"Contains detailed information about all of the controls of a framework. Each framework must contain at least one control.","FrameworkDescription":"An optional description of the framework with a maximum 1,024 characters.","FrameworkName":"The unique name of a framework. This name is between 1 and 256 characters, starting with a letter, and consisting of letters (a-z, A-Z), numbers (0-9), and underscores (_).","FrameworkTags":"A list of tags with which to tag your framework."}},"AWS::Backup::Framework.ControlInputParameter":{"attributes":{},"description":"A list of parameters for a control. A control can have zero, one, or more than one parameter. An example of a control with two parameters is: \\"backup plan frequency is at least `daily` and the retention period is at least `1 year` \\". The first parameter is `daily` . The second parameter is `1 year` .","properties":{"ParameterName":"The name of a parameter, for example, `BackupPlanFrequency` .","ParameterValue":"The value of parameter, for example, `hourly` ."}},"AWS::Backup::Framework.ControlScope":{"attributes":{},"description":"A framework consists of one or more controls. Each control has its own control scope. The control scope can include one or more resource types, a combination of a tag key and value, or a combination of one resource type and one resource ID. If no scope is specified, evaluations for the rule are triggered when any resource in your recording group changes in configuration.\\n\\n> To set a control scope that includes all of a particular resource, leave the `ControlScope` empty or do not pass it when calling `CreateFramework` .","properties":{"ComplianceResourceIds":"The ID of the only AWS resource that you want your control scope to contain.","ComplianceResourceTypes":"Describes whether the control scope includes one or more types of resources, such as `EFS` or `RDS` .","Tags":"The tag key-value pair applied to those AWS resources that you want to trigger an evaluation for a rule. A maximum of one key-value pair can be provided. The tag value is optional, but it cannot be an empty string. The structure to assign a tag is: `[{\\"Key\\":\\"string\\",\\"Value\\":\\"string\\"}]` ."}},"AWS::Backup::Framework.FrameworkControl":{"attributes":{},"description":"Contains detailed information about all of the controls of a framework. Each framework must contain at least one control.","properties":{"ControlInputParameters":"A list of `ParameterName` and `ParameterValue` pairs.","ControlName":"The name of a control. This name is between 1 and 256 characters.","ControlScope":"The scope of a control. The control scope defines what the control will evaluate. Three examples of control scopes are: a specific backup plan, all backup plans with a specific tag, or all backup plans. For more information, see [`ControlScope` .](https://docs.aws.amazon.com/aws-backup/latest/devguide/API_ControlScope.html)"}},"AWS::Backup::ReportPlan":{"attributes":{"Ref":"","ReportPlanArn":"The Amazon Resource Name (ARN) of your report plan."},"description":"Creates a report plan. A report plan is a document that contains information about the contents of the report and where AWS Backup will deliver it.\\n\\nIf you call `CreateReportPlan` with a plan that already exists, you receive an `AlreadyExistsException` exception.\\n\\nFor a sample AWS CloudFormation template, see the [AWS Backup Developer Guide](https://docs.aws.amazon.com/aws-backup/latest/devguide/assigning-resources.html#assigning-resources-cfn) .","properties":{"ReportDeliveryChannel":"Contains information about where and how to deliver your reports, specifically your Amazon S3 bucket name, S3 key prefix, and the formats of your reports.","ReportPlanDescription":"An optional description of the report plan with a maximum 1,024 characters.","ReportPlanName":"The unique name of the report plan. This name is between 1 and 256 characters starting with a letter, and consisting of letters (a-z, A-Z), numbers (0-9), and underscores (_).","ReportPlanTags":"A list of tags to tag your report plan.","ReportSetting":"Identifies the report template for the report. Reports are built using a report template. The report templates are:\\n\\n`RESOURCE_COMPLIANCE_REPORT | CONTROL_COMPLIANCE_REPORT | BACKUP_JOB_REPORT | COPY_JOB_REPORT | RESTORE_JOB_REPORT`\\n\\nIf the report template is `RESOURCE_COMPLIANCE_REPORT` or `CONTROL_COMPLIANCE_REPORT` , this API resource also describes the report coverage by AWS Regions and frameworks."}},"AWS::Backup::ReportPlan.ReportDeliveryChannel":{"attributes":{},"description":"Contains information from your report plan about where to deliver your reports, specifically your Amazon S3 bucket name, S3 key prefix, and the formats of your reports.","properties":{"Formats":"A list of the format of your reports: `CSV` , `JSON` , or both. If not specified, the default format is `CSV` .","S3BucketName":"The unique name of the S3 bucket that receives your reports.","S3KeyPrefix":"The prefix for where AWS Backup Audit Manager delivers your reports to Amazon S3. The prefix is this part of the following path: s3://your-bucket-name/ `prefix` /Backup/us-west-2/year/month/day/report-name. If not specified, there is no prefix."}},"AWS::Backup::ReportPlan.ReportSetting":{"attributes":{},"description":"Contains detailed information about a report setting.","properties":{"Accounts":"These are the accounts to be included in the report.","FrameworkArns":"The Amazon Resource Names (ARNs) of the frameworks a report covers.","OrganizationUnits":"These are the Organizational Units to be included in the report.","Regions":"These are the Regions to be included in the report.","ReportTemplate":"Identifies the report template for the report. Reports are built using a report template. The report templates are:\\n\\n`RESOURCE_COMPLIANCE_REPORT | CONTROL_COMPLIANCE_REPORT | BACKUP_JOB_REPORT | COPY_JOB_REPORT | RESTORE_JOB_REPORT`"}},"AWS::BackupGateway::Hypervisor":{"attributes":{"HypervisorArn":"Returns `HypervisorArn` , an Amazon Resource Name (ARN) that uniquely identifies a Hypervisor. For example: `arn:aws:backup-gateway:us-east-1:123456789012:hypervisor/hype-1234D67D`","Ref":"`Ref` returns `HypervisorArn` ."},"description":"Represents the hypervisor\'s permissions to which the gateway will connect.\\n\\nA hypervisor is hardware, software, or firmware that creates and manages virtual machines, and allocates resources to them.","properties":{"Host":"The server host of the hypervisor. This can be either an IP address or a fully-qualified domain name (FQDN).","KmsKeyArn":"The Amazon Resource Name (ARN) of the AWS Key Management Service used to encrypt the hypervisor.","LogGroupArn":"The Amazon Resource Name (ARN) of the group of gateways within the requested log.","Name":"The name of the hypervisor.","Password":"The password for the hypervisor.","Tags":"The tags of the hypervisor configuration to import.","Username":"The username for the hypervisor."}},"AWS::Batch::ComputeEnvironment":{"attributes":{"ComputeEnvironmentArn":"Returns the compute environment ARN, such as `batch: *us-east-1* : *111122223333* :compute-environment/ *ComputeEnvironmentName*` .","Ref":"`Ref` returns the compute environment ARN, such as `batch: *us-east-1* : *555555555555* :compute-environment/ *M4OnDemand*` ."},"description":"The `AWS::Batch::ComputeEnvironment` resource defines your AWS Batch compute environment. You can define `MANAGED` or `UNMANAGED` compute environments. `MANAGED` compute environments can use Amazon EC2 or AWS Fargate resources. `UNMANAGED` compute environments can only use EC2 resources. For more information, see [Compute Environments](https://docs.aws.amazon.com/batch/latest/userguide/compute_environments.html) in the ** .\\n\\nIn a managed compute environment, AWS Batch manages the capacity and instance types of the compute resources within the environment. This is based on the compute resource specification that you define or the [launch template](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-templates.html) that you specify when you create the compute environment. You can choose either to use EC2 On-Demand Instances and EC2 Spot Instances, or to use Fargate and Fargate Spot capacity in your managed compute environment. You can optionally set a maximum price so that Spot Instances only launch when the Spot Instance price is below a specified percentage of the On-Demand price.\\n\\n> Multi-node parallel jobs are not supported on Spot Instances. \\n\\nIn an unmanaged compute environment, you can manage your own EC2 compute resources and have a lot of flexibility with how you configure your compute resources. For example, you can use custom AMI. However, you need to verify that your AMI meets the Amazon ECS container instance AMI specification. For more information, see [container instance AMIs](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/container_instance_AMIs.html) in the *Amazon Elastic Container Service Developer Guide* . After you have created your unmanaged compute environment, you can use the [DescribeComputeEnvironments](https://docs.aws.amazon.com/batch/latest/APIReference/API_DescribeComputeEnvironments.html) operation to find the Amazon ECS cluster that is associated with it. Then, manually launch your container instances into that Amazon ECS cluster. For more information, see [Launching an Amazon ECS container instance](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/launch_container_instance.html) in the *Amazon Elastic Container Service Developer Guide* .\\n\\n> To create a compute environment that uses EKS resources, the caller must have permissions to call `eks:DescribeCluster` . > AWS Batch doesn\'t upgrade the AMIs in a compute environment after it\'s created except under specific conditions. For example, it doesn\'t automatically update the AMIs when a newer version of the Amazon ECS optimized AMI is available. Therefore, you\'re responsible for the management of the guest operating system (including updates and security patches) and any additional application software or utilities that you install on the compute resources. There are two ways to use a new AMI for your AWS Batch jobs. The original method is to complete these steps:\\n> \\n> - Create a new compute environment with the new AMI.\\n> - Add the compute environment to an existing job queue.\\n> - Remove the earlier compute environment from your job queue.\\n> - Delete the earlier compute environment.\\n> \\n> In April 2022, AWS Batch added enhanced support for updating compute environments. For example, the `UpdateComputeEnvironent` API lets you use the `ReplaceComputeEnvironment` property to dynamically update compute environment parameters such as the launch template or instance type without replacement. For more information, see [Updating compute environments](https://docs.aws.amazon.com/batch/latest/userguide/updating-compute-environments.html) in the *AWS Batch User Guide* .\\n> \\n> To use the enhanced updating of compute environments to update AMIs, follow these rules:\\n> \\n> - Either do not set the [ServiceRole](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-batch-computeenvironment.html#cfn-batch-computeenvironment-servicerole) property or set it to the *AWSServiceRoleForBatch* service-linked role.\\n> - Set the [AllocationStrategy](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-batch-computeenvironment-computeresources.html#cfn-batch-computeenvironment-computeresources-allocationstrategy) property to `BEST_FIT_PROGRESSIVE` or `SPOT_CAPACITY_OPTIMIZED` .\\n> - Set the [ReplaceComputeEnvironment](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-batch-computeenvironment.html#cfn-batch-computeenvironment-replacecomputeenvironment) property to `false` .\\n> \\n> > Set the `ReplaceComputeEnvironment` property to `false` if the compute environment uses the `BEST_FIT` allocation strategy. > If the `ReplaceComputeEnvironment` property is set to `false` , you might receive an error message when you update the CFN template for a compute environment. This issue occurs if the updated `desiredvcpus` value is less than the current `desiredvcpus` value. As a workaround, delete the `desiredvcpus` value from the updated template or use the `minvcpus` property to manage the number of vCPUs. For information, see [Error message when you update the `DesiredvCpus` setting](https://docs.aws.amazon.com/batch/latest/userguide/troubleshooting.html#error-desired-vcpus-update) .\\n> - Set the [UpdateToLatestImageVersion](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-batch-computeenvironment-computeresources.html#cfn-batch-computeenvironment-computeresources-updatetolatestimageversion) property to `true` . This property is used when you update a compute environment. The [UpdateToLatestImageVersion](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-batch-computeenvironment-computeresources.html#cfn-batch-computeenvironment-computeresources-updatetolatestimageversion) property is ignored when you create a compute environment.\\n> - Either do not specify an image ID in [ImageId](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-batch-computeenvironment-computeresources.html#cfn-batch-computeenvironment-computeresources-imageid) or [ImageIdOverride](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-batch-computeenvironment-ec2configurationobject.html#cfn-batch-computeenvironment-ec2configurationobject-imageidoverride) properties, or in the launch template identified by the [Launch Template](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-batch-computeenvironment-computeresources.html#cfn-batch-computeenvironment-computeresources-launchtemplate) property. In that case AWS Batch will select the latest Amazon ECS optimized AMI supported by AWS Batch at the time the infrastructure update is initiated. Alternatively you can specify the AMI ID in the `ImageId` or `ImageIdOverride` properties, or the launch template identified by the `LaunchTemplate` properties. Changing any of these properties will trigger an infrastructure update.\\n> \\n> If these rules are followed, any update that triggers an infrastructure update will cause the AMI ID to be re-selected. If the [Version](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-batch-computeenvironment-launchtemplatespecification.html#cfn-batch-computeenvironment-launchtemplatespecification-version) property of the [LaunchTemplateSpecification](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-batch-computeenvironment-launchtemplatespecification.html) is set to `$Latest` or `$Default` , the latest or default version of the launch template will be evaluated up at the time of the infrastructure update, even if the `LaunchTemplateSpecification` was not updated.","properties":{"ComputeEnvironmentName":"The name for your compute environment. It can be up to 128 characters long. It can contain uppercase and lowercase letters, numbers, hyphens (-), and underscores (_).","ComputeResources":"The ComputeResources property type specifies details of the compute resources managed by the compute environment. This parameter is required for managed compute environments. For more information, see [Compute Environments](https://docs.aws.amazon.com/batch/latest/userguide/compute_environments.html) in the ** .","EksConfiguration":"The details for the Amazon EKS cluster that supports the compute environment.","ReplaceComputeEnvironment":"Specifies whether the compute environment is replaced if an update is made that requires replacing the instances in the compute environment. The default value is `true` . To enable more properties to be updated, set this property to `false` . When changing the value of this property to `false` , do not change any other properties at the same time. If other properties are changed at the same time, and the change needs to be rolled back but it can\'t, it\'s possible for the stack to go into the `UPDATE_ROLLBACK_FAILED` state. You can\'t update a stack that is in the `UPDATE_ROLLBACK_FAILED` state. However, if you can continue to roll it back, you can return the stack to its original settings and then try to update it again. For more information, see [Continue rolling back an update](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-continueupdaterollback.html) in the *AWS CloudFormation User Guide* .\\n\\nThe properties that can\'t be changed without replacing the compute environment are in the [`ComputeResources`](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-batch-computeenvironment-computeresources.html) property type: [`AllocationStrategy`](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-batch-computeenvironment-computeresources.html#cfn-batch-computeenvironment-computeresources-allocationstrategy) , [`BidPercentage`](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-batch-computeenvironment-computeresources.html#cfn-batch-computeenvironment-computeresources-bidpercentage) , [`Ec2Configuration`](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-batch-computeenvironment-computeresources.html#cfn-batch-computeenvironment-computeresources-ec2configuration) , [`Ec2KeyPair`](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-batch-computeenvironment-computeresources.html#cfn-batch-computeenvironment-computeresources-ec2keypair) , [`Ec2KeyPair`](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-batch-computeenvironment-computeresources.html#cfn-batch-computeenvironment-computeresources-ec2keypair) , [`ImageId`](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-batch-computeenvironment-computeresources.html#cfn-batch-computeenvironment-computeresources-imageid) , [`InstanceRole`](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-batch-computeenvironment-computeresources.html#cfn-batch-computeenvironment-computeresources-instancerole) , [`InstanceTypes`](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-batch-computeenvironment-computeresources.html#cfn-batch-computeenvironment-computeresources-instancetypes) , [`LaunchTemplate`](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-batch-computeenvironment-computeresources.html#cfn-batch-computeenvironment-computeresources-launchtemplate) , [`MaxvCpus`](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-batch-computeenvironment-computeresources.html#cfn-batch-computeenvironment-computeresources-maxvcpus) , [`MinvCpus`](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-batch-computeenvironment-computeresources.html#cfn-batch-computeenvironment-computeresources-minvcpus) , [`PlacementGroup`](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-batch-computeenvironment-computeresources.html#cfn-batch-computeenvironment-computeresources-placementgroup) , [`SecurityGroupIds`](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-batch-computeenvironment-computeresources.html#cfn-batch-computeenvironment-computeresources-securitygroupids) , [`Subnets`](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-batch-computeenvironment-computeresources.html#cfn-batch-computeenvironment-computeresources-subnets) , [Tags](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-batch-computeenvironment-computeresources.html#cfn-batch-computeenvironment-computeresources-tags) , [`Type`](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-batch-computeenvironment-computeresources.html#cfn-batch-computeenvironment-computeresources-type) , and [`UpdateToLatestImageVersion`](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-batch-computeenvironment-computeresources.html#cfn-batch-computeenvironment-computeresources-updatetolatestimageversion) .","ServiceRole":"The full Amazon Resource Name (ARN) of the IAM role that allows AWS Batch to make calls to other AWS services on your behalf. For more information, see [AWS Batch service IAM role](https://docs.aws.amazon.com/batch/latest/userguide/service_IAM_role.html) in the *AWS Batch User Guide* .\\n\\n> If your account already created the AWS Batch service-linked role, that role is used by default for your compute environment unless you specify a different role here. If the AWS Batch service-linked role doesn\'t exist in your account, and no role is specified here, the service attempts to create the AWS Batch service-linked role in your account. \\n\\nIf your specified role has a path other than `/` , then you must specify either the full role ARN (recommended) or prefix the role name with the path. For example, if a role with the name `bar` has a path of `/foo/` , specify `/foo/bar` as the role name. For more information, see [Friendly names and paths](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html#identifiers-friendly-names) in the *IAM User Guide* .\\n\\n> Depending on how you created your AWS Batch service role, its ARN might contain the `service-role` path prefix. When you only specify the name of the service role, AWS Batch assumes that your ARN doesn\'t use the `service-role` path prefix. Because of this, we recommend that you specify the full ARN of your service role when you create compute environments.","State":"The state of the compute environment. If the state is `ENABLED` , then the compute environment accepts jobs from a queue and can scale out automatically based on queues.\\n\\nIf the state is `ENABLED` , then the AWS Batch scheduler can attempt to place jobs from an associated job queue on the compute resources within the environment. If the compute environment is managed, then it can scale its instances out or in automatically, based on the job queue demand.\\n\\nIf the state is `DISABLED` , then the AWS Batch scheduler doesn\'t attempt to place jobs within the environment. Jobs in a `STARTING` or `RUNNING` state continue to progress normally. Managed compute environments in the `DISABLED` state don\'t scale out.\\n\\n> Compute environments in a `DISABLED` state may continue to incur billing charges. To prevent additional charges, turn off and then delete the compute environment. For more information, see [State](https://docs.aws.amazon.com/batch/latest/userguide/compute_environment_parameters.html#compute_environment_state) in the *AWS Batch User Guide* . \\n\\nWhen an instance is idle, the instance scales down to the `minvCpus` value. However, the instance size doesn\'t change. For example, consider a `c5.8xlarge` instance with a `minvCpus` value of `4` and a `desiredvCpus` value of `36` . This instance doesn\'t scale down to a `c5.large` instance.","Tags":"The tags applied to the compute environment.","Type":"The type of the compute environment: `MANAGED` or `UNMANAGED` . For more information, see [Compute Environments](https://docs.aws.amazon.com/batch/latest/userguide/compute_environments.html) in the *AWS Batch User Guide* .","UnmanagedvCpus":"The maximum number of vCPUs for an unmanaged compute environment. This parameter is only used for fair share scheduling to reserve vCPU capacity for new share identifiers. If this parameter isn\'t provided for a fair share job queue, no vCPU capacity is reserved.\\n\\n> This parameter is only supported when the `type` parameter is set to `UNMANAGED` .","UpdatePolicy":"Specifies the infrastructure update policy for the compute environment. For more information about infrastructure updates, see [Updating compute environments](https://docs.aws.amazon.com/batch/latest/userguide/updating-compute-environments.html) in the *AWS Batch User Guide* ."}},"AWS::Batch::ComputeEnvironment.ComputeResources":{"attributes":{},"description":"Details about the compute resources managed by the compute environment. This parameter is required for managed compute environments. For more information, see [Compute Environments](https://docs.aws.amazon.com/batch/latest/userguide/compute_environments.html) in the *AWS Batch User Guide* .","properties":{"AllocationStrategy":"The allocation strategy to use for the compute resource if not enough instances of the best fitting instance type can be allocated. This might be because of availability of the instance type in the Region or [Amazon EC2 service limits](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-resource-limits.html) . For more information, see [Allocation strategies](https://docs.aws.amazon.com/batch/latest/userguide/allocation-strategies.html) in the *AWS Batch User Guide* .\\n\\nWhen updating a compute environment, changing the allocation strategy requires an infrastructure update of the compute environment. For more information, see [Updating compute environments](https://docs.aws.amazon.com/batch/latest/userguide/updating-compute-environments.html) in the *AWS Batch User Guide* . `BEST_FIT` is not supported when updating a compute environment.\\n\\n> This parameter isn\'t applicable to jobs that are running on Fargate resources, and shouldn\'t be specified. \\n\\n- **BEST_FIT (default)** - AWS Batch selects an instance type that best fits the needs of the jobs with a preference for the lowest-cost instance type. If additional instances of the selected instance type aren\'t available, AWS Batch waits for the additional instances to be available. If there aren\'t enough instances available, or if the user is reaching [Amazon EC2 service limits](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-resource-limits.html) then additional jobs aren\'t run until the currently running jobs have completed. This allocation strategy keeps costs lower but can limit scaling. If you are using Spot Fleets with `BEST_FIT` then the Spot Fleet IAM role must be specified.\\n- **BEST_FIT_PROGRESSIVE** - AWS Batch will select additional instance types that are large enough to meet the requirements of the jobs in the queue, with a preference for instance types with a lower cost per unit vCPU. If additional instances of the previously selected instance types aren\'t available, AWS Batch will select new instance types.\\n- **SPOT_CAPACITY_OPTIMIZED** - AWS Batch will select one or more instance types that are large enough to meet the requirements of the jobs in the queue, with a preference for instance types that are less likely to be interrupted. This allocation strategy is only available for Spot Instance compute resources.\\n\\nWith both `BEST_FIT_PROGRESSIVE` and `SPOT_CAPACITY_OPTIMIZED` allocation strategies using On-Demand or Spot Instances, and the `BEST_FIT` strategy using Spot Instances, AWS Batch might need to go above `maxvCpus` to meet your capacity requirements. In this event, AWS Batch never exceeds `maxvCpus` by more than a single instance.","BidPercentage":"The maximum percentage that a Spot Instance price can be when compared with the On-Demand price for that instance type before instances are launched. For example, if your maximum percentage is 20%, the Spot price must be less than 20% of the current On-Demand price for that Amazon EC2 instance. You always pay the lowest (market) price and never more than your maximum percentage. For most use cases, we recommend leaving this field empty.\\n\\nWhen updating a compute environment, changing the bid percentage requires an infrastructure update of the compute environment. For more information, see [Updating compute environments](https://docs.aws.amazon.com/batch/latest/userguide/updating-compute-environments.html) in the *AWS Batch User Guide* .\\n\\n> This parameter isn\'t applicable to jobs that are running on Fargate resources. Don\'t specify it.","DesiredvCpus":"The desired number of vCPUS in the compute environment. AWS Batch modifies this value between the minimum and maximum values based on job queue demand.\\n\\n> This parameter isn\'t applicable to jobs that are running on Fargate resources. Don\'t specify it. > AWS Batch doesn\'t support changing the desired number of vCPUs of an existing compute environment. Don\'t specify this parameter for compute environments using Amazon EKS clusters. > When you update the `desiredvCpus` setting, the value must be between the `minvCpus` and `maxvCpus` values.\\n> \\n> Additionally, the updated `desiredvCpus` value must be greater than or equal to the current `desiredvCpus` value. For more information, see [Troubleshooting AWS Batch](https://docs.aws.amazon.com/batch/latest/userguide/troubleshooting.html#error-desired-vcpus-update) in the *AWS Batch User Guide* .","Ec2Configuration":"Provides information used to select Amazon Machine Images (AMIs) for EC2 instances in the compute environment. If `Ec2Configuration` isn\'t specified, the default is `ECS_AL2` .\\n\\nWhen updating a compute environment, changing this setting requires an infrastructure update of the compute environment. For more information, see [Updating compute environments](https://docs.aws.amazon.com/batch/latest/userguide/updating-compute-environments.html) in the *AWS Batch User Guide* . To remove the EC2 configuration and any custom AMI ID specified in `imageIdOverride` , set this value to an empty string.\\n\\nOne or two values can be provided.\\n\\n> This parameter isn\'t applicable to jobs that are running on Fargate resources. Don\'t specify it.","Ec2KeyPair":"The Amazon EC2 key pair that\'s used for instances launched in the compute environment. You can use this key pair to log in to your instances with SSH. To remove the Amazon EC2 key pair, set this value to an empty string.\\n\\nWhen updating a compute environment, changing the EC2 key pair requires an infrastructure update of the compute environment. For more information, see [Updating compute environments](https://docs.aws.amazon.com/batch/latest/userguide/updating-compute-environments.html) in the *AWS Batch User Guide* .\\n\\n> This parameter isn\'t applicable to jobs that are running on Fargate resources. Don\'t specify it.","ImageId":"The Amazon Machine Image (AMI) ID used for instances launched in the compute environment. This parameter is overridden by the `imageIdOverride` member of the `Ec2Configuration` structure. To remove the custom AMI ID and use the default AMI ID, set this value to an empty string.\\n\\nWhen updating a compute environment, changing the AMI ID requires an infrastructure update of the compute environment. For more information, see [Updating compute environments](https://docs.aws.amazon.com/batch/latest/userguide/updating-compute-environments.html) in the *AWS Batch User Guide* .\\n\\n> This parameter isn\'t applicable to jobs that are running on Fargate resources. Don\'t specify it. > The AMI that you choose for a compute environment must match the architecture of the instance types that you intend to use for that compute environment. For example, if your compute environment uses A1 instance types, the compute resource AMI that you choose must support ARM instances. Amazon ECS vends both x86 and ARM versions of the Amazon ECS-optimized Amazon Linux 2 AMI. For more information, see [Amazon ECS-optimized Amazon Linux 2 AMI](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-optimized_AMI.html#ecs-optimized-ami-linux-variants.html) in the *Amazon Elastic Container Service Developer Guide* .","InstanceRole":"The Amazon ECS instance profile applied to Amazon EC2 instances in a compute environment. You can specify the short name or full Amazon Resource Name (ARN) of an instance profile. For example, `*ecsInstanceRole*` or `arn:aws:iam:: ** :instance-profile/ *ecsInstanceRole*` . For more information, see [Amazon ECS instance role](https://docs.aws.amazon.com/batch/latest/userguide/instance_IAM_role.html) in the *AWS Batch User Guide* .\\n\\nWhen updating a compute environment, changing this setting requires an infrastructure update of the compute environment. For more information, see [Updating compute environments](https://docs.aws.amazon.com/batch/latest/userguide/updating-compute-environments.html) in the *AWS Batch User Guide* .\\n\\n> This parameter isn\'t applicable to jobs that are running on Fargate resources. Don\'t specify it.","InstanceTypes":"The instances types that can be launched. You can specify instance families to launch any instance type within those families (for example, `c5` or `p3` ), or you can specify specific sizes within a family (such as `c5.8xlarge` ). You can also choose `optimal` to select instance types (from the C4, M4, and R4 instance families) that match the demand of your job queues.\\n\\nWhen updating a compute environment, changing this setting requires an infrastructure update of the compute environment. For more information, see [Updating compute environments](https://docs.aws.amazon.com/batch/latest/userguide/updating-compute-environments.html) in the *AWS Batch User Guide* .\\n\\n> This parameter isn\'t applicable to jobs that are running on Fargate resources. Don\'t specify it. > When you create a compute environment, the instance types that you select for the compute environment must share the same architecture. For example, you can\'t mix x86 and ARM instances in the same compute environment. > Currently, `optimal` uses instance types from the C4, M4, and R4 instance families. In Regions that don\'t have instance types from those instance families, instance types from the C5, M5, and R5 instance families are used.","LaunchTemplate":"The launch template to use for your compute resources. Any other compute resource parameters that you specify in a [CreateComputeEnvironment](https://docs.aws.amazon.com/batch/latest/APIReference/API_CreateComputeEnvironment.html) API operation override the same parameters in the launch template. You must specify either the launch template ID or launch template name in the request, but not both. For more information, see [Launch Template Support](https://docs.aws.amazon.com/batch/latest/userguide/launch-templates.html) in the ** . Removing the launch template from a compute environment will not remove the AMI specified in the launch template. In order to update the AMI specified in a launch template, the `updateToLatestImageVersion` parameter must be set to `true` .\\n\\nWhen updating a compute environment, changing the launch template requires an infrastructure update of the compute environment. For more information, see [Updating compute environments](https://docs.aws.amazon.com/batch/latest/userguide/updating-compute-environments.html) in the ** .\\n\\n> This parameter isn\'t applicable to jobs running on Fargate resources, and shouldn\'t be specified.","MaxvCpus":"The maximum number of Amazon EC2 vCPUs that an environment can reach.\\n\\n> With both `BEST_FIT_PROGRESSIVE` and `SPOT_CAPACITY_OPTIMIZED` allocation strategies using On-Demand or Spot Instances, and the `BEST_FIT` strategy using Spot Instances, AWS Batch might need to exceed `maxvCpus` to meet your capacity requirements. In this event, AWS Batch never exceeds `maxvCpus` by more than a single instance. That is, no more than a single instance from among those specified in your compute environment.","MinvCpus":"The minimum number of vCPUs that an environment should maintain (even if the compute environment is `DISABLED` ).\\n\\n> This parameter isn\'t applicable to jobs that are running on Fargate resources. Don\'t specify it.","PlacementGroup":"The Amazon EC2 placement group to associate with your compute resources. If you intend to submit multi-node parallel jobs to your compute environment, you should consider creating a cluster placement group and associate it with your compute resources. This keeps your multi-node parallel job on a logical grouping of instances within a single Availability Zone with high network flow potential. For more information, see [Placement groups](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/placement-groups.html) in the *Amazon EC2 User Guide for Linux Instances* .\\n\\nWhen updating a compute environment, changing the placement group requires an infrastructure update of the compute environment. For more information, see [Updating compute environments](https://docs.aws.amazon.com/batch/latest/userguide/updating-compute-environments.html) in the *AWS Batch User Guide* .\\n\\n> This parameter isn\'t applicable to jobs that are running on Fargate resources. Don\'t specify it.","SecurityGroupIds":"The Amazon EC2 security groups that are associated with instances launched in the compute environment. This parameter is required for Fargate compute resources, where it can contain up to 5 security groups. For Fargate compute resources, providing an empty list is handled as if this parameter wasn\'t specified and no change is made. For EC2 compute resources, providing an empty list removes the security groups from the compute resource.\\n\\nWhen updating a compute environment, changing the EC2 security groups requires an infrastructure update of the compute environment. For more information, see [Updating compute environments](https://docs.aws.amazon.com/batch/latest/userguide/updating-compute-environments.html) in the *AWS Batch User Guide* .","SpotIamFleetRole":"The Amazon Resource Name (ARN) of the Amazon EC2 Spot Fleet IAM role applied to a `SPOT` compute environment. This role is required if the allocation strategy set to `BEST_FIT` or if the allocation strategy isn\'t specified. For more information, see [Amazon EC2 spot fleet role](https://docs.aws.amazon.com/batch/latest/userguide/spot_fleet_IAM_role.html) in the *AWS Batch User Guide* .\\n\\n> This parameter isn\'t applicable to jobs that are running on Fargate resources. Don\'t specify it. > To tag your Spot Instances on creation, the Spot Fleet IAM role specified here must use the newer *AmazonEC2SpotFleetTaggingRole* managed policy. The previously recommended *AmazonEC2SpotFleetRole* managed policy doesn\'t have the required permissions to tag Spot Instances. For more information, see [Spot instances not tagged on creation](https://docs.aws.amazon.com/batch/latest/userguide/troubleshooting.html#spot-instance-no-tag) in the *AWS Batch User Guide* .","Subnets":"The VPC subnets where the compute resources are launched. Fargate compute resources can contain up to 16 subnets. For Fargate compute resources, providing an empty list will be handled as if this parameter wasn\'t specified and no change is made. For EC2 compute resources, providing an empty list removes the VPC subnets from the compute resource. For more information, see [VPCs and subnets](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Subnets.html) in the *Amazon VPC User Guide* .\\n\\nWhen updating a compute environment, changing the VPC subnets requires an infrastructure update of the compute environment. For more information, see [Updating compute environments](https://docs.aws.amazon.com/batch/latest/userguide/updating-compute-environments.html) in the *AWS Batch User Guide* .\\n\\n> AWS Batch on Amazon EC2 and AWS Batch on Amazon EKS support Local Zones. For more information, see [Local Zones](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-regions-availability-zones.html#concepts-local-zones) in the *Amazon EC2 User Guide for Linux Instances* , [Amazon EKS and AWS Local Zones](https://docs.aws.amazon.com/eks/latest/userguide/local-zones.html) in the *Amazon EKS User Guide* and [Amazon ECS clusters in Local Zones, Wavelength Zones, and AWS Outposts](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/cluster-regions-zones.html#clusters-local-zones) in the *Amazon ECS Developer Guide* .\\n> \\n> AWS Batch on Fargate doesn\'t currently support Local Zones.","Tags":"Key-value pair tags to be applied to EC2 resources that are launched in the compute environment. For AWS Batch , these take the form of `\\"String1\\": \\"String2\\"` , where `String1` is the tag key and `String2` is the tag value-for example, `{ \\"Name\\": \\"Batch Instance - C4OnDemand\\" }` . This is helpful for recognizing your Batch instances in the Amazon EC2 console. These tags aren\'t seen when using the AWS Batch `ListTagsForResource` API operation.\\n\\nWhen updating a compute environment, changing this setting requires an infrastructure update of the compute environment. For more information, see [Updating compute environments](https://docs.aws.amazon.com/batch/latest/userguide/updating-compute-environments.html) in the *AWS Batch User Guide* .\\n\\n> This parameter isn\'t applicable to jobs that are running on Fargate resources. Don\'t specify it.","Type":"The type of compute environment: `EC2` , `SPOT` , `FARGATE` , or `FARGATE_SPOT` . For more information, see [Compute environments](https://docs.aws.amazon.com/batch/latest/userguide/compute_environments.html) in the *AWS Batch User Guide* .\\n\\nIf you choose `SPOT` , you must also specify an Amazon EC2 Spot Fleet role with the `spotIamFleetRole` parameter. For more information, see [Amazon EC2 spot fleet role](https://docs.aws.amazon.com/batch/latest/userguide/spot_fleet_IAM_role.html) in the *AWS Batch User Guide* .\\n\\nWhen updating compute environment, changing the type of a compute environment requires an infrastructure update of the compute environment. For more information, see [Updating compute environments](https://docs.aws.amazon.com/batch/latest/userguide/updating-compute-environments.html) in the *AWS Batch User Guide* .\\n\\nWhen updating the type of a compute environment, changing between `EC2` and `SPOT` or between `FARGATE` and `FARGATE_SPOT` will initiate an infrastructure update, but if you switch between `EC2` and `FARGATE` , AWS CloudFormation will create a new compute environment.","UpdateToLatestImageVersion":"Specifies whether the AMI ID is updated to the latest one that\'s supported by AWS Batch when the compute environment has an infrastructure update. The default value is `false` .\\n\\n> An AMI ID can either be specified in the `imageId` or `imageIdOverride` parameters or be determined by the launch template that\'s specified in the `launchTemplate` parameter. If an AMI ID is specified any of these ways, this parameter is ignored. For more information about to update AMI IDs during an infrastructure update, see [Updating the AMI ID](https://docs.aws.amazon.com/batch/latest/userguide/updating-compute-environments.html#updating-compute-environments-ami) in the *AWS Batch User Guide* . \\n\\nWhen updating a compute environment, changing this setting requires an infrastructure update of the compute environment. For more information, see [Updating compute environments](https://docs.aws.amazon.com/batch/latest/userguide/updating-compute-environments.html) in the *AWS Batch User Guide* ."}},"AWS::Batch::ComputeEnvironment.Ec2ConfigurationObject":{"attributes":{},"description":"Provides information used to select Amazon Machine Images (AMIs) for instances in the compute environment. If `Ec2Configuration` isn\'t specified, the default is `ECS_AL2` ( [Amazon Linux 2](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-optimized_AMI.html#al2ami) ).\\n\\n> This object isn\'t applicable to jobs that are running on Fargate resources.","properties":{"ImageIdOverride":"The AMI ID used for instances launched in the compute environment that match the image type. This setting overrides the `imageId` set in the `computeResource` object.\\n\\n> The AMI that you choose for a compute environment must match the architecture of the instance types that you intend to use for that compute environment. For example, if your compute environment uses A1 instance types, the compute resource AMI that you choose must support ARM instances. Amazon ECS vends both x86 and ARM versions of the Amazon ECS-optimized Amazon Linux 2 AMI. For more information, see [Amazon ECS-optimized Amazon Linux 2 AMI](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-optimized_AMI.html#ecs-optimized-ami-linux-variants.html) in the *Amazon Elastic Container Service Developer Guide* .","ImageKubernetesVersion":"The Kubernetes version for the compute environment. If you don\'t specify a value, the latest version that AWS Batch supports is used.","ImageType":"The image type to match with the instance type to select an AMI. The supported values are different for `ECS` and `EKS` resources.\\n\\n- **ECS** - If the `imageIdOverride` parameter isn\'t specified, then a recent [Amazon ECS-optimized Amazon Linux 2 AMI](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-optimized_AMI.html#al2ami) ( `ECS_AL2` ) is used. If a new image type is specified in an update, but neither an `imageId` nor a `imageIdOverride` parameter is specified, then the latest Amazon ECS optimized AMI for that image type that\'s supported by AWS Batch is used.\\n\\n- **ECS_AL2** - [Amazon Linux 2](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-optimized_AMI.html#al2ami) : Default for all non-GPU instance families.\\n- **ECS_AL2_NVIDIA** - [Amazon Linux 2 (GPU)](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-optimized_AMI.html#gpuami) : Default for all GPU instance families (for example `P4` and `G4` ) and can be used for all non AWS Graviton-based instance types.\\n- **ECS_AL1** - [Amazon Linux](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-optimized_AMI.html#alami) . Amazon Linux has reached the end-of-life of standard support. For more information, see [Amazon Linux AMI](https://docs.aws.amazon.com/amazon-linux-ami/) .\\n- **EKS** - If the `imageIdOverride` parameter isn\'t specified, then a recent [Amazon EKS-optimized Amazon Linux AMI](https://docs.aws.amazon.com/eks/latest/userguide/eks-optimized-ami.html) ( `EKS_AL2` ) is used. If a new image type is specified in an update, but neither an `imageId` nor a `imageIdOverride` parameter is specified, then the latest Amazon EKS optimized AMI for that image type that AWS Batch supports is used.\\n\\n- **EKS_AL2** - [Amazon Linux 2](https://docs.aws.amazon.com/eks/latest/userguide/eks-optimized-ami.html) : Default for all non-GPU instance families.\\n- **EKS_AL2_NVIDIA** - [Amazon Linux 2 (accelerated)](https://docs.aws.amazon.com/eks/latest/userguide/eks-optimized-ami.html) : Default for all GPU instance families (for example, `P4` and `G4` ) and can be used for all non AWS Graviton-based instance types."}},"AWS::Batch::ComputeEnvironment.EksConfiguration":{"attributes":{},"description":"Configuration for the Amazon EKS cluster that supports the AWS Batch compute environment. The cluster must exist before the compute environment can be created.","properties":{"EksClusterArn":"The Amazon Resource Name (ARN) of the Amazon EKS cluster. An example is `arn: *aws* :eks: *us-east-1* : *123456789012* :cluster/ *ClusterForBatch*` .","KubernetesNamespace":"The namespace of the Amazon EKS cluster. AWS Batch manages pods in this namespace. The value can\'t left empty or null. It must be fewer than 64 characters long, can\'t be set to `default` , can\'t start with \\" `kube-` ,\\" and must match this regular expression: `^[a-z0-9]([-a-z0-9]*[a-z0-9])?$` . For more information, see [Namespaces](https://docs.aws.amazon.com/https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/) in the Kubernetes documentation."}},"AWS::Batch::ComputeEnvironment.LaunchTemplateSpecification":{"attributes":{},"description":"An object that represents a launch template that\'s associated with a compute resource. You must specify either the launch template ID or launch template name in the request, but not both.\\n\\nIf security groups are specified using both the `securityGroupIds` parameter of `CreateComputeEnvironment` and the launch template, the values in the `securityGroupIds` parameter of `CreateComputeEnvironment` will be used.\\n\\n> This object isn\'t applicable to jobs that are running on Fargate resources.","properties":{"LaunchTemplateId":"The ID of the launch template.","LaunchTemplateName":"The name of the launch template.","Version":"The version number of the launch template, `$Latest` , or `$Default` .\\n\\nIf the value is `$Latest` , the latest version of the launch template is used. If the value is `$Default` , the default version of the launch template is used.\\n\\n> If the AMI ID that\'s used in a compute environment is from the launch template, the AMI isn\'t changed when the compute environment is updated. It\'s only changed if the `updateToLatestImageVersion` parameter for the compute environment is set to `true` . During an infrastructure update, if either `$Latest` or `$Default` is specified, AWS Batch re-evaluates the launch template version, and it might use a different version of the launch template. This is the case even if the launch template isn\'t specified in the update. When updating a compute environment, changing the launch template requires an infrastructure update of the compute environment. For more information, see [Updating compute environments](https://docs.aws.amazon.com/batch/latest/userguide/updating-compute-environments.html) in the *AWS Batch User Guide* . \\n\\nDefault: `$Default` ."}},"AWS::Batch::ComputeEnvironment.UpdatePolicy":{"attributes":{},"description":"Specifies the infrastructure update policy for the compute environment. For more information about infrastructure updates, see [Updating compute environments](https://docs.aws.amazon.com/batch/latest/userguide/updating-compute-environments.html) in the *AWS Batch User Guide* .","properties":{"JobExecutionTimeoutMinutes":"Specifies the job timeout (in minutes) when the compute environment infrastructure is updated. The default value is 30.","TerminateJobsOnUpdate":"Specifies whether jobs are automatically terminated when the computer environment infrastructure is updated. The default value is `false` ."}},"AWS::Batch::JobDefinition":{"attributes":{"Ref":"`Ref` returns the job definition ARN, such as `batch: *us-east-1* : *111122223333* :job-definition/ *test-gpu* : *2*` ."},"description":"The `AWS::Batch::JobDefinition` resource specifies the parameters for an AWS Batch job definition. For more information, see [Job Definitions](https://docs.aws.amazon.com/batch/latest/userguide/job_definitions.html) in the ** .","properties":{"ContainerProperties":"An object with various properties specific to Amazon ECS based jobs. Valid values are `containerProperties` , `eksProperties` , and `nodeProperties` . Only one can be specified.","EksProperties":"An object with various properties that are specific to Amazon EKS based jobs. Valid values are `containerProperties` , `eksProperties` , and `nodeProperties` . Only one can be specified.","JobDefinitionName":"The name of the job definition.","NodeProperties":"An object with various properties that are specific to multi-node parallel jobs. Valid values are `containerProperties` , `eksProperties` , and `nodeProperties` . Only one can be specified.\\n\\n> If the job runs on Fargate resources, don\'t specify `nodeProperties` . Use `containerProperties` instead.","Parameters":"Default parameters or parameter substitution placeholders that are set in the job definition. Parameters are specified as a key-value pair mapping. Parameters in a `SubmitJob` request override any corresponding parameter defaults from the job definition. For more information about specifying parameters, see [Job definition parameters](https://docs.aws.amazon.com/batch/latest/userguide/job_definition_parameters.html) in the *AWS Batch User Guide* .","PlatformCapabilities":"The platform capabilities required by the job definition. If no value is specified, it defaults to `EC2` . Jobs run on Fargate resources specify `FARGATE` .","PropagateTags":"Specifies whether to propagate the tags from the job or job definition to the corresponding Amazon ECS task. If no value is specified, the tags aren\'t propagated. Tags can only be propagated to the tasks when the tasks are created. For tags with the same name, job tags are given priority over job definitions tags. If the total number of combined tags from the job and job definition is over 50, the job is moved to the `FAILED` state.","RetryStrategy":"The retry strategy to use for failed jobs that are submitted with this job definition.","SchedulingPriority":"The scheduling priority of the job definition. This only affects jobs in job queues with a fair share policy. Jobs with a higher scheduling priority are scheduled before jobs with a lower scheduling priority.","Tags":"The tags that are applied to the job definition.","Timeout":"The timeout time for jobs that are submitted with this job definition. After the amount of time you specify passes, AWS Batch terminates your jobs if they aren\'t finished.","Type":"The type of job definition. For more information about multi-node parallel jobs, see [Creating a multi-node parallel job definition](https://docs.aws.amazon.com/batch/latest/userguide/multi-node-job-def.html) in the *AWS Batch User Guide* .\\n\\n> If the job is run on Fargate resources, then `multinode` isn\'t supported."}},"AWS::Batch::JobDefinition.AuthorizationConfig":{"attributes":{},"description":"The authorization configuration details for the Amazon EFS file system.","properties":{"AccessPointId":"The Amazon EFS access point ID to use. If an access point is specified, the root directory value specified in the `EFSVolumeConfiguration` must either be omitted or set to `/` which enforces the path set on the EFS access point. If an access point is used, transit encryption must be enabled in the `EFSVolumeConfiguration` . For more information, see [Working with Amazon EFS access points](https://docs.aws.amazon.com/efs/latest/ug/efs-access-points.html) in the *Amazon Elastic File System User Guide* .","Iam":"Whether or not to use the AWS Batch job IAM role defined in a job definition when mounting the Amazon EFS file system. If enabled, transit encryption must be enabled in the `EFSVolumeConfiguration` . If this parameter is omitted, the default value of `DISABLED` is used. For more information, see [Using Amazon EFS access points](https://docs.aws.amazon.com/batch/latest/userguide/efs-volumes.html#efs-volume-accesspoints) in the *AWS Batch User Guide* . EFS IAM authorization requires that `TransitEncryption` be `ENABLED` and that a `JobRoleArn` is specified."}},"AWS::Batch::JobDefinition.ContainerProperties":{"attributes":{},"description":"Container properties are used for Amazon ECS based job definitions. These properties to describe the container that\'s launched as part of a job.","properties":{"Command":"The command that\'s passed to the container. This parameter maps to `Cmd` in the [Create a container](https://docs.aws.amazon.com/https://docs.docker.com/engine/api/v1.23/#create-a-container) section of the [Docker Remote API](https://docs.aws.amazon.com/https://docs.docker.com/engine/api/v1.23/) and the `COMMAND` parameter to [docker run](https://docs.aws.amazon.com/https://docs.docker.com/engine/reference/run/) . For more information, see [https://docs.docker.com/engine/reference/builder/#cmd](https://docs.aws.amazon.com/https://docs.docker.com/engine/reference/builder/#cmd) .","Environment":"The environment variables to pass to a container. This parameter maps to `Env` in the [Create a container](https://docs.aws.amazon.com/https://docs.docker.com/engine/api/v1.23/#create-a-container) section of the [Docker Remote API](https://docs.aws.amazon.com/https://docs.docker.com/engine/api/v1.23/) and the `--env` option to [docker run](https://docs.aws.amazon.com/https://docs.docker.com/engine/reference/run/) .\\n\\n> We don\'t recommend using plaintext environment variables for sensitive information, such as credential data. > Environment variables cannot start with \\" `AWS_BATCH` \\". This naming convention is reserved for variables that AWS Batch sets.","EphemeralStorage":"The amount of ephemeral storage to allocate for the task. This parameter is used to expand the total amount of ephemeral storage available, beyond the default amount, for tasks hosted on AWS Fargate .","ExecutionRoleArn":"The Amazon Resource Name (ARN) of the execution role that AWS Batch can assume. For jobs that run on Fargate resources, you must provide an execution role. For more information, see [AWS Batch execution IAM role](https://docs.aws.amazon.com/batch/latest/userguide/execution-IAM-role.html) in the *AWS Batch User Guide* .","FargatePlatformConfiguration":"The platform configuration for jobs that are running on Fargate resources. Jobs that are running on EC2 resources must not specify this parameter.","Image":"The image used to start a container. This string is passed directly to the Docker daemon. Images in the Docker Hub registry are available by default. Other repositories are specified with `*repository-url* / *image* : *tag*` . It can be 255 characters long. It can contain uppercase and lowercase letters, numbers, hyphens (-), underscores (_), colons (:), periods (.), forward slashes (/), and number signs (#). This parameter maps to `Image` in the [Create a container](https://docs.aws.amazon.com/https://docs.docker.com/engine/api/v1.23/#create-a-container) section of the [Docker Remote API](https://docs.aws.amazon.com/https://docs.docker.com/engine/api/v1.23/) and the `IMAGE` parameter of [docker run](https://docs.aws.amazon.com/https://docs.docker.com/engine/reference/run/) .\\n\\n> Docker image architecture must match the processor architecture of the compute resources that they\'re scheduled on. For example, ARM-based Docker images can only run on ARM-based compute resources. \\n\\n- Images in Amazon ECR Public repositories use the full `registry/repository[:tag]` or `registry/repository[@digest]` naming conventions. For example, `public.ecr.aws/ *registry_alias* / *my-web-app* : *latest*` .\\n- Images in Amazon ECR repositories use the full registry and repository URI (for example, `123456789012.dkr.ecr..amazonaws.com/` ).\\n- Images in official repositories on Docker Hub use a single name (for example, `ubuntu` or `mongo` ).\\n- Images in other repositories on Docker Hub are qualified with an organization name (for example, `amazon/amazon-ecs-agent` ).\\n- Images in other online repositories are qualified further by a domain name (for example, `quay.io/assemblyline/ubuntu` ).","InstanceType":"The instance type to use for a multi-node parallel job. All node groups in a multi-node parallel job must use the same instance type.\\n\\n> This parameter isn\'t applicable to single-node container jobs or jobs that run on Fargate resources, and shouldn\'t be provided.","JobRoleArn":"The Amazon Resource Name (ARN) of the IAM role that the container can assume for AWS permissions. For more information, see [IAM roles for tasks](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-iam-roles.html) in the *Amazon Elastic Container Service Developer Guide* .","LinuxParameters":"Linux-specific modifications that are applied to the container, such as details for device mappings.","LogConfiguration":"The log configuration specification for the container.\\n\\nThis parameter maps to `LogConfig` in the [Create a container](https://docs.aws.amazon.com/https://docs.docker.com/engine/api/v1.23/#create-a-container) section of the [Docker Remote API](https://docs.aws.amazon.com/https://docs.docker.com/engine/api/v1.23/) and the `--log-driver` option to [docker run](https://docs.aws.amazon.com/https://docs.docker.com/engine/reference/run/) . By default, containers use the same logging driver that the Docker daemon uses. However the container might use a different logging driver than the Docker daemon by specifying a log driver with this parameter in the container definition. To use a different logging driver for a container, the log system must be configured properly on the container instance (or on a different log server for remote logging options). For more information on the options for different supported log drivers, see [Configure logging drivers](https://docs.aws.amazon.com/https://docs.docker.com/engine/admin/logging/overview/) in the Docker documentation.\\n\\n> AWS Batch currently supports a subset of the logging drivers available to the Docker daemon (shown in the `LogConfiguration` data type). \\n\\nThis parameter requires version 1.18 of the Docker Remote API or greater on your container instance. To check the Docker Remote API version on your container instance, log in to your container instance and run the following command: `sudo docker version | grep \\"Server API version\\"`\\n\\n> The Amazon ECS container agent running on a container instance must register the logging drivers available on that instance with the `ECS_AVAILABLE_LOGGING_DRIVERS` environment variable before containers placed on that instance can use these log configuration options. For more information, see [Amazon ECS container agent configuration](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-agent-config.html) in the *Amazon Elastic Container Service Developer Guide* .","Memory":"This parameter is deprecated, use `resourceRequirements` to specify the memory requirements for the job definition. It\'s not supported for jobs running on Fargate resources. For jobs that run on EC2 resources, it specifies the memory hard limit (in MiB) for a container. If your container attempts to exceed the specified number, it\'s terminated. You must specify at least 4 MiB of memory for a job using this parameter. The memory hard limit can be specified in several places. It must be specified for each node at least once.","MountPoints":"The mount points for data volumes in your container. This parameter maps to `Volumes` in the [Create a container](https://docs.aws.amazon.com/https://docs.docker.com/engine/api/v1.23/#create-a-container) section of the [Docker Remote API](https://docs.aws.amazon.com/https://docs.docker.com/engine/api/v1.23/) and the `--volume` option to [docker run](https://docs.aws.amazon.com/https://docs.docker.com/engine/reference/run/) .","NetworkConfiguration":"The network configuration for jobs that are running on Fargate resources. Jobs that are running on EC2 resources must not specify this parameter.","Privileged":"When this parameter is true, the container is given elevated permissions on the host container instance (similar to the `root` user). This parameter maps to `Privileged` in the [Create a container](https://docs.aws.amazon.com/https://docs.docker.com/engine/api/v1.23/#create-a-container) section of the [Docker Remote API](https://docs.aws.amazon.com/https://docs.docker.com/engine/api/v1.23/) and the `--privileged` option to [docker run](https://docs.aws.amazon.com/https://docs.docker.com/engine/reference/run/) . The default value is false.\\n\\n> This parameter isn\'t applicable to jobs that are running on Fargate resources and shouldn\'t be provided, or specified as false.","ReadonlyRootFilesystem":"When this parameter is true, the container is given read-only access to its root file system. This parameter maps to `ReadonlyRootfs` in the [Create a container](https://docs.aws.amazon.com/https://docs.docker.com/engine/api/v1.23/#create-a-container) section of the [Docker Remote API](https://docs.aws.amazon.com/https://docs.docker.com/engine/api/v1.23/) and the `--read-only` option to `docker run` .","ResourceRequirements":"The type and amount of resources to assign to a container. The supported resources include `GPU` , `MEMORY` , and `VCPU` .","Secrets":"The secrets for the container. For more information, see [Specifying sensitive data](https://docs.aws.amazon.com/batch/latest/userguide/specifying-sensitive-data.html) in the *AWS Batch User Guide* .","Ulimits":"A list of `ulimits` to set in the container. This parameter maps to `Ulimits` in the [Create a container](https://docs.aws.amazon.com/https://docs.docker.com/engine/api/v1.23/#create-a-container) section of the [Docker Remote API](https://docs.aws.amazon.com/https://docs.docker.com/engine/api/v1.23/) and the `--ulimit` option to [docker run](https://docs.aws.amazon.com/https://docs.docker.com/engine/reference/run/) .\\n\\n> This parameter isn\'t applicable to jobs that are running on Fargate resources and shouldn\'t be provided.","User":"The user name to use inside the container. This parameter maps to `User` in the [Create a container](https://docs.aws.amazon.com/https://docs.docker.com/engine/api/v1.23/#create-a-container) section of the [Docker Remote API](https://docs.aws.amazon.com/https://docs.docker.com/engine/api/v1.23/) and the `--user` option to [docker run](https://docs.aws.amazon.com/https://docs.docker.com/engine/reference/run/) .","Vcpus":"This parameter is deprecated, use `resourceRequirements` to specify the vCPU requirements for the job definition. It\'s not supported for jobs running on Fargate resources. For jobs running on EC2 resources, it specifies the number of vCPUs reserved for the job.\\n\\nEach vCPU is equivalent to 1,024 CPU shares. This parameter maps to `CpuShares` in the [Create a container](https://docs.aws.amazon.com/https://docs.docker.com/engine/api/v1.23/#create-a-container) section of the [Docker Remote API](https://docs.aws.amazon.com/https://docs.docker.com/engine/api/v1.23/) and the `--cpu-shares` option to [docker run](https://docs.aws.amazon.com/https://docs.docker.com/engine/reference/run/) . The number of vCPUs must be specified but can be specified in several places. You must specify it at least once for each node.","Volumes":"A list of data volumes used in a job."}},"AWS::Batch::JobDefinition.Device":{"attributes":{},"description":"An object that represents a container instance host device.\\n\\n> This object isn\'t applicable to jobs that are running on Fargate resources and shouldn\'t be provided.","properties":{"ContainerPath":"The path inside the container that\'s used to expose the host device. By default, the `hostPath` value is used.","HostPath":"The path for the device on the host container instance.","Permissions":"The explicit permissions to provide to the container for the device. By default, the container has permissions for `read` , `write` , and `mknod` for the device."}},"AWS::Batch::JobDefinition.EfsVolumeConfiguration":{"attributes":{},"description":"This is used when you\'re using an Amazon Elastic File System file system for job storage. For more information, see [Amazon EFS Volumes](https://docs.aws.amazon.com/batch/latest/userguide/efs-volumes.html) in the *AWS Batch User Guide* .","properties":{"AuthorizationConfig":"The authorization configuration details for the Amazon EFS file system.","FileSystemId":"The Amazon EFS file system ID to use.","RootDirectory":"The directory within the Amazon EFS file system to mount as the root directory inside the host. If this parameter is omitted, the root of the Amazon EFS volume is used instead. Specifying `/` has the same effect as omitting this parameter. The maximum length is 4,096 characters.\\n\\n> If an EFS access point is specified in the `authorizationConfig` , the root directory parameter must either be omitted or set to `/` , which enforces the path set on the Amazon EFS access point.","TransitEncryption":"Determines whether to enable encryption for Amazon EFS data in transit between the Amazon ECS host and the Amazon EFS server. Transit encryption must be enabled if Amazon EFS IAM authorization is used. If this parameter is omitted, the default value of `DISABLED` is used. For more information, see [Encrypting data in transit](https://docs.aws.amazon.com/efs/latest/ug/encryption-in-transit.html) in the *Amazon Elastic File System User Guide* .","TransitEncryptionPort":"The port to use when sending encrypted data between the Amazon ECS host and the Amazon EFS server. If you don\'t specify a transit encryption port, it uses the port selection strategy that the Amazon EFS mount helper uses. The value must be between 0 and 65,535. For more information, see [EFS mount helper](https://docs.aws.amazon.com/efs/latest/ug/efs-mount-helper.html) in the *Amazon Elastic File System User Guide* ."}},"AWS::Batch::JobDefinition.EksContainer":{"attributes":{},"description":"EKS container properties are used in job definitions for Amazon EKS based job definitions to describe the properties for a container node in the pod that\'s launched as part of a job. This can\'t be specified for Amazon ECS based job definitions.","properties":{"Args":"An array of arguments to the entrypoint. If this isn\'t specified, the `CMD` of the container image is used. This corresponds to the `args` member in the [Entrypoint](https://docs.aws.amazon.com/https://kubernetes.io/docs/reference/kubernetes-api/workload-resources/pod-v1/#entrypoint) portion of the [Pod](https://docs.aws.amazon.com/https://kubernetes.io/docs/reference/kubernetes-api/workload-resources/pod-v1/) in Kubernetes. Environment variable references are expanded using the container\'s environment.\\n\\nIf the referenced environment variable doesn\'t exist, the reference in the command isn\'t changed. For example, if the reference is to \\" `$(NAME1)` \\" and the `NAME1` environment variable doesn\'t exist, the command string will remain \\" `$(NAME1)` .\\" `$$` is replaced with `$` , and the resulting string isn\'t expanded. For example, `$$(VAR_NAME)` is passed as `$(VAR_NAME)` whether or not the `VAR_NAME` environment variable exists. For more information, see [CMD](https://docs.aws.amazon.com/https://docs.docker.com/engine/reference/builder/#cmd) in the *Dockerfile reference* and [Define a command and arguments for a pod](https://docs.aws.amazon.com/https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/) in the *Kubernetes documentation* .","Command":"The entrypoint for the container. This isn\'t run within a shell. If this isn\'t specified, the `ENTRYPOINT` of the container image is used. Environment variable references are expanded using the container\'s environment.\\n\\nIf the referenced environment variable doesn\'t exist, the reference in the command isn\'t changed. For example, if the reference is to \\" `$(NAME1)` \\" and the `NAME1` environment variable doesn\'t exist, the command string will remain \\" `$(NAME1)` .\\" `$$` is replaced with `$` and the resulting string isn\'t expanded. For example, `$$(VAR_NAME)` will be passed as `$(VAR_NAME)` whether or not the `VAR_NAME` environment variable exists. The entrypoint can\'t be updated. For more information, see [ENTRYPOINT](https://docs.aws.amazon.com/https://docs.docker.com/engine/reference/builder/#entrypoint) in the *Dockerfile reference* and [Define a command and arguments for a container](https://docs.aws.amazon.com/https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/) and [Entrypoint](https://docs.aws.amazon.com/https://kubernetes.io/docs/reference/kubernetes-api/workload-resources/pod-v1/#entrypoint) in the *Kubernetes documentation* .","Env":"The environment variables to pass to a container.\\n\\n> Environment variables cannot start with \\" `AWS_BATCH` \\". This naming convention is reserved for variables that AWS Batch sets.","Image":"The Docker image used to start the container.","ImagePullPolicy":"The image pull policy for the container. Supported values are `Always` , `IfNotPresent` , and `Never` . This parameter defaults to `IfNotPresent` . However, if the `:latest` tag is specified, it defaults to `Always` . For more information, see [Updating images](https://docs.aws.amazon.com/https://kubernetes.io/docs/concepts/containers/images/#updating-images) in the *Kubernetes documentation* .","Name":"The name of the container. If the name isn\'t specified, the default name \\" `Default` \\" is used. Each container in a pod must have a unique name.","Resources":"The type and amount of resources to assign to a container. The supported resources include `memory` , `cpu` , and `nvidia.com/gpu` . For more information, see [Resource management for pods and containers](https://docs.aws.amazon.com/https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/) in the *Kubernetes documentation* .","SecurityContext":"","VolumeMounts":"The volume mounts for the container. AWS Batch supports `emptyDir` , `hostPath` , and `secret` volume types. For more information about volumes and volume mounts in Kubernetes, see [Volumes](https://docs.aws.amazon.com/https://kubernetes.io/docs/concepts/storage/volumes/) in the *Kubernetes documentation* ."}},"AWS::Batch::JobDefinition.EksContainerEnvironmentVariable":{"attributes":{},"description":"An environment variable.","properties":{"Name":"The name of the environment variable.","Value":"The value of the environment variable."}},"AWS::Batch::JobDefinition.EksContainerResourceRequirements":{"attributes":{},"description":"The type and amount of resources to assign to a container. The supported resources include `memory` , `cpu` , and `nvidia.com/gpu` . For more information, see [Resource management for pods and containers](https://docs.aws.amazon.com/https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/) in the *Kubernetes documentation* .","properties":{"Limits":"The type and quantity of the resources to reserve for the container. The values vary based on the `name` that\'s specified. Resources can be requested using either the `limits` or the `requests` objects.\\n\\n- **memory** - The memory hard limit (in MiB) for the container, using whole integers, with a \\"Mi\\" suffix. If your container attempts to exceed the memory specified, the container is terminated. You must specify at least 4 MiB of memory for a job. `memory` can be specified in `limits` , `requests` , or both. If `memory` is specified in both places, then the value that\'s specified in `limits` must be equal to the value that\'s specified in `requests` .\\n\\n> To maximize your resource utilization, provide your jobs with as much memory as possible for the specific instance type that you are using. To learn how, see [Memory management](https://docs.aws.amazon.com/batch/latest/userguide/memory-management.html) in the *AWS Batch User Guide* .\\n- **cpu** - The number of CPUs that\'s reserved for the container. Values must be an even multiple of `0.25` . `cpu` can be specified in `limits` , `requests` , or both. If `cpu` is specified in both places, then the value that\'s specified in `limits` must be at least as large as the value that\'s specified in `requests` .\\n- **nvidia.com/gpu** - The number of GPUs that\'s reserved for the container. Values must be a whole integer. `memory` can be specified in `limits` , `requests` , or both. If `memory` is specified in both places, then the value that\'s specified in `limits` must be equal to the value that\'s specified in `requests` .","Requests":"The type and quantity of the resources to request for the container. The values vary based on the `name` that\'s specified. Resources can be requested by using either the `limits` or the `requests` objects.\\n\\n- **memory** - The memory hard limit (in MiB) for the container, using whole integers, with a \\"Mi\\" suffix. If your container attempts to exceed the memory specified, the container is terminated. You must specify at least 4 MiB of memory for a job. `memory` can be specified in `limits` , `requests` , or both. If `memory` is specified in both, then the value that\'s specified in `limits` must be equal to the value that\'s specified in `requests` .\\n\\n> If you\'re trying to maximize your resource utilization by providing your jobs as much memory as possible for a particular instance type, see [Memory management](https://docs.aws.amazon.com/batch/latest/userguide/memory-management.html) in the *AWS Batch User Guide* .\\n- **cpu** - The number of CPUs that are reserved for the container. Values must be an even multiple of `0.25` . `cpu` can be specified in `limits` , `requests` , or both. If `cpu` is specified in both, then the value that\'s specified in `limits` must be at least as large as the value that\'s specified in `requests` .\\n- **nvidia.com/gpu** - The number of GPUs that are reserved for the container. Values must be a whole integer. `nvidia.com/gpu` can be specified in `limits` , `requests` , or both. If `nvidia.com/gpu` is specified in both, then the value that\'s specified in `limits` must be equal to the value that\'s specified in `requests` ."}},"AWS::Batch::JobDefinition.EksContainerSecurityContext":{"attributes":{},"description":"The security context for a job. For more information, see [Configure a security context for a pod or container](https://docs.aws.amazon.com/https://kubernetes.io/docs/tasks/configure-pod-container/security-context/) in the *Kubernetes documentation* .","properties":{"Privileged":"When this parameter is `true` , the container is given elevated permissions on the host container instance. The level of permissions are similar to the `root` user permissions. The default value is `false` . This parameter maps to `privileged` policy in the [Privileged pod security policies](https://docs.aws.amazon.com/https://kubernetes.io/docs/concepts/security/pod-security-policy/#privileged) in the *Kubernetes documentation* .","ReadOnlyRootFilesystem":"When this parameter is `true` , the container is given read-only access to its root file system. The default value is `false` . This parameter maps to `ReadOnlyRootFilesystem` policy in the [Volumes and file systems pod security policies](https://docs.aws.amazon.com/https://kubernetes.io/docs/concepts/security/pod-security-policy/#volumes-and-file-systems) in the *Kubernetes documentation* .","RunAsGroup":"When this parameter is specified, the container is run as the specified group ID ( `gid` ). If this parameter isn\'t specified, the default is the group that\'s specified in the image metadata. This parameter maps to `RunAsGroup` and `MustRunAs` policy in the [Users and groups pod security policies](https://docs.aws.amazon.com/https://kubernetes.io/docs/concepts/security/pod-security-policy/#users-and-groups) in the *Kubernetes documentation* .","RunAsNonRoot":"When this parameter is specified, the container is run as a user with a `uid` other than 0. If this parameter isn\'t specified, so such rule is enforced. This parameter maps to `RunAsUser` and `MustRunAsNonRoot` policy in the [Users and groups pod security policies](https://docs.aws.amazon.com/https://kubernetes.io/docs/concepts/security/pod-security-policy/#users-and-groups) in the *Kubernetes documentation* .","RunAsUser":"When this parameter is specified, the container is run as the specified user ID ( `uid` ). If this parameter isn\'t specified, the default is the user that\'s specified in the image metadata. This parameter maps to `RunAsUser` and `MustRanAs` policy in the [Users and groups pod security policies](https://docs.aws.amazon.com/https://kubernetes.io/docs/concepts/security/pod-security-policy/#users-and-groups) in the *Kubernetes documentation* ."}},"AWS::Batch::JobDefinition.EksContainerVolumeMount":{"attributes":{},"description":"The volume mounts for a container for an Amazon EKS job. For more information about volumes and volume mounts in Kubernetes, see [Volumes](https://docs.aws.amazon.com/https://kubernetes.io/docs/concepts/storage/volumes/) in the *Kubernetes documentation* .","properties":{"MountPath":"The path on the container where the volume is mounted.","Name":"The name the volume mount. This must match the name of one of the volumes in the pod.","ReadOnly":"If this value is `true` , the container has read-only access to the volume. Otherwise, the container can write to the volume. The default value is `false` ."}},"AWS::Batch::JobDefinition.EksEmptyDir":{"attributes":{},"description":"Specifies the configuration of a Kubernetes `emptyDir` volume. An `emptyDir` volume is first created when a pod is assigned to a node. It exists as long as that pod is running on that node. The `emptyDir` volume is initially empty. All containers in the pod can read and write the files in the `emptyDir` volume. However, the `emptyDir` volume can be mounted at the same or different paths in each container. When a pod is removed from a node for any reason, the data in the `emptyDir` is deleted permanently. For more information, see [emptyDir](https://docs.aws.amazon.com/https://kubernetes.io/docs/concepts/storage/volumes/#emptydir) in the *Kubernetes documentation* .","properties":{"Medium":"The medium to store the volume. The default value is an empty string, which uses the storage of the node.\\n\\n- **\\"\\"** - *(Default)* Use the disk storage of the node.\\n- **\\"Memory\\"** - Use the `tmpfs` volume that\'s backed by the RAM of the node. Contents of the volume are lost when the node reboots, and any storage on the volume counts against the container\'s memory limit.","SizeLimit":"The maximum size of the volume. By default, there\'s no maximum size defined."}},"AWS::Batch::JobDefinition.EksHostPath":{"attributes":{},"description":"Specifies the configuration of a Kubernetes `hostPath` volume. A `hostPath` volume mounts an existing file or directory from the host node\'s filesystem into your pod. For more information, see [hostPath](https://docs.aws.amazon.com/https://kubernetes.io/docs/concepts/storage/volumes/#hostpath) in the *Kubernetes documentation* .","properties":{"Path":"The path of the file or directory on the host to mount into containers on the pod."}},"AWS::Batch::JobDefinition.EksProperties":{"attributes":{},"description":"An object that contains the properties for the Kubernetes resources of a job.","properties":{"PodProperties":"The properties for the Kubernetes pod resources of a job."}},"AWS::Batch::JobDefinition.EksSecret":{"attributes":{},"description":"Specifies the configuration of a Kubernetes `secret` volume. For more information, see [secret](https://docs.aws.amazon.com/https://kubernetes.io/docs/concepts/storage/volumes/#secret) in the *Kubernetes documentation* .","properties":{"Optional":"Specifies whether the secret or the secret\'s keys must be defined.","SecretName":"The name of the secret. The name must be allowed as a DNS subdomain name. For more information, see [DNS subdomain names](https://docs.aws.amazon.com/https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#dns-subdomain-names) in the *Kubernetes documentation* ."}},"AWS::Batch::JobDefinition.EksVolume":{"attributes":{},"description":"Specifies an Amazon EKS volume for a job definition.","properties":{"EmptyDir":"Specifies the configuration of a Kubernetes `emptyDir` volume. For more information, see [emptyDir](https://docs.aws.amazon.com/https://kubernetes.io/docs/concepts/storage/volumes/#emptydir) in the *Kubernetes documentation* .","HostPath":"Specifies the configuration of a Kubernetes `hostPath` volume. For more information, see [hostPath](https://docs.aws.amazon.com/https://kubernetes.io/docs/concepts/storage/volumes/#hostpath) in the *Kubernetes documentation* .","Name":"The name of the volume. The name must be allowed as a DNS subdomain name. For more information, see [DNS subdomain names](https://docs.aws.amazon.com/https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#dns-subdomain-names) in the *Kubernetes documentation* .","Secret":"Specifies the configuration of a Kubernetes `secret` volume. For more information, see [secret](https://docs.aws.amazon.com/https://kubernetes.io/docs/concepts/storage/volumes/#secret) in the *Kubernetes documentation* ."}},"AWS::Batch::JobDefinition.Environment":{"attributes":{},"description":"The Environment property type specifies environment variables to use in a job definition.","properties":{"Name":"The name of the environment variable.","Value":"The value of the environment variable."}},"AWS::Batch::JobDefinition.EphemeralStorage":{"attributes":{},"description":"The amount of ephemeral storage to allocate for the task. This parameter is used to expand the total amount of ephemeral storage available, beyond the default amount, for tasks hosted on AWS Fargate .","properties":{"SizeInGiB":"The total amount, in GiB, of ephemeral storage to set for the task. The minimum supported value is `21` GiB and the maximum supported value is `200` GiB."}},"AWS::Batch::JobDefinition.EvaluateOnExit":{"attributes":{},"description":"Specifies an array of up to 5 conditions to be met, and an action to take ( `RETRY` or `EXIT` ) if all conditions are met. If none of the `EvaluateOnExit` conditions in a `RetryStrategy` match, then the job is retried.","properties":{"Action":"Specifies the action to take if all of the specified conditions ( `onStatusReason` , `onReason` , and `onExitCode` ) are met. The values aren\'t case sensitive.","OnExitCode":"Contains a glob pattern to match against the decimal representation of the `ExitCode` returned for a job. The pattern can be up to 512 characters long. It can contain only numbers, and can end with an asterisk (*) so that only the start of the string needs to be an exact match.\\n\\nThe string can contain up to 512 characters.","OnReason":"Contains a glob pattern to match against the `Reason` returned for a job. The pattern can contain up to 512 characters. It can contain letters, numbers, periods (.), colons (:), and white space (including spaces and tabs). It can optionally end with an asterisk (*) so that only the start of the string needs to be an exact match.","OnStatusReason":"Contains a glob pattern to match against the `StatusReason` returned for a job. The pattern can contain up to 512 characters. It can contain letters, numbers, periods (.), colons (:), and white spaces (including spaces or tabs). It can optionally end with an asterisk (*) so that only the start of the string needs to be an exact match."}},"AWS::Batch::JobDefinition.FargatePlatformConfiguration":{"attributes":{},"description":"The platform configuration for jobs that are running on Fargate resources. Jobs that run on EC2 resources must not specify this parameter.","properties":{"PlatformVersion":"The AWS Fargate platform version where the jobs are running. A platform version is specified only for jobs that are running on Fargate resources. If one isn\'t specified, the `LATEST` platform version is used by default. This uses a recent, approved version of the AWS Fargate platform for compute resources. For more information, see [AWS Fargate platform versions](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/platform_versions.html) in the *Amazon Elastic Container Service Developer Guide* ."}},"AWS::Batch::JobDefinition.LinuxParameters":{"attributes":{},"description":"Linux-specific modifications that are applied to the container, such as details for device mappings.","properties":{"Devices":"Any of the host devices to expose to the container. This parameter maps to `Devices` in the [Create a container](https://docs.aws.amazon.com/https://docs.docker.com/engine/api/v1.23/#create-a-container) section of the [Docker Remote API](https://docs.aws.amazon.com/https://docs.docker.com/engine/api/v1.23/) and the `--device` option to [docker run](https://docs.aws.amazon.com/https://docs.docker.com/engine/reference/run/) .\\n\\n> This parameter isn\'t applicable to jobs that are running on Fargate resources. Don\'t provide it for these jobs.","InitProcessEnabled":"If true, run an `init` process inside the container that forwards signals and reaps processes. This parameter maps to the `--init` option to [docker run](https://docs.aws.amazon.com/https://docs.docker.com/engine/reference/run/) . This parameter requires version 1.25 of the Docker Remote API or greater on your container instance. To check the Docker Remote API version on your container instance, log in to your container instance and run the following command: `sudo docker version | grep \\"Server API version\\"`","MaxSwap":"The total amount of swap memory (in MiB) a container can use. This parameter is translated to the `--memory-swap` option to [docker run](https://docs.aws.amazon.com/https://docs.docker.com/engine/reference/run/) where the value is the sum of the container memory plus the `maxSwap` value. For more information, see [`--memory-swap` details](https://docs.aws.amazon.com/https://docs.docker.com/config/containers/resource_constraints/#--memory-swap-details) in the Docker documentation.\\n\\nIf a `maxSwap` value of `0` is specified, the container doesn\'t use swap. Accepted values are `0` or any positive integer. If the `maxSwap` parameter is omitted, the container doesn\'t use the swap configuration for the container instance that it\'s running on. A `maxSwap` value must be set for the `swappiness` parameter to be used.\\n\\n> This parameter isn\'t applicable to jobs that are running on Fargate resources. Don\'t provide it for these jobs.","SharedMemorySize":"The value for the size (in MiB) of the `/dev/shm` volume. This parameter maps to the `--shm-size` option to [docker run](https://docs.aws.amazon.com/https://docs.docker.com/engine/reference/run/) .\\n\\n> This parameter isn\'t applicable to jobs that are running on Fargate resources. Don\'t provide it for these jobs.","Swappiness":"You can use this parameter to tune a container\'s memory swappiness behavior. A `swappiness` value of `0` causes swapping to not occur unless absolutely necessary. A `swappiness` value of `100` causes pages to be swapped aggressively. Valid values are whole numbers between `0` and `100` . If the `swappiness` parameter isn\'t specified, a default value of `60` is used. If a value isn\'t specified for `maxSwap` , then this parameter is ignored. If `maxSwap` is set to 0, the container doesn\'t use swap. This parameter maps to the `--memory-swappiness` option to [docker run](https://docs.aws.amazon.com/https://docs.docker.com/engine/reference/run/) .\\n\\nConsider the following when you use a per-container swap configuration.\\n\\n- Swap space must be enabled and allocated on the container instance for the containers to use.\\n\\n> By default, the Amazon ECS optimized AMIs don\'t have swap enabled. You must enable swap on the instance to use this feature. For more information, see [Instance store swap volumes](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-store-swap-volumes.html) in the *Amazon EC2 User Guide for Linux Instances* or [How do I allocate memory to work as swap space in an Amazon EC2 instance by using a swap file?](https://docs.aws.amazon.com/premiumsupport/knowledge-center/ec2-memory-swap-file/)\\n- The swap space parameters are only supported for job definitions using EC2 resources.\\n- If the `maxSwap` and `swappiness` parameters are omitted from a job definition, each container has a default `swappiness` value of 60. Moreover, the total swap usage is limited to two times the memory reservation of the container.\\n\\n> This parameter isn\'t applicable to jobs that are running on Fargate resources. Don\'t provide it for these jobs.","Tmpfs":"The container path, mount options, and size (in MiB) of the `tmpfs` mount. This parameter maps to the `--tmpfs` option to [docker run](https://docs.aws.amazon.com/https://docs.docker.com/engine/reference/run/) .\\n\\n> This parameter isn\'t applicable to jobs that are running on Fargate resources. Don\'t provide this parameter for this resource type."}},"AWS::Batch::JobDefinition.LogConfiguration":{"attributes":{},"description":"Log configuration options to send to a custom log driver for the container.","properties":{"LogDriver":"The log driver to use for the container. The valid values that are listed for this parameter are log drivers that the Amazon ECS container agent can communicate with by default.\\n\\nThe supported log drivers are `awslogs` , `fluentd` , `gelf` , `json-file` , `journald` , `logentries` , `syslog` , and `splunk` .\\n\\n> Jobs that are running on Fargate resources are restricted to the `awslogs` and `splunk` log drivers. \\n\\n- **awslogs** - Specifies the Amazon CloudWatch Logs logging driver. For more information, see [Using the awslogs log driver](https://docs.aws.amazon.com/batch/latest/userguide/using_awslogs.html) in the *AWS Batch User Guide* and [Amazon CloudWatch Logs logging driver](https://docs.aws.amazon.com/https://docs.docker.com/config/containers/logging/awslogs/) in the Docker documentation.\\n- **fluentd** - Specifies the Fluentd logging driver. For more information including usage and options, see [Fluentd logging driver](https://docs.aws.amazon.com/https://docs.docker.com/config/containers/logging/fluentd/) in the *Docker documentation* .\\n- **gelf** - Specifies the Graylog Extended Format (GELF) logging driver. For more information including usage and options, see [Graylog Extended Format logging driver](https://docs.aws.amazon.com/https://docs.docker.com/config/containers/logging/gelf/) in the *Docker documentation* .\\n- **journald** - Specifies the journald logging driver. For more information including usage and options, see [Journald logging driver](https://docs.aws.amazon.com/https://docs.docker.com/config/containers/logging/journald/) in the *Docker documentation* .\\n- **json-file** - Specifies the JSON file logging driver. For more information including usage and options, see [JSON File logging driver](https://docs.aws.amazon.com/https://docs.docker.com/config/containers/logging/json-file/) in the *Docker documentation* .\\n- **splunk** - Specifies the Splunk logging driver. For more information including usage and options, see [Splunk logging driver](https://docs.aws.amazon.com/https://docs.docker.com/config/containers/logging/splunk/) in the *Docker documentation* .\\n- **syslog** - Specifies the syslog logging driver. For more information including usage and options, see [Syslog logging driver](https://docs.aws.amazon.com/https://docs.docker.com/config/containers/logging/syslog/) in the *Docker documentation* .\\n\\n> If you have a custom driver that\'s not listed earlier that you want to work with the Amazon ECS container agent, you can fork the Amazon ECS container agent project that\'s [available on GitHub](https://docs.aws.amazon.com/https://github.com/aws/amazon-ecs-agent) and customize it to work with that driver. We encourage you to submit pull requests for changes that you want to have included. However, Amazon Web Services doesn\'t currently support running modified copies of this software. \\n\\nThis parameter requires version 1.18 of the Docker Remote API or greater on your container instance. To check the Docker Remote API version on your container instance, log in to your container instance and run the following command: `sudo docker version | grep \\"Server API version\\"`","Options":"The configuration options to send to the log driver. This parameter requires version 1.19 of the Docker Remote API or greater on your container instance. To check the Docker Remote API version on your container instance, log in to your container instance and run the following command: `sudo docker version | grep \\"Server API version\\"`","SecretOptions":"The secrets to pass to the log configuration. For more information, see [Specifying sensitive data](https://docs.aws.amazon.com/batch/latest/userguide/specifying-sensitive-data.html) in the *AWS Batch User Guide* ."}},"AWS::Batch::JobDefinition.Metadata":{"attributes":{},"description":"","properties":{"Labels":""}},"AWS::Batch::JobDefinition.MountPoints":{"attributes":{},"description":"Details for a Docker volume mount point that\'s used in a job\'s container properties. This parameter maps to `Volumes` in the [Create a container](https://docs.aws.amazon.com/https://docs.docker.com/engine/reference/api/docker_remote_api_v1.19/#create-a-container) section of the *Docker Remote API* and the `--volume` option to docker run.","properties":{"ContainerPath":"The path on the container where the host volume is mounted.","ReadOnly":"If this value is `true` , the container has read-only access to the volume. Otherwise, the container can write to the volume. The default value is `false` .","SourceVolume":"The name of the volume to mount."}},"AWS::Batch::JobDefinition.NetworkConfiguration":{"attributes":{},"description":"The network configuration for jobs that are running on Fargate resources. Jobs that are running on EC2 resources must not specify this parameter.","properties":{"AssignPublicIp":"Indicates whether the job has a public IP address. For a job that\'s running on Fargate resources in a private subnet to send outbound traffic to the internet (for example, to pull container images), the private subnet requires a NAT gateway be attached to route requests to the internet. For more information, see [Amazon ECS task networking](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-networking.html) in the *Amazon Elastic Container Service Developer Guide* . The default value is \\" `DISABLED` \\"."}},"AWS::Batch::JobDefinition.NodeProperties":{"attributes":{},"description":"An object that represents the node properties of a multi-node parallel job.\\n\\n> Node properties can\'t be specified for Amazon EKS based job definitions.","properties":{"MainNode":"Specifies the node index for the main node of a multi-node parallel job. This node index value must be fewer than the number of nodes.","NodeRangeProperties":"A list of node ranges and their properties that are associated with a multi-node parallel job.","NumNodes":"The number of nodes that are associated with a multi-node parallel job."}},"AWS::Batch::JobDefinition.NodeRangeProperty":{"attributes":{},"description":"An object that represents the properties of the node range for a multi-node parallel job.","properties":{"Container":"The container details for the node range.","TargetNodes":"The range of nodes, using node index values. A range of `0:3` indicates nodes with index values of `0` through `3` . If the starting range value is omitted ( `:n` ), then `0` is used to start the range. If the ending range value is omitted ( `n:` ), then the highest possible node index is used to end the range. Your accumulative node ranges must account for all nodes ( `0:n` ). You can nest node ranges (for example, `0:10` and `4:5` ). In this case, the `4:5` range properties override the `0:10` properties."}},"AWS::Batch::JobDefinition.PodProperties":{"attributes":{},"description":"The properties for the pod.","properties":{"Containers":"The properties of the container that\'s used on the Amazon EKS pod.","DnsPolicy":"The DNS policy for the pod. The default value is `ClusterFirst` . If the `hostNetwork` parameter is not specified, the default is `ClusterFirstWithHostNet` . `ClusterFirst` indicates that any DNS query that does not match the configured cluster domain suffix is forwarded to the upstream nameserver inherited from the node. If no value was specified for `dnsPolicy` in the [RegisterJobDefinition](https://docs.aws.amazon.com/batch/latest/APIReference/API_RegisterJobDefinition.html) API operation, then no value will be returned for `dnsPolicy` by either of [DescribeJobDefinitions](https://docs.aws.amazon.com/batch/latest/APIReference/API_DescribeJobDefinitions.html) or [DescribeJobs](https://docs.aws.amazon.com/batch/latest/APIReference/API_DescribeJobs.html) API operations. The pod spec setting will contain either `ClusterFirst` or `ClusterFirstWithHostNet` , depending on the value of the `hostNetwork` parameter. For more information, see [Pod\'s DNS policy](https://docs.aws.amazon.com/https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/#pod-s-dns-policy) in the *Kubernetes documentation* .\\n\\nValid values: `Default` | `ClusterFirst` | `ClusterFirstWithHostNet`","HostNetwork":"Indicates if the pod uses the hosts\' network IP address. The default value is `true` . Setting this to `false` enables the Kubernetes pod networking model. Most AWS Batch workloads are egress-only and don\'t require the overhead of IP allocation for each pod for incoming connections. For more information, see [Host namespaces](https://docs.aws.amazon.com/https://kubernetes.io/docs/concepts/security/pod-security-policy/#host-namespaces) and [Pod networking](https://docs.aws.amazon.com/https://kubernetes.io/docs/concepts/workloads/pods/#pod-networking) in the *Kubernetes documentation* .","Metadata":"","ServiceAccountName":"The name of the service account that\'s used to run the pod. For more information, see [Kubernetes service accounts](https://docs.aws.amazon.com/eks/latest/userguide/service-accounts.html) and [Configure a Kubernetes service account to assume an IAM role](https://docs.aws.amazon.com/eks/latest/userguide/associate-service-account-role.html) in the *Amazon EKS User Guide* and [Configure service accounts for pods](https://docs.aws.amazon.com/https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/) in the *Kubernetes documentation* .","Volumes":"Specifies the volumes for a job definition that uses Amazon EKS resources."}},"AWS::Batch::JobDefinition.ResourceRequirement":{"attributes":{},"description":"The type and amount of a resource to assign to a container. The supported resources include `GPU` , `MEMORY` , and `VCPU` .","properties":{"Type":"The type of resource to assign to a container. The supported resources include `GPU` , `MEMORY` , and `VCPU` .","Value":"The quantity of the specified resource to reserve for the container. The values vary based on the `type` specified.\\n\\n- **type=\\"GPU\\"** - The number of physical GPUs to reserve for the container. Make sure that the number of GPUs reserved for all containers in a job doesn\'t exceed the number of available GPUs on the compute resource that the job is launched on.\\n\\n> GPUs aren\'t available for jobs that are running on Fargate resources.\\n- **type=\\"MEMORY\\"** - The memory hard limit (in MiB) present to the container. This parameter is supported for jobs that are running on EC2 resources. If your container attempts to exceed the memory specified, the container is terminated. This parameter maps to `Memory` in the [Create a container](https://docs.aws.amazon.com/https://docs.docker.com/engine/api/v1.23/#create-a-container) section of the [Docker Remote API](https://docs.aws.amazon.com/https://docs.docker.com/engine/api/v1.23/) and the `--memory` option to [docker run](https://docs.aws.amazon.com/https://docs.docker.com/engine/reference/run/) . You must specify at least 4 MiB of memory for a job. This is required but can be specified in several places for multi-node parallel (MNP) jobs. It must be specified for each node at least once. This parameter maps to `Memory` in the [Create a container](https://docs.aws.amazon.com/https://docs.docker.com/engine/api/v1.23/#create-a-container) section of the [Docker Remote API](https://docs.aws.amazon.com/https://docs.docker.com/engine/api/v1.23/) and the `--memory` option to [docker run](https://docs.aws.amazon.com/https://docs.docker.com/engine/reference/run/) .\\n\\n> If you\'re trying to maximize your resource utilization by providing your jobs as much memory as possible for a particular instance type, see [Memory management](https://docs.aws.amazon.com/batch/latest/userguide/memory-management.html) in the *AWS Batch User Guide* . \\n\\nFor jobs that are running on Fargate resources, then `value` is the hard limit (in MiB), and must match one of the supported values and the `VCPU` values must be one of the values supported for that memory value.\\n\\n- **value = 512** - `VCPU` = 0.25\\n- **value = 1024** - `VCPU` = 0.25 or 0.5\\n- **value = 2048** - `VCPU` = 0.25, 0.5, or 1\\n- **value = 3072** - `VCPU` = 0.5, or 1\\n- **value = 4096** - `VCPU` = 0.5, 1, or 2\\n- **value = 5120, 6144, or 7168** - `VCPU` = 1 or 2\\n- **value = 8192** - `VCPU` = 1, 2, or 4\\n- **value = 9216, 10240, 11264, 12288, 13312, 14336, or 15360** - `VCPU` = 2 or 4\\n- **value = 16384** - `VCPU` = 2, 4, or 8\\n- **value = 17408, 18432, 19456, 21504, 22528, 23552, 25600, 26624, 27648, 29696, or 30720** - `VCPU` = 4\\n- **value = 20480, 24576, or 28672** - `VCPU` = 4 or 8\\n- **value = 36864, 45056, 53248, or 61440** - `VCPU` = 8\\n- **value = 32768, 40960, 49152, or 57344** - `VCPU` = 8 or 16\\n- **value = 65536, 73728, 81920, 90112, 98304, 106496, 114688, or 122880** - `VCPU` = 16\\n- **type=\\"VCPU\\"** - The number of vCPUs reserved for the container. This parameter maps to `CpuShares` in the [Create a container](https://docs.aws.amazon.com/https://docs.docker.com/engine/api/v1.23/#create-a-container) section of the [Docker Remote API](https://docs.aws.amazon.com/https://docs.docker.com/engine/api/v1.23/) and the `--cpu-shares` option to [docker run](https://docs.aws.amazon.com/https://docs.docker.com/engine/reference/run/) . Each vCPU is equivalent to 1,024 CPU shares. For EC2 resources, you must specify at least one vCPU. This is required but can be specified in several places; it must be specified for each node at least once.\\n\\nThe default for the Fargate On-Demand vCPU resource count quota is 6 vCPUs. For more information about Fargate quotas, see [AWS Fargate quotas](https://docs.aws.amazon.com/general/latest/gr/ecs-service.html#service-quotas-fargate) in the *AWS General Reference* .\\n\\nFor jobs that are running on Fargate resources, then `value` must match one of the supported values and the `MEMORY` values must be one of the values supported for that `VCPU` value. The supported values are 0.25, 0.5, 1, 2, 4, 8, and 16\\n\\n- **value = 0.25** - `MEMORY` = 512, 1024, or 2048\\n- **value = 0.5** - `MEMORY` = 1024, 2048, 3072, or 4096\\n- **value = 1** - `MEMORY` = 2048, 3072, 4096, 5120, 6144, 7168, or 8192\\n- **value = 2** - `MEMORY` = 4096, 5120, 6144, 7168, 8192, 9216, 10240, 11264, 12288, 13312, 14336, 15360, or 16384\\n- **value = 4** - `MEMORY` = 8192, 9216, 10240, 11264, 12288, 13312, 14336, 15360, 16384, 17408, 18432, 19456, 20480, 21504, 22528, 23552, 24576, 25600, 26624, 27648, 28672, 29696, or 30720\\n- **value = 8** - `MEMORY` = 16384, 20480, 24576, 28672, 32768, 36864, 40960, 45056, 49152, 53248, 57344, or 61440\\n- **value = 16** - `MEMORY` = 32768, 40960, 49152, 57344, 65536, 73728, 81920, 90112, 98304, 106496, 114688, or 122880"}},"AWS::Batch::JobDefinition.RetryStrategy":{"attributes":{},"description":"The retry strategy that\'s associated with a job. For more information, see [Automated job retries](https://docs.aws.amazon.com/batch/latest/userguide/job_retries.html) in the *AWS Batch User Guide* .","properties":{"Attempts":"The number of times to move a job to the `RUNNABLE` status. You can specify between 1 and 10 attempts. If the value of `attempts` is greater than one, the job is retried on failure the same number of attempts as the value.","EvaluateOnExit":"Array of up to 5 objects that specify the conditions where jobs are retried or failed. If this parameter is specified, then the `attempts` parameter must also be specified. If none of the listed conditions match, then the job is retried."}},"AWS::Batch::JobDefinition.Secret":{"attributes":{},"description":"An object that represents the secret to expose to your container. Secrets can be exposed to a container in the following ways:\\n\\n- To inject sensitive data into your containers as environment variables, use the `secrets` container definition parameter.\\n- To reference sensitive information in the log configuration of a container, use the `secretOptions` container definition parameter.\\n\\nFor more information, see [Specifying sensitive data](https://docs.aws.amazon.com/batch/latest/userguide/specifying-sensitive-data.html) in the *AWS Batch User Guide* .","properties":{"Name":"The name of the secret.","ValueFrom":"The secret to expose to the container. The supported values are either the full Amazon Resource Name (ARN) of the AWS Secrets Manager secret or the full ARN of the parameter in the AWS Systems Manager Parameter Store.\\n\\n> If the AWS Systems Manager Parameter Store parameter exists in the same Region as the job you\'re launching, then you can use either the full Amazon Resource Name (ARN) or name of the parameter. If the parameter exists in a different Region, then the full ARN must be specified."}},"AWS::Batch::JobDefinition.Timeout":{"attributes":{},"description":"An object that represents a job timeout configuration.","properties":{"AttemptDurationSeconds":"The job timeout time (in seconds) that\'s measured from the job attempt\'s `startedAt` timestamp. After this time passes, AWS Batch terminates your jobs if they aren\'t finished. The minimum value for the timeout is 60 seconds.\\n\\nFor array jobs, the timeout applies to the child jobs, not to the parent array job.\\n\\nFor multi-node parallel (MNP) jobs, the timeout applies to the whole job, not to the individual nodes."}},"AWS::Batch::JobDefinition.Tmpfs":{"attributes":{},"description":"The container path, mount options, and size of the `tmpfs` mount.\\n\\n> This object isn\'t applicable to jobs that are running on Fargate resources.","properties":{"ContainerPath":"The absolute file path in the container where the `tmpfs` volume is mounted.","MountOptions":"The list of `tmpfs` volume mount options.\\n\\nValid values: \\" `defaults` \\" | \\" `ro` \\" | \\" `rw` \\" | \\" `suid` \\" | \\" `nosuid` \\" | \\" `dev` \\" | \\" `nodev` \\" | \\" `exec` \\" | \\" `noexec` \\" | \\" `sync` \\" | \\" `async` \\" | \\" `dirsync` \\" | \\" `remount` \\" | \\" `mand` \\" | \\" `nomand` \\" | \\" `atime` \\" | \\" `noatime` \\" | \\" `diratime` \\" | \\" `nodiratime` \\" | \\" `bind` \\" | \\" `rbind\\" | \\"unbindable\\" | \\"runbindable\\" | \\"private\\" | \\"rprivate\\" | \\"shared\\" | \\"rshared\\" | \\"slave\\" | \\"rslave\\" | \\"relatime` \\" | \\" `norelatime` \\" | \\" `strictatime` \\" | \\" `nostrictatime` \\" | \\" `mode` \\" | \\" `uid` \\" | \\" `gid` \\" | \\" `nr_inodes` \\" | \\" `nr_blocks` \\" | \\" `mpol` \\"","Size":"The size (in MiB) of the `tmpfs` volume."}},"AWS::Batch::JobDefinition.Ulimit":{"attributes":{},"description":"The `ulimit` settings to pass to the container.\\n\\n> This object isn\'t applicable to jobs that are running on Fargate resources.","properties":{"HardLimit":"The hard limit for the `ulimit` type.","Name":"The `type` of the `ulimit` .","SoftLimit":"The soft limit for the `ulimit` type."}},"AWS::Batch::JobDefinition.Volumes":{"attributes":{},"description":"A list of volumes that are associated with the job.","properties":{"EfsVolumeConfiguration":"This is used when you\'re using an Amazon Elastic File System file system for job storage. For more information, see [Amazon EFS Volumes](https://docs.aws.amazon.com/batch/latest/userguide/efs-volumes.html) in the *AWS Batch User Guide* .","Host":"The contents of the `host` parameter determine whether your data volume persists on the host container instance and where it\'s stored. If the host parameter is empty, then the Docker daemon assigns a host path for your data volume. However, the data isn\'t guaranteed to persist after the containers that are associated with it stop running.\\n\\n> This parameter isn\'t applicable to jobs that are running on Fargate resources and shouldn\'t be provided.","Name":"The name of the volume. It can be up to 255 characters long. It can contain uppercase and lowercase letters, numbers, hyphens (-), and underscores (_). This name is referenced in the `sourceVolume` parameter of container definition `mountPoints` ."}},"AWS::Batch::JobDefinition.VolumesHost":{"attributes":{},"description":"Determine whether your data volume persists on the host container instance and where it\'s stored. If this parameter is empty, then the Docker daemon assigns a host path for your data volume. However, the data isn\'t guaranteed to persist after the containers that are associated with it stop running.","properties":{"SourcePath":"The path on the host container instance that\'s presented to the container. If this parameter is empty, then the Docker daemon has assigned a host path for you. If this parameter contains a file location, then the data volume persists at the specified location on the host container instance until you delete it manually. If the source path location doesn\'t exist on the host container instance, the Docker daemon creates it. If the location does exist, the contents of the source path folder are exported.\\n\\n> This parameter isn\'t applicable to jobs that run on Fargate resources. Don\'t provide this for these jobs."}},"AWS::Batch::JobQueue":{"attributes":{"JobQueueArn":"Returns the job queue ARN, such as `batch: *us-east-1* : *111122223333* :job-queue/ *JobQueueName*` .","Ref":"`Ref` returns the job queue ARN, such as `batch: *us-east-1* : *111122223333* :job-queue/ *HighPriority*` ."},"description":"The `AWS::Batch::JobQueue` resource specifies the parameters for an AWS Batch job queue definition. For more information, see [Job Queues](https://docs.aws.amazon.com/batch/latest/userguide/job_queues.html) in the ** .","properties":{"ComputeEnvironmentOrder":"The set of compute environments mapped to a job queue and their order relative to each other. The job scheduler uses this parameter to determine which compute environment runs a specific job. Compute environments must be in the `VALID` state before you can associate them with a job queue. You can associate up to three compute environments with a job queue. All of the compute environments must be either EC2 ( `EC2` or `SPOT` ) or Fargate ( `FARGATE` or `FARGATE_SPOT` ); EC2 and Fargate compute environments can\'t be mixed.\\n\\n> All compute environments that are associated with a job queue must share the same architecture. AWS Batch doesn\'t support mixing compute environment architecture types in a single job queue.","JobQueueName":"The name of the job queue. It can be up to 128 letters long. It can contain uppercase and lowercase letters, numbers, hyphens (-), and underscores (_).","Priority":"The priority of the job queue. Job queues with a higher priority (or a higher integer value for the `priority` parameter) are evaluated first when associated with the same compute environment. Priority is determined in descending order. For example, a job queue with a priority value of `10` is given scheduling preference over a job queue with a priority value of `1` . All of the compute environments must be either EC2 ( `EC2` or `SPOT` ) or Fargate ( `FARGATE` or `FARGATE_SPOT` ); EC2 and Fargate compute environments can\'t be mixed.","SchedulingPolicyArn":"The Amazon Resource Name (ARN) of the scheduling policy. The format is `aws: *Partition* :batch: *Region* : *Account* :scheduling-policy/ *Name*` . For example, `aws:aws:batch:us-west-2:123456789012:scheduling-policy/MySchedulingPolicy` .","State":"The state of the job queue. If the job queue state is `ENABLED` , it is able to accept jobs. If the job queue state is `DISABLED` , new jobs can\'t be added to the queue, but jobs already in the queue can finish.","Tags":"The tags that are applied to the job queue. For more information, see [Tagging your AWS Batch resources](https://docs.aws.amazon.com/batch/latest/userguide/using-tags.html) in *AWS Batch User Guide* ."}},"AWS::Batch::JobQueue.ComputeEnvironmentOrder":{"attributes":{},"description":"The order that compute environments are tried in for job placement within a queue. Compute environments are tried in ascending order. For example, if two compute environments are associated with a job queue, the compute environment with a lower order integer value is tried for job placement first. Compute environments must be in the `VALID` state before you can associate them with a job queue. All of the compute environments must be either EC2 ( `EC2` or `SPOT` ) or Fargate ( `FARGATE` or `FARGATE_SPOT` ); EC2 and Fargate compute environments can\'t be mixed.\\n\\n> All compute environments that are associated with a job queue must share the same architecture. AWS Batch doesn\'t support mixing compute environment architecture types in a single job queue.","properties":{"ComputeEnvironment":"The Amazon Resource Name (ARN) of the compute environment.","Order":"The order of the compute environment. Compute environments are tried in ascending order. For example, if two compute environments are associated with a job queue, the compute environment with a lower `order` integer value is tried for job placement first."}},"AWS::Batch::SchedulingPolicy":{"attributes":{"Arn":"Returns the scheduling policy ARN, such as `batch: *us-east-1* : *111122223333* :scheduling-policy/ *HighPriority*` .","Ref":"`Ref` returns the scheduling policy ARN, such as `batch: *us-east-1* : *111122223333* :scheduling-policy/ *HighPriority*` ."},"description":"The `AWS::Batch::SchedulingPolicy` resource specifies the parameters for an AWS Batch scheduling policy. For more information, see [Scheduling Policies](https://docs.aws.amazon.com/batch/latest/userguide/scheduling_policies.html) in the ** .","properties":{"FairsharePolicy":"The fair share policy of the scheduling policy.","Name":"The name of the scheduling policy. It can be up to 128 letters long. It can contain uppercase and lowercase letters, numbers, hyphens (-), and underscores (_).","Tags":"The tags that you apply to the scheduling policy to help you categorize and organize your resources. Each tag consists of a key and an optional value. For more information, see [Tagging AWS Resources](https://docs.aws.amazon.com/general/latest/gr/aws_tagging.html) in *AWS General Reference* .\\n\\nThese tags can be updated or removed using the [TagResource](https://docs.aws.amazon.com/batch/latest/APIReference/API_TagResource.html) and [UntagResource](https://docs.aws.amazon.com/batch/latest/APIReference/API_UntagResource.html) API operations."}},"AWS::Batch::SchedulingPolicy.FairsharePolicy":{"attributes":{},"description":"The fair share policy for a scheduling policy.","properties":{"ComputeReservation":"A value used to reserve some of the available maximum vCPU for fair share identifiers that aren\'t already used.\\n\\nThe reserved ratio is `( *computeReservation* /100)^ *ActiveFairShares*` where `*ActiveFairShares*` is the number of active fair share identifiers.\\n\\nFor example, a `computeReservation` value of 50 indicates that AWS Batch reserves 50% of the maximum available vCPU if there\'s only one fair share identifier. It reserves 25% if there are two fair share identifiers. It reserves 12.5% if there are three fair share identifiers. A `computeReservation` value of 25 indicates that AWS Batch should reserve 25% of the maximum available vCPU if there\'s only one fair share identifier, 6.25% if there are two fair share identifiers, and 1.56% if there are three fair share identifiers.\\n\\nThe minimum value is 0 and the maximum value is 99.","ShareDecaySeconds":"The amount of time (in seconds) to use to calculate a fair share percentage for each fair share identifier in use. A value of zero (0) indicates that only current usage is measured. The decay allows for more recently run jobs to have more weight than jobs that ran earlier. The maximum supported value is 604800 (1 week).","ShareDistribution":"An array of `SharedIdentifier` objects that contain the weights for the fair share identifiers for the fair share policy. Fair share identifiers that aren\'t included have a default weight of `1.0` ."}},"AWS::Batch::SchedulingPolicy.ShareAttributes":{"attributes":{},"description":"Specifies the weights for the fair share identifiers for the fair share policy. Fair share identifiers that aren\'t included have a default weight of `1.0` .","properties":{"ShareIdentifier":"A fair share identifier or fair share identifier prefix. If the string ends with an asterisk (*), this entry specifies the weight factor to use for fair share identifiers that start with that prefix. The list of fair share identifiers in a fair share policy can\'t overlap. For example, you can\'t have one that specifies a `shareIdentifier` of `UserA*` and another that specifies a `shareIdentifier` of `UserA-1` .\\n\\nThere can be no more than 500 fair share identifiers active in a job queue.\\n\\nThe string is limited to 255 alphanumeric characters, and can be followed by an asterisk (*).","WeightFactor":"The weight factor for the fair share identifier. The default value is 1.0. A lower value has a higher priority for compute resources. For example, jobs that use a share identifier with a weight factor of 0.125 (1/8) get 8 times the compute resources of jobs that use a share identifier with a weight factor of 1.\\n\\nThe smallest supported value is 0.0001, and the largest supported value is 999.9999."}},"AWS::BillingConductor::BillingGroup":{"attributes":{"Arn":"The Amazon Resource Name (ARN) of the created billing group.","CreationTime":"The time the billing group was created.","LastModifiedTime":"The most recent time the billing group was modified.","Ref":"","Size":"The number of accounts in the particular billing group.","Status":"The billing group status. Only one of the valid values can be used.","StatusReason":"The reason why the billing group is in its current status."},"description":"Creates a billing group that resembles a consolidated billing family that AWS charges, based off of the predefined pricing plan computation.","properties":{"AccountGrouping":"The set of accounts that will be under the billing group. The set of accounts resemble the linked accounts in a consolidated family.","ComputationPreference":"The preferences and settings that will be used to compute the AWS charges for a billing group.","Description":"The description of the billing group.","Name":"The billing group\'s name.","PrimaryAccountId":"The account ID that serves as the main account in a billing group.","Tags":""}},"AWS::BillingConductor::BillingGroup.AccountGrouping":{"attributes":{},"description":"The set of accounts that will be under the billing group. The set of accounts resemble the linked accounts in a consolidated family.","properties":{"LinkedAccountIds":"The account IDs that make up the billing group. Account IDs must be a part of the consolidated billing family, and not associated with another billing group."}},"AWS::BillingConductor::BillingGroup.ComputationPreference":{"attributes":{},"description":"The preferences and settings that will be used to compute the AWS charges for a billing group.","properties":{"PricingPlanArn":"The Amazon Resource Name (ARN) of the pricing plan used to compute the AWS charges for a billing group."}},"AWS::BillingConductor::CustomLineItem":{"attributes":{"Arn":"The Amazon Resource Name (ARN) that references the billing group where the custom line item applies to.","AssociationSize":"The number of resources that are associated to the custom line item.","CreationTime":"The time created.","CurrencyCode":"The custom line item\'s charge value currency. Only one of the valid values can be used.","LastModifiedTime":"The most recent time the custom line item was modified.","ProductCode":"The product code associated with the custom line item.","Ref":""},"description":"Creates a custom line item that can be used to create a one-time or recurring, fixed or percentage-based charge that you can apply to a single billing group. You can apply custom line items to the current or previous billing period. You can create either a fee or a discount custom line item.","properties":{"BillingGroupArn":"The Amazon Resource Name (ARN) that references the billing group where the custom line item applies to.","BillingPeriodRange":"A time range for which the custom line item is effective.","CustomLineItemChargeDetails":"The charge details of a custom line item. It should contain only one of `Flat` or `Percentage` .","Description":"The custom line item\'s description. This is shown on the Bills page in association with the charge value.","Name":"The custom line item\'s name.","Tags":"A map that contains tag keys and tag values that are attached to a custom line item."}},"AWS::BillingConductor::CustomLineItem.BillingPeriodRange":{"attributes":{},"description":"The billing period range in which the custom line item request will be applied.","properties":{"ExclusiveEndBillingPeriod":"The exclusive end billing period that defines a billing period range where a custom line is applied.","InclusiveStartBillingPeriod":"The inclusive start billing period that defines a billing period range where a custom line is applied."}},"AWS::BillingConductor::CustomLineItem.CustomLineItemChargeDetails":{"attributes":{},"description":"The charge details of a custom line item. It should contain only one of `Flat` or `Percentage` .","properties":{"Flat":"A `CustomLineItemFlatChargeDetails` that describes the charge details of a flat custom line item.","Percentage":"A `CustomLineItemPercentageChargeDetails` that describes the charge details of a percentage custom line item.","Type":"The type of the custom line item that indicates whether the charge is a fee or credit."}},"AWS::BillingConductor::CustomLineItem.CustomLineItemFlatChargeDetails":{"attributes":{},"description":"The charge details of a custom line item. It should contain only one of `Flat` or `Percentage` .","properties":{"ChargeValue":"The custom line item\'s fixed charge value in USD."}},"AWS::BillingConductor::CustomLineItem.CustomLineItemPercentageChargeDetails":{"attributes":{},"description":"A representation of the charge details associated with a percentage custom line item.","properties":{"ChildAssociatedResources":"A list of resource ARNs to associate to the percentage custom line item.","PercentageValue":"The custom line item\'s percentage value. This will be multiplied against the combined value of its associated resources to determine its charge value."}},"AWS::BillingConductor::PricingPlan":{"attributes":{"Arn":"The Amazon Resource Name (ARN) of the created pricing plan.","CreationTime":"The time the pricing plan was created.","LastModifiedTime":"The most recent time the pricing plan was modified.","Ref":"","Size":"The pricing rules count currently associated with this pricing plan list element."},"description":"Creates a pricing plan that is used for computing AWS charges for billing groups.","properties":{"Description":"The pricing plan description.","Name":"The name of a pricing plan.","PricingRuleArns":"The `PricingRuleArns` that are associated with the Pricing Plan.","Tags":"A map that contains tag keys and tag values that are attached to a pricing plan."}},"AWS::BillingConductor::PricingRule":{"attributes":{"Arn":"The Amazon Resource Name (ARN) used to uniquely identify a pricing rule.","AssociatedPricingPlanCount":"The pricing plans count that this pricing rule is associated with.","CreationTime":"The time the pricing rule was created.","LastModifiedTime":"The most recent time the pricing rule was modified.","Ref":""},"description":"Creates a pricing rule which can be associated with a pricing plan, or a set of pricing plans.","properties":{"BillingEntity":"The seller of services provided by AWS , their affiliates, or third-party providers selling services via AWS Marketplace .","Description":"The pricing rule description.","ModifierPercentage":"A percentage modifier applied on the public pricing rates.","Name":"The name of a pricing rule.","Operation":"Operation is the specific AWS action covered by this line item. This describes the specific usage of the line item.\\n\\nIf the `Scope` attribute is set to `SKU` , this attribute indicates which operation the `PricingRule` is modifying. For example, a value of `RunInstances:0202` indicates the operation of running an Amazon EC2 instance.","Scope":"The scope of pricing rule that indicates if it\'s globally applicable or service-specific.","Service":"If the `Scope` attribute is `SERVICE` , this attribute indicates which service the `PricingRule` is applicable for.","Tags":"A map that contains tag keys and tag values that are attached to a pricing rule.","Tiering":"The set of tiering configurations for the pricing rule.","Type":"The type of pricing rule.","UsageType":"Usage Type is the unit that each service uses to measure the usage of a specific type of resource."}},"AWS::BillingConductor::PricingRule.FreeTier":{"attributes":{},"description":"The possible AWS Free Tier configurations.","properties":{"Activated":"Activate or deactivate AWS Free Tier."}},"AWS::BillingConductor::PricingRule.Tiering":{"attributes":{},"description":"","properties":{"FreeTier":""}},"AWS::Budgets::Budget":{"attributes":{"Ref":"`Ref` returns the name of the budget that is created by the template."},"description":"The `AWS::Budgets::Budget` resource allows customers to take pre-defined actions that will trigger once a budget threshold has been exceeded. creates, replaces, or deletes budgets for Billing and Cost Management. For more information, see [Managing Your Costs with Budgets](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/budgets-managing-costs.html) in the *AWS Billing and Cost Management User Guide* .","properties":{"Budget":"The budget object that you want to create.","NotificationsWithSubscribers":"A notification that you want to associate with a budget. A budget can have up to five notifications, and each notification can have one SNS subscriber and up to 10 email subscribers. If you include notifications and subscribers in your `CreateBudget` call, AWS creates the notifications and subscribers for you."}},"AWS::Budgets::Budget.AutoAdjustData":{"attributes":{},"description":"Determine the budget amount for an auto-adjusting budget.","properties":{"AutoAdjustType":"The string that defines whether your budget auto-adjusts based on historical or forecasted data.","HistoricalOptions":"The parameters that define or describe the historical data that your auto-adjusting budget is based on."}},"AWS::Budgets::Budget.BudgetData":{"attributes":{},"description":"Represents the output of the `CreateBudget` operation. The content consists of the detailed metadata and data file information, and the current status of the `budget` object.\\n\\nThis is the Amazon Resource Name (ARN) pattern for a budget:\\n\\n`arn:aws:budgets::AccountId:budget/budgetName`","properties":{"AutoAdjustData":"Determine the budget amount for an auto-adjusting budget.","BudgetLimit":"The total amount of cost, usage, RI utilization, RI coverage, Savings Plans utilization, or Savings Plans coverage that you want to track with your budget.\\n\\n`BudgetLimit` is required for cost or usage budgets, but optional for RI or Savings Plans utilization or coverage budgets. RI and Savings Plans utilization or coverage budgets default to `100` . This is the only valid value for RI or Savings Plans utilization or coverage budgets. You can\'t use `BudgetLimit` with `PlannedBudgetLimits` for `CreateBudget` and `UpdateBudget` actions.","BudgetName":"The name of a budget. The value must be unique within an account. `BudgetName` can\'t include `:` and `\\\\` characters. If you don\'t include value for `BudgetName` in the template, Billing and Cost Management assigns your budget a randomly generated name.","BudgetType":"Specifies whether this budget tracks costs, usage, RI utilization, RI coverage, Savings Plans utilization, or Savings Plans coverage.","CostFilters":"The cost filters, such as `Region` , `Service` , `member account` , `Tag` , or `Cost Category` , that are applied to a budget.\\n\\nAWS Budgets supports the following services as a `Service` filter for RI budgets:\\n\\n- Amazon EC2\\n- Amazon Redshift\\n- Amazon Relational Database Service\\n- Amazon ElastiCache\\n- Amazon OpenSearch Service","CostTypes":"The types of costs that are included in this `COST` budget.\\n\\n`USAGE` , `RI_UTILIZATION` , `RI_COVERAGE` , `SAVINGS_PLANS_UTILIZATION` , and `SAVINGS_PLANS_COVERAGE` budgets do not have `CostTypes` .","PlannedBudgetLimits":"A map containing multiple `BudgetLimit` , including current or future limits.\\n\\n`PlannedBudgetLimits` is available for cost or usage budget and supports both monthly and quarterly `TimeUnit` .\\n\\nFor monthly budgets, provide 12 months of `PlannedBudgetLimits` values. This must start from the current month and include the next 11 months. The `key` is the start of the month, `UTC` in epoch seconds.\\n\\nFor quarterly budgets, provide four quarters of `PlannedBudgetLimits` value entries in standard calendar quarter increments. This must start from the current quarter and include the next three quarters. The `key` is the start of the quarter, `UTC` in epoch seconds.\\n\\nIf the planned budget expires before 12 months for monthly or four quarters for quarterly, provide the `PlannedBudgetLimits` values only for the remaining periods.\\n\\nIf the budget begins at a date in the future, provide `PlannedBudgetLimits` values from the start date of the budget.\\n\\nAfter all of the `BudgetLimit` values in `PlannedBudgetLimits` are used, the budget continues to use the last limit as the `BudgetLimit` . At that point, the planned budget provides the same experience as a fixed budget.\\n\\n`DescribeBudget` and `DescribeBudgets` response along with `PlannedBudgetLimits` also contain `BudgetLimit` representing the current month or quarter limit present in `PlannedBudgetLimits` . This only applies to budgets that are created with `PlannedBudgetLimits` . Budgets that are created without `PlannedBudgetLimits` only contain `BudgetLimit` . They don\'t contain `PlannedBudgetLimits` .","TimePeriod":"The period of time that is covered by a budget. The period has a start date and an end date. The start date must come before the end date. There are no restrictions on the end date.\\n\\nThe start date for a budget. If you created your budget and didn\'t specify a start date, the start date defaults to the start of the chosen time period (MONTHLY, QUARTERLY, or ANNUALLY). For example, if you create your budget on January 24, 2019, choose `MONTHLY` , and don\'t set a start date, the start date defaults to `01/01/19 00:00 UTC` . The defaults are the same for the AWS Billing and Cost Management console and the API.\\n\\nYou can change your start date with the `UpdateBudget` operation.\\n\\nAfter the end date, AWS deletes the budget and all associated notifications and subscribers.","TimeUnit":"The length of time until a budget resets the actual and forecasted spend. `DAILY` is available only for `RI_UTILIZATION` and `RI_COVERAGE` budgets."}},"AWS::Budgets::Budget.CostTypes":{"attributes":{},"description":"The types of cost that are included in a `COST` budget, such as tax and subscriptions.\\n\\n`USAGE` , `RI_UTILIZATION` , `RI_COVERAGE` , `SAVINGS_PLANS_UTILIZATION` , and `SAVINGS_PLANS_COVERAGE` budgets don\'t have `CostTypes` .","properties":{"IncludeCredit":"Specifies whether a budget includes credits.\\n\\nThe default value is `true` .","IncludeDiscount":"Specifies whether a budget includes discounts.\\n\\nThe default value is `true` .","IncludeOtherSubscription":"Specifies whether a budget includes non-RI subscription costs.\\n\\nThe default value is `true` .","IncludeRecurring":"Specifies whether a budget includes recurring fees such as monthly RI fees.\\n\\nThe default value is `true` .","IncludeRefund":"Specifies whether a budget includes refunds.\\n\\nThe default value is `true` .","IncludeSubscription":"Specifies whether a budget includes subscriptions.\\n\\nThe default value is `true` .","IncludeSupport":"Specifies whether a budget includes support subscription fees.\\n\\nThe default value is `true` .","IncludeTax":"Specifies whether a budget includes taxes.\\n\\nThe default value is `true` .","IncludeUpfront":"Specifies whether a budget includes upfront RI costs.\\n\\nThe default value is `true` .","UseAmortized":"Specifies whether a budget uses the amortized rate.\\n\\nThe default value is `false` .","UseBlended":"Specifies whether a budget uses a blended rate.\\n\\nThe default value is `false` ."}},"AWS::Budgets::Budget.HistoricalOptions":{"attributes":{},"description":"The parameters that define or describe the historical data that your auto-adjusting budget is based on.","properties":{"BudgetAdjustmentPeriod":"The number of budget periods included in the moving-average calculation that determines your auto-adjusted budget amount. The maximum value depends on the `TimeUnit` granularity of the budget:\\n\\n- For the `DAILY` granularity, the maximum value is `60` .\\n- For the `MONTHLY` granularity, the maximum value is `12` .\\n- For the `QUARTERLY` granularity, the maximum value is `4` .\\n- For the `ANNUALLY` granularity, the maximum value is `1` ."}},"AWS::Budgets::Budget.Notification":{"attributes":{},"description":"A notification that\'s associated with a budget. A budget can have up to ten notifications.\\n\\nEach notification must have at least one subscriber. A notification can have one SNS subscriber and up to 10 email subscribers, for a total of 11 subscribers.\\n\\nFor example, if you have a budget for 200 dollars and you want to be notified when you go over 160 dollars, create a notification with the following parameters:\\n\\n- A notificationType of `ACTUAL`\\n- A `thresholdType` of `PERCENTAGE`\\n- A `comparisonOperator` of `GREATER_THAN`\\n- A notification `threshold` of `80`","properties":{"ComparisonOperator":"The comparison that\'s used for this notification.","NotificationType":"Specifies whether the notification is for how much you have spent ( `ACTUAL` ) or for how much that you\'re forecasted to spend ( `FORECASTED` ).","Threshold":"The threshold that\'s associated with a notification. Thresholds are always a percentage, and many customers find value being alerted between 50% - 200% of the budgeted amount. The maximum limit for your threshold is 1,000,000% above the budgeted amount.","ThresholdType":"The type of threshold for a notification. For `ABSOLUTE_VALUE` thresholds, AWS notifies you when you go over or are forecasted to go over your total cost threshold. For `PERCENTAGE` thresholds, AWS notifies you when you go over or are forecasted to go over a certain percentage of your forecasted spend. For example, if you have a budget for 200 dollars and you have a `PERCENTAGE` threshold of 80%, AWS notifies you when you go over 160 dollars."}},"AWS::Budgets::Budget.NotificationWithSubscribers":{"attributes":{},"description":"A notification with subscribers. A notification can have one SNS subscriber and up to 10 email subscribers, for a total of 11 subscribers.","properties":{"Notification":"The notification that\'s associated with a budget.","Subscribers":"A list of subscribers who are subscribed to this notification."}},"AWS::Budgets::Budget.Spend":{"attributes":{},"description":"The amount of cost or usage that\'s measured for a budget.\\n\\nFor example, a `Spend` for `3 GB` of S3 usage has the following parameters:\\n\\n- An `Amount` of `3`\\n- A `unit` of `GB`","properties":{"Amount":"The cost or usage amount that\'s associated with a budget forecast, actual spend, or budget threshold.","Unit":"The unit of measurement that\'s used for the budget forecast, actual spend, or budget threshold, such as USD or GBP."}},"AWS::Budgets::Budget.Subscriber":{"attributes":{},"description":"The `Subscriber` property type specifies who to notify for a Billing and Cost Management budget notification. The subscriber consists of a subscription type, and either an Amazon SNS topic or an email address.\\n\\nFor example, an email subscriber would have the following parameters:\\n\\n- A `subscriptionType` of `EMAIL`\\n- An `address` of `example@example.com`","properties":{"Address":"The address that AWS sends budget notifications to, either an SNS topic or an email.\\n\\nWhen you create a subscriber, the value of `Address` can\'t contain line breaks.","SubscriptionType":"The type of notification that AWS sends to a subscriber."}},"AWS::Budgets::Budget.TimePeriod":{"attributes":{},"description":"The period of time that is covered by a budget. The period has a start date and an end date. The start date must come before the end date. There are no restrictions on the end date.","properties":{"End":"The end date for a budget. If you didn\'t specify an end date, AWS set your end date to `06/15/87 00:00 UTC` . The defaults are the same for the AWS Billing and Cost Management console and the API.\\n\\nAfter the end date, AWS deletes the budget and all the associated notifications and subscribers. You can change your end date with the `UpdateBudget` operation.","Start":"The start date for a budget. If you created your budget and didn\'t specify a start date, the start date defaults to the start of the chosen time period (MONTHLY, QUARTERLY, or ANNUALLY). For example, if you create your budget on January 24, 2019, choose `MONTHLY` , and don\'t set a start date, the start date defaults to `01/01/19 00:00 UTC` . The defaults are the same for the AWS Billing and Cost Management console and the API.\\n\\nYou can change your start date with the `UpdateBudget` operation.\\n\\nValid values depend on the value of `BudgetType` :\\n\\n- If `BudgetType` is `COST` or `USAGE` : Valid values are `MONTHLY` , `QUARTERLY` , and `ANNUALLY` .\\n- If `BudgetType` is `RI_UTILIZATION` or `RI_COVERAGE` : Valid values are `DAILY` , `MONTHLY` , `QUARTERLY` , and `ANNUALLY` ."}},"AWS::Budgets::BudgetsAction":{"attributes":{"ActionId":"A system-generated universally unique identifier (UUID) for the action."},"description":"The `AWS::Budgets::BudgetsAction` resource enables you to take predefined actions that are initiated when a budget threshold has been exceeded. For more information, see [Managing Your Costs with Budgets](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/budgets-managing-costs.html) in the *AWS Billing and Cost Management User Guide* .","properties":{"ActionThreshold":"The trigger threshold of the action.","ActionType":"The type of action. This defines the type of tasks that can be carried out by this action. This field also determines the format for definition.","ApprovalModel":"This specifies if the action needs manual or automatic approval.","BudgetName":"A string that represents the budget name. \\":\\" and \\"\\\\\\" characters aren\'t allowed.","Definition":"Specifies all of the type-specific parameters.","ExecutionRoleArn":"The role passed for action execution and reversion. Roles and actions must be in the same account.","NotificationType":"The type of a notification.","Subscribers":"A list of subscribers."}},"AWS::Budgets::BudgetsAction.ActionThreshold":{"attributes":{},"description":"The trigger threshold of the action.","properties":{"Type":"The type of threshold for a notification.","Value":"The threshold of a notification."}},"AWS::Budgets::BudgetsAction.Definition":{"attributes":{},"description":"The definition is where you specify all of the type-specific parameters.","properties":{"IamActionDefinition":"The AWS Identity and Access Management ( IAM ) action definition details.","ScpActionDefinition":"The service control policies (SCP) action definition details.","SsmActionDefinition":"The Amazon EC2 Systems Manager ( SSM ) action definition details."}},"AWS::Budgets::BudgetsAction.IamActionDefinition":{"attributes":{},"description":"The AWS Identity and Access Management ( IAM ) action definition details.","properties":{"Groups":"A list of groups to be attached. There must be at least one group.","PolicyArn":"The Amazon Resource Name (ARN) of the policy to be attached.","Roles":"A list of roles to be attached. There must be at least one role.","Users":"A list of users to be attached. There must be at least one user."}},"AWS::Budgets::BudgetsAction.ScpActionDefinition":{"attributes":{},"description":"The service control policies (SCP) action definition details.","properties":{"PolicyId":"The policy ID attached.","TargetIds":"A list of target IDs."}},"AWS::Budgets::BudgetsAction.SsmActionDefinition":{"attributes":{},"description":"The Amazon EC2 Systems Manager ( SSM ) action definition details.","properties":{"InstanceIds":"The EC2 and RDS instance IDs.","Region":"The Region to run the ( SSM ) document.","Subtype":"The action subType."}},"AWS::Budgets::BudgetsAction.Subscriber":{"attributes":{},"description":"The subscriber to a budget notification. The subscriber consists of a subscription type and either an Amazon SNS topic or an email address.\\n\\nFor example, an email subscriber has the following parameters:\\n\\n- A `subscriptionType` of `EMAIL`\\n- An `address` of `example@example.com`","properties":{"Address":"The address that AWS sends budget notifications to, either an SNS topic or an email.\\n\\nWhen you create a subscriber, the value of `Address` can\'t contain line breaks.","Type":"The type of notification that AWS sends to a subscriber."}},"AWS::CE::AnomalyMonitor":{"attributes":{"CreationDate":"The date when the monitor was created.","DimensionalValueCount":"The value for evaluated dimensions.","LastEvaluatedDate":"The date when the monitor last evaluated for anomalies.","LastUpdatedDate":"The date when the monitor was last updated.","MonitorArn":"The Amazon Resource Name (ARN) value for the monitor.","Ref":"`Ref` returns `MonitorArn` . For example:\\n\\n`{ \\"Ref\\": \\"myAnomalySubscriptionLogicalName\\" }`"},"description":"The `AWS::CE::AnomalyMonitor` resource is a Cost Explorer resource type that continuously inspects your account\'s cost data for anomalies, based on `MonitorType` and `MonitorSpecification` . The content consists of detailed metadata and the current status of the monitor object.","properties":{"MonitorDimension":"The dimensions to evaluate.","MonitorName":"The name of the monitor.","MonitorSpecification":"The array of `MonitorSpecification` in JSON array format. For instance, you can use `MonitorSpecification` to specify a tag, Cost Category, or linked account for your custom anomaly monitor. For further information, see the [Examples](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ce-anomalymonitor.html#aws-resource-ce-anomalymonitor--examples) section of this page.","MonitorType":"The possible type values.","ResourceTags":""}},"AWS::CE::AnomalyMonitor.ResourceTag":{"attributes":{},"description":"The tag structure that contains a tag key and value.\\n\\n> Tagging is supported only for the following Cost Explorer resource types: [`AnomalyMonitor`](https://docs.aws.amazon.com/aws-cost-management/latest/APIReference/API_AnomalyMonitor.html) , [`AnomalySubscription`](https://docs.aws.amazon.com/aws-cost-management/latest/APIReference/API_AnomalySubscription.html) , [`CostCategory`](https://docs.aws.amazon.com/aws-cost-management/latest/APIReference/API_CostCategory.html) .","properties":{"Key":"The key that\'s associated with the tag.","Value":"The value that\'s associated with the tag."}},"AWS::CE::AnomalySubscription":{"attributes":{"AccountId":"Your unique account identifier.","Ref":"`Ref` returns `SubscriptionArn` . For example:\\n\\n`{ \\"Ref\\": \\"myAnomalyMonitorLogicalName\\" }`","SubscriptionArn":"The `AnomalySubscription` Amazon Resource Name (ARN)."},"description":"The `AWS::CE::AnomalySubscription` resource (also referred to as an alert subscription) is a Cost Explorer resource type that sends notifications about specific anomalies that meet an alerting criteria defined by you.\\n\\nYou can specify the frequency of the alerts and the subscribers to notify.\\n\\nAnomaly subscriptions can be associated with one or more [`AWS::CE::AnomalyMonitor`](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ce-anomalymonitor.html) resources, and they only send notifications about anomalies detected by those associated monitors. You can also configure a threshold to further control which anomalies are included in the notifications.\\n\\nAnomalies that don’t exceed the chosen threshold and therefore don’t trigger notifications from an anomaly subscription will still be available on the console and from the [`GetAnomalies`](https://docs.aws.amazon.com/aws-cost-management/latest/APIReference/API_GetAnomalies.html) API.","properties":{"Frequency":"The frequency that anomaly notifications are sent. Notifications are sent either over email (for DAILY and WEEKLY frequencies) or SNS (for IMMEDIATE frequency). For more information, see [Creating an Amazon SNS topic for anomaly notifications](https://docs.aws.amazon.com/cost-management/latest/userguide/ad-SNS.html) .","MonitorArnList":"A list of cost anomaly monitors.","ResourceTags":"","Subscribers":"A list of subscribers to notify.","SubscriptionName":"The name for the subscription.","Threshold":"(deprecated)\\n\\nAn absolute dollar value that must be exceeded by the anomaly\'s total impact (see [Impact](https://docs.aws.amazon.com/aws-cost-management/latest/APIReference/API_Impact.html) for more details) for an anomaly notification to be generated.\\n\\nThis field has been deprecated. To specify a threshold, use ThresholdExpression. Continued use of Threshold will be treated as shorthand syntax for a ThresholdExpression.\\n\\nOne of Threshold or ThresholdExpression is required for `AWS::CE::AnomalySubscription` . You cannot specify both.","ThresholdExpression":"An [Expression](https://docs.aws.amazon.com/aws-cost-management/latest/APIReference/API_Expression.html) object in JSON string format used to specify the anomalies that you want to generate alerts for. This supports dimensions and nested expressions. The supported dimensions are `ANOMALY_TOTAL_IMPACT_ABSOLUTE` and `ANOMALY_TOTAL_IMPACT_PERCENTAGE` , corresponding to an anomaly’s TotalImpact and TotalImpactPercentage, respectively (see [Impact](https://docs.aws.amazon.com/aws-cost-management/latest/APIReference/API_Impact.html) for more details). The supported nested expression types are `AND` and `OR` . The match option `GREATER_THAN_OR_EQUAL` is required. Values must be numbers between 0 and 10,000,000,000 in string format.\\n\\nOne of Threshold or ThresholdExpression is required for `AWS::CE::AnomalySubscription` . You cannot specify both.\\n\\nFor further information, see the [Examples](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ce-anomalysubscription.html#aws-resource-ce-anomalysubscription--examples) section of this page."}},"AWS::CE::AnomalySubscription.ResourceTag":{"attributes":{},"description":"The tag structure that contains a tag key and value.\\n\\n> Tagging is supported only for the following Cost Explorer resource types: [`AnomalyMonitor`](https://docs.aws.amazon.com/aws-cost-management/latest/APIReference/API_AnomalyMonitor.html) , [`AnomalySubscription`](https://docs.aws.amazon.com/aws-cost-management/latest/APIReference/API_AnomalySubscription.html) , [`CostCategory`](https://docs.aws.amazon.com/aws-cost-management/latest/APIReference/API_CostCategory.html) .","properties":{"Key":"The key that\'s associated with the tag.","Value":"The value that\'s associated with the tag."}},"AWS::CE::AnomalySubscription.Subscriber":{"attributes":{},"description":"The recipient of `AnomalySubscription` notifications.","properties":{"Address":"The email address or SNS Topic Amazon Resource Name (ARN), depending on the `Type` .","Status":"Indicates if the subscriber accepts the notifications.","Type":"The notification delivery channel."}},"AWS::CE::CostCategory":{"attributes":{"Arn":"The unique identifier for your Cost Category.","EffectiveStart":"The Cost Category\'s effective start date.","Ref":"`Ref` returns the Arn of the Cost Category that is created by the template."},"description":"The `AWS::CE::CostCategory` resource creates groupings of cost that you can use across products in the AWS Billing and Cost Management console, such as Cost Explorer and AWS Budgets. For more information, see [Managing Your Costs with Cost Categories](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/manage-cost-categories.html) in the *AWS Billing and Cost Management User Guide* .","properties":{"DefaultValue":"The default value for the cost category.","Name":"The unique name of the Cost Category.","RuleVersion":"The rule schema version in this particular Cost Category.","Rules":"The array of CostCategoryRule in JSON array format.\\n\\n> Rules are processed in order. If there are multiple rules that match the line item, then the first rule to match is used to determine that Cost Category value.","SplitChargeRules":"The split charge rules that are used to allocate your charges between your Cost Category values."}},"AWS::CUR::ReportDefinition":{"attributes":{"Ref":"`Ref` returns\\n\\n`{ \\"Ref\\": \\"ReportName\\" }`\\n\\nThe name of the report that you want to create. The name must be unique, is case sensitive, and can\'t include spaces."},"description":"The definition of AWS Cost and Usage Report. You can specify the report name, time unit, report format, compression format, S3 bucket, additional artifacts, and schema elements in the definition.","properties":{"AdditionalArtifacts":"A list of manifests that you want AWS to create for this report.","AdditionalSchemaElements":"A list of strings that indicate additional content that AWS includes in the report, such as individual resource IDs.","BillingViewArn":"The Amazon Resource Name (ARN) of the billing view. You can get this value by using the billing view service public APIs.","Compression":"The compression format that Amazon Web Services uses for the report.","Format":"The format that Amazon Web Services saves the report in.","RefreshClosedReports":"Whether you want AWS to update your reports after they have been finalized if AWS detects charges related to previous months. These charges can include refunds, credits, or support fees.","ReportName":"The name of the report that you want to create. The name must be unique, is case sensitive, and can\'t include spaces.","ReportVersioning":"Whether you want AWS to overwrite the previous version of each report or to deliver the report in addition to the previous versions.","S3Bucket":"The S3 bucket where Amazon Web Services delivers the report.","S3Prefix":"The prefix that Amazon Web Services adds to the report name when Amazon Web Services delivers the report. Your prefix can\'t include spaces.","S3Region":"The Region of the S3 bucket that Amazon Web Services delivers the report into.","TimeUnit":"The granularity of the line items in the report."}},"AWS::Cassandra::Keyspace":{"attributes":{"Ref":"`Ref` returns the name of the keyspace. For example:\\n\\n`{ \\"Ref\\": \\"MyNewKeyspace\\" }`"},"description":"You can use the `AWS::Cassandra::Keyspace` resource to create a new keyspace in Amazon Keyspaces (for Apache Cassandra). For more information, see [Create a keyspace and a table](https://docs.aws.amazon.com/keyspaces/latest/devguide/getting-started.ddl.html) in the *Amazon Keyspaces Developer Guide* .","properties":{"KeyspaceName":"The name of the keyspace to be created. The keyspace name is case sensitive. If you don\'t specify a name, AWS CloudFormation generates a unique ID and uses that ID for the keyspace name. For more information, see [Name type](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-name.html) .\\n\\n*Length constraints:* Minimum length of 3. Maximum length of 255.\\n\\n*Pattern:* `^[a-zA-Z0-9][a-zA-Z0-9_]{1,47}$`","ReplicationSpecification":"Specifies the `ReplicationStrategy` of a keyspace. The options are:\\n\\n- `SINGLE_REGION` for a single Region keyspace (optional) or\\n- `MULTI_REGION` for a multi-Region keyspace\\n\\nIf no `ReplicationStrategy` is provided, the default is `SINGLE_REGION` . If you choose `MULTI_REGION` , you must also provide a `RegionList` with the AWS Regions that the keyspace is replicated in.","Tags":"An array of key-value pairs to apply to this resource.\\n\\nFor more information, see [Tag](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-resource-tags.html) ."}},"AWS::Cassandra::Keyspace.ReplicationSpecification":{"attributes":{},"description":"You can use `ReplicationSpecification` to configure the `ReplicationStrategy` of a keyspace in Amazon Keyspaces.\\n\\nThe `ReplicationSpecification` property is `CreateOnly` and cannot be changed after the keyspace has been created. This property applies automatically to all tables in the keyspace.\\n\\nFor more information, see [Multi-Region Replication](https://docs.aws.amazon.com/keyspaces/latest/devguide/multiRegion-replication.html) in the *Amazon Keyspaces Developer Guide* .","properties":{"RegionList":"Specifies the AWS Regions that the keyspace is replicated in. You must specify at least two and up to six Regions, including the Region that the keyspace is being created in.","ReplicationStrategy":"The options are:\\n\\n- `SINGLE_REGION` (optional)\\n- `MULTI_REGION`\\n\\nIf no value is specified, the default is `SINGLE_REGION` . If `MULTI_REGION` is specified, `RegionList` is required."}},"AWS::Cassandra::Table":{"attributes":{"Ref":"`Ref` returns the name of the table and the keyspace where the table exists (delimited by \'|\'). For example:\\n\\n`{ \\"Ref\\": \\"myKeyspace|myTable\\" }`"},"description":"You can use the `AWS::Cassandra::Table` resource to create a new table in Amazon Keyspaces (for Apache Cassandra). For more information, see [Create a keyspace and a table](https://docs.aws.amazon.com/keyspaces/latest/devguide/getting-started.ddl.html) in the *Amazon Keyspaces Developer Guide* .","properties":{"BillingMode":"The billing mode for the table, which determines how you\'ll be charged for reads and writes:\\n\\n- *On-demand mode* (default) - You pay based on the actual reads and writes your application performs.\\n- *Provisioned mode* - Lets you specify the number of reads and writes per second that you need for your application.\\n\\nIf you don\'t specify a value for this property, then the table will use on-demand mode.","ClientSideTimestampsEnabled":"Enables client-side timestamps for the table. By default, the setting is disabled. You can enable client-side timestamps with the following option:\\n\\n- `status: \\"enabled\\"`\\n\\nAfter client-side timestamps are enabled for a table, you can\'t disable this setting.","ClusteringKeyColumns":"One or more columns that determine how the table data is sorted.","DefaultTimeToLive":"The default Time To Live (TTL) value for all rows in a table in seconds. The maximum configurable value is 630,720,000 seconds, which is the equivalent of 20 years. By default, the TTL value for a table is 0, which means data does not expire.\\n\\nFor more information, see [Setting the default TTL value for a table](https://docs.aws.amazon.com/keyspaces/latest/devguide/TTL-how-it-works.html#ttl-howitworks_default_ttl) in the *Amazon Keyspaces Developer Guide* .","EncryptionSpecification":"The encryption at rest options for the table.\\n\\n- *AWS owned key* (default) - The key is owned by Amazon Keyspaces.\\n- *Customer managed key* - The key is stored in your account and is created, owned, and managed by you.\\n\\n> If you choose encryption with a customer managed key, you must specify a valid customer managed KMS key with permissions granted to Amazon Keyspaces.\\n\\nFor more information, see [Encryption at rest in Amazon Keyspaces](https://docs.aws.amazon.com/keyspaces/latest/devguide/EncryptionAtRest.html) in the *Amazon Keyspaces Developer Guide* .","KeyspaceName":"The name of the keyspace to create the table in. The keyspace must already exist.","PartitionKeyColumns":"One or more columns that uniquely identify every row in the table. Every table must have a partition key.","PointInTimeRecoveryEnabled":"Specifies if point-in-time recovery is enabled or disabled for the table. The options are `PointInTimeRecoveryEnabled=true` and `PointInTimeRecoveryEnabled=false` . If not specified, the default is `PointInTimeRecoveryEnabled=false` .","RegularColumns":"One or more columns that are not part of the primary key - that is, columns that are *not* defined as partition key columns or clustering key columns.\\n\\nYou can add regular columns to existing tables by adding them to the template.","TableName":"The name of the table to be created. The table name is case sensitive. If you don\'t specify a name, AWS CloudFormation generates a unique ID and uses that ID for the table name. For more information, see [Name type](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-name.html) .\\n\\n> If you specify a name, you can\'t perform updates that require replacing this resource. You can perform updates that require no interruption or some interruption. If you must replace the resource, specify a new name. \\n\\n*Length constraints:* Minimum length of 3. Maximum length of 255.\\n\\n*Pattern:* `^[a-zA-Z0-9][a-zA-Z0-9_]{1,47}$`","Tags":"An array of key-value pairs to apply to this resource.\\n\\nFor more information, see [Tag](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-resource-tags.html) ."}},"AWS::Cassandra::Table.BillingMode":{"attributes":{},"description":"Determines the billing mode for the table - on-demand or provisioned.","properties":{"Mode":"The billing mode for the table:\\n\\n- On-demand mode - `ON_DEMAND`\\n- Provisioned mode - `PROVISIONED`\\n\\n> If you choose `PROVISIONED` mode, then you also need to specify provisioned throughput (read and write capacity) for the table.\\n\\nValid values: `ON_DEMAND` | `PROVISIONED`","ProvisionedThroughput":"The provisioned read capacity and write capacity for the table. For more information, see [Provisioned throughput capacity mode](https://docs.aws.amazon.com/keyspaces/latest/devguide/ReadWriteCapacityMode.html#ReadWriteCapacityMode.Provisioned) in the *Amazon Keyspaces Developer Guide* ."}},"AWS::Cassandra::Table.ClusteringKeyColumn":{"attributes":{},"description":"Defines an individual column within the clustering key.","properties":{"Column":"The name and data type of this clustering key column.","OrderBy":"The order in which this column\'s data is stored:\\n\\n- `ASC` (default) - The column\'s data is stored in ascending order.\\n- `DESC` - The column\'s data is stored in descending order."}},"AWS::Cassandra::Table.Column":{"attributes":{},"description":"The name and data type of an individual column in a table.","properties":{"ColumnName":"The name of the column. For more information, see [Identifiers](https://docs.aws.amazon.com/keyspaces/latest/devguide/cql.elements.html#cql.elements.identifier) in the *Amazon Keyspaces Developer Guide* .","ColumnType":"The data type of the column. For more information, see [Data types](https://docs.aws.amazon.com/keyspaces/latest/devguide/cql.elements.html#cql.data-types) in the *Amazon Keyspaces Developer Guide* ."}},"AWS::Cassandra::Table.EncryptionSpecification":{"attributes":{},"description":"Specifies the encryption at rest option selected for the table.","properties":{"EncryptionType":"The encryption at rest options for the table.\\n\\n- *AWS owned key* (default) - `AWS_OWNED_KMS_KEY`\\n- *Customer managed key* - `CUSTOMER_MANAGED_KMS_KEY`\\n\\n> If you choose `CUSTOMER_MANAGED_KMS_KEY` , a `kms_key_identifier` in the format of a key ARN is required.\\n\\nValid values: `CUSTOMER_MANAGED_KMS_KEY` | `AWS_OWNED_KMS_KEY` .","KmsKeyIdentifier":"Requires a `kms_key_identifier` in the format of a key ARN."}},"AWS::Cassandra::Table.ProvisionedThroughput":{"attributes":{},"description":"The provisioned throughput for the table, which consists of `ReadCapacityUnits` and `WriteCapacityUnits` .","properties":{"ReadCapacityUnits":"The amount of read capacity that\'s provisioned for the table. For more information, see [Read/write capacity mode](https://docs.aws.amazon.com/keyspaces/latest/devguide/ReadWriteCapacityMode.html) in the *Amazon Keyspaces Developer Guide* .","WriteCapacityUnits":"The amount of write capacity that\'s provisioned for the table. For more information, see [Read/write capacity mode](https://docs.aws.amazon.com/keyspaces/latest/devguide/ReadWriteCapacityMode.html) in the *Amazon Keyspaces Developer Guide* ."}},"AWS::CertificateManager::Account":{"attributes":{"AccountId":"ID of the AWS account that owns the certificate.","Ref":"`Ref` returns the ID of the AWS account that owns the certificate."},"description":"The `AWS::CertificateManager::Account` resource defines the expiry event configuration that determines the number of days prior to expiry when ACM starts generating EventBridge events.","properties":{"ExpiryEventsConfiguration":"Object containing expiration events options associated with an AWS account . For more information, see [ExpiryEventsConfiguration](https://docs.aws.amazon.com/acm/latest/APIReference/API_ExpiryEventsConfiguration.html) in the API reference."}},"AWS::CertificateManager::Account.ExpiryEventsConfiguration":{"attributes":{},"description":"Object containing expiration events options associated with an AWS account . For more information, see [ExpiryEventsConfiguration](https://docs.aws.amazon.com/acm/latest/APIReference/API_ExpiryEventsConfiguration.html) in the API reference.","properties":{"DaysBeforeExpiry":"This option specifies the number of days prior to certificate expiration when ACM starts generating `EventBridge` events. ACM sends one event per day per certificate until the certificate expires. By default, accounts receive events starting 45 days before certificate expiration."}},"AWS::CertificateManager::Certificate":{"attributes":{"Ref":"`Ref` returns the certificate\'s Amazon Resource Name (ARN)."},"description":"The `AWS::CertificateManager::Certificate` resource requests an AWS Certificate Manager ( ACM ) certificate that you can use to enable secure connections. For example, you can deploy an ACM certificate to an Elastic Load Balancer to enable HTTPS support. For more information, see [RequestCertificate](https://docs.aws.amazon.com/acm/latest/APIReference/API_RequestCertificate.html) in the AWS Certificate Manager API Reference.\\n\\n> When you use the `AWS::CertificateManager::Certificate` resource in a CloudFormation stack, domain validation is handled automatically if all three of the following are true: The certificate domain is hosted in Amazon Route 53, the domain resides in your AWS account , and you are using DNS validation.\\n> \\n> However, if the certificate uses email validation, or if the domain is not hosted in Route 53, then the stack will remain in the `CREATE_IN_PROGRESS` state. Further stack operations are delayed until you validate the certificate request, either by acting upon the instructions in the validation email, or by adding a CNAME record to your DNS configuration. For more information, see [Option 1: DNS Validation](https://docs.aws.amazon.com/acm/latest/userguide/dns-validation.html) and [Option 2: Email Validation](https://docs.aws.amazon.com/acm/latest/userguide/email-validation.html) .","properties":{"CertificateAuthorityArn":"The Amazon Resource Name (ARN) of the private certificate authority (CA) that will be used to issue the certificate. If you do not provide an ARN and you are trying to request a private certificate, ACM will attempt to issue a public certificate. For more information about private CAs, see the [AWS Private Certificate Authority](https://docs.aws.amazon.com/privateca/latest/userguide/PcaWelcome.html) user guide. The ARN must have the following form:\\n\\n`arn:aws:acm-pca:region:account:certificate-authority/12345678-1234-1234-1234-123456789012`","CertificateTransparencyLoggingPreference":"You can opt out of certificate transparency logging by specifying the `DISABLED` option. Opt in by specifying `ENABLED` .\\n\\nIf you do not specify a certificate transparency logging preference on a new CloudFormation template, or if you remove the logging preference from an existing template, this is the same as explicitly enabling the preference.\\n\\nChanging the certificate transparency logging preference will update the existing resource by calling `UpdateCertificateOptions` on the certificate. This action will not create a new resource.","DomainName":"The fully qualified domain name (FQDN), such as www.example.com, with which you want to secure an ACM certificate. Use an asterisk (*) to create a wildcard certificate that protects several sites in the same domain. For example, `*.example.com` protects `www.example.com` , `site.example.com` , and `images.example.com.`","DomainValidationOptions":"Domain information that domain name registrars use to verify your identity.\\n\\n> In order for a AWS::CertificateManager::Certificate to be provisioned and validated in CloudFormation automatically, the `DomainName` property needs to be identical to one of the `DomainName` property supplied in DomainValidationOptions, if the ValidationMethod is **DNS**. Failing to keep them like-for-like will result in failure to create the domain validation records in Route53.","SubjectAlternativeNames":"Additional FQDNs to be included in the Subject Alternative Name extension of the ACM certificate. For example, you can add www.example.net to a certificate for which the `DomainName` field is www.example.com if users can reach your site by using either name.","Tags":"Key-value pairs that can identify the certificate.","ValidationMethod":"The method you want to use to validate that you own or control the domain associated with a public certificate. You can [validate with DNS](https://docs.aws.amazon.com/acm/latest/userguide/gs-acm-validate-dns.html) or [validate with email](https://docs.aws.amazon.com/acm/latest/userguide/gs-acm-validate-email.html) . We recommend that you use DNS validation.\\n\\nIf not specified, this property defaults to email validation."}},"AWS::CertificateManager::Certificate.DomainValidationOption":{"attributes":{},"description":"`DomainValidationOption` is a property of the [AWS::CertificateManager::Certificate](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-certificatemanager-certificate.html) resource that specifies the AWS Certificate Manager ( ACM ) certificate domain to validate. Depending on the chosen validation method, ACM checks the domain\'s DNS record for a validation CNAME, or it attempts to send a validation email message to the domain owner.","properties":{"DomainName":"A fully qualified domain name (FQDN) in the certificate request.","HostedZoneId":"The `HostedZoneId` option, which is available if you are using Route 53 as your domain registrar, causes ACM to add your CNAME to the domain record. Your list of `DomainValidationOptions` must contain one and only one of the domain-validation options, and the `HostedZoneId` can be used only when `DNS` is specified as your validation method.\\n\\nUse the Route 53 `ListHostedZones` API to discover IDs for available hosted zones.\\n\\nThis option is required for publicly trusted certificates.\\n\\n> The `ListHostedZones` API returns IDs in the format \\"/hostedzone/Z111111QQQQQQQ\\", but CloudFormation requires the IDs to be in the format \\"Z111111QQQQQQQ\\". \\n\\nWhen you change your `DomainValidationOptions` , a new resource is created.","ValidationDomain":"The domain name to which you want ACM to send validation emails. This domain name is the suffix of the email addresses that you want ACM to use. This must be the same as the `DomainName` value or a superdomain of the `DomainName` value. For example, if you request a certificate for `testing.example.com` , you can specify `example.com` as this value. In that case, ACM sends domain validation emails to the following five addresses:\\n\\n- admin@example.com\\n- administrator@example.com\\n- hostmaster@example.com\\n- postmaster@example.com\\n- webmaster@example.com"}},"AWS::Chatbot::MicrosoftTeamsChannelConfiguration":{"attributes":{"Arn":"","Ref":"When you pass the logical ID of this resource to the intrinsic Ref function, Ref returns the ARN of the configuration created."},"description":"The `AWS::Chatbot::MicrosoftTeamsChannelConfiguration` resource configures a Microsoft Teams channel to allow users to use AWS Chatbot with AWS CloudFormation templates.\\n\\nThis resource requires some setup to be done in the AWS Chatbot console. To provide the required Microsoft Teams team and tenant IDs, you must perform the initial authorization flow with Microsoft Teams in the AWS Chatbot console, then copy and paste the IDs from the console. For more details, see steps 1-4 in [Setting Up AWS Chatbot with Microsoft Teams](https://docs.aws.amazon.com/chatbot/latest/adminguide/teams-setup.html#teams-client-setup) in the *AWS Chatbot Administrator Guide* .","properties":{"ConfigurationName":"The name of the configuration.","GuardrailPolicies":"The list of IAM policy ARNs that are applied as channel guardrails. The AWS managed \'AdministratorAccess\' policy is applied as a default if this is not set.","IamRoleArn":"The ARN of the IAM role that defines the permissions for AWS Chatbot .\\n\\nThis is a user-defined role that AWS Chatbot will assume. This is not the service-linked role. For more information, see [IAM Policies for AWS Chatbot](https://docs.aws.amazon.com/chatbot/latest/adminguide/chatbot-iam-policies.html) .","LoggingLevel":"Specifies the logging level for this configuration. This property affects the log entries pushed to Amazon CloudWatch Logs.\\n\\nLogging levels include `ERROR` , `INFO` , or `NONE` .","SnsTopicArns":"The ARNs of the SNS topics that deliver notifications to AWS Chatbot .","TeamId":"The ID of the Microsoft Team authorized with AWS Chatbot .\\n\\nTo get the team ID, you must perform the initial authorization flow with Microsoft Teams in the AWS Chatbot console. Then you can copy and paste the team ID from the console. For more details, see steps 1-4 in [Get started with Microsoft Teams](https://docs.aws.amazon.com/chatbot/latest/adminguide/teams-setup.html#teams-client-setup) in the *AWS Chatbot Administrator Guide* .","TeamsChannelId":"The ID of the Microsoft Teams channel.\\n\\nTo get the channel ID, open Microsoft Teams, right click on the channel name in the left pane, then choose Copy. An example of the channel ID syntax is: `19%3ab6ef35dc342d56ba5654e6fc6d25a071%40thread.tacv2` .","TeamsTenantId":"The ID of the Microsoft Teams tenant.\\n\\nTo get the tenant ID, you must perform the initial authorization flow with Microsoft Teams in the AWS Chatbot console. Then you can copy and paste the tenant ID from the console. For more details, see steps 1-4 in [Get started with Microsoft Teams](https://docs.aws.amazon.com/chatbot/latest/adminguide/teams-setup.html#teams-client-setup) in the *AWS Chatbot Administrator Guide* .","UserRoleRequired":"Enables use of a user role requirement in your chat configuration."}},"AWS::Chatbot::SlackChannelConfiguration":{"attributes":{"Arn":"","Ref":"When you pass the logical ID of this resource to the intrinsic Ref function, Ref returns the ARN of the configuration created."},"description":"The `AWS::Chatbot::SlackChannelConfiguration` resource configures a Slack channel to allow users to use AWS Chatbot with AWS CloudFormation templates.\\n\\nThis resource requires some setup to be done in the AWS Chatbot console. To provide the required Slack workspace ID, you must perform the initial authorization flow with Slack in the AWS Chatbot console, then copy and paste the workspace ID from the console. For more details, see steps 1-4 in [Setting Up AWS Chatbot with Slack](https://docs.aws.amazon.com/chatbot/latest/adminguide/setting-up.html#Setup_intro) in the *AWS Chatbot User Guide* .","properties":{"ConfigurationName":"The name of the configuration.","GuardrailPolicies":"The list of IAM policy ARNs that are applied as channel guardrails. The AWS managed \'AdministratorAccess\' policy is applied as a default if this is not set.","IamRoleArn":"The ARN of the IAM role that defines the permissions for AWS Chatbot .\\n\\nThis is a user-defined role that AWS Chatbot will assume. This is not the service-linked role. For more information, see [IAM Policies for AWS Chatbot](https://docs.aws.amazon.com/chatbot/latest/adminguide/chatbot-iam-policies.html) .","LoggingLevel":"Specifies the logging level for this configuration. This property affects the log entries pushed to Amazon CloudWatch Logs.\\n\\nLogging levels include `ERROR` , `INFO` , or `NONE` .","SlackChannelId":"The ID of the Slack channel.\\n\\nTo get the ID, open Slack, right click on the channel name in the left pane, then choose Copy Link. The channel ID is the 9-character string at the end of the URL. For example, `ABCBBLZZZ` .","SlackWorkspaceId":"The ID of the Slack workspace authorized with AWS Chatbot .\\n\\nTo get the workspace ID, you must perform the initial authorization flow with Slack in the AWS Chatbot console. Then you can copy and paste the workspace ID from the console. For more details, see steps 1-4 in [Setting Up AWS Chatbot with Slack](https://docs.aws.amazon.com/chatbot/latest/adminguide/setting-up.html#Setup_intro) in the *AWS Chatbot User Guide* .","SnsTopicArns":"The ARNs of the SNS topics that deliver notifications to AWS Chatbot .","UserRoleRequired":"Enables use of a user role requirement in your chat configuration."}},"AWS::CleanRooms::Collaboration":{"attributes":{"Arn":"Returns the Amazon Resource Name (ARN) of the specified collaboration.\\n\\nExample: `arn:aws:cleanrooms:us-east-1:111122223333:collaboration/a1b2c3d4-5678-90ab-cdef-EXAMPLE11111`","CollaborationIdentifier":"Returns the unique identifier of the specified collaboration.\\n\\nExample: `a1b2c3d4-5678-90ab-cdef-EXAMPLE11111`","Ref":"`Ref` returns the `CollaborationIdentifier` , such as `a1b2c3d4-5678-90ab-cdef-EXAMPLE11111` . For example:\\n\\n`{ \\"Ref\\": \\"MyCollaboration\\" }`\\n\\nFor more information about using the `Ref` function, see [Ref](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-ref.html) ."},"description":"Creates a new collaboration.","properties":{"CreatorDisplayName":"A display name of the collaboration creator.","CreatorMemberAbilities":"The abilities granted to the collaboration creator.","DataEncryptionMetadata":"The settings for client-side encryption for cryptographic computing.","Description":"A description of the collaboration provided by the collaboration owner.","Members":"A list of initial members, not including the creator. This list is immutable.","Name":"A human-readable identifier provided by the collaboration owner. Display names are not unique.","QueryLogStatus":"An indicator as to whether query logging has been enabled or disabled for the collaboration.","Tags":"An optional label that you can assign to a resource when you create it. Each tag consists of a key and an optional value, both of which you define. When you use tagging, you can also use tag-based access control in IAM policies to control access to this resource."}},"AWS::CleanRooms::Collaboration.DataEncryptionMetadata":{"attributes":{},"description":"The settings for client-side encryption for cryptographic computing.","properties":{"AllowCleartext":"Indicates whether encrypted tables can contain cleartext data (true) or are to cryptographically process every column (false).","AllowDuplicates":"Indicates whether Fingerprint columns can contain duplicate entries (true) or are to contain only non-repeated values (false).","AllowJoinsOnColumnsWithDifferentNames":"Indicates whether Fingerprint columns can be joined on any other Fingerprint column with a different name (true) or can only be joined on Fingerprint columns of the same name (false).","PreserveNulls":"Indicates whether NULL values are to be copied as NULL to encrypted tables (true) or cryptographically processed (false)."}},"AWS::CleanRooms::Collaboration.MemberSpecification":{"attributes":{},"description":"Basic metadata used to construct a new member.","properties":{"AccountId":"The identifier used to reference members of the collaboration. Currently only supports AWS account ID.","DisplayName":"The member\'s display name.","MemberAbilities":"The abilities granted to the collaboration member.\\n\\n*Allowed Values* : `CAN_QUERY` | `CAN_RECEIVE_RESULTS`"}},"AWS::CleanRooms::ConfiguredTable":{"attributes":{"Arn":"Returns the Amazon Resource Name (ARN) of the specified configured table.\\n\\nExample: `arn:aws:cleanrooms:us-east-1:111122223333:configuredtable/a1b2c3d4-5678-90ab-cdef-EXAMPLE11111`","ConfiguredTableIdentifier":"Returns the unique identifier of the specified configured table.\\n\\nExample: `a1b2c3d4-5678-90ab-cdef-EXAMPLE33333`","Ref":"`Ref` returns the resource name. For example:\\n\\n`{\\"Ref\\": \\"MyConfiguredTable\\"}`\\n\\nFor more information about using the `Ref` function, see [Ref](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-ref.html) ."},"description":"Creates a new configured table resource.","properties":{"AllowedColumns":"The columns within the underlying AWS Glue table that can be utilized within collaborations.","AnalysisMethod":"The analysis method for the configured table. The only valid value is currently `DIRECT_QUERY`.","AnalysisRules":"The entire created analysis rule.","Description":"A description for the configured table.","Name":"A name for the configured table.","TableReference":"The AWS Glue table that this configured table represents.","Tags":"An optional label that you can assign to a resource when you create it. Each tag consists of a key and an optional value, both of which you define. When you use tagging, you can also use tag-based access control in IAM policies to control access to this resource."}},"AWS::CleanRooms::ConfiguredTable.AggregateColumn":{"attributes":{},"description":"Column in configured table that can be used in aggregate function in query.","properties":{"ColumnNames":"Column names in configured table of aggregate columns.","Function":"Aggregation function that can be applied to aggregate column in query."}},"AWS::CleanRooms::ConfiguredTable.AggregationConstraint":{"attributes":{},"description":"Constraint on query output removing output rows that do not meet a minimum number of distinct values of a specified column.","properties":{"ColumnName":"Column in aggregation constraint for which there must be a minimum number of distinct values in an output row for it to be in the query output.","Minimum":"The minimum number of distinct values that an output row must be an aggregation of. Minimum threshold of distinct values for a specified column that must exist in an output row for it to be in the query output.","Type":"The type of aggregation the constraint allows. The only valid value is currently `COUNT_DISTINCT`."}},"AWS::CleanRooms::ConfiguredTable.AnalysisRule":{"attributes":{},"description":"A specification about how data from the configured table can be used in a query.","properties":{"Policy":"A policy that describes the associated data usage limitations.","Type":"The type of analysis rule. Valid values are `AGGREGATION` and `LIST`."}},"AWS::CleanRooms::ConfiguredTable.AnalysisRuleAggregation":{"attributes":{},"description":"Enables query structure and specified queries that produce aggregate statistics.","properties":{"AggregateColumns":"The columns that query runners are allowed to use in aggregation queries.","AllowedJoinOperators":"Which logical operators (if any) are to be used in an INNER JOIN match condition. Default is `AND` .","DimensionColumns":"The columns that query runners are allowed to select, group by, or filter by.","JoinColumns":"Columns in configured table that can be used in join statements and/or as aggregate columns. They can never be outputted directly.","JoinRequired":"Control that requires member who runs query to do a join with their configured table and/or other configured table in query.","OutputConstraints":"Columns that must meet a specific threshold value (after an aggregation function is applied to it) for each output row to be returned.","ScalarFunctions":"Set of scalar functions that are allowed to be used on dimension columns and the output of aggregation of metrics."}},"AWS::CleanRooms::ConfiguredTable.AnalysisRuleList":{"attributes":{},"description":"A type of analysis rule that enables row-level analysis.","properties":{"AllowedJoinOperators":"Which logical operators (if any) are to be used in an INNER JOIN match condition. Default is `AND` .","JoinColumns":"Columns that can be used to join a configured table with the table of the member who can query and other members\' configured tables.","ListColumns":"Columns that can be listed in the output."}},"AWS::CleanRooms::ConfiguredTable.ConfiguredTableAnalysisRulePolicy":{"attributes":{},"description":"Controls on the query specifications that can be run on a configured table.","properties":{"V1":"Controls on the query specifications that can be run on a configured table."}},"AWS::CleanRooms::ConfiguredTable.ConfiguredTableAnalysisRulePolicyV1":{"attributes":{},"description":"Controls on the query specifications that can be run on a configured table.","properties":{"Aggregation":"Analysis rule type that enables only aggregation queries on a configured table.","List":"Analysis rule type that enables only list queries on a configured table."}},"AWS::CleanRooms::ConfiguredTable.GlueTableReference":{"attributes":{},"description":"A reference to a table within an AWS Glue data catalog.","properties":{"DatabaseName":"The name of the database the AWS Glue table belongs to.","TableName":"The name of the AWS Glue table."}},"AWS::CleanRooms::ConfiguredTable.TableReference":{"attributes":{},"description":"A pointer to the dataset that underlies this table. Currently, this can only be an AWS Glue table.","properties":{"Glue":"If present, a reference to the AWS Glue table referred to by this table reference."}},"AWS::CleanRooms::ConfiguredTableAssociation":{"attributes":{"Arn":"Returns the Amazon Resource Name (ARN) of the specified configured table association.\\n\\nExample: `arn:aws:cleanrooms:us-east-1:111122223333:configuredtable/a1b2c3d4-5678-90ab-cdef-EXAMPLE33333`","ConfiguredTableAssociationIdentifier":"Returns the unique identifier of the specified configured table association.\\n\\nExample: `a1b2c3d4-5678-90ab-cdef-EXAMPLE33333`","Ref":"`Ref` returns the `ConfiguredTableAssociation` and the ID of the Membership. For example: `c1baf760-935e-4b2d-b36e-af8daaeb6e48|81a97460-2c40-46ce-a2fd-4ccda7398b2c`\\n\\nFor more information about using the `Ref` function, see [Ref](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-ref.html) ."},"description":"Creates a configured table association. A configured table association links a configured table with a collaboration.","properties":{"ConfiguredTableIdentifier":"A unique identifier for the configured table to be associated to. Currently accepts a configured table ID.","Description":"A description of the configured table association.","MembershipIdentifier":"The unique ID for the membership this configured table association belongs to.","Name":"The name of the configured table association, in lowercase. The table is identified by this name when running protected queries against the underlying data.","RoleArn":"The service will assume this role to access catalog metadata and query the table.","Tags":"An optional label that you can assign to a resource when you create it. Each tag consists of a key and an optional value, both of which you define. When you use tagging, you can also use tag-based access control in IAM policies to control access to this resource."}},"AWS::CleanRooms::Membership":{"attributes":{"Arn":"Returns the Amazon Resource Name (ARN) of the specified membership.\\n\\nExample: `arn:aws:cleanrooms:us-east-1:111122223333:membership/a1b2c3d4-5678-90ab-cdef-EXAMPLE11111`","CollaborationArn":"Returns the Amazon Resource Name (ARN) of the specified collaboration.\\n\\nExample: `arn:aws:cleanrooms:us-east-1:111122223333:collaboration/a1b2c3d4-5678-90ab-cdef-EXAMPLE11111`","CollaborationCreatorAccountId":"Returns the unique identifier of the specified collaboration creator account.\\n\\nExample: `a1b2c3d4-5678-90ab-cdef-EXAMPLE11111`","MembershipIdentifier":"Returns the unique identifier of the specified membership.\\n\\nExample: `a1b2c3d4-5678-90ab-cdef-EXAMPLE22222`","Ref":"`Ref` returns the `MembershipId` , such as `a1b2c3d4-5678-90ab-cdef-EXAMPLE11111` . For example:\\n\\n`{ \\"Ref\\": \\"MyMembership\\" }`\\n\\nFor more information about using the `Ref` function, see [Ref](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-ref.html) ."},"description":"Creates a membership for a specific collaboration identifier and joins the collaboration.","properties":{"CollaborationIdentifier":"The unique ID for the associated collaboration.","QueryLogStatus":"An indicator as to whether query logging has been enabled or disabled for the collaboration.","Tags":"An optional label that you can assign to a resource when you create it. Each tag consists of a key and an optional value, both of which you define. When you use tagging, you can also use tag-based access control in IAM policies to control access to this resource."}},"AWS::Cloud9::EnvironmentEC2":{"attributes":{"Arn":"The Amazon Resource Name (ARN) of the development environment, such as `arn:aws:cloud9:us-east-2:123456789012:environment:2bc3642873c342e485f7e0c561234567` .","Name":"The name of the environment.","Ref":"`Ref` returns the ID of the development environment, such as `2bc3642873c342e485f7e0c561234567` ."},"description":"The `AWS::Cloud9::EnvironmentEC2` resource creates an Amazon EC2 development environment in AWS Cloud9 . For more information, see [Creating an Environment](https://docs.aws.amazon.com/cloud9/latest/user-guide/create-environment.html) in the *AWS Cloud9 User Guide* .","properties":{"AutomaticStopTimeMinutes":"The number of minutes until the running instance is shut down after the environment was last used.","ConnectionType":"The connection type used for connecting to an Amazon EC2 environment. Valid values are `CONNECT_SSH` (default) and `CONNECT_SSM` (connected through AWS Systems Manager ).","Description":"The description of the environment to create.","ImageId":"The identifier for the Amazon Machine Image (AMI) that\'s used to create the EC2 instance. To choose an AMI for the instance, you must specify a valid AMI alias or a valid AWS Systems Manager path.\\n\\nThe default AMI is used if the parameter isn\'t explicitly assigned a value in the request.\\n\\n*AMI aliases*\\n\\n- *Amazon Linux (default): `amazonlinux-1-x86_64`*\\n- Amazon Linux 2: `amazonlinux-2-x86_64`\\n- Ubuntu 18.04: `ubuntu-18.04-x86_64`\\n\\n*SSM paths*\\n\\n- *Amazon Linux (default): `resolve:ssm:/aws/service/cloud9/amis/amazonlinux-1-x86_64`*\\n- Amazon Linux 2: `resolve:ssm:/aws/service/cloud9/amis/amazonlinux-2-x86_64`\\n- Ubuntu 18.04: `resolve:ssm:/aws/service/cloud9/amis/ubuntu-18.04-x86_64`","InstanceType":"The type of instance to connect to the environment (for example, `t2.micro` ).","Name":"The name of the environment.","OwnerArn":"The Amazon Resource Name (ARN) of the environment owner. This ARN can be the ARN of any AWS Identity and Access Management principal. If this value is not specified, the ARN defaults to this environment\'s creator.","Repositories":"Any AWS CodeCommit source code repositories to be cloned into the development environment.","SubnetId":"The ID of the subnet in Amazon Virtual Private Cloud (Amazon VPC) that AWS Cloud9 will use to communicate with the Amazon Elastic Compute Cloud (Amazon EC2) instance.","Tags":"An array of key-value pairs that will be associated with the new AWS Cloud9 development environment."}},"AWS::Cloud9::EnvironmentEC2.Repository":{"attributes":{},"description":"The `Repository` property type specifies an AWS CodeCommit source code repository to be cloned into an AWS Cloud9 development environment.","properties":{"PathComponent":"The path within the development environment\'s default file system location to clone the AWS CodeCommit repository into. For example, `/REPOSITORY_NAME` would clone the repository into the `/home/USER_NAME/environment/REPOSITORY_NAME` directory in the environment.","RepositoryUrl":"The clone URL of the AWS CodeCommit repository to be cloned. For example, for an AWS CodeCommit repository this might be `https://git-codecommit.us-east-2.amazonaws.com/v1/repos/REPOSITORY_NAME` ."}},"AWS::CloudFormation::CustomResource":{"attributes":{},"description":"In a CloudFormation template, you use the `AWS::CloudFormation::CustomResource` or `Custom:: *String*` resource type to specify custom resources.\\n\\nCustom resources provide a way for you to write custom provisioning logic in CloudFormation template and have CloudFormation run it during a stack operation, such as when you create, update or delete a stack. For more information, see [Custom resources](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-custom-resources.html) .\\n\\n> If you use the [VPC endpoints](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-endpoints.html) feature, custom resources in the VPC must have access to CloudFormation -specific Amazon Simple Storage Service ( Amazon S3 ) buckets. Custom resources must send responses to a presigned Amazon S3 URL. If they can\'t send responses to Amazon S3 , CloudFormation won\'t receive a response and the stack operation fails. For more information, see [Setting up VPC endpoints for AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-vpce-bucketnames.html) .","properties":{"ServiceToken":"> Only one property is defined by AWS for a custom resource: `ServiceToken` . All other properties are defined by the service provider. \\n\\nThe service token that was given to the template developer by the service provider to access the service, such as an Amazon SNS topic ARN or Lambda function ARN. The service token must be from the same Region in which you are creating the stack.\\n\\nUpdates aren\'t supported."}},"AWS::CloudFormation::HookDefaultVersion":{"attributes":{"Arn":"The Amazon Resource Number (ARN) of the activated extension, in this account and Region.","Ref":"`Ref` returns the Amazon Resource Name (ARN) of the resource version. For example:\\n\\n`arn:aws:cloudformation:us-west-2:012345678901:type/hook/Sample-CloudFormation-Hook/00000001`"},"description":"The `HookDefaultVersion` resource specifies the default version of the hook. The default version of the hook is used in CloudFormation operations for this AWS account and AWS Region .","properties":{"TypeName":"The name of the hook.\\n\\nYou must specify either `TypeVersionArn` , or `TypeName` and `VersionId` .","TypeVersionArn":"The version ID of the type configuration.\\n\\nYou must specify either `TypeVersionArn` , or `TypeName` and `VersionId` .","VersionId":"The version ID of the type specified.\\n\\nYou must specify either `TypeVersionArn` , or `TypeName` and `VersionId` ."}},"AWS::CloudFormation::HookTypeConfig":{"attributes":{"ConfigurationArn":"The Amazon Resource Number (ARN) of the activated hook type configuration, in this account and Region.","Ref":"`Ref` returns the ARN of the resource version. For example:\\n\\n`arn:aws:cloudformation:us-west-2:123456789012:type-configuration/hook/My-Sample-Hook/default`"},"description":"The `HookTypeConfig` resource specifies the configuration of a hook.","properties":{"Configuration":"Specifies the activated hook type configuration, in this AWS account and AWS Region .\\n\\nYou must specify either `TypeName` and `Configuration` or `TypeARN` and `Configuration` .","ConfigurationAlias":"Specifies the activated hook type configuration, in this AWS account and AWS Region .\\n\\nDefaults to `default` alias. Hook types currently support default configuration alias.","TypeArn":"The Amazon Resource Number (ARN) for the hook to set `Configuration` for.\\n\\nYou must specify either `TypeName` and `Configuration` or `TypeARN` and `Configuration` .","TypeName":"The unique name for your hook. Specifies a three-part namespace for your hook, with a recommended pattern of `Organization::Service::Hook` .\\n\\nYou must specify either `TypeName` and `Configuration` or `TypeARN` and `Configuration` ."}},"AWS::CloudFormation::HookVersion":{"attributes":{"Arn":"The Amazon Resource Name (ARN) of the hook.","IsDefaultVersion":"Whether the specified hook version is set as the default version.","Ref":"`Ref` returns the ARN of the resource version. For example:\\n\\n`arn:aws:cloudformation:us-west-2:012345678901:type/hook/Sample-CloudFormation-Hook/00000001`","TypeArn":"The Amazon Resource Number (ARN) assigned to this version of the hook.","VersionId":"The ID of this version of the hook.","Visibility":"The scope at which the resource is visible and usable in CloudFormation operations.\\n\\nValid values include:\\n\\n- `PRIVATE` : The resource is only visible and usable within the account in which it\'s registered. CloudFormation marks any resources you register as `PRIVATE` .\\n- `PUBLIC` : The resource is publicly visible and usable within any Amazon account."},"description":"The `HookVersion` resource publishes new or first hook version to the AWS CloudFormation registry.","properties":{"ExecutionRoleArn":"The Amazon Resource Name (ARN) of the task execution role that grants the hook permission.","LoggingConfig":"Contains logging configuration information for an extension.","SchemaHandlerPackage":"A URL to the Amazon S3 bucket containing the hook project package that contains the necessary files for the hook you want to register.\\n\\nFor information on generating a schema handler package for the resource you want to register, see [submit](https://docs.aws.amazon.com/cloudformation-cli/latest/userguide/resource-type-cli-submit.html) in the *CloudFormation CLI User Guide for Extension Development* .\\n\\n> The user registering the resource must be able to access the package in the S3 bucket. That\'s, the user must have [GetObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html) permissions for the schema handler package. For more information, see [Actions, Resources, and Condition Keys for Amazon S3](https://docs.aws.amazon.com/IAM/latest/UserGuide/list_amazons3.html) in the *AWS Identity and Access Management User Guide* .","TypeName":"The unique name for your hook. Specifies a three-part namespace for your hook, with a recommended pattern of `Organization::Service::Hook` .\\n\\n> The following organization namespaces are reserved and can\'t be used in your hook type names:\\n> \\n> - `Alexa`\\n> - `AMZN`\\n> - `Amazon`\\n> - `ASK`\\n> - `AWS`\\n> - `Custom`\\n> - `Dev`"}},"AWS::CloudFormation::HookVersion.LoggingConfig":{"attributes":{},"description":"The `LoggingConfig` property type specifies logging configuration information for an extension.","properties":{"LogGroupName":"The Amazon CloudWatch Logs group to which CloudFormation sends error logging information when invoking the extension\'s handlers.","LogRoleArn":"The Amazon Resource Name (ARN) of the role that CloudFormation should assume when sending log entries to CloudWatch Logs."}},"AWS::CloudFormation::Macro":{"attributes":{"Ref":"`Ref` returns the resource name. For example:\\n\\n`{ \\"Ref\\": \\"myMacro\\" }`\\n\\nFor the macro `myMacro` , `Ref` returns the name of the macro."},"description":"The `AWS::CloudFormation::Macro` resource is a CloudFormation resource type that creates a CloudFormation macro to perform custom processing on CloudFormation templates. For more information, see [Using AWS CloudFormation macros to perform custom processing on templates](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-macros.html) .","properties":{"Description":"A description of the macro.","FunctionName":"The Amazon Resource Name (ARN) of the underlying AWS Lambda function that you want AWS CloudFormation to invoke when the macro is run.","LogGroupName":"The CloudWatch Logs group to which AWS CloudFormation sends error logging information when invoking the macro\'s underlying AWS Lambda function.","LogRoleARN":"The ARN of the role AWS CloudFormation should assume when sending log entries to CloudWatch Logs .","Name":"The name of the macro. The name of the macro must be unique across all macros in the account."}},"AWS::CloudFormation::ModuleDefaultVersion":{"attributes":{"Ref":"`Ref` returns the Amazon Resource Name (ARN) of the module version."},"description":"Specifies the default version of a module. The default version of the module will be used in CloudFormation operations for this account and Region.\\n\\nTo register a module version, use the `[AWS::CloudFormation::ModuleVersion](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudformation-moduleversion.html)` resource.\\n\\nFor more information using modules, see [Using modules to encapsulate and reuse resource configurations](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/modules.html) and [Registering extensions](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/registry.html#registry-register) in the *AWS CloudFormation User Guide* . For information on developing modules, see [Developing modules](https://docs.aws.amazon.com/cloudformation-cli/latest/userguide/modules.html) in the *AWS CloudFormation CLI User Guide* .","properties":{"Arn":"The Amazon Resource Name (ARN) of the module version to set as the default version.\\n\\nConditional: You must specify either `Arn` , or `ModuleName` and `VersionId` .","ModuleName":"The name of the module.\\n\\nConditional: You must specify either `Arn` , or `ModuleName` and `VersionId` .","VersionId":"The ID for the specific version of the module.\\n\\nConditional: You must specify either `Arn` , or `ModuleName` and `VersionId` ."}},"AWS::CloudFormation::ModuleVersion":{"attributes":{"Arn":"The Amazon Resource Name (ARN) of the module.","Description":"The description of the module.","DocumentationUrl":"The URL of a page providing detailed documentation for this module.","IsDefaultVersion":"Whether the specified module version is set as the default version.","Ref":"`Ref` returns the Amazon Resource Name (ARN) of the module version.","Schema":"The schema that defines the module.","TimeCreated":"When the specified module version was registered.","VersionId":"The ID of this version of the module.","Visibility":"The scope at which the module is visible and usable in CloudFormation operations.\\n\\nValid values include:\\n\\n- `PRIVATE` : The module is only visible and usable within the account in which it\'s registered.\\n- `PUBLIC` : The module is publicly visible and usable within any Amazon account."},"description":"Registers the specified version of the module with the CloudFormation service. Registering a module makes it available for use in CloudFormation templates in your AWS account and Region.\\n\\nTo specify a module version as the default version, use the `[AWS::CloudFormation::ModuleDefaultVersion](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudformation-moduledefaultversion.html)` resource.\\n\\nFor more information using modules, see [Using modules to encapsulate and reuse resource configurations](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/modules.html) and [Registering extensions](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/registry.html#registry-register) in the *CloudFormation User Guide* . For information on developing modules, see [Developing modules](https://docs.aws.amazon.com/cloudformation-cli/latest/userguide/modules.html) in the *CloudFormation CLI User Guide* .","properties":{"ModuleName":"The name of the module being registered.","ModulePackage":"A URL to the S3 bucket containing the package that contains the template fragment and schema files for the module version to register.\\n\\n> The user registering the module version must be able to access the module package in the S3 bucket. That\'s, the user needs to have [GetObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html) permissions for the package. For more information, see [Actions, Resources, and Condition Keys for Amazon S3](https://docs.aws.amazon.com/IAM/latest/UserGuide/list_amazons3.html) in the *AWS Identity and Access Management User Guide* ."}},"AWS::CloudFormation::PublicTypeVersion":{"attributes":{"PublicTypeArn":"The Amazon Resource Number (ARN) assigned to the public extension upon publication.","PublisherId":"The publisher ID of the extension publisher.","Ref":"`Ref` returns the Amazon Resource Number (ARN) assigned to the public extension upon publication. For example:\\n\\n`{ \\"Ref\\": \\"arn:aws:cloudformation:us-east-1::type/resource/2a33349e7e606a8ad2e30e3c84521f93123456/My-Extension/2.1.3\\" }`","TypeVersionArn":"The Amazon Resource Number (ARN) assigned to this version of the extension."},"description":"Tests and publishes a registered extension as a public, third-party extension.\\n\\nCloudFormation first tests the extension to make sure it meets all necessary requirements for being published in the CloudFormation registry. If it does, CloudFormation then publishes it to the registry as a public third-party extension in this Region. Public extensions are available for use by all CloudFormation users.\\n\\n- For resource types, testing includes passing all contracts tests defined for the type.\\n- For modules, testing includes determining if the module\'s model meets all necessary requirements.\\n\\nFor more information, see [Testing your public extension prior to publishing](https://docs.aws.amazon.com/cloudformation-cli/latest/userguide/publish-extension.html#publish-extension-testing) in the *CloudFormation CLI User Guide* .\\n\\nIf you don\'t specify a version, CloudFormation uses the default version of the extension in your account and Region for testing.\\n\\nTo perform testing, CloudFormation assumes the execution role specified when the type was registered.\\n\\nAn extension must have a test status of `PASSED` before it can be published. For more information, see [Publishing extensions to make them available for public use](https://docs.aws.amazon.com/cloudformation-cli/latest/userguide/resource-type-publish.html) in the *CloudFormation CLI User Guide* .","properties":{"Arn":"The Amazon Resource Number (ARN) of the extension.\\n\\nConditional: You must specify `Arn` , or `TypeName` and `Type` .","LogDeliveryBucket":"The S3 bucket to which CloudFormation delivers the contract test execution logs.\\n\\nCloudFormation delivers the logs by the time contract testing has completed and the extension has been assigned a test type status of `PASSED` or `FAILED` .\\n\\nThe user initiating the stack operation must be able to access items in the specified S3 bucket. Specifically, the user needs the following permissions:\\n\\n- GetObject\\n- PutObject\\n\\nFor more information, see [Actions, Resources, and Condition Keys for Amazon S3](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazons3.html) in the *AWS Identity and Access Management User Guide* .","PublicVersionNumber":"The version number to assign to this version of the extension.\\n\\nUse the following format, and adhere to semantic versioning when assigning a version number to your extension:\\n\\n`MAJOR.MINOR.PATCH`\\n\\nFor more information, see [Semantic Versioning 2.0.0](https://docs.aws.amazon.com/https://semver.org/) .\\n\\nIf you don\'t specify a version number, CloudFormation increments the version number by one minor version release.\\n\\nYou cannot specify a version number the first time you publish a type. AWS CloudFormation automatically sets the first version number to be `1.0.0` .","Type":"The type of the extension to test.\\n\\nConditional: You must specify `Arn` , or `TypeName` and `Type` .","TypeName":"The name of the extension to test.\\n\\nConditional: You must specify `Arn` , or `TypeName` and `Type` ."}},"AWS::CloudFormation::Publisher":{"attributes":{"IdentityProvider":"The type of account used as the identity provider when registering this publisher with CloudFormation .\\n\\nValues include: `AWS_Marketplace` | `Bitbucket` | `GitHub` .","PublisherId":"The ID of the extension publisher. This publisher ID applies to your account in all AWS Regions .","PublisherProfile":"The URL to the publisher\'s profile with the identity provider.","PublisherStatus":"Whether the publisher is verified.","Ref":"`Ref` returns the publisher ID. For example:\\n\\n`{ \\"Ref\\": \\"2a33349e7e606a8ad2e30e3c84521f012345678\\" }`"},"description":"Registers your account as a publisher of public extensions in the CloudFormation registry. Public extensions are available for use by all CloudFormation users.\\n\\nFor information on requirements for registering as a public extension publisher, see [Registering your account to publish CloudFormation extensions](https://docs.aws.amazon.com/cloudformation-cli/latest/userguide/publish-extension.html#publish-extension-prereqs) in the *CloudFormation CLI User Guide* .","properties":{"AcceptTermsAndConditions":"Whether you accept the [Terms and Conditions](https://docs.aws.amazon.com/https://cloudformation-registry-documents.s3.amazonaws.com/Terms_and_Conditions_for_AWS_CloudFormation_Registry_Publishers.pdf) for publishing extensions in the CloudFormation registry. You must accept the terms and conditions in order to register to publish public extensions to the CloudFormation registry.\\n\\nThe default is `false` .","ConnectionArn":"If you are using a Bitbucket or GitHub account for identity verification, the Amazon Resource Name (ARN) for your connection to that account.\\n\\nFor more information, see [Registering your account to publish CloudFormation extensions](https://docs.aws.amazon.com/cloudformation-cli/latest/userguide/publish-extension.html#publish-extension-prereqs) in the *CloudFormation CLI User Guide* ."}},"AWS::CloudFormation::ResourceDefaultVersion":{"attributes":{"Arn":"The Amazon Resource Name (ARN) of the resource.","Ref":"`Ref` returns the ARN of the resource type. For example:\\n\\n`arn:aws:cloudformation:us-west-2:012345678910:type/resource/Sample-CloudFormation-Resource`"},"description":"Specifies the default version of a resource. The default version of a resource will be used in CloudFormation operations.","properties":{"TypeName":"The name of the resource.\\n\\nConditional: You must specify either `TypeVersionArn` , or `TypeName` and `VersionId` .","TypeVersionArn":"The Amazon Resource Name (ARN) of the resource version.\\n\\nConditional: You must specify either `TypeVersionArn` , or `TypeName` and `VersionId` .","VersionId":"The ID of a specific version of the resource. The version ID is the value at the end of the Amazon Resource Name (ARN) assigned to the resource version when it\'s registered.\\n\\nConditional: You must specify either `TypeVersionArn` , or `TypeName` and `VersionId` ."}},"AWS::CloudFormation::ResourceVersion":{"attributes":{"Arn":"The Amazon Resource Name (ARN) of the resource version.","IsDefaultVersion":"Whether the resource version is set as the default version.","ProvisioningType":"The provisioning behavior of the resource type. CloudFormation determines the provisioning type during registration, based on the types of handlers in the schema handler package submitted.\\n\\nValid values include:\\n\\n- `FULLY_MUTABLE` : The resource type includes an update handler to process updates to the type during stack update operations.\\n- `IMMUTABLE` : The resource type doesn\'t include an update handler, so the type can\'t be updated and must instead be replaced during stack update operations.\\n- `NON_PROVISIONABLE` : The resource type doesn\'t include all the following handlers, and therefore can\'t actually be provisioned.\\n\\n- create\\n- read\\n- delete","Ref":"`Ref` returns the ARN of the resource version. For example:\\n\\n`arn:aws:cloudformation:us-west-2:012345678901:type/resource/Sample-CloudFormation-Resource/00000001`","TypeArn":"The Amazon Resource Name (ARN) of the resource.","VersionId":"The ID of a specific version of the resource. The version ID is the value at the end of the Amazon Resource Name (ARN) assigned to the resource version when it is registered.","Visibility":"The scope at which the resource is visible and usable in CloudFormation operations.\\n\\nValid values include:\\n\\n- `PRIVATE` : The resource is only visible and usable within the account in which it\'s registered. CloudFormation marks any resources you register as `PRIVATE` .\\n- `PUBLIC` : The resource is publicly visible and usable within any Amazon account."},"description":"Registers a resource version with the CloudFormation service. Registering a resource version makes it available for use in CloudFormation templates in your AWS account , and includes:\\n\\n- Validating the resource schema.\\n- Determining which handlers, if any, have been specified for the resource.\\n- Making the resource available for use in your account.\\n\\nFor more information on how to develop resources and ready them for registration, see [Creating Resource Providers](https://docs.aws.amazon.com/cloudformation-cli/latest/userguide/resource-types.html) in the *CloudFormation CLI User Guide* .\\n\\nYou can have a maximum of 50 resource versions registered at a time. This maximum is per account and per Region.","properties":{"ExecutionRoleArn":"The Amazon Resource Name (ARN) of the IAM role for CloudFormation to assume when invoking the resource. If your resource calls AWS APIs in any of its handlers, you must create an *[IAM execution role](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)* that includes the necessary permissions to call those AWS APIs, and provision that execution role in your account. When CloudFormation needs to invoke the resource type handler, CloudFormation assumes this execution role to create a temporary session token, which it then passes to the resource type handler, thereby supplying your resource type with the appropriate credentials.","LoggingConfig":"Logging configuration information for a resource.","SchemaHandlerPackage":"A URL to the S3 bucket containing the resource project package that contains the necessary files for the resource you want to register.\\n\\nFor information on generating a schema handler package for the resource you want to register, see [submit](https://docs.aws.amazon.com/cloudformation-cli/latest/userguide/resource-type-cli-submit.html) in the *CloudFormation CLI User Guide* .\\n\\n> The user registering the resource must be able to access the package in the S3 bucket. That is, the user needs to have [GetObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html) permissions for the schema handler package. For more information, see [Actions, Resources, and Condition Keys for Amazon S3](https://docs.aws.amazon.com/IAM/latest/UserGuide/list_amazons3.html) in the *AWS Identity and Access Management User Guide* .","TypeName":"The name of the resource being registered.\\n\\nWe recommend that resource names adhere to the following pattern: *company_or_organization* :: *service* :: *type* .\\n\\n> The following organization namespaces are reserved and can\'t be used in your resource names:\\n> \\n> - `Alexa`\\n> - `AMZN`\\n> - `Amazon`\\n> - `AWS`\\n> - `Custom`\\n> - `Dev`"}},"AWS::CloudFormation::ResourceVersion.LoggingConfig":{"attributes":{},"description":"Logging configuration information for a resource.","properties":{"LogGroupName":"The Amazon CloudWatch logs group to which CloudFormation sends error logging information when invoking the type\'s handlers.","LogRoleArn":"The ARN of the role that CloudFormation should assume when sending log entries to CloudWatch logs."}},"AWS::CloudFormation::Stack":{"attributes":{"Ref":"`Ref` returns the stack ID. For example:\\n\\n`arn:aws:cloudformation:us-east-2:123456789012:stack/mystack-mynestedstack-sggfrhxhum7w/f449b250-b969-11e0-a185-5081d0136786`"},"description":"The `AWS::CloudFormation::Stack` resource nests a stack as a resource in a top-level template.\\n\\nYou can add output values from a nested stack within the containing template. You use the [GetAtt](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-getatt.html) function with the nested stack\'s logical name and the name of the output value in the nested stack in the format `Outputs. *NestedStackOutputName*` .\\n\\n> We strongly recommend that updates to nested stacks are run from the parent stack. \\n\\nWhen you apply template changes to update a top-level stack, CloudFormation updates the top-level stack and initiates an update to its nested stacks. CloudFormation updates the resources of modified nested stacks, but doesn\'t update the resources of unmodified nested stacks. For more information, see [CloudFormation stack updates](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks.html) .\\n\\n> You must acknowledge IAM capabilities for nested stacks that contain IAM resources. Also, verify that you have cancel update stack permissions, which is required if an update rolls back. For more information about IAM and CloudFormation , see [Controlling access with AWS Identity and Access Management](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-iam-template.html) .","properties":{"NotificationARNs":"The Amazon Simple Notification Service (Amazon SNS) topic ARNs to publish stack related events. You can find your Amazon SNS topic ARNs using the Amazon SNS console or your Command Line Interface (CLI).","Parameters":"The set value pairs that represent the parameters passed to CloudFormation when this nested stack is created. Each parameter has a name corresponding to a parameter defined in the embedded template and a value representing the value that you want to set for the parameter.\\n\\n> If you use the `Ref` function to pass a parameter value to a nested stack, comma-delimited list parameters must be of type `String` . In other words, you can\'t pass values that are of type `CommaDelimitedList` to nested stacks. \\n\\nConditional. Required if the nested stack requires input parameters.\\n\\nWhether an update causes interruptions depends on the resources that are being updated. An update never causes a nested stack to be replaced.","Tags":"Key-value pairs to associate with this stack. AWS CloudFormation also propagates these tags to the resources created in the stack. A maximum number of 50 tags can be specified.","TemplateURL":"Location of file containing the template body. The URL must point to a template (max size: 460,800 bytes) that\'s located in an Amazon S3 bucket. For more information, see [Template anatomy](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-anatomy.html) .\\n\\nWhether an update causes interruptions depends on the resources that are being updated. An update never causes a nested stack to be replaced.","TimeoutInMinutes":"The length of time, in minutes, that CloudFormation waits for the nested stack to reach the `CREATE_COMPLETE` state. The default is no timeout. When CloudFormation detects that the nested stack has reached the `CREATE_COMPLETE` state, it marks the nested stack resource as `CREATE_COMPLETE` in the parent stack and resumes creating the parent stack. If the timeout period expires before the nested stack reaches `CREATE_COMPLETE` , CloudFormation marks the nested stack as failed and rolls back both the nested stack and parent stack.\\n\\nUpdates aren\'t supported."}},"AWS::CloudFormation::StackSet":{"attributes":{"Ref":"When you pass the logical ID of this resource to the intrinsic `Ref` function, `Ref` returns the StackSetId.","StackSetId":"The ID of the stack that you\'re creating."},"description":"The `AWS::CloudFormation::StackSet` enables you to provision stacks into AWS accounts and across Regions by using a single CloudFormation template. In the stack set, you specify the template to use, in addition to any parameters and capabilities that the template requires.","properties":{"AdministrationRoleARN":"The Amazon Resource Number (ARN) of the IAM role to use to create this stack set. Specify an IAM role only if you are using customized administrator roles to control which users or groups can manage specific stack sets within the same administrator account.\\n\\nUse customized administrator roles to control which users or groups can manage specific stack sets within the same administrator account. For more information, see [Prerequisites: Granting Permissions for Stack Set Operations](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-prereqs.html) in the *AWS CloudFormation User Guide* .\\n\\n*Minimum* : `20`\\n\\n*Maximum* : `2048`","AutoDeployment":"[ `Service-managed` permissions] Describes whether StackSets automatically deploys to AWS Organizations accounts that are added to a target organization or organizational unit (OU).","CallAs":"[Service-managed permissions] Specifies whether you are acting as an account administrator in the organization\'s management account or as a delegated administrator in a member account.\\n\\nBy default, `SELF` is specified. Use `SELF` for stack sets with self-managed permissions.\\n\\n- To create a stack set with service-managed permissions while signed in to the management account, specify `SELF` .\\n- To create a stack set with service-managed permissions while signed in to a delegated administrator account, specify `DELEGATED_ADMIN` .\\n\\nYour AWS account must be registered as a delegated admin in the management account. For more information, see [Register a delegated administrator](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-orgs-delegated-admin.html) in the *AWS CloudFormation User Guide* .\\n\\nStack sets with service-managed permissions are created in the management account, including stack sets that are created by delegated administrators.\\n\\n*Valid Values* : `SELF` | `DELEGATED_ADMIN`","Capabilities":"The capabilities that are allowed in the stack set. Some stack set templates might include resources that can affect permissions in your AWS account —for example, by creating new AWS Identity and Access Management ( IAM ) users. For more information, see [Acknowledging IAM Resources in AWS CloudFormation Templates](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-iam-template.html#capabilities) .","Description":"A description of the stack set.\\n\\n*Minimum* : `1`\\n\\n*Maximum* : `1024`","ExecutionRoleName":"The name of the IAM execution role to use to create the stack set. If you don\'t specify an execution role, AWS CloudFormation uses the `AWSCloudFormationStackSetExecutionRole` role for the stack set operation.\\n\\n*Minimum* : `1`\\n\\n*Maximum* : `64`\\n\\n*Pattern* : `[a-zA-Z_0-9+=,.@-]+`","ManagedExecution":"Describes whether StackSets performs non-conflicting operations concurrently and queues conflicting operations.\\n\\nWhen active, StackSets performs non-conflicting operations concurrently and queues conflicting operations. After conflicting operations finish, StackSets starts queued operations in request order.\\n\\n> If there are already running or queued operations, StackSets queues all incoming operations even if they are non-conflicting.\\n> \\n> You can\'t modify your stack set\'s execution configuration while there are running or queued operations for that stack set. \\n\\nWhen inactive (default), StackSets performs one operation at a time in request order.","OperationPreferences":"The user-specified preferences for how AWS CloudFormation performs a stack set operation.","Parameters":"The input parameters for the stack set template.","PermissionModel":"Describes how the IAM roles required for stack set operations are created.\\n\\n- With `SELF_MANAGED` permissions, you must create the administrator and execution roles required to deploy to target accounts. For more information, see [Grant Self-Managed Stack Set Permissions](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-prereqs-self-managed.html) .\\n- With `SERVICE_MANAGED` permissions, StackSets automatically creates the IAM roles required to deploy to accounts managed by AWS Organizations .","StackInstancesGroup":"A group of stack instances with parameters in some specific accounts and Regions.","StackSetName":"The name to associate with the stack set. The name must be unique in the Region where you create your stack set.\\n\\n*Maximum* : `128`\\n\\n*Pattern* : `^[a-zA-Z][a-zA-Z0-9-]{0,127}$`\\n\\n> The `StackSetName` property is required.","Tags":"The key-value pairs to associate with this stack set and the stacks created from it. AWS CloudFormation also propagates these tags to supported resources that are created in the stacks. A maximum number of 50 tags can be specified.","TemplateBody":"The structure that contains the template body, with a minimum length of 1 byte and a maximum length of 51,200 bytes.\\n\\nYou must include either `TemplateURL` or `TemplateBody` in a StackSet, but you can\'t use both. Dynamic references in the `TemplateBody` may not work correctly in all cases. It\'s recommended to pass templates containing dynamic references through `TemplateUrl` instead.\\n\\n*Minimum* : `1`\\n\\n*Maximum* : `51200`","TemplateURL":"Location of file containing the template body. The URL must point to a template (max size: 460,800 bytes) that\'s located in an Amazon S3 bucket.\\n\\nYou must include either `TemplateURL` or `TemplateBody` in a StackSet, but you can\'t use both.\\n\\n*Minimum* : `1`\\n\\n*Maximum* : `1024`"}},"AWS::CloudFormation::StackSet.AutoDeployment":{"attributes":{},"description":"[ `Service-managed` permissions] Describes whether StackSets automatically deploys to AWS Organizations accounts that are added to a target organizational unit (OU).","properties":{"Enabled":"If set to `true` , StackSets automatically deploys additional stack instances to AWS Organizations accounts that are added to a target organization or organizational unit (OU) in the specified Regions. If an account is removed from a target organization or OU, StackSets deletes stack instances from the account in the specified Regions.","RetainStacksOnAccountRemoval":"If set to `true` , stack resources are retained when an account is removed from a target organization or OU. If set to `false` , stack resources are deleted. Specify only if `Enabled` is set to `True` ."}},"AWS::CloudFormation::StackSet.DeploymentTargets":{"attributes":{},"description":"The AWS OrganizationalUnitIds or Accounts for which to create stack instances in the specified Regions.","properties":{"AccountFilterType":"Limit deployment targets to individual accounts or include additional accounts with provided OUs.\\n\\nThe following is a list of possible values for the `AccountFilterType` operation.\\n\\n- `INTERSECTION` : StackSets deploys to the accounts specified in `Accounts` parameter.\\n- `DIFFERENCE` : StackSets excludes the accounts specified in `Accounts` parameter. This enables user to avoid certain accounts within an OU such as suspended accounts.\\n- `UNION` : StackSets includes additional accounts deployment targets.\\n\\nThis is the default value if `AccountFilterType` is not provided. This enables user to update an entire OU and individual accounts from a different OU in one request, which used to be two separate requests.\\n- `NONE` : Deploys to all the accounts in specified organizational units (OU).","Accounts":"The names of one or more AWS accounts for which you want to deploy stack set updates.\\n\\n*Pattern* : `^[0-9]{12}$`","OrganizationalUnitIds":"The organization root ID or organizational unit (OU) IDs to which StackSets deploys.\\n\\n*Pattern* : `^(ou-[a-z0-9]{4,32}-[a-z0-9]{8,32}|r-[a-z0-9]{4,32})$`"}},"AWS::CloudFormation::StackSet.ManagedExecution":{"attributes":{},"description":"Describes whether StackSets performs non-conflicting operations concurrently and queues conflicting operations.","properties":{"Active":"When `true` , StackSets performs non-conflicting operations concurrently and queues conflicting operations. After conflicting operations finish, StackSets starts queued operations in request order.\\n\\n> If there are already running or queued operations, StackSets queues all incoming operations even if they are non-conflicting.\\n> \\n> You can\'t modify your stack set\'s execution configuration while there are running or queued operations for that stack set. \\n\\nWhen `false` (default), StackSets performs one operation at a time in request order."}},"AWS::CloudFormation::StackSet.OperationPreferences":{"attributes":{},"description":"The user-specified preferences for how AWS CloudFormation performs a stack set operation. For more information on maximum concurrent accounts and failure tolerance, see [Stack set operation options](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-concepts.html#stackset-ops-options) .","properties":{"FailureToleranceCount":"The number of accounts, per Region, for which this operation can fail before AWS CloudFormation stops the operation in that Region. If the operation is stopped in a Region, AWS CloudFormation doesn\'t attempt the operation in any subsequent Regions.\\n\\nConditional: You must specify either `FailureToleranceCount` or `FailureTolerancePercentage` (but not both).","FailureTolerancePercentage":"The percentage of accounts, per Region, for which this stack operation can fail before AWS CloudFormation stops the operation in that Region. If the operation is stopped in a Region, AWS CloudFormation doesn\'t attempt the operation in any subsequent Regions.\\n\\nWhen calculating the number of accounts based on the specified percentage, AWS CloudFormation rounds *down* to the next whole number.\\n\\nConditional: You must specify either `FailureToleranceCount` or `FailureTolerancePercentage` , but not both.","MaxConcurrentCount":"The maximum number of accounts in which to perform this operation at one time. This is dependent on the value of `FailureToleranceCount` . `MaxConcurrentCount` is at most one more than the `FailureToleranceCount` .\\n\\nNote that this setting lets you specify the *maximum* for operations. For large deployments, under certain circumstances the actual number of accounts acted upon concurrently may be lower due to service throttling.\\n\\nConditional: You must specify either `MaxConcurrentCount` or `MaxConcurrentPercentage` , but not both.","MaxConcurrentPercentage":"The maximum percentage of accounts in which to perform this operation at one time.\\n\\nWhen calculating the number of accounts based on the specified percentage, AWS CloudFormation rounds down to the next whole number. This is true except in cases where rounding down would result is zero. In this case, CloudFormation sets the number as one instead.\\n\\nNote that this setting lets you specify the *maximum* for operations. For large deployments, under certain circumstances the actual number of accounts acted upon concurrently may be lower due to service throttling.\\n\\nConditional: You must specify either `MaxConcurrentCount` or `MaxConcurrentPercentage` , but not both.","RegionConcurrencyType":"The concurrency type of deploying StackSets operations in Regions, could be in parallel or one Region at a time.","RegionOrder":"The order of the Regions where you want to perform the stack operation."}},"AWS::CloudFormation::StackSet.Parameter":{"attributes":{},"description":"The Parameter data type.","properties":{"ParameterKey":"The key associated with the parameter. If you don\'t specify a key and value for a particular parameter, AWS CloudFormation uses the default value that\'s specified in your template.","ParameterValue":"The input value associated with the parameter."}},"AWS::CloudFormation::StackSet.StackInstances":{"attributes":{},"description":"Stack instances in some specific accounts and Regions.","properties":{"DeploymentTargets":"The AWS `OrganizationalUnitIds` or `Accounts` for which to create stack instances in the specified Regions.","ParameterOverrides":"A list of stack set parameters whose values you want to override in the selected stack instances.","Regions":"The names of one or more Regions where you want to create stack instances using the specified AWS accounts ."}},"AWS::CloudFormation::TypeActivation":{"attributes":{"Arn":"The Amazon Resource Number (ARN) of the activated extension, in this account and Region.","Ref":"`Ref` returns the Amazon Resource Number (ARN) of the activated extension, in this account and Region.\\n\\n`{ \\"Ref\\": \\"arn:aws:cloudformation:us-east-1:123456789013:type/resource/My-Example\\" }`"},"description":"Activates a public third-party extension, making it available for use in stack templates. For more information, see [Using public extensions](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/registry-public.html) in the *AWS CloudFormation User Guide* .\\n\\nOnce you have activated a public third-party extension in your account and Region, use [SetTypeConfiguration](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_SetTypeConfiguration.html) to specify configuration properties for the extension. For more information, see [Configuring extensions at the account level](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/registry-register.html#registry-set-configuration) in the *CloudFormation User Guide* .","properties":{"AutoUpdate":"Whether to automatically update the extension in this account and Region when a new *minor* version is published by the extension publisher. Major versions released by the publisher must be manually updated.\\n\\nThe default is `true` .","ExecutionRoleArn":"The name of the IAM execution role to use to activate the extension.","LoggingConfig":"Specifies logging configuration information for an extension.","MajorVersion":"The major version of this extension you want to activate, if multiple major versions are available. The default is the latest major version. CloudFormation uses the latest available *minor* version of the major version selected.\\n\\nYou can specify `MajorVersion` or `VersionBump` , but not both.","PublicTypeArn":"The Amazon Resource Number (ARN) of the public extension.\\n\\nConditional: You must specify `PublicTypeArn` , or `TypeName` , `Type` , and `PublisherId` .","PublisherId":"The ID of the extension publisher.\\n\\nConditional: You must specify `PublicTypeArn` , or `TypeName` , `Type` , and `PublisherId` .","Type":"The extension type.\\n\\nConditional: You must specify `PublicTypeArn` , or `TypeName` , `Type` , and `PublisherId` .","TypeName":"The name of the extension.\\n\\nConditional: You must specify `PublicTypeArn` , or `TypeName` , `Type` , and `PublisherId` .","TypeNameAlias":"An alias to assign to the public extension, in this account and Region. If you specify an alias for the extension, CloudFormation treats the alias as the extension type name within this account and Region. You must use the alias to refer to the extension in your templates, API calls, and CloudFormation console.\\n\\nAn extension alias must be unique within a given account and Region. You can activate the same public resource multiple times in the same account and Region, using different type name aliases.","VersionBump":"Manually updates a previously-activated type to a new major or minor version, if available. You can also use this parameter to update the value of `AutoUpdate` .\\n\\n- `MAJOR` : CloudFormation updates the extension to the newest major version, if one is available.\\n- `MINOR` : CloudFormation updates the extension to the newest minor version, if one is available."}},"AWS::CloudFormation::TypeActivation.LoggingConfig":{"attributes":{},"description":"Contains logging configuration information for an extension.","properties":{"LogGroupName":"The Amazon CloudWatch Logs group to which CloudFormation sends error logging information when invoking the extension\'s handlers.","LogRoleArn":"The Amazon Resource Name (ARN) of the role that CloudFormation should assume when sending log entries to CloudWatch Logs."}},"AWS::CloudFormation::WaitCondition":{"attributes":{"Data":"A JSON object that contains the `UniqueId` and `Data` values from the wait condition signal(s) for the specified wait condition. For more information about wait condition signals, see [Wait condition signal JSON format](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-waitcondition.html#using-cfn-waitcondition-signaljson) .\\n\\nExample return value for a wait condition with 2 signals:\\n\\n`{ \\"Signal1\\" : \\"Step 1 complete.\\" , \\"Signal2\\" : \\"Step 2 complete.\\" }`","Ref":"`Ref` returns the resource name."},"description":"> For Amazon EC2 and Auto Scaling resources, we recommend that you use a `CreationPolicy` attribute instead of wait conditions. Add a CreationPolicy attribute to those resources, and use the cfn-signal helper script to signal when an instance creation process has completed successfully. \\n\\nYou can use a wait condition for situations like the following:\\n\\n- To coordinate stack resource creation with configuration actions that are external to the stack creation.\\n- To track the status of a configuration process.\\n\\nFor these situations, we recommend that you associate a [CreationPolicy](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-attribute-creationpolicy.html) attribute with the wait condition so that you don\'t have to use a wait condition handle. For more information and an example, see [Creating wait conditions in a template](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-waitcondition.html) . If you use a CreationPolicy with a wait condition, don\'t specify any of the wait condition\'s properties.\\n\\n> If you use the [VPC endpoints](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-endpoints.html) feature, resources in the VPC that respond to wait conditions must have access to CloudFormation , specific Amazon Simple Storage Service ( Amazon S3 ) buckets. Resources must send wait condition responses to a presigned Amazon S3 URL. If they can\'t send responses to Amazon S3 , CloudFormation won\'t receive a response and the stack operation fails. For more information, see [Setting up VPC endpoints for AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-vpce-bucketnames.html) .","properties":{"Count":"The number of success signals that CloudFormation must receive before it continues the stack creation process. When the wait condition receives the requisite number of success signals, CloudFormation resumes the creation of the stack. If the wait condition doesn\'t receive the specified number of success signals before the Timeout period expires, CloudFormation assumes that the wait condition has failed and rolls the stack back.\\n\\nUpdates aren\'t supported.","Handle":"A reference to the wait condition handle used to signal this wait condition. Use the `Ref` intrinsic function to specify an [`AWS::CloudFormation::WaitConditionHandle`](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-waitconditionhandle.html) resource.\\n\\nAnytime you add a `WaitCondition` resource during a stack update, you must associate the wait condition with a new WaitConditionHandle resource. Don\'t reuse an old wait condition handle that has already been defined in the template. If you reuse a wait condition handle, the wait condition might evaluate old signals from a previous create or update stack command.\\n\\nUpdates aren\'t supported.","Timeout":"The length of time (in seconds) to wait for the number of signals that the `Count` property specifies. `Timeout` is a minimum-bound property, meaning the timeout occurs no sooner than the time you specify, but can occur shortly thereafter. The maximum time that can be specified for this property is 12 hours (43200 seconds).\\n\\nUpdates aren\'t supported."}},"AWS::CloudFormation::WaitConditionHandle":{"attributes":{},"description":"> For Amazon EC2 and Auto Scaling resources, we recommend that you use a `CreationPolicy` attribute instead of wait conditions. Add a `CreationPolicy` attribute to those resources, and use the cfn-signal helper script to signal when an instance creation process has completed successfully.\\n> \\n> For more information, see [Deploying applications on Amazon EC2 with AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/deploying.applications.html) . \\n\\nThe `AWS::CloudFormation::WaitConditionHandle` type has no properties. When you reference the `WaitConditionHandle` resource by using the `Ref` function, AWS CloudFormation returns a presigned URL. You pass this URL to applications or scripts that are running on your Amazon EC2 instances to send signals to that URL. An associated `AWS::CloudFormation::WaitCondition` resource checks the URL for the required number of success signals or for a failure signal.\\n\\n> Anytime you add a `WaitCondition` resource during a stack update or update a resource with a wait condition, you must associate the wait condition with a new `WaitConditionHandle` resource. Don\'t reuse an old wait condition handle that has already been defined in the template. If you reuse a wait condition handle, the wait condition might evaluate old signals from a previous create or update stack command. > Updates aren\'t supported for this resource.","properties":{}},"AWS::CloudFront::CachePolicy":{"attributes":{"Id":"The unique identifier for the cache policy. For example: `2766f7b2-75c5-41c6-8f06-bf4303a2f2f5` .","LastModifiedTime":"The date and time when the cache policy was last modified.","Ref":"`Ref` returns the cache policy ID. For example: `2766f7b2-75c5-41c6-8f06-bf4303a2f2f5` ."},"description":"A cache policy.\\n\\nWhen it\'s attached to a cache behavior, the cache policy determines the following:\\n\\n- The values that CloudFront includes in the cache key. These values can include HTTP headers, cookies, and URL query strings. CloudFront uses the cache key to find an object in its cache that it can return to the viewer.\\n- The default, minimum, and maximum time to live (TTL) values that you want objects to stay in the CloudFront cache.\\n\\nThe headers, cookies, and query strings that are included in the cache key are also included in requests that CloudFront sends to the origin. CloudFront sends a request when it can\'t find a valid object in its cache that matches the request\'s cache key. If you want to send values to the origin but *not* include them in the cache key, use `OriginRequestPolicy` .","properties":{"CachePolicyConfig":"The cache policy configuration."}},"AWS::CloudFront::CachePolicy.CachePolicyConfig":{"attributes":{},"description":"A cache policy configuration.\\n\\nThis configuration determines the following:\\n\\n- The values that CloudFront includes in the cache key. These values can include HTTP headers, cookies, and URL query strings. CloudFront uses the cache key to find an object in its cache that it can return to the viewer.\\n- The default, minimum, and maximum time to live (TTL) values that you want objects to stay in the CloudFront cache.\\n\\nThe headers, cookies, and query strings that are included in the cache key are also included in requests that CloudFront sends to the origin. CloudFront sends a request when it can\'t find a valid object in its cache that matches the request\'s cache key. If you want to send values to the origin but *not* include them in the cache key, use `OriginRequestPolicy` .","properties":{"Comment":"A comment to describe the cache policy. The comment cannot be longer than 128 characters.","DefaultTTL":"The default amount of time, in seconds, that you want objects to stay in the CloudFront cache before CloudFront sends another request to the origin to see if the object has been updated. CloudFront uses this value as the object\'s time to live (TTL) only when the origin does *not* send `Cache-Control` or `Expires` headers with the object. For more information, see [Managing How Long Content Stays in an Edge Cache (Expiration)](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Expiration.html) in the *Amazon CloudFront Developer Guide* .\\n\\nThe default value for this field is 86400 seconds (one day). If the value of `MinTTL` is more than 86400 seconds, then the default value for this field is the same as the value of `MinTTL` .","MaxTTL":"The maximum amount of time, in seconds, that objects stay in the CloudFront cache before CloudFront sends another request to the origin to see if the object has been updated. CloudFront uses this value only when the origin sends `Cache-Control` or `Expires` headers with the object. For more information, see [Managing How Long Content Stays in an Edge Cache (Expiration)](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Expiration.html) in the *Amazon CloudFront Developer Guide* .\\n\\nThe default value for this field is 31536000 seconds (one year). If the value of `MinTTL` or `DefaultTTL` is more than 31536000 seconds, then the default value for this field is the same as the value of `DefaultTTL` .","MinTTL":"The minimum amount of time, in seconds, that you want objects to stay in the CloudFront cache before CloudFront sends another request to the origin to see if the object has been updated. For more information, see [Managing How Long Content Stays in an Edge Cache (Expiration)](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Expiration.html) in the *Amazon CloudFront Developer Guide* .","Name":"A unique name to identify the cache policy.","ParametersInCacheKeyAndForwardedToOrigin":"The HTTP headers, cookies, and URL query strings to include in the cache key. The values included in the cache key are also included in requests that CloudFront sends to the origin."}},"AWS::CloudFront::CachePolicy.CookiesConfig":{"attributes":{},"description":"An object that determines whether any cookies in viewer requests (and if so, which cookies) are included in the cache key and in requests that CloudFront sends to the origin.","properties":{"CookieBehavior":"Determines whether any cookies in viewer requests are included in the cache key and in requests that CloudFront sends to the origin. Valid values are:\\n\\n- `none` – No cookies in viewer requests are included in the cache key or in requests that CloudFront sends to the origin. Even when this field is set to `none` , any cookies that are listed in an `OriginRequestPolicy` *are* included in origin requests.\\n- `whitelist` – Only the cookies in viewer requests that are listed in the `CookieNames` type are included in the cache key and in requests that CloudFront sends to the origin.\\n- `allExcept` – All cookies in viewer requests are included in the cache key and in requests that CloudFront sends to the origin, **except** for those that are listed in the `CookieNames` type, which are not included.\\n- `all` – All cookies in viewer requests are included in the cache key and in requests that CloudFront sends to the origin.","Cookies":"Contains a list of cookie names."}},"AWS::CloudFront::CachePolicy.HeadersConfig":{"attributes":{},"description":"An object that determines whether any HTTP headers (and if so, which headers) are included in the cache key and in requests that CloudFront sends to the origin.","properties":{"HeaderBehavior":"Determines whether any HTTP headers are included in the cache key and in requests that CloudFront sends to the origin. Valid values are:\\n\\n- `none` – No HTTP headers are included in the cache key or in requests that CloudFront sends to the origin. Even when this field is set to `none` , any headers that are listed in an `OriginRequestPolicy` *are* included in origin requests.\\n- `whitelist` – Only the HTTP headers that are listed in the `Headers` type are included in the cache key and in requests that CloudFront sends to the origin.","Headers":"Contains a list of HTTP header names."}},"AWS::CloudFront::CachePolicy.ParametersInCacheKeyAndForwardedToOrigin":{"attributes":{},"description":"This object determines the values that CloudFront includes in the cache key. These values can include HTTP headers, cookies, and URL query strings. CloudFront uses the cache key to find an object in its cache that it can return to the viewer.\\n\\nThe headers, cookies, and query strings that are included in the cache key are also included in requests that CloudFront sends to the origin. CloudFront sends a request when it can\'t find an object in its cache that matches the request\'s cache key. If you want to send values to the origin but *not* include them in the cache key, use `OriginRequestPolicy` .","properties":{"CookiesConfig":"An object that determines whether any cookies in viewer requests (and if so, which cookies) are included in the cache key and in requests that CloudFront sends to the origin.","EnableAcceptEncodingBrotli":"A flag that can affect whether the `Accept-Encoding` HTTP header is included in the cache key and included in requests that CloudFront sends to the origin.\\n\\nThis field is related to the `EnableAcceptEncodingGzip` field. If one or both of these fields is `true` *and* the viewer request includes the `Accept-Encoding` header, then CloudFront does the following:\\n\\n- Normalizes the value of the viewer\'s `Accept-Encoding` header\\n- Includes the normalized header in the cache key\\n- Includes the normalized header in the request to the origin, if a request is necessary\\n\\nFor more information, see [Compression support](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/controlling-the-cache-key.html#cache-policy-compressed-objects) in the *Amazon CloudFront Developer Guide* .\\n\\nIf you set this value to `true` , and this cache behavior also has an origin request policy attached, do not include the `Accept-Encoding` header in the origin request policy. CloudFront always includes the `Accept-Encoding` header in origin requests when the value of this field is `true` , so including this header in an origin request policy has no effect.\\n\\nIf both of these fields are `false` , then CloudFront treats the `Accept-Encoding` header the same as any other HTTP header in the viewer request. By default, it\'s not included in the cache key and it\'s not included in origin requests. In this case, you can manually add `Accept-Encoding` to the headers whitelist like any other HTTP header.","EnableAcceptEncodingGzip":"A flag that can affect whether the `Accept-Encoding` HTTP header is included in the cache key and included in requests that CloudFront sends to the origin.\\n\\nThis field is related to the `EnableAcceptEncodingBrotli` field. If one or both of these fields is `true` *and* the viewer request includes the `Accept-Encoding` header, then CloudFront does the following:\\n\\n- Normalizes the value of the viewer\'s `Accept-Encoding` header\\n- Includes the normalized header in the cache key\\n- Includes the normalized header in the request to the origin, if a request is necessary\\n\\nFor more information, see [Compression support](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/controlling-the-cache-key.html#cache-policy-compressed-objects) in the *Amazon CloudFront Developer Guide* .\\n\\nIf you set this value to `true` , and this cache behavior also has an origin request policy attached, do not include the `Accept-Encoding` header in the origin request policy. CloudFront always includes the `Accept-Encoding` header in origin requests when the value of this field is `true` , so including this header in an origin request policy has no effect.\\n\\nIf both of these fields are `false` , then CloudFront treats the `Accept-Encoding` header the same as any other HTTP header in the viewer request. By default, it\'s not included in the cache key and it\'s not included in origin requests. In this case, you can manually add `Accept-Encoding` to the headers whitelist like any other HTTP header.","HeadersConfig":"An object that determines whether any HTTP headers (and if so, which headers) are included in the cache key and in requests that CloudFront sends to the origin.","QueryStringsConfig":"An object that determines whether any URL query strings in viewer requests (and if so, which query strings) are included in the cache key and in requests that CloudFront sends to the origin."}},"AWS::CloudFront::CachePolicy.QueryStringsConfig":{"attributes":{},"description":"An object that determines whether any URL query strings in viewer requests (and if so, which query strings) are included in the cache key and in requests that CloudFront sends to the origin.","properties":{"QueryStringBehavior":"Determines whether any URL query strings in viewer requests are included in the cache key and in requests that CloudFront sends to the origin. Valid values are:\\n\\n- `none` – No query strings in viewer requests are included in the cache key or in requests that CloudFront sends to the origin. Even when this field is set to `none` , any query strings that are listed in an `OriginRequestPolicy` *are* included in origin requests.\\n- `whitelist` – Only the query strings in viewer requests that are listed in the `QueryStringNames` type are included in the cache key and in requests that CloudFront sends to the origin.\\n- `allExcept` – All query strings in viewer requests are included in the cache key and in requests that CloudFront sends to the origin, **except** those that are listed in the `QueryStringNames` type, which are not included.\\n- `all` – All query strings in viewer requests are included in the cache key and in requests that CloudFront sends to the origin.","QueryStrings":"Contains a list of query string names."}},"AWS::CloudFront::CloudFrontOriginAccessIdentity":{"attributes":{"Id":"The ID for the origin access identity, for example, `E74FTE3AJFJ256A` .","Ref":"`Ref` returns the origin access identity, such as `E15MNIMTCFKK4C` .","S3CanonicalUserId":"The Amazon S3 canonical user ID for the origin access identity, used when giving the origin access identity read permission to an object in Amazon S3. For example: `b970b42360b81c8ddbd79d2f5df0069ba9033c8a79655752abe380cd6d63ba8bcf23384d568fcf89fc49700b5e11a0fd` ."},"description":"The request to create a new origin access identity (OAI). An origin access identity is a special CloudFront user that you can associate with Amazon S3 origins, so that you can secure all or just some of your Amazon S3 content. For more information, see [Restricting Access to Amazon S3 Content by Using an Origin Access Identity](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-restricting-access-to-s3.html) in the *Amazon CloudFront Developer Guide* .","properties":{"CloudFrontOriginAccessIdentityConfig":"The current configuration information for the identity."}},"AWS::CloudFront::CloudFrontOriginAccessIdentity.CloudFrontOriginAccessIdentityConfig":{"attributes":{},"description":"Origin access identity configuration. Send a `GET` request to the `/ *CloudFront API version* /CloudFront/identity ID/config` resource.","properties":{"Comment":"A comment to describe the origin access identity. The comment cannot be longer than 128 characters."}},"AWS::CloudFront::ContinuousDeploymentPolicy":{"attributes":{"Id":"The identifier of the cotinuous deployment policy.","LastModifiedTime":"The date and time when the continuous deployment policy was last modified.","Ref":"`Ref` returns the unique identifier for the continuous deployment policy."},"description":"Creates a continuous deployment policy that routes a subset of production traffic from a primary distribution to a staging distribution.\\n\\nAfter you create and update a staging distribution, you can use a continuous deployment policy to incrementally move traffic to the staging distribution. This enables you to test changes to a distribution\'s configuration before moving all of your production traffic to the new configuration.\\n\\nFor more information, see [Using CloudFront continuous deployment to safely test CDN configuration changes](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/continuous-deployment.html) in the *Amazon CloudFront Developer Guide* .","properties":{"ContinuousDeploymentPolicyConfig":"Contains the configuration for a continuous deployment policy."}},"AWS::CloudFront::ContinuousDeploymentPolicy.ContinuousDeploymentPolicyConfig":{"attributes":{},"description":"Contains the configuration for a continuous deployment policy.","properties":{"Enabled":"A Boolean that indicates whether this continuous deployment policy is enabled (in effect). When this value is `true` , this policy is enabled and in effect. When this value is `false` , this policy is not enabled and has no effect.","StagingDistributionDnsNames":"The CloudFront domain name of the staging distribution. For example: `d111111abcdef8.cloudfront.net` .","TrafficConfig":"Contains the parameters for routing production traffic from your primary to staging distributions."}},"AWS::CloudFront::ContinuousDeploymentPolicy.SessionStickinessConfig":{"attributes":{},"description":"Session stickiness provides the ability to define multiple requests from a single viewer as a single session. This prevents the potentially inconsistent experience of sending some of a given user\'s requests to your staging distribution, while others are sent to your primary distribution. Define the session duration using TTL values.","properties":{"IdleTTL":"The amount of time after which you want sessions to cease if no requests are received. Allowed values are 300–3600 seconds (5–60 minutes).","MaximumTTL":"The maximum amount of time to consider requests from the viewer as being part of the same session. Allowed values are 300–3600 seconds (5–60 minutes)."}},"AWS::CloudFront::ContinuousDeploymentPolicy.SingleHeaderConfig":{"attributes":{},"description":"Determines which HTTP requests are sent to the staging distribution.","properties":{"Header":"The request header name that you want CloudFront to send to your staging distribution. The header must contain the prefix `aws-cf-cd-` .","Value":"The request header value."}},"AWS::CloudFront::ContinuousDeploymentPolicy.SingleWeightConfig":{"attributes":{},"description":"This configuration determines the percentage of HTTP requests that are sent to the staging distribution.","properties":{"SessionStickinessConfig":"Session stickiness provides the ability to define multiple requests from a single viewer as a single session. This prevents the potentially inconsistent experience of sending some of a given user\'s requests to your staging distribution, while others are sent to your primary distribution. Define the session duration using TTL values.","Weight":"The percentage of traffic to send to a staging distribution, expressed as a decimal number between 0 and .15."}},"AWS::CloudFront::ContinuousDeploymentPolicy.TrafficConfig":{"attributes":{},"description":"The traffic configuration of your continuous deployment.","properties":{"SingleHeaderConfig":"Determines which HTTP requests are sent to the staging distribution.","SingleWeightConfig":"Contains the percentage of traffic to send to the staging distribution.","Type":"The type of traffic configuration."}},"AWS::CloudFront::Distribution":{"attributes":{"DomainName":"The domain name of the resource, such as `d111111abcdef8.cloudfront.net` .","Id":"The identifier for the distribution, for example `EDFDVBD632BHDS5` .","Ref":"`Ref` returns the CloudFront distribution ID. For example: `E27LVI50CSW06W` ."},"description":"A distribution tells CloudFront where you want content to be delivered from, and the details about how to track and manage content delivery.","properties":{"DistributionConfig":"The distribution\'s configuration.","Tags":"A complex type that contains zero or more `Tag` elements."}},"AWS::CloudFront::Distribution.CacheBehavior":{"attributes":{},"description":"A complex type that describes how CloudFront processes requests.\\n\\nYou must create at least as many cache behaviors (including the default cache behavior) as you have origins if you want CloudFront to serve objects from all of the origins. Each cache behavior specifies the one origin from which you want CloudFront to get objects. If you have two origins and only the default cache behavior, the default cache behavior will cause CloudFront to get objects from one of the origins, but the other origin is never used.\\n\\nFor the current quota (formerly known as limit) on the number of cache behaviors that you can add to a distribution, see [Quotas](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/cloudfront-limits.html) in the *Amazon CloudFront Developer Guide* .\\n\\nIf you don\'t want to specify any cache behaviors, include only an empty `CacheBehaviors` element. Don\'t include an empty `CacheBehavior` element because this is invalid.\\n\\nTo delete all cache behaviors in an existing distribution, update the distribution configuration and include only an empty `CacheBehaviors` element.\\n\\nTo add, change, or remove one or more cache behaviors, update the distribution configuration and specify all of the cache behaviors that you want to include in the updated distribution.\\n\\nFor more information about cache behaviors, see [Cache Behavior Settings](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-web-values-specify.html#DownloadDistValuesCacheBehavior) in the *Amazon CloudFront Developer Guide* .","properties":{"AllowedMethods":"A complex type that controls which HTTP methods CloudFront processes and forwards to your Amazon S3 bucket or your custom origin. There are three choices:\\n\\n- CloudFront forwards only `GET` and `HEAD` requests.\\n- CloudFront forwards only `GET` , `HEAD` , and `OPTIONS` requests.\\n- CloudFront forwards `GET, HEAD, OPTIONS, PUT, PATCH, POST` , and `DELETE` requests.\\n\\nIf you pick the third choice, you may need to restrict access to your Amazon S3 bucket or to your custom origin so users can\'t perform operations that you don\'t want them to. For example, you might not want users to have permissions to delete objects from your origin.","CachePolicyId":"The unique identifier of the cache policy that is attached to this cache behavior. For more information, see [Creating cache policies](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/controlling-the-cache-key.html#cache-key-create-cache-policy) or [Using the managed cache policies](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/using-managed-cache-policies.html) in the *Amazon CloudFront Developer Guide* .\\n\\nA `CacheBehavior` must include either a `CachePolicyId` or `ForwardedValues` . We recommend that you use a `CachePolicyId` .","CachedMethods":"A complex type that controls whether CloudFront caches the response to requests using the specified HTTP methods. There are two choices:\\n\\n- CloudFront caches responses to `GET` and `HEAD` requests.\\n- CloudFront caches responses to `GET` , `HEAD` , and `OPTIONS` requests.\\n\\nIf you pick the second choice for your Amazon S3 Origin, you may need to forward Access-Control-Request-Method, Access-Control-Request-Headers, and Origin headers for the responses to be cached correctly.","Compress":"Whether you want CloudFront to automatically compress certain files for this cache behavior. If so, specify true; if not, specify false. For more information, see [Serving Compressed Files](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/ServingCompressedFiles.html) in the *Amazon CloudFront Developer Guide* .","DefaultTTL":"This field is deprecated. We recommend that you use the `DefaultTTL` field in a cache policy instead of this field. For more information, see [Creating cache policies](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/controlling-the-cache-key.html#cache-key-create-cache-policy) or [Using the managed cache policies](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/using-managed-cache-policies.html) in the *Amazon CloudFront Developer Guide* .\\n\\nThe default amount of time that you want objects to stay in CloudFront caches before CloudFront forwards another request to your origin to determine whether the object has been updated. The value that you specify applies only when your origin does not add HTTP headers such as `Cache-Control max-age` , `Cache-Control s-maxage` , and `Expires` to objects. For more information, see [Managing How Long Content Stays in an Edge Cache (Expiration)](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Expiration.html) in the *Amazon CloudFront Developer Guide* .","FieldLevelEncryptionId":"The value of `ID` for the field-level encryption configuration that you want CloudFront to use for encrypting specific fields of data for this cache behavior.","ForwardedValues":"This field is deprecated. We recommend that you use a cache policy or an origin request policy instead of this field. For more information, see [Working with policies](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/working-with-policies.html) in the *Amazon CloudFront Developer Guide* .\\n\\nIf you want to include values in the cache key, use a cache policy. For more information, see [Creating cache policies](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/controlling-the-cache-key.html#cache-key-create-cache-policy) or [Using the managed cache policies](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/using-managed-cache-policies.html) in the *Amazon CloudFront Developer Guide* .\\n\\nIf you want to send values to the origin but not include them in the cache key, use an origin request policy. For more information, see [Creating origin request policies](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/controlling-origin-requests.html#origin-request-create-origin-request-policy) or [Using the managed origin request policies](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/using-managed-origin-request-policies.html) in the *Amazon CloudFront Developer Guide* .\\n\\nA `CacheBehavior` must include either a `CachePolicyId` or `ForwardedValues` . We recommend that you use a `CachePolicyId` .\\n\\nA complex type that specifies how CloudFront handles query strings, cookies, and HTTP headers.","FunctionAssociations":"A list of CloudFront functions that are associated with this cache behavior. CloudFront functions must be published to the `LIVE` stage to associate them with a cache behavior.","LambdaFunctionAssociations":"A complex type that contains zero or more Lambda@Edge function associations for a cache behavior.","MaxTTL":"This field is deprecated. We recommend that you use the `MaxTTL` field in a cache policy instead of this field. For more information, see [Creating cache policies](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/controlling-the-cache-key.html#cache-key-create-cache-policy) or [Using the managed cache policies](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/using-managed-cache-policies.html) in the *Amazon CloudFront Developer Guide* .\\n\\nThe maximum amount of time that you want objects to stay in CloudFront caches before CloudFront forwards another request to your origin to determine whether the object has been updated. The value that you specify applies only when your origin adds HTTP headers such as `Cache-Control max-age` , `Cache-Control s-maxage` , and `Expires` to objects. For more information, see [Managing How Long Content Stays in an Edge Cache (Expiration)](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Expiration.html) in the *Amazon CloudFront Developer Guide* .","MinTTL":"This field is deprecated. We recommend that you use the `MinTTL` field in a cache policy instead of this field. For more information, see [Creating cache policies](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/controlling-the-cache-key.html#cache-key-create-cache-policy) or [Using the managed cache policies](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/using-managed-cache-policies.html) in the *Amazon CloudFront Developer Guide* .\\n\\nThe minimum amount of time that you want objects to stay in CloudFront caches before CloudFront forwards another request to your origin to determine whether the object has been updated. For more information, see [Managing How Long Content Stays in an Edge Cache (Expiration)](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Expiration.html) in the *Amazon CloudFront Developer Guide* .\\n\\nYou must specify `0` for `MinTTL` if you configure CloudFront to forward all headers to your origin (under `Headers` , if you specify `1` for `Quantity` and `*` for `Name` ).","OriginRequestPolicyId":"The unique identifier of the origin request policy that is attached to this cache behavior. For more information, see [Creating origin request policies](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/controlling-origin-requests.html#origin-request-create-origin-request-policy) or [Using the managed origin request policies](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/using-managed-origin-request-policies.html) in the *Amazon CloudFront Developer Guide* .","PathPattern":"The pattern (for example, `images/*.jpg` ) that specifies which requests to apply the behavior to. When CloudFront receives a viewer request, the requested path is compared with path patterns in the order in which cache behaviors are listed in the distribution.\\n\\n> You can optionally include a slash ( `/` ) at the beginning of the path pattern. For example, `/images/*.jpg` . CloudFront behavior is the same with or without the leading `/` . \\n\\nThe path pattern for the default cache behavior is `*` and cannot be changed. If the request for an object does not match the path pattern for any cache behaviors, CloudFront applies the behavior in the default cache behavior.\\n\\nFor more information, see [Path Pattern](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-web-values-specify.html#DownloadDistValuesPathPattern) in the *Amazon CloudFront Developer Guide* .","RealtimeLogConfigArn":"The Amazon Resource Name (ARN) of the real-time log configuration that is attached to this cache behavior. For more information, see [Real-time logs](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/real-time-logs.html) in the *Amazon CloudFront Developer Guide* .","ResponseHeadersPolicyId":"The identifier for a response headers policy.","SmoothStreaming":"Indicates whether you want to distribute media files in the Microsoft Smooth Streaming format using the origin that is associated with this cache behavior. If so, specify `true` ; if not, specify `false` . If you specify `true` for `SmoothStreaming` , you can still distribute other content using this cache behavior if the content matches the value of `PathPattern` .","TargetOriginId":"The value of `ID` for the origin that you want CloudFront to route requests to when they match this cache behavior.","TrustedKeyGroups":"A list of key groups that CloudFront can use to validate signed URLs or signed cookies.\\n\\nWhen a cache behavior contains trusted key groups, CloudFront requires signed URLs or signed cookies for all requests that match the cache behavior. The URLs or cookies must be signed with a private key whose corresponding public key is in the key group. The signed URL or cookie contains information about which public key CloudFront should use to verify the signature. For more information, see [Serving private content](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/PrivateContent.html) in the *Amazon CloudFront Developer Guide* .","TrustedSigners":"> We recommend using `TrustedKeyGroups` instead of `TrustedSigners` . \\n\\nA list of AWS account IDs whose public keys CloudFront can use to validate signed URLs or signed cookies.\\n\\nWhen a cache behavior contains trusted signers, CloudFront requires signed URLs or signed cookies for all requests that match the cache behavior. The URLs or cookies must be signed with the private key of a CloudFront key pair in the trusted signer\'s AWS account . The signed URL or cookie contains information about which public key CloudFront should use to verify the signature. For more information, see [Serving private content](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/PrivateContent.html) in the *Amazon CloudFront Developer Guide* .","ViewerProtocolPolicy":"The protocol that viewers can use to access the files in the origin specified by `TargetOriginId` when a request matches the path pattern in `PathPattern` . You can specify the following options:\\n\\n- `allow-all` : Viewers can use HTTP or HTTPS.\\n- `redirect-to-https` : If a viewer submits an HTTP request, CloudFront returns an HTTP status code of 301 (Moved Permanently) to the viewer along with the HTTPS URL. The viewer then resubmits the request using the new URL.\\n- `https-only` : If a viewer sends an HTTP request, CloudFront returns an HTTP status code of 403 (Forbidden).\\n\\nFor more information about requiring the HTTPS protocol, see [Requiring HTTPS Between Viewers and CloudFront](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/using-https-viewers-to-cloudfront.html) in the *Amazon CloudFront Developer Guide* .\\n\\n> The only way to guarantee that viewers retrieve an object that was fetched from the origin using HTTPS is never to use any other protocol to fetch the object. If you have recently changed from HTTP to HTTPS, we recommend that you clear your objects\' cache because cached objects are protocol agnostic. That means that an edge location will return an object from the cache regardless of whether the current request protocol matches the protocol used previously. For more information, see [Managing Cache Expiration](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Expiration.html) in the *Amazon CloudFront Developer Guide* ."}},"AWS::CloudFront::Distribution.Cookies":{"attributes":{},"description":"This field is deprecated. We recommend that you use a cache policy or an origin request policy instead of this field.\\n\\nIf you want to include cookies in the cache key, use a cache policy. For more information, see [Creating cache policies](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/controlling-the-cache-key.html#cache-key-create-cache-policy) in the *Amazon CloudFront Developer Guide* .\\n\\nIf you want to send cookies to the origin but not include them in the cache key, use an origin request policy. For more information, see [Creating origin request policies](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/controlling-origin-requests.html#origin-request-create-origin-request-policy) in the *Amazon CloudFront Developer Guide* .\\n\\nA complex type that specifies whether you want CloudFront to forward cookies to the origin and, if so, which ones. For more information about forwarding cookies to the origin, see [How CloudFront Forwards, Caches, and Logs Cookies](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Cookies.html) in the *Amazon CloudFront Developer Guide* .","properties":{"Forward":"This field is deprecated. We recommend that you use a cache policy or an origin request policy instead of this field.\\n\\nIf you want to include cookies in the cache key, use a cache policy. For more information, see [Creating cache policies](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/controlling-the-cache-key.html#cache-key-create-cache-policy) in the *Amazon CloudFront Developer Guide* .\\n\\nIf you want to send cookies to the origin but not include them in the cache key, use origin request policy. For more information, see [Creating origin request policies](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/controlling-origin-requests.html#origin-request-create-origin-request-policy) in the *Amazon CloudFront Developer Guide* .\\n\\nSpecifies which cookies to forward to the origin for this cache behavior: all, none, or the list of cookies specified in the `WhitelistedNames` complex type.\\n\\nAmazon S3 doesn\'t process cookies. When the cache behavior is forwarding requests to an Amazon S3 origin, specify none for the `Forward` element.","WhitelistedNames":"This field is deprecated. We recommend that you use a cache policy or an origin request policy instead of this field.\\n\\nIf you want to include cookies in the cache key, use a cache policy. For more information, see [Creating cache policies](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/controlling-the-cache-key.html#cache-key-create-cache-policy) in the *Amazon CloudFront Developer Guide* .\\n\\nIf you want to send cookies to the origin but not include them in the cache key, use an origin request policy. For more information, see [Creating origin request policies](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/controlling-origin-requests.html#origin-request-create-origin-request-policy) in the *Amazon CloudFront Developer Guide* .\\n\\nRequired if you specify `whitelist` for the value of `Forward` . A complex type that specifies how many different cookies you want CloudFront to forward to the origin for this cache behavior and, if you want to forward selected cookies, the names of those cookies.\\n\\nIf you specify `all` or `none` for the value of `Forward` , omit `WhitelistedNames` . If you change the value of `Forward` from `whitelist` to `all` or `none` and you don\'t delete the `WhitelistedNames` element and its child elements, CloudFront deletes them automatically.\\n\\nFor the current limit on the number of cookie names that you can whitelist for each cache behavior, see [CloudFront Limits](https://docs.aws.amazon.com/general/latest/gr/xrefaws_service_limits.html#limits_cloudfront) in the *AWS General Reference* ."}},"AWS::CloudFront::Distribution.CustomErrorResponse":{"attributes":{},"description":"A complex type that controls:\\n\\n- Whether CloudFront replaces HTTP status codes in the 4xx and 5xx range with custom error messages before returning the response to the viewer.\\n- How long CloudFront caches HTTP status codes in the 4xx and 5xx range.\\n\\nFor more information about custom error pages, see [Customizing Error Responses](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/custom-error-pages.html) in the *Amazon CloudFront Developer Guide* .","properties":{"ErrorCachingMinTTL":"The minimum amount of time, in seconds, that you want CloudFront to cache the HTTP status code specified in `ErrorCode` . When this time period has elapsed, CloudFront queries your origin to see whether the problem that caused the error has been resolved and the requested object is now available.\\n\\nFor more information, see [Customizing Error Responses](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/custom-error-pages.html) in the *Amazon CloudFront Developer Guide* .","ErrorCode":"The HTTP status code for which you want to specify a custom error page and/or a caching duration.","ResponseCode":"The HTTP status code that you want CloudFront to return to the viewer along with the custom error page. There are a variety of reasons that you might want CloudFront to return a status code different from the status code that your origin returned to CloudFront, for example:\\n\\n- Some Internet devices (some firewalls and corporate proxies, for example) intercept HTTP 4xx and 5xx and prevent the response from being returned to the viewer. If you substitute `200` , the response typically won\'t be intercepted.\\n- If you don\'t care about distinguishing among different client errors or server errors, you can specify `400` or `500` as the `ResponseCode` for all 4xx or 5xx errors.\\n- You might want to return a `200` status code (OK) and static website so your customers don\'t know that your website is down.\\n\\nIf you specify a value for `ResponseCode` , you must also specify a value for `ResponsePagePath` .","ResponsePagePath":"The path to the custom error page that you want CloudFront to return to a viewer when your origin returns the HTTP status code specified by `ErrorCode` , for example, `/4xx-errors/403-forbidden.html` . If you want to store your objects and your custom error pages in different locations, your distribution must include a cache behavior for which the following is true:\\n\\n- The value of `PathPattern` matches the path to your custom error messages. For example, suppose you saved custom error pages for 4xx errors in an Amazon S3 bucket in a directory named `/4xx-errors` . Your distribution must include a cache behavior for which the path pattern routes requests for your custom error pages to that location, for example, `/4xx-errors/*` .\\n- The value of `TargetOriginId` specifies the value of the `ID` element for the origin that contains your custom error pages.\\n\\nIf you specify a value for `ResponsePagePath` , you must also specify a value for `ResponseCode` .\\n\\nWe recommend that you store custom error pages in an Amazon S3 bucket. If you store custom error pages on an HTTP server and the server starts to return 5xx errors, CloudFront can\'t get the files that you want to return to viewers because the origin server is unavailable."}},"AWS::CloudFront::Distribution.CustomOriginConfig":{"attributes":{},"description":"A custom origin. A custom origin is any origin that is *not* an Amazon S3 bucket, with one exception. An Amazon S3 bucket that is [configured with static website hosting](https://docs.aws.amazon.com/AmazonS3/latest/dev/WebsiteHosting.html) *is* a custom origin.","properties":{"HTTPPort":"The HTTP port that CloudFront uses to connect to the origin. Specify the HTTP port that the origin listens on.","HTTPSPort":"The HTTPS port that CloudFront uses to connect to the origin. Specify the HTTPS port that the origin listens on.","OriginKeepaliveTimeout":"Specifies how long, in seconds, CloudFront persists its connection to the origin. The minimum timeout is 1 second, the maximum is 60 seconds, and the default (if you don\'t specify otherwise) is 5 seconds.\\n\\nFor more information, see [Origin Keep-alive Timeout](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-web-values-specify.html#DownloadDistValuesOriginKeepaliveTimeout) in the *Amazon CloudFront Developer Guide* .","OriginProtocolPolicy":"Specifies the protocol (HTTP or HTTPS) that CloudFront uses to connect to the origin. Valid values are:\\n\\n- `http-only` – CloudFront always uses HTTP to connect to the origin.\\n- `match-viewer` – CloudFront connects to the origin using the same protocol that the viewer used to connect to CloudFront.\\n- `https-only` – CloudFront always uses HTTPS to connect to the origin.","OriginReadTimeout":"Specifies how long, in seconds, CloudFront waits for a response from the origin. This is also known as the *origin response timeout* . The minimum timeout is 1 second, the maximum is 60 seconds, and the default (if you don\'t specify otherwise) is 30 seconds.\\n\\nFor more information, see [Origin Response Timeout](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-web-values-specify.html#DownloadDistValuesOriginResponseTimeout) in the *Amazon CloudFront Developer Guide* .","OriginSSLProtocols":"Specifies the minimum SSL/TLS protocol that CloudFront uses when connecting to your origin over HTTPS. Valid values include `SSLv3` , `TLSv1` , `TLSv1.1` , and `TLSv1.2` .\\n\\nFor more information, see [Minimum Origin SSL Protocol](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-web-values-specify.html#DownloadDistValuesOriginSSLProtocols) in the *Amazon CloudFront Developer Guide* ."}},"AWS::CloudFront::Distribution.DefaultCacheBehavior":{"attributes":{},"description":"A complex type that describes the default cache behavior if you don\'t specify a `CacheBehavior` element or if request URLs don\'t match any of the values of `PathPattern` in `CacheBehavior` elements. You must create exactly one default cache behavior.","properties":{"AllowedMethods":"A complex type that controls which HTTP methods CloudFront processes and forwards to your Amazon S3 bucket or your custom origin. There are three choices:\\n\\n- CloudFront forwards only `GET` and `HEAD` requests.\\n- CloudFront forwards only `GET` , `HEAD` , and `OPTIONS` requests.\\n- CloudFront forwards `GET, HEAD, OPTIONS, PUT, PATCH, POST` , and `DELETE` requests.\\n\\nIf you pick the third choice, you may need to restrict access to your Amazon S3 bucket or to your custom origin so users can\'t perform operations that you don\'t want them to. For example, you might not want users to have permissions to delete objects from your origin.","CachePolicyId":"The unique identifier of the cache policy that is attached to the default cache behavior. For more information, see [Creating cache policies](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/controlling-the-cache-key.html#cache-key-create-cache-policy) or [Using the managed cache policies](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/using-managed-cache-policies.html) in the *Amazon CloudFront Developer Guide* .\\n\\nA `DefaultCacheBehavior` must include either a `CachePolicyId` or `ForwardedValues` . We recommend that you use a `CachePolicyId` .","CachedMethods":"A complex type that controls whether CloudFront caches the response to requests using the specified HTTP methods. There are two choices:\\n\\n- CloudFront caches responses to `GET` and `HEAD` requests.\\n- CloudFront caches responses to `GET` , `HEAD` , and `OPTIONS` requests.\\n\\nIf you pick the second choice for your Amazon S3 Origin, you may need to forward Access-Control-Request-Method, Access-Control-Request-Headers, and Origin headers for the responses to be cached correctly.","Compress":"Whether you want CloudFront to automatically compress certain files for this cache behavior. If so, specify `true` ; if not, specify `false` . For more information, see [Serving Compressed Files](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/ServingCompressedFiles.html) in the *Amazon CloudFront Developer Guide* .","DefaultTTL":"This field is deprecated. We recommend that you use the `DefaultTTL` field in a cache policy instead of this field. For more information, see [Creating cache policies](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/controlling-the-cache-key.html#cache-key-create-cache-policy) or [Using the managed cache policies](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/using-managed-cache-policies.html) in the *Amazon CloudFront Developer Guide* .\\n\\nThe default amount of time that you want objects to stay in CloudFront caches before CloudFront forwards another request to your origin to determine whether the object has been updated. The value that you specify applies only when your origin does not add HTTP headers such as `Cache-Control max-age` , `Cache-Control s-maxage` , and `Expires` to objects. For more information, see [Managing How Long Content Stays in an Edge Cache (Expiration)](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Expiration.html) in the *Amazon CloudFront Developer Guide* .","FieldLevelEncryptionId":"The value of `ID` for the field-level encryption configuration that you want CloudFront to use for encrypting specific fields of data for the default cache behavior.","ForwardedValues":"This field is deprecated. We recommend that you use a cache policy or an origin request policy instead of this field. For more information, see [Working with policies](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/working-with-policies.html) in the *Amazon CloudFront Developer Guide* .\\n\\nIf you want to include values in the cache key, use a cache policy. For more information, see [Creating cache policies](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/controlling-the-cache-key.html#cache-key-create-cache-policy) or [Using the managed cache policies](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/using-managed-cache-policies.html) in the *Amazon CloudFront Developer Guide* .\\n\\nIf you want to send values to the origin but not include them in the cache key, use an origin request policy. For more information, see [Creating origin request policies](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/controlling-origin-requests.html#origin-request-create-origin-request-policy) or [Using the managed origin request policies](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/using-managed-origin-request-policies.html) in the *Amazon CloudFront Developer Guide* .\\n\\nA `DefaultCacheBehavior` must include either a `CachePolicyId` or `ForwardedValues` . We recommend that you use a `CachePolicyId` .\\n\\nA complex type that specifies how CloudFront handles query strings, cookies, and HTTP headers.","FunctionAssociations":"A list of CloudFront functions that are associated with this cache behavior. CloudFront functions must be published to the `LIVE` stage to associate them with a cache behavior.","LambdaFunctionAssociations":"A complex type that contains zero or more Lambda@Edge function associations for a cache behavior.","MaxTTL":"This field is deprecated. We recommend that you use the `MaxTTL` field in a cache policy instead of this field. For more information, see [Creating cache policies](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/controlling-the-cache-key.html#cache-key-create-cache-policy) or [Using the managed cache policies](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/using-managed-cache-policies.html) in the *Amazon CloudFront Developer Guide* .\\n\\nThe maximum amount of time that you want objects to stay in CloudFront caches before CloudFront forwards another request to your origin to determine whether the object has been updated. The value that you specify applies only when your origin adds HTTP headers such as `Cache-Control max-age` , `Cache-Control s-maxage` , and `Expires` to objects. For more information, see [Managing How Long Content Stays in an Edge Cache (Expiration)](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Expiration.html) in the *Amazon CloudFront Developer Guide* .","MinTTL":"This field is deprecated. We recommend that you use the `MinTTL` field in a cache policy instead of this field. For more information, see [Creating cache policies](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/controlling-the-cache-key.html#cache-key-create-cache-policy) or [Using the managed cache policies](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/using-managed-cache-policies.html) in the *Amazon CloudFront Developer Guide* .\\n\\nThe minimum amount of time that you want objects to stay in CloudFront caches before CloudFront forwards another request to your origin to determine whether the object has been updated. For more information, see [Managing How Long Content Stays in an Edge Cache (Expiration)](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Expiration.html) in the *Amazon CloudFront Developer Guide* .\\n\\nYou must specify `0` for `MinTTL` if you configure CloudFront to forward all headers to your origin (under `Headers` , if you specify `1` for `Quantity` and `*` for `Name` ).","OriginRequestPolicyId":"The unique identifier of the origin request policy that is attached to the default cache behavior. For more information, see [Creating origin request policies](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/controlling-origin-requests.html#origin-request-create-origin-request-policy) or [Using the managed origin request policies](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/using-managed-origin-request-policies.html) in the *Amazon CloudFront Developer Guide* .","RealtimeLogConfigArn":"The Amazon Resource Name (ARN) of the real-time log configuration that is attached to this cache behavior. For more information, see [Real-time logs](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/real-time-logs.html) in the *Amazon CloudFront Developer Guide* .","ResponseHeadersPolicyId":"The identifier for a response headers policy.","SmoothStreaming":"Indicates whether you want to distribute media files in the Microsoft Smooth Streaming format using the origin that is associated with this cache behavior. If so, specify `true` ; if not, specify `false` . If you specify `true` for `SmoothStreaming` , you can still distribute other content using this cache behavior if the content matches the value of `PathPattern` .","TargetOriginId":"The value of `ID` for the origin that you want CloudFront to route requests to when they use the default cache behavior.","TrustedKeyGroups":"A list of key groups that CloudFront can use to validate signed URLs or signed cookies.\\n\\nWhen a cache behavior contains trusted key groups, CloudFront requires signed URLs or signed cookies for all requests that match the cache behavior. The URLs or cookies must be signed with a private key whose corresponding public key is in the key group. The signed URL or cookie contains information about which public key CloudFront should use to verify the signature. For more information, see [Serving private content](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/PrivateContent.html) in the *Amazon CloudFront Developer Guide* .","TrustedSigners":"> We recommend using `TrustedKeyGroups` instead of `TrustedSigners` . \\n\\nA list of AWS account IDs whose public keys CloudFront can use to validate signed URLs or signed cookies.\\n\\nWhen a cache behavior contains trusted signers, CloudFront requires signed URLs or signed cookies for all requests that match the cache behavior. The URLs or cookies must be signed with the private key of a CloudFront key pair in a trusted signer\'s AWS account . The signed URL or cookie contains information about which public key CloudFront should use to verify the signature. For more information, see [Serving private content](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/PrivateContent.html) in the *Amazon CloudFront Developer Guide* .","ViewerProtocolPolicy":"The protocol that viewers can use to access the files in the origin specified by `TargetOriginId` when a request matches the path pattern in `PathPattern` . You can specify the following options:\\n\\n- `allow-all` : Viewers can use HTTP or HTTPS.\\n- `redirect-to-https` : If a viewer submits an HTTP request, CloudFront returns an HTTP status code of 301 (Moved Permanently) to the viewer along with the HTTPS URL. The viewer then resubmits the request using the new URL.\\n- `https-only` : If a viewer sends an HTTP request, CloudFront returns an HTTP status code of 403 (Forbidden).\\n\\nFor more information about requiring the HTTPS protocol, see [Requiring HTTPS Between Viewers and CloudFront](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/using-https-viewers-to-cloudfront.html) in the *Amazon CloudFront Developer Guide* .\\n\\n> The only way to guarantee that viewers retrieve an object that was fetched from the origin using HTTPS is never to use any other protocol to fetch the object. If you have recently changed from HTTP to HTTPS, we recommend that you clear your objects\' cache because cached objects are protocol agnostic. That means that an edge location will return an object from the cache regardless of whether the current request protocol matches the protocol used previously. For more information, see [Managing Cache Expiration](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Expiration.html) in the *Amazon CloudFront Developer Guide* ."}},"AWS::CloudFront::Distribution.DistributionConfig":{"attributes":{},"description":"A distribution configuration.","properties":{"Aliases":"A complex type that contains information about CNAMEs (alternate domain names), if any, for this distribution.","CNAMEs":"","CacheBehaviors":"A complex type that contains zero or more `CacheBehavior` elements.","Comment":"A comment to describe the distribution. The comment cannot be longer than 128 characters.","ContinuousDeploymentPolicyId":"The identifier of a continuous deployment policy. For more information, see `CreateContinuousDeploymentPolicy` .","CustomErrorResponses":"A complex type that controls the following:\\n\\n- Whether CloudFront replaces HTTP status codes in the 4xx and 5xx range with custom error messages before returning the response to the viewer.\\n- How long CloudFront caches HTTP status codes in the 4xx and 5xx range.\\n\\nFor more information about custom error pages, see [Customizing Error Responses](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/custom-error-pages.html) in the *Amazon CloudFront Developer Guide* .","CustomOrigin":"","DefaultCacheBehavior":"A complex type that describes the default cache behavior if you don\'t specify a `CacheBehavior` element or if files don\'t match any of the values of `PathPattern` in `CacheBehavior` elements. You must create exactly one default cache behavior.","DefaultRootObject":"The object that you want CloudFront to request from your origin (for example, `index.html` ) when a viewer requests the root URL for your distribution ( `https://www.example.com` ) instead of an object in your distribution ( `https://www.example.com/product-description.html` ). Specifying a default root object avoids exposing the contents of your distribution.\\n\\nSpecify only the object name, for example, `index.html` . Don\'t add a `/` before the object name.\\n\\nIf you don\'t want to specify a default root object when you create a distribution, include an empty `DefaultRootObject` element.\\n\\nTo delete the default root object from an existing distribution, update the distribution configuration and include an empty `DefaultRootObject` element.\\n\\nTo replace the default root object, update the distribution configuration and specify the new object.\\n\\nFor more information about the default root object, see [Creating a Default Root Object](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/DefaultRootObject.html) in the *Amazon CloudFront Developer Guide* .","Enabled":"From this field, you can enable or disable the selected distribution.","HttpVersion":"(Optional) Specify the maximum HTTP version(s) that you want viewers to use to communicate with CloudFront . The default value for new distributions is `http1.1` .\\n\\nFor viewers and CloudFront to use HTTP/2, viewers must support TLSv1.2 or later, and must support Server Name Indication (SNI).\\n\\nFor viewers and CloudFront to use HTTP/3, viewers must support TLSv1.3 and Server Name Indication (SNI). CloudFront supports HTTP/3 connection migration to allow the viewer to switch networks without losing connection. For more information about connection migration, see [Connection Migration](https://docs.aws.amazon.com/https://www.rfc-editor.org/rfc/rfc9000.html#name-connection-migration) at RFC 9000. For more information about supported TLSv1.3 ciphers, see [Supported protocols and ciphers between viewers and CloudFront](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/secure-connections-supported-viewer-protocols-ciphers.html) .","IPV6Enabled":"If you want CloudFront to respond to IPv6 DNS requests with an IPv6 address for your distribution, specify `true` . If you specify `false` , CloudFront responds to IPv6 DNS requests with the DNS response code `NOERROR` and with no IP addresses. This allows viewers to submit a second request, for an IPv4 address for your distribution.\\n\\nIn general, you should enable IPv6 if you have users on IPv6 networks who want to access your content. However, if you\'re using signed URLs or signed cookies to restrict access to your content, and if you\'re using a custom policy that includes the `IpAddress` parameter to restrict the IP addresses that can access your content, don\'t enable IPv6. If you want to restrict access to some content by IP address and not restrict access to other content (or restrict access but not by IP address), you can create two distributions. For more information, see [Creating a Signed URL Using a Custom Policy](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-creating-signed-url-custom-policy.html) in the *Amazon CloudFront Developer Guide* .\\n\\nIf you\'re using an Amazon Route 53 AWS Integration alias resource record set to route traffic to your CloudFront distribution, you need to create a second alias resource record set when both of the following are true:\\n\\n- You enable IPv6 for the distribution\\n- You\'re using alternate domain names in the URLs for your objects\\n\\nFor more information, see [Routing Traffic to an Amazon CloudFront Web Distribution by Using Your Domain Name](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/routing-to-cloudfront-distribution.html) in the *Amazon Route 53 AWS Integration Developer Guide* .\\n\\nIf you created a CNAME resource record set, either with Amazon Route 53 AWS Integration or with another DNS service, you don\'t need to make any changes. A CNAME record will route traffic to your distribution regardless of the IP address format of the viewer request.","Logging":"A complex type that controls whether access logs are written for the distribution.\\n\\nFor more information about logging, see [Access Logs](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/AccessLogs.html) in the *Amazon CloudFront Developer Guide* .","OriginGroups":"A complex type that contains information about origin groups for this distribution.","Origins":"A complex type that contains information about origins for this distribution.","PriceClass":"The price class that corresponds with the maximum price that you want to pay for CloudFront service. If you specify `PriceClass_All` , CloudFront responds to requests for your objects from all CloudFront edge locations.\\n\\nIf you specify a price class other than `PriceClass_All` , CloudFront serves your objects from the CloudFront edge location that has the lowest latency among the edge locations in your price class. Viewers who are in or near regions that are excluded from your specified price class may encounter slower performance.\\n\\nFor more information about price classes, see [Choosing the Price Class for a CloudFront Distribution](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/PriceClass.html) in the *Amazon CloudFront Developer Guide* . For information about CloudFront pricing, including how price classes (such as Price Class 100) map to CloudFront regions, see [Amazon CloudFront Pricing](https://docs.aws.amazon.com/cloudfront/pricing/) .","Restrictions":"A complex type that identifies ways in which you want to restrict distribution of your content.","S3Origin":"","Staging":"A Boolean that indicates whether this is a staging distribution. When this value is `true` , this is a staging distribution. When this value is `false` , this is not a staging distribution.","ViewerCertificate":"A complex type that determines the distribution\'s SSL/TLS configuration for communicating with viewers.","WebACLId":"A unique identifier that specifies the AWS WAF web ACL, if any, to associate with this distribution. To specify a web ACL created using the latest version of AWS WAF , use the ACL ARN, for example `arn:aws:wafv2:us-east-1:123456789012:global/webacl/ExampleWebACL/473e64fd-f30b-4765-81a0-62ad96dd167a` . To specify a web ACL created using AWS WAF Classic, use the ACL ID, for example `473e64fd-f30b-4765-81a0-62ad96dd167a` .\\n\\nAWS WAF is a web application firewall that lets you monitor the HTTP and HTTPS requests that are forwarded to CloudFront, and lets you control access to your content. Based on conditions that you specify, such as the IP addresses that requests originate from or the values of query strings, CloudFront responds to requests either with the requested content or with an HTTP 403 status code (Forbidden). You can also configure CloudFront to return a custom error page when a request is blocked. For more information about AWS WAF , see the [AWS WAF Developer Guide](https://docs.aws.amazon.com/waf/latest/developerguide/what-is-aws-waf.html) ."}},"AWS::CloudFront::Distribution.ForwardedValues":{"attributes":{},"description":"This field is deprecated. We recommend that you use a cache policy or an origin request policy instead of this field.\\n\\nIf you want to include values in the cache key, use a cache policy. For more information, see [Creating cache policies](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/controlling-the-cache-key.html#cache-key-create-cache-policy) in the *Amazon CloudFront Developer Guide* .\\n\\nIf you want to send values to the origin but not include them in the cache key, use an origin request policy. For more information, see [Creating origin request policies](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/controlling-origin-requests.html#origin-request-create-origin-request-policy) in the *Amazon CloudFront Developer Guide* .\\n\\nA complex type that specifies how CloudFront handles query strings, cookies, and HTTP headers.","properties":{"Cookies":"This field is deprecated. We recommend that you use a cache policy or an origin request policy instead of this field.\\n\\nIf you want to include cookies in the cache key, use a cache policy. For more information, see [Creating cache policies](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/controlling-the-cache-key.html#cache-key-create-cache-policy) in the *Amazon CloudFront Developer Guide* .\\n\\nIf you want to send cookies to the origin but not include them in the cache key, use an origin request policy. For more information, see [Creating origin request policies](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/controlling-origin-requests.html#origin-request-create-origin-request-policy) in the *Amazon CloudFront Developer Guide* .\\n\\nA complex type that specifies whether you want CloudFront to forward cookies to the origin and, if so, which ones. For more information about forwarding cookies to the origin, see [How CloudFront Forwards, Caches, and Logs Cookies](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Cookies.html) in the *Amazon CloudFront Developer Guide* .","Headers":"This field is deprecated. We recommend that you use a cache policy or an origin request policy instead of this field.\\n\\nIf you want to include headers in the cache key, use a cache policy. For more information, see [Creating cache policies](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/controlling-the-cache-key.html#cache-key-create-cache-policy) in the *Amazon CloudFront Developer Guide* .\\n\\nIf you want to send headers to the origin but not include them in the cache key, use an origin request policy. For more information, see [Creating origin request policies](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/controlling-origin-requests.html#origin-request-create-origin-request-policy) in the *Amazon CloudFront Developer Guide* .\\n\\nA complex type that specifies the `Headers` , if any, that you want CloudFront to forward to the origin for this cache behavior (whitelisted headers). For the headers that you specify, CloudFront also caches separate versions of a specified object that is based on the header values in viewer requests.\\n\\nFor more information, see [Caching Content Based on Request Headers](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/header-caching.html) in the *Amazon CloudFront Developer Guide* .","QueryString":"This field is deprecated. We recommend that you use a cache policy or an origin request policy instead of this field.\\n\\nIf you want to include query strings in the cache key, use a cache policy. For more information, see [Creating cache policies](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/controlling-the-cache-key.html#cache-key-create-cache-policy) in the *Amazon CloudFront Developer Guide* .\\n\\nIf you want to send query strings to the origin but not include them in the cache key, use an origin request policy. For more information, see [Creating origin request policies](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/controlling-origin-requests.html#origin-request-create-origin-request-policy) in the *Amazon CloudFront Developer Guide* .\\n\\nIndicates whether you want CloudFront to forward query strings to the origin that is associated with this cache behavior and cache based on the query string parameters. CloudFront behavior depends on the value of `QueryString` and on the values that you specify for `QueryStringCacheKeys` , if any:\\n\\nIf you specify true for `QueryString` and you don\'t specify any values for `QueryStringCacheKeys` , CloudFront forwards all query string parameters to the origin and caches based on all query string parameters. Depending on how many query string parameters and values you have, this can adversely affect performance because CloudFront must forward more requests to the origin.\\n\\nIf you specify true for `QueryString` and you specify one or more values for `QueryStringCacheKeys` , CloudFront forwards all query string parameters to the origin, but it only caches based on the query string parameters that you specify.\\n\\nIf you specify false for `QueryString` , CloudFront doesn\'t forward any query string parameters to the origin, and doesn\'t cache based on query string parameters.\\n\\nFor more information, see [Configuring CloudFront to Cache Based on Query String Parameters](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/QueryStringParameters.html) in the *Amazon CloudFront Developer Guide* .","QueryStringCacheKeys":"This field is deprecated. We recommend that you use a cache policy or an origin request policy instead of this field.\\n\\nIf you want to include query strings in the cache key, use a cache policy. For more information, see [Creating cache policies](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/controlling-the-cache-key.html#cache-key-create-cache-policy) in the *Amazon CloudFront Developer Guide* .\\n\\nIf you want to send query strings to the origin but not include them in the cache key, use an origin request policy. For more information, see [Creating origin request policies](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/controlling-origin-requests.html#origin-request-create-origin-request-policy) in the *Amazon CloudFront Developer Guide* .\\n\\nA complex type that contains information about the query string parameters that you want CloudFront to use for caching for this cache behavior."}},"AWS::CloudFront::Distribution.FunctionAssociation":{"attributes":{},"description":"A CloudFront function that is associated with a cache behavior in a CloudFront distribution.","properties":{"EventType":"The event type of the function, either `viewer-request` or `viewer-response` . You cannot use origin-facing event types ( `origin-request` and `origin-response` ) with a CloudFront function.","FunctionARN":"The Amazon Resource Name (ARN) of the function."}},"AWS::CloudFront::Distribution.GeoRestriction":{"attributes":{},"description":"A complex type that controls the countries in which your content is distributed. CloudFront determines the location of your users using `MaxMind` GeoIP databases. To disable geo restriction, remove the [Restrictions](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-distributionconfig.html#cfn-cloudfront-distribution-distributionconfig-restrictions) property from your stack template.","properties":{"Locations":"A complex type that contains a `Location` element for each country in which you want CloudFront either to distribute your content ( `whitelist` ) or not distribute your content ( `blacklist` ).\\n\\nThe `Location` element is a two-letter, uppercase country code for a country that you want to include in your `blacklist` or `whitelist` . Include one `Location` element for each country.\\n\\nCloudFront and `MaxMind` both use `ISO 3166` country codes. For the current list of countries and the corresponding codes, see `ISO 3166-1-alpha-2` code on the *International Organization for Standardization* website. You can also refer to the country list on the CloudFront console, which includes both country names and codes.","RestrictionType":"The method that you want to use to restrict distribution of your content by country:\\n\\n- `none` : No geo restriction is enabled, meaning access to content is not restricted by client geo location.\\n- `blacklist` : The `Location` elements specify the countries in which you don\'t want CloudFront to distribute your content.\\n- `whitelist` : The `Location` elements specify the countries in which you want CloudFront to distribute your content."}},"AWS::CloudFront::Distribution.LambdaFunctionAssociation":{"attributes":{},"description":"A complex type that contains a Lambda@Edge function association.","properties":{"EventType":"Specifies the event type that triggers a Lambda@Edge function invocation. You can specify the following values:\\n\\n- `viewer-request` : The function executes when CloudFront receives a request from a viewer and before it checks to see whether the requested object is in the edge cache.\\n- `origin-request` : The function executes only when CloudFront sends a request to your origin. When the requested object is in the edge cache, the function doesn\'t execute.\\n- `origin-response` : The function executes after CloudFront receives a response from the origin and before it caches the object in the response. When the requested object is in the edge cache, the function doesn\'t execute.\\n- `viewer-response` : The function executes before CloudFront returns the requested object to the viewer. The function executes regardless of whether the object was already in the edge cache.\\n\\nIf the origin returns an HTTP status code other than HTTP 200 (OK), the function doesn\'t execute.","IncludeBody":"A flag that allows a Lambda@Edge function to have read access to the body content. For more information, see [Accessing the Request Body by Choosing the Include Body Option](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/lambda-include-body-access.html) in the Amazon CloudFront Developer Guide.","LambdaFunctionARN":"The ARN of the Lambda@Edge function. You must specify the ARN of a function version; you can\'t specify an alias or $LATEST."}},"AWS::CloudFront::Distribution.LegacyCustomOrigin":{"attributes":{},"description":"","properties":{"DNSName":"","HTTPPort":"","HTTPSPort":"","OriginProtocolPolicy":"","OriginSSLProtocols":""}},"AWS::CloudFront::Distribution.LegacyS3Origin":{"attributes":{},"description":"","properties":{"DNSName":"","OriginAccessIdentity":""}},"AWS::CloudFront::Distribution.Logging":{"attributes":{},"description":"A complex type that controls whether access logs are written for the distribution.","properties":{"Bucket":"The Amazon S3 bucket to store the access logs in, for example, `myawslogbucket.s3.amazonaws.com` .","IncludeCookies":"Specifies whether you want CloudFront to include cookies in access logs, specify `true` for `IncludeCookies` . If you choose to include cookies in logs, CloudFront logs all cookies regardless of how you configure the cache behaviors for this distribution. If you don\'t want to include cookies when you create a distribution or if you want to disable include cookies for an existing distribution, specify `false` for `IncludeCookies` .","Prefix":"An optional string that you want CloudFront to prefix to the access log `filenames` for this distribution, for example, `myprefix/` . If you want to enable logging, but you don\'t want to specify a prefix, you still must include an empty `Prefix` element in the `Logging` element."}},"AWS::CloudFront::Distribution.Origin":{"attributes":{},"description":"An origin.\\n\\nAn origin is the location where content is stored, and from which CloudFront gets content to serve to viewers. To specify an origin:\\n\\n- Use `S3OriginConfig` to specify an Amazon S3 bucket that is not configured with static website hosting.\\n- Use `CustomOriginConfig` to specify all other kinds of origins, including:\\n\\n- An Amazon S3 bucket that is configured with static website hosting\\n- An Elastic Load Balancing load balancer\\n- An AWS Elemental MediaPackage endpoint\\n- An AWS Elemental MediaStore container\\n- Any other HTTP server, running on an Amazon EC2 instance or any other kind of host\\n\\nFor the current maximum number of origins that you can specify per distribution, see [General Quotas on Web Distributions](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/cloudfront-limits.html#limits-web-distributions) in the *Amazon CloudFront Developer Guide* (quotas were formerly referred to as limits).","properties":{"ConnectionAttempts":"The number of times that CloudFront attempts to connect to the origin. The minimum number is 1, the maximum is 3, and the default (if you don\'t specify otherwise) is 3.\\n\\nFor a custom origin (including an Amazon S3 bucket that\'s configured with static website hosting), this value also specifies the number of times that CloudFront attempts to get a response from the origin, in the case of an [Origin Response Timeout](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-web-values-specify.html#DownloadDistValuesOriginResponseTimeout) .\\n\\nFor more information, see [Origin Connection Attempts](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-web-values-specify.html#origin-connection-attempts) in the *Amazon CloudFront Developer Guide* .","ConnectionTimeout":"The number of seconds that CloudFront waits when trying to establish a connection to the origin. The minimum timeout is 1 second, the maximum is 10 seconds, and the default (if you don\'t specify otherwise) is 10 seconds.\\n\\nFor more information, see [Origin Connection Timeout](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-web-values-specify.html#origin-connection-timeout) in the *Amazon CloudFront Developer Guide* .","CustomOriginConfig":"Use this type to specify an origin that is not an Amazon S3 bucket, with one exception. If the Amazon S3 bucket is configured with static website hosting, use this type. If the Amazon S3 bucket is not configured with static website hosting, use the `S3OriginConfig` type instead.","DomainName":"The domain name for the origin.\\n\\nFor more information, see [Origin Domain Name](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-web-values-specify.html#DownloadDistValuesDomainName) in the *Amazon CloudFront Developer Guide* .","Id":"A unique identifier for the origin. This value must be unique within the distribution.\\n\\nUse this value to specify the `TargetOriginId` in a `CacheBehavior` or `DefaultCacheBehavior` .","OriginAccessControlId":"The unique identifier of an origin access control for this origin.\\n\\nFor more information, see [Restricting access to an Amazon S3 origin](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-restricting-access-to-s3.html) in the *Amazon CloudFront Developer Guide* .","OriginCustomHeaders":"A list of HTTP header names and values that CloudFront adds to the requests that it sends to the origin.\\n\\nFor more information, see [Adding Custom Headers to Origin Requests](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/add-origin-custom-headers.html) in the *Amazon CloudFront Developer Guide* .","OriginPath":"An optional path that CloudFront appends to the origin domain name when CloudFront requests content from the origin.\\n\\nFor more information, see [Origin Path](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-web-values-specify.html#DownloadDistValuesOriginPath) in the *Amazon CloudFront Developer Guide* .","OriginShield":"CloudFront Origin Shield. Using Origin Shield can help reduce the load on your origin.\\n\\nFor more information, see [Using Origin Shield](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/origin-shield.html) in the *Amazon CloudFront Developer Guide* .","S3OriginConfig":"Use this type to specify an origin that is an Amazon S3 bucket that is not configured with static website hosting. To specify any other type of origin, including an Amazon S3 bucket that is configured with static website hosting, use the `CustomOriginConfig` type instead."}},"AWS::CloudFront::Distribution.OriginCustomHeader":{"attributes":{},"description":"A complex type that contains `HeaderName` and `HeaderValue` elements, if any, for this distribution.","properties":{"HeaderName":"The name of a header that you want CloudFront to send to your origin. For more information, see [Adding Custom Headers to Origin Requests](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/forward-custom-headers.html) in the *Amazon CloudFront Developer Guide* .","HeaderValue":"The value for the header that you specified in the `HeaderName` field."}},"AWS::CloudFront::Distribution.OriginGroup":{"attributes":{},"description":"An origin group includes two origins (a primary origin and a second origin to failover to) and a failover criteria that you specify. You create an origin group to support origin failover in CloudFront. When you create or update a distribution, you can specifiy the origin group instead of a single origin, and CloudFront will failover from the primary origin to the second origin under the failover conditions that you\'ve chosen.","properties":{"FailoverCriteria":"A complex type that contains information about the failover criteria for an origin group.","Id":"The origin group\'s ID.","Members":"A complex type that contains information about the origins in an origin group."}},"AWS::CloudFront::Distribution.OriginGroupFailoverCriteria":{"attributes":{},"description":"A complex data type that includes information about the failover criteria for an origin group, including the status codes for which CloudFront will failover from the primary origin to the second origin.","properties":{"StatusCodes":"The status codes that, when returned from the primary origin, will trigger CloudFront to failover to the second origin."}},"AWS::CloudFront::Distribution.OriginGroupMember":{"attributes":{},"description":"An origin in an origin group.","properties":{"OriginId":"The ID for an origin in an origin group."}},"AWS::CloudFront::Distribution.OriginGroupMembers":{"attributes":{},"description":"A complex data type for the origins included in an origin group.","properties":{"Items":"Items (origins) in an origin group.","Quantity":"The number of origins in an origin group."}},"AWS::CloudFront::Distribution.OriginGroups":{"attributes":{},"description":"A complex data type for the origin groups specified for a distribution.","properties":{"Items":"The items (origin groups) in a distribution.","Quantity":"The number of origin groups."}},"AWS::CloudFront::Distribution.OriginShield":{"attributes":{},"description":"CloudFront Origin Shield.\\n\\nUsing Origin Shield can help reduce the load on your origin. For more information, see [Using Origin Shield](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/origin-shield.html) in the *Amazon CloudFront Developer Guide* .","properties":{"Enabled":"A flag that specifies whether Origin Shield is enabled.\\n\\nWhen it\'s enabled, CloudFront routes all requests through Origin Shield, which can help protect your origin. When it\'s disabled, CloudFront might send requests directly to your origin from multiple edge locations or regional edge caches.","OriginShieldRegion":"The AWS Region for Origin Shield.\\n\\nSpecify the AWS Region that has the lowest latency to your origin. To specify a region, use the region code, not the region name. For example, specify the US East (Ohio) region as `us-east-2` .\\n\\nWhen you enable CloudFront Origin Shield, you must specify the AWS Region for Origin Shield. For the list of AWS Regions that you can specify, and for help choosing the best Region for your origin, see [Choosing the AWS Region for Origin Shield](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/origin-shield.html#choose-origin-shield-region) in the *Amazon CloudFront Developer Guide* ."}},"AWS::CloudFront::Distribution.Restrictions":{"attributes":{},"description":"A complex type that identifies ways in which you want to restrict distribution of your content.","properties":{"GeoRestriction":"A complex type that controls the countries in which your content is distributed. CloudFront determines the location of your users using `MaxMind` GeoIP databases. To disable geo restriction, remove the [Restrictions](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-distributionconfig.html#cfn-cloudfront-distribution-distributionconfig-restrictions) property from your stack template."}},"AWS::CloudFront::Distribution.S3OriginConfig":{"attributes":{},"description":"A complex type that contains information about the Amazon S3 origin. If the origin is a custom origin or an S3 bucket that is configured as a website endpoint, use the `CustomOriginConfig` element instead.","properties":{"OriginAccessIdentity":"The CloudFront origin access identity to associate with the origin. Use an origin access identity to configure the origin so that viewers can *only* access objects in an Amazon S3 bucket through CloudFront. The format of the value is:\\n\\norigin-access-identity/cloudfront/ *ID-of-origin-access-identity*\\n\\nwhere `*ID-of-origin-access-identity*` is the value that CloudFront returned in the `ID` element when you created the origin access identity.\\n\\nIf you want viewers to be able to access objects using either the CloudFront URL or the Amazon S3 URL, specify an empty `OriginAccessIdentity` element.\\n\\nTo delete the origin access identity from an existing distribution, update the distribution configuration and include an empty `OriginAccessIdentity` element.\\n\\nTo replace the origin access identity, update the distribution configuration and specify the new origin access identity.\\n\\nFor more information about the origin access identity, see [Serving Private Content through CloudFront](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/PrivateContent.html) in the *Amazon CloudFront Developer Guide* ."}},"AWS::CloudFront::Distribution.StatusCodes":{"attributes":{},"description":"A complex data type for the status codes that you specify that, when returned by a primary origin, trigger CloudFront to failover to a second origin.","properties":{"Items":"The items (status codes) for an origin group.","Quantity":"The number of status codes."}},"AWS::CloudFront::Distribution.ViewerCertificate":{"attributes":{},"description":"A complex type that determines the distribution\'s SSL/TLS configuration for communicating with viewers.\\n\\nIf the distribution doesn\'t use `Aliases` (also known as alternate domain names or CNAMEs)—that is, if the distribution uses the CloudFront domain name such as `d111111abcdef8.cloudfront.net` —set `CloudFrontDefaultCertificate` to `true` and leave all other fields empty.\\n\\nIf the distribution uses `Aliases` (alternate domain names or CNAMEs), use the fields in this type to specify the following settings:\\n\\n- Which viewers the distribution accepts HTTPS connections from: only viewers that support [server name indication (SNI)](https://docs.aws.amazon.com/https://en.wikipedia.org/wiki/Server_Name_Indication) (recommended), or all viewers including those that don\'t support SNI.\\n\\n- To accept HTTPS connections from only viewers that support SNI, set `SSLSupportMethod` to `sni-only` . This is recommended. Most browsers and clients support SNI. (In CloudFormation, the field name is `SslSupportMethod` . Note the different capitalization.)\\n- To accept HTTPS connections from all viewers, including those that don\'t support SNI, set `SSLSupportMethod` to `vip` . This is not recommended, and results in additional monthly charges from CloudFront. (In CloudFormation, the field name is `SslSupportMethod` . Note the different capitalization.)\\n- The minimum SSL/TLS protocol version that the distribution can use to communicate with viewers. To specify a minimum version, choose a value for `MinimumProtocolVersion` . For more information, see [Security Policy](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-web-values-specify.html#DownloadDistValues-security-policy) in the *Amazon CloudFront Developer Guide* .\\n- The location of the SSL/TLS certificate, [AWS Certificate Manager (ACM)](https://docs.aws.amazon.com/acm/latest/userguide/acm-overview.html) (recommended) or [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_server-certs.html) . You specify the location by setting a value in one of the following fields (not both):\\n\\n- `ACMCertificateArn` (In CloudFormation, this field name is `AcmCertificateArn` . Note the different capitalization.)\\n- `IAMCertificateId` (In CloudFormation, this field name is `IamCertificateId` . Note the different capitalization.)\\n\\nAll distributions support HTTPS connections from viewers. To require viewers to use HTTPS only, or to redirect them from HTTP to HTTPS, use `ViewerProtocolPolicy` in the `CacheBehavior` or `DefaultCacheBehavior` . To specify how CloudFront should use SSL/TLS to communicate with your custom origin, use `CustomOriginConfig` .\\n\\nFor more information, see [Using HTTPS with CloudFront](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/using-https.html) and [Using Alternate Domain Names and HTTPS](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/using-https-alternate-domain-names.html) in the *Amazon CloudFront Developer Guide* .","properties":{"AcmCertificateArn":"> In CloudFormation, this field name is `AcmCertificateArn` . Note the different capitalization. \\n\\nIf the distribution uses `Aliases` (alternate domain names or CNAMEs) and the SSL/TLS certificate is stored in [AWS Certificate Manager (ACM)](https://docs.aws.amazon.com/acm/latest/userguide/acm-overview.html) , provide the Amazon Resource Name (ARN) of the ACM certificate. CloudFront only supports ACM certificates in the US East (N. Virginia) Region ( `us-east-1` ).\\n\\nIf you specify an ACM certificate ARN, you must also specify values for `MinimumProtocolVersion` and `SSLSupportMethod` . (In CloudFormation, the field name is `SslSupportMethod` . Note the different capitalization.)","CloudFrontDefaultCertificate":"If the distribution uses the CloudFront domain name such as `d111111abcdef8.cloudfront.net` , set this field to `true` .\\n\\nIf the distribution uses `Aliases` (alternate domain names or CNAMEs), set this field to `false` and specify values for the following fields:\\n\\n- `ACMCertificateArn` or `IAMCertificateId` (specify a value for one, not both)\\n\\nIn CloudFormation, these field names are `AcmCertificateArn` and `IamCertificateId` . Note the different capitalization.\\n- `MinimumProtocolVersion`\\n- `SSLSupportMethod` (In CloudFormation, this field name is `SslSupportMethod` . Note the different capitalization.)","IamCertificateId":"> In CloudFormation, this field name is `IamCertificateId` . Note the different capitalization. \\n\\nIf the distribution uses `Aliases` (alternate domain names or CNAMEs) and the SSL/TLS certificate is stored in [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_server-certs.html) , provide the ID of the IAM certificate.\\n\\nIf you specify an IAM certificate ID, you must also specify values for `MinimumProtocolVersion` and `SSLSupportMethod` . (In CloudFormation, the field name is `SslSupportMethod` . Note the different capitalization.)","MinimumProtocolVersion":"If the distribution uses `Aliases` (alternate domain names or CNAMEs), specify the security policy that you want CloudFront to use for HTTPS connections with viewers. The security policy determines two settings:\\n\\n- The minimum SSL/TLS protocol that CloudFront can use to communicate with viewers.\\n- The ciphers that CloudFront can use to encrypt the content that it returns to viewers.\\n\\nFor more information, see [Security Policy](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-web-values-specify.html#DownloadDistValues-security-policy) and [Supported Protocols and Ciphers Between Viewers and CloudFront](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/secure-connections-supported-viewer-protocols-ciphers.html#secure-connections-supported-ciphers) in the *Amazon CloudFront Developer Guide* .\\n\\n> On the CloudFront console, this setting is called *Security Policy* . \\n\\nWhen you\'re using SNI only (you set `SSLSupportMethod` to `sni-only` ), you must specify `TLSv1` or higher. (In CloudFormation, the field name is `SslSupportMethod` . Note the different capitalization.)\\n\\nIf the distribution uses the CloudFront domain name such as `d111111abcdef8.cloudfront.net` (you set `CloudFrontDefaultCertificate` to `true` ), CloudFront automatically sets the security policy to `TLSv1` regardless of the value that you set here.","SslSupportMethod":"> In CloudFormation, this field name is `SslSupportMethod` . Note the different capitalization. \\n\\nIf the distribution uses `Aliases` (alternate domain names or CNAMEs), specify which viewers the distribution accepts HTTPS connections from.\\n\\n- `sni-only` – The distribution accepts HTTPS connections from only viewers that support [server name indication (SNI)](https://docs.aws.amazon.com/https://en.wikipedia.org/wiki/Server_Name_Indication) . This is recommended. Most browsers and clients support SNI.\\n- `vip` – The distribution accepts HTTPS connections from all viewers including those that don\'t support SNI. This is not recommended, and results in additional monthly charges from CloudFront.\\n- `static-ip` - Do not specify this value unless your distribution has been enabled for this feature by the CloudFront team. If you have a use case that requires static IP addresses for a distribution, contact CloudFront through the [AWS Support Center](https://docs.aws.amazon.com/support/home) .\\n\\nIf the distribution uses the CloudFront domain name such as `d111111abcdef8.cloudfront.net` , don\'t set a value for this field."}},"AWS::CloudFront::Function":{"attributes":{"FunctionARN":"The ARN of the function. For example:\\n\\n`arn:aws:cloudfront::123456789012:function/ExampleFunction` .\\n\\nTo get the function ARN, use the following syntax:\\n\\n`!GetAtt *Function_Logical_ID* .FunctionMetadata.FunctionARN`","FunctionMetadata.FunctionARN":"The Amazon Resource Name (ARN) of the function. The ARN uniquely identifies the function."},"description":"Creates a CloudFront function.\\n\\nTo create a function, you provide the function code and some configuration information about the function. The response contains an Amazon Resource Name (ARN) that uniquely identifies the function, and the function’s stage.\\n\\nBy default, when you create a function, it’s in the `DEVELOPMENT` stage. In this stage, you can [test the function](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/test-function.html) in the CloudFront console (or with `TestFunction` in the CloudFront API).\\n\\nWhen you’re ready to use your function with a CloudFront distribution, publish the function to the `LIVE` stage. You can do this in the CloudFront console, with `PublishFunction` in the CloudFront API, or by updating the `AWS::CloudFront::Function` resource with the `AutoPublish` property set to `true` . When the function is published to the `LIVE` stage, you can attach it to a distribution’s cache behavior, using the function’s ARN.\\n\\nTo automatically publish the function to the `LIVE` stage when it’s created, set the `AutoPublish` property to `true` .","properties":{"AutoPublish":"A flag that determines whether to automatically publish the function to the `LIVE` stage when it’s created. To automatically publish to the `LIVE` stage, set this property to `true` .","FunctionCode":"The function code. For more information about writing a CloudFront function, see [Writing function code for CloudFront Functions](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/writing-function-code.html) in the *Amazon CloudFront Developer Guide* .","FunctionConfig":"Contains configuration information about a CloudFront function.","FunctionMetadata":"Contains metadata about a CloudFront function.","Name":"A name to identify the function."}},"AWS::CloudFront::Function.FunctionConfig":{"attributes":{},"description":"Contains configuration information about a CloudFront function.","properties":{"Comment":"A comment to describe the function.","Runtime":"The function\'s runtime environment. The only valid value is `cloudfront-js-1.0` ."}},"AWS::CloudFront::Function.FunctionMetadata":{"attributes":{},"description":"Contains metadata about a CloudFront function.","properties":{"FunctionARN":"The Amazon Resource Name (ARN) of the function. The ARN uniquely identifies the function."}},"AWS::CloudFront::KeyGroup":{"attributes":{"Id":"The identifier for the key group.","LastModifiedTime":"The date and time when the key group was last modified.","Ref":"`Ref` returns the ID of the key group. For example: `e9fcd3cf-f3f4-4b61-bd85-9ba9e091b309` ."},"description":"A key group.\\n\\nA key group contains a list of public keys that you can use with [CloudFront signed URLs and signed cookies](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/PrivateContent.html) .","properties":{"KeyGroupConfig":"The key group configuration."}},"AWS::CloudFront::KeyGroup.KeyGroupConfig":{"attributes":{},"description":"A key group configuration.\\n\\nA key group contains a list of public keys that you can use with [CloudFront signed URLs and signed cookies](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/PrivateContent.html) .","properties":{"Comment":"A comment to describe the key group. The comment cannot be longer than 128 characters.","Items":"A list of the identifiers of the public keys in the key group.","Name":"A name to identify the key group."}},"AWS::CloudFront::MonitoringSubscription":{"attributes":{"Ref":"`Ref` returns the unique identifier for the monitoring subscription, which is the same as the distribution ID of the distribution that the subscription is for."},"description":"A monitoring subscription. This structure contains information about whether additional CloudWatch metrics are enabled for a given CloudFront distribution.","properties":{"DistributionId":"The ID of the distribution that you are enabling metrics for.","MonitoringSubscription":"A subscription configuration for additional CloudWatch metrics."}},"AWS::CloudFront::MonitoringSubscription.MonitoringSubscription":{"attributes":{},"description":"A monitoring subscription. This structure contains information about whether additional CloudWatch metrics are enabled for a given CloudFront distribution.","properties":{"RealtimeMetricsSubscriptionConfig":"A subscription configuration for additional CloudWatch metrics."}},"AWS::CloudFront::MonitoringSubscription.RealtimeMetricsSubscriptionConfig":{"attributes":{},"description":"A subscription configuration for additional CloudWatch metrics.","properties":{"RealtimeMetricsSubscriptionStatus":"A flag that indicates whether additional CloudWatch metrics are enabled for a given CloudFront distribution."}},"AWS::CloudFront::OriginAccessControl":{"attributes":{"Id":"The unique identifier of the origin access control.","Ref":""},"description":"Creates a new origin access control in CloudFront. After you create an origin access control, you can add it to an origin in a CloudFront distribution so that CloudFront sends authenticated (signed) requests to the origin.\\n\\nThis makes it possible to block public access to the origin, allowing viewers (users) to access the origin\'s content only through CloudFront.\\n\\nFor more information about using a CloudFront origin access control, see [Restricting access to an AWS origin](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-restricting-access-to-origin.html) in the *Amazon CloudFront Developer Guide* .","properties":{"OriginAccessControlConfig":"The origin access control."}},"AWS::CloudFront::OriginAccessControl.OriginAccessControlConfig":{"attributes":{},"description":"Creates a new origin access control in CloudFront. After you create an origin access control, you can add it to an origin in a CloudFront distribution so that CloudFront sends authenticated (signed) requests to the origin.\\n\\nThis makes it possible to block public access to the origin, allowing viewers (users) to access the origin\'s content only through CloudFront.\\n\\nFor more information about using a CloudFront origin access control, see [Restricting access to an AWS origin](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-restricting-access-to-origin.html) in the *Amazon CloudFront Developer Guide* .","properties":{"Description":"A description of the origin access control.","Name":"A name to identify the origin access control.","OriginAccessControlOriginType":"The type of origin that this origin access control is for.","SigningBehavior":"Specifies which requests CloudFront signs (adds authentication information to). Specify `always` for the most common use case. For more information, see [origin access control advanced settings](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-restricting-access-to-s3.html#oac-advanced-settings) in the *Amazon CloudFront Developer Guide* .\\n\\nThis field can have one of the following values:\\n\\n- `always` – CloudFront signs all origin requests, overwriting the `Authorization` header from the viewer request if one exists.\\n- `never` – CloudFront doesn\'t sign any origin requests. This value turns off origin access control for all origins in all distributions that use this origin access control.\\n- `no-override` – If the viewer request doesn\'t contain the `Authorization` header, then CloudFront signs the origin request. If the viewer request contains the `Authorization` header, then CloudFront doesn\'t sign the origin request and instead passes along the `Authorization` header from the viewer request. *WARNING: To pass along the `Authorization` header from the viewer request, you *must* add the `Authorization` header to a [cache policy](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/controlling-the-cache-key.html) for all cache behaviors that use origins associated with this origin access control.*","SigningProtocol":"The signing protocol of the origin access control, which determines how CloudFront signs (authenticates) requests. The only valid value is `sigv4` ."}},"AWS::CloudFront::OriginRequestPolicy":{"attributes":{"Id":"The unique identifier for the origin request policy. For example: `befd7079-9bbc-4ebf-8ade-498a3694176c` .","LastModifiedTime":"The date and time when the origin request policy was last modified.","Ref":"`Ref` returns the origin request policy ID. For example: `befd7079-9bbc-4ebf-8ade-498a3694176c` ."},"description":"An origin request policy.\\n\\nWhen it\'s attached to a cache behavior, the origin request policy determines the values that CloudFront includes in requests that it sends to the origin. Each request that CloudFront sends to the origin includes the following:\\n\\n- The request body and the URL path (without the domain name) from the viewer request.\\n- The headers that CloudFront automatically includes in every origin request, including `Host` , `User-Agent` , and `X-Amz-Cf-Id` .\\n- All HTTP headers, cookies, and URL query strings that are specified in the cache policy or the origin request policy. These can include items from the viewer request and, in the case of headers, additional ones that are added by CloudFront.\\n\\nCloudFront sends a request when it can\'t find an object in its cache that matches the request. If you want to send values to the origin and also include them in the cache key, use `CachePolicy` .","properties":{"OriginRequestPolicyConfig":"The origin request policy configuration."}},"AWS::CloudFront::OriginRequestPolicy.CookiesConfig":{"attributes":{},"description":"An object that determines whether any cookies in viewer requests (and if so, which cookies) are included in requests that CloudFront sends to the origin.","properties":{"CookieBehavior":"Determines whether cookies in viewer requests are included in requests that CloudFront sends to the origin. Valid values are:\\n\\n- `none` – No cookies in viewer requests are included in requests that CloudFront sends to the origin. Even when this field is set to `none` , any cookies that are listed in a `CachePolicy` *are* included in origin requests.\\n- `whitelist` – Only the cookies in viewer requests that are listed in the `CookieNames` type are included in requests that CloudFront sends to the origin.\\n- `all` – All cookies in viewer requests are included in requests that CloudFront sends to the origin.\\n- `allExcept` – All cookies in viewer requests are included in requests that CloudFront sends to the origin, **except** for those listed in the `CookieNames` type, which are not included.","Cookies":"Contains a list of cookie names."}},"AWS::CloudFront::OriginRequestPolicy.HeadersConfig":{"attributes":{},"description":"An object that determines whether any HTTP headers (and if so, which headers) are included in requests that CloudFront sends to the origin.","properties":{"HeaderBehavior":"Determines whether any HTTP headers are included in requests that CloudFront sends to the origin. Valid values are:\\n\\n- `none` – No HTTP headers in viewer requests are included in requests that CloudFront sends to the origin. Even when this field is set to `none` , any headers that are listed in a `CachePolicy` *are* included in origin requests.\\n- `whitelist` – Only the HTTP headers that are listed in the `Headers` type are included in requests that CloudFront sends to the origin.\\n- `allViewer` – All HTTP headers in viewer requests are included in requests that CloudFront sends to the origin.\\n- `allViewerAndWhitelistCloudFront` – All HTTP headers in viewer requests and the additional CloudFront headers that are listed in the `Headers` type are included in requests that CloudFront sends to the origin. The additional headers are added by CloudFront.\\n- `allExcept` – All HTTP headers in viewer requests are included in requests that CloudFront sends to the origin, **except** for those listed in the `Headers` type, which are not included.","Headers":"Contains a list of HTTP header names."}},"AWS::CloudFront::OriginRequestPolicy.OriginRequestPolicyConfig":{"attributes":{},"description":"An origin request policy configuration.\\n\\nThis configuration determines the values that CloudFront includes in requests that it sends to the origin. Each request that CloudFront sends to the origin includes the following:\\n\\n- The request body and the URL path (without the domain name) from the viewer request.\\n- The headers that CloudFront automatically includes in every origin request, including `Host` , `User-Agent` , and `X-Amz-Cf-Id` .\\n- All HTTP headers, cookies, and URL query strings that are specified in the cache policy or the origin request policy. These can include items from the viewer request and, in the case of headers, additional ones that are added by CloudFront.\\n\\nCloudFront sends a request when it can\'t find an object in its cache that matches the request. If you want to send values to the origin and also include them in the cache key, use `CachePolicy` .","properties":{"Comment":"A comment to describe the origin request policy. The comment cannot be longer than 128 characters.","CookiesConfig":"The cookies from viewer requests to include in origin requests.","HeadersConfig":"The HTTP headers to include in origin requests. These can include headers from viewer requests and additional headers added by CloudFront.","Name":"A unique name to identify the origin request policy.","QueryStringsConfig":"The URL query strings from viewer requests to include in origin requests."}},"AWS::CloudFront::OriginRequestPolicy.QueryStringsConfig":{"attributes":{},"description":"An object that determines whether any URL query strings in viewer requests (and if so, which query strings) are included in requests that CloudFront sends to the origin.","properties":{"QueryStringBehavior":"Determines whether any URL query strings in viewer requests are included in requests that CloudFront sends to the origin. Valid values are:\\n\\n- `none` – No query strings in viewer requests are included in requests that CloudFront sends to the origin. Even when this field is set to `none` , any query strings that are listed in a `CachePolicy` *are* included in origin requests.\\n- `whitelist` – Only the query strings in viewer requests that are listed in the `QueryStringNames` type are included in requests that CloudFront sends to the origin.\\n- `all` – All query strings in viewer requests are included in requests that CloudFront sends to the origin.\\n- `allExcept` – All query strings in viewer requests are included in requests that CloudFront sends to the origin, **except** for those listed in the `QueryStringNames` type, which are not included.","QueryStrings":"Contains a list of query string names."}},"AWS::CloudFront::PublicKey":{"attributes":{"CreatedTime":"The date and time when the public key was uploaded.","Id":"The identifier of the public key.","Ref":"`Ref` returns the ID of the public key. For example: `K36X4X2EO997HM` ."},"description":"A public key that you can use with [signed URLs and signed cookies](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/PrivateContent.html) , or with [field-level encryption](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/field-level-encryption.html) .","properties":{"PublicKeyConfig":"Configuration information about a public key that you can use with [signed URLs and signed cookies](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/PrivateContent.html) , or with [field-level encryption](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/field-level-encryption.html) ."}},"AWS::CloudFront::PublicKey.PublicKeyConfig":{"attributes":{},"description":"Configuration information about a public key that you can use with [signed URLs and signed cookies](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/PrivateContent.html) , or with [field-level encryption](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/field-level-encryption.html) .","properties":{"CallerReference":"A string included in the request to help make sure that the request can\'t be replayed.","Comment":"A comment to describe the public key. The comment cannot be longer than 128 characters.","EncodedKey":"The public key that you can use with [signed URLs and signed cookies](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/PrivateContent.html) , or with [field-level encryption](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/field-level-encryption.html) .","Name":"A name to help identify the public key."}},"AWS::CloudFront::RealtimeLogConfig":{"attributes":{"Arn":"The Amazon Resource Name (ARN) of the real-time log configuration. For example: `arn:aws:cloudfront::111122223333:realtime-log-config/ExampleNameForRealtimeLogConfig` .","Ref":"`Ref` returns the Amazon Resource Name (ARN) of the real-time log configuration. For example: `arn:aws:cloudfront::111122223333:realtime-log-config/ExampleNameForRealtimeLogConfig` ."},"description":"A real-time log configuration.","properties":{"EndPoints":"Contains information about the Amazon Kinesis data stream where you are sending real-time log data for this real-time log configuration.","Fields":"A list of fields that are included in each real-time log record. In an API response, the fields are provided in the same order in which they are sent to the Amazon Kinesis data stream.\\n\\nFor more information about fields, see [Real-time log configuration fields](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/real-time-logs.html#understand-real-time-log-config-fields) in the *Amazon CloudFront Developer Guide* .","Name":"The unique name of this real-time log configuration.","SamplingRate":"The sampling rate for this real-time log configuration. The sampling rate determines the percentage of viewer requests that are represented in the real-time log data. The sampling rate is an integer between 1 and 100, inclusive."}},"AWS::CloudFront::RealtimeLogConfig.EndPoint":{"attributes":{},"description":"Contains information about the Amazon Kinesis data stream where you are sending real-time log data in a real-time log configuration.","properties":{"KinesisStreamConfig":"Contains information about the Amazon Kinesis data stream where you are sending real-time log data.","StreamType":"The type of data stream where you are sending real-time log data. The only valid value is `Kinesis` ."}},"AWS::CloudFront::RealtimeLogConfig.KinesisStreamConfig":{"attributes":{},"description":"Contains information about the Amazon Kinesis data stream where you are sending real-time log data.","properties":{"RoleArn":"The Amazon Resource Name (ARN) of an AWS Identity and Access Management (IAM) role that CloudFront can use to send real-time log data to your Kinesis data stream.\\n\\nFor more information the IAM role, see [Real-time log configuration IAM role](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/real-time-logs.html#understand-real-time-log-config-iam-role) in the *Amazon CloudFront Developer Guide* .","StreamArn":"The Amazon Resource Name (ARN) of the Kinesis data stream where you are sending real-time log data."}},"AWS::CloudFront::ResponseHeadersPolicy":{"attributes":{"Id":"The unique identifier for the response headers policy. For example: `57f99797-3b20-4e1b-a728-27972a74082a` .","LastModifiedTime":"The date and time when the response headers policy was last modified.","Ref":"`Ref` returns the response headers policy ID. For example: `57f99797-3b20-4e1b-a728-27972a74082a` ."},"description":"A response headers policy.\\n\\nA response headers policy contains information about a set of HTTP response headers.\\n\\nAfter you create a response headers policy, you can use its ID to attach it to one or more cache behaviors in a CloudFront distribution. When it\'s attached to a cache behavior, the response headers policy affects the HTTP headers that CloudFront includes in HTTP responses to requests that match the cache behavior. CloudFront adds or removes response headers according to the configuration of the response headers policy.\\n\\nFor more information, see [Adding or removing HTTP headers in CloudFront responses](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/modifying-response-headers.html) in the *Amazon CloudFront Developer Guide* .","properties":{"ResponseHeadersPolicyConfig":"A response headers policy configuration."}},"AWS::CloudFront::ResponseHeadersPolicy.AccessControlAllowHeaders":{"attributes":{},"description":"A list of HTTP header names that CloudFront includes as values for the `Access-Control-Allow-Headers` HTTP response header.\\n\\nFor more information about the `Access-Control-Allow-Headers` HTTP response header, see [Access-Control-Allow-Headers](https://docs.aws.amazon.com/https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Headers) in the MDN Web Docs.","properties":{"Items":"The list of HTTP header names. You can specify `*` to allow all headers."}},"AWS::CloudFront::ResponseHeadersPolicy.AccessControlAllowMethods":{"attributes":{},"description":"A list of HTTP methods that CloudFront includes as values for the `Access-Control-Allow-Methods` HTTP response header.\\n\\nFor more information about the `Access-Control-Allow-Methods` HTTP response header, see [Access-Control-Allow-Methods](https://docs.aws.amazon.com/https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Methods) in the MDN Web Docs.","properties":{"Items":"The list of HTTP methods. Valid values are:\\n\\n- `GET`\\n- `DELETE`\\n- `HEAD`\\n- `OPTIONS`\\n- `PATCH`\\n- `POST`\\n- `PUT`\\n- `ALL`\\n\\n`ALL` is a special value that includes all of the listed HTTP methods."}},"AWS::CloudFront::ResponseHeadersPolicy.AccessControlAllowOrigins":{"attributes":{},"description":"A list of origins (domain names) that CloudFront can use as the value for the `Access-Control-Allow-Origin` HTTP response header.\\n\\nFor more information about the `Access-Control-Allow-Origin` HTTP response header, see [Access-Control-Allow-Origin](https://docs.aws.amazon.com/https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin) in the MDN Web Docs.","properties":{"Items":"The list of origins (domain names). You can specify `*` to allow all origins."}},"AWS::CloudFront::ResponseHeadersPolicy.AccessControlExposeHeaders":{"attributes":{},"description":"A list of HTTP headers that CloudFront includes as values for the `Access-Control-Expose-Headers` HTTP response header.\\n\\nFor more information about the `Access-Control-Expose-Headers` HTTP response header, see [Access-Control-Expose-Headers](https://docs.aws.amazon.com/https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Expose-Headers) in the MDN Web Docs.","properties":{"Items":"The list of HTTP headers. You can specify `*` to expose all headers."}},"AWS::CloudFront::ResponseHeadersPolicy.ContentSecurityPolicy":{"attributes":{},"description":"The policy directives and their values that CloudFront includes as values for the `Content-Security-Policy` HTTP response header.\\n\\nFor more information about the `Content-Security-Policy` HTTP response header, see [Content-Security-Policy](https://docs.aws.amazon.com/https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy) in the MDN Web Docs.","properties":{"ContentSecurityPolicy":"The policy directives and their values that CloudFront includes as values for the `Content-Security-Policy` HTTP response header.","Override":"A Boolean that determines whether CloudFront overrides the `Content-Security-Policy` HTTP response header received from the origin with the one specified in this response headers policy."}},"AWS::CloudFront::ResponseHeadersPolicy.ContentTypeOptions":{"attributes":{},"description":"Determines whether CloudFront includes the `X-Content-Type-Options` HTTP response header with its value set to `nosniff` .\\n\\nFor more information about the `X-Content-Type-Options` HTTP response header, see [X-Content-Type-Options](https://docs.aws.amazon.com/https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Content-Type-Options) in the MDN Web Docs.","properties":{"Override":"A Boolean that determines whether CloudFront overrides the `X-Content-Type-Options` HTTP response header received from the origin with the one specified in this response headers policy."}},"AWS::CloudFront::ResponseHeadersPolicy.CorsConfig":{"attributes":{},"description":"A configuration for a set of HTTP response headers that are used for cross-origin resource sharing (CORS). CloudFront adds these headers to HTTP responses that it sends for CORS requests that match a cache behavior associated with this response headers policy.\\n\\nFor more information about CORS, see [Cross-Origin Resource Sharing (CORS)](https://docs.aws.amazon.com/https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS) in the MDN Web Docs.","properties":{"AccessControlAllowCredentials":"A Boolean that CloudFront uses as the value for the `Access-Control-Allow-Credentials` HTTP response header.\\n\\nFor more information about the `Access-Control-Allow-Credentials` HTTP response header, see [Access-Control-Allow-Credentials](https://docs.aws.amazon.com/https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Credentials) in the MDN Web Docs.","AccessControlAllowHeaders":"A list of HTTP header names that CloudFront includes as values for the `Access-Control-Allow-Headers` HTTP response header.\\n\\nFor more information about the `Access-Control-Allow-Headers` HTTP response header, see [Access-Control-Allow-Headers](https://docs.aws.amazon.com/https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Headers) in the MDN Web Docs.","AccessControlAllowMethods":"A list of HTTP methods that CloudFront includes as values for the `Access-Control-Allow-Methods` HTTP response header.\\n\\nFor more information about the `Access-Control-Allow-Methods` HTTP response header, see [Access-Control-Allow-Methods](https://docs.aws.amazon.com/https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Methods) in the MDN Web Docs.","AccessControlAllowOrigins":"A list of origins (domain names) that CloudFront can use as the value for the `Access-Control-Allow-Origin` HTTP response header.\\n\\nFor more information about the `Access-Control-Allow-Origin` HTTP response header, see [Access-Control-Allow-Origin](https://docs.aws.amazon.com/https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin) in the MDN Web Docs.","AccessControlExposeHeaders":"A list of HTTP headers that CloudFront includes as values for the `Access-Control-Expose-Headers` HTTP response header.\\n\\nFor more information about the `Access-Control-Expose-Headers` HTTP response header, see [Access-Control-Expose-Headers](https://docs.aws.amazon.com/https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Expose-Headers) in the MDN Web Docs.","AccessControlMaxAgeSec":"A number that CloudFront uses as the value for the `Access-Control-Max-Age` HTTP response header.\\n\\nFor more information about the `Access-Control-Max-Age` HTTP response header, see [Access-Control-Max-Age](https://docs.aws.amazon.com/https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Max-Age) in the MDN Web Docs.","OriginOverride":"A Boolean that determines whether CloudFront overrides HTTP response headers received from the origin with the ones specified in this response headers policy."}},"AWS::CloudFront::ResponseHeadersPolicy.CustomHeader":{"attributes":{},"description":"An HTTP response header name and its value. CloudFront includes this header in HTTP responses that it sends for requests that match a cache behavior that\'s associated with this response headers policy.","properties":{"Header":"The HTTP response header name.","Override":"A Boolean that determines whether CloudFront overrides a response header with the same name received from the origin with the header specified here.","Value":"The value for the HTTP response header."}},"AWS::CloudFront::ResponseHeadersPolicy.CustomHeadersConfig":{"attributes":{},"description":"A list of HTTP response header names and their values. CloudFront includes these headers in HTTP responses that it sends for requests that match a cache behavior that\'s associated with this response headers policy.","properties":{"Items":"The list of HTTP response headers and their values."}},"AWS::CloudFront::ResponseHeadersPolicy.FrameOptions":{"attributes":{},"description":"Determines whether CloudFront includes the `X-Frame-Options` HTTP response header and the header\'s value.\\n\\nFor more information about the `X-Frame-Options` HTTP response header, see [X-Frame-Options](https://docs.aws.amazon.com/https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options) in the MDN Web Docs.","properties":{"FrameOption":"The value of the `X-Frame-Options` HTTP response header. Valid values are `DENY` and `SAMEORIGIN` .\\n\\nFor more information about these values, see [X-Frame-Options](https://docs.aws.amazon.com/https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options) in the MDN Web Docs.","Override":"A Boolean that determines whether CloudFront overrides the `X-Frame-Options` HTTP response header received from the origin with the one specified in this response headers policy."}},"AWS::CloudFront::ResponseHeadersPolicy.ReferrerPolicy":{"attributes":{},"description":"Determines whether CloudFront includes the `Referrer-Policy` HTTP response header and the header\'s value.\\n\\nFor more information about the `Referrer-Policy` HTTP response header, see [Referrer-Policy](https://docs.aws.amazon.com/https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Referrer-Policy) in the MDN Web Docs.","properties":{"Override":"A Boolean that determines whether CloudFront overrides the `Referrer-Policy` HTTP response header received from the origin with the one specified in this response headers policy.","ReferrerPolicy":"The value of the `Referrer-Policy` HTTP response header. Valid values are:\\n\\n- `no-referrer`\\n- `no-referrer-when-downgrade`\\n- `origin`\\n- `origin-when-cross-origin`\\n- `same-origin`\\n- `strict-origin`\\n- `strict-origin-when-cross-origin`\\n- `unsafe-url`\\n\\nFor more information about these values, see [Referrer-Policy](https://docs.aws.amazon.com/https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Referrer-Policy) in the MDN Web Docs."}},"AWS::CloudFront::ResponseHeadersPolicy.RemoveHeader":{"attributes":{},"description":"The name of an HTTP header that CloudFront removes from HTTP responses to requests that match the cache behavior that this response headers policy is attached to.","properties":{"Header":"The HTTP header name."}},"AWS::CloudFront::ResponseHeadersPolicy.RemoveHeadersConfig":{"attributes":{},"description":"A list of HTTP header names that CloudFront removes from HTTP responses to requests that match the cache behavior that this response headers policy is attached to.","properties":{"Items":"The list of HTTP header names."}},"AWS::CloudFront::ResponseHeadersPolicy.ResponseHeadersPolicyConfig":{"attributes":{},"description":"A response headers policy configuration.\\n\\nA response headers policy configuration contains metadata about the response headers policy, and configurations for sets of HTTP response headers.","properties":{"Comment":"A comment to describe the response headers policy.\\n\\nThe comment cannot be longer than 128 characters.","CorsConfig":"A configuration for a set of HTTP response headers that are used for cross-origin resource sharing (CORS).","CustomHeadersConfig":"A configuration for a set of custom HTTP response headers.","Name":"A name to identify the response headers policy.\\n\\nThe name must be unique for response headers policies in this AWS account .","RemoveHeadersConfig":"A configuration for a set of HTTP headers to remove from the HTTP response.","SecurityHeadersConfig":"A configuration for a set of security-related HTTP response headers.","ServerTimingHeadersConfig":"A configuration for enabling the `Server-Timing` header in HTTP responses sent from CloudFront."}},"AWS::CloudFront::ResponseHeadersPolicy.SecurityHeadersConfig":{"attributes":{},"description":"A configuration for a set of security-related HTTP response headers. CloudFront adds these headers to HTTP responses that it sends for requests that match a cache behavior associated with this response headers policy.","properties":{"ContentSecurityPolicy":"The policy directives and their values that CloudFront includes as values for the `Content-Security-Policy` HTTP response header.\\n\\nFor more information about the `Content-Security-Policy` HTTP response header, see [Content-Security-Policy](https://docs.aws.amazon.com/https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy) in the MDN Web Docs.","ContentTypeOptions":"Determines whether CloudFront includes the `X-Content-Type-Options` HTTP response header with its value set to `nosniff` .\\n\\nFor more information about the `X-Content-Type-Options` HTTP response header, see [X-Content-Type-Options](https://docs.aws.amazon.com/https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Content-Type-Options) in the MDN Web Docs.","FrameOptions":"Determines whether CloudFront includes the `X-Frame-Options` HTTP response header and the header\'s value.\\n\\nFor more information about the `X-Frame-Options` HTTP response header, see [X-Frame-Options](https://docs.aws.amazon.com/https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options) in the MDN Web Docs.","ReferrerPolicy":"Determines whether CloudFront includes the `Referrer-Policy` HTTP response header and the header\'s value.\\n\\nFor more information about the `Referrer-Policy` HTTP response header, see [Referrer-Policy](https://docs.aws.amazon.com/https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Referrer-Policy) in the MDN Web Docs.","StrictTransportSecurity":"Determines whether CloudFront includes the `Strict-Transport-Security` HTTP response header and the header\'s value.\\n\\nFor more information about the `Strict-Transport-Security` HTTP response header, see [Strict-Transport-Security](https://docs.aws.amazon.com/https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Strict-Transport-Security) in the MDN Web Docs.","XSSProtection":"Determines whether CloudFront includes the `X-XSS-Protection` HTTP response header and the header\'s value.\\n\\nFor more information about the `X-XSS-Protection` HTTP response header, see [X-XSS-Protection](https://docs.aws.amazon.com/https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-XSS-Protection) in the MDN Web Docs."}},"AWS::CloudFront::ResponseHeadersPolicy.ServerTimingHeadersConfig":{"attributes":{},"description":"A configuration for enabling the `Server-Timing` header in HTTP responses sent from CloudFront.","properties":{"Enabled":"A Boolean that determines whether CloudFront adds the `Server-Timing` header to HTTP responses that it sends in response to requests that match a cache behavior that\'s associated with this response headers policy.","SamplingRate":"A number 0–100 (inclusive) that specifies the percentage of responses that you want CloudFront to add the `Server-Timing` header to. When you set the sampling rate to 100, CloudFront adds the `Server-Timing` header to the HTTP response for every request that matches the cache behavior that this response headers policy is attached to. When you set it to 50, CloudFront adds the header to 50% of the responses for requests that match the cache behavior. You can set the sampling rate to any number 0–100 with up to four decimal places."}},"AWS::CloudFront::ResponseHeadersPolicy.StrictTransportSecurity":{"attributes":{},"description":"Determines whether CloudFront includes the `Strict-Transport-Security` HTTP response header and the header\'s value.\\n\\nFor more information about the `Strict-Transport-Security` HTTP response header, see [Strict-Transport-Security](https://docs.aws.amazon.com/https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Strict-Transport-Security) in the MDN Web Docs.","properties":{"AccessControlMaxAgeSec":"A number that CloudFront uses as the value for the `max-age` directive in the `Strict-Transport-Security` HTTP response header.","IncludeSubdomains":"A Boolean that determines whether CloudFront includes the `includeSubDomains` directive in the `Strict-Transport-Security` HTTP response header.","Override":"A Boolean that determines whether CloudFront overrides the `Strict-Transport-Security` HTTP response header received from the origin with the one specified in this response headers policy.","Preload":"A Boolean that determines whether CloudFront includes the `preload` directive in the `Strict-Transport-Security` HTTP response header."}},"AWS::CloudFront::ResponseHeadersPolicy.XSSProtection":{"attributes":{},"description":"Determines whether CloudFront includes the `X-XSS-Protection` HTTP response header and the header\'s value.\\n\\nFor more information about the `X-XSS-Protection` HTTP response header, see [X-XSS-Protection](https://docs.aws.amazon.com/https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-XSS-Protection) in the MDN Web Docs.","properties":{"ModeBlock":"A Boolean that determines whether CloudFront includes the `mode=block` directive in the `X-XSS-Protection` header.\\n\\nFor more information about this directive, see [X-XSS-Protection](https://docs.aws.amazon.com/https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-XSS-Protection) in the MDN Web Docs.","Override":"A Boolean that determines whether CloudFront overrides the `X-XSS-Protection` HTTP response header received from the origin with the one specified in this response headers policy.","Protection":"A Boolean that determines the value of the `X-XSS-Protection` HTTP response header. When this setting is `true` , the value of the `X-XSS-Protection` header is `1` . When this setting is `false` , the value of the `X-XSS-Protection` header is `0` .\\n\\nFor more information about these settings, see [X-XSS-Protection](https://docs.aws.amazon.com/https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-XSS-Protection) in the MDN Web Docs.","ReportUri":"A reporting URI, which CloudFront uses as the value of the `report` directive in the `X-XSS-Protection` header.\\n\\nYou cannot specify a `ReportUri` when `ModeBlock` is `true` .\\n\\nFor more information about using a reporting URL, see [X-XSS-Protection](https://docs.aws.amazon.com/https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-XSS-Protection) in the MDN Web Docs."}},"AWS::CloudFront::StreamingDistribution":{"attributes":{"DomainName":"The domain name of the resource, such as `d111111abcdef8.cloudfront.net` .","Ref":"`Ref` returns the streaming distribution ID, such as `E1E7FEN9T35R9W` ."},"description":"This resource is deprecated. Amazon CloudFront is deprecating real-time messaging protocol (RTMP) distributions on December 31, 2020. For more information, [read the announcement](https://docs.aws.amazon.com/ann.jspa?annID=7356) on the Amazon CloudFront discussion forum.","properties":{"StreamingDistributionConfig":"The current configuration information for the RTMP distribution.","Tags":"A complex type that contains zero or more `Tag` elements."}},"AWS::CloudFront::StreamingDistribution.Logging":{"attributes":{},"description":"A complex type that controls whether access logs are written for the streaming distribution.","properties":{"Bucket":"The Amazon S3 bucket to store the access logs in, for example, `myawslogbucket.s3.amazonaws.com` .","Enabled":"Specifies whether you want CloudFront to save access logs to an Amazon S3 bucket. If you don\'t want to enable logging when you create a streaming distribution or if you want to disable logging for an existing streaming distribution, specify `false` for `Enabled` , and specify `empty Bucket` and `Prefix` elements. If you specify `false` for `Enabled` but you specify values for `Bucket` and `Prefix` , the values are automatically deleted.","Prefix":"An optional string that you want CloudFront to prefix to the access log filenames for this streaming distribution, for example, `myprefix/` . If you want to enable logging, but you don\'t want to specify a prefix, you still must include an empty `Prefix` element in the `Logging` element."}},"AWS::CloudFront::StreamingDistribution.S3Origin":{"attributes":{},"description":"A complex type that contains information about the Amazon S3 bucket from which you want CloudFront to get your media files for distribution.","properties":{"DomainName":"The DNS name of the Amazon S3 origin.","OriginAccessIdentity":"The CloudFront origin access identity to associate with the distribution. Use an origin access identity to configure the distribution so that end users can only access objects in an Amazon S3 bucket through CloudFront.\\n\\nIf you want end users to be able to access objects using either the CloudFront URL or the Amazon S3 URL, specify an empty `OriginAccessIdentity` element.\\n\\nTo delete the origin access identity from an existing distribution, update the distribution configuration and include an empty `OriginAccessIdentity` element.\\n\\nTo replace the origin access identity, update the distribution configuration and specify the new origin access identity.\\n\\nFor more information, see [Using an Origin Access Identity to Restrict Access to Your Amazon S3 Content](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-restricting-access-to-s3.html) in the *Amazon CloudFront Developer Guide* ."}},"AWS::CloudFront::StreamingDistribution.StreamingDistributionConfig":{"attributes":{},"description":"The RTMP distribution\'s configuration information.","properties":{"Aliases":"A complex type that contains information about CNAMEs (alternate domain names), if any, for this streaming distribution.","Comment":"Any comments you want to include about the streaming distribution.","Enabled":"Whether the streaming distribution is enabled to accept user requests for content.","Logging":"A complex type that controls whether access logs are written for the streaming distribution.","PriceClass":"A complex type that contains information about price class for this streaming distribution.","S3Origin":"A complex type that contains information about the Amazon S3 bucket from which you want CloudFront to get your media files for distribution.","TrustedSigners":"A complex type that specifies any AWS accounts that you want to permit to create signed URLs for private content. If you want the distribution to use signed URLs, include this element; if you want the distribution to use public URLs, remove this element. For more information, see [Serving Private Content through CloudFront](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/PrivateContent.html) in the *Amazon CloudFront Developer Guide* ."}},"AWS::CloudFront::StreamingDistribution.TrustedSigners":{"attributes":{},"description":"A list of AWS accounts whose public keys CloudFront can use to verify the signatures of signed URLs and signed cookies.","properties":{"AwsAccountNumbers":"An AWS account number that contains active CloudFront key pairs that CloudFront can use to verify the signatures of signed URLs and signed cookies. If the AWS account that owns the key pairs is the same account that owns the CloudFront distribution, the value of this field is `self` .","Enabled":"This field is `true` if any of the AWS accounts in the list are configured as trusted signers. If not, this field is `false` ."}},"AWS::CloudTrail::Channel":{"attributes":{"ChannelArn":"`Ref` returns the ARN of the CloudTrail channel, such as `arn:aws:cloudtrail:us-east-2:123456789012:channel/01234567890` .","Ref":"When the logical ID of this resource is provided to the Ref intrinsic function, `Ref` returns the resource name."},"description":"Contains information about a returned CloudTrail channel.","properties":{"Destinations":"One or more event data stores to which events arriving through a channel will be logged.","Name":"The name of the channel.","Source":"The name of the partner or external event source. You cannot change this name after you create the channel. A maximum of one channel is allowed per source.\\n\\nA source can be either `Custom` for all valid non- AWS events, or the name of a partner event source. For information about the source names for available partners, see [Additional information about integration partners](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/query-event-data-store-integration.html#cloudtrail-lake-partner-information) in the CloudTrail User Guide.","Tags":"A list of tags."}},"AWS::CloudTrail::Channel.Destination":{"attributes":{},"description":"Contains information about the destination receiving events.","properties":{"Location":"For channels used for a CloudTrail Lake integration, the location is the ARN of an event data store that receives events from a channel. For service-linked channels, the location is the name of the AWS service.","Type":"The type of destination for events arriving from a channel. For channels used for a CloudTrail Lake integration, the value is `EventDataStore` . For service-linked channels, the value is `AWS_SERVICE` ."}},"AWS::CloudTrail::EventDataStore":{"attributes":{"CreatedTimestamp":"`Ref` returns the time stamp of the creation of the event data store, such as `1248496624` .","EventDataStoreArn":"`Ref` returns the ARN of the CloudTrail event data store, such as `arn:aws:cloudtrail:us-east-1:12345678910:eventdatastore/EXAMPLE-f852-4e8f-8bd1-bcf6cEXAMPLE` .","Ref":"When the logical ID of this resource is provided to the Ref intrinsic function, `Ref` returns the resource name.","Status":"`Ref` returns the status of the event data store, such as `ENABLED` .","UpdatedTimestamp":"`Ref` returns the time stamp that updates were made to an event data store, such as `1598296624` ."},"description":"Creates a new event data store.","properties":{"AdvancedEventSelectors":"The advanced event selectors to use to select the events for the data store. You can configure up to five advanced event selectors for each event data store.\\n\\nFor more information about how to use advanced event selectors to log CloudTrail events, see [Log events by using advanced event selectors](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/logging-data-events-with-cloudtrail.html#creating-data-event-selectors-advanced) in the CloudTrail User Guide.\\n\\nFor more information about how to use advanced event selectors to include AWS Config configuration items in your event data store, see [Create an event data store for AWS Config configuration items](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/query-lake-cli.html#lake-cli-create-eds-config) in the CloudTrail User Guide.\\n\\nFor more information about how to use advanced event selectors to include non- AWS events in your event data store, see [Create an integration to log events from outside AWS](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/query-lake-cli.html#lake-cli-create-integration) in the CloudTrail User Guide.","IngestionEnabled":"Specifies whether the event data store should start ingesting live events. The default is true.","KmsKeyId":"Specifies the AWS KMS key ID to use to encrypt the events delivered by CloudTrail. The value can be an alias name prefixed by `alias/` , a fully specified ARN to an alias, a fully specified ARN to a key, or a globally unique identifier.\\n\\n> Disabling or deleting the KMS key, or removing CloudTrail permissions on the key, prevents CloudTrail from logging events to the event data store, and prevents users from querying the data in the event data store that was encrypted with the key. After you associate an event data store with a KMS key, the KMS key cannot be removed or changed. Before you disable or delete a KMS key that you are using with an event data store, delete or back up your event data store. \\n\\nCloudTrail also supports AWS KMS multi-Region keys. For more information about multi-Region keys, see [Using multi-Region keys](https://docs.aws.amazon.com/kms/latest/developerguide/multi-region-keys-overview.html) in the *AWS Key Management Service Developer Guide* .\\n\\nExamples:\\n\\n- `alias/MyAliasName`\\n- `arn:aws:kms:us-east-2:123456789012:alias/MyAliasName`\\n- `arn:aws:kms:us-east-2:123456789012:key/12345678-1234-1234-1234-123456789012`\\n- `12345678-1234-1234-1234-123456789012`","MultiRegionEnabled":"Specifies whether the event data store includes events from all Regions, or only from the Region in which the event data store is created.","Name":"The name of the event data store.","OrganizationEnabled":"Specifies whether an event data store collects events logged for an organization in AWS Organizations .","RetentionPeriod":"The retention period of the event data store, in days. You can set a retention period of up to 2557 days, the equivalent of seven years.","Tags":"A list of tags.","TerminationProtectionEnabled":"Specifies whether termination protection is enabled for the event data store. If termination protection is enabled, you cannot delete the event data store until termination protection is disabled."}},"AWS::CloudTrail::EventDataStore.AdvancedEventSelector":{"attributes":{},"description":"Advanced event selectors let you create fine-grained selectors for the following AWS CloudTrail event record fields. They help you control costs by logging only those events that are important to you. For more information about advanced event selectors, see [Logging data events](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/logging-data-events-with-cloudtrail.html) in the *AWS CloudTrail User Guide* .\\n\\n- `readOnly`\\n- `eventSource`\\n- `eventName`\\n- `eventCategory`\\n- `resources.type`\\n- `resources.ARN`\\n\\nYou cannot apply both event selectors and advanced event selectors to a trail.","properties":{"FieldSelectors":"Contains all selector statements in an advanced event selector.","Name":"An optional, descriptive name for an advanced event selector, such as \\"Log data events for only two S3 buckets\\"."}},"AWS::CloudTrail::EventDataStore.AdvancedFieldSelector":{"attributes":{},"description":"A single selector statement in an advanced event selector.","properties":{"EndsWith":"An operator that includes events that match the last few characters of the event record field specified as the value of `Field` .","Equals":"An operator that includes events that match the exact value of the event record field specified as the value of `Field` . This is the only valid operator that you can use with the `readOnly` , `eventCategory` , and `resources.type` fields.","Field":"A field in a CloudTrail event record on which to filter events to be logged. For event data stores for AWS Config configuration items, Audit Manager evidence, or non- AWS events, the field is used only for selecting events as filtering is not supported.\\n\\nFor CloudTrail event records, supported fields include `readOnly` , `eventCategory` , `eventSource` (for management events), `eventName` , `resources.type` , and `resources.ARN` .\\n\\nFor event data stores for AWS Config configuration items, Audit Manager evidence, or non- AWS events, the only supported field is `eventCategory` .\\n\\n- *`readOnly`* - Optional. Can be set to `Equals` a value of `true` or `false` . If you do not add this field, CloudTrail logs both `read` and `write` events. A value of `true` logs only `read` events. A value of `false` logs only `write` events.\\n- *`eventSource`* - For filtering management events only. This can be set only to `NotEquals` `kms.amazonaws.com` .\\n- *`eventName`* - Can use any operator. You can use it to filter in or filter out any data event logged to CloudTrail, such as `PutBucket` or `GetSnapshotBlock` . You can have multiple values for this field, separated by commas.\\n- *`eventCategory`* - This is required and must be set to `Equals` .\\n\\n- For CloudTrail event records, the value must be `Management` or `Data` .\\n- For AWS Config configuration items, the value must be `ConfigurationItem` .\\n- For Audit Manager evidence, the value must be `Evidence` .\\n- For non- AWS events, the value must be `ActivityAuditLog` .\\n- *`resources.type`* - This field is required for CloudTrail data events. `resources.type` can only use the `Equals` operator, and the value can be one of the following:\\n\\n- `AWS::DynamoDB::Table`\\n- `AWS::Lambda::Function`\\n- `AWS::S3::Object`\\n- `AWS::CloudTrail::Channel`\\n- `AWS::CodeWhisperer::Profile`\\n- `AWS::Cognito::IdentityPool`\\n- `AWS::DynamoDB::Stream`\\n- `AWS::EC2::Snapshot`\\n- `AWS::EMRWAL::Workspace`\\n- `AWS::FinSpace::Environment`\\n- `AWS::Glue::Table`\\n- `AWS::GuardDuty::Detector`\\n- `AWS::KendraRanking::ExecutionPlan`\\n- `AWS::ManagedBlockchain::Network`\\n- `AWS::ManagedBlockchain::Node`\\n- `AWS::SageMaker::ExperimentTrialComponent`\\n- `AWS::SageMaker::FeatureGroup`\\n- `AWS::S3::AccessPoint`\\n- `AWS::S3ObjectLambda::AccessPoint`\\n- `AWS::S3Outposts::Object`\\n- `AWS::SSMMessages::ControlChannel`\\n- `AWS::VerifiedPermissions::PolicyStore`\\n\\nYou can have only one `resources.type` field per selector. To log data events on more than one resource type, add another selector.\\n- *`resources.ARN`* - You can use any operator with `resources.ARN` , but if you use `Equals` or `NotEquals` , the value must exactly match the ARN of a valid resource of the type you\'ve specified in the template as the value of resources.type. For example, if resources.type equals `AWS::S3::Object` , the ARN must be in one of the following formats. To log all data events for all objects in a specific S3 bucket, use the `StartsWith` operator, and include only the bucket ARN as the matching value.\\n\\nThe trailing slash is intentional; do not exclude it. Replace the text between less than and greater than symbols (<>) with resource-specific information.\\n\\n- `arn::s3:::/`\\n- `arn::s3::://`\\n\\nWhen resources.type equals `AWS::DynamoDB::Table` , and the operator is set to `Equals` or `NotEquals` , the ARN must be in the following format:\\n\\n- `arn::dynamodb:::table/`\\n\\nWhen resources.type equals `AWS::Lambda::Function` , and the operator is set to `Equals` or `NotEquals` , the ARN must be in the following format:\\n\\n- `arn::lambda:::function:`\\n\\nWhen resources.type equals `AWS::CloudTrail::Channel` , and the operator is set to `Equals` or `NotEquals` , the ARN must be in the following format:\\n\\n- `arn::cloudtrail:::channel/`\\n\\nWhen resources.type equals `AWS::CodeWhisperer::Profile` , and the operator is set to `Equals` or `NotEquals` , the ARN must be in the following format:\\n\\n- `arn::codewhisperer:::profile/`\\n\\nWhen resources.type equals `AWS::Cognito::IdentityPool` , and the operator is set to `Equals` or `NotEquals` , the ARN must be in the following format:\\n\\n- `arn::cognito-identity:::identitypool/`\\n\\nWhen `resources.type` equals `AWS::DynamoDB::Stream` , and the operator is set to `Equals` or `NotEquals` , the ARN must be in the following format:\\n\\n- `arn::dynamodb:::table//stream/`\\n\\nWhen `resources.type` equals `AWS::EC2::Snapshot` , and the operator is set to `Equals` or `NotEquals` , the ARN must be in the following format:\\n\\n- `arn::ec2:::snapshot/`\\n\\nWhen `resources.type` equals `AWS::EMRWAL::Workspace` , and the operator is set to `Equals` or `NotEquals` , the ARN must be in the following format:\\n\\n- `arn::emrwal:::workspace/`\\n\\nWhen `resources.type` equals `AWS::FinSpace::Environment` , and the operator is set to `Equals` or `NotEquals` , the ARN must be in the following format:\\n\\n- `arn::finspace:::environment/`\\n\\nWhen `resources.type` equals `AWS::Glue::Table` , and the operator is set to `Equals` or `NotEquals` , the ARN must be in the following format:\\n\\n- `arn::glue:::table//`\\n\\nWhen `resources.type` equals `AWS::GuardDuty::Detector` , and the operator is set to `Equals` or `NotEquals` , the ARN must be in the following format:\\n\\n- `arn::guardduty:::detector/`\\n\\nWhen `resources.type` equals `AWS::KendraRanking::ExecutionPlan` , and the operator is set to `Equals` or `NotEquals` , the ARN must be in the following format:\\n\\n- `arn::kendra-ranking:::rescore-execution-plan/`\\n\\nWhen `resources.type` equals `AWS::ManagedBlockchain::Network` , and the operator is set to `Equals` or `NotEquals` , the ARN must be in the following format:\\n\\n- `arn::managedblockchain:::networks/`\\n\\nWhen `resources.type` equals `AWS::ManagedBlockchain::Node` , and the operator is set to `Equals` or `NotEquals` , the ARN must be in the following format:\\n\\n- `arn::managedblockchain:::nodes/`\\n\\nWhen `resources.type` equals `AWS::SageMaker::ExperimentTrialComponent` , and the operator is set to `Equals` or `NotEquals` , the ARN must be in the following format:\\n\\n- `arn::sagemaker:::experiment-trial-component/`\\n\\nWhen `resources.type` equals `AWS::SageMaker::FeatureGroup` , and the operator is set to `Equals` or `NotEquals` , the ARN must be in the following format:\\n\\n- `arn::sagemaker:::feature-group/`\\n\\nWhen `resources.type` equals `AWS::S3::AccessPoint` , and the operator is set to `Equals` or `NotEquals` , the ARN must be in one of the following formats. To log events on all objects in an S3 access point, we recommend that you use only the access point ARN, don’t include the object path, and use the `StartsWith` or `NotStartsWith` operators.\\n\\n- `arn::s3:::accesspoint/`\\n- `arn::s3:::accesspoint//object/`\\n\\nWhen `resources.type` equals `AWS::S3ObjectLambda::AccessPoint` , and the operator is set to `Equals` or `NotEquals` , the ARN must be in the following format:\\n\\n- `arn::s3-object-lambda:::accesspoint/`\\n\\nWhen `resources.type` equals `AWS::S3Outposts::Object` , and the operator is set to `Equals` or `NotEquals` , the ARN must be in the following format:\\n\\n- `arn::s3-outposts:::`\\n\\nWhen `resources.type` equals `AWS::SSMMessages::ControlChannel` , and the operator is set to `Equals` or `NotEquals` , the ARN must be in the following format:\\n\\n- `arn::ssmmessages:::control-channel/`\\n\\nWhen resources.type equals `AWS::VerifiedPermissions::PolicyStore` , and the operator is set to `Equals` or `NotEquals` , the ARN must be in the following format:\\n\\n- `arn::verifiedpermissions:::policy-store/`","NotEndsWith":"An operator that excludes events that match the last few characters of the event record field specified as the value of `Field` .","NotEquals":"An operator that excludes events that match the exact value of the event record field specified as the value of `Field` .","NotStartsWith":"An operator that excludes events that match the first few characters of the event record field specified as the value of `Field` .","StartsWith":"An operator that includes events that match the first few characters of the event record field specified as the value of `Field` ."}},"AWS::CloudTrail::ResourcePolicy":{"attributes":{"Ref":"When the logical ID of this resource is provided to the Ref intrinsic function, `Ref` returns the resource. The resource is a combination of the resource-based policy document and the channel ARN."},"description":"Attaches a resource-based permission policy to a CloudTrail channel that is used for an integration with an event source outside of AWS . For more information about resource-based policies, see [CloudTrail resource-based policy examples](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/security_iam_resource-based-policy-examples.html) in the *CloudTrail User Guide* .","properties":{"ResourceArn":"The Amazon Resource Name (ARN) of the CloudTrail channel attached to the resource-based policy. The following is the format of a resource ARN: `arn:aws:cloudtrail:us-east-2:123456789012:channel/MyChannel` .","ResourcePolicy":"A JSON-formatted string for an AWS resource-based policy.\\n\\nThe following are requirements for the resource policy:\\n\\n- Contains only one action: cloudtrail-data:PutAuditEvents\\n- Contains at least one statement. The policy can have a maximum of 20 statements.\\n- Each statement contains at least one principal. A statement can have a maximum of 50 principals."}},"AWS::CloudTrail::Trail":{"attributes":{"Arn":"`Ref` returns the ARN of the CloudTrail trail, such as `arn:aws:cloudtrail:us-east-2:123456789012:trail/myCloudTrail` .","Ref":"When the logical ID of this resource is provided to the Ref intrinsic function, `Ref` returns the resource name.","SnsTopicArn":"`Ref` returns the ARN of the Amazon SNS topic that\'s associated with the CloudTrail trail, such as `arn:aws:sns:us-east-2:123456789012:mySNSTopic` ."},"description":"Creates a trail that specifies the settings for delivery of log data to an Amazon S3 bucket.","properties":{"AdvancedEventSelectors":"Specifies the settings for advanced event selectors. You can add advanced event selectors, and conditions for your advanced event selectors, up to a maximum of 500 values for all conditions and selectors on a trail. You can use either `AdvancedEventSelectors` or `EventSelectors` , but not both. If you apply `AdvancedEventSelectors` to a trail, any existing `EventSelectors` are overwritten. For more information about advanced event selectors, see [Logging data events](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/logging-data-events-with-cloudtrail.html) in the *AWS CloudTrail User Guide* .","CloudWatchLogsLogGroupArn":"Specifies a log group name using an Amazon Resource Name (ARN), a unique identifier that represents the log group to which CloudTrail logs are delivered. You must use a log group that exists in your account.\\n\\nNot required unless you specify `CloudWatchLogsRoleArn` .","CloudWatchLogsRoleArn":"Specifies the role for the CloudWatch Logs endpoint to assume to write to a user\'s log group. You must use a role that exists in your account.","EnableLogFileValidation":"Specifies whether log file validation is enabled. The default is false.\\n\\n> When you disable log file integrity validation, the chain of digest files is broken after one hour. CloudTrail does not create digest files for log files that were delivered during a period in which log file integrity validation was disabled. For example, if you enable log file integrity validation at noon on January 1, disable it at noon on January 2, and re-enable it at noon on January 10, digest files will not be created for the log files delivered from noon on January 2 to noon on January 10. The same applies whenever you stop CloudTrail logging or delete a trail.","EventSelectors":"Use event selectors to further specify the management and data event settings for your trail. By default, trails created without specific event selectors will be configured to log all read and write management events, and no data events. When an event occurs in your account, CloudTrail evaluates the event selector for all trails. For each trail, if the event matches any event selector, the trail processes and logs the event. If the event doesn\'t match any event selector, the trail doesn\'t log the event.\\n\\nYou can configure up to five event selectors for a trail.\\n\\nFor more information about how to configure event selectors, see [Examples](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudtrail-trail.html#aws-resource-cloudtrail-trail--examples) and [Configuring event selectors](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-additional-cli-commands.html#configuring-event-selector-examples) in the *AWS CloudTrail User Guide* .","IncludeGlobalServiceEvents":"Specifies whether the trail is publishing events from global services such as IAM to the log files.","InsightSelectors":"A JSON string that contains the insight types you want to log on a trail. `ApiCallRateInsight` and `ApiErrorRateInsight` are valid Insight types.\\n\\nThe `ApiCallRateInsight` Insights type analyzes write-only management API calls that are aggregated per minute against a baseline API call volume.\\n\\nThe `ApiErrorRateInsight` Insights type analyzes management API calls that result in error codes. The error is shown if the API call is unsuccessful.","IsLogging":"Whether the CloudTrail trail is currently logging AWS API calls.","IsMultiRegionTrail":"Specifies whether the trail applies only to the current Region or to all Regions. The default is false. If the trail exists only in the current Region and this value is set to true, shadow trails (replications of the trail) will be created in the other Regions. If the trail exists in all Regions and this value is set to false, the trail will remain in the Region where it was created, and its shadow trails in other Regions will be deleted. As a best practice, consider using trails that log events in all Regions.","IsOrganizationTrail":"Specifies whether the trail is applied to all accounts in an organization in AWS Organizations , or only for the current AWS account . The default is false, and cannot be true unless the call is made on behalf of an AWS account that is the management account or delegated administrator account for an organization in AWS Organizations . If the trail is not an organization trail and this is set to `true` , the trail will be created in all AWS accounts that belong to the organization. If the trail is an organization trail and this is set to `false` , the trail will remain in the current AWS account but be deleted from all member accounts in the organization.","KMSKeyId":"Specifies the AWS KMS key ID to use to encrypt the logs delivered by CloudTrail. The value can be an alias name prefixed by \\"alias/\\", a fully specified ARN to an alias, a fully specified ARN to a key, or a globally unique identifier.\\n\\nCloudTrail also supports AWS KMS multi-Region keys. For more information about multi-Region keys, see [Using multi-Region keys](https://docs.aws.amazon.com/kms/latest/developerguide/multi-region-keys-overview.html) in the *AWS Key Management Service Developer Guide* .\\n\\nExamples:\\n\\n- alias/MyAliasName\\n- arn:aws:kms:us-east-2:123456789012:alias/MyAliasName\\n- arn:aws:kms:us-east-2:123456789012:key/12345678-1234-1234-1234-123456789012\\n- 12345678-1234-1234-1234-123456789012","S3BucketName":"Specifies the name of the Amazon S3 bucket designated for publishing log files. See [Amazon S3 Bucket Naming Requirements](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/create_trail_naming_policy.html) .","S3KeyPrefix":"Specifies the Amazon S3 key prefix that comes after the name of the bucket you have designated for log file delivery. For more information, see [Finding Your CloudTrail Log Files](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-find-log-files.html) . The maximum length is 200 characters.","SnsTopicName":"Specifies the name of the Amazon SNS topic defined for notification of log file delivery. The maximum length is 256 characters.","Tags":"A custom set of tags (key-value pairs) for this trail.","TrailName":"Specifies the name of the trail. The name must meet the following requirements:\\n\\n- Contain only ASCII letters (a-z, A-Z), numbers (0-9), periods (.), underscores (_), or dashes (-)\\n- Start with a letter or number, and end with a letter or number\\n- Be between 3 and 128 characters\\n- Have no adjacent periods, underscores or dashes. Names like `my-_namespace` and `my--namespace` are not valid.\\n- Not be in IP address format (for example, 192.168.5.4)"}},"AWS::CloudTrail::Trail.AdvancedEventSelector":{"attributes":{},"description":"Advanced event selectors let you create fine-grained selectors for the following AWS CloudTrail event record fields. They help you control costs by logging only those events that are important to you. For more information about advanced event selectors, see [Logging data events](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/logging-data-events-with-cloudtrail.html) in the *AWS CloudTrail User Guide* .\\n\\n- `readOnly`\\n- `eventSource`\\n- `eventName`\\n- `eventCategory`\\n- `resources.type`\\n- `resources.ARN`\\n\\nYou cannot apply both event selectors and advanced event selectors to a trail.","properties":{"FieldSelectors":"Contains all selector statements in an advanced event selector.","Name":"An optional, descriptive name for an advanced event selector, such as \\"Log data events for only two S3 buckets\\"."}},"AWS::CloudTrail::Trail.AdvancedFieldSelector":{"attributes":{},"description":"A single selector statement in an advanced event selector.","properties":{"EndsWith":"An operator that includes events that match the last few characters of the event record field specified as the value of `Field` .","Equals":"An operator that includes events that match the exact value of the event record field specified as the value of `Field` . This is the only valid operator that you can use with the `readOnly` , `eventCategory` , and `resources.type` fields.","Field":"A field in a CloudTrail event record on which to filter events to be logged. For event data stores for AWS Config configuration items, Audit Manager evidence, or non- AWS events, the field is used only for selecting events as filtering is not supported.\\n\\nFor CloudTrail event records, supported fields include `readOnly` , `eventCategory` , `eventSource` (for management events), `eventName` , `resources.type` , and `resources.ARN` .\\n\\nFor event data stores for AWS Config configuration items, Audit Manager evidence, or non- AWS events, the only supported field is `eventCategory` .\\n\\n- *`readOnly`* - Optional. Can be set to `Equals` a value of `true` or `false` . If you do not add this field, CloudTrail logs both `read` and `write` events. A value of `true` logs only `read` events. A value of `false` logs only `write` events.\\n- *`eventSource`* - For filtering management events only. This can be set only to `NotEquals` `kms.amazonaws.com` .\\n- *`eventName`* - Can use any operator. You can use it to filter in or filter out any data event logged to CloudTrail, such as `PutBucket` or `GetSnapshotBlock` . You can have multiple values for this field, separated by commas.\\n- *`eventCategory`* - This is required and must be set to `Equals` .\\n\\n- For CloudTrail event records, the value must be `Management` or `Data` .\\n- For AWS Config configuration items, the value must be `ConfigurationItem` .\\n- For Audit Manager evidence, the value must be `Evidence` .\\n- For non- AWS events, the value must be `ActivityAuditLog` .\\n- *`resources.type`* - This field is required for CloudTrail data events. `resources.type` can only use the `Equals` operator, and the value can be one of the following:\\n\\n- `AWS::DynamoDB::Table`\\n- `AWS::Lambda::Function`\\n- `AWS::S3::Object`\\n- `AWS::CloudTrail::Channel`\\n- `AWS::CodeWhisperer::Profile`\\n- `AWS::Cognito::IdentityPool`\\n- `AWS::DynamoDB::Stream`\\n- `AWS::EC2::Snapshot`\\n- `AWS::EMRWAL::Workspace`\\n- `AWS::FinSpace::Environment`\\n- `AWS::Glue::Table`\\n- `AWS::GuardDuty::Detector`\\n- `AWS::KendraRanking::ExecutionPlan`\\n- `AWS::ManagedBlockchain::Network`\\n- `AWS::ManagedBlockchain::Node`\\n- `AWS::SageMaker::ExperimentTrialComponent`\\n- `AWS::SageMaker::FeatureGroup`\\n- `AWS::S3::AccessPoint`\\n- `AWS::S3ObjectLambda::AccessPoint`\\n- `AWS::S3Outposts::Object`\\n- `AWS::SSMMessages::ControlChannel`\\n- `AWS::VerifiedPermissions::PolicyStore`\\n\\nYou can have only one `resources.type` field per selector. To log data events on more than one resource type, add another selector.\\n- *`resources.ARN`* - You can use any operator with `resources.ARN` , but if you use `Equals` or `NotEquals` , the value must exactly match the ARN of a valid resource of the type you\'ve specified in the template as the value of resources.type. For example, if resources.type equals `AWS::S3::Object` , the ARN must be in one of the following formats. To log all data events for all objects in a specific S3 bucket, use the `StartsWith` operator, and include only the bucket ARN as the matching value.\\n\\nThe trailing slash is intentional; do not exclude it. Replace the text between less than and greater than symbols (<>) with resource-specific information.\\n\\n- `arn::s3:::/`\\n- `arn::s3::://`\\n\\nWhen resources.type equals `AWS::DynamoDB::Table` , and the operator is set to `Equals` or `NotEquals` , the ARN must be in the following format:\\n\\n- `arn::dynamodb:::table/`\\n\\nWhen resources.type equals `AWS::Lambda::Function` , and the operator is set to `Equals` or `NotEquals` , the ARN must be in the following format:\\n\\n- `arn::lambda:::function:`\\n\\nWhen resources.type equals `AWS::CloudTrail::Channel` , and the operator is set to `Equals` or `NotEquals` , the ARN must be in the following format:\\n\\n- `arn::cloudtrail:::channel/`\\n\\nWhen resources.type equals `AWS::CodeWhisperer::Profile` , and the operator is set to `Equals` or `NotEquals` , the ARN must be in the following format:\\n\\n- `arn::codewhisperer:::profile/`\\n\\nWhen resources.type equals `AWS::Cognito::IdentityPool` , and the operator is set to `Equals` or `NotEquals` , the ARN must be in the following format:\\n\\n- `arn::cognito-identity:::identitypool/`\\n\\nWhen `resources.type` equals `AWS::DynamoDB::Stream` , and the operator is set to `Equals` or `NotEquals` , the ARN must be in the following format:\\n\\n- `arn::dynamodb:::table//stream/`\\n\\nWhen `resources.type` equals `AWS::EC2::Snapshot` , and the operator is set to `Equals` or `NotEquals` , the ARN must be in the following format:\\n\\n- `arn::ec2:::snapshot/`\\n\\nWhen `resources.type` equals `AWS::EMRWAL::Workspace` , and the operator is set to `Equals` or `NotEquals` , the ARN must be in the following format:\\n\\n- `arn::emrwal:::workspace/`\\n\\nWhen `resources.type` equals `AWS::FinSpace::Environment` , and the operator is set to `Equals` or `NotEquals` , the ARN must be in the following format:\\n\\n- `arn::finspace:::environment/`\\n\\nWhen `resources.type` equals `AWS::Glue::Table` , and the operator is set to `Equals` or `NotEquals` , the ARN must be in the following format:\\n\\n- `arn::glue:::table//`\\n\\nWhen `resources.type` equals `AWS::GuardDuty::Detector` , and the operator is set to `Equals` or `NotEquals` , the ARN must be in the following format:\\n\\n- `arn::guardduty:::detector/