@decaf-ts/utils 0.1.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (112) hide show
  1. package/LICENSE.md +157 -0
  2. package/README.md +95 -0
  3. package/dist/esm/utils.js +1 -0
  4. package/dist/types/bin/tag-release.d.ts +1 -0
  5. package/dist/types/bin/update-scripts.d.ts +1 -0
  6. package/dist/types/cli/command.d.ts +110 -0
  7. package/dist/types/cli/commands/index.d.ts +2 -0
  8. package/dist/types/cli/commands/tag-release.d.ts +105 -0
  9. package/dist/types/cli/commands/update-scripts.d.ts +211 -0
  10. package/dist/types/cli/constants.d.ts +73 -0
  11. package/dist/types/cli/index.d.ts +4 -0
  12. package/dist/types/cli/types.d.ts +28 -0
  13. package/dist/types/index.d.ts +39 -0
  14. package/dist/types/input/index.d.ts +2 -0
  15. package/dist/types/input/input.d.ts +472 -0
  16. package/dist/types/input/types.d.ts +76 -0
  17. package/dist/types/output/common.d.ts +51 -0
  18. package/dist/types/output/index.d.ts +3 -0
  19. package/dist/types/output/logging.d.ts +177 -0
  20. package/dist/types/output/types.d.ts +203 -0
  21. package/dist/types/utils/accumulator.d.ts +105 -0
  22. package/dist/types/utils/constants.d.ts +136 -0
  23. package/dist/types/utils/environment.d.ts +57 -0
  24. package/dist/types/utils/fs.d.ts +133 -0
  25. package/dist/types/utils/http.d.ts +41 -0
  26. package/dist/types/utils/index.d.ts +7 -0
  27. package/dist/types/utils/md.d.ts +156 -0
  28. package/dist/types/utils/tests.d.ts +170 -0
  29. package/dist/types/utils/text.d.ts +106 -0
  30. package/dist/types/utils/timeout.d.ts +1 -0
  31. package/dist/types/utils/types.d.ts +81 -0
  32. package/dist/types/utils/utils.d.ts +91 -0
  33. package/dist/types/utils/web.d.ts +7 -0
  34. package/dist/types/writers/OutputWriter.d.ts +49 -0
  35. package/dist/types/writers/RegexpOutputWriter.d.ts +69 -0
  36. package/dist/types/writers/StandardOutputWriter.d.ts +91 -0
  37. package/dist/types/writers/index.d.ts +4 -0
  38. package/dist/types/writers/types.d.ts +29 -0
  39. package/dist/utils.js +1 -0
  40. package/lib/assets/slogans.json +802 -0
  41. package/lib/bin/tag-release.cjs +12 -0
  42. package/lib/bin/update-scripts.cjs +12 -0
  43. package/lib/cli/command.cjs +153 -0
  44. package/lib/cli/commands/index.cjs +20 -0
  45. package/lib/cli/commands/tag-release.cjs +168 -0
  46. package/lib/cli/commands/update-scripts.cjs +511 -0
  47. package/lib/cli/constants.cjs +80 -0
  48. package/lib/cli/index.cjs +22 -0
  49. package/lib/cli/types.cjs +4 -0
  50. package/lib/esm/assets/slogans.json +802 -0
  51. package/lib/esm/bin/tag-release.js +10 -0
  52. package/lib/esm/bin/update-scripts.js +10 -0
  53. package/lib/esm/cli/command.js +149 -0
  54. package/lib/esm/cli/commands/index.js +4 -0
  55. package/lib/esm/cli/commands/tag-release.js +164 -0
  56. package/lib/esm/cli/commands/update-scripts.js +504 -0
  57. package/lib/esm/cli/constants.js +77 -0
  58. package/lib/esm/cli/index.js +6 -0
  59. package/lib/esm/cli/types.js +3 -0
  60. package/lib/esm/index.js +41 -0
  61. package/lib/esm/input/index.js +4 -0
  62. package/lib/esm/input/input.js +570 -0
  63. package/lib/esm/input/types.js +3 -0
  64. package/lib/esm/output/common.js +93 -0
  65. package/lib/esm/output/index.js +5 -0
  66. package/lib/esm/output/logging.js +350 -0
  67. package/lib/esm/output/types.js +3 -0
  68. package/lib/esm/utils/accumulator.js +145 -0
  69. package/lib/esm/utils/constants.js +176 -0
  70. package/lib/esm/utils/environment.js +91 -0
  71. package/lib/esm/utils/fs.js +271 -0
  72. package/lib/esm/utils/http.js +70 -0
  73. package/lib/esm/utils/index.js +9 -0
  74. package/lib/esm/utils/md.js +3 -0
  75. package/lib/esm/utils/tests.js +223 -0
  76. package/lib/esm/utils/text.js +142 -0
  77. package/lib/esm/utils/timeout.js +5 -0
  78. package/lib/esm/utils/types.js +3 -0
  79. package/lib/esm/utils/utils.js +220 -0
  80. package/lib/esm/utils/web.js +12 -0
  81. package/lib/esm/writers/OutputWriter.js +3 -0
  82. package/lib/esm/writers/RegexpOutputWriter.js +98 -0
  83. package/lib/esm/writers/StandardOutputWriter.js +127 -0
  84. package/lib/esm/writers/index.js +6 -0
  85. package/lib/esm/writers/types.js +3 -0
  86. package/lib/index.cjs +58 -0
  87. package/lib/input/index.cjs +20 -0
  88. package/lib/input/input.cjs +577 -0
  89. package/lib/input/types.cjs +4 -0
  90. package/lib/output/common.cjs +100 -0
  91. package/lib/output/index.cjs +21 -0
  92. package/lib/output/logging.cjs +355 -0
  93. package/lib/output/types.cjs +4 -0
  94. package/lib/utils/accumulator.cjs +149 -0
  95. package/lib/utils/constants.cjs +179 -0
  96. package/lib/utils/environment.cjs +95 -0
  97. package/lib/utils/fs.cjs +288 -0
  98. package/lib/utils/http.cjs +77 -0
  99. package/lib/utils/index.cjs +25 -0
  100. package/lib/utils/md.cjs +4 -0
  101. package/lib/utils/tests.cjs +263 -0
  102. package/lib/utils/text.cjs +153 -0
  103. package/lib/utils/timeout.cjs +8 -0
  104. package/lib/utils/types.cjs +4 -0
  105. package/lib/utils/utils.cjs +226 -0
  106. package/lib/utils/web.cjs +15 -0
  107. package/lib/writers/OutputWriter.cjs +4 -0
  108. package/lib/writers/RegexpOutputWriter.cjs +102 -0
  109. package/lib/writers/StandardOutputWriter.cjs +131 -0
  110. package/lib/writers/index.cjs +22 -0
  111. package/lib/writers/types.cjs +4 -0
  112. package/package.json +121 -0
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const commands_1 = require("../cli/commands/index.cjs");
4
+ new commands_1.ReleaseScript()
5
+ .execute()
6
+ .then(() => commands_1.ReleaseScript.log.info("Release pushed successfully"))
7
+ .catch((e) => {
8
+ commands_1.ReleaseScript.log.error(`Error preparing release: ${e}`);
9
+ process.exit(1);
10
+ });
11
+
12
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9iaW4vdGFnLXJlbGVhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSw4Q0FBZ0Q7QUFFaEQsSUFBSSx3QkFBYSxFQUFFO0tBQ2hCLE9BQU8sRUFBRTtLQUNULElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyx3QkFBYSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsNkJBQTZCLENBQUMsQ0FBQztLQUNqRSxLQUFLLENBQUMsQ0FBQyxDQUFVLEVBQUUsRUFBRTtJQUNwQix3QkFBYSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsNEJBQTRCLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDekQsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsQixDQUFDLENBQUMsQ0FBQyIsImZpbGUiOiJiaW4vdGFnLXJlbGVhc2UuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSZWxlYXNlU2NyaXB0IH0gZnJvbSBcIi4uL2NsaS9jb21tYW5kc1wiO1xuXG5uZXcgUmVsZWFzZVNjcmlwdCgpXG4gIC5leGVjdXRlKClcbiAgLnRoZW4oKCkgPT4gUmVsZWFzZVNjcmlwdC5sb2cuaW5mbyhcIlJlbGVhc2UgcHVzaGVkIHN1Y2Nlc3NmdWxseVwiKSlcbiAgLmNhdGNoKChlOiB1bmtub3duKSA9PiB7XG4gICAgUmVsZWFzZVNjcmlwdC5sb2cuZXJyb3IoYEVycm9yIHByZXBhcmluZyByZWxlYXNlOiAke2V9YCk7XG4gICAgcHJvY2Vzcy5leGl0KDEpO1xuICB9KTtcbiJdfQ==
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const commands_1 = require("../cli/commands/index.cjs");
4
+ new commands_1.TemplateSync()
5
+ .execute()
6
+ .then(() => commands_1.TemplateSync.log.info("Template updated successfully. Please confirm all changes before commiting"))
7
+ .catch((e) => {
8
+ commands_1.TemplateSync.log.error(`Error preparing template: ${e}`);
9
+ process.exit(1);
10
+ });
11
+
12
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9iaW4vdXBkYXRlLXNjcmlwdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSw4Q0FBK0M7QUFFL0MsSUFBSSx1QkFBWSxFQUFFO0tBQ2YsT0FBTyxFQUFFO0tBQ1QsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUNULHVCQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FDbkIsNEVBQTRFLENBQzdFLENBQ0Y7S0FDQSxLQUFLLENBQUMsQ0FBQyxDQUFVLEVBQUUsRUFBRTtJQUNwQix1QkFBWSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsNkJBQTZCLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDekQsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsQixDQUFDLENBQUMsQ0FBQyIsImZpbGUiOiJiaW4vdXBkYXRlLXNjcmlwdHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUZW1wbGF0ZVN5bmMgfSBmcm9tIFwiLi4vY2xpL2NvbW1hbmRzXCI7XG5cbm5ldyBUZW1wbGF0ZVN5bmMoKVxuICAuZXhlY3V0ZSgpXG4gIC50aGVuKCgpID0+XG4gICAgVGVtcGxhdGVTeW5jLmxvZy5pbmZvKFxuICAgICAgXCJUZW1wbGF0ZSB1cGRhdGVkIHN1Y2Nlc3NmdWxseS4gUGxlYXNlIGNvbmZpcm0gYWxsIGNoYW5nZXMgYmVmb3JlIGNvbW1pdGluZ1wiXG4gICAgKVxuICApXG4gIC5jYXRjaCgoZTogdW5rbm93bikgPT4ge1xuICAgIFRlbXBsYXRlU3luYy5sb2cuZXJyb3IoYEVycm9yIHByZXBhcmluZyB0ZW1wbGF0ZTogJHtlfWApO1xuICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgfSk7XG4iXX0=
@@ -0,0 +1,153 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Command = void 0;
4
+ const logging_1 = require("../output/logging.cjs");
5
+ const constants_1 = require("../utils/constants.cjs");
6
+ const input_1 = require("../input/input.cjs");
7
+ const constants_2 = require("./constants.cjs");
8
+ const fs_1 = require("../utils/fs.cjs");
9
+ const common_1 = require("../output/common.cjs");
10
+ const environment_1 = require("../utils/environment.cjs");
11
+ /**
12
+ * @class Command
13
+ * @abstract
14
+ * @template I - The type of input options for the command.
15
+ * @template R - The return type of the command execution.
16
+ * @memberOf utils/cli
17
+ * @description Abstract base class for command implementation.
18
+ * @summary Provides a structure for creating command-line interface commands with input handling, logging, and execution flow.
19
+ *
20
+ * @param {string} name - The name of the command.
21
+ * @param {CommandOptions<I>} [inputs] - The input options for the command.
22
+ * @param {string[]} [requirements] - The list of required dependencies for the command.
23
+ */
24
+ class Command {
25
+ constructor(name, inputs = {}, requirements = []) {
26
+ this.name = name;
27
+ this.inputs = inputs;
28
+ this.requirements = requirements;
29
+ if (!Command.log) {
30
+ Object.defineProperty(Command, "log", {
31
+ writable: false,
32
+ value: logging_1.Logging.for(Command.name),
33
+ });
34
+ this.log = Command.log;
35
+ }
36
+ this.log = Command.log.for(this.name);
37
+ this.inputs = Object.assign({}, constants_2.DefaultCommandOptions, inputs);
38
+ }
39
+ /**
40
+ * @protected
41
+ * @async
42
+ * @description Checks if all required dependencies are present.
43
+ * @summary Retrieves the list of dependencies and compares it against the required dependencies for the command.
44
+ * @returns {Promise<void>} A promise that resolves when the check is complete.
45
+ *
46
+ * @mermaid
47
+ * sequenceDiagram
48
+ * participant Command
49
+ * participant getDependencies
50
+ * participant Set
51
+ * Command->>getDependencies: Call
52
+ * getDependencies-->>Command: Return {prod, dev, peer}
53
+ * Command->>Set: Create Set from prod, dev, peer
54
+ * Set-->>Command: Return unique dependencies
55
+ * Command->>Command: Compare against requirements
56
+ * alt Missing dependencies
57
+ * Command->>Command: Add to missing list
58
+ * end
59
+ * Note over Command: If missing.length > 0, handle missing dependencies
60
+ */
61
+ async checkRequirements() {
62
+ const { prod, dev, peer } = await (0, fs_1.getDependencies)();
63
+ const missing = [];
64
+ const fullList = Array.from(new Set([...prod, ...dev, ...peer]).values()).map((d) => d.name);
65
+ for (const dep of this.requirements)
66
+ if (!fullList.includes(dep))
67
+ missing.push(dep);
68
+ if (!missing.length)
69
+ return;
70
+ }
71
+ /**
72
+ * @protected
73
+ * @description Provides help information for the command.
74
+ * @summary This method should be overridden in derived classes to provide specific help information.
75
+ * @param {ParseArgsResult} args - The parsed command-line arguments.
76
+ * @returns {void}
77
+ */
78
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
79
+ help(args) {
80
+ return this.log.info(`This is help. I'm no use because I should have been overridden.`);
81
+ }
82
+ /**
83
+ * @async
84
+ * @description Executes the command.
85
+ * @summary This method handles the overall execution flow of the command, including parsing arguments,
86
+ * setting up logging, checking for version or help requests, and running the command.
87
+ * @returns {Promise<R | string | void>} A promise that resolves with the command's result.
88
+ *
89
+ * @mermaid
90
+ * sequenceDiagram
91
+ * participant Command
92
+ * participant UserInput
93
+ * participant Logging
94
+ * participant getPackageVersion
95
+ * participant printBanner
96
+ * Command->>UserInput: parseArgs(inputs)
97
+ * UserInput-->>Command: Return ParseArgsResult
98
+ * Command->>Command: Process options
99
+ * Command->>Logging: setConfig(options)
100
+ * alt version requested
101
+ * Command->>getPackageVersion: Call
102
+ * getPackageVersion-->>Command: Return version
103
+ * else help requested
104
+ * Command->>Command: help(args)
105
+ * else banner requested
106
+ * Command->>printBanner: Call
107
+ * end
108
+ * Command->>Command: run(args)
109
+ * alt error occurs
110
+ * Command->>Command: Log error
111
+ * end
112
+ * Command-->>Command: Return result
113
+ */
114
+ async execute() {
115
+ const args = input_1.UserInput.parseArgs(this.inputs);
116
+ const env = environment_1.Environment.accumulate(constants_1.DefaultLoggingConfig)
117
+ .accumulate(constants_2.DefaultCommandValues)
118
+ .accumulate(args.values);
119
+ const { timestamp, verbose, version, help, logLevel, logStyle, banner } = env;
120
+ this.log.setConfig({
121
+ ...env,
122
+ timestamp: !!timestamp,
123
+ level: logLevel,
124
+ style: !!logStyle,
125
+ verbose: verbose || 0,
126
+ });
127
+ if (version) {
128
+ return (0, fs_1.getPackageVersion)();
129
+ }
130
+ if (help) {
131
+ return this.help(args);
132
+ }
133
+ if (banner)
134
+ (0, common_1.printBanner)(this.log.for(common_1.printBanner, {
135
+ timestamp: false,
136
+ style: false,
137
+ context: false,
138
+ logLevel: false,
139
+ }));
140
+ let result;
141
+ try {
142
+ result = await this.run(env);
143
+ }
144
+ catch (e) {
145
+ this.log.error(`Error while running provided cli function: ${e}`);
146
+ throw e;
147
+ }
148
+ return result;
149
+ }
150
+ }
151
+ exports.Command = Command;
152
+
153
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,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QUc7WUFDTixTQUFTLEVBQUUsQ0FBQyxDQUFDLFNBQVM7WUFDdEIsS0FBSyxFQUFFLFFBQW9CO1lBQzNCLEtBQUssRUFBRSxDQUFDLENBQUMsUUFBUTtZQUNqQixPQUFPLEVBQUcsT0FBa0IsSUFBSSxDQUFDO1NBQ2xDLENBQUMsQ0FBQztRQUVILElBQUksT0FBTyxFQUFFLENBQUM7WUFDWixPQUFPLElBQUEsc0JBQWlCLEdBQUUsQ0FBQztRQUM3QixDQUFDO1FBRUQsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNULE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QixDQUFDO1FBRUQsSUFBSSxNQUFNO1lBQ1IsSUFBQSxvQkFBVyxFQUNULElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLG9CQUFXLEVBQUU7Z0JBQ3hCLFNBQVMsRUFBRSxLQUFLO2dCQUNoQixLQUFLLEVBQUUsS0FBSztnQkFDWixPQUFPLEVBQUUsS0FBSztnQkFDZCxRQUFRLEVBQUUsS0FBSzthQUNoQixDQUFDLENBQ0gsQ0FBQztRQUVKLElBQUksTUFBTSxDQUFDO1FBQ1gsSUFBSSxDQUFDO1lBQ0gsTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMvQixDQUFDO1FBQUMsT0FBTyxDQUFVLEVBQUUsQ0FBQztZQUNwQixJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyw4Q0FBOEMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNsRSxNQUFNLENBQUMsQ0FBQztRQUNWLENBQUM7UUFFRCxPQUFPLE1BQVcsQ0FBQztJQUNyQixDQUFDO0NBQ0Y7QUF4S0QsMEJBd0tDIiwiZmlsZSI6ImNsaS9jb21tYW5kLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGFyc2VBcmdzUmVzdWx0IH0gZnJvbSBcIi4uL2lucHV0L3R5cGVzXCI7XG5pbXBvcnQgeyBMb2dnaW5nQ29uZmlnLCBWZXJib3NpdHlMb2dnZXIgfSBmcm9tIFwiLi4vb3V0cHV0L3R5cGVzXCI7XG5pbXBvcnQgeyBDb21tYW5kT3B0aW9ucyB9IGZyb20gXCIuL3R5cGVzXCI7XG5pbXBvcnQgeyBMb2dnaW5nIH0gZnJvbSBcIi4uL291dHB1dC9sb2dnaW5nXCI7XG5pbXBvcnQgeyBEZWZhdWx0TG9nZ2luZ0NvbmZpZywgTG9nTGV2ZWwgfSBmcm9tIFwiLi4vdXRpbHMvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBVc2VySW5wdXQgfSBmcm9tIFwiLi4vaW5wdXQvaW5wdXRcIjtcbmltcG9ydCB7IERlZmF1bHRDb21tYW5kT3B0aW9ucywgRGVmYXVsdENvbW1hbmRWYWx1ZXMgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IGdldERlcGVuZGVuY2llcywgZ2V0UGFja2FnZVZlcnNpb24gfSBmcm9tIFwiLi4vdXRpbHMvZnNcIjtcbmltcG9ydCB7IHByaW50QmFubmVyIH0gZnJvbSBcIi4uL291dHB1dC9jb21tb25cIjtcbmltcG9ydCB7IEVudmlyb25tZW50IH0gZnJvbSBcIi4uL3V0aWxzL2Vudmlyb25tZW50XCI7XG5cbi8qKlxuICogQGNsYXNzIENvbW1hbmRcbiAqIEBhYnN0cmFjdFxuICogQHRlbXBsYXRlIEkgLSBUaGUgdHlwZSBvZiBpbnB1dCBvcHRpb25zIGZvciB0aGUgY29tbWFuZC5cbiAqIEB0ZW1wbGF0ZSBSIC0gVGhlIHJldHVybiB0eXBlIG9mIHRoZSBjb21tYW5kIGV4ZWN1dGlvbi5cbiAqIEBtZW1iZXJPZiB1dGlscy9jbGlcbiAqIEBkZXNjcmlwdGlvbiBBYnN0cmFjdCBiYXNlIGNsYXNzIGZvciBjb21tYW5kIGltcGxlbWVudGF0aW9uLlxuICogQHN1bW1hcnkgUHJvdmlkZXMgYSBzdHJ1Y3R1cmUgZm9yIGNyZWF0aW5nIGNvbW1hbmQtbGluZSBpbnRlcmZhY2UgY29tbWFuZHMgd2l0aCBpbnB1dCBoYW5kbGluZywgbG9nZ2luZywgYW5kIGV4ZWN1dGlvbiBmbG93LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGNvbW1hbmQuXG4gKiBAcGFyYW0ge0NvbW1hbmRPcHRpb25zPEk+fSBbaW5wdXRzXSAtIFRoZSBpbnB1dCBvcHRpb25zIGZvciB0aGUgY29tbWFuZC5cbiAqIEBwYXJhbSB7c3RyaW5nW119IFtyZXF1aXJlbWVudHNdIC0gVGhlIGxpc3Qgb2YgcmVxdWlyZWQgZGVwZW5kZW5jaWVzIGZvciB0aGUgY29tbWFuZC5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIENvbW1hbmQ8SSwgUj4ge1xuICAvKipcbiAgICogQHN0YXRpY1xuICAgKiBAZGVzY3JpcHRpb24gU3RhdGljIGxvZ2dlciBmb3IgdGhlIENvbW1hbmQgY2xhc3MuXG4gICAqIEB0eXBlIHtWZXJib3NpdHlMb2dnZXJ9XG4gICAqL1xuICBzdGF0aWMgbG9nOiBWZXJib3NpdHlMb2dnZXI7XG5cbiAgLyoqXG4gICAqIEBwcm90ZWN0ZWRcbiAgICogQGRlc2NyaXB0aW9uIEluc3RhbmNlIGxvZ2dlciBmb3IgdGhlIGNvbW1hbmQuXG4gICAqIEB0eXBlIHtWZXJib3NpdHlMb2dnZXJ9XG4gICAqL1xuICBwcm90ZWN0ZWQgbG9nOiBWZXJib3NpdHlMb2dnZXI7XG5cbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBuYW1lOiBzdHJpbmcsXG4gICAgcHJvdGVjdGVkIGlucHV0czogQ29tbWFuZE9wdGlvbnM8ST4gPSB7fSBhcyB1bmtub3duIGFzIENvbW1hbmRPcHRpb25zPEk+LFxuICAgIHByb3RlY3RlZCByZXF1aXJlbWVudHM6IHN0cmluZ1tdID0gW11cbiAgKSB7XG4gICAgaWYgKCFDb21tYW5kLmxvZykge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KENvbW1hbmQsIFwibG9nXCIsIHtcbiAgICAgICAgd3JpdGFibGU6IGZhbHNlLFxuICAgICAgICB2YWx1ZTogTG9nZ2luZy5mb3IoQ29tbWFuZC5uYW1lKSxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5sb2cgPSBDb21tYW5kLmxvZztcbiAgICB9XG4gICAgdGhpcy5sb2cgPSBDb21tYW5kLmxvZy5mb3IodGhpcy5uYW1lKTtcbiAgICB0aGlzLmlucHV0cyA9IE9iamVjdC5hc3NpZ24oe30sIERlZmF1bHRDb21tYW5kT3B0aW9ucywgaW5wdXRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJvdGVjdGVkXG4gICAqIEBhc3luY1xuICAgKiBAZGVzY3JpcHRpb24gQ2hlY2tzIGlmIGFsbCByZXF1aXJlZCBkZXBlbmRlbmNpZXMgYXJlIHByZXNlbnQuXG4gICAqIEBzdW1tYXJ5IFJldHJpZXZlcyB0aGUgbGlzdCBvZiBkZXBlbmRlbmNpZXMgYW5kIGNvbXBhcmVzIGl0IGFnYWluc3QgdGhlIHJlcXVpcmVkIGRlcGVuZGVuY2llcyBmb3IgdGhlIGNvbW1hbmQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBjaGVjayBpcyBjb21wbGV0ZS5cbiAgICpcbiAgICogQG1lcm1haWRcbiAgICogc2VxdWVuY2VEaWFncmFtXG4gICAqICAgcGFydGljaXBhbnQgQ29tbWFuZFxuICAgKiAgIHBhcnRpY2lwYW50IGdldERlcGVuZGVuY2llc1xuICAgKiAgIHBhcnRpY2lwYW50IFNldFxuICAgKiAgIENvbW1hbmQtPj5nZXREZXBlbmRlbmNpZXM6IENhbGxcbiAgICogICBnZXREZXBlbmRlbmNpZXMtLT4+Q29tbWFuZDogUmV0dXJuIHtwcm9kLCBkZXYsIHBlZXJ9XG4gICAqICAgQ29tbWFuZC0+PlNldDogQ3JlYXRlIFNldCBmcm9tIHByb2QsIGRldiwgcGVlclxuICAgKiAgIFNldC0tPj5Db21tYW5kOiBSZXR1cm4gdW5pcXVlIGRlcGVuZGVuY2llc1xuICAgKiAgIENvbW1hbmQtPj5Db21tYW5kOiBDb21wYXJlIGFnYWluc3QgcmVxdWlyZW1lbnRzXG4gICAqICAgYWx0IE1pc3NpbmcgZGVwZW5kZW5jaWVzXG4gICAqICAgICBDb21tYW5kLT4+Q29tbWFuZDogQWRkIHRvIG1pc3NpbmcgbGlzdFxuICAgKiAgIGVuZFxuICAgKiAgIE5vdGUgb3ZlciBDb21tYW5kOiBJZiBtaXNzaW5nLmxlbmd0aCA+IDAsIGhhbmRsZSBtaXNzaW5nIGRlcGVuZGVuY2llc1xuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIGNoZWNrUmVxdWlyZW1lbnRzKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgcHJvZCwgZGV2LCBwZWVyIH0gPSBhd2FpdCBnZXREZXBlbmRlbmNpZXMoKTtcbiAgICBjb25zdCBtaXNzaW5nID0gW107XG4gICAgY29uc3QgZnVsbExpc3QgPSBBcnJheS5mcm9tKFxuICAgICAgbmV3IFNldChbLi4ucHJvZCwgLi4uZGV2LCAuLi5wZWVyXSkudmFsdWVzKClcbiAgICApLm1hcCgoZCkgPT4gZC5uYW1lKTtcbiAgICBmb3IgKGNvbnN0IGRlcCBvZiB0aGlzLnJlcXVpcmVtZW50cylcbiAgICAgIGlmICghZnVsbExpc3QuaW5jbHVkZXMoZGVwKSkgbWlzc2luZy5wdXNoKGRlcCk7XG5cbiAgICBpZiAoIW1pc3NpbmcubGVuZ3RoKSByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogQHByb3RlY3RlZFxuICAgKiBAZGVzY3JpcHRpb24gUHJvdmlkZXMgaGVscCBpbmZvcm1hdGlvbiBmb3IgdGhlIGNvbW1hbmQuXG4gICAqIEBzdW1tYXJ5IFRoaXMgbWV0aG9kIHNob3VsZCBiZSBvdmVycmlkZGVuIGluIGRlcml2ZWQgY2xhc3NlcyB0byBwcm92aWRlIHNwZWNpZmljIGhlbHAgaW5mb3JtYXRpb24uXG4gICAqIEBwYXJhbSB7UGFyc2VBcmdzUmVzdWx0fSBhcmdzIC0gVGhlIHBhcnNlZCBjb21tYW5kLWxpbmUgYXJndW1lbnRzLlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgcHJvdGVjdGVkIGhlbHAoYXJnczogUGFyc2VBcmdzUmVzdWx0KTogdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMubG9nLmluZm8oXG4gICAgICBgVGhpcyBpcyBoZWxwLiBJJ20gbm8gdXNlIGJlY2F1c2UgSSBzaG91bGQgaGF2ZSBiZWVuIG92ZXJyaWRkZW4uYFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQHByb3RlY3RlZFxuICAgKiBAYWJzdHJhY3RcbiAgICogQGRlc2NyaXB0aW9uIFJ1bnMgdGhlIGNvbW1hbmQgd2l0aCB0aGUgcHJvdmlkZWQgYXJndW1lbnRzLlxuICAgKiBAc3VtbWFyeSBUaGlzIG1ldGhvZCBzaG91bGQgYmUgaW1wbGVtZW50ZWQgaW4gZGVyaXZlZCBjbGFzc2VzIHRvIGRlZmluZSB0aGUgY29tbWFuZCdzIGJlaGF2aW9yLlxuICAgKiBAcGFyYW0ge1BhcnNlQXJnc1Jlc3VsdH0gYW5zd2VycyAtIFRoZSBwYXJzZWQgY29tbWFuZC1saW5lIGFyZ3VtZW50cy5cbiAgICogQHJldHVybnMge1Byb21pc2U8UiB8IHN0cmluZyB8IHZvaWQ+fSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBjb21tYW5kJ3MgcmVzdWx0LlxuICAgKi9cbiAgcHJvdGVjdGVkIGFic3RyYWN0IHJ1bjxSPihcbiAgICBhbnN3ZXJzOiBMb2dnaW5nQ29uZmlnICZcbiAgICAgIHR5cGVvZiBEZWZhdWx0Q29tbWFuZFZhbHVlcyAmIHsgW2sgaW4ga2V5b2YgSV06IHVua25vd24gfVxuICApOiBQcm9taXNlPFIgfCBzdHJpbmcgfCB2b2lkPjtcblxuICAvKipcbiAgICogQGFzeW5jXG4gICAqIEBkZXNjcmlwdGlvbiBFeGVjdXRlcyB0aGUgY29tbWFuZC5cbiAgICogQHN1bW1hcnkgVGhpcyBtZXRob2QgaGFuZGxlcyB0aGUgb3ZlcmFsbCBleGVjdXRpb24gZmxvdyBvZiB0aGUgY29tbWFuZCwgaW5jbHVkaW5nIHBhcnNpbmcgYXJndW1lbnRzLFxuICAgKiBzZXR0aW5nIHVwIGxvZ2dpbmcsIGNoZWNraW5nIGZvciB2ZXJzaW9uIG9yIGhlbHAgcmVxdWVzdHMsIGFuZCBydW5uaW5nIHRoZSBjb21tYW5kLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxSIHwgc3RyaW5nIHwgdm9pZD59IEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIGNvbW1hbmQncyByZXN1bHQuXG4gICAqXG4gICAqIEBtZXJtYWlkXG4gICAqIHNlcXVlbmNlRGlhZ3JhbVxuICAgKiAgIHBhcnRpY2lwYW50IENvbW1hbmRcbiAgICogICBwYXJ0aWNpcGFudCBVc2VySW5wdXRcbiAgICogICBwYXJ0aWNpcGFudCBMb2dnaW5nXG4gICAqICAgcGFydGljaXBhbnQgZ2V0UGFja2FnZVZlcnNpb25cbiAgICogICBwYXJ0aWNpcGFudCBwcmludEJhbm5lclxuICAgKiAgIENvbW1hbmQtPj5Vc2VySW5wdXQ6IHBhcnNlQXJncyhpbnB1dHMpXG4gICAqICAgVXNlcklucHV0LS0+PkNvbW1hbmQ6IFJldHVybiBQYXJzZUFyZ3NSZXN1bHRcbiAgICogICBDb21tYW5kLT4+Q29tbWFuZDogUHJvY2VzcyBvcHRpb25zXG4gICAqICAgQ29tbWFuZC0+PkxvZ2dpbmc6IHNldENvbmZpZyhvcHRpb25zKVxuICAgKiAgIGFsdCB2ZXJzaW9uIHJlcXVlc3RlZFxuICAgKiAgICAgQ29tbWFuZC0+PmdldFBhY2thZ2VWZXJzaW9uOiBDYWxsXG4gICAqICAgICBnZXRQYWNrYWdlVmVyc2lvbi0tPj5Db21tYW5kOiBSZXR1cm4gdmVyc2lvblxuICAgKiAgIGVsc2UgaGVscCByZXF1ZXN0ZWRcbiAgICogICAgIENvbW1hbmQtPj5Db21tYW5kOiBoZWxwKGFyZ3MpXG4gICAqICAgZWxzZSBiYW5uZXIgcmVxdWVzdGVkXG4gICAqICAgICBDb21tYW5kLT4+cHJpbnRCYW5uZXI6IENhbGxcbiAgICogICBlbmRcbiAgICogICBDb21tYW5kLT4+Q29tbWFuZDogcnVuKGFyZ3MpXG4gICAqICAgYWx0IGVycm9yIG9jY3Vyc1xuICAgKiAgICAgQ29tbWFuZC0+PkNvbW1hbmQ6IExvZyBlcnJvclxuICAgKiAgIGVuZFxuICAgKiAgIENvbW1hbmQtLT4+Q29tbWFuZDogUmV0dXJuIHJlc3VsdFxuICAgKi9cbiAgYXN5bmMgZXhlY3V0ZSgpOiBQcm9taXNlPFIgfCBzdHJpbmcgfCB2b2lkPiB7XG4gICAgY29uc3QgYXJnczogUGFyc2VBcmdzUmVzdWx0ID0gVXNlcklucHV0LnBhcnNlQXJncyh0aGlzLmlucHV0cyk7XG4gICAgY29uc3QgZW52ID0gRW52aXJvbm1lbnQuYWNjdW11bGF0ZShEZWZhdWx0TG9nZ2luZ0NvbmZpZylcbiAgICAgIC5hY2N1bXVsYXRlKERlZmF1bHRDb21tYW5kVmFsdWVzKVxuICAgICAgLmFjY3VtdWxhdGUoYXJncy52YWx1ZXMpO1xuICAgIGNvbnN0IHsgdGltZXN0YW1wLCB2ZXJib3NlLCB2ZXJzaW9uLCBoZWxwLCBsb2dMZXZlbCwgbG9nU3R5bGUsIGJhbm5lciB9ID1cbiAgICAgIGVudjtcblxuICAgIHRoaXMubG9nLnNldENvbmZpZyh7XG4gICAgICAuLi5lbnYsXG4gICAgICB0aW1lc3RhbXA6ICEhdGltZXN0YW1wLFxuICAgICAgbGV2ZWw6IGxvZ0xldmVsIGFzIExvZ0xldmVsLFxuICAgICAgc3R5bGU6ICEhbG9nU3R5bGUsXG4gICAgICB2ZXJib3NlOiAodmVyYm9zZSBhcyBudW1iZXIpIHx8IDAsXG4gICAgfSk7XG5cbiAgICBpZiAodmVyc2lvbikge1xuICAgICAgcmV0dXJuIGdldFBhY2thZ2VWZXJzaW9uKCk7XG4gICAgfVxuXG4gICAgaWYgKGhlbHApIHtcbiAgICAgIHJldHVybiB0aGlzLmhlbHAoYXJncyk7XG4gICAgfVxuXG4gICAgaWYgKGJhbm5lcilcbiAgICAgIHByaW50QmFubmVyKFxuICAgICAgICB0aGlzLmxvZy5mb3IocHJpbnRCYW5uZXIsIHtcbiAgICAgICAgICB0aW1lc3RhbXA6IGZhbHNlLFxuICAgICAgICAgIHN0eWxlOiBmYWxzZSxcbiAgICAgICAgICBjb250ZXh0OiBmYWxzZSxcbiAgICAgICAgICBsb2dMZXZlbDogZmFsc2UsXG4gICAgICAgIH0pXG4gICAgICApO1xuXG4gICAgbGV0IHJlc3VsdDtcbiAgICB0cnkge1xuICAgICAgcmVzdWx0ID0gYXdhaXQgdGhpcy5ydW4oZW52KTtcbiAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgICB0aGlzLmxvZy5lcnJvcihgRXJyb3Igd2hpbGUgcnVubmluZyBwcm92aWRlZCBjbGkgZnVuY3Rpb246ICR7ZX1gKTtcbiAgICAgIHRocm93IGU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdCBhcyBSO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./tag-release.cjs"), exports);
18
+ __exportStar(require("./update-scripts.cjs"), exports);
19
+
20
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9jbGkvY29tbWFuZHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGdEQUE4QjtBQUM5QixtREFBaUMiLCJmaWxlIjoiY2xpL2NvbW1hbmRzL2luZGV4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSBcIi4vdGFnLXJlbGVhc2VcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3VwZGF0ZS1zY3JpcHRzXCI7XG4iXX0=
@@ -0,0 +1,168 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ReleaseScript = void 0;
4
+ const utils_1 = require("../../utils/utils.cjs");
5
+ const constants_1 = require("../../utils/constants.cjs");
6
+ const input_1 = require("../../input/input.cjs");
7
+ const command_1 = require("../command.cjs");
8
+ const options = {
9
+ ci: {
10
+ type: "boolean",
11
+ default: true,
12
+ },
13
+ message: {
14
+ type: "string",
15
+ short: "m",
16
+ },
17
+ tag: {
18
+ type: "string",
19
+ short: "t",
20
+ default: undefined,
21
+ },
22
+ };
23
+ /**
24
+ * @class ReleaseScript
25
+ * @extends {Command}
26
+ * @cavegory scripts
27
+ * @description A command-line script for managing releases and version updates.
28
+ * @summary This script automates the process of creating and pushing new releases. It handles version updates,
29
+ * commit messages, and optionally publishes to NPM. The script supports semantic versioning and can work in both CI and non-CI environments.
30
+ *
31
+ * @param {Object} options - Configuration options for the script
32
+ * @param {boolean} options.ci - Whether the script is running in a CI environment (default: true)
33
+ * @param {string} options.message - The release message (short: 'm')
34
+ * @param {string} options.tag - The version tag to use (short: 't', default: undefined)
35
+ */
36
+ class ReleaseScript extends command_1.Command {
37
+ constructor() {
38
+ super("ReleaseScript", options);
39
+ }
40
+ /**
41
+ * @description Prepares the version for the release.
42
+ * @summary This method validates the provided tag or prompts the user for a new one if not provided or invalid.
43
+ * It also displays the latest git tags for reference.
44
+ * @param {string} tag - The version tag to prepare
45
+ * @returns {Promise<string>} The prepared version tag
46
+ *
47
+ * @mermaid
48
+ * sequenceDiagram
49
+ * participant R as ReleaseScript
50
+ * participant T as TestVersion
51
+ * participant U as UserInput
52
+ * participant G as Git
53
+ * R->>T: testVersion(tag)
54
+ * alt tag is valid
55
+ * T-->>R: return tag
56
+ * else tag is invalid or not provided
57
+ * R->>G: List latest git tags
58
+ * R->>U: Prompt for new tag
59
+ * U-->>R: return new tag
60
+ * end
61
+ */
62
+ async prepareVersion(tag) {
63
+ const log = this.log.for(this.prepareVersion);
64
+ tag = this.testVersion(tag || "");
65
+ if (!tag) {
66
+ log.verbose("No release message provided. Prompting for one:");
67
+ log.info(`Listing latest git tags:`);
68
+ await (0, utils_1.runCommand)("git tag --sort=-taggerdate | head -n 5").promise;
69
+ return await input_1.UserInput.insistForText("tag", "Enter the new tag number (accepts v*.*.*[-...])", (val) => !!val.toString().match(/^v[0-9]+\.[0-9]+.[0-9]+(-[0-9a-zA-Z-]+)?$/));
70
+ }
71
+ return tag;
72
+ }
73
+ /**
74
+ * @description Tests if the provided version is valid.
75
+ * @summary This method checks if the version is a valid semantic version or a predefined update type (PATCH, MINOR, MAJOR).
76
+ * @param {string} version - The version to test
77
+ * @returns {string | undefined} The validated version or undefined if invalid
78
+ */
79
+ testVersion(version) {
80
+ const log = this.log.for(this.testVersion);
81
+ version = version.trim().toLowerCase();
82
+ switch (version) {
83
+ case constants_1.SemVersion.PATCH:
84
+ case constants_1.SemVersion.MINOR:
85
+ case constants_1.SemVersion.MAJOR:
86
+ log.verbose(`Using provided SemVer update: ${version}`, 1);
87
+ return version;
88
+ default:
89
+ log.verbose(`Testing provided version for SemVer compatibility: ${version}`, 1);
90
+ if (!new RegExp(constants_1.SemVersionRegex).test(version)) {
91
+ log.debug(`Invalid version number: ${version}`);
92
+ return undefined;
93
+ }
94
+ log.verbose(`version approved: ${version}`, 1);
95
+ return version;
96
+ }
97
+ }
98
+ /**
99
+ * @description Prepares the release message.
100
+ * @summary This method either returns the provided message or prompts the user for a new one if not provided.
101
+ * @param {string} [message] - The release message
102
+ * @returns {Promise<string>} The prepared release message
103
+ */
104
+ async prepareMessage(message) {
105
+ const log = this.log.for(this.prepareMessage);
106
+ if (!message) {
107
+ log.verbose("No release message provided. Prompting for one");
108
+ return await input_1.UserInput.insistForText("message", "What should be the release message/ticket?", (val) => !!val && val.toString().length > 5);
109
+ }
110
+ return message;
111
+ }
112
+ /**
113
+ * @description Runs the release script.
114
+ * @summary This method orchestrates the entire release process, including version preparation, message creation,
115
+ * git operations, and npm publishing (if not in CI environment).
116
+ * @param {ParseArgsResult} args - The parsed command-line arguments
117
+ * @returns {Promise<void>}
118
+ *
119
+ * @mermaid
120
+ * sequenceDiagram
121
+ * participant R as ReleaseScript
122
+ * participant V as PrepareVersion
123
+ * participant M as PrepareMessage
124
+ * participant N as NPM
125
+ * participant G as Git
126
+ * participant U as UserInput
127
+ * R->>V: prepareVersion(tag)
128
+ * R->>M: prepareMessage(message)
129
+ * R->>N: Run prepare-release script
130
+ * R->>G: Check git status
131
+ * alt changes exist
132
+ * R->>U: Ask for confirmation
133
+ * U-->>R: Confirm
134
+ * R->>G: Add and commit changes
135
+ * end
136
+ * R->>N: Update npm version
137
+ * R->>G: Push changes and tags
138
+ * alt not CI environment
139
+ * R->>N: Publish to npm
140
+ * end
141
+ */
142
+ async run(args) {
143
+ let result;
144
+ const { ci } = args;
145
+ let { tag, message } = args;
146
+ tag = await this.prepareVersion(tag);
147
+ message = await this.prepareMessage(message);
148
+ result = await (0, utils_1.runCommand)(`npm run prepare-release -- ${tag} ${message}`, {
149
+ cwd: process.cwd(),
150
+ }).promise;
151
+ result = await (0, utils_1.runCommand)("git status --porcelain").promise;
152
+ await result;
153
+ if (result.logs.length &&
154
+ (await input_1.UserInput.askConfirmation("git-changes", "Do you want to push the changes to the remote repository?", true))) {
155
+ await (0, utils_1.runCommand)("git add .").promise;
156
+ await (0, utils_1.runCommand)(`git commit -m "${tag} - ${message} - after release preparation${ci ? "" : constants_1.NoCIFLag}"`).promise;
157
+ }
158
+ await (0, utils_1.runCommand)(`npm version "${tag}" -m "${message}${ci ? "" : constants_1.NoCIFLag}"`).promise;
159
+ await (0, utils_1.runCommand)("git push --follow-tags").promise;
160
+ if (!ci) {
161
+ await (0, utils_1.runCommand)("NPM_TOKEN=$(cat .npmtoken) npm publish --access public")
162
+ .promise;
163
+ }
164
+ }
165
+ }
166
+ exports.ReleaseScript = ReleaseScript;
167
+
168
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9jbGkvY29tbWFuZHMvdGFnLXJlbGVhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBQStDO0FBQy9DLHFEQUE4RTtBQUM5RSw2Q0FBOEM7QUFDOUMsd0NBQXFDO0FBSXJDLE1BQU0sT0FBTyxHQUFHO0lBQ2QsRUFBRSxFQUFFO1FBQ0YsSUFBSSxFQUFFLFNBQVM7UUFDZixPQUFPLEVBQUUsSUFBSTtLQUNkO0lBQ0QsT0FBTyxFQUFFO1FBQ1AsSUFBSSxFQUFFLFFBQVE7UUFDZCxLQUFLLEVBQUUsR0FBRztLQUNYO0lBQ0QsR0FBRyxFQUFFO1FBQ0gsSUFBSSxFQUFFLFFBQVE7UUFDZCxLQUFLLEVBQUUsR0FBRztRQUNWLE9BQU8sRUFBRSxTQUFTO0tBQ25CO0NBQ0YsQ0FBQztBQUVGOzs7Ozs7Ozs7Ozs7R0FZRztBQUNILE1BQWEsYUFBYyxTQUFRLGlCQUE2QjtJQUM5RDtRQUNFLEtBQUssQ0FBQyxlQUFlLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7T0FxQkc7SUFDSCxLQUFLLENBQUMsY0FBYyxDQUFDLEdBQVk7UUFDL0IsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzlDLEdBQUcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFFLEdBQWMsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUM5QyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDVCxHQUFHLENBQUMsT0FBTyxDQUFDLGlEQUFpRCxDQUFDLENBQUM7WUFDL0QsR0FBRyxDQUFDLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1lBQ3JDLE1BQU0sSUFBQSxrQkFBVSxFQUFDLHdDQUF3QyxDQUFDLENBQUMsT0FBTyxDQUFDO1lBQ25FLE9BQU8sTUFBTSxpQkFBUyxDQUFDLGFBQWEsQ0FDbEMsS0FBSyxFQUNMLGlEQUFpRCxFQUNqRCxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQ04sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxLQUFLLENBQUMsMkNBQTJDLENBQUMsQ0FDdEUsQ0FBQztRQUNKLENBQUM7UUFDRCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILFdBQVcsQ0FBQyxPQUFlO1FBQ3pCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUMzQyxPQUFPLEdBQUcsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3ZDLFFBQVEsT0FBTyxFQUFFLENBQUM7WUFDaEIsS0FBSyxzQkFBVSxDQUFDLEtBQUssQ0FBQztZQUN0QixLQUFLLHNCQUFVLENBQUMsS0FBSyxDQUFDO1lBQ3RCLEtBQUssc0JBQVUsQ0FBQyxLQUFLO2dCQUNuQixHQUFHLENBQUMsT0FBTyxDQUFDLGlDQUFpQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDM0QsT0FBTyxPQUFPLENBQUM7WUFDakI7Z0JBQ0UsR0FBRyxDQUFDLE9BQU8sQ0FDVCxzREFBc0QsT0FBTyxFQUFFLEVBQy9ELENBQUMsQ0FDRixDQUFDO2dCQUNGLElBQUksQ0FBQyxJQUFJLE1BQU0sQ0FBQywyQkFBZSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7b0JBQy9DLEdBQUcsQ0FBQyxLQUFLLENBQUMsMkJBQTJCLE9BQU8sRUFBRSxDQUFDLENBQUM7b0JBQ2hELE9BQU8sU0FBUyxDQUFDO2dCQUNuQixDQUFDO2dCQUNELEdBQUcsQ0FBQyxPQUFPLENBQUMscUJBQXFCLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUMvQyxPQUFPLE9BQU8sQ0FBQztRQUNuQixDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsS0FBSyxDQUFDLGNBQWMsQ0FBQyxPQUFnQjtRQUNuQyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDOUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2IsR0FBRyxDQUFDLE9BQU8sQ0FBQyxnREFBZ0QsQ0FBQyxDQUFDO1lBQzlELE9BQU8sTUFBTSxpQkFBUyxDQUFDLGFBQWEsQ0FDbEMsU0FBUyxFQUNULDRDQUE0QyxFQUM1QyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FDNUMsQ0FBQztRQUNKLENBQUM7UUFDRCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O09BNkJHO0lBQ0gsS0FBSyxDQUFDLEdBQUcsQ0FDUCxJQUN3RTtRQUV4RSxJQUFJLE1BQVcsQ0FBQztRQUNoQixNQUFNLEVBQUUsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDO1FBQ3BCLElBQUksRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDO1FBQzVCLEdBQUcsR0FBRyxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBYSxDQUFDLENBQUM7UUFDL0MsT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFpQixDQUFDLENBQUM7UUFDdkQsTUFBTSxHQUFHLE1BQU0sSUFBQSxrQkFBVSxFQUFDLDhCQUE4QixHQUFHLElBQUksT0FBTyxFQUFFLEVBQUU7WUFDeEUsR0FBRyxFQUFFLE9BQU8sQ0FBQyxHQUFHLEVBQUU7U0FDbkIsQ0FBQyxDQUFDLE9BQU8sQ0FBQztRQUNYLE1BQU0sR0FBRyxNQUFNLElBQUEsa0JBQVUsRUFBQyx3QkFBd0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQztRQUM1RCxNQUFNLE1BQU0sQ0FBQztRQUNiLElBQ0UsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNO1lBQ2xCLENBQUMsTUFBTSxpQkFBUyxDQUFDLGVBQWUsQ0FDOUIsYUFBYSxFQUNiLDJEQUEyRCxFQUMzRCxJQUFJLENBQ0wsQ0FBQyxFQUNGLENBQUM7WUFDRCxNQUFNLElBQUEsa0JBQVUsRUFBQyxXQUFXLENBQUMsQ0FBQyxPQUFPLENBQUM7WUFDdEMsTUFBTSxJQUFBLGtCQUFVLEVBQ2Qsa0JBQWtCLEdBQUcsTUFBTSxPQUFPLCtCQUErQixFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsb0JBQVEsR0FBRyxDQUN2RixDQUFDLE9BQU8sQ0FBQztRQUNaLENBQUM7UUFDRCxNQUFNLElBQUEsa0JBQVUsRUFDZCxnQkFBZ0IsR0FBRyxTQUFTLE9BQU8sR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsb0JBQVEsR0FBRyxDQUM1RCxDQUFDLE9BQU8sQ0FBQztRQUNWLE1BQU0sSUFBQSxrQkFBVSxFQUFDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDO1FBQ25ELElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNSLE1BQU0sSUFBQSxrQkFBVSxFQUFDLHdEQUF3RCxDQUFDO2lCQUN2RSxPQUFPLENBQUM7UUFDYixDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBOUpELHNDQThKQyIsImZpbGUiOiJjbGkvY29tbWFuZHMvdGFnLXJlbGVhc2UuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBydW5Db21tYW5kIH0gZnJvbSBcIi4uLy4uL3V0aWxzL3V0aWxzXCI7XG5pbXBvcnQgeyBOb0NJRkxhZywgU2VtVmVyc2lvbiwgU2VtVmVyc2lvblJlZ2V4IH0gZnJvbSBcIi4uLy4uL3V0aWxzL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgVXNlcklucHV0IH0gZnJvbSBcIi4uLy4uL2lucHV0L2lucHV0XCI7XG5pbXBvcnQgeyBDb21tYW5kIH0gZnJvbSBcIi4uL2NvbW1hbmRcIjtcbmltcG9ydCB7IExvZ2dpbmdDb25maWcgfSBmcm9tIFwiLi4vLi4vb3V0cHV0XCI7XG5pbXBvcnQgeyBEZWZhdWx0Q29tbWFuZFZhbHVlcyB9IGZyb20gXCIuLi9pbmRleFwiO1xuXG5jb25zdCBvcHRpb25zID0ge1xuICBjaToge1xuICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICAgIGRlZmF1bHQ6IHRydWUsXG4gIH0sXG4gIG1lc3NhZ2U6IHtcbiAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgIHNob3J0OiBcIm1cIixcbiAgfSxcbiAgdGFnOiB7XG4gICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICBzaG9ydDogXCJ0XCIsXG4gICAgZGVmYXVsdDogdW5kZWZpbmVkLFxuICB9LFxufTtcblxuLyoqXG4gKiBAY2xhc3MgUmVsZWFzZVNjcmlwdFxuICogQGV4dGVuZHMge0NvbW1hbmR9XG4gKiBAY2F2ZWdvcnkgc2NyaXB0c1xuICogQGRlc2NyaXB0aW9uIEEgY29tbWFuZC1saW5lIHNjcmlwdCBmb3IgbWFuYWdpbmcgcmVsZWFzZXMgYW5kIHZlcnNpb24gdXBkYXRlcy5cbiAqIEBzdW1tYXJ5IFRoaXMgc2NyaXB0IGF1dG9tYXRlcyB0aGUgcHJvY2VzcyBvZiBjcmVhdGluZyBhbmQgcHVzaGluZyBuZXcgcmVsZWFzZXMuIEl0IGhhbmRsZXMgdmVyc2lvbiB1cGRhdGVzLFxuICogY29tbWl0IG1lc3NhZ2VzLCBhbmQgb3B0aW9uYWxseSBwdWJsaXNoZXMgdG8gTlBNLiBUaGUgc2NyaXB0IHN1cHBvcnRzIHNlbWFudGljIHZlcnNpb25pbmcgYW5kIGNhbiB3b3JrIGluIGJvdGggQ0kgYW5kIG5vbi1DSSBlbnZpcm9ubWVudHMuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBDb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBzY3JpcHRcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gb3B0aW9ucy5jaSAtIFdoZXRoZXIgdGhlIHNjcmlwdCBpcyBydW5uaW5nIGluIGEgQ0kgZW52aXJvbm1lbnQgKGRlZmF1bHQ6IHRydWUpXG4gKiBAcGFyYW0ge3N0cmluZ30gb3B0aW9ucy5tZXNzYWdlIC0gVGhlIHJlbGVhc2UgbWVzc2FnZSAoc2hvcnQ6ICdtJylcbiAqIEBwYXJhbSB7c3RyaW5nfSBvcHRpb25zLnRhZyAtIFRoZSB2ZXJzaW9uIHRhZyB0byB1c2UgKHNob3J0OiAndCcsIGRlZmF1bHQ6IHVuZGVmaW5lZClcbiAqL1xuZXhwb3J0IGNsYXNzIFJlbGVhc2VTY3JpcHQgZXh0ZW5kcyBDb21tYW5kPHR5cGVvZiBvcHRpb25zLCB2b2lkPiB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFwiUmVsZWFzZVNjcmlwdFwiLCBvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUHJlcGFyZXMgdGhlIHZlcnNpb24gZm9yIHRoZSByZWxlYXNlLlxuICAgKiBAc3VtbWFyeSBUaGlzIG1ldGhvZCB2YWxpZGF0ZXMgdGhlIHByb3ZpZGVkIHRhZyBvciBwcm9tcHRzIHRoZSB1c2VyIGZvciBhIG5ldyBvbmUgaWYgbm90IHByb3ZpZGVkIG9yIGludmFsaWQuXG4gICAqIEl0IGFsc28gZGlzcGxheXMgdGhlIGxhdGVzdCBnaXQgdGFncyBmb3IgcmVmZXJlbmNlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFnIC0gVGhlIHZlcnNpb24gdGFnIHRvIHByZXBhcmVcbiAgICogQHJldHVybnMge1Byb21pc2U8c3RyaW5nPn0gVGhlIHByZXBhcmVkIHZlcnNpb24gdGFnXG4gICAqXG4gICAqIEBtZXJtYWlkXG4gICAqIHNlcXVlbmNlRGlhZ3JhbVxuICAgKiAgIHBhcnRpY2lwYW50IFIgYXMgUmVsZWFzZVNjcmlwdFxuICAgKiAgIHBhcnRpY2lwYW50IFQgYXMgVGVzdFZlcnNpb25cbiAgICogICBwYXJ0aWNpcGFudCBVIGFzIFVzZXJJbnB1dFxuICAgKiAgIHBhcnRpY2lwYW50IEcgYXMgR2l0XG4gICAqICAgUi0+PlQ6IHRlc3RWZXJzaW9uKHRhZylcbiAgICogICBhbHQgdGFnIGlzIHZhbGlkXG4gICAqICAgICBULS0+PlI6IHJldHVybiB0YWdcbiAgICogICBlbHNlIHRhZyBpcyBpbnZhbGlkIG9yIG5vdCBwcm92aWRlZFxuICAgKiAgICAgUi0+Pkc6IExpc3QgbGF0ZXN0IGdpdCB0YWdzXG4gICAqICAgICBSLT4+VTogUHJvbXB0IGZvciBuZXcgdGFnXG4gICAqICAgICBVLS0+PlI6IHJldHVybiBuZXcgdGFnXG4gICAqICAgZW5kXG4gICAqL1xuICBhc3luYyBwcmVwYXJlVmVyc2lvbih0YWc/OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IGxvZyA9IHRoaXMubG9nLmZvcih0aGlzLnByZXBhcmVWZXJzaW9uKTtcbiAgICB0YWcgPSB0aGlzLnRlc3RWZXJzaW9uKCh0YWcgYXMgc3RyaW5nKSB8fCBcIlwiKTtcbiAgICBpZiAoIXRhZykge1xuICAgICAgbG9nLnZlcmJvc2UoXCJObyByZWxlYXNlIG1lc3NhZ2UgcHJvdmlkZWQuIFByb21wdGluZyBmb3Igb25lOlwiKTtcbiAgICAgIGxvZy5pbmZvKGBMaXN0aW5nIGxhdGVzdCBnaXQgdGFnczpgKTtcbiAgICAgIGF3YWl0IHJ1bkNvbW1hbmQoXCJnaXQgdGFnIC0tc29ydD0tdGFnZ2VyZGF0ZSB8IGhlYWQgLW4gNVwiKS5wcm9taXNlO1xuICAgICAgcmV0dXJuIGF3YWl0IFVzZXJJbnB1dC5pbnNpc3RGb3JUZXh0KFxuICAgICAgICBcInRhZ1wiLFxuICAgICAgICBcIkVudGVyIHRoZSBuZXcgdGFnIG51bWJlciAoYWNjZXB0cyB2Ki4qLipbLS4uLl0pXCIsXG4gICAgICAgICh2YWwpID0+XG4gICAgICAgICAgISF2YWwudG9TdHJpbmcoKS5tYXRjaCgvXnZbMC05XStcXC5bMC05XSsuWzAtOV0rKC1bMC05YS16QS1aLV0rKT8kLylcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB0YWc7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRlc3RzIGlmIHRoZSBwcm92aWRlZCB2ZXJzaW9uIGlzIHZhbGlkLlxuICAgKiBAc3VtbWFyeSBUaGlzIG1ldGhvZCBjaGVja3MgaWYgdGhlIHZlcnNpb24gaXMgYSB2YWxpZCBzZW1hbnRpYyB2ZXJzaW9uIG9yIGEgcHJlZGVmaW5lZCB1cGRhdGUgdHlwZSAoUEFUQ0gsIE1JTk9SLCBNQUpPUikuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB2ZXJzaW9uIC0gVGhlIHZlcnNpb24gdG8gdGVzdFxuICAgKiBAcmV0dXJucyB7c3RyaW5nIHwgdW5kZWZpbmVkfSBUaGUgdmFsaWRhdGVkIHZlcnNpb24gb3IgdW5kZWZpbmVkIGlmIGludmFsaWRcbiAgICovXG4gIHRlc3RWZXJzaW9uKHZlcnNpb246IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgbG9nID0gdGhpcy5sb2cuZm9yKHRoaXMudGVzdFZlcnNpb24pO1xuICAgIHZlcnNpb24gPSB2ZXJzaW9uLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICAgIHN3aXRjaCAodmVyc2lvbikge1xuICAgICAgY2FzZSBTZW1WZXJzaW9uLlBBVENIOlxuICAgICAgY2FzZSBTZW1WZXJzaW9uLk1JTk9SOlxuICAgICAgY2FzZSBTZW1WZXJzaW9uLk1BSk9SOlxuICAgICAgICBsb2cudmVyYm9zZShgVXNpbmcgcHJvdmlkZWQgU2VtVmVyIHVwZGF0ZTogJHt2ZXJzaW9ufWAsIDEpO1xuICAgICAgICByZXR1cm4gdmVyc2lvbjtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGxvZy52ZXJib3NlKFxuICAgICAgICAgIGBUZXN0aW5nIHByb3ZpZGVkIHZlcnNpb24gZm9yIFNlbVZlciBjb21wYXRpYmlsaXR5OiAke3ZlcnNpb259YCxcbiAgICAgICAgICAxXG4gICAgICAgICk7XG4gICAgICAgIGlmICghbmV3IFJlZ0V4cChTZW1WZXJzaW9uUmVnZXgpLnRlc3QodmVyc2lvbikpIHtcbiAgICAgICAgICBsb2cuZGVidWcoYEludmFsaWQgdmVyc2lvbiBudW1iZXI6ICR7dmVyc2lvbn1gKTtcbiAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGxvZy52ZXJib3NlKGB2ZXJzaW9uIGFwcHJvdmVkOiAke3ZlcnNpb259YCwgMSk7XG4gICAgICAgIHJldHVybiB2ZXJzaW9uO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUHJlcGFyZXMgdGhlIHJlbGVhc2UgbWVzc2FnZS5cbiAgICogQHN1bW1hcnkgVGhpcyBtZXRob2QgZWl0aGVyIHJldHVybnMgdGhlIHByb3ZpZGVkIG1lc3NhZ2Ugb3IgcHJvbXB0cyB0aGUgdXNlciBmb3IgYSBuZXcgb25lIGlmIG5vdCBwcm92aWRlZC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFttZXNzYWdlXSAtIFRoZSByZWxlYXNlIG1lc3NhZ2VcbiAgICogQHJldHVybnMge1Byb21pc2U8c3RyaW5nPn0gVGhlIHByZXBhcmVkIHJlbGVhc2UgbWVzc2FnZVxuICAgKi9cbiAgYXN5bmMgcHJlcGFyZU1lc3NhZ2UobWVzc2FnZT86IHN0cmluZykge1xuICAgIGNvbnN0IGxvZyA9IHRoaXMubG9nLmZvcih0aGlzLnByZXBhcmVNZXNzYWdlKTtcbiAgICBpZiAoIW1lc3NhZ2UpIHtcbiAgICAgIGxvZy52ZXJib3NlKFwiTm8gcmVsZWFzZSBtZXNzYWdlIHByb3ZpZGVkLiBQcm9tcHRpbmcgZm9yIG9uZVwiKTtcbiAgICAgIHJldHVybiBhd2FpdCBVc2VySW5wdXQuaW5zaXN0Rm9yVGV4dChcbiAgICAgICAgXCJtZXNzYWdlXCIsXG4gICAgICAgIFwiV2hhdCBzaG91bGQgYmUgdGhlIHJlbGVhc2UgbWVzc2FnZS90aWNrZXQ/XCIsXG4gICAgICAgICh2YWwpID0+ICEhdmFsICYmIHZhbC50b1N0cmluZygpLmxlbmd0aCA+IDVcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBSdW5zIHRoZSByZWxlYXNlIHNjcmlwdC5cbiAgICogQHN1bW1hcnkgVGhpcyBtZXRob2Qgb3JjaGVzdHJhdGVzIHRoZSBlbnRpcmUgcmVsZWFzZSBwcm9jZXNzLCBpbmNsdWRpbmcgdmVyc2lvbiBwcmVwYXJhdGlvbiwgbWVzc2FnZSBjcmVhdGlvbixcbiAgICogZ2l0IG9wZXJhdGlvbnMsIGFuZCBucG0gcHVibGlzaGluZyAoaWYgbm90IGluIENJIGVudmlyb25tZW50KS5cbiAgICogQHBhcmFtIHtQYXJzZUFyZ3NSZXN1bHR9IGFyZ3MgLSBUaGUgcGFyc2VkIGNvbW1hbmQtbGluZSBhcmd1bWVudHNcbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAqXG4gICAqIEBtZXJtYWlkXG4gICAqIHNlcXVlbmNlRGlhZ3JhbVxuICAgKiAgIHBhcnRpY2lwYW50IFIgYXMgUmVsZWFzZVNjcmlwdFxuICAgKiAgIHBhcnRpY2lwYW50IFYgYXMgUHJlcGFyZVZlcnNpb25cbiAgICogICBwYXJ0aWNpcGFudCBNIGFzIFByZXBhcmVNZXNzYWdlXG4gICAqICAgcGFydGljaXBhbnQgTiBhcyBOUE1cbiAgICogICBwYXJ0aWNpcGFudCBHIGFzIEdpdFxuICAgKiAgIHBhcnRpY2lwYW50IFUgYXMgVXNlcklucHV0XG4gICAqICAgUi0+PlY6IHByZXBhcmVWZXJzaW9uKHRhZylcbiAgICogICBSLT4+TTogcHJlcGFyZU1lc3NhZ2UobWVzc2FnZSlcbiAgICogICBSLT4+TjogUnVuIHByZXBhcmUtcmVsZWFzZSBzY3JpcHRcbiAgICogICBSLT4+RzogQ2hlY2sgZ2l0IHN0YXR1c1xuICAgKiAgIGFsdCBjaGFuZ2VzIGV4aXN0XG4gICAqICAgICBSLT4+VTogQXNrIGZvciBjb25maXJtYXRpb25cbiAgICogICAgIFUtLT4+UjogQ29uZmlybVxuICAgKiAgICAgUi0+Pkc6IEFkZCBhbmQgY29tbWl0IGNoYW5nZXNcbiAgICogICBlbmRcbiAgICogICBSLT4+TjogVXBkYXRlIG5wbSB2ZXJzaW9uXG4gICAqICAgUi0+Pkc6IFB1c2ggY2hhbmdlcyBhbmQgdGFnc1xuICAgKiAgIGFsdCBub3QgQ0kgZW52aXJvbm1lbnRcbiAgICogICAgIFItPj5OOiBQdWJsaXNoIHRvIG5wbVxuICAgKiAgIGVuZFxuICAgKi9cbiAgYXN5bmMgcnVuKFxuICAgIGFyZ3M6IExvZ2dpbmdDb25maWcgJlxuICAgICAgdHlwZW9mIERlZmF1bHRDb21tYW5kVmFsdWVzICYgeyBbayBpbiBrZXlvZiB0eXBlb2Ygb3B0aW9uc106IHVua25vd24gfVxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBsZXQgcmVzdWx0OiBhbnk7XG4gICAgY29uc3QgeyBjaSB9ID0gYXJncztcbiAgICBsZXQgeyB0YWcsIG1lc3NhZ2UgfSA9IGFyZ3M7XG4gICAgdGFnID0gYXdhaXQgdGhpcy5wcmVwYXJlVmVyc2lvbih0YWcgYXMgc3RyaW5nKTtcbiAgICBtZXNzYWdlID0gYXdhaXQgdGhpcy5wcmVwYXJlTWVzc2FnZShtZXNzYWdlIGFzIHN0cmluZyk7XG4gICAgcmVzdWx0ID0gYXdhaXQgcnVuQ29tbWFuZChgbnBtIHJ1biBwcmVwYXJlLXJlbGVhc2UgLS0gJHt0YWd9ICR7bWVzc2FnZX1gLCB7XG4gICAgICBjd2Q6IHByb2Nlc3MuY3dkKCksXG4gICAgfSkucHJvbWlzZTtcbiAgICByZXN1bHQgPSBhd2FpdCBydW5Db21tYW5kKFwiZ2l0IHN0YXR1cyAtLXBvcmNlbGFpblwiKS5wcm9taXNlO1xuICAgIGF3YWl0IHJlc3VsdDtcbiAgICBpZiAoXG4gICAgICByZXN1bHQubG9ncy5sZW5ndGggJiZcbiAgICAgIChhd2FpdCBVc2VySW5wdXQuYXNrQ29uZmlybWF0aW9uKFxuICAgICAgICBcImdpdC1jaGFuZ2VzXCIsXG4gICAgICAgIFwiRG8geW91IHdhbnQgdG8gcHVzaCB0aGUgY2hhbmdlcyB0byB0aGUgcmVtb3RlIHJlcG9zaXRvcnk/XCIsXG4gICAgICAgIHRydWVcbiAgICAgICkpXG4gICAgKSB7XG4gICAgICBhd2FpdCBydW5Db21tYW5kKFwiZ2l0IGFkZCAuXCIpLnByb21pc2U7XG4gICAgICBhd2FpdCBydW5Db21tYW5kKFxuICAgICAgICBgZ2l0IGNvbW1pdCAtbSBcIiR7dGFnfSAtICR7bWVzc2FnZX0gLSBhZnRlciByZWxlYXNlIHByZXBhcmF0aW9uJHtjaSA/IFwiXCIgOiBOb0NJRkxhZ31cImBcbiAgICAgICkucHJvbWlzZTtcbiAgICB9XG4gICAgYXdhaXQgcnVuQ29tbWFuZChcbiAgICAgIGBucG0gdmVyc2lvbiBcIiR7dGFnfVwiIC1tIFwiJHttZXNzYWdlfSR7Y2kgPyBcIlwiIDogTm9DSUZMYWd9XCJgXG4gICAgKS5wcm9taXNlO1xuICAgIGF3YWl0IHJ1bkNvbW1hbmQoXCJnaXQgcHVzaCAtLWZvbGxvdy10YWdzXCIpLnByb21pc2U7XG4gICAgaWYgKCFjaSkge1xuICAgICAgYXdhaXQgcnVuQ29tbWFuZChcIk5QTV9UT0tFTj0kKGNhdCAubnBtdG9rZW4pIG5wbSBwdWJsaXNoIC0tYWNjZXNzIHB1YmxpY1wiKVxuICAgICAgICAucHJvbWlzZTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==