@mexty/cli 1.1.0 → 1.3.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 (47) hide show
  1. package/dist/commands/create.d.ts +9 -0
  2. package/dist/commands/create.d.ts.map +1 -0
  3. package/dist/commands/create.js +118 -0
  4. package/dist/commands/create.js.map +1 -0
  5. package/dist/commands/delete.d.ts +2 -0
  6. package/dist/commands/delete.d.ts.map +1 -0
  7. package/dist/commands/delete.js +59 -0
  8. package/dist/commands/delete.js.map +1 -0
  9. package/dist/commands/fork.d.ts +2 -0
  10. package/dist/commands/fork.d.ts.map +1 -0
  11. package/dist/commands/fork.js +57 -0
  12. package/dist/commands/fork.js.map +1 -0
  13. package/dist/commands/login.d.ts +2 -0
  14. package/dist/commands/login.d.ts.map +1 -0
  15. package/dist/commands/login.js +90 -0
  16. package/dist/commands/login.js.map +1 -0
  17. package/dist/commands/publish.d.ts +2 -0
  18. package/dist/commands/publish.d.ts.map +1 -0
  19. package/dist/commands/publish.js +144 -0
  20. package/dist/commands/publish.js.map +1 -0
  21. package/dist/commands/save.d.ts +2 -0
  22. package/dist/commands/save.d.ts.map +1 -0
  23. package/dist/commands/save.js +162 -0
  24. package/dist/commands/save.js.map +1 -0
  25. package/dist/commands/sync.d.ts +2 -0
  26. package/dist/commands/sync.d.ts.map +1 -0
  27. package/dist/commands/sync.js +250 -0
  28. package/dist/commands/sync.js.map +1 -0
  29. package/dist/index.d.ts +3 -0
  30. package/dist/index.d.ts.map +1 -0
  31. package/dist/index.js +85 -0
  32. package/dist/index.js.map +1 -0
  33. package/dist/utils/api.d.ts +81 -0
  34. package/dist/utils/api.d.ts.map +1 -0
  35. package/dist/utils/api.js +161 -0
  36. package/dist/utils/api.js.map +1 -0
  37. package/dist/utils/auth.d.ts +4 -0
  38. package/dist/utils/auth.d.ts.map +1 -0
  39. package/dist/utils/auth.js +27 -0
  40. package/dist/utils/auth.js.map +1 -0
  41. package/dist/utils/git.d.ts +42 -0
  42. package/dist/utils/git.d.ts.map +1 -0
  43. package/dist/utils/git.js +171 -0
  44. package/dist/utils/git.js.map +1 -0
  45. package/package.json +1 -1
  46. package/src/commands/sync.ts +145 -79
  47. package/src/utils/api.ts +65 -32
