Skip to content

Commit d49cea7

Browse files
authored
Merge pull request #1433 from contentstack/development
DX | 11-06-2024 | Release
2 parents 7abef6a + dd799a4 commit d49cea7

17 files changed

Lines changed: 800 additions & 596 deletions

File tree

package-lock.json

Lines changed: 583 additions & 481 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/contentstack-bootstrap/src/bootstrap/utils.ts

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,24 @@ const envFileHandler = async (
189189
}\nCONTENTSTACK_LIVE_PREVIEW=${livePreviewEnabled}\nCONTENTSTACK_LIVE_EDIT_TAGS=false`;
190190
result = await writeEnvFile(content, filePath);
191191
break;
192+
case 'compass-app':
193+
fileName = '.env';
194+
filePath = pathValidator(path.join(sanitizePath(clonedDirectory), sanitizePath(fileName)));
195+
content = `CONTENTSTACK_API_KEY=${environmentVariables.api_key}\nCONTENTSTACK_DELIVERY_TOKEN=${
196+
environmentVariables.deliveryToken
197+
}\n${
198+
livePreviewEnabled
199+
? `\nCONTENTSTACK_PREVIEW_TOKEN=${
200+
environmentVariables.preview_token || `''`
201+
}\nCONTENTSTACK_PREVIEW_HOST=${previewHost}\nCONTENTSTACK_APP_HOST=${appHost}\n`
202+
: '\n'
203+
}CONTENTSTACK_ENVIRONMENT=${environmentVariables.environment}\nCONTENTSTACK_API_HOST=${
204+
customHost ? customHost : managementAPIHost
205+
}${
206+
!isUSRegion && !customHost ? '\nCONTENTSTACK_REGION=' + region.name : ''
207+
}\nCONTENTSTACK_LIVE_PREVIEW=${livePreviewEnabled}\nCONTENTSTACK_LIVE_EDIT_TAGS=false`;
208+
result = await writeEnvFile(content, filePath);
209+
break;
192210
case 'gatsby':
193211
case 'gatsby-starter':
194212
fileName = `.env.${environmentVariables.environment}`;

packages/contentstack-bootstrap/src/config.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ const config: Configuration = {
2929
{ displayName: 'Vue JS', configKey: 'vue-starter' },
3030
{ displayName: 'Stencil', configKey: 'stencil-starter' },
3131
{ displayName: 'Nuxt3', configKey: 'nuxt3-starter' },
32+
// { displayName: 'Compass App', configKey: 'compass-app' }
3233
],
3334
appLevelConfig: {
3435
nextjs: {
@@ -47,6 +48,10 @@ const config: Configuration = {
4748
source: 'contentstack/contentstack-angular-modularblock-example',
4849
stack: 'contentstack/stack-contentstack-angular-modularblock-example',
4950
},
51+
'compass-app': {
52+
source: 'SunilLsagar/universal-demo',
53+
stack: 'SunilLsagar/stack-universal-demo',
54+
},
5055
'nuxtjs-disabled': {
5156
source: 'contentstack/contentstack-nuxtjs-vue-universal-demo',
5257
stack: 'shafeeqd959/stack-contentstack-nuxtjs-vue-universal-demo',

packages/contentstack-branches/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-branches",
33
"description": "Contentstack CLI plugin to do branches operations",
4-
"version": "1.0.26",
4+
"version": "1.1.0",
55
"author": "Contentstack",
66
"bugs": "https://github.com/contentstack/cli/issues",
77
"dependencies": {
88
"@contentstack/cli-command": "~1.2.18",
99
"@contentstack/cli-utilities": "~1.6.2",
10-
"@oclif/core": "^2.9.3",
10+
"@oclif/core": "^3.26.5",
1111
"async": "^3.2.4",
1212
"big-json": "^3.2.0",
1313
"bluebird": "^3.7.2",
@@ -95,4 +95,4 @@
9595
}
9696
},
9797
"repository": "https://github.com/contentstack/cli"
98-
}
98+
}

packages/contentstack-branches/src/utils/entry-create-script.ts

Lines changed: 31 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -462,21 +462,42 @@ export function entryCreateScript(contentType) {
462462
}
463463
}
464464
465+
const getEntries = async (branchName, contentType, skip = 0, limit = 100, entries = []) => {
466+
let requestObject = {
467+
skip,
468+
limit,
469+
include_count: true,
470+
};
471+
472+
const entriesSearchResponse = await managementAPIClient
473+
.stack({ api_key: stackSDKInstance.api_key, branch_uid: branchName })
474+
.contentType(contentType)
475+
.entry()
476+
.query(requestObject)
477+
.find();
478+
479+
if (entriesSearchResponse?.items?.length > 0) {
480+
skip += limit || 100;
481+
entries = [...entries, ...entriesSearchResponse.items];
482+
if (skip >= entriesSearchResponse.count) {
483+
return entries;
484+
}
485+
return await getEntries(branchName, contentType, skip, limit, entries);
486+
}
487+
return entries;
488+
};
489+
490+
465491
const createEntryTask = () => {
466492
return {
467493
title: 'Create Entries',
468494
successTitle: 'Entries Created Successfully',
469495
failedTitle: 'Failed to create entries',
470496
task: async () => {
471497
472-
const compareBranchEntries = await managementAPIClient
473-
.stack({ api_key: stackSDKInstance.api_key, branch_uid: compareBranch })
474-
.contentType('${contentType}')
475-
.entry()
476-
.query()
477-
.find();
498+
const compareBranchEntries = await getEntries(compareBranch, '${contentType}')
478499
479-
const compareFilteredProperties = compareBranchEntries.items.map((entry) => {
500+
const compareFilteredProperties = compareBranchEntries.map((entry) => {
480501
keysToRemove.map((key) => delete entry[key]);
481502
return entry;
482503
});
@@ -486,9 +507,9 @@ export function entryCreateScript(contentType) {
486507
.contentType('${contentType}')
487508
.fetch();
488509
489-
for (let i = 0; i < compareBranchEntries?.items?.length; i++) {
490-
assetRefPath[compareBranchEntries.items[i].uid] = []
491-
findAssets(contentType.schema, compareBranchEntries.items[i], assetRefPath[compareBranchEntries.items[i].uid]);
510+
for (let i = 0; i < compareBranchEntries?.length; i++) {
511+
assetRefPath[compareBranchEntries[i].uid] = []
512+
findAssets(contentType.schema, compareBranchEntries[i], assetRefPath[compareBranchEntries[i].uid]);
492513
cAssetDetails = [...new Map(cAssetDetails.map((item) => [item['uid'], item])).values()];
493514
}
494515
if (cAssetDetails && cAssetDetails.length) {

packages/contentstack-branches/src/utils/entry-create-update-script.ts

Lines changed: 45 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -44,9 +44,9 @@ export function entryCreateUpdateScript(contentType) {
4444
4545
function converter(data) {
4646
let arr = [];
47-
for (const elm of data.entries()) {
47+
for (const elm of data) {
4848
// @ts-ignore
49-
arr.push([elm[1].title, elm[1]]);
49+
arr.push([elm.title, elm]);
5050
}
5151
return arr;
5252
}
@@ -476,35 +476,54 @@ export function entryCreateUpdateScript(contentType) {
476476
}
477477
};
478478
479+
const getEntries = async (branchName, contentType, skip = 0, limit = 100, entries = []) => {
480+
let requestObject = {
481+
skip,
482+
limit,
483+
include_count: true,
484+
};
485+
486+
const entriesSearchResponse = await managementAPIClient
487+
.stack({ api_key: stackSDKInstance.api_key, branch_uid: branchName })
488+
.contentType(contentType)
489+
.entry()
490+
.query(requestObject)
491+
.find();
492+
493+
if (entriesSearchResponse?.items?.length > 0) {
494+
skip += limit || 100;
495+
entries = [...entries, ...entriesSearchResponse.items];
496+
if (skip >= entriesSearchResponse.count) {
497+
return entries;
498+
}
499+
return await getEntries(branchName, contentType, skip, limit, entries);
500+
}
501+
return entries;
502+
};
479503
480504
const updateEntryTask = () => {
481505
return {
482506
title: 'Update Entries',
483507
successMessage: 'Entries Updated Successfully',
484508
failedMessage: 'Failed to update entries',
485509
task: async () => {
486-
let compareBranchEntries = await managementAPIClient
487-
.stack({ api_key: stackSDKInstance.api_key, branch_uid: compareBranch })
488-
.contentType('${contentType}')
489-
.entry()
490-
.query()
491-
.find();
510+
let compareBranchEntries = await getEntries(compareBranch, '${contentType}')
492511
493-
let baseBranchEntries = await stackSDKInstance.contentType('${contentType}').entry().query().find();
512+
let baseBranchEntries = await getEntries(branch, '${contentType}');
494513
495514
let contentType = await managementAPIClient
496515
.stack({ api_key: stackSDKInstance.api_key, branch_uid: compareBranch })
497516
.contentType('${contentType}')
498517
.fetch();
499518
500-
for (let i = 0; i < compareBranchEntries?.items?.length; i++) {
501-
assetRefPath[compareBranchEntries.items[i].uid] = []
502-
findAssets(contentType.schema, compareBranchEntries.items[i], assetRefPath[compareBranchEntries.items[i].uid]);
519+
for (let i = 0; i < compareBranchEntries?.length; i++) {
520+
assetRefPath[compareBranchEntries[i].uid] = []
521+
findAssets(contentType.schema, compareBranchEntries[i], assetRefPath[compareBranchEntries[i].uid]);
503522
}
504523
505524
for (let i = 0; i < baseBranchEntries?.items?.length; i++) {
506-
assetRefPath[baseBranchEntries.items[i].uid] = []
507-
findAssets(contentType.schema, baseBranchEntries.items[i], assetRefPath[baseBranchEntries.items[i].uid]);
525+
assetRefPath[baseBranchEntries[i].uid] = []
526+
findAssets(contentType.schema, baseBranchEntries[i], assetRefPath[baseBranchEntries[i].uid]);
508527
}
509528
assetDetails = [...new Map(assetDetails.map((item) => [item['uid'], item])).values()];
510529
newAssetDetails = assetDetails;
@@ -568,12 +587,12 @@ export function entryCreateUpdateScript(contentType) {
568587
if(entryDetails !== undefined){
569588
entryDetails = updateAssetDetailsInEntries(entryDetails);
570589
571-
if (baseBranchEntries && baseBranchEntries.items.length) {
572-
let baseEntryUid = baseBranchEntries.items[0].uid;
590+
if (baseBranchEntries && baseBranchEntries.length) {
591+
let baseEntryUid = baseBranchEntries[0].uid;
573592
let entry = await stackSDKInstance.contentType('${contentType}').entry(baseEntryUid);
574593
575594
if (flag.references) {
576-
await updateReferences(entryDetails, baseBranchEntries.items[0], references);
595+
await updateReferences(entryDetails, baseBranchEntries[0], references);
577596
}
578597
579598
await updateEntry(entry, entryDetails);
@@ -589,19 +608,20 @@ export function entryCreateUpdateScript(contentType) {
589608
}
590609
});
591610
} else {
592-
let compareMap = new Map(converter(compareBranchEntries.items));
593-
let baseMap = new Map(converter(baseBranchEntries.items));
611+
let compareMap = new Map(converter(compareBranchEntries));
612+
let baseMap = new Map(converter(baseBranchEntries));
594613
595614
//NOTE: Filter distinct entries from the base and compare branches according to their titles.
596615
//TODO: Need to discuss this approach and replace it with uid condition
597616
let arr = uniquelyConcatenateArrays(Array.from(compareMap.keys()), Array.from(baseMap.keys()));
598617
599-
arr.map(async (el) => {
600-
let entryDetails = deleteUnwantedKeysFromObject(compareMap.get(el), keysToRemove);
618+
// Change
619+
for(let i = 0; i < arr.length ; i++){
620+
let entryDetails = deleteUnwantedKeysFromObject(compareMap.get(arr[i]), keysToRemove);
601621
//NOTE: In the compare branch, entry must exist. Condition of deleted entry not handled
602622
if(entryDetails !== undefined){
603623
entryDetails = updateAssetDetailsInEntries(entryDetails);
604-
if (compareMap.get(el) && !baseMap.get(el)) {
624+
if (compareMap.get(arr[i]) && !baseMap.get(arr[i])) {
605625
let createdEntry = await stackSDKInstance
606626
.contentType('${contentType}')
607627
.entry()
@@ -613,8 +633,8 @@ export function entryCreateUpdateScript(contentType) {
613633
}
614634
await updateEntry(createdEntry, entryDetails);
615635
}
616-
} else if (compareMap.get(el) && baseMap.get(el)) {
617-
let baseEntry = baseMap.get(el);
636+
} else if (compareMap.get(arr[i]) && baseMap.get(arr[i])) {
637+
let baseEntry = baseMap.get(arr[i]);
618638
let entry = await stackSDKInstance.contentType('${contentType}').entry(baseEntry.uid);
619639
620640
if (flag.references) {
@@ -624,7 +644,7 @@ export function entryCreateUpdateScript(contentType) {
624644
await updateEntry(entry, entryDetails);
625645
}
626646
}
627-
});
647+
}
628648
}
629649
} catch (error) {
630650
throw error;

packages/contentstack-branches/src/utils/entry-update-script.ts

Lines changed: 41 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -44,9 +44,9 @@ export function entryUpdateScript(contentType) {
4444
4545
function converter(data) {
4646
let arr = [];
47-
for (const elm of data.entries()) {
47+
for (const elm of data) {
4848
// @ts-ignore
49-
arr.push([elm[1].title, elm[1]]);
49+
arr.push([elm.title, elm]);
5050
}
5151
return arr;
5252
}
@@ -476,35 +476,55 @@ export function entryUpdateScript(contentType) {
476476
}
477477
};
478478
479+
const getEntries = async (branchName, contentType, skip = 0, limit = 100, entries = []) => {
480+
let requestObject = {
481+
skip,
482+
limit,
483+
include_count: true,
484+
};
485+
486+
const entriesSearchResponse = await managementAPIClient
487+
.stack({ api_key: stackSDKInstance.api_key, branch_uid: branchName })
488+
.contentType(contentType)
489+
.entry()
490+
.query(requestObject)
491+
.find();
492+
493+
if (entriesSearchResponse?.items?.length > 0) {
494+
skip += limit || 100;
495+
entries = [...entries, ...entriesSearchResponse.items];
496+
if (skip >= entriesSearchResponse.count) {
497+
return entries;
498+
}
499+
return await getEntries(branchName, contentType, skip, limit, entries);
500+
}
501+
return entries;
502+
};
503+
479504
const updateEntryTask = () => {
480505
return {
481506
title: 'Update Entries',
482507
successMessage: 'Entries Updated Successfully',
483508
failedMessage: 'Failed to update entries',
484509
task: async () => {
485510
486-
let compareBranchEntries = await managementAPIClient
487-
.stack({ api_key: stackSDKInstance.api_key, branch_uid: compareBranch })
488-
.contentType('${contentType}')
489-
.entry()
490-
.query()
491-
.find();
511+
let compareBranchEntries = await getEntries(compareBranch, '${contentType}');
492512
493-
let baseBranchEntries = await stackSDKInstance.contentType('${contentType}').entry().query().find();
513+
let baseBranchEntries = await getEntries(branch, '${contentType}');
494514
495515
let contentType = await managementAPIClient
496516
.stack({ api_key: stackSDKInstance.api_key, branch_uid: compareBranch })
497517
.contentType('${contentType}')
498518
.fetch();
499519
500-
for (let i = 0; i < compareBranchEntries?.items?.length; i++) {
501-
assetRefPath[compareBranchEntries.items[i].uid] = []
502-
findAssets(contentType.schema, compareBranchEntries.items[i], assetRefPath[compareBranchEntries.items[i].uid]);
520+
for (let i = 0; i < compareBranchEntries?.length; i++) {
521+
assetRefPath[compareBranchEntries[i].uid] = []
522+
findAssets(contentType.schema, compareBranchEntries[i], assetRefPath[compareBranchEntries[i].uid]);
503523
}
504524
505-
for (let i = 0; i < baseBranchEntries?.items?.length; i++) {
506-
assetRefPath[baseBranchEntries.items[i].uid] = []
507-
findAssets(contentType.schema, baseBranchEntries.items[i], assetRefPath[baseBranchEntries.items[i].uid]);
525+
for (let i = 0; i < baseBranchEntries?.length; i++) {
526+
assetRefPath[baseBranchEntries[i].uid] = []
527+
findAssets(contentType.schema, baseBranchEntries[i], assetRefPath[baseBranchEntries[i].uid]);
508528
}
509529
assetDetails = [...new Map(assetDetails.map((item) => [item['uid'], item])).values()];
510530
newAssetDetails = assetDetails;
@@ -561,16 +581,16 @@ export function entryUpdateScript(contentType) {
561581
562582
try {
563583
if (contentType?.options?.singleton) {
564-
compareBranchEntries?.items?.map(async (el) => {
584+
compareBranchEntries?.map(async (el) => {
565585
let entryDetails = deleteUnwantedKeysFromObject(el, keysToRemove);
566586
if(entryDetails !== undefined){
567587
entryDetails = updateAssetDetailsInEntries(entryDetails);
568-
if (baseBranchEntries && baseBranchEntries.items.length) {
569-
let baseEntryUid = baseBranchEntries.items[0].uid;
588+
if (baseBranchEntries && baseBranchEntries.length) {
589+
let baseEntryUid = baseBranchEntries[0].uid;
570590
let entry = await stackSDKInstance.contentType('${contentType}').entry(baseEntryUid);
571591
572592
if (flag.references) {
573-
await updateReferences(entryDetails, baseBranchEntries.items[0], references);
593+
await updateReferences(entryDetails, baseBranchEntries[0], references);
574594
}
575595
576596
await updateEntry(entry, entryDetails);
@@ -586,8 +606,8 @@ export function entryUpdateScript(contentType) {
586606
}
587607
});
588608
} else {
589-
let compareMap = new Map(converter(compareBranchEntries.items));
590-
let baseMap = new Map(converter(baseBranchEntries.items));
609+
let compareMap = new Map(converter(compareBranchEntries));
610+
let baseMap = new Map(converter(baseBranchEntries));
591611
592612
//NOTE: Filter distinct entries from the base and compare branches according to their titles.
593613
//TODO: Need to discuss this approach and replace it with uid approach

packages/contentstack-clone/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
"dependencies": {
88
"@colors/colors": "^1.5.0",
99
"@contentstack/cli-cm-export": "~1.11.4",
10-
"@contentstack/cli-cm-import": "~1.15.6",
10+
"@contentstack/cli-cm-import": "~1.15.7",
1111
"@contentstack/cli-command": "~1.2.18",
1212
"@contentstack/cli-utilities": "~1.6.2",
1313
"async": "^3.2.4",
@@ -72,4 +72,4 @@
7272
"cm:stack-clone": "O-CLN"
7373
}
7474
}
75-
}
75+
}

0 commit comments

Comments
 (0)