@mexty/cli 1.2.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 (45) 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
@@ -0,0 +1,161 @@
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.apiClient = void 0;
7
+ const axios_1 = __importDefault(require("axios"));
8
+ const chalk_1 = __importDefault(require("chalk"));
9
+ const fs_1 = __importDefault(require("fs"));
10
+ const path_1 = __importDefault(require("path"));
11
+ const os_1 = __importDefault(require("os"));
12
+ class ApiClient {
13
+ constructor(baseUrl = "https://api.mexty.ai") {
14
+ this.baseUrl = baseUrl;
15
+ this.tokenPath = path_1.default.join(os_1.default.homedir(), ".mext", "auth.json");
16
+ this.client = axios_1.default.create({
17
+ baseURL: baseUrl,
18
+ timeout: 30000,
19
+ headers: {
20
+ "Content-Type": "application/json",
21
+ },
22
+ });
23
+ // Add request interceptor to include auth token
24
+ this.client.interceptors.request.use((config) => {
25
+ const token = this.getStoredToken();
26
+ if (token) {
27
+ config.headers.Authorization = `Bearer ${token}`;
28
+ }
29
+ return config;
30
+ }, (error) => Promise.reject(error));
31
+ // Add response interceptor for error handling
32
+ this.client.interceptors.response.use((response) => response, (error) => {
33
+ if (error.response?.status === 401) {
34
+ console.error(chalk_1.default.red("Authentication required. Please login first: mexty login"));
35
+ this.clearStoredToken();
36
+ }
37
+ else if (error.response) {
38
+ console.error(chalk_1.default.red(`API Error ${error.response.status}: ${error.response.data?.error || error.message}`));
39
+ }
40
+ else if (error.request) {
41
+ console.error(chalk_1.default.red("Network Error: Could not reach MEXT server"));
42
+ console.error(chalk_1.default.yellow(`Make sure the server is running at ${this.baseUrl}`));
43
+ }
44
+ else {
45
+ console.error(chalk_1.default.red(`Request Error: ${error.message}`));
46
+ }
47
+ throw error;
48
+ });
49
+ }
50
+ getStoredToken() {
51
+ try {
52
+ if (fs_1.default.existsSync(this.tokenPath)) {
53
+ const authData = JSON.parse(fs_1.default.readFileSync(this.tokenPath, "utf8"));
54
+ return authData.token || null;
55
+ }
56
+ }
57
+ catch (error) {
58
+ // Ignore errors reading token file
59
+ }
60
+ return null;
61
+ }
62
+ storeToken(token, user) {
63
+ try {
64
+ const authDir = path_1.default.dirname(this.tokenPath);
65
+ if (!fs_1.default.existsSync(authDir)) {
66
+ fs_1.default.mkdirSync(authDir, { recursive: true });
67
+ }
68
+ const authData = {
69
+ token,
70
+ user,
71
+ timestamp: new Date().toISOString(),
72
+ };
73
+ fs_1.default.writeFileSync(this.tokenPath, JSON.stringify(authData, null, 2));
74
+ }
75
+ catch (error) {
76
+ console.warn(chalk_1.default.yellow(`Warning: Could not store auth token: ${error.message}`));
77
+ }
78
+ }
79
+ clearStoredToken() {
80
+ try {
81
+ if (fs_1.default.existsSync(this.tokenPath)) {
82
+ fs_1.default.unlinkSync(this.tokenPath);
83
+ }
84
+ }
85
+ catch (error) {
86
+ // Ignore errors clearing token file
87
+ }
88
+ }
89
+ isAuthenticated() {
90
+ return this.getStoredToken() !== null;
91
+ }
92
+ getStoredUser() {
93
+ try {
94
+ if (fs_1.default.existsSync(this.tokenPath)) {
95
+ const authData = JSON.parse(fs_1.default.readFileSync(this.tokenPath, "utf8"));
96
+ return authData.user || null;
97
+ }
98
+ }
99
+ catch (error) {
100
+ // Ignore errors reading user data
101
+ }
102
+ return null;
103
+ }
104
+ async createBlock(data) {
105
+ const response = await this.client.post("/api/blocks", data);
106
+ return response.data;
107
+ }
108
+ async forkBlock(data) {
109
+ const response = await this.client.post("/api/blocks/fork", data);
110
+ return response.data;
111
+ }
112
+ async deleteBlock(blockId) {
113
+ await this.client.delete(`/api/blocks/${blockId}`);
114
+ }
115
+ async getBlock(blockId) {
116
+ const response = await this.client.get(`/api/blocks/${blockId}`);
117
+ return response.data;
118
+ }
119
+ async saveAndBundle(data) {
120
+ const response = await this.client.post("/api/blocks/save-and-bundle", data);
121
+ return response.data;
122
+ }
123
+ async healthCheck() {
124
+ try {
125
+ await this.client.get("/api/health");
126
+ return true;
127
+ }
128
+ catch (error) {
129
+ return false;
130
+ }
131
+ }
132
+ async requestOTP(email) {
133
+ const response = await this.client.post("/api/auth/request-otp", { email });
134
+ return response.data;
135
+ }
136
+ async verifyOTP(email, otp) {
137
+ const response = await this.client.post("/api/auth/verify-otp", { email, otp });
138
+ const data = response.data;
139
+ if (data.success && data.token && data.user) {
140
+ this.storeToken(data.token, data.user);
141
+ }
142
+ return data;
143
+ }
144
+ async logout() {
145
+ try {
146
+ await this.client.post("/api/auth/logout");
147
+ }
148
+ catch (error) {
149
+ // Ignore logout errors
150
+ }
151
+ finally {
152
+ this.clearStoredToken();
153
+ }
154
+ }
155
+ setBaseUrl(url) {
156
+ this.baseUrl = url;
157
+ this.client.defaults.baseURL = url;
158
+ }
159
+ }
160
+ exports.apiClient = new ApiClient();
161
+ //# sourceMappingURL=api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/utils/api.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export declare function checkAuthentication(): boolean;
2
+ export declare function getAuthenticatedUser(): any;
3
+ export declare function requireAuthentication(): void;
4
+ //# sourceMappingURL=auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/utils/auth.ts"],"names":[],"mappings":"AAGA,wBAAgB,mBAAmB,IAAI,OAAO,CAO7C;AAED,wBAAgB,oBAAoB,IAAI,GAAG,CAE1C;AAED,wBAAgB,qBAAqB,IAAI,IAAI,CAI5C"}
@@ -0,0 +1,27 @@
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.checkAuthentication = checkAuthentication;
7
+ exports.getAuthenticatedUser = getAuthenticatedUser;
8
+ exports.requireAuthentication = requireAuthentication;
9
+ const chalk_1 = __importDefault(require("chalk"));
10
+ const api_1 = require("./api");
11
+ function checkAuthentication() {
12
+ if (!api_1.apiClient.isAuthenticated()) {
13
+ console.error(chalk_1.default.red('❌ Authentication required'));
14
+ console.log(chalk_1.default.yellow(' Please login first: mexty login'));
15
+ return false;
16
+ }
17
+ return true;
18
+ }
19
+ function getAuthenticatedUser() {
20
+ return api_1.apiClient.getStoredUser();
21
+ }
22
+ function requireAuthentication() {
23
+ if (!checkAuthentication()) {
24
+ process.exit(1);
25
+ }
26
+ }
27
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/utils/auth.ts"],"names":[],"mappings":";;;;;AAGA,kDAOC;AAED,oDAEC;AAED,sDAIC;AApBD,kDAA0B;AAC1B,+BAAkC;AAElC,SAAgB,mBAAmB;IACjC,IAAI,CAAC,eAAS,CAAC,eAAe,EAAE,EAAE,CAAC;QACjC,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC,CAAC;QACtD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,oCAAoC,CAAC,CAAC,CAAC;QAChE,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAgB,oBAAoB;IAClC,OAAO,eAAS,CAAC,aAAa,EAAE,CAAC;AACnC,CAAC;AAED,SAAgB,qBAAqB;IACnC,IAAI,CAAC,mBAAmB,EAAE,EAAE,CAAC;QAC3B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
@@ -0,0 +1,42 @@
1
+ import { SimpleGit } from "simple-git";
2
+ export declare class GitManager {
3
+ git: SimpleGit;
4
+ constructor(cwd?: string);
5
+ /**
6
+ * Clone a repository to a local directory
7
+ */
8
+ cloneRepository(repoUrl: string, targetDir: string): Promise<void>;
9
+ /**
10
+ * Check if current directory is a Git repository
11
+ */
12
+ isGitRepository(dir?: string): Promise<boolean>;
13
+ /**
14
+ * Get the current repository's remote URL
15
+ */
16
+ getRemoteUrl(dir?: string): Promise<string | null>;
17
+ /**
18
+ * Check if there are uncommitted changes
19
+ */
20
+ hasUncommittedChanges(dir?: string): Promise<boolean>;
21
+ /**
22
+ * Push current branch to remote
23
+ */
24
+ pushToRemote(dir?: string): Promise<void>;
25
+ /**
26
+ * Get repository information
27
+ */
28
+ getRepositoryInfo(dir?: string): Promise<{
29
+ branch: string;
30
+ remoteUrl: string | null;
31
+ hasChanges: boolean;
32
+ }>;
33
+ /**
34
+ * Extract repository name from URL
35
+ */
36
+ static extractRepoName(gitUrl: string): string;
37
+ /**
38
+ * Validate Git URL format
39
+ */
40
+ static isValidGitUrl(url: string): boolean;
41
+ }
42
+ //# sourceMappingURL=git.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../../src/utils/git.ts"],"names":[],"mappings":"AAAA,OAAkB,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAkDlD,qBAAa,UAAU;IACd,GAAG,EAAE,SAAS,CAAC;gBAEV,GAAG,CAAC,EAAE,MAAM;IAIxB;;OAEG;IACG,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAoBxE;;OAEG;IACG,eAAe,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAUrD;;OAEG;IACG,YAAY,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAWxD;;OAEG;IACG,qBAAqB,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAU3D;;OAEG;IACG,YAAY,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAwB/C;;OAEG;IACG,iBAAiB,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;QAC7C,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;QACzB,UAAU,EAAE,OAAO,CAAC;KACrB,CAAC;IAaF;;OAEG;IACH,MAAM,CAAC,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAY9C;;OAEG;IACH,MAAM,CAAC,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;CAU3C"}
@@ -0,0 +1,171 @@
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.GitManager = void 0;
7
+ const simple_git_1 = __importDefault(require("simple-git"));
8
+ const fs_1 = __importDefault(require("fs"));
9
+ const chalk_1 = __importDefault(require("chalk"));
10
+ // Simple spinner implementation since ora v5 has import issues
11
+ class SimpleSpinner {
12
+ constructor(message) {
13
+ this.interval = null;
14
+ this.frames = ["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"];
15
+ this.currentFrame = 0;
16
+ this.message = message;
17
+ }
18
+ start() {
19
+ process.stdout.write(this.message);
20
+ this.interval = setInterval(() => {
21
+ process.stdout.write(`\r${this.frames[this.currentFrame]} ${this.message}`);
22
+ this.currentFrame = (this.currentFrame + 1) % this.frames.length;
23
+ }, 80);
24
+ return this;
25
+ }
26
+ succeed(message) {
27
+ this.stop();
28
+ console.log(`\r✅ ${message}`);
29
+ }
30
+ fail(message) {
31
+ this.stop();
32
+ console.log(`\r❌ ${message}`);
33
+ }
34
+ stop() {
35
+ if (this.interval) {
36
+ clearInterval(this.interval);
37
+ this.interval = null;
38
+ }
39
+ process.stdout.write("\r");
40
+ }
41
+ }
42
+ function ora(message) {
43
+ return new SimpleSpinner(message);
44
+ }
45
+ class GitManager {
46
+ constructor(cwd) {
47
+ this.git = (0, simple_git_1.default)(cwd);
48
+ }
49
+ /**
50
+ * Clone a repository to a local directory
51
+ */
52
+ async cloneRepository(repoUrl, targetDir) {
53
+ const spinner = ora(`Cloning repository from ${repoUrl}...`).start();
54
+ try {
55
+ // Ensure target directory doesn't exist
56
+ if (fs_1.default.existsSync(targetDir)) {
57
+ spinner.fail(chalk_1.default.red(`Directory ${targetDir} already exists`));
58
+ throw new Error(`Directory ${targetDir} already exists`);
59
+ }
60
+ // Clone the repository
61
+ await this.git.clone(repoUrl, targetDir);
62
+ spinner.succeed(chalk_1.default.green(`Repository cloned to ${targetDir}`));
63
+ }
64
+ catch (error) {
65
+ spinner.fail(chalk_1.default.red(`Failed to clone repository: ${error.message}`));
66
+ throw error;
67
+ }
68
+ }
69
+ /**
70
+ * Check if current directory is a Git repository
71
+ */
72
+ async isGitRepository(dir) {
73
+ try {
74
+ const git = dir ? (0, simple_git_1.default)(dir) : this.git;
75
+ await git.status();
76
+ return true;
77
+ }
78
+ catch (error) {
79
+ return false;
80
+ }
81
+ }
82
+ /**
83
+ * Get the current repository's remote URL
84
+ */
85
+ async getRemoteUrl(dir) {
86
+ try {
87
+ const git = dir ? (0, simple_git_1.default)(dir) : this.git;
88
+ const remotes = await git.getRemotes(true);
89
+ const origin = remotes.find((remote) => remote.name === "origin");
90
+ return origin?.refs?.fetch || null;
91
+ }
92
+ catch (error) {
93
+ return null;
94
+ }
95
+ }
96
+ /**
97
+ * Check if there are uncommitted changes
98
+ */
99
+ async hasUncommittedChanges(dir) {
100
+ try {
101
+ const git = dir ? (0, simple_git_1.default)(dir) : this.git;
102
+ const status = await git.status();
103
+ return !status.isClean();
104
+ }
105
+ catch (error) {
106
+ return false;
107
+ }
108
+ }
109
+ /**
110
+ * Push current branch to remote
111
+ */
112
+ async pushToRemote(dir) {
113
+ const spinner = ora("Pushing changes to remote repository...").start();
114
+ try {
115
+ const git = dir ? (0, simple_git_1.default)(dir) : this.git;
116
+ // Get current branch
117
+ const status = await git.status();
118
+ const currentBranch = status.current;
119
+ if (!currentBranch) {
120
+ throw new Error("No current branch found");
121
+ }
122
+ // Push to remote
123
+ await git.push("origin", currentBranch);
124
+ spinner.succeed(chalk_1.default.green("Changes pushed to remote repository"));
125
+ }
126
+ catch (error) {
127
+ spinner.fail(chalk_1.default.red(`Failed to push changes: ${error.message}`));
128
+ throw error;
129
+ }
130
+ }
131
+ /**
132
+ * Get repository information
133
+ */
134
+ async getRepositoryInfo(dir) {
135
+ const git = dir ? (0, simple_git_1.default)(dir) : this.git;
136
+ const status = await git.status();
137
+ const remoteUrl = await this.getRemoteUrl(dir);
138
+ return {
139
+ branch: status.current || "unknown",
140
+ remoteUrl,
141
+ hasChanges: !status.isClean(),
142
+ };
143
+ }
144
+ /**
145
+ * Extract repository name from URL
146
+ */
147
+ static extractRepoName(gitUrl) {
148
+ // Handle both SSH and HTTPS URLs
149
+ const match = gitUrl.match(/\/([^\/]+?)(?:\.git)?$/);
150
+ if (match) {
151
+ return match[1];
152
+ }
153
+ // Fallback: use the last part of the URL
154
+ const parts = gitUrl.split("/");
155
+ return parts[parts.length - 1].replace(".git", "");
156
+ }
157
+ /**
158
+ * Validate Git URL format
159
+ */
160
+ static isValidGitUrl(url) {
161
+ const patterns = [
162
+ /^https:\/\/github\.com\/[\w\-\.]+\/[\w\-\.]+(?:\.git)?$/,
163
+ /^git@github\.com:[\w\-\.]+\/[\w\-\.]+(?:\.git)?$/,
164
+ /^https:\/\/gitlab\.com\/[\w\-\.]+\/[\w\-\.]+(?:\.git)?$/,
165
+ /^git@gitlab\.com:[\w\-\.]+\/[\w\-\.]+(?:\.git)?$/,
166
+ ];
167
+ return patterns.some((pattern) => pattern.test(url));
168
+ }
169
+ }
170
+ exports.GitManager = GitManager;
171
+ //# sourceMappingURL=git.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git.js","sourceRoot":"","sources":["../../src/utils/git.ts"],"names":[],"mappings":";;;;;;AAAA,4DAAkD;AAElD,4CAAoB;AACpB,kDAA0B;AAE1B,+DAA+D;AAC/D,MAAM,aAAa;IAMjB,YAAY,OAAe;QAJnB,aAAQ,GAA0B,IAAI,CAAC;QACvC,WAAM,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QAC5D,iBAAY,GAAG,CAAC,CAAC;QAGvB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED,KAAK;QACH,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACnC,IAAI,CAAC,QAAQ,GAAG,WAAW,CAAC,GAAG,EAAE;YAC/B,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,KAAK,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,CACtD,CAAC;YACF,IAAI,CAAC,YAAY,GAAG,CAAC,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;QACnE,CAAC,EAAE,EAAE,CAAC,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,CAAC,OAAe;QACrB,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,OAAO,CAAC,GAAG,CAAC,OAAO,OAAO,EAAE,CAAC,CAAC;IAChC,CAAC;IAED,IAAI,CAAC,OAAe;QAClB,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,OAAO,CAAC,GAAG,CAAC,OAAO,OAAO,EAAE,CAAC,CAAC;IAChC,CAAC;IAEO,IAAI;QACV,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC7B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACvB,CAAC;QACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;CACF;AAED,SAAS,GAAG,CAAC,OAAe;IAC1B,OAAO,IAAI,aAAa,CAAC,OAAO,CAAC,CAAC;AACpC,CAAC;AAED,MAAa,UAAU;IAGrB,YAAY,GAAY;QACtB,IAAI,CAAC,GAAG,GAAG,IAAA,oBAAS,EAAC,GAAG,CAAC,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,eAAe,CAAC,OAAe,EAAE,SAAiB;QACtD,MAAM,OAAO,GAAG,GAAG,CAAC,2BAA2B,OAAO,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC;QAErE,IAAI,CAAC;YACH,wCAAwC;YACxC,IAAI,YAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC7B,OAAO,CAAC,IAAI,CAAC,eAAK,CAAC,GAAG,CAAC,aAAa,SAAS,iBAAiB,CAAC,CAAC,CAAC;gBACjE,MAAM,IAAI,KAAK,CAAC,aAAa,SAAS,iBAAiB,CAAC,CAAC;YAC3D,CAAC;YAED,uBAAuB;YACvB,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;YAEzC,OAAO,CAAC,OAAO,CAAC,eAAK,CAAC,KAAK,CAAC,wBAAwB,SAAS,EAAE,CAAC,CAAC,CAAC;QACpE,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO,CAAC,IAAI,CAAC,eAAK,CAAC,GAAG,CAAC,+BAA+B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YACxE,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,eAAe,CAAC,GAAY;QAChC,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,IAAA,oBAAS,EAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;YAC5C,MAAM,GAAG,CAAC,MAAM,EAAE,CAAC;YACnB,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,YAAY,CAAC,GAAY;QAC7B,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,IAAA,oBAAS,EAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;YAC5C,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YAC3C,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;YAClE,OAAO,MAAM,EAAE,IAAI,EAAE,KAAK,IAAI,IAAI,CAAC;QACrC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,qBAAqB,CAAC,GAAY;QACtC,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,IAAA,oBAAS,EAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;YAC5C,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,MAAM,EAAE,CAAC;YAClC,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QAC3B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,YAAY,CAAC,GAAY;QAC7B,MAAM,OAAO,GAAG,GAAG,CAAC,yCAAyC,CAAC,CAAC,KAAK,EAAE,CAAC;QAEvE,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,IAAA,oBAAS,EAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;YAE5C,qBAAqB;YACrB,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,MAAM,EAAE,CAAC;YAClC,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC;YAErC,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnB,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;YAC7C,CAAC;YAED,iBAAiB;YACjB,MAAM,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;YAExC,OAAO,CAAC,OAAO,CAAC,eAAK,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC,CAAC;QACtE,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO,CAAC,IAAI,CAAC,eAAK,CAAC,GAAG,CAAC,2BAA2B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YACpE,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,iBAAiB,CAAC,GAAY;QAKlC,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,IAAA,oBAAS,EAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;QAE5C,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,MAAM,EAAE,CAAC;QAClC,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;QAE/C,OAAO;YACL,MAAM,EAAE,MAAM,CAAC,OAAO,IAAI,SAAS;YACnC,SAAS;YACT,UAAU,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE;SAC9B,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,eAAe,CAAC,MAAc;QACnC,iCAAiC;QACjC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;QACrD,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,yCAAyC;QACzC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAChC,OAAO,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACrD,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,aAAa,CAAC,GAAW;QAC9B,MAAM,QAAQ,GAAG;YACf,yDAAyD;YACzD,kDAAkD;YAClD,yDAAyD;YACzD,kDAAkD;SACnD,CAAC;QAEF,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACvD,CAAC;CACF;AAjJD,gCAiJC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mexty/cli",
3
- "version": "1.2.0",
3
+ "version": "1.3.0",
4
4
  "description": "MEXT CLI for managing blocks and repositories",
5
5
  "main": "dist/index.js",
6
6
  "bin": {