@git.zone/cli 1.21.4 → 2.0.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 (59) hide show
  1. package/assets/templates/tsconfig_update/tsconfig.json +0 -1
  2. package/dist_ts/00_commitinfo_data.js +2 -2
  3. package/dist_ts/mod_commit/index.js +5 -2
  4. package/dist_ts/mod_commit/mod.helpers.js +24 -9
  5. package/dist_ts/mod_format/classes.baseformatter.js +4 -4
  6. package/dist_ts/mod_format/classes.changecache.js +29 -17
  7. package/dist_ts/mod_format/classes.diffreporter.js +10 -4
  8. package/dist_ts/mod_format/classes.formatstats.js +5 -2
  9. package/dist_ts/mod_format/classes.rollbackmanager.js +41 -17
  10. package/dist_ts/mod_format/format.cleanup.js +5 -3
  11. package/dist_ts/mod_format/format.copy.js +12 -4
  12. package/dist_ts/mod_format/format.gitignore.js +14 -5
  13. package/dist_ts/mod_format/format.license.js +4 -2
  14. package/dist_ts/mod_format/format.packagejson.js +6 -2
  15. package/dist_ts/mod_format/format.readme.js +9 -5
  16. package/dist_ts/mod_format/format.tsconfig.js +7 -4
  17. package/dist_ts/mod_format/formatters/cleanup.formatter.js +2 -2
  18. package/dist_ts/mod_format/formatters/prettier.formatter.js +19 -6
  19. package/dist_ts/mod_format/index.js +9 -3
  20. package/dist_ts/mod_meta/meta.classes.meta.js +82 -17
  21. package/dist_ts/mod_services/classes.serviceconfiguration.d.ts +7 -0
  22. package/dist_ts/mod_services/classes.serviceconfiguration.js +86 -10
  23. package/dist_ts/mod_services/classes.servicemanager.d.ts +33 -0
  24. package/dist_ts/mod_services/classes.servicemanager.js +319 -10
  25. package/dist_ts/mod_services/helpers.d.ts +1 -1
  26. package/dist_ts/mod_services/helpers.js +8 -4
  27. package/dist_ts/mod_services/index.js +51 -27
  28. package/dist_ts/mod_standard/index.js +22 -9
  29. package/dist_ts/mod_template/index.js +2 -2
  30. package/dist_ts/plugins.d.ts +2 -0
  31. package/dist_ts/plugins.js +4 -1
  32. package/package.json +7 -6
  33. package/readme.hints.md +55 -2
  34. package/ts/00_commitinfo_data.ts +1 -1
  35. package/ts/mod_commit/index.ts +4 -4
  36. package/ts/mod_commit/mod.helpers.ts +23 -11
  37. package/ts/mod_format/classes.baseformatter.ts +3 -3
  38. package/ts/mod_format/classes.changecache.ts +28 -16
  39. package/ts/mod_format/classes.diffreporter.ts +9 -8
  40. package/ts/mod_format/classes.formatstats.ts +4 -4
  41. package/ts/mod_format/classes.rollbackmanager.ts +40 -18
  42. package/ts/mod_format/format.cleanup.ts +4 -4
  43. package/ts/mod_format/format.copy.ts +11 -3
  44. package/ts/mod_format/format.gitignore.ts +13 -6
  45. package/ts/mod_format/format.license.ts +3 -3
  46. package/ts/mod_format/format.packagejson.ts +5 -3
  47. package/ts/mod_format/format.readme.ts +8 -11
  48. package/ts/mod_format/format.tsconfig.ts +6 -5
  49. package/ts/mod_format/formatters/cleanup.formatter.ts +1 -1
  50. package/ts/mod_format/formatters/prettier.formatter.ts +18 -8
  51. package/ts/mod_format/index.ts +10 -5
  52. package/ts/mod_meta/meta.classes.meta.ts +84 -41
  53. package/ts/mod_services/classes.serviceconfiguration.ts +121 -35
  54. package/ts/mod_services/classes.servicemanager.ts +365 -32
  55. package/ts/mod_services/helpers.ts +8 -4
  56. package/ts/mod_services/index.ts +73 -45
  57. package/ts/mod_standard/index.ts +23 -10
  58. package/ts/mod_template/index.ts +1 -1
  59. package/ts/plugins.ts +4 -0
@@ -21,7 +21,12 @@ export const run = async (argvArg) => {
21
21
  await serviceManager.showStatus();
22
22
  break;
23
23
  case 'config':
24
- await serviceManager.showConfig();
24
+ if (service === 'services' || argvArg._[2] === 'services') {
25
+ await handleConfigureServices(serviceManager);
26
+ }
27
+ else {
28
+ await serviceManager.showConfig();
29
+ }
25
30
  break;
26
31
  case 'compass':
27
32
  await serviceManager.showCompassConnection();
@@ -56,15 +61,17 @@ async function handleStart(serviceManager, service) {
56
61
  case 's3':
57
62
  await serviceManager.startMinIO();
58
63
  break;
64
+ case 'elasticsearch':
65
+ case 'es':
66
+ await serviceManager.startElasticsearch();
67
+ break;
59
68
  case 'all':
60
69
  case '':
61
- await serviceManager.startMongoDB();
62
- console.log();
63
- await serviceManager.startMinIO();
70
+ await serviceManager.startAll();
64
71
  break;
65
72
  default:
66
73
  logger.log('error', `Unknown service: ${service}`);
67
- logger.log('note', 'Use: mongo, s3, or all');
74
+ logger.log('note', 'Use: mongo, s3, elasticsearch, or all');
68
75
  break;
69
76
  }
70
77
  }
@@ -79,15 +86,17 @@ async function handleStop(serviceManager, service) {
79
86
  case 's3':
80
87
  await serviceManager.stopMinIO();
81
88
  break;
89
+ case 'elasticsearch':
90
+ case 'es':
91
+ await serviceManager.stopElasticsearch();
92
+ break;
82
93
  case 'all':
83
94
  case '':
84
- await serviceManager.stopMongoDB();
85
- console.log();
86
- await serviceManager.stopMinIO();
95
+ await serviceManager.stopAll();
87
96
  break;
88
97
  default:
89
98
  logger.log('error', `Unknown service: ${service}`);
90
- logger.log('note', 'Use: mongo, s3, or all');
99
+ logger.log('note', 'Use: mongo, s3, elasticsearch, or all');
91
100
  break;
92
101
  }
