@gadgetinc/ggt 1.7.0 → 1.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/dist/{add-623ZJFNZ.js → add-M2YVCVDJ.js} +2 -2
  2. package/dist/{add-623ZJFNZ.js.map → add-M2YVCVDJ.js.map} +1 -1
  3. package/dist/{chunk-RV4YYWDE.js → chunk-2WKENYA3.js} +2 -2
  4. package/dist/{chunk-RV4YYWDE.js.map → chunk-2WKENYA3.js.map} +1 -1
  5. package/dist/{chunk-5AMZWMRB.js → chunk-DP2MEKPK.js} +2 -2
  6. package/dist/{chunk-T3XUROKS.js → chunk-GC4CQ6BI.js} +2 -2
  7. package/dist/chunk-TPWSJOGX.js +66 -0
  8. package/dist/chunk-TPWSJOGX.js.map +7 -0
  9. package/dist/{chunk-7VB3L2XK.js → chunk-UAZBF6WU.js} +4 -4
  10. package/dist/{chunk-7VB3L2XK.js.map → chunk-UAZBF6WU.js.map} +1 -1
  11. package/dist/{deploy-4AVZFDZ4.js → deploy-QX2ELPOA.js} +2 -2
  12. package/dist/{deploy-4AVZFDZ4.js.map → deploy-QX2ELPOA.js.map} +1 -1
  13. package/dist/{dev-RHG4RVQG.js → dev-ODLZZUI4.js} +2 -2
  14. package/dist/{dev-RHG4RVQG.js.map → dev-ODLZZUI4.js.map} +1 -1
  15. package/dist/list-E3DN5VVW.js +11 -0
  16. package/dist/{list-YXCTVLRH.js.map → list-E3DN5VVW.js.map} +1 -1
  17. package/dist/login-LXGUUTW3.js +2 -0
  18. package/dist/{logs-DMHPRDXZ.js → logs-VGDAULNT.js} +2 -2
  19. package/dist/{logs-DMHPRDXZ.js.map → logs-VGDAULNT.js.map} +1 -1
  20. package/dist/main.js +1 -1
  21. package/dist/{open-CYXBST4H.js → open-LBVP7DXX.js} +2 -2
  22. package/dist/{open-CYXBST4H.js.map → open-LBVP7DXX.js.map} +1 -1
  23. package/dist/{pull-57RYWYNZ.js → pull-I3WM4RL3.js} +2 -2
  24. package/dist/{pull-57RYWYNZ.js.map → pull-I3WM4RL3.js.map} +1 -1
  25. package/dist/push-GE55G6KR.js +2 -0
  26. package/dist/{status-C3VTFX7J.js → status-2PKSATWL.js} +2 -2
  27. package/dist/{status-C3VTFX7J.js.map → status-2PKSATWL.js.map} +1 -1
  28. package/dist/whoami-LEZVATND.js +7 -0
  29. package/dist/{whoami-AA3ISE77.js.map → whoami-LEZVATND.js.map} +1 -1
  30. package/package.json +3 -1
  31. package/dist/chunk-FILWLZUN.js +0 -18
  32. package/dist/chunk-FILWLZUN.js.map +0 -7
  33. package/dist/chunk-GCO2TOVZ.js +0 -50
  34. package/dist/chunk-GCO2TOVZ.js.map +0 -7
  35. package/dist/list-YXCTVLRH.js +0 -11
  36. package/dist/login-XIEASAMY.js +0 -2
  37. package/dist/push-464T6F4H.js +0 -2
  38. package/dist/whoami-AA3ISE77.js +0 -7
  39. /package/dist/{chunk-5AMZWMRB.js.map → chunk-DP2MEKPK.js.map} +0 -0
  40. /package/dist/{chunk-T3XUROKS.js.map → chunk-GC4CQ6BI.js.map} +0 -0
  41. /package/dist/{login-XIEASAMY.js.map → login-LXGUUTW3.js.map} +0 -0
  42. /package/dist/{push-464T6F4H.js.map → push-GE55G6KR.js.map} +0 -0
@@ -0,0 +1,11 @@
1
+ import{b as g}from"./chunk-JSGXXXFU.js";import{A as f,w as u,z as c}from"./chunk-TPWSJOGX.js";import"./chunk-DYAWQS24.js";import"./chunk-XGQQOMPO.js";import"./chunk-KMNQ3LJT.js";import{ca as m,ha as i,ia as l,ja as o}from"./chunk-24OT7GHO.js";import"./chunk-GFQYFEEH.js";import{a,h as p}from"./chunk-7DYQUG5M.js";p();var U=a(()=>i`
2
+ List the apps available to the currently logged-in user.
3
+
4
+ {bold Usage}
5
+ ggt list
6
+ `,"usage"),j=a(async s=>{await u(s,"list");let e=await c(s);if(e.length===0){o`
7
+ It doesn't look like you have any applications.
8
+
9
+ Visit https://gadget.new to create one!
10
+ `;return}if(m.isInteractive)for(let[r,t]of f(e))o(i`{grey ${r}}`),g({json:t,headers:["Name","Domain"],rows:t.map(n=>[n.slug,n.primaryDomain])}),o("");else{let r="";for(let t of e)r+=l`${t.slug}\t${t.primaryDomain}`;o({json:e,content:r})}},"run");export{j as run,U as usage};
11
+ //# sourceMappingURL=list-E3DN5VVW.js.map
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/commands/list.ts"],
4
4
  "sourcesContent": ["import { getApplications, groupByTeam } from \"../services/app/app.js\";\nimport type { Run, Usage } from \"../services/command/command.js\";\nimport { output } from \"../services/output/output.js\";\nimport { println } from \"../services/output/print.js\";\nimport { sprint, sprintln } from \"../services/output/sprint.js\";\nimport { printTable } from \"../services/output/table.js\";\nimport { getUserOrLogin } from \"../services/user/user.js\";\n\nexport const usage: Usage = () => sprint`\n List the apps available to the currently logged-in user.\n\n {bold Usage}\n ggt list\n`;\n\nexport const run: Run = async (ctx) => {\n await getUserOrLogin(ctx, \"list\");\n\n const availableApps = await getApplications(ctx);\n if (availableApps.length === 0) {\n println`\n It doesn't look like you have any applications.\n\n Visit https://gadget.new to create one!\n `;\n return;\n }\n\n if (output.isInteractive) {\n for (const [teamName, apps] of groupByTeam(availableApps)) {\n println(sprint`{grey ${teamName}}`);\n printTable({\n json: apps,\n headers: [\"Name\", \"Domain\"],\n rows: apps.map((app) => [app.slug, app.primaryDomain]),\n });\n println(\"\");\n }\n } else {\n let simpleOutput = \"\";\n for (const app of availableApps) {\n simpleOutput += sprintln`${app.slug}\\t${app.primaryDomain}`;\n }\n\n println({ json: availableApps, content: simpleOutput });\n }\n};\n"],
5
- "mappings": "0VAAAA,IAQO,IAAMC,EAAeC,EAAA,IAAMC;AAAA;AAAA;AAAA;AAAA;AAAA,EAAN,SAOfC,EAAWF,EAAA,MAAOG,GAAQ,CACrC,MAAMC,EAAeD,EAAK,MAAM,EAEhC,IAAME,EAAgB,MAAMC,EAAgBH,CAAG,EAC/C,GAAIE,EAAc,SAAW,EAAG,CAC9BE;AAAA;AAAA;AAAA;AAAA,MAKA,MACF,CAEA,GAAIC,EAAO,cACT,OAAW,CAACC,EAAUC,CAAI,IAAKC,EAAYN,CAAa,EACtDE,EAAQN,UAAeQ,CAAQ,GAAG,EAClCG,EAAW,CACT,KAAMF,EACN,QAAS,CAAC,OAAQ,QAAQ,EAC1B,KAAMA,EAAK,IAAKG,GAAQ,CAACA,EAAI,KAAMA,EAAI,aAAa,CAAC,CACvD,CAAC,EACDN,EAAQ,EAAE,MAEP,CACL,IAAIO,EAAe,GACnB,QAAWD,KAAOR,EAChBS,GAAgBC,IAAWF,EAAI,IAAI,KAAKA,EAAI,aAAa,GAG3DN,EAAQ,CAAE,KAAMF,EAAe,QAASS,CAAa,CAAC,CACxD,CACF,EA/BwB",
5
+ "mappings": "yTAAAA,IAQO,IAAMC,EAAeC,EAAA,IAAMC;AAAA;AAAA;AAAA;AAAA;AAAA,EAAN,SAOfC,EAAWF,EAAA,MAAOG,GAAQ,CACrC,MAAMC,EAAeD,EAAK,MAAM,EAEhC,IAAME,EAAgB,MAAMC,EAAgBH,CAAG,EAC/C,GAAIE,EAAc,SAAW,EAAG,CAC9BE;AAAA;AAAA;AAAA;AAAA,MAKA,MACF,CAEA,GAAIC,EAAO,cACT,OAAW,CAACC,EAAUC,CAAI,IAAKC,EAAYN,CAAa,EACtDE,EAAQN,UAAeQ,CAAQ,GAAG,EAClCG,EAAW,CACT,KAAMF,EACN,QAAS,CAAC,OAAQ,QAAQ,EAC1B,KAAMA,EAAK,IAAKG,GAAQ,CAACA,EAAI,KAAMA,EAAI,aAAa,CAAC,CACvD,CAAC,EACDN,EAAQ,EAAE,MAEP,CACL,IAAIO,EAAe,GACnB,QAAWD,KAAOR,EAChBS,GAAgBC,IAAWF,EAAI,IAAI,KAAKA,EAAI,aAAa,GAG3DN,EAAQ,CAAE,KAAMF,EAAe,QAASS,CAAa,CAAC,CACxD,CACF,EA/BwB",
6
6
  "names": ["init_cjs", "usage", "__name", "sprint", "run", "ctx", "getUserOrLogin", "availableApps", "getApplications", "println", "output", "teamName", "apps", "groupByTeam", "printTable", "app", "simpleOutput", "sprintln"]
7
7
  }
@@ -0,0 +1,2 @@
1
+ import{r as a,s as b,t as c}from"./chunk-TPWSJOGX.js";import"./chunk-DYAWQS24.js";import"./chunk-XGQQOMPO.js";import"./chunk-KMNQ3LJT.js";import"./chunk-24OT7GHO.js";import"./chunk-GFQYFEEH.js";import"./chunk-7DYQUG5M.js";export{c as login,b as run,a as usage};
2
+ //# sourceMappingURL=login-LXGUUTW3.js.map
@@ -1,4 +1,4 @@
1
- import{p as m}from"./chunk-RV4YYWDE.js";import{l as a,m as l,n as p}from"./chunk-7VB3L2XK.js";import"./chunk-JSGXXXFU.js";import"./chunk-WNAYBYSG.js";import{c as g}from"./chunk-T3XUROKS.js";import"./chunk-JBY5A44K.js";import"./chunk-HN3YKQ3C.js";import"./chunk-FILWLZUN.js";import{A as i}from"./chunk-GCO2TOVZ.js";import"./chunk-DYAWQS24.js";import"./chunk-XGQQOMPO.js";import"./chunk-KMNQ3LJT.js";import{ha as r}from"./chunk-24OT7GHO.js";import"./chunk-GFQYFEEH.js";import{a as n,h as s}from"./chunk-7DYQUG5M.js";s();var b={...a,...i},w=n(o=>r`
1
+ import{p as m}from"./chunk-2WKENYA3.js";import{l as a,m as l,n as p}from"./chunk-UAZBF6WU.js";import"./chunk-JSGXXXFU.js";import"./chunk-WNAYBYSG.js";import{c as g}from"./chunk-GC4CQ6BI.js";import"./chunk-JBY5A44K.js";import"./chunk-HN3YKQ3C.js";import{E as i}from"./chunk-TPWSJOGX.js";import"./chunk-DYAWQS24.js";import"./chunk-XGQQOMPO.js";import"./chunk-KMNQ3LJT.js";import{ha as r}from"./chunk-24OT7GHO.js";import"./chunk-GFQYFEEH.js";import{a as n,h as s}from"./chunk-7DYQUG5M.js";s();var b={...a,...i},w=n(o=>r`
2
2
  Streams the logs for an application to.
3
3
 
4
4
  {gray Usage}
@@ -25,4 +25,4 @@ import{p as m}from"./chunk-RV4YYWDE.js";import{l as a,m as l,n as p}from"./chunk
25
25
 
26
26
  Run "ggt logs -h" for more information.
27
27
  `);let c=await p(process.cwd()),u=await l.loadOrInit(o,{command:"pull",args:t,directory:c}),f=new m(u).subscribeToEnvironmentLogs(t,{onError:n(e=>{o.abort(e)},"onError")});o.onAbort(e=>{o.log.info("stopping",{reason:e}),f.unsubscribe()})},"run");export{b as args,D as run,w as usage};
28
- //# sourceMappingURL=logs-DMHPRDXZ.js.map
28
+ //# sourceMappingURL=logs-VGDAULNT.js.map
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/commands/logs.ts"],
4
4
  "sourcesContent": ["import { ArgError, type ArgsDefinition, type ArgsDefinitionResult } from \"../services/command/arg.js\";\nimport type { Run, Usage } from \"../services/command/command.js\";\nimport { FileSync } from \"../services/filesync/filesync.js\";\nimport { SyncJson, SyncJsonArgs, loadSyncJsonDirectory } from \"../services/filesync/sync-json.js\";\nimport { LoggingArgs } from \"../services/output/log/structured.js\";\nimport { sprint } from \"../services/output/sprint.js\";\n\nexport type LogsArgs = typeof args;\nexport type LogsArgsResult = ArgsDefinitionResult<LogsArgs>;\n\nexport const args = {\n ...SyncJsonArgs,\n ...LoggingArgs,\n} satisfies ArgsDefinition;\n\nexport const usage: Usage = (_ctx) => {\n return sprint`\n Streams the logs for an application to.\n\n {gray Usage}\n ggt logs [options]\n\n {gray Options}\n -ll, --log-level <level> Sets the log level for incoming application logs (default: info)\n --my-logs Only outputs user sourced logs and exclude logs from the Gadget framework\n --json Output logs in JSON format\n -a, --app <app_name> Selects the app to pull your environment changes from. Default set on \".gadget/sync.json\"\n -e, --env, --from <env_name> Selects the environment to pull changes from. Default set on \".gadget/sync.json\"\n\n {gray Examples}\n Stream all user logs from your development environment\n {cyanBright $ ggt logs --env development --my-logs}\n\n Stream all logs from your production environment in JSON format\n {cyanBright $ ggt logs --env production --json}\n `;\n};\n\nexport const run: Run<LogsArgs> = async (ctx, args) => {\n if (args._.length > 0) {\n throw new ArgError(sprint`\n \"ggt logs\" does not take any positional arguments.\n\n If you are trying to print logs for an app in specific directory,\n you must \"cd\" to that directory and then run \"ggt logs\".\n\n Run \"ggt logs -h\" for more information.\n `);\n }\n\n const directory = await loadSyncJsonDirectory(process.cwd());\n const syncJson = await SyncJson.loadOrInit(ctx, { command: \"pull\", args, directory });\n const filesync = new FileSync(syncJson);\n\n const logsSubscription = filesync.subscribeToEnvironmentLogs(args, {\n onError: (error) => {\n ctx.abort(error);\n },\n });\n\n ctx.onAbort((reason) => {\n ctx.log.info(\"stopping\", { reason });\n logsSubscription.unsubscribe();\n });\n};\n"],
