zod-joda 2.0.0 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -9
- package/dist/core.d.ts +6 -7
- package/dist/core.js +0 -5
- package/dist/index.d.ts +10 -10
- package/dist/index.js +16 -24
- package/dist/mini.js +17 -25
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -4,18 +4,12 @@
|
|
|
4
4
|
[](https://codecov.io/gh/DASPRiD/zod-joda)
|
|
5
5
|
|
|
6
6
|
This library adds additional types for [Zod](https://github.com/colinhacks/zod/) to parse and validate dates, times and durations as
|
|
7
|
-
[js-joda](https://github.com/js-joda/js-joda) types. This library has support for both `zod` and
|
|
7
|
+
[js-joda](https://github.com/js-joda/js-joda) types. This library has support for both `zod` v4 and `zod/v4/mini`.
|
|
8
8
|
|
|
9
9
|
## Installation
|
|
10
10
|
|
|
11
11
|
```bash
|
|
12
|
-
npm install zod-joda @js-joda/core
|
|
13
|
-
|
|
14
|
-
# a) Install zod peer dependency for full zod support
|
|
15
|
-
npm install zod
|
|
16
|
-
|
|
17
|
-
# b) Install zod mini for size optimized results
|
|
18
|
-
npm install @zod/mini
|
|
12
|
+
npm install zod-joda @js-joda/core zod
|
|
19
13
|
```
|
|
20
14
|
|
|
21
15
|
## Quick Start
|
|
@@ -27,7 +21,7 @@ method:
|
|
|
27
21
|
import {zj} from 'zod-joda';
|
|
28
22
|
```
|
|
29
23
|
|
|
30
|
-
For
|
|
24
|
+
For `zod/v4/mini`, import from the mini sub-path:
|
|
31
25
|
|
|
32
26
|
```typescript
|
|
33
27
|
import {zj} from 'zod-joda/mini';
|
package/dist/core.d.ts
CHANGED
|
@@ -2,8 +2,7 @@ import { DateTimeFormatter, Duration, LocalDate, LocalDateTime, LocalTime, Zoned
|
|
|
2
2
|
export type CoreParams = {
|
|
3
3
|
error?: string;
|
|
4
4
|
};
|
|
5
|
-
export type
|
|
6
|
-
isInstance: (input: unknown) => input is T;
|
|
5
|
+
export type TransformConfig<T, P extends CoreParams> = {
|
|
7
6
|
parse: (input: string, params?: P) => T;
|
|
8
7
|
invalidMessage: string;
|
|
9
8
|
schemaFormat: string;
|
|
@@ -12,8 +11,8 @@ export type TransformConstructorConfig<T, P extends CoreParams> = {
|
|
|
12
11
|
export type TemporalParams = CoreParams & {
|
|
13
12
|
dateTimeFormatter?: DateTimeFormatter;
|
|
14
13
|
};
|
|
15
|
-
export declare const durationConfig:
|
|
16
|
-
export declare const localDateConfig:
|
|
17
|
-
export declare const localDateTimeConfig:
|
|
18
|
-
export declare const localTimeConfig:
|
|
19
|
-
export declare const zonedDateTimeConfig:
|
|
14
|
+
export declare const durationConfig: TransformConfig<Duration, CoreParams>;
|
|
15
|
+
export declare const localDateConfig: TransformConfig<LocalDate, TemporalParams>;
|
|
16
|
+
export declare const localDateTimeConfig: TransformConfig<LocalDateTime, TemporalParams>;
|
|
17
|
+
export declare const localTimeConfig: TransformConfig<LocalTime, TemporalParams>;
|
|
18
|
+
export declare const zonedDateTimeConfig: TransformConfig<ZonedDateTime, TemporalParams>;
|
package/dist/core.js
CHANGED
|
@@ -1,34 +1,29 @@
|
|
|
1
1
|
import { DateTimeFormatter, Duration, LocalDate, LocalDateTime, LocalTime, ZoneId, ZonedDateTime, } from "@js-joda/core";
|
|
2
2
|
export const durationConfig = {
|
|
3
|
-
isInstance: (input) => input instanceof Duration,
|
|
4
3
|
parse: (input) => Duration.parse(input),
|
|
5
4
|
invalidMessage: "Invalid duration",
|
|
6
5
|
schemaFormat: "duration",
|
|
7
6
|
example: () => "PT1H",
|
|
8
7
|
};
|
|
9
8
|
export const localDateConfig = {
|
|
10
|
-
isInstance: (input) => input instanceof LocalDate,
|
|
11
9
|
parse: (input, params) => LocalDate.parse(input, params?.dateTimeFormatter),
|
|
12
10
|
invalidMessage: "Invalid local date",
|
|
13
11
|
schemaFormat: "date",
|
|
14
12
|
example: (params) => LocalDate.of(2020, 1, 1).format(params?.dateTimeFormatter ?? DateTimeFormatter.ISO_LOCAL_DATE),
|
|
15
13
|
};
|
|
16
14
|
export const localDateTimeConfig = {
|
|
17
|
-
isInstance: (input) => input instanceof LocalDateTime,
|
|
18
15
|
parse: (input, params) => LocalDateTime.parse(input, params?.dateTimeFormatter),
|
|
19
16
|
invalidMessage: "Invalid local date time",
|
|
20
17
|
schemaFormat: "local-date-time",
|
|
21
18
|
example: (params) => LocalDateTime.of(2020, 1, 1, 14, 0, 0, 0).format(params?.dateTimeFormatter ?? DateTimeFormatter.ISO_LOCAL_DATE_TIME),
|
|
22
19
|
};
|
|
23
20
|
export const localTimeConfig = {
|
|
24
|
-
isInstance: (input) => input instanceof LocalTime,
|
|
25
21
|
parse: (input, params) => LocalTime.parse(input, params?.dateTimeFormatter),
|
|
26
22
|
invalidMessage: "Invalid local time",
|
|
27
23
|
schemaFormat: "time",
|
|
28
24
|
example: (params) => LocalTime.of(14, 0, 0, 0).format(params?.dateTimeFormatter ?? DateTimeFormatter.ISO_LOCAL_TIME),
|
|
29
25
|
};
|
|
30
26
|
export const zonedDateTimeConfig = {
|
|
31
|
-
isInstance: (input) => input instanceof ZonedDateTime,
|
|
32
27
|
parse: (input, params) => ZonedDateTime.parse(input, params?.dateTimeFormatter),
|
|
33
28
|
invalidMessage: "Invalid zoned date time",
|
|
34
29
|
schemaFormat: "date-time",
|
package/dist/index.d.ts
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import { type ZodType } from "zod/v4";
|
|
2
2
|
import { type CoreParams } from "./core.js";
|
|
3
|
-
export declare const duration: (params?: CoreParams | undefined) => ZodType<import("@js-joda/core").Duration,
|
|
4
|
-
export declare const localDate: (params?: import("./core.js").TemporalParams | undefined) => ZodType<import("@js-joda/core").LocalDate,
|
|
5
|
-
export declare const localDateTime: (params?: import("./core.js").TemporalParams | undefined) => ZodType<import("@js-joda/core").LocalDateTime,
|
|
6
|
-
export declare const localTime: (params?: import("./core.js").TemporalParams | undefined) => ZodType<import("@js-joda/core").LocalTime,
|
|
7
|
-
export declare const zonedDateTime: (params?: import("./core.js").TemporalParams | undefined) => ZodType<import("@js-joda/core").ZonedDateTime,
|
|
3
|
+
export declare const duration: (params?: CoreParams | undefined) => ZodType<import("@js-joda/core").Duration, unknown, import("zod/v4/core").$ZodTypeInternals<import("@js-joda/core").Duration, unknown>>;
|
|
4
|
+
export declare const localDate: (params?: import("./core.js").TemporalParams | undefined) => ZodType<import("@js-joda/core").LocalDate, unknown, import("zod/v4/core").$ZodTypeInternals<import("@js-joda/core").LocalDate, unknown>>;
|
|
5
|
+
export declare const localDateTime: (params?: import("./core.js").TemporalParams | undefined) => ZodType<import("@js-joda/core").LocalDateTime, unknown, import("zod/v4/core").$ZodTypeInternals<import("@js-joda/core").LocalDateTime, unknown>>;
|
|
6
|
+
export declare const localTime: (params?: import("./core.js").TemporalParams | undefined) => ZodType<import("@js-joda/core").LocalTime, unknown, import("zod/v4/core").$ZodTypeInternals<import("@js-joda/core").LocalTime, unknown>>;
|
|
7
|
+
export declare const zonedDateTime: (params?: import("./core.js").TemporalParams | undefined) => ZodType<import("@js-joda/core").ZonedDateTime, unknown, import("zod/v4/core").$ZodTypeInternals<import("@js-joda/core").ZonedDateTime, unknown>>;
|
|
8
8
|
export declare const zj: {
|
|
9
|
-
duration: (params?: CoreParams | undefined) => ZodType<import("@js-joda/core").Duration,
|
|
10
|
-
localDate: (params?: import("./core.js").TemporalParams | undefined) => ZodType<import("@js-joda/core").LocalDate,
|
|
11
|
-
localDateTime: (params?: import("./core.js").TemporalParams | undefined) => ZodType<import("@js-joda/core").LocalDateTime,
|
|
12
|
-
localTime: (params?: import("./core.js").TemporalParams | undefined) => ZodType<import("@js-joda/core").LocalTime,
|
|
13
|
-
zonedDateTime: (params?: import("./core.js").TemporalParams | undefined) => ZodType<import("@js-joda/core").ZonedDateTime,
|
|
9
|
+
duration: (params?: CoreParams | undefined) => ZodType<import("@js-joda/core").Duration, unknown, import("zod/v4/core").$ZodTypeInternals<import("@js-joda/core").Duration, unknown>>;
|
|
10
|
+
localDate: (params?: import("./core.js").TemporalParams | undefined) => ZodType<import("@js-joda/core").LocalDate, unknown, import("zod/v4/core").$ZodTypeInternals<import("@js-joda/core").LocalDate, unknown>>;
|
|
11
|
+
localDateTime: (params?: import("./core.js").TemporalParams | undefined) => ZodType<import("@js-joda/core").LocalDateTime, unknown, import("zod/v4/core").$ZodTypeInternals<import("@js-joda/core").LocalDateTime, unknown>>;
|
|
12
|
+
localTime: (params?: import("./core.js").TemporalParams | undefined) => ZodType<import("@js-joda/core").LocalTime, unknown, import("zod/v4/core").$ZodTypeInternals<import("@js-joda/core").LocalTime, unknown>>;
|
|
13
|
+
zonedDateTime: (params?: import("./core.js").TemporalParams | undefined) => ZodType<import("@js-joda/core").ZonedDateTime, unknown, import("zod/v4/core").$ZodTypeInternals<import("@js-joda/core").ZonedDateTime, unknown>>;
|
|
14
14
|
};
|
|
15
15
|
export default zj;
|
package/dist/index.js
CHANGED
|
@@ -1,31 +1,23 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { string } from "zod/v4";
|
|
2
2
|
import { durationConfig, localDateConfig, localDateTimeConfig, localTimeConfig, zonedDateTimeConfig, } from "./core.js";
|
|
3
|
-
const createParseConstructor = ({
|
|
4
|
-
const
|
|
5
|
-
|
|
6
|
-
|
|
3
|
+
const createParseConstructor = ({ parse, invalidMessage, schemaFormat, example, }) => (params) => {
|
|
4
|
+
const inputSchema = string().meta({ example: example(params) });
|
|
5
|
+
inputSchema._zod.toJSONSchema = () => ({
|
|
6
|
+
format: schemaFormat,
|
|
7
|
+
});
|
|
8
|
+
return inputSchema.transform((value, context) => {
|
|
9
|
+
try {
|
|
10
|
+
return parse(value, params);
|
|
7
11
|
}
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
12
|
+
catch {
|
|
13
|
+
context.issues.push({
|
|
14
|
+
code: "custom",
|
|
15
|
+
message: params?.error ?? invalidMessage,
|
|
16
|
+
input: context.value,
|
|
17
|
+
});
|
|
18
|
+
return undefined;
|
|
15
19
|
}
|
|
16
|
-
context.issues.push({
|
|
17
|
-
code: "custom",
|
|
18
|
-
message: params?.error ?? invalidMessage,
|
|
19
|
-
input: context.value,
|
|
20
|
-
});
|
|
21
|
-
return undefined;
|
|
22
|
-
});
|
|
23
|
-
instance._zod.toJSONSchema = () => ({
|
|
24
|
-
type: "string",
|
|
25
|
-
format: schemaFormat,
|
|
26
|
-
example: example(params),
|
|
27
20
|
});
|
|
28
|
-
return instance;
|
|
29
21
|
};
|
|
30
22
|
export const duration = createParseConstructor(durationConfig);
|
|
31
23
|
export const localDate = createParseConstructor(localDateConfig);
|
package/dist/mini.js
CHANGED
|
@@ -1,31 +1,23 @@
|
|
|
1
|
-
import { transform } from "zod/v4/mini";
|
|
1
|
+
import { globalRegistry, pipe, string, transform } from "zod/v4/mini";
|
|
2
2
|
import { durationConfig, localDateConfig, localDateTimeConfig, localTimeConfig, zonedDateTimeConfig, } from "./core.js";
|
|
3
|
-
const createParseConstructor = ({
|
|
4
|
-
const
|
|
5
|
-
|
|
6
|
-
return input;
|
|
7
|
-
}
|
|
8
|
-
if (typeof input === "string") {
|
|
9
|
-
try {
|
|
10
|
-
return parse(input, params);
|
|
11
|
-
}
|
|
12
|
-
catch {
|
|
13
|
-
// Noop
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
context.issues.push({
|
|
17
|
-
code: "custom",
|
|
18
|
-
message: params?.error ?? invalidMessage,
|
|
19
|
-
input: context.value,
|
|
20
|
-
});
|
|
21
|
-
return undefined;
|
|
22
|
-
});
|
|
23
|
-
instance._zod.toJSONSchema = () => ({
|
|
24
|
-
type: "string",
|
|
3
|
+
const createParseConstructor = ({ parse, invalidMessage, schemaFormat, example, }) => (params) => {
|
|
4
|
+
const inputSchema = string().register(globalRegistry, { example: example(params) });
|
|
5
|
+
inputSchema._zod.toJSONSchema = () => ({
|
|
25
6
|
format: schemaFormat,
|
|
26
|
-
example: example(params),
|
|
27
7
|
});
|
|
28
|
-
return
|
|
8
|
+
return pipe(inputSchema, transform((value, context) => {
|
|
9
|
+
try {
|
|
10
|
+
return parse(value, params);
|
|
11
|
+
}
|
|
12
|
+
catch {
|
|
13
|
+
context.issues.push({
|
|
14
|
+
code: "custom",
|
|
15
|
+
message: params?.error ?? invalidMessage,
|
|
16
|
+
input: context.value,
|
|
17
|
+
});
|
|
18
|
+
return undefined;
|
|
19
|
+
}
|
|
20
|
+
}));
|
|
29
21
|
};
|
|
30
22
|
export const duration = createParseConstructor(durationConfig);
|
|
31
23
|
export const localDate = createParseConstructor(localDateConfig);
|