comp-hub 0.31.1 → 0.41.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 (108) hide show
  1. package/README.md +3 -2
  2. package/bin/cli.js +1 -0
  3. package/bin/lib/startup.js +33 -13
  4. package/dist/index.js +3 -3
  5. package/dist/master.js +23 -23
  6. package/dist/website/container/assets/{index-BR_ZVtEf.js → index-BF46-8S8.js} +13 -13
  7. package/dist/website/container/assets/{index-Y--RAA6W.css → index-DN-EG3Qh.css} +1 -1
  8. package/dist/website/container/index.html +3 -2
  9. package/dist/website/container/js/react-jsx-loader.js +233 -0
  10. package/dist/website/item/assets/index-iYpmJN_Z.css +1 -0
  11. package/dist/website/item/assets/index-r0gnU8T3.js +62 -0
  12. package/dist/website/item/index.html +2 -2
  13. package/dist/website/main/assets/{AuthCodeSendBtn.vue_vue_type_script_setup_true_lang-C5to3ZQC.js → AuthCodeSendBtn.vue_vue_type_script_setup_true_lang-XaDuBXZe.js} +1 -1
  14. package/dist/website/main/assets/{BaseBadge-DUuZfvYd.js → BaseBadge-CwPduDSy.js} +1 -1
  15. package/dist/website/main/assets/{BaseDialog.vue_vue_type_script_setup_true_lang-DhPHn879.js → BaseDialog.vue_vue_type_script_setup_true_lang-CkNHSg5g.js} +1 -1
  16. package/dist/website/main/assets/{BaseSegmented.vue_vue_type_script_setup_true_lang-D46cMrVi.js → BaseSegmented.vue_vue_type_script_setup_true_lang-QoRVS1cj.js} +1 -1
  17. package/dist/website/main/assets/{CanvasAnimation.vue_vue_type_script_setup_true_lang-CisWACfW.js → CanvasAnimation.vue_vue_type_script_setup_true_lang-C4ID6BIz.js} +1 -1
  18. package/dist/website/main/assets/{CodeMirrorEditor-Cqow8ROO-DMgFI1zV.js → CodeMirrorEditor-Cqow8ROO-Cb1F80wf.js} +3 -3
  19. package/dist/website/main/assets/{EmptyStatusContainer.vue_vue_type_script_setup_true_lang-CAB4mEGu.js → EmptyStatusContainer.vue_vue_type_script_setup_true_lang-D9ipEmGE.js} +1 -1
  20. package/dist/website/main/assets/GithubCallback-CvYaECQV.js +1 -0
  21. package/dist/website/main/assets/ReplyForm.vue_vue_type_script_setup_true_lang-Cg6jGDaf.js +1 -0
  22. package/dist/website/main/assets/{core-DIlcfMir.js → core-yetgou6F.js} +1 -1
  23. package/dist/website/main/assets/{el-table-column-DUFMPIr5.js → el-table-column-BpgDq_WF.js} +1 -1
  24. package/dist/website/main/assets/index-3zCQDZnh.js +2 -0
  25. package/dist/website/main/assets/{index-72rReQ2I-sU_re5gS.js → index-72rReQ2I-BUkUG78x.js} +1 -1
  26. package/dist/website/main/assets/index-74ZEuWc8.js +1 -0
  27. package/dist/website/main/assets/index-9wcpsZe1.js +1 -0
  28. package/dist/website/main/assets/index-BCpgCtua.js +1 -0
  29. package/dist/website/main/assets/{index-HnLIbMTX.js → index-BJKOBdMx.js} +1 -1
  30. package/dist/website/main/assets/index-BMOsY3cQ.js +2 -0
  31. package/dist/website/main/assets/index-BMVmqejS.js +1 -0
  32. package/dist/website/main/assets/{index-BiQ2dJm4.js → index-BcfC5qCh.js} +1 -1
  33. package/dist/website/main/assets/{index-DwDo8mID.js → index-BnX30az1.js} +1 -1
  34. package/dist/website/main/assets/{index-Ct_U5I7y.js → index-BouHS9Ky.js} +1 -1
  35. package/dist/website/main/assets/index-Bp79GOY4.js +1 -0
  36. package/dist/website/main/assets/{index-Cbpqtmwk.js → index-BsZl8udl.js} +1 -1
  37. package/dist/website/main/assets/{index-B-fZjRMn.js → index-Bucicr-O.js} +1 -1
  38. package/dist/website/main/assets/index-CXKzXFNq.js +1 -0
  39. package/dist/website/main/assets/{index-DlU_hLR3.js → index-CbpqTP74.js} +1 -1
  40. package/dist/website/main/assets/{index-CxLzXF-b.js → index-CgJn84pE.js} +1 -1
  41. package/dist/website/main/assets/{index-CvGH1xqJ.css → index-CioMG7I6.css} +1 -1
  42. package/dist/website/main/assets/index-ClqLWOrM.js +1 -0
  43. package/dist/website/main/assets/index-CopP0_Oh.js +1 -0
  44. package/dist/website/main/assets/{index-Da5ZhB-r.js → index-CxeWFTBn.js} +1 -1
  45. package/dist/website/main/assets/index-CzxUr7HV.js +1 -0
  46. package/dist/website/main/assets/{index-CjE-geY_.css → index-D-8GYlU8.css} +1 -1
  47. package/dist/website/main/assets/{index-Jp4YN25a.js → index-D4WFMTSP.js} +1 -1
  48. package/dist/website/main/assets/{index-D76eWsZ1-BUecZt4E.js → index-D76eWsZ1-7KvuCuMg.js} +1 -1
  49. package/dist/website/main/assets/index-DCet9p8Y.js +1 -0
  50. package/dist/website/main/assets/{index-Cz3keLmq.js → index-DMO6XTC0.js} +1 -1
  51. package/dist/website/main/assets/{index-DKv4dFPY.js → index-DP0Xav0B.js} +1 -1
  52. package/dist/website/main/assets/index-DXY5BNS4.js +1 -0
  53. package/dist/website/main/assets/{index-Dms7ZQ2h-DY4-ZFKr.js → index-Dms7ZQ2h-BXeasSDQ.js} +1 -1
  54. package/dist/website/main/assets/{index-DqiFCfGx-BY8MJk0B.js → index-DqiFCfGx-4HZIi15Y.js} +1 -1
  55. package/dist/website/main/assets/{index-DxypSQ0K-CDh8t7kw.js → index-DxypSQ0K-DsBZbAQO.js} +1 -1
  56. package/dist/website/main/assets/{index-CnhaF7r3.js → index-FOvWqIoM.js} +1 -1
  57. package/dist/website/main/assets/{index-CQSvO48y.js → index-HvNFjpLq.js} +1 -1
  58. package/dist/website/main/assets/{index-Cu1aNpBv.js → index-KZ5xMbrf.js} +1 -1
  59. package/dist/website/main/assets/index-PtEeGBK6.js +1 -0
  60. package/dist/website/main/assets/{index-T76vWLBU-Bpnxnyfv.js → index-T76vWLBU-C2L4ZR6a.js} +1 -1
  61. package/dist/website/main/assets/{index-CnTuJQbj.js → index-YvDl_1WK.js} +23 -23
  62. package/dist/website/main/assets/{index-fZBcgzqR-QE1WZxps.js → index-fZBcgzqR-DZ4VEjtI.js} +1 -1
  63. package/dist/website/main/assets/{index-mqeGrL6B-DZ51JJUI.js → index-mqeGrL6B-zaO8HgOa.js} +1 -1
  64. package/dist/website/main/assets/{index-QDS7dx0M.js → index-rm7l2BT_.js} +1 -1
  65. package/dist/website/main/assets/{index.vue_vue_type_script_setup_true_lang-B5HoY3_0.js → index.vue_vue_type_script_setup_true_lang-2Z80ry6F.js} +1 -1
  66. package/dist/website/main/assets/index.vue_vue_type_script_setup_true_lang-C7h-Ycpm.js +1 -0
  67. package/dist/website/main/assets/{index.vue_vue_type_script_setup_true_lang-BBmEjb-A.js → index.vue_vue_type_script_setup_true_lang-CHyooj4T.js} +1 -1
  68. package/dist/website/main/assets/{index.vue_vue_type_script_setup_true_lang-t73JgDYM.js → index.vue_vue_type_script_setup_true_lang-ChXDjhzT.js} +2 -2
  69. package/dist/website/main/assets/index.vue_vue_type_script_setup_true_lang-Cy3ZPsfb.js +1 -0
  70. package/dist/website/main/assets/{index.vue_vue_type_script_setup_true_lang-87WT-7PF.js → index.vue_vue_type_script_setup_true_lang-DHWblo58.js} +1 -1
  71. package/dist/website/main/assets/{index.vue_vue_type_style_index_0_lang-SpJl7c7B.js → index.vue_vue_type_style_index_0_lang-Bsi5S1XY.js} +1 -1
  72. package/dist/website/main/assets/{index.vue_vue_type_style_index_0_lang-C30OZgOy.js → index.vue_vue_type_style_index_0_lang-DfBu8zdC.js} +1 -1
  73. package/dist/website/main/assets/{index.vue_vue_type_style_index_0_lang-YYZCGIEM.js → index.vue_vue_type_style_index_0_lang-Digz_UdY.js} +1 -1
  74. package/dist/website/main/assets/{md5-BaIvdSuD.js → md5-CWhVn6LA.js} +1 -1
  75. package/dist/website/main/assets/{useCacheOssStore-B5wqgiBM.js → useCacheOssStore-KoEbWj57.js} +1 -1
  76. package/dist/website/main/assets/useCompEditStore-Ch5sDzy4.js +1 -0
  77. package/dist/website/main/assets/useCompEditStore-GUrodzAV.css +1 -0
  78. package/dist/website/main/assets/{useKeyword-BygMrCvJ.js → useKeyword-Bmq02ywx.js} +1 -1
  79. package/dist/website/main/assets/{useMessage-CHhLVawp.js → useMessage-BLwQdu5o.js} +1 -1
  80. package/dist/website/main/assets/{useTeamHeaders-a-XSRO3U.css → useTeamHeaders-BMHQzwDq.css} +1 -1
  81. package/dist/website/main/assets/{useTeamHeaders-C1Nwzx4f.js → useTeamHeaders-Bttl7tEb.js} +2 -2
  82. package/dist/website/main/assets/{useUnreadStore-D50CXC_9.js → useUnreadStore-kWR1ykK7.js} +1 -1
  83. package/dist/website/main/assets/{useVscodeOpen-CJ-3bg9h.js → useVscodeOpen-DyvB87xz.js} +1 -1
  84. package/dist/website/main/assets/{vendor-ui-BAx7vAkH.js → vendor-ui-KquZSIP0.js} +10 -10
  85. package/dist/website/main/index.html +3 -3
  86. package/package.json +1 -2
  87. package/dist/website/item/assets/index-BxlM4TBc.js +0 -60
  88. package/dist/website/item/assets/index-Cg5t9Ndz.css +0 -1
  89. package/dist/website/main/assets/GithubCallback-DP3YU9rH.js +0 -1
  90. package/dist/website/main/assets/ReplyForm.vue_vue_type_script_setup_true_lang-BnN1jBiO.js +0 -1
  91. package/dist/website/main/assets/index--J05rNIX.js +0 -1
  92. package/dist/website/main/assets/index-B2rWNHgy.js +0 -1
  93. package/dist/website/main/assets/index-B6fwGRmY.js +0 -1
  94. package/dist/website/main/assets/index-B8TdXR68.js +0 -1
  95. package/dist/website/main/assets/index-BBzEF7CC.js +0 -1
  96. package/dist/website/main/assets/index-BQKN7xQr.js +0 -2
  97. package/dist/website/main/assets/index-BWKB83Cd.js +0 -1
  98. package/dist/website/main/assets/index-BjKOeMxH.js +0 -1
  99. package/dist/website/main/assets/index-D03XtNqB.js +0 -1
  100. package/dist/website/main/assets/index-DEvtplax.js +0 -2
  101. package/dist/website/main/assets/index-DQTRYmEL.js +0 -1
  102. package/dist/website/main/assets/index-DRytU1Iu.js +0 -1
  103. package/dist/website/main/assets/index-DcfKevFQ.js +0 -1
  104. package/dist/website/main/assets/index-tSn-zTTf.js +0 -1
  105. package/dist/website/main/assets/index.vue_vue_type_script_setup_true_lang-C1EYwhRp.js +0 -1
  106. package/dist/website/main/assets/index.vue_vue_type_script_setup_true_lang-Dl1KwcTe.js +0 -1
  107. package/dist/website/main/assets/useCompEditStore-Br3x5A7Q.css +0 -1
  108. package/dist/website/main/assets/useCompEditStore-rtFXUPNg.js +0 -1
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # comp-hub
2
2
 
