@leadcms/sdk 3.3.11 → 3.4.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 (115) hide show
  1. package/README.md +2 -1
  2. package/dist/cli/bin/content-status-args.d.ts +7 -0
  3. package/dist/cli/bin/content-status-args.d.ts.map +1 -0
  4. package/dist/cli/bin/content-status-args.js +27 -0
  5. package/dist/cli/bin/content-status-args.js.map +1 -0
  6. package/dist/cli/bin/pull-content.js +3 -1
  7. package/dist/cli/bin/pull-content.js.map +1 -1
  8. package/dist/cli/bin/pull-settings.d.ts +6 -0
  9. package/dist/cli/bin/pull-settings.d.ts.map +1 -0
  10. package/dist/cli/bin/pull-settings.js +31 -0
  11. package/dist/cli/bin/pull-settings.js.map +1 -0
  12. package/dist/cli/bin/push-all.js +16 -1
  13. package/dist/cli/bin/push-all.js.map +1 -1
  14. package/dist/cli/bin/push-comments.d.ts +6 -0
  15. package/dist/cli/bin/push-comments.d.ts.map +1 -0
  16. package/dist/cli/bin/push-comments.js +33 -0
  17. package/dist/cli/bin/push-comments.js.map +1 -0
  18. package/dist/cli/bin/push-content.js +3 -2
  19. package/dist/cli/bin/push-content.js.map +1 -1
  20. package/dist/cli/bin/push-email-templates.js +13 -1
  21. package/dist/cli/bin/push-email-templates.js.map +1 -1
  22. package/dist/cli/bin/push-settings.d.ts +6 -0
  23. package/dist/cli/bin/push-settings.d.ts.map +1 -0
  24. package/dist/cli/bin/push-settings.js +34 -0
  25. package/dist/cli/bin/push-settings.js.map +1 -0
  26. package/dist/cli/bin/status-all.js +115 -2
  27. package/dist/cli/bin/status-all.js.map +1 -1
  28. package/dist/cli/bin/status-comments.d.ts +6 -0
  29. package/dist/cli/bin/status-comments.d.ts.map +1 -0
  30. package/dist/cli/bin/status-comments.js +28 -0
  31. package/dist/cli/bin/status-comments.js.map +1 -0
  32. package/dist/cli/bin/status-content.js +3 -1
  33. package/dist/cli/bin/status-content.js.map +1 -1
  34. package/dist/cli/bin/status-settings.d.ts +6 -0
  35. package/dist/cli/bin/status-settings.d.ts.map +1 -0
  36. package/dist/cli/bin/status-settings.js +27 -0
  37. package/dist/cli/bin/status-settings.js.map +1 -0
  38. package/dist/cli/index.js +38 -0
  39. package/dist/cli/index.js.map +1 -1
  40. package/dist/index.d.ts +2 -0
  41. package/dist/index.d.ts.map +1 -1
  42. package/dist/index.js +1 -0
  43. package/dist/index.js.map +1 -1
  44. package/dist/lib/cms-config-types.d.ts +4 -0
  45. package/dist/lib/cms-config-types.d.ts.map +1 -1
  46. package/dist/lib/cms-config-types.js +6 -0
  47. package/dist/lib/cms-config-types.js.map +1 -1
  48. package/dist/lib/cms.d.ts +7 -7
  49. package/dist/lib/cms.d.ts.map +1 -1
  50. package/dist/lib/cms.js +42 -7
  51. package/dist/lib/cms.js.map +1 -1
  52. package/dist/lib/comment-types.d.ts +4 -0
  53. package/dist/lib/comment-types.d.ts.map +1 -1
  54. package/dist/lib/config.d.ts +2 -0
  55. package/dist/lib/config.d.ts.map +1 -1
  56. package/dist/lib/config.js +6 -5
  57. package/dist/lib/config.js.map +1 -1
  58. package/dist/lib/content-merge.d.ts.map +1 -1
  59. package/dist/lib/content-merge.js +102 -19
  60. package/dist/lib/content-merge.js.map +1 -1
  61. package/dist/lib/data-service.d.ts +41 -1
  62. package/dist/lib/data-service.d.ts.map +1 -1
  63. package/dist/lib/data-service.js +133 -1
  64. package/dist/lib/data-service.js.map +1 -1
  65. package/dist/lib/settings-types.d.ts +120 -0
  66. package/dist/lib/settings-types.d.ts.map +1 -0
  67. package/dist/lib/settings-types.js +84 -0
  68. package/dist/lib/settings-types.js.map +1 -0
  69. package/dist/scripts/fetch-leadcms-comments.d.ts +6 -1
  70. package/dist/scripts/fetch-leadcms-comments.d.ts.map +1 -1
  71. package/dist/scripts/fetch-leadcms-comments.js +7 -5
  72. package/dist/scripts/fetch-leadcms-comments.js.map +1 -1
  73. package/dist/scripts/init-leadcms.d.ts.map +1 -1
  74. package/dist/scripts/init-leadcms.js +15 -1
  75. package/dist/scripts/init-leadcms.js.map +1 -1
  76. package/dist/scripts/leadcms-helpers.d.ts +1 -0
  77. package/dist/scripts/leadcms-helpers.d.ts.map +1 -1
  78. package/dist/scripts/leadcms-helpers.js +1 -0
  79. package/dist/scripts/leadcms-helpers.js.map +1 -1
  80. package/dist/scripts/pull-all.d.ts +5 -1
  81. package/dist/scripts/pull-all.d.ts.map +1 -1
  82. package/dist/scripts/pull-all.js +32 -5
  83. package/dist/scripts/pull-all.js.map +1 -1
  84. package/dist/scripts/pull-content.d.ts +11 -0
  85. package/dist/scripts/pull-content.d.ts.map +1 -1
  86. package/dist/scripts/pull-content.js +79 -3
  87. package/dist/scripts/pull-content.js.map +1 -1
  88. package/dist/scripts/pull-settings.d.ts +19 -0
  89. package/dist/scripts/pull-settings.d.ts.map +1 -0
  90. package/dist/scripts/pull-settings.js +69 -0
  91. package/dist/scripts/pull-settings.js.map +1 -0
  92. package/dist/scripts/push-comments.d.ts +48 -0
  93. package/dist/scripts/push-comments.d.ts.map +1 -0
  94. package/dist/scripts/push-comments.js +433 -0
  95. package/dist/scripts/push-comments.js.map +1 -0
  96. package/dist/scripts/push-email-templates.d.ts +4 -1
  97. package/dist/scripts/push-email-templates.d.ts.map +1 -1
  98. package/dist/scripts/push-email-templates.js +57 -12
  99. package/dist/scripts/push-email-templates.js.map +1 -1
  100. package/dist/scripts/push-leadcms-content.d.ts +15 -5
  101. package/dist/scripts/push-leadcms-content.d.ts.map +1 -1
  102. package/dist/scripts/push-leadcms-content.js +112 -31
  103. package/dist/scripts/push-leadcms-content.js.map +1 -1
  104. package/dist/scripts/push-media.d.ts.map +1 -1
  105. package/dist/scripts/push-media.js +13 -8
  106. package/dist/scripts/push-media.js.map +1 -1
  107. package/dist/scripts/push-settings.d.ts +56 -0
  108. package/dist/scripts/push-settings.d.ts.map +1 -0
  109. package/dist/scripts/push-settings.js +272 -0
  110. package/dist/scripts/push-settings.js.map +1 -0
  111. package/dist/scripts/settings-manager.d.ts +52 -0
  112. package/dist/scripts/settings-manager.d.ts.map +1 -0
  113. package/dist/scripts/settings-manager.js +469 -0
  114. package/dist/scripts/settings-manager.js.map +1 -0
  115. package/package.json +1 -1
