@ethlete/cli 2.1.0-next.4 → 2.1.0-next.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.
Files changed (89) hide show
  1. package/CHANGELOG.md +45 -0
  2. package/README.md +49 -8
  3. package/package.json +1 -1
  4. package/src/index.js +52 -8
  5. package/src/index.js.map +1 -1
  6. package/src/lib/api/api-command.d.ts +3 -2
  7. package/src/lib/api/api-command.js +2 -2
  8. package/src/lib/api/api-command.js.map +1 -1
  9. package/src/lib/api/auth-hint.d.ts +11 -0
  10. package/src/lib/api/auth-hint.js +47 -0
  11. package/src/lib/api/auth-hint.js.map +1 -0
  12. package/src/lib/api/clear.d.ts +36 -0
  13. package/src/lib/api/clear.js +121 -0
  14. package/src/lib/api/clear.js.map +1 -0
  15. package/src/lib/api/clone.d.ts +12 -0
  16. package/src/lib/api/clone.js +24 -0
  17. package/src/lib/api/clone.js.map +1 -0
  18. package/src/lib/api/compose.d.ts +29 -0
  19. package/src/lib/api/compose.js +44 -1
  20. package/src/lib/api/compose.js.map +1 -1
  21. package/src/lib/api/definition.d.ts +11 -2
  22. package/src/lib/api/definition.js +29 -3
  23. package/src/lib/api/definition.js.map +1 -1
  24. package/src/lib/api/git.d.ts +25 -0
  25. package/src/lib/api/git.js +71 -0
  26. package/src/lib/api/git.js.map +1 -0
  27. package/src/lib/api/help.d.ts +11 -0
  28. package/src/lib/api/help.js +72 -0
  29. package/src/lib/api/help.js.map +1 -0
  30. package/src/lib/api/index.d.ts +10 -0
  31. package/src/lib/api/index.js +10 -0
  32. package/src/lib/api/index.js.map +1 -1
  33. package/src/lib/api/ports.d.ts +13 -0
  34. package/src/lib/api/ports.js +98 -0
  35. package/src/lib/api/ports.js.map +1 -0
  36. package/src/lib/api/resolve-checkout.d.ts +45 -0
  37. package/src/lib/api/resolve-checkout.js +91 -0
  38. package/src/lib/api/resolve-checkout.js.map +1 -0
  39. package/src/lib/api/run.d.ts +1 -1
  40. package/src/lib/api/run.js +268 -55
  41. package/src/lib/api/run.js.map +1 -1
  42. package/src/lib/api/setup.d.ts +15 -0
  43. package/src/lib/api/setup.js +41 -0
  44. package/src/lib/api/setup.js.map +1 -0
  45. package/src/lib/api/state.d.ts +20 -0
  46. package/src/lib/api/state.js +33 -0
  47. package/src/lib/api/state.js.map +1 -0
  48. package/src/lib/api/suggest.d.ts +7 -0
  49. package/src/lib/api/suggest.js +35 -0
  50. package/src/lib/api/suggest.js.map +1 -0
  51. package/src/lib/auth/auth-command.d.ts +11 -0
  52. package/src/lib/auth/auth-command.js +137 -0
  53. package/src/lib/auth/auth-command.js.map +1 -0
  54. package/src/lib/auth/composer-auth.d.ts +25 -0
  55. package/src/lib/auth/composer-auth.js +63 -0
  56. package/src/lib/auth/composer-auth.js.map +1 -0
  57. package/src/lib/auth/composer-repositories.d.ts +5 -0
  58. package/src/lib/auth/composer-repositories.js +33 -0
  59. package/src/lib/auth/composer-repositories.js.map +1 -0
  60. package/src/lib/auth/gitlab-token.d.ts +43 -0
  61. package/src/lib/auth/gitlab-token.js +72 -0
  62. package/src/lib/auth/gitlab-token.js.map +1 -0
  63. package/src/lib/auth/index.d.ts +4 -0
  64. package/src/lib/auth/index.js +8 -0
  65. package/src/lib/auth/index.js.map +1 -0
  66. package/src/lib/config/diagnose.d.ts +7 -0
  67. package/src/lib/config/diagnose.js +103 -0
  68. package/src/lib/config/diagnose.js.map +1 -0
  69. package/src/lib/config/index.d.ts +1 -0
  70. package/src/lib/config/index.js +1 -0
  71. package/src/lib/config/index.js.map +1 -1
  72. package/src/lib/config/local-config.d.ts +13 -0
  73. package/src/lib/config/local-config.js +13 -6
  74. package/src/lib/config/local-config.js.map +1 -1
  75. package/src/lib/doctor/doctor-command.d.ts +5 -0
  76. package/src/lib/doctor/doctor-command.js +62 -0
  77. package/src/lib/doctor/doctor-command.js.map +1 -0
  78. package/src/lib/doctor/index.d.ts +1 -0
  79. package/src/lib/doctor/index.js +5 -0
  80. package/src/lib/doctor/index.js.map +1 -0
  81. package/src/lib/index.d.ts +3 -0
  82. package/src/lib/index.js +3 -0
  83. package/src/lib/index.js.map +1 -1
  84. package/src/lib/invocation.d.ts +9 -0
  85. package/src/lib/invocation.js +47 -0
  86. package/src/lib/invocation.js.map +1 -0
  87. package/src/lib/utils.d.ts +14 -0
  88. package/src/lib/utils.js +14 -1
  89. package/src/lib/utils.js.map +1 -1
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.resolveConfiguredPath = exports.configuredApiRepoBranch = exports.configuredApiRepoPath = exports.readLocalConfig = exports.LEGACY_LOCAL_CONFIG_FILE_NAME = exports.LOCAL_CONFIG_FILE_NAME = void 0;
3
+ exports.resolveConfiguredPath = exports.configuredApiRepoBranch = exports.configuredApiRepoPath = exports.readLocalConfig = exports.readLocalConfigFile = exports.LOCAL_CONFIG_KEYS = exports.LEGACY_LOCAL_CONFIG_FILE_NAME = exports.LOCAL_CONFIG_FILE_NAME = void 0;
4
4
  const fs_1 = require("fs");
