UNPKG

antfarm

Version:

File automation framework for ants.

279 lines (277 loc) 25.5 kB
"use strict"; var step_1 = require("./step"); var shortid = require("shortid"), _ = require("lodash"), clone = require("clone"); /** * A webhook interface instance, tied to a particular session. * Within interface steps, you can use these methods directly to alter the schema being returned to the user interface. * #### Example * ```js * var manager = webhook.getInterfaceManager(); * manager.addStep("Check job number", function(webhookJob, webhookInterface, step){ * if(webhookJob.getQueryStringValue("job_number")){ * webhookInterface.addField({ * id: "something_else", * _name: "Some other field", * type: "text", * description: "Thanks for adding a job number!" * }); * step.complete = true; // Mark step as complete * } * }); * ``` */ var WebhookInterface = (function () { /** * Constructor * @param {Environment} e * @param {WebhookNest} nest */ function WebhookInterface(e, nest) { this.e = e; this._nest = nest; this._sessionId = shortid.generate(); this._steps = []; this._fields = []; this.initMetadata(); } WebhookInterface.prototype.initMetadata = function () { this.metadata = { interfaceProperties: [] }; }; Object.defineProperty(WebhookInterface.prototype, "metadata", { get: function () { return this._metadata; }, /** * Sets a cloned instance of metadata. * @param metadata */ set: function (metadata) { var clonedMetadata = clone(metadata); // let clonedMetadata = _.clone(metadata) as InterfaceMetadata; if (_.has(clonedMetadata, "interfaceProperties") && clonedMetadata.interfaceProperties.constructor === Array) { } else { clonedMetadata.interfaceProperties = []; } this._metadata = clonedMetadata; }, enumerable: true, configurable: true }); Object.defineProperty(WebhookInterface.prototype, "description", { set: function (description) { this.metadata.description = description; }, enumerable: true, configurable: true }); Object.defineProperty(WebhookInterface.prototype, "tooltip", { set: function (tooltip) { this.metadata.tooltip = tooltip; }, enumerable: true, configurable: true }); WebhookInterface.prototype.addInterfaceProperty = function (property) { this.metadata.interfaceProperties.push(clone(property)); }; Object.defineProperty(WebhookInterface.prototype, "interfaceProperties", { set: function (properties) { this.metadata.interfaceProperties = clone(properties); }, enumerable: true, configurable: true }); Object.defineProperty(WebhookInterface.prototype, "sessionId", { /** * Return the session id. Used to match to interface instanced within the manager. * @returns {string} */ get: function () { return this._sessionId; }, enumerable: true, configurable: true }); Object.defineProperty(WebhookInterface.prototype, "nest", { /** * Get the nest * @returns {WebhookNest} */ get: function () { return this._nest; }, enumerable: true, configurable: true }); /** * Adds an interface field to the interface. * @param {FieldOptions} field */ WebhookInterface.prototype.addField = function (field) { var wi = this; var existingField = _.find(wi.fields, function (f) { return f.id === field.id; }); if (existingField) { wi.e.log(3, "Field id \"" + field.id + "\" already exists. It cannot be added again.", wi); return false; } this.fields.push(field); }; /** * Get an existing field from the interface to modify its properties. * @param fieldId * @returns {FieldOptions} * #### Example * ```js * im.addStep("Check job number", function(webhookJob, webhookInterface, step, done) { * if(webhookJob.getParameter("job_number").length == 6) { * // Make job number read only * var jobNumberField = webhookInterface.getField("job_number"); * jobNumberField.readonly = true; * // Complete step * webhookInterface.completeStep(step); * } else { * step.failure = "Job number was not 6 characters."; * } * done(); * }); * ``` */ WebhookInterface.prototype.getField = function (fieldId) { var wi = this; return _.find(wi.fields, function (f) { return f.id === fieldId; }); }; Object.defineProperty(WebhookInterface.prototype, "fields", { /** * Get an array of all of the fields. * @returns {FieldOptions[]} */ get: function () { return this._fields; }, /** * Overwrites fields with a clone. * @param fields */ set: function (fields) { this._fields = clone(fields); }, enumerable: true, configurable: true }); /** * Returns the interface for transport. * @returns {{fields: Array}} */ WebhookInterface.prototype.getTransportInterface = function () { var wi = this; var jobs = wi.getJobs(); var jobsArray = []; jobs.forEach(function (job) { jobsArray.push({ id: job.id, name: job.name, path: job.path }); }); return { sessionId: wi.sessionId, fields: wi.fields, heldJobs: jobsArray, steps: wi.getStepsTransport(), metadata: wi.metadata }; }; /** * Returns checked jobs. * @returns {(FileJob|FolderJob)[]} */ WebhookInterface.prototype.getJobs = function () { var wi = this; if (wi.checkpointNest) { return wi.checkpointNest.getHeldJobs(); } else { return []; } }; Object.defineProperty(WebhookInterface.prototype, "checkpointNest", { get: function () { return this._checkpointNest; }, /** * Sets the checkpoint nest. * @param nest */ set: function (nest) { this._checkpointNest = nest; }, enumerable: true, configurable: true }); /** * Adds a user interface step * @param stepName * @param callback */ WebhookInterface.prototype.addStep = function (stepName, callback) { var step = new step_1.Step(); step.name = stepName; step.callback = callback; step.complete = false; this.steps.push(step); }; /** * Mark a step as complete and remove it from the interface. * @param step {Step} */ WebhookInterface.prototype.completeStep = function (step) { var wi = this; var steps = wi.steps; var matchedIndex = _.findIndex(steps, function (s) { return s.name === step.name; }); if (steps[matchedIndex]) { wi.steps.splice(matchedIndex, 1); return true; } else { return false; } }; /** * Alias of completeStep. * @param step {Step} */ WebhookInterface.prototype.removeStep = function (step) { this.completeStep(step); }; Object.defineProperty(WebhookInterface.prototype, "steps", { /** * Get an array of instance steps. * @returns {Step[]} */ get: function () { return this._steps; }, /** * Overwrite the instant steps. * @param steps */ set: function (steps) { this._steps = clone(steps); }, enumerable: true, configurable: true }); WebhookInterface.prototype.getStepsTransport = function () { var steps = []; this.steps.forEach(function (step) { steps.push({ complete: step.complete, name: step.name }); }); return steps; }; return WebhookInterface; }()); exports.WebhookInterface = WebhookInterface; //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi91aS93ZWJob29rSW50ZXJmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFJQSxxQkFBbUIsUUFBUSxDQUFDLENBQUE7QUFNNUIsSUFBUSxPQUFPLEdBQU8sT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUNoQyxDQUFDLEdBQWEsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUMvQixLQUFLLEdBQVMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBRXZDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrQkc7QUFDSDtJQVVJOzs7O09BSUc7SUFDSCwwQkFBWSxDQUFjLEVBQUUsSUFBaUI7UUFDekMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDWCxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztRQUNsQixJQUFJLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNyQyxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUNqQixJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUNsQixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVTLHVDQUFZLEdBQXRCO1FBQ0ksSUFBSSxDQUFDLFFBQVEsR0FBRztZQUNaLG1CQUFtQixFQUFFLEVBQUU7U0FDTCxDQUFDO0lBQzNCLENBQUM7SUFFRCxzQkFBVyxzQ0FBUTthQUFuQjtZQUNJLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBQzFCLENBQUM7UUFFRDs7O1dBR0c7YUFDSCxVQUFvQixRQUEyQjtZQUMzQyxJQUFJLGNBQWMsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDckMsK0RBQStEO1lBQy9ELEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsY0FBYyxFQUFFLHFCQUFxQixDQUFDLElBQUksY0FBYyxDQUFDLG1CQUFtQixDQUFDLFdBQVcsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQy9H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LElBQUksQ0FBQyxFQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFDLENBQUMsQ0FBQztRQUMzRCxDQUFDLENBQUMsQ0FBQztRQUNILE1BQU0sQ0FBQyxLQUFLLENBQUM7SUFDakIsQ0FBQztJQVNMLHVCQUFDO0FBQUQsQ0F6UEEsQUF5UEMsSUFBQTtBQXpQWSx3QkFBZ0IsbUJBeVA1QixDQUFBIiwiZmlsZSI6ImxpYi91aS93ZWJob29rSW50ZXJmYWNlLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtFbnZpcm9ubWVudH0gZnJvbSBcIi4uL2Vudmlyb25tZW50L2Vudmlyb25tZW50XCI7XG5pbXBvcnQge1dlYmhvb2tOZXN0fSBmcm9tIFwiLi4vbmVzdC93ZWJob29rTmVzdFwiO1xuaW1wb3J0IHtGb2xkZXJOZXN0fSBmcm9tIFwiLi4vbmVzdC9mb2xkZXJOZXN0XCI7XG5pbXBvcnQge0ZpZWxkT3B0aW9uc30gZnJvbSBcIi4vZmllbGRcIjtcbmltcG9ydCB7U3RlcH0gZnJvbSBcIi4vc3RlcFwiO1xuaW1wb3J0IHtJbnRlcmZhY2VNZXRhZGF0YX0gZnJvbSBcIi4vaW50ZXJmYWNlTWV0YWRhdGFcIjtcbmltcG9ydCB7SW50ZXJmYWNlUHJvcGVydHl9IGZyb20gXCIuL0ludGVyZmFjZVByb3BlcnR5XCI7XG5pbXBvcnQge0ZpbGVKb2J9IGZyb20gXCIuLi9qb2IvZmlsZUpvYlwiO1xuaW1wb3J0IHtGb2xkZXJKb2J9IGZyb20gXCIuLi9qb2IvZm9sZGVySm9iXCI7XG5cbmNvbnN0ICAgc2hvcnRpZCAgICAgPSByZXF1aXJlKFwic2hvcnRpZFwiKSxcbiAgICAgICAgXyAgICAgICAgICAgPSByZXF1aXJlKFwibG9kYXNoXCIpLFxuICAgICAgICBjbG9uZSAgICAgICA9IHJlcXVpcmUoXCJjbG9uZVwiKTtcblxuLyoqXG4gKiBBIHdlYmhvb2sgaW50ZXJmYWNlIGluc3RhbmNlLCB0aWVkIHRvIGEgcGFydGljdWxhciBzZXNzaW9uLlxuICogV2l0aGluIGludGVyZmFjZSBzdGVwcywgeW91IGNhbiB1c2UgdGhlc2UgbWV0aG9kcyBkaXJlY3RseSB0byBhbHRlciB0aGUgc2NoZW1hIGJlaW5nIHJldHVybmVkIHRvIHRoZSB1c2VyIGludGVyZmFjZS5cbiAqICMjIyMgRXhhbXBsZVxuICogYGBganNcbiAqIHZhciBtYW5hZ2VyID0gd2ViaG9vay5nZXRJbnRlcmZhY2VNYW5hZ2VyKCk7XG4gKiBtYW5hZ2VyLmFkZFN0ZXAoXCJDaGVjayBqb2IgbnVtYmVyXCIsIGZ1bmN0aW9uKHdlYmhvb2tKb2IsIHdlYmhvb2tJbnRlcmZhY2UsIHN0ZXApe1xuICogICAgICBpZih3ZWJob29rSm9iLmdldFF1ZXJ5U3RyaW5nVmFsdWUoXCJqb2JfbnVtYmVyXCIpKXtcbiAqICAgICAgICAgIHdlYmhvb2tJbnRlcmZhY2UuYWRkRmllbGQoe1xuICogICAgICAgICAgICAgIGlkOiBcInNvbWV0aGluZ19lbHNlXCIsXG4gKiAgICAgICAgICAgICAgX25hbWU6IFwiU29tZSBvdGhlciBmaWVsZFwiLFxuICogICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICogICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIlRoYW5rcyBmb3IgYWRkaW5nIGEgam9iIG51bWJlciFcIlxuICogICAgICAgICAgfSk7XG4gKiAgICAgICAgICBzdGVwLmNvbXBsZXRlID0gdHJ1ZTsgLy8gTWFyayBzdGVwIGFzIGNvbXBsZXRlXG4gKiAgICAgIH1cbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBjbGFzcyBXZWJob29rSW50ZXJmYWNlIHtcblxuICAgIHByb3RlY3RlZCBfZmllbGRzOiBGaWVsZE9wdGlvbnNbXTtcbiAgICBwcm90ZWN0ZWQgZTogRW52aXJvbm1lbnQ7XG4gICAgcHJvdGVjdGVkIF9uZXN0OiBXZWJob29rTmVzdDtcbiAgICBwcm90ZWN0ZWQgX2NoZWNrcG9pbnROZXN0OiBGb2xkZXJOZXN0O1xuICAgIHByb3RlY3RlZCBfc3RlcHM6IFN0ZXBbXTtcbiAgICBwcm90ZWN0ZWQgX3Nlc3Npb25JZDogc3RyaW5nO1xuICAgIHByb3RlY3RlZCBfbWV0YWRhdGE6IEludGVyZmFjZU1ldGFkYXRhO1xuXG4gICAgLyoqXG4gICAgICogQ29uc3RydWN0b3JcbiAgICAgKiBAcGFyYW0ge0Vudmlyb25tZW50fSBlXG4gICAgICogQHBhcmFtIHtXZWJob29rTmVzdH0gbmVzdFxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKGU6IEVudmlyb25tZW50LCBuZXN0OiBXZWJob29rTmVzdCkge1xuICAgICAgICB0aGlzLmUgPSBlO1xuICAgICAgICB0aGlzLl9uZXN0ID0gbmVzdDtcbiAgICAgICAgdGhpcy5fc2Vzc2lvbklkID0gc2hvcnRpZC5nZW5lcmF0ZSgpO1xuICAgICAgICB0aGlzLl9zdGVwcyA9IFtdO1xuICAgICAgICB0aGlzLl9maWVsZHMgPSBbXTtcbiAgICAgICAgdGhpcy5pbml0TWV0YWRhdGEoKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgaW5pdE1ldGFkYXRhKCkge1xuICAgICAgICB0aGlzLm1ldGFkYXRhID0ge1xuICAgICAgICAgICAgaW50ZXJmYWNlUHJvcGVydGllczogW11cbiAgICAgICAgfSBhcyBJbnRlcmZhY2VNZXRhZGF0YTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG1ldGFkYXRhKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWV0YWRhdGE7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyBhIGNsb25lZCBpbnN0YW5jZSBvZiBtZXRhZGF0YS5cbiAgICAgKiBAcGFyYW0gbWV0YWRhdGFcbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0IG1ldGFkYXRhKG1ldGFkYXRhOiBJbnRlcmZhY2VNZXRhZGF0YSkge1xuICAgICAgICBsZXQgY2xvbmVkTWV0YWRhdGEgPSBjbG9uZShtZXRhZGF0YSk7XG4gICAgICAgIC8vIGxldCBjbG9uZWRNZXRhZGF0YSA9IF8uY2xvbmUobWV0YWRhdGEpIGFzIEludGVyZmFjZU1ldGFkYXRhO1xuICAgICAgICBpZiAoXy5oYXMoY2xvbmVkTWV0YWRhdGEsIFwiaW50ZXJmYWNlUHJvcGVydGllc1wiKSAmJiBjbG9uZWRNZXRhZGF0YS5pbnRlcmZhY2VQcm9wZXJ0aWVzLmNvbnN0cnVjdG9yID09PSBBcnJheSkge1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2xvbmVkTWV0YWRhdGEuaW50ZXJmYWNlUHJvcGVydGllcyA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX21ldGFkYXRhID0gY2xvbmVkTWV0YWRhdGE7XG4gICAgfVxuXG4gICAgcHVibGljIHNldCBkZXNjcmlwdGlvbihkZXNjcmlwdGlvbjogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMubWV0YWRhdGEuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0IHRvb2x0aXAodG9vbHRpcDogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMubWV0YWRhdGEudG9vbHRpcCA9IHRvb2x0aXA7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZEludGVyZmFjZVByb3BlcnR5KHByb3BlcnR5OiBJbnRlcmZhY2VQcm9wZXJ0eSkge1xuICAgICAgICB0aGlzLm1ldGFkYXRhLmludGVyZmFjZVByb3BlcnRpZXMucHVzaChjbG9uZShwcm9wZXJ0eSkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgaW50ZXJmYWNlUHJvcGVydGllcyhwcm9wZXJ0aWVzOiBJbnRlcmZhY2VQcm9wZXJ0eVtdKSB7XG4gICAgICAgIHRoaXMubWV0YWRhdGEuaW50ZXJmYWNlUHJvcGVydGllcyA9IGNsb25lKHByb3BlcnRpZXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybiB0aGUgc2Vzc2lvbiBpZC4gVXNlZCB0byBtYXRjaCB0byBpbnRlcmZhY2UgaW5zdGFuY2VkIHdpdGhpbiB0aGUgbWFuYWdlci5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgc2Vzc2lvbklkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2Vzc2lvbklkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgbmVzdFxuICAgICAqIEByZXR1cm5zIHtXZWJob29rTmVzdH1cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IG5lc3QoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9uZXN0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgYW4gaW50ZXJmYWNlIGZpZWxkIHRvIHRoZSBpbnRlcmZhY2UuXG4gICAgICogQHBhcmFtIHtGaWVsZE9wdGlvbnN9IGZpZWxkXG4gICAgICovXG4gICAgcHVibGljIGFkZEZpZWxkKGZpZWxkOiBGaWVsZE9wdGlvbnMpIHtcbiAgICAgICAgbGV0IHdpID0gdGhpcztcblxuICAgICAgICBsZXQgZXhpc3RpbmdGaWVsZCA9IF8uZmluZCh3aS5maWVsZHMsIGZ1bmN0aW9uKGYpIHsgcmV0dXJuIGYuaWQgPT09IGZpZWxkLmlkOyB9KTtcblxuICAgICAgICBpZiAoZXhpc3RpbmdGaWVsZCkge1xuICAgICAgICAgICAgd2kuZS5sb2coMywgYEZpZWxkIGlkIFwiJHtmaWVsZC5pZH1cIiBhbHJlYWR5IGV4aXN0cy4gSXQgY2Fubm90IGJlIGFkZGVkIGFnYWluLmAsIHdpKTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZmllbGRzLnB1c2goZmllbGQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCBhbiBleGlzdGluZyBmaWVsZCBmcm9tIHRoZSBpbnRlcmZhY2UgdG8gbW9kaWZ5IGl0cyBwcm9wZXJ0aWVzLlxuICAgICAqIEBwYXJhbSBmaWVsZElkXG4gICAgICogQHJldHVybnMge0ZpZWxkT3B0aW9uc31cbiAgICAgKiAjIyMjIEV4YW1wbGVcbiAgICAgKiBgYGBqc1xuICAgICAqIGltLmFkZFN0ZXAoXCJDaGVjayBqb2IgbnVtYmVyXCIsIGZ1bmN0aW9uKHdlYmhvb2tKb2IsIHdlYmhvb2tJbnRlcmZhY2UsIHN0ZXAsIGRvbmUpIHtcbiAgICAgKiAgICAgIGlmKHdlYmhvb2tKb2IuZ2V0UGFyYW1ldGVyKFwiam9iX251bWJlclwiKS5sZW5ndGggPT0gNikge1xuICAgICAqICAgICAgICAgIC8vIE1ha2Ugam9iIG51bWJlciByZWFkIG9ubHlcbiAgICAgKiAgICAgICAgICB2YXIgam9iTnVtYmVyRmllbGQgPSB3ZWJob29rSW50ZXJmYWNlLmdldEZpZWxkKFwiam9iX251bWJlclwiKTtcbiAgICAgKiAgICAgICAgICBqb2JOdW1iZXJGaWVsZC5yZWFkb25seSA9IHRydWU7XG4gICAgICogICAgICAgICAgLy8gQ29tcGxldGUgc3RlcFxuICAgICAqICAgICAgICAgIHdlYmhvb2tJbnRlcmZhY2UuY29tcGxldGVTdGVwKHN0ZXApO1xuICAgICAqICAgICAgfSBlbHNlIHtcbiAgICAgKiAgICAgICAgICBzdGVwLmZhaWx1cmUgPSBcIkpvYiBudW1iZXIgd2FzIG5vdCA2IGNoYXJhY3RlcnMuXCI7XG4gICAgICogICAgICB9XG4gICAgICogICAgICBkb25lKCk7XG4gICAgICogfSk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGdldEZpZWxkKGZpZWxkSWQ6IHN0cmluZykge1xuICAgICAgICBsZXQgd2kgPSB0aGlzO1xuICAgICAgICByZXR1cm4gXy5maW5kKHdpLmZpZWxkcywgZnVuY3Rpb24oZikgeyByZXR1cm4gZi5pZCA9PT0gZmllbGRJZDsgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogT3ZlcndyaXRlcyBmaWVsZHMgd2l0aCBhIGNsb25lLlxuICAgICAqIEBwYXJhbSBmaWVsZHNcbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0IGZpZWxkcyhmaWVsZHM6IEZpZWxkT3B0aW9uc1tdKSB7XG4gICAgICAgIHRoaXMuX2ZpZWxkcyA9IGNsb25lKGZpZWxkcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IGFuIGFycmF5IG9mIGFsbCBvZiB0aGUgZmllbGRzLlxuICAgICAqIEByZXR1cm5zIHtGaWVsZE9wdGlvbnNbXX1cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGZpZWxkcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpZWxkcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBpbnRlcmZhY2UgZm9yIHRyYW5zcG9ydC5cbiAgICAgKiBAcmV0dXJucyB7e2ZpZWxkczogQXJyYXl9fVxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRUcmFuc3BvcnRJbnRlcmZhY2UoKSB7XG4gICAgICAgIGxldCB3aSA9IHRoaXM7XG4gICAgICAgIGxldCBqb2JzID0gd2kuZ2V0Sm9icygpO1xuICAgICAgICBsZXQgam9ic0FycmF5ID0gW107XG5cbiAgICAgICAgam9icy5mb3JFYWNoKChqb2IpID0+IHtcbiAgICAgICAgICAgIGpvYnNBcnJheS5wdXNoKHtcbiAgICAgICAgICAgICAgICBpZDogam9iLmlkLFxuICAgICAgICAgICAgICAgIG5hbWU6IGpvYi5uYW1lLFxuICAgICAgICAgICAgICAgIHBhdGg6IGpvYi5wYXRoXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHNlc3Npb25JZDogd2kuc2Vzc2lvbklkLFxuICAgICAgICAgICAgZmllbGRzOiB3aS5maWVsZHMsXG4gICAgICAgICAgICBoZWxkSm9iczogam9ic0FycmF5LFxuICAgICAgICAgICAgc3RlcHM6IHdpLmdldFN0ZXBzVHJhbnNwb3J0KCksXG4gICAgICAgICAgICBtZXRhZGF0YTogd2kubWV0YWRhdGFcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGNoZWNrZWQgam9icy5cbiAgICAgKiBAcmV0dXJucyB7KEZpbGVKb2J8Rm9sZGVySm9iKVtdfVxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRKb2JzKCkge1xuICAgICAgICBsZXQgd2kgPSB0aGlzO1xuICAgICAgICBpZiAod2kuY2hlY2twb2ludE5lc3QpIHtcbiAgICAgICAgICAgIHJldHVybiB3aS5jaGVja3BvaW50TmVzdC5nZXRIZWxkSm9icygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgY2hlY2twb2ludCBuZXN0LlxuICAgICAqIEBwYXJhbSBuZXN0XG4gICAgICovXG4gICAgcHVibGljIHNldCBjaGVja3BvaW50TmVzdChuZXN0OiBGb2xkZXJOZXN0KSB7XG4gICAgICAgIHRoaXMuX2NoZWNrcG9pbnROZXN0ID0gbmVzdDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGNoZWNrcG9pbnROZXN0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2hlY2twb2ludE5lc3Q7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyBhIHVzZXIgaW50ZXJmYWNlIHN0ZXBcbiAgICAgKiBAcGFyYW0gc3RlcE5hbWVcbiAgICAgKiBAcGFyYW0gY2FsbGJhY2tcbiAgICAgKi9cbiAgICBwdWJsaWMgYWRkU3RlcChzdGVwTmFtZTogc3RyaW5nLCBjYWxsYmFjazogYW55KSB7XG4gICAgICAgIGxldCBzdGVwID0gbmV3IFN0ZXAoKTtcbiAgICAgICAgc3RlcC5uYW1lID0gc3RlcE5hbWU7XG4gICAgICAgIHN0ZXAuY2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICAgICAgc3RlcC5jb21wbGV0ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnN0ZXBzLnB1c2goc3RlcCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTWFyayBhIHN0ZXAgYXMgY29tcGxldGUgYW5kIHJlbW92ZSBpdCBmcm9tIHRoZSBpbnRlcmZhY2UuXG4gICAgICogQHBhcmFtIHN0ZXAge1N0ZXB9XG4gICAgICovXG4gICAgcHVibGljIGNvbXBsZXRlU3RlcChzdGVwOiBTdGVwKTogYm9vbGVhbiB7XG4gICAgICAgIGxldCB3aSA9IHRoaXM7XG4gICAgICAgIGxldCBzdGVwcyA9IHdpLnN0ZXBzO1xuICAgICAgICBsZXQgbWF0Y2hlZEluZGV4ID0gXy5maW5kSW5kZXgoc3RlcHMsIChzKSA9PiB7IHJldHVybiBzLm5hbWUgPT09IHN0ZXAubmFtZTsgfSk7XG4gICAgICAgIGlmIChzdGVwc1ttYXRjaGVkSW5kZXhdKSB7XG4gICAgICAgICAgICB3aS5zdGVwcy5zcGxpY2UobWF0Y2hlZEluZGV4LCAxKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWxpYXMgb2YgY29tcGxldGVTdGVwLlxuICAgICAqIEBwYXJhbSBzdGVwIHtTdGVwfVxuICAgICAqL1xuICAgIHB1YmxpYyByZW1vdmVTdGVwKHN0ZXA6IFN0ZXApIHtcbiAgICAgICAgdGhpcy5jb21wbGV0ZVN0ZXAoc3RlcCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IGFuIGFycmF5IG9mIGluc3RhbmNlIHN0ZXBzLlxuICAgICAqIEByZXR1cm5zIHtTdGVwW119XG4gICAgICovXG4gICAgcHVibGljIGdldCBzdGVwcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0ZXBzO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRTdGVwc1RyYW5zcG9ydCAoKSB7XG4gICAgICAgIGxldCBzdGVwcyA9IFtdO1xuICAgICAgICB0aGlzLnN0ZXBzLmZvckVhY2goc3RlcCA9PiB7XG4gICAgICAgICAgICBzdGVwcy5wdXNoKHtjb21wbGV0ZTogc3RlcC5jb21wbGV0ZSwgbmFtZTogc3RlcC5uYW1lfSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gc3RlcHM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogT3ZlcndyaXRlIHRoZSBpbnN0YW50IHN0ZXBzLlxuICAgICAqIEBwYXJhbSBzdGVwc1xuICAgICAqL1xuICAgIHB1YmxpYyBzZXQgc3RlcHMoc3RlcHM6IGFueSkge1xuICAgICAgICB0aGlzLl9zdGVwcyA9IGNsb25lKHN0ZXBzKTtcbiAgICB9XG59Il19