93
102
  }
@@ -106,14 +115,17 @@ async function handleRestart(serviceManager, service) {
106
115
  await plugins.smartdelay.delayFor(2000);
107
116
  await serviceManager.startMinIO();
108
117
  break;
118
+ case 'elasticsearch':
119
+ case 'es':
120
+ await serviceManager.stopElasticsearch();
121
+ await plugins.smartdelay.delayFor(2000);
122
+ await serviceManager.startElasticsearch();
123
+ break;
109
124
  case 'all':
110
125
  case '':
111
- await serviceManager.stopMongoDB();
112
- await serviceManager.stopMinIO();
126
+ await serviceManager.stopAll();
113
127
  await plugins.smartdelay.delayFor(2000);
114
- await serviceManager.startMongoDB();
115
- console.log();
116
- await serviceManager.startMinIO();
128
+ await serviceManager.startAll();
117
129
  break;
118
130
  default:
119
131
  logger.log('error', `Unknown service: ${service}`);
@@ -152,37 +164,49 @@ async function handleClean(serviceManager) {
152
164
  logger.log('note', 'Cancelled');
153
165
  }
154
166
  }
167
+ async function handleConfigureServices(serviceManager) {
168
+ helpers.printHeader('Configure Services');
169
+ await serviceManager.configureServices();
170
+ }
155
171
  function showHelp() {
156
172
  helpers.printHeader('GitZone Services Manager');
157
173
  logger.log('ok', 'Usage: gitzone services [command] [options]');
158
174
  console.log();
159
175
  logger.log('note', 'Commands:');
160
- logger.log('info', ' start [service] Start services (mongo|s3|all)');
161
- logger.log('info', ' stop [service] Stop services (mongo|s3|all)');
162
- logger.log('info', ' restart [service] Restart services (mongo|s3|all)');
176
+ logger.log('info', ' start [service] Start services (mongo|s3|elasticsearch|all)');
177
+ logger.log('info', ' stop [service] Stop services (mongo|s3|elasticsearch|all)');
178
+ logger.log('info', ' restart [service] Restart services (mongo|s3|elasticsearch|all)');
163
179
  logger.log('info', ' status Show service status');
164
180
  logger.log('info', ' config Show current configuration');
181
+ logger.log('info', ' config services Configure which services are enabled');
165
182
  logger.log('info', ' compass Show MongoDB Compass connection string');
166
- logger.log('info', ' logs [service] Show logs (mongo|s3|all) [lines]');
183
+ logger.log('info', ' logs [service] Show logs (mongo|s3|elasticsearch|all) [lines]');
167
184
  logger.log('info', ' reconfigure Reassign ports and restart services');
168
185
  logger.log('info', ' remove Remove all containers');
169
186
  logger.log('info', ' clean Remove all containers and data ⚠️');
170
187
  logger.log('info', ' help Show this help message');
171
188
  console.log();
189
+ logger.log('note', 'Available Services:');
190
+ logger.log('info', ' • MongoDB (mongo) - Document database');
191
+ logger.log('info', ' • MinIO (s3) - S3-compatible object storage');
192
+ logger.log('info', ' • Elasticsearch (elasticsearch) - Search and analytics engine');
193
+ console.log();
172
194
  logger.log('note', 'Features:');
173
195
  logger.log('info', ' • Auto-creates .nogit/env.json with smart defaults');
174
- logger.log('info', ' • Random ports (20000-30000) to avoid conflicts');
196
+ logger.log('info', ' • Random ports (20000-30000) for MongoDB/MinIO to avoid conflicts');
197
+ logger.log('info', ' • Elasticsearch uses standard port 9200');
175
198
  logger.log('info', ' • Project-specific containers for multi-project support');
176
199
  logger.log('info', ' • Preserves custom configuration values');
177
200
  logger.log('info', ' • MongoDB Compass connection support');
178
201
  console.log();
179
202
  logger.log('note', 'Examples:');
180
- logger.log('info', ' gitzone services start # Start all services');
181
- logger.log('info', ' gitzone services start mongo # Start only MongoDB');
182
- logger.log('info', ' gitzone services stop # Stop all services');
183
- logger.log('info', ' gitzone services status # Check service status');
184
- logger.log('info', ' gitzone services config # Show configuration');
185
- logger.log('info', ' gitzone services compass # Get MongoDB Compass connection');
186
- logger.log('info', ' gitzone services logs mongo 50 # Show last 50 lines of MongoDB logs');
203
+ logger.log('info', ' gitzone services start # Start all services');
204
+ logger.log('info', ' gitzone services start mongo # Start only MongoDB');
205
+ logger.log('info', ' gitzone services start elasticsearch # Start only Elasticsearch');
206
+ logger.log('info', ' gitzone services stop # Stop all services');
207
+ logger.log('info', ' gitzone services status # Check service status');
208
+ logger.log('info', ' gitzone services config # Show configuration');
209
+ logger.log('info', ' gitzone services compass # Get MongoDB Compass connection');
210
+ logger.log('info', ' gitzone services logs elasticsearch # Show Elasticsearch logs');
187
211
  }
