react-client 1.0.38 → 1.0.41

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 (47) hide show
  1. package/README.md +115 -124
  2. package/dist/cli/commands/build.js +19 -3
  3. package/dist/cli/commands/build.js.map +1 -1
  4. package/dist/cli/commands/dev.js +373 -102
  5. package/dist/cli/commands/dev.js.map +1 -1
  6. package/dist/cli/commands/init.js +72 -7
  7. package/dist/cli/commands/init.js.map +1 -1
  8. package/dist/cli/commands/preview.js +9 -15
  9. package/dist/cli/commands/preview.js.map +1 -1
  10. package/dist/cli/index.js +1 -0
  11. package/dist/cli/index.js.map +1 -1
  12. package/dist/index.d.ts +2 -0
  13. package/dist/index.js +3 -0
  14. package/dist/index.js.map +1 -0
  15. package/dist/utils/loadConfig.js +31 -22
  16. package/dist/utils/loadConfig.js.map +1 -1
  17. package/package.json +3 -2
  18. package/templates/react/public/favicon.ico +0 -0
  19. package/templates/react/public/index.html +14 -0
  20. package/templates/react/public/logo512.png +0 -0
  21. package/templates/react/src/App.css +42 -0
  22. package/templates/react/src/App.jsx +23 -1
  23. package/templates/react/src/index.css +68 -0
  24. package/templates/react-tailwind/public/favicon.ico +0 -0
  25. package/templates/react-tailwind/public/index.html +14 -0
  26. package/templates/react-tailwind/public/logo512.png +0 -0
  27. package/templates/react-tailwind/src/App.css +42 -0
  28. package/templates/react-tailwind/src/App.jsx +31 -2
  29. package/templates/react-tailwind/src/index.css +68 -1
  30. package/templates/react-tailwind/src/main.jsx +1 -3
  31. package/templates/react-tailwind-ts/public/favicon.ico +0 -0
  32. package/templates/react-tailwind-ts/public/index.html +14 -0
  33. package/templates/react-tailwind-ts/public/logo512.png +0 -0
  34. package/templates/react-tailwind-ts/src/App.css +42 -0
  35. package/templates/react-tailwind-ts/src/App.tsx +30 -2
  36. package/templates/react-tailwind-ts/src/index.css +68 -1
  37. package/templates/react-tailwind-ts/src/main.tsx +0 -1
  38. package/templates/react-ts/public/favicon.ico +0 -0
  39. package/templates/react-ts/public/index.html +14 -0
  40. package/templates/react-ts/public/logo512.png +0 -0
  41. package/templates/react-ts/src/App.css +42 -0
  42. package/templates/react-ts/src/App.tsx +23 -1
  43. package/templates/react-ts/src/index.css +68 -0
  44. package/templates/react/index.html +0 -13
  45. package/templates/react-tailwind/index.html +0 -13
  46. package/templates/react-tailwind-ts/index.html +0 -13
  47. package/templates/react-ts/index.html +0 -13
