Skip to content

Commit 35db76e

Browse files
Merge pull request #129 from contentstack/feat/DX-3618-restore
feat: add publishing rules
2 parents 3646bb1 + 082d0f7 commit 35db76e

27 files changed

Lines changed: 1576 additions & 763 deletions

File tree

.talismanrc

Lines changed: 1 addition & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1,46 +1,4 @@
11
fileignoreconfig:
2-
- filename: packages/contentstack-query-export/.env-example
3-
checksum: 922c7aa9c788ab60b987de2b0a2aee6d90843c463a8bbc29201e4efe31081187
4-
- filename: packages/contentstack-query-export/.eslintrc
5-
checksum: b34756122b251dc2feedc7c7b98a7772d4d763bc468c8291be483ae2ac3471be
6-
- filename: packages/contentstack-query-export/README.md
7-
checksum: 9be27e9a5f027f2bbbbcc6d4c706b19071cf40f596ce3e778f33ea7579a52626
8-
- filename: packages/contentstack-query-export/test/unit/common-helper.test.ts
9-
checksum: c1d023d8c23e0400805448eb1466da5cb1fe891b6e838100fb12cbc7e1514a59
10-
- filename: packages/contentstack-query-export/test/config.json
11-
checksum: 792e177efa078e31aa05a5136807fd1fed4b6ea7a4cd44d69353edd8b96ff33f
12-
- filename: packages/contentstack-query-export/src/utils/logger.ts
13-
checksum: de6dd816bc534aaddf9adbe4e1db935f152d32eedaad5b76445f4affa836fcc9
14-
- filename: packages/contentstack-query-export/src/utils/common-helper.ts
15-
checksum: 924a9fbc57dd774a7957870d63366ffc16cd4242dbe684321b9b52a888cfa455
16-
- filename: packages/contentstack-query-export/test/unit/content-type-helper.test.ts
17-
checksum: 1b4b9724a1281032605b61f007f7a7da080731bd9e0e4b2c4bc00b212ff30242
18-
- filename: packages/contentstack-query-export/src/commands/cm/stacks/export-query.ts
19-
checksum: 874c30c717df26b8caae8f807b25b529f9704de9b93ef53d457a3a9575742cf4
20-
- filename: packages/contentstack-query-export/skills/framework/SKILL.md
21-
checksum: b45c4bc28025292c168053e95a3c570b9d67500e0ee5241553089bca6914bb3f
22-
- filename: packages/contentstack-query-export/skills/code-review/SKILL.md
23-
checksum: 1c1cb0b1ce20114b9e855278a63c098d87f9302f093b08eb7f05f667840b6166
24-
- filename: packages/contentstack-query-export/src/types/index.ts
25-
checksum: 686c5ed7fadb6620201dc3f1ed19c5ba94afd73ad165c33379b8b33dec81e519
26-
- filename: packages/contentstack-query-export/src/utils/config-handler.ts
27-
checksum: 2a17dfe46ff5e77bb585013719065db0b513b21d700eb54e6615e78a6811f885
28-
- filename: packages/contentstack-query-export/src/utils/dependency-resolver.ts
29-
checksum: 0c85da2a6fa43c8923c3659c45b02d8cf4cf43f6aae5e21e5b47955232dd5d78
30-
- filename: packages/contentstack-query-export/test/unit/module-exporter.test.ts
31-
checksum: e27fab52e65a8d5430d268f3562a823828e9e3dd9eb9569342f1cdb83eef9ea3
32-
- filename: packages/contentstack-query-export/test/unit/query-parser-simple.test.ts
33-
checksum: d187ad885a914b70406e343a92ad3ee1ca3c30207b0d8b040f36c6f287da3a6c
34-
- filename: packages/contentstack-query-export/test/unit/dependency-resolver.test.ts
35-
checksum: da6b003331ece39c106b61f0c660da678c7b2ca2f55cfbdd2a8f8a72c183573f
36-
- filename: packages/contentstack-query-export/test/unit/config-handler.test.ts
37-
checksum: a1077cb686431fea29de839762dbc16c951b6d61171f525e311e4a34182b0d08
38-
- filename: packages/contentstack-query-export/test/unit/referenced-asset-handler.test.ts
39-
checksum: 3d19ad04a0306be741f9acd3a2d164d19e2b3803efc0a50342b156e8686c8b0c
40-
- filename: packages/contentstack-query-export/src/core/query-executor.ts
41-
checksum: 266751e299cda2a15d5e4e551eca72bcd6f0d600a0416f95410560257fc8210f
42-
- filename: packages/contentstack-query-export/test/unit/query-executor.test.ts
43-
checksum: 86713d035ff35d13089e14e8ad84db4191ad8b4f85bb759282b75e3dc96966cb
442
- filename: pnpm-lock.yaml
45-
checksum: 66cc4bd169899eb1641197c1a95f50910c34601b0a695c23f0c2e6d26f836651
3+
checksum: 97c02af1c210f0a8d5486ec114746856c96209132b973199cfed33de8461965c
464
version: '1.0'