package/README.md CHANGED
@@ -633,7 +633,7 @@ const tree = getCommentsTreeForContent(contentId, undefined, {
633
633
  });
634
634
  ```
635
635
 
636
- **📖 See [Comment Tree Guide](./docs/COMMENT_TREE.md)** for complete documentation on threaded comments, sorting, filtering, and advanced features.
636
+ **📖 See [Working with Comments](./docs/COMMENTS.md)** for the complete comments workflow and [Comment Tree Guide](./docs/COMMENT_TREE.md) for threaded comments, sorting, and filtering.
637
637
 
638
638
  ## Docker Deployment
639
639
 
@@ -762,6 +762,7 @@ try {
762
762
 
763
763
  #### Comments
764
764
 
765
+ - **[Working with Comments](./docs/COMMENTS.md)** - Reading synchronized comments and using the public SDK APIs
765
766
  - **[Comment Tree Guide](./docs/COMMENT_TREE.md)** - Building threaded comment interfaces with sorting and filtering
766
767
 
767
768
  #### Setup & Configuration
@@ -0,0 +1,7 @@
1
+ export declare function parseMultiValueFlag(args: string[], flag: string): string[] | undefined;
2
+ export declare function parseContentStatusFilter(args: string[]): string[] | undefined;
3
+ export declare function parsePushContentStatusArgs(args: string[]): {
4
+ statusOnly: boolean;
5
+ statusFilter?: string[];
6
+ };
7
+ //# sourceMappingURL=content-status-args.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content-status-args.d.ts","sourceRoot":"","sources":["../../../src/cli/bin/content-status-args.ts"],"names":[],"mappings":"AAAA,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAYtF;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,GAAG,SAAS,CAE7E;AAED,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG;IAC1D,UAAU,EAAE,OAAO,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB,CAaA"}
@@ -0,0 +1,27 @@
1
+ export function parseMultiValueFlag(args, flag) {
2
+ const values = [];
3
+ args.forEach((arg, index) => {
4
+ if (arg === flag && args[index + 1]) {
5
+ values.push(...args[index + 1].split(',').map(value => value.trim()).filter(Boolean));
6
+ }
7
+ else if (arg.startsWith(`${flag}=`)) {
8
+ values.push(...arg.slice(flag.length + 1).split(',').map(value => value.trim()).filter(Boolean));
9
+ }
10
+ });
11
+ return values.length > 0 ? values : undefined;
12
+ }
13
+ export function parseContentStatusFilter(args) {
14
+ return parseMultiValueFlag(args, '--status');
15
+ }
16
+ export function parsePushContentStatusArgs(args) {
17
+ const statusFilter = parseContentStatusFilter(args);
18
+ const statusOnly = args.some((arg, index) => {
19
+ if (arg !== '--status') {
20
+ return false;
21
+ }
22
+ const nextArg = args[index + 1];
23
+ return !nextArg || nextArg.startsWith('-');
24
+ });
25
+ return { statusOnly, statusFilter };
26
+ }
27
+ //# sourceMappingURL=content-status-args.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content-status-args.js","sourceRoot":"","sources":["../../../src/cli/bin/content-status-args.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,mBAAmB,CAAC,IAAc,EAAE,IAAY;IAC9D,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;QAC1B,IAAI,GAAG,KAAK,IAAI,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC;YACpC,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;QACxF,CAAC;aAAM,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,IAAI,GAAG,CAAC,EAAE,CAAC;YACtC,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;QACnG,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,IAAc;IACrD,OAAO,mBAAmB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,IAAc;IAIvD,MAAM,YAAY,GAAG,wBAAwB,CAAC,IAAI,CAAC,CAAC;IAEpD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;QAC1C,IAAI,GAAG,KAAK,UAAU,EAAE,CAAC;YACvB,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QAChC,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC;AACtC,CAAC"}
@@ -6,6 +6,7 @@ import { pullContent } from '../../scripts/pull-content.js';
6
6
  import { resolveIdentity } from '../../scripts/leadcms-helpers.js';
7
7
  import { initVerboseFromArgs } from '../../lib/logger.js';
8
8
  import { startSpinner } from '../../lib/spinner.js';
9
+ import { parseContentStatusFilter } from './content-status-args.js';
9
10
  const args = process.argv.slice(2);
10
11
  initVerboseFromArgs(args);
11
12
  // Parse target ID or slug
@@ -21,9 +22,10 @@ if (slugIndex !== -1 && args[slugIndex + 1]) {
21
22
  }
22
23
  const reset = args.includes('--reset');
23
24
  const force = args.includes('--force') || args.includes('-f');
25
+ const statusFilter = parseContentStatusFilter(args);
24
26
  await resolveIdentity();
25
27
  const spinner = startSpinner('Pulling content from LeadCMS…');
26
- pullContent({ targetId, targetSlug, reset, force })
28
+ pullContent({ targetId, targetSlug, statusFilter, reset, force })
27
29
  .then(() => {
28
30
  spinner.stop();
29
31
  process.exit(0);
@@ -1 +1 @@
1
- {"version":3,"file":"pull-content.js","sourceRoot":"","sources":["../../../src/cli/bin/pull-content.ts"],"names":[],"mappings":";AACA;;GAEG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEpD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnC,mBAAmB,CAAC,IAAI,CAAC,CAAC;AAE1B,0BAA0B;AAC1B,IAAI,QAA4B,CAAC;AACjC,IAAI,UAA8B,CAAC;AAEnC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,MAAM,CAAC,CAAC;AACtD,IAAI,OAAO,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,EAAE,CAAC;IACxC,QAAQ,GAAG,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;AAC/B,CAAC;AAED,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC;AAC1D,IAAI,SAAS,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,EAAE,CAAC;IAC5C,UAAU,GAAG,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;AACnC,CAAC;AAED,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;AACvC,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAE9D,MAAM,eAAe,EAAE,CAAC;AAExB,MAAM,OAAO,GAAG,YAAY,CAAC,+BAA+B,CAAC,CAAC;AAC9D,WAAW,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;KAChD,IAAI,CAAC,GAAG,EAAE;IACT,OAAO,CAAC,IAAI,EAAE,CAAC;IACf,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC;KACD,KAAK,CAAC,CAAC,KAAU,EAAE,EAAE;IACpB,OAAO,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;IACpC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC7B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"pull-content.js","sourceRoot":"","sources":["../../../src/cli/bin/pull-content.ts"],"names":[],"mappings":";AACA;;GAEG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AAEpE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnC,mBAAmB,CAAC,IAAI,CAAC,CAAC;AAE1B,0BAA0B;AAC1B,IAAI,QAA4B,CAAC;AACjC,IAAI,UAA8B,CAAC;AAEnC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,MAAM,CAAC,CAAC;AACtD,IAAI,OAAO,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,EAAE,CAAC;IACxC,QAAQ,GAAG,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;AAC/B,CAAC;AAED,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC;AAC1D,IAAI,SAAS,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,EAAE,CAAC;IAC5C,UAAU,GAAG,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;AACnC,CAAC;AAED,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;AACvC,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC9D,MAAM,YAAY,GAAG,wBAAwB,CAAC,IAAI,CAAC,CAAC;AAEpD,MAAM,eAAe,EAAE,CAAC;AAExB,MAAM,OAAO,GAAG,YAAY,CAAC,+BAA+B,CAAC,CAAC;AAC9D,WAAW,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,YAAY,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;KAC9D,IAAI,CAAC,GAAG,EAAE;IACT,OAAO,CAAC,IAAI,EAAE,CAAC;IACf,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC;KACD,KAAK,CAAC,CAAC,KAAU,EAAE,EAAE;IACpB,OAAO,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;IACpC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC7B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * LeadCMS Pull Settings CLI Entry Point
4
+ */
5
+ import 'dotenv/config';
6
+ //# sourceMappingURL=pull-settings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pull-settings.d.ts","sourceRoot":"","sources":["../../../src/cli/bin/pull-settings.ts"],"names":[],"mappings":";AACA;;GAEG;AAEH,OAAO,eAAe,CAAC"}
@@ -0,0 +1,31 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * LeadCMS Pull Settings CLI Entry Point
4
+ */
5
+ import 'dotenv/config';
6
+ import { pullSettings } from '../../scripts/pull-settings.js';
7
+ import { resolveIdentity } from '../../scripts/leadcms-helpers.js';
8
+ import { initVerboseFromArgs } from '../../lib/logger.js';
9
+ import { startSpinner } from '../../lib/spinner.js';
10
+ const args = process.argv.slice(2);
11
+ initVerboseFromArgs(args);
12
+ // Parse --name flag
13
+ let targetName;
14
+ const nameIndex = args.findIndex(arg => arg === '--name');
15
+ if (nameIndex !== -1 && args[nameIndex + 1]) {
16
+ targetName = args[nameIndex + 1];
17
+ }
18
+ const reset = args.includes('--reset');
19
+ await resolveIdentity();
20
+ const spinner = startSpinner('Pulling settings from LeadCMS…');
21
+ pullSettings({ targetName, reset })
22
+ .then(() => {
23
+ spinner.stop();
24
+ process.exit(0);
25
+ })
26
+ .catch((error) => {
27
+ spinner.fail('Settings pull failed');
28
+ console.error(error.message);
29
+ process.exit(1);
30
+ });
31
+ //# sourceMappingURL=pull-settings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pull-settings.js","sourceRoot":"","sources":["../../../src/cli/bin/pull-settings.ts"],"names":[],"mappings":";AACA;;GAEG;AAEH,OAAO,eAAe,CAAC;AACvB,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEpD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnC,mBAAmB,CAAC,IAAI,CAAC,CAAC;AAE1B,oBAAoB;AACpB,IAAI,UAA8B,CAAC;AACnC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC;AAC1D,IAAI,SAAS,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,EAAE,CAAC;IAC5C,UAAU,GAAG,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;AACnC,CAAC;AAED,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;AAEvC,MAAM,eAAe,EAAE,CAAC;AAExB,MAAM,OAAO,GAAG,YAAY,CAAC,gCAAgC,CAAC,CAAC;AAC/D,YAAY,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;KAChC,IAAI,CAAC,GAAG,EAAE;IACT,OAAO,CAAC,IAAI,EAAE,CAAC;IACf,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC;KACD,KAAK,CAAC,CAAC,KAAU,EAAE,EAAE;IACpB,OAAO,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;IACrC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC7B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -5,8 +5,10 @@
5
5
  */
6
6
  import 'dotenv/config';
7
7
  import { pushLeadCMSContent } from '../../scripts/push-leadcms-content.js';
8
+ import { pushComments } from '../../scripts/push-comments.js';
8
9
  import { pushMedia } from '../../scripts/push-media.js';
9
10
  import { pushEmailTemplates } from '../../scripts/push-email-templates.js';
11
+ import { pushSettings } from '../../scripts/push-settings.js';
10
12
  import { requireAuthenticatedUser } from '../../scripts/leadcms-helpers.js';
11
13
  import { initVerboseFromArgs } from '../../lib/logger.js';
12
14
  import { startSpinner } from '../../lib/spinner.js';
@@ -37,8 +39,14 @@ async function pushAll() {
37
39
  await requireAuthenticatedUser();
38
40
  const spinner = startSpinner('Pushing to LeadCMS…');
39
41
  try {
42
+ spinner.update('Pushing settings…');
43
+ // Push settings first — other content may depend on settings
44
+ await pushSettings({
45
+ dryRun,
46
+ force,
47
+ });
40
48
  spinner.update('Pushing content…');
41
- // Push content first
49
+ // Push content
42
50
  await pushLeadCMSContent({
43
51
  statusOnly: false,
44
52
  force,
@@ -54,6 +62,13 @@ async function pushAll() {
54
62
  force,
55
63
  allowDelete
56
64
  });
65
+ console.log('\n💬 Pushing comments...');
66
+ spinner.update('Pushing comments…');
67
+ await pushComments({
68
+ dryRun,
69
+ force,
70
+ allowDelete,
71
+ });
57
72
  console.log('\n📷 Pushing media...');
58
73
  spinner.update('Pushing media…');
59
74
  await pushMedia({
@@ -1 +1 @@
1
- {"version":3,"file":"push-all.js","sourceRoot":"","sources":["../../../src/cli/bin/push-all.ts"],"names":[],"mappings":";AACA;;;GAGG;AAEH,OAAO,eAAe,CAAC;AACvB,OAAO,EAAE,kBAAkB,EAAE,MAAM,uCAAuC,CAAC;AAC3E,OAAO,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,uCAAuC,CAAC;AAC3E,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAC5E,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEpD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnC,mBAAmB,CAAC,IAAI,CAAC,CAAC;AAE1B,qBAAqB;AACrB,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC9D,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AACjE,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;AAE9C,+BAA+B;AAC/B,IAAI,QAA4B,CAAC;AACjC,IAAI,UAA8B,CAAC;AAEnC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,MAAM,CAAC,CAAC;AACtD,IAAI,OAAO,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,EAAE,CAAC;IACxC,QAAQ,GAAG,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;AAC/B,CAAC;AAED,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC;AAC1D,IAAI,SAAS,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,EAAE,CAAC;IAC5C,UAAU,GAAG,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;AACnC,CAAC;AAED,6BAA6B;AAC7B,IAAI,QAA4B,CAAC;AACjC,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI,CAAC,CAAC;AAC5E,IAAI,UAAU,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,EAAE,CAAC;IAC9C,QAAQ,GAAG,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;AAClC,CAAC;AAED,KAAK,UAAU,OAAO;IACpB,MAAM,wBAAwB,EAAE,CAAC;IAEjC,MAAM,OAAO,GAAG,YAAY,CAAC,qBAAqB,CAAC,CAAC;IACpD,IAAI,CAAC;QACH,OAAO,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;QAEnC,qBAAqB;QACrB,MAAM,kBAAkB,CAAC;YACvB,UAAU,EAAE,KAAK;YACjB,KAAK;YACL,QAAQ;YACR,UAAU;YACV,MAAM;YACN,WAAW;SACZ,CAAC,CAAC;QAEH,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;QAC/C,OAAO,CAAC,MAAM,CAAC,0BAA0B,CAAC,CAAC;QAC3C,MAAM,kBAAkB,CAAC;YACvB,MAAM;YACN,KAAK;YACL,WAAW;SACZ,CAAC,CAAC;QAEH,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;QACrC,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;QACjC,MAAM,SAAS,CAAC;YACd,MAAM;YACN,KAAK;YACL,QAAQ;YACR,WAAW;SACZ,CAAC,CAAC;QAEH,OAAO,CAAC,OAAO,CAAC,wCAAwC,CAAC,CAAC;IAC5D,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QACtC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC7B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,OAAO,EAAE,CAAC"}
1
+ {"version":3,"file":"push-all.js","sourceRoot":"","sources":["../../../src/cli/bin/push-all.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * LeadCMS Push Comments CLI Entry Point
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=push-comments.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"push-comments.d.ts","sourceRoot":"","sources":["../../../src/cli/bin/push-comments.ts"],"names":[],"mappings":";AACA;;GAEG"}
@@ -0,0 +1,33 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * LeadCMS Push Comments CLI Entry Point
4
+ */
5
+ import { pushComments } from '../../scripts/push-comments.js';
6
+ import { requireAuthenticatedUser, resolveIdentity } from '../../scripts/leadcms-helpers.js';
7
+ import { initVerboseFromArgs } from '../../lib/logger.js';
8
+ import { startSpinner } from '../../lib/spinner.js';
9
+ const args = process.argv.slice(2);
10
+ initVerboseFromArgs(args);
11
+ const force = args.includes('--force') || args.includes('-f');
12
+ const dryRun = args.includes('--dry-run') || args.includes('-d');
13
+ const allowDelete = args.includes('--delete');
14
+ let targetId;
15
+ const idIndex = args.findIndex(arg => arg === '--id');
16
+ if (idIndex !== -1 && args[idIndex + 1]) {
17
+ targetId = args[idIndex + 1];
18
+ }
19
+ if (!dryRun) {
20
+ await requireAuthenticatedUser();
21
+ }
22
+ else {
23
+ await resolveIdentity();
24
+ }
25
+ const spinner = startSpinner('Pushing comments to LeadCMS…');
26
+ pushComments({ force, dryRun, allowDelete, targetId })
27
+ .then(() => spinner.stop())
28
+ .catch((error) => {
29
+ spinner.fail('Comment push failed');
30
+ console.error(error.message);
31
+ process.exit(1);
32
+ });
33
+ //# sourceMappingURL=push-comments.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"push-comments.js","sourceRoot":"","sources":["../../../src/cli/bin/push-comments.ts"],"names":[],"mappings":";AACA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAC9D,OAAO,EAAE,wBAAwB,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAC7F,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEpD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnC,mBAAmB,CAAC,IAAI,CAAC,CAAC;AAE1B,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC9D,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AACjE,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;AAE9C,IAAI,QAA4B,CAAC;AACjC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,MAAM,CAAC,CAAC;AACtD,IAAI,OAAO,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,EAAE,CAAC;IACxC,QAAQ,GAAG,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;AAC/B,CAAC;AAED,IAAI,CAAC,MAAM,EAAE,CAAC;IACZ,MAAM,wBAAwB,EAAE,CAAC;AACnC,CAAC;KAAM,CAAC;IACN,MAAM,eAAe,EAAE,CAAC;AAC1B,CAAC;AAED,MAAM,OAAO,GAAG,YAAY,CAAC,8BAA8B,CAAC,CAAC;AAC7D,YAAY,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC;KACnD,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;KAC1B,KAAK,CAAC,CAAC,KAAU,EAAE,EAAE;IACpB,OAAO,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;IACpC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC7B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -7,9 +7,10 @@ import { pushLeadCMSContent } from '../../scripts/push-leadcms-content.js';
7
7
  import { requireAuthenticatedUser, resolveIdentity } from '../../scripts/leadcms-helpers.js';
8
8
  import { initVerboseFromArgs } from '../../lib/logger.js';
9
9
  import { startSpinner } from '../../lib/spinner.js';
10
+ import { parsePushContentStatusArgs } from './content-status-args.js';
10
11
  const args = process.argv.slice(2);
11
12
  initVerboseFromArgs(args);
12
- const statusOnly = args.includes('--status');
13
+ const { statusOnly, statusFilter } = parsePushContentStatusArgs(args);
13
14
  const force = args.includes('--force');
14
15
  const dryRun = args.includes('--dry-run');
15
16
  const allowDelete = args.includes('--delete');
@@ -31,7 +32,7 @@ if (slugIndex !== -1 && args[slugIndex + 1]) {
31
32
  targetSlug = args[slugIndex + 1];
32
33
  }
33
34
  const spinner = startSpinner('Pushing content to LeadCMS…');
34
- pushLeadCMSContent({ statusOnly, force, targetId, targetSlug, dryRun, allowDelete })
35
+ pushLeadCMSContent({ statusOnly, force, targetId, targetSlug, statusFilter, dryRun, allowDelete })
35
36
  .then(() => spinner.stop())
36
37
  .catch((error) => {
37
38
  spinner.fail('Content push failed');
@@ -1 +1 @@
1
- {"version":3,"file":"push-content.js","sourceRoot":"","sources":["../../../src/cli/bin/push-content.ts"],"names":[],"mappings":";AACA;;GAEG;AAEH,OAAO,eAAe,CAAC;AACvB,OAAO,EAAE,kBAAkB,EAAE,MAAM,uCAAuC,CAAC;AAC3E,OAAO,EAAE,wBAAwB,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAC7F,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEpD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnC,mBAAmB,CAAC,IAAI,CAAC,CAAC;AAC1B,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;AAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;AACvC,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;AAC1C,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;AAE9C,IAAI,CAAC,UAAU,IAAI,CAAC,MAAM,EAAE,CAAC;IAC3B,MAAM,wBAAwB,EAAE,CAAC;AACnC,CAAC;KAAM,CAAC;IACN,MAAM,eAAe,EAAE,CAAC;AAC1B,CAAC;AAED,0BAA0B;AAC1B,IAAI,QAA4B,CAAC;AACjC,IAAI,UAA8B,CAAC;AAEnC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,MAAM,CAAC,CAAC;AACtD,IAAI,OAAO,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,EAAE,CAAC;IACxC,QAAQ,GAAG,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;AAC/B,CAAC;AAED,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC;AAC1D,IAAI,SAAS,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,EAAE,CAAC;IAC5C,UAAU,GAAG,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;AACnC,CAAC;AAED,MAAM,OAAO,GAAG,YAAY,CAAC,6BAA6B,CAAC,CAAC;AAC5D,kBAAkB,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;KACjF,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;KAC1B,KAAK,CAAC,CAAC,KAAU,EAAE,EAAE;IACpB,OAAO,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;IACpC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC7B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"push-content.js","sourceRoot":"","sources":["../../../src/cli/bin/push-content.ts"],"names":[],"mappings":";AACA;;GAEG;AAEH,OAAO,eAAe,CAAC;AACvB,OAAO,EAAE,kBAAkB,EAAE,MAAM,uCAAuC,CAAC;AAC3E,OAAO,EAAE,wBAAwB,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAC7F,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AAEtE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnC,mBAAmB,CAAC,IAAI,CAAC,CAAC;AAC1B,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,GAAG,0BAA0B,CAAC,IAAI,CAAC,CAAC;AACtE,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;AACvC,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;AAC1C,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;AAE9C,IAAI,CAAC,UAAU,IAAI,CAAC,MAAM,EAAE,CAAC;IAC3B,MAAM,wBAAwB,EAAE,CAAC;AACnC,CAAC;KAAM,CAAC;IACN,MAAM,eAAe,EAAE,CAAC;AAC1B,CAAC;AAED,0BAA0B;AAC1B,IAAI,QAA4B,CAAC;AACjC,IAAI,UAA8B,CAAC;AAEnC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,MAAM,CAAC,CAAC;AACtD,IAAI,OAAO,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,EAAE,CAAC;IACxC,QAAQ,GAAG,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;AAC/B,CAAC;AAED,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC;AAC1D,IAAI,SAAS,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,EAAE,CAAC;IAC5C,UAAU,GAAG,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;AACnC,CAAC;AAED,MAAM,OAAO,GAAG,YAAY,CAAC,6BAA6B,CAAC,CAAC;AAC5D,kBAAkB,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;KAC/F,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;KAC1B,KAAK,CAAC,CAAC,KAAU,EAAE,EAAE;IACpB,OAAO,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;IACpC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC7B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -11,6 +11,18 @@ initVerboseFromArgs(args);
11
11
  const force = args.includes('--force') || args.includes('-f');
12
12
  const dryRun = args.includes('--dry-run') || args.includes('-d');
13
13
  const allowDelete = args.includes('--delete');
14
+ // Parse target ID
15
+ let targetId;
16
+ const idIndex = args.findIndex(arg => arg === '--id');
17
+ if (idIndex !== -1 && args[idIndex + 1]) {
18
+ targetId = args[idIndex + 1];
19
+ }
20
+ // Parse target name
21
+ let targetName;
22
+ const nameIndex = args.findIndex(arg => arg === '--name');
23
+ if (nameIndex !== -1 && args[nameIndex + 1]) {
24
+ targetName = args[nameIndex + 1];
25
+ }
14
26
  if (!dryRun) {
15
27
  await requireAuthenticatedUser();
16
28
  }
@@ -18,7 +30,7 @@ else {
18
30
  await resolveIdentity();
19
31
  }
20
32
  const spinner = startSpinner('Pushing email templates to LeadCMS…');
21
- pushEmailTemplates({ force, dryRun, allowDelete })
33
+ pushEmailTemplates({ force, dryRun, allowDelete, targetId, targetName })
22
34
  .then(() => spinner.stop())
23
35
  .catch((error) => {
24
36
  spinner.fail('Email template push failed');
@@ -1 +1 @@
1
- {"version":3,"file":"push-email-templates.js","sourceRoot":"","sources":["../../../src/cli/bin/push-email-templates.ts"],"names":[],"mappings":";AACA;;GAEG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,uCAAuC,CAAC;AAC3E,OAAO,EAAE,wBAAwB,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAC7F,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEpD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnC,mBAAmB,CAAC,IAAI,CAAC,CAAC;AAE1B,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC9D,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AACjE,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;AAE9C,IAAI,CAAC,MAAM,EAAE,CAAC;IACZ,MAAM,wBAAwB,EAAE,CAAC;AACnC,CAAC;KAAM,CAAC;IACN,MAAM,eAAe,EAAE,CAAC;AAC1B,CAAC;AAED,MAAM,OAAO,GAAG,YAAY,CAAC,qCAAqC,CAAC,CAAC;AACpE,kBAAkB,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;KAC/C,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;KAC1B,KAAK,CAAC,CAAC,KAAU,EAAE,EAAE;IACpB,OAAO,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;IAC3C,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC7B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"push-email-templates.js","sourceRoot":"","sources":["../../../src/cli/bin/push-email-templates.ts"],"names":[],"mappings":";AACA;;GAEG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,uCAAuC,CAAC;AAC3E,OAAO,EAAE,wBAAwB,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAC7F,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEpD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnC,mBAAmB,CAAC,IAAI,CAAC,CAAC;AAE1B,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC9D,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AACjE,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;AAE9C,kBAAkB;AAClB,IAAI,QAA4B,CAAC;AACjC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,MAAM,CAAC,CAAC;AACtD,IAAI,OAAO,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,EAAE,CAAC;IACxC,QAAQ,GAAG,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;AAC/B,CAAC;AAED,oBAAoB;AACpB,IAAI,UAA8B,CAAC;AACnC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC;AAC1D,IAAI,SAAS,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,EAAE,CAAC;IAC5C,UAAU,GAAG,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;AACnC,CAAC;AAED,IAAI,CAAC,MAAM,EAAE,CAAC;IACZ,MAAM,wBAAwB,EAAE,CAAC;AACnC,CAAC;KAAM,CAAC;IACN,MAAM,eAAe,EAAE,CAAC;AAC1B,CAAC;AAED,MAAM,OAAO,GAAG,YAAY,CAAC,qCAAqC,CAAC,CAAC;AACpE,kBAAkB,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC;KACrE,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;KAC1B,KAAK,CAAC,CAAC,KAAU,EAAE,EAAE;IACpB,OAAO,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;IAC3C,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC7B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * LeadCMS Push Settings CLI Entry Point
4
+ */
5
+ import 'dotenv/config';
6
+ //# sourceMappingURL=push-settings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"push-settings.d.ts","sourceRoot":"","sources":["../../../src/cli/bin/push-settings.ts"],"names":[],"mappings":";AACA;;GAEG;AAEH,OAAO,eAAe,CAAC"}
@@ -0,0 +1,34 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * LeadCMS Push Settings CLI Entry Point
4
+ */
5
+ import 'dotenv/config';
6
+ import { pushSettings } from '../../scripts/push-settings.js';
7
+ import { requireAuthenticatedUser, resolveIdentity } from '../../scripts/leadcms-helpers.js';
8
+ import { initVerboseFromArgs } from '../../lib/logger.js';
9
+ import { startSpinner } from '../../lib/spinner.js';
10
+ const args = process.argv.slice(2);
11
+ initVerboseFromArgs(args);
12
+ const force = args.includes('--force') || args.includes('-f');
13
+ const dryRun = args.includes('--dry-run') || args.includes('-d');
14
+ // Parse --name flag
15
+ let targetName;
16
+ const nameIndex = args.findIndex(arg => arg === '--name');
17
+ if (nameIndex !== -1 && args[nameIndex + 1]) {
18
+ targetName = args[nameIndex + 1];
19
+ }
20
+ if (!dryRun) {
21
+ await requireAuthenticatedUser();
22
+ }
23
+ else {
24
+ await resolveIdentity();
25
+ }
26
+ const spinner = startSpinner('Pushing settings to LeadCMS…');
27
+ pushSettings({ targetName, dryRun, force })
28
+ .then(() => spinner.stop())
29
+ .catch((error) => {
30
+ spinner.fail('Settings push failed');
31
+ console.error(error.message);
32
+ process.exit(1);
33
+ });
34
+ //# sourceMappingURL=push-settings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"push-settings.js","sourceRoot":"","sources":["../../../src/cli/bin/push-settings.ts"],"names":[],"mappings":";AACA;;GAEG;AAEH,OAAO,eAAe,CAAC;AACvB,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAC9D,OAAO,EAAE,wBAAwB,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAC7F,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEpD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnC,mBAAmB,CAAC,IAAI,CAAC,CAAC;AAE1B,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC9D,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAEjE,oBAAoB;AACpB,IAAI,UAA8B,CAAC;AACnC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC;AAC1D,IAAI,SAAS,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,EAAE,CAAC;IAC5C,UAAU,GAAG,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;AACnC,CAAC;AAED,IAAI,CAAC,MAAM,EAAE,CAAC;IACZ,MAAM,wBAAwB,EAAE,CAAC;AACnC,CAAC;KAAM,CAAC;IACN,MAAM,eAAe,EAAE,CAAC;AAC1B,CAAC;AAED,MAAM,OAAO,GAAG,YAAY,CAAC,8BAA8B,CAAC,CAAC;AAC7D,YAAY,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;KACxC,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;KAC1B,KAAK,CAAC,CAAC,KAAU,EAAE,EAAE;IACpB,OAAO,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;IACrC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC7B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -5,8 +5,10 @@
5
5
  */
6
6
  import 'dotenv/config';
7
7
  import { getContentStatusData } from '../../scripts/push-leadcms-content.js';
8
+ import { buildCommentStatus } from '../../scripts/push-comments.js';
8
9
  import { statusMedia } from '../../scripts/push-media.js';
9
10
  import { buildEmailTemplateStatus, getRemoteGroupLabel } from '../../scripts/push-email-templates.js';
11
+ import { getSettingsStatusData, formatSettingValue, formatSettingDiff, renderSettingDiffPreview } from '../../scripts/push-settings.js';
10
12
  import { initVerboseFromArgs } from '../../lib/logger.js';
11
13
  import { colorConsole, statusColors } from '../../lib/console-colors.js';
12
14
  import { defaultLanguage, leadCMSApiKey, resolveIdentity } from '../../scripts/leadcms-helpers.js';
@@ -92,6 +94,38 @@ function renderMediaSection(result) {
92
94
  }
93
95
  return changeCount;
94
96
  }
97
+ // ── Comment rendering ────────────────────────────────────────────────────────
98
+ function renderCommentSection(operations) {
99
+ const creates = operations.filter(op => op.type === 'create');
100
+ const updates = operations.filter(op => op.type === 'update');
101
+ const conflicts = operations.filter(op => op.type === 'conflict');
102
+ const deletes = showDelete ? operations.filter(op => op.type === 'delete') : [];
103
+ const changeCount = creates.length + updates.length + conflicts.length + deletes.length;
104
+ for (const op of creates) {
105
+ const comment = op.local?.comment;
106
+ const label = `${comment?.commentableType || 'Unknown'}#${comment?.commentableId || '?'} [${comment?.language || defaultLanguage}]`;
107
+ colorConsole.log(` ${statusColors.created('new file: ')} ${label} ${colorConsole.highlight(comment?.body?.slice(0, 48) || 'New comment')}`);
108
+ }
109
+ for (const op of updates) {
110
+ const comment = op.local?.comment || op.remote;
111
+ const label = `${comment?.commentableType || 'Unknown'}#${comment?.commentableId || '?'} [${comment?.language || defaultLanguage}]`;
112
+ colorConsole.log(` ${statusColors.modified('modified: ')} ${label} ${colorConsole.gray(`(ID: ${op.remote?.id || comment?.id || 'unknown'})`)}`);
113
+ }
114
+ for (const op of conflicts) {
115
+ const comment = op.local?.comment || op.remote;
116
+ const label = `${comment?.commentableType || 'Unknown'}#${comment?.commentableId || '?'} [${comment?.language || defaultLanguage}]`;
117
+ colorConsole.log(` ${statusColors.conflict('conflict: ')} ${label} ${colorConsole.gray(`(ID: ${op.remote?.id || comment?.id || 'unknown'})`)}`);
118
+ if (op.reason) {
119
+ colorConsole.log(` ${colorConsole.gray(op.reason)}`);
120
+ }
121
+ }
122
+ for (const op of deletes) {
123
+ const comment = op.remote;
124
+ const label = `${comment?.commentableType || 'Unknown'}#${comment?.commentableId || '?'} [${comment?.language || defaultLanguage}]`;
125
+ colorConsole.log(` ${statusColors.conflict('deleted: ')} ${label} ${colorConsole.gray(`(ID: ${comment?.id || 'unknown'})`)}`);
126
+ }
127
+ return changeCount;
128
+ }
95
129
  // ── Email template rendering ─────────────────────────────────────────────────
