From c3e94c4d8784de629f59a09d7031868bebb93c39 Mon Sep 17 00:00:00 2001 From: Vikram Kalta Date: Thu, 13 Mar 2025 22:47:24 +0000 Subject: [PATCH 1/3] fix: added pagination support for content-types --- package-lock.json | 13 ++++++++++--- package.json | 4 +++- src/generateTS/index.ts | 39 ++++++++++++++++++++++++++++++++++++++- 3 files changed, 51 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 090f597..d767120 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,21 +1,23 @@ { "name": "@contentstack/types-generator", - "version": "2.2.1", + "version": "2.2.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@contentstack/types-generator", - "version": "2.2.1", + "version": "2.2.2", "license": "MIT", "dependencies": { "@contentstack/delivery-sdk": "^4.5.0", "@gql2ts/from-schema": "^2.0.0-4", + "async": "^3.2.6", "axios": "^1.8.2", "lodash": "^4.17.21", "prettier": "^3.4.2" }, "devDependencies": { + "@types/async": "^3.2.24", "@types/jest": "^29.5.14", "@types/lodash": "^4.17.15", "@types/node": "^20.17.17", @@ -1815,6 +1817,12 @@ "@sinonjs/commons": "^3.0.0" } }, + "node_modules/@types/async": { + "version": "3.2.24", + "resolved": "https://registry.npmjs.org/@types/async/-/async-3.2.24.tgz", + "integrity": "sha512-8iHVLHsCCOBKjCF2KwFe0p9Z3rfM9mL+sSP8btyR5vTjJRAqpBYD28/ZLgXPf0pjG1VxOvtCV/BgXkQbpSe8Hw==", + "dev": true + }, "node_modules/@types/babel__core": { "version": "7.20.5", "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", @@ -2039,7 +2047,6 @@ "version": "3.2.6", "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", - "dev": true, "license": "MIT" }, "node_modules/asynckit": { diff --git a/package.json b/package.json index 339c4d6..7a89b08 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@contentstack/types-generator", - "version": "2.2.1", + "version": "2.2.2", "description": "Contentstack type definition generation library", "private": false, "author": "Contentstack", @@ -29,6 +29,7 @@ }, "homepage": "https://github.com/contentstack/types-generator", "devDependencies": { + "@types/async": "^3.2.24", "@types/jest": "^29.5.14", "@types/lodash": "^4.17.15", "@types/node": "^20.17.17", @@ -45,6 +46,7 @@ "dependencies": { "@contentstack/delivery-sdk": "^4.5.0", "@gql2ts/from-schema": "^2.0.0-4", + "async": "^3.2.6", "axios": "^1.8.2", "lodash": "^4.17.21", "prettier": "^3.4.2" diff --git a/src/generateTS/index.ts b/src/generateTS/index.ts index b3dfbe2..11fb4c5 100644 --- a/src/generateTS/index.ts +++ b/src/generateTS/index.ts @@ -1,3 +1,4 @@ +import async from "async"; import { TOKEN_TYPE } from "../constants"; import { initializeContentstackSdk } from "../sdk/utils"; import { GenerateTS, GenerateTSFromContentTypes } from "../types"; @@ -41,8 +42,9 @@ export const generateTS = async ({ }); const contentTypeQuery = Stack.contentType(); + contentTypeQuery._queryParams['include_count'] = 'true'; const globalFieldsQuery = Stack.globalField(); - const contentTypes = await contentTypeQuery.find(); + const contentTypes = await getContentTypes(contentTypeQuery); const globalFields = await globalFieldsQuery.find(); const { content_types }: any = contentTypes; @@ -163,3 +165,38 @@ export const generateTSFromContentTypes = async ({ }; } }; + +const getContentTypes = async (contentTypeQuery: any) => { + try { + const limit = 100; + + const results: any = await contentTypeQuery.find(); + + if (results.count > limit) { + const additionalQueries = Array.from( + { length: Math.ceil(results.count / limit) - 1 }, + (_, i) => { + return async.reflect(async () => { + contentTypeQuery._queryParams['skip'] = (i + 1) * limit; + contentTypeQuery._queryParams['limit'] = limit; + return contentTypeQuery.find(); + }); + } + ); + const additionalResults: any = (await async.parallel(additionalQueries)); + + for (const r of additionalResults) { + results.content_types = [ + ...results.content_types, + ...r.value.content_types, + ]; + } + } + + return results; + } catch (error) { + throw { + error_message: error, + }; + } +}; From 8eba98da9b270b39a8da19bdeeabc01a6e5d15fe Mon Sep 17 00:00:00 2001 From: Vikram Kalta Date: Mon, 17 Mar 2025 22:36:24 +0000 Subject: [PATCH 2/3] fix: code cleanup --- package-lock.json | 4 ++-- package.json | 2 +- src/generateTS/index.ts | 12 ++++-------- 3 files changed, 7 insertions(+), 11 deletions(-) diff --git a/package-lock.json b/package-lock.json index d767120..e079ff5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@contentstack/types-generator", - "version": "2.2.2", + "version": "2.2.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@contentstack/types-generator", - "version": "2.2.2", + "version": "2.2.1", "license": "MIT", "dependencies": { "@contentstack/delivery-sdk": "^4.5.0", diff --git a/package.json b/package.json index 7a89b08..0bee2c2 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@contentstack/types-generator", - "version": "2.2.2", + "version": "2.2.1", "description": "Contentstack type definition generation library", "private": false, "author": "Contentstack", diff --git a/src/generateTS/index.ts b/src/generateTS/index.ts index 11fb4c5..4d7a8b3 100644 --- a/src/generateTS/index.ts +++ b/src/generateTS/index.ts @@ -1,4 +1,5 @@ import async from "async"; +import {flatMap, flatten} from 'lodash'; import { TOKEN_TYPE } from "../constants"; import { initializeContentstackSdk } from "../sdk/utils"; import { GenerateTS, GenerateTSFromContentTypes } from "../types"; @@ -172,7 +173,7 @@ const getContentTypes = async (contentTypeQuery: any) => { const results: any = await contentTypeQuery.find(); - if (results.count > limit) { + if (results?.count > limit) { const additionalQueries = Array.from( { length: Math.ceil(results.count / limit) - 1 }, (_, i) => { @@ -184,13 +185,8 @@ const getContentTypes = async (contentTypeQuery: any) => { } ); const additionalResults: any = (await async.parallel(additionalQueries)); - - for (const r of additionalResults) { - results.content_types = [ - ...results.content_types, - ...r.value.content_types, - ]; - } + const flattenedResult = additionalResults.flatMap((res: any) => res?.value?.content_types); + results.content_types = flatten([flattenedResult, results.content_types]); } return results; From 4acac68f22119d7c2c82b08864e2c4994210037c Mon Sep 17 00:00:00 2001 From: Vikram Kalta Date: Wed, 19 Mar 2025 23:20:36 +0000 Subject: [PATCH 3/3] fix: test fixes --- src/generateTS/index.ts | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/generateTS/index.ts b/src/generateTS/index.ts index 4d7a8b3..6515505 100644 --- a/src/generateTS/index.ts +++ b/src/generateTS/index.ts @@ -191,8 +191,6 @@ const getContentTypes = async (contentTypeQuery: any) => { return results; } catch (error) { - throw { - error_message: error, - }; + throw error; } };