fix: install clean-deep
This commit is contained in:
29
package-lock.json
generated
29
package-lock.json
generated
@@ -21,6 +21,7 @@
|
|||||||
"@trpc/react-query": "^11.0.0-next-beta.318",
|
"@trpc/react-query": "^11.0.0-next-beta.318",
|
||||||
"@trpc/server": "^11.0.0-next-beta.318",
|
"@trpc/server": "^11.0.0-next-beta.318",
|
||||||
"class-variance-authority": "^0.7.0",
|
"class-variance-authority": "^0.7.0",
|
||||||
|
"clean-deep": "^3.4.0",
|
||||||
"dayjs": "^1.11.10",
|
"dayjs": "^1.11.10",
|
||||||
"deepmerge": "^4.3.1",
|
"deepmerge": "^4.3.1",
|
||||||
"graphql": "^16.8.1",
|
"graphql": "^16.8.1",
|
||||||
@@ -3494,6 +3495,19 @@
|
|||||||
"url": "https://joebell.co.uk"
|
"url": "https://joebell.co.uk"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/clean-deep": {
|
||||||
|
"version": "3.4.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/clean-deep/-/clean-deep-3.4.0.tgz",
|
||||||
|
"integrity": "sha512-Lo78NV5ItJL/jl+B5w0BycAisaieJGXK1qYi/9m4SjR8zbqmrUtO7Yhro40wEShGmmxs/aJLI/A+jNhdkXK8mw==",
|
||||||
|
"dependencies": {
|
||||||
|
"lodash.isempty": "^4.4.0",
|
||||||
|
"lodash.isplainobject": "^4.0.6",
|
||||||
|
"lodash.transform": "^4.6.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=4"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/clean-stack": {
|
"node_modules/clean-stack": {
|
||||||
"version": "2.2.0",
|
"version": "2.2.0",
|
||||||
"resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
|
||||||
@@ -7503,6 +7517,16 @@
|
|||||||
"integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==",
|
"integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"node_modules/lodash.isempty": {
|
||||||
|
"version": "4.4.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/lodash.isempty/-/lodash.isempty-4.4.0.tgz",
|
||||||
|
"integrity": "sha512-oKMuF3xEeqDltrGMfDxAPGIVMSSRv8tbRSODbrs4KGsRRLEhrW8N8Rd4DRgB2+621hY8A8XwwrTVhXWpxFvMzg=="
|
||||||
|
},
|
||||||
|
"node_modules/lodash.isplainobject": {
|
||||||
|
"version": "4.0.6",
|
||||||
|
"resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
|
||||||
|
"integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA=="
|
||||||
|
},
|
||||||
"node_modules/lodash.merge": {
|
"node_modules/lodash.merge": {
|
||||||
"version": "4.6.2",
|
"version": "4.6.2",
|
||||||
"resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
|
"resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
|
||||||
@@ -7521,6 +7545,11 @@
|
|||||||
"integrity": "sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==",
|
"integrity": "sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"node_modules/lodash.transform": {
|
||||||
|
"version": "4.6.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/lodash.transform/-/lodash.transform-4.6.0.tgz",
|
||||||
|
"integrity": "sha512-LO37ZnhmBVx0GvOU/caQuipEh4GN82TcWv3yHlebGDgOxbxiwwzW5Pcx2AcvpIv2WmvmSMoC492yQFNhy/l/UQ=="
|
||||||
|
},
|
||||||
"node_modules/log-symbols": {
|
"node_modules/log-symbols": {
|
||||||
"version": "4.1.0",
|
"version": "4.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
|
||||||
|
|||||||
@@ -34,6 +34,7 @@
|
|||||||
"@trpc/react-query": "^11.0.0-next-beta.318",
|
"@trpc/react-query": "^11.0.0-next-beta.318",
|
||||||
"@trpc/server": "^11.0.0-next-beta.318",
|
"@trpc/server": "^11.0.0-next-beta.318",
|
||||||
"class-variance-authority": "^0.7.0",
|
"class-variance-authority": "^0.7.0",
|
||||||
|
"clean-deep": "^3.4.0",
|
||||||
"dayjs": "^1.11.10",
|
"dayjs": "^1.11.10",
|
||||||
"deepmerge": "^4.3.1",
|
"deepmerge": "^4.3.1",
|
||||||
"graphql": "^16.8.1",
|
"graphql": "^16.8.1",
|
||||||
|
|||||||
@@ -6,13 +6,13 @@ import { request } from "@/lib/graphql/request"
|
|||||||
import { badRequestError, internalServerError } from "@/server/errors/trpc"
|
import { badRequestError, internalServerError } from "@/server/errors/trpc"
|
||||||
import { publicProcedure, router } from "@/server/trpc"
|
import { publicProcedure, router } from "@/server/trpc"
|
||||||
|
|
||||||
import { removeEmptyObjects } from "@/utils/contentType"
|
|
||||||
import {
|
import {
|
||||||
generateRefsResponseTag,
|
generateRefsResponseTag,
|
||||||
generateTag,
|
generateTag,
|
||||||
generateTags,
|
generateTags,
|
||||||
} from "@/utils/generateTag"
|
} from "@/utils/generateTag"
|
||||||
|
|
||||||
|
import { removeEmptyObjects } from "../../utils"
|
||||||
import { getAccountPageInput } from "./input"
|
import { getAccountPageInput } from "./input"
|
||||||
import {
|
import {
|
||||||
type AccountPage,
|
type AccountPage,
|
||||||
@@ -51,6 +51,9 @@ export const accountPageQueryRouter = router({
|
|||||||
throw internalServerError()
|
throw internalServerError()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Remove empty objects from a fetched content type. Needed since
|
||||||
|
// Contentstack returns empty objects for all non queried blocks in modular blocks.
|
||||||
|
// This is an ongoing support case in Contentstack, ticker number #00031579
|
||||||
const cleanedData = removeEmptyObjects(refsResponse.data)
|
const cleanedData = removeEmptyObjects(refsResponse.data)
|
||||||
|
|
||||||
const validatedAccountPageRefs =
|
const validatedAccountPageRefs =
|
||||||
@@ -71,7 +74,7 @@ export const accountPageQueryRouter = router({
|
|||||||
validatedAccountPageRefs.data.all_account_page.items[0].system.uid
|
validatedAccountPageRefs.data.all_account_page.items[0].system.uid
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
const response = await request<AccountPage>(
|
const response = await request<AccountPageRefsDataRaw>(
|
||||||
GetAccountPage,
|
GetAccountPage,
|
||||||
{
|
{
|
||||||
locale: lang,
|
locale: lang,
|
||||||
|
|||||||
@@ -7,13 +7,13 @@ import { _ } from "@/lib/translation"
|
|||||||
import { badRequestError, internalServerError } from "@/server/errors/trpc"
|
import { badRequestError, internalServerError } from "@/server/errors/trpc"
|
||||||
import { publicProcedure, router } from "@/server/trpc"
|
import { publicProcedure, router } from "@/server/trpc"
|
||||||
|
|
||||||
import { removeEmptyObjects } from "@/utils/contentType"
|
|
||||||
import {
|
import {
|
||||||
generateRefsResponseTag,
|
generateRefsResponseTag,
|
||||||
generateTag,
|
generateTag,
|
||||||
generateTags,
|
generateTags,
|
||||||
} from "@/utils/generateTag"
|
} from "@/utils/generateTag"
|
||||||
|
|
||||||
|
import { removeEmptyObjects } from "../../utils"
|
||||||
import { getLoyaltyPageInput } from "./input"
|
import { getLoyaltyPageInput } from "./input"
|
||||||
import {
|
import {
|
||||||
type LoyaltyPage,
|
type LoyaltyPage,
|
||||||
@@ -56,6 +56,9 @@ export const loyaltyPageQueryRouter = router({
|
|||||||
throw internalServerError()
|
throw internalServerError()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Remove empty objects from a fetched content type. Needed since
|
||||||
|
// Contentstack returns empty objects for all non queried blocks in modular blocks.
|
||||||
|
// This is an ongoing support case in Contentstack, ticker number #00031579
|
||||||
const cleanedData = removeEmptyObjects(refsResponse.data)
|
const cleanedData = removeEmptyObjects(refsResponse.data)
|
||||||
|
|
||||||
const validatedLoyaltyPageRefs =
|
const validatedLoyaltyPageRefs =
|
||||||
|
|||||||
15
server/routers/utils/index.ts
Normal file
15
server/routers/utils/index.ts
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
import cleaner from "clean-deep"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function to remove empty objects from a fetched content type.
|
||||||
|
* Used since Contentstack returns empty objects for all non
|
||||||
|
* queried in modular blocks.
|
||||||
|
*/
|
||||||
|
export function removeEmptyObjects<T>(obj: T) {
|
||||||
|
return cleaner(obj, {
|
||||||
|
emptyArrays: false,
|
||||||
|
emptyStrings: false,
|
||||||
|
nullValues: false,
|
||||||
|
undefinedValues: false,
|
||||||
|
})
|
||||||
|
}
|
||||||
@@ -53,26 +53,3 @@ export async function getContentTypeByPathName(
|
|||||||
return PageTypeEnum.CurrentBlocksPage
|
return PageTypeEnum.CurrentBlocksPage
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/**
|
|
||||||
* Function to remove empty objects from a fetched content type.
|
|
||||||
* Used since Contentstack returns empty objects for all non
|
|
||||||
* queried in modular blocks.
|
|
||||||
*/
|
|
||||||
export function removeEmptyObjects<T>(obj: T): T {
|
|
||||||
const copy = obj as any
|
|
||||||
|
|
||||||
for (let key in copy) {
|
|
||||||
if (typeof copy[key] === "object" && copy[key] !== null) {
|
|
||||||
copy[key] = removeEmptyObjects(copy[key])
|
|
||||||
if (Object.keys(copy[key]).length === 0 && !Array.isArray(copy[key])) {
|
|
||||||
delete copy[key]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Array.isArray(copy)) {
|
|
||||||
return copy.filter((item) => item != null).map(removeEmptyObjects) as T
|
|
||||||
}
|
|
||||||
|
|
||||||
return copy as T
|
|
||||||
}
|
|
||||||
|
|||||||
Reference in New Issue
Block a user