Skip to content

Commit 18ede78

Browse files
committed
fix: added validations for gradient from and to colors
1 parent a781158 commit 18ede78

3 files changed

Lines changed: 37 additions & 7 deletions

File tree

packages/imagekit-editor-dev/src/schema/background.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { z } from "zod/v3"
22
import type { TransformationField } from "."
3-
import { colorValidator } from "./transformation"
3+
import { colorValidator, gradientPickerColorValidator } from "./transformation"
44

55
export const SUPPORTED_BACKGROUND_TYPES: Record<
66
string,
@@ -305,8 +305,8 @@ export const background = {
305305
backgroundGradientPaletteSize: z.string().optional(),
306306
backgroundGradient: z
307307
.object({
308-
from: z.string().optional(),
309-
to: z.string().optional(),
308+
from: gradientPickerColorValidator.optional(),
309+
to: gradientPickerColorValidator.optional(),
310310
direction: z
311311
.union([
312312
z.coerce

packages/imagekit-editor-dev/src/schema/index.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import {
2525
import {
2626
colorValidator,
2727
commonNumberAndExpressionValidator,
28+
gradientPickerColorValidator,
2829
heightValidator,
2930
layerXValidator,
3031
layerYValidator,
@@ -418,8 +419,8 @@ const baseTransformationSchema: TransformationSchema[] = [
418419
.object({
419420
gradient: z
420421
.object({
421-
from: z.string().optional(),
422-
to: z.string().optional(),
422+
from: gradientPickerColorValidator.optional(),
423+
to: gradientPickerColorValidator.optional(),
423424
direction: z
424425
.union([
425426
z.coerce
@@ -2176,8 +2177,8 @@ const baseTransformationSchema: TransformationSchema[] = [
21762177
.optional(),
21772178
gradient: z
21782179
.object({
2179-
from: z.string().optional(),
2180-
to: z.string().optional(),
2180+
from: gradientPickerColorValidator.optional(),
2181+
to: gradientPickerColorValidator.optional(),
21812182
direction: z
21822183
.union([
21832184
z.coerce

packages/imagekit-editor-dev/src/schema/transformation.ts

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,35 @@ export const colorValidator = z
5555
message: "Enter a valid hex colour code.",
5656
})
5757

58+
/** Gradient picker colours: in-progress # + hex, complete values, or legacy hex without #. */
59+
export const gradientPickerColorValidator = z
60+
.string()
61+
.superRefine((val, ctx) => {
62+
if (val === "") {
63+
ctx.addIssue({
64+
code: z.ZodIssueCode.custom,
65+
message: "Enter a valid hex colour code.",
66+
})
67+
return
68+
}
69+
if (/^#[0-9A-Fa-f]{0,8}$/.test(val)) {
70+
const hex = val.slice(1)
71+
if (hex.length === 0) return
72+
if ([1, 2, 4, 5, 7].includes(hex.length)) return
73+
if (colorValidator.safeParse(val).success) return
74+
ctx.addIssue({
75+
code: z.ZodIssueCode.custom,
76+
message: "Enter a valid hex colour code.",
77+
})
78+
return
79+
}
80+
if (colorValidator.safeParse(val).success) return
81+
ctx.addIssue({
82+
code: z.ZodIssueCode.custom,
83+
message: "Enter a valid hex colour code.",
84+
})
85+
})
86+
5887
const aspectRatioValueValidator = z
5988
.string()
6089
.regex(/^\d+(\.\d{1,2})?-\d+(\.\d{1,2})?$/)

0 commit comments

Comments
 (0)