@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.
- package/dist/add-4ME2KTJQ.js +84 -0
- package/dist/add-4ME2KTJQ.js.map +7 -0
- package/dist/build-4BGA4IZE.js +3 -0
- package/dist/build-4BGA4IZE.js.map +7 -0
- package/dist/chunk-57XALM2W.js +2 -0
- package/dist/chunk-57XALM2W.js.map +7 -0
- package/dist/chunk-5DLLJX5F.js +11 -0
- package/dist/chunk-5DLLJX5F.js.map +7 -0
- package/dist/chunk-5WC5D4WL.js +2 -0
- package/dist/chunk-5WC5D4WL.js.map +7 -0
- package/dist/chunk-BSCZOMV4.js +2 -0
- package/dist/chunk-BSCZOMV4.js.map +7 -0
- package/dist/chunk-BZY2AIPV.js +57 -0
- package/dist/chunk-BZY2AIPV.js.map +7 -0
- package/dist/chunk-D2K5XPNJ.js +2 -0
- package/dist/chunk-D2K5XPNJ.js.map +7 -0
- package/dist/chunk-F3EZ4KS3.js +2 -0
- package/dist/chunk-F3EZ4KS3.js.map +7 -0
- package/dist/chunk-G3VNV5Z6.js +33 -0
- package/dist/chunk-G3VNV5Z6.js.map +7 -0
- package/dist/chunk-GA7AL463.js +24 -0
- package/dist/chunk-GA7AL463.js.map +7 -0
- package/dist/chunk-GOBNB5VT.js +2 -0
- package/dist/chunk-GOBNB5VT.js.map +7 -0
- package/dist/chunk-HKBXEZNF.js +2 -0
- package/dist/chunk-HKBXEZNF.js.map +7 -0
- package/{lib/commands/push.js → dist/chunk-IKJVXTZK.js} +7 -48
- package/dist/chunk-IKJVXTZK.js.map +7 -0
- package/dist/chunk-KGSSHEEC.js +17 -0
- package/dist/chunk-KGSSHEEC.js.map +7 -0
- package/dist/chunk-KXK37C5D.js +183 -0
- package/dist/chunk-KXK37C5D.js.map +7 -0
- package/dist/chunk-NJIDVM2C.js +27 -0
- package/dist/chunk-NJIDVM2C.js.map +7 -0
- package/dist/chunk-Q5N5L6H3.js +6 -0
- package/dist/chunk-Q5N5L6H3.js.map +7 -0
- package/dist/chunk-QEVWPU3D.js +8 -0
- package/dist/chunk-QEVWPU3D.js.map +7 -0
- package/dist/chunk-X36GM74C.js +2 -0
- package/dist/chunk-X36GM74C.js.map +7 -0
- package/dist/chunk-YRP2UZ2I.js +126 -0
- package/dist/chunk-YRP2UZ2I.js.map +7 -0
- package/dist/deploy-6HOBYPE6.js +30 -0
- package/dist/deploy-6HOBYPE6.js.map +7 -0
- package/dist/dev-M3WDGK4D.js +57 -0
- package/dist/dev-M3WDGK4D.js.map +7 -0
- package/dist/esm-BL3OM5UJ.js +33 -0
- package/dist/esm-BL3OM5UJ.js.map +7 -0
- package/dist/list-725RHWD5.js +11 -0
- package/dist/list-725RHWD5.js.map +7 -0
- package/dist/login-I4RGMDLE.js +2 -0
- package/dist/login-I4RGMDLE.js.map +7 -0
- package/dist/logout-UZBACOIX.js +7 -0
- package/dist/logout-UZBACOIX.js.map +7 -0
- package/dist/main.js +45 -0
- package/dist/main.js.map +7 -0
- package/dist/open-GWKGQQG3.js +74 -0
- package/dist/open-GWKGQQG3.js.map +7 -0
- package/{lib/commands/pull.js → dist/pull-7C5A65KB.js} +7 -48
- package/dist/pull-7C5A65KB.js.map +7 -0
- package/dist/push-LPUIR4EO.js +2 -0
- package/dist/push-LPUIR4EO.js.map +7 -0
- package/dist/status-DFKKSRVB.js +14 -0
- package/dist/status-DFKKSRVB.js.map +7 -0
- package/dist/version-JD42JXWY.js +11 -0
- package/dist/version-JD42JXWY.js.map +7 -0
- package/dist/whoami-I23R6HOG.js +7 -0
- package/dist/whoami-I23R6HOG.js.map +7 -0
- package/package.json +72 -74
- package/lib/__generated__/graphql.js +0 -78
- package/lib/__generated__/graphql.js.map +0 -1
- package/lib/commands/add.js +0 -385
- package/lib/commands/add.js.map +0 -1
- package/lib/commands/deploy.js +0 -287
- package/lib/commands/deploy.js.map +0 -1
- package/lib/commands/dev.js +0 -374
- package/lib/commands/dev.js.map +0 -1
- package/lib/commands/list.js +0 -47
- package/lib/commands/list.js.map +0 -1
- package/lib/commands/login.js +0 -96
- package/lib/commands/login.js.map +0 -1
- package/lib/commands/logout.js +0 -20
- package/lib/commands/logout.js.map +0 -1
- package/lib/commands/open.js +0 -159
- package/lib/commands/open.js.map +0 -1
- package/lib/commands/pull.js.map +0 -1
- package/lib/commands/push.js.map +0 -1
- package/lib/commands/root.js +0 -110
- package/lib/commands/root.js.map +0 -1
- package/lib/commands/status.js +0 -56
- package/lib/commands/status.js.map +0 -1
- package/lib/commands/version.js +0 -18
- package/lib/commands/version.js.map +0 -1
- package/lib/commands/whoami.js +0 -23
- package/lib/commands/whoami.js.map +0 -1
- package/lib/ggt.js +0 -65
- package/lib/ggt.js.map +0 -1
- package/lib/main.js +0 -5
- package/lib/main.js.map +0 -1
- package/lib/services/app/api/api.js +0 -191
- package/lib/services/app/api/api.js.map +0 -1
- package/lib/services/app/api/operation.js +0 -23
- package/lib/services/app/api/operation.js.map +0 -1
- package/lib/services/app/app.js +0 -95
- package/lib/services/app/app.js.map +0 -1
- package/lib/services/app/arg.js +0 -28
- package/lib/services/app/arg.js.map +0 -1
- package/lib/services/app/client.js +0 -182
- package/lib/services/app/client.js.map +0 -1
- package/lib/services/app/edit/edit.js +0 -191
- package/lib/services/app/edit/edit.js.map +0 -1
- package/lib/services/app/edit/operation.js +0 -155
- package/lib/services/app/edit/operation.js.map +0 -1
- package/lib/services/app/error.js +0 -65
- package/lib/services/app/error.js.map +0 -1
- package/lib/services/command/arg.js +0 -55
- package/lib/services/command/arg.js.map +0 -1
- package/lib/services/command/command.js +0 -47
- package/lib/services/command/command.js.map +0 -1
- package/lib/services/command/context.js +0 -209
- package/lib/services/command/context.js.map +0 -1
- package/lib/services/config/config.js +0 -133
- package/lib/services/config/config.js.map +0 -1
- package/lib/services/config/env.js +0 -22
- package/lib/services/config/env.js.map +0 -1
- package/lib/services/config/package-json.js +0 -9
- package/lib/services/config/package-json.js.map +0 -1
- package/lib/services/filesync/changes.js +0 -134
- package/lib/services/filesync/changes.js.map +0 -1
- package/lib/services/filesync/conflicts.js +0 -140
- package/lib/services/filesync/conflicts.js.map +0 -1
- package/lib/services/filesync/directory.js +0 -269
- package/lib/services/filesync/directory.js.map +0 -1
- package/lib/services/filesync/error.js +0 -137
- package/lib/services/filesync/error.js.map +0 -1
- package/lib/services/filesync/file.js +0 -3
- package/lib/services/filesync/file.js.map +0 -1
- package/lib/services/filesync/filesync.js +0 -791
- package/lib/services/filesync/filesync.js.map +0 -1
- package/lib/services/filesync/hashes.js +0 -172
- package/lib/services/filesync/hashes.js.map +0 -1
- package/lib/services/filesync/strategy.js +0 -59
- package/lib/services/filesync/strategy.js.map +0 -1
- package/lib/services/filesync/sync-json.js +0 -475
- package/lib/services/filesync/sync-json.js.map +0 -1
- package/lib/services/http/auth.js +0 -70
- package/lib/services/http/auth.js.map +0 -1
- package/lib/services/http/http.js +0 -136
- package/lib/services/http/http.js.map +0 -1
- package/lib/services/output/confirm.js +0 -149
- package/lib/services/output/confirm.js.map +0 -1
- package/lib/services/output/footer.js +0 -22
- package/lib/services/output/footer.js.map +0 -1
- package/lib/services/output/log/field.js +0 -3
- package/lib/services/output/log/field.js.map +0 -1
- package/lib/services/output/log/format/format.js +0 -8
- package/lib/services/output/log/format/format.js.map +0 -1
- package/lib/services/output/log/format/json.js +0 -37
- package/lib/services/output/log/format/json.js.map +0 -1
- package/lib/services/output/log/format/pretty.js +0 -158
- package/lib/services/output/log/format/pretty.js.map +0 -1
- package/lib/services/output/log/level.js +0 -41
- package/lib/services/output/log/level.js.map +0 -1
- package/lib/services/output/log/logger.js +0 -53
- package/lib/services/output/log/logger.js.map +0 -1
- package/lib/services/output/log/structured.js +0 -52
- package/lib/services/output/log/structured.js.map +0 -1
- package/lib/services/output/notify.js +0 -27
- package/lib/services/output/notify.js.map +0 -1
- package/lib/services/output/output.js +0 -197
- package/lib/services/output/output.js.map +0 -1
- package/lib/services/output/print.js +0 -31
- package/lib/services/output/print.js.map +0 -1
- package/lib/services/output/problems.js +0 -84
- package/lib/services/output/problems.js.map +0 -1
- package/lib/services/output/prompt.js +0 -185
- package/lib/services/output/prompt.js.map +0 -1
- package/lib/services/output/report.js +0 -190
- package/lib/services/output/report.js.map +0 -1
- package/lib/services/output/select.js +0 -198
- package/lib/services/output/select.js.map +0 -1
- package/lib/services/output/spinner.js +0 -141
- package/lib/services/output/spinner.js.map +0 -1
- package/lib/services/output/sprint.js +0 -44
- package/lib/services/output/sprint.js.map +0 -1
- package/lib/services/output/symbols.js +0 -23
- package/lib/services/output/symbols.js.map +0 -1
- package/lib/services/output/table.js +0 -98
- package/lib/services/output/table.js.map +0 -1
- package/lib/services/output/timestamp.js +0 -12
- package/lib/services/output/timestamp.js.map +0 -1
- package/lib/services/output/update.js +0 -99
- package/lib/services/output/update.js.map +0 -1
- package/lib/services/user/session.js +0 -54
- package/lib/services/user/session.js.map +0 -1
- package/lib/services/user/user.js +0 -76
- package/lib/services/user/user.js.map +0 -1
- package/lib/services/util/assert.js +0 -11
- package/lib/services/util/assert.js.map +0 -1
- package/lib/services/util/boolean.js +0 -15
- package/lib/services/util/boolean.js.map +0 -1
- package/lib/services/util/collection.js +0 -38
- package/lib/services/util/collection.js.map +0 -1
- package/lib/services/util/function.js +0 -153
- package/lib/services/util/function.js.map +0 -1
- package/lib/services/util/is.js +0 -97
- package/lib/services/util/is.js.map +0 -1
- package/lib/services/util/json.js +0 -33
- package/lib/services/util/json.js.map +0 -1
- package/lib/services/util/number.js +0 -27
- package/lib/services/util/number.js.map +0 -1
- package/lib/services/util/object.js +0 -104
- package/lib/services/util/object.js.map +0 -1
- package/lib/services/util/paths.js +0 -36
- package/lib/services/util/paths.js.map +0 -1
- package/lib/services/util/promise.js +0 -74
- package/lib/services/util/promise.js.map +0 -1
- package/lib/services/util/types.js +0 -5
- package/lib/services/util/types.js.map +0 -1
- package/npm-shrinkwrap.json +0 -29545
|
@@ -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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"}
|