@ethlete/cli 2.0.1-next.2 → 2.1.0-next.11

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 (165) hide show
  1. package/CHANGELOG.md +109 -0
  2. package/README.md +178 -6
  3. package/design/define-call.ts +92 -0
  4. package/design/web/env.d.ts +11 -0
  5. package/design/web/frame.html +17 -0
  6. package/design/web/frame.ts +38 -0
  7. package/design/web/host.css +494 -0
  8. package/design/web/host.ts +445 -0
  9. package/design/web/index.html +11 -0
  10. package/package.json +12 -1
  11. package/src/index.d.ts +2 -1
  12. package/src/index.js +97 -10
  13. package/src/index.js.map +1 -1
  14. package/src/lib/api/api-command.d.ts +5 -0
  15. package/src/lib/api/api-command.js +27 -0
  16. package/src/lib/api/api-command.js.map +1 -0
  17. package/src/lib/api/auth-hint.d.ts +16 -0
  18. package/src/lib/api/auth-hint.js +59 -0
  19. package/src/lib/api/auth-hint.js.map +1 -0
  20. package/src/lib/api/clear.d.ts +36 -0
  21. package/src/lib/api/clear.js +121 -0
  22. package/src/lib/api/clear.js.map +1 -0
  23. package/src/lib/api/clone.d.ts +12 -0
  24. package/src/lib/api/clone.js +24 -0
  25. package/src/lib/api/clone.js.map +1 -0
  26. package/src/lib/api/compose.d.ts +46 -0
  27. package/src/lib/api/compose.js +101 -0
  28. package/src/lib/api/compose.js.map +1 -0
  29. package/src/lib/api/definition.d.ts +37 -0
  30. package/src/lib/api/definition.js +33 -0
  31. package/src/lib/api/definition.js.map +1 -0
  32. package/src/lib/api/git.d.ts +27 -0
  33. package/src/lib/api/git.js +79 -0
  34. package/src/lib/api/git.js.map +1 -0
  35. package/src/lib/api/help.d.ts +11 -0
  36. package/src/lib/api/help.js +72 -0
  37. package/src/lib/api/help.js.map +1 -0
  38. package/src/lib/api/index.d.ts +15 -0
  39. package/src/lib/api/index.js +19 -0
  40. package/src/lib/api/index.js.map +1 -0
  41. package/src/lib/api/load-definitions.d.ts +16 -0
  42. package/src/lib/api/load-definitions.js +22 -0
  43. package/src/lib/api/load-definitions.js.map +1 -0
  44. package/src/lib/api/ports.d.ts +13 -0
  45. package/src/lib/api/ports.js +98 -0
  46. package/src/lib/api/ports.js.map +1 -0
  47. package/src/lib/api/resolve-checkout.d.ts +45 -0
  48. package/src/lib/api/resolve-checkout.js +91 -0
  49. package/src/lib/api/resolve-checkout.js.map +1 -0
  50. package/src/lib/api/run.d.ts +10 -0
  51. package/src/lib/api/run.js +332 -0
  52. package/src/lib/api/run.js.map +1 -0
  53. package/src/lib/api/setup.d.ts +15 -0
  54. package/src/lib/api/setup.js +41 -0
  55. package/src/lib/api/setup.js.map +1 -0
  56. package/src/lib/api/state.d.ts +20 -0
  57. package/src/lib/api/state.js +33 -0
  58. package/src/lib/api/state.js.map +1 -0
  59. package/src/lib/api/suggest.d.ts +7 -0
  60. package/src/lib/api/suggest.js +35 -0
  61. package/src/lib/api/suggest.js.map +1 -0
  62. package/src/lib/auth/auth-command.d.ts +11 -0
  63. package/src/lib/auth/auth-command.js +165 -0
  64. package/src/lib/auth/auth-command.js.map +1 -0
  65. package/src/lib/auth/composer-auth.d.ts +30 -0
  66. package/src/lib/auth/composer-auth.js +70 -0
  67. package/src/lib/auth/composer-auth.js.map +1 -0
  68. package/src/lib/auth/composer-repositories.d.ts +5 -0
  69. package/src/lib/auth/composer-repositories.js +33 -0
  70. package/src/lib/auth/composer-repositories.js.map +1 -0
  71. package/src/lib/auth/gitlab-token.d.ts +43 -0
  72. package/src/lib/auth/gitlab-token.js +72 -0
  73. package/src/lib/auth/gitlab-token.js.map +1 -0
  74. package/src/lib/auth/index.d.ts +4 -0
  75. package/src/lib/auth/index.js +8 -0
  76. package/src/lib/auth/index.js.map +1 -0
  77. package/src/lib/config/diagnose.d.ts +7 -0
  78. package/src/lib/config/diagnose.js +112 -0
  79. package/src/lib/config/diagnose.js.map +1 -0
  80. package/src/lib/config/index.d.ts +2 -0
  81. package/src/lib/config/index.js +6 -0
  82. package/src/lib/config/index.js.map +1 -0
  83. package/src/lib/config/local-config.d.ts +46 -0
  84. package/src/lib/config/local-config.js +57 -0
  85. package/src/lib/config/local-config.js.map +1 -0
  86. package/src/lib/design/calls-tsconfig.d.ts +6 -0
  87. package/src/lib/design/calls-tsconfig.js +37 -0
  88. package/src/lib/design/calls-tsconfig.js.map +1 -0
  89. package/src/lib/design/check.d.ts +11 -0
  90. package/src/lib/design/check.js +192 -0
  91. package/src/lib/design/check.js.map +1 -0
  92. package/src/lib/design/design-command.d.ts +10 -0
  93. package/src/lib/design/design-command.js +32 -0
  94. package/src/lib/design/design-command.js.map +1 -0
  95. package/src/lib/design/index.d.ts +5 -0
  96. package/src/lib/design/index.js +9 -0
  97. package/src/lib/design/index.js.map +1 -0
  98. package/src/lib/design/paths.d.ts +24 -0
  99. package/src/lib/design/paths.js +31 -0
  100. package/src/lib/design/paths.js.map +1 -0
  101. package/src/lib/design/serve.d.ts +7 -0
  102. package/src/lib/design/serve.js +144 -0
  103. package/src/lib/design/serve.js.map +1 -0
  104. package/src/lib/doctor/doctor-command.d.ts +7 -0
  105. package/src/lib/doctor/doctor-command.js +62 -0
  106. package/src/lib/doctor/doctor-command.js.map +1 -0
  107. package/src/lib/doctor/index.d.ts +1 -0
  108. package/src/lib/doctor/index.js +5 -0
  109. package/src/lib/doctor/index.js.map +1 -0
  110. package/src/lib/index.d.ts +7 -0
  111. package/src/lib/index.js +7 -0
  112. package/src/lib/index.js.map +1 -1
  113. package/src/lib/invocation.d.ts +9 -0
  114. package/src/lib/invocation.js +47 -0
  115. package/src/lib/invocation.js.map +1 -0
  116. package/src/lib/release.js +21 -3
  117. package/src/lib/release.js.map +1 -1
  118. package/src/lib/update/agent-rules-sync.d.ts +37 -0
  119. package/src/lib/update/agent-rules-sync.js +40 -0
  120. package/src/lib/update/agent-rules-sync.js.map +1 -0
  121. package/src/lib/update/ai.d.ts +37 -0
  122. package/src/lib/update/ai.js +71 -0
  123. package/src/lib/update/ai.js.map +1 -0
  124. package/src/lib/update/args.d.ts +21 -0
  125. package/src/lib/update/args.js +89 -0
  126. package/src/lib/update/args.js.map +1 -0
  127. package/src/lib/update/gitignore.d.ts +2 -0
  128. package/src/lib/update/gitignore.js +18 -0
  129. package/src/lib/update/gitignore.js.map +1 -0
  130. package/src/lib/update/index.d.ts +13 -0
  131. package/src/lib/update/index.js +17 -0
  132. package/src/lib/update/index.js.map +1 -0
  133. package/src/lib/update/migration-manifest.d.ts +40 -0
  134. package/src/lib/update/migration-manifest.js +137 -0
  135. package/src/lib/update/migration-manifest.js.map +1 -0
  136. package/src/lib/update/package-manager.d.ts +30 -0
  137. package/src/lib/update/package-manager.js +60 -0
  138. package/src/lib/update/package-manager.js.map +1 -0
  139. package/src/lib/update/packages.d.ts +65 -0
  140. package/src/lib/update/packages.js +147 -0
  141. package/src/lib/update/packages.js.map +1 -0
  142. package/src/lib/update/pending.d.ts +34 -0
  143. package/src/lib/update/pending.js +46 -0
  144. package/src/lib/update/pending.js.map +1 -0
  145. package/src/lib/update/plan.d.ts +51 -0
  146. package/src/lib/update/plan.js +101 -0
  147. package/src/lib/update/plan.js.map +1 -0
  148. package/src/lib/update/registry.d.ts +40 -0
  149. package/src/lib/update/registry.js +140 -0
  150. package/src/lib/update/registry.js.map +1 -0
  151. package/src/lib/update/run-migrations.d.ts +45 -0
  152. package/src/lib/update/run-migrations.js +73 -0
  153. package/src/lib/update/run-migrations.js.map +1 -0
  154. package/src/lib/update/semver.d.ts +19 -0
  155. package/src/lib/update/semver.js +79 -0
  156. package/src/lib/update/semver.js.map +1 -0
  157. package/src/lib/update/tasks.d.ts +75 -0
  158. package/src/lib/update/tasks.js +241 -0
  159. package/src/lib/update/tasks.js.map +1 -0
  160. package/src/lib/update/update-command.d.ts +12 -0
  161. package/src/lib/update/update-command.js +411 -0
  162. package/src/lib/update/update-command.js.map +1 -0
  163. package/src/lib/utils.d.ts +14 -0
  164. package/src/lib/utils.js +14 -1
  165. package/src/lib/utils.js.map +1 -1