5
- "mappings": "kgBAAAA,IAUO,IAAMC,EAAO,CAClB,GAAGC,EACH,GAAGC,CACL,EAEaC,EAAeC,EAACC,GACpBC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IADmB,SAuBfC,EAAqBH,EAAA,MAAOI,EAAKR,IAAS,CACrD,GAAIA,EAAK,EAAE,OAAS,EAClB,MAAM,IAAIS,EAASH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAOlB,EAGH,IAAMI,EAAY,MAAMC,EAAsB,QAAQ,IAAI,CAAC,EACrDC,EAAW,MAAMC,EAAS,WAAWL,EAAK,CAAE,QAAS,OAAQ,KAAAR,EAAM,UAAAU,CAAU,CAAC,EAG9EI,EAFW,IAAIC,EAASH,CAAQ,EAEJ,2BAA2BZ,EAAM,CACjE,QAASI,EAACY,GAAU,CAClBR,EAAI,MAAMQ,CAAK,CACjB,EAFS,UAGX,CAAC,EAEDR,EAAI,QAASS,GAAW,CACtBT,EAAI,IAAI,KAAK,WAAY,CAAE,OAAAS,CAAO,CAAC,EACnCH,EAAiB,YAAY,CAC/B,CAAC,CACH,EA1BkC",
5
+ "mappings": "seAAAA,IAUO,IAAMC,EAAO,CAClB,GAAGC,EACH,GAAGC,CACL,EAEaC,EAAeC,EAACC,GACpBC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IADmB,SAuBfC,EAAqBH,EAAA,MAAOI,EAAKR,IAAS,CACrD,GAAIA,EAAK,EAAE,OAAS,EAClB,MAAM,IAAIS,EAASH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAOlB,EAGH,IAAMI,EAAY,MAAMC,EAAsB,QAAQ,IAAI,CAAC,EACrDC,EAAW,MAAMC,EAAS,WAAWL,EAAK,CAAE,QAAS,OAAQ,KAAAR,EAAM,UAAAU,CAAU,CAAC,EAG9EI,EAFW,IAAIC,EAASH,CAAQ,EAEJ,2BAA2BZ,EAAM,CACjE,QAASI,EAACY,GAAU,CAClBR,EAAI,MAAMQ,CAAK,CACjB,EAFS,UAGX,CAAC,EAEDR,EAAI,QAASS,GAAW,CACtBT,EAAI,IAAI,KAAK,WAAY,CAAE,OAAAS,CAAO,CAAC,EACnCH,EAAiB,YAAY,CAC/B,CAAC,CACH,EA1BkC",
6
6
  "names": ["init_cjs", "args", "SyncJsonArgs", "LoggingArgs", "usage", "__name", "_ctx", "sprint", "run", "ctx", "ArgError", "directory", "loadSyncJsonDirectory", "syncJson", "SyncJson", "logsSubscription", "FileSync", "error", "reason"]
7
7
  }
