@gadgetinc/ggt 1.7.3 → 2.2.0
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/README.md +142 -31
- package/dist/{add-VP2I3CKE.js → add-TWLGKL2T.js} +9 -8
- package/dist/add-TWLGKL2T.js.map +7 -0
- package/dist/agent-plugin-TN24O7FB.js +10 -0
- package/dist/agent-plugin-TN24O7FB.js.map +7 -0
- package/dist/chunk-2742UPMB.js +10 -0
- package/dist/chunk-2742UPMB.js.map +7 -0
- package/dist/chunk-3OM5WM7E.js +2 -0
- package/dist/chunk-3OM5WM7E.js.map +7 -0
- package/dist/chunk-442CSROP.js +66 -0
- package/dist/chunk-442CSROP.js.map +7 -0
- package/dist/chunk-DR4CXBD6.js +11 -0
- package/dist/chunk-DR4CXBD6.js.map +7 -0
- package/dist/chunk-F255O64V.js +2 -0
- package/dist/chunk-F255O64V.js.map +7 -0
- package/dist/chunk-GJGBTM5Y.js +2 -0
- package/dist/chunk-GJGBTM5Y.js.map +7 -0
- package/dist/chunk-HCULGPBH.js +2 -0
- package/dist/chunk-HCULGPBH.js.map +7 -0
- package/dist/chunk-J232VCIM.js +2 -0
- package/dist/chunk-J232VCIM.js.map +7 -0
- package/dist/chunk-JG2QCDK2.js +118 -0
- package/dist/chunk-JG2QCDK2.js.map +7 -0
- package/dist/chunk-JKZNSRLU.js +8 -0
- package/dist/chunk-JKZNSRLU.js.map +7 -0
- package/dist/chunk-JYE5LLIF.js +9 -0
- package/dist/chunk-JYE5LLIF.js.map +7 -0
- package/dist/{chunk-SX5LO3XQ.js → chunk-KKIL22RY.js} +1 -1
- package/dist/{chunk-SX5LO3XQ.js.map → chunk-KKIL22RY.js.map} +1 -1
- package/dist/chunk-L2XBSR7G.js +2 -0
- package/dist/chunk-L2XBSR7G.js.map +7 -0
- package/dist/chunk-MW6MXMSN.js +2 -0
- package/dist/chunk-MW6MXMSN.js.map +7 -0
- package/dist/chunk-OUIZQC4D.js +12 -0
- package/dist/chunk-OUIZQC4D.js.map +7 -0
- package/dist/chunk-R6KJLEKY.js +28 -0
- package/dist/chunk-R6KJLEKY.js.map +7 -0
- package/dist/chunk-SIR6HLN3.js +69 -0
- package/dist/chunk-SIR6HLN3.js.map +7 -0
- package/dist/chunk-SVWK2NXG.js +2 -0
- package/dist/chunk-SVWK2NXG.js.map +7 -0
- package/dist/chunk-T6UHSWMT.js +2 -0
- package/dist/{chunk-IZO5RL5L.js.map → chunk-T6UHSWMT.js.map} +2 -2
- package/dist/{chunk-JSGXXXFU.js → chunk-WB6O2V5D.js} +6 -6
- package/dist/{chunk-JSGXXXFU.js.map → chunk-WB6O2V5D.js.map} +3 -3
- package/dist/chunk-XC4F2TLW.js +113 -0
- package/dist/chunk-XC4F2TLW.js.map +7 -0
- package/dist/chunk-YFUOXDPK.js +10 -0
- package/dist/chunk-YFUOXDPK.js.map +7 -0
- package/dist/chunk-ZSREFZXV.js +211 -0
- package/dist/chunk-ZSREFZXV.js.map +7 -0
- package/dist/chunk-ZYDMXS5R.js +6 -0
- package/dist/chunk-ZYDMXS5R.js.map +7 -0
- package/dist/{configure-CXY6JQB7.js → configure-UJS7V2JX.js} +2 -2
- package/dist/configure-UJS7V2JX.js.map +7 -0
- package/dist/debugger-QN2MCLBL.js +41 -0
- package/dist/debugger-QN2MCLBL.js.map +7 -0
- package/dist/deploy-J74PHPQA.js +25 -0
- package/dist/deploy-J74PHPQA.js.map +7 -0
- package/dist/dev-GGUSOOYP.js +59 -0
- package/dist/dev-GGUSOOYP.js.map +7 -0
- package/dist/esm-D77XRR65.js +38 -0
- package/dist/esm-D77XRR65.js.map +7 -0
- package/dist/eval-L6WHUFLU.js +54 -0
- package/dist/eval-L6WHUFLU.js.map +7 -0
- package/dist/getMachineId-bsd-QUXN4NKS.js +2 -0
- package/dist/getMachineId-bsd-QUXN4NKS.js.map +7 -0
- package/dist/getMachineId-darwin-TCXBAX22.js +3 -0
- package/dist/getMachineId-darwin-TCXBAX22.js.map +7 -0
- package/dist/getMachineId-linux-IJ3LYIOX.js +2 -0
- package/dist/getMachineId-linux-IJ3LYIOX.js.map +7 -0
- package/dist/getMachineId-unsupported-IKXBUCYY.js +2 -0
- package/dist/getMachineId-unsupported-IKXBUCYY.js.map +7 -0
- package/dist/getMachineId-win-6CX7VSFF.js +2 -0
- package/dist/getMachineId-win-6CX7VSFF.js.map +7 -0
- package/dist/ggt-5XNRJZSW.js +44 -0
- package/dist/ggt-5XNRJZSW.js.map +7 -0
- package/dist/{list-3QZTSHQV.js → list-756D46N5.js} +2 -2
- package/dist/list-756D46N5.js.map +7 -0
- package/dist/login-GMWQRH7V.js +2 -0
- package/dist/{logout-SWWGI27Q.js → logout-LQABTJFD.js} +2 -2
- package/dist/logout-LQABTJFD.js.map +7 -0
- package/dist/logs-AQZB272X.js +28 -0
- package/dist/logs-AQZB272X.js.map +7 -0
- package/dist/main.js +1 -43
- package/dist/main.js.map +4 -4
- package/dist/{open-65LHZE2M.js → open-OMZWPQ66.js} +11 -11
- package/dist/open-OMZWPQ66.js.map +7 -0
- package/dist/problems-FZJKH52E.js +14 -0
- package/dist/problems-FZJKH52E.js.map +7 -0
- package/dist/pull-XYCYN7QN.js +28 -0
- package/dist/pull-XYCYN7QN.js.map +7 -0
- package/dist/push-3QM7ZFTC.js +2 -0
- package/dist/status-PWAXNK5G.js +14 -0
- package/dist/status-PWAXNK5G.js.map +7 -0
- package/dist/update-QIQFJFRQ.js +2 -0
- package/dist/update-QIQFJFRQ.js.map +7 -0
- package/dist/var-N4WGGJXZ.js +159 -0
- package/dist/var-N4WGGJXZ.js.map +7 -0
- package/dist/{version-NZHW3VLV.js → version-AJKSJJDC.js} +2 -2
- package/dist/version-AJKSJJDC.js.map +7 -0
- package/dist/{whoami-MIJFO4MW.js → whoami-KJYDSQSD.js} +2 -2
- package/dist/whoami-KJYDSQSD.js.map +7 -0
- package/package.json +64 -74
- package/dist/add-VP2I3CKE.js.map +0 -7
- package/dist/chunk-22W3HJQG.js +0 -116
- package/dist/chunk-22W3HJQG.js.map +0 -7
- package/dist/chunk-24OT7GHO.js +0 -65
- package/dist/chunk-24OT7GHO.js.map +0 -7
- package/dist/chunk-DRI75CDO.js +0 -194
- package/dist/chunk-DRI75CDO.js.map +0 -7
- package/dist/chunk-HN3YKQ3C.js +0 -6
- package/dist/chunk-HN3YKQ3C.js.map +0 -7
- package/dist/chunk-IZO5RL5L.js +0 -2
- package/dist/chunk-JBY5A44K.js +0 -7
- package/dist/chunk-JBY5A44K.js.map +0 -7
- package/dist/chunk-L5H5T2T6.js +0 -66
- package/dist/chunk-L5H5T2T6.js.map +0 -7
- package/dist/chunk-MHTXRD5G.js +0 -2
- package/dist/chunk-MHTXRD5G.js.map +0 -7
- package/dist/chunk-OIVNACS7.js +0 -12
- package/dist/chunk-OIVNACS7.js.map +0 -7
- package/dist/chunk-OKVWONGO.js +0 -28
- package/dist/chunk-OKVWONGO.js.map +0 -7
- package/dist/chunk-QXWICGG6.js +0 -2
- package/dist/chunk-QXWICGG6.js.map +0 -7
- package/dist/chunk-WNAYBYSG.js +0 -8
- package/dist/chunk-WNAYBYSG.js.map +0 -7
- package/dist/chunk-X47UA3VR.js +0 -2
- package/dist/chunk-X47UA3VR.js.map +0 -7
- package/dist/chunk-XGQQOMPO.js +0 -2
- package/dist/chunk-XGQQOMPO.js.map +0 -7
- package/dist/configure-CXY6JQB7.js.map +0 -7
- package/dist/deploy-ZRLKAGWM.js +0 -25
- package/dist/deploy-ZRLKAGWM.js.map +0 -7
- package/dist/dev-XI2RDRXJ.js +0 -59
- package/dist/dev-XI2RDRXJ.js.map +0 -7
- package/dist/esm-PLVGBDRY.js +0 -38
- package/dist/esm-PLVGBDRY.js.map +0 -7
- package/dist/list-3QZTSHQV.js.map +0 -7
- package/dist/login-HKGCVIWO.js +0 -2
- package/dist/logout-SWWGI27Q.js.map +0 -7
- package/dist/logs-36QPFIDT.js +0 -28
- package/dist/logs-36QPFIDT.js.map +0 -7
- package/dist/open-65LHZE2M.js.map +0 -7
- package/dist/pull-GS2VSBLT.js +0 -28
- package/dist/pull-GS2VSBLT.js.map +0 -7
- package/dist/push-4LGFNWTC.js +0 -2
- package/dist/status-6QVAIYUR.js +0 -14
- package/dist/status-6QVAIYUR.js.map +0 -7
- package/dist/version-NZHW3VLV.js.map +0 -7
- package/dist/whoami-MIJFO4MW.js.map +0 -7
- /package/dist/{login-HKGCVIWO.js.map → login-GMWQRH7V.js.map} +0 -0
- /package/dist/{push-4LGFNWTC.js.map → push-3QM7ZFTC.js.map} +0 -0
package/README.md
CHANGED
|
@@ -5,15 +5,9 @@
|
|
|
5
5
|
<br>
|
|
6
6
|
<br>
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
<a href="https://www.npmjs.com/package/ggt">
|
|
12
|
-
<img alt="npm version" src="https://img.shields.io/npm/v/ggt">
|
|
13
|
-
</a>
|
|
14
|
-
<a href="https://discord.gg/nAfNKMdwKh">
|
|
15
|
-
<img alt="discord chat" src="https://img.shields.io/discord/836317518595096598">
|
|
16
|
-
</a>
|
|
8
|
+
[](https://github.com/gadget-inc/ggt/actions/workflows/cd.yml)
|
|
9
|
+
[](https://www.npmjs.com/package/ggt)
|
|
10
|
+
[](https://discord.gg/9d7wjGBZ6M)
|
|
17
11
|
|
|
18
12
|
<br>
|
|
19
13
|
<br>
|
|
@@ -29,16 +23,21 @@
|
|
|
29
23
|
- [`ggt dev`](#ggt-dev)
|
|
30
24
|
- [`ggt deploy`](#ggt-deploy)
|
|
31
25
|
- [`ggt status`](#ggt-status)
|
|
26
|
+
- [`ggt problems`](#ggt-problems)
|
|
32
27
|
- [`ggt push`](#ggt-push)
|
|
33
28
|
- [`ggt pull`](#ggt-pull)
|
|
29
|
+
- [`ggt var`](#ggt-var)
|
|
34
30
|
- [`ggt add`](#ggt-add)
|
|
35
31
|
- [`ggt open`](#ggt-open)
|
|
36
32
|
- [`ggt list`](#ggt-list)
|
|
37
33
|
- [`ggt login`](#ggt-login)
|
|
38
34
|
- [`ggt logout`](#ggt-logout)
|
|
39
35
|
- [`ggt logs`](#ggt-logs)
|
|
36
|
+
- [`ggt debugger`](#ggt-debugger)
|
|
40
37
|
- [`ggt whoami`](#ggt-whoami)
|
|
41
38
|
- [`ggt configure`](#ggt-configure)
|
|
39
|
+
- [`ggt agent-plugin`](#ggt-agent-plugin)
|
|
40
|
+
- [`ggt eval`](#ggt-eval)
|
|
42
41
|
- [`ggt version`](#ggt-version)
|
|
43
42
|
|
|
44
43
|
## Intro
|
|
@@ -71,14 +70,17 @@ Commands
|
|
|
71
70
|
status Show your local and environment's file changes
|
|
72
71
|
push Push your local files to your environment
|
|
73
72
|
pull Pull your environment's files to your local computer
|
|
74
|
-
|
|
73
|
+
var Manage environment variables
|
|
74
|
+
add Add models, fields, actions, routes and environments to your app
|
|
75
75
|
open Open a Gadget location in your browser
|
|
76
76
|
list List your available applications
|
|
77
77
|
login Log in to your account
|
|
78
78
|
logout Log out of your account
|
|
79
79
|
logs Stream your environment's logs
|
|
80
|
+
debugger Connect to the debugger for your environment
|
|
80
81
|
whoami Print the currently logged in account
|
|
81
82
|
configure Configure default execution options
|
|
83
|
+
agent-plugin Install Gadget agent plugins (AGENTS.md + skills)
|
|
82
84
|
version Print this version of ggt
|
|
83
85
|
|
|
84
86
|
Flags
|
|
@@ -86,6 +88,10 @@ Flags
|
|
|
86
88
|
-v, --verbose Print more verbose output
|
|
87
89
|
--telemetry Enable telemetry
|
|
88
90
|
|
|
91
|
+
Agent plugins
|
|
92
|
+
Install AGENTS.md and Gadget agent skills for your coding agent:
|
|
93
|
+
ggt agent-plugin install
|
|
94
|
+
|
|
89
95
|
Run "ggt [COMMAND] -h" for more information about a specific command.
|
|
90
96
|
```
|
|
91
97
|
|
|
@@ -108,11 +114,11 @@ Usage
|
|
|
108
114
|
DIRECTORY: The directory to sync files to (default: the current directory)
|
|
109
115
|
|
|
110
116
|
Options
|
|
111
|
-
-a, --app <app_name> Selects the app to sync files with.
|
|
112
|
-
-e, --env <env_name> Selects the environment to sync files with.
|
|
117
|
+
-a, --app <app_name> Selects the app to sync files with. Defaults to the app synced to the current directory, if there is one.
|
|
118
|
+
-e, --env <env_name> Selects the environment to sync files with. Defaults to the environment synced to the current directory, if there is one.
|
|
113
119
|
--prefer <source> Auto-select changes from 'local' or 'environment' source on conflict
|
|
114
|
-
--allow-unknown-directory Syncs to any local directory with existing files, even if the
|
|
115
|
-
--allow-different-app Syncs with a different app using the --app command, instead of the one
|
|
120
|
+
--allow-unknown-directory Syncs to any local directory with existing files, even if the directory hasn't been synced before
|
|
121
|
+
--allow-different-app Syncs with a different app using the --app command, instead of the most recently synced one in the current directory
|
|
116
122
|
--log-level <level> Sets the log level for incoming application logs (default: info)
|
|
117
123
|
--no-logs Disables outputting application logs to the console
|
|
118
124
|
--my-logs Only outputs user sourced logs
|
|
@@ -157,11 +163,11 @@ Usage
|
|
|
157
163
|
$ ggt deploy [options]
|
|
158
164
|
|
|
159
165
|
Options
|
|
160
|
-
-a, --app <app_name> Selects a specific app to deploy.
|
|
161
|
-
--from, -e, --env <env_name> Selects a specific environment to sync and deploy from.
|
|
166
|
+
-a, --app <app_name> Selects a specific app to deploy. Defaults to the app synced to the current directory, if there is one.
|
|
167
|
+
--from, -e, --env <env_name> Selects a specific environment to sync and deploy from. Defaults to the environment synced to the current directory, if there is one.
|
|
162
168
|
--force Deploys by discarding any changes made to the environment directory since last sync
|
|
163
|
-
--allow-different-directory Deploys from any local directory with existing files, even if the
|
|
164
|
-
--allow-different-app Deploys a different app using the --app command, instead of the one
|
|
169
|
+
--allow-different-directory Deploys from any local directory with existing files, even if the directory hasn't been synced before
|
|
170
|
+
--allow-different-app Deploys a different app using the --app command, instead of the most recently synced one in the current directory
|
|
165
171
|
--allow-problems Deploys despite any existing issues found in the app (gelly errors, typescript errors etc.)
|
|
166
172
|
--allow-data-delete Deploys even if it results in the deletion of data in production
|
|
167
173
|
--allow-charges Deploys even if it results in additional charges to your plan
|
|
@@ -181,6 +187,16 @@ Usage
|
|
|
181
187
|
ggt status
|
|
182
188
|
```
|
|
183
189
|
|
|
190
|
+
### `ggt problems`
|
|
191
|
+
|
|
192
|
+
```sh-session
|
|
193
|
+
$ ggt problems -h
|
|
194
|
+
Shows any problems (errors, warnings) found in your Gadget application.
|
|
195
|
+
|
|
196
|
+
Usage
|
|
197
|
+
ggt problems
|
|
198
|
+
```
|
|
199
|
+
|
|
184
200
|
### `ggt push`
|
|
185
201
|
|
|
186
202
|
```sh-session
|
|
@@ -194,11 +210,11 @@ Usage
|
|
|
194
210
|
ggt push [options]
|
|
195
211
|
|
|
196
212
|
Options
|
|
197
|
-
-a, --app <app_name> Selects the app to push local changes to.
|
|
198
|
-
-e, --env, --to <env_name> Selects the environment to push local changes to.
|
|
213
|
+
-a, --app <app_name> Selects the app to push local changes to. Defaults to the app synced to the current directory, if there is one.
|
|
214
|
+
-e, --env, --to <env_name> Selects the environment to push local changes to. Defaults to the environment synced to the current directory, if there is one.
|
|
199
215
|
--force Forces a push by discarding any changes made on your environment directory since last sync
|
|
200
|
-
--allow-different-directory Pushes changes from any local directory with existing files, even if the
|
|
201
|
-
--allow-different-app Pushes changes to an app using --app command, instead of the one in the
|
|
216
|
+
--allow-different-directory Pushes changes from any local directory with existing files, even if the directory hasn't been synced before
|
|
217
|
+
--allow-different-app Pushes changes to an app using --app command, instead of the most recently synced one in the current directory
|
|
202
218
|
|
|
203
219
|
Examples
|
|
204
220
|
Push all local changes to the main environment by discarding any changes made on main
|
|
@@ -218,17 +234,40 @@ Usage
|
|
|
218
234
|
ggt pull [options]
|
|
219
235
|
|
|
220
236
|
Options
|
|
221
|
-
-a, --app <app_name> Selects the app to pull your environment changes from.
|
|
222
|
-
-e, --env, --from <env_name> Selects the environment to pull changes from.
|
|
237
|
+
-a, --app <app_name> Selects the app to pull your environment changes from. Defaults to the app synced to the current directory, if there is one.
|
|
238
|
+
-e, --env, --from <env_name> Selects the environment to pull changes from. Defaults to the environment synced to the current directory, if there is one.
|
|
223
239
|
--force Forces a pull by discarding any changes made on your local directory since last sync
|
|
224
|
-
--allow-different-directory Pulls changes from any environment directory, even if the
|
|
225
|
-
--allow-different-app Pulls changes to a different app using --app command, instead of the one in the
|
|
240
|
+
--allow-different-directory Pulls changes from any environment directory, even if the directory hasn't been synced before
|
|
241
|
+
--allow-different-app Pulls changes to a different app using --app command, instead of the most recently synced one in the current directory
|
|
226
242
|
|
|
227
243
|
Examples
|
|
228
244
|
Pull all development environment changes by discarding any changes made locally
|
|
229
245
|
$ ggt pull --env development --force
|
|
230
246
|
```
|
|
231
247
|
|
|
248
|
+
### `ggt var`
|
|
249
|
+
|
|
250
|
+
```sh-session
|
|
251
|
+
$ ggt var -h
|
|
252
|
+
Manage environment variables for your Gadget application.
|
|
253
|
+
|
|
254
|
+
Usage
|
|
255
|
+
ggt var <command> [options]
|
|
256
|
+
|
|
257
|
+
Commands
|
|
258
|
+
list List all environment variables
|
|
259
|
+
get <key> Get the value of an environment variable
|
|
260
|
+
set <key=value> Set one or more environment variables
|
|
261
|
+
delete <key> Delete one or more environment variables
|
|
262
|
+
import Import environment variables from another environment or file
|
|
263
|
+
|
|
264
|
+
Options
|
|
265
|
+
-a, --app <app_name> Selects the application
|
|
266
|
+
-e, --env <env_name> Selects the environment
|
|
267
|
+
|
|
268
|
+
Run "ggt var <command> -h" for more information about a specific command.
|
|
269
|
+
```
|
|
270
|
+
|
|
232
271
|
### `ggt add`
|
|
233
272
|
|
|
234
273
|
```sh-session
|
|
@@ -249,7 +288,8 @@ Usage
|
|
|
249
288
|
ggt add field <model_path>/<field_name>:<field_type>
|
|
250
289
|
|
|
251
290
|
Options
|
|
252
|
-
-
|
|
291
|
+
-a, --app <app_name> Selects the app to add to. Defaults to the app synced to the current directory, if there is one.
|
|
292
|
+
-e, --env <env_name> Selects the environment to add to. Defaults to the environment synced to the current directory, if there is one.
|
|
253
293
|
|
|
254
294
|
Examples
|
|
255
295
|
Add a new model 'post' with out fields:
|
|
@@ -293,8 +333,8 @@ Usage
|
|
|
293
333
|
+ schema Opens schema editor for a specific model
|
|
294
334
|
|
|
295
335
|
Options
|
|
296
|
-
-a, --app <app_name> Selects the application to open in your browser.
|
|
297
|
-
-e, --env <env_name> Selects the environment to open in your browser.
|
|
336
|
+
-a, --app <app_name> Selects the application to open in your browser. Defaults to the app synced to the current directory, if there is one.
|
|
337
|
+
-e, --env <env_name> Selects the environment to open in your browser. Defaults to the environment synced to the current directory, if there is one.
|
|
298
338
|
--show-all Shows all schema, or data options by listing your available models
|
|
299
339
|
|
|
300
340
|
Examples
|
|
@@ -366,8 +406,8 @@ Options
|
|
|
366
406
|
-ll, --log-level <level> Sets the log level for incoming application logs (default: info)
|
|
367
407
|
--my-logs Only outputs user sourced logs and exclude logs from the Gadget framework
|
|
368
408
|
--json Output logs in JSON format
|
|
369
|
-
-a, --app <app_name> Selects the app to pull your environment changes from.
|
|
370
|
-
-e, --env, --from <env_name> Selects the environment to pull changes from.
|
|
409
|
+
-a, --app <app_name> Selects the app to pull your environment changes from. Defaults to the app synced to the current directory, if there is one.
|
|
410
|
+
-e, --env, --from <env_name> Selects the environment to pull changes from. Defaults to the environment synced to the current directory, if there is one.
|
|
371
411
|
|
|
372
412
|
Examples
|
|
373
413
|
Stream all user logs from your development environment
|
|
@@ -377,6 +417,39 @@ Examples
|
|
|
377
417
|
$ ggt logs --env production --json
|
|
378
418
|
```
|
|
379
419
|
|
|
420
|
+
### `ggt debugger`
|
|
421
|
+
|
|
422
|
+
```sh-session
|
|
423
|
+
$ ggt debugger -h
|
|
424
|
+
Start a Chrome DevTools Protocol proxy server that connects to the Gadget debugger.
|
|
425
|
+
This allows you to debug your Gadget app using VS Code, Chrome DevTools, or any other
|
|
426
|
+
CDP-compatible debugger client.
|
|
427
|
+
|
|
428
|
+
Usage
|
|
429
|
+
$ ggt debugger [DIRECTORY] [options]
|
|
430
|
+
|
|
431
|
+
DIRECTORY: The directory containing your Gadget app (default: current directory)
|
|
432
|
+
|
|
433
|
+
Options
|
|
434
|
+
-a, --app <app_name> Selects the app to debug. Defaults to the app synced to the current directory, if there is one.
|
|
435
|
+
-e, --env <env_name> Selects the environment to debug. Defaults to the environment synced to the current directory, if there is one.
|
|
436
|
+
-p, --port <port> Local port for the inspector proxy (default: 9229)
|
|
437
|
+
--configure <editor> Configure debugger for vscode, cursor
|
|
438
|
+
|
|
439
|
+
Examples
|
|
440
|
+
start debugger proxy for current environment
|
|
441
|
+
$ ggt debugger
|
|
442
|
+
|
|
443
|
+
use a custom port
|
|
444
|
+
$ ggt debugger --port 9230
|
|
445
|
+
|
|
446
|
+
debug a specific app and environment
|
|
447
|
+
$ ggt debugger --app myApp --env development
|
|
448
|
+
|
|
449
|
+
configure VS Code debugger
|
|
450
|
+
$ ggt debugger --configure vscode
|
|
451
|
+
```
|
|
452
|
+
|
|
380
453
|
### `ggt whoami`
|
|
381
454
|
|
|
382
455
|
```sh-session
|
|
@@ -402,6 +475,44 @@ Usage
|
|
|
402
475
|
ggt configure clear
|
|
403
476
|
```
|
|
404
477
|
|
|
478
|
+
### `ggt agent-plugin`
|
|
479
|
+
|
|
480
|
+
```sh-session
|
|
481
|
+
$ ggt agent-plugin -h
|
|
482
|
+
Install Gadget agent plugins (AGENTS.md + skills) into the current project.
|
|
483
|
+
|
|
484
|
+
Usage
|
|
485
|
+
ggt agent-plugin install [--force]
|
|
486
|
+
|
|
487
|
+
Flags
|
|
488
|
+
--force Overwrite/reinstall even if already present
|
|
489
|
+
```
|
|
490
|
+
|
|
491
|
+
### `ggt eval`
|
|
492
|
+
|
|
493
|
+
```sh-session
|
|
494
|
+
$ ggt eval -h
|
|
495
|
+
Evaluates a JavaScript snippet against a Gadget app's API client.
|
|
496
|
+
|
|
497
|
+
The snippet receives an api variable (a pre-constructed Gadget API client
|
|
498
|
+
authenticated as the developer). Results are formatted like Node.js REPL output.
|
|
499
|
+
Writes are disallowed by default; use --allow-writes to enable them.
|
|
500
|
+
|
|
501
|
+
Usage
|
|
502
|
+
$ ggt eval [options] <snippet>
|
|
503
|
+
|
|
504
|
+
Options
|
|
505
|
+
-a, --app <app_name> Selects a specific app. Defaults to the app synced to the current directory, if there is one.
|
|
506
|
+
-e, --env <env_name> Selects a specific environment. Defaults to the environment synced to the current directory, if there is one.
|
|
507
|
+
-w, --allow-writes Allow write operations (default is read-only)
|
|
508
|
+
--json Output result as JSON instead of Node.js inspect format (root flag)
|
|
509
|
+
|
|
510
|
+
Examples
|
|
511
|
+
$ ggt eval 'api.user.findMany()'
|
|
512
|
+
$ ggt eval --app my-app --env staging 'api.user.findFirst()'
|
|
513
|
+
$ ggt eval -a my-app -w 'api.user.delete("123")'
|
|
514
|
+
```
|
|
515
|
+
|
|
405
516
|
### `ggt version`
|
|
406
517
|
|
|
407
518
|
```sh-session
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{e as j,j as b}from"./chunk-SIR6HLN3.js";import"./chunk-JKZNSRLU.js";import"./chunk-WB6O2V5D.js";import"./chunk-L2XBSR7G.js";import{h as O,i as R,j as M,k,l as J}from"./chunk-ZSREFZXV.js";import{g as N,p as D,q as _,r as E}from"./chunk-XC4F2TLW.js";import{c as f}from"./chunk-T6UHSWMT.js";import{a as P}from"./chunk-DR4CXBD6.js";import"./chunk-ZYDMXS5R.js";import{F as U,G as L,a as T,e as C,f as S,l as B,n as y}from"./chunk-442CSROP.js";import"./chunk-F255O64V.js";import{c as w}from"./chunk-HCULGPBH.js";import"./chunk-OUIZQC4D.js";import{b as m,o as F,ra as d,ta as p}from"./chunk-JG2QCDK2.js";import"./chunk-GFQYFEEH.js";import{a as g,h as $}from"./chunk-7DYQUG5M.js";$();var h=class extends S{static{g(this,"AddClientError")}isBug=C.NO;constructor(o){let i="";if(F(o.cause)){let a=B(o.cause.map(e=>e.message));i=d` • ${a.map(e=>e.split(`
|
|
2
2
|
`).join(`
|
|
3
3
|
\u200E \u2022 `)).join(`
|
|
4
4
|
`)}`}else i=d`${o.cause}`;super(i)}render(){return`${m.redBright(w.cross)} Failed to add:
|
|
@@ -19,7 +19,8 @@ import{f as O,g as R,h as M,i as j,j as k,k as P,p as b}from"./chunk-DRI75CDO.js
|
|
|
19
19
|
ggt add field <model_path>/<field_name>:<field_type>
|
|
20
20
|
|
|
21
21
|
{gray Options}
|
|
22
|
-
-
|
|
22
|
+
-a, --app <app_name> Selects the app to add to. Defaults to the app synced to the current directory, if there is one.
|
|
23
|
+
-e, --env <env_name> Selects the environment to add to. Defaults to the environment synced to the current directory, if there is one.
|
|
23
24
|
|
|
24
25
|
{gray Examples}
|
|
25
26
|
Add a new model 'post' with out fields:
|
|
@@ -42,7 +43,7 @@ import{f as O,g as R,h as M,i as j,j as k,k as P,p as b}from"./chunk-DRI75CDO.js
|
|
|
42
43
|
|
|
43
44
|
Clone the \`development\` environment into a new \`staging\` environment
|
|
44
45
|
{cyanBright ggt add environment staging --environment development}
|
|
45
|
-
`,"usage"),fe=g(async(t,o)=>{let i=await E(process.cwd()),a=await _.load(t,{command:"add",args:o,directory:i});if(!a)throw new N({command:"add",args:o,directory:i});let e=new b(a),r=await e.hashes(t
|
|
46
|
+
`,"usage"),fe=g(async(t,o)=>{let i=await E(process.cwd()),a=await _.load(t,{command:"add",args:o,directory:i});if(!a)throw new N({command:"add",args:o,directory:i});let e=new b(a),r=await e.hashes(t,{silent:!0});switch(r.inSync||await e.merge(t,{hashes:r,printEnvironmentChangesOptions:{limit:5},printLocalChangesOptions:{limit:5},silent:!0}),p({ensureEmptyLineAbove:!0,content:`${m.greenBright(w.tick)} Sync completed ${j()}`}),o._[0]){case"model":await H(t,{args:o,filesync:e});break;case"action":await X(t,{args:o,filesync:e});break;case"route":await z(t,{args:o,filesync:e});break;case"field":await q(t,{args:o,filesync:e});break;case"environment":case"env":await Q(t,{args:o,filesync:e});break;default:p(G(t));return}},"run"),I=g(t=>{let o=[],i=[];return t.forEach(a=>{let e=/^(.*):+(.*)$/.exec(a);!e||e.length!==3||!e[1]||!e[2]?o.push(d`${a} is not a valid field definition`):i.push({name:e[1].replace(/:+/g,""),fieldType:e[2]})}),[i,o]},"parseFieldValues"),H=g(async(t,{args:o,filesync:i})=>{let a=i.syncJson,e=o._[1];if(!e)throw new f(d`Failed to add model, missing model path
|
|
46
47
|
|
|
47
48
|
{gray Usage}
|
|
48
49
|
{cyanBright ggt add model <model_name> [field_name:field_type ...]}`);let r=[];if(o._.length>2){let[c,u]=I(o._.slice(2));if(u.length>0)throw new f(d`
|
|
@@ -55,17 +56,17 @@ import{f as O,g as R,h as M,i as j,j as k,k as P,p as b}from"./chunk-DRI75CDO.js
|
|
|
55
56
|
|
|
56
57
|
{gray Usage}
|
|
57
58
|
{cyanBright ggt add action [CONTEXT]/<action_name>
|
|
58
|
-
CONTEXT:Specifies the kind of action. Use "model" for model actions otherwise use "action".}`);let r=await U(t,a.environment),n=await L(t,a.environment),s=e.split("/"),c,u=s.length>1?s.slice(0,s.length-1):s,A=s[s.length-1],V=r.find(l=>{let v=u[u.length-1];return l.apiIdentifier.toUpperCase()===v
|
|
59
|
+
CONTEXT:Specifies the kind of action. Use "model" for model actions otherwise use "action".}`);let r=await U(t,a.environment),n=await L(t,a.environment),s=e.split("/"),c,u=s.length>1?s.slice(0,s.length-1):s,A=s[s.length-1],V=r.find(l=>{let v=u[u.length-1];return l.apiIdentifier.toUpperCase()===v.toUpperCase()&&l.namespace?.join("/")===u.slice(0,u.length-1).join("/")}),x=n.find(l=>l.namespace?.join("/")===u.join("/"));if(V&&x){let l=u.join("/");c=await P({choices:["models","actions"],content:d`
|
|
59
60
|
{bold Namespace Conflict:} The action '${A}.js' cannot be automatically added due to a namespace conflict.
|
|
60
61
|
|
|
61
62
|
How would you like to proceed?:
|
|
62
|
-
`,formatChoice:g(v=>{switch(v){case"models":return`As a Model action in ${m.gray(`models/${l}/${A}.js`)}`;case"actions":return`As an Action in ${m.gray(`actions/${l}/${A}.js`)}`}},"formatChoice")}),p({ensureEmptyLineAbove:!0,content:d`${m.yellowBright(w.info)} You can override the context of the action by specifying the context in the path. For example: {gray ggt add action ${c}/${e}}`})}try{let l=(await a.edit.mutate({mutation:R,variables:{path:c?`${c}/`+e:e}})).createAction;await i.writeToLocalFilesystem(t,{filesVersion:l.remoteFilesVersion,files:l.changed,delete:[]})}catch(l){throw l instanceof y?new h(l):l}p({ensureEmptyLineAbove:!0,content:`Action ${m.cyanBright(e)} added successfully.`})},"actionSubCommand"),
|
|
63
|
+
`,formatChoice:g(v=>{switch(v){case"models":return`As a Model action in ${m.gray(`models/${l}/${A}.js`)}`;case"actions":return`As an Action in ${m.gray(`actions/${l}/${A}.js`)}`}},"formatChoice")}),p({ensureEmptyLineAbove:!0,content:d`${m.yellowBright(w.info)} You can override the context of the action by specifying the context in the path. For example: {gray ggt add action ${c}/${e}}`})}try{let l=(await a.edit.mutate({mutation:R,variables:{path:c?`${c}/`+e:e}})).createAction;await i.writeToLocalFilesystem(t,{filesVersion:l.remoteFilesVersion,files:l.changed,delete:[]})}catch(l){throw l instanceof y?new h(l):l}p({ensureEmptyLineAbove:!0,content:`Action ${m.cyanBright(e)} added successfully.`})},"actionSubCommand"),z=g(async(t,{args:o,filesync:i})=>{let a=i.syncJson,e=o._[1],r=o._[2];if(!e)throw new f(d`Failed to add route, missing route method
|
|
63
64
|
|
|
64
65
|
{gray Usage}
|
|
65
66
|
{cyanBright ggt add route <HTTP_METHOD> <route_path>}`);if(!r)throw new f(d`Failed to add route, missing route path
|
|
66
67
|
|
|
67
68
|
{gray Usage}
|
|
68
|
-
{cyanBright ggt add route ${e} <route_path>}`);try{let n=(await a.edit.mutate({mutation:M,variables:{method:e,path:r}})).createRoute;await i.writeToLocalFilesystem(t,{filesVersion:n.remoteFilesVersion,files:n.changed,delete:[]})}catch(n){throw n instanceof y?new h(n):n}p({ensureEmptyLineAbove:!0,content:`Route ${m.cyanBright(r)} added successfully.`})},"routeSubCommand"),
|
|
69
|
+
{cyanBright ggt add route ${e} <route_path>}`);try{let n=(await a.edit.mutate({mutation:M,variables:{method:e,path:r}})).createRoute;await i.writeToLocalFilesystem(t,{filesVersion:n.remoteFilesVersion,files:n.changed,delete:[]})}catch(n){throw n instanceof y?new h(n):n}p({ensureEmptyLineAbove:!0,content:`Route ${m.cyanBright(r)} added successfully.`})},"routeSubCommand"),q=g(async(t,{args:o,filesync:i})=>{let a=i.syncJson,e=o._.at(1)?.split("/");if(!e)throw new f(d`Failed to add field, invalid field path definition
|
|
69
70
|
|
|
70
71
|
{gray Usage}
|
|
71
72
|
{cyanBright ggt add field <model_path>/<field_name>:<field_type>}`);let r=[];if(e[1]){let[n,s]=I([e[1]]);if(s.length>0)throw new f(d`
|
|
@@ -77,5 +78,5 @@ import{f as O,g as R,h as M,i as j,j as k,k as P,p as b}from"./chunk-DRI75CDO.js
|
|
|
77
78
|
{cyanBright ggt add field ${e[0]}/<field_name>:<field_type>}`);r.push(...n)}else throw new f(d`Failed to add field, invalid field definition
|
|
78
79
|
|
|
79
80
|
{gray Usage}
|
|
80
|
-
{cyanBright ggt add field ${e[0]}/<field_name>:<field_type>}`);try{let n=(await a.edit.mutate({mutation:
|
|
81
|
-
//# sourceMappingURL=add-
|
|
81
|
+
{cyanBright ggt add field ${e[0]}/<field_name>:<field_type>}`);try{let n=(await a.edit.mutate({mutation:k,variables:{path:e[0],fields:r.map(s=>({name:s.name,fieldType:s.fieldType}))}})).createModelFields;await i.writeToLocalFilesystem(t,{filesVersion:n.remoteFilesVersion,files:n.changed,delete:[]})}catch(n){throw n instanceof y?new h(n):n}p({ensureEmptyLineAbove:!0,content:`Field ${m.cyanBright(r[0]?.name)} added successfully.`})},"fieldSubCommand"),Q=g(async(t,{args:o,filesync:i})=>{let a=i.syncJson,e=o._[1]??Y();try{await a.edit.mutate({mutation:J,variables:{environment:{slug:e,sourceSlug:a.environment.name}}})}catch(n){throw n instanceof y?new h(n):n}if(p({ensureEmptyLineAbove:!0,content:`Environment ${m.cyanBright(e)} added successfully.`}),await _.load(t,{command:"pull",args:{_:[],"--app":void 0,"--allow-unknown-directory":void 0,"--allow-different-app":void 0,"--env":e},directory:await E(process.cwd())})){let n=new b(a),s=await n.hashes(t);if(s.environmentChangesToPull.size===0){p({ensureEmptyLineAbove:!0,content:"Nothing to pull."});return}s.localChangesToPush.size>0&&await n.print(t,{hashes:s}),await n.pull(t,{hashes:s,force:!0})}},"envSubCommand"),Y=g(()=>{let t=new Date;return`env-${t.toISOString().slice(0,10).replace(/-/g,"")}-${t.toLocaleTimeString("en-US",{hour12:!1}).replace(/:/g,"")}`},"makeDefaultEnvName");export{h as AddClientError,ue as args,fe as run,G as usage};
|
|
82
|
+
//# sourceMappingURL=add-TWLGKL2T.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/commands/add.ts"],
|
|
4
|
+
"sourcesContent": ["import chalk from \"chalk\";\nimport terminalLink from \"terminal-link\";\n\nimport type { Run, Usage } from \"../services/command/command.js\";\nimport type { Context } from \"../services/command/context.js\";\n\nimport { getGlobalActions, getModels } from \"../services/app/app.js\";\nimport {\n CREATE_ACTION_MUTATION,\n CREATE_ENVIRONMENT_MUTATION,\n CREATE_MODEL_FIELDS_MUTATION,\n CREATE_MODEL_MUTATION,\n CREATE_ROUTE_MUTATION,\n} from \"../services/app/edit/operation.js\";\nimport { ClientError } from \"../services/app/error.js\";\nimport { ArgError, type ArgsDefinitionResult } from \"../services/command/arg.js\";\nimport { UnknownDirectoryError } from \"../services/filesync/error.js\";\nimport { FileSync } from \"../services/filesync/filesync.js\";\nimport { SyncJson, SyncJsonArgs, loadSyncJsonDirectory } from \"../services/filesync/sync-json.js\";\nimport { println } from \"../services/output/print.js\";\nimport { GGTError, IsBug } from \"../services/output/report.js\";\nimport { select } from \"../services/output/select.js\";\nimport { sprint } from \"../services/output/sprint.js\";\nimport { symbol } from \"../services/output/symbols.js\";\nimport { ts } from \"../services/output/timestamp.js\";\nimport { uniq } from \"../services/util/collection.js\";\nimport { isGraphQLErrors } from \"../services/util/is.js\";\n\nexport class AddClientError extends GGTError {\n isBug = IsBug.NO;\n\n constructor(error: ClientError) {\n let template = \"\";\n\n if (isGraphQLErrors(error.cause)) {\n const errors = uniq(error.cause.map((x) => x.message));\n\n template = sprint` \u2022 ${errors.map((e) => e.split(\"\\n\").join(\"\\n\u200E \u2022 \")).join(\"\\n\")}`; // Why in gods name do I have to put an empty character for the tab to work?\n } else {\n template = sprint`${error.cause}`;\n }\n\n super(template);\n }\n\n protected override render(): string {\n return `${chalk.redBright(symbol.cross)} Failed to add:\\n ` + this.message;\n }\n}\n\nexport type AddArgs = typeof args;\nexport type AddArgsResult = ArgsDefinitionResult<AddArgs>;\n\nexport const args = { ...SyncJsonArgs };\n\nexport const usage: Usage = () => {\n return sprint`\n Adds models, fields, actions and routes to your app.\n\n This command first performs a sync to ensure that your local and environment directories match, changes are tracked since last sync.\n If any conflicts are detected, they must be resolved before adding models, fields, actions or routes.\n\n {gray Usage}\n ggt add model <model_name> [field_name:field_type ...]\n\n ggt add action [CONTEXT]/<action_name>\n CONTEXT:Specifies the kind of action. Use \"model\" for model actions otherwise use \"action\".\n\n ggt add route <HTTP_METHOD> <route_path>\n\n ggt add field <model_path>/<field_name>:<field_type>\n\n {gray Options}\n -a, --app <app_name> Selects the app to add to. Defaults to the app synced to the current directory, if there is one.\n -e, --env <env_name> Selects the environment to add to. Defaults to the environment synced to the current directory, if there is one.\n\n {gray Examples}\n Add a new model 'post' with out fields:\n {cyanBright $ ggt add model modelA}\n\n Add a new model 'post' with 2 new 'string' type fields 'title' and 'body':\n {cyanBright $ ggt add model post title:string body:string}\n\n Add a new 'boolean' type field 'published' to an existing model\n {cyanBright ggt add field post/published:boolean}\n\n Add new action 'publish' to the 'post' model:\n {cyanBright ggt add action model/post/publish}\n\n Add a new action 'audit'\n {cyanBright ggt add action action/audit}\n\n Add a new route 'howdy'\n {cyanBright ggt add route GET howdy}\n\n Clone the \\`development\\` environment into a new \\`staging\\` environment\n {cyanBright ggt add environment staging --environment development}\n `;\n};\n\nexport const run: Run<AddArgs> = async (ctx, args) => {\n const directory = await loadSyncJsonDirectory(process.cwd());\n const syncJson = await SyncJson.load(ctx, { command: \"add\", args, directory });\n if (!syncJson) {\n throw new UnknownDirectoryError({ command: \"add\", args, directory });\n }\n\n const filesync = new FileSync(syncJson);\n const hashes = await filesync.hashes(ctx, { silent: true });\n\n if (!hashes.inSync) {\n await filesync.merge(ctx, {\n hashes,\n printEnvironmentChangesOptions: { limit: 5 },\n printLocalChangesOptions: { limit: 5 },\n silent: true,\n });\n }\n\n println({ ensureEmptyLineAbove: true, content: `${chalk.greenBright(symbol.tick)} Sync completed ${ts()}` });\n\n switch (args._[0]) {\n case \"model\":\n await modelSubCommand(ctx, { args, filesync });\n break;\n case \"action\":\n await actionSubCommand(ctx, { args, filesync });\n break;\n case \"route\":\n await routeSubCommand(ctx, { args, filesync });\n break;\n case \"field\":\n await fieldSubCommand(ctx, { args, filesync });\n break;\n case \"environment\":\n case \"env\":\n await envSubCommand(ctx, { args, filesync });\n break;\n default:\n println(usage(ctx));\n return;\n }\n};\n\nconst parseFieldValues = (fields: string[]): [{ name: string; fieldType: string }[], problems: string[]] => {\n const problems: string[] = [];\n const modelFields: { name: string; fieldType: string }[] = [];\n\n fields.forEach((field) => {\n const matches = /^(.*):+(.*)$/.exec(field);\n if (!matches || matches.length !== 3 || !matches[1] || !matches[2]) {\n problems.push(sprint`${field} is not a valid field definition`);\n } else {\n modelFields.push({ name: matches[1].replace(/:+/g, \"\"), fieldType: matches[2] });\n }\n });\n\n return [modelFields, problems];\n};\n\nconst modelSubCommand = async (ctx: Context, { args, filesync }: { args: AddArgsResult; filesync: FileSync }): Promise<void> => {\n const syncJson = filesync.syncJson;\n const modelApiIdentifier = args._[1];\n\n if (!modelApiIdentifier) {\n throw new ArgError(sprint`Failed to add model, missing model path\n\n {gray Usage}\n {cyanBright ggt add model <model_name> [field_name:field_type ...]}`);\n }\n\n const modelFieldsList: { name: string; fieldType: string }[] = [];\n if (args._.length > 2) {\n const [modelFields, problems] = parseFieldValues(args._.slice(2));\n\n if (problems.length > 0) {\n throw new ArgError(sprint`\n Failed to add model:\n \u2022 ${problems.join(\"\\n \u2022 \")}\n\n {gray Usage}\n {cyanBright ggt add model ${modelApiIdentifier} [field_name:field_type ...]}`);\n }\n\n modelFieldsList.push(...modelFields);\n }\n\n let result;\n\n try {\n result = (\n await syncJson.edit.mutate({\n mutation: CREATE_MODEL_MUTATION,\n variables: {\n path: modelApiIdentifier,\n fields: modelFieldsList.map((fields) => ({ name: fields.name, fieldType: fields.fieldType })),\n },\n })\n ).createModel;\n } catch (error) {\n if (error instanceof ClientError) {\n throw new AddClientError(error);\n } else {\n throw error;\n }\n }\n\n println({ ensureEmptyLineAbove: true, content: chalk.gray(\"New model created in environment.\") });\n\n await filesync.writeToLocalFilesystem(ctx, { filesVersion: result.remoteFilesVersion, files: result.changed, delete: [] });\n\n const modelPrintout = terminalLink.isSupported\n ? terminalLink(\n modelApiIdentifier,\n `https://${syncJson.environment.application.primaryDomain}/edit/${syncJson.environment.name}/model/${modelApiIdentifier}/schema`,\n )\n : modelApiIdentifier;\n\n println({\n ensureEmptyLineAbove: true,\n content: `${chalk.greenBright(symbol.tick)} Model ${chalk.cyanBright(modelPrintout)} added successfully.`,\n });\n};\n\nconst actionSubCommand = async (ctx: Context, { args, filesync }: { args: AddArgsResult; filesync: FileSync }): Promise<void> => {\n const syncJson = filesync.syncJson;\n const path = args._[1];\n\n if (!path) {\n throw new ArgError(sprint`Failed to add action, missing action path\n\n {gray Usage}\n {cyanBright ggt add action [CONTEXT]/<action_name>\n CONTEXT:Specifies the kind of action. Use \"model\" for model actions otherwise use \"action\".}`);\n }\n\n const models = await getModels(ctx, syncJson.environment);\n const globalActions = await getGlobalActions(ctx, syncJson.environment);\n const splitPath = path.split(\"/\");\n\n let overrideContextAction: \"models\" | \"actions\" | undefined;\n\n const parsedPaths = splitPath.length > 1 ? splitPath.slice(0, splitPath.length - 1) : splitPath;\n const parsedAction = splitPath[splitPath.length - 1];\n\n const conflictingModel = models.find((model) => {\n const modelName = parsedPaths[parsedPaths.length - 1];\n\n return (\n model.apiIdentifier.toUpperCase() === modelName.toUpperCase() &&\n model.namespace?.join(\"/\") === parsedPaths.slice(0, parsedPaths.length - 1).join(\"/\")\n );\n });\n\n const conflictingActionNamespace = globalActions.find((action) => {\n return action.namespace?.join(\"/\") === parsedPaths.join(\"/\");\n });\n\n if (conflictingModel && conflictingActionNamespace) {\n const joinedParsedPaths = parsedPaths.join(\"/\");\n overrideContextAction = await select({\n choices: [\"models\", \"actions\"] as const,\n content: sprint`\n {bold Namespace Conflict:} The action '${parsedAction}.js' cannot be automatically added due to a namespace conflict.\n\n How would you like to proceed?:\n `,\n formatChoice: (choice) => {\n switch (choice) {\n case \"models\": {\n return `As a Model action in ${chalk.gray(`models/${joinedParsedPaths}/${parsedAction}.js`)}`;\n }\n case \"actions\": {\n return `As an Action in ${chalk.gray(`actions/${joinedParsedPaths}/${parsedAction}.js`)}`;\n }\n }\n },\n });\n\n println({\n ensureEmptyLineAbove: true,\n content: sprint`${chalk.yellowBright(symbol.info)} You can override the context of the action by specifying the context in the path. For example: {gray ggt add action ${overrideContextAction}/${path}}`,\n });\n }\n\n try {\n const result = (\n await syncJson.edit.mutate({\n mutation: CREATE_ACTION_MUTATION,\n variables: { path: overrideContextAction ? `${overrideContextAction}/` + path : path },\n })\n ).createAction;\n\n await filesync.writeToLocalFilesystem(ctx, { filesVersion: result.remoteFilesVersion, files: result.changed, delete: [] });\n } catch (error) {\n if (error instanceof ClientError) {\n throw new AddClientError(error);\n } else {\n throw error;\n }\n }\n\n println({ ensureEmptyLineAbove: true, content: `Action ${chalk.cyanBright(path)} added successfully.` });\n};\n\nconst routeSubCommand = async (ctx: Context, { args, filesync }: { args: AddArgsResult; filesync: FileSync }): Promise<void> => {\n const syncJson = filesync.syncJson;\n const routeMethod = args._[1];\n const routePath = args._[2];\n\n if (!routeMethod) {\n throw new ArgError(sprint`Failed to add route, missing route method\n\n {gray Usage}\n {cyanBright ggt add route <HTTP_METHOD> <route_path>}`);\n }\n\n if (!routePath) {\n throw new ArgError(sprint`Failed to add route, missing route path\n\n {gray Usage}\n {cyanBright ggt add route ${routeMethod} <route_path>}`);\n }\n\n try {\n const result = (await syncJson.edit.mutate({ mutation: CREATE_ROUTE_MUTATION, variables: { method: routeMethod, path: routePath } }))\n .createRoute;\n\n await filesync.writeToLocalFilesystem(ctx, { filesVersion: result.remoteFilesVersion, files: result.changed, delete: [] });\n } catch (error) {\n if (error instanceof ClientError) {\n throw new AddClientError(error);\n } else {\n throw error;\n }\n }\n\n println({ ensureEmptyLineAbove: true, content: `Route ${chalk.cyanBright(routePath)} added successfully.` });\n};\n\nconst fieldSubCommand = async (ctx: Context, { args, filesync }: { args: AddArgsResult; filesync: FileSync }): Promise<void> => {\n const syncJson = filesync.syncJson;\n\n const splitPathAndField = args._.at(1)?.split(\"/\");\n\n if (!splitPathAndField) {\n throw new ArgError(sprint`Failed to add field, invalid field path definition\n\n {gray Usage}\n {cyanBright ggt add field <model_path>/<field_name>:<field_type>}`);\n }\n\n const modelFieldsList: { name: string; fieldType: string }[] = [];\n\n if (splitPathAndField[1]) {\n const [modelFields, problems] = parseFieldValues([splitPathAndField[1]]);\n\n if (problems.length > 0) {\n throw new ArgError(sprint`\n Failed to add field:\n \u2022 ${problems.join(\"\\n \u2022\")}\n\n {gray Usage}\n {cyanBright ggt add field ${splitPathAndField[0]}/<field_name>:<field_type>}`);\n }\n\n modelFieldsList.push(...modelFields);\n } else {\n throw new ArgError(sprint`Failed to add field, invalid field definition\n\n {gray Usage}\n {cyanBright ggt add field ${splitPathAndField[0]}/<field_name>:<field_type>}`);\n }\n\n try {\n const result = (\n await syncJson.edit.mutate({\n mutation: CREATE_MODEL_FIELDS_MUTATION,\n variables: {\n // oxlint-disable-next-line no-non-null-assertion\n path: splitPathAndField[0]!,\n fields: modelFieldsList.map((field) => ({ name: field.name, fieldType: field.fieldType })),\n },\n })\n ).createModelFields;\n\n await filesync.writeToLocalFilesystem(ctx, { filesVersion: result.remoteFilesVersion, files: result.changed, delete: [] });\n } catch (error) {\n if (error instanceof ClientError) {\n throw new AddClientError(error);\n } else {\n throw error;\n }\n }\n\n println({ ensureEmptyLineAbove: true, content: `Field ${chalk.cyanBright(modelFieldsList[0]?.name)} added successfully.` });\n};\n\nconst envSubCommand = async (ctx: Context, { args, filesync }: { args: AddArgsResult; filesync: FileSync }): Promise<void> => {\n const syncJson = filesync.syncJson;\n const newEnvName = args._[1] ?? makeDefaultEnvName();\n\n try {\n await syncJson.edit.mutate({\n mutation: CREATE_ENVIRONMENT_MUTATION,\n variables: { environment: { slug: newEnvName, sourceSlug: syncJson.environment.name } },\n });\n } catch (error) {\n if (error instanceof ClientError) {\n throw new AddClientError(error);\n } else {\n throw error;\n }\n }\n\n println({ ensureEmptyLineAbove: true, content: `Environment ${chalk.cyanBright(newEnvName)} added successfully.` });\n\n // Try to switch to newly made env\n const pullFromNewEnvSyncJson = await SyncJson.load(ctx, {\n command: \"pull\",\n args: { _: [], \"--app\": undefined, \"--allow-unknown-directory\": undefined, \"--allow-different-app\": undefined, \"--env\": newEnvName },\n directory: await loadSyncJsonDirectory(process.cwd()),\n });\n if (pullFromNewEnvSyncJson) {\n const filesync = new FileSync(syncJson);\n const hashes = await filesync.hashes(ctx);\n if (hashes.environmentChangesToPull.size === 0) {\n println({ ensureEmptyLineAbove: true, content: \"Nothing to pull.\" });\n return;\n }\n if (hashes.localChangesToPush.size > 0) {\n // show them the local changes they will discard\n await filesync.print(ctx, { hashes });\n }\n await filesync.pull(ctx, { hashes, force: true });\n }\n};\n\n/**\n * Creates a default environment name based on the current date and time.\n */\nconst makeDefaultEnvName = (): string => {\n const currentDate = new Date();\n return `env-${currentDate.toISOString().slice(0, 10).replace(/-/g, \"\")}-${currentDate.toLocaleTimeString(\"en-US\", { hour12: false }).replace(/:/g, \"\")}`;\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["init_cjs", "AddClientError", "GGTError", "__name", "IsBug", "error", "template", "isGraphQLErrors", "errors", "uniq", "x", "sprint", "source_default", "symbol", "args", "SyncJsonArgs", "usage", "run", "ctx", "directory", "loadSyncJsonDirectory", "syncJson", "SyncJson", "UnknownDirectoryError", "filesync", "FileSync", "hashes", "println", "ts", "modelSubCommand", "actionSubCommand", "routeSubCommand", "fieldSubCommand", "envSubCommand", "parseFieldValues", "fields", "problems", "modelFields", "field", "matches", "modelApiIdentifier", "ArgError", "modelFieldsList", "result", "CREATE_MODEL_MUTATION", "ClientError", "modelPrintout", "terminalLink", "path", "models", "getModels", "globalActions", "getGlobalActions", "splitPath", "overrideContextAction", "parsedPaths", "parsedAction", "conflictingModel", "model", "modelName", "conflictingActionNamespace", "action", "joinedParsedPaths", "select", "choice", "CREATE_ACTION_MUTATION", "routeMethod", "routePath", "CREATE_ROUTE_MUTATION", "splitPathAndField", "CREATE_MODEL_FIELDS_MUTATION", "newEnvName", "makeDefaultEnvName", "CREATE_ENVIRONMENT_MUTATION", "currentDate"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import{a as f,c as g}from"./chunk-YFUOXDPK.js";import"./chunk-L2XBSR7G.js";import"./chunk-442CSROP.js";import"./chunk-F255O64V.js";import"./chunk-HCULGPBH.js";import{a as m}from"./chunk-OUIZQC4D.js";import{J as c,ra as p,ta as l}from"./chunk-JG2QCDK2.js";import"./chunk-GFQYFEEH.js";import{a as o,h as a}from"./chunk-7DYQUG5M.js";a();import y from"node:path";var D={"--force":{type:Boolean}},u=o(()=>p`
|
|
2
|
+
Install Gadget agent plugins (AGENTS.md + skills) into the current project.
|
|
3
|
+
|
|
4
|
+
{gray Usage}
|
|
5
|
+
ggt agent-plugin install [--force]
|
|
6
|
+
|
|
7
|
+
{gray Flags}
|
|
8
|
+
--force Overwrite/reinstall even if already present
|
|
9
|
+
`,"usage"),G=o(async(t,r)=>{if(r._[0]!=="install"){l(u(t));return}let e=process.cwd(),n=await c(".gadget/sync.json",{cwd:e}),d=n?y.join(n,"../.."):e,s=await m.init(d),i=r["--force"]??!1;await f({ctx:t,directory:s,force:i}),await g({ctx:t,directory:s,force:i})},"run");export{D as args,G as run,u as usage};
|
|
10
|
+
//# sourceMappingURL=agent-plugin-TN24O7FB.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/commands/agent-plugin.ts"],
|
|
4
|
+
"sourcesContent": ["import { findUp } from \"find-up\";\nimport path from \"node:path\";\n\nimport type { ArgsDefinition } from \"../services/command/arg.js\";\nimport type { Run, Usage } from \"../services/command/command.js\";\n\nimport { Directory } from \"../services/filesync/directory.js\";\nimport { installAgentsMdScaffold, installGadgetSkillsIntoProject } from \"../services/output/agent-plugin.js\";\nimport { println } from \"../services/output/print.js\";\nimport { sprint } from \"../services/output/sprint.js\";\n\nexport const args = {\n \"--force\": { type: Boolean },\n} satisfies ArgsDefinition;\n\nexport const usage: Usage = () => {\n return sprint`\n Install Gadget agent plugins (AGENTS.md + skills) into the current project.\n\n {gray Usage}\n ggt agent-plugin install [--force]\n\n {gray Flags}\n --force Overwrite/reinstall even if already present\n `;\n};\n\nexport const run: Run<typeof args> = async (ctx, args): Promise<void> => {\n if (args._[0] !== \"install\") {\n println(usage(ctx));\n return;\n }\n\n const cwd = process.cwd();\n const syncJsonPath = await findUp(\".gadget/sync.json\", { cwd });\n const projectRoot = syncJsonPath ? path.join(syncJsonPath, \"../..\") : cwd;\n const directory = await Directory.init(projectRoot);\n const force = args[\"--force\"] ?? false;\n\n await installAgentsMdScaffold({ ctx, directory, force });\n await installGadgetSkillsIntoProject({ ctx, directory, force });\n};\n"],
|
|
5
|
+
"mappings": "0UAAAA,IACA,OAAOC,MAAU,YAUV,IAAMC,EAAO,CAClB,UAAW,CAAE,KAAM,OAAQ,CAC7B,EAEaC,EAAeC,EAAA,IACnBC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IADmB,SAYfC,EAAwBF,EAAA,MAAOG,EAAKL,IAAwB,CACvE,GAAIA,EAAK,EAAE,CAAC,IAAM,UAAW,CAC3BM,EAAQL,EAAMI,CAAG,CAAC,EAClB,MACF,CAEA,IAAME,EAAM,QAAQ,IAAI,EAClBC,EAAe,MAAMC,EAAO,oBAAqB,CAAE,IAAAF,CAAI,CAAC,EACxDG,EAAcF,EAAeG,EAAK,KAAKH,EAAc,OAAO,EAAID,EAChEK,EAAY,MAAMC,EAAU,KAAKH,CAAW,EAC5CI,EAAQd,EAAK,SAAS,GAAK,GAEjC,MAAMe,EAAwB,CAAE,IAAAV,EAAK,UAAAO,EAAW,MAAAE,CAAM,CAAC,EACvD,MAAME,EAA+B,CAAE,IAAAX,EAAK,UAAAO,EAAW,MAAAE,CAAM,CAAC,CAChE,EAdqC",
|
|
6
|
+
"names": ["init_cjs", "path", "args", "usage", "__name", "sprint", "run", "ctx", "println", "cwd", "syncJsonPath", "findUp", "projectRoot", "path", "directory", "Directory", "force", "installAgentsMdScaffold", "installGadgetSkillsIntoProject"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import{e as l,f}from"./chunk-442CSROP.js";import{K as w,e as i,ra as g}from"./chunk-JG2QCDK2.js";import{a as r,f as m,h as u}from"./chunk-7DYQUG5M.js";u();var o=m(w(),1);var h=i.object({pid:i.number(),startedAt:i.string()}),a=class extends f{constructor(n){super(`Another ggt dev process is already running (PID ${n.pid})`);this.details=n}static{r(this,"DevAlreadyRunningError")}isBug=l.NO;render(){return g`
|
|
2
|
+
Another "ggt dev" process is already running in this directory:
|
|
3
|
+
|
|
4
|
+
${this.details.directory}
|
|
5
|
+
|
|
6
|
+
The existing process has PID ${String(this.details.pid)}.
|
|
7
|
+
|
|
8
|
+
Stop the other process first, or use a different directory.
|
|
9
|
+
`}},c=r(t=>t.absolute(".gadget/dev-lock.json"),"devLockPath"),D=r(t=>{try{return process.kill(t,0),!0}catch{return!1}},"isProcessAlive"),y=r(async t=>{try{let e=await o.default.readJSON(c(t)),n=h.safeParse(e);return n.success?n.data:void 0}catch{return}},"readDevLock"),L=r(async t=>{let e=c(t),n={pid:process.pid,startedAt:new Date().toISOString()},d=JSON.stringify(n,null,2);await o.default.ensureDir(t.absolute(".gadget"));try{await o.default.writeFile(e,d,{flag:"wx"})}catch(p){if(p.code!=="EEXIST")throw p;let s=await y(t);if(s&&D(s.pid))throw new a({pid:s.pid,directory:t.path});await o.default.remove(e),await o.default.writeFile(e,d,{flag:"wx"})}},"acquireDevLock"),v=r(async t=>{try{await o.default.remove(c(t))}catch{}},"releaseDevLock"),S=r(async t=>{let e=await y(t);return e?D(e.pid)?{running:!0,pid:e.pid,startedAt:e.startedAt}:(await v(t),{running:!1}):{running:!1}},"getDevStatus");export{L as a,v as b,S as c};
|
|
10
|
+
//# sourceMappingURL=chunk-2742UPMB.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/services/filesync/dev-lock.ts"],
|
|
4
|
+
"sourcesContent": ["import fs from \"fs-extra\";\nimport { z } from \"zod\";\n\nimport type { Directory } from \"./directory.js\";\n\nimport { GGTError, IsBug } from \"../output/report.js\";\nimport { sprint } from \"../output/sprint.js\";\n\n/**\n * The data stored in the dev lock file.\n */\nexport const DevLockData = z.object({\n pid: z.number(),\n startedAt: z.string(),\n});\n\nexport type DevLockData = z.infer<typeof DevLockData>;\n\n/**\n * Error thrown when another `ggt dev` process is already running in the same directory.\n */\nexport class DevAlreadyRunningError extends GGTError {\n isBug = IsBug.NO;\n\n constructor(readonly details: { pid: number; directory: string }) {\n super(`Another ggt dev process is already running (PID ${details.pid})`);\n }\n\n protected render(): string {\n return sprint`\n Another \"ggt dev\" process is already running in this directory:\n\n ${this.details.directory}\n\n The existing process has PID ${String(this.details.pid)}.\n\n Stop the other process first, or use a different directory.\n `;\n }\n}\n\n/**\n * Returns the path to the dev lock file for the given directory.\n */\nexport const devLockPath = (directory: Directory): string => {\n return directory.absolute(\".gadget/dev-lock.json\");\n};\n\n/**\n * Checks whether a process with the given PID is alive.\n */\nexport const isProcessAlive = (pid: number): boolean => {\n try {\n process.kill(pid, 0);\n return true;\n } catch {\n return false;\n }\n};\n\n/**\n * Reads and parses the dev lock file. Returns undefined if missing or malformed.\n */\nexport const readDevLock = async (directory: Directory): Promise<DevLockData | undefined> => {\n try {\n const data: unknown = await fs.readJSON(devLockPath(directory));\n const result = DevLockData.safeParse(data);\n return result.success ? result.data : undefined;\n } catch {\n return undefined;\n }\n};\n\n/**\n * Atomically acquires the dev lock for the given directory.\n *\n * Uses `wx` flag for exclusive creation to prevent race conditions.\n * If a stale lock (dead PID) is found, it is removed and re-acquired.\n *\n * @throws {DevAlreadyRunningError} if another live process holds the lock.\n */\nexport const acquireDevLock = async (directory: Directory): Promise<void> => {\n const lockPath = devLockPath(directory);\n const lockData: DevLockData = {\n pid: process.pid,\n startedAt: new Date().toISOString(),\n };\n const content = JSON.stringify(lockData, null, 2);\n\n await fs.ensureDir(directory.absolute(\".gadget\"));\n\n try {\n await fs.writeFile(lockPath, content, { flag: \"wx\" });\n } catch (error: unknown) {\n if ((error as NodeJS.ErrnoException).code !== \"EEXIST\") {\n throw error;\n }\n\n // Lock file already exists - check if the holding process is still alive\n const existing = await readDevLock(directory);\n if (existing && isProcessAlive(existing.pid)) {\n throw new DevAlreadyRunningError({ pid: existing.pid, directory: directory.path });\n }\n\n // Stale or malformed lock - remove and retry\n await fs.remove(lockPath);\n await fs.writeFile(lockPath, content, { flag: \"wx\" });\n }\n};\n\n/**\n * Releases the dev lock for the given directory. Ignores errors.\n */\nexport const releaseDevLock = async (directory: Directory): Promise<void> => {\n try {\n await fs.remove(devLockPath(directory));\n } catch {\n // ignore errors during cleanup\n }\n};\n\n/**\n * Returns the current dev status for the given directory.\n * Cleans up stale locks as a side effect.\n */\nexport const getDevStatus = async (\n directory: Directory,\n): Promise<{ running: false } | { running: true; pid: number; startedAt: string }> => {\n const lock = await readDevLock(directory);\n if (!lock) {\n return { running: false };\n }\n\n if (!isProcessAlive(lock.pid)) {\n // Stale lock - clean it up\n await releaseDevLock(directory);\n return { running: false };\n }\n\n return { running: true, pid: lock.pid, startedAt: lock.startedAt };\n};\n"],
|
|
5
|
+
"mappings": "uJAAAA,IAAA,IAAAC,EAAe,SAWR,IAAMC,EAAcC,EAAE,OAAO,CAClC,IAAKA,EAAE,OAAO,EACd,UAAWA,EAAE,OAAO,CACtB,CAAC,EAOYC,EAAN,cAAqCC,CAAS,CAGnD,YAAqBC,EAA6C,CAChE,MAAM,mDAAmDA,EAAQ,GAAG,GAAG,EADpD,aAAAA,CAErB,CA1BF,MAqBqD,CAAAC,EAAA,+BACnD,MAAQC,EAAM,GAMJ,QAAiB,CACzB,OAAOC;AAAA;AAAA;AAAA,UAGD,KAAK,QAAQ,SAAS;AAAA;AAAA,qCAEK,OAAO,KAAK,QAAQ,GAAG,CAAC;AAAA;AAAA;AAAA,KAI3D,CACF,EAKaC,EAAcH,EAACI,GACnBA,EAAU,SAAS,uBAAuB,EADxB,eAOdC,EAAiBL,EAACM,GAAyB,CACtD,GAAI,CACF,eAAQ,KAAKA,EAAK,CAAC,EACZ,EACT,MAAQ,CACN,MAAO,EACT,CACF,EAP8B,kBAYjBC,EAAcP,EAAA,MAAOI,GAA2D,CAC3F,GAAI,CACF,IAAMI,EAAgB,MAAM,EAAAC,QAAG,SAASN,EAAYC,CAAS,CAAC,EACxDM,EAASf,EAAY,UAAUa,CAAI,EACzC,OAAOE,EAAO,QAAUA,EAAO,KAAO,MACxC,MAAQ,CACN,MACF,CACF,EAR2B,eAkBdC,EAAiBX,EAAA,MAAOI,GAAwC,CAC3E,IAAMQ,EAAWT,EAAYC,CAAS,EAChCS,EAAwB,CAC5B,IAAK,QAAQ,IACb,UAAW,IAAI,KAAK,EAAE,YAAY,CACpC,EACMC,EAAU,KAAK,UAAUD,EAAU,KAAM,CAAC,EAEhD,MAAM,EAAAJ,QAAG,UAAUL,EAAU,SAAS,SAAS,CAAC,EAEhD,GAAI,CACF,MAAM,EAAAK,QAAG,UAAUG,EAAUE,EAAS,CAAE,KAAM,IAAK,CAAC,CACtD,OAASC,EAAgB,CACvB,GAAKA,EAAgC,OAAS,SAC5C,MAAMA,EAIR,IAAMC,EAAW,MAAMT,EAAYH,CAAS,EAC5C,GAAIY,GAAYX,EAAeW,EAAS,GAAG,EACzC,MAAM,IAAInB,EAAuB,CAAE,IAAKmB,EAAS,IAAK,UAAWZ,EAAU,IAAK,CAAC,EAInF,MAAM,EAAAK,QAAG,OAAOG,CAAQ,EACxB,MAAM,EAAAH,QAAG,UAAUG,EAAUE,EAAS,CAAE,KAAM,IAAK,CAAC,CACtD,CACF,EA3B8B,kBAgCjBG,EAAiBjB,EAAA,MAAOI,GAAwC,CAC3E,GAAI,CACF,MAAM,EAAAK,QAAG,OAAON,EAAYC,CAAS,CAAC,CACxC,MAAQ,CAER,CACF,EAN8B,kBAYjBc,EAAelB,EAAA,MAC1BI,GACoF,CACpF,IAAMe,EAAO,MAAMZ,EAAYH,CAAS,EACxC,OAAKe,EAIAd,EAAec,EAAK,GAAG,EAMrB,CAAE,QAAS,GAAM,IAAKA,EAAK,IAAK,UAAWA,EAAK,SAAU,GAJ/D,MAAMF,EAAeb,CAAS,EACvB,CAAE,QAAS,EAAM,GANjB,CAAE,QAAS,EAAM,CAU5B,EAf4B",
|
|
6
|
+
"names": ["init_cjs", "import_fs_extra", "DevLockData", "external_exports", "DevAlreadyRunningError", "GGTError", "details", "__name", "IsBug", "sprint", "devLockPath", "directory", "isProcessAlive", "pid", "readDevLock", "data", "fs", "result", "acquireDevLock", "lockPath", "lockData", "content", "error", "existing", "releaseDevLock", "getDevStatus", "lock"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{L as b,M,N as C,O as ee,P as Cr,Q as R,R as A,S as Ar,T as Lr}from"./chunk-JG2QCDK2.js";import{a as o,d as q,h as c}from"./chunk-7DYQUG5M.js";var se=q((si,te)=>{"use strict";c();var re=R(),Vr=o((t,e,r,s,n)=>{typeof r=="string"&&(n=s,s=r,r=void 0);try{return new re(t instanceof re?t.version:t,r).inc(e,s,n).version}catch{return null}},"inc");te.exports=Vr});var oe=q((oi,ne)=>{"use strict";c();var ie=A(),jr=o((t,e)=>{let r=ie(t,null,!0),s=ie(e,null,!0),n=r.compare(s);if(n===0)return null;let i=n>0,l=i?r:s,u=i?s:r,a=!!l.prerelease.length;if(!!u.prerelease.length&&!a){if(!u.patch&&!u.minor)return"major";if(u.compareMain(l)===0)return u.minor&&!u.patch?"minor":"patch"}let m=a?"pre":"";return r.major!==s.major?m+"major":r.minor!==s.minor?m+"minor":r.patch!==s.patch?m+"patch":"prerelease"},"diff");ne.exports=jr});var ce=q((ui,le)=>{"use strict";c();var Ir=R(),Nr=o((t,e)=>new Ir(t,e).major,"major");le.exports=Nr});var ae=q((hi,ue)=>{"use strict";c();var Gr=R(),Wr=o((t,e)=>new Gr(t,e).minor,"minor");ue.exports=Wr});var he=q((qi,fe)=>{"use strict";c();var Dr=R(),Yr=o((t,e)=>new Dr(t,e).patch,"patch");fe.exports=Yr});var me=q((wi,pe)=>{"use strict";c();var Hr=A(),Xr=o((t,e)=>{let r=Hr(t,e);return r&&r.prerelease.length?r.prerelease:null},"prerelease");pe.exports=Xr});var E=q((Ri,$e)=>{"use strict";c();var qe=R(),Br=o((t,e,r)=>new qe(t,r).compare(new qe(e,r)),"compare");$e.exports=Br});var we=q((xi,de)=>{"use strict";c();var kr=E(),Ur=o((t,e,r)=>kr(e,t,r),"rcompare");de.exports=Ur});var ge=q((Pi,ve)=>{"use strict";c();var _r=E(),zr=o((t,e)=>_r(t,e,!0),"compareLoose");ve.exports=zr});var L=q((Ai,Ee)=>{"use strict";c();var Re=R(),Fr=o((t,e,r)=>{let s=new Re(t,r),n=new Re(e,r);return s.compare(n)||s.compareBuild(n)},"compareBuild");Ee.exports=Fr});var xe=q((ji,Se)=>{"use strict";c();var Kr=L(),Jr=o((t,e)=>t.sort((r,s)=>Kr(r,s,e)),"sort");Se.exports=Jr});var ye=q((Gi,Te)=>{"use strict";c();var Qr=L(),Zr=o((t,e)=>t.sort((r,s)=>Qr(s,r,e)),"rsort");Te.exports=Zr});var x=q((Yi,Pe)=>{"use strict";c();var br=E(),Mr=o((t,e,r)=>br(t,e,r)>0,"gt");Pe.exports=Mr});var V=q((Bi,Oe)=>{"use strict";c();var et=E(),rt=o((t,e,r)=>et(t,e,r)<0,"lt");Oe.exports=rt});var D=q((_i,Ce)=>{"use strict";c();var tt=E(),st=o((t,e,r)=>tt(t,e,r)===0,"eq");Ce.exports=st});var Y=q((Ki,Ae)=>{"use strict";c();var it=E(),nt=o((t,e,r)=>it(t,e,r)!==0,"neq");Ae.exports=nt});var j=q((Zi,Le)=>{"use strict";c();var ot=E(),lt=o((t,e,r)=>ot(t,e,r)>=0,"gte");Le.exports=lt});var I=q((en,Ve)=>{"use strict";c();var ct=E(),ut=o((t,e,r)=>ct(t,e,r)<=0,"lte");Ve.exports=ut});var H=q((sn,je)=>{"use strict";c();var at=D(),ft=Y(),ht=x(),pt=j(),mt=V(),qt=I(),$t=o((t,e,r,s)=>{switch(e){case"===":return typeof t=="object"&&(t=t.version),typeof r=="object"&&(r=r.version),t===r;case"!==":return typeof t=="object"&&(t=t.version),typeof r=="object"&&(r=r.version),t!==r;case"":case"=":case"==":return at(t,r,s);case"!=":return ft(t,r,s);case">":return ht(t,r,s);case">=":return pt(t,r,s);case"<":return mt(t,r,s);case"<=":return qt(t,r,s);default:throw new TypeError(`Invalid operator: ${e}`)}},"cmp");je.exports=$t});var Ne=q((ln,Ie)=>{"use strict";c();var dt=R(),wt=A(),{safeRe:N,t:G}=C(),vt=o((t,e)=>{if(t instanceof dt)return t;if(typeof t=="number"&&(t=String(t)),typeof t!="string")return null;e=e||{};let r=null;if(!e.rtl)r=t.match(e.includePrerelease?N[G.COERCEFULL]:N[G.COERCE]);else{let a=e.includePrerelease?N[G.COERCERTLFULL]:N[G.COERCERTL],p;for(;(p=a.exec(t))&&(!r||r.index+r[0].length!==t.length);)(!r||p.index+p[0].length!==r.index+r[0].length)&&(r=p),a.lastIndex=p.index+p[1].length+p[2].length;a.lastIndex=-1}if(r===null)return null;let s=r[2],n=r[3]||"0",i=r[4]||"0",l=e.includePrerelease&&r[5]?`-${r[5]}`:"",u=e.includePrerelease&&r[6]?`+${r[6]}`:"";return wt(`${s}.${n}.${i}${l}${u}`,e)},"coerce");Ie.exports=vt});var We=q((an,Ge)=>{"use strict";c();var X=class{static{o(this,"LRUCache")}constructor(){this.max=1e3,this.map=new Map}get(e){let r=this.map.get(e);if(r!==void 0)return this.map.delete(e),this.map.set(e,r),r}delete(e){return this.map.delete(e)}set(e,r){if(!this.delete(e)&&r!==void 0){if(this.map.size>=this.max){let n=this.map.keys().next().value;this.delete(n)}this.map.set(e,r)}return this}};Ge.exports=X});var S=q((pn,Xe)=>{"use strict";c();var gt=/\s+/g,B=class t{static{o(this,"Range")}constructor(e,r){if(r=Et(r),e instanceof t)return e.loose===!!r.loose&&e.includePrerelease===!!r.includePrerelease?e:new t(e.raw,r);if(e instanceof k)return this.raw=e.value,this.set=[[e]],this.formatted=void 0,this;if(this.options=r,this.loose=!!r.loose,this.includePrerelease=!!r.includePrerelease,this.raw=e.trim().replace(gt," "),this.set=this.raw.split("||").map(s=>this.parseRange(s.trim())).filter(s=>s.length),!this.set.length)throw new TypeError(`Invalid SemVer Range: ${this.raw}`);if(this.set.length>1){let s=this.set[0];if(this.set=this.set.filter(n=>!Ye(n[0])),this.set.length===0)this.set=[s];else if(this.set.length>1){for(let n of this.set)if(n.length===1&&Ct(n[0])){this.set=[n];break}}}this.formatted=void 0}get range(){if(this.formatted===void 0){this.formatted="";for(let e=0;e<this.set.length;e++){e>0&&(this.formatted+="||");let r=this.set[e];for(let s=0;s<r.length;s++)s>0&&(this.formatted+=" "),this.formatted+=r[s].toString().trim()}}return this.formatted}format(){return this.range}toString(){return this.range}parseRange(e){let s=((this.options.includePrerelease&&Pt)|(this.options.loose&&Ot))+":"+e,n=De.get(s);if(n)return n;let i=this.options.loose,l=i?v[w.HYPHENRANGELOOSE]:v[w.HYPHENRANGE];e=e.replace(l,Yt(this.options.includePrerelease)),$("hyphen replace",e),e=e.replace(v[w.COMPARATORTRIM],xt),$("comparator trim",e),e=e.replace(v[w.TILDETRIM],Tt),$("tilde trim",e),e=e.replace(v[w.CARETTRIM],yt),$("caret trim",e);let u=e.split(" ").map(f=>At(f,this.options)).join(" ").split(/\s+/).map(f=>Dt(f,this.options));i&&(u=u.filter(f=>($("loose invalid filter",f,this.options),!!f.match(v[w.COMPARATORLOOSE])))),$("range list",u);let a=new Map,p=u.map(f=>new k(f,this.options));for(let f of p){if(Ye(f))return[f];a.set(f.value,f)}a.size>1&&a.has("")&&a.delete("");let m=[...a.values()];return De.set(s,m),m}intersects(e,r){if(!(e instanceof t))throw new TypeError("a Range is required");return this.set.some(s=>He(s,r)&&e.set.some(n=>He(n,r)&&s.every(i=>n.every(l=>i.intersects(l,r)))))}test(e){if(!e)return!1;if(typeof e=="string")try{e=new St(e,this.options)}catch{return!1}for(let r=0;r<this.set.length;r++)if(Ht(this.set[r],e,this.options))return!0;return!1}};Xe.exports=B;var Rt=We(),De=new Rt,Et=ee(),k=T(),$=b(),St=R(),{safeRe:v,t:w,comparatorTrimReplace:xt,tildeTrimReplace:Tt,caretTrimReplace:yt}=C(),{FLAG_INCLUDE_PRERELEASE:Pt,FLAG_LOOSE:Ot}=M(),Ye=o(t=>t.value==="<0.0.0-0","isNullSet"),Ct=o(t=>t.value==="","isAny"),He=o((t,e)=>{let r=!0,s=t.slice(),n=s.pop();for(;r&&s.length;)r=s.every(i=>n.intersects(i,e)),n=s.pop();return r},"isSatisfiable"),At=o((t,e)=>(t=t.replace(v[w.BUILD],""),$("comp",t,e),t=jt(t,e),$("caret",t),t=Lt(t,e),$("tildes",t),t=Nt(t,e),$("xrange",t),t=Wt(t,e),$("stars",t),t),"parseComparator"),g=o(t=>!t||t.toLowerCase()==="x"||t==="*","isX"),Lt=o((t,e)=>t.trim().split(/\s+/).map(r=>Vt(r,e)).join(" "),"replaceTildes"),Vt=o((t,e)=>{let r=e.loose?v[w.TILDELOOSE]:v[w.TILDE];return t.replace(r,(s,n,i,l,u)=>{$("tilde",t,s,n,i,l,u);let a;return g(n)?a="":g(i)?a=`>=${n}.0.0 <${+n+1}.0.0-0`:g(l)?a=`>=${n}.${i}.0 <${n}.${+i+1}.0-0`:u?($("replaceTilde pr",u),a=`>=${n}.${i}.${l}-${u} <${n}.${+i+1}.0-0`):a=`>=${n}.${i}.${l} <${n}.${+i+1}.0-0`,$("tilde return",a),a})},"replaceTilde"),jt=o((t,e)=>t.trim().split(/\s+/).map(r=>It(r,e)).join(" "),"replaceCarets"),It=o((t,e)=>{$("caret",t,e);let r=e.loose?v[w.CARETLOOSE]:v[w.CARET],s=e.includePrerelease?"-0":"";return t.replace(r,(n,i,l,u,a)=>{$("caret",t,n,i,l,u,a);let p;return g(i)?p="":g(l)?p=`>=${i}.0.0${s} <${+i+1}.0.0-0`:g(u)?i==="0"?p=`>=${i}.${l}.0${s} <${i}.${+l+1}.0-0`:p=`>=${i}.${l}.0${s} <${+i+1}.0.0-0`:a?($("replaceCaret pr",a),i==="0"?l==="0"?p=`>=${i}.${l}.${u}-${a} <${i}.${l}.${+u+1}-0`:p=`>=${i}.${l}.${u}-${a} <${i}.${+l+1}.0-0`:p=`>=${i}.${l}.${u}-${a} <${+i+1}.0.0-0`):($("no pr"),i==="0"?l==="0"?p=`>=${i}.${l}.${u}${s} <${i}.${l}.${+u+1}-0`:p=`>=${i}.${l}.${u}${s} <${i}.${+l+1}.0-0`:p=`>=${i}.${l}.${u} <${+i+1}.0.0-0`),$("caret return",p),p})},"replaceCaret"),Nt=o((t,e)=>($("replaceXRanges",t,e),t.split(/\s+/).map(r=>Gt(r,e)).join(" ")),"replaceXRanges"),Gt=o((t,e)=>{t=t.trim();let r=e.loose?v[w.XRANGELOOSE]:v[w.XRANGE];return t.replace(r,(s,n,i,l,u,a)=>{$("xRange",t,s,n,i,l,u,a);let p=g(i),m=p||g(l),f=m||g(u),d=f;return n==="="&&d&&(n=""),a=e.includePrerelease?"-0":"",p?n===">"||n==="<"?s="<0.0.0-0":s="*":n&&d?(m&&(l=0),u=0,n===">"?(n=">=",m?(i=+i+1,l=0,u=0):(l=+l+1,u=0)):n==="<="&&(n="<",m?i=+i+1:l=+l+1),n==="<"&&(a="-0"),s=`${n+i}.${l}.${u}${a}`):m?s=`>=${i}.0.0${a} <${+i+1}.0.0-0`:f&&(s=`>=${i}.${l}.0${a} <${i}.${+l+1}.0-0`),$("xRange return",s),s})},"replaceXRange"),Wt=o((t,e)=>($("replaceStars",t,e),t.trim().replace(v[w.STAR],"")),"replaceStars"),Dt=o((t,e)=>($("replaceGTE0",t,e),t.trim().replace(v[e.includePrerelease?w.GTE0PRE:w.GTE0],"")),"replaceGTE0"),Yt=o(t=>(e,r,s,n,i,l,u,a,p,m,f,d)=>(g(s)?r="":g(n)?r=`>=${s}.0.0${t?"-0":""}`:g(i)?r=`>=${s}.${n}.0${t?"-0":""}`:l?r=`>=${r}`:r=`>=${r}${t?"-0":""}`,g(p)?a="":g(m)?a=`<${+p+1}.0.0-0`:g(f)?a=`<${p}.${+m+1}.0-0`:d?a=`<=${p}.${m}.${f}-${d}`:t?a=`<${p}.${m}.${+f+1}-0`:a=`<=${a}`,`${r} ${a}`.trim()),"hyphenReplace"),Ht=o((t,e,r)=>{for(let s=0;s<t.length;s++)if(!t[s].test(e))return!1;if(e.prerelease.length&&!r.includePrerelease){for(let s=0;s<t.length;s++)if($(t[s].semver),t[s].semver!==k.ANY&&t[s].semver.prerelease.length>0){let n=t[s].semver;if(n.major===e.major&&n.minor===e.minor&&n.patch===e.patch)return!0}return!1}return!0},"testSet")});var T=q(($n,Fe)=>{"use strict";c();var y=Symbol("SemVer ANY"),z=class t{static{o(this,"Comparator")}static get ANY(){return y}constructor(e,r){if(r=Be(r),e instanceof t){if(e.loose===!!r.loose)return e;e=e.value}e=e.trim().split(/\s+/).join(" "),_("comparator",e,r),this.options=r,this.loose=!!r.loose,this.parse(e),this.semver===y?this.value="":this.value=this.operator+this.semver.version,_("comp",this)}parse(e){let r=this.options.loose?ke[Ue.COMPARATORLOOSE]:ke[Ue.COMPARATOR],s=e.match(r);if(!s)throw new TypeError(`Invalid comparator: ${e}`);this.operator=s[1]!==void 0?s[1]:"",this.operator==="="&&(this.operator=""),s[2]?this.semver=new _e(s[2],this.options.loose):this.semver=y}toString(){return this.value}test(e){if(_("Comparator.test",e,this.options.loose),this.semver===y||e===y)return!0;if(typeof e=="string")try{e=new _e(e,this.options)}catch{return!1}return U(e,this.operator,this.semver,this.options)}intersects(e,r){if(!(e instanceof t))throw new TypeError("a Comparator is required");return this.operator===""?this.value===""?!0:new ze(e.value,r).test(this.value):e.operator===""?e.value===""?!0:new ze(this.value,r).test(e.semver):(r=Be(r),r.includePrerelease&&(this.value==="<0.0.0-0"||e.value==="<0.0.0-0")||!r.includePrerelease&&(this.value.startsWith("<0.0.0")||e.value.startsWith("<0.0.0"))?!1:!!(this.operator.startsWith(">")&&e.operator.startsWith(">")||this.operator.startsWith("<")&&e.operator.startsWith("<")||this.semver.version===e.semver.version&&this.operator.includes("=")&&e.operator.includes("=")||U(this.semver,"<",e.semver,r)&&this.operator.startsWith(">")&&e.operator.startsWith("<")||U(this.semver,">",e.semver,r)&&this.operator.startsWith("<")&&e.operator.startsWith(">")))}};Fe.exports=z;var Be=ee(),{safeRe:ke,t:Ue}=C(),U=H(),_=b(),_e=R(),ze=S()});var P=q((vn,Ke)=>{"use strict";c();var Xt=S(),Bt=o((t,e,r)=>{try{e=new Xt(e,r)}catch{return!1}return e.test(t)},"satisfies");Ke.exports=Bt});var Qe=q((En,Je)=>{"use strict";c();var kt=S(),Ut=o((t,e)=>new kt(t,e).set.map(r=>r.map(s=>s.value).join(" ").trim().split(" ")),"toComparators");Je.exports=Ut});var be=q((Tn,Ze)=>{"use strict";c();var _t=R(),zt=S(),Ft=o((t,e,r)=>{let s=null,n=null,i=null;try{i=new zt(e,r)}catch{return null}return t.forEach(l=>{i.test(l)&&(!s||n.compare(l)===-1)&&(s=l,n=new _t(s,r))}),s},"maxSatisfying");Ze.exports=Ft});var er=q((On,Me)=>{"use strict";c();var Kt=R(),Jt=S(),Qt=o((t,e,r)=>{let s=null,n=null,i=null;try{i=new Jt(e,r)}catch{return null}return t.forEach(l=>{i.test(l)&&(!s||n.compare(l)===1)&&(s=l,n=new Kt(s,r))}),s},"minSatisfying");Me.exports=Qt});var sr=q((Ln,tr)=>{"use strict";c();var F=R(),Zt=S(),rr=x(),bt=o((t,e)=>{t=new Zt(t,e);let r=new F("0.0.0");if(t.test(r)||(r=new F("0.0.0-0"),t.test(r)))return r;r=null;for(let s=0;s<t.set.length;++s){let n=t.set[s],i=null;n.forEach(l=>{let u=new F(l.semver.version);switch(l.operator){case">":u.prerelease.length===0?u.patch++:u.prerelease.push(0),u.raw=u.format();case"":case">=":(!i||rr(u,i))&&(i=u);break;case"<":case"<=":break;default:throw new Error(`Unexpected operation: ${l.operator}`)}}),i&&(!r||rr(r,i))&&(r=i)}return r&&t.test(r)?r:null},"minVersion");tr.exports=bt});var nr=q((In,ir)=>{"use strict";c();var Mt=S(),es=o((t,e)=>{try{return new Mt(t,e).range||"*"}catch{return null}},"validRange");ir.exports=es});var W=q((Wn,ur)=>{"use strict";c();var rs=R(),cr=T(),{ANY:ts}=cr,ss=S(),is=P(),or=x(),lr=V(),ns=I(),os=j(),ls=o((t,e,r,s)=>{t=new rs(t,s),e=new ss(e,s);let n,i,l,u,a;switch(r){case">":n=or,i=ns,l=lr,u=">",a=">=";break;case"<":n=lr,i=os,l=or,u="<",a="<=";break;default:throw new TypeError('Must provide a hilo val of "<" or ">"')}if(is(t,e,s))return!1;for(let p=0;p<e.set.length;++p){let m=e.set[p],f=null,d=null;if(m.forEach(h=>{h.semver===ts&&(h=new cr(">=0.0.0")),f=f||h,d=d||h,n(h.semver,f.semver,s)?f=h:l(h.semver,d.semver,s)&&(d=h)}),f.operator===u||f.operator===a||(!d.operator||d.operator===u)&&i(t,d.semver))return!1;if(d.operator===a&&l(t,d.semver))return!1}return!0},"outside");ur.exports=ls});var fr=q((Hn,ar)=>{"use strict";c();var cs=W(),us=o((t,e,r)=>cs(t,e,">",r),"gtr");ar.exports=us});var pr=q((kn,hr)=>{"use strict";c();var as=W(),fs=o((t,e,r)=>as(t,e,"<",r),"ltr");hr.exports=fs});var $r=q((zn,qr)=>{"use strict";c();var mr=S(),hs=o((t,e,r)=>(t=new mr(t,r),e=new mr(e,r),t.intersects(e,r)),"intersects");qr.exports=hs});var wr=q((Jn,dr)=>{"use strict";c();var ps=P(),ms=E();dr.exports=(t,e,r)=>{let s=[],n=null,i=null,l=t.sort((m,f)=>ms(m,f,r));for(let m of l)ps(m,e,r)?(i=m,n||(n=m)):(i&&s.push([n,i]),i=null,n=null);n&&s.push([n,null]);let u=[];for(let[m,f]of s)m===f?u.push(m):!f&&m===l[0]?u.push("*"):f?m===l[0]?u.push(`<=${f}`):u.push(`${m} - ${f}`):u.push(`>=${m}`);let a=u.join(" || "),p=typeof e.raw=="string"?e.raw:String(e);return a.length<p.length?a:e}});var xr=q((Zn,Sr)=>{"use strict";c();var vr=S(),J=T(),{ANY:K}=J,O=P(),Q=E(),qs=o((t,e,r={})=>{if(t===e)return!0;t=new vr(t,r),e=new vr(e,r);let s=!1;e:for(let n of t.set){for(let i of e.set){let l=ds(n,i,r);if(s=s||l!==null,l)continue e}if(s)return!1}return!0},"subset"),$s=[new J(">=0.0.0-0")],gr=[new J(">=0.0.0")],ds=o((t,e,r)=>{if(t===e)return!0;if(t.length===1&&t[0].semver===K){if(e.length===1&&e[0].semver===K)return!0;r.includePrerelease?t=$s:t=gr}if(e.length===1&&e[0].semver===K){if(r.includePrerelease)return!0;e=gr}let s=new Set,n,i;for(let h of t)h.operator===">"||h.operator===">="?n=Rr(n,h,r):h.operator==="<"||h.operator==="<="?i=Er(i,h,r):s.add(h.semver);if(s.size>1)return null;let l;if(n&&i){if(l=Q(n.semver,i.semver,r),l>0)return null;if(l===0&&(n.operator!==">="||i.operator!=="<="))return null}for(let h of s){if(n&&!O(h,String(n),r)||i&&!O(h,String(i),r))return null;for(let Or of e)if(!O(h,String(Or),r))return!1;return!0}let u,a,p,m,f=i&&!r.includePrerelease&&i.semver.prerelease.length?i.semver:!1,d=n&&!r.includePrerelease&&n.semver.prerelease.length?n.semver:!1;f&&f.prerelease.length===1&&i.operator==="<"&&f.prerelease[0]===0&&(f=!1);for(let h of e){if(m=m||h.operator===">"||h.operator===">=",p=p||h.operator==="<"||h.operator==="<=",n){if(d&&h.semver.prerelease&&h.semver.prerelease.length&&h.semver.major===d.major&&h.semver.minor===d.minor&&h.semver.patch===d.patch&&(d=!1),h.operator===">"||h.operator===">="){if(u=Rr(n,h,r),u===h&&u!==n)return!1}else if(n.operator===">="&&!O(n.semver,String(h),r))return!1}if(i){if(f&&h.semver.prerelease&&h.semver.prerelease.length&&h.semver.major===f.major&&h.semver.minor===f.minor&&h.semver.patch===f.patch&&(f=!1),h.operator==="<"||h.operator==="<="){if(a=Er(i,h,r),a===h&&a!==i)return!1}else if(i.operator==="<="&&!O(i.semver,String(h),r))return!1}if(!h.operator&&(i||n)&&l!==0)return!1}return!(n&&p&&!i&&l!==0||i&&m&&!n&&l!==0||d||f)},"simpleSubset"),Rr=o((t,e,r)=>{if(!t)return e;let s=Q(t.semver,e.semver,r);return s>0?t:s<0||e.operator===">"&&t.operator===">="?e:t},"higherGT"),Er=o((t,e,r)=>{if(!t)return e;let s=Q(t.semver,e.semver,r);return s<0?t:s>0||e.operator==="<"&&t.operator==="<="?e:t},"lowerLT");Sr.exports=qs});var ti=q((eo,Pr)=>{"use strict";c();var Z=C(),Tr=M(),ws=R(),yr=Cr(),vs=A(),gs=Ar(),Rs=Lr(),Es=se(),Ss=oe(),xs=ce(),Ts=ae(),ys=he(),Ps=me(),Os=E(),Cs=we(),As=ge(),Ls=L(),Vs=xe(),js=ye(),Is=x(),Ns=V(),Gs=D(),Ws=Y(),Ds=j(),Ys=I(),Hs=H(),Xs=Ne(),Bs=T(),ks=S(),Us=P(),_s=Qe(),zs=be(),Fs=er(),Ks=sr(),Js=nr(),Qs=W(),Zs=fr(),bs=pr(),Ms=$r(),ei=wr(),ri=xr();Pr.exports={parse:vs,valid:gs,clean:Rs,inc:Es,diff:Ss,major:xs,minor:Ts,patch:ys,prerelease:Ps,compare:Os,rcompare:Cs,compareLoose:As,compareBuild:Ls,sort:Vs,rsort:js,gt:Is,lt:Ns,eq:Gs,neq:Ws,gte:Ds,lte:Ys,cmp:Hs,coerce:Xs,Comparator:Bs,Range:ks,satisfies:Us,toComparators:_s,maxSatisfying:zs,minSatisfying:Fs,minVersion:Ks,validRange:Js,outside:Qs,gtr:Zs,ltr:bs,intersects:Ms,simplifyRange:ei,subset:ri,SemVer:ws,re:Z.re,src:Z.src,tokens:Z.t,SEMVER_SPEC_VERSION:Tr.SEMVER_SPEC_VERSION,RELEASE_TYPES:Tr.RELEASE_TYPES,compareIdentifiers:yr.compareIdentifiers,rcompareIdentifiers:yr.rcompareIdentifiers}});export{ti as a};
|
|
2
|
+
//# sourceMappingURL=chunk-3OM5WM7E.js.map
|