packages/contentstack-bootstrap/package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "@contentstack/cli-cm-bootstrap",
33
"description": "Bootstrap contentstack apps",
4-
"version": "1.19.2",
4+
"version": "1.19.3",
55
"author": "Contentstack",
66
"bugs": "https://github.com/contentstack/cli/issues",
77
"scripts": {
@@ -16,7 +16,7 @@
1616
"test:report": "nyc --reporter=lcov mocha \"test/**/*.test.js\""
1717
},
1818
"dependencies": {
19-
"@contentstack/cli-cm-seed": "~1.15.2",
19+
"@contentstack/cli-cm-seed": "~1.15.3",
2020
"@contentstack/cli-command": "~1.8.2",
2121
"@contentstack/cli-config": "~1.20.3",
2222
"@contentstack/cli-utilities": "~1.18.3",
@@ -69,4 +69,4 @@
6969
}
7070
},
7171
"repository": "contentstack/cli"
72-
}
72+
}

packages/contentstack-clone/package.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
{
22
"name": "@contentstack/cli-cm-clone",
33
"description": "Contentstack stack clone plugin",
4-
"version": "1.21.3",
4+
"version": "1.21.4",
55
"author": "Contentstack",
66
"bugs": "https://github.com/rohitmishra209/cli-cm-clone/issues",
77
"dependencies": {
88
"@colors/colors": "^1.6.0",
9-
"@contentstack/cli-cm-export": "~1.24.3",
10-
"@contentstack/cli-cm-import": "~1.32.3",
9+
"@contentstack/cli-cm-export": "~1.25.0",
10+
"@contentstack/cli-cm-import": "~1.33.0",
1111
"@contentstack/cli-command": "~1.8.2",
1212
"@contentstack/cli-utilities": "~1.18.3",
1313
"@oclif/core": "^4.10.5",
@@ -81,4 +81,4 @@
8181
"cm:stack-clone": "O-CLN"
8282
}
8383
}
84-
}
84+
}

packages/contentstack-export/package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
{
22
"name": "@contentstack/cli-cm-export",
33
"description": "Contentstack CLI plugin to export content from stack",
4-
"version": "1.24.3",
4+
"version": "1.25.0",
55
"author": "Contentstack",
66
"bugs": "https://github.com/contentstack/cli/issues",
77
"dependencies": {
88
"@contentstack/cli-command": "~1.8.2",
99
"@oclif/core": "^4.10.5",
10-
"@contentstack/cli-variants": "~1.4.3",
10+
"@contentstack/cli-variants": "~1.5.0",
1111
"@contentstack/cli-utilities": "~1.18.3",
1212
"async": "^3.2.6",
1313
"big-json": "^3.2.0",
@@ -97,4 +97,4 @@
9797
}
9898
},
9999
"repository": "https://github.com/contentstack/cli"
100-
}
100+
}

