@gadgetinc/ggt 0.3.3 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +139 -76
- package/bin/dev.js +4 -7
- package/lib/__generated__/graphql.js.map +1 -1
- package/lib/commands/deploy.js +227 -0
- package/lib/commands/deploy.js.map +1 -0
- package/lib/commands/list.js +20 -16
- package/lib/commands/list.js.map +1 -1
- package/lib/commands/login.js +22 -20
- package/lib/commands/login.js.map +1 -1
- package/lib/commands/logout.js +13 -9
- package/lib/commands/logout.js.map +1 -1
- package/lib/commands/root.js +89 -56
- package/lib/commands/root.js.map +1 -1
- package/lib/commands/sync.js +253 -496
- package/lib/commands/sync.js.map +1 -1
- package/lib/commands/version.js +21 -0
- package/lib/commands/version.js.map +1 -0
- package/lib/commands/whoami.js +15 -11
- package/lib/commands/whoami.js.map +1 -1
- package/lib/main.js +4 -10
- package/lib/main.js.map +1 -1
- package/lib/services/{app.js → app/app.js} +8 -3
- package/lib/services/app/app.js.map +1 -0
- package/lib/services/app/arg.js +28 -0
- package/lib/services/app/arg.js.map +1 -0
- package/lib/services/app/edit-graphql.js +389 -0
- package/lib/services/app/edit-graphql.js.map +1 -0
- package/lib/services/command/arg.js +53 -0
- package/lib/services/command/arg.js.map +1 -0
- package/lib/services/command/command.js +27 -0
- package/lib/services/command/command.js.map +1 -0
- package/lib/services/command/context.js +60 -0
- package/lib/services/command/context.js.map +1 -0
- package/lib/services/{config.js → config/config.js} +29 -31
- package/lib/services/config/config.js.map +1 -0
- package/lib/services/config/env.js +22 -0
- package/lib/services/config/env.js.map +1 -0
- package/lib/services/config/package-json.js +9 -0
- package/lib/services/config/package-json.js.map +1 -0
- package/lib/services/filesync/changes.js +97 -0
- package/lib/services/filesync/changes.js.map +1 -0
- package/lib/services/filesync/conflicts.js +137 -0
- package/lib/services/filesync/conflicts.js.map +1 -0
- package/lib/services/filesync/directory.js +253 -0
- package/lib/services/filesync/directory.js.map +1 -0
- package/lib/services/filesync/error.js +67 -0
- package/lib/services/filesync/error.js.map +1 -0
- package/lib/services/filesync/file.js +3 -0
- package/lib/services/filesync/file.js.map +1 -0
- package/lib/services/filesync/filesync.js +675 -0
- package/lib/services/filesync/filesync.js.map +1 -0
- package/lib/services/filesync/hashes.js +150 -0
- package/lib/services/filesync/hashes.js.map +1 -0
- package/lib/services/http/auth.js +41 -0
- package/lib/services/http/auth.js.map +1 -0
- package/lib/services/http/http.js +64 -0
- package/lib/services/http/http.js.map +1 -0
- package/lib/services/output/log/field.js +3 -0
- package/lib/services/output/log/field.js.map +1 -0
- package/lib/services/output/log/format/format.js +8 -0
- package/lib/services/output/log/format/format.js.map +1 -0
- package/lib/services/output/log/format/json.js +45 -0
- package/lib/services/output/log/format/json.js.map +1 -0
- package/lib/services/output/log/format/pretty.js +147 -0
- package/lib/services/output/log/format/pretty.js.map +1 -0
- package/lib/services/output/log/level.js +41 -0
- package/lib/services/output/log/level.js.map +1 -0
- package/lib/services/output/log/logger.js +40 -0
- package/lib/services/output/log/logger.js.map +1 -0
- package/lib/services/output/log/printer.js +120 -0
- package/lib/services/output/log/printer.js.map +1 -0
- package/lib/services/output/log/structured.js +52 -0
- package/lib/services/output/log/structured.js.map +1 -0
- package/lib/services/{notify.js → output/notify.js} +7 -6
- package/lib/services/output/notify.js.map +1 -0
- package/lib/services/output/prompt.js +52 -0
- package/lib/services/output/prompt.js.map +1 -0
- package/lib/services/output/report.js +162 -0
- package/lib/services/output/report.js.map +1 -0
- package/lib/services/output/sprint.js +21 -0
- package/lib/services/output/sprint.js.map +1 -0
- package/lib/services/output/stream.js +54 -0
- package/lib/services/output/stream.js.map +1 -0
- package/lib/services/{version.js → output/update.js} +24 -16
- package/lib/services/output/update.js.map +1 -0
- package/lib/services/user/session.js +50 -0
- package/lib/services/user/session.js.map +1 -0
- package/lib/services/{user.js → user/user.js} +23 -14
- package/lib/services/user/user.js.map +1 -0
- package/lib/services/util/boolean.js +15 -0
- package/lib/services/util/boolean.js.map +1 -0
- package/lib/services/util/collection.js +38 -0
- package/lib/services/util/collection.js.map +1 -0
- package/lib/services/util/function.js +97 -0
- package/lib/services/util/function.js.map +1 -0
- package/lib/services/{is.js → util/is.js} +7 -0
- package/lib/services/util/is.js.map +1 -0
- package/lib/services/util/number.js +27 -0
- package/lib/services/util/number.js.map +1 -0
- package/lib/services/util/object.js +101 -0
- package/lib/services/util/object.js.map +1 -0
- package/lib/services/util/paths.js +36 -0
- package/lib/services/util/paths.js.map +1 -0
- package/lib/services/{promise.js → util/promise.js} +5 -7
- package/lib/services/util/promise.js.map +1 -0
- package/npm-shrinkwrap.json +2143 -1304
- package/package.json +50 -42
- package/lib/commands/index.js +0 -9
- package/lib/commands/index.js.map +0 -1
- package/lib/services/app.js.map +0 -1
- package/lib/services/args.js +0 -28
- package/lib/services/args.js.map +0 -1
- package/lib/services/collections.js +0 -17
- package/lib/services/collections.js.map +0 -1
- package/lib/services/config.js.map +0 -1
- package/lib/services/debounce.js +0 -21
- package/lib/services/debounce.js.map +0 -1
- package/lib/services/defaults.js +0 -8
- package/lib/services/defaults.js.map +0 -1
- package/lib/services/edit-graphql.js +0 -202
- package/lib/services/edit-graphql.js.map +0 -1
- package/lib/services/errors.js +0 -277
- package/lib/services/errors.js.map +0 -1
- package/lib/services/filesync.js +0 -404
- package/lib/services/filesync.js.map +0 -1
- package/lib/services/fs.js +0 -35
- package/lib/services/fs.js.map +0 -1
- package/lib/services/http.js +0 -53
- package/lib/services/http.js.map +0 -1
- package/lib/services/is.js.map +0 -1
- package/lib/services/log.js +0 -45
- package/lib/services/log.js.map +0 -1
- package/lib/services/noop.js +0 -4
- package/lib/services/noop.js.map +0 -1
- package/lib/services/notify.js.map +0 -1
- package/lib/services/output.js +0 -74
- package/lib/services/output.js.map +0 -1
- package/lib/services/promise.js.map +0 -1
- package/lib/services/prompt.js +0 -22
- package/lib/services/prompt.js.map +0 -1
- package/lib/services/session.js +0 -31
- package/lib/services/session.js.map +0 -1
- package/lib/services/sleep.js +0 -21
- package/lib/services/sleep.js.map +0 -1
- package/lib/services/timeout.js +0 -8
- package/lib/services/timeout.js.map +0 -1
- package/lib/services/user.js.map +0 -1
- package/lib/services/version.js.map +0 -1
package/lib/services/output.js
DELETED
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
import { _ as _define_property } from "@swc/helpers/_/_define_property";
|
|
2
|
-
import chalkTemplate from "chalk-template";
|
|
3
|
-
import levenshtein from "fast-levenshtein";
|
|
4
|
-
import assert from "node:assert";
|
|
5
|
-
import process from "node:process";
|
|
6
|
-
import { dedent } from "ts-dedent";
|
|
7
|
-
import { isObject, isString } from "./is.js";
|
|
8
|
-
/**
|
|
9
|
-
* A wrapper around process.stdout and process.stderr that allows us to mock out the streams for testing.
|
|
10
|
-
*
|
|
11
|
-
* @see https://github.com/oclif/core/blob/16139fe8a7f991b4b446a1599ab63f15d9809b8e/src/cli-ux/stream.ts
|
|
12
|
-
*/ export class Stream {
|
|
13
|
-
get isTTY() {
|
|
14
|
-
return process[this.channel].isTTY;
|
|
15
|
-
}
|
|
16
|
-
getWindowSize() {
|
|
17
|
-
return process[this.channel].getWindowSize();
|
|
18
|
-
}
|
|
19
|
-
write(data) {
|
|
20
|
-
return process[this.channel].write(data);
|
|
21
|
-
}
|
|
22
|
-
on(event, listener) {
|
|
23
|
-
process[this.channel].on(event, listener);
|
|
24
|
-
return this;
|
|
25
|
-
}
|
|
26
|
-
once(event, listener) {
|
|
27
|
-
process[this.channel].once(event, listener);
|
|
28
|
-
return this;
|
|
29
|
-
}
|
|
30
|
-
constructor(channel){
|
|
31
|
-
_define_property(this, "channel", void 0);
|
|
32
|
-
this.channel = channel;
|
|
33
|
-
process[this.channel].on("error", (err)=>{
|
|
34
|
-
if (isObject(err) && "code" in err && err.code === "EPIPE") {
|
|
35
|
-
return;
|
|
36
|
-
}
|
|
37
|
-
throw err;
|
|
38
|
-
});
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
export const stdout = new Stream("stdout");
|
|
42
|
-
export const stderr = new Stream("stderr");
|
|
43
|
-
export const sprint = (template, ...values)=>{
|
|
44
|
-
const content = isString(template) ? template : chalkTemplate(template, ...values);
|
|
45
|
-
return dedent(content);
|
|
46
|
-
};
|
|
47
|
-
export const sprintln = (template, ...values)=>{
|
|
48
|
-
return sprint(template, ...values) + "\n";
|
|
49
|
-
};
|
|
50
|
-
export const sprintln2 = (template, ...values)=>{
|
|
51
|
-
return sprint(template, ...values) + "\n\n";
|
|
52
|
-
};
|
|
53
|
-
export const print = (template, ...values)=>{
|
|
54
|
-
stdout.write(sprint(template, ...values));
|
|
55
|
-
};
|
|
56
|
-
export const println = (template, ...values)=>{
|
|
57
|
-
if (template) {
|
|
58
|
-
stdout.write(sprint(template, ...values));
|
|
59
|
-
}
|
|
60
|
-
stdout.write("\n");
|
|
61
|
-
};
|
|
62
|
-
export const println2 = (template, ...values)=>{
|
|
63
|
-
if (template) {
|
|
64
|
-
stdout.write(sprint(template, ...values));
|
|
65
|
-
}
|
|
66
|
-
stdout.write("\n\n");
|
|
67
|
-
};
|
|
68
|
-
export const sortByLevenshtein = (input, options)=>{
|
|
69
|
-
const strings = Array.from(options);
|
|
70
|
-
assert(strings.length > 0, "options must not be empty");
|
|
71
|
-
return strings.sort((a, b)=>levenshtein.get(a, input) - levenshtein.get(b, input));
|
|
72
|
-
};
|
|
73
|
-
|
|
74
|
-
//# sourceMappingURL=output.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/services/output.ts"],"sourcesContent":["import chalkTemplate from \"chalk-template\";\nimport levenshtein from \"fast-levenshtein\";\nimport assert from \"node:assert\";\nimport process from \"node:process\";\nimport { dedent } from \"ts-dedent\";\nimport { isObject, isString } from \"./is.js\";\n\n/**\n * A wrapper around process.stdout and process.stderr that allows us to mock out the streams for testing.\n *\n * @see https://github.com/oclif/core/blob/16139fe8a7f991b4b446a1599ab63f15d9809b8e/src/cli-ux/stream.ts\n */\nexport class Stream {\n public constructor(public channel: \"stdout\" | \"stderr\") {\n process[this.channel].on(\"error\", (err: unknown) => {\n if (isObject(err) && \"code\" in err && err.code === \"EPIPE\") {\n return;\n }\n throw err;\n });\n }\n\n public get isTTY(): boolean {\n return process[this.channel].isTTY;\n }\n\n public getWindowSize(): number[] {\n return process[this.channel].getWindowSize();\n }\n\n public write(data: string): boolean {\n return process[this.channel].write(data);\n }\n\n public on(event: string, listener: (...args: unknown[]) => void): this {\n process[this.channel].on(event, listener);\n return this;\n }\n\n public once(event: string, listener: (...args: unknown[]) => void): this {\n process[this.channel].once(event, listener);\n return this;\n }\n}\n\nexport const stdout = new Stream(\"stdout\");\nexport const stderr = new Stream(\"stderr\");\n\nexport const sprint = (template: TemplateStringsArray | string, ...values: unknown[]) => {\n const content = isString(template) ? template : chalkTemplate(template, ...values);\n return dedent(content);\n};\n\nexport const sprintln = (template: TemplateStringsArray | string, ...values: unknown[]) => {\n return sprint(template, ...values) + \"\\n\";\n};\n\nexport const sprintln2 = (template: TemplateStringsArray | string, ...values: unknown[]) => {\n return sprint(template, ...values) + \"\\n\\n\";\n};\n\nexport const print = (template: TemplateStringsArray | string, ...values: unknown[]) => {\n stdout.write(sprint(template, ...values));\n};\n\nexport const println = (template?: TemplateStringsArray | string, ...values: unknown[]) => {\n if (template) {\n stdout.write(sprint(template, ...values));\n }\n stdout.write(\"\\n\");\n};\n\nexport const println2 = (template?: TemplateStringsArray | string, ...values: unknown[]) => {\n if (template) {\n stdout.write(sprint(template, ...values));\n }\n stdout.write(\"\\n\\n\");\n};\n\nexport const sortByLevenshtein = (input: string, options: Iterable<string>): [closest: string, ...sorted: string[]] => {\n const strings = Array.from(options);\n assert(strings.length > 0, \"options must not be empty\");\n return strings.sort((a, b) => levenshtein.get(a, input) - levenshtein.get(b, input)) as [string, ...string[]];\n};\n"],"names":["chalkTemplate","levenshtein","assert","process","dedent","isObject","isString","Stream","isTTY","channel","getWindowSize","write","data","on","event","listener","once","err","code","stdout","stderr","sprint","template","values","content","sprintln","sprintln2","print","println","println2","sortByLevenshtein","input","options","strings","Array","from","length","sort","a","b","get"],"mappings":";AAAA,OAAOA,mBAAmB,iBAAiB;AAC3C,OAAOC,iBAAiB,mBAAmB;AAC3C,OAAOC,YAAY,cAAc;AACjC,OAAOC,aAAa,eAAe;AACnC,SAASC,MAAM,QAAQ,YAAY;AACnC,SAASC,QAAQ,EAAEC,QAAQ,QAAQ,UAAU;AAE7C;;;;CAIC,GACD,OAAO,MAAMC;IAUX,IAAWC,QAAiB;QAC1B,OAAOL,OAAO,CAAC,IAAI,CAACM,OAAO,CAAC,CAACD,KAAK;IACpC;IAEOE,gBAA0B;QAC/B,OAAOP,OAAO,CAAC,IAAI,CAACM,OAAO,CAAC,CAACC,aAAa;IAC5C;IAEOC,MAAMC,IAAY,EAAW;QAClC,OAAOT,OAAO,CAAC,IAAI,CAACM,OAAO,CAAC,CAACE,KAAK,CAACC;IACrC;IAEOC,GAAGC,KAAa,EAAEC,QAAsC,EAAQ;QACrEZ,OAAO,CAAC,IAAI,CAACM,OAAO,CAAC,CAACI,EAAE,CAACC,OAAOC;QAChC,OAAO,IAAI;IACb;IAEOC,KAAKF,KAAa,EAAEC,QAAsC,EAAQ;QACvEZ,OAAO,CAAC,IAAI,CAACM,OAAO,CAAC,CAACO,IAAI,CAACF,OAAOC;QAClC,OAAO,IAAI;IACb;IA7BA,YAAmB,AAAON,OAA4B,CAAE;;aAA9BA,UAAAA;QACxBN,OAAO,CAAC,IAAI,CAACM,OAAO,CAAC,CAACI,EAAE,CAAC,SAAS,CAACI;YACjC,IAAIZ,SAASY,QAAQ,UAAUA,OAAOA,IAAIC,IAAI,KAAK,SAAS;gBAC1D;YACF;YACA,MAAMD;QACR;IACF;AAuBF;AAEA,OAAO,MAAME,SAAS,IAAIZ,OAAO,UAAU;AAC3C,OAAO,MAAMa,SAAS,IAAIb,OAAO,UAAU;AAE3C,OAAO,MAAMc,SAAS,CAACC,UAAyC,GAAGC;IACjE,MAAMC,UAAUlB,SAASgB,YAAYA,WAAWtB,cAAcsB,aAAaC;IAC3E,OAAOnB,OAAOoB;AAChB,EAAE;AAEF,OAAO,MAAMC,WAAW,CAACH,UAAyC,GAAGC;IACnE,OAAOF,OAAOC,aAAaC,UAAU;AACvC,EAAE;AAEF,OAAO,MAAMG,YAAY,CAACJ,UAAyC,GAAGC;IACpE,OAAOF,OAAOC,aAAaC,UAAU;AACvC,EAAE;AAEF,OAAO,MAAMI,QAAQ,CAACL,UAAyC,GAAGC;IAChEJ,OAAOR,KAAK,CAACU,OAAOC,aAAaC;AACnC,EAAE;AAEF,OAAO,MAAMK,UAAU,CAACN,UAA0C,GAAGC;IACnE,IAAID,UAAU;QACZH,OAAOR,KAAK,CAACU,OAAOC,aAAaC;IACnC;IACAJ,OAAOR,KAAK,CAAC;AACf,EAAE;AAEF,OAAO,MAAMkB,WAAW,CAACP,UAA0C,GAAGC;IACpE,IAAID,UAAU;QACZH,OAAOR,KAAK,CAACU,OAAOC,aAAaC;IACnC;IACAJ,OAAOR,KAAK,CAAC;AACf,EAAE;AAEF,OAAO,MAAMmB,oBAAoB,CAACC,OAAeC;IAC/C,MAAMC,UAAUC,MAAMC,IAAI,CAACH;IAC3B9B,OAAO+B,QAAQG,MAAM,GAAG,GAAG;IAC3B,OAAOH,QAAQI,IAAI,CAAC,CAACC,GAAGC,IAAMtC,YAAYuC,GAAG,CAACF,GAAGP,SAAS9B,YAAYuC,GAAG,CAACD,GAAGR;AAC/E,EAAE"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/services/promise.ts"],"sourcesContent":["import assert from \"node:assert\";\n\n/**\n * Long lived references to Promises stress the garbage collector in JS.\n *\n * Instead of caching resolved Promises, we cache these little data\n * objects instead which reference the resolution or rejection of the\n * Promise, allowing the Promise object to be free'd.\n */\nexport class PromiseWrapper<T> {\n resolution?: T;\n rejection?: unknown;\n pendingPromise?: Promise<T>;\n\n constructor(promise: Promise<T>) {\n this.pendingPromise = promise;\n\n promise\n .then((res) => {\n this.resolution = res;\n return res;\n })\n .catch((err) => {\n this.rejection = err;\n })\n .finally(() => {\n delete this.pendingPromise;\n });\n }\n\n async unwrap(): Promise<T> {\n if (this.resolution) {\n return this.resolution;\n } else if (this.rejection) {\n // eslint-disable-next-line @typescript-eslint/no-throw-literal\n throw this.rejection;\n } else {\n assert(this.pendingPromise);\n return await this.pendingPromise;\n }\n }\n}\n\n/**\n * A promise that can be resolved or rejected from outside its callback.\n *\n * This is typically used when you want to await a promise that is\n * resolved or rejected from outside the current scope, such as from an\n * event handler.\n *\n * @example\n * const signal = new PromiseSignal();\n * process.on(\"SIGINT\", () => {\n * signal.resolve();\n * });\n * await signal;\n */\nexport class PromiseSignal<T = void> implements Promise<T> {\n readonly [Symbol.toStringTag]!: string;\n\n resolve!: (value: T | PromiseLike<T>) => void;\n reject!: (reason?: unknown) => void;\n\n private _promise: PromiseWrapper<T>;\n\n constructor() {\n this._promise = new PromiseWrapper<T>(\n new Promise((resolve, reject) => {\n this.resolve = resolve;\n this.reject = reject;\n }),\n );\n\n this[Symbol.toStringTag] = String(this._promise.pendingPromise);\n }\n\n then<R = T, E = never>(\n onfulfilled?: (value: T) => R | PromiseLike<R>,\n onrejected?: (reason: unknown) => E | PromiseLike<E>,\n ): Promise<R | E> {\n return this._promise.unwrap().then(onfulfilled, onrejected);\n }\n\n catch<E = never>(onrejected?: (reason: unknown) => E | PromiseLike<E>): Promise<T | E> {\n return this._promise.unwrap().catch(onrejected);\n }\n\n finally(onfinally?: () => void): Promise<T> {\n return this._promise.unwrap().finally(onfinally);\n }\n}\n"],"names":["assert","PromiseWrapper","unwrap","resolution","rejection","pendingPromise","constructor","promise","then","res","catch","err","finally","Symbol","toStringTag","PromiseSignal","onfulfilled","onrejected","_promise","onfinally","resolve","reject","Promise","String"],"mappings":";AAAA,OAAOA,YAAY,cAAc;AAEjC;;;;;;CAMC,GACD,OAAO,MAAMC;IAqBX,MAAMC,SAAqB;QACzB,IAAI,IAAI,CAACC,UAAU,EAAE;YACnB,OAAO,IAAI,CAACA,UAAU;QACxB,OAAO,IAAI,IAAI,CAACC,SAAS,EAAE;YACzB,+DAA+D;YAC/D,MAAM,IAAI,CAACA,SAAS;QACtB,OAAO;YACLJ,OAAO,IAAI,CAACK,cAAc;YAC1B,OAAO,MAAM,IAAI,CAACA,cAAc;QAClC;IACF;IA1BAC,YAAYC,OAAmB,CAAE;QAJjCJ,uBAAAA,cAAAA,KAAAA;QACAC,uBAAAA,aAAAA,KAAAA;QACAC,uBAAAA,kBAAAA,KAAAA;QAGE,IAAI,CAACA,cAAc,GAAGE;QAEtBA,QACGC,IAAI,CAAC,CAACC;YACL,IAAI,CAACN,UAAU,GAAGM;YAClB,OAAOA;QACT,GACCC,KAAK,CAAC,CAACC;YACN,IAAI,CAACP,SAAS,GAAGO;QACnB,GACCC,OAAO,CAAC;YACP,OAAO,IAAI,CAACP,cAAc;QAC5B;IACJ;AAaF;IAiBYQ,sBAAAA,OAAOC,WAAW;AAf9B;;;;;;;;;;;;;CAaC,GACD,OAAO,MAAMC;IAmBXP,KACEQ,WAA8C,EAC9CC,UAAoD,EACpC;QAChB,OAAO,IAAI,CAACC,QAAQ,CAAChB,MAAM,GAAGM,IAAI,CAACQ,aAAaC;IAClD;IAEAP,MAAiBO,UAAoD,EAAkB;QACrF,OAAO,IAAI,CAACC,QAAQ,CAAChB,MAAM,GAAGQ,KAAK,CAACO;IACtC;IAEAL,QAAQO,SAAsB,EAAc;QAC1C,OAAO,IAAI,CAACD,QAAQ,CAAChB,MAAM,GAAGU,OAAO,CAACO;IACxC;IAxBAb,aAAc;QAPd,uBAAUO,qBAAV,KAAA;QAEAO,uBAAAA,WAAAA,KAAAA;QACAC,uBAAAA,UAAAA,KAAAA;QAEA,uBAAQH,YAAR,KAAA;QAGE,IAAI,CAACA,QAAQ,GAAG,IAAIjB,eAClB,IAAIqB,QAAQ,CAACF,SAASC;YACpB,IAAI,CAACD,OAAO,GAAGA;YACf,IAAI,CAACC,MAAM,GAAGA;QAChB;QAGF,IAAI,CAACR,OAAOC,WAAW,CAAC,GAAGS,OAAO,IAAI,CAACL,QAAQ,CAACb,cAAc;IAChE;AAgBF"}
|
package/lib/services/prompt.js
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import enquirer from "enquirer";
|
|
2
|
-
export const select = async (prompt)=>{
|
|
3
|
-
const { result } = await enquirer.prompt({
|
|
4
|
-
type: "select",
|
|
5
|
-
name: "result",
|
|
6
|
-
onCancel: ()=>process.exit(0),
|
|
7
|
-
choices: prompt.choices,
|
|
8
|
-
message: prompt.message
|
|
9
|
-
});
|
|
10
|
-
return result;
|
|
11
|
-
};
|
|
12
|
-
export const confirm = async (prompt)=>{
|
|
13
|
-
const { result } = await enquirer.prompt({
|
|
14
|
-
type: "confirm",
|
|
15
|
-
name: "result",
|
|
16
|
-
onCancel: ()=>process.exit(0),
|
|
17
|
-
message: prompt.message
|
|
18
|
-
});
|
|
19
|
-
return result;
|
|
20
|
-
};
|
|
21
|
-
|
|
22
|
-
//# sourceMappingURL=prompt.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/services/prompt.ts"],"sourcesContent":["import enquirer from \"enquirer\";\n\ninterface Prompt {\n message: string;\n}\n\ninterface SelectPrompt<T extends string> extends Prompt {\n choices: T[];\n}\n\nexport const select = async <T extends string>(prompt: SelectPrompt<T>): Promise<T> => {\n const { result } = await enquirer.prompt<{ result: T }>({\n type: \"select\",\n name: \"result\",\n onCancel: () => process.exit(0),\n choices: prompt.choices,\n message: prompt.message,\n });\n\n return result;\n};\n\nexport const confirm = async (prompt: Prompt): Promise<boolean> => {\n const { result } = await enquirer.prompt<{ result: boolean }>({\n type: \"confirm\",\n name: \"result\",\n onCancel: () => process.exit(0),\n message: prompt.message,\n });\n\n return result;\n};\n"],"names":["enquirer","select","prompt","result","type","name","onCancel","process","exit","choices","message","confirm"],"mappings":"AAAA,OAAOA,cAAc,WAAW;AAUhC,OAAO,MAAMC,SAAS,OAAyBC;IAC7C,MAAM,EAAEC,MAAM,EAAE,GAAG,MAAMH,SAASE,MAAM,CAAgB;QACtDE,MAAM;QACNC,MAAM;QACNC,UAAU,IAAMC,QAAQC,IAAI,CAAC;QAC7BC,SAASP,OAAOO,OAAO;QACvBC,SAASR,OAAOQ,OAAO;IACzB;IAEA,OAAOP;AACT,EAAE;AAEF,OAAO,MAAMQ,UAAU,OAAOT;IAC5B,MAAM,EAAEC,MAAM,EAAE,GAAG,MAAMH,SAASE,MAAM,CAAsB;QAC5DE,MAAM;QACNC,MAAM;QACNC,UAAU,IAAMC,QAAQC,IAAI,CAAC;QAC7BE,SAASR,OAAOQ,OAAO;IACzB;IAEA,OAAOP;AACT,EAAE"}
|
package/lib/services/session.js
DELETED
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import fs from "fs-extra";
|
|
2
|
-
import path from "node:path";
|
|
3
|
-
import { config } from "./config.js";
|
|
4
|
-
import { swallowEnoent } from "./fs.js";
|
|
5
|
-
import { createLogger } from "./log.js";
|
|
6
|
-
const log = createLogger("session");
|
|
7
|
-
export const readSession = ()=>{
|
|
8
|
-
if (process.env["GGT_SESSION"]) {
|
|
9
|
-
log.debug("reading session from env");
|
|
10
|
-
return process.env["GGT_SESSION"];
|
|
11
|
-
}
|
|
12
|
-
try {
|
|
13
|
-
log.debug("reading session from disk");
|
|
14
|
-
return fs.readFileSync(path.join(config.configDir, "session.txt"), "utf-8");
|
|
15
|
-
} catch (error) {
|
|
16
|
-
swallowEnoent(error);
|
|
17
|
-
return undefined;
|
|
18
|
-
}
|
|
19
|
-
};
|
|
20
|
-
export const writeSession = (session)=>{
|
|
21
|
-
log.debug("writing session to disk", {
|
|
22
|
-
session: Boolean(session)
|
|
23
|
-
});
|
|
24
|
-
if (session) {
|
|
25
|
-
fs.outputFileSync(path.join(config.configDir, "session.txt"), session);
|
|
26
|
-
} else {
|
|
27
|
-
fs.removeSync(path.join(config.configDir, "session.txt"));
|
|
28
|
-
}
|
|
29
|
-
};
|
|
30
|
-
|
|
31
|
-
//# sourceMappingURL=session.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/services/session.ts"],"sourcesContent":["import fs from \"fs-extra\";\nimport path from \"node:path\";\nimport { config } from \"./config.js\";\nimport { swallowEnoent } from \"./fs.js\";\nimport { createLogger } from \"./log.js\";\n\nconst log = createLogger(\"session\");\n\nexport const readSession = (): string | undefined => {\n if (process.env[\"GGT_SESSION\"]) {\n log.debug(\"reading session from env\");\n return process.env[\"GGT_SESSION\"];\n }\n\n try {\n log.debug(\"reading session from disk\");\n return fs.readFileSync(path.join(config.configDir, \"session.txt\"), \"utf-8\");\n } catch (error) {\n swallowEnoent(error);\n return undefined;\n }\n};\n\nexport const writeSession = (session: string | undefined) => {\n log.debug(\"writing session to disk\", { session: Boolean(session) });\n\n if (session) {\n fs.outputFileSync(path.join(config.configDir, \"session.txt\"), session);\n } else {\n fs.removeSync(path.join(config.configDir, \"session.txt\"));\n }\n};\n"],"names":["fs","path","config","swallowEnoent","createLogger","log","readSession","process","env","debug","readFileSync","join","configDir","error","undefined","writeSession","session","Boolean","outputFileSync","removeSync"],"mappings":"AAAA,OAAOA,QAAQ,WAAW;AAC1B,OAAOC,UAAU,YAAY;AAC7B,SAASC,MAAM,QAAQ,cAAc;AACrC,SAASC,aAAa,QAAQ,UAAU;AACxC,SAASC,YAAY,QAAQ,WAAW;AAExC,MAAMC,MAAMD,aAAa;AAEzB,OAAO,MAAME,cAAc;IACzB,IAAIC,QAAQC,GAAG,CAAC,cAAc,EAAE;QAC9BH,IAAII,KAAK,CAAC;QACV,OAAOF,QAAQC,GAAG,CAAC,cAAc;IACnC;IAEA,IAAI;QACFH,IAAII,KAAK,CAAC;QACV,OAAOT,GAAGU,YAAY,CAACT,KAAKU,IAAI,CAACT,OAAOU,SAAS,EAAE,gBAAgB;IACrE,EAAE,OAAOC,OAAO;QACdV,cAAcU;QACd,OAAOC;IACT;AACF,EAAE;AAEF,OAAO,MAAMC,eAAe,CAACC;IAC3BX,IAAII,KAAK,CAAC,2BAA2B;QAAEO,SAASC,QAAQD;IAAS;IAEjE,IAAIA,SAAS;QACXhB,GAAGkB,cAAc,CAACjB,KAAKU,IAAI,CAACT,OAAOU,SAAS,EAAE,gBAAgBI;IAChE,OAAO;QACLhB,GAAGmB,UAAU,CAAClB,KAAKU,IAAI,CAACT,OAAOU,SAAS,EAAE;IAC5C;AACF,EAAE"}
|
package/lib/services/sleep.js
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import { timeoutMs } from "./timeout.js";
|
|
2
|
-
export const sleep = (ms = 0)=>{
|
|
3
|
-
return new Promise((resolve)=>ms === 0 ? setImmediate(resolve) : setTimeout(resolve, ms));
|
|
4
|
-
};
|
|
5
|
-
export const sleepUntil = async (fn, { interval = 0, timeout = timeoutMs("5s") } = {})=>{
|
|
6
|
-
const start = isFinite(timeout) && Date.now();
|
|
7
|
-
// eslint-disable-next-line no-constant-condition, @typescript-eslint/no-unnecessary-condition
|
|
8
|
-
while(true){
|
|
9
|
-
if (fn()) {
|
|
10
|
-
return;
|
|
11
|
-
}
|
|
12
|
-
await sleep(interval);
|
|
13
|
-
if (start && Date.now() - start > timeout) {
|
|
14
|
-
const error = new Error(`Timed out after ${timeout} milliseconds`);
|
|
15
|
-
Error.captureStackTrace(error, sleepUntil);
|
|
16
|
-
throw error;
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
};
|
|
20
|
-
|
|
21
|
-
//# sourceMappingURL=sleep.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/services/sleep.ts"],"sourcesContent":["import { timeoutMs } from \"./timeout.js\";\n\nexport const sleep = (ms = 0): Promise<void> => {\n return new Promise((resolve) => (ms === 0 ? setImmediate(resolve) : setTimeout(resolve, ms)));\n};\n\nexport const sleepUntil = async (fn: () => boolean, { interval = 0, timeout = timeoutMs(\"5s\") } = {}): Promise<void> => {\n const start = isFinite(timeout) && Date.now();\n\n // eslint-disable-next-line no-constant-condition, @typescript-eslint/no-unnecessary-condition\n while (true) {\n if (fn()) {\n return;\n }\n await sleep(interval);\n\n if (start && Date.now() - start > timeout) {\n const error = new Error(`Timed out after ${timeout} milliseconds`);\n Error.captureStackTrace(error, sleepUntil);\n throw error;\n }\n }\n};\n"],"names":["timeoutMs","sleep","ms","Promise","resolve","setImmediate","setTimeout","sleepUntil","fn","interval","timeout","start","isFinite","Date","now","error","Error","captureStackTrace"],"mappings":"AAAA,SAASA,SAAS,QAAQ,eAAe;AAEzC,OAAO,MAAMC,QAAQ,CAACC,KAAK,CAAC;IAC1B,OAAO,IAAIC,QAAQ,CAACC,UAAaF,OAAO,IAAIG,aAAaD,WAAWE,WAAWF,SAASF;AAC1F,EAAE;AAEF,OAAO,MAAMK,aAAa,OAAOC,IAAmB,EAAEC,WAAW,CAAC,EAAEC,UAAUV,UAAU,KAAK,EAAE,GAAG,CAAC,CAAC;IAClG,MAAMW,QAAQC,SAASF,YAAYG,KAAKC,GAAG;IAE3C,8FAA8F;IAC9F,MAAO,KAAM;QACX,IAAIN,MAAM;YACR;QACF;QACA,MAAMP,MAAMQ;QAEZ,IAAIE,SAASE,KAAKC,GAAG,KAAKH,QAAQD,SAAS;YACzC,MAAMK,QAAQ,IAAIC,MAAM,CAAC,gBAAgB,EAAEN,QAAQ,aAAa,CAAC;YACjEM,MAAMC,iBAAiB,CAACF,OAAOR;YAC/B,MAAMQ;QACR;IACF;AACF,EAAE"}
|
package/lib/services/timeout.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/services/timeout.ts"],"sourcesContent":["import ms from \"ms\";\nimport process from \"node:process\";\n\nexport const timeoutMs = (duration: string) => {\n const milliseconds = ms(duration);\n return process.env[\"CI\"] ? milliseconds * 2 : milliseconds;\n};\n"],"names":["ms","process","timeoutMs","duration","milliseconds","env"],"mappings":"AAAA,OAAOA,QAAQ,KAAK;AACpB,OAAOC,aAAa,eAAe;AAEnC,OAAO,MAAMC,YAAY,CAACC;IACxB,MAAMC,eAAeJ,GAAGG;IACxB,OAAOF,QAAQI,GAAG,CAAC,KAAK,GAAGD,eAAe,IAAIA;AAChD,EAAE"}
|
package/lib/services/user.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/services/user.ts"],"sourcesContent":["import assert from \"node:assert\";\nimport z from \"zod\";\nimport { run as login } from \"../commands/login.js\";\nimport { pick } from \"./collections.js\";\nimport { config } from \"./config.js\";\nimport { setUser } from \"./errors.js\";\nimport { http, loadCookie, swallowUnauthorized } from \"./http.js\";\nimport { createLogger } from \"./log.js\";\nimport { confirm } from \"./prompt.js\";\n\nconst log = createLogger(\"user\");\n\nconst User = z.object({\n id: z.union([z.string(), z.number()]).transform(Number),\n name: z.string().nullish(),\n email: z.string(),\n});\n\nexport type User = z.infer<typeof User>;\n\n/**\n * @returns The current user.\n */\nexport const getUser = async (): Promise<User | undefined> => {\n const cookie = loadCookie();\n if (!cookie) {\n return undefined;\n }\n\n try {\n const json = await http({\n url: `https://${config.domains.services}/auth/api/current-user`,\n headers: { cookie },\n responseType: \"json\",\n resolveBodyOnly: true,\n });\n\n const user = User.parse(json);\n setUser(user);\n log.info(\"loaded current user\", { user: pick(user, [\"id\", \"name\", \"email\"]) });\n\n return user;\n } catch (error) {\n swallowUnauthorized(error);\n return undefined;\n }\n};\n\nexport const getUserOrLogin = async (message = \"You must be logged in to use this command. Would you like to log in?\"): Promise<User> => {\n let user = await getUser();\n if (user) {\n return user;\n }\n\n log.info(\"prompting user to log in\");\n const yes = await confirm({ message });\n if (!yes) {\n process.exit(0);\n }\n\n await login();\n\n user = await getUser();\n assert(user, \"missing user after successful login\");\n\n return user;\n};\n"],"names":["assert","z","run","login","pick","config","setUser","http","loadCookie","swallowUnauthorized","createLogger","confirm","log","User","object","id","union","string","number","transform","Number","name","nullish","email","getUser","cookie","undefined","json","url","domains","services","headers","responseType","resolveBodyOnly","user","parse","info","error","getUserOrLogin","message","yes","process","exit"],"mappings":"AAAA,OAAOA,YAAY,cAAc;AACjC,OAAOC,OAAO,MAAM;AACpB,SAASC,OAAOC,KAAK,QAAQ,uBAAuB;AACpD,SAASC,IAAI,QAAQ,mBAAmB;AACxC,SAASC,MAAM,QAAQ,cAAc;AACrC,SAASC,OAAO,QAAQ,cAAc;AACtC,SAASC,IAAI,EAAEC,UAAU,EAAEC,mBAAmB,QAAQ,YAAY;AAClE,SAASC,YAAY,QAAQ,WAAW;AACxC,SAASC,OAAO,QAAQ,cAAc;AAEtC,MAAMC,MAAMF,aAAa;AAEzB,MAAMG,OAAOZ,EAAEa,MAAM,CAAC;IACpBC,IAAId,EAAEe,KAAK,CAAC;QAACf,EAAEgB,MAAM;QAAIhB,EAAEiB,MAAM;KAAG,EAAEC,SAAS,CAACC;IAChDC,MAAMpB,EAAEgB,MAAM,GAAGK,OAAO;IACxBC,OAAOtB,EAAEgB,MAAM;AACjB;AAIA;;CAEC,GACD,OAAO,MAAMO,UAAU;IACrB,MAAMC,SAASjB;IACf,IAAI,CAACiB,QAAQ;QACX,OAAOC;IACT;IAEA,IAAI;QACF,MAAMC,OAAO,MAAMpB,KAAK;YACtBqB,KAAK,CAAC,QAAQ,EAAEvB,OAAOwB,OAAO,CAACC,QAAQ,CAAC,sBAAsB,CAAC;YAC/DC,SAAS;gBAAEN;YAAO;YAClBO,cAAc;YACdC,iBAAiB;QACnB;QAEA,MAAMC,OAAOrB,KAAKsB,KAAK,CAACR;QACxBrB,QAAQ4B;QACRtB,IAAIwB,IAAI,CAAC,uBAAuB;YAAEF,MAAM9B,KAAK8B,MAAM;gBAAC;gBAAM;gBAAQ;aAAQ;QAAE;QAE5E,OAAOA;IACT,EAAE,OAAOG,OAAO;QACd5B,oBAAoB4B;QACpB,OAAOX;IACT;AACF,EAAE;AAEF,OAAO,MAAMY,iBAAiB,OAAOC,UAAU,sEAAsE;IACnH,IAAIL,OAAO,MAAMV;IACjB,IAAIU,MAAM;QACR,OAAOA;IACT;IAEAtB,IAAIwB,IAAI,CAAC;IACT,MAAMI,MAAM,MAAM7B,QAAQ;QAAE4B;IAAQ;IACpC,IAAI,CAACC,KAAK;QACRC,QAAQC,IAAI,CAAC;IACf;IAEA,MAAMvC;IAEN+B,OAAO,MAAMV;IACbxB,OAAOkC,MAAM;IAEb,OAAOA;AACT,EAAE"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/services/version.ts"],"sourcesContent":["import boxen from \"boxen\";\nimport dayjs from \"dayjs\";\nimport fs from \"fs-extra\";\nimport ms from \"ms\";\nimport assert from \"node:assert\";\nimport path from \"node:path\";\nimport semver from \"semver\";\nimport { z } from \"zod\";\nimport { config } from \"./config.js\";\nimport { http } from \"./http.js\";\nimport { createLogger } from \"./log.js\";\nimport { println, sprint } from \"./output.js\";\n\nconst log = createLogger(\"version\");\n\nconst UPDATE_CHECK_FREQUENCY = ms(\"12 hours\");\n\nexport const getDistTags = async () => {\n const json = await http({\n method: \"GET\",\n url: \"https://registry.npmjs.org/ggt\",\n responseType: \"json\",\n resolveBodyOnly: true,\n timeout: {\n request: ms(\"5s\"),\n },\n });\n\n const parsed = z\n .object({\n name: z.literal(\"ggt\"),\n \"dist-tags\": z.object({\n latest: z.string(),\n }),\n })\n .parse(json);\n\n return parsed[\"dist-tags\"];\n};\n\nexport const shouldCheckForUpdate = async () => {\n try {\n const lastCheck = Number(await fs.readFile(path.join(config.cacheDir, \"last-update-check\"), \"utf-8\"));\n assert(!Number.isNaN(lastCheck));\n return dayjs().isAfter(lastCheck + UPDATE_CHECK_FREQUENCY);\n } catch (error) {\n return true;\n }\n};\n\nexport const warnIfUpdateAvailable = async () => {\n try {\n const shouldCheck = await shouldCheckForUpdate();\n if (!shouldCheck) {\n return;\n }\n\n await fs.outputFile(path.join(config.cacheDir, \"last-update-check\"), String(Date.now()));\n\n const tags = await getDistTags();\n\n if (semver.lt(config.version, tags.latest)) {\n log.info(\"update available\", { current: config.version, latest: tags.latest });\n println(\n boxen(\n sprint`\n Update available! {red ${config.version}} -> {green ${tags.latest}}.\n Changelog: https://github.com/gadget-inc/ggt/releases/tag/v${tags.latest}\n Run \"npm install -g ${config.name}\" to update.\n `,\n {\n padding: 1,\n borderStyle: \"round\",\n textAlignment: \"center\",\n },\n ),\n );\n }\n } catch (error) {\n log.error(\"failed to check for updates\", { error });\n }\n};\n"],"names":["boxen","dayjs","fs","ms","assert","path","semver","z","config","http","createLogger","println","sprint","log","UPDATE_CHECK_FREQUENCY","getDistTags","json","method","url","responseType","resolveBodyOnly","timeout","request","parsed","object","name","literal","latest","string","parse","shouldCheckForUpdate","lastCheck","Number","readFile","join","cacheDir","isNaN","isAfter","error","warnIfUpdateAvailable","shouldCheck","outputFile","String","Date","now","tags","lt","version","info","current","padding","borderStyle","textAlignment"],"mappings":"AAAA,OAAOA,WAAW,QAAQ;AAC1B,OAAOC,WAAW,QAAQ;AAC1B,OAAOC,QAAQ,WAAW;AAC1B,OAAOC,QAAQ,KAAK;AACpB,OAAOC,YAAY,cAAc;AACjC,OAAOC,UAAU,YAAY;AAC7B,OAAOC,YAAY,SAAS;AAC5B,SAASC,CAAC,QAAQ,MAAM;AACxB,SAASC,MAAM,QAAQ,cAAc;AACrC,SAASC,IAAI,QAAQ,YAAY;AACjC,SAASC,YAAY,QAAQ,WAAW;AACxC,SAASC,OAAO,EAAEC,MAAM,QAAQ,cAAc;AAE9C,MAAMC,MAAMH,aAAa;AAEzB,MAAMI,yBAAyBX,GAAG;AAElC,OAAO,MAAMY,cAAc;IACzB,MAAMC,OAAO,MAAMP,KAAK;QACtBQ,QAAQ;QACRC,KAAK;QACLC,cAAc;QACdC,iBAAiB;QACjBC,SAAS;YACPC,SAASnB,GAAG;QACd;IACF;IAEA,MAAMoB,SAAShB,EACZiB,MAAM,CAAC;QACNC,MAAMlB,EAAEmB,OAAO,CAAC;QAChB,aAAanB,EAAEiB,MAAM,CAAC;YACpBG,QAAQpB,EAAEqB,MAAM;QAClB;IACF,GACCC,KAAK,CAACb;IAET,OAAOO,MAAM,CAAC,YAAY;AAC5B,EAAE;AAEF,OAAO,MAAMO,uBAAuB;IAClC,IAAI;QACF,MAAMC,YAAYC,OAAO,MAAM9B,GAAG+B,QAAQ,CAAC5B,KAAK6B,IAAI,CAAC1B,OAAO2B,QAAQ,EAAE,sBAAsB;QAC5F/B,OAAO,CAAC4B,OAAOI,KAAK,CAACL;QACrB,OAAO9B,QAAQoC,OAAO,CAACN,YAAYjB;IACrC,EAAE,OAAOwB,OAAO;QACd,OAAO;IACT;AACF,EAAE;AAEF,OAAO,MAAMC,wBAAwB;IACnC,IAAI;QACF,MAAMC,cAAc,MAAMV;QAC1B,IAAI,CAACU,aAAa;YAChB;QACF;QAEA,MAAMtC,GAAGuC,UAAU,CAACpC,KAAK6B,IAAI,CAAC1B,OAAO2B,QAAQ,EAAE,sBAAsBO,OAAOC,KAAKC,GAAG;QAEpF,MAAMC,OAAO,MAAM9B;QAEnB,IAAIT,OAAOwC,EAAE,CAACtC,OAAOuC,OAAO,EAAEF,KAAKlB,MAAM,GAAG;YAC1Cd,IAAImC,IAAI,CAAC,oBAAoB;gBAAEC,SAASzC,OAAOuC,OAAO;gBAAEpB,QAAQkB,KAAKlB,MAAM;YAAC;YAC5EhB,QACEX,MACEY,MAAM,CAAC;mCACkB,EAAEJ,OAAOuC,OAAO,CAAC,YAAY,EAAEF,KAAKlB,MAAM,CAAC;uEACP,EAAEkB,KAAKlB,MAAM,CAAC;gCACrD,EAAEnB,OAAOiB,IAAI,CAAC;UACpC,CAAC,EACD;gBACEyB,SAAS;gBACTC,aAAa;gBACbC,eAAe;YACjB;QAGN;IACF,EAAE,OAAOd,OAAO;QACdzB,IAAIyB,KAAK,CAAC,+BAA+B;YAAEA;QAAM;IACnD;AACF,EAAE"}
|