nivii 0.3.2 → 0.3.4
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.
- package/README.md +113 -223
- package/dist/cli.js +48 -1
- package/dist/cli.js.map +1 -1
- package/dist/commands/pro.d.ts +2 -0
- package/dist/commands/pro.d.ts.map +1 -0
- package/dist/commands/pro.js +174 -0
- package/dist/commands/pro.js.map +1 -0
- package/dist/commands/share.d.ts.map +1 -1
- package/dist/commands/share.js +5 -4
- package/dist/commands/share.js.map +1 -1
- package/dist/core/upload.d.ts +2 -1
- package/dist/core/upload.d.ts.map +1 -1
- package/dist/core/upload.js +2 -0
- package/dist/core/upload.js.map +1 -1
- package/dist/ui/spinner.d.ts +1 -0
- package/dist/ui/spinner.d.ts.map +1 -1
- package/dist/ui/spinner.js +3 -0
- package/dist/ui/spinner.js.map +1 -1
- package/dist/ui/welcome.d.ts.map +1 -1
- package/dist/ui/welcome.js +6 -3
- package/dist/ui/welcome.js.map +1 -1
- package/dist/utils/config.d.ts +3 -0
- package/dist/utils/config.d.ts.map +1 -1
- package/dist/utils/config.js.map +1 -1
- package/package.json +1 -1
- package/dist/dist/cli.d.ts +0 -3
- package/dist/dist/cli.d.ts.map +0 -1
- package/dist/dist/cli.js +0 -144
- package/dist/dist/cli.js.map +0 -1
- package/dist/dist/commands/config.d.ts +0 -2
- package/dist/dist/commands/config.d.ts.map +0 -1
- package/dist/dist/commands/config.js +0 -32
- package/dist/dist/commands/config.js.map +0 -1
- package/dist/dist/commands/share.d.ts +0 -18
- package/dist/dist/commands/share.d.ts.map +0 -1
- package/dist/dist/commands/share.js +0 -125
- package/dist/dist/commands/share.js.map +0 -1
- package/dist/dist/commands/whoami.d.ts +0 -2
- package/dist/dist/commands/whoami.d.ts.map +0 -1
- package/dist/dist/commands/whoami.js +0 -17
- package/dist/dist/commands/whoami.js.map +0 -1
- package/dist/dist/core/analytics.d.ts +0 -11
- package/dist/dist/core/analytics.d.ts.map +0 -1
- package/dist/dist/core/analytics.js +0 -47
- package/dist/dist/core/analytics.js.map +0 -1
- package/dist/dist/core/build.d.ts +0 -11
- package/dist/dist/core/build.d.ts.map +0 -1
- package/dist/dist/core/build.js +0 -34
- package/dist/dist/core/build.js.map +0 -1
- package/dist/dist/core/detect.d.ts +0 -12
- package/dist/dist/core/detect.d.ts.map +0 -1
- package/dist/dist/core/detect.js +0 -122
- package/dist/dist/core/detect.js.map +0 -1
- package/dist/dist/core/qr.d.ts +0 -4
- package/dist/dist/core/qr.d.ts.map +0 -1
- package/dist/dist/core/qr.js +0 -29
- package/dist/dist/core/qr.js.map +0 -1
- package/dist/dist/core/tunnel.d.ts +0 -9
- package/dist/dist/core/tunnel.d.ts.map +0 -1
- package/dist/dist/core/tunnel.js +0 -55
- package/dist/dist/core/tunnel.js.map +0 -1
- package/dist/dist/core/upload.d.ts +0 -22
- package/dist/dist/core/upload.d.ts.map +0 -1
- package/dist/dist/core/upload.js +0 -73
- package/dist/dist/core/upload.js.map +0 -1
- package/dist/dist/ui/spinner.d.ts +0 -8
- package/dist/dist/ui/spinner.d.ts.map +0 -1
- package/dist/dist/ui/spinner.js +0 -35
- package/dist/dist/ui/spinner.js.map +0 -1
- package/dist/dist/ui/theme.d.ts +0 -14
- package/dist/dist/ui/theme.d.ts.map +0 -1
- package/dist/dist/ui/theme.js +0 -32
- package/dist/dist/ui/theme.js.map +0 -1
- package/dist/dist/ui/welcome.d.ts +0 -4
- package/dist/dist/ui/welcome.d.ts.map +0 -1
- package/dist/dist/ui/welcome.js +0 -95
- package/dist/dist/ui/welcome.js.map +0 -1
- package/dist/dist/utils/config.d.ts +0 -19
- package/dist/dist/utils/config.d.ts.map +0 -1
- package/dist/dist/utils/config.js +0 -31
- package/dist/dist/utils/config.js.map +0 -1
- package/dist/dist/utils/hash.d.ts +0 -3
- package/dist/dist/utils/hash.d.ts.map +0 -1
- package/dist/dist/utils/hash.js +0 -10
- package/dist/dist/utils/hash.js.map +0 -1
- package/dist/dist/utils/zip.d.ts +0 -2
- package/dist/dist/utils/zip.d.ts.map +0 -1
- package/dist/dist/utils/zip.js +0 -19
- package/dist/dist/utils/zip.js.map +0 -1
- package/src/cli.ts +0 -118
- package/src/commands/config.ts +0 -33
- package/src/commands/share.ts +0 -159
- package/src/commands/whoami.ts +0 -16
- package/src/core/analytics.ts +0 -64
- package/src/core/build.ts +0 -46
- package/src/core/detect.ts +0 -159
- package/src/core/qr.ts +0 -30
- package/src/core/tunnel.ts +0 -70
- package/src/core/upload.ts +0 -95
- package/src/ui/spinner.ts +0 -36
- package/src/ui/theme.ts +0 -35
- package/src/ui/welcome.ts +0 -104
- package/src/utils/config.ts +0 -47
- package/src/utils/hash.ts +0 -11
- package/src/utils/zip.ts +0 -22
- /package/dist/{dist/commands → commands}/fullstack.d.ts +0 -0
- /package/dist/{dist/commands → commands}/fullstack.d.ts.map +0 -0
- /package/dist/{dist/commands → commands}/fullstack.js +0 -0
- /package/dist/{dist/commands → commands}/fullstack.js.map +0 -0
- /package/dist/{dist/core → core}/backend.d.ts +0 -0
- /package/dist/{dist/core → core}/backend.d.ts.map +0 -0
- /package/dist/{dist/core → core}/backend.js +0 -0
- /package/dist/{dist/core → core}/backend.js.map +0 -0
- /package/dist/{dist/core → core}/env.d.ts +0 -0
- /package/dist/{dist/core → core}/env.d.ts.map +0 -0
- /package/dist/{dist/core → core}/env.js +0 -0
- /package/dist/{dist/core → core}/env.js.map +0 -0
- /package/dist/{dist/core → core}/fullstack.d.ts +0 -0
- /package/dist/{dist/core → core}/fullstack.d.ts.map +0 -0
- /package/dist/{dist/core → core}/fullstack.js +0 -0
- /package/dist/{dist/core → core}/fullstack.js.map +0 -0
package/README.md
CHANGED
|
@@ -1,6 +1,18 @@
|
|
|
1
|
-
|
|
1
|
+
<div align="center">
|
|
2
2
|
|
|
3
|
-
<
|
|
3
|
+
<img src="https://img.shields.io/badge/⚡_NIVII-7C3AED?style=for-the-badge&labelColor=0a0a0f&color=7C3AED" alt="Nivii" height="40"/>
|
|
4
|
+
|
|
5
|
+
**The fastest way to share any local dev project via a live public URL.**
|
|
6
|
+
No accounts. No config. One command.
|
|
7
|
+
|
|
8
|
+
[](https://www.npmjs.com/package/nivii)
|
|
9
|
+
[](https://www.npmjs.com/package/nivii)
|
|
10
|
+
[](./LICENSE)
|
|
11
|
+
[](#)
|
|
12
|
+
|
|
13
|
+
[Website](https://nivii.app) · [npm](https://www.npmjs.com/package/nivii) · [Issues](https://github.com/Aadigarg111/Nivi-sh/issues)
|
|
14
|
+
|
|
15
|
+
</div>
|
|
4
16
|
|
|
5
17
|
---
|
|
6
18
|
|
|
@@ -8,9 +20,11 @@
|
|
|
8
20
|
|
|
9
21
|
```bash
|
|
10
22
|
npm i -g nivii
|
|
11
|
-
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
# or with pnpm / bun
|
|
12
27
|
pnpm add -g nivii
|
|
13
|
-
# or with bun
|
|
14
28
|
bun add -g nivii
|
|
15
29
|
```
|
|
16
30
|
|
|
@@ -19,294 +33,170 @@ bun add -g nivii
|
|
|
19
33
|
## Quick Start
|
|
20
34
|
|
|
21
35
|
```bash
|
|
22
|
-
|
|
23
|
-
cd ~/my-awesome-project
|
|
24
|
-
|
|
25
|
-
# Share it instantly
|
|
36
|
+
cd ~/my-project
|
|
26
37
|
nivii share
|
|
27
38
|
```
|
|
28
39
|
|
|
29
|
-
Example output:
|
|
30
|
-
|
|
31
40
|
```
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
✓
|
|
36
|
-
|
|
37
|
-
✓ Deployed to edge
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
│
|
|
41
|
-
│
|
|
42
|
-
│
|
|
43
|
-
│
|
|
44
|
-
│
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
│ Scan to open on mobile │
|
|
50
|
-
└─────────────────────────────────┘
|
|
41
|
+
⚡ NIVII v0.3.3 · nivii.app
|
|
42
|
+
|
|
43
|
+
Detecting project type…
|
|
44
|
+
✓ Detected Next.js (99% confidence)
|
|
45
|
+
✓ Build complete
|
|
46
|
+
✓ Deployed to edge
|
|
47
|
+
|
|
48
|
+
┌──────────────────────────────────────────┐
|
|
49
|
+
│ │
|
|
50
|
+
│ Your project is live 🚀 │
|
|
51
|
+
│ │
|
|
52
|
+
│ https://xk9m2pqr.nivii.app │
|
|
53
|
+
│ Expires in 48 hours │
|
|
54
|
+
│ │
|
|
55
|
+
└──────────────────────────────────────────┘
|
|
56
|
+
|
|
57
|
+
URL copied to clipboard ✓
|
|
51
58
|
```
|
|
52
59
|
|
|
53
60
|
---
|
|
54
61
|
|
|
55
62
|
## Features
|
|
56
63
|
|
|
57
|
-
|
|
|
58
|
-
|
|
59
|
-
| 🔍
|
|
60
|
-
|
|
|
61
|
-
| 🔒
|
|
62
|
-
| 🔗
|
|
63
|
-
| 📱
|
|
64
|
-
| 📋
|
|
65
|
-
| 🌐
|
|
66
|
-
| 📊
|
|
67
|
-
| 💥
|
|
68
|
-
| 🤝
|
|
69
|
-
| 🌍
|
|
70
|
-
| 🎨 | Beautiful UI | Futuristic terminal UI with gradients and spinners |
|
|
64
|
+
| Feature | Description |
|
|
65
|
+
|---------|-------------|
|
|
66
|
+
| 🔍 Smart Detection | Auto-detects framework, build command, output dir |
|
|
67
|
+
| ⚡ Live Sync | Watch files and auto-redeploy on changes (`--live`) |
|
|
68
|
+
| 🔒 Password Protection | Password or OTP-protect any deployment |
|
|
69
|
+
| 🔗 Custom Slugs | `my-demo.nivii.app` instead of random strings |
|
|
70
|
+
| 📱 QR Codes | Instant QR code in terminal |
|
|
71
|
+
| 📋 Clipboard | URL auto-copied after deploy |
|
|
72
|
+
| 🌐 Auto-open | Browser opens automatically |
|
|
73
|
+
| 📊 Analytics | View counts and visitor data |
|
|
74
|
+
| 💥 Self-Destruct | Links that expire after N views or a duration |
|
|
75
|
+
| 🤝 Collab Previews | Real-time cursor presence for reviewers |
|
|
76
|
+
| 🌍 Edge CDN | Cloudflare's global network |
|
|
71
77
|
|
|
72
78
|
---
|
|
73
79
|
|
|
74
|
-
## All Flags
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
|
81
|
-
|
|
82
|
-
|
|
|
83
|
-
|
|
|
84
|
-
|
|
|
85
|
-
|
|
|
86
|
-
|
|
|
87
|
-
|
|
|
88
|
-
|
|
|
89
|
-
|
|
|
90
|
-
|
|
|
91
|
-
|
|
|
80
|
+
## All Flags
|
|
81
|
+
|
|
82
|
+
```bash
|
|
83
|
+
nivii share [options]
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
| Flag | Default | Description |
|
|
87
|
+
|------|---------|-------------|
|
|
88
|
+
| `--dir <dir>` | cwd | Directory to deploy |
|
|
89
|
+
| `--slug <slug>` | random | Custom slug → `my-demo.nivii.app` |
|
|
90
|
+
| `--pass <password>` | — | Password-protect the deployment |
|
|
91
|
+
| `--otp` | false | One-time password access |
|
|
92
|
+
| `--expires <duration>` | 48h | `1h` / `24h` / `7d` / `30d` / `never` |
|
|
93
|
+
| `--live` | false | Live sync — watch & redeploy on changes |
|
|
94
|
+
| `--collab` | false | Real-time collaborative preview |
|
|
95
|
+
| `--no-build` | false | Skip build step |
|
|
96
|
+
| `--cmd <cmd>` | auto | Custom build command |
|
|
97
|
+
| `--max-views <n>` | — | Self-destruct after N views |
|
|
98
|
+
| `--self-destruct` | false | Destroy after first view |
|
|
99
|
+
| `--no-qr` | false | Skip QR code display |
|
|
100
|
+
| `--no-open` | false | Don't auto-open browser |
|
|
92
101
|
|
|
93
102
|
---
|
|
94
103
|
|
|
95
104
|
## All Commands
|
|
96
105
|
|
|
97
|
-
```
|
|
98
|
-
nivii share
|
|
99
|
-
nivii ls
|
|
100
|
-
nivii analytics
|
|
101
|
-
nivii config
|
|
102
|
-
nivii whoami
|
|
103
|
-
nivii --help
|
|
106
|
+
```bash
|
|
107
|
+
nivii share # Deploy current directory
|
|
108
|
+
nivii ls # List recent deployments
|
|
109
|
+
nivii analytics # View analytics for a deployment
|
|
110
|
+
nivii config # View/set config values
|
|
111
|
+
nivii whoami # Show current account info
|
|
112
|
+
nivii --help # Show all commands
|
|
104
113
|
```
|
|
105
114
|
|
|
106
115
|
---
|
|
107
116
|
|
|
108
117
|
## Framework Support
|
|
109
118
|
|
|
110
|
-
| Framework |
|
|
111
|
-
|
|
112
|
-
| Next.js |
|
|
113
|
-
| Vite |
|
|
114
|
-
| React (CRA) |
|
|
115
|
-
| Vue |
|
|
116
|
-
| Svelte |
|
|
117
|
-
| SvelteKit |
|
|
118
|
-
| Astro |
|
|
119
|
-
| Remix |
|
|
120
|
-
| Nuxt |
|
|
121
|
-
|
|
|
122
|
-
| Express | express dep | — (server mode) | . |
|
|
123
|
-
| Fastify | fastify dep | — (server mode) | . |
|
|
124
|
-
| Hono | hono dep | — (server mode) | . |
|
|
125
|
-
| Static HTML | index.html exists | — | . / dist / build |
|
|
119
|
+
| Framework | Build Command | Output Dir |
|
|
120
|
+
|-----------|--------------|------------|
|
|
121
|
+
| Next.js | `npm run build` | `out` / `.next` |
|
|
122
|
+
| Vite | `npm run build` | `dist` |
|
|
123
|
+
| React (CRA) | `npm run build` | `build` |
|
|
124
|
+
| Vue | `npm run build` | `dist` |
|
|
125
|
+
| Svelte | `npm run build` | `dist` |
|
|
126
|
+
| SvelteKit | `npm run build` | `build` |
|
|
127
|
+
| Astro | `npm run build` | `dist` |
|
|
128
|
+
| Remix | `npm run build` | `public` |
|
|
129
|
+
| Nuxt | `npm run generate` | `.output/public` |
|
|
130
|
+
| Static HTML | — | `.` |
|
|
126
131
|
|
|
127
132
|
---
|
|
128
133
|
|
|
129
134
|
## Architecture
|
|
130
135
|
|
|
131
|
-
User runs: `nivii share`
|
|
132
|
-
|
|
133
|
-
```
|
|
134
|
-
Nivii CLI (Node.js)
|
|
135
|
-
1. detectFramework() → identifies build system
|
|
136
|
-
2. runBuild() → executes build command
|
|
137
|
-
3. zipDirectory() → zips output dir
|
|
138
|
-
4. uploadDeploy() → POST /deploy to API
|
|
139
|
-
5. showQR() → renders QR in terminal
|
|
140
|
-
6. startLiveSync() → WebSocket watcher (--live)
|
|
141
|
-
```
|
|
142
|
-
|
|
143
136
|
```
|
|
137
|
+
CLI (Node.js)
|
|
138
|
+
detectFramework() → runBuild() → uploadDeploy() → showQR() → startLiveSync()
|
|
139
|
+
↓
|
|
144
140
|
api.nivii.app (Cloudflare Worker)
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
```
|
|
151
|
-
Cloudflare R2 (Object Storage) | Cloudflare KV (Metadata + Analytics)
|
|
152
|
-
deploys/{slug}/ deploy:{slug} → JSON meta
|
|
153
|
-
analytics:{slug} → stats
|
|
154
|
-
```
|
|
155
|
-
|
|
156
|
-
```
|
|
157
|
-
*.nivii.app (Cloudflare Worker wildcard routing)
|
|
158
|
-
GET xyz.nivii.app/
|
|
159
|
-
- Checks KV for metadata (expiry, password, OTP)
|
|
160
|
-
- Serves files from R2
|
|
161
|
-
- SPA fallback to index.html
|
|
141
|
+
POST /deploy → KV (metadata) + R2 (files)
|
|
142
|
+
↓
|
|
143
|
+
{slug}.nivii.app (Cloudflare Worker wildcard)
|
|
144
|
+
GET → KV metadata check → R2 file serve
|
|
162
145
|
```
|
|
163
146
|
|
|
164
147
|
---
|
|
165
148
|
|
|
166
|
-
## Self-Hosting
|
|
149
|
+
## Self-Hosting
|
|
167
150
|
|
|
168
|
-
Deploy your own Nivii
|
|
151
|
+
Deploy your own Nivii on Cloudflare in ~10 minutes:
|
|
169
152
|
|
|
170
|
-
### Prerequisites
|
|
171
|
-
- [Cloudflare account](https://cloudflare.com) (free tier works)
|
|
172
|
-
- [Wrangler CLI](https://developers.cloudflare.com/workers/wrangler/): `npm i -g wrangler`
|
|
173
|
-
- Node.js 18+
|
|
174
|
-
|
|
175
|
-
### Steps
|
|
176
|
-
|
|
177
|
-
1. Clone and install
|
|
178
153
|
```bash
|
|
154
|
+
# 1. Clone
|
|
179
155
|
git clone https://github.com/Aadigarg111/Nivi-sh.git
|
|
180
|
-
cd Nivi-sh
|
|
181
|
-
npm install
|
|
182
|
-
```
|
|
156
|
+
cd Nivi-sh && npm install
|
|
183
157
|
|
|
184
|
-
2. Create Cloudflare resources
|
|
185
|
-
```bash
|
|
186
|
-
# Login to Cloudflare
|
|
158
|
+
# 2. Create Cloudflare resources
|
|
187
159
|
wrangler login
|
|
188
|
-
|
|
189
|
-
# Create KV namespace
|
|
190
160
|
wrangler kv:namespace create "DB"
|
|
191
|
-
wrangler kv:namespace create "DB" --preview
|
|
192
|
-
|
|
193
|
-
# Create R2 bucket
|
|
194
161
|
wrangler r2 bucket create nivii-deployments
|
|
195
|
-
```
|
|
196
162
|
|
|
197
|
-
3. Update
|
|
198
|
-
```
|
|
199
|
-
# packages/worker/wrangler.toml
|
|
200
|
-
[[kv_namespaces]]
|
|
201
|
-
binding = "DB"
|
|
202
|
-
id = "YOUR_ACTUAL_KV_ID"
|
|
203
|
-
preview_id = "YOUR_PREVIEW_KV_ID"
|
|
204
|
-
|
|
205
|
-
[[r2_buckets]]
|
|
206
|
-
binding = "BUCKET"
|
|
207
|
-
bucket_name = "nivii-deployments"
|
|
208
|
-
```
|
|
163
|
+
# 3. Update packages/worker/wrangler.toml with your IDs
|
|
209
164
|
|
|
210
|
-
4. Deploy
|
|
211
|
-
|
|
212
|
-
cd packages/worker
|
|
213
|
-
wrangler deploy
|
|
214
|
-
```
|
|
165
|
+
# 4. Deploy worker
|
|
166
|
+
cd packages/worker && wrangler deploy
|
|
215
167
|
|
|
216
|
-
5.
|
|
217
|
-
Add a wildcard DNS record:
|
|
218
|
-
- Type: CNAME
|
|
219
|
-
- Name: *
|
|
220
|
-
- Target: your-worker.workers.dev
|
|
221
|
-
- Proxy: Enabled (orange cloud)
|
|
222
|
-
|
|
223
|
-
6. Point the CLI at your instance
|
|
224
|
-
```bash
|
|
168
|
+
# 5. Point CLI at your instance
|
|
225
169
|
export NIVII_API=https://api.your-domain.com
|
|
226
|
-
# Or set in config
|
|
227
|
-
nivii config apiBase https://api.your-domain.com
|
|
228
170
|
```
|
|
229
171
|
|
|
230
172
|
---
|
|
231
173
|
|
|
232
174
|
## Configuration
|
|
233
175
|
|
|
234
|
-
Config
|
|
176
|
+
Config stored at `~/.nivii/config.json`:
|
|
235
177
|
|
|
236
178
|
```json
|
|
237
179
|
{
|
|
238
|
-
"token": "your-pro-token",
|
|
239
|
-
"plan": "free",
|
|
240
180
|
"apiBase": "https://api.nivii.app",
|
|
241
181
|
"deployments": []
|
|
242
182
|
}
|
|
243
183
|
```
|
|
244
184
|
|
|
245
|
-
Manage it:
|
|
246
|
-
```
|
|
247
|
-
nivii config # show all
|
|
248
|
-
nivii config token <tok> # set token
|
|
249
|
-
nivii config apiBase <url> # point to self-hosted instance
|
|
250
|
-
```
|
|
251
|
-
|
|
252
|
-
---
|
|
253
|
-
|
|
254
|
-
## Roadmap v2
|
|
255
|
-
- [ ] Team workspaces — share deployments with your team
|
|
256
|
-
- [ ] Custom domains — deploy to preview.your-company.com
|
|
257
|
-
- [ ] GitHub Actions integration — auto-share on every PR
|
|
258
|
-
- [ ] VS Code extension — deploy with a keyboard shortcut
|
|
259
|
-
- [ ] Mobile app — scan QR codes from Nivii deployments
|
|
260
|
-
- [ ] Zip-streaming upload — faster uploads for large projects
|
|
261
|
-
- [ ] Screenshot previews — auto-thumbnail for each deployment
|
|
262
|
-
- [ ] API keys + webhooks — programmatic deployments
|
|
263
|
-
- [ ] Deployment history UI — web dashboard at app.nivii.app
|
|
264
|
-
- [ ] SSR support — run Express/Fastify apps in serverless mode
|
|
265
|
-
- [ ] Monorepo support — deploy multiple packages at once
|
|
266
|
-
|
|
267
|
-
---
|
|
268
|
-
|
|
269
|
-
## Contributing
|
|
270
|
-
|
|
271
|
-
Contributions are welcome! This is an AGPL-3.0 project.
|
|
272
|
-
|
|
273
|
-
### Fork and clone
|
|
274
|
-
```bash
|
|
275
|
-
git clone https://github.com/YOUR_USERNAME/Nivi-sh.git
|
|
276
|
-
cd Nivi-sh
|
|
277
|
-
npm install
|
|
278
|
-
```
|
|
279
|
-
|
|
280
|
-
### Run locally
|
|
281
185
|
```bash
|
|
282
|
-
#
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
# Run the CLI locally
|
|
286
|
-
node dist/cli.js share --help
|
|
186
|
+
nivii config # show all
|
|
187
|
+
nivii config apiBase <url> # point to self-hosted instance
|
|
287
188
|
```
|
|
288
189
|
|
|
289
|
-
### Submitting PRs
|
|
290
|
-
1. Fork the repository
|
|
291
|
-
2. Create a feature branch: `git checkout -b feat/my-feature`
|
|
292
|
-
3. Commit your changes: `git commit -m 'feat: add something cool'`
|
|
293
|
-
4. Push to your fork: `git push origin feat/my-feature`
|
|
294
|
-
5. Open a Pull Request
|
|
295
|
-
|
|
296
|
-
Please follow conventional commits and keep PRs focused.
|
|
297
|
-
|
|
298
190
|
---
|
|
299
191
|
|
|
300
192
|
## License
|
|
301
193
|
|
|
302
|
-
|
|
194
|
+
[AGPL-3.0](./LICENSE) — Copyright (C) 2025 Aadi Garg
|
|
303
195
|
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
|
|
196
|
+
---
|
|
307
197
|
|
|
308
|
-
|
|
198
|
+
<div align="center">
|
|
309
199
|
|
|
310
|
-
|
|
200
|
+
Made with ❤️ by [Aadi Garg](https://github.com/Aadigarg111) · [nivii.app](https://nivii.app)
|
|
311
201
|
|
|
312
|
-
|
|
202
|
+
</div>
|
package/dist/cli.js
CHANGED
|
@@ -1,11 +1,16 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { cac } from 'cac';
|
|
3
3
|
import chalk from 'chalk';
|
|
4
|
+
import { createRequire } from 'module';
|
|
4
5
|
import { runShare } from './commands/share.js';
|
|
6
|
+
import { runFullStack } from './commands/fullstack.js';
|
|
5
7
|
import { runConfig } from './commands/config.js';
|
|
6
8
|
import { runWhoami } from './commands/whoami.js';
|
|
9
|
+
import { runPro } from './commands/pro.js';
|
|
7
10
|
import { runAnalytics } from './core/analytics.js';
|
|
8
11
|
import { loadConfig, updateConfig } from './utils/config.js';
|
|
12
|
+
const require = createRequire(import.meta.url);
|
|
13
|
+
const PKG_VERSION = require('../package.json').version;
|
|
9
14
|
import { showWelcome, showHelp } from './ui/welcome.js';
|
|
10
15
|
const cli = cac('nivii');
|
|
11
16
|
// ─── First run ────────────────────────────────────────────────────────────────
|
|
@@ -55,6 +60,48 @@ cli
|
|
|
55
60
|
process.exit(1);
|
|
56
61
|
}
|
|
57
62
|
});
|
|
63
|
+
// ─── fullstack ────────────────────────────────────────────────────────────────
|
|
64
|
+
cli
|
|
65
|
+
.command('fullstack', 'Deploy frontend + backend together, auto-wired')
|
|
66
|
+
.alias('fs')
|
|
67
|
+
.option('--dir <dir>', 'Root directory (default: cwd)')
|
|
68
|
+
.option('--slug <slug>', 'Custom slug')
|
|
69
|
+
.option('--expires <duration>', 'Expiry: 1h / 24h / 7d / 30d')
|
|
70
|
+
.option('--fly-token <token>', 'Fly.io API token for backend deploy')
|
|
71
|
+
.option('--skip-backend', 'Deploy frontend only')
|
|
72
|
+
.option('--skip-frontend', 'Deploy backend only')
|
|
73
|
+
.option('--no-qr', 'Skip QR code')
|
|
74
|
+
.option('--no-open', 'Do not open browser')
|
|
75
|
+
.action(async (options) => {
|
|
76
|
+
try {
|
|
77
|
+
await runFullStack({
|
|
78
|
+
dir: options.dir,
|
|
79
|
+
slug: options.slug,
|
|
80
|
+
expires: options.expires,
|
|
81
|
+
flyToken: options.flyToken,
|
|
82
|
+
skipBackend: options.skipBackend,
|
|
83
|
+
skipFrontend: options.skipFrontend,
|
|
84
|
+
noQr: options['no-qr'],
|
|
85
|
+
noOpen: options['no-open'],
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
catch (err) {
|
|
89
|
+
console.error(chalk.red('\n ✗ ') + err.message);
|
|
90
|
+
process.exit(1);
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
// ─── pro ──────────────────────────────────────────────────────────────────────
|
|
94
|
+
cli
|
|
95
|
+
.command('pro [subcommand]', 'Manage your Nivii Pro early access')
|
|
96
|
+
.action(async (subcommand) => {
|
|
97
|
+
try {
|
|
98
|
+
await runPro(subcommand);
|
|
99
|
+
}
|
|
100
|
+
catch (err) {
|
|
101
|
+
console.error(chalk.red('\n ✗ ') + err.message);
|
|
102
|
+
process.exit(1);
|
|
103
|
+
}
|
|
104
|
+
});
|
|
58
105
|
// ─── config ───────────────────────────────────────────────────────────────────
|
|
59
106
|
cli
|
|
60
107
|
.command('config [key] [value]', 'View or set config values')
|
|
@@ -92,7 +139,7 @@ cli
|
|
|
92
139
|
.action(async (slug) => {
|
|
93
140
|
await runAnalytics(slug);
|
|
94
141
|
});
|
|
95
|
-
cli.version(
|
|
142
|
+
cli.version(PKG_VERSION);
|
|
96
143
|
// ─── Show help when no command given ─────────────────────────────────────────
|
|
97
144
|
cli.parse(process.argv, { run: false });
|
|
98
145
|
if (!cli.matchedCommand) {
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAC1B,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pro.d.ts","sourceRoot":"","sources":["../../src/commands/pro.ts"],"names":[],"mappings":"AAOA,wBAAsB,MAAM,CAAC,UAAU,CAAC,EAAE,MAAM,iBAc/C"}
|