flowershow 0.1.10 → 0.2.1
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 +246 -10
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +70 -0
- package/dist/cli.js.map +1 -0
- package/dist/lib/api-client.d.ts +68 -0
- package/dist/lib/api-client.d.ts.map +1 -0
- package/dist/lib/api-client.js +104 -0
- package/dist/lib/api-client.js.map +1 -0
- package/dist/lib/auth.d.ts +21 -0
- package/dist/lib/auth.d.ts.map +1 -0
- package/dist/lib/auth.js +133 -0
- package/dist/lib/auth.js.map +1 -0
- package/dist/lib/commands/auth-login.d.ts +2 -0
- package/dist/lib/commands/auth-login.d.ts.map +1 -0
- package/dist/lib/commands/auth-login.js +55 -0
- package/dist/lib/commands/auth-login.js.map +1 -0
- package/dist/lib/commands/auth-logout.d.ts +2 -0
- package/dist/lib/commands/auth-logout.d.ts.map +1 -0
- package/dist/lib/commands/auth-logout.js +26 -0
- package/dist/lib/commands/auth-logout.js.map +1 -0
- package/dist/lib/commands/auth-status.d.ts +2 -0
- package/dist/lib/commands/auth-status.d.ts.map +1 -0
- package/dist/lib/commands/auth-status.js +36 -0
- package/dist/lib/commands/auth-status.js.map +1 -0
- package/dist/lib/commands/delete.d.ts +2 -0
- package/dist/lib/commands/delete.d.ts.map +1 -0
- package/dist/lib/commands/delete.js +80 -0
- package/dist/lib/commands/delete.js.map +1 -0
- package/dist/lib/commands/list.d.ts +2 -0
- package/dist/lib/commands/list.d.ts.map +1 -0
- package/dist/lib/commands/list.js +42 -0
- package/dist/lib/commands/list.js.map +1 -0
- package/dist/lib/commands/publish.d.ts +2 -0
- package/dist/lib/commands/publish.d.ts.map +1 -0
- package/dist/lib/commands/publish.js +166 -0
- package/dist/lib/commands/publish.js.map +1 -0
- package/dist/lib/const.d.ts +4 -0
- package/dist/lib/const.d.ts.map +1 -0
- package/dist/lib/const.js +4 -1
- package/dist/lib/const.js.map +1 -0
- package/dist/lib/files.d.ts +13 -0
- package/dist/lib/files.d.ts.map +1 -0
- package/dist/lib/files.js +156 -0
- package/dist/lib/files.js.map +1 -0
- package/dist/lib/utils.d.ts +22 -0
- package/dist/lib/utils.d.ts.map +1 -0
- package/dist/lib/utils.js +90 -0
- package/dist/lib/utils.js.map +1 -0
- package/package.json +36 -37
- package/dist/bin/cli.js +0 -97
- package/dist/index.js +0 -1
- package/dist/lib/Installer.js +0 -185
- package/dist/lib/build.js +0 -18
- package/dist/lib/buildExport.js +0 -11
- package/dist/lib/install.js +0 -28
- package/dist/lib/preview.js +0 -18
- package/dist/lib/publish.js +0 -8
- package/dist/lib/upgrade.js +0 -8
- package/dist/lib/utils/exit.js +0 -3
- package/dist/lib/utils/index.js +0 -5
- package/dist/lib/utils/isSubdir.js +0 -6
- package/dist/lib/utils/logger.js +0 -19
- package/dist/lib/utils/sendEvent.js +0 -5
- package/dist/lib/utils/spinner.js +0 -49
- package/dist/src/bin/cli.js +0 -97
- package/dist/src/index.js +0 -1
- package/dist/src/lib/Installer.js +0 -185
- package/dist/src/lib/build.js +0 -18
- package/dist/src/lib/buildExport.js +0 -11
- package/dist/src/lib/const.js +0 -1
- package/dist/src/lib/install.js +0 -28
- package/dist/src/lib/preview.js +0 -18
- package/dist/src/lib/publish.js +0 -8
- package/dist/src/lib/upgrade.js +0 -8
- package/dist/src/lib/utils/exit.js +0 -3
- package/dist/src/lib/utils/index.js +0 -5
- package/dist/src/lib/utils/isSubdir.js +0 -6
- package/dist/src/lib/utils/logger.js +0 -19
- package/dist/src/lib/utils/sendEvent.js +0 -5
- package/dist/src/lib/utils/spinner.js +0 -49
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"const.d.ts","sourceRoot":"","sources":["../../lib/const.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,CAAC;AAEvB,eAAO,MAAM,OAAO,QAAwD,CAAC;AAC7E,eAAO,MAAM,OAAO,QAAqD,CAAC"}
|
package/dist/lib/const.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"const.js","sourceRoot":"","sources":["../../lib/const.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,CAAC;AAEvB,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,8BAA8B,CAAC;AAC7E,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,2BAA2B,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export interface FileInfo {
|
|
2
|
+
originalPath: string;
|
|
3
|
+
path: string;
|
|
4
|
+
size: number;
|
|
5
|
+
sha: string;
|
|
6
|
+
extension: string;
|
|
7
|
+
content: Buffer;
|
|
8
|
+
projectName?: string;
|
|
9
|
+
}
|
|
10
|
+
export declare function discoverFiles(inputPaths: string | string[]): FileInfo[];
|
|
11
|
+
export declare function getProjectName(files: FileInfo[]): string;
|
|
12
|
+
export declare function validateFiles(files: FileInfo[]): boolean;
|
|
13
|
+
//# sourceMappingURL=files.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../../lib/files.ts"],"names":[],"mappings":"AA0BA,MAAM,WAAW,QAAQ;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAuFD,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,QAAQ,EAAE,CAmFvE;AAKD,wBAAgB,cAAc,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,MAAM,CASxD;AAKD,wBAAgB,aAAa,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,OAAO,CAWxD"}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
import { readFileSync, statSync, readdirSync, existsSync } from "fs";
|
|
2
|
+
import { join, basename, extname, relative, sep } from "path";
|
|
3
|
+
import { createHash } from "crypto";
|
|
4
|
+
import ignore from "ignore";
|
|
5
|
+
const DEFAULT_IGNORE_PATTERNS = [
|
|
6
|
+
".git/",
|
|
7
|
+
".gitignore",
|
|
8
|
+
"node_modules/",
|
|
9
|
+
".DS_Store",
|
|
10
|
+
"Thumbs.db",
|
|
11
|
+
".env",
|
|
12
|
+
".env.*",
|
|
13
|
+
"!.env.example",
|
|
14
|
+
"*.log",
|
|
15
|
+
".cache/",
|
|
16
|
+
"dist/",
|
|
17
|
+
"build/",
|
|
18
|
+
".next/",
|
|
19
|
+
".vercel/",
|
|
20
|
+
".turbo/",
|
|
21
|
+
"coverage/",
|
|
22
|
+
".nyc_output/",
|
|
23
|
+
];
|
|
24
|
+
function loadGitignore(baseDir) {
|
|
25
|
+
const ig = ignore();
|
|
26
|
+
ig.add(DEFAULT_IGNORE_PATTERNS);
|
|
27
|
+
const gitignorePath = join(baseDir, ".gitignore");
|
|
28
|
+
if (existsSync(gitignorePath)) {
|
|
29
|
+
try {
|
|
30
|
+
const gitignoreContent = readFileSync(gitignorePath, "utf-8");
|
|
31
|
+
ig.add(gitignoreContent);
|
|
32
|
+
}
|
|
33
|
+
catch (error) {
|
|
34
|
+
console.warn(`Warning: Could not read .gitignore file: ${error}`);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
return ig;
|
|
38
|
+
}
|
|
39
|
+
function shouldIncludeFile(filePath, ig) {
|
|
40
|
+
const normalizedPath = filePath.split(sep).join("/");
|
|
41
|
+
return !ig.ignores(normalizedPath);
|
|
42
|
+
}
|
|
43
|
+
function calculateSha(content) {
|
|
44
|
+
return createHash("sha1").update(content).digest("hex");
|
|
45
|
+
}
|
|
46
|
+
function getExtension(filePath) {
|
|
47
|
+
const ext = extname(filePath);
|
|
48
|
+
return ext ? ext.slice(1).toLowerCase() : "";
|
|
49
|
+
}
|
|
50
|
+
function scanDirectory(dirPath, baseDir = dirPath) {
|
|
51
|
+
const files = [];
|
|
52
|
+
const ig = loadGitignore(baseDir);
|
|
53
|
+
function scan(currentPath) {
|
|
54
|
+
const entries = readdirSync(currentPath, { withFileTypes: true });
|
|
55
|
+
for (const entry of entries) {
|
|
56
|
+
const fullPath = join(currentPath, entry.name);
|
|
57
|
+
const relativePath = relative(baseDir, fullPath);
|
|
58
|
+
if (!shouldIncludeFile(relativePath, ig)) {
|
|
59
|
+
continue;
|
|
60
|
+
}
|
|
61
|
+
if (entry.isDirectory()) {
|
|
62
|
+
scan(fullPath);
|
|
63
|
+
}
|
|
64
|
+
else if (entry.isFile()) {
|
|
65
|
+
files.push(fullPath);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
scan(dirPath);
|
|
70
|
+
return files;
|
|
71
|
+
}
|
|
72
|
+
export function discoverFiles(inputPaths) {
|
|
73
|
+
const paths = Array.isArray(inputPaths) ? inputPaths : [inputPaths];
|
|
74
|
+
if (paths.length === 0) {
|
|
75
|
+
throw new Error("No paths provided");
|
|
76
|
+
}
|
|
77
|
+
const allFiles = [];
|
|
78
|
+
let projectName = null;
|
|
79
|
+
for (let i = 0; i < paths.length; i++) {
|
|
80
|
+
const inputPath = paths[i];
|
|
81
|
+
if (!inputPath)
|
|
82
|
+
continue;
|
|
83
|
+
const stats = statSync(inputPath);
|
|
84
|
+
const isFirstPath = i === 0;
|
|
85
|
+
if (stats.isFile()) {
|
|
86
|
+
const extension = getExtension(inputPath);
|
|
87
|
+
const fileName = basename(inputPath, extname(inputPath));
|
|
88
|
+
const content = readFileSync(inputPath);
|
|
89
|
+
let targetPath;
|
|
90
|
+
if (isFirstPath) {
|
|
91
|
+
targetPath = extension === "mdx" ? "README.mdx" : "README.md";
|
|
92
|
+
projectName = fileName;
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
targetPath = basename(inputPath);
|
|
96
|
+
}
|
|
97
|
+
allFiles.push({
|
|
98
|
+
originalPath: inputPath,
|
|
99
|
+
path: targetPath,
|
|
100
|
+
size: stats.size,
|
|
101
|
+
sha: calculateSha(content),
|
|
102
|
+
extension,
|
|
103
|
+
content,
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
else if (stats.isDirectory()) {
|
|
107
|
+
const dirName = basename(inputPath);
|
|
108
|
+
const dirFiles = scanDirectory(inputPath);
|
|
109
|
+
if (isFirstPath && !projectName) {
|
|
110
|
+
projectName = dirName;
|
|
111
|
+
}
|
|
112
|
+
for (const filePath of dirFiles) {
|
|
113
|
+
const content = readFileSync(filePath);
|
|
114
|
+
const extension = getExtension(filePath);
|
|
115
|
+
const relativePath = relative(inputPath, filePath);
|
|
116
|
+
const fileStats = statSync(filePath);
|
|
117
|
+
allFiles.push({
|
|
118
|
+
originalPath: filePath,
|
|
119
|
+
path: relativePath,
|
|
120
|
+
size: fileStats.size,
|
|
121
|
+
sha: calculateSha(content),
|
|
122
|
+
extension,
|
|
123
|
+
content,
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
else {
|
|
128
|
+
throw new Error(`Invalid path: ${inputPath} is neither a file nor a directory`);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
if (allFiles.length > 0 && projectName) {
|
|
132
|
+
allFiles[0].projectName = projectName;
|
|
133
|
+
}
|
|
134
|
+
return allFiles;
|
|
135
|
+
}
|
|
136
|
+
export function getProjectName(files) {
|
|
137
|
+
if (files.length === 0) {
|
|
138
|
+
throw new Error("No files discovered");
|
|
139
|
+
}
|
|
140
|
+
const projectName = files[0]?.projectName;
|
|
141
|
+
if (!projectName) {
|
|
142
|
+
throw new Error("Project name not found in files");
|
|
143
|
+
}
|
|
144
|
+
return projectName;
|
|
145
|
+
}
|
|
146
|
+
export function validateFiles(files) {
|
|
147
|
+
if (files.length === 0) {
|
|
148
|
+
throw new Error("No files found to publish");
|
|
149
|
+
}
|
|
150
|
+
const hasMarkdown = files.some((f) => ["md", "mdx"].includes(f.extension));
|
|
151
|
+
if (!hasMarkdown) {
|
|
152
|
+
console.warn("Warning: No markdown files found. The site will be empty.");
|
|
153
|
+
}
|
|
154
|
+
return true;
|
|
155
|
+
}
|
|
156
|
+
//# sourceMappingURL=files.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"files.js","sourceRoot":"","sources":["../../lib/files.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
interface BlobStatus {
|
|
2
|
+
path: string;
|
|
3
|
+
syncStatus: "PENDING" | "SUCCESS" | "ERROR";
|
|
4
|
+
syncError?: string;
|
|
5
|
+
}
|
|
6
|
+
interface SyncResult {
|
|
7
|
+
success: boolean;
|
|
8
|
+
blobs: BlobStatus[];
|
|
9
|
+
errors?: BlobStatus[];
|
|
10
|
+
timeout?: boolean;
|
|
11
|
+
}
|
|
12
|
+
export declare function sleep(ms: number): Promise<void>;
|
|
13
|
+
export declare function formatDate(date: string | Date): string;
|
|
14
|
+
export declare function getSiteUrl(projectName: string, username: string): string;
|
|
15
|
+
export declare function getDashboardUrl(siteId: string): string;
|
|
16
|
+
export declare function waitForSync(siteId: string, maxWaitSeconds?: number): Promise<SyncResult>;
|
|
17
|
+
export declare function displayPublishSuccess(projectName: string, username: string): void;
|
|
18
|
+
export declare function displayError(message: string): void;
|
|
19
|
+
export declare function displayWarning(message: string): void;
|
|
20
|
+
export declare function displayInfo(message: string): void;
|
|
21
|
+
export {};
|
|
22
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../lib/utils.ts"],"names":[],"mappings":"AAKA,UAAU,UAAU;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;IAC5C,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAcD,UAAU,UAAU;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,MAAM,CAAC,EAAE,UAAU,EAAE,CAAC;IACtB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAKD,wBAAgB,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE/C;AAKD,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAEtD;AAKD,wBAAgB,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAExE;AAKD,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEtD;AAMD,wBAAsB,WAAW,CAC/B,MAAM,EAAE,MAAM,EACd,cAAc,GAAE,MAAY,GAC3B,OAAO,CAAC,UAAU,CAAC,CAwFrB;AAKD,wBAAgB,qBAAqB,CACnC,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,GACf,IAAI,CAIN;AAKD,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAElD;AAKD,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAEpD;AAKD,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAEjD"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import chalk from "chalk";
|
|
2
|
+
import cliProgress from "cli-progress";
|
|
3
|
+
import { getSiteStatus } from "./api-client.js";
|
|
4
|
+
import { API_URL, APP_URL } from "./const.js";
|
|
5
|
+
export function sleep(ms) {
|
|
6
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
7
|
+
}
|
|
8
|
+
export function formatDate(date) {
|
|
9
|
+
return new Date(date).toLocaleString();
|
|
10
|
+
}
|
|
11
|
+
export function getSiteUrl(projectName, username) {
|
|
12
|
+
return `${APP_URL}/@${username}/${projectName}`;
|
|
13
|
+
}
|
|
14
|
+
export function getDashboardUrl(siteId) {
|
|
15
|
+
return `${API_URL}/site/${siteId}/settings`;
|
|
16
|
+
}
|
|
17
|
+
export async function waitForSync(siteId, maxWaitSeconds = 180) {
|
|
18
|
+
const startTime = Date.now();
|
|
19
|
+
const maxWaitMs = maxWaitSeconds * 1000;
|
|
20
|
+
let progressBar = null;
|
|
21
|
+
let totalFiles = 0;
|
|
22
|
+
while (Date.now() - startTime < maxWaitMs) {
|
|
23
|
+
const statusData = await getSiteStatus(siteId);
|
|
24
|
+
const blobs = statusData.blobs || [];
|
|
25
|
+
if (blobs.length === 0) {
|
|
26
|
+
if (progressBar) {
|
|
27
|
+
progressBar.stop();
|
|
28
|
+
}
|
|
29
|
+
return { success: true, blobs: [] };
|
|
30
|
+
}
|
|
31
|
+
const pending = blobs.filter((b) => b.syncStatus === "PENDING");
|
|
32
|
+
const errors = blobs.filter((b) => b.syncStatus === "ERROR");
|
|
33
|
+
const success = blobs.filter((b) => b.syncStatus === "SUCCESS");
|
|
34
|
+
if (!progressBar && blobs.length > 0) {
|
|
35
|
+
totalFiles = blobs.length;
|
|
36
|
+
progressBar = new cliProgress.SingleBar({
|
|
37
|
+
format: "Processing |" +
|
|
38
|
+
chalk.cyan("{bar}") +
|
|
39
|
+
"| {percentage}% | {value}/{total} files",
|
|
40
|
+
barCompleteChar: "\u2588",
|
|
41
|
+
barIncompleteChar: "\u2591",
|
|
42
|
+
hideCursor: true,
|
|
43
|
+
}, cliProgress.Presets.shades_classic);
|
|
44
|
+
progressBar.start(totalFiles, success.length);
|
|
45
|
+
}
|
|
46
|
+
if (progressBar) {
|
|
47
|
+
progressBar.update(success.length + errors.length);
|
|
48
|
+
}
|
|
49
|
+
if (pending.length === 0) {
|
|
50
|
+
if (progressBar) {
|
|
51
|
+
progressBar.stop();
|
|
52
|
+
}
|
|
53
|
+
if (errors.length > 0) {
|
|
54
|
+
console.log(chalk.yellow(`\n⚠️ ${errors.length} file(s) had errors:`));
|
|
55
|
+
for (const blob of errors) {
|
|
56
|
+
console.log(chalk.yellow(` - ${blob.path}: ${blob.syncError || "Unknown error"}`));
|
|
57
|
+
}
|
|
58
|
+
return { success: false, blobs, errors };
|
|
59
|
+
}
|
|
60
|
+
console.log(chalk.green(`✓ All files processed successfully`));
|
|
61
|
+
return { success: true, blobs };
|
|
62
|
+
}
|
|
63
|
+
await sleep(500);
|
|
64
|
+
}
|
|
65
|
+
if (progressBar) {
|
|
66
|
+
progressBar.stop();
|
|
67
|
+
}
|
|
68
|
+
const statusData = await getSiteStatus(siteId);
|
|
69
|
+
const blobs = statusData.blobs || [];
|
|
70
|
+
const pending = blobs.filter((b) => b.syncStatus === "PENDING");
|
|
71
|
+
console.log(chalk.yellow(`\n⚠️ Timeout: ${pending.length} file(s) still processing`));
|
|
72
|
+
for (const blob of pending) {
|
|
73
|
+
console.log(chalk.yellow(` - ${blob.path}`));
|
|
74
|
+
}
|
|
75
|
+
return { success: false, blobs, timeout: true };
|
|
76
|
+
}
|
|
77
|
+
export function displayPublishSuccess(projectName, username) {
|
|
78
|
+
const url = getSiteUrl(projectName, username);
|
|
79
|
+
console.log(chalk.cyan(`\n💐 Visit your site at: ${url}\n`));
|
|
80
|
+
}
|
|
81
|
+
export function displayError(message) {
|
|
82
|
+
console.error(chalk.red(`\n✗ Error: ${message}\n`));
|
|
83
|
+
}
|
|
84
|
+
export function displayWarning(message) {
|
|
85
|
+
console.warn(chalk.yellow(`\n⚠️ Warning: ${message}\n`));
|
|
86
|
+
}
|
|
87
|
+
export function displayInfo(message) {
|
|
88
|
+
console.log(chalk.blue(`ℹ ${message}`));
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../lib/utils.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,55 +1,54 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "flowershow",
|
|
3
|
-
"version": "0.1
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "0.2.1",
|
|
4
|
+
"description": "CLI tool for publishing to FlowerShow",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/cli.js",
|
|
5
7
|
"bin": {
|
|
6
|
-
"flowershow": "dist/
|
|
8
|
+
"flowershow": "./dist/cli.js"
|
|
7
9
|
},
|
|
8
10
|
"scripts": {
|
|
9
|
-
"build": "tsc
|
|
10
|
-
"
|
|
11
|
-
"
|
|
12
|
-
},
|
|
13
|
-
"repository": {
|
|
14
|
-
"type": "git",
|
|
15
|
-
"url": "git+https://github.com/flowershow/flowershow",
|
|
16
|
-
"directory": "packages/cli"
|
|
11
|
+
"build": "tsc",
|
|
12
|
+
"dev": "tsx cli.ts",
|
|
13
|
+
"prepublishOnly": "pnpm run build"
|
|
17
14
|
},
|
|
18
|
-
"files": [
|
|
19
|
-
"./dist"
|
|
20
|
-
],
|
|
21
15
|
"keywords": [
|
|
22
16
|
"flowershow",
|
|
23
|
-
"cli"
|
|
17
|
+
"cli",
|
|
18
|
+
"publish",
|
|
19
|
+
"markdown"
|
|
24
20
|
],
|
|
25
|
-
"author": "
|
|
21
|
+
"author": "Flowershow",
|
|
26
22
|
"license": "MIT",
|
|
23
|
+
"repository": {
|
|
24
|
+
"type": "git",
|
|
25
|
+
"url": "https://github.com/flowershow/cli"
|
|
26
|
+
},
|
|
27
27
|
"bugs": {
|
|
28
28
|
"url": "https://github.com/flowershow/flowershow/issues"
|
|
29
29
|
},
|
|
30
|
-
"homepage": "https://
|
|
31
|
-
"publishConfig": {
|
|
32
|
-
"access": "public"
|
|
33
|
-
},
|
|
30
|
+
"homepage": "https://flowershow.app",
|
|
34
31
|
"dependencies": {
|
|
35
|
-
"
|
|
36
|
-
"
|
|
37
|
-
"
|
|
38
|
-
"
|
|
39
|
-
"
|
|
40
|
-
"
|
|
41
|
-
"
|
|
32
|
+
"@inquirer/prompts": "^8.1.0",
|
|
33
|
+
"@types/cli-progress": "^3.11.6",
|
|
34
|
+
"chalk": "^5.3.0",
|
|
35
|
+
"cli-progress": "^3.12.0",
|
|
36
|
+
"commander": "^11.0.0",
|
|
37
|
+
"dotenv": "^16.6.1",
|
|
38
|
+
"ignore": "^7.0.5",
|
|
39
|
+
"ora": "^9.0.0"
|
|
42
40
|
},
|
|
43
|
-
"type": "module",
|
|
44
41
|
"engines": {
|
|
45
|
-
"node": ">=
|
|
42
|
+
"node": ">=18.0.0"
|
|
46
43
|
},
|
|
47
44
|
"devDependencies": {
|
|
48
|
-
"@
|
|
49
|
-
"@types/
|
|
50
|
-
"
|
|
51
|
-
"
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
45
|
+
"@changesets/cli": "^2.29.8",
|
|
46
|
+
"@types/node": "^25.0.3",
|
|
47
|
+
"tsx": "^4.21.0",
|
|
48
|
+
"typescript": "^5.9.3"
|
|
49
|
+
},
|
|
50
|
+
"files": [
|
|
51
|
+
"dist",
|
|
52
|
+
"README.md"
|
|
53
|
+
]
|
|
54
|
+
}
|
package/dist/bin/cli.js
DELETED
|
@@ -1,97 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import { createRequire } from "node:module";
|
|
3
|
-
const require = createRequire(import.meta.url);
|
|
4
|
-
import { warn, exit, sendEvent } from "../lib/utils/index.js";
|
|
5
|
-
import { Command } from "commander";
|
|
6
|
-
// TODO check current vs required node version (package.json engines)
|
|
7
|
-
// const requiredNodeVersion = require("../package.json").engines.node;
|
|
8
|
-
const { version: cli } = require("../../package.json");
|
|
9
|
-
// simplify importing data from package.json with this line after we no longer want to support node 16
|
|
10
|
-
// import packageJson from "#package.json" assert { type: "json" };
|
|
11
|
-
const { version: node, platform, argv } = process;
|
|
12
|
-
if (platform === "win32") {
|
|
13
|
-
warn("This may not work as expected. You're trying to run Flowershow CLI on Windows, which is not thoroughly tested. Please submit an issue if you encounter any problems: https://github.com/flowershow/flowershow/issues");
|
|
14
|
-
}
|
|
15
|
-
const [, , cmd, ...args] = argv;
|
|
16
|
-
sendEvent({
|
|
17
|
-
event: "cli-usage",
|
|
18
|
-
action: cmd,
|
|
19
|
-
meta: {
|
|
20
|
-
args,
|
|
21
|
-
cli,
|
|
22
|
-
node,
|
|
23
|
-
platform,
|
|
24
|
-
},
|
|
25
|
-
});
|
|
26
|
-
process.on("uncaughtException", () => {
|
|
27
|
-
sendEvent({
|
|
28
|
-
event: "cli-error",
|
|
29
|
-
action: cmd,
|
|
30
|
-
meta: {
|
|
31
|
-
args,
|
|
32
|
-
cli,
|
|
33
|
-
node,
|
|
34
|
-
platform,
|
|
35
|
-
},
|
|
36
|
-
});
|
|
37
|
-
exit(1);
|
|
38
|
-
});
|
|
39
|
-
// CLI commands
|
|
40
|
-
const program = new Command();
|
|
41
|
-
program
|
|
42
|
-
.description("CLI tool for creating, publishing and upgrading Flowershow apps")
|
|
43
|
-
.version(require("../../package.json").version)
|
|
44
|
-
.usage("<command> [options]");
|
|
45
|
-
// choose template
|
|
46
|
-
program
|
|
47
|
-
.command("install")
|
|
48
|
-
.description("install Flowershow template in target directory")
|
|
49
|
-
.argument("[target-dir]", "Path to the folder where you want Flowershow template to be installed", ".")
|
|
50
|
-
// .option('-t, --template [template-name]', 'Flowershow template name to use', 'default')
|
|
51
|
-
.action(async (targetDir) => {
|
|
52
|
-
const { default: install } = await import("../lib/install.js");
|
|
53
|
-
install(targetDir);
|
|
54
|
-
});
|
|
55
|
-
program
|
|
56
|
-
.command("build")
|
|
57
|
-
.description("build Flowershow website")
|
|
58
|
-
.argument("[project-dir]", "Path to the folder where Flowershow template is installed (root folder of .flowershow)", ".")
|
|
59
|
-
.action(async (projectPath) => {
|
|
60
|
-
const { default: build } = await import("../lib/build.js");
|
|
61
|
-
build(projectPath);
|
|
62
|
-
});
|
|
63
|
-
program
|
|
64
|
-
.command("export")
|
|
65
|
-
.description("build a static Flowershow website")
|
|
66
|
-
.argument("[project-dir]", "Path to the folder where Flowershow template is installed (root folder of .flowershow)", ".")
|
|
67
|
-
.action(async (projectPath) => {
|
|
68
|
-
const { default: buildExport } = await import("../lib/buildExport.js");
|
|
69
|
-
buildExport(projectPath);
|
|
70
|
-
});
|
|
71
|
-
program
|
|
72
|
-
.command("preview")
|
|
73
|
-
.description("preview your Flowershow site")
|
|
74
|
-
.argument("[project-dir]", "Path to the folder where Flowershow template is installed (root folder of .flowershow)", ".")
|
|
75
|
-
.action(async (projectPath) => {
|
|
76
|
-
const { default: preview } = await import("../lib/preview.js");
|
|
77
|
-
preview(projectPath);
|
|
78
|
-
});
|
|
79
|
-
// TBD
|
|
80
|
-
program
|
|
81
|
-
.command("publish")
|
|
82
|
-
.description("publish files or directories")
|
|
83
|
-
.argument("[path]", "path to a file or a directory", ".")
|
|
84
|
-
.option("-g, --glob <pattern>", "glob pattern")
|
|
85
|
-
.action(async () => {
|
|
86
|
-
const { default: publish } = await import("../lib/publish.js");
|
|
87
|
-
publish();
|
|
88
|
-
});
|
|
89
|
-
// TBD
|
|
90
|
-
program
|
|
91
|
-
.command("upgrade")
|
|
92
|
-
.description("upgrade your Flowershow template to the latest version")
|
|
93
|
-
.action(async () => {
|
|
94
|
-
const { default: upgrade } = await import("../lib/upgrade.js");
|
|
95
|
-
upgrade();
|
|
96
|
-
});
|
|
97
|
-
program.parse();
|
package/dist/index.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
// export * from './lib/cli';
|