@gadmin2n/cli 0.0.106 → 0.0.108

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 (45) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/actions/new.action.js +35 -0
  3. package/actions/update.action.d.ts +1 -0
  4. package/actions/update.action.js +564 -630
  5. package/commands/command.loader.js +0 -2
  6. package/commands/update.command.js +27 -37
  7. package/lib/template-merge/base-store.d.ts +16 -0
  8. package/lib/template-merge/base-store.js +127 -0
  9. package/lib/template-merge/binary-detect.d.ts +7 -0
  10. package/lib/template-merge/binary-detect.js +36 -0
  11. package/lib/template-merge/classify.d.ts +10 -0
  12. package/lib/template-merge/classify.js +61 -0
  13. package/lib/template-merge/config-validate.d.ts +5 -0
  14. package/lib/template-merge/config-validate.js +33 -0
  15. package/lib/template-merge/excludes.d.ts +7 -0
  16. package/lib/template-merge/excludes.js +109 -0
  17. package/lib/template-merge/index.d.ts +9 -8
  18. package/lib/template-merge/index.js +10 -8
  19. package/lib/template-merge/materialize.d.ts +18 -0
  20. package/lib/template-merge/materialize.js +129 -0
  21. package/lib/template-merge/merge3way.d.ts +15 -0
  22. package/lib/template-merge/merge3way.js +54 -0
  23. package/lib/template-merge/residual-scan.d.ts +10 -0
  24. package/lib/template-merge/residual-scan.js +31 -0
  25. package/lib/template-merge/types.d.ts +27 -0
  26. package/lib/template-merge/types.js +5 -0
  27. package/package.json +2 -2
  28. package/commands/build.command.d.ts +0 -5
  29. package/commands/build.command.js +0 -50
  30. package/lib/template-merge/config-loader.d.ts +0 -15
  31. package/lib/template-merge/config-loader.js +0 -38
  32. package/lib/template-merge/env-merger.d.ts +0 -5
  33. package/lib/template-merge/env-merger.js +0 -57
  34. package/lib/template-merge/glob.d.ts +0 -5
  35. package/lib/template-merge/glob.js +0 -78
  36. package/lib/template-merge/json-merger.d.ts +0 -5
  37. package/lib/template-merge/json-merger.js +0 -269
  38. package/lib/template-merge/merger.d.ts +0 -30
  39. package/lib/template-merge/merger.js +0 -2
  40. package/lib/template-merge/prisma-merger.d.ts +0 -5
  41. package/lib/template-merge/prisma-merger.js +0 -112
  42. package/lib/template-merge/registry.d.ts +0 -25
  43. package/lib/template-merge/registry.js +0 -42
  44. package/lib/template-merge/ts-module-merger.d.ts +0 -16
  45. package/lib/template-merge/ts-module-merger.js +0 -193
package/CHANGELOG.md ADDED
@@ -0,0 +1,17 @@
1
+ ## [Unreleased]
2
+
3
+ ### BREAKING CHANGES
4
+
5
+ - `gadmin2 update` 改造为 git-merge 风格三方合并:
6
+ - base 由 `.gadmin/.meta.json` 中记录的 `@gadmin2n/schematics` npm 版本号唯一标识,单次 update 时 `npm pack` 物化到 `os.tmpdir()`,结束即清理;不再写入 `.gadmin/template-base/` 目录
7
+ - 删除 4 个 Smart Merger 与逐文件 inquirer prompt
8
+ - `gadmin-cli.json` 中 `templateUpdate.policies` / `templateUpdate.mergers` 字段已下线,存在则启动报错
9
+ - 新增 `gadmin2 update status` 子命令、`--ours` / `--theirs` flag
10
+ - `gadmin2 update diff` 升级为三方展示
11
+ - `gadmin2 update` 现在每次执行都需要访问 npm registry(用于物化 base 对应版本的 schematics 包);CI 环境请预热 npm 缓存或配置内网 registry。
12
+
13
+ ### Migration
14
+
15
+ - 老实例首次跑新 CLI 时会进入"首次接入"分支:写入 `.gadmin/.meta.json`(含 `schematicsVersion`)、`.gadmin/README.md`,退出。无数据风险。
16
+ - 含废弃字段的 `gadmin-cli.json` 必须先删除字段才能继续。
17
+ - 之前版本生成的 `.gadmin/template-base/` 目录现在已被忽略,可安全删除并 commit。
@@ -108,6 +108,10 @@ class NewAction extends abstract_action_1.AbstractAction {
108
108
  for (const m of missingEnv) {
109
109
  console.info(` - ${chalk.cyan(m.var)} (${m.desc})`);
110
110
  console.info(chalk.gray(` vi ${m.file}`));
111
+ // DATABASE_URL 跳过时,init.sql 仍是模板默认 db 名,需要用户同步修改
112
+ if (m.var === 'DATABASE_URL') {
113
+ console.info(chalk.gray(` vi dev/postgres/init.sql # 将 CREATE DATABASE gadmin_demo; 改为实际数据库名`));
114
+ }
111
115
  }
112
116
  console.info();
113
117
  step++;
@@ -204,11 +208,26 @@ const mapSchematicOptions = (options) => {
204
208
  return schematicOptions;
205
209
  }, []);
