@gadgetinc/ggt 1.0.3 → 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 +73 -75
  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 -93
  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 -29512
@@ -1,209 +0,0 @@
1
- import { _ as _class_private_field_get } from "@swc/helpers/_/_class_private_field_get";
2
- import { _ as _class_private_field_init } from "@swc/helpers/_/_class_private_field_init";
3
- import { _ as _class_private_field_set } from "@swc/helpers/_/_class_private_field_set";
4
- import { _ as _define_property } from "@swc/helpers/_/_define_property";
5
- import { createLogger } from "../output/log/logger.js";
6
- import { defaults, pick } from "../util/object.js";
7
- import { PromiseSignal } from "../util/promise.js";
8
- import { parseArgs } from "./arg.js";
9
- var /**
10
- * The logger for the current context.
11
- */ _log = /*#__PURE__*/ new WeakMap(), /**
12
- * The callbacks that will be called when this context is aborted.
13
- */ _onAborts = /*#__PURE__*/ new WeakMap(), /**
14
- * The parent context, if any.
15
- */ _parent = /*#__PURE__*/ new WeakMap(), /**
16
- * The command that this context is running.
17
- */ _command = /*#__PURE__*/ new WeakMap(), /**
18
- * The user who is running this command, if any.
19
- */ _user = /*#__PURE__*/ new WeakMap(), /**
20
- * The app this command is running against, if any.
21
- */ _app = /*#__PURE__*/ new WeakMap(), /**
22
- * The environment this command is running against, if any.
23
- */ _env = /*#__PURE__*/ new WeakMap();
24
- /**
25
- * Represents the context of a command-line operation.
26
- */ export class Context extends AbortController {
27
- /**
28
- * A {@linkcode Logger} that can print to stdout and log structured
29
- * messages to stderr.
30
- */ get log() {
31
- return _class_private_field_get(this, _log);
32
- }
33
- get command() {
34
- return _class_private_field_get(this, _command) ?? _class_private_field_get(this, _parent)?.command ?? "root";
35
- }
36
- get user() {
37
- return _class_private_field_get(this, _user) ?? _class_private_field_get(this, _parent)?.user;
38
- }
39
- set user(user) {
40
- _class_private_field_set(this, _user, user);
41
- if (_class_private_field_get(this, _parent)) {
42
- _class_private_field_get(this, _parent).user = user;
43
- }
44
- _class_private_field_set(this, _log, _class_private_field_get(this, _log).child({
45
- fields: {
46
- user: {
47
- id: user.id
48
- }
49
- },
50
- devFields: {
51
- user
52
- }
53
- }));
54
- }
55
- // eslint-disable-next-line @typescript-eslint/member-ordering
56
- get app() {
57
- return _class_private_field_get(this, _app) ?? _class_private_field_get(this, _parent)?.app;
58
- }
59
- set app(app) {
60
- _class_private_field_set(this, _app, app);
61
- if (_class_private_field_get(this, _parent)) {
62
- _class_private_field_get(this, _parent).app = app;
63
- }
64
- _class_private_field_set(this, _log, _class_private_field_get(this, _log).child({
65
- fields: {
66
- app
67
- }
68
- }));
69
- }
70
- // eslint-disable-next-line @typescript-eslint/member-ordering
71
- get env() {
72
- return _class_private_field_get(this, _env) ?? _class_private_field_get(this, _parent)?.env;
73
- }
74
- set env(env) {
75
- _class_private_field_set(this, _env, env);
76
- if (_class_private_field_get(this, _parent)) {
77
- _class_private_field_get(this, _parent).env = env;
78
- }
79
- _class_private_field_set(this, _log, _class_private_field_get(this, _log).child({
80
- fields: {
81
- env
82
- }
83
- }));
84
- }
85
- /**
86
- * Initializes a new context.
87
- *
88
- * @see {@linkcode ContextInit}
89
- */ static init({ parse: spec, ...options }) {
90
- return new Context({
91
- args: spec ? parseArgs(spec, pick(options, [
92
- "argv",
93
- "permissive",
94
- "stopAtPositional"
95
- ])) : {},
96
- log: createLogger(pick(options, [
97
- "name",
98
- "fields",
99
- "devFields"
100
- ]))
101
- });
102
- }
103
- /**
104
- * Returns a new context that is a child of the current context.
105
- *
106
- * @see {@linkcode ChildContextInit}
107
- */ child({ parse: spec, command = _class_private_field_get(this, _command), ...options }) {
108
- const ctx = new Context({
109
- parent: this,
110
- command,
111
- args: {
112
- ...this.args,
113
- ...options.overwrite,
114
- ...spec ? parseArgs(spec, defaults(pick(options, [
115
- "argv",
116
- "permissive",
117
- "stopAtPositional"
118
- ]), {
119
- argv: this.args._
120
- })) : {}
121
- },
122
- log: this.log.child(pick(options, [
123
- "name",
124
- "fields",
125
- "devFields"
126
- ]))
127
- });
128
- this.onAbort(()=>ctx.abort());
129
- return ctx;
130
- }
131
- /**
132
- * Registers a callback that will be called when the context is
133
- * aborted (e.g. when the user presses Ctrl+C).
134
- *
135
- * @param callback - The callback to call when the context is aborted.
136
- */ onAbort(callback) {
137
- _class_private_field_get(this, _onAborts).push(callback);
138
- }
139
- constructor({ parent, command, args, log }){
140
- super();
141
- /**
142
- * The parsed command-line arguments for the current context and any
143
- * parent contexts.
144
- */ _define_property(this, "args", void 0);
145
- /**
146
- * A promise that resolves when the context is aborted and all the
147
- * registered onAbort callbacks have finished.
148
- */ _define_property(this, "done", new PromiseSignal());
149
- _class_private_field_init(this, _log, {
150
- writable: true,
151
- value: void 0
152
- });
153
- _class_private_field_init(this, _onAborts, {
154
- writable: true,
155
- value: []
156
- });
157
- _class_private_field_init(this, _parent, {
158
- writable: true,
159
- value: void 0
160
- });
161
- _class_private_field_init(this, _command, {
162
- writable: true,
163
- value: void 0
164
- });
165
- _class_private_field_init(this, _user, {
166
- writable: true,
167
- value: void 0
168
- });
169
- _class_private_field_init(this, _app, {
170
- writable: true,
171
- value: void 0
172
- });
173
- _class_private_field_init(this, _env, {
174
- writable: true,
175
- value: void 0
176
- });
177
- this.args = args;
178
- _class_private_field_set(this, _log, log);
179
- _class_private_field_set(this, _parent, parent);
180
- _class_private_field_set(this, _command, command);
181
- // in case this context is ...spread into another object
182
- this.abort = this.abort.bind(this);
183
- this.child = this.child.bind(this);
184
- this.onAbort = this.onAbort.bind(this);
185
- // when the context is aborted, call all the registered callbacks
186
- this.signal.addEventListener("abort", // eslint-disable-next-line @typescript-eslint/no-misused-promises
187
- async ()=>{
188
- let error;
189
- // call the callbacks in reverse order, like go's defer
190
- for (const callback of _class_private_field_get(this, _onAborts).reverse()){
191
- try {
192
- await callback(this.signal.reason);
193
- } catch (e) {
194
- error = e;
195
- this.log.error("error during abort", {
196
- error
197
- });
198
- }
199
- }
200
- if (error) {
201
- this.done.reject(error);
202
- } else {
203
- this.done.resolve();
204
- }
205
- });
206
- }
207
- }
208
-
209
- //# sourceMappingURL=context.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/services/command/context.ts"],"sourcesContent":["import type { EmptyObject } from \"type-fest\";\nimport type { RootArgs } from \"../../commands/root.js\";\nimport type { Application, Environment } from \"../app/app.js\";\nimport { createLogger, type Logger } from \"../output/log/logger.js\";\nimport type { StructuredLoggerOptions } from \"../output/log/structured.js\";\nimport type { User } from \"../user/user.js\";\nimport { defaults, pick } from \"../util/object.js\";\nimport { PromiseSignal } from \"../util/promise.js\";\nimport type { AnyVoid } from \"../util/types.js\";\nimport { parseArgs, type ArgsDefinition, type ArgsDefinitionResult, type ParseArgsOptions } from \"./arg.js\";\nimport type { AvailableCommand } from \"./command.js\";\n\n/**\n * Represents the options that can be passed to {@linkcode Context.init}.\n */\nexport type ContextInit<Args extends ArgsDefinition> = ParseArgsOptions &\n StructuredLoggerOptions & {\n /**\n * The command that this context is running.\n */\n command?: AvailableCommand;\n\n /**\n * The {@linkcode ArgsDefinition} to use to parse the arguments (`argv`).\n */\n parse?: Args;\n };\n\n/**\n * Represents the options that can be passed to {@linkcode Context.child}.\n *\n * @see {@linkcode Context.child}\n * @see {@linkcode ContextInit}\n */\nexport type ChildContextInit<Args extends ArgsDefinition, Parsed extends ArgsDefinitionResult<ArgsDefinition>> = Partial<\n ContextInit<Args>\n> & {\n /**\n * Replaces the parsed arguments of the parent context.\n */\n overwrite?: Partial<Omit<Parsed, \"_\">>;\n};\n\n/**\n * Represents the context of a command-line operation.\n */\nexport class Context<\n Args extends ArgsDefinition = EmptyObject,\n ParentArgs extends ArgsDefinition = RootArgs,\n ThisArgs extends ArgsDefinition = ParentArgs & Args,\n> extends AbortController {\n /**\n * The parsed command-line arguments for the current context and any\n * parent contexts.\n */\n readonly args: ArgsDefinitionResult<ThisArgs>;\n\n /**\n * A promise that resolves when the context is aborted and all the\n * registered onAbort callbacks have finished.\n */\n readonly done = new PromiseSignal<void>();\n\n /**\n * The logger for the current context.\n */\n #log: Logger;\n\n /**\n * The callbacks that will be called when this context is aborted.\n */\n #onAborts: OnAbort[] = [];\n\n /**\n * The parent context, if any.\n */\n #parent?: Context<ArgsDefinition, ParentArgs>;\n\n /**\n * The command that this context is running.\n */\n #command?: AvailableCommand;\n\n /**\n * The user who is running this command, if any.\n */\n #user?: User;\n\n /**\n * The app this command is running against, if any.\n */\n #app?: Application;\n\n /**\n * The environment this command is running against, if any.\n */\n #env?: Environment;\n\n private constructor({\n parent,\n command,\n args,\n log,\n }: {\n parent?: Context<ArgsDefinition, ParentArgs>;\n command?: AvailableCommand;\n args: ArgsDefinitionResult<ThisArgs>;\n log: Logger;\n }) {\n super();\n this.args = args;\n this.#log = log;\n this.#parent = parent;\n this.#command = command;\n\n // in case this context is ...spread into another object\n this.abort = this.abort.bind(this);\n this.child = this.child.bind(this);\n this.onAbort = this.onAbort.bind(this);\n\n // when the context is aborted, call all the registered callbacks\n this.signal.addEventListener(\n \"abort\",\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n async () => {\n let error: unknown;\n\n // call the callbacks in reverse order, like go's defer\n for (const callback of this.#onAborts.reverse()) {\n try {\n await callback(this.signal.reason);\n } catch (e: unknown) {\n error = e;\n this.log.error(\"error during abort\", { error });\n }\n }\n\n if (error) {\n this.done.reject(error);\n } else {\n this.done.resolve();\n }\n },\n );\n }\n\n /**\n * A {@linkcode Logger} that can print to stdout and log structured\n * messages to stderr.\n */\n get log(): Logger {\n return this.#log;\n }\n\n get command(): AvailableCommand | \"root\" {\n return this.#command ?? this.#parent?.command ?? \"root\";\n }\n\n get user(): User | undefined {\n return this.#user ?? this.#parent?.user;\n }\n\n set user(user: User) {\n this.#user = user;\n if (this.#parent) {\n this.#parent.user = user;\n }\n\n this.#log = this.#log.child({\n fields: { user: { id: user.id } },\n devFields: { user },\n });\n }\n\n // eslint-disable-next-line @typescript-eslint/member-ordering\n get app(): Application | undefined {\n return this.#app ?? this.#parent?.app;\n }\n\n set app(app: Application) {\n this.#app = app;\n if (this.#parent) {\n this.#parent.app = app;\n }\n\n this.#log = this.#log.child({ fields: { app } });\n }\n\n // eslint-disable-next-line @typescript-eslint/member-ordering\n get env(): Environment | undefined {\n return this.#env ?? this.#parent?.env;\n }\n\n set env(env: Environment) {\n this.#env = env;\n if (this.#parent) {\n this.#parent.env = env;\n }\n\n this.#log = this.#log.child({ fields: { env } });\n }\n\n /**\n * Initializes a new context.\n *\n * @see {@linkcode ContextInit}\n */\n static init<Args extends ArgsDefinition = EmptyObject>({ parse: spec, ...options }: ContextInit<Args>): Context<Args> {\n return new Context({\n args: spec ? parseArgs(spec, pick(options, [\"argv\", \"permissive\", \"stopAtPositional\"])) : ({} as ArgsDefinitionResult<Args>),\n log: createLogger(pick(options, [\"name\", \"fields\", \"devFields\"])),\n });\n }\n\n /**\n * Returns a new context that is a child of the current context.\n *\n * @see {@linkcode ChildContextInit}\n */\n child<ChildArgs extends ArgsDefinition = EmptyObject>({\n parse: spec,\n command = this.#command,\n ...options\n }: ChildContextInit<ChildArgs, ArgsDefinitionResult<ThisArgs>>): Context<ChildArgs, ThisArgs> {\n const ctx = new Context<ChildArgs, ThisArgs>({\n parent: this,\n command,\n args: {\n ...this.args,\n ...options.overwrite,\n ...(spec\n ? parseArgs(spec, defaults(pick(options, [\"argv\", \"permissive\", \"stopAtPositional\"]), { argv: this.args._ }))\n : ({} as ArgsDefinitionResult<ChildArgs>)),\n },\n log: this.log.child(pick(options, [\"name\", \"fields\", \"devFields\"])),\n });\n\n this.onAbort(() => ctx.abort());\n\n return ctx;\n }\n\n /**\n * Registers a callback that will be called when the context is\n * aborted (e.g. when the user presses Ctrl+C).\n *\n * @param callback - The callback to call when the context is aborted.\n */\n onAbort(callback: OnAbort): void {\n this.#onAborts.push(callback);\n }\n}\n\n/**\n * A callback that will be called when the context is aborted.\n */\nexport type OnAbort = (reason: unknown) => AnyVoid;\n"],"names":["createLogger","defaults","pick","PromiseSignal","parseArgs","Context","AbortController","log","command","parent","user","child","fields","id","devFields","app","env","init","parse","spec","options","args","ctx","overwrite","argv","_","onAbort","abort","callback","onAborts","push","done","bind","signal","addEventListener","error","reverse","reason","e","reject","resolve"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
@@ -1,133 +0,0 @@
1
- import isWsl from "is-wsl";
2
- import os from "node:os";
3
- import path from "node:path";
4
- import process from "node:process";
5
- import { Level, parseLevel } from "../output/log/level.js";
6
- import { env } from "./env.js";
7
- import { packageJson } from "./package-json.js";
8
- export const config = {
9
- get logLevel () {
10
- return parseLevel(process.env["GGT_LOG_LEVEL"], Level.PRINT);
11
- },
12
- get logFormat () {
13
- return process.env["GGT_LOG_FORMAT"] === "json" ? "json" : "pretty";
14
- },
15
- /**
16
- * Returns the full version string including name, version, platform,
17
- * arch, and Node.js version. This is passed as the user agent for all
18
- * outgoing http requests.
19
- *
20
- * @example "ggt/1.2.3 darwin-arm64 node-v16.0.0"
21
- */ get versionFull () {
22
- return `${packageJson.name}/${packageJson.version} ${this.platform}-${this.arch} node-${process.version}`;
23
- },
24
- get arch () {
25
- return os.arch() === "ia32" ? "x86" : os.arch();
26
- },
27
- get platform () {
28
- return isWsl ? "wsl" : os.platform();
29
- },
30
- get windows () {
31
- return process.platform === "win32";
32
- },
33
- get windowsOrWsl () {
34
- return this.windows || isWsl;
35
- },
36
- get macos () {
37
- return process.platform === "darwin";
38
- },
39
- get shell () {
40
- const SHELL = process.env["SHELL"] ?? os.userInfo().shell?.split(path.sep).pop();
41
- if (SHELL) {
42
- return SHELL.split("/").at(-1);
43
- }
44
- if (this.windows && process.env["COMSPEC"]) {
45
- return process.env["COMSPEC"].split(/\\|\//).at(-1);
46
- }
47
- return "unknown";
48
- },
49
- get homeDir () {
50
- if (process.env["HOME"]) {
51
- return process.env["HOME"];
52
- }
53
- if (this.windows) {
54
- if (process.env["HOMEDRIVE"] && process.env["HOMEPATH"]) {
55
- return path.join(process.env["HOMEDRIVE"], process.env["HOMEPATH"]);
56
- }
57
- if (process.env["USERPROFILE"]) {
58
- return process.env["USERPROFILE"];
59
- }
60
- }
61
- return os.homedir() || os.tmpdir();
62
- },
63
- /**
64
- * - Unix: `~/.config/ggt`
65
- * - Windows: `%LOCALAPPDATA%\ggt`
66
- *
67
- * Can be overridden by `GGT_CONFIG_DIR`
68
- */ get configDir () {
69
- if (process.env["GGT_CONFIG_DIR"]) {
70
- return process.env["GGT_CONFIG_DIR"];
71
- }
72
- const base = process.env["XDG_CONFIG_HOME"] || this.windows && process.env["LOCALAPPDATA"] || path.join(this.homeDir, ".config");
73
- return path.join(base, "ggt");
74
- },
75
- /**
76
- * - Linux: `~/.cache/ggt`
77
- * - macOS: `~/Library/Caches/ggt`
78
- * - Windows: `%LOCALAPPDATA%\ggt`
79
- *
80
- * Can be overridden with `GGT_CACHE_DIR`
81
- */ get cacheDir () {
82
- if (process.env["GGT_CACHE_DIR"]) {
83
- return process.env["GGT_CACHE_DIR"];
84
- }
85
- if (this.macos) {
86
- return path.join(this.homeDir, "Library/Caches/ggt");
87
- }
88
- const base = process.env["XDG_CACHE_HOME"] || this.windows && process.env["LOCALAPPDATA"] || path.join(this.homeDir, ".cache");
89
- return path.join(base, "ggt");
90
- },
91
- /**
92
- * - Unix: `~/.local/share/ggt`
93
- * - Windows: `%LOCALAPPDATA%\ggt`
94
- *
95
- * Can be overridden with `GGT_DATA_DIR`
96
- */ get dataDir () {
97
- if (process.env["GGT_DATA_DIR"]) {
98
- return process.env["GGT_DATA_DIR"];
99
- }
100
- const base = process.env["XDG_DATA_HOME"] || this.windows && process.env["LOCALAPPDATA"] || path.join(this.homeDir, ".local/share");
101
- return path.join(base, "ggt");
102
- },
103
- /**
104
- * Domains for various Gadget services.
105
- */ domains: {
106
- /**
107
- * The domain for the Gadget applications. This is where the user's application is hosted.
108
- */ get app () {
109
- return process.env["GGT_GADGET_APP_DOMAIN"] || (env.productionLike ? "gadget.app" : "ggt.pub");
110
- },
111
- /**
112
- * The domain for the Gadget services. This is where Gadget's API is hosted.
113
- */ get services () {
114
- return process.env["GGT_GADGET_SERVICES_DOMAIN"] || (env.productionLike ? "app.gadget.dev" : "app.ggt.dev");
115
- }
116
- }
117
- };
118
- /**
119
- * Returns an absolute path within the {@linkcode config.configDir}
120
- * directory.
121
- *
122
- * @param segments - The segments of the path to join.
123
- * @returns The absolute path to the file or directory.
124
- */ export const configPath = (...segments)=>path.join(config.configDir, ...segments);
125
- /**
126
- * Returns an absolute path within the {@linkcode config.homeDir}
127
- * directory.
128
- *
129
- * @param segments - The segments of the path to join.
130
- * @returns The absolute path to the file or directory.
131
- */ export const homePath = (...segments)=>path.join(config.homeDir, ...segments);
132
-
133
- //# sourceMappingURL=config.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/services/config/config.ts"],"sourcesContent":["import isWsl from \"is-wsl\";\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport process from \"node:process\";\nimport { Level, parseLevel } from \"../output/log/level.js\";\nimport { env } from \"./env.js\";\nimport { packageJson } from \"./package-json.js\";\n\nexport const config = {\n get logLevel() {\n return parseLevel(process.env[\"GGT_LOG_LEVEL\"], Level.PRINT);\n },\n\n get logFormat() {\n return process.env[\"GGT_LOG_FORMAT\"] === \"json\" ? \"json\" : \"pretty\";\n },\n\n /**\n * Returns the full version string including name, version, platform,\n * arch, and Node.js version. This is passed as the user agent for all\n * outgoing http requests.\n *\n * @example \"ggt/1.2.3 darwin-arm64 node-v16.0.0\"\n */\n get versionFull(): string {\n return `${packageJson.name}/${packageJson.version} ${this.platform}-${this.arch} node-${process.version}`;\n },\n\n get arch(): string {\n return os.arch() === \"ia32\" ? \"x86\" : os.arch();\n },\n\n get platform(): NodeJS.Platform | \"wsl\" {\n return isWsl ? \"wsl\" : os.platform();\n },\n\n get windows(): boolean {\n return process.platform === \"win32\";\n },\n\n get windowsOrWsl(): boolean {\n return this.windows || isWsl;\n },\n\n get macos(): boolean {\n return process.platform === \"darwin\";\n },\n\n get shell(): string | undefined {\n const SHELL = process.env[\"SHELL\"] ?? os.userInfo().shell?.split(path.sep).pop();\n if (SHELL) {\n return SHELL.split(\"/\").at(-1);\n }\n if (this.windows && process.env[\"COMSPEC\"]) {\n return process.env[\"COMSPEC\"].split(/\\\\|\\//).at(-1);\n }\n return \"unknown\";\n },\n\n get homeDir(): string {\n if (process.env[\"HOME\"]) {\n return process.env[\"HOME\"];\n }\n\n if (this.windows) {\n if (process.env[\"HOMEDRIVE\"] && process.env[\"HOMEPATH\"]) {\n return path.join(process.env[\"HOMEDRIVE\"], process.env[\"HOMEPATH\"]);\n }\n if (process.env[\"USERPROFILE\"]) {\n return process.env[\"USERPROFILE\"];\n }\n }\n\n return os.homedir() || os.tmpdir();\n },\n\n /**\n * - Unix: `~/.config/ggt`\n * - Windows: `%LOCALAPPDATA%\\ggt`\n *\n * Can be overridden by `GGT_CONFIG_DIR`\n */\n get configDir(): string {\n if (process.env[\"GGT_CONFIG_DIR\"]) {\n return process.env[\"GGT_CONFIG_DIR\"];\n }\n\n const base = process.env[\"XDG_CONFIG_HOME\"] || (this.windows && process.env[\"LOCALAPPDATA\"]) || path.join(this.homeDir, \".config\");\n return path.join(base, \"ggt\");\n },\n\n /**\n * - Linux: `~/.cache/ggt`\n * - macOS: `~/Library/Caches/ggt`\n * - Windows: `%LOCALAPPDATA%\\ggt`\n *\n * Can be overridden with `GGT_CACHE_DIR`\n */\n get cacheDir(): string {\n if (process.env[\"GGT_CACHE_DIR\"]) {\n return process.env[\"GGT_CACHE_DIR\"];\n }\n\n if (this.macos) {\n return path.join(this.homeDir, \"Library/Caches/ggt\");\n }\n\n const base = process.env[\"XDG_CACHE_HOME\"] || (this.windows && process.env[\"LOCALAPPDATA\"]) || path.join(this.homeDir, \".cache\");\n return path.join(base, \"ggt\");\n },\n\n /**\n * - Unix: `~/.local/share/ggt`\n * - Windows: `%LOCALAPPDATA%\\ggt`\n *\n * Can be overridden with `GGT_DATA_DIR`\n */\n get dataDir(): string {\n if (process.env[\"GGT_DATA_DIR\"]) {\n return process.env[\"GGT_DATA_DIR\"];\n }\n\n const base = process.env[\"XDG_DATA_HOME\"] || (this.windows && process.env[\"LOCALAPPDATA\"]) || path.join(this.homeDir, \".local/share\");\n return path.join(base, \"ggt\");\n },\n\n /**\n * Domains for various Gadget services.\n */\n domains: {\n /**\n * The domain for the Gadget applications. This is where the user's application is hosted.\n */\n get app() {\n return process.env[\"GGT_GADGET_APP_DOMAIN\"] || (env.productionLike ? \"gadget.app\" : \"ggt.pub\");\n },\n\n /**\n * The domain for the Gadget services. This is where Gadget's API is hosted.\n */\n get services() {\n return process.env[\"GGT_GADGET_SERVICES_DOMAIN\"] || (env.productionLike ? \"app.gadget.dev\" : \"app.ggt.dev\");\n },\n },\n};\n\n/**\n * Returns an absolute path within the {@linkcode config.configDir}\n * directory.\n *\n * @param segments - The segments of the path to join.\n * @returns The absolute path to the file or directory.\n */\nexport const configPath = (...segments: string[]): string => path.join(config.configDir, ...segments);\n\n/**\n * Returns an absolute path within the {@linkcode config.homeDir}\n * directory.\n *\n * @param segments - The segments of the path to join.\n * @returns The absolute path to the file or directory.\n */\nexport const homePath = (...segments: string[]): string => path.join(config.homeDir, ...segments);\n"],"names":["isWsl","os","path","process","Level","parseLevel","env","packageJson","config","logLevel","PRINT","logFormat","versionFull","name","version","platform","arch","windows","windowsOrWsl","macos","shell","SHELL","userInfo","split","sep","pop","at","homeDir","join","homedir","tmpdir","configDir","base","cacheDir","dataDir","domains","app","productionLike","services","configPath","segments","homePath"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
@@ -1,22 +0,0 @@
1
- import process from "node:process";
2
- /**
3
- * Captures the current environment ggt is running in.
4
- */ export const env = {
5
- get value () {
6
- return process.env["GGT_ENV"] || "production";
7
- },
8
- get productionLike () {
9
- return !this.developmentOrTestLike;
10
- },
11
- get developmentLike () {
12
- return this.value.startsWith("development");
13
- },
14
- get testLike () {
15
- return this.value.startsWith("test");
16
- },
17
- get developmentOrTestLike () {
18
- return this.developmentLike || this.testLike;
19
- }
20
- };
21
-
22
- //# sourceMappingURL=env.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/services/config/env.ts"],"sourcesContent":["import process from \"node:process\";\n\n/**\n * Captures the current environment ggt is running in.\n */\nexport const env = {\n get value(): string {\n return process.env[\"GGT_ENV\"] || \"production\";\n },\n\n get productionLike(): boolean {\n return !this.developmentOrTestLike;\n },\n\n get developmentLike(): boolean {\n return this.value.startsWith(\"development\");\n },\n\n get testLike(): boolean {\n return this.value.startsWith(\"test\");\n },\n\n get developmentOrTestLike(): boolean {\n return this.developmentLike || this.testLike;\n },\n};\n"],"names":["process","env","value","productionLike","developmentOrTestLike","developmentLike","startsWith","testLike"],"rangeMappings":";;;;;;;;;;;;;;;;;;;","mappings":"AAAA,OAAOA,aAAa,eAAe;AAEnC;;CAEC,GACD,OAAO,MAAMC,MAAM;IACjB,IAAIC,SAAgB;QAClB,OAAOF,QAAQC,GAAG,CAAC,UAAU,IAAI;IACnC;IAEA,IAAIE,kBAA0B;QAC5B,OAAO,CAAC,IAAI,CAACC,qBAAqB;IACpC;IAEA,IAAIC,mBAA2B;QAC7B,OAAO,IAAI,CAACH,KAAK,CAACI,UAAU,CAAC;IAC/B;IAEA,IAAIC,YAAoB;QACtB,OAAO,IAAI,CAACL,KAAK,CAACI,UAAU,CAAC;IAC/B;IAEA,IAAIF,yBAAiC;QACnC,OAAO,IAAI,CAACC,eAAe,IAAI,IAAI,CAACE,QAAQ;IAC9C;AACF,EAAE"}
@@ -1,9 +0,0 @@
1
- import fs from "fs-extra";
2
- import normalizePackageData from "normalize-package-data";
3
- import { workspacePath } from "../util/paths.js";
4
- /**
5
- * The package.json of the ggt package.
6
- */ export const packageJson = await fs.readJson(workspacePath("package.json"));
7
- normalizePackageData(packageJson, true);
8
-
9
- //# sourceMappingURL=package-json.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/services/config/package-json.ts"],"sourcesContent":["import fs from \"fs-extra\";\nimport type { Package } from \"normalize-package-data\";\nimport normalizePackageData from \"normalize-package-data\";\nimport { workspacePath } from \"../util/paths.js\";\n\n/**\n * The package.json of the ggt package.\n */\nexport const packageJson = (await fs.readJson(workspacePath(\"package.json\"))) as Package;\n\nnormalizePackageData(packageJson, true);\n"],"names":["fs","normalizePackageData","workspacePath","packageJson","readJson"],"rangeMappings":";;;;;;","mappings":"AAAA,OAAOA,QAAQ,WAAW;AAE1B,OAAOC,0BAA0B,yBAAyB;AAC1D,SAASC,aAAa,QAAQ,mBAAmB;AAEjD;;CAEC,GACD,OAAO,MAAMC,cAAe,MAAMH,GAAGI,QAAQ,CAACF,cAAc,iBAA6B;AAEzFD,qBAAqBE,aAAa"}
@@ -1,134 +0,0 @@
1
- import { _ as _define_property } from "@swc/helpers/_/_define_property";
2
- import chalk from "chalk";
3
- import pluralize from "pluralize";
4
- import { config } from "../config/config.js";
5
- import { Level } from "../output/log/level.js";
6
- import { println } from "../output/print.js";
7
- import { sprint, sprintln } from "../output/sprint.js";
8
- import { symbol } from "../output/symbols.js";
9
- import { sprintTable } from "../output/table.js";
10
- import { memo } from "../util/function.js";
11
- import { isNever, isString } from "../util/is.js";
12
- export class Changes extends Map {
13
- constructor(...args){
14
- super(...args);
15
- _define_property(this, "created", memo(()=>{
16
- return Array.from(this.entries()).filter(([, change])=>change.type === "create").map(([path])=>path);
17
- }));
18
- _define_property(this, "updated", memo(()=>{
19
- return Array.from(this.entries()).filter(([, change])=>change.type === "update").map(([path])=>path);
20
- }));
21
- _define_property(this, "deleted", memo(()=>{
22
- return Array.from(this.entries()).filter(([, change])=>change.type === "delete").map(([path])=>path);
23
- }));
24
- }
25
- }
26
- const createdSymbol = chalk.greenBright("+");
27
- const updatedSymbol = chalk.blueBright("±");
28
- const deletedSymbol = chalk.redBright("-");
29
- const renameSymbol = chalk.yellowBright("→");
30
- /**
31
- * Prints the changes to the console.
32
- *
33
- * @param _ctx - The current context.
34
- * @see {@linkcode SprintChangesOptions}
35
- */ export const sprintChanges = (_ctx, { changes, tense, includeDotGadget, limit = Infinity, ...tableOptions })=>{
36
- if (config.logLevel <= Level.TRACE) {
37
- // print all changes when tracing
38
- limit = Infinity;
39
- }
40
- let changesToPrint = Array.from(changes.entries());
41
- if (includeDotGadget === undefined && changesToPrint.every(([filepath])=>filepath.startsWith(".gadget/"))) {
42
- // we weren't explicitly told to exclude `.gadget/` files, and all
43
- // the changes are to files within `.gadget/`, so include them since
44
- // there's nothing else to show
45
- includeDotGadget = true;
46
- }
47
- if (!includeDotGadget) {
48
- changesToPrint = changesToPrint.filter(([filepath])=>!filepath.startsWith(".gadget/"));
49
- }
50
- const renamed = chalk.yellowBright(tense === "past" ? "renamed" : "rename");
51
- const created = chalk.greenBright(tense === "past" ? "created" : "create");
52
- const updated = chalk.blueBright(tense === "past" ? "updated" : "update");
53
- const deleted = chalk.redBright(tense === "past" ? "deleted" : "delete");
54
- const rows = changesToPrint.sort((a, b)=>a[0].localeCompare(b[0])).slice(0, limit).map(([path, change])=>{
55
- switch(true){
56
- case change.type === "create" && isString(change.oldPath):
57
- return [
58
- renameSymbol,
59
- chalk.yellowBright(change.oldPath),
60
- renamed,
61
- renameSymbol,
62
- chalk.yellowBright(path)
63
- ];
64
- case change.type === "create":
65
- return [
66
- createdSymbol,
67
- chalk.greenBright(path),
68
- created
69
- ];
70
- case change.type === "update":
71
- return [
72
- updatedSymbol,
73
- chalk.blueBright(path),
74
- updated
75
- ];
76
- case change.type === "delete":
77
- return [
78
- deletedSymbol,
79
- chalk.redBright(path),
80
- deleted
81
- ];
82
- default:
83
- return isNever(change);
84
- }
85
- });
86
- if (changesToPrint.length > limit) {
87
- rows.push([
88
- chalk.gray(symbol.ellipsis),
89
- sprint`{gray ${changesToPrint.length - limit} more}`,
90
- ""
91
- ]);
92
- }
93
- let footer;
94
- if (changesToPrint.length >= 5) {
95
- const breakdown = [];
96
- const createdCount = changesToPrint.filter(([, change])=>change.type === "create").length;
97
- if (createdCount > 0) {
98
- const created = tense === "past" ? `${createdCount} created` : pluralize("create", createdCount, true);
99
- breakdown.push(sprint`{greenBright ${created}}`);
100
- }
101
- const updatedCount = changesToPrint.filter(([, change])=>change.type === "update").length;
102
- if (updatedCount > 0) {
103
- const updated = tense === "past" ? `${updatedCount} updated` : pluralize("update", updatedCount, true);
104
- breakdown.push(sprint`{blueBright ${updated}}`);
105
- }
106
- const deletedCount = changesToPrint.filter(([, change])=>change.type === "delete").length;
107
- if (deletedCount > 0) {
108
- const deleted = tense === "past" ? `${deletedCount} deleted` : pluralize("delete", deletedCount, true);
109
- breakdown.push(sprint`{redBright ${deleted}}`);
110
- }
111
- footer = sprintln`
112
- ${pluralize("change", changesToPrint.length, true)} in total. ${breakdown.join(", ")}.
113
- `;
114
- }
115
- return sprintTable({
116
- rows,
117
- footer,
118
- ensureEmptyLineAbove: true,
119
- ensureEmptyLineAboveBody: false,
120
- ensureEmptyLineAboveFooter: true,
121
- indent: 0,
122
- ...tableOptions
123
- });
124
- };
125
- /**
126
- * Prints the changes to the console.
127
- *
128
- * @param _ctx - The current context.
129
- * @see {@linkcode SprintChangesOptions}
130
- */ export const printChanges = (_ctx, options)=>{
131
- println(sprintChanges(_ctx, options));
132
- };
133
-
134
- //# sourceMappingURL=changes.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/services/filesync/changes.ts"],"sourcesContent":["import chalk from \"chalk\";\nimport pluralize from \"pluralize\";\nimport type { Context } from \"../command/context.js\";\nimport { config } from \"../config/config.js\";\nimport { Level } from \"../output/log/level.js\";\nimport { println } from \"../output/print.js\";\nimport { sprint, sprintln } from \"../output/sprint.js\";\nimport { symbol } from \"../output/symbols.js\";\nimport { sprintTable, type SprintTableOptions } from \"../output/table.js\";\nimport { memo } from \"../util/function.js\";\nimport { isNever, isString } from \"../util/is.js\";\nimport type { ChangesWithHash } from \"./hashes.js\";\n\nexport type Create = { type: \"create\"; oldPath?: string };\nexport type Update = { type: \"update\" };\nexport type Delete = { type: \"delete\" };\nexport type Change = Create | Update | Delete;\n\nexport class Changes extends Map<string, Change> {\n created = memo((): string[] => {\n return Array.from(this.entries())\n .filter(([, change]) => change.type === \"create\")\n .map(([path]) => path);\n });\n\n updated = memo((): string[] => {\n return Array.from(this.entries())\n .filter(([, change]) => change.type === \"update\")\n .map(([path]) => path);\n });\n\n deleted = memo((): string[] => {\n return Array.from(this.entries())\n .filter(([, change]) => change.type === \"delete\")\n .map(([path]) => path);\n });\n}\n\nexport type PrintChangesOptions = Partial<SprintTableOptions> & {\n /**\n * The tense to use for the change type.\n */\n tense: \"past\" | \"present\";\n\n /**\n * Whether to include `.gadget/` files in the output.\n *\n * @default undefined (true if there are no other changes, false otherwise)\n */\n includeDotGadget?: boolean;\n\n /**\n * The maximum number of changes to print.\n *\n * @default Infinity\n */\n limit?: number;\n};\n\nconst createdSymbol = chalk.greenBright(\"+\");\nconst updatedSymbol = chalk.blueBright(\"±\");\nconst deletedSymbol = chalk.redBright(\"-\");\nconst renameSymbol = chalk.yellowBright(\"→\");\n\n/**\n * Prints the changes to the console.\n *\n * @param _ctx - The current context.\n * @see {@linkcode SprintChangesOptions}\n */\nexport const sprintChanges = (\n _ctx: Context,\n { changes, tense, includeDotGadget, limit = Infinity, ...tableOptions }: { changes: Changes | ChangesWithHash } & PrintChangesOptions,\n): string => {\n if (config.logLevel <= Level.TRACE) {\n // print all changes when tracing\n limit = Infinity;\n }\n\n let changesToPrint = Array.from(changes.entries());\n\n if (includeDotGadget === undefined && changesToPrint.every(([filepath]) => filepath.startsWith(\".gadget/\"))) {\n // we weren't explicitly told to exclude `.gadget/` files, and all\n // the changes are to files within `.gadget/`, so include them since\n // there's nothing else to show\n includeDotGadget = true;\n }\n\n if (!includeDotGadget) {\n changesToPrint = changesToPrint.filter(([filepath]) => !filepath.startsWith(\".gadget/\"));\n }\n\n const renamed = chalk.yellowBright(tense === \"past\" ? \"renamed\" : \"rename\");\n const created = chalk.greenBright(tense === \"past\" ? \"created\" : \"create\");\n const updated = chalk.blueBright(tense === \"past\" ? \"updated\" : \"update\");\n const deleted = chalk.redBright(tense === \"past\" ? \"deleted\" : \"delete\");\n\n const rows = changesToPrint\n .sort((a, b) => a[0].localeCompare(b[0]))\n .slice(0, limit)\n .map(([path, change]) => {\n switch (true) {\n case change.type === \"create\" && isString(change.oldPath):\n return [renameSymbol, chalk.yellowBright(change.oldPath), renamed, renameSymbol, chalk.yellowBright(path)];\n case change.type === \"create\":\n return [createdSymbol, chalk.greenBright(path), created];\n case change.type === \"update\":\n return [updatedSymbol, chalk.blueBright(path), updated];\n case change.type === \"delete\":\n return [deletedSymbol, chalk.redBright(path), deleted];\n default:\n return isNever(change);\n }\n });\n\n if (changesToPrint.length > limit) {\n rows.push([chalk.gray(symbol.ellipsis), sprint`{gray ${changesToPrint.length - limit} more}`, \"\"]);\n }\n\n let footer: string | undefined;\n if (changesToPrint.length >= 5) {\n const breakdown = [];\n\n const createdCount = changesToPrint.filter(([, change]) => change.type === \"create\").length;\n if (createdCount > 0) {\n const created = tense === \"past\" ? `${createdCount} created` : pluralize(\"create\", createdCount, true);\n breakdown.push(sprint`{greenBright ${created}}`);\n }\n\n const updatedCount = changesToPrint.filter(([, change]) => change.type === \"update\").length;\n if (updatedCount > 0) {\n const updated = tense === \"past\" ? `${updatedCount} updated` : pluralize(\"update\", updatedCount, true);\n breakdown.push(sprint`{blueBright ${updated}}`);\n }\n\n const deletedCount = changesToPrint.filter(([, change]) => change.type === \"delete\").length;\n if (deletedCount > 0) {\n const deleted = tense === \"past\" ? `${deletedCount} deleted` : pluralize(\"delete\", deletedCount, true);\n breakdown.push(sprint`{redBright ${deleted}}`);\n }\n\n footer = sprintln`\n ${pluralize(\"change\", changesToPrint.length, true)} in total. ${breakdown.join(\", \")}.\n `;\n }\n\n return sprintTable({\n rows,\n footer,\n ensureEmptyLineAbove: true,\n ensureEmptyLineAboveBody: false,\n ensureEmptyLineAboveFooter: true,\n indent: 0,\n ...tableOptions,\n });\n};\n\n/**\n * Prints the changes to the console.\n *\n * @param _ctx - The current context.\n * @see {@linkcode SprintChangesOptions}\n */\nexport const printChanges = (_ctx: Context, options: { changes: Changes | ChangesWithHash } & PrintChangesOptions): void => {\n println(sprintChanges(_ctx, options));\n};\n"],"names":["chalk","pluralize","config","Level","println","sprint","sprintln","symbol","sprintTable","memo","isNever","isString","Changes","Map","created","Array","from","entries","filter","change","type","map","path","updated","deleted","createdSymbol","greenBright","updatedSymbol","blueBright","deletedSymbol","redBright","renameSymbol","yellowBright","sprintChanges","_ctx","changes","tense","includeDotGadget","limit","Infinity","tableOptions","logLevel","TRACE","changesToPrint","undefined","every","filepath","startsWith","renamed","rows","sort","a","b","localeCompare","slice","oldPath","length","push","gray","ellipsis","footer","breakdown","createdCount","updatedCount","deletedCount","join","ensureEmptyLineAbove","ensureEmptyLineAboveBody","ensureEmptyLineAboveFooter","indent","printChanges","options"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}