@wocart/storefront / astro / placeOrderInput
Variable: placeOrderInput
constplaceOrderInput:z.ZodObject<{address:z.ZodOptional<z.ZodString>;checkoutKey:z.ZodPreprocess<z.ZodOptional<z.ZodString>,unknown>;communeId:z.ZodString;couponCode:z.ZodPreprocess<z.ZodOptional<z.ZodString>,unknown>;customerName:z.ZodString;customFieldResponses:z.ZodPreprocess<z.ZodOptional<z.ZodUnion<readonly [z.ZodString,z.ZodArray<z.ZodUnknown>]>>,unknown>;deliveryType:z.ZodDefault<z.ZodEnum<{home:"home";stop_desk:"stop_desk"; }>>;z.ZodPreprocess<z.ZodOptional<z.ZodString>,unknown>;fbc:z.ZodPreprocess<z.ZodOptional<z.ZodString>,unknown>;fbp:z.ZodPreprocess<z.ZodOptional<z.ZodString>,unknown>;items:z.ZodPreprocess<z.ZodOptional<z.ZodArray<z.ZodObject<{offerId:z.ZodPreprocess<z.ZodOptional<z.ZodString>,unknown>;pricePerUnit:z.ZodOptional<z.ZodCoercedNumber<unknown>>;productId:z.ZodString;productName:z.ZodString;quantity:z.ZodCoercedNumber<unknown>;variantId:z.ZodPreprocess<z.ZodOptional<z.ZodString>,unknown>;variantLabel:z.ZodPreprocess<z.ZodOptional<z.ZodString>,unknown>; },z.core.$strip>>>,unknown>;landingPageSlug:z.ZodPreprocess<z.ZodOptional<z.ZodString>,unknown>;notes:z.ZodOptional<z.ZodString>;offerId:z.ZodPreprocess<z.ZodOptional<z.ZodString>,unknown>;otpToken:z.ZodPreprocess<z.ZodOptional<z.ZodString>,unknown>;phone:z.ZodPreprocess<z.ZodString,unknown>;pricePerUnit:z.ZodPreprocess<z.ZodOptional<z.ZodCoercedNumber<unknown>>,unknown>;productId:z.ZodPreprocess<z.ZodOptional<z.ZodString>,unknown>;productName:z.ZodPreprocess<z.ZodOptional<z.ZodString>,unknown>;quantity:z.ZodDefault<z.ZodCoercedNumber<unknown>>;turnstileToken:z.ZodPreprocess<z.ZodOptional<z.ZodString>,unknown>;variantId:z.ZodPreprocess<z.ZodOptional<z.ZodString>,unknown>;variantLabel:z.ZodPreprocess<z.ZodOptional<z.ZodString>,unknown>;variantSelections:z.ZodPreprocess<z.ZodOptional<z.ZodArray<z.ZodObject<{variantId:z.ZodString;variantLabel:z.ZodOptional<z.ZodString>; },z.core.$strip>>>,unknown>;wilayaId:z.ZodCoercedNumber<unknown>; },z.core.$strip>
The order form's input whitelist.
zod STRIPS every key this schema does not name, which is why a field the storefront renders but this schema forgets silently never reaches the server. Form parsing needs a plain object schema (no .superRefine), so the basket-or-product rule lives in executePlaceOrder — failing there turns a bare 400 into a field error the form can actually render.