cmssy-cli 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +235 -0
  3. package/dist/cli.d.ts +3 -0
  4. package/dist/cli.d.ts.map +1 -0
  5. package/dist/cli.js +71 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/commands/build.d.ts +6 -0
  8. package/dist/commands/build.d.ts.map +1 -0
  9. package/dist/commands/build.js +153 -0
  10. package/dist/commands/build.js.map +1 -0
  11. package/dist/commands/configure.d.ts +6 -0
  12. package/dist/commands/configure.d.ts.map +1 -0
  13. package/dist/commands/configure.js +42 -0
  14. package/dist/commands/configure.js.map +1 -0
  15. package/dist/commands/create.d.ts +8 -0
  16. package/dist/commands/create.d.ts.map +1 -0
  17. package/dist/commands/create.js +314 -0
  18. package/dist/commands/create.js.map +1 -0
  19. package/dist/commands/deploy.d.ts +9 -0
  20. package/dist/commands/deploy.d.ts.map +1 -0
  21. package/dist/commands/deploy.js +226 -0
  22. package/dist/commands/deploy.js.map +1 -0
  23. package/dist/commands/dev.d.ts +6 -0
  24. package/dist/commands/dev.d.ts.map +1 -0
  25. package/dist/commands/dev.js +489 -0
  26. package/dist/commands/dev.js.map +1 -0
  27. package/dist/commands/init.d.ts +6 -0
  28. package/dist/commands/init.d.ts.map +1 -0
  29. package/dist/commands/init.js +517 -0
  30. package/dist/commands/init.js.map +1 -0
  31. package/dist/commands/sync.d.ts +6 -0
  32. package/dist/commands/sync.d.ts.map +1 -0
  33. package/dist/commands/sync.js +208 -0
  34. package/dist/commands/sync.js.map +1 -0
  35. package/dist/utils/blockforge-config.d.ts +19 -0
  36. package/dist/utils/blockforge-config.d.ts.map +1 -0
  37. package/dist/utils/blockforge-config.js +19 -0
  38. package/dist/utils/blockforge-config.js.map +1 -0
  39. package/dist/utils/cmssy-config.d.ts +19 -0
  40. package/dist/utils/cmssy-config.d.ts.map +1 -0
  41. package/dist/utils/cmssy-config.js +19 -0
  42. package/dist/utils/cmssy-config.js.map +1 -0
  43. package/dist/utils/config.d.ts +8 -0
  44. package/dist/utils/config.d.ts.map +1 -0
  45. package/dist/utils/config.js +45 -0
  46. package/dist/utils/config.js.map +1 -0
  47. package/dist/utils/graphql.d.ts +4 -0
  48. package/dist/utils/graphql.d.ts.map +1 -0
  49. package/dist/utils/graphql.js +26 -0
  50. package/dist/utils/graphql.js.map +1 -0
  51. package/package.json +66 -0
