@nocobase/cli 2.1.0-beta.9 → 2.2.0-alpha.1

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 (263) hide show
  1. package/assets/env-proxy/nginx/app.conf.tpl +23 -0
  2. package/assets/env-proxy/nginx/nocobase.conf.tpl +5 -0
  3. package/assets/env-proxy/nginx/snippets/dist-location.conf +5 -0
  4. package/assets/env-proxy/nginx/snippets/gzip.conf +17 -0
  5. package/assets/env-proxy/nginx/snippets/log-format-http.conf +13 -0
  6. package/assets/env-proxy/nginx/snippets/maps-http.conf +14 -0
  7. package/assets/env-proxy/nginx/snippets/mime-types.conf +98 -0
  8. package/assets/env-proxy/nginx/snippets/proxy-location.conf +17 -0
  9. package/assets/env-proxy/nginx/snippets/spa-location.conf +6 -0
  10. package/assets/env-proxy/nginx/snippets/uploads-location.conf +21 -0
  11. package/bin/run.cmd +3 -0
  12. package/bin/run.js +145 -0
  13. package/bin/session-env.js +39 -0
  14. package/dist/commands/api/resource/create.js +15 -0
  15. package/dist/commands/api/resource/destroy.js +15 -0
  16. package/dist/commands/api/resource/get.js +15 -0
  17. package/dist/commands/api/resource/index.js +20 -0
  18. package/dist/commands/api/resource/list.js +16 -0
  19. package/dist/commands/api/resource/query.js +15 -0
  20. package/dist/commands/api/resource/update.js +15 -0
  21. package/dist/commands/app/autostart/disable.js +55 -0
  22. package/dist/commands/app/autostart/enable.js +55 -0
  23. package/dist/commands/app/autostart/list.js +37 -0
  24. package/dist/commands/app/autostart/run.js +84 -0
  25. package/dist/commands/app/autostart/shared.js +49 -0
  26. package/dist/commands/app/destroy.js +234 -0
  27. package/dist/commands/app/down.js +71 -0
  28. package/dist/commands/app/logs.js +115 -0
  29. package/dist/commands/app/restart.js +229 -0
  30. package/dist/commands/app/shared.js +123 -0
  31. package/dist/commands/app/start.js +416 -0
  32. package/dist/commands/app/stop.js +183 -0
  33. package/dist/commands/app/upgrade.js +523 -0
  34. package/dist/commands/backup/create.js +147 -0
  35. package/dist/commands/backup/index.js +20 -0
  36. package/dist/commands/backup/restore.js +105 -0
  37. package/{src/cli.js → dist/commands/build.js} +4 -11
  38. package/dist/commands/config/delete.js +42 -0
  39. package/dist/commands/config/get.js +39 -0
  40. package/dist/commands/config/index.js +20 -0
  41. package/dist/commands/config/list.js +29 -0
  42. package/dist/commands/config/set.js +49 -0
  43. package/dist/commands/db/check.js +240 -0
  44. package/dist/commands/db/logs.js +85 -0
  45. package/dist/commands/db/ps.js +47 -0
  46. package/dist/commands/db/shared.js +96 -0
  47. package/dist/commands/db/start.js +86 -0
  48. package/dist/commands/db/stop.js +71 -0
  49. package/{templates/plugin/src/client/models/index.ts → dist/commands/dev.js} +4 -4
  50. package/{src/commands/locale/react-js-cron/index.js → dist/commands/down.js} +3 -8
  51. package/dist/commands/download.js +13 -0
  52. package/dist/commands/env/add.js +406 -0
  53. package/dist/commands/env/auth.js +189 -0
  54. package/dist/commands/env/current.js +21 -0
  55. package/dist/commands/env/info.js +202 -0
  56. package/dist/commands/env/list.js +43 -0
  57. package/dist/commands/env/remove.js +174 -0
  58. package/dist/commands/env/shared.js +204 -0
  59. package/dist/commands/env/status.js +93 -0
  60. package/dist/commands/env/update.js +448 -0
  61. package/dist/commands/env/use.js +38 -0
  62. package/dist/commands/examples/prompts-stages.js +150 -0
  63. package/dist/commands/examples/prompts-test.js +181 -0
  64. package/dist/commands/init.js +1390 -0
  65. package/dist/commands/install.js +2609 -0
  66. package/dist/commands/license/activate.js +179 -0
  67. package/dist/commands/license/env.js +94 -0
  68. package/dist/commands/license/generate-id.js +108 -0
  69. package/dist/commands/license/id.js +70 -0
  70. package/dist/commands/license/index.js +20 -0
  71. package/dist/commands/license/plugins/clean.js +115 -0
  72. package/dist/commands/license/plugins/index.js +20 -0
  73. package/dist/commands/license/plugins/list.js +64 -0
  74. package/dist/commands/license/plugins/shared.js +382 -0
  75. package/dist/commands/license/plugins/sync.js +314 -0
  76. package/dist/commands/license/shared.js +423 -0
  77. package/dist/commands/license/status.js +64 -0
  78. package/dist/commands/logs.js +12 -0
  79. package/dist/commands/plugin/disable.js +86 -0
  80. package/dist/commands/plugin/enable.js +86 -0
  81. package/dist/commands/plugin/import.js +108 -0
  82. package/dist/commands/plugin/list.js +82 -0
  83. package/dist/commands/pm/disable.js +12 -0
  84. package/dist/commands/pm/enable.js +12 -0
  85. package/dist/commands/pm/list.js +12 -0
  86. package/dist/commands/proxy/caddy/current.js +17 -0
  87. package/dist/commands/proxy/caddy/generate.js +69 -0
  88. package/dist/commands/proxy/caddy/index.js +28 -0
  89. package/dist/commands/proxy/caddy/info.js +31 -0
  90. package/dist/commands/proxy/caddy/reload.js +30 -0
  91. package/dist/commands/proxy/caddy/restart.js +28 -0
  92. package/dist/commands/proxy/caddy/start.js +30 -0
  93. package/dist/commands/proxy/caddy/status.js +19 -0
  94. package/dist/commands/proxy/caddy/stop.js +30 -0
  95. package/dist/commands/proxy/caddy/use.js +26 -0
  96. package/dist/commands/proxy/index.js +28 -0
  97. package/dist/commands/proxy/nginx/current.js +18 -0
  98. package/dist/commands/proxy/nginx/generate.js +68 -0
  99. package/dist/commands/proxy/nginx/index.js +28 -0
  100. package/dist/commands/proxy/nginx/info.js +34 -0
  101. package/dist/commands/proxy/nginx/reload.js +30 -0
  102. package/dist/commands/proxy/nginx/restart.js +28 -0
  103. package/dist/commands/proxy/nginx/start.js +30 -0
  104. package/dist/commands/proxy/nginx/status.js +19 -0
  105. package/dist/commands/proxy/nginx/stop.js +30 -0
  106. package/dist/commands/proxy/nginx/use.js +31 -0
  107. package/dist/commands/restart.js +12 -0
  108. package/dist/commands/revision/create.js +118 -0
  109. package/dist/commands/scaffold/migration.js +38 -0
  110. package/dist/commands/scaffold/plugin.js +37 -0
  111. package/dist/commands/self/check.js +71 -0
  112. package/dist/commands/self/index.js +20 -0
  113. package/dist/commands/self/update.js +152 -0
  114. package/dist/commands/session/id.js +24 -0
  115. package/dist/commands/session/remove.js +57 -0
  116. package/dist/commands/session/setup.js +62 -0
  117. package/dist/commands/skills/check.js +69 -0
  118. package/dist/commands/skills/index.js +20 -0
  119. package/dist/commands/skills/install.js +80 -0
  120. package/dist/commands/skills/remove.js +80 -0
  121. package/dist/commands/skills/update.js +87 -0
  122. package/dist/commands/source/build.js +58 -0
  123. package/dist/commands/source/dev.js +182 -0
  124. package/dist/commands/source/download.js +884 -0
  125. package/dist/commands/source/publish.js +109 -0
  126. package/dist/commands/source/registry/logs.js +70 -0
  127. package/dist/commands/source/registry/start.js +57 -0
  128. package/dist/commands/source/registry/status.js +33 -0
  129. package/dist/commands/source/registry/stop.js +48 -0
  130. package/dist/commands/source/test.js +476 -0
  131. package/dist/commands/start.js +12 -0
  132. package/dist/commands/stop.js +12 -0
  133. package/dist/commands/test.js +12 -0
  134. package/dist/commands/upgrade.js +12 -0
  135. package/dist/commands/v1.js +210 -0
  136. package/dist/generated/command-registry.js +134 -0
  137. package/dist/help/runtime-help.js +23 -0
  138. package/dist/lib/api-client.js +335 -0
  139. package/dist/lib/api-command-compat.js +641 -0
  140. package/dist/lib/app-health.js +139 -0
  141. package/dist/lib/app-managed-resources.js +337 -0
  142. package/dist/lib/app-public-path.js +80 -0
  143. package/dist/lib/app-runtime.js +189 -0
  144. package/dist/lib/auth-store.js +528 -0
  145. package/dist/lib/backup.js +171 -0
  146. package/dist/lib/bootstrap.js +409 -0
  147. package/dist/lib/build-config.js +18 -0
  148. package/dist/lib/builtin-db.js +86 -0
  149. package/dist/lib/cli-config.js +569 -0
  150. package/dist/lib/cli-entry-error.js +52 -0
  151. package/dist/lib/cli-home.js +47 -0
  152. package/dist/lib/cli-locale.js +141 -0
  153. package/dist/lib/command-discovery.js +39 -0
  154. package/dist/lib/command-log.js +284 -0
  155. package/dist/lib/db-connection-check.js +219 -0
  156. package/dist/lib/docker-env-file.js +60 -0
  157. package/dist/lib/docker-image.js +37 -0
  158. package/dist/lib/docker-log-stream.js +45 -0
  159. package/dist/lib/env-auth.js +963 -0
  160. package/dist/lib/env-command-config.js +45 -0
  161. package/dist/lib/env-config.js +108 -0
  162. package/dist/lib/env-guard.js +61 -0
  163. package/dist/lib/env-paths.js +101 -0
  164. package/dist/lib/env-proxy.js +1325 -0
  165. package/dist/lib/generated-command.js +203 -0
  166. package/dist/lib/http-request.js +49 -0
  167. package/dist/lib/inquirer-theme.js +17 -0
  168. package/dist/lib/inquirer.js +243 -0
  169. package/dist/lib/managed-env-file.js +101 -0
  170. package/dist/lib/managed-init-env.js +32 -0
  171. package/dist/lib/naming.js +70 -0
  172. package/dist/lib/object-utils.js +76 -0
  173. package/dist/lib/openapi.js +62 -0
  174. package/dist/lib/plugin-import.js +279 -0
  175. package/dist/lib/plugin-storage.js +64 -0
  176. package/dist/lib/post-processors.js +23 -0
  177. package/dist/lib/prompt-catalog-core.js +186 -0
  178. package/dist/lib/prompt-catalog-terminal.js +374 -0
  179. package/{src/index.js → dist/lib/prompt-catalog.js} +2 -6
  180. package/dist/lib/prompt-validators.js +278 -0
  181. package/dist/lib/prompt-web-ui.js +2234 -0
  182. package/dist/lib/proxy-caddy.js +274 -0
  183. package/dist/lib/proxy-nginx.js +330 -0
  184. package/dist/lib/resource-command.js +357 -0
  185. package/dist/lib/resource-request.js +104 -0
  186. package/dist/lib/run-npm.js +429 -0
  187. package/dist/lib/runtime-env-vars.js +32 -0
  188. package/dist/lib/runtime-generator.js +498 -0
  189. package/dist/lib/runtime-store.js +56 -0
  190. package/dist/lib/self-manager.js +301 -0
  191. package/dist/lib/session-id.js +17 -0
  192. package/dist/lib/session-integration.js +703 -0
  193. package/dist/lib/session-store.js +118 -0
  194. package/dist/lib/skills-manager.js +438 -0
  195. package/dist/lib/source-publish.js +326 -0
  196. package/dist/lib/source-registry.js +188 -0
  197. package/dist/lib/startup-update.js +309 -0
  198. package/dist/lib/ui.js +159 -0
  199. package/dist/locale/en-US.json +526 -0
  200. package/dist/locale/zh-CN.json +526 -0
  201. package/dist/post-processors/data-modeling.js +84 -0
  202. package/dist/post-processors/data-source-manager.js +138 -0
  203. package/dist/post-processors/index.js +19 -0
  204. package/nocobase-ctl.config.json +388 -0
  205. package/package.json +128 -24
  206. package/scripts/build.mjs +34 -0
  207. package/scripts/clean.mjs +9 -0
  208. package/tsconfig.json +19 -0
  209. package/bin/index.js +0 -39
  210. package/nocobase.conf.tpl +0 -95
  211. package/src/commands/benchmark.js +0 -73
  212. package/src/commands/build.js +0 -49
  213. package/src/commands/clean.js +0 -30
  214. package/src/commands/client.js +0 -166
  215. package/src/commands/create-nginx-conf.js +0 -37
  216. package/src/commands/create-plugin.js +0 -33
  217. package/src/commands/dev.js +0 -200
  218. package/src/commands/doc.js +0 -76
  219. package/src/commands/e2e.js +0 -265
  220. package/src/commands/global.js +0 -43
  221. package/src/commands/index.js +0 -45
  222. package/src/commands/instance-id.js +0 -47
  223. package/src/commands/locale/cronstrue.js +0 -122
  224. package/src/commands/locale/react-js-cron/en-US.json +0 -75
  225. package/src/commands/locale/react-js-cron/zh-CN.json +0 -33
  226. package/src/commands/locale/react-js-cron/zh-TW.json +0 -33
  227. package/src/commands/locale.js +0 -81
  228. package/src/commands/p-test.js +0 -88
  229. package/src/commands/perf.js +0 -63
  230. package/src/commands/pkg.js +0 -321
  231. package/src/commands/pm2.js +0 -37
  232. package/src/commands/postinstall.js +0 -88
  233. package/src/commands/start.js +0 -148
  234. package/src/commands/tar.js +0 -36
  235. package/src/commands/test-coverage.js +0 -55
  236. package/src/commands/test.js +0 -107
  237. package/src/commands/umi.js +0 -33
  238. package/src/commands/update-deps.js +0 -72
  239. package/src/commands/upgrade.js +0 -47
  240. package/src/commands/view-license-key.js +0 -44
  241. package/src/license.js +0 -76
  242. package/src/logger.js +0 -75
  243. package/src/plugin-generator.js +0 -80
  244. package/src/util.js +0 -517
  245. package/templates/bundle-status.html +0 -338
  246. package/templates/create-app-package.json +0 -39
  247. package/templates/plugin/.npmignore.tpl +0 -2
  248. package/templates/plugin/README.md.tpl +0 -1
  249. package/templates/plugin/client.d.ts +0 -2
  250. package/templates/plugin/client.js +0 -1
  251. package/templates/plugin/package.json.tpl +0 -11
  252. package/templates/plugin/server.d.ts +0 -2
  253. package/templates/plugin/server.js +0 -1
  254. package/templates/plugin/src/client/client.d.ts +0 -249
  255. package/templates/plugin/src/client/index.tsx.tpl +0 -1
  256. package/templates/plugin/src/client/locale.ts +0 -21
  257. package/templates/plugin/src/client/plugin.tsx.tpl +0 -10
  258. package/templates/plugin/src/index.ts +0 -2
  259. package/templates/plugin/src/locale/en-US.json +0 -1
  260. package/templates/plugin/src/locale/zh-CN.json +0 -1
  261. package/templates/plugin/src/server/collections/.gitkeep +0 -0
  262. package/templates/plugin/src/server/index.ts.tpl +0 -1
  263. package/templates/plugin/src/server/plugin.ts.tpl +0 -19
