@leadcms/sdk 3.0.1 → 3.1.1

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 (62) hide show
  1. package/dist/cli/bin/generate-env.js +0 -0
  2. package/dist/cli/bin/init.js +0 -0
  3. package/dist/cli/bin/login.js +0 -0
  4. package/dist/cli/bin/pull-all.js +13 -1
  5. package/dist/cli/bin/pull-all.js.map +1 -1
  6. package/dist/cli/bin/pull-comments.js +0 -0
  7. package/dist/cli/bin/pull-content.js +13 -1
  8. package/dist/cli/bin/pull-content.js.map +1 -1
  9. package/dist/cli/bin/pull-media.js +0 -0
  10. package/dist/cli/bin/push-all.d.ts +7 -0
  11. package/dist/cli/bin/push-all.d.ts.map +1 -0
  12. package/dist/cli/bin/push-all.js +59 -0
  13. package/dist/cli/bin/push-all.js.map +1 -0
  14. package/dist/cli/bin/push-content.d.ts +6 -0
  15. package/dist/cli/bin/push-content.d.ts.map +1 -0
  16. package/dist/cli/bin/push-content.js +27 -0
  17. package/dist/cli/bin/push-content.js.map +1 -0
  18. package/dist/cli/bin/push-media.d.ts +6 -0
  19. package/dist/cli/bin/push-media.d.ts.map +1 -0
  20. package/dist/cli/bin/push-media.js +21 -0
  21. package/dist/cli/bin/push-media.js.map +1 -0
  22. package/dist/cli/bin/push.js +0 -0
  23. package/dist/cli/bin/status-all.d.ts +7 -0
  24. package/dist/cli/bin/status-all.d.ts.map +1 -0
  25. package/dist/cli/bin/status-all.js +56 -0
  26. package/dist/cli/bin/status-all.js.map +1 -0
  27. package/dist/cli/bin/status-content.d.ts +6 -0
  28. package/dist/cli/bin/status-content.d.ts.map +1 -0
  29. package/dist/cli/bin/status-content.js +30 -0
  30. package/dist/cli/bin/status-content.js.map +1 -0
  31. package/dist/cli/bin/status-media.d.ts +6 -0
  32. package/dist/cli/bin/status-media.d.ts.map +1 -0
  33. package/dist/cli/bin/status-media.js +20 -0
  34. package/dist/cli/bin/status-media.js.map +1 -0
  35. package/dist/cli/bin/status.js +0 -0
  36. package/dist/cli/bin/watch.js +0 -0
  37. package/dist/cli/index.js +38 -8
  38. package/dist/cli/index.js.map +1 -1
  39. package/dist/lib/cms.d.ts.map +1 -1
  40. package/dist/lib/cms.js +9 -4
  41. package/dist/lib/cms.js.map +1 -1
  42. package/dist/lib/data-service.d.ts +42 -0
  43. package/dist/lib/data-service.d.ts.map +1 -1
  44. package/dist/lib/data-service.js +316 -6
  45. package/dist/lib/data-service.js.map +1 -1
  46. package/dist/scripts/pull-all.d.ts +5 -1
  47. package/dist/scripts/pull-all.d.ts.map +1 -1
  48. package/dist/scripts/pull-all.js +9 -1
  49. package/dist/scripts/pull-all.js.map +1 -1
  50. package/dist/scripts/pull-content.d.ts +5 -1
  51. package/dist/scripts/pull-content.d.ts.map +1 -1
  52. package/dist/scripts/pull-content.js +48 -1
  53. package/dist/scripts/pull-content.js.map +1 -1
  54. package/dist/scripts/push-leadcms-content.d.ts +5 -0
  55. package/dist/scripts/push-leadcms-content.d.ts.map +1 -1
  56. package/dist/scripts/push-leadcms-content.js +98 -15
  57. package/dist/scripts/push-leadcms-content.js.map +1 -1
  58. package/dist/scripts/push-media.d.ts +136 -0
  59. package/dist/scripts/push-media.d.ts.map +1 -0
  60. package/dist/scripts/push-media.js +531 -0
  61. package/dist/scripts/push-media.js.map +1 -0
  62. package/package.json +2 -2
