Graphql codegen change

When generating graphql types, the generation of optional types is
redundant because the value is wrapped in Maybe type anyway.
Removing the redundancy simplifies the type checking whenever generated
types are used.
This commit is contained in:
tedraykov 2021-05-23 19:15:01 +03:00
parent fb112385e6
commit c6df70c34c
4 changed files with 37 additions and 35 deletions

View File

@ -63,6 +63,7 @@ export type ProductVariant = {
// The variant's depth. If a depth was not explicitly specified on the
// variant, this will be the product's depth.
depth?: Measurement
options: ProductOption[]
}
// Shopping cart, a.k.a Checkout
@ -109,6 +110,10 @@ export type CartItemBody = {
variantId: string
productId?: string
quantity?: number
pricing?: {
amount: number,
currencyCode: string,
}
}
// Body used by the `getCart` operation handler
@ -167,18 +172,18 @@ export interface Product extends Entity {
slug?: string
path?: string
images: ProductImage[]
variants: ProductVariant2[]
variants: ProductVariant[]
price: ProductPrice
options: ProductOption[]
sku?: string
}
interface ProductOption extends Entity {
export interface ProductOption extends Entity {
displayName: string
values: ProductOptionValues[]
}
interface ProductOptionValues {
export interface ProductOptionValues {
label: string
hexColors?: string[]
}
@ -188,11 +193,6 @@ interface ProductImage {
alt?: string
}
interface ProductVariant2 {
id: string | number
options: ProductOption[]
}
interface ProductPrice {
value: number
currencyCode: 'USD' | 'ARS' | string | undefined

View File

@ -1,6 +1,5 @@
import type { Cart } from '../../../types'
import type { CartHandlers } from '../'
import getAnomymousCartQuery from '@framework/utils/queries/get-anonymous-cart'
import getAnonymousCartQuery from '@framework/utils/queries/get-anonymous-cart'
import accountCartByAccountIdQuery from '@framework/utils/queries/account-cart-by-account-id'
import getCartCookie from '@framework/api/utils/get-cart-cookie'
import reconcileCarts from '@framework/api/utils/reconcile-carts'
@ -9,7 +8,7 @@ import {
REACTION_ANONYMOUS_CART_TOKEN_COOKIE,
REACTION_CART_ID_COOKIE,
REACTION_CUSTOMER_TOKEN_COOKIE,
} from '@framework/const.ts'
} from '@framework/const'
import { normalizeCart } from '@framework/utils'
// Return current cart info
@ -42,7 +41,7 @@ const getCart: CartHandlers['getCart'] = async ({ req, res, config }) => {
} else if (cartId && anonymousCartToken) {
const {
data: { cart: rawAnonymousCart },
} = await config.fetch(getAnomymousCartQuery, {
} = await config.fetch(getAnonymousCartQuery, {
variables: {
cartId,
cartToken: anonymousCartToken,

View File

@ -6,7 +6,10 @@
},
"generates": {
"./framework/reactioncommerce/schema.d.ts": {
"plugins": ["typescript", "typescript-operations"]
"plugins": ["typescript", "typescript-operations"],
"config": {
"avoidOptionals": true
}
},
"./framework/reactioncommerce/schema.graphql": {
"plugins": ["schema-ast"]

View File

@ -8,15 +8,15 @@ import {
CatalogItemProduct,
CatalogProduct,
ImageInfo,
Maybe,
CartItem,
} from '../schema'
import type {Cart, LineItem} from '../types'
const normalizeProductImages = (images: Maybe<ImageInfo>[], name: string) =>
const normalizeProductImages = (images: ImageInfo[], name: string) =>
images.map((image) => ({
url: image?.URLs?.original || image?.URLs?.medium || '',
alt: name,
alt: name
}))
const normalizeProductOption = (variant: CatalogProductVariant) => {
@ -38,7 +38,8 @@ function colorizeProductOptionValue(value: ProductOptionValues, displayName: str
return value;
}
const normalizeProductVariants = (variants: CatalogProductVariant[]): ProductVariant[] => {
const normalizeProductVariants = (variants: Array<CatalogProductVariant>): ProductVariant[] => {
console.log(variants);
return variants.reduce((productVariants: ProductVariant[], variant: CatalogProductVariant) => {
if (variantHasOptions(variant)) {
@ -141,14 +142,14 @@ export function normalizeProduct(productNode: CatalogItemProduct): Product {
slug: slug?.replace(/^\/+|\/+$/g, '') ?? '',
path: slug ?? '',
sku: sku ?? '',
images: media?.length ? normalizeProductImages(media, title ?? '') : [],
images: media?.length ? normalizeProductImages(<ImageInfo[]>media, title ?? '') : [],
vendor: product.vendor,
price: {
value: pricing[0]?.minPrice ?? 0,
currencyCode: pricing[0]?.currency.code,
},
variants: variants !== null ? normalizeProductVariants(<CatalogProductVariant[]>variants) : [],
options: variants !== null ? groupProductOptionsByAttributeLabel(<CatalogProductVariant[]>variants) : []
variants: !!variants ? normalizeProductVariants(<CatalogProductVariant[]>variants) : [],
options: !!variants ? groupProductOptionsByAttributeLabel(<CatalogProductVariant[]>variants) : []
}
}
@ -172,20 +173,18 @@ export function normalizeCart(cart: ReactionCart): Cart {
function normalizeLineItem(cartItem: CartItemEdge): LineItem {
const {
node: {
_id,
compareAtPrice,
imageURLs,
title,
productConfiguration,
priceWhenAdded,
optionTitle,
variantTitle,
quantity,
}
} = cartItem
_id,
compareAtPrice,
imageURLs,
title,
productConfiguration,
priceWhenAdded,
optionTitle,
variantTitle,
quantity
} = <CartItem>cartItem.node
console.log('imageURLs', imageURLs)
console.log('imageURLs', cartItem)
return {
id: _id,
variantId: String(productConfiguration?.productVariantId),
@ -197,11 +196,12 @@ function normalizeLineItem(cartItem: CartItemEdge): LineItem {
sku: String(productConfiguration?.productVariantId),
name: String(optionTitle || variantTitle),
image: {
url: imageURLs?.thumbnail ?? '/product-img-placeholder.svg',
url: imageURLs?.thumbnail ?? '/product-img-placeholder.svg',
},
requiresShipping: true,
price: priceWhenAdded?.amount,
listPrice: compareAtPrice?.amount,
listPrice: compareAtPrice?.amount ?? 0,
options: []
},
path: '',
discounts: [],