@@ -0,0 +1,210 @@
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 } from '@oclif/core';
10
+ import { formatMissingManagedAppEnvMessage, resolveManagedAppRuntime, runDockerNocoBaseCommand, runLocalNocoBaseCommand, } from '../lib/app-runtime.js';
11
+ import { ensureCrossEnvConfirmed, hasExplicitEnvSelection } from '../lib/env-guard.js';
12
+ import { announceTargetEnv } from '../lib/ui.js';
13
+ const SILENT_LIKE_PASSTHROUGH_FLAGS = new Set(['--help', '-h', '--silent']);
14
+ const SILENT_RUNTIME_ENV_VARS = {
15
+ LOGGER_SILENT: 'true',
16
+ NODE_NO_WARNINGS: '1',
17
+ };
18
+ const SILENT_STDERR_FILTERS = [
19
+ /^\(node:\d+\) \[DEP0040\] DeprecationWarning: The `punycode` module is deprecated\..*$/,
20
+ /^\(Use `node --trace-deprecation .*$/,
21
+ /^About to overwrite ArrayBuffer\.prototype properties /,
22
+ ];
23
+ function parseBridgeArgv(argv) {
24
+ let requestedEnv;
25
+ let yes = false;
26
+ const passthroughArgs = [];
27
+ for (let index = 0; index < argv.length; index += 1) {
28
+ const token = argv[index];
29
+ if (token === '--') {
30
+ passthroughArgs.push(...argv.slice(index + 1));
31
+ break;
32
+ }
33
+ if (token === '--env') {
34
+ const value = argv[index + 1];
35
+ if (!value || value === '--') {
36
+ throw new Error('Missing value for `--env`.');
37
+ }
38
+ requestedEnv = value.trim() || undefined;
39
+ index += 1;
40
+ continue;
41
+ }
42
+ if (token.startsWith('--env=')) {
43
+ requestedEnv = token.slice('--env='.length).trim() || undefined;
44
+ continue;
45
+ }
46
+ if (token === '-e') {
47
+ const value = argv[index + 1];
48
+ if (!value || value === '--') {
49
+ throw new Error('Missing value for `-e`.');
50
+ }
51
+ requestedEnv = value.trim() || undefined;
52
+ index += 1;
53
+ continue;
54
+ }
55
+ if (token.startsWith('-e') && token.length > 2) {
56
+ requestedEnv = token.slice(2).trim() || undefined;
57
+ continue;
58
+ }
59
+ if (token === '--yes') {
60
+ yes = true;
61
+ continue;
62
+ }
63
+ passthroughArgs.push(...argv.slice(index));
64
+ break;
65
+ }
66
+ return {
67
+ requestedEnv,
68
+ yes,
69
+ passthroughArgs,
70
+ };
71
+ }
72
+ function formatHttpEnvError(envName) {
73
+ return [
74
+ `Can't run \`nb v1\` for "${envName}" yet.`,
75
+ 'This env only has an API connection, so the v1 bridge is not available here.',
76
+ 'Use a local or Docker env instead.',
77
+ ].join('\n');
78
+ }
79
+ function formatSshEnvError(envName) {
80
+ return [
81
+ `Can't run \`nb v1\` for "${envName}" yet.`,
82
+ 'SSH env support is reserved but not implemented yet.',
83
+ 'Use a local or Docker env right now.',
84
+ ].join('\n');
85
+ }
86
+ function hasSilentLikePassthrough(args) {
87
+ return args.some((arg) => SILENT_LIKE_PASSTHROUGH_FLAGS.has(arg));
88
+ }
89
+ function shouldFilterSilentStderrLine(line) {
90
+ const normalized = line.replace(/\r$/, '');
91
+ return SILENT_STDERR_FILTERS.some((pattern) => pattern.test(normalized));
92
+ }
93
+ function createSilentBridgeOptions() {
94
+ let pendingStderr = '';
95
+ const flushBufferedStderr = (force) => {
96
+ while (true) {
97
+ const newlineIndex = pendingStderr.indexOf('\n');
98
+ if (newlineIndex === -1) {
99
+ break;
100
+ }
101
+ const line = pendingStderr.slice(0, newlineIndex);
102
+ pendingStderr = pendingStderr.slice(newlineIndex + 1);
103
+ if (!shouldFilterSilentStderrLine(line)) {
104
+ process.stderr.write(`${line}\n`);
105
+ }
106
+ }
107
+ if (force && pendingStderr) {
108
+ if (!shouldFilterSilentStderrLine(pendingStderr)) {
109
+ process.stderr.write(pendingStderr);
110
+ }
111
+ pendingStderr = '';
112
+ }
113
+ };
114
+ return {
115
+ commandOptions: {
116
+ stdio: 'pipe',
117
+ env: {
118
+ ...SILENT_RUNTIME_ENV_VARS,
119
+ },
120
+ onStdout: (chunk) => {
121
+ process.stdout.write(chunk);
122
+ },
123
+ onStderr: (chunk) => {
124
+ pendingStderr += chunk;
125
+ flushBufferedStderr(false);
126
+ },
127
+ },
128
+ flush: () => {
129
+ flushBufferedStderr(true);
130
+ },
131
+ };
132
+ }
133
+ export default class V1 extends Command {
134
+ static hidden = true;
135
+ static strict = false;
136
+ static summary = 'Forward commands to the selected env through the v1 bridge';
137
+ static description = 'Forward v1-compatible commands to the selected env. Defaults to the current env when `--env` is omitted. Local envs run `nocobase-v1`, and Docker envs run inside the saved app container. Bridge flags (`--env`, `--yes`) must appear before the forwarded command. Use `--` when the forwarded command needs the same flag names.';
138
+ static examples = [
139
+ '<%= config.bin %> <%= command.id %> build',
140
+ '<%= config.bin %> <%= command.id %> --env local pm list',
141
+ '<%= config.bin %> <%= command.id %> --env docker-local -- pm enable @nocobase/plugin-sample --yes',
142
+ ];
143
+ async run() {
144
+ const originalArgv = [...this.argv];
145
+ await this.parse({ strict: false, flags: {}, args: {} }, []);
146
+ this.argv = originalArgv;
147
+ let parsed;
148
+ try {
149
+ parsed = parseBridgeArgv(this.argv);
150
+ }
151
+ catch (error) {
152
+ const message = error instanceof Error ? error.message : String(error);
153
+ this.error(message);
154
+ }
155
+ const { requestedEnv, yes, passthroughArgs } = parsed;
156
+ if (passthroughArgs.length === 0) {
157
+ this.error('Pass at least one v1 command to forward.');
158
+ }
159
+ const explicitEnvSelection = Boolean(requestedEnv && hasExplicitEnvSelection(this.argv));
160
+ if (explicitEnvSelection) {
161
+ const confirmed = await ensureCrossEnvConfirmed({
162
+ command: this,
163
+ requestedEnv,
164
+ yes,
165
+ });
166
+ if (!confirmed) {
167
+ return;
168
+ }
169
+ }
170
+ const runtime = await resolveManagedAppRuntime(requestedEnv);
171
+ if (!runtime) {
172
+ this.error(formatMissingManagedAppEnvMessage(requestedEnv));
173
+ }
174
+ const silentLike = hasSilentLikePassthrough(passthroughArgs);
175
+ const silentBridge = silentLike ? createSilentBridgeOptions() : undefined;
176
+ if (!silentLike) {
177
+ announceTargetEnv(runtime.envName);
178
+ }
179
+ if (runtime.kind === 'local') {
180
+ try {
181
+ await runLocalNocoBaseCommand(runtime, passthroughArgs, silentBridge?.commandOptions);
182
+ }
183
+ catch (error) {
184
+ const message = error instanceof Error ? error.message : String(error);
185
+ this.error(message);
186
+ }
187
+ finally {
188
+ silentBridge?.flush();
189
+ }
190
+ return;
191
+ }
192
+ if (runtime.kind === 'docker') {
193
+ try {
194
+ await runDockerNocoBaseCommand(runtime.containerName, passthroughArgs, silentBridge?.commandOptions);
195
+ }
196
+ catch (error) {
197
+ const message = error instanceof Error ? error.message : String(error);
198
+ this.error(message);
199
+ }
200
+ finally {
201
+ silentBridge?.flush();
202
+ }
203
+ return;
204
+ }
205
+ if (runtime.kind === 'http') {
206
+ this.error(formatHttpEnvError(runtime.envName));
207
+ }
208
+ this.error(formatSshEnvError(runtime.envName));
209
+ }
210
+ }
@@ -0,0 +1,134 @@
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
+ var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExtension) || function (path, preserveJsx) {
10
+ if (typeof path === "string" && /^\.\.?\//.test(path)) {
11
+ return path.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {
12
+ return tsx ? preserveJsx ? ".jsx" : ".js" : d && (!ext || !cm) ? m : (d + ext + "." + cm.toLowerCase() + "js");
13
+ });
14
+ }
15
+ return path;
16
+ };
17
+ import { Command, loadHelpClass } from '@oclif/core';
18
+ import { dirname, join, relative } from 'node:path';
19
+ import { fileURLToPath, pathToFileURL } from 'node:url';
20
+ import { collectCommandModulePaths, commandRelativePathToRegistryKey, } from "../lib/command-discovery.js";
21
+ import { getCurrentEnvName, getEnv } from "../lib/auth-store.js";
22
+ import { createGeneratedFlags, GeneratedApiCommand } from "../lib/generated-command.js";
23
+ import { toKebabCase } from "../lib/naming.js";
24
+ import { loadRuntimeSync } from "../lib/runtime-store.js";
25
+ const registryFilePath = fileURLToPath(import.meta.url);
26
+ const commandsRoot = join(dirname(registryFilePath), '../commands');
27
+ const commandModuleExtension = registryFilePath.endsWith('.ts') ? '.ts' : '.js';
28
+ async function loadCommandsFromDirectory() {
29
+ const absolutePaths = await collectCommandModulePaths(commandsRoot, commandModuleExtension);
30
+ const entries = await Promise.all(absolutePaths.map(async (absolutePath) => {
31
+ const rel = relative(commandsRoot, absolutePath).replace(/\\/g, '/');
32
+ const key = commandRelativePathToRegistryKey(rel);
33
+ const mod = await import(__rewriteRelativeImportExtension(pathToFileURL(absolutePath).href));
34
+ return [key, mod.default];
35
+ }));
36
+ return Object.fromEntries(entries);
37
+ }
38
+ function readEnvName(argv) {
39
+ for (let index = 0; index < argv.length; index += 1) {
40
+ const token = argv[index];
41
+ if (token === '--env') {
42
+ return argv[index + 1];
43
+ }
44
+ if (token === '-e') {
45
+ return argv[index + 1];
46
+ }
47
+ if (token.startsWith('--env=')) {
48
+ return token.slice('--env='.length);
49
+ }
50
+ }
51
+ return undefined;
52
+ }
53
+ function createRuntimeCommand(operation, runtimeVersion) {
54
+ return class RuntimeCommand extends GeneratedApiCommand {
55
+ static summary = operation.summary;
56
+ static description = operation.description;
57
+ static examples = operation.examples;
58
+ static flags = createGeneratedFlags(operation);
59
+ static operation = operation;
60
+ static runtimeVersion = runtimeVersion;
61
+ };
62
+ }
63
+ function createRuntimeIndexCommand(commandId, metadata) {
64
+ const summary = metadata.summary || `Work with ${commandId}`;
65
+ const description = metadata.description && metadata.description !== summary ? metadata.description : undefined;
66
+ return class RuntimeIndexCommand extends Command {
67
+ static summary = summary;
68
+ static description = description;
69
+ async run() {
70
+ await this.parse(RuntimeIndexCommand);
71
+ const Help = await loadHelpClass(this.config);
72
+ await new Help(this.config, this.config.pjson.oclif.helpOptions ?? this.config.pjson.helpOptions).showHelp([
73
+ this.id ?? commandId.replaceAll(' ', ':'),
74
+ ...this.argv,
75
+ ]);
76
+ }
77
+ };
78
+ }
79
+ function getRuntimeTopicEntries(operation) {
80
+ const commandSegments = operation.commandId.split(' ');
81
+ const topLevelCommandId = commandSegments[0];
82
+ const modulePrefix = toKebabCase(operation.moduleDisplayName || operation.moduleName || '');
83
+ const isTopLevelResource = Boolean(topLevelCommandId && modulePrefix && topLevelCommandId !== modulePrefix);
84
+ const entries = [];
85
+ if (!topLevelCommandId) {
86
+ return entries;
87
+ }
88
+ if (isTopLevelResource) {
89
+ entries.push([
90
+ topLevelCommandId,
91
+ {
92
+ summary: operation.resourceDescription || operation.resourceDisplayName,
93
+ description: operation.resourceDescription,
94
+ },
95
+ ]);
96
+ return entries;
97
+ }
98
+ entries.push([
99
+ topLevelCommandId,
100
+ {
101
+ summary: operation.moduleDescription || operation.moduleDisplayName || operation.moduleName,
102
+ description: operation.moduleDescription,
103
+ },
104
+ ]);
105
+ const resourceCommandId = commandSegments.slice(0, 2).join(' ');
106
+ if (commandSegments[1]) {
107
+ entries.push([
108
+ resourceCommandId,
109
+ {
110
+ summary: operation.resourceDescription || operation.resourceDisplayName,
111
+ description: operation.resourceDescription,
112
+ },
113
+ ]);
114
+ }
115
+ return entries;
116
+ }
117
+ const registry = {
118
+ ...(await loadCommandsFromDirectory()),
119
+ };
120
+ const envName = readEnvName(process.argv.slice(2)) ?? (await getCurrentEnvName());
121
+ const env = await getEnv(envName);
122
+ const runtime = loadRuntimeSync(env?.runtime?.version);
123
+ for (const operation of runtime?.commands ?? []) {
124
+ const commandSegments = operation.commandId.split(' ');
125
+ const commandKey = commandSegments.join(':');
126
+ registry[`api:${commandKey}`] = createRuntimeCommand(operation, runtime?.version);
127
+ for (const [topicCommandId, metadata] of getRuntimeTopicEntries(operation)) {
128
+ const topicKey = `api:${topicCommandId.split(' ').join(':')}`;
129
+ if (!registry[topicKey]) {
130
+ registry[topicKey] = createRuntimeIndexCommand(`api ${topicCommandId}`, metadata);
131
+ }
132
+ }
133
+ }
134
+ export default registry;
@@ -0,0 +1,23 @@
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 { Help } from '@oclif/core';
10
+ export function isTopicIndexCommand(commandId, topics) {
11
+ if (!commandId) {
12
+ return false;
13
+ }
14
+ return topics.some((topic) => topic.name.startsWith(`${commandId}:`));
15
+ }
16
+ export default class RuntimeHelp extends Help {
17
+ get sortedCommands() {
18
+ return super.sortedCommands.filter((command) => !isTopicIndexCommand(command.id, this.config.topics));
19
+ }
20
+ get sortedTopics() {
21
+ return super.sortedTopics.filter((topic) => !topic.hidden);
22
+ }
23
+ }