3
- CLI for comp-hub — a Vue component sharing platform. Start a local dev server to preview, manage, and share components.
3
+ CLI for comp-hub — a component sharing platform supporting Vue and React. Start a local dev server to preview, manage, and share components.
4
4
 
5
5
  [![npm version](https://img.shields.io/npm/v/comp-hub)](https://www.npmjs.com/package/comp-hub)
6
6
  [![Node.js](https://img.shields.io/badge/node-%3E%3D16-brightgreen)](https://nodejs.org)
@@ -119,8 +119,9 @@ module.exports = {
119
119
  ## Component Specs
120
120
 
121
121
  - Upload components as **folders** — folder name is the component name
122
- - Must include `index.vue` as entry point
122
+ - Entry point: `index.vue` (Vue) or `index.jsx`/`index.tsx` (React)
123
123
  - Include a `README.md` describing usage
124
+ - Optional `comp.json` for component metadata (name, version, dependencies, etc.)
124
125
  - Optional `demo/` directory for preview configs
125
126
 
126
127
  ## Documentation
package/bin/cli.js CHANGED
@@ -15,6 +15,7 @@ program
15
15
  .name("comphub")
16
16
  .option("-p, --port <number>", "Startup port", portArg)
17
17
  .option("-d, --dir <path>", "Resource directory relative path")
18
+ .option("-l, --log-level <level>", "Log level: debug, info, warn, error (default: info)", "error")
18
19
  .version(pkg.version, "-v, --version", "Show version")
19
20
  .addOption(new Option("--allow-debug", "Enable debug mode").hideHelp())
20
21
  .addOption(new Option("--api <url>", "API URL").hideHelp())
@@ -18,7 +18,8 @@ function mergeConfig(opts, cwd) {
18
18
  api: opts.api || fileConfig.api,
19
19
  allowDebug: opts.allowDebug != null ? opts.allowDebug : fileConfig.allowDebug != null ? fileConfig.allowDebug : false,
20
20
  proxy: opts.proxy || fileConfig.proxy,
21
- port: opts.port
21
+ port: opts.port,
22
+ logLevel: opts.logLevel || fileConfig.logLevel || "info"
22
23
  };
23
24
  }
24
25
 
@@ -33,7 +34,7 @@ async function waitForMasterRuntime() {
33
34
  return null;
34
35
  }
35
36
 
36
- async function spawnMaster(publicPort, pkg, cwd) {
37
+ async function spawnMaster(publicPort, pkg, cwd, _opts) {
37
38
  const masterEntry = path.join(projectRoot, "dist/master.js");
38
39
 
39
40
  if (!fs.existsSync(masterEntry)) {
@@ -41,10 +42,8 @@ async function spawnMaster(publicPort, pkg, cwd) {
41
42
  }
42
43
 
43
44
  const masterArgs = ["--port", String(publicPort), "--public-port", String(publicPort)];
44
- const child = spawn(process.execPath, [masterEntry, ...masterArgs], {
45
- stdio: "ignore",
46
- detached: true,
47
- windowsHide: true,
45
+ const child = spawn(process.execPath, ["--no-deprecation", masterEntry, ...masterArgs], {
46
+ stdio: "inherit",
48
47
  cwd,
49
48
  env: {
50
49
  ...process.env,
@@ -52,7 +51,17 @@ async function spawnMaster(publicPort, pkg, cwd) {
52
51
  }
53
52
  });
54
53
 
55
- child.unref();
54
+ // 转发父进程信号,确保 Ctrl+C 时 master 也能优雅退出
55
+ ["SIGINT", "SIGTERM"].forEach(sig => {
56
+ process.on(sig, () => {
57
+ child.kill(sig);
58
+ });
59
+ });
60
+
61
+ // Master 退出时 CLI 也跟着退出
62
+ child.on("exit", code => {
63
+ process.exit(code || 0);
64
+ });
56
65
 
57
66
  const runtime = await waitForMasterRuntime();
58
67
  if (!runtime) {
@@ -60,7 +69,7 @@ async function spawnMaster(publicPort, pkg, cwd) {
60
69
  throw new Error("Master startup timeout");
61
70
  }
62
71
 
63
- return runtime;
72
+ return { runtime, child };
64
73
  }
65
74
 
66
75
  /**
@@ -70,6 +79,7 @@ async function spawnMaster(publicPort, pkg, cwd) {
70
79
  async function ensureMasterRunning(opts, pkg) {
71
80
  let portMismatch = false;
72
81
  let runningPublicPort = 0;
82
+ let masterChild = null;
73
83
 
74
84
  const existingRuntime = await readMasterRuntime();
75
85
 
@@ -80,15 +90,17 @@ async function ensureMasterRunning(opts, pkg) {
80
90
  portMismatch = true;
81
91
  runningPublicPort = existingRuntime.publicPort;
82
92
  }
83
- return { runtime: existingRuntime, portMismatch, runningPublicPort };
93
+ return { runtime: existingRuntime, portMismatch, runningPublicPort, masterChild };
84
94
  }
85
95
 
86
- // 启动新 master
96
+ // 启动新 master(前台运行,日志输出到终端)
87
97
  const portHint = opts.port != null ? opts.port : DEFAULT_PORT;
88
98
  const publicPort = await getPort({ port: getPort.makeRange(portHint, portHint + 100) });
89
99
 
90
- const runtime = await spawnMaster(publicPort, pkg, process.cwd());
91
- return { runtime, portMismatch, runningPublicPort };
100
+ const { runtime, child } = await spawnMaster(publicPort, pkg, process.cwd(), opts);
101
+ masterChild = child;
102
+
103
+ return { runtime, portMismatch, runningPublicPort, masterChild };
92
104
  }
93
105
 
94
106
  // ---- Registration ----
@@ -102,6 +114,7 @@ async function registerProject(masterPort, hash, cwd, opts) {
102
114
  if (opts.api) body.api = opts.api;
103
115
  if (opts.allowDebug) body.allowDebug = true;
104
116
  if (opts.proxy) body.proxy = opts.proxy;
117
+ if (opts.logLevel) body.logLevel = opts.logLevel;
105
118
 
106
119
  const res = await httpPost(apiUrl(masterPort, ADMIN_API.REGISTER), body);
107
120
  if (!res.ok) {
@@ -170,7 +183,7 @@ async function main(pkg, opts) {
170
183
 
171
184
  console.log(`${green("✓")} ${pkg.name} v${pkg.version}`);
172
185
 
173
- const { runtime, portMismatch, runningPublicPort } = await ensureMasterRunning(opts, pkg);
186
+ const { runtime, portMismatch, runningPublicPort, masterChild } = await ensureMasterRunning(opts, pkg);
174
187
 
175
188
  const masterPort = runtime.managementPort;
176
189
  const displayPort = runtime.publicPort;
@@ -178,6 +191,13 @@ async function main(pkg, opts) {
178
191
  await registerProject(masterPort, hash, cwd, opts);
179
192
 
180
193
  printBanner(pkg, cwd, hash, displayPort, opts, { portMismatch, runningPublicPort });
194
+
195
+ // 如果是新启动的 master(非复用已有),CLI 进程保持前台运行以显示服务日志
196
+ // masterChild 已通过 stdio:inherit + 移除 unref() 绑定到当前终端,事件循环不会退出
197
+ // Ctrl+C 时会通过 spawnMaster 中的信号处理优雅关闭
198
+ if (masterChild) {
199
+ console.log(`\n Press ${cyan("Ctrl+C")} to stop\n`);
200
+ }
181
201
  }
182
202
 
183
203
  module.exports = { mergeConfig, main };