@gadgetinc/ggt 2.2.0 → 3.0.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 +392 -307
- package/dist/action-CF6zatIh.js +64 -0
- package/dist/action-CF6zatIh.js.map +1 -0
- package/dist/action-CrDCeX3F.js +8 -0
- package/dist/action-CrDCeX3F.js.map +1 -0
- package/dist/add-Basu3Gyf.js +1 -0
- package/dist/agent-plugin-CqgwTOk-.js +15 -0
- package/dist/agent-plugin-CqgwTOk-.js.map +1 -0
- package/dist/agent-plugin-DU9G5B1d.js +9 -0
- package/dist/agent-plugin-DU9G5B1d.js.map +1 -0
- package/dist/assert-Bu1E126Z.js +2 -0
- package/dist/assert-Bu1E126Z.js.map +1 -0
- package/dist/chunk-BjEoQXZ0.js +1 -0
- package/dist/collection-C2TCeYqY.js +2 -0
- package/dist/collection-C2TCeYqY.js.map +1 -0
- package/dist/collection-aM0fpch0.js +1 -0
- package/dist/command-2iNTc5dV.js +118 -0
- package/dist/command-2iNTc5dV.js.map +1 -0
- package/dist/completion-D96nxD5n.js +37 -0
- package/dist/completion-D96nxD5n.js.map +1 -0
- package/dist/configure-C8ge-2cK.js +15 -0
- package/dist/configure-C8ge-2cK.js.map +1 -0
- package/dist/debugger-BkYgApKn.js +22 -0
- package/dist/debugger-BkYgApKn.js.map +1 -0
- package/dist/defaults-B_eD7Pia.js +2 -0
- package/dist/defaults-B_eD7Pia.js.map +1 -0
- package/dist/deploy-Da6P2HXS.js +15 -0
- package/dist/deploy-Da6P2HXS.js.map +1 -0
- package/dist/dev-DWMSNcLl.js +32 -0
- package/dist/dev-DWMSNcLl.js.map +1 -0
- package/dist/dev-lock-BFanZSu1.js +10 -0
- package/dist/dev-lock-BFanZSu1.js.map +1 -0
- package/dist/directory-CNL03L6c.js +9 -0
- package/dist/directory-CNL03L6c.js.map +1 -0
- package/dist/env-DoWNvHzW.js +62 -0
- package/dist/env-DoWNvHzW.js.map +1 -0
- package/dist/esm-B25i6Etq.js +12 -0
- package/dist/esm-B25i6Etq.js.map +1 -0
- package/dist/esm-CJocZrdd.js +2 -0
- package/dist/esm-CJocZrdd.js.map +1 -0
- package/dist/eval-BceZMSd5.js +27 -0
- package/dist/eval-BceZMSd5.js.map +1 -0
- package/dist/execAsync-DrhcEHLd.js +2 -0
- package/dist/execAsync-DrhcEHLd.js.map +1 -0
- package/dist/filesync-De6asZeR.js +61 -0
- package/dist/filesync-De6asZeR.js.map +1 -0
- package/dist/getMachineId-bsd-Cch8Z6pV.js +2 -0
- package/dist/getMachineId-bsd-Cch8Z6pV.js.map +1 -0
- package/dist/getMachineId-darwin-kbQWK54o.js +3 -0
- package/dist/getMachineId-darwin-kbQWK54o.js.map +1 -0
- package/dist/getMachineId-linux-DdIel6zr.js +2 -0
- package/dist/getMachineId-linux-DdIel6zr.js.map +1 -0
- package/dist/getMachineId-unsupported-Bvmsh30k.js +2 -0
- package/dist/getMachineId-unsupported-Bvmsh30k.js.map +1 -0
- package/dist/getMachineId-win-BteHZe8j.js +2 -0
- package/dist/getMachineId-win-BteHZe8j.js.map +1 -0
- package/dist/ggt-B3HQjQRM.js +3 -0
- package/dist/ggt-B3HQjQRM.js.map +1 -0
- package/dist/handler-DZyG8Sel.js +4 -0
- package/dist/handler-DZyG8Sel.js.map +1 -0
- package/dist/http-CY3lPMkt.js +320 -0
- package/dist/http-CY3lPMkt.js.map +1 -0
- package/dist/indent-string-BVm-4tyL.js +2 -0
- package/dist/indent-string-BVm-4tyL.js.map +1 -0
- package/dist/list-lQKWZ6ZI.js +10 -0
- package/dist/list-lQKWZ6ZI.js.map +1 -0
- package/dist/login-Ce0tByNd.js +1 -0
- package/dist/logout-_sTWeaiQ.js +5 -0
- package/dist/logout-_sTWeaiQ.js.map +1 -0
- package/dist/logs-DbhJzz4M.js +9 -0
- package/dist/logs-DbhJzz4M.js.map +1 -0
- package/dist/main.js +2 -2
- package/dist/main.js.map +1 -7
- package/dist/model-CBiMKY0P.js +11 -0
- package/dist/model-CBiMKY0P.js.map +1 -0
- package/dist/ms-B7sMc0pR.js +2 -0
- package/dist/ms-B7sMc0pR.js.map +1 -0
- package/dist/open-CSsA4B-l.js +38 -0
- package/dist/open-CSsA4B-l.js.map +1 -0
- package/dist/p-map-DE0acmRv.js +2 -0
- package/dist/p-map-DE0acmRv.js.map +1 -0
- package/dist/problems-BMLsmxd4.js +11 -0
- package/dist/problems-BMLsmxd4.js.map +1 -0
- package/dist/prompt-C9nwJW0G.js +2 -0
- package/dist/prompt-C9nwJW0G.js.map +1 -0
- package/dist/pull-DpizmJGk.js +12 -0
- package/dist/pull-DpizmJGk.js.map +1 -0
- package/dist/push-67KBCw6c.js +12 -0
- package/dist/push-67KBCw6c.js.map +1 -0
- package/dist/root-D_UnUsp7.js +28 -0
- package/dist/root-D_UnUsp7.js.map +1 -0
- package/dist/select-Dey_sjjd.js +4 -0
- package/dist/select-Dey_sjjd.js.map +1 -0
- package/dist/session-BmzGF1t7.js +2 -0
- package/dist/session-BmzGF1t7.js.map +1 -0
- package/dist/spinner-BVmbgIil.js +8 -0
- package/dist/spinner-BVmbgIil.js.map +1 -0
- package/dist/src-DxCC1MV4.js +6 -0
- package/dist/src-DxCC1MV4.js.map +1 -0
- package/dist/status-P_RFQ7J0.js +13 -0
- package/dist/status-P_RFQ7J0.js.map +1 -0
- package/dist/subscribeToEnvironmentLogs-CUicaiw_.js +2 -0
- package/dist/subscribeToEnvironmentLogs-CUicaiw_.js.map +1 -0
- package/dist/sync-json-V52OzeCz.js +112 -0
- package/dist/sync-json-V52OzeCz.js.map +1 -0
- package/dist/table-MrBbxMay.js +11 -0
- package/dist/table-MrBbxMay.js.map +1 -0
- package/dist/update-CfxiL08e.js +12 -0
- package/dist/update-CfxiL08e.js.map +1 -0
- package/dist/update-iyhnL9-M.js +1 -0
- package/dist/var-ByWcufFt.js +59 -0
- package/dist/var-ByWcufFt.js.map +1 -0
- package/dist/version-B_9GB4u3.js +9 -0
- package/dist/version-B_9GB4u3.js.map +1 -0
- package/dist/whoami-BNcXIfz7.js +5 -0
- package/dist/whoami-BNcXIfz7.js.map +1 -0
- package/package.json +19 -23
- package/assets/favicon-128@4x.png +0 -0
- package/dist/add-TWLGKL2T.js +0 -82
- package/dist/add-TWLGKL2T.js.map +0 -7
- package/dist/agent-plugin-TN24O7FB.js +0 -10
- package/dist/agent-plugin-TN24O7FB.js.map +0 -7
- package/dist/chunk-2742UPMB.js +0 -10
- package/dist/chunk-2742UPMB.js.map +0 -7
- package/dist/chunk-3OM5WM7E.js +0 -2
- package/dist/chunk-3OM5WM7E.js.map +0 -7
- package/dist/chunk-442CSROP.js +0 -66
- package/dist/chunk-442CSROP.js.map +0 -7
- package/dist/chunk-7DYQUG5M.js +0 -2
- package/dist/chunk-7DYQUG5M.js.map +0 -7
- package/dist/chunk-DR4CXBD6.js +0 -11
- package/dist/chunk-DR4CXBD6.js.map +0 -7
- package/dist/chunk-F255O64V.js +0 -2
- package/dist/chunk-F255O64V.js.map +0 -7
- package/dist/chunk-GFQYFEEH.js +0 -2
- package/dist/chunk-GFQYFEEH.js.map +0 -7
- package/dist/chunk-GJGBTM5Y.js +0 -2
- package/dist/chunk-GJGBTM5Y.js.map +0 -7
- package/dist/chunk-HCULGPBH.js +0 -2
- package/dist/chunk-HCULGPBH.js.map +0 -7
- package/dist/chunk-J232VCIM.js +0 -2
- package/dist/chunk-J232VCIM.js.map +0 -7
- package/dist/chunk-JG2QCDK2.js +0 -118
- package/dist/chunk-JG2QCDK2.js.map +0 -7
- package/dist/chunk-JKZNSRLU.js +0 -8
- package/dist/chunk-JKZNSRLU.js.map +0 -7
- package/dist/chunk-JYE5LLIF.js +0 -9
- package/dist/chunk-JYE5LLIF.js.map +0 -7
- package/dist/chunk-KKIL22RY.js +0 -2
- package/dist/chunk-KKIL22RY.js.map +0 -7
- package/dist/chunk-L2XBSR7G.js +0 -2
- package/dist/chunk-L2XBSR7G.js.map +0 -7
- package/dist/chunk-MW6MXMSN.js +0 -2
- package/dist/chunk-MW6MXMSN.js.map +0 -7
- package/dist/chunk-OUIZQC4D.js +0 -12
- package/dist/chunk-OUIZQC4D.js.map +0 -7
- package/dist/chunk-R6KJLEKY.js +0 -28
- package/dist/chunk-R6KJLEKY.js.map +0 -7
- package/dist/chunk-SIR6HLN3.js +0 -69
- package/dist/chunk-SIR6HLN3.js.map +0 -7
- package/dist/chunk-SVWK2NXG.js +0 -2
- package/dist/chunk-SVWK2NXG.js.map +0 -7
- package/dist/chunk-T6UHSWMT.js +0 -2
- package/dist/chunk-T6UHSWMT.js.map +0 -7
- package/dist/chunk-WB6O2V5D.js +0 -11
- package/dist/chunk-WB6O2V5D.js.map +0 -7
- package/dist/chunk-XC4F2TLW.js +0 -113
- package/dist/chunk-XC4F2TLW.js.map +0 -7
- package/dist/chunk-YFUOXDPK.js +0 -10
- package/dist/chunk-YFUOXDPK.js.map +0 -7
- package/dist/chunk-ZSREFZXV.js +0 -211
- package/dist/chunk-ZSREFZXV.js.map +0 -7
- package/dist/chunk-ZYDMXS5R.js +0 -6
- package/dist/chunk-ZYDMXS5R.js.map +0 -7
- package/dist/configure-UJS7V2JX.js +0 -12
- package/dist/configure-UJS7V2JX.js.map +0 -7
- package/dist/debugger-QN2MCLBL.js +0 -41
- package/dist/debugger-QN2MCLBL.js.map +0 -7
- package/dist/deploy-J74PHPQA.js +0 -25
- package/dist/deploy-J74PHPQA.js.map +0 -7
- package/dist/dev-GGUSOOYP.js +0 -59
- package/dist/dev-GGUSOOYP.js.map +0 -7
- package/dist/esm-D77XRR65.js +0 -38
- package/dist/esm-D77XRR65.js.map +0 -7
- package/dist/eval-L6WHUFLU.js +0 -54
- package/dist/eval-L6WHUFLU.js.map +0 -7
- package/dist/getMachineId-bsd-QUXN4NKS.js +0 -2
- package/dist/getMachineId-bsd-QUXN4NKS.js.map +0 -7
- package/dist/getMachineId-darwin-TCXBAX22.js +0 -3
- package/dist/getMachineId-darwin-TCXBAX22.js.map +0 -7
- package/dist/getMachineId-linux-IJ3LYIOX.js +0 -2
- package/dist/getMachineId-linux-IJ3LYIOX.js.map +0 -7
- package/dist/getMachineId-unsupported-IKXBUCYY.js +0 -2
- package/dist/getMachineId-unsupported-IKXBUCYY.js.map +0 -7
- package/dist/getMachineId-win-6CX7VSFF.js +0 -2
- package/dist/getMachineId-win-6CX7VSFF.js.map +0 -7
- package/dist/ggt-5XNRJZSW.js +0 -44
- package/dist/ggt-5XNRJZSW.js.map +0 -7
- package/dist/list-756D46N5.js +0 -11
- package/dist/list-756D46N5.js.map +0 -7
- package/dist/login-GMWQRH7V.js +0 -2
- package/dist/login-GMWQRH7V.js.map +0 -7
- package/dist/logout-LQABTJFD.js +0 -7
- package/dist/logout-LQABTJFD.js.map +0 -7
- package/dist/logs-AQZB272X.js +0 -28
- package/dist/logs-AQZB272X.js.map +0 -7
- package/dist/open-OMZWPQ66.js +0 -74
- package/dist/open-OMZWPQ66.js.map +0 -7
- package/dist/problems-FZJKH52E.js +0 -14
- package/dist/problems-FZJKH52E.js.map +0 -7
- package/dist/pull-XYCYN7QN.js +0 -28
- package/dist/pull-XYCYN7QN.js.map +0 -7
- package/dist/push-3QM7ZFTC.js +0 -2
- package/dist/push-3QM7ZFTC.js.map +0 -7
- package/dist/status-PWAXNK5G.js +0 -14
- package/dist/status-PWAXNK5G.js.map +0 -7
- package/dist/update-QIQFJFRQ.js +0 -2
- package/dist/update-QIQFJFRQ.js.map +0 -7
- package/dist/var-N4WGGJXZ.js +0 -159
- package/dist/var-N4WGGJXZ.js.map +0 -7
- package/dist/version-AJKSJJDC.js +0 -11
- package/dist/version-AJKSJJDC.js.map +0 -7
- package/dist/whoami-KJYDSQSD.js +0 -7
- package/dist/whoami-KJYDSQSD.js.map +0 -7
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import{o as e}from"./chunk-BjEoQXZ0.js";import"./ms-B7sMc0pR.js";import"./src-DxCC1MV4.js";import{r as t}from"./prompt-C9nwJW0G.js";import{V as n,at as r,g as i,j as a,pt as o,rt as s,s as c}from"./http-CY3lPMkt.js";import{E as l,V as u,c as d,n as f,s as p}from"./command-2iNTc5dV.js";import"./collection-C2TCeYqY.js";import"./directory-CNL03L6c.js";import"./session-BmzGF1t7.js";import{a as m,i as h,r as g,y as _}from"./sync-json-V52OzeCz.js";import"./select-Dey_sjjd.js";var v=e(u(),1);const y=async(e,t)=>{let n=await g(process.cwd());return h.load(e,{command:`var`,flags:t,directory:n})};var b=f({name:`var`,description:`Manage your app's environment variables`,details:l`
|
|
2
|
+
Environment variables are available as ${p.hint(`process.env.YOUR_VAR`)} in your app code. Use them
|
|
3
|
+
for configuration like API keys and settings that differ between environments. Secret
|
|
4
|
+
variables are write-only — their values cannot be read back after being set.
|
|
5
|
+
`,examples:[`ggt var list`,`ggt var get DATABASE_URL`,`ggt var set API_KEY=abc123`,`ggt var set SECRET=xyz --secret`,`ggt var set CONNECTION_STRING=postgres://user:pass@host/db`,`ggt var delete API_KEY`,`ggt var delete --all --force`,`ggt var import --from staging --all`,`ggt var import --from-file .env --all`],flags:m,subcommands:e=>({list:e({description:`List all environment variable keys`,details:l`
|
|
6
|
+
Prints each variable key on its own line. Values are not shown — use
|
|
7
|
+
${p.identifier(`ggt var get`)} to read a specific value.
|
|
8
|
+
`,examples:[`ggt var list`,`ggt var list --app myapp --env staging`],run:async(e,t)=>{let n=(await(await y(e,t)).edit.query({query:r})).environmentVariables;if(n.length===0){d(`No environment variables found.`);return}for(let e of n)d(e.key)}}),get:e({description:`Print the value of an environment variable`,details:l`
|
|
9
|
+
Prints the value of a single variable. Secret variables are write-only
|
|
10
|
+
and cannot be read back — an error is returned if you try.
|
|
11
|
+
`,examples:[`ggt var get DATABASE_URL`,`ggt var get API_KEY --app myapp --env staging`],positionals:[{name:`key`,required:!0,description:`Variable name`,details:`Case-sensitive. Secret variables cannot be read back.`}],run:async(e,t)=>{let n=await y(e,t),i=t._[0],o=(await n.edit.query({query:r})).environmentVariables.find(e=>e.key===i);if(!o)throw new a(l`
|
|
12
|
+
Environment variable not found: ${i}
|
|
13
|
+
`,{usageHint:!1});if(o.isSecret)throw new a(l`
|
|
14
|
+
${i} is a secret and its value cannot be read
|
|
15
|
+
`,{usageHint:!1});d(o.value??``)}}),set:e({description:`Set one or more environment variables`,details:l`
|
|
16
|
+
Accepts one or more ${p.hint(`KEY=value`)} pairs. The value is everything after the
|
|
17
|
+
first ${p.hint(`=`)}, so values can contain additional ${p.hint(`=`)} characters. Use
|
|
18
|
+
${p.hint(`--secret`)} to mark the variables as write-only.
|
|
19
|
+
`,examples:[`ggt var set API_KEY=abc123`,`ggt var set SECRET=xyz --secret`,`ggt var set KEY1=a KEY2=b`,`ggt var set CONNECTION_STRING=postgres://user:pass@host/db`],positionals:[{name:`key=value`,required:!0,description:`One or more key=value pairs`,details:`The value is everything after the first =, so values can contain = characters. Multiple pairs can be passed in a single invocation.`}],flags:{"--secret":{type:Boolean,alias:`-s`,description:`Mark the variable as secret (write-only)`,details:`Secret variables are write-only — their values cannot be read back after being set. Use this for API keys, tokens, and other sensitive values.`}},run:async(e,n)=>{let r=await y(e,n),i=n._,s=n[`--secret`]??!1,c=[];for(let e of i){let t=e.indexOf(`=`);if(t===-1)throw new a(l`
|
|
20
|
+
Invalid format: ${e}
|
|
21
|
+
|
|
22
|
+
Expected format: KEY=value
|
|
23
|
+
`,{usageHint:!1});let n=e.slice(0,t);if(!n)throw new a(l`
|
|
24
|
+
Invalid format: ${e}
|
|
25
|
+
|
|
26
|
+
Expected format: KEY=value
|
|
27
|
+
`,{usageHint:!1});c.push({key:n,value:e.slice(t+1)})}for(let{key:e,value:t}of c)await r.edit.mutate({mutation:o,variables:{input:{key:e,value:t,isSecret:s}}});let u=c.map(e=>e.key).join(`, `);d(`${t.tick} Set ${u}`)}}),delete:e({description:`Delete one or more environment variables`,details:l`
|
|
28
|
+
Prompts for confirmation before deleting unless ${p.hint(`--force`)} is passed. Use
|
|
29
|
+
${p.hint(`--all`)} to delete every variable in the environment. With ${p.hint(`--force`)},
|
|
30
|
+
missing keys are silently ignored instead of causing an error.
|
|
31
|
+
`,examples:[`ggt var delete API_KEY`,`ggt var delete KEY1 KEY2`,`ggt var delete --all --force`],positionals:[{name:`key`,description:`Variable name(s) to delete`,details:`One or more keys separated by spaces. Use --all to delete every variable.`}],flags:{"--force":{type:Boolean,alias:`-f`,description:`Skip confirmation and suppress not-found errors`,details:`Skips the confirmation prompt and silently ignores keys that don't exist.`},"--all":{type:Boolean,description:`Delete all environment variables`,details:`Deletes every variable in the environment. Combine with --force to skip confirmation.`}},run:async(e,o)=>{let c=await y(e,o),l=o._,u=o[`--force`]??!1,f=o[`--all`]??!1,p;if(f){let e=(await c.edit.query({query:r})).environmentVariables;if(e.length===0){d(`No environment variables to delete.`);return}p=e.map(e=>e.key),u||(d`
|
|
32
|
+
The following environment variables will be deleted:
|
|
33
|
+
|
|
34
|
+
${p.map(e=>`• ${e}`).join(`
|
|
35
|
+
`)}
|
|
36
|
+
`,await i(`Are you sure you want to delete all environment variables?`))}else{if(l.length===0)throw new a(`Missing required argument: key`,{usageHint:!1});p=l,u||await i(`Are you sure you want to delete ${p.join(`, `)}?`)}let m=[];for(let e of p)try{await c.edit.mutate({mutation:s,variables:{key:e}}),m.push(e)}catch(e){let t=e instanceof n&&Array.isArray(e.cause)&&e.cause.every(e=>typeof e==`object`&&!!e&&`message`in e&&/not found/i.test(String(e.message)));if(u&&t)continue;throw e}m.length>0&&d(`${t.tick} Deleted ${m.join(`, `)}`)}}),import:e({description:`Import variables from another environment or file`,details:l`
|
|
37
|
+
Requires either ${p.hint(`--from`)} (another environment) or ${p.hint(`--from-file`)} (a
|
|
38
|
+
${p.hint(`.env`)} file) as the source. By default, variables are imported as
|
|
39
|
+
placeholders with empty values — pass ${p.hint(`--include-values`)} to copy the
|
|
40
|
+
actual values. Secret values cannot be copied between environments.
|
|
41
|
+
`,examples:[`ggt var import --from staging --all`,`ggt var import --from staging API_KEY DATABASE_URL`,`ggt var import --from staging --include-values API_KEY`,`ggt var import --from-file .env --all`],positionals:[{name:`key`,description:`Variable name(s) to import (or use --all)`,details:`One or more keys to import. Use --all to import every variable from the source.`}],flags:{"--from":{...c,alias:[],description:`Import from another environment`,details:`The name of the source environment to import from. Cannot be combined with --from-file.`},"--from-file":{type:String,description:`Import from a .env file`,valueName:`path`,details:`Path to a .env file. Supports KEY=value format, comments (#), and quoted values. Cannot be combined with --from.`},"--include-values":{type:Boolean,description:`Copy values when importing from another env`,details:`Without this flag, only the keys are imported as empty placeholders. Secret variable values cannot be copied between environments and are skipped.`},"--all":{type:Boolean,description:`Import all variables instead of specifying keys`,details:`Imports every variable from the source instead of requiring individual key names.`}},run:async(e,n)=>{let i=await y(e,n),s=n[`--from`],c=n[`--from-file`],u=n[`--include-values`]??!1,f=n[`--all`]??!1,p=n._;if(!s&&!c)throw new a(`Either --from or --from-file is required.`,{usageHint:!1});if(s&&c)throw new a(`Cannot use both --from and --from-file.`,{usageHint:!1});if(!f&&p.length===0)throw new a(`Specify keys to import or use --all to import all variables.`,{usageHint:!1});if(s){let n=i.application.environments.find(e=>e.name===s.toLowerCase());if(!n)throw new a(l`
|
|
42
|
+
Unknown environment: ${s}
|
|
43
|
+
|
|
44
|
+
Available environments:
|
|
45
|
+
${i.application.environments.map(e=>`• ${e.name}`).join(`
|
|
46
|
+
`)}
|
|
47
|
+
`,{usageHint:!1});let c=new _(e,{...n,application:i.application});try{let e=(await c.query({query:r})).environmentVariables;if(!f){let t=p.filter(t=>!e.some(e=>e.key===t));if(t.length>0)throw new a(l`
|
|
48
|
+
The following keys were not found in the ${s} environment:
|
|
49
|
+
|
|
50
|
+
${t.map(e=>`• ${e}`).join(`
|
|
51
|
+
`)}
|
|
52
|
+
`,{usageHint:!1});e=e.filter(e=>p.includes(e.key))}if(e.length===0){d(`No environment variables found in ${s}.`);return}let n=[],m=[];for(let t of e){if(u){if(t.isSecret){m.push(t.key);continue}await i.edit.mutate({mutation:o,variables:{input:{key:t.key,value:t.value??``,isSecret:t.isSecret}}})}else await i.edit.mutate({mutation:o,variables:{input:{key:t.key,value:``,isSecret:!1}}});n.push(t.key)}n.length>0&&d(`${t.tick} Imported ${n.join(`, `)} from ${s}`),m.length>0&&d(`Skipped secret variables (values not accessible): ${m.join(`, `)}`)}finally{await c.dispose()}}else if(c){let e=await v.default.readFile(c,`utf8`),n=[];for(let t of e.split(`
|
|
53
|
+
`)){let e=t.trim();if(!e||e.startsWith(`#`))continue;let r=e.startsWith(`export `)?e.slice(7):e,i=r.indexOf(`=`);if(i===-1)continue;let a=r.slice(0,i).trim(),o=r.slice(i+1).trim();(o.startsWith(`"`)&&o.endsWith(`"`)||o.startsWith(`'`)&&o.endsWith(`'`))&&(o=o.slice(1,-1)),a&&n.push({key:a,value:o})}if(n.length===0){d(`No environment variables found in file.`);return}let r;if(f)r=n;else{let e=p.filter(e=>!n.some(t=>t.key===e));if(e.length>0)throw new a(l`
|
|
54
|
+
The following keys were not found in the file:
|
|
55
|
+
|
|
56
|
+
${e.map(e=>`• ${e}`).join(`
|
|
57
|
+
`)}
|
|
58
|
+
`,{usageHint:!1});r=n.filter(e=>p.includes(e.key))}for(let{key:e,value:t}of r)await i.edit.mutate({mutation:o,variables:{input:{key:e,value:t,isSecret:!1}}});let s=r.map(e=>e.key).join(`, `);d(`${t.tick} Imported ${s} from ${c}`)}}})})});export{b as default};
|
|
59
|
+
//# sourceMappingURL=var-ByWcufFt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"var-ByWcufFt.js","names":["colors","fs"],"sources":["../src/commands/var.ts"],"sourcesContent":["import fs from \"fs-extra\";\n\nimport { EnvArg } from \"../services/app/app.ts\";\nimport { Edit } from \"../services/app/edit/edit.ts\";\nimport {\n DELETE_ENVIRONMENT_VARIABLE_MUTATION,\n ENVIRONMENT_VARIABLES_QUERY,\n SET_ENVIRONMENT_VARIABLE_MUTATION,\n} from \"../services/app/edit/operation.ts\";\nimport { ClientError } from \"../services/app/error.ts\";\nimport { AppIdentity, AppIdentityFlags, type AppIdentityFlagsResult } from \"../services/command/app-identity.ts\";\nimport { defineCommand } from \"../services/command/command.ts\";\nimport type { Context } from \"../services/command/context.ts\";\nimport { FlagError } from \"../services/command/flag.ts\";\nimport { loadSyncJsonDirectory } from \"../services/filesync/sync-json.ts\";\nimport colors from \"../services/output/colors.ts\";\nimport { confirm } from \"../services/output/confirm.ts\";\nimport { println } from \"../services/output/print.ts\";\nimport { sprint } from \"../services/output/sprint.ts\";\nimport { symbol } from \"../services/output/symbols.ts\";\n\nconst resolveAppIdentity = async (ctx: Context, flags: AppIdentityFlagsResult): Promise<AppIdentity> => {\n const directory = await loadSyncJsonDirectory(process.cwd());\n return AppIdentity.load(ctx, { command: \"var\", flags, directory });\n};\n\nexport default defineCommand({\n name: \"var\",\n description: \"Manage your app's environment variables\",\n details: sprint`\n Environment variables are available as ${colors.hint(\"process.env.YOUR_VAR\")} in your app code. Use them\n for configuration like API keys and settings that differ between environments. Secret\n variables are write-only — their values cannot be read back after being set.\n `,\n examples: [\n \"ggt var list\",\n \"ggt var get DATABASE_URL\",\n \"ggt var set API_KEY=abc123\",\n \"ggt var set SECRET=xyz --secret\",\n \"ggt var set CONNECTION_STRING=postgres://user:pass@host/db\",\n \"ggt var delete API_KEY\",\n \"ggt var delete --all --force\",\n \"ggt var import --from staging --all\",\n \"ggt var import --from-file .env --all\",\n ],\n flags: AppIdentityFlags,\n subcommands: (sub) => ({\n list: sub({\n description: \"List all environment variable keys\",\n details: sprint`\n Prints each variable key on its own line. Values are not shown — use\n ${colors.identifier(\"ggt var get\")} to read a specific value.\n `,\n examples: [\"ggt var list\", \"ggt var list --app myapp --env staging\"],\n run: async (ctx, flags) => {\n const appIdentity = await resolveAppIdentity(ctx, flags);\n\n const data = await appIdentity.edit.query({ query: ENVIRONMENT_VARIABLES_QUERY });\n const vars = data.environmentVariables;\n\n if (vars.length === 0) {\n println(\"No environment variables found.\");\n return;\n }\n\n for (const v of vars) {\n println(v.key);\n }\n },\n }),\n get: sub({\n description: \"Print the value of an environment variable\",\n details: sprint`\n Prints the value of a single variable. Secret variables are write-only\n and cannot be read back — an error is returned if you try.\n `,\n examples: [\"ggt var get DATABASE_URL\", \"ggt var get API_KEY --app myapp --env staging\"],\n positionals: [\n { name: \"key\", required: true, description: \"Variable name\", details: \"Case-sensitive. Secret variables cannot be read back.\" },\n ],\n run: async (ctx, flags) => {\n const appIdentity = await resolveAppIdentity(ctx, flags);\n // oxlint-disable-next-line no-non-null-assertion -- framework validates required positional\n const key = flags._[0]!;\n\n const data = await appIdentity.edit.query({ query: ENVIRONMENT_VARIABLES_QUERY });\n const envVar = data.environmentVariables.find((v) => v.key === key);\n\n if (!envVar) {\n throw new FlagError(\n sprint`\n Environment variable not found: ${key}\n `,\n { usageHint: false },\n );\n }\n\n if (envVar.isSecret) {\n throw new FlagError(\n sprint`\n ${key} is a secret and its value cannot be read\n `,\n { usageHint: false },\n );\n }\n\n println(envVar.value ?? \"\");\n },\n }),\n set: sub({\n description: \"Set one or more environment variables\",\n details: sprint`\n Accepts one or more ${colors.hint(\"KEY=value\")} pairs. The value is everything after the\n first ${colors.hint(\"=\")}, so values can contain additional ${colors.hint(\"=\")} characters. Use\n ${colors.hint(\"--secret\")} to mark the variables as write-only.\n `,\n examples: [\n \"ggt var set API_KEY=abc123\",\n \"ggt var set SECRET=xyz --secret\",\n \"ggt var set KEY1=a KEY2=b\",\n \"ggt var set CONNECTION_STRING=postgres://user:pass@host/db\",\n ],\n positionals: [\n {\n name: \"key=value\",\n required: true,\n description: \"One or more key=value pairs\",\n details:\n \"The value is everything after the first =, so values can contain = characters. Multiple pairs can be passed in a single invocation.\",\n },\n ],\n flags: {\n \"--secret\": {\n type: Boolean,\n alias: \"-s\",\n description: \"Mark the variable as secret (write-only)\",\n details:\n \"Secret variables are write-only — their values cannot be read back after being set. Use this for API keys, tokens, and other sensitive values.\",\n },\n },\n run: async (ctx, flags) => {\n const appIdentity = await resolveAppIdentity(ctx, flags);\n\n const pairs = flags._;\n const isSecret = flags[\"--secret\"] ?? false;\n\n const parsed: { key: string; value: string }[] = [];\n for (const pair of pairs) {\n const eqIndex = pair.indexOf(\"=\");\n if (eqIndex === -1) {\n throw new FlagError(\n sprint`\n Invalid format: ${pair}\n\n Expected format: KEY=value\n `,\n { usageHint: false },\n );\n }\n const key = pair.slice(0, eqIndex);\n if (!key) {\n throw new FlagError(\n sprint`\n Invalid format: ${pair}\n\n Expected format: KEY=value\n `,\n { usageHint: false },\n );\n }\n parsed.push({\n key,\n value: pair.slice(eqIndex + 1),\n });\n }\n\n for (const { key, value } of parsed) {\n await appIdentity.edit.mutate({\n mutation: SET_ENVIRONMENT_VARIABLE_MUTATION,\n variables: { input: { key, value, isSecret } },\n });\n }\n\n const keys = parsed.map((p) => p.key).join(\", \");\n println(`${symbol.tick} Set ${keys}`);\n },\n }),\n delete: sub({\n description: \"Delete one or more environment variables\",\n details: sprint`\n Prompts for confirmation before deleting unless ${colors.hint(\"--force\")} is passed. Use\n ${colors.hint(\"--all\")} to delete every variable in the environment. With ${colors.hint(\"--force\")},\n missing keys are silently ignored instead of causing an error.\n `,\n examples: [\"ggt var delete API_KEY\", \"ggt var delete KEY1 KEY2\", \"ggt var delete --all --force\"],\n positionals: [\n {\n name: \"key\",\n description: \"Variable name(s) to delete\",\n details: \"One or more keys separated by spaces. Use --all to delete every variable.\",\n },\n ],\n flags: {\n \"--force\": {\n type: Boolean,\n alias: \"-f\",\n description: \"Skip confirmation and suppress not-found errors\",\n details: \"Skips the confirmation prompt and silently ignores keys that don't exist.\",\n },\n \"--all\": {\n type: Boolean,\n description: \"Delete all environment variables\",\n details: \"Deletes every variable in the environment. Combine with --force to skip confirmation.\",\n },\n },\n run: async (ctx, flags) => {\n const appIdentity = await resolveAppIdentity(ctx, flags);\n\n const keys = flags._;\n const force = flags[\"--force\"] ?? false;\n const all = flags[\"--all\"] ?? false;\n\n let keysToDelete: string[];\n\n if (all) {\n const data = await appIdentity.edit.query({ query: ENVIRONMENT_VARIABLES_QUERY });\n const vars = data.environmentVariables;\n\n if (vars.length === 0) {\n println(\"No environment variables to delete.\");\n return;\n }\n\n keysToDelete = vars.map((v) => v.key);\n\n if (!force) {\n println`\n The following environment variables will be deleted:\n\n ${keysToDelete.map((k) => `• ${k}`).join(\"\\n\")}\n `;\n await confirm(\"Are you sure you want to delete all environment variables?\");\n }\n } else {\n if (keys.length === 0) {\n throw new FlagError(\"Missing required argument: key\", { usageHint: false });\n }\n\n keysToDelete = keys;\n\n if (!force) {\n await confirm(`Are you sure you want to delete ${keysToDelete.join(\", \")}?`);\n }\n }\n\n const deleted: string[] = [];\n for (const key of keysToDelete) {\n try {\n await appIdentity.edit.mutate({\n mutation: DELETE_ENVIRONMENT_VARIABLE_MUTATION,\n variables: { key },\n });\n deleted.push(key);\n } catch (error) {\n const isNotFound =\n error instanceof ClientError &&\n Array.isArray(error.cause) &&\n error.cause.every(\n (e: unknown) => typeof e === \"object\" && e !== null && \"message\" in e && /not found/i.test(String(e.message)),\n );\n\n if (force && isNotFound) {\n // suppress not-found errors when --force is used\n continue;\n }\n throw error;\n }\n }\n\n if (deleted.length > 0) {\n println(`${symbol.tick} Deleted ${deleted.join(\", \")}`);\n }\n },\n }),\n import: sub({\n description: \"Import variables from another environment or file\",\n details: sprint`\n Requires either ${colors.hint(\"--from\")} (another environment) or ${colors.hint(\"--from-file\")} (a\n ${colors.hint(\".env\")} file) as the source. By default, variables are imported as\n placeholders with empty values — pass ${colors.hint(\"--include-values\")} to copy the\n actual values. Secret values cannot be copied between environments.\n `,\n examples: [\n \"ggt var import --from staging --all\",\n \"ggt var import --from staging API_KEY DATABASE_URL\",\n \"ggt var import --from staging --include-values API_KEY\",\n \"ggt var import --from-file .env --all\",\n ],\n positionals: [\n {\n name: \"key\",\n description: \"Variable name(s) to import (or use --all)\",\n details: \"One or more keys to import. Use --all to import every variable from the source.\",\n },\n ],\n flags: {\n \"--from\": {\n ...EnvArg,\n alias: [],\n description: \"Import from another environment\",\n details: \"The name of the source environment to import from. Cannot be combined with --from-file.\",\n },\n \"--from-file\": {\n type: String,\n description: \"Import from a .env file\",\n valueName: \"path\",\n details: \"Path to a .env file. Supports KEY=value format, comments (#), and quoted values. Cannot be combined with --from.\",\n },\n \"--include-values\": {\n type: Boolean,\n description: \"Copy values when importing from another env\",\n details:\n \"Without this flag, only the keys are imported as empty placeholders. Secret variable values cannot be copied between environments and are skipped.\",\n },\n \"--all\": {\n type: Boolean,\n description: \"Import all variables instead of specifying keys\",\n details: \"Imports every variable from the source instead of requiring individual key names.\",\n },\n },\n run: async (ctx, flags) => {\n const appIdentity = await resolveAppIdentity(ctx, flags);\n\n const from = flags[\"--from\"];\n const fromFile = flags[\"--from-file\"];\n const includeValues = flags[\"--include-values\"] ?? false;\n const all = flags[\"--all\"] ?? false;\n const specifiedKeys = flags._;\n\n if (!from && !fromFile) {\n throw new FlagError(\"Either --from or --from-file is required.\", { usageHint: false });\n }\n\n if (from && fromFile) {\n throw new FlagError(\"Cannot use both --from and --from-file.\", { usageHint: false });\n }\n\n if (!all && specifiedKeys.length === 0) {\n throw new FlagError(\"Specify keys to import or use --all to import all variables.\", { usageHint: false });\n }\n\n if (from) {\n const sourceEnvironment = appIdentity.application.environments.find((env) => env.name === from.toLowerCase());\n if (!sourceEnvironment) {\n throw new FlagError(\n sprint`\n Unknown environment: ${from}\n\n Available environments:\n ${appIdentity.application.environments.map((e) => `• ${e.name}`).join(\"\\n\")}\n `,\n { usageHint: false },\n );\n }\n\n const sourceEdit = new Edit(ctx, { ...sourceEnvironment, application: appIdentity.application });\n\n try {\n const data = await sourceEdit.query({ query: ENVIRONMENT_VARIABLES_QUERY });\n let vars = data.environmentVariables;\n\n if (!all) {\n const missing = specifiedKeys.filter((k) => !vars.some((v) => v.key === k));\n if (missing.length > 0) {\n throw new FlagError(\n sprint`\n The following keys were not found in the ${from} environment:\n\n ${missing.map((k) => `• ${k}`).join(\"\\n\")}\n `,\n { usageHint: false },\n );\n }\n vars = vars.filter((v) => specifiedKeys.includes(v.key));\n }\n\n if (vars.length === 0) {\n println(`No environment variables found in ${from}.`);\n return;\n }\n\n const imported: string[] = [];\n const skipped: string[] = [];\n\n for (const v of vars) {\n if (includeValues) {\n if (v.isSecret) {\n // can't copy secret values (they come back as null)\n skipped.push(v.key);\n continue;\n }\n await appIdentity.edit.mutate({\n mutation: SET_ENVIRONMENT_VARIABLE_MUTATION,\n variables: { input: { key: v.key, value: v.value ?? \"\", isSecret: v.isSecret } },\n });\n } else {\n // import as placeholder (empty value, non-secret)\n await appIdentity.edit.mutate({\n mutation: SET_ENVIRONMENT_VARIABLE_MUTATION,\n variables: { input: { key: v.key, value: \"\", isSecret: false } },\n });\n }\n imported.push(v.key);\n }\n\n if (imported.length > 0) {\n println(`${symbol.tick} Imported ${imported.join(\", \")} from ${from}`);\n }\n\n if (skipped.length > 0) {\n println(`Skipped secret variables (values not accessible): ${skipped.join(\", \")}`);\n }\n } finally {\n await sourceEdit.dispose();\n }\n } else if (fromFile) {\n const content = await fs.readFile(fromFile, \"utf8\");\n const entries: { key: string; value: string }[] = [];\n\n for (const rawLine of content.split(\"\\n\")) {\n const line = rawLine.trim();\n\n // skip blank lines and comments\n if (!line || line.startsWith(\"#\")) {\n continue;\n }\n\n // strip optional \"export \" prefix\n const stripped = line.startsWith(\"export \") ? line.slice(7) : line;\n\n const eqIndex = stripped.indexOf(\"=\");\n if (eqIndex === -1) {\n continue;\n }\n\n const key = stripped.slice(0, eqIndex).trim();\n let value = stripped.slice(eqIndex + 1).trim();\n\n // strip surrounding quotes\n if ((value.startsWith('\"') && value.endsWith('\"')) || (value.startsWith(\"'\") && value.endsWith(\"'\"))) {\n value = value.slice(1, -1);\n }\n\n if (key) {\n entries.push({ key, value });\n }\n }\n\n if (entries.length === 0) {\n println(\"No environment variables found in file.\");\n return;\n }\n\n let filtered: { key: string; value: string }[];\n if (all) {\n filtered = entries;\n } else {\n const missing = specifiedKeys.filter((k) => !entries.some((e) => e.key === k));\n if (missing.length > 0) {\n throw new FlagError(\n sprint`\n The following keys were not found in the file:\n\n ${missing.map((k) => `• ${k}`).join(\"\\n\")}\n `,\n { usageHint: false },\n );\n }\n filtered = entries.filter((e) => specifiedKeys.includes(e.key));\n }\n\n for (const { key, value } of filtered) {\n await appIdentity.edit.mutate({\n mutation: SET_ENVIRONMENT_VARIABLE_MUTATION,\n variables: { input: { key, value, isSecret: false } },\n });\n }\n\n const keys = filtered.map((e) => e.key).join(\", \");\n println(`${symbol.tick} Imported ${keys} from ${fromFile}`);\n }\n },\n }),\n }),\n});\n"],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import{E as e,c as t,j as n,n as r,s as i}from"./command-2iNTc5dV.js";var a=r({name:`version`,description:`Print the currently installed version`,details:e`
|
|
2
|
+
Prints the currently installed version number. ggt checks for updates
|
|
3
|
+
automatically and prints a notice when a newer version is available.
|
|
4
|
+
`,sections:[{title:`Updating ggt`,content:e`
|
|
5
|
+
ggt notifies you when an update is available. To update, run
|
|
6
|
+
${i.identifier(`npm install -g ggt@latest`)}. To install an experimental build, run
|
|
7
|
+
${i.identifier(`npm install -g ggt@experimental`)}.
|
|
8
|
+
`}],examples:[`ggt version`],run:()=>{t(n.version)}});export{a as default};
|
|
9
|
+
//# sourceMappingURL=version-B_9GB4u3.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version-B_9GB4u3.js","names":["colors"],"sources":["../src/commands/version.ts"],"sourcesContent":["import { defineCommand } from \"../services/command/command.ts\";\nimport colors from \"../services/output/colors.ts\";\nimport { println } from \"../services/output/print.ts\";\nimport { sprint } from \"../services/output/sprint.ts\";\nimport { packageJson } from \"../services/util/package-json.ts\";\n\nexport default defineCommand({\n name: \"version\",\n description: \"Print the currently installed version\",\n details: sprint`\n Prints the currently installed version number. ggt checks for updates\n automatically and prints a notice when a newer version is available.\n `,\n sections: [\n {\n title: \"Updating ggt\",\n content: sprint`\n ggt notifies you when an update is available. To update, run\n ${colors.identifier(\"npm install -g ggt@latest\")}. To install an experimental build, run\n ${colors.identifier(\"npm install -g ggt@experimental\")}.\n `,\n },\n ],\n examples: [\"ggt version\"],\n run: (): void => {\n println(packageJson.version);\n },\n});\n"],"mappings":"sEAMA,IAAA,EAAe,EAAc,CAC3B,KAAM,UACN,YAAa,wCACb,QAAS,CAAM;;;IAIf,SAAU,CACR,CACE,MAAO,eACP,QAAS,CAAM;;UAEXA,EAAO,WAAW,4BAA4B,CAAC;UAC/CA,EAAO,WAAW,kCAAkC,CAAC;QAE1D,CACF,CACD,SAAU,CAAC,cAAc,CACzB,QAAiB,CACf,EAAQ,EAAY,QAAQ,EAE/B,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import"./ms-B7sMc0pR.js";import"./prompt-C9nwJW0G.js";import{m as e}from"./http-CY3lPMkt.js";import{E as t,c as n,n as r,s as i}from"./command-2iNTc5dV.js";import"./collection-C2TCeYqY.js";import"./directory-CNL03L6c.js";import"./session-BmzGF1t7.js";var a=r({name:`whoami`,description:`Show the current logged-in user`,details:t`
|
|
2
|
+
Prints the name and email of the currently authenticated user. If no session
|
|
3
|
+
is active, prints a not-logged-in message. Run ${i.hint(`ggt login`)} to authenticate.
|
|
4
|
+
`,examples:[`ggt whoami`],run:async t=>{let r=await e(t);if(!r){n(`You are not logged in`);return}r.name?n(`You are logged in as ${r.name} (${r.email})`):n(`You are logged in as ${r.email}`)}});export{a as default};
|
|
5
|
+
//# sourceMappingURL=whoami-BNcXIfz7.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"whoami-BNcXIfz7.js","names":["colors"],"sources":["../src/commands/whoami.ts"],"sourcesContent":["import { defineCommand } from \"../services/command/command.ts\";\nimport colors from \"../services/output/colors.ts\";\nimport { println } from \"../services/output/print.ts\";\nimport { sprint } from \"../services/output/sprint.ts\";\nimport { getUser } from \"../services/user/user.ts\";\n\nexport default defineCommand({\n name: \"whoami\",\n description: \"Show the current logged-in user\",\n details: sprint`\n Prints the name and email of the currently authenticated user. If no session\n is active, prints a not-logged-in message. Run ${colors.hint(\"ggt login\")} to authenticate.\n `,\n examples: [\"ggt whoami\"],\n run: async (ctx) => {\n const user = await getUser(ctx);\n if (!user) {\n println(\"You are not logged in\");\n return;\n }\n\n if (user.name) {\n println(`You are logged in as ${user.name} (${user.email})`);\n } else {\n println(`You are logged in as ${user.email}`);\n }\n },\n});\n"],"mappings":"2PAMA,IAAA,EAAe,EAAc,CAC3B,KAAM,SACN,YAAa,kCACb,QAAS,CAAM;;qDAEoCA,EAAO,KAAK,YAAY,CAAC;IAE5E,SAAU,CAAC,aAAa,CACxB,IAAK,KAAO,IAAQ,CAClB,IAAM,EAAO,MAAM,EAAQ,EAAI,CAC/B,GAAI,CAAC,EAAM,CACT,EAAQ,wBAAwB,CAChC,OAGE,EAAK,KACP,EAAQ,wBAAwB,EAAK,KAAK,IAAI,EAAK,MAAM,GAAG,CAE5D,EAAQ,wBAAwB,EAAK,QAAQ,EAGlD,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gadgetinc/ggt",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "3.0.0",
|
|
4
4
|
"description": "The command-line interface for Gadget",
|
|
5
5
|
"homepage": "https://github.com/gadget-inc/ggt",
|
|
6
6
|
"bugs": {
|
|
@@ -32,12 +32,11 @@
|
|
|
32
32
|
"@graphql-codegen/cli": "^6.0.1",
|
|
33
33
|
"@graphql-codegen/typescript": "^5.0.2",
|
|
34
34
|
"@graphql-codegen/typescript-operations": "^5.0.6",
|
|
35
|
-
"@sentry/node": "^10.
|
|
35
|
+
"@sentry/node": "^10.44.0",
|
|
36
36
|
"@types/fast-levenshtein": "^0.0.4",
|
|
37
37
|
"@types/fs-extra": "^11.0.4",
|
|
38
38
|
"@types/ms": "^2.1.0",
|
|
39
39
|
"@types/node": "^20.19.32",
|
|
40
|
-
"@types/node-notifier": "^8.0.5",
|
|
41
40
|
"@types/normalize-package-data": "^2.4.4",
|
|
42
41
|
"@types/normalize-path": "^3.0.2",
|
|
43
42
|
"@types/pluralize": "^0.0.33",
|
|
@@ -46,27 +45,26 @@
|
|
|
46
45
|
"@types/tcp-port-used": "^1.0.0",
|
|
47
46
|
"@types/which": "^3.0.4",
|
|
48
47
|
"@types/ws": "^8.18.1",
|
|
48
|
+
"@vitest/coverage-v8": "^4.0.18",
|
|
49
49
|
"ansi-escapes": "^7.2.0",
|
|
50
50
|
"arg": "^5.0.2",
|
|
51
51
|
"boxen": "^8.0.1",
|
|
52
52
|
"chalk": "^5.6.2",
|
|
53
|
-
"chalk-template": "^1.1.2",
|
|
54
53
|
"clean-stack": "^6.0.0",
|
|
55
54
|
"cli-cursor": "^5.0.0",
|
|
56
55
|
"cli-spinners": "^3.4.0",
|
|
57
56
|
"cli-table3": "^0.6.5",
|
|
58
57
|
"cspell": "^9.6.4",
|
|
59
|
-
"dayjs": "^1.11.
|
|
60
|
-
"esbuild": "^0.27.3",
|
|
58
|
+
"dayjs": "^1.11.20",
|
|
61
59
|
"execa": "^9.6.0",
|
|
62
60
|
"fast-levenshtein": "^3.0.0",
|
|
63
61
|
"fast-querystring": "^1.1.2",
|
|
64
62
|
"figures": "^6.1.0",
|
|
65
63
|
"find-up": "^8.0.0",
|
|
66
|
-
"fs-extra": "^11.3.
|
|
64
|
+
"fs-extra": "^11.3.4",
|
|
67
65
|
"get-port": "^7.1.0",
|
|
68
66
|
"got": "^14.6.6",
|
|
69
|
-
"graphql": "^16.
|
|
67
|
+
"graphql": "^16.13.1",
|
|
70
68
|
"graphql-ws": "^6.0.7",
|
|
71
69
|
"ignore": "^7.0.5",
|
|
72
70
|
"indent-string": "^5.0.0",
|
|
@@ -76,14 +74,12 @@
|
|
|
76
74
|
"mimic-function": "^5.0.1",
|
|
77
75
|
"ms": "^2.1.3",
|
|
78
76
|
"nock": "^14.0.11",
|
|
79
|
-
"node-notifier": "^10.0.1",
|
|
80
77
|
"normalize-package-data": "^8.0.0",
|
|
81
78
|
"normalize-path": "^3.0.0",
|
|
82
|
-
"npm-run-all": "^4.1.5",
|
|
83
79
|
"open": "^11.0.0",
|
|
84
|
-
"oxfmt": "^0.
|
|
85
|
-
"oxlint": "^1.
|
|
86
|
-
"oxlint-tsgolint": "^0.
|
|
80
|
+
"oxfmt": "^0.41.0",
|
|
81
|
+
"oxlint": "^1.53.0",
|
|
82
|
+
"oxlint-tsgolint": "^0.16.0",
|
|
87
83
|
"p-map": "^7.0.3",
|
|
88
84
|
"p-queue": "^9.0.0",
|
|
89
85
|
"p-retry": "^7.1.0",
|
|
@@ -92,17 +88,18 @@
|
|
|
92
88
|
"remark": "^15.0.1",
|
|
93
89
|
"remark-gfm": "^4.0.1",
|
|
94
90
|
"remark-toc": "^9.0.0",
|
|
95
|
-
"rimraf": "^6.1.
|
|
91
|
+
"rimraf": "^6.1.3",
|
|
92
|
+
"rolldown": "1.0.0-rc.10",
|
|
96
93
|
"semver": "^7.7.3",
|
|
97
94
|
"serialize-error": "^13.0.1",
|
|
98
95
|
"set-cookie-parser": "^3.0.1",
|
|
99
|
-
"simple-git": "^3.32.
|
|
96
|
+
"simple-git": "^3.32.3",
|
|
100
97
|
"string-width": "^8.2.0",
|
|
101
98
|
"strip-ansi": "^7.1.2",
|
|
99
|
+
"strip-json-comments": "^5.0.3",
|
|
102
100
|
"tcp-port-used": "^1.0.2",
|
|
103
101
|
"terminal-link": "^5.0.0",
|
|
104
102
|
"ts-dedent": "^2.2.0",
|
|
105
|
-
"ts-node": "^10.9.2",
|
|
106
103
|
"type-fest": "^5.4.3",
|
|
107
104
|
"typescript": "^5.9.3",
|
|
108
105
|
"vitest": "^4.0.15",
|
|
@@ -112,24 +109,23 @@
|
|
|
112
109
|
"zod": "^4.3.6"
|
|
113
110
|
},
|
|
114
111
|
"engines": {
|
|
115
|
-
"node": ">=
|
|
112
|
+
"node": ">=22.0.0"
|
|
116
113
|
},
|
|
117
114
|
"scripts": {
|
|
118
|
-
"build": "pnpm run clean &&
|
|
119
|
-
"build:watch": "pnpm run
|
|
115
|
+
"build": "pnpm run clean && rolldown -c rolldown.config.ts && chmod +x dist/main.js",
|
|
116
|
+
"build:watch": "pnpm run clean && rolldown -c rolldown.config.ts -w",
|
|
120
117
|
"changeset": "changeset",
|
|
121
118
|
"clean": "rimraf dist tmp/spec",
|
|
122
|
-
"dev": "run-p -s 'test:watch --no-clear-screen' 'build:watch'",
|
|
123
119
|
"generate:graphql": "graphql-codegen --config=graphql-codegen.yml",
|
|
124
120
|
"lint": "pnpm run --aggregate-output '/^lint:(?!fix).*/'",
|
|
125
121
|
"lint:cspell": "cspell . --no-progress --show-suggestions --show-context",
|
|
126
|
-
"lint:fix": "oxfmt && oxlint --
|
|
122
|
+
"lint:fix": "oxfmt && oxlint --fix --disable-nested-config",
|
|
127
123
|
"lint:oxfmt": "oxfmt --check",
|
|
128
|
-
"lint:oxlint": "oxlint --
|
|
124
|
+
"lint:oxlint": "oxlint --deny-warnings --disable-nested-config",
|
|
129
125
|
"release": "pnpm run build && changeset publish",
|
|
130
126
|
"test": "vitest",
|
|
131
127
|
"test:integration": "vitest --config spec/integration/vitest.integration.config.ts",
|
|
132
128
|
"test:watch": "pnpm run test --standalone --watch",
|
|
133
|
-
"version": "changeset version && oxfmt CHANGELOG.md && node
|
|
129
|
+
"version": "changeset version && oxfmt CHANGELOG.md && node scripts/generate-readme.ts"
|
|
134
130
|
}
|
|
135
131
|
}
|
|
Binary file
|
package/dist/add-TWLGKL2T.js
DELETED
|
@@ -1,82 +0,0 @@
|
|
|
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
|
-
`).join(`
|
|
3
|
-
\u200E \u2022 `)).join(`
|
|
4
|
-
`)}`}else i=d`${o.cause}`;super(i)}render(){return`${m.redBright(w.cross)} Failed to add:
|
|
5
|
-
`+this.message}},ue={...D},G=g(()=>d`
|
|
6
|
-
Adds models, fields, actions and routes to your app.
|
|
7
|
-
|
|
8
|
-
This command first performs a sync to ensure that your local and environment directories match, changes are tracked since last sync.
|
|
9
|
-
If any conflicts are detected, they must be resolved before adding models, fields, actions or routes.
|
|
10
|
-
|
|
11
|
-
{gray Usage}
|
|
12
|
-
ggt add model <model_name> [field_name:field_type ...]
|
|
13
|
-
|
|
14
|
-
ggt add action [CONTEXT]/<action_name>
|
|
15
|
-
CONTEXT:Specifies the kind of action. Use "model" for model actions otherwise use "action".
|
|
16
|
-
|
|
17
|
-
ggt add route <HTTP_METHOD> <route_path>
|
|
18
|
-
|
|
19
|
-
ggt add field <model_path>/<field_name>:<field_type>
|
|
20
|
-
|
|
21
|
-
{gray Options}
|
|
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.
|
|
24
|
-
|
|
25
|
-
{gray Examples}
|
|
26
|
-
Add a new model 'post' with out fields:
|
|
27
|
-
{cyanBright $ ggt add model modelA}
|
|
28
|
-
|
|
29
|
-
Add a new model 'post' with 2 new 'string' type fields 'title' and 'body':
|
|
30
|
-
{cyanBright $ ggt add model post title:string body:string}
|
|
31
|
-
|
|
32
|
-
Add a new 'boolean' type field 'published' to an existing model
|
|
33
|
-
{cyanBright ggt add field post/published:boolean}
|
|
34
|
-
|
|
35
|
-
Add new action 'publish' to the 'post' model:
|
|
36
|
-
{cyanBright ggt add action model/post/publish}
|
|
37
|
-
|
|
38
|
-
Add a new action 'audit'
|
|
39
|
-
{cyanBright ggt add action action/audit}
|
|
40
|
-
|
|
41
|
-
Add a new route 'howdy'
|
|
42
|
-
{cyanBright ggt add route GET howdy}
|
|
43
|
-
|
|
44
|
-
Clone the \`development\` environment into a new \`staging\` environment
|
|
45
|
-
{cyanBright ggt add environment staging --environment development}
|
|
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
|
|
47
|
-
|
|
48
|
-
{gray Usage}
|
|
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`
|
|
50
|
-
Failed to add model:
|
|
51
|
-
• ${u.join(`
|
|
52
|
-
\u2022 `)}
|
|
53
|
-
|
|
54
|
-
{gray Usage}
|
|
55
|
-
{cyanBright ggt add model ${e} [field_name:field_type ...]}`);r.push(...c)}let n;try{n=(await a.edit.mutate({mutation:O,variables:{path:e,fields:r.map(c=>({name:c.name,fieldType:c.fieldType}))}})).createModel}catch(c){throw c instanceof y?new h(c):c}p({ensureEmptyLineAbove:!0,content:m.gray("New model created in environment.")}),await i.writeToLocalFilesystem(t,{filesVersion:n.remoteFilesVersion,files:n.changed,delete:[]});let s=T.isSupported?T(e,`https://${a.environment.application.primaryDomain}/edit/${a.environment.name}/model/${e}/schema`):e;p({ensureEmptyLineAbove:!0,content:`${m.greenBright(w.tick)} Model ${m.cyanBright(s)} added successfully.`})},"modelSubCommand"),X=g(async(t,{args:o,filesync:i})=>{let a=i.syncJson,e=o._[1];if(!e)throw new f(d`Failed to add action, missing action path
|
|
56
|
-
|
|
57
|
-
{gray Usage}
|
|
58
|
-
{cyanBright ggt add action [CONTEXT]/<action_name>
|
|
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`
|
|
60
|
-
{bold Namespace Conflict:} The action '${A}.js' cannot be automatically added due to a namespace conflict.
|
|
61
|
-
|
|
62
|
-
How would you like to proceed?:
|
|
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
|
|
64
|
-
|
|
65
|
-
{gray Usage}
|
|
66
|
-
{cyanBright ggt add route <HTTP_METHOD> <route_path>}`);if(!r)throw new f(d`Failed to add route, missing route path
|
|
67
|
-
|
|
68
|
-
{gray Usage}
|
|
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
|
|
70
|
-
|
|
71
|
-
{gray Usage}
|
|
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`
|
|
73
|
-
Failed to add field:
|
|
74
|
-
• ${s.join(`
|
|
75
|
-
\u2022`)}
|
|
76
|
-
|
|
77
|
-
{gray Usage}
|
|
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
|
|
79
|
-
|
|
80
|
-
{gray Usage}
|
|
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
|
package/dist/add-TWLGKL2T.js.map
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
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
|
-
}
|
|
@@ -1,10 +0,0 @@
|
|
|
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
|
|
@@ -1,7 +0,0 @@
|
|
|
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
|
-
}
|
package/dist/chunk-2742UPMB.js
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
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
|
|
@@ -1,7 +0,0 @@
|
|
|
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
|
-
}
|
package/dist/chunk-3OM5WM7E.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
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
|