@gadgetinc/ggt 1.0.4 → 1.0.5

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 (220) hide show
  1. package/dist/add-4ME2KTJQ.js +84 -0
  2. package/dist/add-4ME2KTJQ.js.map +7 -0
  3. package/dist/build-4BGA4IZE.js +3 -0
  4. package/dist/build-4BGA4IZE.js.map +7 -0
  5. package/dist/chunk-57XALM2W.js +2 -0
  6. package/dist/chunk-57XALM2W.js.map +7 -0
  7. package/dist/chunk-5DLLJX5F.js +11 -0
  8. package/dist/chunk-5DLLJX5F.js.map +7 -0
  9. package/dist/chunk-5WC5D4WL.js +2 -0
  10. package/dist/chunk-5WC5D4WL.js.map +7 -0
  11. package/dist/chunk-BSCZOMV4.js +2 -0
  12. package/dist/chunk-BSCZOMV4.js.map +7 -0
  13. package/dist/chunk-BZY2AIPV.js +57 -0
  14. package/dist/chunk-BZY2AIPV.js.map +7 -0
  15. package/dist/chunk-D2K5XPNJ.js +2 -0
  16. package/dist/chunk-D2K5XPNJ.js.map +7 -0
  17. package/dist/chunk-F3EZ4KS3.js +2 -0
  18. package/dist/chunk-F3EZ4KS3.js.map +7 -0
  19. package/dist/chunk-G3VNV5Z6.js +33 -0
  20. package/dist/chunk-G3VNV5Z6.js.map +7 -0
  21. package/dist/chunk-GA7AL463.js +24 -0
  22. package/dist/chunk-GA7AL463.js.map +7 -0
  23. package/dist/chunk-GOBNB5VT.js +2 -0
  24. package/dist/chunk-GOBNB5VT.js.map +7 -0
  25. package/dist/chunk-HKBXEZNF.js +2 -0
  26. package/dist/chunk-HKBXEZNF.js.map +7 -0
  27. package/{lib/commands/push.js → dist/chunk-IKJVXTZK.js} +7 -48
  28. package/dist/chunk-IKJVXTZK.js.map +7 -0
  29. package/dist/chunk-KGSSHEEC.js +17 -0
  30. package/dist/chunk-KGSSHEEC.js.map +7 -0
  31. package/dist/chunk-KXK37C5D.js +183 -0
  32. package/dist/chunk-KXK37C5D.js.map +7 -0
  33. package/dist/chunk-NJIDVM2C.js +27 -0
  34. package/dist/chunk-NJIDVM2C.js.map +7 -0
  35. package/dist/chunk-Q5N5L6H3.js +6 -0
  36. package/dist/chunk-Q5N5L6H3.js.map +7 -0
  37. package/dist/chunk-QEVWPU3D.js +8 -0
  38. package/dist/chunk-QEVWPU3D.js.map +7 -0
  39. package/dist/chunk-X36GM74C.js +2 -0
  40. package/dist/chunk-X36GM74C.js.map +7 -0
  41. package/dist/chunk-YRP2UZ2I.js +126 -0
  42. package/dist/chunk-YRP2UZ2I.js.map +7 -0
  43. package/dist/deploy-6HOBYPE6.js +30 -0
  44. package/dist/deploy-6HOBYPE6.js.map +7 -0
  45. package/dist/dev-M3WDGK4D.js +57 -0
  46. package/dist/dev-M3WDGK4D.js.map +7 -0
  47. package/dist/esm-BL3OM5UJ.js +33 -0
  48. package/dist/esm-BL3OM5UJ.js.map +7 -0
  49. package/dist/list-725RHWD5.js +11 -0
  50. package/dist/list-725RHWD5.js.map +7 -0
  51. package/dist/login-I4RGMDLE.js +2 -0
  52. package/dist/login-I4RGMDLE.js.map +7 -0
  53. package/dist/logout-UZBACOIX.js +7 -0
  54. package/dist/logout-UZBACOIX.js.map +7 -0
  55. package/dist/main.js +45 -0
  56. package/dist/main.js.map +7 -0
  57. package/dist/open-GWKGQQG3.js +74 -0
  58. package/dist/open-GWKGQQG3.js.map +7 -0
  59. package/{lib/commands/pull.js → dist/pull-7C5A65KB.js} +7 -48
  60. package/dist/pull-7C5A65KB.js.map +7 -0
  61. package/dist/push-LPUIR4EO.js +2 -0
  62. package/dist/push-LPUIR4EO.js.map +7 -0
  63. package/dist/status-DFKKSRVB.js +14 -0
  64. package/dist/status-DFKKSRVB.js.map +7 -0
  65. package/dist/version-JD42JXWY.js +11 -0
  66. package/dist/version-JD42JXWY.js.map +7 -0
  67. package/dist/whoami-I23R6HOG.js +7 -0
  68. package/dist/whoami-I23R6HOG.js.map +7 -0
  69. package/package.json +72 -74
  70. package/lib/__generated__/graphql.js +0 -78
  71. package/lib/__generated__/graphql.js.map +0 -1
  72. package/lib/commands/add.js +0 -385
  73. package/lib/commands/add.js.map +0 -1
  74. package/lib/commands/deploy.js +0 -287
  75. package/lib/commands/deploy.js.map +0 -1
  76. package/lib/commands/dev.js +0 -374
  77. package/lib/commands/dev.js.map +0 -1
  78. package/lib/commands/list.js +0 -47
  79. package/lib/commands/list.js.map +0 -1
  80. package/lib/commands/login.js +0 -96
  81. package/lib/commands/login.js.map +0 -1
  82. package/lib/commands/logout.js +0 -20
  83. package/lib/commands/logout.js.map +0 -1
  84. package/lib/commands/open.js +0 -159
  85. package/lib/commands/open.js.map +0 -1
  86. package/lib/commands/pull.js.map +0 -1
  87. package/lib/commands/push.js.map +0 -1
  88. package/lib/commands/root.js +0 -110
  89. package/lib/commands/root.js.map +0 -1
  90. package/lib/commands/status.js +0 -56
  91. package/lib/commands/status.js.map +0 -1
  92. package/lib/commands/version.js +0 -18
  93. package/lib/commands/version.js.map +0 -1
  94. package/lib/commands/whoami.js +0 -23
  95. package/lib/commands/whoami.js.map +0 -1
  96. package/lib/ggt.js +0 -65
  97. package/lib/ggt.js.map +0 -1
  98. package/lib/main.js +0 -5
  99. package/lib/main.js.map +0 -1
  100. package/lib/services/app/api/api.js +0 -191
  101. package/lib/services/app/api/api.js.map +0 -1
  102. package/lib/services/app/api/operation.js +0 -23
  103. package/lib/services/app/api/operation.js.map +0 -1
  104. package/lib/services/app/app.js +0 -95
  105. package/lib/services/app/app.js.map +0 -1
  106. package/lib/services/app/arg.js +0 -28
  107. package/lib/services/app/arg.js.map +0 -1
  108. package/lib/services/app/client.js +0 -182
  109. package/lib/services/app/client.js.map +0 -1
  110. package/lib/services/app/edit/edit.js +0 -191
  111. package/lib/services/app/edit/edit.js.map +0 -1
  112. package/lib/services/app/edit/operation.js +0 -155
  113. package/lib/services/app/edit/operation.js.map +0 -1
  114. package/lib/services/app/error.js +0 -65
  115. package/lib/services/app/error.js.map +0 -1
  116. package/lib/services/command/arg.js +0 -55
  117. package/lib/services/command/arg.js.map +0 -1
  118. package/lib/services/command/command.js +0 -47
  119. package/lib/services/command/command.js.map +0 -1
  120. package/lib/services/command/context.js +0 -209
  121. package/lib/services/command/context.js.map +0 -1
  122. package/lib/services/config/config.js +0 -133
  123. package/lib/services/config/config.js.map +0 -1
  124. package/lib/services/config/env.js +0 -22
  125. package/lib/services/config/env.js.map +0 -1
  126. package/lib/services/config/package-json.js +0 -9
  127. package/lib/services/config/package-json.js.map +0 -1
  128. package/lib/services/filesync/changes.js +0 -134
  129. package/lib/services/filesync/changes.js.map +0 -1
  130. package/lib/services/filesync/conflicts.js +0 -140
  131. package/lib/services/filesync/conflicts.js.map +0 -1
  132. package/lib/services/filesync/directory.js +0 -269
  133. package/lib/services/filesync/directory.js.map +0 -1
  134. package/lib/services/filesync/error.js +0 -137
  135. package/lib/services/filesync/error.js.map +0 -1
  136. package/lib/services/filesync/file.js +0 -3
  137. package/lib/services/filesync/file.js.map +0 -1
  138. package/lib/services/filesync/filesync.js +0 -791
  139. package/lib/services/filesync/filesync.js.map +0 -1
  140. package/lib/services/filesync/hashes.js +0 -172
  141. package/lib/services/filesync/hashes.js.map +0 -1
  142. package/lib/services/filesync/strategy.js +0 -59
  143. package/lib/services/filesync/strategy.js.map +0 -1
  144. package/lib/services/filesync/sync-json.js +0 -475
  145. package/lib/services/filesync/sync-json.js.map +0 -1
  146. package/lib/services/http/auth.js +0 -70
  147. package/lib/services/http/auth.js.map +0 -1
  148. package/lib/services/http/http.js +0 -136
  149. package/lib/services/http/http.js.map +0 -1
  150. package/lib/services/output/confirm.js +0 -149
  151. package/lib/services/output/confirm.js.map +0 -1
  152. package/lib/services/output/footer.js +0 -22
  153. package/lib/services/output/footer.js.map +0 -1
  154. package/lib/services/output/log/field.js +0 -3
  155. package/lib/services/output/log/field.js.map +0 -1
  156. package/lib/services/output/log/format/format.js +0 -8
  157. package/lib/services/output/log/format/format.js.map +0 -1
  158. package/lib/services/output/log/format/json.js +0 -37
  159. package/lib/services/output/log/format/json.js.map +0 -1
  160. package/lib/services/output/log/format/pretty.js +0 -158
  161. package/lib/services/output/log/format/pretty.js.map +0 -1
  162. package/lib/services/output/log/level.js +0 -41
  163. package/lib/services/output/log/level.js.map +0 -1
  164. package/lib/services/output/log/logger.js +0 -53
  165. package/lib/services/output/log/logger.js.map +0 -1
  166. package/lib/services/output/log/structured.js +0 -52
  167. package/lib/services/output/log/structured.js.map +0 -1
  168. package/lib/services/output/notify.js +0 -27
  169. package/lib/services/output/notify.js.map +0 -1
  170. package/lib/services/output/output.js +0 -197
  171. package/lib/services/output/output.js.map +0 -1
  172. package/lib/services/output/print.js +0 -31
  173. package/lib/services/output/print.js.map +0 -1
  174. package/lib/services/output/problems.js +0 -84
  175. package/lib/services/output/problems.js.map +0 -1
  176. package/lib/services/output/prompt.js +0 -185
  177. package/lib/services/output/prompt.js.map +0 -1
  178. package/lib/services/output/report.js +0 -190
  179. package/lib/services/output/report.js.map +0 -1
  180. package/lib/services/output/select.js +0 -198
  181. package/lib/services/output/select.js.map +0 -1
  182. package/lib/services/output/spinner.js +0 -141
  183. package/lib/services/output/spinner.js.map +0 -1
  184. package/lib/services/output/sprint.js +0 -44
  185. package/lib/services/output/sprint.js.map +0 -1
  186. package/lib/services/output/symbols.js +0 -23
  187. package/lib/services/output/symbols.js.map +0 -1
  188. package/lib/services/output/table.js +0 -98
  189. package/lib/services/output/table.js.map +0 -1
  190. package/lib/services/output/timestamp.js +0 -12
  191. package/lib/services/output/timestamp.js.map +0 -1
  192. package/lib/services/output/update.js +0 -99
  193. package/lib/services/output/update.js.map +0 -1
  194. package/lib/services/user/session.js +0 -54
  195. package/lib/services/user/session.js.map +0 -1
  196. package/lib/services/user/user.js +0 -76
  197. package/lib/services/user/user.js.map +0 -1
  198. package/lib/services/util/assert.js +0 -11
  199. package/lib/services/util/assert.js.map +0 -1
  200. package/lib/services/util/boolean.js +0 -15
  201. package/lib/services/util/boolean.js.map +0 -1
  202. package/lib/services/util/collection.js +0 -38
  203. package/lib/services/util/collection.js.map +0 -1
  204. package/lib/services/util/function.js +0 -153
  205. package/lib/services/util/function.js.map +0 -1
  206. package/lib/services/util/is.js +0 -97
  207. package/lib/services/util/is.js.map +0 -1
  208. package/lib/services/util/json.js +0 -33
  209. package/lib/services/util/json.js.map +0 -1
  210. package/lib/services/util/number.js +0 -27
  211. package/lib/services/util/number.js.map +0 -1
  212. package/lib/services/util/object.js +0 -104
  213. package/lib/services/util/object.js.map +0 -1
  214. package/lib/services/util/paths.js +0 -36
  215. package/lib/services/util/paths.js.map +0 -1
  216. package/lib/services/util/promise.js +0 -74
  217. package/lib/services/util/promise.js.map +0 -1
  218. package/lib/services/util/types.js +0 -5
  219. package/lib/services/util/types.js.map +0 -1
  220. package/npm-shrinkwrap.json +0 -29545
