@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.
- package/README.md +2 -1
- package/dist/cli/bin/content-status-args.d.ts +7 -0
- package/dist/cli/bin/content-status-args.d.ts.map +1 -0
- package/dist/cli/bin/content-status-args.js +27 -0
- package/dist/cli/bin/content-status-args.js.map +1 -0
- package/dist/cli/bin/pull-content.js +3 -1
- package/dist/cli/bin/pull-content.js.map +1 -1
- package/dist/cli/bin/pull-settings.d.ts +6 -0
- package/dist/cli/bin/pull-settings.d.ts.map +1 -0
- package/dist/cli/bin/pull-settings.js +31 -0
- package/dist/cli/bin/pull-settings.js.map +1 -0
- package/dist/cli/bin/push-all.js +16 -1
- package/dist/cli/bin/push-all.js.map +1 -1
- package/dist/cli/bin/push-comments.d.ts +6 -0
- package/dist/cli/bin/push-comments.d.ts.map +1 -0
- package/dist/cli/bin/push-comments.js +33 -0
- package/dist/cli/bin/push-comments.js.map +1 -0
- package/dist/cli/bin/push-content.js +3 -2
- package/dist/cli/bin/push-content.js.map +1 -1
- package/dist/cli/bin/push-email-templates.js +13 -1
- package/dist/cli/bin/push-email-templates.js.map +1 -1
- package/dist/cli/bin/push-settings.d.ts +6 -0
- package/dist/cli/bin/push-settings.d.ts.map +1 -0
- package/dist/cli/bin/push-settings.js +34 -0
- package/dist/cli/bin/push-settings.js.map +1 -0
- package/dist/cli/bin/status-all.js +115 -2
- package/dist/cli/bin/status-all.js.map +1 -1
- package/dist/cli/bin/status-comments.d.ts +6 -0
- package/dist/cli/bin/status-comments.d.ts.map +1 -0
- package/dist/cli/bin/status-comments.js +28 -0
- package/dist/cli/bin/status-comments.js.map +1 -0
- package/dist/cli/bin/status-content.js +3 -1
- package/dist/cli/bin/status-content.js.map +1 -1
- package/dist/cli/bin/status-settings.d.ts +6 -0
- package/dist/cli/bin/status-settings.d.ts.map +1 -0
- package/dist/cli/bin/status-settings.js +27 -0
- package/dist/cli/bin/status-settings.js.map +1 -0
- package/dist/cli/index.js +38 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/cms-config-types.d.ts +4 -0
- package/dist/lib/cms-config-types.d.ts.map +1 -1
- package/dist/lib/cms-config-types.js +6 -0
- package/dist/lib/cms-config-types.js.map +1 -1
- package/dist/lib/cms.d.ts +7 -7
- package/dist/lib/cms.d.ts.map +1 -1
- package/dist/lib/cms.js +42 -7
- package/dist/lib/cms.js.map +1 -1
- package/dist/lib/comment-types.d.ts +4 -0
- package/dist/lib/comment-types.d.ts.map +1 -1
- package/dist/lib/config.d.ts +2 -0
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +6 -5
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/content-merge.d.ts.map +1 -1
- package/dist/lib/content-merge.js +102 -19
- package/dist/lib/content-merge.js.map +1 -1
- package/dist/lib/data-service.d.ts +41 -1
- package/dist/lib/data-service.d.ts.map +1 -1
- package/dist/lib/data-service.js +133 -1
- package/dist/lib/data-service.js.map +1 -1
- package/dist/lib/settings-types.d.ts +120 -0
- package/dist/lib/settings-types.d.ts.map +1 -0
- package/dist/lib/settings-types.js +84 -0
- package/dist/lib/settings-types.js.map +1 -0
- package/dist/scripts/fetch-leadcms-comments.d.ts +6 -1
- package/dist/scripts/fetch-leadcms-comments.d.ts.map +1 -1
- package/dist/scripts/fetch-leadcms-comments.js +7 -5
- package/dist/scripts/fetch-leadcms-comments.js.map +1 -1
- package/dist/scripts/init-leadcms.d.ts.map +1 -1
- package/dist/scripts/init-leadcms.js +15 -1
- package/dist/scripts/init-leadcms.js.map +1 -1
- package/dist/scripts/leadcms-helpers.d.ts +1 -0
- package/dist/scripts/leadcms-helpers.d.ts.map +1 -1
- package/dist/scripts/leadcms-helpers.js +1 -0
- package/dist/scripts/leadcms-helpers.js.map +1 -1
- package/dist/scripts/pull-all.d.ts +5 -1
- package/dist/scripts/pull-all.d.ts.map +1 -1
- package/dist/scripts/pull-all.js +32 -5
- package/dist/scripts/pull-all.js.map +1 -1
- package/dist/scripts/pull-content.d.ts +11 -0
- package/dist/scripts/pull-content.d.ts.map +1 -1
- package/dist/scripts/pull-content.js +79 -3
- package/dist/scripts/pull-content.js.map +1 -1
- package/dist/scripts/pull-settings.d.ts +19 -0
- package/dist/scripts/pull-settings.d.ts.map +1 -0
- package/dist/scripts/pull-settings.js +69 -0
- package/dist/scripts/pull-settings.js.map +1 -0
- package/dist/scripts/push-comments.d.ts +48 -0
- package/dist/scripts/push-comments.d.ts.map +1 -0
- package/dist/scripts/push-comments.js +433 -0
- package/dist/scripts/push-comments.js.map +1 -0
- package/dist/scripts/push-email-templates.d.ts +4 -1
- package/dist/scripts/push-email-templates.d.ts.map +1 -1
- package/dist/scripts/push-email-templates.js +57 -12
- package/dist/scripts/push-email-templates.js.map +1 -1
- package/dist/scripts/push-leadcms-content.d.ts +15 -5
- package/dist/scripts/push-leadcms-content.d.ts.map +1 -1
- package/dist/scripts/push-leadcms-content.js +112 -31
- package/dist/scripts/push-leadcms-content.js.map +1 -1
- package/dist/scripts/push-media.d.ts.map +1 -1
- package/dist/scripts/push-media.js +13 -8
- package/dist/scripts/push-media.js.map +1 -1
- package/dist/scripts/push-settings.d.ts +56 -0
- package/dist/scripts/push-settings.d.ts.map +1 -0
- package/dist/scripts/push-settings.js +272 -0
- package/dist/scripts/push-settings.js.map +1 -0
- package/dist/scripts/settings-manager.d.ts +52 -0
- package/dist/scripts/settings-manager.d.ts.map +1 -0
- package/dist/scripts/settings-manager.js +469 -0
- package/dist/scripts/settings-manager.js.map +1 -0
- 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 [
|
|
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;
|
|
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 @@
|
|
|
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"}
|
package/dist/cli/bin/push-all.js
CHANGED
|
@@ -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
|
|
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,
|
|
1
|
+
{"version":3,"file":"push-all.js","sourceRoot":"","sources":["../../../src/cli/bin/push-all.ts"],"names":[],"mappings":"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"}
|
|
@@ -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
|
|
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;
|
|
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;
|
|
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 @@
|
|
|
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
|
|
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
|
}
|