@@ -0,0 +1,208 @@
1
+ import chalk from "chalk";
2
+ import fs from "fs-extra";
3
+ import inquirer from "inquirer";
4
+ import ora from "ora";
5
+ import path from "path";
6
+ import { hasConfig, loadConfig } from "../utils/config.js";
7
+ import { createClient } from "../utils/graphql.js";
8
+ const INSTALLED_PACKAGES_QUERY = `
9
+ query GetInstalledPackages($workspaceId: ID!) {
10
+ workspace(id: $workspaceId) {
11
+ id
12
+ name
13
+ installedPackages {
14
+ id
15
+ package {
16
+ id
17
+ slug
18
+ displayName
19
+ packageType
20
+ currentVersion {
21
+ version
22
+ componentUrl
23
+ cssUrl
24
+ packageJsonUrl
25
+ schemaFields
26
+ defaultContent
27
+ }
28
+ }
29
+ }
30
+ }
31
+ }
32
+ `;
33
+ export async function syncCommand(packageSlug, options) {
34
+ console.log(chalk.blue.bold("\n🔨 Cmssy - Sync Blocks\n"));
35
+ // Check configuration
36
+ if (!hasConfig()) {
37
+ console.error(chalk.red("✖ Not configured. Run: cmssy configure\n"));
38
+ process.exit(1);
39
+ }
40
+ const config = loadConfig();
41
+ // Check if we're in a cmssy project
42
+ const configPath = path.join(process.cwd(), "cmssy.config.js");
43
+ if (!fs.existsSync(configPath)) {
44
+ console.error(chalk.red("✖ Not a cmssy project (missing cmssy.config.js)\n"));
45
+ process.exit(1);
46
+ }
47
+ // Get workspace ID
48
+ let workspaceId = options.workspace;
49
+ if (!workspaceId) {
50
+ const answer = await inquirer.prompt([
51
+ {
52
+ type: "input",
53
+ name: "workspaceId",
54
+ message: "Enter Workspace ID:",
55
+ validate: (input) => {
56
+ if (!input) {
57
+ return "Workspace ID is required";
58
+ }
59
+ return true;
60
+ },
61
+ },
62
+ ]);
63
+ workspaceId = answer.workspaceId;
64
+ }
65
+ // Fetch installed packages
66
+ const spinner = ora("Fetching installed packages...").start();
67
+ const client = createClient();
68
+ try {
69
+ const result = await client.request(INSTALLED_PACKAGES_QUERY, {
70
+ workspaceId,
71
+ });
72
+ spinner.succeed(chalk.green("Fetched installed packages"));
73
+ const workspace = result.workspace;
74
+ if (!workspace) {
75
+ console.error(chalk.red("✖ Workspace not found\n"));
76
+ process.exit(1);
77
+ }
78
+ const installedPackages = workspace.installedPackages || [];
79
+ if (installedPackages.length === 0) {
80
+ console.log(chalk.yellow("âš  No packages installed in this workspace\n"));
81
+ return;
82
+ }
83
+ // Filter by package slug if provided
84
+ let packagesToSync = installedPackages;
85
+ if (packageSlug) {
86
+ packagesToSync = installedPackages.filter((ip) => ip.package.slug === packageSlug);
87
+ if (packagesToSync.length === 0) {
88
+ console.error(chalk.red(`✖ Package "${packageSlug}" not found in workspace\n`));
89
+ process.exit(1);
90
+ }
91
+ }
92
+ console.log(chalk.cyan(`\nFound ${packagesToSync.length} package(s) to sync:\n`));
93
+ packagesToSync.forEach((ip) => {
94
+ console.log(chalk.white(` • ${ip.package.slug} v${ip.package.currentVersion.version} (${ip.package.packageType})`));
95
+ });
96
+ console.log("");
97
+ // Sync each package
98
+ let successCount = 0;
99
+ let errorCount = 0;
100
+ for (const installedPkg of packagesToSync) {
101
+ const pkg = installedPkg.package;
102
+ const pkgSpinner = ora(`Syncing ${pkg.slug}...`).start();
103
+ try {
104
+ await syncPackage(pkg);
105
+ pkgSpinner.succeed(chalk.green(`${pkg.slug} synced`));
106
+ successCount++;
107
+ }
108
+ catch (error) {
109
+ pkgSpinner.fail(chalk.red(`${pkg.slug} failed`));
110
+ console.error(chalk.red(` Error: ${error.message}\n`));
111
+ errorCount++;
112
+ }
113
+ }
114
+ console.log("");
115
+ if (errorCount === 0) {
116
+ console.log(chalk.green.bold(`✓ ${successCount} package(s) synced\n`));
117
+ }
118
+ else {
119
+ console.log(chalk.yellow(`âš  ${successCount} succeeded, ${errorCount} failed\n`));
120
+ }
121
+ }
122
+ catch (error) {
123
+ spinner.fail(chalk.red("Failed to fetch packages"));
124
+ console.error(chalk.red(` Error: ${error.message}\n`));
125
+ process.exit(1);
126
+ }
127
+ }
128
+ async function syncPackage(pkg) {
129
+ const { slug, packageType, displayName, currentVersion } = pkg;
130
+ // Determine target directory
131
+ const targetDir = packageType === "block"
132
+ ? path.join(process.cwd(), "blocks", getPackageName(slug))
133
+ : path.join(process.cwd(), "templates", getPackageName(slug));
134
+ // Create directory if it doesn't exist
135
+ if (!fs.existsSync(targetDir)) {
136
+ fs.mkdirSync(targetDir, { recursive: true });
137
+ }
138
+ const srcDir = path.join(targetDir, "src");
139
+ if (!fs.existsSync(srcDir)) {
140
+ fs.mkdirSync(srcDir, { recursive: true });
141
+ }
142
+ // Download component JavaScript
143
+ const componentCode = await downloadFile(currentVersion.componentUrl);
144
+ fs.writeFileSync(path.join(srcDir, "index.tsx"), componentCode);
145
+ // Download CSS if available
146
+ if (currentVersion.cssUrl) {
147
+ const cssCode = await downloadFile(currentVersion.cssUrl);
148
+ fs.writeFileSync(path.join(srcDir, "index.css"), cssCode);
149
+ }
150
+ // Download and parse package.json
151
+ let packageJsonData = {
152
+ name: slug,
153
+ version: currentVersion.version,
154
+ description: displayName,
155
+ };
156
+ if (currentVersion.packageJsonUrl) {
157
+ try {
158
+ const packageJsonContent = await downloadFile(currentVersion.packageJsonUrl);
159
+ packageJsonData = JSON.parse(packageJsonContent);
160
+ }
161
+ catch (error) {
162
+ // If package.json fetch fails, use defaults
163
+ console.warn(chalk.yellow(` Warning: Could not fetch package.json for ${slug}, using defaults`));
164
+ }
165
+ }
166
+ // Add blockforge metadata
167
+ packageJsonData.blockforge = {
168
+ packageType,
169
+ displayName,
170
+ schemaFields: currentVersion.schemaFields || [],
171
+ defaultContent: currentVersion.defaultContent || {},
172
+ };
173
+ // Write package.json
174
+ fs.writeFileSync(path.join(targetDir, "package.json"), JSON.stringify(packageJsonData, null, 2));
175
+ // Create README.md
176
+ const readme = `# ${displayName}
177
+
178
+ Synced from Cmssy marketplace.
179
+
180
+ Package: \`${slug}\`
181
+ Version: \`${currentVersion.version}\`
182
+
183
+ ## Development
184
+
185
+ \`\`\`bash
186
+ # Build this ${packageType}
187
+ pnpm build:${packageType} ${targetDir}
188
+ \`\`\`
189
+ `;
190
+ fs.writeFileSync(path.join(targetDir, "README.md"), readme);
191
+ }
192
+ async function downloadFile(url) {
193
+ const response = await fetch(url);
194
+ if (!response.ok) {
195
+ throw new Error(`Failed to download ${url}: ${response.statusText}`);
196
+ }
197
+ return response.text();
198
+ }
199
+ function getPackageName(slug) {
200
+ // Extract package name from slug
201
+ // e.g., @cmssy/blocks.hero -> hero
202
+ // e.g., @vendor/blocks.pricing -> pricing
203
+ const parts = slug.split("/");
204
+ const lastPart = parts[parts.length - 1];
205
+ const nameParts = lastPart.split(".");
206
+ return nameParts[nameParts.length - 1];
207
+ }
208
+ //# sourceMappingURL=sync.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ export interface BlockForgeConfig {
2
+ framework: string;
3
+ projectName?: string;
4
+ author?: {
5
+ name: string;
6
+ email: string;
7
+ };
8
+ cdn?: {
9
+ baseUrl: string;
10
+ };
11
+ build?: {
12
+ outDir: string;
13
+ minify: boolean;
14
+ sourcemap: boolean;
15
+ };
16
+ }
17
+ export declare function loadConfig(): Promise<BlockForgeConfig>;
18
+ export declare function getPackageJson(packagePath: string): any;
19
+ //# sourceMappingURL=blockforge-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blockforge-config.d.ts","sourceRoot":"","sources":["../../src/utils/blockforge-config.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE;QACP,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;IACF,GAAG,CAAC,EAAE;QACJ,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,KAAK,CAAC,EAAE;QACN,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,OAAO,CAAC;QAChB,SAAS,EAAE,OAAO,CAAC;KACpB,CAAC;CACH;AAED,wBAAsB,UAAU,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAY5D;AAED,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,OAMjD"}
@@ -0,0 +1,19 @@
1
+ import fs from "fs-extra";
2
+ import path from "path";
3
+ export async function loadConfig() {
4
+ const configPath = path.join(process.cwd(), "blockforge.config.js");
5
+ if (!fs.existsSync(configPath)) {
6
+ throw new Error("blockforge.config.js not found. Are you in a blockforge project?");
7
+ }
8
+ // Dynamic import for ESM
9
+ const configModule = await import(`file://${configPath}`);
10
+ return configModule.default;
11
+ }
12
+ export function getPackageJson(packagePath) {
13
+ const pkgPath = path.join(packagePath, "package.json");
14
+ if (!fs.existsSync(pkgPath)) {
15
+ return null;
16
+ }
17
+ return fs.readJsonSync(pkgPath);
18
+ }
19
+ //# sourceMappingURL=blockforge-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blockforge-config.js","sourceRoot":"","sources":["../../src/utils/blockforge-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,IAAI,MAAM,MAAM,CAAC;AAmBxB,MAAM,CAAC,KAAK,UAAU,UAAU;IAC9B,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,sBAAsB,CAAC,CAAC;IAEpE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CACb,kEAAkE,CACnE,CAAC;IACJ,CAAC;IAED,yBAAyB;IACzB,MAAM,YAAY,GAAG,MAAM,MAAM,CAAC,UAAU,UAAU,EAAE,CAAC,CAAC;IAC1D,OAAO,YAAY,CAAC,OAAO,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,WAAmB;IAChD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;IACvD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;AAClC,CAAC"}
@@ -0,0 +1,19 @@
1
+ export interface CmssyConfig {
2
+ framework: string;
3
+ projectName?: string;
4
+ author?: {
5
+ name: string;
6
+ email: string;
7
+ };
8
+ cdn?: {
9
+ baseUrl: string;
10
+ };
11
+ build?: {
12
+ outDir: string;
13
+ minify: boolean;
14
+ sourcemap: boolean;
15
+ };
16
+ }
17
+ export declare function loadConfig(): Promise<CmssyConfig>;
18
+ export declare function getPackageJson(packagePath: string): any;
19
+ //# sourceMappingURL=cmssy-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cmssy-config.d.ts","sourceRoot":"","sources":["../../src/utils/cmssy-config.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE;QACP,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;IACF,GAAG,CAAC,EAAE;QACJ,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,KAAK,CAAC,EAAE;QACN,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,OAAO,CAAC;QAChB,SAAS,EAAE,OAAO,CAAC;KACpB,CAAC;CACH;AAED,wBAAsB,UAAU,IAAI,OAAO,CAAC,WAAW,CAAC,CAYvD;AAED,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,OAMjD"}
@@ -0,0 +1,19 @@
1
+ import fs from "fs-extra";
2
+ import path from "path";
3
+ export async function loadConfig() {
4
+ const configPath = path.join(process.cwd(), "cmssy.config.js");
5
+ if (!fs.existsSync(configPath)) {
6
+ throw new Error("cmssy.config.js not found. Are you in a cmssy-forge project?");
7
+ }
8
+ // Dynamic import for ESM
9
+ const configModule = await import(`file://${configPath}`);
10
+ return configModule.default;
11
+ }
12
+ export function getPackageJson(packagePath) {
13
+ const pkgPath = path.join(packagePath, "package.json");
14
+ if (!fs.existsSync(pkgPath)) {
15
+ return null;
16
+ }
17
+ return fs.readJsonSync(pkgPath);
18
+ }
19
+ //# sourceMappingURL=cmssy-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cmssy-config.js","sourceRoot":"","sources":["../../src/utils/cmssy-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,IAAI,MAAM,MAAM,CAAC;AAmBxB,MAAM,CAAC,KAAK,UAAU,UAAU;IAC9B,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,iBAAiB,CAAC,CAAC;IAE/D,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CACb,8DAA8D,CAC/D,CAAC;IACJ,CAAC;IAED,yBAAyB;IACzB,MAAM,YAAY,GAAG,MAAM,MAAM,CAAC,UAAU,UAAU,EAAE,CAAC,CAAC;IAC1D,OAAO,YAAY,CAAC,OAAO,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,WAAmB;IAChD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;IACvD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;AAClC,CAAC"}
@@ -0,0 +1,8 @@
1
+ export interface CmssyConfig {
2
+ apiUrl: string;
3
+ apiToken: string | null;
4
+ }
5
+ export declare function loadConfig(): CmssyConfig;
6
+ export declare function saveConfig(config: Partial<CmssyConfig>): void;
7
+ export declare function hasConfig(): boolean;
8
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,wBAAgB,UAAU,IAAI,WAAW,CAYxC;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,IAAI,CAiC7D;AAED,wBAAgB,SAAS,IAAI,OAAO,CAGnC"}
@@ -0,0 +1,45 @@
1
+ import dotenv from "dotenv";
2
+ import fs from "fs-extra";
3
+ import path from "path";
4
+ export function loadConfig() {
5
+ // Load from .env in cwd
6
+ const envPath = path.join(process.cwd(), ".env");
7
+ if (fs.existsSync(envPath)) {
8
+ dotenv.config({ path: envPath });
9
+ }
10
+ return {
11
+ apiUrl: process.env.CMSSY_API_URL || "https://api.cmssy.io/graphql",
12
+ apiToken: process.env.CMSSY_API_TOKEN || null,
13
+ };
14
+ }
15
+ export function saveConfig(config) {
16
+ const envPath = path.join(process.cwd(), ".env");
17
+ const existingEnv = fs.existsSync(envPath)
18
+ ? fs.readFileSync(envPath, "utf8")
19
+ : "";
20
+ let newEnv = existingEnv;
21
+ // Update or add CMSSY_API_TOKEN
22
+ if (config.apiToken !== undefined) {
23
+ if (existingEnv.includes("CMSSY_API_TOKEN=")) {
24
+ newEnv = newEnv.replace(/CMSSY_API_TOKEN=.*/, `CMSSY_API_TOKEN=${config.apiToken}`);
25
+ }
26
+ else {
27
+ newEnv += `\nCMSSY_API_TOKEN=${config.apiToken}\n`;
28
+ }
29
+ }
30
+ // Update or add CMSSY_API_URL
31
+ if (config.apiUrl !== undefined) {
32
+ if (existingEnv.includes("CMSSY_API_URL=")) {
33
+ newEnv = newEnv.replace(/CMSSY_API_URL=.*/, `CMSSY_API_URL=${config.apiUrl}`);
34
+ }
35
+ else {
36
+ newEnv += `CMSSY_API_URL=${config.apiUrl}\n`;
37
+ }
38
+ }
39
+ fs.writeFileSync(envPath, newEnv.trim() + "\n");
40
+ }
41
+ export function hasConfig() {
42
+ const config = loadConfig();
43
+ return !!config.apiToken;
44
+ }
45
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,IAAI,MAAM,MAAM,CAAC;AAOxB,MAAM,UAAU,UAAU;IACxB,wBAAwB;IACxB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,CAAC;IAEjD,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3B,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;IACnC,CAAC;IAED,OAAO;QACL,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,8BAA8B;QACnE,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,IAAI;KAC9C,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,MAA4B;IACrD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,CAAC;IACjD,MAAM,WAAW,GAAG,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC;QACxC,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC;QAClC,CAAC,CAAC,EAAE,CAAC;IAEP,IAAI,MAAM,GAAG,WAAW,CAAC;IAEzB,gCAAgC;IAChC,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QAClC,IAAI,WAAW,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC;YAC7C,MAAM,GAAG,MAAM,CAAC,OAAO,CACrB,oBAAoB,EACpB,mBAAmB,MAAM,CAAC,QAAQ,EAAE,CACrC,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,qBAAqB,MAAM,CAAC,QAAQ,IAAI,CAAC;QACrD,CAAC;IACH,CAAC;IAED,8BAA8B;IAC9B,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAChC,IAAI,WAAW,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;YAC3C,MAAM,GAAG,MAAM,CAAC,OAAO,CACrB,kBAAkB,EAClB,iBAAiB,MAAM,CAAC,MAAM,EAAE,CACjC,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,iBAAiB,MAAM,CAAC,MAAM,IAAI,CAAC;QAC/C,CAAC;IACH,CAAC;IAED,EAAE,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,SAAS;IACvB,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,OAAO,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC;AAC3B,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { GraphQLClient } from "graphql-request";
2
+ export declare function createClient(): GraphQLClient;
3
+ export declare const PUBLISH_PACKAGE_MUTATION = "\n mutation PublishPackage($token: String!, $input: PublishPackageInput!) {\n publishPackage(token: $token, input: $input) {\n success\n message\n packageId\n status\n }\n }\n";
4
+ //# sourceMappingURL=graphql.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graphql.d.ts","sourceRoot":"","sources":["../../src/utils/graphql.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAGhD,wBAAgB,YAAY,IAAI,aAAa,CAe5C;AAGD,eAAO,MAAM,wBAAwB,gNASpC,CAAC"}
@@ -0,0 +1,26 @@
1
+ import { GraphQLClient } from "graphql-request";
2
+ import { loadConfig } from "./config.js";
3
+ export function createClient() {
4
+ const config = loadConfig();
5
+ if (!config.apiToken) {
6
+ throw new Error("CMSSY_API_TOKEN not configured. Run: cmssy-forge configure");
7
+ }
8
+ return new GraphQLClient(config.apiUrl, {
9
+ headers: {
10
+ "Content-Type": "application/json",
11
+ Authorization: `Bearer ${config.apiToken}`,
12
+ },
13
+ });
14
+ }
15
+ // GraphQL Mutations
16
+ export const PUBLISH_PACKAGE_MUTATION = `
17
+ mutation PublishPackage($token: String!, $input: PublishPackageInput!) {
18
+ publishPackage(token: $token, input: $input) {
19
+ success
20
+ message
21
+ packageId
22
+ status
23
+ }
24
+ }
25
+ `;
26
+ //# sourceMappingURL=graphql.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graphql.js","sourceRoot":"","sources":["../../src/utils/graphql.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,MAAM,UAAU,YAAY;IAC1B,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAE5B,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CACb,4DAA4D,CAC7D,CAAC;IACJ,CAAC;IAED,OAAO,IAAI,aAAa,CAAC,MAAM,CAAC,MAAM,EAAE;QACtC,OAAO,EAAE;YACP,cAAc,EAAE,kBAAkB;YAClC,aAAa,EAAE,UAAU,MAAM,CAAC,QAAQ,EAAE;SAC3C;KACF,CAAC,CAAC;AACL,CAAC;AAED,oBAAoB;AACpB,MAAM,CAAC,MAAM,wBAAwB,GAAG;;;;;;;;;CASvC,CAAC"}
package/package.json ADDED
@@ -0,0 +1,66 @@
1
+ {
2
+ "name": "cmssy-cli",
3
+ "version": "0.4.0",
4
+ "description": "Unified CLI for building and publishing blocks to Cmssy marketplace",
5
+ "type": "module",
6
+ "bin": {
7
+ "cmssy": "./dist/cli.js",
8
+ "cmssy-cli": "./dist/cli.js"
9
+ },
10
+ "scripts": {
11
+ "build": "tsc",
12
+ "dev": "tsc --watch",
13
+ "prepare": "npm run build"
14
+ },
15
+ "keywords": [
16
+ "cmssy",
17
+ "blockforge",
18
+ "marketplace",
19
+ "cli",
20
+ "cms"
21
+ ],
22
+ "author": "Cmssy Team",
23
+ "license": "MIT",
24
+ "repository": {
25
+ "type": "git",
26
+ "url": "https://github.com/maciekbe1/cmssy-cli.git"
27
+ },
28
+ "homepage": "https://github.com/maciekbe1/cmssy-cli#readme",
29
+ "bugs": {
30
+ "url": "https://github.com/maciekbe1/cmssy-cli/issues"
31
+ },
32
+ "files": [
33
+ "dist",
34
+ "README.md",
35
+ "LICENSE"
36
+ ],
37
+ "engines": {
38
+ "node": ">=18.0.0"
39
+ },
40
+ "dependencies": {
41
+ "chalk": "^5.3.0",
42
+ "chokidar": "^4.0.1",
43
+ "commander": "^12.1.0",
44
+ "dotenv": "^16.4.7",
45
+ "esbuild": "^0.24.0",
46
+ "express": "^4.21.2",
47
+ "form-data": "^4.0.1",
48
+ "fs-extra": "^11.2.0",
49
+ "glob": "^11.0.0",
50
+ "graphql": "^16.9.0",
51
+ "graphql-request": "^7.1.2",
52
+ "inquirer": "^10.0.0",
53
+ "node-fetch": "^3.3.2",
54
+ "ora": "^8.0.1",
55
+ "postcss": "^8.4.49"
56
+ },
57
+ "devDependencies": {
58
+ "@types/express": "^5.0.0",
59
+ "@types/form-data": "^2.5.2",
60
+ "@types/fs-extra": "^11.0.4",
61
+ "@types/inquirer": "^9.0.7",
62
+ "@types/node": "^22.10.2",
63
+ "@types/node-fetch": "^2.6.13",
64
+ "typescript": "^5.7.2"
65
+ }
66
+ }