flowershow 0.2.3 ā 0.2.5
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 +84 -17
- package/dist/cli.js +11 -0
- package/dist/cli.js.map +1 -1
- package/dist/lib/api-client.d.ts +11 -3
- package/dist/lib/api-client.d.ts.map +1 -1
- package/dist/lib/api-client.js +12 -14
- package/dist/lib/api-client.js.map +1 -1
- package/dist/lib/auth.d.ts +2 -4
- package/dist/lib/auth.d.ts.map +1 -1
- package/dist/lib/auth.js +12 -17
- package/dist/lib/auth.js.map +1 -1
- package/dist/lib/commands/auth-login.d.ts.map +1 -1
- package/dist/lib/commands/auth-login.js +3 -4
- package/dist/lib/commands/auth-login.js.map +1 -1
- package/dist/lib/commands/auth-status.d.ts.map +1 -1
- package/dist/lib/commands/auth-status.js +1 -2
- package/dist/lib/commands/auth-status.js.map +1 -1
- package/dist/lib/commands/delete.d.ts.map +1 -1
- package/dist/lib/commands/delete.js +2 -19
- package/dist/lib/commands/delete.js.map +1 -1
- package/dist/lib/commands/list.d.ts.map +1 -1
- package/dist/lib/commands/list.js +2 -3
- package/dist/lib/commands/list.js.map +1 -1
- package/dist/lib/commands/publish.d.ts.map +1 -1
- package/dist/lib/commands/publish.js +20 -29
- package/dist/lib/commands/publish.js.map +1 -1
- package/dist/lib/commands/sync.d.ts +6 -0
- package/dist/lib/commands/sync.d.ts.map +1 -0
- package/dist/lib/commands/sync.js +162 -0
- package/dist/lib/commands/sync.js.map +1 -0
- package/package.json +3 -2
package/README.md
CHANGED
|
@@ -5,7 +5,7 @@ A CLI tool for publishing Markdown files and folders directly to FlowerShow with
|
|
|
5
5
|
## Installation
|
|
6
6
|
|
|
7
7
|
```bash
|
|
8
|
-
npm install -g flowershow
|
|
8
|
+
npm install -g flowershow@latest
|
|
9
9
|
```
|
|
10
10
|
|
|
11
11
|
Then use the `flowershow` command anywhere:
|
|
@@ -31,8 +31,6 @@ This will:
|
|
|
31
31
|
2. Open your browser to authorize the CLI
|
|
32
32
|
3. Store your authentication token locally
|
|
33
33
|
|
|
34
|
-
See [Authentication Documentation](docs/authentication.md) for details.
|
|
35
|
-
|
|
36
34
|
### 2. Publish Your Content
|
|
37
35
|
|
|
38
36
|
```bash
|
|
@@ -43,6 +41,16 @@ flowershow publish ./my-notes
|
|
|
43
41
|
flowershow publish ./my-note.md
|
|
44
42
|
```
|
|
45
43
|
|
|
44
|
+
### 3. Sync after changes
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
# Sync a folder site
|
|
48
|
+
flowershow sync ./my-notes
|
|
49
|
+
|
|
50
|
+
# Sync a single file site
|
|
51
|
+
flowershow sync ./my-note.md
|
|
52
|
+
```
|
|
53
|
+
|
|
46
54
|
## Commands
|
|
47
55
|
|
|
48
56
|
### Authentication
|
|
@@ -82,7 +90,7 @@ Publish files or folders to FlowerShow.
|
|
|
82
90
|
**Options:**
|
|
83
91
|
|
|
84
92
|
- `--overwrite` - Overwrite existing site if it already exists
|
|
85
|
-
- `--name <siteName>` - Custom name for the site (defaults to file/folder name)
|
|
93
|
+
- `--name <siteName>` - Custom name for the site (defaults to file/folder name). Note: If you use it, you need to pass it also to the `sync` command later on, so that Flowershow knows content of which site you're trying to sync.
|
|
86
94
|
|
|
87
95
|
**Examples:**
|
|
88
96
|
|
|
@@ -108,8 +116,8 @@ flowershow publish ./my-notes --name my-custom-site --overwrite
|
|
|
108
116
|
|
|
109
117
|
**What happens:**
|
|
110
118
|
|
|
111
|
-
1. Files are discovered and filtered (ignores `.git`, `node_modules`, etc
|
|
112
|
-
2. Project name is derived from the first file
|
|
119
|
+
1. Files are discovered and filtered (ignores `.git`, `node_modules`, etc.; also supports `.gitignore` and will ignore paths listed there)
|
|
120
|
+
2. Project name is derived from the first file name or the folder name
|
|
113
121
|
3. Site is created via the FlowerShow API
|
|
114
122
|
4. Presigned URLs are obtained for secure file uploads
|
|
115
123
|
5. Files are uploaded directly to Cloudflare R2 storage
|
|
@@ -118,22 +126,71 @@ flowershow publish ./my-notes --name my-custom-site --overwrite
|
|
|
118
126
|
|
|
119
127
|
**Single file behavior:**
|
|
120
128
|
|
|
121
|
-
- Filename becomes the project name
|
|
122
|
-
- File is saved as `README.md` (or `README.mdx`)
|
|
123
|
-
-
|
|
129
|
+
- Filename becomes the project name (e.g. `flowershow publish about.md` will create a site named `about`)
|
|
130
|
+
- File is saved as `README.md` (or `README.mdx` depending on the original file extension)
|
|
131
|
+
- Site accessible at `/@{username}/{filename}` (e.g. `/@johndoe/about`)
|
|
124
132
|
|
|
125
133
|
**Multiple files behavior:**
|
|
126
134
|
|
|
127
|
-
- First filename becomes the project name
|
|
135
|
+
- First filename becomes the project name (e.g. `flowershow publish about.md team.md abc.md` will create a site named `about`)
|
|
128
136
|
- First file is saved as `README.md` (or `README.mdx`)
|
|
129
137
|
- Subsequent files keep their original names
|
|
130
|
-
-
|
|
138
|
+
- Site accessible at `/@{username}/{first-filename}` (e.g. `/@johndoe/about`)
|
|
131
139
|
|
|
132
140
|
**Folder behavior:**
|
|
133
141
|
|
|
134
|
-
- Folder name becomes the project name
|
|
142
|
+
- Folder name becomes the project name (e.g. `flowershow publish my-digital-garden/blog` will create a site named `blog`)
|
|
135
143
|
- All files maintain their relative paths
|
|
136
|
-
-
|
|
144
|
+
- Site accessible at `/@{username}/{foldername}` (e.g. `/@johndoe/blog`)
|
|
145
|
+
|
|
146
|
+
#### `flowershow sync <path> [options]`
|
|
147
|
+
|
|
148
|
+
Sync changes to an existing published site. Only uploads new or modified files, and deletes files that no longer exist locally.
|
|
149
|
+
|
|
150
|
+
**Options:**
|
|
151
|
+
|
|
152
|
+
- `--name <siteName>` - Specify site name if different from folder name
|
|
153
|
+
- `--dry-run` - Show what would be synced without making changes
|
|
154
|
+
- `--verbose` - Show detailed list of all files in each category
|
|
155
|
+
|
|
156
|
+
**Examples:**
|
|
157
|
+
|
|
158
|
+
```bash
|
|
159
|
+
# Sync changes to a folder
|
|
160
|
+
flowershow sync ./my-notes
|
|
161
|
+
|
|
162
|
+
# Preview changes without syncing
|
|
163
|
+
flowershow sync ./my-notes --dry-run
|
|
164
|
+
|
|
165
|
+
# Show detailed file lists including unchanged files
|
|
166
|
+
flowershow sync ./my-notes --verbose
|
|
167
|
+
|
|
168
|
+
# Sync to a specific site name
|
|
169
|
+
flowershow sync ./my-notes --name my-custom-site
|
|
170
|
+
|
|
171
|
+
# Combine options
|
|
172
|
+
flowershow sync ./my-notes --dry-run --verbose
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
**What happens:**
|
|
176
|
+
|
|
177
|
+
1. Files are discovered and SHA hashes calculated
|
|
178
|
+
2. File list is sent to the API for comparison
|
|
179
|
+
3. API compares with existing files and determines:
|
|
180
|
+
- New files (not in database)
|
|
181
|
+
- Modified files (different SHA hash)
|
|
182
|
+
- Deleted files (in database but not in request)
|
|
183
|
+
- Unchanged files (same SHA hash)
|
|
184
|
+
4. Sync summary is displayed
|
|
185
|
+
5. Only new/modified files are uploaded
|
|
186
|
+
6. Deleted files are removed by the API
|
|
187
|
+
7. CLI waits for markdown files to be processed
|
|
188
|
+
8. Site URL is displayed
|
|
189
|
+
|
|
190
|
+
**When to use sync vs publish:**
|
|
191
|
+
|
|
192
|
+
- **Use `publish`** for initial site creation or complete site replacement
|
|
193
|
+
- **Use `sync`** for updates to existing sites
|
|
137
194
|
|
|
138
195
|
### Site Management
|
|
139
196
|
|
|
@@ -166,7 +223,7 @@ The CLI automatically ignores common non-content files and directories:
|
|
|
166
223
|
- `.env*`, `*.log`
|
|
167
224
|
- `.next/`, `.vercel/`, `.turbo/`
|
|
168
225
|
|
|
169
|
-
If `.gitignore` file is present in the published folder,
|
|
226
|
+
If `.gitignore` file is present in the published folder, the Flowershow CLI will also ignore files matched by it.
|
|
170
227
|
|
|
171
228
|
## Site URLs
|
|
172
229
|
|
|
@@ -200,6 +257,15 @@ A site with that name already exists. You can:
|
|
|
200
257
|
- Delete it first: `flowershow delete <name>`
|
|
201
258
|
- Rename your file/folder
|
|
202
259
|
- Use `flowershow list` to see all existing sites
|
|
260
|
+
- **Or use `flowershow sync`** to update an existing site incrementally
|
|
261
|
+
|
|
262
|
+
### "Site not found" (when using sync)
|
|
263
|
+
|
|
264
|
+
The sync command requires the site to already exist. If you get this error:
|
|
265
|
+
|
|
266
|
+
- Use `flowershow publish` to create the site first
|
|
267
|
+
- Check the site name with `flowershow list`
|
|
268
|
+
- Specify the correct site name with `--name`
|
|
203
269
|
|
|
204
270
|
### Files still processing after timeout
|
|
205
271
|
|
|
@@ -207,7 +273,7 @@ The site is live, but some pages may not be ready yet. The Cloudflare worker pro
|
|
|
207
273
|
|
|
208
274
|
## Architecture
|
|
209
275
|
|
|
210
|
-
All CLI commands communicate with the
|
|
276
|
+
All CLI commands communicate with the Flowershow API:
|
|
211
277
|
|
|
212
278
|
- **Authentication**: OAuth device flow endpoints
|
|
213
279
|
- **Site Management**: Create, list, and delete sites
|
|
@@ -219,7 +285,7 @@ All CLI commands communicate with the FlowerShow API:
|
|
|
219
285
|
- **Token Storage**: Authentication tokens are stored in `~/.flowershow/token.json`
|
|
220
286
|
- **Token Format**: CLI tokens use the `fs_cli_` prefix
|
|
221
287
|
- **Token Expiration**: Tokens do not expire by default
|
|
222
|
-
- **Token Revocation**: Revoke tokens from the
|
|
288
|
+
- **Token Revocation**: Revoke tokens from the [Flowershow dashboard](https://cloud.flowershow.app/tokens) or via `flowershow auth logout`
|
|
223
289
|
- **Secure Uploads**: Files are uploaded using time-limited presigned URLs
|
|
224
290
|
- **No Credentials**: CLI never stores database or storage credentials
|
|
225
291
|
|
|
@@ -251,7 +317,8 @@ APP_URL="http://my.localhost:3000"
|
|
|
251
317
|
|
|
252
318
|
```bash
|
|
253
319
|
pnpm dev auth login
|
|
254
|
-
pnpm dev publish
|
|
320
|
+
pnpm dev publish ./my-notes
|
|
321
|
+
pnpm dev sync ./my-notes
|
|
255
322
|
```
|
|
256
323
|
|
|
257
324
|
You can also build the project, link it globally and use it as you normally would the npm-installed version:
|
package/dist/cli.js
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
import { Command } from "commander";
|
|
3
3
|
import chalk from "chalk";
|
|
4
4
|
import { publishCommand } from "./lib/commands/publish.js";
|
|
5
|
+
import { syncCommand } from "./lib/commands/sync.js";
|
|
5
6
|
import { listCommand } from "./lib/commands/list.js";
|
|
6
7
|
import { deleteCommand } from "./lib/commands/delete.js";
|
|
7
8
|
import { authLoginCommand } from "./lib/commands/auth-login.js";
|
|
@@ -49,6 +50,16 @@ program
|
|
|
49
50
|
const paths = [path, ...morePaths];
|
|
50
51
|
await publishCommand(paths, options.overwrite || false, options.name);
|
|
51
52
|
});
|
|
53
|
+
program
|
|
54
|
+
.command("sync <path>")
|
|
55
|
+
.description("Sync changes to an existing published site")
|
|
56
|
+
.option("--name <siteName>", "Specify site name if different from folder name")
|
|
57
|
+
.option("--dry-run", "Show what would be synced without making changes")
|
|
58
|
+
.option("--verbose", "Show detailed list of all files in each category")
|
|
59
|
+
.action(async (path, options) => {
|
|
60
|
+
console.log(chalk.bold("\nš FlowerShow CLI - Sync\n"));
|
|
61
|
+
await syncCommand(path, options);
|
|
62
|
+
});
|
|
52
63
|
program
|
|
53
64
|
.command("list")
|
|
54
65
|
.description("List all published sites")
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../cli.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAElE,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,YAAY,CAAC;KAClB,WAAW,CAAC,uCAAuC,CAAC;KACpD,OAAO,CAAC,OAAO,CAAC,CAAC;AAGpB,MAAM,IAAI,GAAG,OAAO;KACjB,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,uBAAuB,CAAC;KACpC,MAAM,CAAC,GAAG,EAAE;IACX,IAAI,CAAC,IAAI,EAAE,CAAC;AACd,CAAC,CAAC,CAAC;AAEL,IAAI;KACD,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,0CAA0C,CAAC;KACvD,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC,CAAC;IAClE,MAAM,gBAAgB,EAAE,CAAC;AAC3B,CAAC,CAAC,CAAC;AAEL,IAAI;KACD,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,oCAAoC,CAAC;KACjD,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC,CAAC;IAC1D,MAAM,iBAAiB,EAAE,CAAC;AAC5B,CAAC,CAAC,CAAC;AAEL,IAAI;KACD,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,6BAA6B,CAAC;KAC1C,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC,CAAC;IAC/D,MAAM,iBAAiB,EAAE,CAAC;AAC5B,CAAC,CAAC,CAAC;AAGL,OAAO;KACJ,OAAO,CAAC,+BAA+B,CAAC;KACxC,WAAW,CAAC,yCAAyC,CAAC;KACtD,MAAM,CAAC,aAAa,EAAE,8CAA8C,CAAC;KACrE,MAAM,CAAC,mBAAmB,EAAE,0BAA0B,CAAC;KACvD,MAAM,CACL,KAAK,EACH,IAAY,EACZ,SAAmB,EACnB,OAA+C,EAC/C,EAAE;IACF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC,CAAC;IAC3D,MAAM,KAAK,GAAG,CAAC,IAAI,EAAE,GAAG,SAAS,CAAC,CAAC;IACnC,MAAM,cAAc,CAAC,KAAK,EAAE,OAAO,CAAC,SAAS,IAAI,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;AACxE,CAAC,CACF,CAAC;AAEJ,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,0BAA0B,CAAC;KACvC,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC,CAAC;IAC9D,MAAM,WAAW,EAAE,CAAC;AACtB,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,uBAAuB,CAAC;KAChC,WAAW,CAAC,yBAAyB,CAAC;KACtC,MAAM,CAAC,KAAK,EAAE,WAAmB,EAAE,EAAE;IACpC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC,CAAC;IAC/D,MAAM,aAAa,CAAC,WAAW,CAAC,CAAC;AACnC,CAAC,CAAC,CAAC;AAGL,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;IAC9B,OAAO,CAAC,IAAI,EAAE,CAAC;AACjB,CAAC;AAED,OAAO,CAAC,KAAK,EAAE,CAAC"}
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../cli.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/api-client.d.ts
CHANGED
|
@@ -33,10 +33,19 @@ interface UploadUrl {
|
|
|
33
33
|
path: string;
|
|
34
34
|
uploadUrl: string;
|
|
35
35
|
blobId: string;
|
|
36
|
+
contentType: string;
|
|
36
37
|
}
|
|
37
|
-
interface
|
|
38
|
+
interface SyncFilesResponse {
|
|
38
39
|
uploadUrls: UploadUrl[];
|
|
40
|
+
deleted: string[];
|
|
41
|
+
unchanged: string[];
|
|
42
|
+
summary: {
|
|
43
|
+
toUpload: number;
|
|
44
|
+
toDelete: number;
|
|
45
|
+
unchanged: number;
|
|
46
|
+
};
|
|
39
47
|
expiresIn: number;
|
|
48
|
+
dryRun?: boolean;
|
|
40
49
|
}
|
|
41
50
|
interface BlobStatus {
|
|
42
51
|
path: string;
|
|
@@ -60,9 +69,8 @@ export declare function getSites(): Promise<GetSitesResponse>;
|
|
|
60
69
|
export declare function getSiteById(siteId: string): Promise<GetSiteResponse>;
|
|
61
70
|
export declare function getSiteByName(siteName: string): Promise<GetSiteResponse | null>;
|
|
62
71
|
export declare function deleteSite(siteId: string): Promise<DeleteSiteResponse>;
|
|
63
|
-
export declare function
|
|
72
|
+
export declare function syncFiles(siteId: string, files: FileMetadata[], dryRun?: boolean): Promise<SyncFilesResponse>;
|
|
64
73
|
export declare function uploadToR2(uploadUrl: string, content: Buffer, contentType: string): Promise<boolean>;
|
|
65
74
|
export declare function getSiteStatus(siteId: string): Promise<SiteStatusResponse>;
|
|
66
|
-
export declare function hasValidAuth(): boolean;
|
|
67
75
|
export {};
|
|
68
76
|
//# sourceMappingURL=api-client.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-client.d.ts","sourceRoot":"","sources":["../../lib/api-client.ts"],"names":[],"mappings":"AAGA,UAAU,IAAI;IACZ,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC3B;AAED,UAAU,kBAAkB;IAC1B,IAAI,EAAE,IAAI,CAAC;CACZ;AAED,UAAU,gBAAgB;IACxB,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,UAAU,eAAe;IACvB,IAAI,EAAE,IAAI,CAAC;CACZ;AAED,UAAU,kBAAkB;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,UAAU,YAAY;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;CACb;AAED,UAAU,SAAS;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"api-client.d.ts","sourceRoot":"","sources":["../../lib/api-client.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/api-client.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { getAuthHeaders
|
|
1
|
+
import { getAuthHeaders } from "./auth.js";
|
|
2
2
|
import { API_URL } from "./const.js";
|
|
3
3
|
export async function apiRequest(endpoint, options = {}) {
|
|
4
4
|
const authHeaders = getAuthHeaders();
|
|
@@ -21,7 +21,7 @@ export async function createSite(projectName, overwrite = false) {
|
|
|
21
21
|
body: JSON.stringify({ projectName, overwrite }),
|
|
22
22
|
});
|
|
23
23
|
if (!response.ok) {
|
|
24
|
-
const error = await response.json().catch(() => ({}));
|
|
24
|
+
const error = (await response.json().catch(() => ({})));
|
|
25
25
|
throw new Error(error.message || `Failed to create site: ${response.statusText}`);
|
|
26
26
|
}
|
|
27
27
|
return (await response.json());
|
|
@@ -29,7 +29,7 @@ export async function createSite(projectName, overwrite = false) {
|
|
|
29
29
|
export async function getSites() {
|
|
30
30
|
const response = await apiRequest("/api/cli/site/get-all");
|
|
31
31
|
if (!response.ok) {
|
|
32
|
-
const error = await response.json().catch(() => ({}));
|
|
32
|
+
const error = (await response.json().catch(() => ({})));
|
|
33
33
|
throw new Error(error.message || `Failed to fetch sites: ${response.statusText}`);
|
|
34
34
|
}
|
|
35
35
|
return (await response.json());
|
|
@@ -37,7 +37,7 @@ export async function getSites() {
|
|
|
37
37
|
export async function getSiteById(siteId) {
|
|
38
38
|
const response = await apiRequest(`/api/cli/site/${siteId}`);
|
|
39
39
|
if (!response.ok) {
|
|
40
|
-
const error = await response.json().catch(() => ({}));
|
|
40
|
+
const error = (await response.json().catch(() => ({})));
|
|
41
41
|
throw new Error(error.message || `Failed to fetch site: ${response.statusText}`);
|
|
42
42
|
}
|
|
43
43
|
return (await response.json());
|
|
@@ -48,7 +48,7 @@ export async function getSiteByName(siteName) {
|
|
|
48
48
|
if (response.status === 404) {
|
|
49
49
|
return null;
|
|
50
50
|
}
|
|
51
|
-
const error = await response.json().catch(() => ({}));
|
|
51
|
+
const error = (await response.json().catch(() => ({})));
|
|
52
52
|
throw new Error(error.message || `Failed to fetch site: ${response.statusText}`);
|
|
53
53
|
}
|
|
54
54
|
return (await response.json());
|
|
@@ -58,13 +58,14 @@ export async function deleteSite(siteId) {
|
|
|
58
58
|
method: "DELETE",
|
|
59
59
|
});
|
|
60
60
|
if (!response.ok) {
|
|
61
|
-
const error = await response.json().catch(() => ({}));
|
|
61
|
+
const error = (await response.json().catch(() => ({})));
|
|
62
62
|
throw new Error(error.message || `Failed to delete site: ${response.statusText}`);
|
|
63
63
|
}
|
|
64
64
|
return (await response.json());
|
|
65
65
|
}
|
|
66
|
-
export async function
|
|
67
|
-
const
|
|
66
|
+
export async function syncFiles(siteId, files, dryRun = false) {
|
|
67
|
+
const url = `/api/cli/site/${siteId}/sync${dryRun ? '?dryRun=true' : ''}`;
|
|
68
|
+
const response = await apiRequest(url, {
|
|
68
69
|
method: "POST",
|
|
69
70
|
headers: {
|
|
70
71
|
"Content-Type": "application/json",
|
|
@@ -72,8 +73,8 @@ export async function getUploadUrls(siteId, files) {
|
|
|
72
73
|
body: JSON.stringify({ files }),
|
|
73
74
|
});
|
|
74
75
|
if (!response.ok) {
|
|
75
|
-
const error = await response.json().catch(() => ({}));
|
|
76
|
-
throw new Error(error.message || `Failed to
|
|
76
|
+
const error = (await response.json().catch(() => ({})));
|
|
77
|
+
throw new Error(error.message || `Failed to sync files: ${response.statusText}`);
|
|
77
78
|
}
|
|
78
79
|
return (await response.json());
|
|
79
80
|
}
|
|
@@ -93,12 +94,9 @@ export async function uploadToR2(uploadUrl, content, contentType) {
|
|
|
93
94
|
export async function getSiteStatus(siteId) {
|
|
94
95
|
const response = await apiRequest(`/api/cli/site/${siteId}/status`);
|
|
95
96
|
if (!response.ok) {
|
|
96
|
-
const error = await response.json().catch(() => ({}));
|
|
97
|
+
const error = (await response.json().catch(() => ({})));
|
|
97
98
|
throw new Error(error.message || `Failed to get site status: ${response.statusText}`);
|
|
98
99
|
}
|
|
99
100
|
return (await response.json());
|
|
100
101
|
}
|
|
101
|
-
export function hasValidAuth() {
|
|
102
|
-
return isAuthenticated();
|
|
103
|
-
}
|
|
104
102
|
//# sourceMappingURL=api-client.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-client.js","sourceRoot":"","sources":["../../lib/api-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,
|
|
1
|
+
{"version":3,"file":"api-client.js","sourceRoot":"","sources":["../../lib/api-client.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/auth.d.ts
CHANGED
|
@@ -11,11 +11,9 @@ interface UserInfo {
|
|
|
11
11
|
export declare function saveToken(token: string, username: string): void;
|
|
12
12
|
export declare function getToken(): TokenData | null;
|
|
13
13
|
export declare function removeToken(): Promise<void>;
|
|
14
|
-
export declare function isAuthenticated(): boolean;
|
|
15
14
|
export declare function getAuthHeaders(): Record<string, string> | null;
|
|
16
15
|
export declare function pollForToken(apiUrl: string, deviceCode: string, interval: number, expiresIn: number): Promise<string>;
|
|
17
|
-
export declare function requireAuth():
|
|
18
|
-
export declare function
|
|
19
|
-
export declare function getUserInfo(apiUrl: string, token: string): Promise<UserInfo>;
|
|
16
|
+
export declare function requireAuth(): Promise<UserInfo>;
|
|
17
|
+
export declare function getUserInfo(token: string): Promise<UserInfo>;
|
|
20
18
|
export {};
|
|
21
19
|
//# sourceMappingURL=auth.d.ts.map
|
package/dist/lib/auth.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../lib/auth.ts"],"names":[],"mappings":"AASA,UAAU,SAAS;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,UAAU,QAAQ;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAaD,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAY/D;AAMD,wBAAgB,QAAQ,IAAI,SAAS,GAAG,IAAI,CAY3C;AAKD,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAYjD;AAMD,wBAAgB,
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../lib/auth.ts"],"names":[],"mappings":"AASA,UAAU,SAAS;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,UAAU,QAAQ;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAaD,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAY/D;AAMD,wBAAgB,QAAQ,IAAI,SAAS,GAAG,IAAI,CAY3C;AAKD,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAYjD;AAMD,wBAAgB,cAAc,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAU9D;AAUD,wBAAsB,YAAY,CAChC,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,CAAC,CA8DjB;AAMD,wBAAsB,WAAW,IAAI,OAAO,CAAC,QAAQ,CAAC,CAcrD;AAOD,wBAAsB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAYlE"}
|
package/dist/lib/auth.js
CHANGED
|
@@ -42,10 +42,6 @@ export async function removeToken() {
|
|
|
42
42
|
}
|
|
43
43
|
}
|
|
44
44
|
}
|
|
45
|
-
export function isAuthenticated() {
|
|
46
|
-
const tokenData = getToken();
|
|
47
|
-
return tokenData !== null && !!tokenData.token;
|
|
48
|
-
}
|
|
49
45
|
export function getAuthHeaders() {
|
|
50
46
|
const tokenData = getToken();
|
|
51
47
|
if (!tokenData || !tokenData.token) {
|
|
@@ -101,23 +97,22 @@ export async function pollForToken(apiUrl, deviceCode, interval, expiresIn) {
|
|
|
101
97
|
}
|
|
102
98
|
throw new Error("Authorization timed out. Please try again.");
|
|
103
99
|
}
|
|
104
|
-
export function requireAuth() {
|
|
105
|
-
|
|
100
|
+
export async function requireAuth() {
|
|
101
|
+
try {
|
|
102
|
+
const tokenData = getToken();
|
|
103
|
+
if (!tokenData) {
|
|
104
|
+
throw new Error("Not authenticated");
|
|
105
|
+
}
|
|
106
|
+
return await getUserInfo(tokenData.token);
|
|
107
|
+
}
|
|
108
|
+
catch (error) {
|
|
106
109
|
displayError("You must be authenticated to use this command.\n" +
|
|
107
110
|
"Run `flowershow auth login` to authenticate.");
|
|
108
|
-
process.exit(
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
export async function getAuthenticatedUser() {
|
|
112
|
-
const tokenData = getToken();
|
|
113
|
-
if (!tokenData) {
|
|
114
|
-
throw new Error("Not authenticated");
|
|
111
|
+
process.exit(0);
|
|
115
112
|
}
|
|
116
|
-
const userInfo = await getUserInfo(API_URL, tokenData.token);
|
|
117
|
-
return userInfo;
|
|
118
113
|
}
|
|
119
|
-
export async function getUserInfo(
|
|
120
|
-
const response = await fetch(`${
|
|
114
|
+
export async function getUserInfo(token) {
|
|
115
|
+
const response = await fetch(`${API_URL}/api/cli/user`, {
|
|
121
116
|
headers: {
|
|
122
117
|
Authorization: `Bearer ${token}`,
|
|
123
118
|
},
|
package/dist/lib/auth.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../lib/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AACxE,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAErC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,aAAa,CAAC,CAAC;AAClD,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;AAyBlD,MAAM,UAAU,SAAS,CAAC,KAAa,EAAE,QAAgB;IACvD,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7C,CAAC;IAED,MAAM,IAAI,GAAc;QACtB,KAAK;QACL,QAAQ;QACR,OAAO,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KAClC,CAAC;IAEF,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AACpE,CAAC;AAMD,MAAM,UAAU,QAAQ;IACtB,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAC/C,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAc,CAAC;IACvC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,oCAAoC,CAAC,CAAC,CAAC;QAClE,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAKD,MAAM,CAAC,KAAK,UAAU,WAAW;IAC/B,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3B,IAAI,CAAC;YACH,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;YACvC,MAAM,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAC9B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAEf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACvD,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAMD,MAAM,UAAU,
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../lib/auth.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth-login.d.ts","sourceRoot":"","sources":["../../../lib/commands/auth-login.ts"],"names":[],"mappings":"AAkBA,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"auth-login.d.ts","sourceRoot":"","sources":["../../../lib/commands/auth-login.ts"],"names":[],"mappings":"AAkBA,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC,CA6FtD"}
|
|
@@ -30,11 +30,10 @@ export async function authLoginCommand() {
|
|
|
30
30
|
console.log(chalk.gray(`This code expires in ${Math.floor(expires_in / 60)} minutes\n`));
|
|
31
31
|
spinner.start("Waiting for authorization...");
|
|
32
32
|
const accessToken = await pollForToken(API_URL, device_code, interval, expires_in);
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
saveToken(accessToken, userInfo.username || userInfo.email || "user");
|
|
33
|
+
const user = await getUserInfo(accessToken);
|
|
34
|
+
saveToken(accessToken, user.username || user.email || "user");
|
|
36
35
|
spinner.succeed("Successfully authenticated!");
|
|
37
|
-
console.log(chalk.gray(`Logged in as: ${chalk.cyan(
|
|
36
|
+
console.log(chalk.gray(`Logged in as: ${chalk.cyan(user.username || user.email || "user")}`));
|
|
38
37
|
console.log(chalk.gray("\nYou can now use the CLI to publish your sites.\n"));
|
|
39
38
|
}
|
|
40
39
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth-login.js","sourceRoot":"","sources":["../../../lib/commands/auth-login.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AActC,MAAM,CAAC,KAAK,UAAU,gBAAgB;IACpC,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,GAAG,CAAC,8BAA8B,CAAC,CAAC,KAAK,EAAE,CAAC;QAG5D,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,2BAA2B,EAAE;YAClE,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;aACnC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,WAAW,EAAE,gBAAgB;aAC9B,CAAC;SACH,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CACb,sCAAsC,QAAQ,CAAC,UAAU,EAAE,CAC5D,CAAC;QACJ,CAAC;QAED,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAuB,CAAC;QAC3D,MAAM,EACJ,WAAW,EACX,SAAS,EACT,gBAAgB,EAChB,yBAAyB,EACzB,UAAU,EACV,QAAQ,GACT,GAAG,IAAI,CAAC;QAET,OAAO,CAAC,IAAI,EAAE,CAAC;QAGf,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAClE,CAAC;QACF,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,IAAI,CAAC,KAAK,yBAAyB,IAAI,gBAAgB,IAAI,CAAC,CACnE,CAAC;QAEF,IAAI,CAAC,yBAAyB,EAAE,CAAC;YAC/B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC,CAAC;YAC5D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,CAAC,CAAC;QACpD,CAAC;QAED,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,IAAI,CACR,wBAAwB,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,EAAE,CAAC,YAAY,CAChE,CACF,CAAC;QAEF,OAAO,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;QAG9C,MAAM,WAAW,GAAG,MAAM,YAAY,CACpC,OAAO,EACP,WAAW,EACX,QAAQ,EACR,UAAU,CACX,CAAC;
|
|
1
|
+
{"version":3,"file":"auth-login.js","sourceRoot":"","sources":["../../../lib/commands/auth-login.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth-status.d.ts","sourceRoot":"","sources":["../../../lib/commands/auth-status.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"auth-status.d.ts","sourceRoot":"","sources":["../../../lib/commands/auth-status.ts"],"names":[],"mappings":"AAQA,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAuCvD"}
|
|
@@ -2,7 +2,6 @@ import chalk from "chalk";
|
|
|
2
2
|
import ora from "ora";
|
|
3
3
|
import { getToken, getUserInfo } from "../auth.js";
|
|
4
4
|
import { displayError } from "../utils.js";
|
|
5
|
-
import { API_URL } from "../const.js";
|
|
6
5
|
export async function authStatusCommand() {
|
|
7
6
|
try {
|
|
8
7
|
const tokenData = getToken();
|
|
@@ -13,7 +12,7 @@ export async function authStatusCommand() {
|
|
|
13
12
|
}
|
|
14
13
|
const spinner = ora("Checking authentication status...").start();
|
|
15
14
|
try {
|
|
16
|
-
const userInfo = await getUserInfo(
|
|
15
|
+
const userInfo = await getUserInfo(tokenData.token);
|
|
17
16
|
spinner.succeed("Authenticated");
|
|
18
17
|
console.log(chalk.gray(`Logged in as: ${chalk.cyan(userInfo.username || userInfo.email || "user")}`));
|
|
19
18
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth-status.js","sourceRoot":"","sources":["../../../lib/commands/auth-status.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"auth-status.js","sourceRoot":"","sources":["../../../lib/commands/auth-status.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAK3C,MAAM,CAAC,KAAK,UAAU,iBAAiB;IACrC,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,QAAQ,EAAE,CAAC;QAE7B,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,yBAAyB,CAAC,CAAC,CAAC;YACrD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC,CAAC;YAC1E,OAAO;QACT,CAAC;QAED,MAAM,OAAO,GAAG,GAAG,CAAC,mCAAmC,CAAC,CAAC,KAAK,EAAE,CAAC;QAEjE,IAAI,CAAC;YAEH,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YAEpD,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;YACjC,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,IAAI,CACR,iBAAiB,KAAK,CAAC,IAAI,CACzB,QAAQ,CAAC,QAAQ,IAAI,QAAQ,CAAC,KAAK,IAAI,MAAM,CAC9C,EAAE,CACJ,CACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC,CAAC;YACtE,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAChE,CAAC;QACJ,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC5B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;QACzC,CAAC;aAAM,CAAC;YACN,YAAY,CAAC,2BAA2B,CAAC,CAAC;QAC5C,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"delete.d.ts","sourceRoot":"","sources":["../../../lib/commands/delete.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"delete.d.ts","sourceRoot":"","sources":["../../../lib/commands/delete.ts"],"names":[],"mappings":"AAUA,wBAAsB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA+EtE"}
|
|
@@ -1,34 +1,17 @@
|
|
|
1
1
|
import chalk from "chalk";
|
|
2
2
|
import ora from "ora";
|
|
3
3
|
import { confirm } from "@inquirer/prompts";
|
|
4
|
-
import {
|
|
4
|
+
import { requireAuth } from "../auth.js";
|
|
5
5
|
import { getSites, deleteSite } from "../api-client.js";
|
|
6
6
|
import { displayError, getSiteUrl, getDashboardUrl } from "../utils.js";
|
|
7
|
-
import { API_URL } from "../const.js";
|
|
8
|
-
function requireAuth() {
|
|
9
|
-
if (!isAuthenticated()) {
|
|
10
|
-
displayError("You must be authenticated to use this command.\n" +
|
|
11
|
-
"Run `flowershow auth login` to authenticate.");
|
|
12
|
-
process.exit(1);
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
async function getAuthenticatedUser() {
|
|
16
|
-
const tokenData = getToken();
|
|
17
|
-
if (!tokenData) {
|
|
18
|
-
throw new Error("Not authenticated");
|
|
19
|
-
}
|
|
20
|
-
const userInfo = await getUserInfo(API_URL, tokenData.token);
|
|
21
|
-
return userInfo;
|
|
22
|
-
}
|
|
23
7
|
export async function deleteCommand(projectName) {
|
|
24
8
|
try {
|
|
25
9
|
if (!projectName) {
|
|
26
10
|
displayError("Project name is required.\nUsage: flowershow delete <project-name>");
|
|
27
11
|
process.exit(1);
|
|
28
12
|
}
|
|
29
|
-
requireAuth();
|
|
13
|
+
const user = await requireAuth();
|
|
30
14
|
const spinner = ora(`Looking for site '${projectName}'...`).start();
|
|
31
|
-
const user = await getAuthenticatedUser();
|
|
32
15
|
const sitesData = await getSites();
|
|
33
16
|
const sites = sitesData.sites || [];
|
|
34
17
|
const siteToDelete = sites.find((s) => s.projectName === projectName);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"delete.js","sourceRoot":"","sources":["../../../lib/commands/delete.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"delete.js","sourceRoot":"","sources":["../../../lib/commands/delete.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../lib/commands/list.ts"],"names":[],"mappings":"AAUA,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../lib/commands/list.ts"],"names":[],"mappings":"AAUA,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CA6CjD"}
|
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
import chalk from "chalk";
|
|
2
2
|
import ora from "ora";
|
|
3
|
-
import {
|
|
3
|
+
import { requireAuth } from "../auth.js";
|
|
4
4
|
import { getSites } from "../api-client.js";
|
|
5
5
|
import { displayError, formatDate, getSiteUrl } from "../utils.js";
|
|
6
6
|
import { API_URL } from "../const.js";
|
|
7
7
|
export async function listCommand() {
|
|
8
8
|
try {
|
|
9
|
-
requireAuth();
|
|
9
|
+
const user = await requireAuth();
|
|
10
10
|
const spinner = ora("Fetching sites...").start();
|
|
11
|
-
const user = await getAuthenticatedUser();
|
|
12
11
|
const sitesData = await getSites();
|
|
13
12
|
const sites = sitesData.sites || [];
|
|
14
13
|
spinner.stop();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../../lib/commands/list.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../../lib/commands/list.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACnE,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAKtC,MAAM,CAAC,KAAK,UAAU,WAAW;IAC/B,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,WAAW,EAAE,CAAC;QAEjC,MAAM,OAAO,GAAG,GAAG,CAAC,mBAAmB,CAAC,CAAC,KAAK,EAAE,CAAC;QAGjD,MAAM,SAAS,GAAG,MAAM,QAAQ,EAAE,CAAC;QACnC,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,IAAI,EAAE,CAAC;QAEpC,OAAO,CAAC,IAAI,EAAE,CAAC;QAEf,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC;YAC/C,OAAO;QACT,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,KAAK,CAAC,MAAM,aAAa,CAAC,CAAC,CAAC;QAE9D,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,GAAG,GAAG,UAAU,CACpB,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,KAAK,IAAI,MAAM,CACtC,CAAC;YACF,MAAM,YAAY,GAAG,GAAG,OAAO,SAAS,IAAI,CAAC,EAAE,WAAW,CAAC;YAC3D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;YACjD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC,CAAC,CAAC;YAC3C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,sBAAsB,YAAY,EAAE,CAAC,CAAC,CAAC;YAC9D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;YACtE,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,IAAI,CACR,gBAAgB,UAAU,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,EAAE,CAC/D,CACF,CAAC;YACF,OAAO,CAAC,GAAG,EAAE,CAAC;QAChB,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC5B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;QACzC,CAAC;aAAM,CAAC;YACN,YAAY,CAAC,2BAA2B,CAAC,CAAC;QAC5C,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"publish.d.ts","sourceRoot":"","sources":["../../../lib/commands/publish.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"publish.d.ts","sourceRoot":"","sources":["../../../lib/commands/publish.ts"],"names":[],"mappings":"AAiEA,wBAAsB,cAAc,CAClC,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,EAC7B,SAAS,GAAE,OAAe,EAC1B,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC,CAgKf"}
|
|
@@ -3,11 +3,10 @@ import { resolve } from "path";
|
|
|
3
3
|
import chalk from "chalk";
|
|
4
4
|
import ora from "ora";
|
|
5
5
|
import cliProgress from "cli-progress";
|
|
6
|
-
import {
|
|
7
|
-
import { createSite, getUploadUrls, uploadToR2, getSiteByName, } from "../api-client.js";
|
|
6
|
+
import { createSite, syncFiles, uploadToR2, getSiteByName, } from "../api-client.js";
|
|
8
7
|
import { discoverFiles, getProjectName, validateFiles } from "../files.js";
|
|
9
8
|
import { displayPublishSuccess, displayError, displayWarning, waitForSync, } from "../utils.js";
|
|
10
|
-
import {
|
|
9
|
+
import { requireAuth } from "../auth.js";
|
|
11
10
|
function getContentType(extension) {
|
|
12
11
|
const contentTypes = {
|
|
13
12
|
md: "text/markdown",
|
|
@@ -36,27 +35,10 @@ function getContentType(extension) {
|
|
|
36
35
|
};
|
|
37
36
|
return contentTypes[extension] || "application/octet-stream";
|
|
38
37
|
}
|
|
39
|
-
function requireAuth() {
|
|
40
|
-
if (!isAuthenticated()) {
|
|
41
|
-
displayError("You must be authenticated to use this command.\n" +
|
|
42
|
-
"Run `flowershow auth login` to authenticate.");
|
|
43
|
-
process.exit(1);
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
async function getAuthenticatedUser() {
|
|
47
|
-
const tokenData = getToken();
|
|
48
|
-
if (!tokenData) {
|
|
49
|
-
throw new Error("Not authenticated");
|
|
50
|
-
}
|
|
51
|
-
const userInfo = await getUserInfo(API_URL, tokenData.token);
|
|
52
|
-
return userInfo;
|
|
53
|
-
}
|
|
54
38
|
export async function publishCommand(inputPaths, overwrite = false, siteName) {
|
|
55
39
|
try {
|
|
56
|
-
requireAuth();
|
|
57
40
|
const spinner = ora();
|
|
58
|
-
|
|
59
|
-
const user = await getAuthenticatedUser();
|
|
41
|
+
const user = await requireAuth();
|
|
60
42
|
spinner.succeed(`Publishing as: ${user.username || user.email}`);
|
|
61
43
|
spinner.start("Discovering files...");
|
|
62
44
|
const paths = Array.isArray(inputPaths) ? inputPaths : [inputPaths];
|
|
@@ -75,7 +57,7 @@ export async function publishCommand(inputPaths, overwrite = false, siteName) {
|
|
|
75
57
|
spinner.succeed(`Found ${files.length} file(s) to publish.`);
|
|
76
58
|
const existingSite = await getSiteByName(projectName);
|
|
77
59
|
if (existingSite && !overwrite) {
|
|
78
|
-
displayError(`A site named '${projectName}' already exists.\n` +
|
|
60
|
+
displayError(`A site named '${existingSite.site.projectName}' already exists.\n` +
|
|
79
61
|
`Please choose a different name or delete the existing site first.\n` +
|
|
80
62
|
`Use 'flowershow list' to see all sites.\n\n` +
|
|
81
63
|
`š” Tip: Use the --overwrite flag to publish over an existing site.`);
|
|
@@ -93,19 +75,28 @@ export async function publishCommand(inputPaths, overwrite = false, siteName) {
|
|
|
93
75
|
barIncompleteChar: "\u2591",
|
|
94
76
|
hideCursor: true,
|
|
95
77
|
}, cliProgress.Presets.shades_classic);
|
|
96
|
-
uploadBar.start(files.length, 0);
|
|
97
78
|
const fileMetadata = files.map((file) => ({
|
|
98
79
|
path: file.path,
|
|
99
80
|
size: file.size,
|
|
100
81
|
sha: file.sha,
|
|
101
82
|
}));
|
|
102
|
-
const
|
|
83
|
+
const syncPlan = await syncFiles(site.id, fileMetadata);
|
|
84
|
+
uploadBar.start(syncPlan.uploadUrls.length, 0);
|
|
103
85
|
const uploadResults = [];
|
|
104
|
-
for (let i = 0; i <
|
|
105
|
-
const
|
|
106
|
-
if (!
|
|
86
|
+
for (let i = 0; i < syncPlan.uploadUrls.length; i++) {
|
|
87
|
+
const uploadInfo = syncPlan.uploadUrls[i];
|
|
88
|
+
if (!uploadInfo)
|
|
107
89
|
continue;
|
|
108
|
-
const
|
|
90
|
+
const file = files.find((f) => f.path === uploadInfo.path);
|
|
91
|
+
if (!file) {
|
|
92
|
+
uploadResults.push({
|
|
93
|
+
path: uploadInfo.path,
|
|
94
|
+
success: false,
|
|
95
|
+
error: "File not found in local files",
|
|
96
|
+
});
|
|
97
|
+
uploadBar.increment();
|
|
98
|
+
continue;
|
|
99
|
+
}
|
|
109
100
|
if (!uploadInfo) {
|
|
110
101
|
uploadResults.push({
|
|
111
102
|
path: file.path,
|
|
@@ -150,7 +141,7 @@ export async function publishCommand(inputPaths, overwrite = false, siteName) {
|
|
|
150
141
|
else if (!syncResult.success && syncResult.errors) {
|
|
151
142
|
displayWarning("Some files had processing errors (see above).");
|
|
152
143
|
}
|
|
153
|
-
displayPublishSuccess(projectName, user.username || user.email || "user");
|
|
144
|
+
displayPublishSuccess(site.projectName, user.username || user.email || "user");
|
|
154
145
|
}
|
|
155
146
|
catch (error) {
|
|
156
147
|
if (error instanceof Error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"publish.js","sourceRoot":"","sources":["../../../lib/commands/publish.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,WAAW,MAAM,cAAc,CAAC;AACvC,OAAO,
|
|
1
|
+
{"version":3,"file":"publish.js","sourceRoot":"","sources":["../../../lib/commands/publish.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../../lib/commands/sync.ts"],"names":[],"mappings":"AAwGA,wBAAsB,WAAW,CAC/B,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE;IACP,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;CACd,GACL,OAAO,CAAC,IAAI,CAAC,CAuLf"}
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
import { existsSync } from "fs";
|
|
2
|
+
import { resolve } from "path";
|
|
3
|
+
import chalk from "chalk";
|
|
4
|
+
import ora from "ora";
|
|
5
|
+
import cliProgress from "cli-progress";
|
|
6
|
+
import { requireAuth } from "../auth.js";
|
|
7
|
+
import { syncFiles, uploadToR2, getSiteByName } from "../api-client.js";
|
|
8
|
+
import { discoverFiles, getProjectName, validateFiles } from "../files.js";
|
|
9
|
+
import { displayError, displayWarning, waitForSync } from "../utils.js";
|
|
10
|
+
function displaySyncSummary(syncPlan, projectName, verbose = false) {
|
|
11
|
+
console.log(chalk.bold(`\nSync Summary for '${projectName}':`));
|
|
12
|
+
if (syncPlan.summary.toUpload > 0) {
|
|
13
|
+
console.log(chalk.cyan(` š Files to upload: ${syncPlan.summary.toUpload}`));
|
|
14
|
+
for (const uploadUrl of syncPlan.uploadUrls) {
|
|
15
|
+
console.log(chalk.cyan(` + ${uploadUrl.path}`));
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
if (syncPlan.summary.toDelete > 0) {
|
|
19
|
+
console.log(chalk.yellow(` šļø Files to delete: ${syncPlan.summary.toDelete}`));
|
|
20
|
+
for (const deletedPath of syncPlan.deleted) {
|
|
21
|
+
console.log(chalk.yellow(` - ${deletedPath}`));
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
if (syncPlan.summary.unchanged > 0) {
|
|
25
|
+
if (verbose) {
|
|
26
|
+
console.log(chalk.green(` ā
Files unchanged: ${syncPlan.summary.unchanged}`));
|
|
27
|
+
for (const unchangedPath of syncPlan.unchanged) {
|
|
28
|
+
console.log(chalk.gray(` ⢠${unchangedPath}`));
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
console.log(chalk.green(` ā Files unchanged: ${syncPlan.summary.unchanged}`));
|
|
33
|
+
console.log(chalk.gray(`\nNote: Use --verbose to see all unchanged files`));
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
function hasChanges(syncPlan) {
|
|
38
|
+
return syncPlan.summary.toUpload > 0 || syncPlan.summary.toDelete > 0;
|
|
39
|
+
}
|
|
40
|
+
function displaySyncSuccess(projectName, username, summary) {
|
|
41
|
+
console.log(chalk.green.bold("\nā
Sync complete!"));
|
|
42
|
+
console.log(chalk.cyan(` Site: https://my.flowershow.app/@${username}/${projectName}`));
|
|
43
|
+
console.log(chalk.gray(` Uploaded: ${summary.toUpload} | Deleted: ${summary.toDelete} | Unchanged: ${summary.unchanged}`));
|
|
44
|
+
}
|
|
45
|
+
export async function syncCommand(inputPath, options = {}) {
|
|
46
|
+
try {
|
|
47
|
+
const spinner = ora();
|
|
48
|
+
const user = await requireAuth();
|
|
49
|
+
spinner.succeed(`Syncing as: ${user.username || user.email}`);
|
|
50
|
+
spinner.start("Discovering files...");
|
|
51
|
+
const absolutePath = resolve(inputPath);
|
|
52
|
+
if (!existsSync(absolutePath)) {
|
|
53
|
+
displayError(`Path not found: ${inputPath}`);
|
|
54
|
+
process.exit(1);
|
|
55
|
+
}
|
|
56
|
+
const files = discoverFiles(absolutePath);
|
|
57
|
+
validateFiles(files);
|
|
58
|
+
const projectName = options.name || getProjectName(files);
|
|
59
|
+
spinner.succeed(`Found ${files.length} file(s) in ${inputPath}`);
|
|
60
|
+
const existingSite = await getSiteByName(projectName);
|
|
61
|
+
if (!existingSite) {
|
|
62
|
+
displayError(`Site '${projectName}' not found.\n` +
|
|
63
|
+
`Use 'flowershow publish' to create it first, or specify a different site name with --name.`);
|
|
64
|
+
process.exit(1);
|
|
65
|
+
}
|
|
66
|
+
const fileMetadata = files.map((file) => ({
|
|
67
|
+
path: file.path,
|
|
68
|
+
size: file.size,
|
|
69
|
+
sha: file.sha,
|
|
70
|
+
}));
|
|
71
|
+
spinner.start("Analyzing changes...");
|
|
72
|
+
const syncPlan = await syncFiles(existingSite.site.id, fileMetadata, options.dryRun || false);
|
|
73
|
+
spinner.stop();
|
|
74
|
+
if (!hasChanges(syncPlan)) {
|
|
75
|
+
console.log(chalk.green.bold("\nā
Already in sync!"));
|
|
76
|
+
console.log(chalk.gray(` All ${files.length} file(s) are up to date.`));
|
|
77
|
+
console.log(chalk.cyan(` Site: https://my.flowershow.app/@${user.username || user.email}/${projectName}`));
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
displaySyncSummary(syncPlan, projectName, options.verbose || false);
|
|
81
|
+
if (options.dryRun || syncPlan.dryRun) {
|
|
82
|
+
console.log(chalk.yellow("\nš Dry run complete - no changes were made to your site"));
|
|
83
|
+
console.log(chalk.gray(" Run without --dry-run to apply these changes"));
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
if (syncPlan.uploadUrls.length > 0) {
|
|
87
|
+
const uploadBar = new cliProgress.SingleBar({
|
|
88
|
+
format: "Uploading |" +
|
|
89
|
+
chalk.cyan("{bar}") +
|
|
90
|
+
"| {percentage}% | {value}/{total} files",
|
|
91
|
+
barCompleteChar: "\u2588",
|
|
92
|
+
barIncompleteChar: "\u2591",
|
|
93
|
+
hideCursor: true,
|
|
94
|
+
}, cliProgress.Presets.shades_classic);
|
|
95
|
+
uploadBar.start(syncPlan.uploadUrls.length, 0);
|
|
96
|
+
const uploadResults = [];
|
|
97
|
+
for (let i = 0; i < syncPlan.uploadUrls.length; i++) {
|
|
98
|
+
const uploadInfo = syncPlan.uploadUrls[i];
|
|
99
|
+
if (!uploadInfo)
|
|
100
|
+
continue;
|
|
101
|
+
const file = files.find((f) => f.path === uploadInfo.path);
|
|
102
|
+
if (!file) {
|
|
103
|
+
uploadResults.push({
|
|
104
|
+
path: uploadInfo.path,
|
|
105
|
+
success: false,
|
|
106
|
+
error: "File not found in local files",
|
|
107
|
+
});
|
|
108
|
+
uploadBar.increment();
|
|
109
|
+
continue;
|
|
110
|
+
}
|
|
111
|
+
try {
|
|
112
|
+
await uploadToR2(uploadInfo.uploadUrl, file.content, uploadInfo.contentType);
|
|
113
|
+
uploadResults.push({ path: file.path, success: true });
|
|
114
|
+
uploadBar.increment();
|
|
115
|
+
}
|
|
116
|
+
catch (error) {
|
|
117
|
+
uploadResults.push({
|
|
118
|
+
path: file.path,
|
|
119
|
+
success: false,
|
|
120
|
+
error: error instanceof Error ? error.message : "Unknown error",
|
|
121
|
+
});
|
|
122
|
+
uploadBar.increment();
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
uploadBar.stop();
|
|
126
|
+
const failedUploads = uploadResults.filter((r) => !r.success);
|
|
127
|
+
if (failedUploads.length > 0) {
|
|
128
|
+
console.log(chalk.yellow(`ā ļø ${failedUploads.length} file(s) failed to upload`));
|
|
129
|
+
for (const result of failedUploads) {
|
|
130
|
+
console.log(chalk.yellow(` - ${result.path}: ${result.error}`));
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
else {
|
|
134
|
+
console.log(chalk.green(`ā Uploaded ${syncPlan.uploadUrls.length} file(s)`));
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
if (syncPlan.deleted.length > 0) {
|
|
138
|
+
console.log(chalk.green(`ā Deleted ${syncPlan.deleted.length} file(s)`));
|
|
139
|
+
}
|
|
140
|
+
const syncResult = await waitForSync(existingSite.site.id, 30);
|
|
141
|
+
if (syncResult.timeout) {
|
|
142
|
+
displayWarning("Some files are still processing after 30 seconds.\n" +
|
|
143
|
+
"Your site is available but some pages may not be ready yet.\n" +
|
|
144
|
+
"Check back in a moment.");
|
|
145
|
+
}
|
|
146
|
+
else if (!syncResult.success && syncResult.errors) {
|
|
147
|
+
displayWarning("Some files had processing errors (see above).");
|
|
148
|
+
}
|
|
149
|
+
displaySyncSuccess(projectName, user.username || user.email || "user", syncPlan.summary);
|
|
150
|
+
}
|
|
151
|
+
catch (error) {
|
|
152
|
+
if (error instanceof Error) {
|
|
153
|
+
displayError(error.message);
|
|
154
|
+
console.error(chalk.gray(error.stack));
|
|
155
|
+
}
|
|
156
|
+
else {
|
|
157
|
+
displayError("An unknown error occurred");
|
|
158
|
+
}
|
|
159
|
+
process.exit(1);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
//# sourceMappingURL=sync.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../../lib/commands/sync.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "flowershow",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.5",
|
|
4
4
|
"description": "CLI tool for publishing to FlowerShow",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/cli.js",
|
|
@@ -10,7 +10,8 @@
|
|
|
10
10
|
"scripts": {
|
|
11
11
|
"build": "tsc",
|
|
12
12
|
"dev": "tsx cli.ts",
|
|
13
|
-
"prepublishOnly": "pnpm run build"
|
|
13
|
+
"prepublishOnly": "pnpm run build",
|
|
14
|
+
"release": "changeset publish"
|
|
14
15
|
},
|
|
15
16
|
"keywords": [
|
|
16
17
|
"flowershow",
|