package/dist/main.js CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import{b as J}from"./chunk-ILB6CSBN.js";import{a as z}from"./chunk-QXWICGG6.js";import{a as T,b as E}from"./chunk-WNAYBYSG.js";import{a as V,b as f,d as j,e as D,f as P}from"./chunk-T3XUROKS.js";import"./chunk-JBY5A44K.js";import{D as C,E as R,d as u,e as x,j as H,n as A}from"./chunk-GCO2TOVZ.js";import"./chunk-DYAWQS24.js";import"./chunk-XGQQOMPO.js";import"./chunk-KMNQ3LJT.js";import{A as K,K as a,Y as N,Z as d,b as S,ca as y,e as c,ea as w,f as O,ha as g,ja as p}from"./chunk-24OT7GHO.js";import{a as b}from"./chunk-GFQYFEEH.js";import{a as i,f as m,h as n}from"./chunk-7DYQUG5M.js";n();n();var L=m(b(),1);n();var B=m(V(),1);n();var G=m(H(),1),h=m(K(),1),v=m(b(),1),M=m(z(),1);import q from"node:assert";import I from"node:path";var Q=(0,v.default)("12 hours"),Y=c.object({name:c.literal("ggt"),"dist-tags":c.object({latest:c.string(),experimental:c.string()})}),W=i(async o=>{let t=await R({context:{ctx:o},method:"GET",url:"https://registry.npmjs.org/ggt",responseType:"json",resolveBodyOnly:!0,timeout:{request:(0,v.default)("5s")}});return Y.parse(t)["dist-tags"]},"getDistTags"),X=i(async o=>{try{let t=Number(await h.default.readFile(I.join(d.cacheDir,"last-update-check"),"utf8"));return q(!Number.isNaN(t)),(0,G.default)().isAfter(t+Q)}catch(t){return o.log.trace("failed to check for updates",{error:t}),!0}},"shouldCheckForUpdate"),k=i(async o=>{try{if(!await X(o))return;await h.default.outputFile(I.join(d.cacheDir,"last-update-check"),String(Date.now()));let r=await W(o),e,s,l;a.version.includes("experimental")?(e=r.experimental,s=a.version!==e,l=g`
2
+ import{b as J}from"./chunk-ILB6CSBN.js";import{a as z}from"./chunk-QXWICGG6.js";import{a as T,b as E}from"./chunk-WNAYBYSG.js";import{a as V,b as f,d as j,e as D,f as P}from"./chunk-GC4CQ6BI.js";import"./chunk-JBY5A44K.js";import{H as C,I as R,c as u,d as x,i as H,m as A}from"./chunk-TPWSJOGX.js";import"./chunk-DYAWQS24.js";import"./chunk-XGQQOMPO.js";import"./chunk-KMNQ3LJT.js";import{A as K,K as a,Y as N,Z as d,b as S,ca as y,e as c,ea as w,f as O,ha as g,ja as p}from"./chunk-24OT7GHO.js";import{a as b}from"./chunk-GFQYFEEH.js";import{a as i,f as m,h as n}from"./chunk-7DYQUG5M.js";n();n();var L=m(b(),1);n();var B=m(V(),1);n();var G=m(H(),1),h=m(K(),1),v=m(b(),1),M=m(z(),1);import q from"node:assert";import I from"node:path";var Q=(0,v.default)("12 hours"),Y=c.object({name:c.literal("ggt"),"dist-tags":c.object({latest:c.string(),experimental:c.string()})}),W=i(async o=>{let t=await R({context:{ctx:o},method:"GET",url:"https://registry.npmjs.org/ggt",responseType:"json",resolveBodyOnly:!0,timeout:{request:(0,v.default)("5s")}});return Y.parse(t)["dist-tags"]},"getDistTags"),X=i(async o=>{try{let t=Number(await h.default.readFile(I.join(d.cacheDir,"last-update-check"),"utf8"));return q(!Number.isNaN(t)),(0,G.default)().isAfter(t+Q)}catch(t){return o.log.trace("failed to check for updates",{error:t}),!0}},"shouldCheckForUpdate"),k=i(async o=>{try{if(!await X(o))return;await h.default.outputFile(I.join(d.cacheDir,"last-update-check"),String(Date.now()));let r=await W(o),e,s,l;a.version.includes("experimental")?(e=r.experimental,s=a.version!==e,l=g`
3
3
  Update available! {red ${a.version}} → {green ${e}}
4
4
  Run "npm install -g ${a.name}@experimental" to update.
5
5
  `):(e=r.latest,s=M.default.lt(a.version,e),l=g`
@@ -1,4 +1,4 @@
1
- import{g as w,l as $,m as O,n as B}from"./chunk-7VB3L2XK.js";import{c as p}from"./chunk-T3XUROKS.js";import{a as u}from"./chunk-JBY5A44K.js";import"./chunk-HN3YKQ3C.js";import{b as r}from"./chunk-FILWLZUN.js";import{n as d,x as v}from"./chunk-GCO2TOVZ.js";import"./chunk-DYAWQS24.js";import"./chunk-XGQQOMPO.js";import"./chunk-KMNQ3LJT.js";import{ha as i,ja as s,o as f}from"./chunk-24OT7GHO.js";import"./chunk-GFQYFEEH.js";import{a as g,h as y}from"./chunk-7DYQUG5M.js";y();var J={...$,"--show-all":{type:Boolean}},j=g(m=>i`
1
+ import{g as w,l as $,m as O,n as B}from"./chunk-UAZBF6WU.js";import{c as p}from"./chunk-GC4CQ6BI.js";import{a as u}from"./chunk-JBY5A44K.js";import"./chunk-HN3YKQ3C.js";import{B as v,m as d,q as r}from"./chunk-TPWSJOGX.js";import"./chunk-DYAWQS24.js";import"./chunk-XGQQOMPO.js";import"./chunk-KMNQ3LJT.js";import{ha as i,ja as s,o as f}from"./chunk-24OT7GHO.js";import"./chunk-GFQYFEEH.js";import{a as g,h as y}from"./chunk-7DYQUG5M.js";y();var J={...$,"--show-all":{type:Boolean}},j=g(m=>i`
2
2
  This command opens a specific Gadget page in your browser, allowing you to directly access
3
3
  various parts of your application's interface such as logs, permissions, data views, or
4
4
  schemas.
@@ -71,4 +71,4 @@ import{g as w,l as $,m as O,n as B}from"./chunk-7VB3L2XK.js";import{c as p}from"
71
71
  `)}await r(`https://${e.environment.application.primaryDomain}/edit/${e.environment.name}/model/${n}/${o}`),s`
72
72
  Opened ${o} viewer for environment {cyanBright ${e.environment.name}} for model {cyanBright ${n}}.
73
73
  `;break}default:f(a)}},"run"),b=["logs","permissions","data","schema"];export{J as args,E as run,j as usage};
74
- //# sourceMappingURL=open-CYXBST4H.js.map
74
+ //# sourceMappingURL=open-LBVP7DXX.js.map
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/commands/open.ts"],
4
4
  "sourcesContent": ["import open from \"open\";\nimport { getModels } from \"../services/app/app.js\";\nimport { ArgError } from \"../services/command/arg.js\";\nimport type { Run, Usage } from \"../services/command/command.js\";\nimport { UnknownDirectoryError } from \"../services/filesync/error.js\";\nimport { SyncJson, SyncJsonArgs, loadSyncJsonDirectory } from \"../services/filesync/sync-json.js\";\nimport { println } from \"../services/output/print.js\";\nimport { select } from \"../services/output/select.js\";\nimport { sprint } from \"../services/output/sprint.js\";\nimport { sortBySimilar } from \"../services/util/collection.js\";\nimport { isNever } from \"../services/util/is.js\";\n\nexport type OpenArgs = typeof args;\n\nexport const args = {\n ...SyncJsonArgs,\n \"--show-all\": { type: Boolean },\n};\n\nexport const usage: Usage = (_ctx) => {\n return sprint`\n This command opens a specific Gadget page in your browser, allowing you to directly access\n various parts of your application's interface such as logs, permissions, data views, or\n schemas.\n\n {gray Usage}\n ggt open [LOCATION] [model_name] [--show-all] [options]\n\n LOCATION: specifies the part of Gadget to open, by default it'll open the apps home page:\n\n + logs Opens logs\n + permissions Opens permissions\n + data Opens data editor for a specific model\n + schema Opens schema editor for a specific model\n\n {gray Options}\n -a, --app <app_name> Selects the application to open in your browser. Default set on \".gadget/sync.json\"\n -e, --env <env_name> Selects the environment to open in your browser. Default set on \".gadget/sync.json\"\n --show-all Shows all schema, or data options by listing your available models\n\n {gray Examples}\n Opens editor home\n {cyanBright $ ggt open}\n\n Opens logs\n {cyanBright $ ggt open logs}\n\n Opens permissions\n {cyanBright $ ggt open permissions}\n\n Opens data editor for the 'post' model\n {cyanBright $ ggt open data post}\n\n Opens schema for 'post' model\n {cyanBright $ ggt open schema post}\n\n Shows all models available in the data editor\n {cyanBright $ ggt open data -show-all}\n\n Shows all models available in the schema viewer\n {cyanBright $ ggt open schema --show-all}\n\n Opens data editor for 'post' model of app 'myBlog' in the 'staging' environment\n {cyanBright $ ggt open data post --app myBlog --env staging}\n `;\n};\n\nexport const run: Run<OpenArgs> = async (ctx, args) => {\n const directory = await loadSyncJsonDirectory(process.cwd());\n const syncJson = await SyncJson.load(ctx, { command: \"open\", args, directory });\n if (!syncJson) {\n throw new UnknownDirectoryError({ command: \"open\", args, directory });\n }\n\n const location = args._[0] as Location | undefined;\n if (!location) {\n await open(`https://${syncJson.environment.application.primaryDomain}/edit/${syncJson.environment.name}`);\n println`\n Opened editor for environment {cyanBright ${syncJson.environment.name}}.\n `;\n return;\n }\n\n if (!Locations.includes(location)) {\n const [closest] = sortBySimilar(location, Locations);\n throw new ArgError(sprint`\n Unknown location {yellow ${location}}\n\n Did you mean {blueBright ${closest}}?\n\n Run \"ggt open --help\" for usage\n `);\n }\n\n switch (location) {\n case \"logs\": {\n await open(`https://${syncJson.environment.application.primaryDomain}/edit/${syncJson.environment.name}/logs`);\n println`\n Opened log viewer for environment {cyanBright ${syncJson.environment.name}}.\n `;\n break;\n }\n case \"permissions\": {\n await open(`https://${syncJson.environment.application.primaryDomain}/edit/${syncJson.environment.name}/settings/permissions`);\n println`\n Opened permissions settings for environment {cyanBright ${syncJson.environment.name}}.\n `;\n break;\n }\n case \"data\":\n case \"schema\": {\n const view = args._[0];\n const remoteModelApiIdentifiers = (await getModels(ctx, syncJson.environment)).map((e) => e.apiIdentifier);\n\n let modelApiIdentifier = args._[1];\n if (!modelApiIdentifier) {\n if (args[\"--show-all\"]) {\n modelApiIdentifier = await select({ choices: remoteModelApiIdentifiers, content: \"Which model do you wish to open?\" });\n } else {\n throw new ArgError(sprint`\n \"ggt open ${view}\" requires a model to be specified.\n\n Run with \"--show-all\" to choose from available models.\n\n ggt open ${view} --show-all\n `);\n }\n }\n\n if (!remoteModelApiIdentifiers.includes(modelApiIdentifier)) {\n const [closest] = sortBySimilar(modelApiIdentifier, remoteModelApiIdentifiers);\n throw new ArgError(sprint`\n Unknown model {yellow ${modelApiIdentifier}}\n\n Did you mean {blueBright ${closest}}?\n\n Run with \"--show-all\" to choose from available models.\n\n ggt open ${view} --show-all\n `);\n }\n\n await open(\n `https://${syncJson.environment.application.primaryDomain}/edit/${syncJson.environment.name}/model/${modelApiIdentifier}/${view}`,\n );\n println`\n Opened ${view} viewer for environment {cyanBright ${syncJson.environment.name}} for model {cyanBright ${modelApiIdentifier}}.\n `;\n break;\n }\n default:\n isNever(location);\n }\n};\n\nconst Locations = [\"logs\", \"permissions\", \"data\", \"schema\"] as const;\n\ntype Location = (typeof Locations)[number];\n"],
5
- "mappings": "udAAAA,IAcO,IAAMC,EAAO,CAClB,GAAGC,EACH,aAAc,CAAE,KAAM,OAAQ,CAChC,EAEaC,EAAeC,EAACC,GACpBC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IADmB,SAgDfC,EAAqBH,EAAA,MAAOI,EAAKP,IAAS,CACrD,IAAMQ,EAAY,MAAMC,EAAsB,QAAQ,IAAI,CAAC,EACrDC,EAAW,MAAMC,EAAS,KAAKJ,EAAK,CAAE,QAAS,OAAQ,KAAAP,EAAM,UAAAQ,CAAU,CAAC,EAC9E,GAAI,CAACE,EACH,MAAM,IAAIE,EAAsB,CAAE,QAAS,OAAQ,KAAAZ,EAAM,UAAAQ,CAAU,CAAC,EAGtE,IAAMK,EAAWb,EAAK,EAAE,CAAC,EACzB,GAAI,CAACa,EAAU,CACb,MAAMC,EAAK,WAAWJ,EAAS,YAAY,YAAY,aAAa,SAASA,EAAS,YAAY,IAAI,EAAE,EACxGK;AAAA,kDAC8CL,EAAS,YAAY,IAAI;AAAA,MAEvE,MACF,CAEA,GAAI,CAACM,EAAU,SAASH,CAAQ,EAAG,CACjC,GAAM,CAACI,CAAO,EAAIC,EAAcL,EAAUG,CAAS,EACnD,MAAM,IAAIG,EAASd;AAAA,iCACUQ,CAAQ;AAAA;AAAA,iCAERI,CAAO;AAAA;AAAA;AAAA,KAGnC,CACH,CAEA,OAAQJ,EAAU,CAChB,IAAK,OAAQ,CACX,MAAMC,EAAK,WAAWJ,EAAS,YAAY,YAAY,aAAa,SAASA,EAAS,YAAY,IAAI,OAAO,EAC7GK;AAAA,wDACkDL,EAAS,YAAY,IAAI;AAAA,QAE3E,KACF,CACA,IAAK,cAAe,CAClB,MAAMI,EAAK,WAAWJ,EAAS,YAAY,YAAY,aAAa,SAASA,EAAS,YAAY,IAAI,uBAAuB,EAC7HK;AAAA,kEAC4DL,EAAS,YAAY,IAAI;AAAA,QAErF,KACF,CACA,IAAK,OACL,IAAK,SAAU,CACb,IAAMU,EAAOpB,EAAK,EAAE,CAAC,EACfqB,GAA6B,MAAMC,EAAUf,EAAKG,EAAS,WAAW,GAAG,IAAKa,GAAMA,EAAE,aAAa,EAErGC,EAAqBxB,EAAK,EAAE,CAAC,EACjC,GAAI,CAACwB,EACH,GAAIxB,EAAK,YAAY,EACnBwB,EAAqB,MAAMC,EAAO,CAAE,QAASJ,EAA2B,QAAS,kCAAmC,CAAC,MAErH,OAAM,IAAIF,EAASd;AAAA,wBACLe,CAAI;AAAA;AAAA;AAAA;AAAA,yBAIHA,CAAI;AAAA,WAClB,EAIL,GAAI,CAACC,EAA0B,SAASG,CAAkB,EAAG,CAC3D,GAAM,CAACP,CAAO,EAAIC,EAAcM,EAAoBH,CAAyB,EAC7E,MAAM,IAAIF,EAASd;AAAA,kCACOmB,CAAkB;AAAA;AAAA,qCAEfP,CAAO;AAAA;AAAA;AAAA;AAAA,uBAIrBG,CAAI;AAAA,SAClB,CACH,CAEA,MAAMN,EACJ,WAAWJ,EAAS,YAAY,YAAY,aAAa,SAASA,EAAS,YAAY,IAAI,UAAUc,CAAkB,IAAIJ,CAAI,EACjI,EACAL;AAAA,iBACWK,CAAI,uCAAuCV,EAAS,YAAY,IAAI,2BAA2Bc,CAAkB;AAAA,QAE5H,KACF,CACA,QACEE,EAAQb,CAAQ,CACpB,CACF,EAtFkC,OAwF5BG,EAAY,CAAC,OAAQ,cAAe,OAAQ,QAAQ",
5
+ "mappings": "sbAAAA,IAcO,IAAMC,EAAO,CAClB,GAAGC,EACH,aAAc,CAAE,KAAM,OAAQ,CAChC,EAEaC,EAAeC,EAACC,GACpBC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IADmB,SAgDfC,EAAqBH,EAAA,MAAOI,EAAKP,IAAS,CACrD,IAAMQ,EAAY,MAAMC,EAAsB,QAAQ,IAAI,CAAC,EACrDC,EAAW,MAAMC,EAAS,KAAKJ,EAAK,CAAE,QAAS,OAAQ,KAAAP,EAAM,UAAAQ,CAAU,CAAC,EAC9E,GAAI,CAACE,EACH,MAAM,IAAIE,EAAsB,CAAE,QAAS,OAAQ,KAAAZ,EAAM,UAAAQ,CAAU,CAAC,EAGtE,IAAMK,EAAWb,EAAK,EAAE,CAAC,EACzB,GAAI,CAACa,EAAU,CACb,MAAMC,EAAK,WAAWJ,EAAS,YAAY,YAAY,aAAa,SAASA,EAAS,YAAY,IAAI,EAAE,EACxGK;AAAA,kDAC8CL,EAAS,YAAY,IAAI;AAAA,MAEvE,MACF,CAEA,GAAI,CAACM,EAAU,SAASH,CAAQ,EAAG,CACjC,GAAM,CAACI,CAAO,EAAIC,EAAcL,EAAUG,CAAS,EACnD,MAAM,IAAIG,EAASd;AAAA,iCACUQ,CAAQ;AAAA;AAAA,iCAERI,CAAO;AAAA;AAAA;AAAA,KAGnC,CACH,CAEA,OAAQJ,EAAU,CAChB,IAAK,OAAQ,CACX,MAAMC,EAAK,WAAWJ,EAAS,YAAY,YAAY,aAAa,SAASA,EAAS,YAAY,IAAI,OAAO,EAC7GK;AAAA,wDACkDL,EAAS,YAAY,IAAI;AAAA,QAE3E,KACF,CACA,IAAK,cAAe,CAClB,MAAMI,EAAK,WAAWJ,EAAS,YAAY,YAAY,aAAa,SAASA,EAAS,YAAY,IAAI,uBAAuB,EAC7HK;AAAA,kEAC4DL,EAAS,YAAY,IAAI;AAAA,QAErF,KACF,CACA,IAAK,OACL,IAAK,SAAU,CACb,IAAMU,EAAOpB,EAAK,EAAE,CAAC,EACfqB,GAA6B,MAAMC,EAAUf,EAAKG,EAAS,WAAW,GAAG,IAAKa,GAAMA,EAAE,aAAa,EAErGC,EAAqBxB,EAAK,EAAE,CAAC,EACjC,GAAI,CAACwB,EACH,GAAIxB,EAAK,YAAY,EACnBwB,EAAqB,MAAMC,EAAO,CAAE,QAASJ,EAA2B,QAAS,kCAAmC,CAAC,MAErH,OAAM,IAAIF,EAASd;AAAA,wBACLe,CAAI;AAAA;AAAA;AAAA;AAAA,yBAIHA,CAAI;AAAA,WAClB,EAIL,GAAI,CAACC,EAA0B,SAASG,CAAkB,EAAG,CAC3D,GAAM,CAACP,CAAO,EAAIC,EAAcM,EAAoBH,CAAyB,EAC7E,MAAM,IAAIF,EAASd;AAAA,kCACOmB,CAAkB;AAAA;AAAA,qCAEfP,CAAO;AAAA;AAAA;AAAA;AAAA,uBAIrBG,CAAI;AAAA,SAClB,CACH,CAEA,MAAMN,EACJ,WAAWJ,EAAS,YAAY,YAAY,aAAa,SAASA,EAAS,YAAY,IAAI,UAAUc,CAAkB,IAAIJ,CAAI,EACjI,EACAL;AAAA,iBACWK,CAAI,uCAAuCV,EAAS,YAAY,IAAI,2BAA2Bc,CAAkB;AAAA,QAE5H,KACF,CACA,QACEE,EAAQb,CAAQ,CACpB,CACF,EAtFkC,OAwF5BG,EAAY,CAAC,OAAQ,cAAe,OAAQ,QAAQ",
6
6
  "names": ["init_cjs", "args", "SyncJsonArgs", "usage", "__name", "_ctx", "sprint", "run", "ctx", "directory", "loadSyncJsonDirectory", "syncJson", "SyncJson", "UnknownDirectoryError", "location", "open_default", "println", "Locations", "closest", "sortBySimilar", "ArgError", "view", "remoteModelApiIdentifiers", "getModels", "e", "modelApiIdentifier", "select", "isNever"]
7
7
  }
@@ -1,4 +1,4 @@
1
- import{p as m}from"./chunk-RV4YYWDE.js";import{l as c,m as p,n as g}from"./chunk-7VB3L2XK.js";import"./chunk-JSGXXXFU.js";import"./chunk-WNAYBYSG.js";import{c as l}from"./chunk-T3XUROKS.js";import"./chunk-JBY5A44K.js";import"./chunk-HN3YKQ3C.js";import"./chunk-FILWLZUN.js";import"./chunk-GCO2TOVZ.js";import"./chunk-DYAWQS24.js";import"./chunk-XGQQOMPO.js";import"./chunk-KMNQ3LJT.js";import{ha as s,ja as i}from"./chunk-24OT7GHO.js";import"./chunk-GFQYFEEH.js";import{a as r,h as a}from"./chunk-7DYQUG5M.js";a();var P={...c,"--env":{type:String,alias:["-e","--environment","--from"]},"--force":{type:Boolean,alias:"-f"}},A=r(e=>s`
1
+ import{p as m}from"./chunk-2WKENYA3.js";import{l as c,m as p,n as g}from"./chunk-UAZBF6WU.js";import"./chunk-JSGXXXFU.js";import"./chunk-WNAYBYSG.js";import{c as l}from"./chunk-GC4CQ6BI.js";import"./chunk-JBY5A44K.js";import"./chunk-HN3YKQ3C.js";import"./chunk-TPWSJOGX.js";import"./chunk-DYAWQS24.js";import"./chunk-XGQQOMPO.js";import"./chunk-KMNQ3LJT.js";import{ha as s,ja as i}from"./chunk-24OT7GHO.js";import"./chunk-GFQYFEEH.js";import{a as r,h as a}from"./chunk-7DYQUG5M.js";a();var P={...c,"--env":{type:String,alias:["-e","--environment","--from"]},"--force":{type:Boolean,alias:"-f"}},A=r(e=>s`
2
2
  Pulls your environment files to your local directory.
3
3
 
4
4
  This command first tracks changes in your local directory since the last sync. If changes are
@@ -25,4 +25,4 @@ import{p as m}from"./chunk-RV4YYWDE.js";import{l as c,m as p,n as g}from"./chunk
25
25
 
26
26
  Run "ggt pull -h" for more information.
27
27
  `);let y=await g(process.cwd()),f=await p.loadOrInit(e,{command:"pull",args:o,directory:y}),t=new m(f),n=await t.hashes(e);if(n.environmentChangesToPull.size===0){i({ensureEmptyLineAbove:!0,content:"Nothing to pull."});return}n.localChangesToPush.size>0&&await t.print(e,{hashes:n}),await t.pull(e,{hashes:n,force:o["--force"]})},"run");export{P as args,S as run,A as usage};
28
- //# sourceMappingURL=pull-57RYWYNZ.js.map
28
+ //# sourceMappingURL=pull-I3WM4RL3.js.map
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/commands/pull.ts"],
4
4
  "sourcesContent": ["import { ArgError, type ArgsDefinition } from \"../services/command/arg.js\";\nimport type { Run, Usage } from \"../services/command/command.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 { sprint } from \"../services/output/sprint.js\";\n\nexport type PullArgs = typeof args;\n\nexport const args = {\n ...SyncJsonArgs,\n \"--env\": { type: String, alias: [\"-e\", \"--environment\", \"--from\"] },\n \"--force\": { type: Boolean, alias: \"-f\" },\n} satisfies ArgsDefinition;\n\nexport const usage: Usage = (_ctx) => {\n return sprint`\n Pulls your environment files to your local directory.\n\n This command first tracks changes in your local directory since the last sync. If changes are\n detected, you will be prompted to discard them or abort the pull.\n\n {gray Usage}\n ggt pull [options]\n\n {gray Options}\n -a, --app <app_name> Selects the app to pull your environment changes from. Default set on \".gadget/sync.json\"\n -e, --env, --from <env_name> Selects the environment to pull changes from. Default set on \".gadget/sync.json\"\n --force Forces a pull by discarding any changes made on your local directory since last sync\n --allow-different-directory Pulls changes from any environment directory, even if the \".gadget/sync.json\" file is missing\n --allow-different-app Pulls changes to a different app using --app command, instead of the one in the \u201C.gadget/sync.json\u201D file\n\n {gray Examples}\n Pull all development environment changes by discarding any changes made locally\n {cyanBright $ ggt pull --env development --force}\n `;\n};\n\nexport const run: Run<PullArgs> = async (ctx, args) => {\n if (args._.length > 0) {\n throw new ArgError(sprint`\n \"ggt pull\" does not take any positional arguments.\n\n If you are trying to pull changes to a specific directory,\n you must \"cd\" to that directory and then run \"ggt pull\".\n\n Run \"ggt pull -h\" for more information.\n `);\n }\n\n const directory = await loadSyncJsonDirectory(process.cwd());\n const syncJson = await SyncJson.loadOrInit(ctx, { command: \"pull\", args, directory });\n const filesync = new FileSync(syncJson);\n const hashes = await filesync.hashes(ctx);\n\n if (hashes.environmentChangesToPull.size === 0) {\n println({ ensureEmptyLineAbove: true, content: \"Nothing to pull.\" });\n return;\n }\n\n if (hashes.localChangesToPush.size > 0) {\n // show them the local changes they will discard\n await filesync.print(ctx, { hashes });\n }\n\n await filesync.pull(ctx, { hashes, force: args[\"--force\"] });\n};\n"],
5
- "mappings": "8fAAAA,IASO,IAAMC,EAAO,CAClB,GAAGC,EACH,QAAS,CAAE,KAAM,OAAQ,MAAO,CAAC,KAAM,gBAAiB,QAAQ,CAAE,EAClE,UAAW,CAAE,KAAM,QAAS,MAAO,IAAK,CAC1C,EAEaC,EAAeC,EAACC,GACpBC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IADmB,SAuBfC,EAAqBH,EAAA,MAAOI,EAAKP,IAAS,CACrD,GAAIA,EAAK,EAAE,OAAS,EAClB,MAAM,IAAIQ,EAASH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAOlB,EAGH,IAAMI,EAAY,MAAMC,EAAsB,QAAQ,IAAI,CAAC,EACrDC,EAAW,MAAMC,EAAS,WAAWL,EAAK,CAAE,QAAS,OAAQ,KAAAP,EAAM,UAAAS,CAAU,CAAC,EAC9EI,EAAW,IAAIC,EAASH,CAAQ,EAChCI,EAAS,MAAMF,EAAS,OAAON,CAAG,EAExC,GAAIQ,EAAO,yBAAyB,OAAS,EAAG,CAC9CC,EAAQ,CAAE,qBAAsB,GAAM,QAAS,kBAAmB,CAAC,EACnE,MACF,CAEID,EAAO,mBAAmB,KAAO,GAEnC,MAAMF,EAAS,MAAMN,EAAK,CAAE,OAAAQ,CAAO,CAAC,EAGtC,MAAMF,EAAS,KAAKN,EAAK,CAAE,OAAAQ,EAAQ,MAAOf,EAAK,SAAS,CAAE,CAAC,CAC7D,EA5BkC",
5
+ "mappings": "keAAAA,IASO,IAAMC,EAAO,CAClB,GAAGC,EACH,QAAS,CAAE,KAAM,OAAQ,MAAO,CAAC,KAAM,gBAAiB,QAAQ,CAAE,EAClE,UAAW,CAAE,KAAM,QAAS,MAAO,IAAK,CAC1C,EAEaC,EAAeC,EAACC,GACpBC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IADmB,SAuBfC,EAAqBH,EAAA,MAAOI,EAAKP,IAAS,CACrD,GAAIA,EAAK,EAAE,OAAS,EAClB,MAAM,IAAIQ,EAASH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAOlB,EAGH,IAAMI,EAAY,MAAMC,EAAsB,QAAQ,IAAI,CAAC,EACrDC,EAAW,MAAMC,EAAS,WAAWL,EAAK,CAAE,QAAS,OAAQ,KAAAP,EAAM,UAAAS,CAAU,CAAC,EAC9EI,EAAW,IAAIC,EAASH,CAAQ,EAChCI,EAAS,MAAMF,EAAS,OAAON,CAAG,EAExC,GAAIQ,EAAO,yBAAyB,OAAS,EAAG,CAC9CC,EAAQ,CAAE,qBAAsB,GAAM,QAAS,kBAAmB,CAAC,EACnE,MACF,CAEID,EAAO,mBAAmB,KAAO,GAEnC,MAAMF,EAAS,MAAMN,EAAK,CAAE,OAAAQ,CAAO,CAAC,EAGtC,MAAMF,EAAS,KAAKN,EAAK,CAAE,OAAAQ,EAAQ,MAAOf,EAAK,SAAS,CAAE,CAAC,CAC7D,EA5BkC",
6
6
  "names": ["init_cjs", "args", "SyncJsonArgs", "usage", "__name", "_ctx", "sprint", "run", "ctx", "ArgError", "directory", "loadSyncJsonDirectory", "syncJson", "SyncJson", "filesync", "FileSync", "hashes", "println"]
7
7
  }
@@ -0,0 +1,2 @@
1
+ import{a,b,c}from"./chunk-DP2MEKPK.js";import"./chunk-2WKENYA3.js";import"./chunk-UAZBF6WU.js";import"./chunk-JSGXXXFU.js";import"./chunk-WNAYBYSG.js";import"./chunk-GC4CQ6BI.js";import"./chunk-JBY5A44K.js";import"./chunk-HN3YKQ3C.js";import"./chunk-TPWSJOGX.js";import"./chunk-DYAWQS24.js";import"./chunk-XGQQOMPO.js";import"./chunk-KMNQ3LJT.js";import"./chunk-24OT7GHO.js";import"./chunk-GFQYFEEH.js";import"./chunk-7DYQUG5M.js";export{a as args,c as run,b as usage};
2
+ //# sourceMappingURL=push-GE55G6KR.js.map
@@ -1,4 +1,4 @@
1
- import{l as p,m as f,p as h}from"./chunk-RV4YYWDE.js";import{g as u,l as y,m as l,n as d}from"./chunk-7VB3L2XK.js";import"./chunk-JSGXXXFU.js";import"./chunk-WNAYBYSG.js";import{c as m}from"./chunk-T3XUROKS.js";import"./chunk-JBY5A44K.js";import"./chunk-HN3YKQ3C.js";import"./chunk-FILWLZUN.js";import"./chunk-GCO2TOVZ.js";import"./chunk-DYAWQS24.js";import"./chunk-XGQQOMPO.js";import"./chunk-KMNQ3LJT.js";import{ha as a}from"./chunk-24OT7GHO.js";import"./chunk-GFQYFEEH.js";import{a as r,h as g}from"./chunk-7DYQUG5M.js";g();var D=y,J=r(()=>a`
1
+ import{l as p,m as f,p as h}from"./chunk-2WKENYA3.js";import{g as u,l as y,m as l,n as d}from"./chunk-UAZBF6WU.js";import"./chunk-JSGXXXFU.js";import"./chunk-WNAYBYSG.js";import{c as m}from"./chunk-GC4CQ6BI.js";import"./chunk-JBY5A44K.js";import"./chunk-HN3YKQ3C.js";import"./chunk-TPWSJOGX.js";import"./chunk-DYAWQS24.js";import"./chunk-XGQQOMPO.js";import"./chunk-KMNQ3LJT.js";import{ha as a}from"./chunk-24OT7GHO.js";import"./chunk-GFQYFEEH.js";import{a as r,h as g}from"./chunk-7DYQUG5M.js";g();var D=y,J=r(()=>a`
2
2
  Shows file changes since last sync (e.g. $ggt dev, push, deploy etc.)
3
3
 
4
4
  {gray Usage}
@@ -11,4 +11,4 @@ import{l as p,m as f,p as h}from"./chunk-RV4YYWDE.js";import{g as u,l as y,m as
11
11
 
12
12
  Run "ggt status -h" for more information.
13
13
  `);let i=await d(process.cwd()),o=await l.load(t,{command:"status",args:s,directory:i});if(!o)throw new u({command:"status",args:s,directory:i});o.print();let c=new h(o),n=await c.hashes(t);await c.print(t,{hashes:n});let e=p({localChanges:n.localChanges,environmentChanges:n.environmentChanges});e.size>0&&(t.log.debug("conflicts detected",{conflicts:e}),f({conflicts:e}))},"run");export{D as args,U as run,J as usage};
14
- //# sourceMappingURL=status-C3VTFX7J.js.map
14
+ //# sourceMappingURL=status-2PKSATWL.js.map
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/commands/status.ts"],
4
4
  "sourcesContent": ["import { ArgError, type ArgsDefinitionResult } from \"../services/command/arg.js\";\nimport type { Run, Usage } from \"../services/command/command.js\";\nimport { getConflicts, printConflicts } from \"../services/filesync/conflicts.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 { sprint } from \"../services/output/sprint.js\";\n\nexport type StatusArgs = typeof args;\nexport type StatusArgsResult = ArgsDefinitionResult<StatusArgs>;\n\nexport const args = SyncJsonArgs;\n\nexport const usage: Usage = () => {\n return sprint`\n Shows file changes since last sync (e.g. $ggt dev, push, deploy etc.)\n\n {gray Usage}\n ggt status\n `;\n};\n\nexport const run: Run<StatusArgs> = async (ctx, args) => {\n if (args._.length > 0) {\n throw new ArgError(sprint`\n \"ggt status\" does not take any positional arguments.\n\n If you are trying to see the status of a specific directory,\n you must \"cd\" to that directory and then run \"ggt status\".\n\n Run \"ggt status -h\" for more information.\n `);\n }\n\n const directory = await loadSyncJsonDirectory(process.cwd());\n const syncJson = await SyncJson.load(ctx, { command: \"status\", args, directory });\n if (!syncJson) {\n throw new UnknownDirectoryError({ command: \"status\", args, directory });\n }\n\n syncJson.print();\n\n const filesync = new FileSync(syncJson);\n const hashes = await filesync.hashes(ctx);\n await filesync.print(ctx, { hashes });\n\n const conflicts = getConflicts({ localChanges: hashes.localChanges, environmentChanges: hashes.environmentChanges });\n if (conflicts.size > 0) {\n ctx.log.debug(\"conflicts detected\", { conflicts });\n printConflicts({ conflicts });\n }\n};\n"],
5
- "mappings": "2gBAAAA,IAWO,IAAMC,EAAOC,EAEPC,EAAeC,EAAA,IACnBC;AAAA;AAAA;AAAA;AAAA;AAAA,IADmB,SASfC,EAAuBF,EAAA,MAAOG,EAAKN,IAAS,CACvD,GAAIA,EAAK,EAAE,OAAS,EAClB,MAAM,IAAIO,EAASH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAOlB,EAGH,IAAMI,EAAY,MAAMC,EAAsB,QAAQ,IAAI,CAAC,EACrDC,EAAW,MAAMC,EAAS,KAAKL,EAAK,CAAE,QAAS,SAAU,KAAAN,EAAM,UAAAQ,CAAU,CAAC,EAChF,GAAI,CAACE,EACH,MAAM,IAAIE,EAAsB,CAAE,QAAS,SAAU,KAAAZ,EAAM,UAAAQ,CAAU,CAAC,EAGxEE,EAAS,MAAM,EAEf,IAAMG,EAAW,IAAIC,EAASJ,CAAQ,EAChCK,EAAS,MAAMF,EAAS,OAAOP,CAAG,EACxC,MAAMO,EAAS,MAAMP,EAAK,CAAE,OAAAS,CAAO,CAAC,EAEpC,IAAMC,EAAYC,EAAa,CAAE,aAAcF,EAAO,aAAc,mBAAoBA,EAAO,kBAAmB,CAAC,EAC/GC,EAAU,KAAO,IACnBV,EAAI,IAAI,MAAM,qBAAsB,CAAE,UAAAU,CAAU,CAAC,EACjDE,EAAe,CAAE,UAAAF,CAAU,CAAC,EAEhC,EA7BoC",
5
+ "mappings": "+eAAAA,IAWO,IAAMC,EAAOC,EAEPC,EAAeC,EAAA,IACnBC;AAAA;AAAA;AAAA;AAAA;AAAA,IADmB,SASfC,EAAuBF,EAAA,MAAOG,EAAKN,IAAS,CACvD,GAAIA,EAAK,EAAE,OAAS,EAClB,MAAM,IAAIO,EAASH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAOlB,EAGH,IAAMI,EAAY,MAAMC,EAAsB,QAAQ,IAAI,CAAC,EACrDC,EAAW,MAAMC,EAAS,KAAKL,EAAK,CAAE,QAAS,SAAU,KAAAN,EAAM,UAAAQ,CAAU,CAAC,EAChF,GAAI,CAACE,EACH,MAAM,IAAIE,EAAsB,CAAE,QAAS,SAAU,KAAAZ,EAAM,UAAAQ,CAAU,CAAC,EAGxEE,EAAS,MAAM,EAEf,IAAMG,EAAW,IAAIC,EAASJ,CAAQ,EAChCK,EAAS,MAAMF,EAAS,OAAOP,CAAG,EACxC,MAAMO,EAAS,MAAMP,EAAK,CAAE,OAAAS,CAAO,CAAC,EAEpC,IAAMC,EAAYC,EAAa,CAAE,aAAcF,EAAO,aAAc,mBAAoBA,EAAO,kBAAmB,CAAC,EAC/GC,EAAU,KAAO,IACnBV,EAAI,IAAI,MAAM,qBAAsB,CAAE,UAAAU,CAAU,CAAC,EACjDE,EAAe,CAAE,UAAAF,CAAU,CAAC,EAEhC,EA7BoC",
6
6
  "names": ["init_cjs", "args", "SyncJsonArgs", "usage", "__name", "sprint", "run", "ctx", "ArgError", "directory", "loadSyncJsonDirectory", "syncJson", "SyncJson", "UnknownDirectoryError", "filesync", "FileSync", "hashes", "conflicts", "getConflicts", "printConflicts"]
7
7
  }
@@ -0,0 +1,7 @@
1
+ import{v as s}from"./chunk-TPWSJOGX.js";import"./chunk-DYAWQS24.js";import"./chunk-XGQQOMPO.js";import"./chunk-KMNQ3LJT.js";import{ha as n,ja as o}from"./chunk-24OT7GHO.js";import"./chunk-GFQYFEEH.js";import{a as r,h as a}from"./chunk-7DYQUG5M.js";a();var u=r(()=>n`
2
+ Show the name and email address of the currently logged in user.
3
+
4
+ {gray Usage}
5
+ ggt whoami
6
+ `,"usage"),l=r(async t=>{let e=await s(t);if(!e){o("You are not logged in");return}e.name?o(`You are logged in as ${e.name} (${e.email})`):o(`You are logged in as ${e.email}`)},"run");export{l as run,u as usage};
7
+ //# sourceMappingURL=whoami-LEZVATND.js.map
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/commands/whoami.ts"],
4
4
  "sourcesContent": ["import type { Run, Usage } from \"../services/command/command.js\";\nimport { println } from \"../services/output/print.js\";\nimport { sprint } from \"../services/output/sprint.js\";\nimport { getUser } from \"../services/user/user.js\";\n\nexport const usage: Usage = () => sprint`\n Show the name and email address of the currently logged in user.\n\n {gray Usage}\n ggt whoami\n`;\n\nexport const run: 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"],
5
- "mappings": "oRAAAA,IAKO,IAAMC,EAAeC,EAAA,IAAMC;AAAA;AAAA;AAAA;AAAA;AAAA,EAAN,SAOfC,EAAWF,EAAA,MAAOG,GAAQ,CACrC,IAAMC,EAAO,MAAMC,EAAQF,CAAG,EAC9B,GAAI,CAACC,EAAM,CACTE,EAAQ,uBAAuB,EAC/B,MACF,CAEIF,EAAK,KACPE,EAAQ,wBAAwBF,EAAK,IAAI,KAAKA,EAAK,KAAK,GAAG,EAE3DE,EAAQ,wBAAwBF,EAAK,KAAK,EAAE,CAEhD,EAZwB",
5
+ "mappings": "wPAAAA,IAKO,IAAMC,EAAeC,EAAA,IAAMC;AAAA;AAAA;AAAA;AAAA;AAAA,EAAN,SAOfC,EAAWF,EAAA,MAAOG,GAAQ,CACrC,IAAMC,EAAO,MAAMC,EAAQF,CAAG,EAC9B,GAAI,CAACC,EAAM,CACTE,EAAQ,uBAAuB,EAC/B,MACF,CAEIF,EAAK,KACPE,EAAQ,wBAAwBF,EAAK,IAAI,KAAKA,EAAK,KAAK,GAAG,EAE3DE,EAAQ,wBAAwBF,EAAK,KAAK,EAAE,CAEhD,EAZwB",
6
6
  "names": ["init_cjs", "usage", "__name", "sprint", "run", "ctx", "user", "getUser", "println"]
7
7
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gadgetinc/ggt",
3
- "version": "1.7.0",
3
+ "version": "1.7.1",
4
4
  "description": "The command-line interface for Gadget",
5
5
  "homepage": "https://github.com/gadget-inc/ggt",
6
6
  "bugs": {
@@ -43,6 +43,7 @@
43
43
  "@types/normalize-path": "^3.0.2",
44
44
  "@types/pluralize": "^0.0.33",
45
45
  "@types/semver": "^7.5.8",
46
+ "@types/set-cookie-parser": "^2.4.10",
46
47
  "@types/which": "^3.0.4",
47
48
  "@types/ws": "^8.5.14",
48
49
  "@typescript-eslint/eslint-plugin": "^8.11.0",
@@ -103,6 +104,7 @@
103
104
  "rimraf": "^5.0.7",
104
105
  "semver": "^7.7.0",
105
106
  "serialize-error": "^11.0.3",
107
+ "set-cookie-parser": "^2.7.1",
106
108
  "simple-git": "^3.27.0",
107
109
  "stdin-discarder": "^0.2.2",
108
110
  "string-width": "^7.2.0",
@@ -1,18 +0,0 @@
1
- import{E as q,b as V,r as X,s as Y}from"./chunk-GCO2TOVZ.js";import{b as T}from"./chunk-DYAWQS24.js";import{c as J}from"./chunk-XGQQOMPO.js";import{N as I,P as K,Q as h,Z as w,b as P,ca as L,e as d,ha as E,ia as B,ja as u}from"./chunk-24OT7GHO.js";import{a as i,h as a}from"./chunk-7DYQUG5M.js";a();a();import pe from"node:net";import de from"node:os";var C=class extends Error{static{i(this,"Locked")}constructor(r){super(`${r} is locked`)}},y={old:new Set,young:new Set},ge=1e3*15;var S,he=i(()=>{let e=de.networkInterfaces(),r=new Set([void 0,"0.0.0.0"]);for(let t of Object.values(e))for(let o of t)r.add(o.address);return r},"getLocalHosts"),Q=i(e=>new Promise((r,t)=>{let o=pe.createServer();o.unref(),o.on("error",t),o.listen(e,()=>{let{port:n}=o.address();o.close(()=>{r(n)})})}),"checkAvailablePort"),Z=i(async(e,r)=>{if(e.host||e.port===0)return Q(e);for(let t of r)try{await Q({port:e.port,host:t})}catch(o){if(!["EADDRNOTAVAIL","EINVAL"].includes(o.code))throw o}return e.port},"getAvailablePort"),we=i(function*(e){e&&(yield*e),yield 0},"portCheckSequence");async function O(e){let r,t=new Set;if(e&&(e.port&&(r=typeof e.port=="number"?[e.port]:e.port),e.exclude)){let n=e.exclude;if(typeof n[Symbol.iterator]!="function")throw new TypeError("The `exclude` option must be an iterable.");for(let s of n){if(typeof s!="number")throw new TypeError("Each item in the `exclude` option must be a number corresponding to the port you want excluded.");if(!Number.isSafeInteger(s))throw new TypeError(`Number ${s} in the exclude option is not a safe integer and can't be used`)}t=new Set(n)}S===void 0&&(S=setTimeout(()=>{S=void 0,y.old=y.young,y.young=new Set},ge),S.unref&&S.unref());let o=he();for(let n of we(r))try{if(t.has(n))continue;let s=await Z({...e,port:n},o);for(;y.old.has(s)||y.young.has(s);){if(n!==0)throw new C(n);s=await Z({...e,port:n},o)}return y.young.add(s),s}catch(s){if(!["EADDRINUSE","EACCES"].includes(s.code)&&!(s instanceof C))throw s}throw new Error("No available ports found")}i(O,"getPorts");import G from"node:assert";import _e from"node:http";a();import N from"node:process";import{Buffer as ie}from"node:buffer";import se from"node:path";import{fileURLToPath as Te}from"node:url";import Oe from"node:util";import ae from"node:child_process";import z,{constants as ce}from"node:fs/promises";a();function g(e,r,t){let o=i(n=>Object.defineProperty(e,r,{value:n,enumerable:!0,writable:!0}),"define");return Object.defineProperty(e,r,{configurable:!0,enumerable:!0,get(){let n=t();return o(n),n},set(n){o(n)}}),e}i(g,"defineLazyProperty");a();import{promisify as Ue}from"node:util";import H from"node:process";import{execFile as Fe}from"node:child_process";a();import{promisify as ye}from"node:util";import xe from"node:process";import{execFile as be}from"node:child_process";var ve=ye(be);async function M(){if(xe.platform!=="darwin")throw new Error("macOS only");let{stdout:e}=await ve("defaults",["read","com.apple.LaunchServices/com.apple.launchservices.secure","LSHandlers"]);return/LSHandlerRoleAll = "(?!-)(?<id>[^"]+?)";\s+?LSHandlerURLScheme = (?:http|https);/.exec(e)?.groups.id??"com.apple.Safari"}i(M,"defaultBrowserId");a();a();import Pe from"node:process";import{promisify as Ee}from"node:util";import{execFile as Se,execFileSync as ar}from"node:child_process";var Ae=Ee(Se);async function ee(e,{humanReadableOutput:r=!0}={}){if(Pe.platform!=="darwin")throw new Error("macOS only");let t=r?[]:["-ss"],{stdout:o}=await Ae("osascript",["-e",e,t]);return o.trim()}i(ee,"runAppleScript");async function R(e){return ee(`tell application "Finder" to set app_path to application file id "${e}" as string
2
- tell application "System Events" to get value of property list item "CFBundleName" of property list file (app_path & ":Contents:Info.plist")`)}i(R,"bundleName");a();import{promisify as Le}from"node:util";import{execFile as Ce}from"node:child_process";var $e=Le(Ce),Ne={AppXq0fevzme2pys62n3e0fbqa7peapykr8v:{name:"Edge",id:"com.microsoft.edge.old"},MSEdgeDHTML:{name:"Edge",id:"com.microsoft.edge"},MSEdgeHTM:{name:"Edge",id:"com.microsoft.edge"},"IE.HTTP":{name:"Internet Explorer",id:"com.microsoft.ie"},FirefoxURL:{name:"Firefox",id:"org.mozilla.firefox"},ChromeHTML:{name:"Chrome",id:"com.google.chrome"},BraveHTML:{name:"Brave",id:"com.brave.Browser"},BraveBHTML:{name:"Brave Beta",id:"com.brave.Browser.beta"},BraveSSHTM:{name:"Brave Nightly",id:"com.brave.Browser.nightly"}},$=class extends Error{static{i(this,"UnknownBrowserError")}};async function W(e=$e){let{stdout:r}=await e("reg",["QUERY"," HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\Shell\\Associations\\UrlAssociations\\http\\UserChoice","/v","ProgId"]),t=/ProgId\s*REG_SZ\s*(?<id>\S+)/.exec(r);if(!t)throw new $(`Cannot find Windows browser in stdout: ${JSON.stringify(r)}`);let{id:o}=t.groups,n=Ne[o];if(!n)throw new $(`Unknown browser ID: ${o}`);return n}i(W,"defaultBrowser");var Ie=Ue(Fe),Be=i(e=>e.toLowerCase().replaceAll(/(?:^|\s|-)\S/g,r=>r.toUpperCase()),"titleize");async function k(){if(H.platform==="darwin"){let e=await M();return{name:await R(e),id:e}}if(H.platform==="linux"){let{stdout:e}=await Ie("xdg-mime",["query","default","x-scheme-handler/http"]),r=e.trim();return{name:Be(r.replace(/.desktop$/,"").replace("-"," ")),id:r}}if(H.platform==="win32")return W();throw new Error("Only macOS, Linux, and Windows are supported")}i(k,"defaultBrowser");var Me=Oe.promisify(ae.execFile),_=se.dirname(Te(import.meta.url)),re=se.join(_,"xdg-open"),{platform:x,arch:te}=N,Re=(()=>{let e="/mnt/",r;return async function(){if(r)return r;let t="/etc/wsl.conf",o=!1;try{await z.access(t,ce.F_OK),o=!0}catch{}if(!o)return e;let n=await z.readFile(t,{encoding:"utf8"}),s=/(?<!#.*)root\s*=\s*(?<mountPoint>.*)/g.exec(n);return s?(r=s.groups.mountPoint.trim(),r=r.endsWith("/")?r:`${r}/`,r):e}})(),me=i(async()=>`${await Re()}c/Windows/System32/WindowsPowerShell/v1.0/powershell.exe`,"getPowershellPathFromWsl");async function We(){let e=await me(),t=ie.from('(Get-ItemProperty -Path "HKCU:\\Software\\Microsoft\\Windows\\Shell\\Associations\\UrlAssociations\\http\\UserChoice").ProgId',"utf16le").toString("base64"),{stdout:o}=await Me(e,["-NoProfile","-NonInteractive","-ExecutionPolicy","Bypass","-EncodedCommand",t],{encoding:"utf8"}),n=o.trim(),s={ChromeHTML:"com.google.chrome",MSEdgeHTM:"com.microsoft.edge",FirefoxURL:"org.mozilla.firefox"};return s[n]?{id:s[n]}:{}}i(We,"getWindowsDefaultBrowserFromWsl");var oe=i(async(e,r)=>{let t;for(let o of e)try{return await r(o)}catch(n){t=n}throw t},"pTryEach"),U=i(async e=>{if(e={wait:!1,background:!1,newInstance:!1,allowNonzeroExitCode:!1,...e},Array.isArray(e.app))return oe(e.app,c=>U({...e,app:c}));let{name:r,arguments:t=[]}=e.app??{};if(t=[...t],Array.isArray(r))return oe(r,c=>U({...e,app:{name:c,arguments:t}}));if(r==="browser"||r==="browserPrivate"){let c={"com.google.chrome":"chrome","google-chrome.desktop":"chrome","org.mozilla.firefox":"firefox","firefox.desktop":"firefox","com.microsoft.msedge":"edge","com.microsoft.edge":"edge","com.microsoft.edgemac":"edge","microsoft-edge.desktop":"edge"},m={chrome:"--incognito",firefox:"--private-window",edge:"--inPrivate"},l=h?await We():await k();if(l.id in c){let p=c[l.id];return r==="browserPrivate"&&t.push(m[p]),U({...e,app:{name:b[p],arguments:t}})}throw new Error(`${l.name} is not supported as a default browser`)}let o,n=[],s={};if(x==="darwin")o="open",e.wait&&n.push("--wait-apps"),e.background&&n.push("--background"),e.newInstance&&n.push("--new"),r&&n.push("-a",r);else if(x==="win32"||h&&!K()&&!r){o=h?await me():`${N.env.SYSTEMROOT||N.env.windir||"C:\\Windows"}\\System32\\WindowsPowerShell\\v1.0\\powershell`,n.push("-NoProfile","-NonInteractive","-ExecutionPolicy","Bypass","-EncodedCommand"),h||(s.windowsVerbatimArguments=!0);let c=["Start"];e.wait&&c.push("-Wait"),r?(c.push(`"\`"${r}\`""`),e.target&&t.push(e.target)):e.target&&c.push(`"${e.target}"`),t.length>0&&(t=t.map(m=>`"\`"${m}\`""`),c.push("-ArgumentList",t.join(","))),e.target=ie.from(c.join(" "),"utf16le").toString("base64")}else{if(r)o=r;else{let c=!_||_==="/",m=!1;try{await z.access(re,ce.X_OK),m=!0}catch{}o=N.versions.electron??(x==="android"||c||!m)?"xdg-open":re}t.length>0&&n.push(...t),e.wait||(s.stdio="ignore",s.detached=!0)}x==="darwin"&&t.length>0&&n.push("--args",...t),e.target&&n.push(e.target);let f=ae.spawn(o,n,s);return e.wait?new Promise((c,m)=>{f.once("error",m),f.once("close",l=>{if(!e.allowNonzeroExitCode&&l>0){m(new Error(`Exited with code ${l}`));return}c(f)})}):(f.unref(),f)},"baseOpen"),He=i((e,r)=>{if(typeof e!="string")throw new TypeError("Expected a `target`");return U({...r,target:e})},"open");function ne(e){if(typeof e=="string"||Array.isArray(e))return e;let{[te]:r}=e;if(!r)throw new Error(`${te} is not supported`);return r}i(ne,"detectArchBinary");function j({[x]:e},{wsl:r}){if(r&&h)return ne(r);if(!e)throw new Error(`${x} is not supported`);return ne(e)}i(j,"detectPlatformBinary");var b={};g(b,"chrome",()=>j({darwin:"google chrome",win32:"chrome",linux:["google-chrome","google-chrome-stable","chromium"]},{wsl:{ia32:"/mnt/c/Program Files (x86)/Google/Chrome/Application/chrome.exe",x64:["/mnt/c/Program Files/Google/Chrome/Application/chrome.exe","/mnt/c/Program Files (x86)/Google/Chrome/Application/chrome.exe"]}}));g(b,"firefox",()=>j({darwin:"firefox",win32:"C:\\Program Files\\Mozilla Firefox\\firefox.exe",linux:"firefox"},{wsl:"/mnt/c/Program Files/Mozilla Firefox/firefox.exe"}));g(b,"edge",()=>j({darwin:"microsoft edge",win32:"msedge",linux:["microsoft-edge","microsoft-edge-dev"]},{wsl:"/mnt/c/Program Files (x86)/Microsoft/Edge/Application/msedge.exe"}));g(b,"browser",()=>"browser");g(b,"browserPrivate",()=>"browserPrivate");var le=He;a();import ke from"node:assert";a();import A from"node:process";var ue=i(e=>{let r;if(typeof e=="string"?r={content:e}:r=e,r=I(r,{ensureEmptyLineAbove:!0,ensureNewLine:!0,exitWhenNo:!0}),!L.isInteractive){let t=r.whenNotInteractive??(()=>{u(r),u({ensureEmptyLineAbove:!0,content:"Aborting because ggt is not running in an interactive terminal."}),A.exit(1)});return Promise.resolve(t())}return new Promise(t=>{let o=new D(r);o.on("submit",t),o.on("exit",()=>A.exit(0)),o.on("abort",()=>A.exit(1))})},"confirm"),D=class extends J{static{i(this,"Confirm")}value=void 0;defaultValue=!1;options;constructor(r){super(),this.options=I(r,{exitWhenNo:!0,ensureEmptyLineAbove:!0}),this.render()}reset(){this.value=this.defaultValue,this.fire(),this.render()}exit(){this.abort()}abort(){this.value=!1,this.done=this.aborted=!0,this.fire(),this.render(!1),this.close(),this.options.exitWhenNo&&A.exit(0)}submit(){this.value=this.value??!1,this.done=!0,this.aborted=!1,this.fire(),this.render(),this.close(),this.options.exitWhenNo&&!this.value&&A.exit(0)}_(r,t){if(r.toLowerCase()==="y"){this.value=!0,this.submit();return}if(r.toLowerCase()==="n"){this.value=!1,this.submit();return}this.bell()}render(r=this.value){if(super.render(),this.done){L.persistPrompt(B({...this.options,content:`${this.options.content} ${r?P.bold.greenBright("Yes."):P.bold.redBright("No.")}`}));return}L.updatePrompt(B({...this.options,content:`${this.options.content} ${this.defaultValue?P.blueBright("[Y/n] "):P.blueBright("[y/N] ")}`}))}};var ze=d.object({id:d.union([d.string(),d.number()]).transform(Number),name:d.string().nullish(),email:d.string()}),F=i(async e=>{let r=X(e);if(r)try{let t=await q({context:{ctx:e},url:`https://${w.domains.services}/auth/api/current-user`,headers:r,responseType:"json",resolveBodyOnly:!0}),o=ze.parse(t);return e.log.info("loaded user",{user:{id:o.id}},{user:o}),V(o),o}catch(t){Y(e,t);return}},"getUser"),ct=i(async(e,r)=>{let t=await F(e);return t||(e.log.info("prompting user to log in"),u({ensureEmptyLineAbove:!0,content:`You must be logged in to use "ggt ${r}".`}),await ue({ensureEmptyLineAbove:!0,content:"Would you like to log in?"}),await fe(e,{_:[]}),t=await F(e),ke(t,"missing user after successful login"),t)},"getUserOrLogin");var vt=i(()=>E`
3
- Log in to your account.
4
-
5
- {bold Usage}
6
- ggt login
7
- `,"usage"),je=i(async e=>{let r;try{let t=await O(),o=new Promise((s,f)=>{r=_e.createServer(async(c,m)=>{let l=new URL(`https://${w.domains.services}/auth/cli`);try{G(c.url,"missing url");let p=new URL(c.url,`http://localhost:${t}`).searchParams.get("session");G(p,"missing session"),T(e,p);let v=await F(e);G(v,"missing user after successful login"),v.name?u({ensureEmptyLineAbove:!0,content:E`Hello, ${v.name} {gray (${v.email})}`}):u({ensureEmptyLineAbove:!0,content:`Hello, ${v.email}`}),l.searchParams.set("success","true"),s()}catch(p){T(e,void 0),l.searchParams.set("success","false"),f(p)}finally{m.writeHead(303,{Location:l.toString()}),m.end()}}),e.log.info("starting login server",{port:t}),r.listen(t)}),n=new URL(`https://${w.domains.services}/auth/login`);n.searchParams.set("returnTo",`https://${w.domains.services}/auth/cli/callback?port=${t}`);try{e.log.info("opening browser",{url:n.toString()}),await le(n.toString()),u({ensureEmptyLineAbove:!0,content:E`
8
- We've opened Gadget's login page using your default browser.
9
-
10
- Please log in and then return to this terminal.
11
- `})}catch(s){e.log.error("failed to open browser",{error:s}),u({ensureEmptyLineAbove:!0,content:E`
12
- Please open the following URL in your browser and log in:
13
-
14
- {gray ${n.toString()}}
15
-
16
- Once logged in, return to this terminal.
17
- `})}await o}finally{r?.close()}},"run"),fe=je;export{ue as a,le as b,vt as c,je as d,fe as e,F as f,ct as g};
18
- //# sourceMappingURL=chunk-FILWLZUN.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/commands/login.ts", "../node_modules/.pnpm/get-port@7.1.0/node_modules/get-port/index.js", "../node_modules/.pnpm/open@10.1.2/node_modules/open/index.js", "../node_modules/.pnpm/define-lazy-prop@3.0.0/node_modules/define-lazy-prop/index.js", "../node_modules/.pnpm/default-browser@5.2.1/node_modules/default-browser/index.js", "../node_modules/.pnpm/default-browser-id@5.0.0/node_modules/default-browser-id/index.js", "../node_modules/.pnpm/bundle-name@4.1.0/node_modules/bundle-name/index.js", "../node_modules/.pnpm/run-applescript@7.0.0/node_modules/run-applescript/index.js", "../node_modules/.pnpm/default-browser@5.2.1/node_modules/default-browser/windows.js", "../src/services/user/user.ts", "../src/services/output/confirm.ts"],
4
- "sourcesContent": ["import getPort from \"get-port\";\nimport assert from \"node:assert\";\nimport http, { type Server } from \"node:http\";\nimport open from \"open\";\nimport type { Run, Usage } from \"../services/command/command.js\";\nimport { config } from \"../services/config/config.js\";\nimport { println } from \"../services/output/print.js\";\nimport { sprint } from \"../services/output/sprint.js\";\nimport { writeSession } from \"../services/user/session.js\";\nimport { getUser } from \"../services/user/user.js\";\n\nexport const usage: Usage = () => sprint`\n Log in to your account.\n\n {bold Usage}\n ggt login\n`;\n\nexport const run: Run = async (ctx): Promise<void> => {\n let server: Server | undefined;\n\n try {\n const port = await getPort();\n const receiveSession = new Promise<void>((resolve, reject) => {\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n server = http.createServer(async (req, res) => {\n const landingPage = new URL(`https://${config.domains.services}/auth/cli`);\n\n try {\n assert(req.url, \"missing url\");\n const session = new URL(req.url, `http://localhost:${port}`).searchParams.get(\"session\");\n assert(session, \"missing session\");\n\n writeSession(ctx, session);\n\n const user = await getUser(ctx);\n assert(user, \"missing user after successful login\");\n\n if (user.name) {\n println({ ensureEmptyLineAbove: true, content: sprint`Hello, ${user.name} {gray (${user.email})}` });\n } else {\n println({ ensureEmptyLineAbove: true, content: `Hello, ${user.email}` });\n }\n\n landingPage.searchParams.set(\"success\", \"true\");\n resolve();\n } catch (error) {\n writeSession(ctx, undefined);\n landingPage.searchParams.set(\"success\", \"false\");\n reject(error as Error);\n } finally {\n res.writeHead(303, { Location: landingPage.toString() });\n res.end();\n }\n });\n\n ctx.log.info(\"starting login server\", { port });\n server.listen(port);\n });\n\n // open the login page in the user's default browser have it\n // redirect to the cli callback route. The cli callback route will\n // send the session to the server we just started.\n const url = new URL(`https://${config.domains.services}/auth/login`);\n url.searchParams.set(\"returnTo\", `https://${config.domains.services}/auth/cli/callback?port=${port}`);\n\n try {\n ctx.log.info(\"opening browser\", { url: url.toString() });\n await open(url.toString());\n println({\n ensureEmptyLineAbove: true,\n content: sprint`\n We've opened Gadget's login page using your default browser.\n\n Please log in and then return to this terminal.\n `,\n });\n } catch (error) {\n ctx.log.error(\"failed to open browser\", { error });\n println({\n ensureEmptyLineAbove: true,\n content: sprint`\n Please open the following URL in your browser and log in:\n\n {gray ${url.toString()}}\n\n Once logged in, return to this terminal.\n `,\n });\n }\n\n await receiveSession;\n } finally {\n server?.close();\n }\n};\n\n// alias\nexport const login = run;\n", "import net from 'node:net';\nimport os from 'node:os';\n\nclass Locked extends Error {\n\tconstructor(port) {\n\t\tsuper(`${port} is locked`);\n\t}\n}\n\nconst lockedPorts = {\n\told: new Set(),\n\tyoung: new Set(),\n};\n\n// On this interval, the old locked ports are discarded,\n// the young locked ports are moved to old locked ports,\n// and a new young set for locked ports are created.\nconst releaseOldLockedPortsIntervalMs = 1000 * 15;\n\nconst minPort = 1024;\nconst maxPort = 65_535;\n\n// Lazily create timeout on first use\nlet timeout;\n\nconst getLocalHosts = () => {\n\tconst interfaces = os.networkInterfaces();\n\n\t// Add undefined value for createServer function to use default host,\n\t// and default IPv4 host in case createServer defaults to IPv6.\n\tconst results = new Set([undefined, '0.0.0.0']);\n\n\tfor (const _interface of Object.values(interfaces)) {\n\t\tfor (const config of _interface) {\n\t\t\tresults.add(config.address);\n\t\t}\n\t}\n\n\treturn results;\n};\n\nconst checkAvailablePort = options =>\n\tnew Promise((resolve, reject) => {\n\t\tconst server = net.createServer();\n\t\tserver.unref();\n\t\tserver.on('error', reject);\n\n\t\tserver.listen(options, () => {\n\t\t\tconst {port} = server.address();\n\t\t\tserver.close(() => {\n\t\t\t\tresolve(port);\n\t\t\t});\n\t\t});\n\t});\n\nconst getAvailablePort = async (options, hosts) => {\n\tif (options.host || options.port === 0) {\n\t\treturn checkAvailablePort(options);\n\t}\n\n\tfor (const host of hosts) {\n\t\ttry {\n\t\t\tawait checkAvailablePort({port: options.port, host}); // eslint-disable-line no-await-in-loop\n\t\t} catch (error) {\n\t\t\tif (!['EADDRNOTAVAIL', 'EINVAL'].includes(error.code)) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn options.port;\n};\n\nconst portCheckSequence = function * (ports) {\n\tif (ports) {\n\t\tyield * ports;\n\t}\n\n\tyield 0; // Fall back to 0 if anything else failed\n};\n\nexport default async function getPorts(options) {\n\tlet ports;\n\tlet exclude = new Set();\n\n\tif (options) {\n\t\tif (options.port) {\n\t\t\tports = typeof options.port === 'number' ? [options.port] : options.port;\n\t\t}\n\n\t\tif (options.exclude) {\n\t\t\tconst excludeIterable = options.exclude;\n\n\t\t\tif (typeof excludeIterable[Symbol.iterator] !== 'function') {\n\t\t\t\tthrow new TypeError('The `exclude` option must be an iterable.');\n\t\t\t}\n\n\t\t\tfor (const element of excludeIterable) {\n\t\t\t\tif (typeof element !== 'number') {\n\t\t\t\t\tthrow new TypeError('Each item in the `exclude` option must be a number corresponding to the port you want excluded.');\n\t\t\t\t}\n\n\t\t\t\tif (!Number.isSafeInteger(element)) {\n\t\t\t\t\tthrow new TypeError(`Number ${element} in the exclude option is not a safe integer and can't be used`);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\texclude = new Set(excludeIterable);\n\t\t}\n\t}\n\n\tif (timeout === undefined) {\n\t\ttimeout = setTimeout(() => {\n\t\t\ttimeout = undefined;\n\n\t\t\tlockedPorts.old = lockedPorts.young;\n\t\t\tlockedPorts.young = new Set();\n\t\t}, releaseOldLockedPortsIntervalMs);\n\n\t\t// Does not exist in some environments (Electron, Jest jsdom env, browser, etc).\n\t\tif (timeout.unref) {\n\t\t\ttimeout.unref();\n\t\t}\n\t}\n\n\tconst hosts = getLocalHosts();\n\n\tfor (const port of portCheckSequence(ports)) {\n\t\ttry {\n\t\t\tif (exclude.has(port)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tlet availablePort = await getAvailablePort({...options, port}, hosts); // eslint-disable-line no-await-in-loop\n\t\t\twhile (lockedPorts.old.has(availablePort) || lockedPorts.young.has(availablePort)) {\n\t\t\t\tif (port !== 0) {\n\t\t\t\t\tthrow new Locked(port);\n\t\t\t\t}\n\n\t\t\t\tavailablePort = await getAvailablePort({...options, port}, hosts); // eslint-disable-line no-await-in-loop\n\t\t\t}\n\n\t\t\tlockedPorts.young.add(availablePort);\n\n\t\t\treturn availablePort;\n\t\t} catch (error) {\n\t\t\tif (!['EADDRINUSE', 'EACCES'].includes(error.code) && !(error instanceof Locked)) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\t}\n\n\tthrow new Error('No available ports found');\n}\n\nexport function portNumbers(from, to) {\n\tif (!Number.isInteger(from) || !Number.isInteger(to)) {\n\t\tthrow new TypeError('`from` and `to` must be integer numbers');\n\t}\n\n\tif (from < minPort || from > maxPort) {\n\t\tthrow new RangeError(`'from' must be between ${minPort} and ${maxPort}`);\n\t}\n\n\tif (to < minPort || to > maxPort) {\n\t\tthrow new RangeError(`'to' must be between ${minPort} and ${maxPort}`);\n\t}\n\n\tif (from > to) {\n\t\tthrow new RangeError('`to` must be greater than or equal to `from`');\n\t}\n\n\tconst generator = function * (from, to) {\n\t\tfor (let port = from; port <= to; port++) {\n\t\t\tyield port;\n\t\t}\n\t};\n\n\treturn generator(from, to);\n}\n\nexport function clearLockedPorts() {\n\tlockedPorts.old.clear();\n\tlockedPorts.young.clear();\n}\n", "import process from 'node:process';\nimport {Buffer} from 'node:buffer';\nimport path from 'node:path';\nimport {fileURLToPath} from 'node:url';\nimport util from 'node:util';\nimport childProcess from 'node:child_process';\nimport fs, {constants as fsConstants} from 'node:fs/promises';\nimport isWsl from 'is-wsl';\nimport defineLazyProperty from 'define-lazy-prop';\nimport defaultBrowser from 'default-browser';\nimport isInsideContainer from 'is-inside-container';\n\nconst execFile = util.promisify(childProcess.execFile);\n\n// Path to included `xdg-open`.\nconst __dirname = path.dirname(fileURLToPath(import.meta.url));\nconst localXdgOpenPath = path.join(__dirname, 'xdg-open');\n\nconst {platform, arch} = process;\n\n/**\nGet the mount point for fixed drives in WSL.\n\n@inner\n@returns {string} The mount point.\n*/\nconst getWslDrivesMountPoint = (() => {\n\t// Default value for \"root\" param\n\t// according to https://docs.microsoft.com/en-us/windows/wsl/wsl-config\n\tconst defaultMountPoint = '/mnt/';\n\n\tlet mountPoint;\n\n\treturn async function () {\n\t\tif (mountPoint) {\n\t\t\t// Return memoized mount point value\n\t\t\treturn mountPoint;\n\t\t}\n\n\t\tconst configFilePath = '/etc/wsl.conf';\n\n\t\tlet isConfigFileExists = false;\n\t\ttry {\n\t\t\tawait fs.access(configFilePath, fsConstants.F_OK);\n\t\t\tisConfigFileExists = true;\n\t\t} catch {}\n\n\t\tif (!isConfigFileExists) {\n\t\t\treturn defaultMountPoint;\n\t\t}\n\n\t\tconst configContent = await fs.readFile(configFilePath, {encoding: 'utf8'});\n\t\tconst configMountPoint = /(?<!#.*)root\\s*=\\s*(?<mountPoint>.*)/g.exec(configContent);\n\n\t\tif (!configMountPoint) {\n\t\t\treturn defaultMountPoint;\n\t\t}\n\n\t\tmountPoint = configMountPoint.groups.mountPoint.trim();\n\t\tmountPoint = mountPoint.endsWith('/') ? mountPoint : `${mountPoint}/`;\n\n\t\treturn mountPoint;\n\t};\n})();\n\n/**\nGet the PowerShell executable path in WSL environment.\n\n@returns {Promise<string>} The absolute path to the PowerShell executable in WSL.\n*/\nconst getPowershellPathFromWsl = async () => {\n\tconst mountPoint = await getWslDrivesMountPoint();\n\treturn `${mountPoint}c/Windows/System32/WindowsPowerShell/v1.0/powershell.exe`;\n};\n\n/**\nGet the default browser name in Windows from WSL.\n\n@returns {Promise<string>} Browser name.\n*/\nasync function getWindowsDefaultBrowserFromWsl() {\n\tconst powershellPath = await getPowershellPathFromWsl();\n\tconst rawCommand = '(Get-ItemProperty -Path \"HKCU:\\\\Software\\\\Microsoft\\\\Windows\\\\Shell\\\\Associations\\\\UrlAssociations\\\\http\\\\UserChoice\").ProgId';\n\tconst encodedCommand = Buffer.from(rawCommand, 'utf16le').toString('base64');\n\n\tconst {stdout} = await execFile(\n\t\tpowershellPath,\n\t\t[\n\t\t\t'-NoProfile',\n\t\t\t'-NonInteractive',\n\t\t\t'-ExecutionPolicy',\n\t\t\t'Bypass',\n\t\t\t'-EncodedCommand',\n\t\t\tencodedCommand,\n\t\t],\n\t\t{encoding: 'utf8'},\n\t);\n\n\tconst progId = stdout.trim();\n\n\t// Map ProgId to browser IDs\n\tconst browserMap = {\n\t\tChromeHTML: 'com.google.chrome',\n\t\tMSEdgeHTM: 'com.microsoft.edge',\n\t\tFirefoxURL: 'org.mozilla.firefox',\n\t};\n\n\treturn browserMap[progId] ? {id: browserMap[progId]} : {};\n}\n\nconst pTryEach = async (array, mapper) => {\n\tlet latestError;\n\n\tfor (const item of array) {\n\t\ttry {\n\t\t\treturn await mapper(item); // eslint-disable-line no-await-in-loop\n\t\t} catch (error) {\n\t\t\tlatestError = error;\n\t\t}\n\t}\n\n\tthrow latestError;\n};\n\nconst baseOpen = async options => {\n\toptions = {\n\t\twait: false,\n\t\tbackground: false,\n\t\tnewInstance: false,\n\t\tallowNonzeroExitCode: false,\n\t\t...options,\n\t};\n\n\tif (Array.isArray(options.app)) {\n\t\treturn pTryEach(options.app, singleApp => baseOpen({\n\t\t\t...options,\n\t\t\tapp: singleApp,\n\t\t}));\n\t}\n\n\tlet {name: app, arguments: appArguments = []} = options.app ?? {};\n\tappArguments = [...appArguments];\n\n\tif (Array.isArray(app)) {\n\t\treturn pTryEach(app, appName => baseOpen({\n\t\t\t...options,\n\t\t\tapp: {\n\t\t\t\tname: appName,\n\t\t\t\targuments: appArguments,\n\t\t\t},\n\t\t}));\n\t}\n\n\tif (app === 'browser' || app === 'browserPrivate') {\n\t\t// IDs from default-browser for macOS and windows are the same\n\t\tconst ids = {\n\t\t\t'com.google.chrome': 'chrome',\n\t\t\t'google-chrome.desktop': 'chrome',\n\t\t\t'org.mozilla.firefox': 'firefox',\n\t\t\t'firefox.desktop': 'firefox',\n\t\t\t'com.microsoft.msedge': 'edge',\n\t\t\t'com.microsoft.edge': 'edge',\n\t\t\t'com.microsoft.edgemac': 'edge',\n\t\t\t'microsoft-edge.desktop': 'edge',\n\t\t};\n\n\t\t// Incognito flags for each browser in `apps`.\n\t\tconst flags = {\n\t\t\tchrome: '--incognito',\n\t\t\tfirefox: '--private-window',\n\t\t\tedge: '--inPrivate',\n\t\t};\n\n\t\tconst browser = isWsl ? await getWindowsDefaultBrowserFromWsl() : await defaultBrowser();\n\t\tif (browser.id in ids) {\n\t\t\tconst browserName = ids[browser.id];\n\n\t\t\tif (app === 'browserPrivate') {\n\t\t\t\tappArguments.push(flags[browserName]);\n\t\t\t}\n\n\t\t\treturn baseOpen({\n\t\t\t\t...options,\n\t\t\t\tapp: {\n\t\t\t\t\tname: apps[browserName],\n\t\t\t\t\targuments: appArguments,\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\n\t\tthrow new Error(`${browser.name} is not supported as a default browser`);\n\t}\n\n\tlet command;\n\tconst cliArguments = [];\n\tconst childProcessOptions = {};\n\n\tif (platform === 'darwin') {\n\t\tcommand = 'open';\n\n\t\tif (options.wait) {\n\t\t\tcliArguments.push('--wait-apps');\n\t\t}\n\n\t\tif (options.background) {\n\t\t\tcliArguments.push('--background');\n\t\t}\n\n\t\tif (options.newInstance) {\n\t\t\tcliArguments.push('--new');\n\t\t}\n\n\t\tif (app) {\n\t\t\tcliArguments.push('-a', app);\n\t\t}\n\t} else if (platform === 'win32' || (isWsl && !isInsideContainer() && !app)) {\n\t\tcommand = isWsl\n\t\t\t? await getPowershellPathFromWsl()\n\t\t\t: `${process.env.SYSTEMROOT || process.env.windir || 'C:\\\\Windows'}\\\\System32\\\\WindowsPowerShell\\\\v1.0\\\\powershell`;\n\n\t\tcliArguments.push(\n\t\t\t'-NoProfile',\n\t\t\t'-NonInteractive',\n\t\t\t'-ExecutionPolicy',\n\t\t\t'Bypass',\n\t\t\t'-EncodedCommand',\n\t\t);\n\n\t\tif (!isWsl) {\n\t\t\tchildProcessOptions.windowsVerbatimArguments = true;\n\t\t}\n\n\t\tconst encodedArguments = ['Start'];\n\n\t\tif (options.wait) {\n\t\t\tencodedArguments.push('-Wait');\n\t\t}\n\n\t\tif (app) {\n\t\t\t// Double quote with double quotes to ensure the inner quotes are passed through.\n\t\t\t// Inner quotes are delimited for PowerShell interpretation with backticks.\n\t\t\tencodedArguments.push(`\"\\`\"${app}\\`\"\"`);\n\t\t\tif (options.target) {\n\t\t\t\tappArguments.push(options.target);\n\t\t\t}\n\t\t} else if (options.target) {\n\t\t\tencodedArguments.push(`\"${options.target}\"`);\n\t\t}\n\n\t\tif (appArguments.length > 0) {\n\t\t\tappArguments = appArguments.map(argument => `\"\\`\"${argument}\\`\"\"`);\n\t\t\tencodedArguments.push('-ArgumentList', appArguments.join(','));\n\t\t}\n\n\t\t// Using Base64-encoded command, accepted by PowerShell, to allow special characters.\n\t\toptions.target = Buffer.from(encodedArguments.join(' '), 'utf16le').toString('base64');\n\t} else {\n\t\tif (app) {\n\t\t\tcommand = app;\n\t\t} else {\n\t\t\t// When bundled by Webpack, there's no actual package file path and no local `xdg-open`.\n\t\t\tconst isBundled = !__dirname || __dirname === '/';\n\n\t\t\t// Check if local `xdg-open` exists and is executable.\n\t\t\tlet exeLocalXdgOpen = false;\n\t\t\ttry {\n\t\t\t\tawait fs.access(localXdgOpenPath, fsConstants.X_OK);\n\t\t\t\texeLocalXdgOpen = true;\n\t\t\t} catch {}\n\n\t\t\tconst useSystemXdgOpen = process.versions.electron\n\t\t\t\t?? (platform === 'android' || isBundled || !exeLocalXdgOpen);\n\t\t\tcommand = useSystemXdgOpen ? 'xdg-open' : localXdgOpenPath;\n\t\t}\n\n\t\tif (appArguments.length > 0) {\n\t\t\tcliArguments.push(...appArguments);\n\t\t}\n\n\t\tif (!options.wait) {\n\t\t\t// `xdg-open` will block the process unless stdio is ignored\n\t\t\t// and it's detached from the parent even if it's unref'd.\n\t\t\tchildProcessOptions.stdio = 'ignore';\n\t\t\tchildProcessOptions.detached = true;\n\t\t}\n\t}\n\n\tif (platform === 'darwin' && appArguments.length > 0) {\n\t\tcliArguments.push('--args', ...appArguments);\n\t}\n\n\t// This has to come after `--args`.\n\tif (options.target) {\n\t\tcliArguments.push(options.target);\n\t}\n\n\tconst subprocess = childProcess.spawn(command, cliArguments, childProcessOptions);\n\n\tif (options.wait) {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tsubprocess.once('error', reject);\n\n\t\t\tsubprocess.once('close', exitCode => {\n\t\t\t\tif (!options.allowNonzeroExitCode && exitCode > 0) {\n\t\t\t\t\treject(new Error(`Exited with code ${exitCode}`));\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tresolve(subprocess);\n\t\t\t});\n\t\t});\n\t}\n\n\tsubprocess.unref();\n\n\treturn subprocess;\n};\n\nconst open = (target, options) => {\n\tif (typeof target !== 'string') {\n\t\tthrow new TypeError('Expected a `target`');\n\t}\n\n\treturn baseOpen({\n\t\t...options,\n\t\ttarget,\n\t});\n};\n\nexport const openApp = (name, options) => {\n\tif (typeof name !== 'string' && !Array.isArray(name)) {\n\t\tthrow new TypeError('Expected a valid `name`');\n\t}\n\n\tconst {arguments: appArguments = []} = options ?? {};\n\tif (appArguments !== undefined && appArguments !== null && !Array.isArray(appArguments)) {\n\t\tthrow new TypeError('Expected `appArguments` as Array type');\n\t}\n\n\treturn baseOpen({\n\t\t...options,\n\t\tapp: {\n\t\t\tname,\n\t\t\targuments: appArguments,\n\t\t},\n\t});\n};\n\nfunction detectArchBinary(binary) {\n\tif (typeof binary === 'string' || Array.isArray(binary)) {\n\t\treturn binary;\n\t}\n\n\tconst {[arch]: archBinary} = binary;\n\n\tif (!archBinary) {\n\t\tthrow new Error(`${arch} is not supported`);\n\t}\n\n\treturn archBinary;\n}\n\nfunction detectPlatformBinary({[platform]: platformBinary}, {wsl}) {\n\tif (wsl && isWsl) {\n\t\treturn detectArchBinary(wsl);\n\t}\n\n\tif (!platformBinary) {\n\t\tthrow new Error(`${platform} is not supported`);\n\t}\n\n\treturn detectArchBinary(platformBinary);\n}\n\nexport const apps = {};\n\ndefineLazyProperty(apps, 'chrome', () => detectPlatformBinary({\n\tdarwin: 'google chrome',\n\twin32: 'chrome',\n\tlinux: ['google-chrome', 'google-chrome-stable', 'chromium'],\n}, {\n\twsl: {\n\t\tia32: '/mnt/c/Program Files (x86)/Google/Chrome/Application/chrome.exe',\n\t\tx64: ['/mnt/c/Program Files/Google/Chrome/Application/chrome.exe', '/mnt/c/Program Files (x86)/Google/Chrome/Application/chrome.exe'],\n\t},\n}));\n\ndefineLazyProperty(apps, 'firefox', () => detectPlatformBinary({\n\tdarwin: 'firefox',\n\twin32: 'C:\\\\Program Files\\\\Mozilla Firefox\\\\firefox.exe',\n\tlinux: 'firefox',\n}, {\n\twsl: '/mnt/c/Program Files/Mozilla Firefox/firefox.exe',\n}));\n\ndefineLazyProperty(apps, 'edge', () => detectPlatformBinary({\n\tdarwin: 'microsoft edge',\n\twin32: 'msedge',\n\tlinux: ['microsoft-edge', 'microsoft-edge-dev'],\n}, {\n\twsl: '/mnt/c/Program Files (x86)/Microsoft/Edge/Application/msedge.exe',\n}));\n\ndefineLazyProperty(apps, 'browser', () => 'browser');\n\ndefineLazyProperty(apps, 'browserPrivate', () => 'browserPrivate');\n\nexport default open;\n", "export default function defineLazyProperty(object, propertyName, valueGetter) {\n\tconst define = value => Object.defineProperty(object, propertyName, {value, enumerable: true, writable: true});\n\n\tObject.defineProperty(object, propertyName, {\n\t\tconfigurable: true,\n\t\tenumerable: true,\n\t\tget() {\n\t\t\tconst result = valueGetter();\n\t\t\tdefine(result);\n\t\t\treturn result;\n\t\t},\n\t\tset(value) {\n\t\t\tdefine(value);\n\t\t}\n\t});\n\n\treturn object;\n}\n", "import {promisify} from 'node:util';\nimport process from 'node:process';\nimport {execFile} from 'node:child_process';\nimport defaultBrowserId from 'default-browser-id';\nimport bundleName from 'bundle-name';\nimport windows from './windows.js';\n\nconst execFileAsync = promisify(execFile);\n\n// Inlined: https://github.com/sindresorhus/titleize/blob/main/index.js\nconst titleize = string => string.toLowerCase().replaceAll(/(?:^|\\s|-)\\S/g, x => x.toUpperCase());\n\nexport default async function defaultBrowser() {\n\tif (process.platform === 'darwin') {\n\t\tconst id = await defaultBrowserId();\n\t\tconst name = await bundleName(id);\n\t\treturn {name, id};\n\t}\n\n\tif (process.platform === 'linux') {\n\t\tconst {stdout} = await execFileAsync('xdg-mime', ['query', 'default', 'x-scheme-handler/http']);\n\t\tconst id = stdout.trim();\n\t\tconst name = titleize(id.replace(/.desktop$/, '').replace('-', ' '));\n\t\treturn {name, id};\n\t}\n\n\tif (process.platform === 'win32') {\n\t\treturn windows();\n\t}\n\n\tthrow new Error('Only macOS, Linux, and Windows are supported');\n}\n", "import {promisify} from 'node:util';\nimport process from 'node:process';\nimport {execFile} from 'node:child_process';\n\nconst execFileAsync = promisify(execFile);\n\nexport default async function defaultBrowserId() {\n\tif (process.platform !== 'darwin') {\n\t\tthrow new Error('macOS only');\n\t}\n\n\tconst {stdout} = await execFileAsync('defaults', ['read', 'com.apple.LaunchServices/com.apple.launchservices.secure', 'LSHandlers']);\n\n\t// `(?!-)` is to prevent matching `LSHandlerRoleAll = \"-\";`.\n\tconst match = /LSHandlerRoleAll = \"(?!-)(?<id>[^\"]+?)\";\\s+?LSHandlerURLScheme = (?:http|https);/.exec(stdout);\n\n\treturn match?.groups.id ?? 'com.apple.Safari';\n}\n", "import {runAppleScript} from 'run-applescript';\n\nexport default async function bundleName(bundleId) {\n\treturn runAppleScript(`tell application \"Finder\" to set app_path to application file id \"${bundleId}\" as string\\ntell application \"System Events\" to get value of property list item \"CFBundleName\" of property list file (app_path & \":Contents:Info.plist\")`);\n}\n", "import process from 'node:process';\nimport {promisify} from 'node:util';\nimport {execFile, execFileSync} from 'node:child_process';\n\nconst execFileAsync = promisify(execFile);\n\nexport async function runAppleScript(script, {humanReadableOutput = true} = {}) {\n\tif (process.platform !== 'darwin') {\n\t\tthrow new Error('macOS only');\n\t}\n\n\tconst outputArguments = humanReadableOutput ? [] : ['-ss'];\n\n\tconst {stdout} = await execFileAsync('osascript', ['-e', script, outputArguments]);\n\treturn stdout.trim();\n}\n\nexport function runAppleScriptSync(script, {humanReadableOutput = true} = {}) {\n\tif (process.platform !== 'darwin') {\n\t\tthrow new Error('macOS only');\n\t}\n\n\tconst outputArguments = humanReadableOutput ? [] : ['-ss'];\n\n\tconst stdout = execFileSync('osascript', ['-e', script, ...outputArguments], {\n\t\tencoding: 'utf8',\n\t\tstdio: ['ignore', 'pipe', 'ignore'],\n\t\ttimeout: 500,\n\t});\n\n\treturn stdout.trim();\n}\n", "import {promisify} from 'node:util';\nimport {execFile} from 'node:child_process';\n\nconst execFileAsync = promisify(execFile);\n\n// Windows doesn't have browser IDs in the same way macOS/Linux does so we give fake\n// ones that look real and match the macOS/Linux versions for cross-platform apps.\nconst windowsBrowserProgIds = {\n\tAppXq0fevzme2pys62n3e0fbqa7peapykr8v: {name: 'Edge', id: 'com.microsoft.edge.old'},\n\tMSEdgeDHTML: {name: 'Edge', id: 'com.microsoft.edge'}, // On macOS, it's \"com.microsoft.edgemac\"\n\tMSEdgeHTM: {name: 'Edge', id: 'com.microsoft.edge'}, // Newer Edge/Win10 releases\n\t'IE.HTTP': {name: 'Internet Explorer', id: 'com.microsoft.ie'},\n\tFirefoxURL: {name: 'Firefox', id: 'org.mozilla.firefox'},\n\tChromeHTML: {name: 'Chrome', id: 'com.google.chrome'},\n\tBraveHTML: {name: 'Brave', id: 'com.brave.Browser'},\n\tBraveBHTML: {name: 'Brave Beta', id: 'com.brave.Browser.beta'},\n\tBraveSSHTM: {name: 'Brave Nightly', id: 'com.brave.Browser.nightly'},\n};\n\nexport class UnknownBrowserError extends Error {}\n\nexport default async function defaultBrowser(_execFileAsync = execFileAsync) {\n\tconst {stdout} = await _execFileAsync('reg', [\n\t\t'QUERY',\n\t\t' HKEY_CURRENT_USER\\\\Software\\\\Microsoft\\\\Windows\\\\Shell\\\\Associations\\\\UrlAssociations\\\\http\\\\UserChoice',\n\t\t'/v',\n\t\t'ProgId',\n\t]);\n\n\tconst match = /ProgId\\s*REG_SZ\\s*(?<id>\\S+)/.exec(stdout);\n\tif (!match) {\n\t\tthrow new UnknownBrowserError(`Cannot find Windows browser in stdout: ${JSON.stringify(stdout)}`);\n\t}\n\n\tconst {id} = match.groups;\n\n\tconst browser = windowsBrowserProgIds[id];\n\tif (!browser) {\n\t\tthrow new UnknownBrowserError(`Unknown browser ID: ${id}`);\n\t}\n\n\treturn browser;\n}\n", "import assert from \"node:assert\";\nimport { z } from \"zod\";\nimport { login } from \"../../commands/login.js\";\nimport type { Command } from \"../command/command.js\";\nimport type { Context } from \"../command/context.js\";\nimport { config } from \"../config/config.js\";\nimport { maybeLoadAuthHeaders, swallowUnauthorized } from \"../http/auth.js\";\nimport { http } from \"../http/http.js\";\nimport { confirm } from \"../output/confirm.js\";\nimport { println } from \"../output/print.js\";\nimport { setSentryUser } from \"../output/sentry.js\";\n\nconst User = z.object({\n id: z.union([z.string(), z.number()]).transform(Number),\n name: z.string().nullish(),\n email: z.string(),\n});\n\nexport type User = z.infer<typeof User>;\n\n/**\n * Retrieves the currently logged in user from Gadgets API.\n *\n * @returns A Promise that resolves to a User object representing the\n * current user, or undefined if the user is not authenticated.\n */\nexport const getUser = async (ctx: Context): Promise<User | undefined> => {\n const headers = maybeLoadAuthHeaders(ctx);\n if (!headers) {\n return undefined;\n }\n\n try {\n const json = await http({\n context: { ctx },\n url: `https://${config.domains.services}/auth/api/current-user`,\n headers,\n responseType: \"json\",\n resolveBodyOnly: true,\n });\n\n const user = User.parse(json);\n ctx.log.info(\"loaded user\", { user: { id: user.id } }, { user });\n\n setSentryUser(user);\n\n return user;\n } catch (error) {\n swallowUnauthorized(ctx, error);\n return undefined;\n }\n};\n\n/**\n * Retrieves the current user or prompts the user to log in if not\n * already logged in.\n *\n * @param ctx - The current context.\n * @returns A Promise that resolves to the current user.\n */\nexport const getUserOrLogin = async (ctx: Context, command: Command): Promise<User> => {\n let user = await getUser(ctx);\n if (user) {\n return user;\n }\n\n ctx.log.info(\"prompting user to log in\");\n println({\n ensureEmptyLineAbove: true,\n content: `You must be logged in to use \"ggt ${command}\".`,\n });\n\n await confirm({ ensureEmptyLineAbove: true, content: \"Would you like to log in?\" });\n await login(ctx, { _: [] });\n\n user = await getUser(ctx);\n assert(user, \"missing user after successful login\");\n\n return user;\n};\n", "import chalk from \"chalk\";\nimport process from \"node:process\";\nimport type { Promisable } from \"type-fest\";\nimport { defaults } from \"../util/object.js\";\nimport type { PartialExcept } from \"../util/types.js\";\nimport { output } from \"./output.js\";\nimport { println, type PrintOptions } from \"./print.js\";\nimport { Prompt, type StdinKey } from \"./prompt.js\";\nimport { sprintln } from \"./sprint.js\";\n\nexport type ConfirmOptions = PrintOptions & {\n /**\n * If `true`, ggt will exit if the user selects \"No\".\n *\n * @default true\n */\n exitWhenNo?: boolean;\n\n /**\n * What to do if ggt is not running in an interactive terminal.\n *\n * @default ```\n * println(options)(text);\n * println({ ensureEmptyLineAbove: true })`\n * Aborting because ggt is not running in an interactive terminal.\n * `;\n * process.exit(1);\n * ```\n */\n whenNotInteractive?: () => Promisable<void>;\n};\n\nexport type confirm = typeof confirm;\n\nexport const confirm = (contentOrOptions: string | ConfirmOptions): Promise<void> => {\n let options: ConfirmOptions;\n if (typeof contentOrOptions === \"string\") {\n options = { content: contentOrOptions };\n } else {\n options = contentOrOptions;\n }\n\n options = defaults(options, {\n ensureEmptyLineAbove: true,\n ensureNewLine: true,\n exitWhenNo: true,\n });\n\n if (!output.isInteractive) {\n const whenNotInteractive =\n options.whenNotInteractive ??\n (() => {\n println(options);\n println({ ensureEmptyLineAbove: true, content: \"Aborting because ggt is not running in an interactive terminal.\" });\n process.exit(1);\n });\n\n return Promise.resolve(whenNotInteractive());\n }\n\n return new Promise((resolve) => {\n const conf = new Confirm(options);\n conf.on(\"submit\", resolve);\n conf.on(\"exit\", () => process.exit(0));\n conf.on(\"abort\", () => process.exit(1));\n });\n};\n\n/**\n * Inspired by `prompts`:\n * https://github.com/terkelg/prompts/blob/e0519913ec4fcc6746bb3d97d8cd0960c3f3ffde/lib/elements/confirm.js\n *\n * MIT License\n *\n * Copyright (c) 2018 Terkel Gjervig Nielsen\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\nexport class Confirm extends Prompt {\n override value: boolean | undefined = undefined;\n defaultValue = false;\n options;\n\n constructor(options: PartialExcept<ConfirmOptions, \"content\">) {\n super();\n\n this.options = defaults(options, {\n exitWhenNo: true,\n ensureEmptyLineAbove: true,\n });\n\n this.render();\n }\n\n reset(): void {\n this.value = this.defaultValue;\n this.fire();\n this.render();\n }\n\n exit(): void {\n this.abort();\n }\n\n abort(): void {\n this.value = false;\n this.done = this.aborted = true;\n this.fire();\n this.render(false);\n this.close();\n\n if (this.options.exitWhenNo) {\n process.exit(0);\n }\n }\n\n submit(): void {\n this.value = this.value ?? false;\n this.done = true;\n this.aborted = false;\n this.fire();\n this.render();\n this.close();\n\n if (this.options.exitWhenNo && !this.value) {\n process.exit(0);\n }\n }\n\n override _(char: string, _key: StdinKey): void {\n if (char.toLowerCase() === \"y\") {\n this.value = true;\n this.submit();\n return;\n }\n\n if (char.toLowerCase() === \"n\") {\n this.value = false;\n this.submit();\n return;\n }\n\n this.bell();\n }\n\n override render(value = this.value): void {\n super.render();\n\n if (this.done) {\n output.persistPrompt(\n sprintln({\n ...this.options,\n content: `${this.options.content} ${value ? chalk.bold.greenBright(\"Yes.\") : chalk.bold.redBright(\"No.\")}`,\n }),\n );\n return;\n }\n\n output.updatePrompt(\n sprintln({\n ...this.options,\n content: `${this.options.content} ${this.defaultValue ? chalk.blueBright(\"[Y/n] \") : chalk.blueBright(\"[y/N] \")}`,\n }),\n );\n }\n}\n"],
5
- "mappings": "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",
6
- "names": ["init_cjs", "init_cjs", "net", "os", "Locked", "__name", "port", "lockedPorts", "releaseOldLockedPortsIntervalMs", "timeout", "getLocalHosts", "__name", "interfaces", "os", "results", "_interface", "config", "checkAvailablePort", "options", "resolve", "reject", "server", "net", "port", "getAvailablePort", "hosts", "host", "error", "portCheckSequence", "ports", "getPorts", "exclude", "excludeIterable", "element", "lockedPorts", "releaseOldLockedPortsIntervalMs", "availablePort", "Locked", "assert", "http", "init_cjs", "process", "Buffer", "path", "fileURLToPath", "util", "childProcess", "fs", "fsConstants", "init_cjs", "defineLazyProperty", "object", "propertyName", "valueGetter", "define", "__name", "value", "result", "init_cjs", "promisify", "process", "execFile", "init_cjs", "promisify", "process", "execFile", "execFileAsync", "promisify", "execFile", "defaultBrowserId", "process", "stdout", "__name", "init_cjs", "init_cjs", "process", "promisify", "execFile", "execFileSync", "execFileAsync", "promisify", "execFile", "runAppleScript", "script", "humanReadableOutput", "process", "outputArguments", "stdout", "__name", "bundleName", "bundleId", "runAppleScript", "__name", "init_cjs", "promisify", "execFile", "execFileAsync", "promisify", "execFile", "windowsBrowserProgIds", "UnknownBrowserError", "__name", "defaultBrowser", "_execFileAsync", "stdout", "match", "id", "browser", "execFileAsync", "promisify", "execFile", "titleize", "__name", "string", "x", "defaultBrowser", "process", "id", "defaultBrowserId", "bundleName", "stdout", "execFile", "util", "childProcess", "__dirname", "path", "fileURLToPath", "localXdgOpenPath", "platform", "arch", "process", "getWslDrivesMountPoint", "defaultMountPoint", "mountPoint", "configFilePath", "isConfigFileExists", "fs", "fsConstants", "configContent", "configMountPoint", "getPowershellPathFromWsl", "__name", "getWindowsDefaultBrowserFromWsl", "powershellPath", "encodedCommand", "Buffer", "stdout", "progId", "browserMap", "pTryEach", "array", "mapper", "latestError", "item", "error", "baseOpen", "options", "singleApp", "app", "appArguments", "appName", "ids", "flags", "browser", "is_wsl_default", "defaultBrowser", "browserName", "apps", "command", "cliArguments", "childProcessOptions", "isInsideContainer", "encodedArguments", "argument", "isBundled", "exeLocalXdgOpen", "subprocess", "resolve", "reject", "exitCode", "open", "target", "detectArchBinary", "binary", "arch", "archBinary", "__name", "detectPlatformBinary", "platform", "platformBinary", "wsl", "is_wsl_default", "apps", "defineLazyProperty", "open_default", "open", "init_cjs", "assert", "init_cjs", "process", "confirm", "__name", "contentOrOptions", "options", "defaults", "output", "whenNotInteractive", "println", "process", "resolve", "conf", "Confirm", "Prompt", "char", "_key", "value", "sprintln", "source_default", "User", "z", "getUser", "__name", "ctx", "headers", "maybeLoadAuthHeaders", "json", "http", "config", "user", "setSentryUser", "error", "swallowUnauthorized", "getUserOrLogin", "command", "println", "confirm", "login", "assert", "usage", "__name", "sprint", "run", "ctx", "server", "port", "getPorts", "receiveSession", "resolve", "reject", "http", "req", "res", "landingPage", "config", "assert", "session", "writeSession", "user", "getUser", "println", "error", "url", "open_default", "login"]
7
- }