@@ -0,0 +1,9 @@
1
+ interface CreateOptions {
2
+ description?: string;
3
+ type?: string;
4
+ name?: string;
5
+ category?: string;
6
+ }
7
+ export declare function createCommand(subcommand?: string, options?: CreateOptions): Promise<void>;
8
+ export {};
9
+ //# sourceMappingURL=create.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"AAOA,UAAU,aAAa;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAwBD,wBAAsB,aAAa,CACjC,UAAU,CAAC,EAAE,MAAM,EACnB,OAAO,GAAE,aAAkB,GAC1B,OAAO,CAAC,IAAI,CAAC,CA6Hf"}
@@ -0,0 +1,118 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.createCommand = createCommand;
7
+ const chalk_1 = __importDefault(require("chalk"));
8
+ const path_1 = __importDefault(require("path"));
9
+ const api_1 = require("../utils/api");
10
+ const git_1 = require("../utils/git");
11
+ const readline_1 = require("readline");
12
+ const auth_1 = require("../utils/auth");
13
+ // Simple prompt function to replace inquirer
14
+ async function prompt(question, defaultValue) {
15
+ return new Promise((resolve) => {
16
+ const rl = (0, readline_1.createInterface)({
17
+ input: process.stdin,
18
+ output: process.stdout,
19
+ });
20
+ const promptText = defaultValue
21
+ ? `${question} (${defaultValue}): `
22
+ : `${question}: `;
23
+ rl.question(promptText, (answer) => {
24
+ rl.close();
25
+ resolve(answer.trim() || defaultValue || "");
26
+ });
27
+ });
28
+ }
29
+ async function createCommand(subcommand, options = {}) {
30
+ try {
31
+ // Check authentication first
32
+ (0, auth_1.requireAuthentication)();
33
+ const user = (0, auth_1.getAuthenticatedUser)();
34
+ // Handle both old and new syntax
35
+ let blockName;
36
+ let blockDescription;
37
+ let blockType;
38
+ if (subcommand === "block") {
39
+ // New syntax: mexty create block --name "..." --description "..." --category "..."
40
+ if (!options.name) {
41
+ console.error(chalk_1.default.red('❌ --name is required when using "mexty create block"'));
42
+ console.log(chalk_1.default.yellow(' Usage: mexty create block --name "Block Name" --description "Description" --category "category"'));
43
+ process.exit(1);
44
+ }
45
+ blockName = options.name;
46
+ blockDescription = options.description || `Custom block: ${blockName}`;
47
+ blockType = options.category || options.type || "custom";
48
+ }
49
+ else {
50
+ // Old syntax: mexty create "Block Name" --description "..." --type "..."
51
+ if (!subcommand) {
52
+ console.error(chalk_1.default.red("❌ Block name is required"));
53
+ console.log(chalk_1.default.yellow(' Usage: mexty create "Block Name" [options]'));
54
+ console.log(chalk_1.default.yellow(' Or: mexty create block --name "Block Name" [options]'));
55
+ process.exit(1);
56
+ }
57
+ blockName = subcommand;
58
+ blockDescription = options.description || `Custom block: ${blockName}`;
59
+ blockType = options.type || "custom";
60
+ }
61
+ console.log(chalk_1.default.blue(`🚀 Creating new block: ${blockName}`));
62
+ console.log(chalk_1.default.gray(` User: ${user?.fullName || user?.email || "Unknown"}`));
63
+ console.log(chalk_1.default.gray(` Category: ${blockType}`));
64
+ // Prepare block data
65
+ const blockData = {
66
+ blockType: blockType,
67
+ title: blockName,
68
+ description: blockDescription,
69
+ allowedBrickTypes: ["text", "image", "video", "code", "quiz"], // Default allowed types
70
+ scope: ["user-store"], // Default scope for CLI-created blocks
71
+ content: [],
72
+ };
73
+ console.log(chalk_1.default.yellow("📡 Creating block on server..."));
74
+ // Create the block
75
+ const block = await api_1.apiClient.createBlock(blockData);
76
+ console.log(chalk_1.default.green(`✅ Block created successfully!`));
77
+ console.log(chalk_1.default.gray(` Block ID: ${block._id}`));
78
+ console.log(chalk_1.default.gray(` Block Type: ${block.blockType}`));
79
+ if (block.gitUrl) {
80
+ console.log(chalk_1.default.gray(` GitHub URL: ${block.gitUrl}`));
81
+ // Clone the repository
82
+ const repoName = git_1.GitManager.extractRepoName(block.gitUrl);
83
+ const targetDir = path_1.default.join(process.cwd(), repoName);
84
+ console.log(chalk_1.default.yellow(`📦 Cloning repository to ./${repoName}...`));
85
+ try {
86
+ const gitManager = new git_1.GitManager();
87
+ await gitManager.cloneRepository(block.gitUrl, targetDir);
88
+ console.log(chalk_1.default.green(`🎉 Block created and repository cloned successfully!`));
89
+ console.log(chalk_1.default.blue(`\nNext steps:`));
90
+ console.log(chalk_1.default.gray(` 1. cd ${repoName}`));
91
+ console.log(chalk_1.default.gray(` 2. Make your changes`));
92
+ console.log(chalk_1.default.gray(` 3. mexty save`));
93
+ // Change to the cloned directory
94
+ try {
95
+ process.chdir(targetDir);
96
+ console.log(chalk_1.default.green(`📁 Changed to directory: ${repoName}`));
97
+ }
98
+ catch (chdirError) {
99
+ console.warn(chalk_1.default.yellow(`⚠️ Could not change to directory: ${chdirError.message}`));
100
+ console.log(chalk_1.default.gray(` Please manually run: cd ${repoName}`));
101
+ }
102
+ }
103
+ catch (cloneError) {
104
+ console.error(chalk_1.default.red(`❌ Failed to clone repository: ${cloneError.message}`));
105
+ console.log(chalk_1.default.yellow(`You can manually clone it later:`));
106
+ console.log(chalk_1.default.gray(` git clone ${block.gitUrl}`));
107
+ }
108
+ }
109
+ else {
110
+ console.log(chalk_1.default.yellow("⚠️ No GitHub repository was created (GitHub not configured)"));
111
+ }
112
+ }
113
+ catch (error) {
114
+ console.error(chalk_1.default.red(`❌ Failed to create block: ${error.message}`));
115
+ process.exit(1);
116
+ }
117
+ }
118
+ //# sourceMappingURL=create.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.js","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function deleteCommand(blockId: string): Promise<void>;
2
+ //# sourceMappingURL=delete.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete.d.ts","sourceRoot":"","sources":["../../src/commands/delete.ts"],"names":[],"mappings":"AAoBA,wBAAsB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA0ClE"}
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.deleteCommand = deleteCommand;
7
+ const chalk_1 = __importDefault(require("chalk"));
8
+ const api_1 = require("../utils/api");
9
+ const readline_1 = require("readline");
10
+ const auth_1 = require("../utils/auth");
11
+ // Simple confirmation function
12
+ async function confirm(question) {
13
+ return new Promise((resolve) => {
14
+ const rl = (0, readline_1.createInterface)({
15
+ input: process.stdin,
16
+ output: process.stdout
17
+ });
18
+ rl.question(`${question} (y/N): `, (answer) => {
19
+ rl.close();
20
+ resolve(answer.toLowerCase().trim() === 'y' || answer.toLowerCase().trim() === 'yes');
21
+ });
22
+ });
23
+ }
24
+ async function deleteCommand(blockId) {
25
+ try {
26
+ // Check authentication first
27
+ (0, auth_1.requireAuthentication)();
28
+ const user = (0, auth_1.getAuthenticatedUser)();
29
+ console.log(chalk_1.default.blue(`🗑️ Deleting block: ${blockId}`));
30
+ console.log(chalk_1.default.gray(` User: ${user?.fullName || user?.email || 'Unknown'}`));
31
+ // Get block info first
32
+ console.log(chalk_1.default.yellow('📡 Fetching block information...'));
33
+ const block = await api_1.apiClient.getBlock(blockId);
34
+ console.log(chalk_1.default.gray(` Title: ${block.title}`));
35
+ console.log(chalk_1.default.gray(` Description: ${block.description}`));
36
+ if (block.gitUrl) {
37
+ console.log(chalk_1.default.gray(` GitHub URL: ${block.gitUrl}`));
38
+ }
39
+ // Confirm deletion
40
+ const confirmed = await confirm(chalk_1.default.red('Are you sure you want to delete this block? This action cannot be undone.'));
41
+ if (!confirmed) {
42
+ console.log(chalk_1.default.yellow('🚫 Deletion cancelled.'));
43
+ return;
44
+ }
45
+ // Delete the block
46
+ console.log(chalk_1.default.yellow('📡 Deleting block on server...'));
47
+ await api_1.apiClient.deleteBlock(blockId);
48
+ console.log(chalk_1.default.green(`✅ Block deleted successfully!`));
49
+ if (block.gitUrl) {
50
+ console.log(chalk_1.default.yellow('⚠️ Note: The GitHub repository still exists and needs to be deleted manually if desired.'));
51
+ console.log(chalk_1.default.gray(` Repository: ${block.gitUrl}`));
52
+ }
53
+ }
54
+ catch (error) {
55
+ console.error(chalk_1.default.red(`❌ Failed to delete block: ${error.message}`));
56
+ process.exit(1);
57
+ }
58
+ }
59
+ //# sourceMappingURL=delete.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete.js","sourceRoot":"","sources":["../../src/commands/delete.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function forkCommand(blockId: string): Promise<void>;
2
+ //# sourceMappingURL=fork.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fork.d.ts","sourceRoot":"","sources":["../../src/commands/fork.ts"],"names":[],"mappings":"AAMA,wBAAsB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAmDhE"}
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.forkCommand = forkCommand;
7
+ const chalk_1 = __importDefault(require("chalk"));
8
+ const path_1 = __importDefault(require("path"));
9
+ const api_1 = require("../utils/api");
10
+ const git_1 = require("../utils/git");
11
+ const auth_1 = require("../utils/auth");
12
+ async function forkCommand(blockId) {
13
+ try {
14
+ // Check authentication first
15
+ (0, auth_1.requireAuthentication)();
16
+ const user = (0, auth_1.getAuthenticatedUser)();
17
+ console.log(chalk_1.default.blue(`🍴 Forking block: ${blockId}`));
18
+ console.log(chalk_1.default.gray(` User: ${user?.fullName || user?.email || 'Unknown'}`));
19
+ // Fork the block
20
+ console.log(chalk_1.default.yellow('📡 Forking block on server...'));
21
+ const forkedBlock = await api_1.apiClient.forkBlock({ blockId });
22
+ console.log(chalk_1.default.green(`✅ Block forked successfully!`));
23
+ console.log(chalk_1.default.gray(` New Block ID: ${forkedBlock._id}`));
24
+ console.log(chalk_1.default.gray(` Title: ${forkedBlock.title}`));
25
+ console.log(chalk_1.default.gray(` Description: ${forkedBlock.description}`));
26
+ if (forkedBlock.gitUrl) {
27
+ console.log(chalk_1.default.gray(` GitHub URL: ${forkedBlock.gitUrl}`));
28
+ // Clone the forked repository
29
+ const repoName = git_1.GitManager.extractRepoName(forkedBlock.gitUrl);
30
+ const targetDir = path_1.default.join(process.cwd(), repoName);
31
+ console.log(chalk_1.default.yellow(`📦 Cloning forked repository to ./${repoName}...`));
32
+ try {
33
+ const gitManager = new git_1.GitManager();
34
+ await gitManager.cloneRepository(forkedBlock.gitUrl, targetDir);
35
+ console.log(chalk_1.default.green(`🎉 Block forked and repository cloned successfully!`));
36
+ console.log(chalk_1.default.blue(`\nNext steps:`));
37
+ console.log(chalk_1.default.gray(` 1. cd ${repoName}`));
38
+ console.log(chalk_1.default.gray(` 2. Make your changes`));
39
+ console.log(chalk_1.default.gray(` 3. git add . && git commit -m "Your changes"`));
40
+ console.log(chalk_1.default.gray(` 4. mexty publish`));
41
+ }
42
+ catch (cloneError) {
43
+ console.error(chalk_1.default.red(`❌ Failed to clone repository: ${cloneError.message}`));
44
+ console.log(chalk_1.default.yellow(`You can manually clone it later:`));
45
+ console.log(chalk_1.default.gray(` git clone ${forkedBlock.gitUrl}`));
46
+ }
47
+ }
48
+ else {
49
+ console.log(chalk_1.default.yellow('⚠️ No GitHub repository available for this block'));
50
+ }
51
+ }
52
+ catch (error) {
53
+ console.error(chalk_1.default.red(`❌ Failed to fork block: ${error.message}`));
54
+ process.exit(1);
55
+ }
56
+ }
57
+ //# sourceMappingURL=fork.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fork.js","sourceRoot":"","sources":["../../src/commands/fork.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function loginCommand(): Promise<void>;
2
+ //# sourceMappingURL=login.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AAwBA,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CA+ElD"}
@@ -0,0 +1,90 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.loginCommand = loginCommand;
7
+ const chalk_1 = __importDefault(require("chalk"));
8
+ const readline_1 = require("readline");
9
+ const api_1 = require("../utils/api");
10
+ // Simple prompt function
11
+ async function prompt(question) {
12
+ return new Promise((resolve) => {
13
+ const rl = (0, readline_1.createInterface)({
14
+ input: process.stdin,
15
+ output: process.stdout
16
+ });
17
+ rl.question(question, (answer) => {
18
+ rl.close();
19
+ resolve(answer.trim());
20
+ });
21
+ });
22
+ }
23
+ // Wait function for countdown
24
+ async function wait(seconds) {
25
+ return new Promise(resolve => setTimeout(resolve, seconds * 1000));
26
+ }
27
+ async function loginCommand() {
28
+ try {
29
+ console.log(chalk_1.default.blue('🔐 Login to MEXT'));
30
+ // Check if already authenticated
31
+ if (api_1.apiClient.isAuthenticated()) {
32
+ const user = api_1.apiClient.getStoredUser();
33
+ console.log(chalk_1.default.green('✅ You are already logged in!'));
34
+ console.log(chalk_1.default.gray(` Email: ${user?.email || 'Unknown'}`));
35
+ console.log(chalk_1.default.gray(` Name: ${user?.fullName || 'Not set'}`));
36
+ const logout = await prompt('Do you want to logout and login as a different user? (y/N): ');
37
+ if (logout.toLowerCase() !== 'y' && logout.toLowerCase() !== 'yes') {
38
+ return;
39
+ }
40
+ await api_1.apiClient.logout();
41
+ console.log(chalk_1.default.yellow('📤 Logged out successfully'));
42
+ }
43
+ // Request email
44
+ const email = await prompt('Enter your email address: ');
45
+ if (!email || !email.includes('@')) {
46
+ console.error(chalk_1.default.red('❌ Please provide a valid email address'));
47
+ process.exit(1);
48
+ }
49
+ console.log(chalk_1.default.yellow('📧 Requesting verification code...'));
50
+ // Request OTP
51
+ try {
52
+ const otpResponse = await api_1.apiClient.requestOTP(email);
53
+ if (!otpResponse.success) {
54
+ console.error(chalk_1.default.red(`❌ ${otpResponse.message}`));
55
+ process.exit(1);
56
+ }
57
+ console.log(chalk_1.default.green('✅ Verification code sent to your email'));
58
+ console.log(chalk_1.default.gray(' Please check your inbox (and spam folder)'));
59
+ // Wait a moment for the user to check email
60
+ await wait(2);
61
+ // Request OTP code
62
+ const otp = await prompt('Enter the 6-digit verification code: ');
63
+ if (!otp || otp.length !== 6 || !/^\d{6}$/.test(otp)) {
64
+ console.error(chalk_1.default.red('❌ Please provide a valid 6-digit code'));
65
+ process.exit(1);
66
+ }
67
+ console.log(chalk_1.default.yellow('🔓 Verifying code...'));
68
+ // Verify OTP
69
+ const verifyResponse = await api_1.apiClient.verifyOTP(email, otp);
70
+ if (!verifyResponse.success) {
71
+ console.error(chalk_1.default.red(`❌ ${verifyResponse.message}`));
72
+ process.exit(1);
73
+ }
74
+ console.log(chalk_1.default.green('🎉 Login successful!'));
75
+ console.log(chalk_1.default.gray(` Welcome, ${verifyResponse.user?.fullName || verifyResponse.user?.email || 'User'}!`));
76
+ if (!verifyResponse.user?.isProfileComplete) {
77
+ console.log(chalk_1.default.yellow('⚠️ Your profile is incomplete. Please complete it in the web interface.'));
78
+ }
79
+ }
80
+ catch (error) {
81
+ console.error(chalk_1.default.red(`❌ Login failed: ${error.message}`));
82
+ process.exit(1);
83
+ }
84
+ }
85
+ catch (error) {
86
+ console.error(chalk_1.default.red(`❌ Login error: ${error.message}`));
87
+ process.exit(1);
88
+ }
89
+ }
90
+ //# sourceMappingURL=login.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function publishCommand(): Promise<void>;
2
+ //# sourceMappingURL=publish.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"publish.d.ts","sourceRoot":"","sources":["../../src/commands/publish.ts"],"names":[],"mappings":"AAmEA,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CA2FpD"}
@@ -0,0 +1,144 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.publishCommand = publishCommand;
7
+ const chalk_1 = __importDefault(require("chalk"));
8
+ const fs_1 = __importDefault(require("fs"));
9
+ const path_1 = __importDefault(require("path"));
10
+ const api_1 = require("../utils/api");
11
+ const git_1 = require("../utils/git");
12
+ const readline_1 = require("readline");
13
+ const sync_1 = require("./sync");
14
+ const auth_1 = require("../utils/auth");
15
+ // Simple confirmation function
16
+ async function confirm(question) {
17
+ return new Promise((resolve) => {
18
+ const rl = (0, readline_1.createInterface)({
19
+ input: process.stdin,
20
+ output: process.stdout
21
+ });
22
+ rl.question(`${question} (y/N): `, (answer) => {
23
+ rl.close();
24
+ resolve(answer.toLowerCase().trim() === 'y' || answer.toLowerCase().trim() === 'yes');
25
+ });
26
+ });
27
+ }
28
+ // Extract block ID from package.json or git URL
29
+ async function findBlockId() {
30
+ const packageJsonPath = path_1.default.join(process.cwd(), 'package.json');
31
+ if (fs_1.default.existsSync(packageJsonPath)) {
32
+ try {
33
+ const packageJson = JSON.parse(fs_1.default.readFileSync(packageJsonPath, 'utf8'));
34
+ // Look for block ID in package.json name or description
35
+ if (packageJson.name && packageJson.name.startsWith('block-')) {
36
+ return packageJson.name.replace('block-', '');
37
+ }
38
+ // Look in description for block ID pattern
39
+ if (packageJson.description) {
40
+ const match = packageJson.description.match(/block[:\s]+([a-f0-9]{24})/i);
41
+ if (match) {
42
+ return match[1];
43
+ }
44
+ }
45
+ }
46
+ catch (error) {
47
+ console.warn(chalk_1.default.yellow('⚠️ Could not parse package.json'));
48
+ }
49
+ }
50
+ // Try to extract from git remote URL
51
+ try {
52
+ const gitManager = new git_1.GitManager();
53
+ const remoteUrl = await gitManager.getRemoteUrl();
54
+ if (remoteUrl) {
55
+ const match = remoteUrl.match(/block-([a-f0-9]{24})/);
56
+ if (match) {
57
+ return match[1];
58
+ }
59
+ }
60
+ }
61
+ catch (error) {
62
+ // Ignore git errors
63
+ }
64
+ return null;
65
+ }
66
+ async function publishCommand() {
67
+ try {
68
+ // Check authentication first
69
+ (0, auth_1.requireAuthentication)();
70
+ const user = (0, auth_1.getAuthenticatedUser)();
71
+ console.log(chalk_1.default.blue('🚀 Publishing block...'));
72
+ console.log(chalk_1.default.gray(` User: ${user?.fullName || user?.email || 'Unknown'}`));
73
+ // Check if we're in a git repository
74
+ const gitManager = new git_1.GitManager();
75
+ const isGitRepo = await gitManager.isGitRepository();
76
+ if (!isGitRepo) {
77
+ console.error(chalk_1.default.red('❌ Not a git repository. Please run this command from a block repository.'));
78
+ process.exit(1);
79
+ }
80
+ // Get repository information
81
+ const repoInfo = await gitManager.getRepositoryInfo();
82
+ console.log(chalk_1.default.gray(` Current branch: ${repoInfo.branch}`));
83
+ console.log(chalk_1.default.gray(` Remote URL: ${repoInfo.remoteUrl}`));
84
+ // Find block ID
85
+ const blockId = await findBlockId();
86
+ if (!blockId) {
87
+ console.error(chalk_1.default.red('❌ Could not determine block ID from repository.'));
88
+ console.error(chalk_1.default.yellow(' Make sure you are in a block repository created with mexty'));
89
+ process.exit(1);
90
+ }
91
+ console.log(chalk_1.default.gray(` Block ID: ${blockId}`));
92
+ // Check for uncommitted changes
93
+ if (repoInfo.hasChanges) {
94
+ console.log(chalk_1.default.yellow('⚠️ You have uncommitted changes.'));
95
+ console.log(chalk_1.default.gray(' Please commit your changes before publishing:'));
96
+ console.log(chalk_1.default.gray(' git add . && git commit -m "Your commit message"'));
97
+ const proceed = await confirm('Do you want to continue anyway?');
98
+ if (!proceed) {
99
+ console.log(chalk_1.default.yellow('🚫 Publishing cancelled.'));
100
+ return;
101
+ }
102
+ }
103
+ // Ask user to push changes
104
+ console.log(chalk_1.default.blue('\n📤 Push your changes to GitHub:'));
105
+ console.log(chalk_1.default.gray(` git push origin ${repoInfo.branch}`));
106
+ const pushed = await confirm('Have you pushed your changes to GitHub?');
107
+ if (!pushed) {
108
+ console.log(chalk_1.default.yellow('🚫 Please push your changes first and then run publish again.'));
109
+ return;
110
+ }
111
+ // Trigger save and bundle
112
+ console.log(chalk_1.default.yellow('📡 Triggering build and bundle process...'));
113
+ try {
114
+ const result = await api_1.apiClient.saveAndBundle({ blockId });
115
+ console.log(chalk_1.default.green('✅ Block published successfully!'));
116
+ console.log(chalk_1.default.gray(` Bundle Path: ${result.bundlePath}`));
117
+ console.log(chalk_1.default.gray(` Federation URL: ${result.federationUrl}`));
118
+ if (result.message) {
119
+ console.log(chalk_1.default.blue(` ${result.message}`));
120
+ }
121
+ // Automatically sync registry after successful publish
122
+ console.log(chalk_1.default.blue('\n🔄 Auto-syncing registry...'));
123
+ try {
124
+ await (0, sync_1.syncCommand)();
125
+ console.log(chalk_1.default.green('✅ Registry synced! Your block is now available as a named component.'));
126
+ }
127
+ catch (syncError) {
128
+ console.warn(chalk_1.default.yellow(`⚠️ Registry sync failed: ${syncError.message}`));
129
+ console.log(chalk_1.default.gray(' You can manually sync later with: mexty sync'));
130
+ // Don't fail the publish if sync fails - it's not critical
131
+ }
132
+ }
133
+ catch (buildError) {
134
+ console.error(chalk_1.default.red(`❌ Build failed: ${buildError.message}`));
135
+ console.log(chalk_1.default.yellow(' Check the server logs for more details.'));
136
+ process.exit(1);
137
+ }
138
+ }
139
+ catch (error) {
140
+ console.error(chalk_1.default.red(`❌ Failed to publish block: ${error.message}`));
141
+ process.exit(1);
142
+ }
143
+ }
144
+ //# sourceMappingURL=publish.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"publish.js","sourceRoot":"","sources":["../../src/commands/publish.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function saveCommand(): Promise<void>;
2
+ //# sourceMappingURL=save.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"save.d.ts","sourceRoot":"","sources":["../../src/commands/save.ts"],"names":[],"mappings":"AA2EA,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAyIjD"}