@magentrix-corp/magentrix-cli 1.3.15 → 1.3.17

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 (68) hide show
  1. package/LICENSE +25 -25
  2. package/README.md +1166 -1166
  3. package/actions/autopublish.old.js +293 -293
  4. package/actions/config.js +182 -182
  5. package/actions/create.js +466 -466
  6. package/actions/help.js +164 -164
  7. package/actions/iris/buildStage.js +874 -874
  8. package/actions/iris/delete.js +256 -256
  9. package/actions/iris/dev.js +391 -391
  10. package/actions/iris/index.js +6 -6
  11. package/actions/iris/link.js +375 -375
  12. package/actions/iris/recover.js +268 -268
  13. package/actions/main.js +80 -80
  14. package/actions/publish.js +1420 -1420
  15. package/actions/pull.js +684 -684
  16. package/actions/setup.js +148 -148
  17. package/actions/status.js +17 -17
  18. package/actions/update.js +248 -248
  19. package/bin/magentrix.js +393 -393
  20. package/package.json +55 -55
  21. package/utils/assetPaths.js +158 -158
  22. package/utils/autopublishLock.js +77 -77
  23. package/utils/cacher.js +206 -206
  24. package/utils/cli/checkInstanceUrl.js +76 -45
  25. package/utils/cli/helpers/compare.js +282 -282
  26. package/utils/cli/helpers/ensureApiKey.js +63 -63
  27. package/utils/cli/helpers/ensureCredentials.js +68 -68
  28. package/utils/cli/helpers/ensureInstanceUrl.js +75 -75
  29. package/utils/cli/writeRecords.js +262 -262
  30. package/utils/compare.js +135 -135
  31. package/utils/compress.js +17 -17
  32. package/utils/config.js +527 -527
  33. package/utils/debug.js +144 -144
  34. package/utils/diagnostics/testPublishLogic.js +96 -96
  35. package/utils/diff.js +49 -49
  36. package/utils/downloadAssets.js +291 -291
  37. package/utils/filetag.js +115 -115
  38. package/utils/hash.js +14 -14
  39. package/utils/iris/backup.js +411 -411
  40. package/utils/iris/builder.js +541 -541
  41. package/utils/iris/config-reader.js +664 -664
  42. package/utils/iris/deleteHelper.js +150 -150
  43. package/utils/iris/errors.js +537 -537
  44. package/utils/iris/linker.js +601 -601
  45. package/utils/iris/lock.js +360 -360
  46. package/utils/iris/validation.js +360 -360
  47. package/utils/iris/validator.js +281 -281
  48. package/utils/iris/zipper.js +248 -248
  49. package/utils/logger.js +291 -291
  50. package/utils/magentrix/api/assets.js +220 -220
  51. package/utils/magentrix/api/auth.js +107 -107
  52. package/utils/magentrix/api/createEntity.js +61 -61
  53. package/utils/magentrix/api/deleteEntity.js +55 -55
  54. package/utils/magentrix/api/iris.js +251 -251
  55. package/utils/magentrix/api/meqlQuery.js +36 -36
  56. package/utils/magentrix/api/retrieveEntity.js +86 -86
  57. package/utils/magentrix/api/updateEntity.js +66 -66
  58. package/utils/magentrix/fetch.js +168 -168
  59. package/utils/merge.js +22 -22
  60. package/utils/permissionError.js +70 -70
  61. package/utils/preferences.js +40 -40
  62. package/utils/progress.js +469 -469
  63. package/utils/spinner.js +43 -43
  64. package/utils/template.js +52 -52
  65. package/utils/updateFileBase.js +121 -121
  66. package/utils/workspaces.js +108 -108
  67. package/vars/config.js +11 -11
  68. package/vars/global.js +50 -50