5
5
  const path_1 = require("path");
6
6
  exports.LOCAL_CONFIG_FILE_NAME = 'ethlete.config.local.json';
@@ -9,19 +9,26 @@ exports.LOCAL_CONFIG_FILE_NAME = 'ethlete.config.local.json';
9
9
  * fallback so an existing checkout keeps working, and reported so the developer can move them.
10
10
  */
11
11
  exports.LEGACY_LOCAL_CONFIG_FILE_NAME = 'ethlete-agents.config.local.json';
12
- const readJsonObject = (path) => {
12
+ exports.LOCAL_CONFIG_KEYS = ['sdkSourcePath', 'apiRepoPaths', 'apiRepoBranches'];
13
+ /** Reads one config file, keeping "not there" apart from "there but broken" for `et doctor`. */
14
+ const readLocalConfigFile = (path) => {
13
15
  if (!(0, fs_1.existsSync)(path))
14
- return undefined;
16
+ return { status: 'absent' };
15
17
  let parsed;
16
18
  try {
17
19
  parsed = JSON.parse((0, fs_1.readFileSync)(path, 'utf8'));
18
20
  }
19
21
  catch (_a) {
20
- return undefined;
22
+ return { status: 'unreadable' };
21
23
  }
22
24
  if (typeof parsed !== 'object' || parsed === null || Array.isArray(parsed))
23
- return undefined;
24
- return parsed;
25
+ return { status: 'not-an-object' };
26
+ return { status: 'ok', config: parsed };
27
+ };
28
+ exports.readLocalConfigFile = readLocalConfigFile;
29
+ const readJsonObject = (path) => {
30
+ const state = (0, exports.readLocalConfigFile)(path);
31
+ return state.status === 'ok' ? state.config : undefined;
25
32
  };
26
33
  /** Reads the local config, falling back to the file the keys used to live in. */
27
34
  const readLocalConfig = (root) => {
@@ -1 +1 @@
1
- {"version":3,"file":"local-config.js","sourceRoot":"","sources":["../../../../../../libs/cli/src/lib/config/local-config.ts"],"names":[],"mappings":";;;AAAA,2BAA8C;AAC9C,+BAAiD;AAEpC,QAAA,sBAAsB,GAAG,2BAA2B,CAAC;AAElE;;;GAGG;AACU,QAAA,6BAA6B,GAAG,kCAAkC,CAAC;AAuBhF,MAAM,cAAc,GAAG,CAAC,IAAY,EAA2B,EAAE;IAC/D,IAAI,CAAC,IAAA,eAAU,EAAC,IAAI,CAAC;QAAE,OAAO,SAAS,CAAC;IAExC,IAAI,MAAe,CAAC;IAEpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAA,iBAAY,EAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;IAClD,CAAC;IAAC,WAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;QAAE,OAAO,SAAS,CAAC;IAE7F,OAAO,MAAqB,CAAC;AAC/B,CAAC,CAAC;AAEF,iFAAiF;AAC1E,MAAM,eAAe,GAAG,CAAC,IAAY,EAAqB,EAAE;IACjE,MAAM,OAAO,GAAG,cAAc,CAAC,IAAA,WAAI,EAAC,IAAI,EAAE,8BAAsB,CAAC,CAAC,CAAC;IAEnE,IAAI,OAAO;QAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,8BAAsB,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;IAE3F,MAAM,MAAM,GAAG,cAAc,CAAC,IAAA,WAAI,EAAC,IAAI,EAAE,qCAA6B,CAAC,CAAC,CAAC;IAEzE,IAAI,MAAM;QAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,qCAA6B,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAE/F,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;AACzC,CAAC,CAAC;AAVW,QAAA,eAAe,mBAU1B;AAEF,MAAM,QAAQ,GAAG,CAAC,MAA0C,EAAE,GAAW,EAAE,EAAE,WAAC,OAAA,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAG,GAAG,CAAC,mCAAI,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAG,GAAG,CAAC,CAAA,EAAA,CAAC;AAEtG,MAAM,qBAAqB,GAAG,CAAC,MAAmB,EAAE,GAAW,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;AAAjG,QAAA,qBAAqB,yBAA4E;AAEvG,MAAM,uBAAuB,GAAG,CAAC,MAAmB,EAAE,GAAW,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC;AAAtG,QAAA,uBAAuB,2BAA+E;AAEnH,8FAA8F;AACvF,MAAM,qBAAqB,GAAG,CAAC,IAAY,EAAE,UAAkB,EAAE,EAAE,CACxE,IAAA,iBAAU,EAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAA,cAAO,EAAC,IAAI,EAAE,UAAU,CAAC,CAAC;AADrD,QAAA,qBAAqB,yBACgC"}
1
+ {"version":3,"file":"local-config.js","sourceRoot":"","sources":["../../../../../../libs/cli/src/lib/config/local-config.ts"],"names":[],"mappings":";;;AAAA,2BAA8C;AAC9C,+BAAiD;AAEpC,QAAA,sBAAsB,GAAG,2BAA2B,CAAC;AAElE;;;GAGG;AACU,QAAA,6BAA6B,GAAG,kCAAkC,CAAC;AAenE,QAAA,iBAAiB,GAA0B,CAAC,eAAe,EAAE,cAAc,EAAE,iBAAiB,CAAC,CAAC;AAa7G,gGAAgG;AACzF,MAAM,mBAAmB,GAAG,CAAC,IAAY,EAAwB,EAAE;IACxE,IAAI,CAAC,IAAA,eAAU,EAAC,IAAI,CAAC;QAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;IAEnD,IAAI,MAAe,CAAC;IAEpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAA,iBAAY,EAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;IAClD,CAAC;IAAC,WAAM,CAAC;QACP,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC;IAClC,CAAC;IAED,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;QAAE,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC;IAE/G,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAqB,EAAE,CAAC;AACzD,CAAC,CAAC;AAdW,QAAA,mBAAmB,uBAc9B;AAEF,MAAM,cAAc,GAAG,CAAC,IAAY,EAAE,EAAE;IACtC,MAAM,KAAK,GAAG,IAAA,2BAAmB,EAAC,IAAI,CAAC,CAAC;IAExC,OAAO,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;AAC1D,CAAC,CAAC;AAEF,iFAAiF;AAC1E,MAAM,eAAe,GAAG,CAAC,IAAY,EAAqB,EAAE;IACjE,MAAM,OAAO,GAAG,cAAc,CAAC,IAAA,WAAI,EAAC,IAAI,EAAE,8BAAsB,CAAC,CAAC,CAAC;IAEnE,IAAI,OAAO;QAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,8BAAsB,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;IAE3F,MAAM,MAAM,GAAG,cAAc,CAAC,IAAA,WAAI,EAAC,IAAI,EAAE,qCAA6B,CAAC,CAAC,CAAC;IAEzE,IAAI,MAAM;QAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,qCAA6B,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAE/F,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;AACzC,CAAC,CAAC;AAVW,QAAA,eAAe,mBAU1B;AAEF,MAAM,QAAQ,GAAG,CAAC,MAA0C,EAAE,GAAW,EAAE,EAAE,WAAC,OAAA,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAG,GAAG,CAAC,mCAAI,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAG,GAAG,CAAC,CAAA,EAAA,CAAC;AAEtG,MAAM,qBAAqB,GAAG,CAAC,MAAmB,EAAE,GAAW,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;AAAjG,QAAA,qBAAqB,yBAA4E;AAEvG,MAAM,uBAAuB,GAAG,CAAC,MAAmB,EAAE,GAAW,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC;AAAtG,QAAA,uBAAuB,2BAA+E;AAEnH,8FAA8F;AACvF,MAAM,qBAAqB,GAAG,CAAC,IAAY,EAAE,UAAkB,EAAE,EAAE,CACxE,IAAA,iBAAU,EAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAA,cAAO,EAAC,IAAI,EAAE,UAAU,CAAC,CAAC;AADrD,QAAA,qBAAqB,yBACgC"}
@@ -0,0 +1,5 @@
1
+ /** Reports every problem with this machine's setup, so `et api` does not have to find them one at a time. */
2
+ export declare const doctorCommand: ({ root, apiInvocation }: {
3
+ root: string;
4
+ apiInvocation?: string;
5
+ }) => 0 | 1;
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.doctorCommand = void 0;
4
+ const compose_1 = require("../api/compose");
5
+ const path_1 = require("path");
6
+ const load_definitions_1 = require("../api/load-definitions");
7
+ const resolve_checkout_1 = require("../api/resolve-checkout");
8
+ const diagnose_1 = require("../config/diagnose");
9
+ const local_config_1 = require("../config/local-config");
10
+ const indent = (text) => text.replace(/\n/g, '\n ');
11
+ const describeComposeTool = () => {
12
+ const tool = (0, compose_1.resolveComposeTool)();
13
+ return tool
14
+ ? { line: `container engine: ${(0, compose_1.composeBinary)(tool.compose).join(' ')}`, problems: [] }
15
+ : { line: undefined, problems: [`No compose tool found. Tried: ${(0, compose_1.composeToolNames)().join(', ')}.`] };
16
+ };
17
+ const describeApis = (root, apiInvocation) => {
18
+ const { found, apis, fileName } = (0, load_definitions_1.loadApiDefinitions)(root);
19
+ if (!found)
20
+ return { lines: [], problems: [] };
21
+ const lines = [];
22
+ const problems = [];
23
+ for (const [name, api] of Object.entries(apis)) {
24
+ const checkout = (0, resolve_checkout_1.resolveApiCheckout)({ root, name, api });
25
+ if (checkout.ok) {
26
+ lines.push(`${fileName}: ${name} → ${checkout.checkout.composePath}`);
27
+ }
28
+ else {
29
+ problems.push((0, resolve_checkout_1.checkoutProblem)({ failure: checkout, name, invocation: apiInvocation }));
30
+ }
31
+ }
32
+ return { lines, problems };
33
+ };
34
+ /** Reports every problem with this machine's setup, so `et api` does not have to find them one at a time. */
35
+ const doctorCommand = ({ root, apiInvocation = 'et api' }) => {
36
+ // A file that exists but cannot be parsed still has to be reported, so this asks whether the file
37
+ // is there rather than whether it could be read.
38
+ const hasConfig = [local_config_1.LOCAL_CONFIG_FILE_NAME, local_config_1.LEGACY_LOCAL_CONFIG_FILE_NAME].some((fileName) => (0, local_config_1.readLocalConfigFile)((0, path_1.join)(root, fileName)).status !== 'absent');
39
+ const hasApis = (0, load_definitions_1.loadApiDefinitions)(root).found;
40
+ if (!hasConfig && !hasApis) {
41
+ console.log(`Nothing to check: ${root} has no ${local_config_1.LOCAL_CONFIG_FILE_NAME} and no ${load_definitions_1.API_DEFINITIONS_FILE_NAMES[0]}.`);
42
+ return 0;
43
+ }
44
+ const configProblems = (0, diagnose_1.diagnoseLocalConfig)({ root });
45
+ const compose = describeComposeTool();
46
+ const apis = describeApis(root, apiInvocation);
47
+ const problems = [...configProblems, ...compose.problems, ...apis.problems];
48
+ for (const line of [compose.line, ...apis.lines].filter(Boolean)) {
49
+ console.log(` ${line}`);
50
+ }
51
+ if (problems.length === 0) {
52
+ console.log('\nNo problems found.');
53
+ return 0;
54
+ }
55
+ console.error(`\n${problems.length} problem(s):\n`);
56
+ for (const problem of problems) {
57
+ console.error(` - ${indent(problem)}`);
58
+ }
59
+ return 1;
60
+ };
61
+ exports.doctorCommand = doctorCommand;
62
+ //# sourceMappingURL=doctor-command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor-command.js","sourceRoot":"","sources":["../../../../../../libs/cli/src/lib/doctor/doctor-command.ts"],"names":[],"mappings":";;;AAAA,4CAAqF;AACrF,+BAA4B;AAC5B,8DAAyF;AACzF,8DAA8E;AAC9E,iDAAyD;AACzD,yDAAoH;AAEpH,MAAM,MAAM,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;AAE/D,MAAM,mBAAmB,GAAG,GAAG,EAAE;IAC/B,MAAM,IAAI,GAAG,IAAA,4BAAkB,GAAE,CAAC;IAElC,OAAO,IAAI;QACT,CAAC,CAAC,EAAE,IAAI,EAAE,qBAAqB,IAAA,uBAAa,EAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE;QACtF,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,iCAAiC,IAAA,0BAAgB,GAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;AACzG,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,CAAC,IAAY,EAAE,aAAqB,EAAE,EAAE;IAC3D,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,IAAA,qCAAkB,EAAC,IAAI,CAAC,CAAC;IAE3D,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;IAE/C,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,KAAK,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/C,MAAM,QAAQ,GAAG,IAAA,qCAAkB,EAAC,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;QAEzD,IAAI,QAAQ,CAAC,EAAE,EAAE,CAAC;YAChB,KAAK,CAAC,IAAI,CAAC,GAAG,QAAQ,KAAK,IAAI,MAAM,QAAQ,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;QACxE,CAAC;aAAM,CAAC;YACN,QAAQ,CAAC,IAAI,CAAC,IAAA,kCAAe,EAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC;QACzF,CAAC;IACH,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;AAC7B,CAAC,CAAC;AAEF,6GAA6G;AACtG,MAAM,aAAa,GAAG,CAAC,EAAE,IAAI,EAAE,aAAa,GAAG,QAAQ,EAA4C,EAAE,EAAE;IAC5G,kGAAkG;IAClG,iDAAiD;IACjD,MAAM,SAAS,GAAG,CAAC,qCAAsB,EAAE,4CAA6B,CAAC,CAAC,IAAI,CAC5E,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAA,kCAAmB,EAAC,IAAA,WAAI,EAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,CAC5E,CAAC;IACF,MAAM,OAAO,GAAG,IAAA,qCAAkB,EAAC,IAAI,CAAC,CAAC,KAAK,CAAC;IAE/C,IAAI,CAAC,SAAS,IAAI,CAAC,OAAO,EAAE,CAAC;QAC3B,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,WAAW,qCAAsB,WAAW,6CAA0B,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAEnH,OAAO,CAAC,CAAC;IACX,CAAC;IAED,MAAM,cAAc,GAAG,IAAA,8BAAmB,EAAC,EAAE,IAAI,EAAE,CAAC,CAAC;IACrD,MAAM,OAAO,GAAG,mBAAmB,EAAE,CAAC;IACtC,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;IAE/C,MAAM,QAAQ,GAAG,CAAC,GAAG,cAAc,EAAE,GAAG,OAAO,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;IAE5E,KAAK,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;QACjE,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;IAC3B,CAAC;IAED,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;QAEpC,OAAO,CAAC,CAAC;IACX,CAAC;IAED,OAAO,CAAC,KAAK,CAAC,KAAK,QAAQ,CAAC,MAAM,gBAAgB,CAAC,CAAC;IAEpD,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,OAAO,CAAC,KAAK,CAAC,OAAO,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC1C,CAAC;IAED,OAAO,CAAC,CAAC;AACX,CAAC,CAAC;AArCW,QAAA,aAAa,iBAqCxB"}
@@ -0,0 +1 @@
1
+ export * from './doctor-command';
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./doctor-command"), exports);
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../libs/cli/src/lib/doctor/index.ts"],"names":[],"mappings":";;;AAAA,2DAAiC"}
@@ -1,3 +1,6 @@
1
1
  export * from './api';
2
+ export * from './auth';
2
3
  export * from './config';
4
+ export * from './doctor';
5
+ export * from './invocation';
3
6
  export * from './release';
package/src/lib/index.js CHANGED
@@ -2,6 +2,9 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const tslib_1 = require("tslib");
4
4
  tslib_1.__exportStar(require("./api"), exports);
5
+ tslib_1.__exportStar(require("./auth"), exports);
5
6
  tslib_1.__exportStar(require("./config"), exports);
7
+ tslib_1.__exportStar(require("./doctor"), exports);
8
+ tslib_1.__exportStar(require("./invocation"), exports);
6
9
  tslib_1.__exportStar(require("./release"), exports);
7
10
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../libs/cli/src/lib/index.ts"],"names":[],"mappings":";;;AAAA,gDAAsB;AACtB,mDAAyB;AACzB,oDAA0B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../libs/cli/src/lib/index.ts"],"names":[],"mappings":";;;AAAA,gDAAsB;AACtB,iDAAuB;AACvB,mDAAyB;AACzB,mDAAyB;AACzB,uDAA6B;AAC7B,oDAA0B"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * What the reader of a message can type to reach `et <subcommand>` in this repo, because `et` itself
3
+ * is rarely on the PATH: the package script that wraps it, or the package manager's own way to run
4
+ * the binary, for example `npx et api`.
5
+ */
6
+ export declare const repoInvocation: (options: {
7
+ root: string;
8
+ subcommand: string;
9
+ }) => string;
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.repoInvocation = void 0;
4
+ const fs_1 = require("fs");
5
+ const path_1 = require("path");
6
+ /**
7
+ * How each package manager runs a script, and how it runs a binary from `node_modules` when no
8
+ * script wraps it.
9
+ */
10
+ const RUNNERS = [
11
+ { name: 'yarn', script: 'yarn', binary: 'yarn et' },
12
+ { name: 'pnpm', script: 'pnpm', binary: 'pnpm exec et' },
13
+ { name: 'bun', script: 'bun run', binary: 'bunx et' },
14
+ { name: 'npm', script: 'npm run', binary: 'npx et' },
15
+ ];
16
+ const readManifest = (root) => {
17
+ let parsed;
18
+ try {
19
+ parsed = JSON.parse((0, fs_1.readFileSync)((0, path_1.join)(root, 'package.json'), 'utf8'));
20
+ }
21
+ catch (_a) {
22
+ return {};
23
+ }
24
+ return typeof parsed === 'object' && parsed !== null && !Array.isArray(parsed) ? parsed : {};
25
+ };
26
+ const runnerFor = (manifest) => {
27
+ var _a;
28
+ const declared = (_a = manifest.packageManager) !== null && _a !== void 0 ? _a : process.env['npm_config_user_agent'];
29
+ return declared ? RUNNERS.find((runner) => declared.startsWith(runner.name)) : undefined;
30
+ };
31
+ const scriptFor = (manifest, command) => { var _a, _b; return (_b = Object.entries((_a = manifest.scripts) !== null && _a !== void 0 ? _a : {}).find(([, value]) => value.trim() === command)) === null || _b === void 0 ? void 0 : _b[0]; };
32
+ /**
33
+ * What the reader of a message can type to reach `et <subcommand>` in this repo, because `et` itself
34
+ * is rarely on the PATH: the package script that wraps it, or the package manager's own way to run
35
+ * the binary, for example `npx et api`.
36
+ */
37
+ const repoInvocation = (options) => {
38
+ const { root, subcommand } = options;
39
+ const manifest = readManifest(root);
40
+ const runner = runnerFor(manifest);
41
+ if (!runner)
42
+ return `et ${subcommand}`;
43
+ const script = scriptFor(manifest, `et ${subcommand}`);
44
+ return script ? `${runner.script} ${script}` : `${runner.binary} ${subcommand}`;
45
+ };
46
+ exports.repoInvocation = repoInvocation;
47
+ //# sourceMappingURL=invocation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invocation.js","sourceRoot":"","sources":["../../../../../libs/cli/src/lib/invocation.ts"],"names":[],"mappings":";;;AAAA,2BAAkC;AAClC,+BAA4B;AAI5B;;;GAGG;AACH,MAAM,OAAO,GAAG;IACd,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE;IACnD,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE;IACxD,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE;IACrD,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE;CACrD,CAAC;AAEF,MAAM,YAAY,GAAG,CAAC,IAAY,EAAY,EAAE;IAC9C,IAAI,MAAe,CAAC;IAEpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAA,iBAAY,EAAC,IAAA,WAAI,EAAC,IAAI,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;IACxE,CAAC;IAAC,WAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,OAAO,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAE,MAAmB,CAAC,CAAC,CAAC,EAAE,CAAC;AAC7G,CAAC,CAAC;AAEF,MAAM,SAAS,GAAG,CAAC,QAAkB,EAAE,EAAE;;IACvC,MAAM,QAAQ,GAAG,MAAA,QAAQ,CAAC,cAAc,mCAAI,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;IAEjF,OAAO,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAC3F,CAAC,CAAC;AAEF,MAAM,SAAS,GAAG,CAAC,QAAkB,EAAE,OAAe,EAAE,EAAE,eACxD,OAAA,MAAA,MAAM,CAAC,OAAO,CAAC,MAAA,QAAQ,CAAC,OAAO,mCAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,OAAO,CAAC,0CAAG,CAAC,CAAC,CAAA,EAAA,CAAC;AAE5F;;;;GAIG;AACI,MAAM,cAAc,GAAG,CAAC,OAA6C,EAAE,EAAE;IAC9E,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC;IACrC,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IACpC,MAAM,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;IAEnC,IAAI,CAAC,MAAM;QAAE,OAAO,MAAM,UAAU,EAAE,CAAC;IAEvC,MAAM,MAAM,GAAG,SAAS,CAAC,QAAQ,EAAE,MAAM,UAAU,EAAE,CAAC,CAAC;IAEvD,OAAO,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,IAAI,MAAM,EAAE,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,IAAI,UAAU,EAAE,CAAC;AAClF,CAAC,CAAC;AAVW,QAAA,cAAc,kBAUzB"}
@@ -1 +1,15 @@
1
1
  export declare const askQuestion: (question: string) => Promise<string>;
2
+ export type ConfirmOptions = {
3
+ /** What is wrong, or what is about to happen. Printed above the question. */
4
+ problem: string;
5
+ question: string;
6
+ /** Printed instead of the question when no terminal can answer it. It names the flag that skips it. */
7
+ hint: string;
8
+ /** What an empty answer means. Pass `false` for anything that deletes. */
9
+ defaultsToYes: boolean;
10
+ };
11
+ /**
12
+ * Asks a yes or no question. Without a terminal it prints the hint and answers no, so nothing
13
+ * applies itself in a script that cannot be asked.
14
+ */
15
+ export declare const confirm: ({ problem, question, hint, defaultsToYes }: ConfirmOptions) => Promise<boolean>;
package/src/lib/utils.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.askQuestion = void 0;
3
+ exports.confirm = exports.askQuestion = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  const promises_1 = require("readline/promises");
6
6
  const askQuestion = (question) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
@@ -16,4 +16,17 @@ const askQuestion = (question) => tslib_1.__awaiter(void 0, void 0, void 0, func
16
16
  }
17
17
  });