@@ -0,0 +1,531 @@
1
+ import * as fs from 'fs';
2
+ import * as path from 'path';
3
+ import readline from 'readline';
4
+ import FormData from 'form-data';
5
+ import { leadCMSDataService } from '../lib/data-service.js';
6
+ import { loadConfig } from '../lib/config.js';
7
+ import { success, error, warn, info } from '../lib/console-colors.js';
8
+ /**
9
+ * Default dependencies using real implementations
10
+ */
11
+ function getDefaultDependencies() {
12
+ // Create readline interface for user prompts
13
+ let rl = null;
14
+ const getReadline = () => {
15
+ if (!rl) {
16
+ rl = readline.createInterface({
17
+ input: process.stdin,
18
+ output: process.stdout
19
+ });
20
+ }
21
+ return rl;
22
+ };
23
+ return {
24
+ fetchRemoteMedia: () => leadCMSDataService.getAllMedia(),
25
+ uploadMedia: (formData) => leadCMSDataService.uploadMedia(formData),
26
+ updateMedia: (formData) => leadCMSDataService.updateMedia(formData),
27
+ deleteMedia: (pathToFile) => leadCMSDataService.deleteMedia(pathToFile),
28
+ logInfo: info,
29
+ logWarn: warn,
30
+ logError: error,
31
+ logSuccess: success,
32
+ promptConfirmation: async (message) => {
33
+ const readline = getReadline();
34
+ return new Promise((resolve) => {
35
+ readline.question(message, (answer) => {
36
+ readline.close();
37
+ rl = null;
38
+ const confirmed = answer.toLowerCase() === 'y' || answer.toLowerCase() === 'yes';
39
+ resolve(confirmed);
40
+ });
41
+ });
42
+ }
43
+ };
44
+ }
45
+ /**
46
+ * Maximum file sizes by type (in bytes)
47
+ */
48
+ const MAX_FILE_SIZES = {
49
+ image: 10 * 1024 * 1024, // 10MB for images
50
+ video: 100 * 1024 * 1024, // 100MB for videos
51
+ document: 25 * 1024 * 1024, // 25MB for documents
52
+ other: 10 * 1024 * 1024 // 10MB for other files
53
+ };
54
+ /**
55
+ * File extensions by category
56
+ */
57
+ const FILE_CATEGORIES = {
58
+ image: ['.jpg', '.jpeg', '.png', '.gif', '.webp', '.svg', '.avif', '.bmp', '.ico'],
59
+ video: ['.mp4', '.webm', '.ogg', '.mov', '.avi'],
60
+ document: ['.pdf', '.doc', '.docx', '.txt', '.md']
61
+ };
62
+ /**
63
+ * Get MIME type from file extension
64
+ */
65
+ export function getMimeType(extension) {
66
+ const mimeTypes = {
67
+ '.jpg': 'image/jpeg',
68
+ '.jpeg': 'image/jpeg',
69
+ '.png': 'image/png',
70
+ '.gif': 'image/gif',
71
+ '.webp': 'image/webp',
72
+ '.svg': 'image/svg+xml',
73
+ '.avif': 'image/avif',
74
+ '.bmp': 'image/bmp',
75
+ '.ico': 'image/x-icon',
76
+ '.mp4': 'video/mp4',
77
+ '.webm': 'video/webm',
78
+ '.ogg': 'video/ogg',
79
+ '.pdf': 'application/pdf',
80
+ '.txt': 'text/plain',
81
+ '.md': 'text/markdown'
82
+ };
83
+ return mimeTypes[extension.toLowerCase()] || 'application/octet-stream';
84
+ }
85
+ /**
86
+ * Get file category from extension
87
+ */
88
+ export function getFileCategory(extension) {
89
+ const lowerExt = extension.toLowerCase();
90
+ if (FILE_CATEGORIES.image.includes(lowerExt))
91
+ return 'image';
92
+ if (FILE_CATEGORIES.video.includes(lowerExt))
93
+ return 'video';
94
+ if (FILE_CATEGORIES.document.includes(lowerExt))
95
+ return 'document';
96
+ return 'other';
97
+ }
98
+ /**
99
+ * Validate file size against limits
100
+ */
101
+ export function validateFileSize(file) {
102
+ const category = getFileCategory(file.extension);
103
+ const maxSize = MAX_FILE_SIZES[category];
104
+ if (file.size > maxSize) {
105
+ return {
106
+ valid: false,
107
+ message: `File size ${(file.size / 1024 / 1024).toFixed(2)}MB exceeds ${category} limit of ${(maxSize / 1024 / 1024).toFixed(0)}MB`
108
+ };
109
+ }
110
+ return { valid: true };
111
+ }
112
+ /**
113
+ * Check if a file should be ignored (system files, hidden files, etc.)
114
+ */
115
+ function shouldIgnoreFile(filename) {
116
+ const ignoredPatterns = [
117
+ '.DS_Store', // macOS
118
+ 'Thumbs.db', // Windows
119
+ 'desktop.ini', // Windows
120
+ '.gitkeep', // Git placeholder
121
+ '.gitignore', // Git
122
+ '.htaccess', // Apache
123
+ '~$', // Office temp files (prefix)
124
+ '.tmp', // Temp files
125
+ '.temp', // Temp files
126
+ '.bak', // Backup files
127
+ '.swp', // Vim swap files
128
+ '.swo', // Vim swap files
129
+ ];
130
+ // Check if filename matches any ignored pattern
131
+ for (const pattern of ignoredPatterns) {
132
+ if (pattern.startsWith('~') && filename.startsWith(pattern.slice(1))) {
133
+ return true;
134
+ }
135
+ if (filename === pattern || filename.endsWith(pattern)) {
136
+ return true;
137
+ }
138
+ }
139
+ // Ignore hidden files (starting with dot) except common media files
140
+ if (filename.startsWith('.')) {
141
+ return true;
142
+ }
143
+ return false;
144
+ }
145
+ /**
146
+ * Recursively scan directory for media files
147
+ */
148
+ export function scanLocalMedia(mediaDir, config) {
149
+ const files = [];
150
+ if (!fs.existsSync(mediaDir)) {
151
+ return files;
152
+ }
153
+ function scanDirectory(currentDir, relativePath = '') {
154
+ const entries = fs.readdirSync(currentDir, { withFileTypes: true });
155
+ for (const entry of entries) {
156
+ // Skip ignored files and directories
157
+ if (shouldIgnoreFile(entry.name)) {
158
+ continue;
159
+ }
160
+ const fullPath = path.join(currentDir, entry.name);
161
+ const relPath = relativePath ? path.join(relativePath, entry.name) : entry.name;
162
+ if (entry.isDirectory()) {
163
+ scanDirectory(fullPath, relPath);
164
+ }
165
+ else if (entry.isFile()) {
166
+ const ext = path.extname(entry.name);
167
+ const stats = fs.statSync(fullPath);
168
+ // Parse scopeUid from path structure
169
+ // Format: mediaDir/scopeUid/filename or mediaDir/scope/uid/filename
170
+ const scopeUid = path.dirname(relPath).replace(/\\/g, '/');
171
+ const localFile = {
172
+ filePath: relPath.replace(/\\/g, '/'),
173
+ absolutePath: fullPath,
174
+ scopeUid,
175
+ name: entry.name,
176
+ size: stats.size,
177
+ extension: ext,
178
+ mimeType: getMimeType(ext)
179
+ };
180
+ files.push(localFile);
181
+ }
182
+ }
183
+ }
184
+ scanDirectory(mediaDir);
185
+ return files;
186
+ }
187
+ /**
188
+ * Match local and remote media files to determine operations
189
+ */
190
+ export function matchMediaFiles(localFiles, remoteFiles, allowDelete = false) {
191
+ const operations = [];
192
+ // Create map of remote files by scopeUid + name
193
+ const remoteMap = new Map();
194
+ for (const remote of remoteFiles) {
195
+ const key = `${remote.scopeUid}/${remote.name}`;
196
+ remoteMap.set(key, remote);
197
+ }
198
+ // Create map of local files by scopeUid + name
199
+ const localMap = new Map();
200
+ for (const local of localFiles) {
201
+ const key = `${local.scopeUid}/${local.name}`;
202
+ localMap.set(key, local);
203
+ }
204
+ // Check local files against remote
205
+ for (const local of localFiles) {
206
+ const key = `${local.scopeUid}/${local.name}`;
207
+ const remote = remoteMap.get(key);
208
+ if (!remote) {
209
+ // New file - needs to be uploaded
210
+ operations.push({
211
+ type: 'create',
212
+ local,
213
+ reason: 'New file not present remotely'
214
+ });
215
+ }
216
+ else if (local.size !== remote.size) {
217
+ // File size changed - needs update
218
+ operations.push({
219
+ type: 'update',
220
+ local,
221
+ remote,
222
+ reason: `File size changed (local: ${local.size}, remote: ${remote.size})`
223
+ });
224
+ }
225
+ else {
226
+ // No changes detected
227
+ operations.push({
228
+ type: 'skip',
229
+ local,
230
+ remote,
231
+ reason: 'No changes detected'
232
+ });
233
+ }
234
+ }
235
+ // Check for deleted files (remote but not local) if deletion is allowed
236
+ if (allowDelete) {
237
+ for (const remote of remoteFiles) {
238
+ const key = `${remote.scopeUid}/${remote.name}`;
239
+ if (!localMap.has(key)) {
240
+ operations.push({
241
+ type: 'delete',
242
+ remote,
243
+ reason: 'File removed locally'
244
+ });
245
+ }
246
+ }
247
+ }
248
+ return operations;
249
+ }
250
+ /**
251
+ * Display media status in formatted output
252
+ */
253
+ export function displayMediaStatus(operations, dryRun = false, showDelete = false, deps) {
254
+ const log = deps?.logInfo || info;
255
+ const logWarning = deps?.logWarn || warn;
256
+ const logErr = deps?.logError || error;
257
+ const logOk = deps?.logSuccess || success;
258
+ const creates = operations.filter(op => op.type === 'create');
259
+ const updates = operations.filter(op => op.type === 'update');
260
+ const deletes = showDelete ? operations.filter(op => op.type === 'delete') : [];
261
+ const skips = operations.filter(op => op.type === 'skip');
262
+ console.log('\n📊 Media Status:');
263
+ console.log('─'.repeat(80));
264
+ if (creates.length > 0) {
265
+ log(`\n✨ ${creates.length} file(s) to upload:`);
266
+ creates.forEach(op => {
267
+ const sizeKB = ((op.local.size / 1024).toFixed(2));
268
+ console.log(` + ${op.local.scopeUid}/${op.local.name} (${sizeKB}KB)`);
269
+ });
270
+ }
271
+ if (updates.length > 0) {
272
+ logWarning(`\n📝 ${updates.length} file(s) to update:`);
273
+ updates.forEach(op => {
274
+ const sizeKB = ((op.local.size / 1024).toFixed(2));
275
+ console.log(` ↻ ${op.local.scopeUid}/${op.local.name} (${sizeKB}KB)`);
276
+ console.log(` ${op.reason}`);
277
+ });
278
+ }
279
+ if (deletes.length > 0) {
280
+ logErr(`\n🗑️ ${deletes.length} file(s) to delete:`);
281
+ deletes.forEach(op => {
282
+ console.log(` - ${op.remote.scopeUid}/${op.remote.name}`);
283
+ });
284
+ }
285
+ if (skips.length > 0) {
286
+ log(`\n✓ ${skips.length} file(s) up to date`);
287
+ }
288
+ console.log('\n' + '─'.repeat(80));
289
+ const totalOperations = creates.length + updates.length + deletes.length;
290
+ if (totalOperations === 0) {
291
+ logOk('All media files are in sync! ✨');
292
+ }
293
+ else {
294
+ if (dryRun) {
295
+ log(`\nDry run complete. Run without --dry-run to apply ${totalOperations} change(s).`);
296
+ }
297
+ else {
298
+ log(`\nReady to apply ${totalOperations} change(s).`);
299
+ }
300
+ }
301
+ console.log('');
302
+ }
303
+ /**
304
+ * Execute media push operations and return detailed results
305
+ */
306
+ export async function executeMediaPush(operations, dryRun = false, deps) {
307
+ const defaults = getDefaultDependencies();
308
+ const uploadMedia = deps?.uploadMedia || defaults.uploadMedia;
309
+ const updateMedia = deps?.updateMedia || defaults.updateMedia;
310
+ const deleteMedia = deps?.deleteMedia || defaults.deleteMedia;
311
+ const logErr = deps?.logError || defaults.logError;
312
+ const logOk = deps?.logSuccess || defaults.logSuccess;
313
+ const logWarning = deps?.logWarn || defaults.logWarn;
314
+ const result = {
315
+ operations,
316
+ executed: { successful: 0, failed: 0, skipped: 0 },
317
+ errors: []
318
+ };
319
+ if (dryRun) {
320
+ displayMediaStatus(operations, true, true, deps);
321
+ result.executed.skipped = operations.length;
322
+ return result;
323
+ }
324
+ const creates = operations.filter(op => op.type === 'create');
325
+ const updates = operations.filter(op => op.type === 'update');
326
+ const deletes = operations.filter(op => op.type === 'delete');
327
+ const skips = operations.filter(op => op.type === 'skip');
328
+ result.executed.skipped = skips.length;
329
+ // Upload new files
330
+ for (const op of creates) {
331
+ try {
332
+ const validation = validateFileSize(op.local);
333
+ if (!validation.valid) {
334
+ logErr(`✗ ${op.local.scopeUid}/${op.local.name}: ${validation.message}`);
335
+ result.executed.failed++;
336
+ result.errors.push({ operation: op, error: validation.message });
337
+ continue;
338
+ }
339
+ const formData = new FormData();
340
+ formData.append('File', fs.createReadStream(op.local.absolutePath));
341
+ formData.append('ScopeUid', op.local.scopeUid);
342
+ await uploadMedia(formData);
343
+ logOk(`✓ Uploaded ${op.local.scopeUid}/${op.local.name}`);
344
+ result.executed.successful++;
345
+ }
346
+ catch (err) {
347
+ logErr(`✗ Failed to upload ${op.local.scopeUid}/${op.local.name}: ${err.message}`);
348
+ result.executed.failed++;
349
+ result.errors.push({ operation: op, error: err.message });
350
+ }
351
+ }
352
+ // Update modified files
353
+ for (const op of updates) {
354
+ try {
355
+ const validation = validateFileSize(op.local);
356
+ if (!validation.valid) {
357
+ logErr(`✗ ${op.local.scopeUid}/${op.local.name}: ${validation.message}`);
358
+ result.executed.failed++;
359
+ result.errors.push({ operation: op, error: validation.message });
360
+ continue;
361
+ }
362
+ const formData = new FormData();
363
+ formData.append('File', fs.createReadStream(op.local.absolutePath));
364
+ formData.append('ScopeUid', op.local.scopeUid);
365
+ formData.append('FileName', op.local.name);
366
+ await updateMedia(formData);
367
+ logOk(`✓ Updated ${op.local.scopeUid}/${op.local.name}`);
368
+ result.executed.successful++;
369
+ }
370
+ catch (err) {
371
+ logErr(`✗ Failed to update ${op.local.scopeUid}/${op.local.name}: ${err.message}`);
372
+ result.executed.failed++;
373
+ result.errors.push({ operation: op, error: err.message });
374
+ }
375
+ }
376
+ // Delete removed files
377
+ for (const op of deletes) {
378
+ try {
379
+ const pathToFile = `${op.remote.scopeUid}/${op.remote.name}`;
380
+ await deleteMedia(pathToFile);
381
+ logOk(`✓ Deleted ${pathToFile}`);
382
+ result.executed.successful++;
383
+ }
384
+ catch (err) {
385
+ logErr(`✗ Failed to delete ${op.remote.scopeUid}/${op.remote.name}: ${err.message}`);
386
+ result.executed.failed++;
387
+ result.errors.push({ operation: op, error: err.message });
388
+ }
389
+ }
390
+ // Summary
391
+ console.log('\n' + '─'.repeat(80));
392
+ if (result.executed.failed === 0) {
393
+ logOk(`\n✨ Media push complete! ${result.executed.successful} operation(s) successful.`);
394
+ }
395
+ else {
396
+ logWarning(`\n⚠️ Media push completed with errors: ${result.executed.successful} succeeded, ${result.executed.failed} failed.`);
397
+ }
398
+ console.log('');
399
+ return result;
400
+ }
401
+ /**
402
+ * Status-only function (no modifications) - returns results for testing
403
+ */
404
+ export async function statusMedia(options = {}, deps) {
405
+ const defaults = getDefaultDependencies();
406
+ const fetchRemoteMedia = deps?.fetchRemoteMedia || defaults.fetchRemoteMedia;
407
+ const logInfoFn = deps?.logInfo || defaults.logInfo;
408
+ const logWarnFn = deps?.logWarn || defaults.logWarn;
409
+ const logErrFn = deps?.logError || defaults.logError;
410
+ try {
411
+ const config = loadConfig();
412
+ // Use provided mediaDir or resolve from config
413
+ const mediaDir = options.mediaDir || path.resolve(process.cwd(), config.mediaDir || 'media');
414
+ logInfoFn(`Scanning local media: ${mediaDir}`);
415
+ const localFiles = scanLocalMedia(mediaDir, config);
416
+ if (localFiles.length === 0) {
417
+ logWarnFn('No media files found locally.');
418
+ return {
419
+ operations: [],
420
+ localFiles: [],
421
+ remoteFiles: [],
422
+ summary: { creates: 0, updates: 0, deletes: 0, skips: 0, total: 0 }
423
+ };
424
+ }
425
+ logInfoFn(`Fetching remote media from LeadCMS...`);
426
+ const remoteFiles = await fetchRemoteMedia();
427
+ let filteredLocal = localFiles;
428
+ let filteredRemote = remoteFiles;
429
+ if (options.scopeUid) {
430
+ filteredLocal = localFiles.filter(f => f.scopeUid === options.scopeUid);
431
+ filteredRemote = remoteFiles.filter(f => f.scopeUid === options.scopeUid);
432
+ }
433
+ // Show deletes only if showDelete flag is provided
434
+ const operations = matchMediaFiles(filteredLocal, filteredRemote, options.showDelete || false);
435
+ displayMediaStatus(operations, false, options.showDelete || false, deps);
436
+ const creates = operations.filter(op => op.type === 'create').length;
437
+ const updates = operations.filter(op => op.type === 'update').length;
438
+ const deletes = operations.filter(op => op.type === 'delete').length;
439
+ const skips = operations.filter(op => op.type === 'skip').length;
440
+ return {
441
+ operations,
442
+ localFiles: filteredLocal,
443
+ remoteFiles: filteredRemote,
444
+ summary: {
445
+ creates,
446
+ updates,
447
+ deletes,
448
+ skips,
449
+ total: creates + updates + deletes
450
+ }
451
+ };
452
+ }
453
+ catch (err) {
454
+ logErrFn(`Media status check failed: ${err.message}`);
455
+ throw err;
456
+ }
457
+ }
458
+ /**
459
+ * Main function to push media files to LeadCMS - returns results for testing
460
+ */
461
+ export async function pushMedia(options = {}, deps) {
462
+ const defaults = getDefaultDependencies();
463
+ const fetchRemoteMedia = deps?.fetchRemoteMedia || defaults.fetchRemoteMedia;
464
+ const logInfoFn = deps?.logInfo || defaults.logInfo;
465
+ const logWarnFn = deps?.logWarn || defaults.logWarn;
466
+ const logErrFn = deps?.logError || defaults.logError;
467
+ const promptConfirmation = deps?.promptConfirmation || defaults.promptConfirmation;
468
+ try {
469
+ const config = loadConfig();
470
+ // Use provided mediaDir or resolve from config
471
+ const mediaDir = options.mediaDir || path.resolve(process.cwd(), config.mediaDir || 'media');
472
+ logInfoFn(`Scanning local media: ${mediaDir}`);
473
+ const localFiles = scanLocalMedia(mediaDir, config);
474
+ if (localFiles.length === 0) {
475
+ logWarnFn('No media files found locally.');
476
+ return {
477
+ operations: [],
478
+ executed: { successful: 0, failed: 0, skipped: 0 },
479
+ errors: []
480
+ };
481
+ }
482
+ logInfoFn(`Fetching remote media from LeadCMS...`);
483
+ const remoteFiles = await fetchRemoteMedia();
484
+ // Filter by scopeUid if specified
485
+ let filteredLocal = localFiles;
486
+ let filteredRemote = remoteFiles;
487
+ if (options.scopeUid) {
488
+ filteredLocal = localFiles.filter(f => f.scopeUid === options.scopeUid);
489
+ filteredRemote = remoteFiles.filter(f => f.scopeUid === options.scopeUid);
490
+ logInfoFn(`Filtering by scope: ${options.scopeUid}`);
491
+ }
492
+ // Match and determine operations
493
+ const operations = matchMediaFiles(filteredLocal, filteredRemote, options.allowDelete || false);
494
+ // Display and execute (always show deletes in push mode)
495
+ displayMediaStatus(operations, options.dryRun, true, deps);
496
+ if (options.dryRun) {
497
+ return {
498
+ operations,
499
+ executed: { successful: 0, failed: 0, skipped: operations.length },
500
+ errors: []
501
+ };
502
+ }
503
+ const totalOps = operations.filter(op => op.type !== 'skip').length;
504
+ if (totalOps === 0) {
505
+ return {
506
+ operations,
507
+ executed: { successful: 0, failed: 0, skipped: operations.length },
508
+ errors: []
509
+ };
510
+ }
511
+ // Confirm changes unless --force is used
512
+ if (!options.force) {
513
+ const confirmMsg = `\nProceed with applying ${totalOps} change(s) to LeadCMS? (y/N): `;
514
+ const confirmed = await promptConfirmation(confirmMsg);
515
+ if (!confirmed) {
516
+ console.log('🚫 Push cancelled.');
517
+ return {
518
+ operations,
519
+ executed: { successful: 0, failed: 0, skipped: operations.length },
520
+ errors: []
521
+ };
522
+ }
523
+ }
524
+ return await executeMediaPush(operations, false, deps);
525
+ }
526
+ catch (err) {
527
+ logErrFn(`Media push failed: ${err.message}`);
528
+ throw err;
529
+ }
530
+ }
531
+ //# sourceMappingURL=push-media.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"push-media.js","sourceRoot":"","sources":["../../src/scripts/push-media.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@leadcms/sdk",
3
- "version": "3.0.1",
3
+ "version": "3.1.1",
4
4
  "description": "Official SDK and CLI tools for LeadCMS - framework-agnostic content management for static site generators",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -14,7 +14,7 @@
14
14
  },
15
15
  "scripts": {
16
16
  "build": "npm run clean && npm run compile",
17
- "compile": "tsc && cp -r src/templates dist/ && chmod +x dist/cli/index.js",
17
+ "compile": "tsc && cp -r src/templates dist/ && chmod +x dist/cli/index.js dist/cli/bin/*.js",
18
18
  "clean": "rm -rf dist",
19
19
  "dev": "npm run build && tsc --watch",
20
20
  "test": "jest",