@@ -1,185 +0,0 @@
1
- import { _ as _define_property } from "@swc/helpers/_/_define_property";
2
- import ansiEscapes from "ansi-escapes";
3
- import assert from "node:assert";
4
- import EventEmitter from "node:events";
5
- import process from "node:process";
6
- import readline from "node:readline";
7
- import { output } from "./output.js";
8
- /**
9
- * Inspired by `prompts`:
10
- * https://github.com/terkelg/prompts/blob/e0519913ec4fcc6746bb3d97d8cd0960c3f3ffde/lib/elements/prompt.js
11
- *
12
- * MIT License
13
- *
14
- * Copyright (c) 2018 Terkel Gjervig Nielsen
15
- *
16
- * Permission is hereby granted, free of charge, to any person obtaining a copy
17
- * of this software and associated documentation files (the "Software"), to deal
18
- * in the Software without restriction, including without limitation the rights
19
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
20
- * copies of the Software, and to permit persons to whom the Software is
21
- * furnished to do so, subject to the following conditions:
22
- *
23
- * The above copyright notice and this permission notice shall be included in all
24
- * copies or substantial portions of the Software.
25
- *
26
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
27
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
28
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
29
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
30
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
31
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
32
- * SOFTWARE.
33
- */ export class Prompt extends EventEmitter {
34
- _(_str, _key) {
35
- // noop
36
- }
37
- onRender() {
38
- // noop
39
- }
40
- fire() {
41
- this.emit("state", {
42
- value: this.value,
43
- aborted: this.aborted,
44
- exited: this.exited
45
- });
46
- }
47
- bell() {
48
- output.writeStdout(ansiEscapes.beep);
49
- }
50
- render() {
51
- this.onRender();
52
- if (this.firstRender) {
53
- this.firstRender = false;
54
- }
55
- }
56
- constructor(){
57
- super();
58
- // state
59
- _define_property(this, "value", undefined);
60
- _define_property(this, "firstRender", true);
61
- _define_property(this, "done", false);
62
- _define_property(this, "closed", false);
63
- _define_property(this, "aborted", false);
64
- _define_property(this, "exited", false);
65
- // methods that rely on constructor closure
66
- _define_property(this, "close", void 0);
67
- assert(!Prompt.active, "only one prompt can be active at a time");
68
- Prompt.active = true;
69
- const rl = readline.createInterface({
70
- input: process.stdin,
71
- escapeCodeTimeout: 50
72
- });
73
- readline.emitKeypressEvents(process.stdin, rl);
74
- if (process.stdin.isTTY) {
75
- process.stdin.setRawMode(true);
76
- }
77
- const isSelect = [
78
- "SelectPrompt"
79
- ].includes(this.constructor.name);
80
- const keypress = (str, key)=>{
81
- const action = getPromptAction(key, isSelect);
82
- if (action === false) {
83
- this._(str, key);
84
- } else if (action && typeof this[action] === "function") {
85
- // eslint-disable-next-line @typescript-eslint/no-unsafe-call
86
- this[action](key);
87
- } else {
88
- this.bell();
89
- }
90
- };
91
- this.close = ()=>{
92
- process.stdin.removeListener("keypress", keypress);
93
- if (process.stdin.isTTY) {
94
- process.stdin.setRawMode(false);
95
- }
96
- rl.close();
97
- this.emit(this.aborted ? "abort" : this.exited ? "exit" : "submit", this.value);
98
- this.closed = true;
99
- Prompt.active = false;
100
- };
101
- process.stdin.on("keypress", keypress);
102
- }
103
- }
104
- _define_property(Prompt, "active", false);
105
- const getPromptAction = (key, isSelect)=>{
106
- if (key.meta && key.name !== "escape") {
107
- return;
108
- }
109
- if (key.ctrl) {
110
- switch(key.name){
111
- case "a":
112
- return "first";
113
- case "c":
114
- case "d":
115
- return "abort";
116
- case "e":
117
- return "last";
118
- case "g":
119
- return "reset";
120
- }
121
- }
122
- if (isSelect) {
123
- if (key.name === "j") {
124
- return "down";
125
- }
126
- if (key.name === "k") {
127
- return "up";
128
- }
129
- }
130
- switch(key.name){
131
- case "return":
132
- case "enter":
133
- return "submit";
134
- case "backspace":
135
- return "delete";
136
- case "delete":
137
- return "deleteForward";
138
- case "abort":
139
- return "abort";
140
- case "escape":
141
- return "exit";
142
- case "tab":
143
- return "next";
144
- case "pagedown":
145
- return "nextPage";
146
- case "pageup":
147
- return "prevPage";
148
- case "home":
149
- return "home";
150
- case "end":
151
- return "end";
152
- case "up":
153
- return "up";
154
- case "down":
155
- return "down";
156
- case "right":
157
- return "right";
158
- case "left":
159
- return "left";
160
- default:
161
- return false;
162
- }
163
- };
164
- /**
165
- * Determine what entries should be displayed on the screen, based on the
166
- * currently selected index and the maximum visible. Used in list-based
167
- * prompts like `select` and `multiselect`.
168
- *
169
- * @param cursor - the currently selected entry
170
- * @param total - the total entries available to display
171
- * @param [maxVisible] - the number of entries that can be displayed
172
- */ export const entriesToDisplay = (cursor, total, maxVisible)=>{
173
- maxVisible = maxVisible || total;
174
- let startIndex = Math.min(total - maxVisible, cursor - Math.floor(maxVisible / 2));
175
- if (startIndex < 0) {
176
- startIndex = 0;
177
- }
178
- const endIndex = Math.min(startIndex + maxVisible, total);
179
- return {
180
- startIndex,
181
- endIndex
182
- };
183
- };
184
-
185
- //# sourceMappingURL=prompt.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/services/output/prompt.ts"],"sourcesContent":["import ansiEscapes from \"ansi-escapes\";\nimport assert from \"node:assert\";\nimport EventEmitter from \"node:events\";\nimport process from \"node:process\";\nimport readline from \"node:readline\";\nimport { output } from \"./output.js\";\n\n/**\n * Inspired by `prompts`:\n * https://github.com/terkelg/prompts/blob/e0519913ec4fcc6746bb3d97d8cd0960c3f3ffde/lib/elements/prompt.js\n *\n * MIT License\n *\n * Copyright (c) 2018 Terkel Gjervig Nielsen\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\nexport class Prompt extends EventEmitter {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [action: string]: any; // (key: StdinKey) => void;\n\n static active = false;\n\n // state\n value: unknown = undefined;\n firstRender = true;\n done = false;\n closed = false;\n aborted = false;\n exited = false;\n\n // methods that rely on constructor closure\n close: () => void;\n\n constructor() {\n super();\n assert(!Prompt.active, \"only one prompt can be active at a time\");\n Prompt.active = true;\n\n const rl = readline.createInterface({ input: process.stdin, escapeCodeTimeout: 50 });\n readline.emitKeypressEvents(process.stdin, rl);\n\n if (process.stdin.isTTY) {\n process.stdin.setRawMode(true);\n }\n\n const isSelect = [\"SelectPrompt\"].includes(this.constructor.name);\n const keypress = (str: string, key: StdinKey): void => {\n const action = getPromptAction(key, isSelect);\n if (action === false) {\n this._(str, key);\n } else if (action && typeof this[action] === \"function\") {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n this[action](key);\n } else {\n this.bell();\n }\n };\n\n this.close = () => {\n process.stdin.removeListener(\"keypress\", keypress);\n if (process.stdin.isTTY) {\n process.stdin.setRawMode(false);\n }\n\n rl.close();\n this.emit(this.aborted ? \"abort\" : this.exited ? \"exit\" : \"submit\", this.value);\n this.closed = true;\n Prompt.active = false;\n };\n\n process.stdin.on(\"keypress\", keypress);\n }\n\n _(_str: string, _key: StdinKey): void {\n // noop\n }\n\n onRender(): void {\n // noop\n }\n\n fire(): void {\n this.emit(\"state\", {\n value: this.value,\n aborted: this.aborted,\n exited: this.exited,\n });\n }\n\n bell(): void {\n output.writeStdout(ansiEscapes.beep);\n }\n\n render(): void {\n this.onRender();\n if (this.firstRender) {\n this.firstRender = false;\n }\n }\n}\n\nexport type PromptAction =\n | \"abort\"\n | \"exit\"\n | \"submit\"\n | \"next\"\n | \"nextPage\"\n | \"prevPage\"\n | \"home\"\n | \"end\"\n | \"up\"\n | \"down\"\n | \"right\"\n | \"left\"\n | \"reset\"\n | \"delete\"\n | \"deleteForward\"\n | \"first\"\n | \"last\";\n\nexport type StdinKey = {\n name: string;\n ctrl: boolean;\n meta: boolean;\n};\n\nconst getPromptAction = (key: StdinKey, isSelect: boolean): PromptAction | false | undefined => {\n if (key.meta && key.name !== \"escape\") {\n return;\n }\n\n if (key.ctrl) {\n switch (key.name) {\n case \"a\":\n return \"first\";\n case \"c\":\n case \"d\":\n return \"abort\";\n case \"e\":\n return \"last\";\n case \"g\":\n return \"reset\";\n }\n }\n\n if (isSelect) {\n if (key.name === \"j\") {\n return \"down\";\n }\n if (key.name === \"k\") {\n return \"up\";\n }\n }\n\n switch (key.name) {\n case \"return\":\n case \"enter\":\n return \"submit\";\n case \"backspace\":\n return \"delete\";\n case \"delete\":\n return \"deleteForward\";\n case \"abort\":\n return \"abort\";\n case \"escape\":\n return \"exit\";\n case \"tab\":\n return \"next\";\n case \"pagedown\":\n return \"nextPage\";\n case \"pageup\":\n return \"prevPage\";\n case \"home\":\n return \"home\";\n case \"end\":\n return \"end\";\n case \"up\":\n return \"up\";\n case \"down\":\n return \"down\";\n case \"right\":\n return \"right\";\n case \"left\":\n return \"left\";\n default:\n return false;\n }\n};\n\n/**\n * Determine what entries should be displayed on the screen, based on the\n * currently selected index and the maximum visible. Used in list-based\n * prompts like `select` and `multiselect`.\n *\n * @param cursor - the currently selected entry\n * @param total - the total entries available to display\n * @param [maxVisible] - the number of entries that can be displayed\n */\nexport const entriesToDisplay = (cursor: number, total: number, maxVisible: number): { startIndex: number; endIndex: number } => {\n maxVisible = maxVisible || total;\n\n let startIndex = Math.min(total - maxVisible, cursor - Math.floor(maxVisible / 2));\n if (startIndex < 0) {\n startIndex = 0;\n }\n\n const endIndex = Math.min(startIndex + maxVisible, total);\n\n return { startIndex, endIndex };\n};\n"],"names":["ansiEscapes","assert","EventEmitter","process","readline","output","Prompt","_","_str","_key","onRender","fire","emit","value","aborted","exited","bell","writeStdout","beep","render","firstRender","constructor","undefined","done","closed","close","active","rl","createInterface","input","stdin","escapeCodeTimeout","emitKeypressEvents","isTTY","setRawMode","isSelect","includes","name","keypress","str","key","action","getPromptAction","removeListener","on","meta","ctrl","entriesToDisplay","cursor","total","maxVisible","startIndex","Math","min","floor","endIndex"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
@@ -1,190 +0,0 @@
1
- import { _ as _define_property } from "@swc/helpers/_/_define_property";
2
- import * as Sentry from "@sentry/node";
3
- import cleanStack from "clean-stack";
4
- import ms from "ms";
5
- import { randomUUID } from "node:crypto";
6
- import os from "node:os";
7
- import terminalLink from "terminal-link";
8
- import { config } from "../config/config.js";
9
- import { env } from "../config/env.js";
10
- import { packageJson } from "../config/package-json.js";
11
- import { isAbortError } from "../util/is.js";
12
- import { serializeError } from "../util/object.js";
13
- import { workspaceRoot } from "../util/paths.js";
14
- import { println } from "./print.js";
15
- import { sprintln } from "./sprint.js";
16
- export const reportErrorAndExit = async (ctx, cause)=>{
17
- if (isAbortError(cause)) {
18
- ctx.log.debug("aborting without reporting error", {
19
- error: cause
20
- });
21
- return process.exit(1);
22
- }
23
- ctx.log.error("reporting error and exiting", {
24
- error: cause
25
- });
26
- try {
27
- const error = GGTError.from(cause);
28
- error.print();
29
- if (error.isBug === IsBug.NO) {
30
- return undefined;
31
- }
32
- Sentry.captureException(error, {
33
- event_id: error.id,
34
- captureContext: {
35
- user: ctx.user && {
36
- id: String(ctx.user.id),
37
- email: ctx.user.email,
38
- username: ctx.user.name ?? undefined
39
- },
40
- tags: {
41
- application_id: ctx.app?.id,
42
- arch: config.arch,
43
- bug: error.isBug,
44
- environment: env.value,
45
- platform: config.platform,
46
- shell: config.shell,
47
- version: packageJson.version
48
- },
49
- contexts: {
50
- ctx: {
51
- argv: process.argv,
52
- args: ctx.args
53
- },
54
- cause: error.cause ? serializeError(error.cause) : undefined,
55
- app: {
56
- app_name: packageJson.name,
57
- app_version: packageJson.version
58
- },
59
- device: {
60
- name: os.hostname(),
61
- family: os.type(),
62
- arch: os.arch()
63
- },
64
- runtime: {
65
- name: process.release.name,
66
- version: process.version
67
- }
68
- }
69
- }
70
- });
71
- await Sentry.flush(ms("2s"));
72
- } finally{
73
- process.exit(1);
74
- }
75
- };
76
- export const installErrorHandlers = (ctx)=>{
77
- ctx.log.debug("installing error handlers");
78
- Sentry.init({
79
- dsn: "https://0c26e0d8afd94e77a88ee1c3aa9e7065@o250689.ingest.sentry.io/6703266",
80
- enabled: env.productionLike && (ctx.args["--telemetry"] ?? false),
81
- release: packageJson.version,
82
- environment: packageJson.version.includes("experimental") ? "experimental" : "production"
83
- });
84
- const handleError = (error)=>void reportErrorAndExit(ctx, error);
85
- process.once("uncaughtException", handleError);
86
- process.once("unhandledRejection", handleError);
87
- };
88
- export const IsBug = Object.freeze({
89
- YES: "yes",
90
- NO: "no",
91
- MAYBE: "maybe"
92
- });
93
- /**
94
- * Base class for all errors.
95
- */ export class GGTError extends Error {
96
- /**
97
- * Constructs a GGTError from an unknown cause.
98
- *
99
- * @param cause - The cause of the error.
100
- */ static from(cause) {
101
- if (cause instanceof GGTError) {
102
- return cause;
103
- }
104
- return new UnexpectedError(cause);
105
- }
106
- sprint() {
107
- let rendered = this.render();
108
- if (this.isBug !== IsBug.NO) {
109
- // ensure the rendered message ends with a newline
110
- rendered = sprintln(rendered);
111
- const thisIsABug = this.isBug === IsBug.YES ? "This is a bug" : "If you think this is a bug";
112
- const issueLink = `https://github.com/gadget-inc/ggt/issues/new?template=bug_report.yml&error-id=${this.id}`;
113
- if (terminalLink.isSupported) {
114
- rendered += sprintln({
115
- ensureEmptyLineAbove: true
116
- })`
117
- ${thisIsABug}, ${terminalLink("click here", issueLink)} to create an issue on GitHub.
118
- `;
119
- } else {
120
- rendered += sprintln({
121
- ensureEmptyLineAbove: true
122
- })`
123
- ${thisIsABug}, use the link below to create an issue on GitHub.
124
-
125
- ${issueLink}
126
- `;
127
- }
128
- }
129
- return rendered;
130
- }
131
- print(options) {
132
- println({
133
- ensureEmptyLineAbove: true,
134
- ...options
135
- })(this.sprint());
136
- }
137
- constructor(message){
138
- super(message);
139
- /**
140
- * The ID for this error.
141
- */ _define_property(this, "id", env.testLike ? "00000000-0000-0000-0000-000000000000" : randomUUID());
142
- /**
143
- * The underlying *thing* that caused this error.
144
- */ _define_property(this, "cause", void 0);
145
- /**
146
- * Assume the stack trace exists.
147
- */ _define_property(this, "stack", void 0);
148
- Error.captureStackTrace(this, this.constructor);
149
- this.stack = cleanStack(this.stack, {
150
- pretty: true,
151
- basePath: workspaceRoot
152
- });
153
- }
154
- }
155
- /**
156
- * Our "catch all" error.
157
- *
158
- * If this error is thrown, we almost certainly have a bug, and should
159
- * either fix it or add a more specific error so that we can provide
160
- * more useful information.
161
- */ export class UnexpectedError extends GGTError {
162
- render() {
163
- const serialized = serializeError(this.cause);
164
- const body = serialized.stack || serialized.message || this.stack;
165
- return this.message + ".\n\n" + body;
166
- }
167
- constructor(cause){
168
- super("An unexpected error occurred");
169
- _define_property(this, "cause", void 0);
170
- _define_property(this, "isBug", void 0);
171
- this.cause = cause;
172
- this.isBug = IsBug.YES;
173
- }
174
- }
175
- /**
176
- * An error that is expected to happen sometimes.
177
- */ export class EdgeCaseError extends GGTError {
178
- render() {
179
- return this.message;
180
- }
181
- constructor(message, cause){
182
- super(message);
183
- _define_property(this, "cause", void 0);
184
- _define_property(this, "isBug", void 0);
185
- this.cause = cause;
186
- this.isBug = IsBug.MAYBE;
187
- }
188
- }
189
-
190
- //# sourceMappingURL=report.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/services/output/report.ts"],"sourcesContent":["import * as Sentry from \"@sentry/node\";\nimport cleanStack from \"clean-stack\";\nimport ms from \"ms\";\nimport { randomUUID } from \"node:crypto\";\nimport os from \"node:os\";\nimport terminalLink from \"terminal-link\";\nimport type { Context } from \"../command/context.js\";\nimport { config } from \"../config/config.js\";\nimport { env } from \"../config/env.js\";\nimport { packageJson } from \"../config/package-json.js\";\nimport { isAbortError } from \"../util/is.js\";\nimport { serializeError } from \"../util/object.js\";\nimport { workspaceRoot } from \"../util/paths.js\";\nimport { println } from \"./print.js\";\nimport { sprintln, type SprintOptions } from \"./sprint.js\";\n\nexport const reportErrorAndExit = async (ctx: Context, cause: unknown): Promise<never> => {\n if (isAbortError(cause)) {\n ctx.log.debug(\"aborting without reporting error\", { error: cause });\n return process.exit(1);\n }\n\n ctx.log.error(\"reporting error and exiting\", { error: cause });\n\n try {\n const error = GGTError.from(cause);\n error.print();\n\n if (error.isBug === IsBug.NO) {\n return undefined as never;\n }\n\n Sentry.captureException(error, {\n event_id: error.id,\n captureContext: {\n user: ctx.user && {\n id: String(ctx.user.id),\n email: ctx.user.email,\n username: ctx.user.name ?? undefined,\n },\n tags: {\n application_id: ctx.app?.id,\n arch: config.arch,\n bug: error.isBug,\n environment: env.value,\n platform: config.platform,\n shell: config.shell,\n version: packageJson.version,\n },\n contexts: {\n ctx: {\n argv: process.argv,\n args: ctx.args,\n },\n cause: error.cause ? serializeError(error.cause) : undefined,\n app: {\n app_name: packageJson.name,\n app_version: packageJson.version,\n },\n device: {\n name: os.hostname(),\n family: os.type(),\n arch: os.arch(),\n },\n runtime: {\n name: process.release.name,\n version: process.version,\n },\n },\n },\n });\n\n await Sentry.flush(ms(\"2s\"));\n } finally {\n process.exit(1);\n }\n};\n\nexport const installErrorHandlers = (ctx: Context): void => {\n ctx.log.debug(\"installing error handlers\");\n\n Sentry.init({\n dsn: \"https://0c26e0d8afd94e77a88ee1c3aa9e7065@o250689.ingest.sentry.io/6703266\",\n enabled: env.productionLike && (ctx.args[\"--telemetry\"] ?? false),\n release: packageJson.version,\n environment: packageJson.version.includes(\"experimental\") ? \"experimental\" : \"production\",\n });\n\n const handleError = (error: unknown) => void reportErrorAndExit(ctx, error);\n process.once(\"uncaughtException\", handleError);\n process.once(\"unhandledRejection\", handleError);\n};\n\nexport const IsBug = Object.freeze({\n YES: \"yes\",\n NO: \"no\",\n MAYBE: \"maybe\",\n});\n\nexport type IsBug = (typeof IsBug)[keyof typeof IsBug];\n\n/**\n * Base class for all errors.\n */\nexport abstract class GGTError extends Error {\n /**\n * The ID for this error.\n */\n id = env.testLike ? \"00000000-0000-0000-0000-000000000000\" : randomUUID();\n\n /**\n * The underlying *thing* that caused this error.\n */\n cause?: unknown;\n\n /**\n * Assume the stack trace exists.\n */\n override stack!: string;\n\n /**\n * Indicates whether this error is considered a bug or not.\n */\n abstract isBug: IsBug;\n\n constructor(message: string) {\n super(message);\n Error.captureStackTrace(this, this.constructor);\n this.stack = cleanStack(this.stack, { pretty: true, basePath: workspaceRoot });\n }\n\n /**\n * Constructs a GGTError from an unknown cause.\n *\n * @param cause - The cause of the error.\n */\n static from(cause: unknown): GGTError {\n if (cause instanceof GGTError) {\n return cause;\n }\n return new UnexpectedError(cause);\n }\n\n sprint(): string {\n let rendered = this.render();\n\n if (this.isBug !== IsBug.NO) {\n // ensure the rendered message ends with a newline\n rendered = sprintln(rendered);\n\n const thisIsABug = this.isBug === IsBug.YES ? \"This is a bug\" : \"If you think this is a bug\";\n const issueLink = `https://github.com/gadget-inc/ggt/issues/new?template=bug_report.yml&error-id=${this.id}`;\n\n if (terminalLink.isSupported) {\n rendered += sprintln({ ensureEmptyLineAbove: true })`\n ${thisIsABug}, ${terminalLink(\"click here\", issueLink)} to create an issue on GitHub.\n `;\n } else {\n rendered += sprintln({ ensureEmptyLineAbove: true })`\n ${thisIsABug}, use the link below to create an issue on GitHub.\n\n ${issueLink}\n `;\n }\n }\n\n return rendered;\n }\n\n print(options?: SprintOptions): void {\n println({ ensureEmptyLineAbove: true, ...options })(this.sprint());\n }\n\n /**\n * Turns this error into a user-friendly message that explains what\n * went wrong and how to fix it. A good write up of what an error\n * should look like can be found here:\n * {@link https://clig.dev/#errors}\n */\n protected abstract render(): string;\n}\n\n/**\n * Our \"catch all\" error.\n *\n * If this error is thrown, we almost certainly have a bug, and should\n * either fix it or add a more specific error so that we can provide\n * more useful information.\n */\nexport class UnexpectedError extends GGTError {\n isBug = IsBug.YES;\n\n constructor(override cause: unknown) {\n super(\"An unexpected error occurred\");\n }\n\n protected render(): string {\n const serialized = serializeError(this.cause);\n const body = serialized.stack || serialized.message || this.stack;\n return this.message + \".\\n\\n\" + body;\n }\n}\n\n/**\n * An error that is expected to happen sometimes.\n */\nexport class EdgeCaseError extends GGTError {\n isBug = IsBug.MAYBE;\n\n constructor(\n message: string,\n override cause?: unknown,\n ) {\n super(message);\n }\n\n protected render(): string {\n return this.message;\n }\n}\n"],"names":["Sentry","cleanStack","ms","randomUUID","os","terminalLink","config","env","packageJson","isAbortError","serializeError","workspaceRoot","println","sprintln","reportErrorAndExit","ctx","cause","log","debug","error","process","exit","GGTError","from","print","isBug","IsBug","NO","undefined","captureException","event_id","id","captureContext","user","String","email","username","name","tags","application_id","app","arch","bug","environment","value","platform","shell","version","contexts","argv","args","app_name","app_version","device","hostname","family","type","runtime","release","flush","installErrorHandlers","init","dsn","enabled","productionLike","includes","handleError","once","Object","freeze","YES","MAYBE","Error","UnexpectedError","sprint","rendered","render","thisIsABug","issueLink","isSupported","ensureEmptyLineAbove","options","constructor","message","testLike","stack","captureStackTrace","pretty","basePath","serialized","body","EdgeCaseError"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
@@ -1,198 +0,0 @@
1
- import { _ as _define_property } from "@swc/helpers/_/_define_property";
2
- import chalk from "chalk";
3
- import indentString from "indent-string";
4
- import assert from "node:assert";
5
- import process from "node:process";
6
- import { isString } from "../util/is.js";
7
- import { defaults } from "../util/object.js";
8
- import { output } from "./output.js";
9
- import { println } from "./print.js";
10
- import { entriesToDisplay, Prompt } from "./prompt.js";
11
- import { sprint, sprintln } from "./sprint.js";
12
- import { symbol } from "./symbols.js";
13
- // TODO: i regret this api... don't make it the same as println... just make it take ctx and options
14
- export const select = (options)=>{
15
- options = defaults(options, {
16
- ensureEmptyLineAbove: true
17
- });
18
- return (template, ...values)=>{
19
- let text = template;
20
- if (!isString(text)) {
21
- text = sprint(template, ...values);
22
- }
23
- if (!output.isInteractive) {
24
- // TODO: log an error here
25
- println(options)(text);
26
- println({
27
- ensureEmptyLineAbove: true
28
- })`
29
- Aborting because ggt is not running in an interactive terminal.
30
- `;
31
- process.exit(1);
32
- }
33
- return new Promise((resolve)=>{
34
- const sel = new Select(text, {
35
- formatChoice: (choice)=>choice,
36
- formatSelection: (choice)=>choice,
37
- ...options
38
- });
39
- sel.on("submit", resolve);
40
- sel.on("exit", ()=>process.exit(0));
41
- sel.on("abort", ()=>process.exit(0));
42
- });
43
- };
44
- };
45
- /**
46
- * Inspired by `prompts`:
47
- * https://github.com/terkelg/prompts/blob/e0519913ec4fcc6746bb3d97d8cd0960c3f3ffde/lib/elements/select.js
48
- *
49
- * MIT License
50
- *
51
- * Copyright (c) 2018 Terkel Gjervig Nielsen
52
- *
53
- * Permission is hereby granted, free of charge, to any person obtaining a copy
54
- * of this software and associated documentation files (the "Software"), to deal
55
- * in the Software without restriction, including without limitation the rights
56
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
57
- * copies of the Software, and to permit persons to whom the Software is
58
- * furnished to do so, subject to the following conditions:
59
- *
60
- * The above copyright notice and this permission notice shall be included in all
61
- * copies or substantial portions of the Software.
62
- *
63
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
64
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
65
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
66
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
67
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
68
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
69
- * SOFTWARE.
70
- */ // TODO: implement autocomplete https://github.com/terkelg/prompts/blob/e0519913ec4fcc6746bb3d97d8cd0960c3f3ffde/lib/elements/autocomplete.js
71
- class Select extends Prompt {
72
- get selection() {
73
- const choice = this.options.choices[this.cursor];
74
- assert(choice, `choices[${this.cursor}] is not defined`);
75
- return choice;
76
- }
77
- moveCursor(n) {
78
- this.cursor = n;
79
- this.fire();
80
- }
81
- reset() {
82
- this.moveCursor(0);
83
- this.fire();
84
- this.render();
85
- }
86
- exit() {
87
- this.abort();
88
- }
89
- abort() {
90
- this.done = this.aborted = true;
91
- this.fire();
92
- this.render("Cancel (Ctrl+C)");
93
- this.close();
94
- }
95
- submit() {
96
- this.done = true;
97
- this.aborted = false;
98
- this.value = this.selection;
99
- this.fire();
100
- this.render();
101
- this.close();
102
- }
103
- first() {
104
- this.moveCursor(0);
105
- this.render();
106
- }
107
- last() {
108
- this.moveCursor(this.options.choices.length - 1);
109
- this.render();
110
- }
111
- up() {
112
- if (this.cursor === 0) {
113
- this.moveCursor(this.options.choices.length - 1);
114
- } else {
115
- this.moveCursor(this.cursor - 1);
116
- }
117
- this.render();
118
- }
119
- down() {
120
- if (this.cursor === this.options.choices.length - 1) {
121
- this.moveCursor(0);
122
- } else {
123
- this.moveCursor(this.cursor + 1);
124
- }
125
- this.render();
126
- }
127
- next() {
128
- this.moveCursor((this.cursor + 1) % this.options.choices.length);
129
- this.render();
130
- }
131
- _(char, _key) {
132
- if (char === " ") {
133
- this.submit();
134
- return;
135
- }
136
- }
137
- render(selection) {
138
- if (this.closed) {
139
- return;
140
- }
141
- super.render();
142
- let question = this.text;
143
- if (this.done) {
144
- output.persistPrompt(sprintln`
145
- ${question.trimEnd()} ${this.options.formatChoice(selection ?? this.selection)}
146
- `);
147
- return;
148
- }
149
- question += ` ${chalk.gray("Use arrow keys to move")}\n\n`;
150
- let choices = "";
151
- const { startIndex, endIndex } = entriesToDisplay(this.cursor, this.options.choices.length, this.optionsPerPage);
152
- for(let index = startIndex; index < endIndex; index++){
153
- // determine whether to display "more choices" indicators
154
- let prefix;
155
- if (this.cursor === index) {
156
- prefix = `${symbol.arrowRight} `;
157
- } else if (index === startIndex && startIndex > 0) {
158
- prefix = `${symbol.arrowUp} `;
159
- } else if (index === endIndex - 1 && endIndex < this.options.choices.length) {
160
- prefix = `${symbol.arrowDown} `;
161
- } else {
162
- prefix = " ";
163
- }
164
- const choice_ = this.options.choices[index];
165
- assert(choice_, `choices[${index}] is not defined`);
166
- let choice = this.options.formatChoice(choice_);
167
- if (this.cursor === index) {
168
- choice = chalk.blue.underline(choice);
169
- }
170
- choices += `${prefix}${choice}\n`;
171
- }
172
- if (this.options.indent) {
173
- choices = indentString(choices, this.options.indent);
174
- }
175
- output.updatePrompt(question + choices);
176
- }
177
- constructor(text, options){
178
- super();
179
- _define_property(this, "text", void 0);
180
- _define_property(this, "cursor", void 0);
181
- _define_property(this, "optionsPerPage", void 0);
182
- _define_property(this, "options", void 0);
183
- this.text = text;
184
- this.cursor = 0;
185
- this.optionsPerPage = 10;
186
- this.options = defaults(options, {
187
- formatChoice: (choice)=>choice,
188
- formatSelection: (choice)=>choice,
189
- ...options
190
- });
191
- if (this.options.ensureEmptyLineAbove) {
192
- this.text = "\n" + this.text;
193
- }
194
- this.render();
195
- }
196
- }
197
-
198
- //# sourceMappingURL=select.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/services/output/select.ts"],"sourcesContent":["import chalk from \"chalk\";\nimport indentString from \"indent-string\";\nimport assert from \"node:assert\";\nimport process from \"node:process\";\nimport { isString } from \"../util/is.js\";\nimport { defaults } from \"../util/object.js\";\nimport { output } from \"./output.js\";\nimport { println } from \"./print.js\";\nimport { entriesToDisplay, Prompt, type StdinKey } from \"./prompt.js\";\nimport { sprint, sprintln, type SprintOptions } from \"./sprint.js\";\nimport { symbol } from \"./symbols.js\";\n\nexport type SelectOptions<Choice extends string> = SprintOptions & {\n choices: Choice[];\n formatChoice?: (choice: Choice) => string;\n formatSelection?: (choice: Choice) => string;\n};\n\nexport type select<Choice extends string> = (options: SelectOptions<Choice>) => selectWithChoices<Choice>;\n\nexport type selectWithChoices<Choice extends string> = {\n (str: string): Promise<Choice>;\n (template: TemplateStringsArray, ...values: unknown[]): Promise<Choice>;\n};\n\n// TODO: i regret this api... don't make it the same as println... just make it take ctx and options\nexport const select = <Choice extends string>(options: SelectOptions<Choice>): selectWithChoices<Choice> => {\n options = defaults(options, {\n ensureEmptyLineAbove: true,\n });\n\n return ((template: string | TemplateStringsArray, ...values: unknown[]): Promise<Choice> => {\n let text = template as string;\n if (!isString(text)) {\n text = sprint(template as TemplateStringsArray, ...values);\n }\n\n if (!output.isInteractive) {\n // TODO: log an error here\n println(options)(text);\n println({ ensureEmptyLineAbove: true })`\n Aborting because ggt is not running in an interactive terminal.\n `;\n process.exit(1);\n }\n\n return new Promise((resolve) => {\n const sel = new Select(text, {\n formatChoice: (choice) => choice,\n formatSelection: (choice) => choice,\n ...options,\n });\n sel.on(\"submit\", resolve);\n sel.on(\"exit\", () => process.exit(0));\n sel.on(\"abort\", () => process.exit(0));\n });\n }) as selectWithChoices<Choice>;\n};\n\n/**\n * Inspired by `prompts`:\n * https://github.com/terkelg/prompts/blob/e0519913ec4fcc6746bb3d97d8cd0960c3f3ffde/lib/elements/select.js\n *\n * MIT License\n *\n * Copyright (c) 2018 Terkel Gjervig Nielsen\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n// TODO: implement autocomplete https://github.com/terkelg/prompts/blob/e0519913ec4fcc6746bb3d97d8cd0960c3f3ffde/lib/elements/autocomplete.js\nclass Select<Choice extends string> extends Prompt {\n cursor = 0;\n optionsPerPage = 10;\n options;\n\n constructor(\n readonly text: string,\n options: SelectOptions<Choice>,\n ) {\n super();\n\n this.options = defaults(options, {\n formatChoice: (choice) => choice,\n formatSelection: (choice) => choice,\n ...options,\n });\n\n if (this.options.ensureEmptyLineAbove) {\n this.text = \"\\n\" + this.text;\n }\n\n this.render();\n }\n\n get selection(): Choice {\n const choice = this.options.choices[this.cursor];\n assert(choice, `choices[${this.cursor}] is not defined`);\n return choice;\n }\n\n moveCursor(n: number): void {\n this.cursor = n;\n this.fire();\n }\n\n reset(): void {\n this.moveCursor(0);\n this.fire();\n this.render();\n }\n\n exit(): void {\n this.abort();\n }\n\n abort(): void {\n this.done = this.aborted = true;\n this.fire();\n this.render(\"Cancel (Ctrl+C)\" as Choice);\n this.close();\n }\n\n submit(): void {\n this.done = true;\n this.aborted = false;\n this.value = this.selection;\n this.fire();\n this.render();\n this.close();\n }\n\n first(): void {\n this.moveCursor(0);\n this.render();\n }\n\n last(): void {\n this.moveCursor(this.options.choices.length - 1);\n this.render();\n }\n\n up(): void {\n if (this.cursor === 0) {\n this.moveCursor(this.options.choices.length - 1);\n } else {\n this.moveCursor(this.cursor - 1);\n }\n this.render();\n }\n\n down(): void {\n if (this.cursor === this.options.choices.length - 1) {\n this.moveCursor(0);\n } else {\n this.moveCursor(this.cursor + 1);\n }\n this.render();\n }\n\n next(): void {\n this.moveCursor((this.cursor + 1) % this.options.choices.length);\n this.render();\n }\n\n override _(char: string, _key: StdinKey): void {\n if (char === \" \") {\n this.submit();\n return;\n }\n }\n\n override render(selection?: Choice): void {\n if (this.closed) {\n return;\n }\n\n super.render();\n\n let question = this.text;\n if (this.done) {\n output.persistPrompt(sprintln`\n ${question.trimEnd()} ${this.options.formatChoice(selection ?? this.selection)}\n `);\n return;\n }\n\n question += ` ${chalk.gray(\"Use arrow keys to move\")}\\n\\n`;\n\n let choices = \"\";\n const { startIndex, endIndex } = entriesToDisplay(this.cursor, this.options.choices.length, this.optionsPerPage);\n for (let index = startIndex; index < endIndex; index++) {\n // determine whether to display \"more choices\" indicators\n let prefix: string;\n if (this.cursor === index) {\n prefix = `${symbol.arrowRight} `;\n } else if (index === startIndex && startIndex > 0) {\n prefix = `${symbol.arrowUp} `;\n } else if (index === endIndex - 1 && endIndex < this.options.choices.length) {\n prefix = `${symbol.arrowDown} `;\n } else {\n prefix = \" \";\n }\n\n const choice_ = this.options.choices[index];\n assert(choice_, `choices[${index}] is not defined`);\n\n let choice = this.options.formatChoice(choice_);\n if (this.cursor === index) {\n choice = chalk.blue.underline(choice);\n }\n\n choices += `${prefix}${choice}\\n`;\n }\n\n if (this.options.indent) {\n choices = indentString(choices, this.options.indent);\n }\n\n output.updatePrompt(question + choices);\n }\n}\n"],"names":["chalk","indentString","assert","process","isString","defaults","output","println","entriesToDisplay","Prompt","sprint","sprintln","symbol","select","options","ensureEmptyLineAbove","template","values","text","isInteractive","exit","Promise","resolve","sel","Select","formatChoice","choice","formatSelection","on","selection","choices","cursor","moveCursor","n","fire","reset","render","abort","done","aborted","close","submit","value","first","last","length","up","down","next","_","char","_key","closed","question","persistPrompt","trimEnd","gray","startIndex","endIndex","optionsPerPage","index","prefix","arrowRight","arrowUp","arrowDown","choice_","blue","underline","indent","updatePrompt","constructor"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}