@nocobase/cli 2.1.0-beta.9 → 2.1.0-rc.2

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 (250) hide show
  1. package/bin/run.cmd +3 -0
  2. package/bin/run.js +145 -0
  3. package/bin/session-env.js +39 -0
  4. package/dist/commands/api/resource/create.js +15 -0
  5. package/dist/commands/api/resource/destroy.js +15 -0
  6. package/dist/commands/api/resource/get.js +15 -0
  7. package/dist/commands/api/resource/index.js +20 -0
  8. package/dist/commands/api/resource/list.js +16 -0
  9. package/dist/commands/api/resource/query.js +15 -0
  10. package/dist/commands/api/resource/update.js +15 -0
  11. package/dist/commands/app/autostart/disable.js +55 -0
  12. package/dist/commands/app/autostart/enable.js +55 -0
  13. package/dist/commands/app/autostart/list.js +37 -0
  14. package/dist/commands/app/autostart/run.js +84 -0
  15. package/dist/commands/app/autostart/shared.js +49 -0
  16. package/dist/commands/app/destroy.js +234 -0
  17. package/dist/commands/app/down.js +71 -0
  18. package/dist/commands/app/logs.js +115 -0
  19. package/dist/commands/app/restart.js +229 -0
  20. package/dist/commands/app/shared.js +123 -0
  21. package/dist/commands/app/start.js +416 -0
  22. package/dist/commands/app/stop.js +183 -0
  23. package/dist/commands/app/upgrade.js +523 -0
  24. package/dist/commands/backup/create.js +147 -0
  25. package/dist/commands/backup/index.js +20 -0
  26. package/dist/commands/backup/restore.js +105 -0
  27. package/{src/cli.js → dist/commands/build.js} +4 -11
  28. package/dist/commands/config/delete.js +42 -0
  29. package/dist/commands/config/get.js +39 -0
  30. package/dist/commands/config/index.js +20 -0
  31. package/dist/commands/config/list.js +29 -0
  32. package/dist/commands/config/set.js +49 -0
  33. package/dist/commands/db/check.js +240 -0
  34. package/dist/commands/db/logs.js +85 -0
  35. package/dist/commands/db/ps.js +47 -0
  36. package/dist/commands/db/shared.js +96 -0
  37. package/dist/commands/db/start.js +86 -0
  38. package/dist/commands/db/stop.js +71 -0
  39. package/{templates/plugin/src/client/models/index.ts → dist/commands/dev.js} +4 -4
  40. package/{src/commands/locale/react-js-cron/index.js → dist/commands/down.js} +3 -8
  41. package/dist/commands/download.js +13 -0
  42. package/dist/commands/env/add.js +406 -0
  43. package/dist/commands/env/auth.js +189 -0
  44. package/dist/commands/env/current.js +21 -0
  45. package/dist/commands/env/info.js +202 -0
  46. package/dist/commands/env/list.js +43 -0
  47. package/dist/commands/env/remove.js +174 -0
  48. package/dist/commands/env/shared.js +204 -0
  49. package/dist/commands/env/status.js +93 -0
  50. package/dist/commands/env/update.js +448 -0
  51. package/dist/commands/env/use.js +38 -0
  52. package/dist/commands/examples/prompts-stages.js +150 -0
  53. package/dist/commands/examples/prompts-test.js +181 -0
  54. package/dist/commands/init.js +1390 -0
  55. package/dist/commands/install.js +2609 -0
  56. package/dist/commands/license/activate.js +179 -0
  57. package/dist/commands/license/env.js +94 -0
  58. package/dist/commands/license/generate-id.js +108 -0
  59. package/dist/commands/license/id.js +70 -0
  60. package/dist/commands/license/index.js +20 -0
  61. package/dist/commands/license/plugins/clean.js +115 -0
  62. package/dist/commands/license/plugins/index.js +20 -0
  63. package/dist/commands/license/plugins/list.js +64 -0
  64. package/dist/commands/license/plugins/shared.js +382 -0
  65. package/dist/commands/license/plugins/sync.js +314 -0
  66. package/dist/commands/license/shared.js +423 -0
  67. package/dist/commands/license/status.js +64 -0
  68. package/dist/commands/logs.js +12 -0
  69. package/dist/commands/plugin/disable.js +86 -0
  70. package/dist/commands/plugin/enable.js +86 -0
  71. package/dist/commands/plugin/import.js +108 -0
  72. package/dist/commands/plugin/list.js +82 -0
  73. package/dist/commands/pm/disable.js +12 -0
  74. package/dist/commands/pm/enable.js +12 -0
  75. package/dist/commands/pm/list.js +12 -0
  76. package/dist/commands/proxy/caddy/current.js +17 -0
  77. package/dist/commands/proxy/caddy/generate.js +69 -0
  78. package/dist/commands/proxy/caddy/index.js +28 -0
  79. package/dist/commands/proxy/caddy/info.js +31 -0
  80. package/dist/commands/proxy/caddy/reload.js +30 -0
  81. package/dist/commands/proxy/caddy/restart.js +28 -0
  82. package/dist/commands/proxy/caddy/start.js +30 -0
  83. package/dist/commands/proxy/caddy/status.js +19 -0
  84. package/dist/commands/proxy/caddy/stop.js +30 -0
  85. package/dist/commands/proxy/caddy/use.js +26 -0
  86. package/dist/commands/proxy/index.js +28 -0
  87. package/dist/commands/proxy/nginx/current.js +18 -0
  88. package/dist/commands/proxy/nginx/generate.js +68 -0
  89. package/dist/commands/proxy/nginx/index.js +28 -0
  90. package/dist/commands/proxy/nginx/info.js +34 -0
  91. package/dist/commands/proxy/nginx/reload.js +30 -0
  92. package/dist/commands/proxy/nginx/restart.js +28 -0
  93. package/dist/commands/proxy/nginx/start.js +30 -0
  94. package/dist/commands/proxy/nginx/status.js +19 -0
  95. package/dist/commands/proxy/nginx/stop.js +30 -0
  96. package/dist/commands/proxy/nginx/use.js +31 -0
  97. package/dist/commands/restart.js +12 -0
  98. package/dist/commands/revision/create.js +118 -0
  99. package/dist/commands/scaffold/migration.js +38 -0
  100. package/dist/commands/scaffold/plugin.js +37 -0
  101. package/dist/commands/self/check.js +71 -0
  102. package/dist/commands/self/index.js +20 -0
  103. package/dist/commands/self/update.js +152 -0
  104. package/dist/commands/session/id.js +24 -0
  105. package/dist/commands/session/remove.js +57 -0
  106. package/dist/commands/session/setup.js +62 -0
  107. package/dist/commands/skills/check.js +69 -0
  108. package/dist/commands/skills/index.js +20 -0
  109. package/dist/commands/skills/install.js +80 -0
  110. package/dist/commands/skills/remove.js +80 -0
  111. package/dist/commands/skills/update.js +87 -0
  112. package/dist/commands/source/build.js +58 -0
  113. package/dist/commands/source/dev.js +182 -0
  114. package/dist/commands/source/download.js +883 -0
  115. package/dist/commands/source/publish.js +109 -0
  116. package/dist/commands/source/registry/logs.js +70 -0
  117. package/dist/commands/source/registry/start.js +57 -0
  118. package/dist/commands/source/registry/status.js +33 -0
  119. package/dist/commands/source/registry/stop.js +48 -0
  120. package/dist/commands/source/test.js +476 -0
  121. package/dist/commands/start.js +12 -0
  122. package/dist/commands/stop.js +12 -0
  123. package/dist/commands/test.js +12 -0
  124. package/dist/commands/upgrade.js +12 -0
  125. package/dist/commands/v1.js +210 -0
  126. package/dist/generated/command-registry.js +134 -0
  127. package/dist/help/runtime-help.js +23 -0
  128. package/dist/lib/api-client.js +335 -0
  129. package/dist/lib/api-command-compat.js +641 -0
  130. package/dist/lib/app-health.js +139 -0
  131. package/dist/lib/app-managed-resources.js +337 -0
  132. package/dist/lib/app-public-path.js +80 -0
  133. package/dist/lib/app-runtime.js +189 -0
  134. package/dist/lib/auth-store.js +528 -0
  135. package/dist/lib/backup.js +171 -0
  136. package/dist/lib/bootstrap.js +409 -0
  137. package/dist/lib/build-config.js +18 -0
  138. package/dist/lib/builtin-db.js +86 -0
  139. package/dist/lib/cli-config.js +569 -0
  140. package/dist/lib/cli-entry-error.js +52 -0
  141. package/dist/lib/cli-home.js +47 -0
  142. package/dist/lib/cli-locale.js +141 -0
  143. package/dist/lib/command-discovery.js +39 -0
  144. package/dist/lib/command-log.js +284 -0
  145. package/dist/lib/db-connection-check.js +219 -0
  146. package/dist/lib/docker-env-file.js +60 -0
  147. package/dist/lib/docker-image.js +37 -0
  148. package/dist/lib/docker-log-stream.js +45 -0
  149. package/dist/lib/env-auth.js +963 -0
  150. package/dist/lib/env-command-config.js +45 -0
  151. package/dist/lib/env-config.js +108 -0
  152. package/dist/lib/env-guard.js +61 -0
  153. package/dist/lib/env-paths.js +101 -0
  154. package/dist/lib/env-proxy.js +1325 -0
  155. package/dist/lib/generated-command.js +203 -0
  156. package/dist/lib/http-request.js +49 -0
  157. package/dist/lib/inquirer-theme.js +17 -0
  158. package/dist/lib/inquirer.js +243 -0
  159. package/dist/lib/managed-env-file.js +101 -0
  160. package/dist/lib/managed-init-env.js +32 -0
  161. package/dist/lib/naming.js +70 -0
  162. package/dist/lib/object-utils.js +76 -0
  163. package/dist/lib/openapi.js +62 -0
  164. package/dist/lib/plugin-import.js +279 -0
  165. package/dist/lib/plugin-storage.js +64 -0
  166. package/dist/lib/post-processors.js +23 -0
  167. package/dist/lib/prompt-catalog-core.js +186 -0
  168. package/dist/lib/prompt-catalog-terminal.js +374 -0
  169. package/{src/index.js → dist/lib/prompt-catalog.js} +2 -6
  170. package/dist/lib/prompt-validators.js +278 -0
  171. package/dist/lib/prompt-web-ui.js +2234 -0
  172. package/dist/lib/proxy-caddy.js +274 -0
  173. package/dist/lib/proxy-nginx.js +330 -0
  174. package/dist/lib/resource-command.js +357 -0
  175. package/dist/lib/resource-request.js +104 -0
  176. package/dist/lib/run-npm.js +429 -0
  177. package/dist/lib/runtime-env-vars.js +32 -0
  178. package/dist/lib/runtime-generator.js +498 -0
  179. package/dist/lib/runtime-store.js +56 -0
  180. package/dist/lib/self-manager.js +301 -0
  181. package/dist/lib/session-id.js +17 -0
  182. package/dist/lib/session-integration.js +703 -0
  183. package/dist/lib/session-store.js +118 -0
  184. package/dist/lib/skills-manager.js +438 -0
  185. package/dist/lib/source-publish.js +326 -0
  186. package/dist/lib/source-registry.js +188 -0
  187. package/dist/lib/startup-update.js +309 -0
  188. package/dist/lib/ui.js +159 -0
  189. package/dist/locale/en-US.json +526 -0
  190. package/dist/locale/zh-CN.json +526 -0
  191. package/dist/post-processors/data-modeling.js +84 -0
  192. package/dist/post-processors/data-source-manager.js +138 -0
  193. package/dist/post-processors/index.js +19 -0
  194. package/nocobase-ctl.config.json +388 -0
  195. package/package.json +133 -25
  196. package/bin/index.js +0 -39
  197. package/nocobase.conf.tpl +0 -95
  198. package/src/commands/benchmark.js +0 -73
  199. package/src/commands/build.js +0 -49
  200. package/src/commands/clean.js +0 -30
  201. package/src/commands/client.js +0 -166
  202. package/src/commands/create-nginx-conf.js +0 -37
  203. package/src/commands/create-plugin.js +0 -33
  204. package/src/commands/dev.js +0 -200
  205. package/src/commands/doc.js +0 -76
  206. package/src/commands/e2e.js +0 -265
  207. package/src/commands/global.js +0 -43
  208. package/src/commands/index.js +0 -45
  209. package/src/commands/instance-id.js +0 -47
  210. package/src/commands/locale/cronstrue.js +0 -122
  211. package/src/commands/locale/react-js-cron/en-US.json +0 -75
  212. package/src/commands/locale/react-js-cron/zh-CN.json +0 -33
  213. package/src/commands/locale/react-js-cron/zh-TW.json +0 -33
  214. package/src/commands/locale.js +0 -81
  215. package/src/commands/p-test.js +0 -88
  216. package/src/commands/perf.js +0 -63
  217. package/src/commands/pkg.js +0 -321
  218. package/src/commands/pm2.js +0 -37
  219. package/src/commands/postinstall.js +0 -88
  220. package/src/commands/start.js +0 -148
  221. package/src/commands/tar.js +0 -36
  222. package/src/commands/test-coverage.js +0 -55
  223. package/src/commands/test.js +0 -107
  224. package/src/commands/umi.js +0 -33
  225. package/src/commands/update-deps.js +0 -72
  226. package/src/commands/upgrade.js +0 -47
  227. package/src/commands/view-license-key.js +0 -44
  228. package/src/license.js +0 -76
  229. package/src/logger.js +0 -75
  230. package/src/plugin-generator.js +0 -80
  231. package/src/util.js +0 -517
  232. package/templates/bundle-status.html +0 -338
  233. package/templates/create-app-package.json +0 -39
  234. package/templates/plugin/.npmignore.tpl +0 -2
  235. package/templates/plugin/README.md.tpl +0 -1
  236. package/templates/plugin/client.d.ts +0 -2
  237. package/templates/plugin/client.js +0 -1
  238. package/templates/plugin/package.json.tpl +0 -11
  239. package/templates/plugin/server.d.ts +0 -2
  240. package/templates/plugin/server.js +0 -1
  241. package/templates/plugin/src/client/client.d.ts +0 -249
  242. package/templates/plugin/src/client/index.tsx.tpl +0 -1
  243. package/templates/plugin/src/client/locale.ts +0 -21
  244. package/templates/plugin/src/client/plugin.tsx.tpl +0 -10
  245. package/templates/plugin/src/index.ts +0 -2
  246. package/templates/plugin/src/locale/en-US.json +0 -1
  247. package/templates/plugin/src/locale/zh-CN.json +0 -1
  248. package/templates/plugin/src/server/collections/.gitkeep +0 -0
  249. package/templates/plugin/src/server/index.ts.tpl +0 -1
  250. package/templates/plugin/src/server/plugin.ts.tpl +0 -19