188
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9tb2Rfc2VydmljZXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxrQkFBa0IsQ0FBQztBQUM1QyxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQUN4QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDN0QsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRS9DLE1BQU0sQ0FBQyxNQUFNLEdBQUcsR0FBRyxLQUFLLEVBQUUsT0FBWSxFQUFFLEVBQUU7SUFDeEMsTUFBTSxjQUFjLEdBQUcsSUFBSSxjQUFjLEVBQUUsQ0FBQztJQUM1QyxNQUFNLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUU1QixNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLE1BQU0sQ0FBQztJQUN2QyxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQztJQUV0QyxRQUFRLE9BQU8sRUFBRSxDQUFDO1FBQ2hCLEtBQUssT0FBTztZQUNWLE1BQU0sV0FBVyxDQUFDLGNBQWMsRUFBRSxPQUFPLENBQUMsQ0FBQztZQUMzQyxNQUFNO1FBRVIsS0FBSyxNQUFNO1lBQ1QsTUFBTSxVQUFVLENBQUMsY0FBYyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQzFDLE1BQU07UUFFUixLQUFLLFNBQVM7WUFDWixNQUFNLGFBQWEsQ0FBQyxjQUFjLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDN0MsTUFBTTtRQUVSLEtBQUssUUFBUTtZQUNYLE1BQU0sY0FBYyxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ2xDLE1BQU07UUFFUixLQUFLLFFBQVE7WUFDWCxNQUFNLGNBQWMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNsQyxNQUFN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
212
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9tb2Rfc2VydmljZXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxrQkFBa0IsQ0FBQztBQUM1QyxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQUN4QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDN0QsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRS9DLE1BQU0sQ0FBQyxNQUFNLEdBQUcsR0FBRyxLQUFLLEVBQUUsT0FBWSxFQUFFLEVBQUU7SUFDeEMsTUFBTSxjQUFjLEdBQUcsSUFBSSxjQUFjLEVBQUUsQ0FBQztJQUM1QyxNQUFNLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUU1QixNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLE1BQU0sQ0FBQztJQUN2QyxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQztJQUV0QyxRQUFRLE9BQU8sRUFBRSxDQUFDO1FBQ2hCLEtBQUssT0FBTztZQUNWLE1BQU0sV0FBVyxDQUFDLGNBQWMsRUFBRSxPQUFPLENBQUMsQ0FBQztZQUMzQyxNQUFNO1FBRVIsS0FBSyxNQUFNO1lBQ1QsTUFBTSxVQUFVLENBQUMsY0FBYyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQzFDLE1BQU07UUFFUixLQUFLLFNBQVM7WUFDWixNQUFNLGFBQWEsQ0FBQyxjQUFjLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDN0MsTUFBTTtRQUVSLEtBQUssUUFBUTtZQUNYLE1BQU0sY0FBYyxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ2xDLE1BQU07UUFFUixLQUFLLFFBQVE7WUFDWCxJQUFJLE9BQU8sS0FBSyxVQUFVLElBQUksT0FBTyxDQUFDLENBQUMs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
@@ -4,22 +4,35 @@
4
4
  import * as plugins from './mod.plugins.js';
5
5
  import * as paths from '../paths.js';
6
6
  import { logger } from '../gitzone.logging.js';