packages/contentstack-export/src/config/index.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ const config: DefaultConfig = {
3636
'content-types',
3737
'custom-roles',
3838
'workflows',
39+
'publishing-rules',
3940
'personalize',
4041
'entries',
4142
'labels',
@@ -86,6 +87,11 @@ const config: DefaultConfig = {
8687
fileName: 'workflows.json',
8788
invalidKeys: ['stackHeaders', 'urlPath', 'created_at', 'updated_at', 'created_by', 'updated_by'],
8889
},
90+
'publishing-rules': {
91+
dirName: 'workflows',
92+
fileName: 'publishing-rules.json',
93+
invalidKeys: ['stackHeaders', 'urlPath', 'created_at', 'updated_at', 'created_by', 'updated_by'],
94+
},
8995
globalfields: {
9096
dirName: 'global_fields',
9197
fileName: 'globalfields.json',
Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
import omit from 'lodash/omit';
2+
import isEmpty from 'lodash/isEmpty';
3+
import { resolve as pResolve } from 'node:path';
4+
import { handleAndLogError, log } from '@contentstack/cli-utilities';
5+
6+
import BaseClass from './base-class';
7+
import { fsUtil } from '../../utils';
8+
import { PublishingRulesConfig, ModuleClassParams } from '../../types';
9+
10+
export default class ExportPublishingRules extends BaseClass {
11+
private readonly publishingRules: Record<string, Record<string, unknown>> = {};
12+
private readonly publishingRulesConfig: PublishingRulesConfig;
13+
private publishingRulesFolderPath: string;
14+
private readonly qs: { include_count: boolean; skip?: number };
15+
16+
constructor({ exportConfig, stackAPIClient }: ModuleClassParams) {
17+
super({ exportConfig, stackAPIClient });
18+
this.publishingRulesConfig = exportConfig.modules['publishing-rules'];
19+
this.qs = { include_count: true };
20+
this.exportConfig.context.module = 'publishing-rules';
21+
}
22+
23+
async start(): Promise<void> {
24+
this.publishingRulesFolderPath = pResolve(
25+
this.exportConfig.data,
26+
this.exportConfig.branchName || '',
27+
this.publishingRulesConfig.dirName,
28+
);
29+
log.debug(`Publishing rules folder path: ${this.publishingRulesFolderPath}`, this.exportConfig.context);
30+
31+
await fsUtil.makeDirectory(this.publishingRulesFolderPath);
32+
log.debug('Created publishing rules directory', this.exportConfig.context);
33+
34+
await this.fetchAllPublishingRules();
35+
36+
if (isEmpty(this.publishingRules)) {
37+
log.info('No Publishing Rules found', this.exportConfig.context);
38+
return;
39+
}
40+
41+
const outPath = pResolve(this.publishingRulesFolderPath, this.publishingRulesConfig.fileName);
42+
fsUtil.writeFile(outPath, this.publishingRules);
43+
log.success(
44+
`Publishing rules exported successfully! Total count: ${Object.keys(this.publishingRules).length}`,
45+
this.exportConfig.context,
46+
);
47+
}
48+
49+
private async fetchAllPublishingRules(skip = 0): Promise<void> {
50+
try {
51+
if (skip > 0) {
52+
this.qs.skip = skip;
53+
}
54+
55+
const data: { items?: Record<string, unknown>[]; count?: number } = await this.stack
56+
.workflow()
57+
.publishRule()
58+
.fetchAll(this.qs);
59+
60+
const items = data.items ?? [];
61+
const total = data.count ?? items.length;
62+
63+
if (!items.length) {
64+
log.debug('No publishing rules returned for this page', this.exportConfig.context);
65+
return;
66+
}
67+
68+
for (const rule of items) {
69+
const uid = rule.uid as string | undefined;
70+
if (uid) {
71+
this.publishingRules[uid] = omit(rule, this.publishingRulesConfig.invalidKeys) as Record<
72+
string,
73+
unknown
74+
>;
75+
}
76+
}
77+
78+
const nextSkip = skip + items.length;
79+
if (nextSkip < total) {
80+
await this.fetchAllPublishingRules(nextSkip);
81+
}
82+
} catch (error: unknown) {
83+
handleAndLogError(error as Error, { ...this.exportConfig.context });
84+
}
85+
}
86+
}

packages/contentstack-export/src/types/default-config.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,13 @@ export default interface DefaultConfig {
6767
invalidKeys: string[];
6868
dependencies?: Modules[];
6969
};
70+
'publishing-rules': {
71+
dirName: string;
72+
fileName: string;
73+
invalidKeys: string[];
74+
dependencies?: Modules[];
75+
limit?: number;
76+
};
7077
globalfields: {
7178
dirName: string;
7279
fileName: string;

packages/contentstack-export/src/types/index.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ export type Modules =
4646
| 'content-types'
4747
| 'custom-roles'
4848
| 'workflows'
49+
| 'publishing-rules'
4950
| 'labels'
5051
| 'marketplace-apps'
5152
| 'taxonomies'
@@ -117,6 +118,14 @@ export interface WorkflowConfig {
117118
limit?: number;
118119
}
119120

121+
export interface PublishingRulesConfig {
122+
dirName: string;
123+
fileName: string;
124+
invalidKeys: string[];
125+
dependencies?: Modules[];
126+
limit?: number;
127+
}
128+
120129
export interface CustomRoleConfig {
121130
dirName: string;
122131
fileName: string;

0 commit comments

Comments
 (0)