UNPKG

projen

Version:

CDK for software projects

140 lines • 16.1 kB
"use strict"; 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=