@@ -1,150 +1,150 @@
1
- import fs from 'fs';
2
- import path from 'path';
3
- import Config from '../config.js';
4
- import { deleteApp } from '../magentrix/api/iris.js';
5
- import {
6
- detectErrorType,
7
- ErrorTypes,
8
- formatPermissionError,
9
- formatFileLockError,
10
- formatNetworkError
11
- } from './errors.js';
12
-
13
- const config = new Config();
14
-
15
- /**
16
- * Delete an Iris app from the server and update cache.
17
- * Does NOT delete local files or create backups - caller handles that.
18
- *
19
- * @param {string} instanceUrl - Magentrix instance URL
20
- * @param {string} token - OAuth token
21
- * @param {string} slug - App slug (folder name)
22
- * @param {object} options - Options
23
- * @param {boolean} options.updateCache - Whether to update base.json (default: true)
24
- * @returns {Promise<{success: boolean, error: string | null, cleanedFromCache: boolean}>}
25
- */
26
- export async function deleteIrisAppFromServer(instanceUrl, token, slug, options = {}) {
27
- const { updateCache = true } = options;
28
- const result = {
29
- success: false,
30
- error: null,
31
- cleanedFromCache: false
32
- };
33
-
34
- try {
35
- // Delete from server
36
- const deleteResult = await deleteApp(instanceUrl, token, slug);
37
-
38
- if (!deleteResult.success) {
39
- result.error = deleteResult.message || deleteResult.error || 'Unknown error';
40
- return result;
41
- }
42
-
43
- result.success = true;
44
-
45
- // Update cache if requested
46
- if (updateCache) {
47
- config.removeKey(`iris-app:${slug}`, { filename: 'base.json' });
48
- result.cleanedFromCache = true;
49
- }
50
-
51
- return result;
52
- } catch (error) {
53
- // Check if this is a "not found" error (app already deleted on server)
54
- const errorMessage = error?.message || String(error);
55
- const errorLower = errorMessage.toLowerCase();
56
- const isNotFound = errorLower.includes('404') ||
57
- errorLower.includes('not found') ||
58
- errorLower.includes('does not exist');
59
-
60
- if (isNotFound) {
61
- // App doesn't exist on server, but clean up local cache anyway
62
- if (updateCache) {
63
- try {
64
- config.removeKey(`iris-app:${slug}`, { filename: 'base.json' });
65
- result.cleanedFromCache = true;
66
- } catch {
67
- // Ignore cache update errors
68
- }
69
- }
70
- result.success = true;
71
- result.error = 'App not found on server (already deleted)';
72
- return result;
73
- }
74
-
75
- // Check for network errors and provide helpful messages
76
- if (error.code === 'ENOTFOUND' || error.code === 'ECONNREFUSED' || error.code === 'ETIMEDOUT') {
77
- result.error = formatNetworkError({
78
- operation: 'delete app',
79
- url: instanceUrl,
80
- error
81
- });
82
- return result;
83
- }
84
-
85
- result.error = errorMessage;
86
- return result;
87
- }
88
- }
89
-
90
- /**
91
- * Delete local Iris app files.
92
- *
93
- * @param {string} appPath - Absolute path to the app folder
94
- * @returns {{success: boolean, existed: boolean, error: string | null, isPermissionError: boolean, isFileLocked: boolean}}
95
- */
96
- export function deleteLocalIrisAppFiles(appPath) {
97
- if (!fs.existsSync(appPath)) {
98
- return {
99
- success: true,
100
- existed: false,
101
- error: null,
102
- isPermissionError: false,
103
- isFileLocked: false
104
- };
105
- }
106
-
107
- try {
108
- fs.rmSync(appPath, { recursive: true, force: true });
109
- return {
110
- success: true,
111
- existed: true,
112
- error: null,
113
- isPermissionError: false,
114
- isFileLocked: false
115
- };
116
- } catch (error) {
117
- const errorType = detectErrorType(error);
118
-
119
- if (errorType === ErrorTypes.PERMISSION) {
120
- return {
121
- success: false,
122
- existed: true,
123
- error: formatPermissionError({
124
- operation: 'delete files',
125
- path: appPath
126
- }),
127
- isPermissionError: true,
128
- isFileLocked: false
129
- };
130
- }
131
-
132
- if (errorType === ErrorTypes.FILE_LOCKED) {
133
- return {
134
- success: false,
135
- existed: true,
136
- error: formatFileLockError({ path: appPath }),
137
- isPermissionError: false,
138
- isFileLocked: true
139
- };
140
- }
141
-
142
- return {
143
- success: false,
144
- existed: true,
145
- error: error.message,
146
- isPermissionError: false,
147
- isFileLocked: false
148
- };
149
- }
150
- }
1
+ import fs from 'fs';
2
+ import path from 'path';
3
+ import Config from '../config.js';
4
+ import { deleteApp } from '../magentrix/api/iris.js';
5
+ import {
6
+ detectErrorType,
7
+ ErrorTypes,
8
+ formatPermissionError,
9
+ formatFileLockError,
10
+ formatNetworkError
11
+ } from './errors.js';
12
+
13
+ const config = new Config();
14
+
15
+ /**
16
+ * Delete an Iris app from the server and update cache.
17
+ * Does NOT delete local files or create backups - caller handles that.
18
+ *
19
+ * @param {string} instanceUrl - Magentrix instance URL
20
+ * @param {string} token - OAuth token
21
+ * @param {string} slug - App slug (folder name)
22
+ * @param {object} options - Options
23
+ * @param {boolean} options.updateCache - Whether to update base.json (default: true)
24
+ * @returns {Promise<{success: boolean, error: string | null, cleanedFromCache: boolean}>}
25
+ */
26
+ export async function deleteIrisAppFromServer(instanceUrl, token, slug, options = {}) {
27
+ const { updateCache = true } = options;
28
+ const result = {
29
+ success: false,
30
+ error: null,
31
+ cleanedFromCache: false
32
+ };
33
+
34
+ try {
35
+ // Delete from server
36
+ const deleteResult = await deleteApp(instanceUrl, token, slug);
37
+
38
+ if (!deleteResult.success) {
39
+ result.error = deleteResult.message || deleteResult.error || 'Unknown error';
40
+ return result;
41
+ }
42
+
43
+ result.success = true;
44
+
45
+ // Update cache if requested
46
+ if (updateCache) {
47
+ config.removeKey(`iris-app:${slug}`, { filename: 'base.json' });
48
+ result.cleanedFromCache = true;
49
+ }
50
+
51
+ return result;
52
+ } catch (error) {
53
+ // Check if this is a "not found" error (app already deleted on server)
54
+ const errorMessage = error?.message || String(error);
55
+ const errorLower = errorMessage.toLowerCase();
56
+ const isNotFound = errorLower.includes('404') ||
57
+ errorLower.includes('not found') ||
58
+ errorLower.includes('does not exist');
59
+
60
+ if (isNotFound) {
61
+ // App doesn't exist on server, but clean up local cache anyway
62
+ if (updateCache) {
63
+ try {
64
+ config.removeKey(`iris-app:${slug}`, { filename: 'base.json' });
65
+ result.cleanedFromCache = true;
66
+ } catch {
67
+ // Ignore cache update errors
68
+ }
69
+ }
70
+ result.success = true;
71
+ result.error = 'App not found on server (already deleted)';
72
+ return result;
73
+ }
74
+
75
+ // Check for network errors and provide helpful messages
76
+ if (error.code === 'ENOTFOUND' || error.code === 'ECONNREFUSED' || error.code === 'ETIMEDOUT') {
77
+ result.error = formatNetworkError({
78
+ operation: 'delete app',
79
+ url: instanceUrl,
80
+ error
81
+ });
82
+ return result;
83
+ }
84
+
85
+ result.error = errorMessage;
86
+ return result;
87
+ }
88
+ }
89
+
90
+ /**
91
+ * Delete local Iris app files.
92
+ *
93
+ * @param {string} appPath - Absolute path to the app folder
94
+ * @returns {{success: boolean, existed: boolean, error: string | null, isPermissionError: boolean, isFileLocked: boolean}}
95
+ */
96
+ export function deleteLocalIrisAppFiles(appPath) {
97
+ if (!fs.existsSync(appPath)) {
98
+ return {
99
+ success: true,
100
+ existed: false,
101
+ error: null,
102
+ isPermissionError: false,
103
+ isFileLocked: false
104
+ };
105
+ }
106
+
107
+ try {
108
+ fs.rmSync(appPath, { recursive: true, force: true });
109
+ return {
110
+ success: true,
111
+ existed: true,
112
+ error: null,
113
+ isPermissionError: false,
114
+ isFileLocked: false
115
+ };
116
+ } catch (error) {
117
+ const errorType = detectErrorType(error);
118
+
119
+ if (errorType === ErrorTypes.PERMISSION) {
120
+ return {
121
+ success: false,
122
+ existed: true,
123
+ error: formatPermissionError({
124
+ operation: 'delete files',
125
+ path: appPath
126
+ }),
127
+ isPermissionError: true,
128
+ isFileLocked: false
129
+ };
130
+ }
131
+
132
+ if (errorType === ErrorTypes.FILE_LOCKED) {
133
+ return {
134
+ success: false,
135
+ existed: true,
136
+ error: formatFileLockError({ path: appPath }),
137
+ isPermissionError: false,
138
+ isFileLocked: true
139
+ };
140
+ }
141
+
142
+ return {
143
+ success: false,
144
+ existed: true,
145
+ error: error.message,
146
+ isPermissionError: false,
147
+ isFileLocked: false
148
+ };
149
+ }
150
+ }