@sigx/cli 0.1.0

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 (213) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +78 -0
  3. package/dist/cli.js +230 -0
  4. package/dist/cli.js.map +1 -0
  5. package/dist/commands/create.d.ts +1 -0
  6. package/dist/commands/create.js +411 -0
  7. package/dist/commands/create.js.map +1 -0
  8. package/dist/index.d.ts +2 -0
  9. package/dist/index.js +2 -0
  10. package/dist/plugin.d.ts +26 -0
  11. package/dist/plugin.js +11 -0
  12. package/dist/plugin.js.map +1 -0
  13. package/dist/templates/basic/index.html +32 -0
  14. package/dist/templates/basic/package.json +19 -0
  15. package/dist/templates/basic/src/App.tsx +35 -0
  16. package/dist/templates/basic/tsconfig.json +13 -0
  17. package/dist/templates/basic/vite.config.ts +15 -0
  18. package/dist/templates/basic-daisyui/index.html +14 -0
  19. package/dist/templates/basic-daisyui/package.json +23 -0
  20. package/dist/templates/basic-daisyui/src/App.tsx +165 -0
  21. package/dist/templates/basic-daisyui/src/style.css +5 -0
  22. package/dist/templates/basic-daisyui/tsconfig.json +13 -0
  23. package/dist/templates/basic-daisyui/vite.config.ts +17 -0
  24. package/dist/templates/basic-tailwind/index.html +13 -0
  25. package/dist/templates/basic-tailwind/package.json +21 -0
  26. package/dist/templates/basic-tailwind/src/App.tsx +37 -0
  27. package/dist/templates/basic-tailwind/src/style.css +1 -0
  28. package/dist/templates/basic-tailwind/tsconfig.json +13 -0
  29. package/dist/templates/basic-tailwind/vite.config.ts +17 -0
  30. package/dist/templates/lynx/README.md +57 -0
  31. package/dist/templates/lynx/assets/adaptive-foreground.png +0 -0
  32. package/dist/templates/lynx/assets/icon.png +0 -0
  33. package/dist/templates/lynx/assets/splash.png +0 -0
  34. package/dist/templates/lynx/lynx.config.ts +17 -0
  35. package/dist/templates/lynx/package.json +28 -0
  36. package/dist/templates/lynx/sigx.lynx.config.ts +46 -0
  37. package/dist/templates/lynx/src/App.tsx +103 -0
  38. package/dist/templates/lynx/src/main.thread.tsx +2 -0
  39. package/dist/templates/lynx/src/main.tsx +8 -0
  40. package/dist/templates/lynx/tsconfig.json +19 -0
  41. package/dist/templates/lynx-tailwind/README.md +61 -0
  42. package/dist/templates/lynx-tailwind/assets/adaptive-foreground.png +0 -0
  43. package/dist/templates/lynx-tailwind/assets/icon.png +0 -0
  44. package/dist/templates/lynx-tailwind/assets/splash.png +0 -0
  45. package/dist/templates/lynx-tailwind/lynx.config.ts +20 -0
  46. package/dist/templates/lynx-tailwind/package.json +32 -0
  47. package/dist/templates/lynx-tailwind/postcss.config.js +5 -0
  48. package/dist/templates/lynx-tailwind/sigx.lynx.config.ts +44 -0
  49. package/dist/templates/lynx-tailwind/src/App.tsx +52 -0
  50. package/dist/templates/lynx-tailwind/src/main.thread.tsx +2 -0
  51. package/dist/templates/lynx-tailwind/src/main.tsx +9 -0
  52. package/dist/templates/lynx-tailwind/src/styles.css +3 -0
  53. package/dist/templates/lynx-tailwind/tailwind.config.ts +9 -0
  54. package/dist/templates/lynx-tailwind/tsconfig.json +19 -0
  55. package/dist/templates/ssg/index.html +25 -0
  56. package/dist/templates/ssg/package.json +22 -0
  57. package/dist/templates/ssg/src/layouts/default.tsx +27 -0
  58. package/dist/templates/ssg/src/pages/about.mdx +15 -0
  59. package/dist/templates/ssg/src/pages/index.mdx +37 -0
  60. package/dist/templates/ssg/ssg.config.ts +20 -0
  61. package/dist/templates/ssg/tsconfig.json +14 -0
  62. package/dist/templates/ssg/vite.config.ts +16 -0
  63. package/dist/templates/ssg-daisyui/index.html +13 -0
  64. package/dist/templates/ssg-daisyui/package.json +26 -0
  65. package/dist/templates/ssg-daisyui/src/layouts/default.tsx +39 -0
  66. package/dist/templates/ssg-daisyui/src/pages/about.mdx +17 -0
  67. package/dist/templates/ssg-daisyui/src/pages/index.mdx +34 -0
  68. package/dist/templates/ssg-daisyui/src/style.css +5 -0
  69. package/dist/templates/ssg-daisyui/ssg.config.ts +20 -0
  70. package/dist/templates/ssg-daisyui/tsconfig.json +14 -0
  71. package/dist/templates/ssg-daisyui/vite.config.ts +18 -0
  72. package/dist/templates/ssg-tailwind/index.html +12 -0
  73. package/dist/templates/ssg-tailwind/package.json +24 -0
  74. package/dist/templates/ssg-tailwind/src/layouts/default.tsx +29 -0
  75. package/dist/templates/ssg-tailwind/src/pages/about.mdx +16 -0
  76. package/dist/templates/ssg-tailwind/src/pages/index.mdx +37 -0
  77. package/dist/templates/ssg-tailwind/src/style.css +1 -0
  78. package/dist/templates/ssg-tailwind/ssg.config.ts +20 -0
  79. package/dist/templates/ssg-tailwind/tsconfig.json +14 -0
  80. package/dist/templates/ssg-tailwind/vite.config.ts +18 -0
  81. package/dist/templates/ssr/index.html +12 -0
  82. package/dist/templates/ssr/package.json +24 -0
  83. package/dist/templates/ssr/src/App.tsx +32 -0
  84. package/dist/templates/ssr/src/entry-client.tsx +25 -0
  85. package/dist/templates/ssr/src/entry-server.tsx +24 -0
  86. package/dist/templates/ssr/src/pages/About.tsx +20 -0
  87. package/dist/templates/ssr/src/pages/Home.tsx +31 -0
  88. package/dist/templates/ssr/src/router.ts +27 -0
  89. package/dist/templates/ssr/tsconfig.json +13 -0
  90. package/dist/templates/ssr/vite.config.ts +18 -0
  91. package/dist/templates/ssr-daisyui/index.html +14 -0
  92. package/dist/templates/ssr-daisyui/package.json +28 -0
  93. package/dist/templates/ssr-daisyui/src/App.tsx +55 -0
  94. package/dist/templates/ssr-daisyui/src/entry-client.tsx +25 -0
  95. package/dist/templates/ssr-daisyui/src/entry-server.tsx +24 -0
  96. package/dist/templates/ssr-daisyui/src/pages/About.tsx +104 -0
  97. package/dist/templates/ssr-daisyui/src/pages/Home.tsx +133 -0
  98. package/dist/templates/ssr-daisyui/src/router.ts +27 -0
  99. package/dist/templates/ssr-daisyui/src/style.css +5 -0
  100. package/dist/templates/ssr-daisyui/tsconfig.json +13 -0
  101. package/dist/templates/ssr-daisyui/vite.config.ts +20 -0
  102. package/dist/templates/ssr-tailwind/index.html +13 -0
  103. package/dist/templates/ssr-tailwind/package.json +26 -0
  104. package/dist/templates/ssr-tailwind/src/App.tsx +32 -0
  105. package/dist/templates/ssr-tailwind/src/entry-client.tsx +25 -0
  106. package/dist/templates/ssr-tailwind/src/entry-server.tsx +24 -0
  107. package/dist/templates/ssr-tailwind/src/pages/About.tsx +21 -0
  108. package/dist/templates/ssr-tailwind/src/pages/Home.tsx +31 -0
  109. package/dist/templates/ssr-tailwind/src/router.ts +27 -0
  110. package/dist/templates/ssr-tailwind/src/style.css +1 -0
  111. package/dist/templates/ssr-tailwind/tsconfig.json +13 -0
  112. package/dist/templates/ssr-tailwind/vite.config.ts +20 -0
  113. package/package.json +65 -0
  114. package/templates/basic/index.html +32 -0
  115. package/templates/basic/package.json +19 -0
  116. package/templates/basic/src/App.tsx +35 -0
  117. package/templates/basic/tsconfig.json +13 -0
  118. package/templates/basic/vite.config.ts +15 -0
  119. package/templates/basic-daisyui/index.html +14 -0
  120. package/templates/basic-daisyui/package.json +23 -0
  121. package/templates/basic-daisyui/src/App.tsx +165 -0
  122. package/templates/basic-daisyui/src/style.css +5 -0
  123. package/templates/basic-daisyui/tsconfig.json +13 -0
  124. package/templates/basic-daisyui/vite.config.ts +17 -0
  125. package/templates/basic-tailwind/index.html +13 -0
  126. package/templates/basic-tailwind/package.json +21 -0
  127. package/templates/basic-tailwind/src/App.tsx +37 -0
  128. package/templates/basic-tailwind/src/style.css +1 -0
  129. package/templates/basic-tailwind/tsconfig.json +13 -0
  130. package/templates/basic-tailwind/vite.config.ts +17 -0
  131. package/templates/lynx/README.md +57 -0
  132. package/templates/lynx/assets/adaptive-foreground.png +0 -0
  133. package/templates/lynx/assets/icon.png +0 -0
  134. package/templates/lynx/assets/splash.png +0 -0
  135. package/templates/lynx/lynx.config.ts +17 -0
  136. package/templates/lynx/package.json +28 -0
  137. package/templates/lynx/sigx.lynx.config.ts +46 -0
  138. package/templates/lynx/src/App.tsx +103 -0
  139. package/templates/lynx/src/main.thread.tsx +2 -0
  140. package/templates/lynx/src/main.tsx +8 -0
  141. package/templates/lynx/tsconfig.json +19 -0
  142. package/templates/lynx-tailwind/README.md +61 -0
  143. package/templates/lynx-tailwind/assets/adaptive-foreground.png +0 -0
  144. package/templates/lynx-tailwind/assets/icon.png +0 -0
  145. package/templates/lynx-tailwind/assets/splash.png +0 -0
  146. package/templates/lynx-tailwind/lynx.config.ts +20 -0
  147. package/templates/lynx-tailwind/package.json +32 -0
  148. package/templates/lynx-tailwind/postcss.config.js +5 -0
  149. package/templates/lynx-tailwind/sigx.lynx.config.ts +44 -0
  150. package/templates/lynx-tailwind/src/App.tsx +52 -0
  151. package/templates/lynx-tailwind/src/main.thread.tsx +2 -0
  152. package/templates/lynx-tailwind/src/main.tsx +9 -0
  153. package/templates/lynx-tailwind/src/styles.css +3 -0
  154. package/templates/lynx-tailwind/tailwind.config.ts +9 -0
  155. package/templates/lynx-tailwind/tsconfig.json +19 -0
  156. package/templates/ssg/index.html +25 -0
  157. package/templates/ssg/package.json +22 -0
  158. package/templates/ssg/src/layouts/default.tsx +27 -0
  159. package/templates/ssg/src/pages/about.mdx +15 -0
  160. package/templates/ssg/src/pages/index.mdx +37 -0
  161. package/templates/ssg/ssg.config.ts +20 -0
  162. package/templates/ssg/tsconfig.json +14 -0
  163. package/templates/ssg/vite.config.ts +16 -0
  164. package/templates/ssg-daisyui/index.html +13 -0
  165. package/templates/ssg-daisyui/package.json +26 -0
  166. package/templates/ssg-daisyui/src/layouts/default.tsx +39 -0
  167. package/templates/ssg-daisyui/src/pages/about.mdx +17 -0
  168. package/templates/ssg-daisyui/src/pages/index.mdx +34 -0
  169. package/templates/ssg-daisyui/src/style.css +5 -0
  170. package/templates/ssg-daisyui/ssg.config.ts +20 -0
  171. package/templates/ssg-daisyui/tsconfig.json +14 -0
  172. package/templates/ssg-daisyui/vite.config.ts +18 -0
  173. package/templates/ssg-tailwind/index.html +12 -0
  174. package/templates/ssg-tailwind/package.json +24 -0
  175. package/templates/ssg-tailwind/src/layouts/default.tsx +29 -0
  176. package/templates/ssg-tailwind/src/pages/about.mdx +16 -0
  177. package/templates/ssg-tailwind/src/pages/index.mdx +37 -0
  178. package/templates/ssg-tailwind/src/style.css +1 -0
  179. package/templates/ssg-tailwind/ssg.config.ts +20 -0
  180. package/templates/ssg-tailwind/tsconfig.json +14 -0
  181. package/templates/ssg-tailwind/vite.config.ts +18 -0
  182. package/templates/ssr/index.html +12 -0
  183. package/templates/ssr/package.json +24 -0
  184. package/templates/ssr/src/App.tsx +32 -0
  185. package/templates/ssr/src/entry-client.tsx +25 -0
  186. package/templates/ssr/src/entry-server.tsx +24 -0
  187. package/templates/ssr/src/pages/About.tsx +20 -0
  188. package/templates/ssr/src/pages/Home.tsx +31 -0
  189. package/templates/ssr/src/router.ts +27 -0
  190. package/templates/ssr/tsconfig.json +13 -0
  191. package/templates/ssr/vite.config.ts +18 -0
  192. package/templates/ssr-daisyui/index.html +14 -0
  193. package/templates/ssr-daisyui/package.json +28 -0
  194. package/templates/ssr-daisyui/src/App.tsx +55 -0
  195. package/templates/ssr-daisyui/src/entry-client.tsx +25 -0
  196. package/templates/ssr-daisyui/src/entry-server.tsx +24 -0
  197. package/templates/ssr-daisyui/src/pages/About.tsx +104 -0
  198. package/templates/ssr-daisyui/src/pages/Home.tsx +133 -0
  199. package/templates/ssr-daisyui/src/router.ts +27 -0
  200. package/templates/ssr-daisyui/src/style.css +5 -0
  201. package/templates/ssr-daisyui/tsconfig.json +13 -0
  202. package/templates/ssr-daisyui/vite.config.ts +20 -0
  203. package/templates/ssr-tailwind/index.html +13 -0
  204. package/templates/ssr-tailwind/package.json +26 -0
  205. package/templates/ssr-tailwind/src/App.tsx +32 -0
  206. package/templates/ssr-tailwind/src/entry-client.tsx +25 -0
  207. package/templates/ssr-tailwind/src/entry-server.tsx +24 -0
  208. package/templates/ssr-tailwind/src/pages/About.tsx +21 -0
  209. package/templates/ssr-tailwind/src/pages/Home.tsx +31 -0
  210. package/templates/ssr-tailwind/src/router.ts +27 -0
  211. package/templates/ssr-tailwind/src/style.css +1 -0
  212. package/templates/ssr-tailwind/tsconfig.json +13 -0
  213. package/templates/ssr-tailwind/vite.config.ts +20 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Andreas Ekdahl
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,78 @@
1
+ # @sigx/cli
2
+
3
+ The unified `sigx` command-line tool — daily-driver CLI for [SignalX](https://github.com/signalxjs/core) projects (web and Lynx).
4
+
5
+ ```bash
6
+ npm i -D @sigx/cli
7
+ # then:
8
+ npx sigx <command>
9
+ ```
10
+
11
+ After scaffolding with `npm create sigx@latest`, the generated project depends on `@sigx/cli` directly. The `sigx` binary is the entry point for everything: scaffolding, dev servers, builds, previews, and platform-specific commands provided by plugins.
12
+
13
+ ## Commands
14
+
15
+ | Command | Provided by | Description |
16
+ |---|---|---|
17
+ | `sigx create [name]` | core | Scaffold a new project (interactive TUI; falls back to flag-driven headless when stdout isn't a TTY or when `--yes` / `--type` is passed) |
18
+ | `sigx info` | core | Print environment & project info (Node, pnpm, installed `@sigx/*` packages, Lynx toolchain) |
19
+ | `sigx dev` | `@sigx/vite` plugin | Start the Vite dev server (web) |
20
+ | `sigx build` | `@sigx/vite` plugin | Production build (web) |
21
+ | `sigx preview` | `@sigx/ssg` plugin | Serve a built SSG site |
22
+ | `sigx prebuild` | `@sigx/lynx-cli` | Generate native iOS/Android project files |
23
+ | `sigx run:android` | `@sigx/lynx-cli` | Build & launch on Android |
24
+ | `sigx run:ios` | `@sigx/lynx-cli` | Build & launch on iOS |
25
+ | `sigx doctor` | `@sigx/lynx-cli` | Verify Lynx toolchain (rspeedy, ADB, Xcode, JDK) |
26
+
27
+ Run `sigx --help` for the full live list (varies by what plugins are installed in your project).
28
+
29
+ ## Headless `create` (CI / scripts)
30
+
31
+ ```bash
32
+ sigx create my-app --type basic # web SPA
33
+ sigx create my-app --type ssr --styling tailwind # SSR + Tailwind
34
+ sigx create my-app --type ssg --styling daisyui # SSG + Tailwind + daisyUI
35
+ sigx create my-app --type lynx --styling tailwind # native mobile (Lynx)
36
+ ```
37
+
38
+ Valid values:
39
+
40
+ - `--type`: `basic` | `ssr` | `ssg` | `lynx`
41
+ - `--styling`: `none` | `tailwind` | `daisyui` (daisyUI not available for `lynx`)
42
+ - `--yes` / `-y`: skip prompts even when running in a TTY
43
+
44
+ Headless mode is also auto-selected when stdin/stdout is not a TTY (e.g. CI runners).
45
+
46
+ ## Plugins
47
+
48
+ Any package can extend `sigx` with new commands. To author a plugin, ship a `sigx-cli.plugin` field in your `package.json` pointing at a module that default-exports a `SigxPlugin`:
49
+
50
+ ```json
51
+ {
52
+ "name": "my-sigx-plugin",
53
+ "sigx-cli": { "plugin": "./dist/plugin.js" }
54
+ }
55
+ ```
56
+
57
+ ```ts
58
+ // my-sigx-plugin/src/plugin.ts
59
+ import type { SigxPlugin } from '@sigx/cli/plugin';
60
+
61
+ export default {
62
+ name: 'my-plugin',
63
+ commands: {
64
+ hello: {
65
+ description: 'Say hello',
66
+ async run({ cwd, args, logger }) {
67
+ logger.info(`hello from ${cwd}`);
68
+ },
69
+ },
70
+ },
71
+ } satisfies SigxPlugin;
72
+ ```
73
+
74
+ Plugins are discovered by walking up from `cwd` and inspecting installed dependencies' `package.json` files for the `sigx-cli.plugin` key.
75
+
76
+ ## License
77
+
78
+ MIT — © Andreas Ekdahl
package/dist/cli.js ADDED
@@ -0,0 +1,230 @@
1
+ #!/usr/bin/env node
2
+ import { defineCommand, runMain } from "citty";
3
+ import { existsSync, readFileSync } from "node:fs";
4
+ import { dirname, join } from "node:path";
5
+ import { fileURLToPath, pathToFileURL } from "node:url";
6
+ //#region \0rolldown/runtime.js
7
+ var __commonJSMin = (cb, mod) => () => (mod || (cb((mod = { exports: {} }).exports, mod), cb = null), mod.exports);
8
+ //#endregion
9
+ //#region src/discover.ts
10
+ /**
11
+ * Auto-discover sigx CLI plugins from the project's dependencies.
12
+ *
13
+ * Scans the project's package.json for dependencies that declare
14
+ * a `"sigx-cli": { "plugin": "./path/to/plugin.js" }` field.
15
+ * Loads each plugin and calls `detect(cwd)` to check if it applies.
16
+ */
17
+ async function discoverPlugins(cwd) {
18
+ const pkgPath = join(cwd, "package.json");
19
+ if (!existsSync(pkgPath)) return [];
20
+ let pkg;
21
+ try {
22
+ pkg = JSON.parse(readFileSync(pkgPath, "utf-8"));
23
+ } catch {
24
+ return [];
25
+ }
26
+ const allDeps = {
27
+ ...pkg.dependencies,
28
+ ...pkg.devDependencies
29
+ };
30
+ const plugins = [];
31
+ for (const depName of Object.keys(allDeps)) try {
32
+ const depPkgPath = join(cwd, "node_modules", depName, "package.json");
33
+ if (!existsSync(depPkgPath)) continue;
34
+ const pluginField = JSON.parse(readFileSync(depPkgPath, "utf-8"))["sigx-cli"];
35
+ if (!pluginField?.plugin) continue;
36
+ const pluginPath = join(cwd, "node_modules", depName, pluginField.plugin);
37
+ if (!existsSync(pluginPath)) continue;
38
+ const mod = await import(pathToFileURL(pluginPath).href);
39
+ const plugin = mod.default || mod;
40
+ if (typeof plugin.detect === "function" && plugin.detect(cwd)) plugins.push(plugin);
41
+ } catch {}
42
+ return plugins;
43
+ }
44
+ //#endregion
45
+ //#region src/commands/info.ts
46
+ var import___vite_browser_external = (/* @__PURE__ */ __commonJSMin(((exports, module) => {
47
+ module.exports = {};
48
+ })))();
49
+ function getVersion(cmd) {
50
+ try {
51
+ return (0, import___vite_browser_external.execSync)(cmd, {
52
+ stdio: "pipe",
53
+ encoding: "utf-8"
54
+ }).trim();
55
+ } catch {
56
+ return null;
57
+ }
58
+ }
59
+ var infoCommand = defineCommand({
60
+ meta: {
61
+ name: "info",
62
+ description: "Print environment and project info"
63
+ },
64
+ run() {
65
+ const cwd = process.cwd();
66
+ console.log("\n \x1B[1msigx environment info\x1B[0m\n");
67
+ console.log(` Platform: ${process.platform} ${process.arch}`);
68
+ console.log(` Node: ${process.version}`);
69
+ const pnpmVer = getVersion("pnpm --version");
70
+ if (pnpmVer) console.log(` pnpm: v${pnpmVer}`);
71
+ else {
72
+ const npmVer = getVersion("npm --version");
73
+ if (npmVer) console.log(` npm: v${npmVer}`);
74
+ }
75
+ const pkgPath = join(cwd, "package.json");
76
+ if (existsSync(pkgPath)) try {
77
+ const pkg = JSON.parse(readFileSync(pkgPath, "utf-8"));
78
+ console.log(` Project: ${pkg.name || "(unnamed)"} v${pkg.version || "0.0.0"}`);
79
+ const allDeps = {
80
+ ...pkg.dependencies,
81
+ ...pkg.devDependencies
82
+ };
83
+ const sigxPkgs = Object.entries(allDeps).filter(([name]) => name.startsWith("@sigx/") || name === "sigx").map(([name, version]) => `${name}@${version}`);
84
+ if (sigxPkgs.length > 0) {
85
+ console.log(` Sigx packages:`);
86
+ for (const p of sigxPkgs) console.log(` - ${p}`);
87
+ }
88
+ } catch {}
89
+ else console.log(" Project: (no package.json found)");
90
+ const detected = [
91
+ {
92
+ file: "sigx.lynx.config.ts",
93
+ label: "Lynx"
94
+ },
95
+ {
96
+ file: "sigx.lynx.config.js",
97
+ label: "Lynx"
98
+ },
99
+ {
100
+ file: "lynx.config.ts",
101
+ label: "Lynx (rspeedy)"
102
+ },
103
+ {
104
+ file: "lynx.config.js",
105
+ label: "Lynx (rspeedy)"
106
+ },
107
+ {
108
+ file: "ssg.config.ts",
109
+ label: "SSG"
110
+ },
111
+ {
112
+ file: "vite.config.ts",
113
+ label: "Vite"
114
+ }
115
+ ].filter((c) => existsSync(join(cwd, c.file)));
116
+ if (detected.length > 0) {
117
+ console.log(` Config files:`);
118
+ for (const c of detected) console.log(` - ${c.file} (${c.label})`);
119
+ }
120
+ if (detected.some((c) => c.label.includes("Lynx"))) {
121
+ console.log("");
122
+ console.log(" \x1B[1mLynx Environment\x1B[0m");
123
+ const rspeedyVer = getVersion("npx rspeedy --version 2>&1");
124
+ if (rspeedyVer) console.log(` rspeedy: v${rspeedyVer.trim()}`);
125
+ const androidHome = process.env.ANDROID_HOME || process.env.ANDROID_SDK_ROOT;
126
+ if (androidHome) console.log(` Android SDK: ${androidHome}`);
127
+ const javaVer = getVersion("java -version 2>&1");
128
+ if (javaVer) {
129
+ const match = javaVer.match(/version "([^"]+)"/);
130
+ if (match) console.log(` JDK: ${match[1]}`);
131
+ }
132
+ try {
133
+ const adbVer = getVersion("adb version");
134
+ if (adbVer) {
135
+ const verMatch = adbVer.match(/version ([\d.]+)/);
136
+ console.log(` ADB: ${verMatch ? `v${verMatch[1]}` : "available"}`);
137
+ const devices = (0, import___vite_browser_external.execSync)("adb devices -l", {
138
+ stdio: "pipe",
139
+ encoding: "utf-8"
140
+ }).split("\n").slice(1).filter((l) => l.trim().length > 0).map((l) => {
141
+ const modelMatch = l.match(/model:(\S+)/);
142
+ return modelMatch ? modelMatch[1].replace(/_/g, " ") : l.split(/\s+/)[0];
143
+ });
144
+ if (devices.length > 0) console.log(` Devices: ${devices.join(", ")}`);
145
+ }
146
+ } catch {}
147
+ if (process.platform === "darwin") {
148
+ const xcodeVer = getVersion("xcodebuild -version 2>/dev/null");
149
+ if (xcodeVer) console.log(` Xcode: ${xcodeVer.split("\n")[0]}`);
150
+ const podVer = getVersion("pod --version");
151
+ if (podVer) console.log(` CocoaPods: v${podVer}`);
152
+ }
153
+ }
154
+ console.log("");
155
+ }
156
+ });
157
+ //#endregion
158
+ //#region src/utils/logger.ts
159
+ function createLogger(prefix = "sigx") {
160
+ return {
161
+ log: (msg) => console.log(`[${prefix}] ${msg}`),
162
+ warn: (msg) => console.warn(`[${prefix}] WARN: ${msg}`),
163
+ error: (msg) => console.error(`[${prefix}] ERROR: ${msg}`)
164
+ };
165
+ }
166
+ //#endregion
167
+ //#region src/cli.ts
168
+ /**
169
+ * sigx CLI — unified command-line tool for SignalX projects.
170
+ *
171
+ * Core commands (always available):
172
+ * sigx create — scaffold a new project
173
+ * sigx info — print environment info
174
+ *
175
+ * Plugin commands (auto-discovered from installed packages):
176
+ * sigx dev — start dev server
177
+ * sigx build — production build
178
+ * sigx preview — preview build (SSG)
179
+ * sigx prebuild — generate native project files (Lynx)
180
+ * sigx run:android / run:ios — build + launch on device (Lynx)
181
+ */
182
+ var __dirname = dirname(fileURLToPath(import.meta.url));
183
+ var pkg = JSON.parse(readFileSync(join(__dirname, "..", "package.json"), "utf-8"));
184
+ var logger = createLogger();
185
+ function wrapPluginCommand(cmd) {
186
+ return defineCommand({
187
+ meta: { description: cmd.description },
188
+ args: cmd.args,
189
+ async run({ args }) {
190
+ await cmd.run({
191
+ cwd: process.cwd(),
192
+ args,
193
+ logger
194
+ });
195
+ }
196
+ });
197
+ }
198
+ async function main() {
199
+ const plugins = await discoverPlugins(process.cwd());
200
+ const subCommands = { info: infoCommand };
201
+ subCommands.create = defineCommand({
202
+ meta: {
203
+ name: "create",
204
+ description: "Scaffold a new SignalX project"
205
+ },
206
+ async run() {
207
+ const { runCreate } = await import("./commands/create.js");
208
+ await runCreate();
209
+ }
210
+ });
211
+ for (const plugin of plugins) for (const [name, cmd] of Object.entries(plugin.commands)) {
212
+ if (subCommands[name]) logger.warn(`Plugin "${plugin.name}" overrides command "${name}"`);
213
+ subCommands[name] = wrapPluginCommand(cmd);
214
+ }
215
+ await runMain(defineCommand({
216
+ meta: {
217
+ name: "sigx",
218
+ version: pkg.version,
219
+ description: "SignalX CLI"
220
+ },
221
+ subCommands
222
+ }));
223
+ }
224
+ main().catch((err) => {
225
+ logger.error(err.message || String(err));
226
+ process.exit(1);
227
+ });
228
+ //#endregion
229
+
230
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","names":[],"sources":["../src/discover.ts","../__vite-browser-external","../src/commands/info.ts","../src/utils/logger.ts","../src/cli.ts"],"sourcesContent":["/**\n * Auto-discover sigx CLI plugins from the project's dependencies.\n *\n * Scans the project's package.json for dependencies that declare\n * a `\"sigx-cli\": { \"plugin\": \"./path/to/plugin.js\" }` field.\n * Loads each plugin and calls `detect(cwd)` to check if it applies.\n */\n\nimport { readFileSync, existsSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { pathToFileURL } from 'node:url';\nimport type { SigxPlugin } from './plugin.js';\n\ninterface DepPackageJson {\n 'sigx-cli'?: {\n plugin: string;\n };\n}\n\nexport async function discoverPlugins(cwd: string): Promise<SigxPlugin[]> {\n const pkgPath = join(cwd, 'package.json');\n if (!existsSync(pkgPath)) return [];\n\n let pkg: Record<string, unknown>;\n try {\n pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));\n } catch {\n return [];\n }\n\n const allDeps: Record<string, string> = {\n ...(pkg.dependencies as Record<string, string> | undefined),\n ...(pkg.devDependencies as Record<string, string> | undefined),\n };\n\n const plugins: SigxPlugin[] = [];\n\n for (const depName of Object.keys(allDeps)) {\n try {\n const depPkgPath = join(cwd, 'node_modules', depName, 'package.json');\n if (!existsSync(depPkgPath)) continue;\n\n const depPkg: DepPackageJson = JSON.parse(readFileSync(depPkgPath, 'utf-8'));\n const pluginField = depPkg['sigx-cli'];\n if (!pluginField?.plugin) continue;\n\n const pluginPath = join(cwd, 'node_modules', depName, pluginField.plugin);\n if (!existsSync(pluginPath)) continue;\n\n const mod = await import(pathToFileURL(pluginPath).href);\n const plugin: SigxPlugin = mod.default || mod;\n\n if (typeof plugin.detect === 'function' && plugin.detect(cwd)) {\n plugins.push(plugin);\n }\n } catch {\n // Not a valid plugin or failed to load — skip silently\n }\n }\n\n return plugins;\n}\n","module.exports = {}","import { defineCommand } from 'citty';\nimport { readFileSync, existsSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { execSync } from 'node:child_process';\n\nfunction getVersion(cmd: string): string | null {\n try {\n return execSync(cmd, { stdio: 'pipe', encoding: 'utf-8' }).trim();\n } catch {\n return null;\n }\n}\n\nexport const infoCommand = defineCommand({\n meta: {\n name: 'info',\n description: 'Print environment and project info',\n },\n run() {\n const cwd = process.cwd();\n\n console.log('\\n \\x1b[1msigx environment info\\x1b[0m\\n');\n console.log(` Platform: ${process.platform} ${process.arch}`);\n console.log(` Node: ${process.version}`);\n\n // Package manager\n const pnpmVer = getVersion('pnpm --version');\n if (pnpmVer) console.log(` pnpm: v${pnpmVer}`);\n else {\n const npmVer = getVersion('npm --version');\n if (npmVer) console.log(` npm: v${npmVer}`);\n }\n\n // Project info\n const pkgPath = join(cwd, 'package.json');\n if (existsSync(pkgPath)) {\n try {\n const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));\n console.log(` Project: ${pkg.name || '(unnamed)'} v${pkg.version || '0.0.0'}`);\n\n // Detect sigx packages\n const allDeps: Record<string, string> = {\n ...pkg.dependencies,\n ...pkg.devDependencies,\n };\n const sigxPkgs = Object.entries(allDeps)\n .filter(([name]) => name.startsWith('@sigx/') || name === 'sigx')\n .map(([name, version]) => `${name}@${version}`);\n\n if (sigxPkgs.length > 0) {\n console.log(` Sigx packages:`);\n for (const p of sigxPkgs) {\n console.log(` - ${p}`);\n }\n }\n } catch {\n // ignore parse errors\n }\n } else {\n console.log(' Project: (no package.json found)');\n }\n\n // Config files\n const configs = [\n { file: 'sigx.lynx.config.ts', label: 'Lynx' },\n { file: 'sigx.lynx.config.js', label: 'Lynx' },\n { file: 'lynx.config.ts', label: 'Lynx (rspeedy)' },\n { file: 'lynx.config.js', label: 'Lynx (rspeedy)' },\n { file: 'ssg.config.ts', label: 'SSG' },\n { file: 'vite.config.ts', label: 'Vite' },\n ];\n const detected = configs.filter(c => existsSync(join(cwd, c.file)));\n if (detected.length > 0) {\n console.log(` Config files:`);\n for (const c of detected) {\n console.log(` - ${c.file} (${c.label})`);\n }\n }\n\n // Lynx-specific info\n const isLynx = detected.some(c => c.label.includes('Lynx'));\n if (isLynx) {\n console.log('');\n console.log(' \\x1b[1mLynx Environment\\x1b[0m');\n\n // rspeedy\n const rspeedyVer = getVersion('npx rspeedy --version 2>&1');\n if (rspeedyVer) console.log(` rspeedy: v${rspeedyVer.trim()}`);\n\n // Android SDK\n const androidHome = process.env.ANDROID_HOME || process.env.ANDROID_SDK_ROOT;\n if (androidHome) {\n console.log(` Android SDK: ${androidHome}`);\n }\n\n // JDK\n const javaVer = getVersion('java -version 2>&1');\n if (javaVer) {\n const match = javaVer.match(/version \"([^\"]+)\"/);\n if (match) console.log(` JDK: ${match[1]}`);\n }\n\n // ADB + devices\n try {\n const adbVer = getVersion('adb version');\n if (adbVer) {\n const verMatch = adbVer.match(/version ([\\d.]+)/);\n console.log(` ADB: ${verMatch ? `v${verMatch[1]}` : 'available'}`);\n\n const devOutput = execSync('adb devices -l', { stdio: 'pipe', encoding: 'utf-8' });\n const devices = devOutput.split('\\n')\n .slice(1)\n .filter(l => l.trim().length > 0)\n .map(l => {\n const modelMatch = l.match(/model:(\\S+)/);\n return modelMatch ? modelMatch[1].replace(/_/g, ' ') : l.split(/\\s+/)[0];\n });\n\n if (devices.length > 0) {\n console.log(` Devices: ${devices.join(', ')}`);\n }\n }\n } catch {\n // ADB not available\n }\n\n // Xcode (macOS only)\n if (process.platform === 'darwin') {\n const xcodeVer = getVersion('xcodebuild -version 2>/dev/null');\n if (xcodeVer) console.log(` Xcode: ${xcodeVer.split('\\n')[0]}`);\n\n const podVer = getVersion('pod --version');\n if (podVer) console.log(` CocoaPods: v${podVer}`);\n }\n }\n\n console.log('');\n },\n});\n","import type { Logger } from '../plugin.js';\n\nexport function createLogger(prefix = 'sigx'): Logger {\n return {\n log: (msg: string) => console.log(`[${prefix}] ${msg}`),\n warn: (msg: string) => console.warn(`[${prefix}] WARN: ${msg}`),\n error: (msg: string) => console.error(`[${prefix}] ERROR: ${msg}`),\n };\n}\n","#!/usr/bin/env node\n\n/**\n * sigx CLI — unified command-line tool for SignalX projects.\n *\n * Core commands (always available):\n * sigx create — scaffold a new project\n * sigx info — print environment info\n *\n * Plugin commands (auto-discovered from installed packages):\n * sigx dev — start dev server\n * sigx build — production build\n * sigx preview — preview build (SSG)\n * sigx prebuild — generate native project files (Lynx)\n * sigx run:android / run:ios — build + launch on device (Lynx)\n */\n\nimport { defineCommand, runMain } from 'citty';\nimport { readFileSync } from 'node:fs';\nimport { dirname, join } from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport { discoverPlugins } from './discover.js';\nimport { infoCommand } from './commands/info.js';\nimport { createLogger } from './utils/logger.js';\nimport type { PluginCommand } from './plugin.js';\n\nconst __dirname = dirname(fileURLToPath(import.meta.url));\nconst pkg = JSON.parse(readFileSync(join(__dirname, '..', 'package.json'), 'utf-8'));\nconst logger = createLogger();\n\nfunction wrapPluginCommand(cmd: PluginCommand) {\n return defineCommand({\n meta: { description: cmd.description },\n args: cmd.args as any,\n async run({ args }) {\n await cmd.run({ cwd: process.cwd(), args, logger });\n },\n });\n}\n\nasync function main() {\n const cwd = process.cwd();\n const plugins = await discoverPlugins(cwd);\n\n // Build subcommand map: core + plugin commands\n const subCommands: Record<string, ReturnType<typeof defineCommand>> = {\n info: infoCommand,\n };\n\n // Lazy-load create command only when needed (it pulls in @sigx/terminal)\n subCommands.create = defineCommand({\n meta: { name: 'create', description: 'Scaffold a new SignalX project' },\n async run() {\n const { runCreate } = await import('./commands/create.js');\n await runCreate();\n },\n });\n\n // Register plugin commands\n for (const plugin of plugins) {\n for (const [name, cmd] of Object.entries(plugin.commands)) {\n if (subCommands[name]) {\n // Command conflict — last plugin wins, but warn\n logger.warn(`Plugin \"${plugin.name}\" overrides command \"${name}\"`);\n }\n subCommands[name] = wrapPluginCommand(cmd);\n }\n }\n\n const mainCommand = defineCommand({\n meta: {\n name: 'sigx',\n version: pkg.version,\n description: 'SignalX CLI',\n },\n subCommands,\n });\n\n await runMain(mainCommand);\n}\n\nmain().catch((err) => {\n logger.error(err.message || String(err));\n process.exit(1);\n});\n"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare function runCreate(): void;