@gadgetinc/ggt 1.0.5 → 1.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{add-4ME2KTJQ.js → add-JIIVAOWH.js} +2 -2
- package/dist/chunk-APHXRHNI.js +8 -0
- package/dist/{chunk-QEVWPU3D.js.map → chunk-APHXRHNI.js.map} +1 -1
- package/dist/{chunk-GA7AL463.js → chunk-AQRCAWW4.js} +2 -2
- package/dist/{chunk-G3VNV5Z6.js → chunk-BOQUW6DS.js} +3 -3
- package/dist/{chunk-G3VNV5Z6.js.map → chunk-BOQUW6DS.js.map} +3 -3
- package/dist/{chunk-KGSSHEEC.js → chunk-CKSTMUDN.js} +2 -2
- package/dist/{chunk-5DLLJX5F.js → chunk-ERYUXLYS.js} +2 -2
- package/dist/{chunk-IKJVXTZK.js → chunk-GACF5GYF.js} +2 -2
- package/dist/chunk-GBCD37US.js +57 -0
- package/dist/chunk-GBCD37US.js.map +7 -0
- package/dist/chunk-P2XPMNL6.js +183 -0
- package/dist/{chunk-KXK37C5D.js.map → chunk-P2XPMNL6.js.map} +4 -4
- package/dist/{chunk-NJIDVM2C.js → chunk-PSRZ5JH5.js} +2 -2
- package/dist/{chunk-YRP2UZ2I.js → chunk-RJOIQTYZ.js} +3 -3
- package/dist/{chunk-YRP2UZ2I.js.map → chunk-RJOIQTYZ.js.map} +2 -2
- package/dist/chunk-XCHCCJJZ.js +2 -0
- package/dist/deploy-KMGAGIDE.js +30 -0
- package/dist/{deploy-6HOBYPE6.js.map → deploy-KMGAGIDE.js.map} +2 -2
- package/dist/{dev-M3WDGK4D.js → dev-VHJ52BEA.js} +2 -2
- package/dist/{list-725RHWD5.js → list-5E3R22IC.js} +2 -2
- package/dist/login-3DL45WY7.js +2 -0
- package/dist/{logout-UZBACOIX.js → logout-HX6MM4S6.js} +2 -2
- package/dist/main.js +1 -1
- package/dist/{open-GWKGQQG3.js → open-GEEWPSF4.js} +2 -2
- package/dist/{pull-7C5A65KB.js → pull-T2Q4M4UN.js} +2 -2
- package/dist/push-LUW25FYF.js +2 -0
- package/dist/{status-DFKKSRVB.js → status-5VZH3KXH.js} +2 -2
- package/dist/{version-JD42JXWY.js → version-OF4TQ2K6.js} +2 -2
- package/dist/{whoami-I23R6HOG.js → whoami-V3XD27QH.js} +2 -2
- package/package.json +3 -3
- package/dist/chunk-BZY2AIPV.js +0 -57
- package/dist/chunk-BZY2AIPV.js.map +0 -7
- package/dist/chunk-KXK37C5D.js +0 -183
- package/dist/chunk-QEVWPU3D.js +0 -8
- package/dist/chunk-X36GM74C.js +0 -2
- package/dist/deploy-6HOBYPE6.js +0 -30
- package/dist/login-I4RGMDLE.js +0 -2
- package/dist/push-LPUIR4EO.js +0 -2
- /package/dist/{add-4ME2KTJQ.js.map → add-JIIVAOWH.js.map} +0 -0
- /package/dist/{chunk-GA7AL463.js.map → chunk-AQRCAWW4.js.map} +0 -0
- /package/dist/{chunk-KGSSHEEC.js.map → chunk-CKSTMUDN.js.map} +0 -0
- /package/dist/{chunk-5DLLJX5F.js.map → chunk-ERYUXLYS.js.map} +0 -0
- /package/dist/{chunk-IKJVXTZK.js.map → chunk-GACF5GYF.js.map} +0 -0
- /package/dist/{chunk-NJIDVM2C.js.map → chunk-PSRZ5JH5.js.map} +0 -0
- /package/dist/{chunk-X36GM74C.js.map → chunk-XCHCCJJZ.js.map} +0 -0
- /package/dist/{dev-M3WDGK4D.js.map → dev-VHJ52BEA.js.map} +0 -0
- /package/dist/{list-725RHWD5.js.map → list-5E3R22IC.js.map} +0 -0
- /package/dist/{login-I4RGMDLE.js.map → login-3DL45WY7.js.map} +0 -0
- /package/dist/{logout-UZBACOIX.js.map → logout-HX6MM4S6.js.map} +0 -0
- /package/dist/{open-GWKGQQG3.js.map → open-GEEWPSF4.js.map} +0 -0
- /package/dist/{pull-7C5A65KB.js.map → pull-T2Q4M4UN.js.map} +0 -0
- /package/dist/{push-LPUIR4EO.js.map → push-LUW25FYF.js.map} +0 -0
- /package/dist/{status-DFKKSRVB.js.map → status-5VZH3KXH.js.map} +0 -0
- /package/dist/{version-JD42JXWY.js.map → version-OF4TQ2K6.js.map} +0 -0
- /package/dist/{whoami-I23R6HOG.js.map → whoami-V3XD27QH.js.map} +0 -0
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{g as o}from"./chunk-5WC5D4WL.js";o();import a from"node:assert";var r=["dev","deploy","status","push","pull","add","open","list","login","logout","whoami","version"],s=e=>r.includes(e),m=async e=>{a(s(e),`invalid command: ${e}`);let t;switch(e){case"dev":t=await import("./dev-VHJ52BEA.js");break;case"deploy":t=await import("./deploy-KMGAGIDE.js");break;case"status":t=await import("./status-5VZH3KXH.js");break;case"push":t=await import("./push-LUW25FYF.js");break;case"pull":t=await import("./pull-T2Q4M4UN.js");break;case"add":t=await import("./add-JIIVAOWH.js");break;case"open":t=await import("./open-GEEWPSF4.js");break;case"list":t=await import("./list-5E3R22IC.js");break;case"login":t=await import("./login-3DL45WY7.js");break;case"logout":t=await import("./logout-HX6MM4S6.js");break;case"whoami":t=await import("./whoami-V3XD27QH.js");break;case"version":t=await import("./version-OF4TQ2K6.js");break}return t};export{r as a,s as b,m as c};
|
|
2
|
+
//# sourceMappingURL=chunk-XCHCCJJZ.js.map
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import"./chunk-XCHCCJJZ.js";import{a as $}from"./chunk-HKBXEZNF.js";import{a as k}from"./chunk-GACF5GYF.js";import{c as _,h as p,m as B}from"./chunk-P2XPMNL6.js";import{a as L,c as O,d as w,i as R,n as C,o as U}from"./chunk-RJOIQTYZ.js";import"./chunk-ERYUXLYS.js";import"./chunk-BOQUW6DS.js";import{b as P}from"./chunk-APHXRHNI.js";import"./chunk-D2K5XPNJ.js";import"./chunk-Q5N5L6H3.js";import{c as g}from"./chunk-PSRZ5JH5.js";import{b as d,c as b}from"./chunk-CKSTMUDN.js";import"./chunk-AQRCAWW4.js";import{N as T,U as m,W as n,m as G}from"./chunk-GBCD37US.js";import"./chunk-F3EZ4KS3.js";import"./chunk-GOBNB5VT.js";import{g as v}from"./chunk-5WC5D4WL.js";v();import x from"node:assert";var ne={...k,"--env":{type:String,alias:["-e","--environment","--from"]},"--allow-problems":{type:Boolean,alias:"--allow-issues"},"--allow-charges":{type:Boolean}},ae=s=>m`
|
|
2
|
+
Deploys your app to production.
|
|
3
|
+
|
|
4
|
+
This command first performs a sync to ensure that your local and environment directories
|
|
5
|
+
match, changes are tracked since last sync. If any conflicts are detected, they must be
|
|
6
|
+
resolved before deployment.
|
|
7
|
+
|
|
8
|
+
{gray Usage}
|
|
9
|
+
$ ggt deploy [options]
|
|
10
|
+
|
|
11
|
+
{gray Options}
|
|
12
|
+
-a, --app <app_name> Selects a specific app to deploy. Default set on ".gadget/sync.json"
|
|
13
|
+
--from, -e, --env <env_name> Selects a specific environment to sync and deploy from. Default set on ".gadget/sync.json"
|
|
14
|
+
--force Deploys by discarding any changes made to the environment directory since last sync
|
|
15
|
+
--allow-different-directory Deploys from any local directory with existing files, even if the ".gadget/sync.json" file is missing
|
|
16
|
+
--allow-different-app Deploys a different app using the --app command, instead of the one specified in the “.gadget/sync.json” file
|
|
17
|
+
--allow-problems Deploys despite any existing issues found in the app (gelly errors, typescript errors etc.)
|
|
18
|
+
--allow-charges Deploys even if it results in additional charges to your plan
|
|
19
|
+
|
|
20
|
+
{gray Examples}
|
|
21
|
+
Deploys code from the staging environment of a myBlog
|
|
22
|
+
{cyanBright $ ggt deploy -a myBlog -from staging}
|
|
23
|
+
`,ie=async s=>{let y=await U(process.cwd()),t=await C.loadOrInit(s,{directory:y});n({ensureEmptyLineAbove:!0})`
|
|
24
|
+
Deploying ${t.env.name} to ${d(t.app.primaryDomain,`https://${t.app.primaryDomain}/`)}
|
|
25
|
+
`;let S=new B(t),a=await S.hashes(s);if(!a.inSync&&(a.localChangesToPush.size>0||!a.onlyDotGadgetFilesChanged)){await S.print(s,{hashes:a}),n({ensureEmptyLineAbove:!0})`
|
|
26
|
+
Your environment's files must match your local files before you can deploy.
|
|
27
|
+
`;let o=!1;if(T.isInteractive){let r;switch(!0){case a.bothChanged:r=m`Would you like to push your local changes and {underline discard your environment's} changes now?`,o=!0;break;case a.localChangesToPush.size>0:r=m`Would you like to push your local changes now?`;break;case a.environmentChanges.size>0:r=m`Do you want to {underline discard your environment's} changes now?`,o=!0;break;default:$("no changes to push or discard")}await g({ensureEmptyLineAbove:!0})(r)}else n({ensureEmptyLineAbove:!0})`
|
|
28
|
+
Assuming you want to push your local files now.
|
|
29
|
+
`;await S.push(s,{hashes:a,force:o||s.args["--force"]})}let E={localFilesVersion:String(t.filesVersion),force:s.args["--allow-problems"],allowCharges:s.args["--allow-charges"]},u,l=e.NOT_STARTED,N=!1,A=t.edit.subscribe({subscription:_,variables:E,onError:async o=>{if(s.log.error("failed to deploy",{error:o}),u?.fail(I(t,l)+" "+p()),G(o.cause)){let r=o.cause[0];switch(x(r,"expected graphqlError to be defined"),!0){case r.extensions.requiresUpgrade:n({ensureEmptyLineAbove:!0})(r.message.replace(/GGT_PAYMENT_REQUIRED:?\s*/,"")),process.exit(1);break;case r.extensions.requiresAdditionalCharge:n({ensureEmptyLineAbove:!0})(r.message.replace(/GGT_PAYMENT_REQUIRED:?\s*/,"")),await g({ensureEmptyLineAbove:!0})("Do you want to continue?"),A.resubscribe({...E,allowCharges:!0});return}}await b(s,o)},onData:async({publishStatus:o})=>{if(!o){s.log.warn("received empty publish status");return}let{publishStarted:r,progress:f,issues:h,status:c}=o;if(!N&&h.length>0){N=!0;let i=h.filter(D=>D.severity===L.Fatal);i.length>0&&await b(s,new R(w(i))),n({ensureEmptyLineAbove:!0})`{bold Problems found.}`,O({problems:w(h)}),r?(x(s.args["--allow-problems"],"expected --allow-problems to be true"),n({ensureEmptyLineAbove:!0})`Deploying regardless of problems because {bold "--allow-problems"} was passed.`):(await g("Do you want to continue?"),A.resubscribe({...E,force:!0}));return}if(c?.code==="Errored"){u?.fail(I(t,l)+" "+p()),c.message&&n({ensureEmptyLineAbove:!0})`{red ${c.message}}`,c.output&&n({ensureEmptyLineAbove:!0})`${d("Check logs",c.output)}`;return}if(f===e.COMPLETED){u?.succeed(M(t,l));let i=m`{green Deploy successful!}`;c?.output&&(i+=` ${d("Check logs",c.output)}.`),n({ensureEmptyLineAbove:!0})(i);return}if(f!==l){let i=I(t,f);if(i!==u?.text){u?.succeed(M(t,l));let D=l===e.NOT_STARTED||!T.isInteractive;u=P({ensureEmptyLineAbove:D})(i)}l=f}},onComplete:()=>{A.unsubscribe()}})},e=Object.freeze({NOT_STARTED:"NOT_STARTED",STARTING:"STARTING",BUILDING_ASSETS:"BUILDING_ASSETS",UPLOADING_ASSETS:"UPLOADING_ASSETS",CONVERGING_STORAGE:"CONVERGING_STORAGE",PUBLISHING_TREE:"PUBLISHING_TREE",RELOADING_SANDBOX:"RELOADING_SANDBOX",COMPLETED:"COMPLETED"}),I=(s,y)=>{switch(y){case e.NOT_STARTED:case e.STARTING:case e.BUILDING_ASSETS:case e.UPLOADING_ASSETS:return"Building frontend assets.";case e.CONVERGING_STORAGE:return"Setting up database.";case e.PUBLISHING_TREE:return`Copying ${s.env.name}.`;case e.RELOADING_SANDBOX:return"Restarting app.";case e.COMPLETED:return"Deploy complete!";default:return"Unknown step."}},M=(s,y)=>{switch(y){case e.NOT_STARTED:case e.STARTING:case e.BUILDING_ASSETS:case e.UPLOADING_ASSETS:return`Built frontend assets. ${p()}`;case e.CONVERGING_STORAGE:return`Setup database. ${p()}`;case e.PUBLISHING_TREE:return`Copied ${s.env.name}. ${p()}`;case e.RELOADING_SANDBOX:return`Restarted app. ${p()}`;case e.COMPLETED:return"Deploy successful!";default:return`Completed unknown step. ${p()}`}};export{e as AppDeploymentSteps,ne as args,ie as run,M as stepToSpinnerEnd,I as stepToSpinnerStart,ae as usage};
|
|
30
|
+
//# sourceMappingURL=deploy-KMGAGIDE.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/commands/deploy.ts"],
|
|
4
|
-
"sourcesContent": ["import assert from \"node:assert\";\nimport terminalLink from \"terminal-link\";\nimport { PUBLISH_STATUS_SUBSCRIPTION } from \"../services/app/edit/operation.js\";\nimport { type Run, type Usage } from \"../services/command/command.js\";\nimport { DeployDisallowedError } from \"../services/filesync/error.js\";\nimport { FileSync } from \"../services/filesync/filesync.js\";\nimport { SyncJson, loadSyncJsonDirectory } from \"../services/filesync/sync-json.js\";\nimport { confirm } from \"../services/output/confirm.js\";\nimport { output } from \"../services/output/output.js\";\nimport { println } from \"../services/output/print.js\";\nimport { ProblemSeverity, printProblems, publishIssuesToProblems } from \"../services/output/problems.js\";\nimport { reportErrorAndExit } from \"../services/output/report.js\";\nimport { spin, type spinner } from \"../services/output/spinner.js\";\nimport { sprint } from \"../services/output/sprint.js\";\nimport { ts } from \"../services/output/timestamp.js\";\nimport { unreachable } from \"../services/util/assert.js\";\nimport { isGraphQLErrors } from \"../services/util/is.js\";\nimport { args as PushArgs } from \"./push.js\";\n\nexport type DeployArgs = typeof args;\n\nexport const args = {\n ...PushArgs,\n \"--env\": { type: String, alias: [\"-e\", \"--environment\", \"--from\"] },\n \"--allow-problems\": { type: Boolean, alias: \"--allow-issues\" },\n \"--allow-charges\": { type: Boolean },\n};\n\nexport const usage: Usage = (_ctx) => {\n return sprint`\n Deploys your app to production.\n\n This command first performs a sync to ensure that your local and environment directories\n match, changes are tracked since last sync. If any conflicts are detected, they must be\n resolved before deployment.\n\n {gray Usage}\n $ ggt deploy [options]\n\n {gray Options}\n -a, --app <app_name> Selects a specific app to deploy. Default set on \".gadget/sync.json\"\n --from, -e, --env <env_name> Selects a specific environment to sync and deploy from. Default set on \".gadget/sync.json\"\n --force Deploys by discarding any changes made to the environment directory since last sync\n --allow-different-directory Deploys from any local directory with existing files, even if the \".gadget/sync.json\" file is missing\n --allow-different-app Deploys a different app using the --app command, instead of the one specified in the \u201C.gadget/sync.json\u201D file\n --allow-problems Deploys despite any existing issues found in the app (gelly errors, typescript errors etc.)\n --allow-charges Deploys even if it results in additional charges to your plan\n\n {gray Examples}\n Deploys code from the staging environment of a myBlog\n {cyanBright $ ggt deploy -a myBlog -from staging}\n`;\n};\n\nexport const run: Run<DeployArgs> = async (ctx) => {\n const directory = await loadSyncJsonDirectory(process.cwd());\n const syncJson = await SyncJson.loadOrInit(ctx, { directory });\n\n println({ ensureEmptyLineAbove: true })`\n Deploying ${syncJson.env.name} to ${terminalLink(syncJson.app.primaryDomain, `https://${syncJson.app.primaryDomain}/`)}\n `;\n\n const filesync = new FileSync(syncJson);\n const hashes = await filesync.hashes(ctx);\n if (!hashes.inSync && (hashes.localChangesToPush.size > 0 || !hashes.onlyDotGadgetFilesChanged)) {\n // the following is true:\n // 1. our local files don't match our environment's files\n // 2. we have local changes to push or non .gadget/ files have changed on our environment\n // therefor, we need to push before we can deploy\n await filesync.print(ctx, { hashes });\n\n println({ ensureEmptyLineAbove: true })`\n Your environment's files must match your local files before you can deploy.\n `;\n\n // some scenarios make the confirmation to push changes imply the\n // --force flag (e.g. when both local and environment files have\n // changed, or when only environment files have changed)\n let implicitForce = false;\n\n if (output.isInteractive) {\n let message: string;\n switch (true) {\n case hashes.bothChanged:\n message = sprint`Would you like to push your local changes and {underline discard your environment's} changes now?`;\n implicitForce = true;\n break;\n case hashes.localChangesToPush.size > 0:\n message = sprint`Would you like to push your local changes now?`;\n break;\n case hashes.environmentChanges.size > 0:\n message = sprint`Do you want to {underline discard your environment's} changes now?`;\n implicitForce = true;\n break;\n default:\n unreachable(\"no changes to push or discard\");\n }\n\n await confirm({ ensureEmptyLineAbove: true })(message);\n } else {\n println({ ensureEmptyLineAbove: true })`\n Assuming you want to push your local files now.\n `;\n }\n\n await filesync.push(ctx, { hashes, force: implicitForce || ctx.args[\"--force\"] });\n }\n\n const variables = {\n localFilesVersion: String(syncJson.filesVersion),\n force: ctx.args[\"--allow-problems\"],\n allowCharges: ctx.args[\"--allow-charges\"],\n };\n\n let spinner: spinner | undefined;\n let currentStep: AppDeploymentSteps = AppDeploymentSteps.NOT_STARTED;\n let printedProblems = false;\n\n const subscription = syncJson.edit.subscribe({\n subscription: PUBLISH_STATUS_SUBSCRIPTION,\n variables,\n onError: async (error) => {\n ctx.log.error(\"failed to deploy\", { error });\n spinner?.fail(stepToSpinnerStart(syncJson, currentStep) + \" \" + ts());\n\n if (isGraphQLErrors(error.cause)) {\n const graphqlError = error.cause[0];\n assert(graphqlError, \"expected graphqlError to be defined\");\n\n switch (true) {\n case graphqlError.extensions[\"requiresUpgrade\"]:\n println({ ensureEmptyLineAbove: true })(graphqlError.message.replace(/GGT_PAYMENT_REQUIRED:?\\s*/, \"\"));\n process.exit(1);\n break;\n case graphqlError.extensions[\"requiresAdditionalCharge\"]:\n println({ ensureEmptyLineAbove: true })(graphqlError.message.replace(/GGT_PAYMENT_REQUIRED:?\\s*/, \"\"));\n await confirm({ ensureEmptyLineAbove: true })(\"Do you want to continue?\");\n subscription.resubscribe({ ...variables, allowCharges: true });\n return;\n }\n }\n\n await reportErrorAndExit(ctx, error);\n },\n onData: async ({ publishStatus }): Promise<void> => {\n if (!publishStatus) {\n ctx.log.warn(\"received empty publish status\");\n return;\n }\n\n const { publishStarted, progress: step, issues, status } = publishStatus;\n if (!printedProblems && issues.length > 0) {\n printedProblems = true;\n\n const fatalIssues = issues.filter((issue) => issue.severity === ProblemSeverity.Fatal);\n if (fatalIssues.length > 0) {\n await reportErrorAndExit(ctx, new DeployDisallowedError(publishIssuesToProblems(fatalIssues)));\n }\n\n println({ ensureEmptyLineAbove: true })`{bold Problems found.}`;\n printProblems({ problems: publishIssuesToProblems(issues) });\n\n if (!publishStarted) {\n await confirm(\"Do you want to continue?\");\n subscription.resubscribe({ ...variables, force: true });\n } else {\n assert(ctx.args[\"--allow-problems\"], \"expected --allow-problems to be true\");\n println({ ensureEmptyLineAbove: true })`Deploying regardless of problems because {bold \"--allow-problems\"} was passed.`;\n }\n\n return;\n }\n\n if (status?.code === \"Errored\") {\n subscription.unsubscribe();\n spinner?.fail(stepToSpinnerStart(syncJson, currentStep) + \" \" + ts());\n\n if (status.message) {\n println({ ensureEmptyLineAbove: true })`{red ${status.message}}`;\n }\n if (status.output) {\n println({ ensureEmptyLineAbove: true })`${terminalLink(\"Check logs\", status.output)}`;\n }\n return;\n }\n\n if (step === AppDeploymentSteps.COMPLETED) {\n subscription.unsubscribe();\n spinner?.succeed(stepToSpinnerEnd(syncJson, currentStep));\n\n let message = sprint`{green Deploy successful!}`;\n if (status?.output) {\n message += ` ${terminalLink(\"Check logs\", status.output)}.`;\n }\n\n println({ ensureEmptyLineAbove: true })(message);\n return;\n }\n\n if (step !== currentStep) {\n const spinnerText = stepToSpinnerStart(syncJson, step);\n if (spinnerText !== spinner?.text) {\n // stop the current spinner, if any, and start a new one\n spinner?.succeed(stepToSpinnerEnd(syncJson, currentStep));\n\n const ensureEmptyLineAbove = currentStep === AppDeploymentSteps.NOT_STARTED || !output.isInteractive;\n spinner = spin({ ensureEmptyLineAbove })(spinnerText);\n }\n\n currentStep = step as AppDeploymentSteps;\n }\n },\n onComplete: async () => {\n await syncJson.edit.dispose();\n },\n });\n};\n\nexport const AppDeploymentSteps = Object.freeze({\n NOT_STARTED: \"NOT_STARTED\",\n STARTING: \"STARTING\",\n BUILDING_ASSETS: \"BUILDING_ASSETS\",\n UPLOADING_ASSETS: \"UPLOADING_ASSETS\",\n CONVERGING_STORAGE: \"CONVERGING_STORAGE\",\n PUBLISHING_TREE: \"PUBLISHING_TREE\",\n RELOADING_SANDBOX: \"RELOADING_SANDBOX\",\n COMPLETED: \"COMPLETED\",\n});\n\nexport type AppDeploymentSteps = (typeof AppDeploymentSteps)[keyof typeof AppDeploymentSteps];\n\nexport const stepToSpinnerStart = (syncJson: SyncJson, step: string): string => {\n switch (step) {\n case AppDeploymentSteps.NOT_STARTED:\n case AppDeploymentSteps.STARTING:\n case AppDeploymentSteps.BUILDING_ASSETS:\n case AppDeploymentSteps.UPLOADING_ASSETS:\n return \"Building frontend assets.\";\n case AppDeploymentSteps.CONVERGING_STORAGE:\n return \"Setting up database.\";\n case AppDeploymentSteps.PUBLISHING_TREE:\n return `Copying ${syncJson.env.name}.`;\n case AppDeploymentSteps.RELOADING_SANDBOX:\n return \"Restarting app.\";\n case AppDeploymentSteps.COMPLETED:\n return \"Deploy complete!\";\n default:\n return \"Unknown step.\";\n }\n};\n\nexport const stepToSpinnerEnd = (syncJson: SyncJson, step: string): string => {\n switch (step) {\n case AppDeploymentSteps.NOT_STARTED:\n case AppDeploymentSteps.STARTING:\n case AppDeploymentSteps.BUILDING_ASSETS:\n case AppDeploymentSteps.UPLOADING_ASSETS:\n return `Built frontend assets. ${ts()}`;\n case AppDeploymentSteps.CONVERGING_STORAGE:\n return `Setup database. ${ts()}`;\n case AppDeploymentSteps.PUBLISHING_TREE:\n return `Copied ${syncJson.env.name}. ${ts()}`;\n case AppDeploymentSteps.RELOADING_SANDBOX:\n return `Restarted app. ${ts()}`;\n case AppDeploymentSteps.COMPLETED:\n return \"Deploy successful!\";\n default:\n return `Completed unknown step. ${ts()}`;\n }\n};\n"],
|
|
5
|
-
"mappings": "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
|
|
4
|
+
"sourcesContent": ["import assert from \"node:assert\";\nimport terminalLink from \"terminal-link\";\nimport { PUBLISH_STATUS_SUBSCRIPTION } from \"../services/app/edit/operation.js\";\nimport { type Run, type Usage } from \"../services/command/command.js\";\nimport { DeployDisallowedError } from \"../services/filesync/error.js\";\nimport { FileSync } from \"../services/filesync/filesync.js\";\nimport { SyncJson, loadSyncJsonDirectory } from \"../services/filesync/sync-json.js\";\nimport { confirm } from \"../services/output/confirm.js\";\nimport { output } from \"../services/output/output.js\";\nimport { println } from \"../services/output/print.js\";\nimport { ProblemSeverity, printProblems, publishIssuesToProblems } from \"../services/output/problems.js\";\nimport { reportErrorAndExit } from \"../services/output/report.js\";\nimport { spin, type spinner } from \"../services/output/spinner.js\";\nimport { sprint } from \"../services/output/sprint.js\";\nimport { ts } from \"../services/output/timestamp.js\";\nimport { unreachable } from \"../services/util/assert.js\";\nimport { isGraphQLErrors } from \"../services/util/is.js\";\nimport { args as PushArgs } from \"./push.js\";\n\nexport type DeployArgs = typeof args;\n\nexport const args = {\n ...PushArgs,\n \"--env\": { type: String, alias: [\"-e\", \"--environment\", \"--from\"] },\n \"--allow-problems\": { type: Boolean, alias: \"--allow-issues\" },\n \"--allow-charges\": { type: Boolean },\n};\n\nexport const usage: Usage = (_ctx) => {\n return sprint`\n Deploys your app to production.\n\n This command first performs a sync to ensure that your local and environment directories\n match, changes are tracked since last sync. If any conflicts are detected, they must be\n resolved before deployment.\n\n {gray Usage}\n $ ggt deploy [options]\n\n {gray Options}\n -a, --app <app_name> Selects a specific app to deploy. Default set on \".gadget/sync.json\"\n --from, -e, --env <env_name> Selects a specific environment to sync and deploy from. Default set on \".gadget/sync.json\"\n --force Deploys by discarding any changes made to the environment directory since last sync\n --allow-different-directory Deploys from any local directory with existing files, even if the \".gadget/sync.json\" file is missing\n --allow-different-app Deploys a different app using the --app command, instead of the one specified in the \u201C.gadget/sync.json\u201D file\n --allow-problems Deploys despite any existing issues found in the app (gelly errors, typescript errors etc.)\n --allow-charges Deploys even if it results in additional charges to your plan\n\n {gray Examples}\n Deploys code from the staging environment of a myBlog\n {cyanBright $ ggt deploy -a myBlog -from staging}\n`;\n};\n\nexport const run: Run<DeployArgs> = async (ctx) => {\n const directory = await loadSyncJsonDirectory(process.cwd());\n const syncJson = await SyncJson.loadOrInit(ctx, { directory });\n\n println({ ensureEmptyLineAbove: true })`\n Deploying ${syncJson.env.name} to ${terminalLink(syncJson.app.primaryDomain, `https://${syncJson.app.primaryDomain}/`)}\n `;\n\n const filesync = new FileSync(syncJson);\n const hashes = await filesync.hashes(ctx);\n if (!hashes.inSync && (hashes.localChangesToPush.size > 0 || !hashes.onlyDotGadgetFilesChanged)) {\n // the following is true:\n // 1. our local files don't match our environment's files\n // 2. we have local changes to push or non .gadget/ files have changed on our environment\n // therefor, we need to push before we can deploy\n await filesync.print(ctx, { hashes });\n\n println({ ensureEmptyLineAbove: true })`\n Your environment's files must match your local files before you can deploy.\n `;\n\n // some scenarios make the confirmation to push changes imply the\n // --force flag (e.g. when both local and environment files have\n // changed, or when only environment files have changed)\n let implicitForce = false;\n\n if (output.isInteractive) {\n let message: string;\n switch (true) {\n case hashes.bothChanged:\n message = sprint`Would you like to push your local changes and {underline discard your environment's} changes now?`;\n implicitForce = true;\n break;\n case hashes.localChangesToPush.size > 0:\n message = sprint`Would you like to push your local changes now?`;\n break;\n case hashes.environmentChanges.size > 0:\n message = sprint`Do you want to {underline discard your environment's} changes now?`;\n implicitForce = true;\n break;\n default:\n unreachable(\"no changes to push or discard\");\n }\n\n await confirm({ ensureEmptyLineAbove: true })(message);\n } else {\n println({ ensureEmptyLineAbove: true })`\n Assuming you want to push your local files now.\n `;\n }\n\n await filesync.push(ctx, { hashes, force: implicitForce || ctx.args[\"--force\"] });\n }\n\n const variables = {\n localFilesVersion: String(syncJson.filesVersion),\n force: ctx.args[\"--allow-problems\"],\n allowCharges: ctx.args[\"--allow-charges\"],\n };\n\n let spinner: spinner | undefined;\n let currentStep: AppDeploymentSteps = AppDeploymentSteps.NOT_STARTED;\n let printedProblems = false;\n\n const subscription = syncJson.edit.subscribe({\n subscription: PUBLISH_STATUS_SUBSCRIPTION,\n variables,\n onError: async (error) => {\n ctx.log.error(\"failed to deploy\", { error });\n spinner?.fail(stepToSpinnerStart(syncJson, currentStep) + \" \" + ts());\n\n if (isGraphQLErrors(error.cause)) {\n const graphqlError = error.cause[0];\n assert(graphqlError, \"expected graphqlError to be defined\");\n\n switch (true) {\n case graphqlError.extensions[\"requiresUpgrade\"]:\n println({ ensureEmptyLineAbove: true })(graphqlError.message.replace(/GGT_PAYMENT_REQUIRED:?\\s*/, \"\"));\n process.exit(1);\n break;\n case graphqlError.extensions[\"requiresAdditionalCharge\"]:\n println({ ensureEmptyLineAbove: true })(graphqlError.message.replace(/GGT_PAYMENT_REQUIRED:?\\s*/, \"\"));\n await confirm({ ensureEmptyLineAbove: true })(\"Do you want to continue?\");\n subscription.resubscribe({ ...variables, allowCharges: true });\n return;\n }\n }\n\n await reportErrorAndExit(ctx, error);\n },\n onData: async ({ publishStatus }): Promise<void> => {\n if (!publishStatus) {\n ctx.log.warn(\"received empty publish status\");\n return;\n }\n\n const { publishStarted, progress: step, issues, status } = publishStatus;\n if (!printedProblems && issues.length > 0) {\n printedProblems = true;\n\n const fatalIssues = issues.filter((issue) => issue.severity === ProblemSeverity.Fatal);\n if (fatalIssues.length > 0) {\n await reportErrorAndExit(ctx, new DeployDisallowedError(publishIssuesToProblems(fatalIssues)));\n }\n\n println({ ensureEmptyLineAbove: true })`{bold Problems found.}`;\n printProblems({ problems: publishIssuesToProblems(issues) });\n\n if (!publishStarted) {\n await confirm(\"Do you want to continue?\");\n subscription.resubscribe({ ...variables, force: true });\n } else {\n assert(ctx.args[\"--allow-problems\"], \"expected --allow-problems to be true\");\n println({ ensureEmptyLineAbove: true })`Deploying regardless of problems because {bold \"--allow-problems\"} was passed.`;\n }\n\n return;\n }\n\n if (status?.code === \"Errored\") {\n spinner?.fail(stepToSpinnerStart(syncJson, currentStep) + \" \" + ts());\n\n if (status.message) {\n println({ ensureEmptyLineAbove: true })`{red ${status.message}}`;\n }\n if (status.output) {\n println({ ensureEmptyLineAbove: true })`${terminalLink(\"Check logs\", status.output)}`;\n }\n return;\n }\n\n if (step === AppDeploymentSteps.COMPLETED) {\n spinner?.succeed(stepToSpinnerEnd(syncJson, currentStep));\n\n let message = sprint`{green Deploy successful!}`;\n if (status?.output) {\n message += ` ${terminalLink(\"Check logs\", status.output)}.`;\n }\n\n println({ ensureEmptyLineAbove: true })(message);\n return;\n }\n\n if (step !== currentStep) {\n const spinnerText = stepToSpinnerStart(syncJson, step);\n if (spinnerText !== spinner?.text) {\n // stop the current spinner, if any, and start a new one\n spinner?.succeed(stepToSpinnerEnd(syncJson, currentStep));\n\n const ensureEmptyLineAbove = currentStep === AppDeploymentSteps.NOT_STARTED || !output.isInteractive;\n spinner = spin({ ensureEmptyLineAbove })(spinnerText);\n }\n\n currentStep = step as AppDeploymentSteps;\n }\n },\n onComplete: () => {\n subscription.unsubscribe();\n },\n });\n};\n\nexport const AppDeploymentSteps = Object.freeze({\n NOT_STARTED: \"NOT_STARTED\",\n STARTING: \"STARTING\",\n BUILDING_ASSETS: \"BUILDING_ASSETS\",\n UPLOADING_ASSETS: \"UPLOADING_ASSETS\",\n CONVERGING_STORAGE: \"CONVERGING_STORAGE\",\n PUBLISHING_TREE: \"PUBLISHING_TREE\",\n RELOADING_SANDBOX: \"RELOADING_SANDBOX\",\n COMPLETED: \"COMPLETED\",\n});\n\nexport type AppDeploymentSteps = (typeof AppDeploymentSteps)[keyof typeof AppDeploymentSteps];\n\nexport const stepToSpinnerStart = (syncJson: SyncJson, step: string): string => {\n switch (step) {\n case AppDeploymentSteps.NOT_STARTED:\n case AppDeploymentSteps.STARTING:\n case AppDeploymentSteps.BUILDING_ASSETS:\n case AppDeploymentSteps.UPLOADING_ASSETS:\n return \"Building frontend assets.\";\n case AppDeploymentSteps.CONVERGING_STORAGE:\n return \"Setting up database.\";\n case AppDeploymentSteps.PUBLISHING_TREE:\n return `Copying ${syncJson.env.name}.`;\n case AppDeploymentSteps.RELOADING_SANDBOX:\n return \"Restarting app.\";\n case AppDeploymentSteps.COMPLETED:\n return \"Deploy complete!\";\n default:\n return \"Unknown step.\";\n }\n};\n\nexport const stepToSpinnerEnd = (syncJson: SyncJson, step: string): string => {\n switch (step) {\n case AppDeploymentSteps.NOT_STARTED:\n case AppDeploymentSteps.STARTING:\n case AppDeploymentSteps.BUILDING_ASSETS:\n case AppDeploymentSteps.UPLOADING_ASSETS:\n return `Built frontend assets. ${ts()}`;\n case AppDeploymentSteps.CONVERGING_STORAGE:\n return `Setup database. ${ts()}`;\n case AppDeploymentSteps.PUBLISHING_TREE:\n return `Copied ${syncJson.env.name}. ${ts()}`;\n case AppDeploymentSteps.RELOADING_SANDBOX:\n return `Restarted app. ${ts()}`;\n case AppDeploymentSteps.COMPLETED:\n return \"Deploy successful!\";\n default:\n return `Completed unknown step. ${ts()}`;\n }\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["init_cjs", "assert", "args", "usage", "_ctx", "sprint", "run", "ctx", "directory", "loadSyncJsonDirectory", "syncJson", "SyncJson", "println", "terminalLink", "filesync", "FileSync", "hashes", "implicitForce", "output", "message", "unreachable", "confirm", "variables", "spinner", "currentStep", "AppDeploymentSteps", "printedProblems", "subscription", "PUBLISH_STATUS_SUBSCRIPTION", "error", "stepToSpinnerStart", "ts", "isGraphQLErrors", "graphqlError", "assert", "reportErrorAndExit", "publishStatus", "publishStarted", "step", "issues", "status", "fatalIssues", "issue", "ProblemSeverity", "DeployDisallowedError", "publishIssuesToProblems", "printProblems", "stepToSpinnerEnd", "spinnerText", "ensureEmptyLineAbove", "spin"]
|
|
7
7
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{a as En}from"./chunk-BSCZOMV4.js";import{a as it}from"./chunk-HKBXEZNF.js";import{a as tt,b as vn,k as j,l as er,m as nr}from"./chunk-
|
|
1
|
+
import{a as En}from"./chunk-BSCZOMV4.js";import{a as it}from"./chunk-HKBXEZNF.js";import{a as tt,b as vn,k as j,l as er,m as nr}from"./chunk-P2XPMNL6.js";import{f as Vt,l as Zt,m as tr,n as rr,o as ir}from"./chunk-RJOIQTYZ.js";import"./chunk-ERYUXLYS.js";import"./chunk-BOQUW6DS.js";import{b as Qt}from"./chunk-APHXRHNI.js";import"./chunk-D2K5XPNJ.js";import"./chunk-Q5N5L6H3.js";import"./chunk-PSRZ5JH5.js";import{c as Yt,h as Xt}from"./chunk-CKSTMUDN.js";import{a as wn,b as gn,c as Jt,h as rt}from"./chunk-AQRCAWW4.js";import{N as Ge,T as $t,U as H,V as Kt,W as zt,o as Bt,y as Ht}from"./chunk-GBCD37US.js";import"./chunk-F3EZ4KS3.js";import"./chunk-GOBNB5VT.js";import{a as g,b,c as C,d as pn,e as We,f as yn,g as a}from"./chunk-5WC5D4WL.js";var Dr=C(ge=>{"use strict";a();Object.defineProperty(ge,"__esModule",{value:!0});ge.sync=ge.isexe=void 0;var Tn=g("fs"),Rn=g("fs/promises"),kn=async(e,t={})=>{let{ignoreErrors:r=!1}=t;try{return Ir(await(0,Rn.stat)(e),t)}catch(i){let n=i;if(r||n.code==="EACCES")return!1;throw n}};ge.isexe=kn;var bn=(e,t={})=>{let{ignoreErrors:r=!1}=t;try{return Ir((0,Tn.statSync)(e),t)}catch(i){let n=i;if(r||n.code==="EACCES")return!1;throw n}};ge.sync=bn;var Ir=(e,t)=>e.isFile()&&Ln(e,t),Ln=(e,t)=>{let r=t.uid??process.getuid?.(),i=t.groups??process.getgroups?.()??[],n=t.gid??process.getgid?.()??i[0];if(r===void 0||n===void 0)throw new Error("cannot get uid or gid");let s=new Set([n,...i]),o=e.mode,c=e.uid,f=e.gid,l=parseInt("100",8),d=parseInt("010",8),u=parseInt("001",8),h=l|d;return!!(o&u||o&d&&s.has(f)||o&l&&c===r||o&h&&r===0)}});var Cr=C(Ee=>{"use strict";a();Object.defineProperty(Ee,"__esModule",{value:!0});Ee.sync=Ee.isexe=void 0;var On=g("fs"),qn=g("fs/promises"),Fn=async(e,t={})=>{let{ignoreErrors:r=!1}=t;try{return Ar(await(0,qn.stat)(e),e,t)}catch(i){let n=i;if(r||n.code==="EACCES")return!1;throw n}};Ee.isexe=Fn;var Pn=(e,t={})=>{let{ignoreErrors:r=!1}=t;try{return Ar((0,On.statSync)(e),e,t)}catch(i){let n=i;if(r||n.code==="EACCES")return!1;throw n}};Ee.sync=Pn;var Un=(e,t)=>{let{pathExt:r=process.env.PATHEXT||""}=t,i=r.split(";");if(i.indexOf("")!==-1)return!0;for(let n=0;n<i.length;n++){let s=i[n].toLowerCase(),o=e.substring(e.length-s.length).toLowerCase();if(s&&o===s)return!0}return!1},Ar=(e,t,r)=>e.isFile()&&Un(t,r)});var Rr=C(Tr=>{"use strict";a();Object.defineProperty(Tr,"__esModule",{value:!0})});var Fr=C(A=>{"use strict";a();var kr=A&&A.__createBinding||(Object.create?function(e,t,r,i){i===void 0&&(i=r);var n=Object.getOwnPropertyDescriptor(t,r);(!n||("get"in n?!t.__esModule:n.writable||n.configurable))&&(n={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,i,n)}:function(e,t,r,i){i===void 0&&(i=r),e[i]=t[r]}),Mn=A&&A.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),br=A&&A.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var r in e)r!=="default"&&Object.prototype.hasOwnProperty.call(e,r)&&kr(t,e,r);return Mn(t,e),t},Wn=A&&A.__exportStar||function(e,t){for(var r in e)r!=="default"&&!Object.prototype.hasOwnProperty.call(t,r)&&kr(t,e,r)};Object.defineProperty(A,"__esModule",{value:!0});A.sync=A.isexe=A.posix=A.win32=void 0;var Lr=br(Dr());A.posix=Lr;var Or=br(Cr());A.win32=Or;Wn(Rr(),A);var Gn=process.env._ISEXE_TEST_PLATFORM_||process.platform,qr=Gn==="win32"?Or:Lr;A.isexe=qr.isexe;A.sync=qr.sync});var Kr=C((_c,$r)=>{a();var{isexe:jn,sync:Bn}=Fr(),{join:Hn,delimiter:$n,sep:Pr,posix:Ur}=g("path"),Mr=process.platform==="win32",Wr=new RegExp(`[${Ur.sep}${Pr===Ur.sep?"":Pr}]`.replace(/(\\)/g,"\\$1")),Kn=new RegExp(`^\\.${Wr.source}`),Gr=e=>Object.assign(new Error(`not found: ${e}`),{code:"ENOENT"}),jr=(e,{path:t=process.env.PATH,pathExt:r=process.env.PATHEXT,delimiter:i=$n})=>{let n=e.match(Wr)?[""]:[...Mr?[process.cwd()]:[],...(t||"").split(i)];if(Mr){let s=r||[".EXE",".CMD",".BAT",".COM"].join(i),o=s.split(i).flatMap(c=>[c,c.toLowerCase()]);return e.includes(".")&&o[0]!==""&&o.unshift(""),{pathEnv:n,pathExt:o,pathExtExe:s}}return{pathEnv:n,pathExt:[""]}},Br=(e,t)=>{let r=/^".*"$/.test(e)?e.slice(1,-1):e;return(!r&&Kn.test(t)?t.slice(0,2):"")+Hn(r,t)},Hr=async(e,t={})=>{let{pathEnv:r,pathExt:i,pathExtExe:n}=jr(e,t),s=[];for(let o of r){let c=Br(o,e);for(let f of i){let l=c+f;if(await jn(l,{pathExt:n,ignoreErrors:!0})){if(!t.all)return l;s.push(l)}}}if(t.all&&s.length)return s;if(t.nothrow)return null;throw Gr(e)},zn=(e,t={})=>{let{pathEnv:r,pathExt:i,pathExtExe:n}=jr(e,t),s=[];for(let o of r){let c=Br(o,e);for(let f of i){let l=c+f;if(Bn(l,{pathExt:n,ignoreErrors:!0})){if(!t.all)return l;s.push(l)}}}if(t.all&&s.length)return s;if(t.nothrow)return null;throw Gr(e)};$r.exports=Hr;Hr.sync=zn});var Jr=C(He=>{a();(function(){var e;e=function(t,r,i){var n,s;for(s="";t.length>0;)n=t.match(r),n?(s+=t.slice(0,n.index),s+=i(n),t=t.slice(n.index+n[0].length)):(s+=t,t="");return s},He.split=function(t){var r,i;return t==null&&(t=""),i=[],r="",e(t,/\s*(?:([^\s\\\'\"]+)|'((?:[^\'\\]|\\.)*)'|"((?:[^\"\\]|\\.)*)"|(\\.?)|(\S))(\s|$)?/,function(n){var s,o,c,f,l,d,u;if(f=n[0],u=n[1],d=n[2],s=n[3],o=n[4],c=n[5],l=n[6],c!=null)throw new Error("Unmatched quote");if(r+=u||(d||s||o).replace(/\\(?=.)/,""),l!=null)return i.push(r),r=""}),r&&i.push(r),i},He.escape=function(t){return t==null&&(t=""),t==null?"''":t.replace(/([^A-Za-z0-9_\-.,:\/@\n])/g,"\\$1").replace(/\n/g,`'
|
|
2
2
|
'`)}}).call(He)});var Xr=C((Rc,Vr)=>{"use strict";a();var Yr=g("fs"),vt;function Jn(){try{return Yr.statSync("/.dockerenv"),!0}catch{return!1}}function Yn(){try{return Yr.readFileSync("/proc/self/cgroup","utf8").includes("docker")}catch{return!1}}Vr.exports=()=>(vt===void 0&&(vt=Jn()||Yn()),vt)});var ei=C((bc,Nt)=>{"use strict";a();var Vn=g("os"),Xn=g("fs"),Zr=Xr(),Qr=()=>{if(process.platform!=="linux")return!1;if(Vn.release().toLowerCase().includes("microsoft"))return!Zr();try{return Xn.readFileSync("/proc/version","utf8").toLowerCase().includes("microsoft")?!Zr():!1}catch{return!1}};process.env.__IS_WSL_TEST__?Nt.exports=Qr:Nt.exports=Qr()});var he=C((Oc,I)=>{a();var Zn=Jr(),$e=g("child_process"),St=En(),Qn=ei(),es=g("path"),ts=g("url"),ue=g("os"),_t=g("fs"),rs=g("net"),is=1024;function ni(e){return JSON.parse(JSON.stringify(e))}I.exports.clone=ni;var ns=function(e){return typeof e=="string"?e.replace(/(["$`\\])/g,"\\$1"):e},ss=function(e,t){return e.indexOf(t)!==-1},ti={u:"urgency",urgency:"urgency",t:"expire-time",time:"expire-time",timeout:"expire-time",e:"expire-time",expire:"expire-time","expire-time":"expire-time",i:"icon",icon:"icon",c:"category",category:"category",subtitle:"category",h:"hint",hint:"hint",a:"app-name","app-name":"app-name"};I.exports.command=function(e,t,r){return e=Zn.escape(e),process.env.DEBUG&&process.env.DEBUG.indexOf("notifier")!==-1&&(console.info("node-notifier debug info (command):"),console.info("[notifier path]",e),console.info("[notifier options]",t.join(" "))),$e.exec(e+" "+t.join(" "),function(i,n,s){if(i)return r(i);r(s,n)})};I.exports.fileCommand=function(e,t,r){return process.env.DEBUG&&process.env.DEBUG.indexOf("notifier")!==-1&&(console.info("node-notifier debug info (fileCommand):"),console.info("[notifier path]",e),console.info("[notifier options]",t.join(" "))),$e.execFile(e,t,function(i,n,s){if(i)return r(i,n);r(s,n)})};I.exports.fileCommandJson=function(e,t,r){return process.env.DEBUG&&process.env.DEBUG.indexOf("notifier")!==-1&&(console.info("node-notifier debug info (fileCommandJson):"),console.info("[notifier path]",e),console.info("[notifier options]",t.join(" "))),$e.execFile(e,t,function(i,n,s){if(i)return r(i,n);if(!n)return r(i,{});try{let o=JSON.parse(n);r(s||null,o)}catch(o){r(o,n)}})};I.exports.immediateFileCommand=function(e,t,r){process.env.DEBUG&&process.env.DEBUG.indexOf("notifier")!==-1&&(console.info("node-notifier debug info (notifier):"),console.info("[notifier path]",e)),os(e,function(i,n){if(!n)return r(new Error("Notifier ("+e+") not found on system."));$e.execFile(e,t),r()})};function os(e,t){return _t.stat(e,function(r,i){return r?es.extname(e)?t(r,!1):_t.stat(e+".exe",function(n,s){if(n)return t(n,!1);t(n,s.isFile())}):t(r,i.isFile())})}var Ke=function(e){return e.appIcon&&(e.icon=e.appIcon,delete e.appIcon),e},Ie=function(e){return e.text&&(e.message=e.text,delete e.text),e},si=function(e){return e.i&&(e.icon=e.i,delete e.i),e};I.exports.mapToNotifySend=function(e){e=Ke(e),e=Ie(e),e.timeout===!1&&delete e.timeout,e.wait===!0&&(e["expire-time"]=5);for(let t in e)t==="message"||t==="title"||e.hasOwnProperty(t)&&ti[t]!==t&&(e[ti[t]]=e[t],delete e[t]);return typeof e["expire-time"]>"u"?e["expire-time"]=10*1e3:typeof e["expire-time"]=="number"&&(e["expire-time"]=e["expire-time"]*1e3),e};I.exports.mapToGrowl=function(e){if(e=Ke(e),e=si(e),e=Ie(e),e.icon&&!Buffer.isBuffer(e.icon))try{e.icon=_t.readFileSync(e.icon)}catch{}return e};I.exports.mapToMac=function(e){return e=si(e),e=Ie(e),e.icon&&(e.appIcon=e.icon,delete e.icon),e.sound===!0&&(e.sound="Bottle"),e.sound===!1&&delete e.sound,e.sound&&e.sound.indexOf("Notification.")===0&&(e.sound="Bottle"),e.wait===!0&&(e.timeout||(e.timeout=5),delete e.wait),!e.wait&&!e.timeout&&(e.timeout===!1?delete e.timeout:e.timeout=10),e.json=!0,e};function xt(e){return Object.prototype.toString.call(e)==="[object Array]"}I.exports.isArray=xt;function as(){}I.exports.actionJackerDecorator=function(e,t,r,i){if(t=ni(t),r=r||as,typeof r!="function")throw new TypeError("The second argument must be a function callback. You have passed "+typeof r);return function(n,s){let o=s,c={};if(o&&typeof o=="object"&&(c=o,o=o.activationType),o&&(o=o.toLowerCase().trim(),o.match(/^activate|clicked$/)&&(o="activate"),o.match(/^timedout$/)&&(o="timeout")),r.apply(e,[n,o,c]),!i||!o)return;let f=i(o);f&&e.emit(f,e,t,c)}};I.exports.constructArgumentList=function(e,t){let r=[];t=t||{};let i=t.initial||[],n=t.keyExtra||"",s=t.allowedArguments||[],o=t.noEscape!==void 0,c=t.allowedArguments!==void 0,f=!!t.explicitTrue,l=!!t.keepNewlines,d=t.wrapper===void 0?'"':t.wrapper,u=function h(_){return xt(_)?ri(_.map(h).join(",")):(o||(_=ns(_)),typeof _=="string"&&!l&&(_=ri(_)),d+_+d)};i.forEach(function(h){r.push(u(h))});for(let h in e)if(e.hasOwnProperty(h)&&(!c||ss(s,h)))if(f&&e[h]===!0)r.push("-"+n+h);else{if(f&&e[h]===!1)continue;r.push("-"+n+h,u(e[h]))}return r};function ri(e){let t=process.platform==="win32"?"\\r\\n":"\\n";return e.replace(/\r?\n/g,t)}var cs=["t","m","b","tb","p","id","s","silent","appID","pid","pipeName","close","install"],fs="Notification.",ii="Notification.Default";I.exports.mapToWin8=function(e){e=Ke(e),e=Ie(e),e.icon&&(/^file:\/+/.test(e.icon)?e.p=new ts.URL(e.icon).pathname.replace(/^\/(\w:\/)/,"$1").replace(/\//g,"\\"):e.p=e.icon,delete e.icon),e.message&&(e.m=e.message.replace(/\x1b/g,""),delete e.message),e.title&&(e.t=e.title,delete e.title),e.appName&&(e.appID=e.appName,delete e.appName),typeof e.remove<"u"&&(e.close=e.remove,delete e.remove),(e.quiet||e.silent)&&(e.silent=e.quiet||e.silent,delete e.quiet),typeof e.sound<"u"&&(e.s=e.sound,delete e.sound),e.s===!1&&(e.silent=!0,delete e.s),e.s&&e.silent&&delete e.s,e.s===!0&&(e.s=ii),e.s&&e.s.indexOf(fs)!==0&&(e.s=ii),e.actions&&xt(e.actions)&&(e.b=e.actions.join(";"),delete e.actions);for(let t in e)e.hasOwnProperty(t)&&cs.indexOf(t)===-1&&delete e[t];return e};I.exports.mapToNotifu=function(e){return e=Ke(e),e=Ie(e),e.icon&&(e.i=e.icon,delete e.icon),e.message&&(e.m=e.message,delete e.message),e.title&&(e.p=e.title,delete e.title),e.time&&(e.d=e.time,delete e.time),e.q!==!1?e.q=!0:delete e.q,e.quiet===!1&&(delete e.q,delete e.quiet),e.sound&&(delete e.q,delete e.sound),e.t&&(e.d=e.t,delete e.t),e.type&&(e.t=ls(e.type),delete e.type),e};I.exports.isMac=function(){return ue.type()==="Darwin"};I.exports.isMountainLion=function(){return ue.type()==="Darwin"&&St.satisfies(It(ue.release()),">=12.0.0")};I.exports.isWin8=function(){return ue.type()==="Windows_NT"&&St.satisfies(It(ue.release()),">=6.2.9200")};I.exports.isWSL=function(){return Qn};I.exports.isLessThanWin8=function(){return ue.type()==="Windows_NT"&&St.satisfies(It(ue.release()),"<6.2.9200")};function It(e){return e.split(".").length===2&&(e+=".0"),e}function ls(e){if(typeof e=="string"||e instanceof String){if(e.toLowerCase()==="info")return"info";if(e.toLowerCase()==="warn")return"warn";if(e.toLowerCase()==="error")return"error"}return"info"}I.exports.createNamedPipe=e=>{let t=Buffer.alloc(is);return new Promise(r=>{e.instance=rs.createServer(i=>{i.on("data",n=>{t.write(n.toString())}),i.on("end",()=>{e.instance.close()})}),e.instance.listen(e.namedPipe,()=>{r(t)})})}});var ui=C((Fc,li)=>{a();var oi=g("os"),us=vn(),De=he(),ci=g("events").EventEmitter,hs=g("util"),fi="notify-send",ze;li.exports=Ae;function Ae(e){if(e=De.clone(e||{}),!(this instanceof Ae))return new Ae(e);this.options=e,ci.call(this)}hs.inherits(Ae,ci);function ds(){}function ms(e,t){if(e=De.clone(e||{}),t=t||ds,typeof t!="function")throw new TypeError("The second argument must be a function callback. You have passed "+typeof t);if(typeof e=="string"&&(e={title:"node-notifier",message:e}),!e.message)return t(new Error("Message is required.")),this;if(oi.type()!=="Linux"&&!oi.type().match(/BSD$/))return t(new Error("Only supported on Linux and *BSD systems")),this;if(ze===!1)return t(new Error("notify-send must be installed on the system.")),this;if(ze||this.options.suppressOsdCheck)return ai(e,t),this;try{ze=!!us.sync(fi),ai(e,t)}catch(r){return ze=!1,t(r)}return this}Object.defineProperty(Ae.prototype,"notify",{get:function(){return this._notify||(this._notify=ms.bind(this)),this._notify}});var ps=["urgency","expire-time","icon","category","hint","app-name"];function ai(e,t){e=De.mapToNotifySend(e),e.title=e.title||"Node Notification:";let r=[e.title,e.message];delete e.title,delete e.message;let i=De.constructArgumentList(e,{initial:r,keyExtra:"-",allowedArguments:ps});De.command(fi,i,t)}});var Dt=C((Uc,di)=>{a();var ys=g("net"),hi=!1;di.exports=function(e,t){if(typeof t>"u"&&(t=e,e={}),hi)return t(null,hi);let r=e.port||23053,i=e.host||"localhost",n=ys.connect(r,i);n.setTimeout(100),n.once("connect",function(){n.end(),t(null,!0)}),n.once("error",function(){n.end(),t(null,!1)})}});var yi=C((Wc,pi)=>{a();var ws=g("net"),gs=g("crypto"),mi=g("util").format,Es=g("fs"),P=`\r
|
|
3
3
|
`;function de(e,t){t=t||{},this.type=e,this.host=t.host||"localhost",this.port=t.port||23053,this.request="GNTP/1.0 "+e+" NONE"+P,this.resources=[],this.attempts=0,this.maxAttempts=5}de.prototype.parseResp=function(e){var t={},r,i;return e=e.slice(0,e.indexOf(P+P)).split(P),r=e[0],i=e.slice(1),t.state=r.match(/-(OK|ERROR|CALLBACK)/)[0].slice(1),i.forEach(function(n){n=n.split(": "),t[n[0]]=n[1]}),t};de.prototype.retry=function(){var e=this,t=arguments;setTimeout(function(){e.send.apply(e,t)},750)};de.prototype.addResource=function(e){var t=gs.createHash("md5").update(e).digest("hex"),r="Identifier: "+t+P+"Length: "+e.length+P+P;return this.resources.push({header:r,file:e}),"x-growl-resource://"+t};de.prototype.add=function(e,t){t!==void 0&&(/-Icon/.test(e)&&!/^https?:\/\//.test(t)&&(/\.(png|gif|jpe?g)$/.test(t)?t=this.addResource(Es.readFileSync(t)):t instanceof Buffer&&(t=this.addResource(t))),this.request+=e+": "+t+P)};de.prototype.newline=function(){this.request+=P};de.prototype.send=function(e){var t=this,r=ws.connect(this.port,this.host),i="";e=e||function(){},this.attempts+=1,r.on("connect",function(){r.write(t.request),t.resources.forEach(function(n){r.write(n.header),r.write(n.file),r.write(P+P)})}),r.on("data",function(n){i+=n.toString(),i.slice(i.length-4)===P+P&&(i=t.parseResp(i),i.state==="ERROR"||i.state==="CALLBACK"?r.end():i="")}),r.on("end",function(){if(["200","401","402"].indexOf(i["Error-Code"])>=0)if(t.attempts<=t.maxAttempts)t.retry(e);else{var n='GNTP request to "%s:%d" failed with error code %s (%s)';e(new Error(mi(n,t.host,t.port,i["Error-Code"],i["Error-Description"])))}else e(void 0,i)}),r.on("error",function(){e(new Error(mi('Error while sending GNTP request to "%s:%d"',t.host,t.port))),r.destroy()})};pi.exports=de});var Ei=C((jc,gi)=>{a();var wi=yi();function Ce(){this.appname="Growly",this.notifications=void 0,this.labels=void 0,this.count=0,this.registered=!1,this.host=void 0,this.port=void 0}Ce.prototype.getLabels=function(){return this.notifications.map(function(e){return e.label})};Ce.prototype.setHost=function(e,t){this.host=e,this.port=t};Ce.prototype.register=function(e,t,r,i){var n;typeof t=="object"&&(r=t,t=void 0),(r===void 0||!r.length)&&(r=[{label:"default",dispname:"Default Notification",enabled:!0}]),typeof arguments[arguments.length-1]=="function"?i=arguments[arguments.length-1]:i=function(){},this.appname=e,this.notifications=r,this.labels=this.getLabels(),this.registered=!0,n=new wi("REGISTER",{host:this.host,port:this.port}),n.add("Application-Name",e),n.add("Application-Icon",t),n.add("Notifications-Count",r.length),n.newline(),r.forEach(function(s){s.enabled===void 0&&(s.enabled=!0),n.add("Notification-Name",s.label),n.add("Notification-Display-Name",s.dispname),n.add("Notification-Enabled",s.enabled?"True":"False"),n.add("Notification-Icon",s.icon),n.newline()}),n.send(i)};Ce.prototype.notify=function(e,t,r){var i=this,n;if(!this.registered){this.register(this.appname,function(s){s&&console.log(s),i.notify.call(i,e,t,r)});return}t=t||{},typeof t=="function"&&(r=t,t={}),n=new wi("NOTIFY",{host:this.host,port:this.port}),n.add("Application-Name",this.appname),n.add("Notification-Name",t.label||this.labels[0]),n.add("Notification-ID",++this.count),n.add("Notification-Title",t.title),n.add("Notification-Text",e),n.add("Notification-Sticky",t.sticky?"True":"False"),n.add("Notification-Priority",t.priority),n.add("Notification-Icon",t.icon),n.add("Notification-Coalescing-ID",t.coalescingId||void 0),n.add("Notification-Callback-Context",r?"context":void 0),n.add("Notification-Callback-Context-Type",r?"string":void 0),n.add("Notification-Callback-Target",void 0),n.newline(),n.send(function(s,o){r&&s?r(s):r&&o.state==="CALLBACK"&&r(void 0,o["Notification-Callback-Result"].toLowerCase())})};gi.exports=new Ce});var Ye=C((Hc,_i)=>{a();var vs=Dt(),Je=he(),Te=Ei(),Ni=g("events").EventEmitter,Ns=g("util"),_s="Couldn't connect to growl (might be used as a fallback). Make sure it is running";_i.exports=Re;var vi;function Re(e){if(e=Je.clone(e||{}),!(this instanceof Re))return new Re(e);Te.appname=e.name||"Node",this.options=e,Ni.call(this)}Ns.inherits(Re,Ni);function Ss(e,t){if(Te.setHost(this.options.host,this.options.port),e=Je.clone(e||{}),typeof e=="string"&&(e={title:"node-notifier",message:e}),t=Je.actionJackerDecorator(this,e,t,function(r){return r==="click"?"click":r==="timedout"?"timeout":!1}),e=Je.mapToGrowl(e),!e.message)return t(new Error("Message is required.")),this;if(e.title=e.title||"Node Notification:",vi||e.wait){let r=e.wait?t:xs;return Te.notify(e.message,e,r),e.wait||t(),this}return vs(Te,function(r,i){if(vi=i,!i)return t(new Error(_s));Te.notify(e.message,e),t()}),this}Object.defineProperty(Re.prototype,"notify",{get:function(){return this._notify||(this._notify=Ss.bind(this)),this._notify}});function xs(){}});var Di=C((Kc,Ii)=>{a();var me=he(),Is=Ye(),Ds=g("path"),As=Ds.join(__dirname,"../vendor/mac.noindex/terminal-notifier.app/Contents/MacOS/terminal-notifier"),xi=g("events").EventEmitter,Cs=g("util"),Ts="You need Mac OS X 10.8 or above to use NotificationCenter, or use Growl fallback with constructor option {withFallback: true}.";Ii.exports=ke;function ke(e){if(e=me.clone(e||{}),!(this instanceof ke))return new ke(e);this.options=e,xi.call(this)}Cs.inherits(ke,xi);var Si=null;function Rs(){}function ks(e,t){let r,i=bs();if(e=me.clone(e||{}),Si=i,typeof e=="string"&&(e={title:"node-notifier",message:e}),t=t||Rs,typeof t!="function")throw new TypeError("The second argument must be a function callback. You have passed "+typeof fn);let n=me.actionJackerDecorator(this,e,t,function(o){return Si!==i?!1:o==="activate"?"click":o==="timeout"?"timeout":o==="replied"?"replied":!1});if(e=me.mapToMac(e),!e.message&&!e.group&&!e.list&&!e.remove)return t(new Error("Message, group, remove or list property is required.")),this;let s=me.constructArgumentList(e);return me.isMountainLion()?(me.fileCommandJson(this.options.customPath||As,s,n),this):r||this.options.withFallback?(r=r||new Is(this.options),r.notify(e,t)):(t(new Error(Ts)),this)}Object.defineProperty(ke.prototype,"notify",{get:function(){return this._notify||(this._notify=ks.bind(this)),this._notify}});function bs(){return{_ref:"val"}}});var At=C((Jc,Ri)=>{a();var Ls=g("path"),Os=Ls.resolve(__dirname,"../vendor/notifu/notifu"),qs=Dt(),Q=he(),Fs=Ct(),Ai=Ye(),Ps=g("os"),Ti=g("events").EventEmitter,Us=g("util"),Ve;Ri.exports=be;function be(e){if(e=Q.clone(e||{}),!(this instanceof be))return new be(e);this.options=e,Ti.call(this)}Us.inherits(be,Ti);function Ms(){}function Ws(e,t){let r,i=this.options;e=Q.clone(e||{}),t=t||Ms,typeof e=="string"&&(e={title:"node-notifier",message:e});let n=Q.actionJackerDecorator(this,e,t,function(s){return s==="activate"?"click":s==="timeout"?"timeout":!1});return this.options.withFallback&&Q.isWin8()?(r=r||new Fs(i),r.notify(e,t)):this.options.withFallback&&(!Q.isLessThanWin8()||Ve===!0)?(r=r||new Ai(i),r.notify(e,t)):!this.options.withFallback||Ve===!1?(Ci(e,i,n),this):(qs(i,function(s,o){if(Ve=o,Ve)return r=r||new Ai(i),r.notify(e,t);Ci(e,i,n)}),this)}Object.defineProperty(be.prototype,"notify",{get:function(){return this._notify||(this._notify=Ws.bind(this)),this._notify}});var Gs=["t","d","p","m","i","e","q","w","xp"];function Ci(e,t,r){let i=Ps.arch()==="x64";e=e||{},e=Q.mapToNotifu(e),e.p=e.p||"Node Notification:";let n=Os+(i?"64":"")+".exe",s=t.customPath||n;if(!e.m)return r(new Error("Message is required.")),this;let o=Q.constructArgumentList(e,{wrapper:"",noEscape:!0,explicitTrue:!0,allowedArguments:Gs});if(e.wait)return Q.fileCommand(s,o,function(c,f){let l=js(c.code);return l==="error"?r(c,f):r(null,l)});Q.immediateFileCommand(s,o,r)}function js(e){switch(e){case 2:return"timeout";case 3:case 6:case 7:return"activate";case 4:return"close";default:return"error"}}});import Bs from"crypto";function Le(){return Xe>Ze.length-16&&(Bs.randomFillSync(Ze),Xe=0),Ze.slice(Xe,Xe+=16)}var Ze,Xe,Tt=b(()=>{a();Ze=new Uint8Array(256),Xe=Ze.length});var ki,bi=b(()=>{a();ki=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i});function Hs(e){return typeof e=="string"&&ki.test(e)}var se,Oe=b(()=>{a();bi();se=Hs});function $s(e,t=0){let r=(R[e[t+0]]+R[e[t+1]]+R[e[t+2]]+R[e[t+3]]+"-"+R[e[t+4]]+R[e[t+5]]+"-"+R[e[t+6]]+R[e[t+7]]+"-"+R[e[t+8]]+R[e[t+9]]+"-"+R[e[t+10]]+R[e[t+11]]+R[e[t+12]]+R[e[t+13]]+R[e[t+14]]+R[e[t+15]]).toLowerCase();if(!se(r))throw TypeError("Stringified UUID is invalid");return r}var R,oe,qe=b(()=>{a();Oe();R=[];for(let e=0;e<256;++e)R.push((e+256).toString(16).substr(1));oe=$s});function Ks(e,t,r){let i=t&&r||0,n=t||new Array(16);e=e||{};let s=e.node||Li,o=e.clockseq!==void 0?e.clockseq:Rt;if(s==null||o==null){let h=e.random||(e.rng||Le)();s==null&&(s=Li=[h[0]|1,h[1],h[2],h[3],h[4],h[5]]),o==null&&(o=Rt=(h[6]<<8|h[7])&16383)}let c=e.msecs!==void 0?e.msecs:Date.now(),f=e.nsecs!==void 0?e.nsecs:bt+1,l=c-kt+(f-bt)/1e4;if(l<0&&e.clockseq===void 0&&(o=o+1&16383),(l<0||c>kt)&&e.nsecs===void 0&&(f=0),f>=1e4)throw new Error("uuid.v1(): Can't create more than 10M uuids/sec");kt=c,bt=f,Rt=o,c+=122192928e5;let d=((c&268435455)*1e4+f)%4294967296;n[i++]=d>>>24&255,n[i++]=d>>>16&255,n[i++]=d>>>8&255,n[i++]=d&255;let u=c/4294967296*1e4&268435455;n[i++]=u>>>8&255,n[i++]=u&255,n[i++]=u>>>24&15|16,n[i++]=u>>>16&255,n[i++]=o>>>8|128,n[i++]=o&255;for(let h=0;h<6;++h)n[i+h]=s[h];return t||oe(n)}var Li,Rt,kt,bt,Oi,qi=b(()=>{a();Tt();qe();kt=0,bt=0;Oi=Ks});function zs(e){if(!se(e))throw TypeError("Invalid UUID");let t,r=new Uint8Array(16);return r[0]=(t=parseInt(e.slice(0,8),16))>>>24,r[1]=t>>>16&255,r[2]=t>>>8&255,r[3]=t&255,r[4]=(t=parseInt(e.slice(9,13),16))>>>8,r[5]=t&255,r[6]=(t=parseInt(e.slice(14,18),16))>>>8,r[7]=t&255,r[8]=(t=parseInt(e.slice(19,23),16))>>>8,r[9]=t&255,r[10]=(t=parseInt(e.slice(24,36),16))/1099511627776&255,r[11]=t/4294967296&255,r[12]=t>>>24&255,r[13]=t>>>16&255,r[14]=t>>>8&255,r[15]=t&255,r}var Qe,Lt=b(()=>{a();Oe();Qe=zs});function Js(e){e=unescape(encodeURIComponent(e));let t=[];for(let r=0;r<e.length;++r)t.push(e.charCodeAt(r));return t}function et(e,t,r){function i(n,s,o,c){if(typeof n=="string"&&(n=Js(n)),typeof s=="string"&&(s=Qe(s)),s.length!==16)throw TypeError("Namespace must be array-like (16 iterable integer values, 0-255)");let f=new Uint8Array(16+n.length);if(f.set(s),f.set(n,s.length),f=r(f),f[6]=f[6]&15|t,f[8]=f[8]&63|128,o){c=c||0;for(let l=0;l<16;++l)o[c+l]=f[l];return o}return oe(f)}try{i.name=e}catch{}return i.DNS=Ys,i.URL=Vs,i}var Ys,Vs,Ot=b(()=>{a();qe();Lt();Ys="6ba7b810-9dad-11d1-80b4-00c04fd430c8",Vs="6ba7b811-9dad-11d1-80b4-00c04fd430c8"});import Xs from"crypto";function Zs(e){return Array.isArray(e)?e=Buffer.from(e):typeof e=="string"&&(e=Buffer.from(e,"utf8")),Xs.createHash("md5").update(e).digest()}var Fi,Pi=b(()=>{a();Fi=Zs});var Qs,Ui,Mi=b(()=>{a();Ot();Pi();Qs=et("v3",48,Fi),Ui=Qs});function eo(e,t,r){e=e||{};let i=e.random||(e.rng||Le)();if(i[6]=i[6]&15|64,i[8]=i[8]&63|128,t){r=r||0;for(let n=0;n<16;++n)t[r+n]=i[n];return t}return oe(i)}var Wi,Gi=b(()=>{a();Tt();qe();Wi=eo});import to from"crypto";function ro(e){return Array.isArray(e)?e=Buffer.from(e):typeof e=="string"&&(e=Buffer.from(e,"utf8")),to.createHash("sha1").update(e).digest()}var ji,Bi=b(()=>{a();ji=ro});var io,Hi,$i=b(()=>{a();Ot();Bi();io=et("v5",80,ji),Hi=io});var Ki,zi=b(()=>{a();Ki="00000000-0000-0000-0000-000000000000"});function no(e){if(!se(e))throw TypeError("Invalid UUID");return parseInt(e.substr(14,1),16)}var Ji,Yi=b(()=>{a();Oe();Ji=no});var Vi={};pn(Vi,{NIL:()=>Ki,parse:()=>Qe,stringify:()=>oe,v1:()=>Oi,v3:()=>Ui,v4:()=>Wi,v5:()=>Hi,validate:()=>se,version:()=>Ji});var Xi=b(()=>{a();qi();Mi();Gi();$i();zi();Yi();Oe();qe();Lt()});var Ct=C((Zf,Qi)=>{a();var so=g("path"),oo=so.resolve(__dirname,"../vendor/snoreToast/snoretoast"),J=he(),ao=At(),co=g("os"),{v4:fo}=(Xi(),yn(Vi)),Zi=g("events").EventEmitter,lo=g("util"),qt,uo="notifierPipe",ho="\\\\.\\pipe\\",mo="/tmp/";Qi.exports=Fe;function Fe(e){if(e=J.clone(e||{}),!(this instanceof Fe))return new Fe(e);this.options=e,Zi.call(this)}lo.inherits(Fe,Zi);function po(){}function yo(e){return e?e.split(";").reduce((t,r)=>{let i=r.split("=");return i&&i.length===2&&(t[i[0]]=i[1]),t},{}):{}}function wo(){return`${J.isWSL()?mo:ho}${uo}-${fo()}`}function go(e,t){e=J.clone(e||{}),t=t||po;let r=co.arch()==="x64",i,n={namedPipe:wo()};if(typeof e=="string"&&(e={title:"node-notifier",message:e}),typeof t!="function")throw new TypeError("The second argument must be a function callback. You have passed "+typeof fn);let s=(c,f)=>{let l=yo(i&&i.toString("utf16le"));l.action==="buttonClicked"&&l.button?l.activationType=l.button:l.action&&(l.activationType=l.action),c&&c.code===-1&&f(c,l),f(null,l),n.instance&&n.instance.close()},o=c=>s(c,J.actionJackerDecorator(this,e,t,f=>f==="activate"?"click":f||!1));return e.title=e.title||"Node Notification:",typeof e.message>"u"&&typeof e.close>"u"?(t(new Error("Message or ID to close is required.")),this):!J.isWin8()&&!J.isWSL()&&this.options.withFallback?(qt=qt||new ao(this.options),qt.notify(e,t)):(J.createNamedPipe(n).then(c=>{i=c,e.pipeName=n.namedPipe;let f=e.customPath||this.options.customPath||oo+"-x"+(r?"64":"86")+".exe";e=J.mapToWin8(e);let l=J.constructArgumentList(e,{explicitTrue:!0,wrapper:"",keepNewlines:!0,noEscape:!0});J.fileCommand(f,l,o)}),this)}Object.defineProperty(Fe.prototype,"notify",{get:function(){return this._notify||(this._notify=go.bind(this)),this._notify}})});var rn=C((el,D)=>{a();var en=g("os"),tn=he(),Pe=ui(),Ft=Di(),Ue=Ct(),Pt=Ye(),Ut=At(),pe={withFallback:!0},Eo=tn.isWSL()?"WSL":en.type();switch(Eo){case"Linux":D.exports=new Pe(pe),D.exports.Notification=Pe;break;case"Darwin":D.exports=new Ft(pe),D.exports.Notification=Ft;break;case"Windows_NT":tn.isLessThanWin8()?(D.exports=new Ut(pe),D.exports.Notification=Ut):(D.exports=new Ue(pe),D.exports.Notification=Ue);break;case"WSL":D.exports=new Ue(pe),D.exports.Notification=Ue;break;default:en.type().match(/BSD$/)?(D.exports=new Pe(pe),D.exports.Notification=Pe):(D.exports=new Pt(pe),D.exports.Notification=Pt)}D.exports.NotifySend=Pe;D.exports.NotificationCenter=Ft;D.exports.WindowsToaster=Ue;D.exports.WindowsBalloon=Ut;D.exports.Growl=Pt});a();var an=We(gn(),1),ae=We(wn(),1);import on from"node:path";a();import{EventEmitter as Cn}from"node:events";import wt from"node:fs";import we from"node:path";a();import Nn from"node:os";var sr=300,ie=20,ve=1e7,or=Nn.platform();var _n=or==="darwin",nt=or==="win32",ne=_n||nt,ar=3e3,cr=2e4,st=1250;a();var $;(function(e){e[e.DIR=1]="DIR",e[e.FILE=2]="FILE"})($||($={}));var le;(function(e){e.CHANGE="change",e.RENAME="rename"})(le||(le={}));var Ne;(function(e){e.CHANGE="change",e.ERROR="error"})(Ne||(Ne={}));var m;(function(e){e.ADD="add",e.ADD_DIR="addDir",e.CHANGE="change",e.RENAME="rename",e.RENAME_DIR="renameDir",e.UNLINK="unlink",e.UNLINK_DIR="unlinkDir"})(m||(m={}));var L;(function(e){e.ALL="all",e.CLOSE="close",e.ERROR="error",e.READY="ready"})(L||(L={}));a();a();a();var Sn=(e,t=1,r)=>{t=Math.max(1,t);let i=r?.leading??!1,n=r?.trailing??!0,s=Math.max(r?.maxWait??1/0,t),o,c,f=0,l=0,d=()=>{let N=Date.now(),F=N-f,re=N-l,fe=F>=t||re>=s;return[N,fe]},u=N=>{if(l=N,!o)return;let F=o;o=void 0,e.apply(void 0,F)},h=()=>{te(0)},_=()=>{c&&(h(),u(Date.now()))},T=N=>{if(l=N,i)return u(N)},U=N=>{if(n&&o)return u(N);o=void 0},M=()=>{c=void 0;let[N,F]=d();return F?U(N):ee(N)},ee=N=>{let F=N-f,re=N-l,fe=t-F,Me=s-re,W=Math.min(fe,Me);return te(W)},te=N=>{c&&clearTimeout(c),!(N<=0)&&(c=setTimeout(M,N))},ce=(...N)=>{let[F,re]=d(),fe=!!c;if(o=N,f=F,(re||!c)&&te(t),re)return fe?u(F):T(F)};return ce.cancel=h,ce.flush=_,ce},je=Sn;a();import vr from"node:fs";import ft from"node:path";a();import v from"node:fs";import{promisify as k}from"node:util";a();var V=(e,t)=>function(...i){return e.apply(void 0,i).catch(t)},K=(e,t)=>function(...i){try{return e.apply(void 0,i)}catch(n){return t(n)}};a();import fr from"node:process";var lr=fr.getuid?!fr.getuid():!1,ur=1e4,q=()=>{};a();var _e={isChangeErrorOk:e=>{if(!_e.isNodeError(e))return!1;let{code:t}=e;return t==="ENOSYS"||!lr&&(t==="EINVAL"||t==="EPERM")},isNodeError:e=>e instanceof Error,isRetriableError:e=>{if(!_e.isNodeError(e))return!1;let{code:t}=e;return t==="EMFILE"||t==="ENFILE"||t==="EAGAIN"||t==="EBUSY"||t==="EACCESS"||t==="EACCES"||t==="EACCS"||t==="EPERM"},onChangeError:e=>{if(!_e.isNodeError(e))throw e;if(!_e.isChangeErrorOk(e))throw e}},x=_e;a();a();var ot=class{constructor(){this.interval=25,this.intervalId=void 0,this.limit=ur,this.queueActive=new Set,this.queueWaiting=new Set,this.init=()=>{this.intervalId||(this.intervalId=setInterval(this.tick,this.interval))},this.reset=()=>{this.intervalId&&(clearInterval(this.intervalId),delete this.intervalId)},this.add=t=>{this.queueWaiting.add(t),this.queueActive.size<this.limit/2?this.tick():this.init()},this.remove=t=>{this.queueWaiting.delete(t),this.queueActive.delete(t)},this.schedule=()=>new Promise(t=>{let r=()=>this.remove(i),i=()=>t(r);this.add(i)}),this.tick=()=>{if(!(this.queueActive.size>=this.limit)){if(!this.queueWaiting.size)return this.reset();for(let t of this.queueWaiting){if(this.queueActive.size>=this.limit)break;this.queueWaiting.delete(t),this.queueActive.add(t),t()}}}}},hr=new ot;var X=(e,t)=>function(i){return function n(...s){return hr.schedule().then(o=>{let c=l=>(o(),l),f=l=>{if(o(),Date.now()>=i)throw l;if(t(l)){let d=Math.round(100*Math.random());return new Promise(h=>setTimeout(h,d)).then(()=>n.apply(void 0,s))}throw l};return e.apply(void 0,s).then(c,f)})}},Z=(e,t)=>function(i){return function n(...s){try{return e.apply(void 0,s)}catch(o){if(Date.now()>i)throw o;if(t(o))return n.apply(void 0,s);throw o}}};var xn={attempt:{chmod:V(k(v.chmod),x.onChangeError),chown:V(k(v.chown),x.onChangeError),close:V(k(v.close),q),fsync:V(k(v.fsync),q),mkdir:V(k(v.mkdir),q),realpath:V(k(v.realpath),q),stat:V(k(v.stat),q),unlink:V(k(v.unlink),q),chmodSync:K(v.chmodSync,x.onChangeError),chownSync:K(v.chownSync,x.onChangeError),closeSync:K(v.closeSync,q),existsSync:K(v.existsSync,q),fsyncSync:K(v.fsync,q),mkdirSync:K(v.mkdirSync,q),realpathSync:K(v.realpathSync,q),statSync:K(v.statSync,q),unlinkSync:K(v.unlinkSync,q)},retry:{close:X(k(v.close),x.isRetriableError),fsync:X(k(v.fsync),x.isRetriableError),open:X(k(v.open),x.isRetriableError),readFile:X(k(v.readFile),x.isRetriableError),rename:X(k(v.rename),x.isRetriableError),stat:X(k(v.stat),x.isRetriableError),write:X(k(v.write),x.isRetriableError),writeFile:X(k(v.writeFile),x.isRetriableError),closeSync:Z(v.closeSync,x.isRetriableError),fsyncSync:Z(v.fsyncSync,x.isRetriableError),openSync:Z(v.openSync,x.isRetriableError),readFileSync:Z(v.readFileSync,x.isRetriableError),renameSync:Z(v.renameSync,x.isRetriableError),statSync:Z(v.statSync,x.isRetriableError),writeSync:Z(v.writeSync,x.isRetriableError),writeFileSync:Z(v.writeFileSync,x.isRetriableError)}},dr=xn;a();import ct from"node:fs";import Be from"node:path";a();a();a();var at=()=>{};var In=()=>{let e=at,t=at,r=!1,i=!1;return{promise:new Promise((f,l)=>{e=d=>(r=!0,f(d)),t=d=>(i=!0,l(d))}),resolve:e,reject:t,isPending:()=>!r&&!i,isResolved:()=>r,isRejected:()=>i}},mr=In;var Dn=()=>{let{promise:e,resolve:t,isPending:r}=mr(),i=0,n=()=>{i+=1},s=()=>{i-=1,!i&&t()};return(()=>{n(),queueMicrotask(s)})(),{promise:e,isPending:r,increment:n,decrement:s}},pr=Dn;a();var yr={then:e=>{e()}};a();var wr=e=>Array.isArray(e)?e:[e],gr=e=>typeof e=="function";var An=(e,t)=>{let r=t?.followSymlinks??!1,i=t?.depth??1/0,n=t?.limit??1/0,s=t?.ignore??[],o=wr(s).map(w=>gr(w)?w:y=>w.test(y)),c=w=>o.some(y=>y(w)),f=t?.signal??{aborted:!1},l=t?.onDirents||(()=>{}),d=[],u=new Set,h={},_=[],T=new Set,U={},M=[],ee=new Set,te={},ce={},N=new Set,F={directories:[],directoriesNames:new Set,directoriesNamesToPaths:{},files:[],filesNames:new Set,filesNamesToPaths:{},symlinks:[],symlinksNames:new Set,symlinksNamesToPaths:{},map:{}},re={directories:d,directoriesNames:u,directoriesNamesToPaths:h,files:_,filesNames:T,filesNamesToPaths:U,symlinks:M,symlinksNames:ee,symlinksNamesToPaths:te,map:ce},{promise:fe,increment:Me,decrement:W}=pr(),Y=0,Mt=(w,y,E,S)=>{N.has(y)||Y>=n||(Y+=1,w.directories.push(y),w.directoriesNames.add(E),d.push(y),u.add(E),h.propertyIsEnumerable(E)||(h[E]=[]),h[E].push(y),N.add(y),!(S>=i)&&(Y>=n||jt(y,S+1)))},Wt=(w,y,E)=>{N.has(y)||Y>=n||(Y+=1,w.files.push(y),w.filesNames.add(E),_.push(y),T.add(E),U.propertyIsEnumerable(E)||(U[E]=[]),U[E].push(y),N.add(y))},Gt=(w,y,E,S)=>{N.has(y)||Y>=n||(Y+=1,w.symlinks.push(y),w.symlinksNames.add(E),M.push(y),ee.add(E),te.propertyIsEnumerable(E)||(te[E]=[]),te[E].push(y),N.add(y),r&&(S>=i||Y>=n||dn(y,S+1)))},ln=(w,y,E,S,G)=>{f.aborted||c(y)||(S.isDirectory()?Mt(w,y,E,G):S.isFile()?Wt(w,y,E):S.isSymbolicLink()&&Gt(w,y,E,G))},un=(w,y,E,S)=>{if(f.aborted)return;let G=y===Be.sep?"":Be.sep,B=E.name,ye=`${y}${G}${B}`;c(ye)||(E.isDirectory()?Mt(w,ye,B,S):E.isFile()?Wt(w,ye,B):E.isSymbolicLink()&&Gt(w,ye,B,S))},hn=(w,y,E,S)=>{for(let G=0,B=E.length;G<B;G++)un(w,y,E[G],S)},jt=(w,y)=>{f.aborted||y>i||Y>=n||(Me(),ct.readdir(w,{withFileTypes:!0},(E,S)=>{if(E||f.aborted||!S.length)return W();(l(S)||yr).then(()=>{let B=ce[w]={directories:[],directoriesNames:new Set,directoriesNamesToPaths:{},files:[],filesNames:new Set,filesNamesToPaths:{},symlinks:[],symlinksNames:new Set,symlinksNamesToPaths:{}};hn(B,w,S,y),W()})}))},dn=(w,y)=>{Me(),ct.realpath(w,(E,S)=>{if(E||f.aborted)return W();ct.stat(S,(G,B)=>{if(G||f.aborted)return W();let ye=Be.basename(S),mn=ce[w]={directories:[],directoriesNames:new Set,directoriesNamesToPaths:{},files:[],filesNames:new Set,filesNamesToPaths:{},symlinks:[],symlinksNames:new Set,symlinksNamesToPaths:{}};ln(mn,S,ye,B,y),W()})})};return(async(w,y=1)=>(w=Be.normalize(w),N.add(w),jt(w,y),await fe,f.aborted?F:re))(e)},Er=An;var z={lang:{debounce:je,attempt:e=>{try{return e()}catch(t){return z.lang.castError(t)}},castArray:e=>z.lang.isArray(e)?e:[e],castError:e=>z.lang.isError(e)?e:z.lang.isString(e)?new Error(e):new Error("Unknown error"),defer:e=>setTimeout(e,0),isArray:e=>Array.isArray(e),isError:e=>e instanceof Error,isFunction:e=>typeof e=="function",isNaN:e=>Number.isNaN(e),isNumber:e=>typeof e=="number",isPrimitive:e=>{if(e===null)return!0;let t=typeof e;return t!=="object"&&t!=="function"},isShallowEqual:(e,t)=>{if(e===t)return!0;if(z.lang.isNaN(e))return z.lang.isNaN(t);if(z.lang.isPrimitive(e)||z.lang.isPrimitive(t))return e===t;for(let r in e)if(!(r in t))return!1;for(let r in t)if(e[r]!==t[r])return!1;return!0},isSet:e=>e instanceof Set,isString:e=>typeof e=="string",isUndefined:e=>e===void 0,noop:()=>{},uniq:e=>e.length<2?e:Array.from(new Set(e))},fs:{getDepth:e=>Math.max(0,e.split(ft.sep).length-1),getRealPath:(e,t)=>{try{return t?vr.realpathSync.native(e):vr.realpathSync(e)}catch{return}},isSubPath:(e,t)=>t.startsWith(e)&&t[e.length]===ft.sep&&t.length-e.length>ft.sep.length,poll:(e,t=cr)=>dr.retry.stat(t)(e,{bigint:!0}).catch(z.lang.noop),readdir:async(e,t,r=1/0,i=1/0,n,s)=>{if(s&&r===1&&e in s){let o=s[e];return[o.directories,o.files]}else{let o=await Er(e,{depth:r,limit:i,ignore:t,signal:n});return[o.directories,o.files]}}}},p=z;a();import lt from"node:path";var ut=class{constructor(t,r,i){this.base=i,this.watcher=t,this.handler=r.handler,this.fswatcher=r.watcher,this.options=r.options,this.folderPath=r.folderPath,this.filePath=r.filePath,this.handlerBatched=this.base?this.base.onWatcherEvent.bind(this.base):this._makeHandlerBatched(this.options.debounce)}_isSubRoot(t){return this.filePath?t===this.filePath:t===this.folderPath||p.fs.isSubPath(this.folderPath,t)}_makeHandlerBatched(t=sr){return(()=>{let r=this.watcher._readyWait,i=[],n=new Set,s=async(c,f)=>{let l=this.options.ignoreInitial?[]:c,d=await this.eventsPopulate([...f]),u=this.eventsDeduplicate([...l,...d]);this.onTargetEvents(u)},o=p.lang.debounce(()=>{this.watcher.isClosed()||(r=s(i,n),i=[],n=new Set)},t);return async(c,f="",l=!1)=>{l?await this.eventsPopulate([f],i,!0):n.add(f),r.then(o)}})()}eventsDeduplicate(t){if(t.length<2)return t;let r={};return t.reduce((i,n)=>{let[s,o]=n,c=r[o];return s===c||s===m.CHANGE&&c===m.ADD||(r[o]=s,i.push(n)),i},[])}async eventsPopulate(t,r=[],i=!1){return await Promise.all(t.map(async n=>{let s=await this.watcher._poller.update(n,this.options.pollingTimeout);await Promise.all(s.map(async o=>{r.push([o,n]),o===m.ADD_DIR?await this.eventsPopulateAddDir(t,n,r,i):o===m.UNLINK_DIR&&await this.eventsPopulateUnlinkDir(t,n,r,i)}))})),r}async eventsPopulateAddDir(t,r,i=[],n=!1){if(n)return i;let s=this.options.recursive?this.options.depth??ie:Math.min(1,this.options.depth??ie),o=this.options.limit??ve,[c,f]=await p.fs.readdir(r,this.options.ignore,s,o,this.watcher._closeSignal),l=[...c,...f];return await Promise.all(l.map(d=>{if(!this.watcher.isIgnored(d,this.options.ignore)&&!t.includes(d))return this.eventsPopulate([d],i,!0)})),i}async eventsPopulateUnlinkDir(t,r,i=[],n=!1){if(n)return i;for(let s of this.watcher._poller.stats.keys())p.fs.isSubPath(r,s)&&(t.includes(s)||await this.eventsPopulate([s],i,!0));return i}onTargetAdd(t){this._isSubRoot(t)&&(this.options.renameDetection?this.watcher._locker.getLockTargetAdd(t,this.options.renameTimeout):this.watcher.event(m.ADD,t))}onTargetAddDir(t){t!==this.folderPath&&this.options.recursive&&!ne&&this.options.native!==!1&&this.watcher.watchDirectory(t,this.options,this.handler,void 0,this.base||this),this._isSubRoot(t)&&(this.options.renameDetection?this.watcher._locker.getLockTargetAddDir(t,this.options.renameTimeout):this.watcher.event(m.ADD_DIR,t))}onTargetChange(t){this._isSubRoot(t)&&this.watcher.event(m.CHANGE,t)}onTargetUnlink(t){this.watcher.watchersClose(lt.dirname(t),t,!1),this._isSubRoot(t)&&(this.options.renameDetection?this.watcher._locker.getLockTargetUnlink(t,this.options.renameTimeout):this.watcher.event(m.UNLINK,t))}onTargetUnlinkDir(t){this.watcher.watchersClose(lt.dirname(t),t,!1),this.watcher.watchersClose(t),this._isSubRoot(t)&&(this.options.renameDetection?this.watcher._locker.getLockTargetUnlinkDir(t,this.options.renameTimeout):this.watcher.event(m.UNLINK_DIR,t))}onTargetEvent(t){let[r,i]=t;r===m.ADD?this.onTargetAdd(i):r===m.ADD_DIR?this.onTargetAddDir(i):r===m.CHANGE?this.onTargetChange(i):r===m.UNLINK?this.onTargetUnlink(i):r===m.UNLINK_DIR&&this.onTargetUnlinkDir(i)}onTargetEvents(t){for(let r of t)this.onTargetEvent(r)}onWatcherEvent(t,r,i=!1){return this.handlerBatched(t,r,i)}onWatcherChange(t=le.CHANGE,r){if(this.watcher.isClosed())return;let i=lt.resolve(this.folderPath,r||"");this.filePath&&i!==this.folderPath&&i!==this.filePath||this.watcher.isIgnored(i,this.options.ignore)||this.onWatcherEvent(t,i)}onWatcherError(t){nt&&t.code==="EPERM"?this.onWatcherChange(le.CHANGE,""):this.watcher.error(t)}async init(){await this.initWatcherEvents(),await this.initInitialEvents()}async initWatcherEvents(){let t=this.onWatcherChange.bind(this);this.fswatcher.on(Ne.CHANGE,t);let r=this.onWatcherError.bind(this);this.fswatcher.on(Ne.ERROR,r)}async initInitialEvents(){let t=!this.watcher.isReady();if(this.filePath){if(this.watcher._poller.stats.has(this.filePath))return;await this.onWatcherEvent(le.CHANGE,this.filePath,t)}else{let r=this.options.recursive&&ne&&this.options.native!==!1?this.options.depth??ie:Math.min(1,this.options.depth??ie),i=this.options.limit??ve,[n,s]=await p.fs.readdir(this.folderPath,this.options.ignore,r,i,this.watcher._closeSignal,this.options.readdirMap),o=[this.folderPath,...n,...s];await Promise.all(o.map(c=>{if(!this.watcher._poller.stats.has(c)&&!this.watcher.isIgnored(c,this.options.ignore))return this.onWatcherEvent(le.CHANGE,c,t)}))}}},Nr=ut;a();a();var O={interval:100,intervalId:void 0,fns:new Map,init:()=>{O.intervalId||(O.intervalId=setInterval(O.resolve,O.interval))},reset:()=>{O.intervalId&&(clearInterval(O.intervalId),delete O.intervalId)},add:(e,t)=>{O.fns.set(e,Date.now()+t),O.init()},remove:e=>{O.fns.delete(e)},resolve:()=>{if(!O.fns.size)return O.reset();let e=Date.now();for(let[t,r]of O.fns)r>=e||(O.remove(t),t())}},Se=O;var xe=class e{constructor(t){this._watcher=t,this.reset()}getLockAdd(t,r=st){let{ino:i,targetPath:n,events:s,locks:o}=t,c=()=>{let u=this._watcher._poller.paths.find(i||-1,h=>h!==n);if(u&&u!==n){if(p.fs.getRealPath(n,!0)===u)return;this._watcher.event(s.rename,u,n)}else this._watcher.event(s.add,n)};if(!i)return c();let f=()=>{o.add.delete(i),Se.remove(l)},l=()=>{f(),c()};Se.add(l,r);let d=()=>{let u=o.unlink.get(i);if(!u)return;f();let h=u();n===h?s.change&&this._watcher._poller.stats.has(n)&&this._watcher.event(s.change,n):this._watcher.event(s.rename,h,n)};o.add.set(i,d),d()}getLockUnlink(t,r=st){let{ino:i,targetPath:n,events:s,locks:o}=t,c=()=>{this._watcher.event(s.unlink,n)};if(!i)return c();let f=()=>{o.unlink.delete(i),Se.remove(l)},l=()=>{f(),c()};Se.add(l,r);let d=()=>(f(),n);o.unlink.set(i,d),o.add.get(i)?.()}getLockTargetAdd(t,r){let i=this._watcher._poller.getIno(t,m.ADD,$.FILE);return this.getLockAdd({ino:i,targetPath:t,events:e.FILE_EVENTS,locks:this._locksFile},r)}getLockTargetAddDir(t,r){let i=this._watcher._poller.getIno(t,m.ADD_DIR,$.DIR);return this.getLockAdd({ino:i,targetPath:t,events:e.DIR_EVENTS,locks:this._locksDir},r)}getLockTargetUnlink(t,r){let i=this._watcher._poller.getIno(t,m.UNLINK,$.FILE);return this.getLockUnlink({ino:i,targetPath:t,events:e.FILE_EVENTS,locks:this._locksFile},r)}getLockTargetUnlinkDir(t,r){let i=this._watcher._poller.getIno(t,m.UNLINK_DIR,$.DIR);return this.getLockUnlink({ino:i,targetPath:t,events:e.DIR_EVENTS,locks:this._locksDir},r)}reset(){this._locksAdd=new Map,this._locksAddDir=new Map,this._locksUnlink=new Map,this._locksUnlinkDir=new Map,this._locksDir={add:this._locksAddDir,unlink:this._locksUnlinkDir},this._locksFile={add:this._locksAdd,unlink:this._locksUnlink}}};xe.DIR_EVENTS={add:m.ADD_DIR,rename:m.RENAME_DIR,unlink:m.UNLINK_DIR};xe.FILE_EVENTS={add:m.ADD,change:m.CHANGE,rename:m.RENAME,unlink:m.UNLINK};var _r=xe;a();a();var ht=class{constructor(){this.map=new Map}clear(){this.map.clear()}delete(t,r){if(p.lang.isUndefined(r))return this.map.delete(t);if(this.map.has(t)){let i=this.map.get(t);if(p.lang.isSet(i)){let n=i.delete(r);return i.size||this.map.delete(t),n}else if(i===r)return this.map.delete(t),!0}return!1}find(t,r){if(this.map.has(t)){let i=this.map.get(t);if(p.lang.isSet(i))return Array.from(i).find(r);if(r(i))return i}}get(t){return this.map.get(t)}has(t,r){if(p.lang.isUndefined(r))return this.map.has(t);if(this.map.has(t)){let i=this.map.get(t);return p.lang.isSet(i)?i.has(r):i===r}return!1}set(t,r){if(this.map.has(t)){let i=this.map.get(t);p.lang.isSet(i)?i.add(r):i!==r&&this.map.set(t,new Set([i,r]))}else this.map.set(t,r);return this}},dt=ht;a();var mt=class{constructor(t){this.ino=t.ino<=Number.MAX_SAFE_INTEGER?Number(t.ino):t.ino,this.size=Number(t.size),this.atimeMs=Number(t.atimeMs),this.mtimeMs=Number(t.mtimeMs),this.ctimeMs=Number(t.ctimeMs),this.birthtimeMs=Number(t.birthtimeMs),this._isFile=t.isFile(),this._isDirectory=t.isDirectory(),this._isSymbolicLink=t.isSymbolicLink()}isFile(){return this._isFile}isDirectory(){return this._isDirectory}isSymbolicLink(){return this._isSymbolicLink}},Sr=mt;var pt=class{constructor(){this.inos={},this.paths=new dt,this.stats=new Map}getIno(t,r,i){let n=this.inos[r];if(!n)return;let s=n[t];if(s&&!(i&&s[1]!==i))return s[0]}getStats(t){return this.stats.get(t)}async poll(t,r){let i=await p.fs.poll(t,r);if(!(!i||!(i.isFile()||i.isDirectory())))return new Sr(i)}reset(){this.inos={},this.paths=new dt,this.stats=new Map}async update(t,r){let i=this.getStats(t),n=await this.poll(t,r);if(this.updateStats(t,n),!i&&n){if(n.isFile())return this.updateIno(t,m.ADD,n),[m.ADD];if(n.isDirectory())return this.updateIno(t,m.ADD_DIR,n),[m.ADD_DIR]}else if(i&&!n){if(i.isFile())return this.updateIno(t,m.UNLINK,i),[m.UNLINK];if(i.isDirectory())return this.updateIno(t,m.UNLINK_DIR,i),[m.UNLINK_DIR]}else if(i&&n){if(i.isFile()){if(n.isFile())return i.ino===n.ino&&!i.size&&!n.size?[]:(this.updateIno(t,m.CHANGE,n),[m.CHANGE]);if(n.isDirectory())return this.updateIno(t,m.UNLINK,i),this.updateIno(t,m.ADD_DIR,n),[m.UNLINK,m.ADD_DIR]}else if(i.isDirectory()){if(n.isFile())return this.updateIno(t,m.UNLINK_DIR,i),this.updateIno(t,m.ADD,n),[m.UNLINK_DIR,m.ADD];if(n.isDirectory())return i.ino===n.ino?[]:(this.updateIno(t,m.UNLINK_DIR,i),this.updateIno(t,m.ADD_DIR,n),[m.UNLINK_DIR,m.ADD_DIR])}}return[]}updateIno(t,r,i){let n=this.inos[r]=this.inos[r]||(this.inos[r]={}),s=i.isFile()?$.FILE:$.DIR;n[t]=[i.ino,s]}updateStats(t,r){if(r)this.paths.set(r.ino,t),this.stats.set(t,r);else{let i=this.stats.get(t)?.ino||-1;this.paths.delete(i,t),this.stats.delete(t)}}},yt=pt;var gt=class e extends Cn{constructor(t,r,i){super(),this._closed=!1,this._ready=!1,this._closeAborter=new AbortController,this._closeSignal=this._closeAborter.signal,this.on(L.CLOSE,()=>this._closeAborter.abort()),this._closeWait=new Promise(n=>this.on(L.CLOSE,n)),this._readyWait=new Promise(n=>this.on(L.READY,n)),this._locker=new _r(this),this._roots=new Set,this._poller=new yt,this._pollers=new Set,this._subwatchers=new Set,this._watchers={},this._watchersLock=Promise.resolve(),this._watchersRestorable={},this.watch(t,r,i)}isClosed(){return this._closed}isIgnored(t,r){return!!r&&(p.lang.isFunction(r)?!!r(t):r.test(t))}isReady(){return this._ready}close(){return this._locker.reset(),this._poller.reset(),this._roots.clear(),this.watchersClose(),this.isClosed()?!1:(this._closed=!0,this.emit(L.CLOSE))}error(t){if(this.isClosed())return!1;let r=p.lang.castError(t);return this.emit(L.ERROR,r)}event(t,r,i){return this.isClosed()?!1:(this.emit(L.ALL,t,r,i),this.emit(t,r,i))}ready(){return this.isClosed()||this.isReady()?!1:(this._ready=!0,this.emit(L.READY))}pollerExists(t,r){for(let i of this._pollers)if(i.targetPath===t&&p.lang.isShallowEqual(i.options,r))return!0;return!1}subwatcherExists(t,r){for(let i of this._subwatchers)if(i.targetPath===t&&p.lang.isShallowEqual(i.options,r))return!0;return!1}watchersClose(t,r,i=!0){if(t){let n=this._watchers[t];if(n)for(let s of[...n])r&&s.filePath!==r||this.watcherClose(s);if(i)for(let s in this._watchers)p.fs.isSubPath(t,s)&&this.watchersClose(s,r,!1)}else for(let n in this._watchers)this.watchersClose(n,r,!1)}watchersLock(t){return this._watchersLock.then(()=>this._watchersLock=new Promise(async r=>{await t(),r()}))}watchersRestore(){delete this._watchersRestoreTimeout;let t=Object.entries(this._watchersRestorable);this._watchersRestorable={};for(let[r,i]of t)this.watchPath(r,i.options,i.handler)}async watcherAdd(t,r){let{folderPath:i}=t;(this._watchers[i]=this._watchers[i]||[]).push(t);let s=new Nr(this,t,r);return await s.init(),s}watcherClose(t){t.watcher.close();let r=this._watchers[t.folderPath];if(r){let s=r.indexOf(t);r.splice(s,1),r.length||delete this._watchers[t.folderPath]}let i=t.filePath||t.folderPath;this._roots.has(i)&&(this._watchersRestorable[i]=t,this._watchersRestoreTimeout||(this._watchersRestoreTimeout=p.lang.defer(()=>this.watchersRestore())))}watcherExists(t,r,i,n){if(this._watchers[t]?.find(c=>c.handler===i&&(!c.filePath||c.filePath===n)&&c.options.ignore===r.ignore&&!!c.options.native==!!r.native&&(!r.recursive||c.options.recursive)))return!0;let o=we.dirname(t);for(let c=1;c<1/0;c++){if(this._watchers[o]?.find(d=>(c===1||d.options.recursive&&c<=(d.options.depth??ie))&&d.handler===i&&(!d.filePath||d.filePath===n)&&d.options.ignore===r.ignore&&!!d.options.native==!!r.native&&(!r.recursive||d.options.recursive&&ne&&d.options.native!==!1)))return!0;if(!ne)break;let l=we.dirname(t);if(o===l)break;o=l}return!1}async watchDirectories(t,r,i,n,s){if(this.isClosed())return;t=p.lang.uniq(t).sort();let o;for(let c of t)if(!this.isIgnored(c,r.ignore)&&!this.watcherExists(c,r,i,n))try{let f=!r.recursive||ne&&r.native!==!1?r:{...r,recursive:!1},d={watcher:wt.watch(c,f),handler:i,options:r,folderPath:c,filePath:n},u=o=await this.watcherAdd(d,s);if(this._roots.has(n||c)){let _={...r,ignoreInitial:!0,recursive:!1},T=we.dirname(c),U=c;await this.watchDirectories([T],_,i,U,u)}}catch(f){this.error(f)}return o}async watchDirectory(t,r,i,n,s){if(!this.isClosed()&&!this.isIgnored(t,r.ignore)){if(!r.recursive||ne&&r.native!==!1)return this.watchersLock(()=>this.watchDirectories([t],r,i,n,s));{r={...r,recursive:!0};let o=r.depth??ie,c=r.limit??ve,[f]=await p.fs.readdir(t,r.ignore,o,c,this._closeSignal,r.readdirMap);return this.watchersLock(async()=>{let l=await this.watchDirectories([t],r,i,n,s);if(f.length){let d=p.fs.getDepth(t);for(let u of f){let h=p.fs.getDepth(u),_=Math.max(0,o-(h-d)),T={...r,depth:_};await this.watchDirectories([u],T,i,n,s||l)}}})}}}async watchFileOnce(t,r,i){if(this.isClosed()||(r={...r,ignoreInitial:!1},this.subwatcherExists(t,r)))return;let n={targetPath:t,options:r},s=(l,d)=>{d===t&&(f(),i())},o=new e(s),c=()=>{this._subwatchers.add(n),this.on(L.CLOSE,f),o.watchFile(t,r,s)},f=()=>{this._subwatchers.delete(n),this.removeListener(L.CLOSE,f),o.close()};return c()}async watchFile(t,r,i){if(this.isClosed()||this.isIgnored(t,r.ignore))return;r={...r,recursive:!1};let n=we.dirname(t);return this.watchDirectory(n,r,i,t)}async watchPollingOnce(t,r,i){if(this.isClosed())return;let n=!1,s=new yt,o=await this.watchPolling(t,r,async()=>{n||!(await s.update(t,r.pollingTimeout)).length||n||(n=!0,o(),i())})}async watchPolling(t,r,i){if(this.isClosed())return p.lang.noop;if(this.pollerExists(t,r))return p.lang.noop;let n={...r,interval:r.pollingInterval??ar},s={targetPath:t,options:r},o=()=>{this._pollers.add(s),this.on(L.CLOSE,c),wt.watchFile(t,n,i)},c=()=>{this._pollers.delete(s),this.removeListener(L.CLOSE,c),wt.unwatchFile(t,i)};return p.lang.attempt(o),()=>p.lang.attempt(c)}async watchUnknownChild(t,r,i){if(this.isClosed())return;let n=()=>this.watchPath(t,r,i);return this.watchFileOnce(t,r,n)}async watchUnknownTarget(t,r,i){if(this.isClosed())return;let n=()=>this.watchPath(t,r,i);return this.watchPollingOnce(t,r,n)}async watchPaths(t,r,i){if(this.isClosed())return;if(t=p.lang.uniq(t).sort(),t.every((s,o)=>t.every((c,f)=>f===o||!p.fs.isSubPath(s,c))))await Promise.all(t.map(s=>this.watchPath(s,r,i)));else for(let s of t)await this.watchPath(s,r,i)}async watchPath(t,r,i){if(this.isClosed()||(t=we.resolve(t),this.isIgnored(t,r.ignore)))return;let n=await p.fs.poll(t,r.pollingTimeout);if(n){if(n.isFile())return this.watchFile(t,r,i);if(n.isDirectory())return this.watchDirectory(t,r,i);this.error(`"${t}" is not supported`)}else{let s=we.dirname(t);return(await p.fs.poll(s,r.pollingTimeout))?.isDirectory()?this.watchUnknownChild(t,r,i):this.watchUnknownTarget(t,r,i)}}async watch(t,r,i=p.lang.noop){if(p.lang.isFunction(t))return this.watch([],{},t);if(p.lang.isUndefined(t))return this.watch([],r,i);if(p.lang.isFunction(r))return this.watch(t,{},r);if(p.lang.isUndefined(r))return this.watch(t,{},i);if(this.isClosed())return;this.isReady()&&(r.readdirMap=void 0);let n=p.lang.castArray(t);n.forEach(s=>this._roots.add(s)),await this.watchPaths(n,r,i),!this.isClosed()&&(i!==p.lang.noop&&this.on(L.ALL,i),r.readdirMap=void 0,this.ready())}},xr=gt;var cn=We(Kr(),1);a();var zr=e=>(t,...r)=>{if($t(t))return zr({...e,...t});let i=Kt(e)(t,...r);Ge.isInteractive?Ge.updateFooter(i):Ge.writeStdout(i)},Et=zr({});a();var nn=We(rn(),1);var sn=(e,t)=>{e.log.info("notifying user",{notification:t}),nn.default.notify({title:"Gadget",contentImage:rt("favicon-128@4x.png"),icon:rt("favicon-128@4x.png"),sound:!0,timeout:!1,...t},r=>{r&&e.log.warn("error notifying user",{notification:t})})};var xl={...tr,"--prefer":er,"--file-push-delay":{type:Number,default:(0,ae.default)("100ms")},"--file-watch-debounce":{type:Number,default:(0,ae.default)("300ms")},"--file-watch-poll-interval":{type:Number,default:(0,ae.default)("3s")},"--file-watch-poll-timeout":{type:Number,default:(0,ae.default)("20s")},"--file-watch-rename-timeout":{type:Number,default:(0,ae.default)("1.25s")}},Il=e=>H`
|
|
4
4
|
Clones your Gadget environment's files to your local machine and keeps it in sync, in order to
|
|
@@ -54,4 +54,4 @@ ${r.sprint({indent:4})}
|
|
|
54
54
|
|
|
55
55
|
Waiting for file changes${Jt.ellipsis} {gray Press Ctrl+C to stop}
|
|
56
56
|
`};export{xl as args,Dl as run,Il as usage};
|
|
57
|
-
//# sourceMappingURL=dev-
|
|
57
|
+
//# sourceMappingURL=dev-VHJ52BEA.js.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{b as m}from"./chunk-
|
|
1
|
+
import{b as m}from"./chunk-ERYUXLYS.js";import{f as l}from"./chunk-BOQUW6DS.js";import"./chunk-D2K5XPNJ.js";import{i as g}from"./chunk-PSRZ5JH5.js";import"./chunk-CKSTMUDN.js";import"./chunk-AQRCAWW4.js";import{N as a,U as n,V as p,W as e}from"./chunk-GBCD37US.js";import"./chunk-F3EZ4KS3.js";import"./chunk-GOBNB5VT.js";import{g as s}from"./chunk-5WC5D4WL.js";s();var v=()=>n`
|
|
2
2
|
List the apps available to the currently logged-in user.
|
|
3
3
|
|
|
4
4
|
{bold Usage}
|
|
@@ -8,4 +8,4 @@ import{b as m}from"./chunk-5DLLJX5F.js";import{f as l}from"./chunk-G3VNV5Z6.js";
|
|
|
8
8
|
|
|
9
9
|
Visit https://gadget.new to create one!
|
|
10
10
|
`;return}if(a.isInteractive)m({json:t,headers:["Name","Domain"],rows:t.map(o=>[o.slug,o.primaryDomain])});else{let o="";for(let i of t)o+=p`${i.slug}\t${i.primaryDomain}`;e({json:t})(o)}};export{w as run,v as usage};
|
|
11
|
-
//# sourceMappingURL=list-
|
|
11
|
+
//# sourceMappingURL=list-5E3R22IC.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{e as a,f as b,g as c}from"./chunk-PSRZ5JH5.js";import"./chunk-CKSTMUDN.js";import"./chunk-AQRCAWW4.js";import"./chunk-GBCD37US.js";import"./chunk-F3EZ4KS3.js";import"./chunk-GOBNB5VT.js";import"./chunk-5WC5D4WL.js";export{c as login,b as run,a as usage};
|
|
2
|
+
//# sourceMappingURL=login-3DL45WY7.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import{r as n,s as r}from"./chunk-
|
|
1
|
+
import{r as n,s as r}from"./chunk-AQRCAWW4.js";import{U as t,W as o}from"./chunk-GBCD37US.js";import"./chunk-GOBNB5VT.js";import{g as e}from"./chunk-5WC5D4WL.js";e();var a=()=>t`
|
|
2
2
|
Log out of your account.
|
|
3
3
|
|
|
4
4
|
{bold Usage}
|
|
5
5
|
ggt logout
|
|
6
6
|
`,c=s=>{n()?(r(void 0),o("Goodbye")):o("You are not logged in")};export{c as run,a as usage};
|
|
7
|
-
//# sourceMappingURL=logout-
|
|
7
|
+
//# sourceMappingURL=logout-HX6MM4S6.js.map
|
package/dist/main.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import{a as F}from"./chunk-BSCZOMV4.js";import{a as C,b as T,c as j}from"./chunk-
|
|
2
|
+
import{a as F}from"./chunk-BSCZOMV4.js";import{a as C,b as T,c as j}from"./chunk-XCHCCJJZ.js";import{a as E,b as J}from"./chunk-APHXRHNI.js";import{c as w}from"./chunk-D2K5XPNJ.js";import{a as I,c,d as O,j as N,m as x}from"./chunk-CKSTMUDN.js";import{a as h,b as $}from"./chunk-AQRCAWW4.js";import{C as b,E as L,G as s,I as u,N as f,P as S,U as l,W as a,e as m,f as v}from"./chunk-GBCD37US.js";import"./chunk-F3EZ4KS3.js";import"./chunk-GOBNB5VT.js";import{e as p,g as i}from"./chunk-5WC5D4WL.js";i();i();var D=p(h(),1);i();var B=p(I(),1);i();var A=p($(),1),d=p(L(),1),y=p(h(),1),R=p(F(),1);import _ from"node:assert";import P from"node:path";var V=(0,y.default)("12 hours"),K=m.object({name:m.literal("ggt"),"dist-tags":m.object({latest:m.string(),experimental:m.string()})}),z=async o=>{let t=await x({context:{ctx:o},method:"GET",url:"https://registry.npmjs.org/ggt",responseType:"json",resolveBodyOnly:!0,timeout:{request:(0,y.default)("5s")}});return K.parse(t)["dist-tags"]},H=async()=>{try{let o=Number(await d.default.readFile(P.join(u.cacheDir,"last-update-check"),"utf8"));return _(!Number.isNaN(o)),(0,A.default)().isAfter(o+V)}catch{return!0}},M=async o=>{try{if(!await H())return;await d.default.outputFile(P.join(u.cacheDir,"last-update-check"),String(Date.now()));let e=await z(o),r,n,g;s.version.includes("experimental")?(r=e.experimental,n=s.version!==r,g=l`
|
|
3
3
|
Update available! {red ${s.version}} → {green ${r}}
|
|
4
4
|
Run "npm install -g ${s.name}@experimental" to update.
|
|
5
5
|
`):(r=e.latest,n=R.default.lt(s.version,r),g=l`
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{g as y,l as f,m as u,n as $,o as v}from"./chunk-
|
|
1
|
+
import{g as y,l as f,m as u,n as $,o as v}from"./chunk-RJOIQTYZ.js";import{g as w}from"./chunk-BOQUW6DS.js";import{c as g}from"./chunk-D2K5XPNJ.js";import"./chunk-Q5N5L6H3.js";import{d as r}from"./chunk-PSRZ5JH5.js";import{i as p}from"./chunk-CKSTMUDN.js";import"./chunk-AQRCAWW4.js";import{U as t,W as i,n as h}from"./chunk-GBCD37US.js";import"./chunk-F3EZ4KS3.js";import"./chunk-GOBNB5VT.js";import{g as d}from"./chunk-5WC5D4WL.js";d();var R={...u,"--show-all":{type:Boolean}},J=o=>t`
|
|
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 y,l as f,m as u,n as $,o as v}from"./chunk-YRP2UZ2I.js";import{g as
|
|
|
71
71
|
`)}await r(`https://${e.app.primaryDomain}/edit/${e.env.name}/model/${a}/${n}`),i`
|
|
72
72
|
Opened ${n} viewer for environment {cyanBright ${e.env.name}} for model {cyanBright ${a}}.
|
|
73
73
|
`;break}default:h(s)}},O=["logs","permissions","data","schema"];export{R as args,j as run,J as usage};
|
|
74
|
-
//# sourceMappingURL=open-
|
|
74
|
+
//# sourceMappingURL=open-GEEWPSF4.js.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{m as g}from"./chunk-
|
|
1
|
+
import{m as g}from"./chunk-P2XPMNL6.js";import{m as i,n as l,o as c}from"./chunk-RJOIQTYZ.js";import"./chunk-ERYUXLYS.js";import"./chunk-BOQUW6DS.js";import"./chunk-APHXRHNI.js";import"./chunk-D2K5XPNJ.js";import"./chunk-Q5N5L6H3.js";import"./chunk-PSRZ5JH5.js";import{i as a}from"./chunk-CKSTMUDN.js";import"./chunk-AQRCAWW4.js";import{U as t,W as s}from"./chunk-GBCD37US.js";import"./chunk-F3EZ4KS3.js";import"./chunk-GOBNB5VT.js";import{g as r}from"./chunk-5WC5D4WL.js";r();var v={...i,"--force":{type:Boolean,alias:"-f"}},w=e=>t`
|
|
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
|
|
@@ -27,4 +27,4 @@ import{m as g}from"./chunk-KXK37C5D.js";import{m as i,n as l,o as c}from"./chunk
|
|
|
27
27
|
`);let p=await c(process.cwd()),y=await l.loadOrInit(e,{directory:p}),o=new g(y),n=await o.hashes(e);if(n.environmentChangesToPull.size===0){s({ensureEmptyLineAbove:!0})`
|
|
28
28
|
Nothing to pull.
|
|
29
29
|
`;return}n.localChangesToPush.size>0&&await o.print(e,{hashes:n}),await o.pull(e,{hashes:n})};export{v as args,P as run,w as usage};
|
|
30
|
-
//# sourceMappingURL=pull-
|
|
30
|
+
//# sourceMappingURL=pull-T2Q4M4UN.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{a,b,c}from"./chunk-GACF5GYF.js";import"./chunk-P2XPMNL6.js";import"./chunk-RJOIQTYZ.js";import"./chunk-ERYUXLYS.js";import"./chunk-BOQUW6DS.js";import"./chunk-APHXRHNI.js";import"./chunk-D2K5XPNJ.js";import"./chunk-Q5N5L6H3.js";import"./chunk-PSRZ5JH5.js";import"./chunk-CKSTMUDN.js";import"./chunk-AQRCAWW4.js";import"./chunk-GBCD37US.js";import"./chunk-F3EZ4KS3.js";import"./chunk-GOBNB5VT.js";import"./chunk-5WC5D4WL.js";export{a as args,c as run,b as usage};
|
|
2
|
+
//# sourceMappingURL=push-LUW25FYF.js.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{i as m,j as p,m as h}from"./chunk-
|
|
1
|
+
import{i as m,j as p,m as h}from"./chunk-P2XPMNL6.js";import{g as c,m as f,n as y,o as u}from"./chunk-RJOIQTYZ.js";import"./chunk-ERYUXLYS.js";import"./chunk-BOQUW6DS.js";import"./chunk-APHXRHNI.js";import"./chunk-D2K5XPNJ.js";import"./chunk-Q5N5L6H3.js";import"./chunk-PSRZ5JH5.js";import{i as g}from"./chunk-CKSTMUDN.js";import"./chunk-AQRCAWW4.js";import{U as r}from"./chunk-GBCD37US.js";import"./chunk-F3EZ4KS3.js";import"./chunk-GOBNB5VT.js";import{g as i}from"./chunk-5WC5D4WL.js";i();var A=f,J=()=>r`
|
|
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{i as m,j as p,m as h}from"./chunk-KXK37C5D.js";import{g as c,m as f,n as
|
|
|
11
11
|
|
|
12
12
|
Run "ggt status -h" for more information.
|
|
13
13
|
`);let e=await u(process.cwd()),o=await y.load(t,{directory:e});if(!o)throw new c(t,{directory:e});o.print();let a=new h(o),s=await a.hashes(t);await a.print(t,{hashes:s});let n=m({localChanges:s.localChanges,environmentChanges:s.environmentChanges});n.size>0&&(t.log.debug("conflicts detected",{conflicts:n}),p({conflicts:n}))};export{A as args,U as run,J as usage};
|
|
14
|
-
//# sourceMappingURL=status-
|
|
14
|
+
//# sourceMappingURL=status-5VZH3KXH.js.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{G as e,
|
|
1
|
+
import{G as e,U as n,W as o}from"./chunk-GBCD37US.js";import"./chunk-GOBNB5VT.js";import{g as t}from"./chunk-5WC5D4WL.js";t();var i=()=>n`
|
|
2
2
|
Print this version of ggt.
|
|
3
3
|
|
|
4
4
|
{gray Usage}
|
|
@@ -8,4 +8,4 @@ import{G as e,T as n,V as o}from"./chunk-BZY2AIPV.js";import"./chunk-GOBNB5VT.js
|
|
|
8
8
|
When there is a new release of ggt, running ggt will show you a message letting you
|
|
9
9
|
know that an update is available.
|
|
10
10
|
`,m=r=>{o(e.version)};export{m as run,i as usage};
|
|
11
|
-
//# sourceMappingURL=version-
|
|
11
|
+
//# sourceMappingURL=version-OF4TQ2K6.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import{h as n}from"./chunk-
|
|
1
|
+
import{h as n}from"./chunk-PSRZ5JH5.js";import"./chunk-CKSTMUDN.js";import"./chunk-AQRCAWW4.js";import{U as a,W as o}from"./chunk-GBCD37US.js";import"./chunk-F3EZ4KS3.js";import"./chunk-GOBNB5VT.js";import{g as r}from"./chunk-5WC5D4WL.js";r();var g=()=>a`
|
|
2
2
|
Show the name and email address of the currently logged in user.
|
|
3
3
|
|
|
4
4
|
{gray Usage}
|
|
5
5
|
ggt whoami
|
|
6
6
|
`,u=async s=>{let e=await n(s);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}`};export{u as run,g as usage};
|
|
7
|
-
//# sourceMappingURL=whoami-
|
|
7
|
+
//# sourceMappingURL=whoami-V3XD27QH.js.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gadgetinc/ggt",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.6",
|
|
4
4
|
"description": "The command-line interface for Gadget",
|
|
5
5
|
"homepage": "https://github.com/gadget-inc/ggt",
|
|
6
6
|
"bugs": {
|
|
@@ -53,7 +53,7 @@
|
|
|
53
53
|
"chalk": "^5.3.0",
|
|
54
54
|
"chalk-template": "^1.1.0",
|
|
55
55
|
"clean-stack": "^5.2.0",
|
|
56
|
-
"cli-cursor": "^
|
|
56
|
+
"cli-cursor": "^5.0.0",
|
|
57
57
|
"cli-spinners": "^2.9.2",
|
|
58
58
|
"cli-table3": "^0.6.5",
|
|
59
59
|
"concurrently": "^8.2.2",
|
|
@@ -66,7 +66,7 @@
|
|
|
66
66
|
"eslint-plugin-import": "^2.29.1",
|
|
67
67
|
"eslint-plugin-jsdoc": "^48.8.3",
|
|
68
68
|
"eslint-plugin-only-warn": "^1.1.0",
|
|
69
|
-
"eslint-plugin-unicorn": "^
|
|
69
|
+
"eslint-plugin-unicorn": "^55.0.0",
|
|
70
70
|
"execa": "^8.0.1",
|
|
71
71
|
"fast-levenshtein": "^3.0.0",
|
|
72
72
|
"figures": "^6.1.0",
|