projen
Version:
CDK for software projects
140 lines • 16.1 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.ReleaseTrigger = void 0;
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
/**
* Used to manage release strategies. This includes release
* and release artifact automation
*/
class ReleaseTrigger {
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.release.ReleaseTrigger", version: "0.103.12" };
/**
* Creates a manual release trigger.
*
* Use this option if you want totally manual releases.
*
* This will give you a release task that, in addition to the normal
* release activities will trigger a `publish:git` task. This task will
* handle project-level changelog management, release tagging, and pushing
* these artifacts to origin.
*
* The command used for pushing can be customised by specifying
* `gitPushCommand`. Set to an empty string to disable pushing entirely.
*
* Simply run `yarn release` to trigger a manual release.
*
* @param options release options
*/
static manual(options = {}) {
let changelogPath;
if (options.changelog ?? true) {
changelogPath = options.changelogPath ?? "CHANGELOG.md";
}
return new ReleaseTrigger({
changelogPath: changelogPath,
gitPushCommand: options.gitPushCommand,
});
}
/**
* Creates a scheduled release trigger.
*
* Automated releases will occur based on the provided cron schedule.
*
* @param options release options.
*/
static scheduled(options) {
return new ReleaseTrigger({
schedule: options.schedule,
});
}
/**
* The release can only be triggered using the GitHub UI.
*/
static workflowDispatch() {
// This works because every workflow is always automatically `workflowDispatch`able
//
// The only thing we need to ensure is that no schedule or push trigger is
// added, and that we don't count as "manual" because that leads to the
// creation of a working copy task we don't need.
return new ReleaseTrigger({
workflowDispatchOnly: true,
});
}
/**
* Creates a continuous release trigger.
*
* Automated releases will occur on every commit.
*/
static continuous(options = {}) {
return new ReleaseTrigger({
continuous: true,
paths: options.paths,
});
}
/**
* Creates a tag-based release trigger.
*
* Automated releases will occur on every new tag matching the provided patterns.
*/
static tagged(options = {}) {
return new ReleaseTrigger({
tags: options.tags,
});
}
/**
* Project-level changelog file path.
*/
changelogPath;
/**
* Cron schedule for releases.
*
* Only defined if this is a scheduled release.
*
* @example '0 17 * * *' - every day at 5 pm
*/
schedule;
/**
* Whether or not this is a continuous release.
*/
isContinuous;
/**
* Paths for which pushes will trigger a release when `isContinuous` is `true`
*/
paths;
/**
* Tag patterns for which pushes will trigger a release
*/
tags;
/**
* Override git-push command used when releasing manually.
*
* Runs as a shell command in the `publish:git` task - where release
* credentials are in scope - replacing the default
* `git push --follow-tags origin <branch>`. Shell syntax is interpreted, so
* keep it a literal command.
*
* Set to an empty string to disable pushing.
*/
gitPushCommand;
workflowDispatchOnly;
constructor(options = {}) {
this.isContinuous = options.continuous ?? false;
this.paths = options.paths;
this.schedule = options.schedule;
this.changelogPath = options.changelogPath;
this.gitPushCommand = options.gitPushCommand;
this.workflowDispatchOnly = options.workflowDispatchOnly;
this.tags = options.tags;
}
/**
* Whether or not this is a release trigger with a manual task run in a working copy.
*
* If the `ReleaseTrigger` is a GitHub-only manual task, this will return `false`.
*/
get isManual() {
return (!(this.isContinuous || this.schedule || this.tags) &&
!this.workflowDispatchOnly);
}
}
exports.ReleaseTrigger = ReleaseTrigger;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVsZWFzZS10cmlnZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3JlbGVhc2UvcmVsZWFzZS10cmlnZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUEyR0E7OztHQUdHO0FBQ0gsTUFBYSxjQUFjOztJQUN6Qjs7Ozs7Ozs7Ozs7Ozs7OztPQWdCRztJQUNJLE1BQU0sQ0FBQyxNQUFNLENBQUMsVUFBZ0MsRUFBRTtRQUNyRCxJQUFJLGFBQWEsQ0FBQztRQUVsQixJQUFJLE9BQU8sQ0FBQyxTQUFTLElBQUksSUFBSSxFQUFFLENBQUM7WUFDOUIsYUFBYSxHQUFHLE9BQU8sQ0FBQyxhQUFhLElBQUksY0FBYyxDQUFDO1FBQzFELENBQUM7UUFFRCxPQUFPLElBQUksY0FBYyxDQUFDO1lBQ3hCLGFBQWEsRUFBRSxhQUFhO1lBQzVCLGNBQWMsRUFBRSxPQUFPLENBQUMsY0FBYztTQUN2QyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksTUFBTSxDQUFDLFNBQVMsQ0FBQyxPQUFnQztRQUN0RCxPQUFPLElBQUksY0FBYyxDQUFDO1lBQ3hCLFFBQVEsRUFBRSxPQUFPLENBQUMsUUFBUTtTQUMzQixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxNQUFNLENBQUMsZ0JBQWdCO1FBQzVCLG1GQUFtRjtRQUNuRixFQUFFO1FBQ0YsMEVBQTBFO1FBQzFFLHVFQUF1RTtRQUN2RSxpREFBaUQ7UUFDakQsT0FBTyxJQUFJLGNBQWMsQ0FBQztZQUN4QixvQkFBb0IsRUFBRSxJQUFJO1NBQzNCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksTUFBTSxDQUFDLFVBQVUsQ0FBQyxVQUFvQyxFQUFFO1FBQzdELE9BQU8sSUFBSSxjQUFjLENBQUM7WUFDeEIsVUFBVSxFQUFFLElBQUk7WUFDaEIsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLO1NBQ3JCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksTUFBTSxDQUFDLE1BQU0sQ0FBQyxVQUE2QixFQUFFO1FBQ2xELE9BQU8sSUFBSSxjQUFjLENBQUM7WUFDeEIsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJO1NBQ25CLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNhLGFBQWEsQ0FBVTtJQUV2Qzs7Ozs7O09BTUc7SUFDYSxRQUFRLENBQVU7SUFFbEM7O09BRUc7SUFDYSxZQUFZLENBQVU7SUFFdEM7O09BRUc7SUFDYSxLQUFLLENBQVk7SUFFakM7O09BRUc7SUFDYSxJQUFJLENBQVk7SUFFaEM7Ozs7Ozs7OztPQVNHO0lBQ2EsY0FBYyxDQUFVO0lBRXZCLG9CQUFvQixDQUFXO0lBRWhELFlBQW9CLFVBQWlDLEVBQUU7UUFDckQsSUFBSSxDQUFDLFlBQVksR0FBRyxPQUFPLENBQUMsVUFBVSxJQUFJLEtBQUssQ0FBQztRQUNoRCxJQUFJLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUM7UUFDM0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxhQUFhLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQztRQUMzQyxJQUFJLENBQUMsY0FBYyxHQUFHLE9BQU8sQ0FBQyxjQUFjLENBQUM7UUFDN0MsSUFBSSxDQUFDLG9CQUFvQixHQUFHLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQztRQUN6RCxJQUFJLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUM7SUFDM0IsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxJQUFXLFFBQVE7UUFDakIsT0FBTyxDQUNMLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQztZQUNsRCxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FDM0IsQ0FBQztJQUNKLENBQUM7O0FBaEpILHdDQWlKQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgU2NoZWR1bGVkUmVsZWFzZU9wdGlvbnMge1xuICAvKipcbiAgICogQ3JvbiBzY2hlZHVsZSBmb3IgcmVsZWFzZXMuXG4gICAqXG4gICAqIE9ubHkgZGVmaW5lZCBpZiB0aGlzIGlzIGEgc2NoZWR1bGVkIHJlbGVhc2UuXG4gICAqXG4gICAqIEBleGFtcGxlICcwIDE3ICogKiAqJyAtIGV2ZXJ5IGRheSBhdCA1IHBtXG4gICAqL1xuICByZWFkb25seSBzY2hlZHVsZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1hbnVhbFJlbGVhc2VPcHRpb25zIHtcbiAgLyoqXG4gICAqIE1haW50YWluIGEgcHJvamVjdC1sZXZlbCBjaGFuZ2Vsb2cuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IGNoYW5nZWxvZz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFByb2plY3QtbGV2ZWwgY2hhbmdlbG9nIGZpbGUgcGF0aC5cbiAgICpcbiAgICogSWdub3JlZCBpZiBgY2hhbmdlbG9nYCBpcyBmYWxzZS5cbiAgICpcbiAgICogQGRlZmF1bHQgJ0NIQU5HRUxPRy5tZCdcbiAgICovXG4gIHJlYWRvbmx5IGNoYW5nZWxvZ1BhdGg/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlIGdpdC1wdXNoIGNvbW1hbmQuXG4gICAqXG4gICAqIFJ1bnMgYXMgYSBzaGVsbCBjb21tYW5kIGluIHRoZSBgcHVibGlzaDpnaXRgIHRhc2sgLSB3aGVyZSByZWxlYXNlXG4gICAqIGNyZWRlbnRpYWxzIGFyZSBpbiBzY29wZSAtIHJlcGxhY2luZyB0aGUgZGVmYXVsdFxuICAgKiBgZ2l0IHB1c2ggLS1mb2xsb3ctdGFncyBvcmlnaW4gPGJyYW5jaD5gLiBTaGVsbCBzeW50YXggaXMgaW50ZXJwcmV0ZWQsIHNvXG4gICAqIGtlZXAgaXQgYSBsaXRlcmFsIGNvbW1hbmQuXG4gICAqXG4gICAqIFNldCB0byBhbiBlbXB0eSBzdHJpbmcgdG8gZGlzYWJsZSBwdXNoaW5nLlxuICAgKi9cbiAgcmVhZG9ubHkgZ2l0UHVzaENvbW1hbmQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29udGludW91c1JlbGVhc2VPcHRpb25zIHtcbiAgLyoqXG4gICAqIFBhdGhzIGZvciB3aGljaCBwdXNoZXMgc2hvdWxkIHRyaWdnZXIgYSByZWxlYXNlXG4gICAqL1xuICByZWFkb25seSBwYXRocz86IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRhZ1JlbGVhc2VPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRhZyBwYXR0ZXJucyBmb3Igd2hpY2ggcHVzaGVzIHNob3VsZCB0cmlnZ2VyIGEgcmVsZWFzZVxuICAgKi9cbiAgcmVhZG9ubHkgdGFncz86IHN0cmluZ1tdO1xufVxuXG5pbnRlcmZhY2UgUmVsZWFzZVRyaWdnZXJPcHRpb25zIHtcbiAgLyoqXG4gICAqIFByb2plY3QtbGV2ZWwgY2hhbmdlbG9nIGZpbGUgcGF0aC5cbiAgICpcbiAgICogSWdub3JlZCBpZiBgY2hhbmdlbG9nYCBpcyBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgY2hhbmdlbG9nUGF0aD86IHN0cmluZztcblxuICAvKipcbiAgICogQ29udGludW91cyByZWxlYXNlcywgd2hpY2ggd2lsbCByZWxlYXNlIGV2ZXJ5IGNvbW1pdC5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGNvbnRpbnVvdXM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBQYXRocyBmb3Igd2hpY2ggcHVzaGVzIChjb250aW51b3VzIHJlbGVhc2UpIHNob3VsZCB0cmlnZ2VyIGEgcmVsZWFzZVxuICAgKi9cbiAgcmVhZG9ubHkgcGF0aHM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogQ3JvbiBzY2hlZHVsZSBmb3IgcmVsZWFzZS5cbiAgICpcbiAgICogT25seSBkZWZpbmVkIGlmIHRoaXMgaXMgYSBzY2hlZHVsZWQgcmVsZWFzZS5cbiAgICpcbiAgICogQGV4YW1wbGUgJzAgMTcgKiAqIConIC0gZXZlcnkgZGF5IGF0IDUgcG1cbiAgICovXG4gIHJlYWRvbmx5IHNjaGVkdWxlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBPdmVycmlkZSBnaXQtcHVzaCBjb21tYW5kLlxuICAgKlxuICAgKiBSdW5zIGFzIGEgc2hlbGwgY29tbWFuZCBpbiB0aGUgYHB1Ymxpc2g6Z2l0YCB0YXNrIC0gd2hlcmUgcmVsZWFzZVxuICAgKiBjcmVkZW50aWFscyBhcmUgaW4gc2NvcGUgLSByZXBsYWNpbmcgdGhlIGRlZmF1bHRcbiAgICogYGdpdCBwdXNoIC0tZm9sbG93LXRhZ3Mgb3JpZ2luIDxicmFuY2g+YC4gU2hlbGwgc3ludGF4IGlzIGludGVycHJldGVkLCBzb1xuICAgKiBrZWVwIGl0IGEgbGl0ZXJhbCBjb21tYW5kLlxuICAgKlxuICAgKiBTZXQgdG8gYW4gZW1wdHkgc3RyaW5nIHRvIGRpc2FibGUgcHVzaGluZy5cbiAgICovXG4gIHJlYWRvbmx5IGdpdFB1c2hDb21tYW5kPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBPbmx5IGEgd29ya2Zsb3dEaXNwYXRjaCB0cmlnZ2VyXG4gICAqL1xuICByZWFkb25seSB3b3JrZmxvd0Rpc3BhdGNoT25seT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRhZyBwYXR0ZXJucyBmb3Igd2hpY2ggcHVzaGVzIHNob3VsZCB0cmlnZ2VyIGEgcmVsZWFzZVxuICAgKi9cbiAgcmVhZG9ubHkgdGFncz86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIFVzZWQgdG8gbWFuYWdlIHJlbGVhc2Ugc3RyYXRlZ2llcy4gVGhpcyBpbmNsdWRlcyByZWxlYXNlXG4gKiBhbmQgcmVsZWFzZSBhcnRpZmFjdCBhdXRvbWF0aW9uXG4gKi9cbmV4cG9ydCBjbGFzcyBSZWxlYXNlVHJpZ2dlciB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbWFudWFsIHJlbGVhc2UgdHJpZ2dlci5cbiAgICpcbiAgICogVXNlIHRoaXMgb3B0aW9uIGlmIHlvdSB3YW50IHRvdGFsbHkgbWFudWFsIHJlbGVhc2VzLlxuICAgKlxuICAgKiBUaGlzIHdpbGwgZ2l2ZSB5b3UgYSByZWxlYXNlIHRhc2sgdGhhdCwgaW4gYWRkaXRpb24gdG8gdGhlIG5vcm1hbFxuICAgKiByZWxlYXNlIGFjdGl2aXRpZXMgd2lsbCB0cmlnZ2VyIGEgYHB1Ymxpc2g6Z2l0YCB0YXNrLiBUaGlzIHRhc2sgd2lsbFxuICAgKiBoYW5kbGUgcHJvamVjdC1sZXZlbCBjaGFuZ2Vsb2cgbWFuYWdlbWVudCwgcmVsZWFzZSB0YWdnaW5nLCBhbmQgcHVzaGluZ1xuICAgKiB0aGVzZSBhcnRpZmFjdHMgdG8gb3JpZ2luLlxuICAgKlxuICAgKiBUaGUgY29tbWFuZCB1c2VkIGZvciBwdXNoaW5nIGNhbiBiZSBjdXN0b21pc2VkIGJ5IHNwZWNpZnlpbmdcbiAgICogYGdpdFB1c2hDb21tYW5kYC4gU2V0IHRvIGFuIGVtcHR5IHN0cmluZyB0byBkaXNhYmxlIHB1c2hpbmcgZW50aXJlbHkuXG4gICAqXG4gICAqIFNpbXBseSBydW4gYHlhcm4gcmVsZWFzZWAgdG8gdHJpZ2dlciBhIG1hbnVhbCByZWxlYXNlLlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucyByZWxlYXNlIG9wdGlvbnNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbWFudWFsKG9wdGlvbnM6IE1hbnVhbFJlbGVhc2VPcHRpb25zID0ge30pIHtcbiAgICBsZXQgY2hhbmdlbG9nUGF0aDtcblxuICAgIGlmIChvcHRpb25zLmNoYW5nZWxvZyA/PyB0cnVlKSB7XG4gICAgICBjaGFuZ2Vsb2dQYXRoID0gb3B0aW9ucy5jaGFuZ2Vsb2dQYXRoID8/IFwiQ0hBTkdFTE9HLm1kXCI7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBSZWxlYXNlVHJpZ2dlcih7XG4gICAgICBjaGFuZ2Vsb2dQYXRoOiBjaGFuZ2Vsb2dQYXRoLFxuICAgICAgZ2l0UHVzaENvbW1hbmQ6IG9wdGlvbnMuZ2l0UHVzaENvbW1hbmQsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIHNjaGVkdWxlZCByZWxlYXNlIHRyaWdnZXIuXG4gICAqXG4gICAqIEF1dG9tYXRlZCByZWxlYXNlcyB3aWxsIG9jY3VyIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBjcm9uIHNjaGVkdWxlLlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucyByZWxlYXNlIG9wdGlvbnMuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHNjaGVkdWxlZChvcHRpb25zOiBTY2hlZHVsZWRSZWxlYXNlT3B0aW9ucykge1xuICAgIHJldHVybiBuZXcgUmVsZWFzZVRyaWdnZXIoe1xuICAgICAgc2NoZWR1bGU6IG9wdGlvbnMuc2NoZWR1bGUsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHJlbGVhc2UgY2FuIG9ubHkgYmUgdHJpZ2dlcmVkIHVzaW5nIHRoZSBHaXRIdWIgVUkuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHdvcmtmbG93RGlzcGF0Y2goKSB7XG4gICAgLy8gVGhpcyB3b3JrcyBiZWNhdXNlIGV2ZXJ5IHdvcmtmbG93IGlzIGFsd2F5cyBhdXRvbWF0aWNhbGx5IGB3b3JrZmxvd0Rpc3BhdGNoYGFibGVcbiAgICAvL1xuICAgIC8vIFRoZSBvbmx5IHRoaW5nIHdlIG5lZWQgdG8gZW5zdXJlIGlzIHRoYXQgbm8gc2NoZWR1bGUgb3IgcHVzaCB0cmlnZ2VyIGlzXG4gICAgLy8gYWRkZWQsIGFuZCB0aGF0IHdlIGRvbid0IGNvdW50IGFzIFwibWFudWFsXCIgYmVjYXVzZSB0aGF0IGxlYWRzIHRvIHRoZVxuICAgIC8vIGNyZWF0aW9uIG9mIGEgd29ya2luZyBjb3B5IHRhc2sgd2UgZG9uJ3QgbmVlZC5cbiAgICByZXR1cm4gbmV3IFJlbGVhc2VUcmlnZ2VyKHtcbiAgICAgIHdvcmtmbG93RGlzcGF0Y2hPbmx5OiB0cnVlLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBjb250aW51b3VzIHJlbGVhc2UgdHJpZ2dlci5cbiAgICpcbiAgICogQXV0b21hdGVkIHJlbGVhc2VzIHdpbGwgb2NjdXIgb24gZXZlcnkgY29tbWl0LlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBjb250aW51b3VzKG9wdGlvbnM6IENvbnRpbnVvdXNSZWxlYXNlT3B0aW9ucyA9IHt9KSB7XG4gICAgcmV0dXJuIG5ldyBSZWxlYXNlVHJpZ2dlcih7XG4gICAgICBjb250aW51b3VzOiB0cnVlLFxuICAgICAgcGF0aHM6IG9wdGlvbnMucGF0aHMsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIHRhZy1iYXNlZCByZWxlYXNlIHRyaWdnZXIuXG4gICAqXG4gICAqIEF1dG9tYXRlZCByZWxlYXNlcyB3aWxsIG9jY3VyIG9uIGV2ZXJ5IG5ldyB0YWcgbWF0Y2hpbmcgdGhlIHByb3ZpZGVkIHBhdHRlcm5zLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyB0YWdnZWQob3B0aW9uczogVGFnUmVsZWFzZU9wdGlvbnMgPSB7fSkge1xuICAgIHJldHVybiBuZXcgUmVsZWFzZVRyaWdnZXIoe1xuICAgICAgdGFnczogb3B0aW9ucy50YWdzLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFByb2plY3QtbGV2ZWwgY2hhbmdlbG9nIGZpbGUgcGF0aC5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBjaGFuZ2Vsb2dQYXRoPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDcm9uIHNjaGVkdWxlIGZvciByZWxlYXNlcy5cbiAgICpcbiAgICogT25seSBkZWZpbmVkIGlmIHRoaXMgaXMgYSBzY2hlZHVsZWQgcmVsZWFzZS5cbiAgICpcbiAgICogQGV4YW1wbGUgJzAgMTcgKiAqIConIC0gZXZlcnkgZGF5IGF0IDUgcG1cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBzY2hlZHVsZT86IHN0cmluZztcblxuICAvKipcbiAgICogV2hldGhlciBvciBub3QgdGhpcyBpcyBhIGNvbnRpbnVvdXMgcmVsZWFzZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBpc0NvbnRpbnVvdXM6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFBhdGhzIGZvciB3aGljaCBwdXNoZXMgd2lsbCB0cmlnZ2VyIGEgcmVsZWFzZSB3aGVuIGBpc0NvbnRpbnVvdXNgIGlzIGB0cnVlYFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHBhdGhzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRhZyBwYXR0ZXJucyBmb3Igd2hpY2ggcHVzaGVzIHdpbGwgdHJpZ2dlciBhIHJlbGVhc2VcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB0YWdzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlIGdpdC1wdXNoIGNvbW1hbmQgdXNlZCB3aGVuIHJlbGVhc2luZyBtYW51YWxseS5cbiAgICpcbiAgICogUnVucyBhcyBhIHNoZWxsIGNvbW1hbmQgaW4gdGhlIGBwdWJsaXNoOmdpdGAgdGFzayAtIHdoZXJlIHJlbGVhc2VcbiAgICogY3JlZGVudGlhbHMgYXJlIGluIHNjb3BlIC0gcmVwbGFjaW5nIHRoZSBkZWZhdWx0XG4gICAqIGBnaXQgcHVzaCAtLWZvbGxvdy10YWdzIG9yaWdpbiA8YnJhbmNoPmAuIFNoZWxsIHN5bnRheCBpcyBpbnRlcnByZXRlZCwgc29cbiAgICoga2VlcCBpdCBhIGxpdGVyYWwgY29tbWFuZC5cbiAgICpcbiAgICogU2V0IHRvIGFuIGVtcHR5IHN0cmluZyB0byBkaXNhYmxlIHB1c2hpbmcuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZ2l0UHVzaENvbW1hbmQ/OiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSByZWFkb25seSB3b3JrZmxvd0Rpc3BhdGNoT25seT86IGJvb2xlYW47XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihvcHRpb25zOiBSZWxlYXNlVHJpZ2dlck9wdGlvbnMgPSB7fSkge1xuICAgIHRoaXMuaXNDb250aW51b3VzID0gb3B0aW9ucy5jb250aW51b3VzID8/IGZhbHNlO1xuICAgIHRoaXMucGF0aHMgPSBvcHRpb25zLnBhdGhzO1xuICAgIHRoaXMuc2NoZWR1bGUgPSBvcHRpb25zLnNjaGVkdWxlO1xuICAgIHRoaXMuY2hhbmdlbG9nUGF0aCA9IG9wdGlvbnMuY2hhbmdlbG9nUGF0aDtcbiAgICB0aGlzLmdpdFB1c2hDb21tYW5kID0gb3B0aW9ucy5naXRQdXNoQ29tbWFuZDtcbiAgICB0aGlzLndvcmtmbG93RGlzcGF0Y2hPbmx5ID0gb3B0aW9ucy53b3JrZmxvd0Rpc3BhdGNoT25seTtcbiAgICB0aGlzLnRhZ3MgPSBvcHRpb25zLnRhZ3M7XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciBvciBub3QgdGhpcyBpcyBhIHJlbGVhc2UgdHJpZ2dlciB3aXRoIGEgbWFudWFsIHRhc2sgcnVuIGluIGEgd29ya2luZyBjb3B5LlxuICAgKlxuICAgKiBJZiB0aGUgYFJlbGVhc2VUcmlnZ2VyYCBpcyBhIEdpdEh1Yi1vbmx5IG1hbnVhbCB0YXNrLCB0aGlzIHdpbGwgcmV0dXJuIGBmYWxzZWAuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGlzTWFudWFsKCkge1xuICAgIHJldHVybiAoXG4gICAgICAhKHRoaXMuaXNDb250aW51b3VzIHx8IHRoaXMuc2NoZWR1bGUgfHwgdGhpcy50YWdzKSAmJlxuICAgICAgIXRoaXMud29ya2Zsb3dEaXNwYXRjaE9ubHlcbiAgICApO1xuICB9XG59XG4iXX0=