Skip to content

Commit 37e9c55

Browse files
committedMay 21, 2023
Generalize uuidRegex
1 parent 6795c57 commit 37e9c55

File tree

5 files changed

+12
-3
lines changed

5 files changed

+12
-3
lines changed
 

‎deno/lib/README.md

+4-1
Original file line numberDiff line numberDiff line change
@@ -458,6 +458,7 @@ There are a growing number of tools that are built atop or support Zod natively!
458458
- [`@modular-forms/solid`](https://github.com/fabian-hiller/modular-forms): Modular form library for SolidJS that supports Zod for validation.
459459
- [`houseform`](https://github.com/crutchcorn/houseform/): A React form library that uses Zod for validation.
460460
- [`sveltekit-superforms`](https://github.com/ciscoheat/sveltekit-superforms): Supercharged form library for SvelteKit with Zod validation.
461+
- [`mobx-zod-form`](https://github.com/MonoidDev/mobx-zod-form): Data-first form builder based on MobX & Zod
461462

462463
#### Zod to X
463464

@@ -469,6 +470,7 @@ There are a growing number of tools that are built atop or support Zod natively!
469470
- [`fastify-type-provider-zod`](https://github.com/turkerdev/fastify-type-provider-zod): Create Fastify type providers from Zod schemas.
470471
- [`zod-to-openapi`](https://github.com/asteasolutions/zod-to-openapi): Generate full OpenAPI (Swagger) docs from Zod, including schemas, endpoints & parameters.
471472
- [`nestjs-graphql-zod`](https://github.com/incetarik/nestjs-graphql-zod): Generates NestJS GraphQL model classes from Zod schemas. Provides GraphQL method decorators working with Zod schemas.
473+
- [`zod-openapi`](https://github.com/samchungy/zod-openapi): Create full OpenAPI v3.x documentation from Zod Schemas.
472474

473475
#### X to Zod
474476

@@ -487,6 +489,7 @@ There are a growing number of tools that are built atop or support Zod natively!
487489

488490
- [`@anatine/zod-mock`](https://github.com/anatine/zod-plugins/tree/main/packages/zod-mock): Generate mock data from a Zod schema. Powered by [faker.js](https://github.com/faker-js/faker).
489491
- [`zod-mocking`](https://github.com/dipasqualew/zod-mocking): Generate mock data from your Zod schemas.
492+
- [`zocker`](https://zocker.sigrist.dev): Generate plausible mock-data from your schemas.
490493

491494
#### Powered by Zod
492495

@@ -998,7 +1001,7 @@ FruitEnum.parse("Cantaloupe"); // fails
9981001

9991002
**Const enums**
10001003

1001-
The `.nativeEnum()` function works for `as const` objects as well. ⚠️ `as const` required TypeScript 3.4+!
1004+
The `.nativeEnum()` function works for `as const` objects as well. ⚠️ `as const` requires TypeScript 3.4+!
10021005

10031006
```ts
10041007
const Fruits = {

‎deno/lib/__tests__/string.test.ts

+1
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,7 @@ test("emoji validations", () => {
178178
test("uuid", () => {
179179
const uuid = z.string().uuid("custom error");
180180
uuid.parse("9491d710-3185-4e06-bea0-6a2f275345e0");
181+
uuid.parse("d89e7b01-7598-ed11-9d7a-0022489382fd"); // new sequential id
181182
uuid.parse("00000000-0000-0000-0000-000000000000");
182183
uuid.parse("b3ce60f8-e8b9-40f5-1150-172ede56ff74"); // Variant 0 - RFC 4122: Reserved, NCS backward compatibility
183184
uuid.parse("92e76bf9-28b3-4730-cd7f-cb6bc51f8c09"); // Variant 2 - RFC 4122: Reserved, Microsoft Corporation backward compatibility

‎deno/lib/types.ts

+3-1
Original file line numberDiff line numberDiff line change
@@ -541,8 +541,10 @@ export interface ZodStringDef extends ZodTypeDef {
541541
const cuidRegex = /^c[^\s-]{8,}$/i;
542542
const cuid2Regex = /^[a-z][a-z0-9]*$/;
543543
const ulidRegex = /[0-9A-HJKMNP-TV-Z]{26}/;
544+
// const uuidRegex =
545+
// /^([a-f0-9]{8}-[a-f0-9]{4}-[1-5][a-f0-9]{3}-[a-f0-9]{4}-[a-f0-9]{12}|00000000-0000-0000-0000-000000000000)$/i;
544546
const uuidRegex =
545-
/^([a-f0-9]{8}-[a-f0-9]{4}-[1-5][a-f0-9]{3}-[a-f0-9]{4}-[a-f0-9]{12}|00000000-0000-0000-0000-000000000000)$/i;
547+
/^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/i;
546548
// from https://stackoverflow.com/a/46181/1550155
547549
// old version: too slow, didn't support unicode
548550
// const emailRegex = /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))$/i;

‎src/__tests__/string.test.ts

+1
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,7 @@ test("emoji validations", () => {
177177
test("uuid", () => {
178178
const uuid = z.string().uuid("custom error");
179179
uuid.parse("9491d710-3185-4e06-bea0-6a2f275345e0");
180+
uuid.parse("d89e7b01-7598-ed11-9d7a-0022489382fd"); // new sequential id
180181
uuid.parse("00000000-0000-0000-0000-000000000000");
181182
uuid.parse("b3ce60f8-e8b9-40f5-1150-172ede56ff74"); // Variant 0 - RFC 4122: Reserved, NCS backward compatibility
182183
uuid.parse("92e76bf9-28b3-4730-cd7f-cb6bc51f8c09"); // Variant 2 - RFC 4122: Reserved, Microsoft Corporation backward compatibility

‎src/types.ts

+3-1
Original file line numberDiff line numberDiff line change
@@ -541,8 +541,10 @@ export interface ZodStringDef extends ZodTypeDef {
541541
const cuidRegex = /^c[^\s-]{8,}$/i;
542542
const cuid2Regex = /^[a-z][a-z0-9]*$/;
543543
const ulidRegex = /[0-9A-HJKMNP-TV-Z]{26}/;
544+
// const uuidRegex =
545+
// /^([a-f0-9]{8}-[a-f0-9]{4}-[1-5][a-f0-9]{3}-[a-f0-9]{4}-[a-f0-9]{12}|00000000-0000-0000-0000-000000000000)$/i;
544546
const uuidRegex =
545-
/^([a-f0-9]{8}-[a-f0-9]{4}-[1-5][a-f0-9]{3}-[a-f0-9]{4}-[a-f0-9]{12}|00000000-0000-0000-0000-000000000000)$/i;
547+
/^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/i;
546548
// from https://stackoverflow.com/a/46181/1550155
547549
// old version: too slow, didn't support unicode
548550
// const emailRegex = /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))$/i;

0 commit comments

Comments
 (0)
Please sign in to comment.