7
- export let run = () => {
7
+ export let run = async () => {
8
8
  const done = plugins.smartpromise.defer();
9
9
  logger.log('warn', 'no action specified');
10
+ const dirEntries = await plugins.smartfs.directory(paths.templatesDir).list();
11
+ const templates = [];
12
+ for (const entry of dirEntries) {
13
+ try {
14
+ const stats = await plugins.smartfs
15
+ .file(plugins.path.join(paths.templatesDir, entry.path))
16
+ .stat();
17
+ if (stats.isDirectory) {
18
+ templates.push(entry.name);
19
+ }
20
+ }
21
+ catch {
22
+ // Skip entries that can't be accessed
23
+ }
24
+ }
25
+ let projects = `\n`;
26
+ for (const template of templates) {
27
+ projects += ` - ${template}\n`;
28
+ }
10
29
  logger.log('info', `
11
30
  You can do one of the following things:
12
31
  * create a new project with 'gitzone template [template]'
13
- the following templates exist: ${(() => {
14
- let projects = `\n`;
15
- for (const template of plugins.smartfile.fs.listFoldersSync(paths.templatesDir)) {
16
- projects += ` - ${template}\n`;
17
- }
18
- return projects;
19
- })()}
32
+ the following templates exist: ${projects}
20
33
  * format a project with 'gitzone format'
21
34
  `);
22
35
  done.resolve();
23
36
  return done.promise;
24
37
  };
25
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9tb2Rfc3RhbmRhcmQvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O3FEQUVxRDtBQUNyRCxPQUFPLEtBQUssT0FBTyxNQUFNLGtCQUFrQixDQUFDO0FBQzVDLE9BQU8sS0FBSyxLQUFLLE1BQU0sYUFBYSxDQUFDO0FBRXJDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUUvQyxNQUFNLENBQUMsSUFBSSxHQUFHLEdBQUcsR0FBRyxFQUFFO0lBQ3BCLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDMUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUscUJBQXFCLENBQUMsQ0FBQztJQUMxQyxNQUFNLENBQUMsR0FBRyxDQUNSLE1BQU0sRUFDTjs7O3VDQUdtQyxDQUFDLEdBQUcsRUFBRTtRQUNyQyxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFDcEIsS0FBSyxNQUFNLFFBQVEsSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxlQUFlLENBQ3pELEtBQUssQ0FBQyxZQUFZLENBQ25CLEVBQUUsQ0FBQztZQUNGLFFBQVEsSUFBSSxZQUFZLFFBQVEsSUFBSSxDQUFDO1FBQ3ZDLENBQUM7UUFDRCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDLENBQUMsRUFBRTs7R0FFUCxDQUNBLENBQUM7SUFDRixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDZixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7QUFDdEIsQ0FBQyxDQUFDIn0=
38
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9tb2Rfc3RhbmRhcmQvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O3FEQUVxRDtBQUNyRCxPQUFPLEtBQUssT0FBTyxNQUFNLGtCQUFrQixDQUFDO0FBQzVDLE9BQU8sS0FBSyxLQUFLLE1BQU0sYUFBYSxDQUFDO0FBRXJDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUUvQyxNQUFNLENBQUMsSUFBSSxHQUFHLEdBQUcsS0FBSyxJQUFJLEVBQUU7SUFDMUIsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUMxQyxNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO0lBRTFDLE1BQU0sVUFBVSxHQUFHLE1BQU0sT0FBTyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzlFLE1BQU0sU0FBUyxHQUFhLEVBQUUsQ0FBQztJQUMvQixLQUFLLE1BQU0sS0FBSyxJQUFJLFVBQVUsRUFBRSxDQUFDO1FBQy9CLElBQUksQ0FBQztZQUNILE1BQU0sS0FBSyxHQUFHLE1BQU0sT0FBTyxDQUFDLE9BQU87aUJBQ2hDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztpQkFDdkQsSUFBSSxFQUFFLENBQUM7WUFDVixJQUFJLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDdEIsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDN0IsQ0FBQztRQUNILENBQUM7UUFBQyxNQUFNLENBQUM7WUFDUCxzQ0FBc0M7UUFDeEMsQ0FBQztJQUNILENBQUM7SUFFRCxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUM7SUFDcEIsS0FBSyxNQUFNLFFBQVEsSUFBSSxTQUFTLEVBQUUsQ0FBQztRQUNqQyxRQUFRLElBQUksWUFBWSxRQUFRLElBQUksQ0FBQztJQUN2QyxDQUFDO0lBRUQsTUFBTSxDQUFDLEdBQUcsQ0FDUixNQUFNLEVBQ047Ozt1Q0FHbUMsUUFBUTs7R0FFNUMsQ0FDQSxDQUFDO0lBQ0YsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ2YsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0FBQ3RCLENBQUMsQ0FBQyJ9
@@ -8,7 +8,7 @@ export const getTemplatePath = (templateNameArg) => {
8
8
  * receives a template name and returns wether there is a corresponding template
9
9
  */
10
10
  export const isTemplate = async (templateNameArg) => {
11
- return plugins.smartfile.fs.isDirectory(getTemplatePath(templateNameArg));
11
+ return plugins.smartfs.directory(getTemplatePath(templateNameArg)).exists();
12
12
  };
13
13
  export const getTemplate = async (templateNameArg) => {
14
14
  if (isTemplate(templateNameArg)) {
@@ -44,4 +44,4 @@ export const run = async (argvArg) => {
44
44
  await localScafTemplate.askCliForMissingVariables();
45
45
  await localScafTemplate.writeToDisk(paths.cwd);
46
46
  };
47
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9tb2RfdGVtcGxhdGUvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxrQkFBa0IsQ0FBQztBQUM1QyxPQUFPLEtBQUssS0FBSyxNQUFNLGFBQWEsQ0FBQztBQUVyQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFL0MsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLENBQUMsZUFBdUIsRUFBRSxFQUFFO0lBQ3pELE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBRSxlQUFlLENBQUMsQ0FBQztBQUNoRSxDQUFDLENBQUM7QUFFRjs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyxLQUFLLEVBQUUsZUFBdUIsRUFBRSxFQUFFO0lBQzFELE9BQU8sT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDO0FBQzVFLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxLQUFLLEVBQUUsZUFBdUIsRUFBRSxFQUFFO0lBQzNELElBQUksVUFBVSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUM7UUFDaEMsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLE9BQU8sQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUMxRCxlQUFlLENBQUMsZUFBZSxDQUFDLENBQ2pDLENBQUM7UUFDRixNQUFNLGlCQUFpQixDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDOUMsT0FBTyxpQkFBaUIsQ0FBQztJQUMzQixDQUFDO1NBQU0sQ0FBQztRQUNOLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztBQUNILENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLEdBQUcsR0FBRyxLQUFLLEVBQUUsT0FBWSxFQUFFLEVBQUU7SUFDeEMsSUFBSSxjQUFjLEdBQVcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUUxQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDcEIsTUFBTSxhQUFhLEdBQUcsSUFBSSxPQUFPLENBQUMsYUFBYSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ2hFLE1BQU0sWUFBWSxHQUFHLE1BQU0sYUFBYSxDQUFDLFdBQVcsQ0FBQztZQUNuRCxJQUFJLEVBQUUsTUFBTTtZQUNaLE9BQU8sRUFBRSxLQUFLO1lBQ2QsT0FBTyxFQUNMLDRFQUE0RTtZQUM5RSxJQUFJLEVBQUUsY0FBYztZQUNwQixPQUFPLEVBQUUsQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxTQUFTLENBQUM7U0FDOUMsQ0FBQyxDQUFDO1FBQ0gsY0FBYyxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUM7SUFDdEMsQ0FBQztJQUVELElBQUksTUFBTSxVQUFVLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQztRQUNyQyxNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSw0QkFBNEIsY0FBYyxFQUFFLENBQUMsQ0FBQztJQUNuRSxDQUFDO1NBQU0sQ0FBQztRQUNOLE1BQU0sQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLFlBQVksY0FBYyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ2hFLE9BQU87SUFDVCxDQUFDO0lBRUQsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLFdBQVcsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUM1RCxNQUFNLGlCQUFpQixDQUFDLHlCQUF5QixFQUFFLENBQUM7SUFDcEQsTUFBTSxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2pELENBQUMsQ0FBQyJ9
47
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9tb2RfdGVtcGxhdGUvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxrQkFBa0IsQ0FBQztBQUM1QyxPQUFPLEtBQUssS0FBSyxNQUFNLGFBQWEsQ0FBQztBQUVyQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFL0MsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLENBQUMsZUFBdUIsRUFBRSxFQUFFO0lBQ3pELE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBRSxlQUFlLENBQUMsQ0FBQztBQUNoRSxDQUFDLENBQUM7QUFFRjs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyxLQUFLLEVBQUUsZUFBdUIsRUFBRSxFQUFFO0lBQzFELE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDOUUsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLEtBQUssRUFBRSxlQUF1QixFQUFFLEVBQUU7SUFDM0QsSUFBSSxVQUFVLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQztRQUNoQyxNQUFNLGlCQUFpQixHQUFHLElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQzFELGVBQWUsQ0FBQyxlQUFlLENBQUMsQ0FDakMsQ0FBQztRQUNGLE1BQU0saUJBQWlCLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUM5QyxPQUFPLGlCQUFpQixDQUFDO0lBQzNCLENBQUM7U0FBTSxDQUFDO1FBQ04sT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0FBQ0gsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sR0FBRyxHQUFHLEtBQUssRUFBRSxPQUFZLEVBQUUsRUFBRTtJQUN4QyxJQUFJLGNBQWMsR0FBVyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRTFDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUNwQixNQUFNLGFBQWEsR0FBRyxJQUFJLE9BQU8sQ0FBQyxhQUFhLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDaEUsTUFBTSxZQUFZLEdBQUcsTUFBTSxhQUFhLENBQUMsV0FBVyxDQUFDO1lBQ25ELElBQUksRUFBRSxNQUFNO1lBQ1osT0FBTyxFQUFFLEtBQUs7WUFDZCxPQUFPLEVBQ0wsNEVBQTRFO1lBQzlFLElBQUksRUFBRSxjQUFjO1lBQ3BCLE9BQU8sRUFBRSxDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFNBQVMsQ0FBQztTQUM5QyxDQUFDLENBQUM7UUFDSCxjQUFjLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQztJQUN0QyxDQUFDO0lBRUQsSUFBSSxNQUFNLFVBQVUsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDO1FBQ3JDLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLDRCQUE0QixjQUFjLEVBQUUsQ0FBQyxDQUFDO0lBQ25FLENBQUM7U0FBTSxDQUFDO1FBQ04sTUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsWUFBWSxjQUFjLGdCQUFnQixDQUFDLENBQUM7UUFDaEUsT0FBTztJQUNULENBQUM7SUFFRCxNQUFNLGlCQUFpQixHQUFHLE1BQU0sV0FBVyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQzVELE1BQU0saUJBQWlCLENBQUMseUJBQXlCLEVBQUUsQ0FBQztJQUNwRCxNQUFNLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDakQsQ0FBQyxDQUFDIn0=
@@ -10,6 +10,8 @@ import * as smartupdate from '@push.rocks/smartupdate';
10
10
  import * as smartshell from '@push.rocks/smartshell';
11
11
  import * as smartnetwork from '@push.rocks/smartnetwork';
12
12
  import * as smartfile from '@push.rocks/smartfile';
13
+ import { SmartFs } from '@push.rocks/smartfs';
13
14
  import * as smartinteract from '@push.rocks/smartinteract';
14
15
  import * as smartdelay from '@push.rocks/smartdelay';
16
+ export declare const smartfs: SmartFs;
15
17
  export { smartlog, smartlogDestinationLocal, npmextra, path, projectinfo, smartcli, smartpath, smartpromise, smartupdate, smartshell, smartnetwork, smartfile, smartinteract, smartdelay, };
@@ -10,7 +10,10 @@ import * as smartupdate from '@push.rocks/smartupdate';
10
10
  import * as smartshell from '@push.rocks/smartshell';
11
11
  import * as smartnetwork from '@push.rocks/smartnetwork';
12
12
  import * as smartfile from '@push.rocks/smartfile';
13
+ import { SmartFs, SmartFsProviderNode } from '@push.rocks/smartfs';
13
14
  import * as smartinteract from '@push.rocks/smartinteract';
14
15
  import * as smartdelay from '@push.rocks/smartdelay';
16
+ // Create smartfs instance for filesystem operations
17
+ export const smartfs = new SmartFs(new SmartFsProviderNode());
15
18
  export { smartlog, smartlogDestinationLocal, npmextra, path, projectinfo, smartcli, smartpath, smartpromise, smartupdate, smartshell, smartnetwork, smartfile, smartinteract, smartdelay, };
16
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2lucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3BsdWdpbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLFFBQVEsTUFBTSxzQkFBc0IsQ0FBQztBQUNqRCxPQUFPLEtBQUssd0JBQXdCLE1BQU0sd0NBQXdDLENBQUM7QUFDbkYsT0FBTyxLQUFLLFFBQVEsTUFBTSxzQkFBc0IsQ0FBQztBQUNqRCxPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUM3QixPQUFPLEtBQUssV0FBVyxNQUFNLHlCQUF5QixDQUFDO0FBQ3ZELE9BQU8sS0FBSyxRQUFRLE1BQU0sc0JBQXNCLENBQUM7QUFDakQsT0FBTyxLQUFLLFNBQVMsTUFBTSx1QkFBdUIsQ0FBQztBQUNuRCxPQUFPLEtBQUssWUFBWSxNQUFNLDBCQUEwQixDQUFDO0FBQ3pELE9BQU8sS0FBSyxXQUFXLE1BQU0seUJBQXlCLENBQUM7QUFDdkQsT0FBTyxLQUFLLFVBQVUsTUFBTSx3QkFBd0IsQ0FBQztBQUNyRCxPQUFPLEtBQUssWUFBWSxNQUFNLDBCQUEwQixDQUFDO0FBQ3pELE9BQU8sS0FBSyxTQUFTLE1BQU0sdUJBQXVCLENBQUM7QUFDbkQsT0FBTyxLQUFLLGFBQWEsTUFBTSwyQkFBMkIsQ0FBQztBQUMzRCxPQUFPLEtBQUssVUFBVSxNQUFNLHdCQUF3QixDQUFDO0FBRXJELE9BQU8sRUFDTCxRQUFRLEVBQ1Isd0JBQXdCLEVBQ3hCLFFBQVEsRUFDUixJQUFJLEVBQ0osV0FBVyxFQUNYLFFBQVEsRUFDUixTQUFTLEVBQ1QsWUFBWSxFQUNaLFdBQVcsRUFDWCxVQUFVLEVBQ1YsWUFBWSxFQUNaLFNBQVMsRUFDVCxhQUFhLEVBQ2IsVUFBVSxHQUNYLENBQUMifQ==
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2lucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3BsdWdpbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLFFBQVEsTUFBTSxzQkFBc0IsQ0FBQztBQUNqRCxPQUFPLEtBQUssd0JBQXdCLE1BQU0sd0NBQXdDLENBQUM7QUFDbkYsT0FBTyxLQUFLLFFBQVEsTUFBTSxzQkFBc0IsQ0FBQztBQUNqRCxPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUM3QixPQUFPLEtBQUssV0FBVyxNQUFNLHlCQUF5QixDQUFDO0FBQ3ZELE9BQU8sS0FBSyxRQUFRLE1BQU0sc0JBQXNCLENBQUM7QUFDakQsT0FBTyxLQUFLLFNBQVMsTUFBTSx1QkFBdUIsQ0FBQztBQUNuRCxPQUFPLEtBQUssWUFBWSxNQUFNLDBCQUEwQixDQUFDO0FBQ3pELE9BQU8sS0FBSyxXQUFXLE1BQU0seUJBQXlCLENBQUM7QUFDdkQsT0FBTyxLQUFLLFVBQVUsTUFBTSx3QkFBd0IsQ0FBQztBQUNyRCxPQUFPLEtBQUssWUFBWSxNQUFNLDBCQUEwQixDQUFDO0FBQ3pELE9BQU8sS0FBSyxTQUFTLE1BQU0sdUJBQXVCLENBQUM7QUFDbkQsT0FBTyxFQUFFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ25FLE9BQU8sS0FBSyxhQUFhLE1BQU0sMkJBQTJCLENBQUM7QUFDM0QsT0FBTyxLQUFLLFVBQVUsTUFBTSx3QkFBd0IsQ0FBQztBQUVyRCxvREFBb0Q7QUFDcEQsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLElBQUksT0FBTyxDQUFDLElBQUksbUJBQW1CLEVBQUUsQ0FBQyxDQUFDO0FBRTlELE9BQU8sRUFDTCxRQUFRLEVBQ1Isd0JBQXdCLEVBQ3hCLFFBQVEsRUFDUixJQUFJLEVBQ0osV0FBVyxFQUNYLFFBQVEsRUFDUixTQUFTLEVBQ1QsWUFBWSxFQUNaLFdBQVcsRUFDWCxVQUFVLEVBQ1YsWUFBWSxFQUNaLFNBQVMsRUFDVCxhQUFhLEVBQ2IsVUFBVSxHQUNYLENBQUMifQ==
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@git.zone/cli",
3
3
  "private": false,
4
- "version": "1.21.4",
4
+ "version": "2.0.0",
5
5
  "description": "A comprehensive CLI tool for enhancing and managing local development workflows with gitzone utilities, focusing on project setup, version control, code formatting, and template management.",
6
6
  "main": "dist_ts/index.ts",
7
7
  "typings": "dist_ts/index.d.ts",
@@ -39,15 +39,14 @@
39
39
  },
40
40
  "homepage": "https://gitlab.com/gitzone/private/gitzone#readme",
41
41
  "devDependencies": {
42
- "@git.zone/tsbuild": "^2.7.1",
43
- "@git.zone/tsrun": "^1.6.2",
44
- "@git.zone/tstest": "^2.7.0",
42
+ "@git.zone/tsbuild": "^3.1.0",
43
+ "@git.zone/tsrun": "^2.0.0",
44
+ "@git.zone/tstest": "^3.1.3",
45
45
  "@push.rocks/smartdelay": "^3.0.5",
46
- "@push.rocks/smartfile": "^11.2.7",
47
46
  "@push.rocks/smartinteract": "^2.0.16",
48
47
  "@push.rocks/smartnetwork": "^4.4.0",
49
48
  "@push.rocks/smartshell": "^3.3.0",
50
- "@types/node": "^22.15.18"
49
+ "@types/node": "^24.10.1"
51
50
  },
52
51
  "dependencies": {
53
52
  "@git.zone/tsdoc": "^1.9.2",
@@ -61,6 +60,8 @@
61
60
  "@push.rocks/smartchok": "^1.1.1",
62
61
  "@push.rocks/smartcli": "^4.0.19",
63
62
  "@push.rocks/smartdiff": "^1.0.3",
63
+ "@push.rocks/smartfile": "^13.0.1",
64
+ "@push.rocks/smartfs": "^1.1.0",
64
65
  "@push.rocks/smartgulp": "^3.0.4",
65
66
  "@push.rocks/smartjson": "^5.2.0",
66
67
  "@push.rocks/smartlegal": "^1.0.27",
package/readme.hints.md CHANGED
@@ -243,7 +243,60 @@ gitzone format --clean-backups
243
243
 
244
244
  ## API Changes
245
245
 
246
- - smartfile API updated to use fs._ and memory._ namespaces
246
+ ### Smartfile v13 Migration (Latest - Completed)
247
+
248
+ The project has been fully migrated from @push.rocks/smartfile v11 to v13, which introduced a major breaking change where filesystem operations were split into two separate packages:
249
+
250
+ **Packages:**
251
+ - `@push.rocks/smartfile` v13.0.1 - File representation classes (SmartFile, StreamFile, VirtualDirectory)
252
+ - `@push.rocks/smartfs` v1.1.0 - Filesystem operations (read, write, exists, stat, etc.)
253
+
254
+ **Key API Changes:**
255
+ 1. **File Reading**:
256
+ - Old: `plugins.smartfile.fs.toStringSync(path)` or `plugins.smartfile.fs.toObjectSync(path)`
257
+ - New: `await plugins.smartfs.file(path).encoding('utf8').read()` + JSON.parse if needed
258
+ - Important: `read()` returns `string | Buffer` - use `as string` type assertion when encoding is set
259
+
260
+ 2. **File Writing**:
261
+ - Old: `plugins.smartfile.memory.toFs(content, path)` or `plugins.smartfile.memory.toFsSync(content, path)`
262
+ - New: `await plugins.smartfs.file(path).encoding('utf8').write(content)`
263
+
264
+ 3. **File Existence**:
265
+ - Old: `plugins.smartfile.fs.fileExists(path)` or `plugins.smartfile.fs.fileExistsSync(path)`
266
+ - New: `await plugins.smartfs.file(path).exists()`
267
+
268
+ 4. **Directory Operations**:
269
+ - Old: `plugins.smartfile.fs.ensureDir(path)`
270
+ - New: `await plugins.smartfs.directory(path).recursive().create()`
271
+ - Old: `plugins.smartfile.fs.remove(path)`
272
+ - New: `await plugins.smartfs.directory(path).recursive().delete()` or `await plugins.smartfs.file(path).delete()`
273
+
274
+ 5. **Directory Listing**:
275
+ - Old: `plugins.smartfile.fs.listFolders(path)` or `plugins.smartfile.fs.listFoldersSync(path)`
276
+ - New: `await plugins.smartfs.directory(path).list()` then filter by `stats.isDirectory`
277
+ - Note: `list()` returns `IDirectoryEntry[]` with `path` and `name` properties - use `stat()` to check if directory
278
+
279
+ 6. **File Stats**:
280
+ - Old: `stats.isDirectory()` (method)
281
+ - New: `stats.isDirectory` (boolean property)
282
+ - Old: `stats.mtimeMs`
283
+ - New: `stats.mtime.getTime()`
284
+
285
+ 7. **SmartFile Factory**:
286
+ - Old: Direct SmartFile instantiation
287
+ - New: `plugins.smartfile.SmartFileFactory.nodeFs()` then factory methods
288
+
289
+ **Migration Pattern:**
290
+ All sync methods must become async. Functions that were previously synchronous (like `getProjectName()`) now return `Promise<T>` and must be awaited.
291
+
292
+ **Affected Modules:**
293
+ - ts/mod_format/* (largest area - 15+ files)
294
+ - ts/mod_commit/* (version bumping)
295
+ - ts/mod_services/* (configuration management)
296
+ - ts/mod_meta/* (meta repository management)
297
+ - ts/mod_standard/* (template listing)
298
+ - ts/mod_template/* (template operations)
299
+
300
+ **Previous API Changes:**
247
301
  - smartnpm requires instance creation: `new NpmRegistry()`
248
- - All file operations now use updated APIs
249
302
  - Type imports use `import type` for proper verbatim module syntax
@@ -3,6 +3,6 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@git.zone/cli',
6
- version: '1.21.4',
6
+ version: '2.0.0',
7
7
  description: 'A comprehensive CLI tool for enhancing and managing local development workflows with gitzone utilities, focusing on project setup, version control, code formatting, and template management.'
8
8
  }
@@ -142,10 +142,10 @@ export const run = async (argvArg: any) => {
142
142
  changelog = changelog.replaceAll('\n{{nextVersionDetails}}', '');
143
143
  }
144
144
 
145
- await plugins.smartfile.memory.toFs(
146
- changelog,
147
- plugins.path.join(paths.cwd, `changelog.md`),
148
- );
145
+ await plugins.smartfs
146
+ .file(plugins.path.join(paths.cwd, `changelog.md`))
147
+ .encoding('utf8')
148
+ .write(changelog);
149
149
  ui.printStep(currentStep, totalSteps, '📄 Generating changelog.md', 'done');
150
150
 
151
151
  // Step 3: Staging files
@@ -40,8 +40,8 @@ export async function detectProjectType(): Promise<ProjectType> {
40
40
  const packageJsonPath = plugins.path.join(paths.cwd, 'package.json');
41
41
  const denoJsonPath = plugins.path.join(paths.cwd, 'deno.json');
42
42
 
43
- const hasPackageJson = await plugins.smartfile.fs.fileExists(packageJsonPath);
44
- const hasDenoJson = await plugins.smartfile.fs.fileExists(denoJsonPath);
43
+ const hasPackageJson = await plugins.smartfs.file(packageJsonPath).exists();
44
+ const hasDenoJson = await plugins.smartfs.file(denoJsonPath).exists();
45
45
 
46
46
  if (hasPackageJson && hasDenoJson) {
47
47
  logger.log('info', 'Detected dual project (npm + deno)');
@@ -95,10 +95,14 @@ function calculateNewVersion(currentVersion: string, versionType: VersionType):
95
95
  * @param projectType The project type to determine which file to read
96
96
  * @returns The current version string
97
97
  */
98
- function readCurrentVersion(projectType: ProjectType): string {
98
+ async function readCurrentVersion(projectType: ProjectType): Promise<string> {
99
99
  if (projectType === 'npm' || projectType === 'both') {
100
100
  const packageJsonPath = plugins.path.join(paths.cwd, 'package.json');
101
- const packageJson = plugins.smartfile.fs.toObjectSync(packageJsonPath) as { version?: string };
101
+ const content = (await plugins.smartfs
102
+ .file(packageJsonPath)
103
+ .encoding('utf8')
104
+ .read()) as string;
105
+ const packageJson = JSON.parse(content) as { version?: string };
102
106
 
103
107
  if (!packageJson.version) {
104
108
  throw new Error('package.json does not contain a version field');
@@ -106,7 +110,11 @@ function readCurrentVersion(projectType: ProjectType): string {
106
110
  return packageJson.version;
107
111
  } else {
108
112
  const denoJsonPath = plugins.path.join(paths.cwd, 'deno.json');
109
- const denoConfig = plugins.smartfile.fs.toObjectSync(denoJsonPath) as { version?: string };
113
+ const content = (await plugins.smartfs
114
+ .file(denoJsonPath)
115
+ .encoding('utf8')
116
+ .read()) as string;
117
+ const denoConfig = JSON.parse(content) as { version?: string };
110
118
 
111
119
  if (!denoConfig.version) {
112
120
  throw new Error('deno.json does not contain a version field');
@@ -121,12 +129,16 @@ function readCurrentVersion(projectType: ProjectType): string {
121
129
  * @param newVersion The new version to write
122
130
  */
123
131
  async function updateVersionFile(filePath: string, newVersion: string): Promise<void> {
124
- const config = plugins.smartfile.fs.toObjectSync(filePath) as { version?: string };
132
+ const content = (await plugins.smartfs
133
+ .file(filePath)
134
+ .encoding('utf8')
135
+ .read()) as string;
136
+ const config = JSON.parse(content) as { version?: string };
125
137
  config.version = newVersion;
126
- await plugins.smartfile.memory.toFs(
127
- JSON.stringify(config, null, 2) + '\n',
128
- filePath
129
- );
138
+ await plugins.smartfs
139
+ .file(filePath)
140
+ .encoding('utf8')
141
+ .write(JSON.stringify(config, null, 2) + '\n');
130
142
  }
131
143
 
132
144
  /**
@@ -162,7 +174,7 @@ export async function bumpProjectVersion(
162
174
 
163
175
  try {
164
176
  // 1. Read current version
165
- const currentVersion = readCurrentVersion(projectType);
177
+ const currentVersion = await readCurrentVersion(projectType);
166
178
 
167
179
  // 2. Calculate new version (reuse existing function!)
168
180
  const newVersion = calculateNewVersion(currentVersion, versionType);
@@ -65,15 +65,15 @@ export abstract class BaseFormatter {
65
65
  normalizedPath = './' + filepath;
66
66
  }
67
67
 
68
- await plugins.smartfile.memory.toFs(content, normalizedPath);
68
+ await plugins.smartfs.file(normalizedPath).encoding('utf8').write(content);
69
69
  }
70
70
 
71
71
  protected async createFile(filepath: string, content: string): Promise<void> {
72
- await plugins.smartfile.memory.toFs(content, filepath);
72
+ await plugins.smartfs.file(filepath).encoding('utf8').write(content);
73
73
  }
74
74
 
75
75
  protected async deleteFile(filepath: string): Promise<void> {
76
- await plugins.smartfile.fs.remove(filepath);
76
+ await plugins.smartfs.file(filepath).delete();
77
77
  }
78
78
 
79
79
  protected async shouldProcessFile(filepath: string): Promise<boolean> {
@@ -25,7 +25,7 @@ export class ChangeCache {
25
25
  }
26
26
 
27
27
  async initialize(): Promise<void> {
28
- await plugins.smartfile.fs.ensureDir(this.cacheDir);
28
+ await plugins.smartfs.directory(this.cacheDir).recursive().create();
29
29
  }
30
30
 
31
31
  async getManifest(): Promise<ICacheManifest> {
@@ -35,13 +35,16 @@ export class ChangeCache {
35
35
  files: [],
36
36
  };
37
37
 
38
- const exists = await plugins.smartfile.fs.fileExists(this.manifestPath);
38
+ const exists = await plugins.smartfs.file(this.manifestPath).exists();
39
39
  if (!exists) {
40
40
  return defaultManifest;
41
41
  }
42
42
 
43
43
  try {
44
- const content = plugins.smartfile.fs.toStringSync(this.manifestPath);
44
+ const content = (await plugins.smartfs
45
+ .file(this.manifestPath)
46
+ .encoding('utf8')
47
+ .read()) as string;
45
48
  const manifest = JSON.parse(content);
46
49
 
47
50
  // Validate the manifest structure
@@ -57,7 +60,7 @@ export class ChangeCache {
57
60
  );
58
61
  // Try to delete the corrupted file
59
62
  try {
60
- await plugins.smartfile.fs.remove(this.manifestPath);
63
+ await plugins.smartfs.file(this.manifestPath).delete();
61
64
  } catch (removeError) {
62
65
  // Ignore removal errors
63
66
  }
@@ -72,11 +75,14 @@ export class ChangeCache {
72
75
  }
73
76
 
74
77
  // Ensure directory exists
75
- await plugins.smartfile.fs.ensureDir(this.cacheDir);
78
+ await plugins.smartfs.directory(this.cacheDir).recursive().create();
76
79
 
77
80
  // Write directly with proper JSON stringification
78
81
  const jsonContent = JSON.stringify(manifest, null, 2);
79
- await plugins.smartfile.memory.toFs(jsonContent, this.manifestPath);
82
+ await plugins.smartfs
83
+ .file(this.manifestPath)
84
+ .encoding('utf8')
85
+ .write(jsonContent);
80
86
  }
81
87
 
82
88
  async hasFileChanged(filePath: string): Promise<boolean> {
@@ -85,20 +91,23 @@ export class ChangeCache {
85
91
  : plugins.path.join(paths.cwd, filePath);
86
92
 
87
93
  // Check if file exists
88
- const exists = await plugins.smartfile.fs.fileExists(absolutePath);
94
+ const exists = await plugins.smartfs.file(absolutePath).exists();
89
95
  if (!exists) {
90
96
  return true; // File doesn't exist, so it's "changed" (will be created)
91
97
  }
92
98
 
93
99
  // Get current file stats
94
- const stats = await plugins.smartfile.fs.stat(absolutePath);
100
+ const stats = await plugins.smartfs.file(absolutePath).stat();
95
101
 
96
102
  // Skip directories
97
- if (stats.isDirectory()) {
103
+ if (stats.isDirectory) {
98
104
  return false; // Directories are not processed
99
105
  }
100
106
 
101
- const content = plugins.smartfile.fs.toStringSync(absolutePath);
107
+ const content = (await plugins.smartfs
108
+ .file(absolutePath)
109
+ .encoding('utf8')
110
+ .read()) as string;
102
111
  const currentChecksum = this.calculateChecksum(content);
103
112
 
104
113
  // Get cached info
@@ -113,7 +122,7 @@ export class ChangeCache {
113
122
  return (
114
123
  cachedFile.checksum !== currentChecksum ||
115
124
  cachedFile.size !== stats.size ||
116
- cachedFile.modified !== stats.mtimeMs
125
+ cachedFile.modified !== stats.mtime.getTime()
117
126
  );
118
127
  }
119
128
 
@@ -123,14 +132,17 @@ export class ChangeCache {
123
132
  : plugins.path.join(paths.cwd, filePath);
124
133
 
125
134
  // Get current file stats
126
- const stats = await plugins.smartfile.fs.stat(absolutePath);
135
+ const stats = await plugins.smartfs.file(absolutePath).stat();
127
136
 
128
137
  // Skip directories
129
- if (stats.isDirectory()) {
138
+ if (stats.isDirectory) {
130
139
  return; // Don't cache directories
131
140
  }
132
141
 
133
- const content = plugins.smartfile.fs.toStringSync(absolutePath);
142
+ const content = (await plugins.smartfs
143
+ .file(absolutePath)
144
+ .encoding('utf8')
145
+ .read()) as string;
134
146
  const checksum = this.calculateChecksum(content);
135
147
 
136
148
  // Update manifest
@@ -140,7 +152,7 @@ export class ChangeCache {
140
152
  const cacheEntry: IFileCache = {
141
153
  path: filePath,
142
154
  checksum,
143
- modified: stats.mtimeMs,
155
+ modified: stats.mtime.getTime(),
144
156
  size: stats.size,
145
157
  };
146
158
 
@@ -176,7 +188,7 @@ export class ChangeCache {
176
188
  ? file.path
177
189
  : plugins.path.join(paths.cwd, file.path);
178
190
 
179
- if (await plugins.smartfile.fs.fileExists(absolutePath)) {
191
+ if (await plugins.smartfs.file(absolutePath).exists()) {
180
192
  validFiles.push(file);
181
193
  }
182
194
  }