18
18
  exports.askQuestion = askQuestion;
19
+ /**
20
+ * Asks a yes or no question. Without a terminal it prints the hint and answers no, so nothing
21
+ * applies itself in a script that cannot be asked.
22
+ */
23
+ const confirm = (_a) => tslib_1.__awaiter(void 0, [_a], void 0, function* ({ problem, question, hint, defaultsToYes }) {
24
+ if (!process.stdin.isTTY) {
25
+ console.error(`${problem}\n\n${hint}`);
26
+ return false;
27
+ }
28
+ const answer = (yield (0, exports.askQuestion)(`${problem}\n\n${question} ${defaultsToYes ? '[Y/n]' : '[y/N]'} `)).trim();
29
+ return defaultsToYes ? !/^n(o)?$/i.test(answer) : /^y(es)?$/i.test(answer);
30
+ });
31
+ exports.confirm = confirm;
19
32
  //# sourceMappingURL=utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../../libs/cli/src/lib/utils.ts"],"names":[],"mappings":";;;;AAAA,gDAAoD;AAE7C,MAAM,WAAW,GAAG,CAAO,QAAgB,EAAE,EAAE;IACpD,MAAM,QAAQ,GAAG,IAAA,0BAAe,EAAC;QAC/B,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,MAAM,EAAE,OAAO,CAAC,MAAM;KACvB,CAAC,CAAC;IAEH,IAAI,CAAC;QACH,OAAO,MAAM,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC3C,CAAC;YAAS,CAAC;QACT,QAAQ,CAAC,KAAK,EAAE,CAAC;IACnB,CAAC;AACH,CAAC,CAAA,CAAC;AAXW,QAAA,WAAW,eAWtB"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../../libs/cli/src/lib/utils.ts"],"names":[],"mappings":";;;;AAAA,gDAAoD;AAE7C,MAAM,WAAW,GAAG,CAAO,QAAgB,EAAE,EAAE;IACpD,MAAM,QAAQ,GAAG,IAAA,0BAAe,EAAC;QAC/B,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,MAAM,EAAE,OAAO,CAAC,MAAM;KACvB,CAAC,CAAC;IAEH,IAAI,CAAC;QACH,OAAO,MAAM,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC3C,CAAC;YAAS,CAAC;QACT,QAAQ,CAAC,KAAK,EAAE,CAAC;IACnB,CAAC;AACH,CAAC,CAAA,CAAC;AAXW,QAAA,WAAW,eAWtB;AAYF;;;GAGG;AACI,MAAM,OAAO,GAAG,KAAmE,EAAE,oDAA9D,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,aAAa,EAAkB;IACtF,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACzB,OAAO,CAAC,KAAK,CAAC,GAAG,OAAO,OAAO,IAAI,EAAE,CAAC,CAAC;QAEvC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,MAAM,GAAG,CAAC,MAAM,IAAA,mBAAW,EAAC,GAAG,OAAO,OAAO,QAAQ,IAAI,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAE7G,OAAO,aAAa,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC7E,CAAC,CAAA,CAAC;AAVW,QAAA,OAAO,WAUlB"}