@@ -0,0 +1,183 @@
1
+ /**
2
+ * This file is part of the NocoBase (R) project.
3
+ * Copyright (c) 2020-2024 NocoBase Co., Ltd.
4
+ * Authors: NocoBase Team.
5
+ *
6
+ * This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
7
+ * For more information, please refer to: https://www.nocobase.com/agreement.
8
+ */
9
+ import { Command, Flags } from '@oclif/core';
10
+ import { getCurrentEnvName } from '../../lib/auth-store.js';
11
+ import { ensureCrossEnvConfirmed, hasExplicitEnvSelection } from '../../lib/env-guard.js';
12
+ import { formatMissingManagedAppEnvMessage, managedAppLifecycleEnvVars, resolveManagedAppRuntime, runLocalNocoBaseCommand, } from '../../lib/app-runtime.js';
13
+ import { announceTargetEnv, failTask, isInteractiveTerminal, printInfo, startTask, succeedTask } from '../../lib/ui.js';
14
+ import { builtinDbContainerName, removeDockerContainerIfExists } from './shared.js';
15
+ function formatStopFailure(envName, message) {
16
+ return [
17
+ `Couldn't stop NocoBase for "${envName}".`,
18
+ 'Check that the local app or Docker runtime is still available, then try again.',
19
+ `Details: ${message}`,
20
+ ].join('\n');
21
+ }
22
+ function formatStopCrossEnvConfirmationRequiredMessage(currentEnv, requestedEnv) {
23
+ return [
24
+ `Refusing to stop env "${requestedEnv}" because the current env is "${currentEnv}" and interactive confirmation is unavailable in the current session.`,
25
+ '',
26
+ 'Re-run the command with `--yes` to confirm this one-off cross-env stop, or switch the current env first.',
27
+ ].join('\n');
28
+ }
29
+ function shouldIgnoreLocalStopError(message) {
30
+ return (message.includes('spawn nocobase-v1 ENOENT') ||
31
+ message.includes('The specified --cwd does not exist:') ||
32
+ message.includes('The specified --cwd is not a directory:') ||
33
+ message.includes("Couldn't find a NocoBase source project from --cwd:"));
34
+ }
35
+ async function stopLocalRuntimeWithFallback(runtime, options) {
36
+ const env = managedAppLifecycleEnvVars();
37
+ try {
38
+ await runLocalNocoBaseCommand(runtime, ['pm2', 'kill'], {
39
+ env,
40
+ stdio: options.stdio,
41
+ });
42
+ return;
43
+ }
44
+ catch (error) {
45
+ const message = error instanceof Error ? error.message : String(error);
46
+ if (!shouldIgnoreLocalStopError(message)) {
47
+ throw error;
48
+ }
49
+ }
50
+ }
51
+ export default class AppStop extends Command {
52
+ static hidden = false;
53
+ static description = 'Stop NocoBase for the selected env. Local npm/git installs stop the app process, and Docker installs remove the saved app container.';
54
+ static examples = [
55
+ '<%= config.bin %> <%= command.id %>',
56
+ '<%= config.bin %> <%= command.id %> --env local',
57
+ '<%= config.bin %> <%= command.id %> --env local --verbose',
58
+ '<%= config.bin %> <%= command.id %> --env local-docker',
59
+ ];
60
+ static flags = {
61
+ env: Flags.string({
62
+ char: 'e',
63
+ description: 'CLI env name to stop. Defaults to the current env when omitted',
64
+ }),
65
+ yes: Flags.boolean({
66
+ char: 'y',
67
+ description: 'Confirm using --env when it targets a different env than the current env',
68
+ default: false,
69
+ }),
70
+ force: Flags.boolean({
71
+ char: 'f',
72
+ hidden: true,
73
+ default: false,
74
+ }),
75
+ 'with-db': Flags.boolean({
76
+ description: 'Also remove the CLI-managed built-in database container when present',
77
+ default: false,
78
+ }),
79
+ verbose: Flags.boolean({
80
+ description: 'Show raw shutdown output from the underlying local or Docker command',
81
+ default: false,
82
+ }),
83
+ };
84
+ async run() {
85
+ const { flags } = await this.parse(AppStop);
86
+ const requestedEnv = flags.env?.trim() || undefined;
87
+ if (requestedEnv && hasExplicitEnvSelection(this.argv)) {
88
+ const skipCrossEnvConfirmation = flags.yes || flags.force;
89
+ if (!isInteractiveTerminal()) {
90
+ const currentEnv = await getCurrentEnvName();
91
+ const normalizedCurrentEnv = String(currentEnv ?? '').trim() || undefined;
92
+ if (normalizedCurrentEnv && normalizedCurrentEnv !== requestedEnv && !skipCrossEnvConfirmation) {
93
+ this.error(formatStopCrossEnvConfirmationRequiredMessage(normalizedCurrentEnv, requestedEnv));
94
+ }
95
+ }
96
+ else {
97
+ const confirmed = await ensureCrossEnvConfirmed({
98
+ command: this,
99
+ requestedEnv,
100
+ yes: skipCrossEnvConfirmation,
101
+ });
102
+ if (!confirmed) {
103
+ return;
104
+ }
105
+ }
106
+ }
107
+ const runtime = await resolveManagedAppRuntime(requestedEnv);
108
+ const commandStdio = flags.verbose ? 'inherit' : 'ignore';
109
+ if (!runtime) {
110
+ this.error(formatMissingManagedAppEnvMessage(requestedEnv));
111
+ }
112
+ if (runtime.kind === 'http') {
113
+ this.error([
114
+ `Can't stop "${runtime.envName}" from this machine.`,
115
+ 'This env only has an API connection, so there is no saved local app or Docker runtime to stop here.',
116
+ 'If the app is running on a server, stop it there or reconnect this env to a local runtime first.',
117
+ ].join('\n'));
118
+ }
119
+ if (runtime.kind === 'ssh') {
120
+ this.error([
121
+ `Can't stop "${runtime.envName}" yet.`,
122
+ 'SSH env support is reserved but not implemented yet.',
123
+ 'Use a local or Docker env if you need CLI-managed stop right now.',
124
+ ].join('\n'));
125
+ }
126
+ announceTargetEnv(runtime.envName);
127
+ if (runtime.kind === 'docker') {
128
+ startTask(`Removing the saved Docker app container for "${runtime.envName}"...`);
129
+ try {
130
+ const state = await removeDockerContainerIfExists(runtime.containerName, {
131
+ stdio: commandStdio,
132
+ });
133
+ succeedTask(state === 'removed'
134
+ ? `Docker app container removed for "${runtime.envName}".`
135
+ : `No Docker app container found for "${runtime.envName}".`);
136
+ }
137
+ catch (error) {
138
+ const message = error instanceof Error ? error.message : String(error);
139
+ failTask(`Failed to stop NocoBase for "${runtime.envName}".`);
140
+ this.error(formatStopFailure(runtime.envName, message));
141
+ }
142
+ }
143
+ else {
144
+ startTask(`Stopping NocoBase for "${runtime.envName}"...`);
145
+ try {
146
+ await stopLocalRuntimeWithFallback(runtime, {
147
+ stdio: commandStdio,
148
+ });
149
+ succeedTask(`NocoBase has stopped for "${runtime.envName}".`);
150
+ }
151
+ catch (error) {
152
+ const message = error instanceof Error ? error.message : String(error);
153
+ failTask(`Failed to stop NocoBase for "${runtime.envName}".`);
154
+ this.error(formatStopFailure(runtime.envName, message));
155
+ }
156
+ }
157
+ if (!flags['with-db']) {
158
+ return;
159
+ }
160
+ if (runtime.kind !== 'local' && runtime.kind !== 'docker') {
161
+ return;
162
+ }
163
+ const dbContainerName = builtinDbContainerName(runtime);
164
+ if (!dbContainerName) {
165
+ printInfo(`Env "${runtime.envName}" does not use a CLI-managed built-in database. Only the app runtime was stopped.`);
166
+ return;
167
+ }
168
+ startTask(`Removing the built-in database container for "${runtime.envName}"...`);
169
+ try {
170
+ const state = await removeDockerContainerIfExists(dbContainerName, {
171
+ stdio: commandStdio,
172
+ });
173
+ succeedTask(state === 'removed'
174
+ ? `Built-in database container removed for "${runtime.envName}".`
175
+ : `No built-in database container found for "${runtime.envName}".`);
176
+ }
177
+ catch (error) {
178
+ const message = error instanceof Error ? error.message : String(error);
179
+ failTask(`Failed to stop the built-in database for "${runtime.envName}".`);
180
+ this.error(formatStopFailure(runtime.envName, message));
181
+ }
182
+ }
183
+ }