206
210
  };
211
+ /**
212
+ * 从 PostgreSQL 连接串中解析 database 名。
213
+ * 形如 `postgresql://user:pwd@host:5432/db_name?schema=public` → `db_name`。
214
+ * 解析失败返回空字符串。
215
+ */
216
+ const parseDbNameFromUrl = (url) => {
217
+ try {
218
+ const u = new URL(url);
219
+ return decodeURIComponent(u.pathname.replace(/^\//, '')) || '';
220
+ }
221
+ catch (_a) {
222
+ return '';
223
+ }
224
+ };
207
225
  /**
208
226
  * 在项目生成完毕后,把用户提供的环境配置写入对应文件。
209
227
  * - VITE_AGENT_ID → web/.env.local (始终创建,含注释模板)
210
228
  * - DATABASE_URL → server/.env.local (始终创建,含注释模板)
211
229
  * - TAIHU_APP_TOKEN→ server/.env (仅当用户提供时才正则替换)
230
+ * - dev/postgres/init.sql (仅当用户提供 database-url 时才替换 CREATE DATABASE 行)
212
231
  */
213
232
  const applyEnvConfig = (projectDirectory, options) => __awaiter(void 0, void 0, void 0, function* () {
214
233
  const viteAgentId = getOptionByName(options, 'vite-agent-id') || '';
@@ -245,6 +264,22 @@ const applyEnvConfig = (projectDirectory, options) => __awaiter(void 0, void 0,
245
264
  yield writeFile(serverEnv, replaced);
246
265
  }
247
266
  }
267
+ // (4) dev/postgres/init.sql — 同步替换 CREATE DATABASE 行的 db 名
268
+ // 仅当用户提供 database-url 且能解析出 db 名时才替换;若跳过则保持模板原样,
269
+ // 由最终引导提示用户自行修改。
270
+ if (databaseUrl) {
271
+ const parsedDbName = parseDbNameFromUrl(databaseUrl);
272
+ if (parsedDbName && parsedDbName !== 'gadmin_demo') {
273
+ const initSql = (0, path_1.join)(process.cwd(), projectDirectory, 'dev', 'postgres', 'init.sql');
274
+ if (fs.existsSync(initSql)) {
275
+ const original = yield readFile(initSql, 'utf8');
276
+ const replaced = original.replace(/^CREATE DATABASE gadmin_demo;$/m, `CREATE DATABASE ${parsedDbName};`);
277
+ if (replaced !== original) {
278
+ yield writeFile(initSql, replaced);
279
+ }
280
+ }
281
+ }
282
+ }
248
283
  });
249
284
  const installPackages = (options, dryRunMode, installDirectory) => __awaiter(void 0, void 0, void 0, function* () {
250
285
  const inputPackageManager = options.find((option) => option.name === 'package-manager').value;
@@ -3,5 +3,6 @@ import { AbstractAction } from './abstract.action';
3
3
  export declare class UpdateAction extends AbstractAction {
4
4
  handle(inputs: Input[], options: Input[]): Promise<void>;
5
5
  private handleDiff;
6
+ private handleStatus;
6
7
  private handleUpdate;
7
8
  }