package/README.md CHANGED
@@ -1,196 +1,187 @@
1
+ # ⚡ react-client
2
+
1
3
  [![npm](https://img.shields.io/npm/v/react-client.svg)](https://www.npmjs.com/package/react-client)
2
4
  [![npm](https://img.shields.io/npm/dt/react-client.svg)](https://npm-stat.com/charts.html?package=react-client)
3
5
  [![GitHub issues](https://img.shields.io/github/issues/venkateshsundaram/react-client.svg)](https://github.com/venkateshsundaram/react-client/issues)
6
+ [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT)
4
7
 
5
- **react-client** is a next-generation CLI and runtime for building React apps with instant feedback, fast iteration, and a beautiful developer experience.
6
-
7
- Built for simplicity, designed for speed ⚡
8
+ **react-client** is a lightweight, ultra-fast CLI and runtime for building React applications. Built for speed, it focuses on providing an instant development experience without the overhead of traditional bundlers.
8
9
 
9
10
  ---
10
11
 
11
- ## 🚀 Table of Contents
12
- - [Installation](#installation)
13
- - [With Config](#with-config)
14
- - [Available Templates](#available-templates)
15
- - [Core Features](#core-features)
16
- - [How It Works](#how-it-works)
17
- - [Local Development](#local-development)
18
- - [Troubleshooting](#troubleshooting)
19
- - [Contributing](#contributing)
20
- - [Publishing](#publishing)
21
- - [Feedback](#feedback)
22
- - [License](#license)
23
-
24
- ---
12
+ ## 🚀 Why react-client?
25
13
 
26
- ## 🧩 Installation
14
+ - 💨 **Instant Startup**: No more waiting for slow bundles. Start your dev server in milliseconds.
15
+ - 🔄 **State-Preserving HMR**: React Fast Refresh keeps your application state across code changes.
16
+ - 🎨 **Beautiful Error Overlay**: High-fidelity, syntax-highlighted error overlay with clickable file links.
17
+ - 🗺️ **Source Map Support**: Runtime errors map directly back to your original source code.
18
+ - 🔌 **Plug & Play**: Designed to work out of the box with zero configuration, yet highly extensible.
27
19
 
28
- Install globally and scaffold your first app:
20
+ ---
29
21
 
30
- ```bash
31
- npm install -g react-client
32
- react-client init myapp --template react-ts
33
- cd myapp
34
- npm install
35
- npm run dev
36
- ```
22
+ ## 📋 Table of Contents
37
23
 
38
- This launches the **custom dev server** — built on **Connect + WebSocket + esbuild**, featuring:
39
- - Instant rebuilds
40
- - React Fast Refresh (HMR)
41
- - Auto port detection & confirmation prompt
42
- - In-browser overlay with syntax-highlighted code frames
24
+ - [Quick Start](#-quick-start)
25
+ - [Available Templates](#-available-templates)
26
+ - [CLI Command Reference](#-cli-command-reference)
27
+ - [Configuration Reference](#-configuration-reference)
28
+ - [Core Features](#-core-features)
29
+ - [Local Development](#-local-development)
30
+ - [Contributing](#-contributing)
31
+ - [License](#-license)
43
32
 
44
33
  ---
45
34
 
46
- ## ⚙️ With Config
35
+ ## Quick Start
47
36
 
48
- You can generate a project-level configuration file using `--with-config`.
37
+ Create and launch your first app in seconds:
49
38
 
50
39
  ```bash
51
- react-client init myapp --template react-ts --with-config
52
- ```
53
-
54
- Creates:
40
+ # install globally
41
+ npm install -g react-client
55
42
 
56
- ```js
57
- // react-client.config.js
58
- import { defineConfig } from 'react-client/config';
43
+ # initialize your project
44
+ react-client init my-app --template react-ts
59
45
 
60
- export default defineConfig({
61
- root: './src',
62
- server: { port: 2202 },
63
- build: { outDir: '.react-client/build' }
64
- });
46
+ # start developing
47
+ cd my-app
48
+ npm install
49
+ npm run dev
65
50
  ```
66
51
 
67
- Loaded automatically by the CLI
68
- ✅ Type-safe with IntelliSense via `defineConfig()`
69
- ✅ Supports `.js`, `.mjs`, `.ts` (auto-compiled)
52
+ Your app will be live at `http://localhost:2202`!
70
53
 
71
54
  ---
72
55
 
73
56
  ## 🧰 Available Templates
74
57
 
75
- | Template | Description |
76
- |-----------|-------------|
77
- | `react` | JavaScript SPA |
78
- | `react-ts` | TypeScript SPA |
79
- | `react-tailwind` | JS + Tailwind |
80
- | `react-tailwind-ts` | TS + Tailwind |
58
+ Choose from a variety of pre-configured templates to jumpstart your project:
81
59
 
82
- Each template is pre-configured for esbuild, HMR, and fast bootstrapping.
60
+ | Template | Description | Tech Stack |
61
+ | :--- | :--- | :--- |
62
+ | `react` | Basic JavaScript setup | JS, React 18 |
63
+ | `react-ts` | TypeScript-first setup | TS, React 18 |
64
+ | `react-tailwind` | JS with Tailwind CSS | JS, React, Tailwind |
65
+ | `react-tailwind-ts` | TS with Tailwind CSS | TS, React, Tailwind |
66
+
67
+ > [!TIP]
68
+ > Use the `--template` flag with `init` to specify your preferred starting point.
83
69
 
84
70
  ---
85
71
 
86
- ## 💎 Core Features
72
+ ## 🛠️ CLI Command Reference
87
73
 
88
- - **Custom Dev Server** — Connect + WebSocket + esbuild
89
- - 🔁 **React Fast Refresh (HMR)** — State-preserving reloads
90
- - 💥 **Overlay** — Syntax-highlighted stack frames, clickable file links (`vscode://file`)
91
- - 🔍 **Source Map Stack Mapping** — Maps runtime errors to original TS/JS source lines
92
- - 💬 **Auto Port Detection** — Prompts when default port 2202 is occupied
93
- - 🧠 **Smart Config Loader** — Detects project root, compiles `.ts` configs dynamically
94
- - 🔌 **Plugin Hook System** — Extendable with `configResolved`, `transform`, `buildEnd`
74
+ ### `init <project-name>`
75
+ Scaffold a new React application.
95
76
 
96
- ---
77
+ - `--template <name>`: Choose a template (default: `react-ts`).
78
+ - `--with-config`: Generate a `react-client.config.js` file.
97
79
 
98
- ## 🧬 How It Works
80
+ ### `dev`
81
+ Start the development server with Hot Module Replacement (HMR).
99
82
 
100
- **Under the hood:**
83
+ - Uses port `2202` by default (auto-detects and prompts if occupied).
84
+ - Features on-the-fly esbuild transformations.
101
85
 
102
- 1. **esbuild** handles bundling, incremental rebuilds, and sourcemaps.
103
- 2. **Connect** serves files and APIs (React Refresh runtime, overlay, source-map).
104
- 3. **WebSocket** pushes HMR updates and overlay messages.
105
- 4. **Chokidar** watches `/src` for changes and triggers rebuilds.
86
+ ### `build`
87
+ Bundle your application for production.
88
+
89
+ - Optimized output in `.react-client/build` (default).
90
+ - Incremental rebuild support.
91
+
92
+ ### `preview`
93
+ Serve your production build locally for final verification.
106
94
 
107
95
  ---
108
96
 
109
- ## 🧪 Local Development
97
+ ## ⚙️ Configuration Reference
110
98
 
111
- To test `react-client` locally:
99
+ For more advanced control, generate a configuration file:
112
100
 
113
101
  ```bash
114
- cd ~/Desktop/Workspace/Hoppy-projects/react-client
115
- npm run build
116
- npm link
117
- cd myapp
118
- react-client dev
102
+ react-client init myapp --with-config
119
103
  ```
120
104
 
121
- If you run it from inside the CLI repo, it auto-detects and switches to `myapp/` as the root.
105
+ ### `react-client.config.js`
122
106
 
123
- ---
124
-
125
- ## 🧩 Troubleshooting
107
+ ```javascript
108
+ import { defineConfig } from 'react-client/config';
126
109
 
127
- ### Config not loading
128
- Make sure `react-client.config.js` exists in your project root (not `.ts`).
110
+ export default defineConfig({
111
+ // 🧭 Root directory for the app
112
+ root: '.',
129
113
 
130
- ```bash
131
- /Users/<you>/myapp/react-client.config.js
132
- ```
114
+ // ⚡ Dev server settings
115
+ server: {
116
+ port: 2202,
117
+ },
133
118
 
134
- ### `react-refresh/runtime` not found
135
- Install in the CLI or the project:
136
- ```bash
137
- npm install react-refresh
138
- ```
119
+ // 🏗️ Build options
120
+ build: {
121
+ outDir: '.react-client/build',
122
+ },
139
123
 
140
- ### ⚠️ Port already in use
141
- CLI will auto-detect and prompt:
142
- ```
143
- Port 2202 is occupied. Use 5174 instead? (Y/n)
124
+ // 🔌 Plugins
125
+ plugins: [],
126
+ });
144
127
  ```
145
128
 
146
- ### ⚠️ Permission denied
147
- Ensure your CLI entry file is executable:
148
- ```bash
149
- chmod +x dist/cli/index.js
150
- npm link
151
- ```
129
+ | Property | Description | Default |
130
+ | :--- | :--- | :--- |
131
+ | `root` | The application's root directory | `.` |
132
+ | `server.port` | The dev server port | `2202` |
133
+ | `build.outDir` | Production build output directory | `.react-client/build` |
134
+ | `plugins` | Array of react-client plugins | `[]` |
152
135
 
153
136
  ---
154
137
 
155
- ## 🧑‍💻 Contributing
138
+ ## 💎 Core Features
156
139
 
157
- We welcome contributions!
158
- Read the [Contributing Guide](./CONTRIBUTING.md) for setup instructions.
140
+ ### 🔄 React Fast Refresh
141
+ Experience true Hot Module Replacement that preserves your component state during development. No more manual page reloads when you fix a bug.
159
142
 
160
- ```bash
161
- npm run lint
162
- npm run test
163
- npm run build
164
- ```
143
+ ### 💥 Interactive Error Overlay
144
+ When something goes wrong, you get a beautiful, clear overlay.
145
+ - **Syntax Highlighting**: Easily read the problematic code.
146
+ - **Click-to-Open**: File links open directly in VS Code (`vscode://file/...`).
147
+ - **Mapped Stacks**: Errors point to your original TSX/JSX lines, not the bundled output.
148
+
149
+ ### ⚡ esbuild Powered
150
+ We use esbuild for lightning-fast compilation, ensuring that even large applications stay responsive during development.
165
151
 
166
152
  ---
167
153
 
168
- ## 🚀 Publishing
154
+ ## 🧪 Local Development
169
155
 
170
- Before publishing:
171
- 1. Update version in `package.json`
172
- 2. Run a full build
173
- 3. Ensure the entry file has execute permission
156
+ To contribute or test locally:
174
157
 
175
- ```bash
176
- npm run build
177
- npm publish
178
- ```
158
+ 1. Clone the repository
159
+ 2. Build the project: `npm run build`
160
+ 3. Link globally: `npm link`
161
+ 4. Test in a separate folder:
162
+ ```bash
163
+ mkdir test-app && cd test-app
164
+ react-client init demo
165
+ ```
166
+
167
+ ---
179
168
 
180
- Your package now includes:
181
- - `#!/usr/bin/env node` shebang
182
- - Auto-detecting config loader
183
- - Built-in React Refresh runtime
169
+ ## 🤝 Contributing
170
+
171
+ We welcome all contributions! Whether it's adding new templates, fixing bugs, or improving documentation.
172
+
173
+ Please check our [Contributing Guide](./CONTRIBUTING.md) to get started.
184
174
 
185
175
  ---
186
176
 
187
177
  ## 💬 Feedback
188
178
 
189
- Found an issue or have a feature request?
190
- 👉 [Open an issue](https://github.com/venkateshsundaram/react-client/issues)
179
+ Found an issue or have a feature request?
180
+ 👉 [Open an issue on GitHub](https://github.com/venkateshsundaram/react-client/issues)
191
181
 
192
182
  ---
193
183
 
194
184
  ## 🪪 License
195
185
 
196
186
  **MIT Licensed** © [Venkatesh Sundaram](https://github.com/venkateshsundaram)
187
+
@@ -11,12 +11,27 @@ export default async function build() {
11
11
  console.log(chalk.cyan(`\n🏗️ Building project...`));
12
12
  console.log(chalk.gray(`Root: ${appRoot}`));
13
13
  console.log(chalk.gray(`Output: ${outDir}\n`));
14
- const entry = path.join(appRoot, 'src', 'main.tsx');
15
- if (!fs.existsSync(entry)) {
16
- console.error(chalk.red('❌ Entry not found: src/main.tsx'));
14
+ // Detect entry (main.tsx / main.jsx)
15
+ const paths = [
16
+ path.join(appRoot, 'src/main.tsx'),
17
+ path.join(appRoot, 'src/main.jsx'),
18
+ path.join(appRoot, 'main.tsx'),
19
+ path.join(appRoot, 'main.jsx'),
20
+ ];
21
+ const entry = paths.find((p) => fs.existsSync(p));
22
+ if (!entry) {
23
+ console.error(chalk.red('❌ Entry not found: main.tsx or main.jsx in app root or src/'));
17
24
  process.exit(1);
18
25
  }
19
26
  await fs.ensureDir(outDir);
27
+ // Copy public folder contents to outDir
28
+ let publicDir = path.join(appRoot, 'public');
29
+ if (!fs.existsSync(publicDir)) {
30
+ publicDir = path.join(root, 'public');
31
+ }
32
+ if (await fs.pathExists(publicDir)) {
33
+ await fs.copy(publicDir, outDir);
34
+ }
20
35
  try {
21
36
  await esbuild.build({
22
37
  entryPoints: [entry],
@@ -26,6 +41,7 @@ export default async function build() {
26
41
  outdir: outDir,
27
42
  define: { 'process.env.NODE_ENV': '"production"' },
28
43
  loader: { '.ts': 'ts', '.tsx': 'tsx', '.js': 'jsx', '.jsx': 'jsx' },
44
+ jsx: 'automatic',
29
45
  });
30
46
  console.log(chalk.green(`✅ Build completed successfully!`));
31
47
  console.log(chalk.gray(`Output directory: ${outDir}`));
@@ -1 +1 @@
1
- {"version":3,"file":"build.js","sourceRoot":"","sources":["../../../src/cli/commands/build.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAElE,MAAM,CAAC,OAAO,CAAC,KAAK,UAAU,KAAK;IACjC,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC3B,MAAM,MAAM,GAAG,MAAM,qBAAqB,CAAC,IAAI,CAAC,CAAC;IACjD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC;IACvD,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,IAAI,qBAAqB,CAAC,CAAC;IAEjF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC,CAAC;IACrD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,OAAO,EAAE,CAAC,CAAC,CAAC;IAC5C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,MAAM,IAAI,CAAC,CAAC,CAAC;IAE/C,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;IACpD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC,CAAC;QAC5D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAE3B,IAAI,CAAC;QACH,MAAM,OAAO,CAAC,KAAK,CAAC;YAClB,WAAW,EAAE,CAAC,KAAK,CAAC;YACpB,MAAM,EAAE,IAAI;YACZ,MAAM,EAAE,IAAI;YACZ,SAAS,EAAE,IAAI;YACf,MAAM,EAAE,MAAM;YACd,MAAM,EAAE,EAAE,sBAAsB,EAAE,cAAc,EAAE;YAClD,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE;SACpE,CAAC,CAAC;QAEH,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC,CAAC;QAC5D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,qBAAqB,MAAM,EAAE,CAAC,CAAC,CAAC;IACzD,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC7D,OAAO,CAAC,KAAK,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAC;QACtC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"build.js","sourceRoot":"","sources":["../../../src/cli/commands/build.ts"],"names":[],"mappings":"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"}