96
130
  function renderEmailTemplateSection(operations) {
97
131
  const creates = operations.filter(op => op.type === 'create');
@@ -157,14 +191,20 @@ async function statusAll() {
157
191
  // Show spinner while fetching data from all sources
158
192
  const spinner = startSpinner('Fetching status from LeadCMS…');
159
193
  let contentResult = null;
194
+ let commentResult = null;
160
195
  let mediaResult = null;
161
196
  let emailResult = null;
197
+ let settingsResult = null;
162
198
  try {
163
- [contentResult, mediaResult, emailResult] = await Promise.all([
199
+ [contentResult, commentResult, mediaResult, emailResult, settingsResult] = await Promise.all([
164
200
  getContentStatusData({ showDelete }).catch((err) => {
165
201
  spinner.update('Fetching status… (content failed)');
166
202
  return null;
167
203
  }),
204
+ buildCommentStatus({ showDelete }).catch((err) => {
205
+ spinner.update('Fetching status… (comments failed)');
206
+ return null;
207
+ }),
168
208
  statusMedia({ scopeUid, showDelete, silent: true }).catch((err) => {
169
209
  spinner.update('Fetching status… (media failed)');
170
210
  return null;
@@ -175,6 +215,12 @@ async function statusAll() {
175
215
  return null;
176
216
  })
177
217
  : Promise.resolve(null),
218
+ canCheckEmailTemplates
219
+ ? getSettingsStatusData().catch((err) => {
220
+ spinner.update('Fetching status… (settings failed)');
221
+ return null;
222
+ })
223
+ : Promise.resolve(null),
178
224
  ]);
179
225
  spinner.stop();
180
226
  }
@@ -185,6 +231,7 @@ async function statusAll() {
185
231
  colorConsole.important('\n📊 LeadCMS Status');
186
232
  console.log('─'.repeat(80));
187
233
  const contentOps = contentResult?.operations ?? null;
234
+ const commentOps = commentResult?.operations ?? null;
188
235
  const emailOps = emailResult?.operations ?? null;
189
236
  // Count changes per section
190
237
  const contentChanges = contentOps
@@ -196,9 +243,15 @@ async function statusAll() {
196
243
  ? mediaResult.summary.creates + mediaResult.summary.updates +
197
244
  (showDelete ? mediaResult.summary.deletes : 0)
198
245
  : 0;
246
+ const commentChanges = commentOps
247
+ ? commentOps.filter(op => showDelete ? true : op.type !== 'delete').length
248
+ : 0;
199
249
  const emailChanges = emailOps
200
250
  ? emailOps.filter(op => showDelete ? true : op.type !== 'delete').length
201
251
  : 0;
252
+ const settingsChanges = settingsResult
253
+ ? settingsResult.comparisons.filter(c => c.status !== 'in-sync').length
254
+ : 0;
202
255
  // Count up-to-date items per section
203
256
  const contentSkips = contentResult
204
257
  ? contentResult.totalLocal - contentChanges
@@ -206,19 +259,30 @@ async function statusAll() {
206
259
  const mediaSkips = mediaResult
207
260
  ? mediaResult.summary.skips
208
261
  : 0;
262
+ const commentSkips = commentResult
263
+ ? commentResult.totalLocal - commentChanges
264
+ : 0;
209
265
  const emailSkips = emailResult
210
266
  ? emailResult.totalLocal - emailChanges
211
267
  : 0;
212
- const totalChanges = contentChanges + mediaChanges + emailChanges;
268
+ const settingsInSync = settingsResult
269
+ ? settingsResult.comparisons.filter(c => c.status === 'in-sync').length
270
+ : 0;
271
+ const totalChanges = contentChanges + commentChanges + mediaChanges + emailChanges + settingsChanges;
213
272
  if (totalChanges === 0) {
214
273
  colorConsole.success('\n✅ Everything is in sync!\n');
215
274
  if (contentResult)
216
275
  console.log(` 📝 Content: ${contentSkips > 0 ? `${contentSkips} item(s) ` : ''}up to date`);
276
+ if (commentResult)
277
+ console.log(` 💬 Comments: ${commentSkips > 0 ? `${commentSkips} item(s) ` : ''}up to date`);
217
278
  if (mediaResult)
218
279
  console.log(` 📷 Media: ${mediaSkips > 0 ? `${mediaSkips} file(s) ` : ''}up to date`);
219
280
  if (canCheckEmailTemplates && emailResult) {
220
281
  console.log(` 📧 Email Templates: ${emailSkips > 0 ? `${emailSkips} item(s) ` : ''}up to date`);
221
282
  }
283
+ if (canCheckEmailTemplates && settingsResult) {
284
+ console.log(` ⚙️ Settings: ${settingsInSync > 0 ? `${settingsInSync} setting(s) ` : ''}up to date`);
285
+ }
222
286
  console.log('');
223
287
  process.exit(0);
224
288
  }
@@ -229,6 +293,11 @@ async function statusAll() {
229
293
  renderContentSection(contentOps);
230
294
  console.log('');
231
295
  }
296
+ if (commentOps && commentChanges > 0) {
297
+ colorConsole.important(` 💬 Comments (${commentChanges} change${commentChanges !== 1 ? 's' : ''}):`);
298
+ renderCommentSection(commentOps);
299
+ console.log('');
300
+ }
232
301
  // ── Media section ──
233
302
  if (mediaResult && mediaChanges > 0) {
234
303
  colorConsole.important(` 📷 Media (${mediaChanges} change${mediaChanges !== 1 ? 's' : ''}):`);
@@ -241,6 +310,29 @@ async function statusAll() {
241
310
  renderEmailTemplateSection(emailOps);
242
311
  console.log('');
243
312
  }
313
+ // ── Settings section ──
314
+ if (settingsResult && settingsChanges > 0) {
315
+ colorConsole.important(` ⚙️ Settings (${settingsChanges} change${settingsChanges !== 1 ? 's' : ''}):`);
316
+ for (const entry of settingsResult.comparisons) {
317
+ if (entry.status === 'in-sync')
318
+ continue;
319
+ const lang = entry.language ? ` [${entry.language}]` : '';
320
+ const label = `${entry.key}${lang}`;
321
+ switch (entry.status) {
322
+ case 'modified':
323
+ colorConsole.log(` ${statusColors.modified('modified: ')} ${colorConsole.highlight(label)} ${colorConsole.gray(formatSettingDiff(entry.key, entry.remoteValue, entry.localValue))}`);
324
+ renderSettingDiffPreview(entry.key, entry.remoteValue, entry.localValue, ' ');
325
+ break;
326
+ case 'local-only':
327
+ colorConsole.log(` ${statusColors.created('new: ')} ${colorConsole.highlight(label)} ${colorConsole.gray(`= ${formatSettingValue(entry.key, entry.localValue)}`)}`);
328
+ break;
329
+ case 'remote-only':
330
+ colorConsole.log(` ${statusColors.conflict('remote: ')} ${colorConsole.highlight(label)} ${colorConsole.gray(`= ${formatSettingValue(entry.key, entry.remoteValue)}`)}`);
331
+ break;
332
+ }
333
+ }
334
+ console.log('');
335
+ }
244
336
  // ── Summary ──
245
337
  console.log('─'.repeat(80));
246
338
  if (contentOps) {
@@ -254,6 +346,15 @@ async function statusAll() {
254
346
  skips: contentSkips,
255
347
  }));
256
348
  }
349
+ if (commentOps) {
350
+ console.log(renderSummaryLine('💬 Comments: ', {
351
+ creates: commentOps.filter(op => op.type === 'create').length,
352
+ updates: commentOps.filter(op => op.type === 'update').length,
353
+ conflicts: commentOps.filter(op => op.type === 'conflict').length,
354
+ deletes: showDelete ? commentOps.filter(op => op.type === 'delete').length : 0,
355
+ skips: commentSkips,
356
+ }));
357
+ }
257
358
  if (mediaResult) {
258
359
  console.log(renderSummaryLine('📷 Media: ', {
259
360
  creates: mediaResult.summary.creates,
@@ -273,6 +374,18 @@ async function statusAll() {
273
374
  skips: emailSkips,
274
375
  }));
275
376
  }
377
+ if (canCheckEmailTemplates && settingsResult) {
378
+ const modified = settingsResult.comparisons.filter(c => c.status === 'modified').length;
379
+ const localOnly = settingsResult.comparisons.filter(c => c.status === 'local-only').length;
380
+ const remoteOnly = settingsResult.comparisons.filter(c => c.status === 'remote-only').length;
381
+ console.log(renderSummaryLine('⚙️ Settings: ', {
382
+ creates: localOnly,
383
+ updates: modified,
384
+ conflicts: remoteOnly,
385
+ deletes: 0,
386
+ skips: settingsInSync,
387
+ }));
388
+ }
276
389
  console.log('');
277
390
  process.exit(0);
278
391
  }