@@ -0,0 +1,332 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.runApiCommand = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const child_process_1 = require("child_process");
6
+ const compose_1 = require("./compose");
7
+ const definition_1 = require("./definition");
8
+ const git_1 = require("./git");
9
+ const help_1 = require("./help");
10
+ const resolve_checkout_1 = require("./resolve-checkout");
11
+ const setup_1 = require("./setup");
12
+ const suggest_1 = require("./suggest");
13
+ const clone_1 = require("./clone");
14
+ const auth_hint_1 = require("./auth-hint");
15
+ const utils_1 = require("../utils");
16
+ const local_config_1 = require("../config/local-config");
17
+ const clear_1 = require("./clear");
18
+ const ports_1 = require("./ports");
19
+ const state_1 = require("./state");
20
+ const confirmFix = (options) => (0, utils_1.confirm)(Object.assign(Object.assign({}, options), { defaultsToYes: true }));
21
+ const definedEntries = (record) => Object.fromEntries(Object.entries(record).filter(([, value]) => value !== undefined));
22
+ const namedApis = (argument) => argument
23
+ .split(',')
24
+ .map((name) => name.trim())
25
+ .filter((name) => name !== '');
26
+ const composeProjectHasContainers = (composePath) => {
27
+ var _a;
28
+ const tool = (0, compose_1.resolveComposeTool)();
29
+ return tool ? ((_a = (0, compose_1.composeContainerIds)({ tool, cwd: composePath })) !== null && _a !== void 0 ? _a : []).length > 0 : false;
30
+ };
31
+ const takeComposeProjectDown = (composePath) => {
32
+ const tool = (0, compose_1.resolveComposeTool)();
33
+ if (!tool)
34
+ return false;
35
+ const [binary, ...prefix] = tool.compose;
36
+ const result = (0, child_process_1.spawnSync)(binary, [...prefix, 'down'], {
37
+ cwd: composePath,
38
+ env: Object.assign(Object.assign({}, (0, compose_1.engineEnv)(tool.engine)), process.env),
39
+ stdio: 'inherit',
40
+ });
41
+ return !result.error && result.status === 0;
42
+ };
43
+ const runOneApiCommand = (options) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
44
+ var _a, _b, _c, _d, _e, _f, _g, _h;
45
+ const { argv, root, invocation, command, name, api, service } = options;
46
+ const exposeOnLan = argv.includes('--host');
47
+ const isGitCommand = definition_1.GIT_API_COMMANDS.includes(command);
48
+ const checkout = (0, resolve_checkout_1.resolveApiCheckout)({
49
+ root,
50
+ name,
51
+ api,
52
+ needs: isGitCommand ? 'repo' : command === 'setup' ? 'compose' : 'env',
53
+ });
54
+ if (checkout.legacyConfigWarning) {
55
+ console.warn(`${checkout.legacyConfigWarning}\n`);
56
+ }
57
+ if (!checkout.ok) {
58
+ if (checkout.clonable) {
59
+ const { repoUrl, into, branch } = checkout.clonable;
60
+ const accepted = command === 'clone' ||
61
+ argv.includes('--clone') ||
62
+ (yield confirmFix({
63
+ problem: checkout.problem,
64
+ question: `Clone ${repoUrl}\ninto ${into}?`,
65
+ hint: `Re-run with --clone to clone ${repoUrl} into ${into}.`,
66
+ }));
67
+ if (!accepted)
68
+ return 1;
69
+ if (!(0, clone_1.isGitIgnored)(root, into)) {
70
+ console.warn(`\n${clone_1.DEFAULT_CHECKOUT_DIR}/ is not gitignored. Add it before you commit anything.\n`);
71
+ }
72
+ const cloned = (0, clone_1.cloneApiRepo)({ repoUrl, into, branch });
73
+ if (cloned !== 0) {
74
+ (0, auth_hint_1.printPrivateDependencyHint)({ repoHost: (0, auth_hint_1.gitUrlHost)(repoUrl) });
75
+ return cloned;
76
+ }
77
+ if (command === 'clone')
78
+ return 0;
79
+ return runOneApiCommand(options);
80
+ }
81
+ if (checkout.setupable) {
82
+ const { setupCommand, composePath } = checkout.setupable;
83
+ const accepted = argv.includes('--setup') ||
84
+ (yield confirmFix({
85
+ problem: checkout.problem,
86
+ question: `Run "${setupCommand}" in ${composePath}?`,
87
+ hint: `Re-run with --setup to run "${setupCommand}" in ${composePath}.`,
88
+ }));
89
+ if (!accepted)
90
+ return 1;
91
+ const prepared = (0, setup_1.runApiSetup)(checkout.setupable);
92
+ if (prepared !== 0)
93
+ return prepared;
94
+ return runOneApiCommand(options);
95
+ }
96
+ console.error(checkout.problem);
97
+ return 1;
98
+ }
99
+ if (command === 'clone') {
100
+ console.log(`${name} already has a checkout at ${checkout.checkout.repoPath}.`);
101
+ return 0;
102
+ }
103
+ const { repoPath, composePath: cwd } = checkout.checkout;
104
+ if (command === 'setup') {
105
+ if (!api.setupCommand) {
106
+ console.error(`The ${name} API declares no setupCommand.`);
107
+ return 1;
108
+ }
109
+ return (0, setup_1.runApiSetup)({ setupCommand: api.setupCommand, composePath: cwd, envFile: api.envFile });
110
+ }
111
+ if (isGitCommand) {
112
+ const expectedBranch = (0, local_config_1.configuredApiRepoBranch)((0, local_config_1.readLocalConfig)(root).config, name);
113
+ if (command === 'checkout') {
114
+ if (!expectedBranch) {
115
+ console.error(`No branch configured for "${name}". Add it to apiRepoBranches:\n\n` +
116
+ ` {\n "apiRepoBranches": {\n "${name}": "main"\n }\n }`);
117
+ return 1;
118
+ }
119
+ return (0, git_1.checkoutApiBranch)({ repoPath, branch: expectedBranch });
120
+ }
121
+ return (0, git_1.pullApiBranch)({ repoPath, expectedBranch, force: argv.includes('--force') });
122
+ }
123
+ const tool = (0, compose_1.resolveComposeTool)();
124
+ if (!tool) {
125
+ console.error(`No compose tool found. Tried: ${(0, compose_1.composeToolNames)().join(', ')}.`);
126
+ return 1;
127
+ }
128
+ const { engine, compose } = tool;
129
+ const [binary, ...composePrefix] = compose;
130
+ const env = Object.assign(Object.assign(Object.assign({}, (0, compose_1.engineEnv)(engine)), process.env), definedEntries((_b = (_a = api.env) === null || _a === void 0 ? void 0 : _a.call(api)) !== null && _b !== void 0 ? _b : {}));
131
+ let exitCode = 0;
132
+ const runCompose = (...composeArgs) => {
133
+ var _a;
134
+ const result = (0, child_process_1.spawnSync)(binary, [...composePrefix, ...composeArgs], { cwd, env, stdio: 'inherit' });
135
+ if (result.error) {
136
+ console.error(result.error.message);
137
+ exitCode = 1;
138
+ return;
139
+ }
140
+ exitCode = (_a = result.status) !== null && _a !== void 0 ? _a : 1;
141
+ };
142
+ const call = { tool, cwd, env };
143
+ /** Ports another program already holds. Empty while this project has containers, because `up` then reconciles its own. */
144
+ const takenPorts = () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
145
+ const running = (0, compose_1.composeContainerIds)(call);
146
+ if (running === undefined || running.length > 0)
147
+ return [];
148
+ const config = (0, compose_1.composeOutput)(Object.assign(Object.assign({}, call), { args: ['config'] }));
149
+ return config === undefined ? [] : (0, ports_1.portsInUse)((0, ports_1.publishedPorts)({ config, services: api.services }));
150
+ });
151
+ const freePorts = (taken) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
152
+ var _a;
153
+ const containers = (0, compose_1.containerStates)(engine);
154
+ const holders = taken.map((port) => {
155
+ var _a;
156
+ return ({
157
+ port,
158
+ container: (_a = containers.find(({ ports }) => ports.some(({ host }) => host === port))) === null || _a === void 0 ? void 0 : _a.name,
159
+ });
160
+ });
161
+ const rows = holders.map(({ port, container }) => ` ${port} ${container !== null && container !== void 0 ? container : 'held by another program'}`);
162
+ const problem = `Cannot start ${name}. These ports are already in use:\n\n${rows.join('\n')}`;
163
+ const names = [...new Set(holders.map(({ container }) => container))].filter((holder) => holder !== undefined);
164
+ if (holders.some(({ container }) => container === undefined)) {
165
+ console.error(`${problem}\n\nRe-run with --force to start ${name} anyway.`);
166
+ return false;
167
+ }
168
+ const accepted = yield (0, utils_1.confirm)({
169
+ problem,
170
+ question: `Stop ${names.join(', ')} and start ${name}?`,
171
+ hint: `Stop them with "${engine} stop ${names.join(' ')}", or re-run with --force to start ${name} anyway.`,
172
+ defaultsToYes: true,
173
+ });
174
+ if (!accepted)
175
+ return false;
176
+ return ((_a = (0, child_process_1.spawnSync)(engine, ['stop', ...names], { stdio: 'inherit' }).status) !== null && _a !== void 0 ? _a : 1) === 0;
177
+ });
178
+ if (command === 'up') {
179
+ const taken = argv.includes('--force') ? [] : yield takenPorts();
180
+ if (taken.length > 0 && !(yield freePorts(taken)))
181
+ return 1;
182
+ if (api.network) {
183
+ (0, child_process_1.spawnSync)(engine, ['network', 'create', api.network], { stdio: 'ignore' });
184
+ }
185
+ console.log(`Starting ${name}: ${api.services.join(', ')}.`);
186
+ const started = (0, child_process_1.spawnSync)(binary, [...composePrefix, 'up', '-d', ...api.services], { cwd, env, encoding: 'utf8' });
187
+ const startedOutput = `${(_c = started.stdout) !== null && _c !== void 0 ? _c : ''}\n${(_d = started.stderr) !== null && _d !== void 0 ? _d : ''}`.trim();
188
+ if (started.error) {
189
+ console.error(started.error.message);
190
+ return 1;
191
+ }
192
+ if (started.status !== 0) {
193
+ if (startedOutput)
194
+ console.error(startedOutput);
195
+ return (_e = started.status) !== null && _e !== void 0 ? _e : 1;
196
+ }
197
+ // podman-compose exits 0 even when it fails to build or pull an image, so the state has to be
198
+ // read back rather than inferred from the exit code.
199
+ const ids = (_f = (0, compose_1.composeContainerIds)(call)) !== null && _f !== void 0 ? _f : [];
200
+ const ours = (0, compose_1.containerStates)(engine).filter((container) => ids.some((id) => id.startsWith(container.id) || container.id.startsWith(id)));
201
+ const states = (0, state_1.serviceStates)({ services: api.services, containers: ours });
202
+ const stopped = states.filter(({ running }) => !running);
203
+ console.log(`\n${name} API at http://localhost:${api.port}\n`);
204
+ console.log((0, state_1.serviceStateTable)(states));
205
+ if (stopped.length > 0) {
206
+ const which = stopped.map((state) => state.service).join(', ');
207
+ const exited = stopped.filter(({ status }) => status !== 'no container');
208
+ console.error(`\n${which} ${stopped.length === 1 ? 'is' : 'are'} not running.`);
209
+ for (const state of exited) {
210
+ console.error(`Run "${invocation} logs ${name} ${state.service}" to see why.`);
211
+ }
212
+ // A service with no container never logged anything, so the output of `up` is the only place
213
+ // a failed pull or build is reported.
214
+ if (exited.length < stopped.length && startedOutput)
215
+ console.error(`\n${startedOutput}`);
216
+ exitCode = 1;
217
+ }
218
+ if (exposeOnLan) {
219
+ const address = (0, compose_1.lanAddress)();
220
+ if (!address) {
221
+ console.error('\nThis machine has no external IPv4 address, so the API cannot be reached over the network.');
222
+ return 1;
223
+ }
224
+ const envKeyStep = api.envKey
225
+ ? `\n 2. Run localStorage.setItem('${api.envKey}', 'http://${address}:${api.port}') on that device.`
226
+ : '';
227
+ console.log(`\nThe published ports already listen on every interface, so the API also answers on\n` +
228
+ `http://${address}:${api.port}. Two more steps make another device use it:\n\n` +
229
+ ` 1. Serve the app with a host binding of 0.0.0.0.${envKeyStep}\n\n` +
230
+ `A host firewall can still block port ${api.port}.`);
231
+ }
232
+ }
233
+ else if (command === 'down') {
234
+ runCompose('down');
235
+ }
236
+ else if (command === 'logs' || command === 'shell') {
237
+ if (service !== undefined && !api.services.includes(service)) {
238
+ console.error(`The ${name} API does not start "${service}".${(0, suggest_1.didYouMean)(service, api.services)}\n\n` +
239
+ `Services: ${api.services.join(', ')}`);
240
+ return 1;
241
+ }
242
+ const target = service !== null && service !== void 0 ? service : api.execService;
243
+ if (command === 'logs')
244
+ runCompose('logs', '-f', target);
245
+ else
246
+ runCompose('exec', target, 'bash');
247
+ }
248
+ else {
249
+ const execCommand = (_h = (_g = api.exec) === null || _g === void 0 ? void 0 : _g[command]) !== null && _h !== void 0 ? _h : [];
250
+ runCompose('exec', api.execService, ...execCommand);
251
+ if (exitCode !== 0) {
252
+ const install = (0, definition_1.dependencyInstallCommandName)(api);
253
+ if ((0, definition_1.installsDependencies)(execCommand)) {
254
+ (0, auth_hint_1.printPrivateDependencyHint)({ repoHost: api.repoUrl ? (0, auth_hint_1.gitUrlHost)(api.repoUrl) : undefined });
255
+ }
256
+ else if (install !== undefined) {
257
+ console.error(`\nIf the ${api.execService} container has no dependencies installed yet, ` +
258
+ `run "${invocation} ${install} ${name}" first.`);
259
+ }
260
+ }
261
+ }
262
+ return exitCode;
263
+ });
264
+ const runApiCommand = (_a) => tslib_1.__awaiter(void 0, [_a], void 0, function* ({ apis, argv, root = process.cwd(), invocation = 'et api', }) {
265
+ const [command, nameArgument, service] = argv.filter((arg) => !arg.startsWith('--'));
266
+ const wantsHelp = argv.includes('--help') || argv.includes('-h') || command === 'help';
267
+ if (wantsHelp && nameArgument === undefined) {
268
+ console.log((0, help_1.apiHelp)(apis, invocation));
269
+ return 0;
270
+ }
271
+ const clear = (names) => (0, clear_1.clearApiCheckouts)({
272
+ apis,
273
+ names,
274
+ root,
275
+ invocation,
276
+ force: argv.includes('--force'),
277
+ hasContainers: composeProjectHasContainers,
278
+ takeDown: takeComposeProjectDown,
279
+ });
280
+ if (command === 'clear' && argv.includes('--all'))
281
+ return clear(Object.keys(apis));
282
+ const names = nameArgument === undefined ? [] : namedApis(nameArgument);
283
+ if (command === undefined || names.length === 0) {
284
+ console.error((0, help_1.apiHelp)(apis, invocation));
285
+ return 1;
286
+ }
287
+ const known = Object.keys(apis);
288
+ const unknown = names.find((candidate) => apis[candidate] === undefined);
289
+ if (unknown !== undefined) {
290
+ console.error(known.length === 0
291
+ ? (0, help_1.apiHelp)(apis, invocation)
292
+ : `Unknown API "${unknown}".${(0, suggest_1.didYouMean)(unknown, known)}\n\nAPIs: ${known.join(', ')}`);
293
+ return 1;
294
+ }
295
+ const targets = names.flatMap((name) => {
296
+ const api = apis[name];
297
+ return api === undefined ? [] : [{ name, api }];
298
+ });
299
+ if (wantsHelp) {
300
+ const texts = targets.map(({ name, api }) => {
301
+ const checkout = (0, resolve_checkout_1.resolveApiCheckout)({ root, name, api });
302
+ return (0, help_1.singleApiHelp)({
303
+ name,
304
+ api,
305
+ invocation,
306
+ checkout: checkout.ok
307
+ ? checkout.checkout.composePath
308
+ : (0, resolve_checkout_1.checkoutProblem)({ failure: checkout, name, invocation }),
309
+ });
310
+ });
311
+ console.log(texts.join('\n\n'));
312
+ return 0;
313
+ }
314
+ const rejected = targets.find(({ api }) => !(0, definition_1.apiCommandNames)(api).includes(command));
315
+ if (rejected) {
316
+ const commands = (0, definition_1.apiCommandNames)(rejected.api);
317
+ console.error(`Unknown command "${command}" for the ${rejected.name} API.${(0, suggest_1.didYouMean)(command, commands)}\n\n` +
318
+ `Commands: ${commands.join(', ')}`);
319
+ return 1;
320
+ }
321
+ if (command === 'clear')
322
+ return clear(names);
323
+ let exitCode = 0;
324
+ for (const { name, api } of targets) {
325
+ const code = yield runOneApiCommand({ argv, root, invocation, command, name, api, service });
326
+ if (code !== 0)
327
+ exitCode = code;
328
+ }
329
+ return exitCode;
330
+ });
331
+ exports.runApiCommand = runApiCommand;
332
+ //# sourceMappingURL=run.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../../../../../../libs/cli/src/lib/api/run.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ export type SetupRequest = {
2
+ /** The API's own `setupCommand`, for example `make setup`. */
3
+ setupCommand: string;
4
+ /** Directory the command runs in, which is the API's compose directory. */
5
+ composePath: string;
6
+ /** The API's `envFile`, when it declares one. */
7
+ envFile?: string;
8
+ };
9
+ /**
10
+ * Runs the API's own setup command in its compose directory, on the host rather than in a container.
11
+ * The command's output is kept back and only printed when it fails, so its own hints about the
12
+ * checkout's Makefile do not compete with the CLI. A command that exits 0 without creating `envFile`
13
+ * still fails here, so a caller that re-runs the original command afterwards cannot loop.
14
+ */
15
+ export declare const runApiSetup: ({ setupCommand, composePath, envFile }: SetupRequest) => number;
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.runApiSetup = void 0;
4
+ const child_process_1 = require("child_process");
5
+ const fs_1 = require("fs");
6
+ const path_1 = require("path");
7
+ /**
8
+ * Runs the API's own setup command in its compose directory, on the host rather than in a container.
9
+ * The command's output is kept back and only printed when it fails, so its own hints about the
10
+ * checkout's Makefile do not compete with the CLI. A command that exits 0 without creating `envFile`
11
+ * still fails here, so a caller that re-runs the original command afterwards cannot loop.
12
+ */
13
+ const runApiSetup = ({ setupCommand, composePath, envFile }) => {
14
+ var _a, _b, _c;
15
+ const envPath = envFile === undefined ? undefined : (0, path_1.join)(composePath, envFile);
16
+ const existedBefore = envPath !== undefined && (0, fs_1.existsSync)(envPath);
17
+ console.log(`Running "${setupCommand}" in ${composePath}.`);
18
+ const result = (0, child_process_1.spawnSync)(setupCommand, { cwd: composePath, shell: true, encoding: 'utf8' });
19
+ const output = `${(_a = result.stdout) !== null && _a !== void 0 ? _a : ''}\n${(_b = result.stderr) !== null && _b !== void 0 ? _b : ''}`.trim();
20
+ const status = (_c = result.status) !== null && _c !== void 0 ? _c : 1;
21
+ const fail = (reason) => {
22
+ if (output)
23
+ console.error(output);
24
+ console.error(reason);
25
+ return status === 0 ? 1 : status;
26
+ };
27
+ if (result.error)
28
+ return fail(result.error.message);
29
+ if (status !== 0)
30
+ return fail(`"${setupCommand}" failed with exit code ${status}.`);
31
+ if (envPath !== undefined && !(0, fs_1.existsSync)(envPath)) {
32
+ return fail(`"${setupCommand}" ran, but ${envFile} still does not exist in ${composePath}.`);
33
+ }
34
+ if (envFile === undefined)
35
+ console.log(`"${setupCommand}" finished.`);
36
+ else
37
+ console.log(existedBefore ? `${envFile} already existed.` : `Created ${envFile}.`);
38
+ return 0;
39
+ };
40
+ exports.runApiSetup = runApiSetup;
41
+ //# sourceMappingURL=setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../../../../../libs/cli/src/lib/api/setup.ts"],"names":[],"mappings":";;;AAAA,iDAA0C;AAC1C,2BAAgC;AAChC,+BAA4B;AAW5B;;;;;GAKG;AACI,MAAM,WAAW,GAAG,CAAC,EAAE,YAAY,EAAE,WAAW,EAAE,OAAO,EAAgB,EAAE,EAAE;;IAClF,MAAM,OAAO,GAAG,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAA,WAAI,EAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAC/E,MAAM,aAAa,GAAG,OAAO,KAAK,SAAS,IAAI,IAAA,eAAU,EAAC,OAAO,CAAC,CAAC;IAEnE,OAAO,CAAC,GAAG,CAAC,YAAY,YAAY,QAAQ,WAAW,GAAG,CAAC,CAAC;IAE5D,MAAM,MAAM,GAAG,IAAA,yBAAS,EAAC,YAAY,EAAE,EAAE,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;IAC5F,MAAM,MAAM,GAAG,GAAG,MAAA,MAAM,CAAC,MAAM,mCAAI,EAAE,KAAK,MAAA,MAAM,CAAC,MAAM,mCAAI,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC;IACvE,MAAM,MAAM,GAAG,MAAA,MAAM,CAAC,MAAM,mCAAI,CAAC,CAAC;IAElC,MAAM,IAAI,GAAG,CAAC,MAAc,EAAE,EAAE;QAC9B,IAAI,MAAM;YAAE,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAElC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAEtB,OAAO,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IACnC,CAAC,CAAC;IAEF,IAAI,MAAM,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAEpD,IAAI,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC,IAAI,YAAY,2BAA2B,MAAM,GAAG,CAAC,CAAC;IAEpF,IAAI,OAAO,KAAK,SAAS,IAAI,CAAC,IAAA,eAAU,EAAC,OAAO,CAAC,EAAE,CAAC;QAClD,OAAO,IAAI,CAAC,IAAI,YAAY,cAAc,OAAO,4BAA4B,WAAW,GAAG,CAAC,CAAC;IAC/F,CAAC;IAED,IAAI,OAAO,KAAK,SAAS;QAAE,OAAO,CAAC,GAAG,CAAC,IAAI,YAAY,aAAa,CAAC,CAAC;;QACjE,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,OAAO,mBAAmB,CAAC,CAAC,CAAC,WAAW,OAAO,GAAG,CAAC,CAAC;IAExF,OAAO,CAAC,CAAC;AACX,CAAC,CAAC;AA9BW,QAAA,WAAW,eA8BtB"}
@@ -0,0 +1,20 @@
1
+ import { ContainerState } from './compose';
2
+ export type ServiceState = {
3
+ service: string;
4
+ /** The engine's own words, or `no container` for a service that was never created. */
5
+ status: string;
6
+ running: boolean;
7
+ /** Published host ports, as `8000 -> 80`. */
8
+ ports: string[];
9
+ };
10
+ /**
11
+ * One row per requested service, in the order the API declares them. A container the engine knows
12
+ * but this API does not ask for is left out, so a shared checkout does not pad the table.
13
+ */
14
+ export declare const serviceStates: (options: {
15
+ services: readonly string[];
16
+ /** Containers of this compose project only. */
17
+ containers: readonly ContainerState[];
18
+ }) => ServiceState[];
19
+ /** The state table `up` prints instead of the container engine's own wide one. */
20
+ export declare const serviceStateTable: (states: readonly ServiceState[]) => string;
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.serviceStateTable = exports.serviceStates = void 0;
4
+ const compose_1 = require("./compose");
5
+ const pad = (text, width) => text.padEnd(width);
6
+ /**
7
+ * One row per requested service, in the order the API declares them. A container the engine knows
8
+ * but this API does not ask for is left out, so a shared checkout does not pad the table.
9
+ */
10
+ const serviceStates = (options) => {
11
+ const { services, containers } = options;
12
+ return services.map((service) => {
13
+ var _a, _b;
14
+ const container = containers.find((candidate) => candidate.service === service);
15
+ return {
16
+ service,
17
+ status: (_a = container === null || container === void 0 ? void 0 : container.status) !== null && _a !== void 0 ? _a : 'no container',
18
+ running: container !== undefined && (0, compose_1.isRunningStatus)(container.status),
19
+ ports: ((_b = container === null || container === void 0 ? void 0 : container.ports) !== null && _b !== void 0 ? _b : []).map(({ host, container: target }) => `${host} -> ${target}`),
20
+ };
21
+ });
22
+ };
23
+ exports.serviceStates = serviceStates;
24
+ /** The state table `up` prints instead of the container engine's own wide one. */
25
+ const serviceStateTable = (states) => {
26
+ const serviceWidth = Math.max(0, ...states.map(({ service }) => service.length));
27
+ const statusWidth = Math.max(0, ...states.map(({ status }) => status.length));
28
+ return states
29
+ .map(({ service, status, ports }) => ` ${pad(service, serviceWidth)} ${pad(status, statusWidth)} ${ports.join(', ')}`.trimEnd())
30
+ .join('\n');
31
+ };
32
+ exports.serviceStateTable = serviceStateTable;
33
+ //# sourceMappingURL=state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../../../../../../libs/cli/src/lib/api/state.ts"],"names":[],"mappings":";;;AAAA,uCAA4D;AAW5D,MAAM,GAAG,GAAG,CAAC,IAAY,EAAE,KAAa,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAEhE;;;GAGG;AACI,MAAM,aAAa,GAAG,CAAC,OAI7B,EAAkB,EAAE;IACnB,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC;IAEzC,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;;QAC9B,MAAM,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,OAAO,KAAK,OAAO,CAAC,CAAC;QAEhF,OAAO;YACL,OAAO;YACP,MAAM,EAAE,MAAA,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,MAAM,mCAAI,cAAc;YAC3C,OAAO,EAAE,SAAS,KAAK,SAAS,IAAI,IAAA,yBAAe,EAAC,SAAS,CAAC,MAAM,CAAC;YACrE,KAAK,EAAE,CAAC,MAAA,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,KAAK,mCAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,GAAG,IAAI,OAAO,MAAM,EAAE,CAAC;SAC7F,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAjBW,QAAA,aAAa,iBAiBxB;AAEF,kFAAkF;AAC3E,MAAM,iBAAiB,GAAG,CAAC,MAA+B,EAAE,EAAE;IACnE,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IACjF,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;IAE9E,OAAO,MAAM;SACV,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,CAClC,KAAK,GAAG,CAAC,OAAO,EAAE,YAAY,CAAC,KAAK,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAC9F;SACA,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC,CAAC;AATW,QAAA,iBAAiB,qBAS5B"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * The candidate closest to `input`, or undefined when none is close enough to suggest. A short input
3
+ * accepts one edit and a longer one two, so a typo is caught without guessing at a different word.
4
+ */
5
+ export declare const closestMatch: (input: string, candidates: string[]) => string | undefined;
6
+ /** The " Did you mean …?" tail of an error, empty when nothing is close enough. */
7
+ export declare const didYouMean: (input: string, candidates: string[]) => string;
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.didYouMean = exports.closestMatch = void 0;
4
+ const cell = (row, index) => { var _a; return (_a = row[index]) !== null && _a !== void 0 ? _a : 0; };
5
+ const distance = (one, two) => {
6
+ let previous = Array.from({ length: two.length + 1 }, (_, index) => index);
7
+ for (let row = 1; row <= one.length; row++) {
8
+ const current = [row];
9
+ for (let column = 1; column <= two.length; column++) {
10
+ const substitution = cell(previous, column - 1) + (one[row - 1] === two[column - 1] ? 0 : 1);
11
+ current.push(Math.min(cell(current, column - 1) + 1, cell(previous, column) + 1, substitution));
12
+ }
13
+ previous = current;
14
+ }
15
+ return cell(previous, two.length);
16
+ };
17
+ /**
18
+ * The candidate closest to `input`, or undefined when none is close enough to suggest. A short input
19
+ * accepts one edit and a longer one two, so a typo is caught without guessing at a different word.
20
+ */
21
+ const closestMatch = (input, candidates) => {
22
+ const limit = input.length <= 4 ? 1 : 2;
23
+ const [best] = candidates
24
+ .map((candidate) => ({ candidate, gap: distance(input.toLowerCase(), candidate.toLowerCase()) }))
25
+ .sort((one, two) => one.gap - two.gap);
26
+ return best && best.gap <= limit ? best.candidate : undefined;
27
+ };
28
+ exports.closestMatch = closestMatch;
29
+ /** The " Did you mean …?" tail of an error, empty when nothing is close enough. */
30
+ const didYouMean = (input, candidates) => {
31
+ const suggestion = (0, exports.closestMatch)(input, candidates);
32
+ return suggestion ? ` Did you mean "${suggestion}"?` : '';
33
+ };
34
+ exports.didYouMean = didYouMean;
35
+ //# sourceMappingURL=suggest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"suggest.js","sourceRoot":"","sources":["../../../../../../libs/cli/src/lib/api/suggest.ts"],"names":[],"mappings":";;;AAAA,MAAM,IAAI,GAAG,CAAC,GAAa,EAAE,KAAa,EAAE,EAAE,WAAC,OAAA,MAAA,GAAG,CAAC,KAAK,CAAC,mCAAI,CAAC,CAAA,EAAA,CAAC;AAE/D,MAAM,QAAQ,GAAG,CAAC,GAAW,EAAE,GAAW,EAAE,EAAE;IAC5C,IAAI,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;IAE3E,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,IAAI,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC;QAC3C,MAAM,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;QAEtB,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC;YACpD,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAE7F,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC;QAClG,CAAC;QAED,QAAQ,GAAG,OAAO,CAAC;IACrB,CAAC;IAED,OAAO,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;AACpC,CAAC,CAAC;AAEF;;;GAGG;AACI,MAAM,YAAY,GAAG,CAAC,KAAa,EAAE,UAAoB,EAAE,EAAE;IAClE,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAExC,MAAM,CAAC,IAAI,CAAC,GAAG,UAAU;SACtB,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,QAAQ,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,SAAS,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC;SAChG,IAAI,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;IAEzC,OAAO,IAAI,IAAI,IAAI,CAAC,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;AAChE,CAAC,CAAC;AARW,QAAA,YAAY,gBAQvB;AAEF,mFAAmF;AAC5E,MAAM,UAAU,GAAG,CAAC,KAAa,EAAE,UAAoB,EAAE,EAAE;IAChE,MAAM,UAAU,GAAG,IAAA,oBAAY,EAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IAEnD,OAAO,UAAU,CAAC,CAAC,CAAC,kBAAkB,UAAU,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;AAC5D,CAAC,CAAC;AAJW,QAAA,UAAU,cAIrB"}
@@ -0,0 +1,11 @@
1
+ export type AuthCommandOptions = {
2
+ /** Arguments after `auth`, for example `['gitlab.example.com', 'glpat-…']`. */
3
+ argv: string[];
4
+ root?: string;
5
+ /** How the caller is invoked, used in the usage line. */
6
+ invocation?: string;
7
+ /** Where auth.json is written. Defaults to the directory the API containers mount. */
8
+ home?: string;
9
+ };
10
+ /** Writes a GitLab token into composer's auth.json, after asking the host whether it can fetch code. */
11
+ export declare const authCommand: ({ argv, root, invocation, home, }: AuthCommandOptions) => Promise<number>;