@agentuity/schema 0.0.69
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/AGENTS.md +86 -0
- package/README.md +323 -0
- package/dist/base.d.ts +111 -0
- package/dist/base.d.ts.map +1 -0
- package/dist/base.js +93 -0
- package/dist/base.js.map +1 -0
- package/dist/coerce/boolean.d.ts +37 -0
- package/dist/coerce/boolean.d.ts.map +1 -0
- package/dist/coerce/boolean.js +49 -0
- package/dist/coerce/boolean.js.map +1 -0
- package/dist/coerce/date.d.ts +36 -0
- package/dist/coerce/date.d.ts.map +1 -0
- package/dist/coerce/date.js +60 -0
- package/dist/coerce/date.js.map +1 -0
- package/dist/coerce/number.d.ts +36 -0
- package/dist/coerce/number.d.ts.map +1 -0
- package/dist/coerce/number.js +59 -0
- package/dist/coerce/number.js.map +1 -0
- package/dist/coerce/string.d.ts +35 -0
- package/dist/coerce/string.d.ts.map +1 -0
- package/dist/coerce/string.js +47 -0
- package/dist/coerce/string.js.map +1 -0
- package/dist/complex/array.d.ts +56 -0
- package/dist/complex/array.d.ts.map +1 -0
- package/dist/complex/array.js +96 -0
- package/dist/complex/array.js.map +1 -0
- package/dist/complex/object.d.ts +76 -0
- package/dist/complex/object.d.ts.map +1 -0
- package/dist/complex/object.js +104 -0
- package/dist/complex/object.js.map +1 -0
- package/dist/complex/record.d.ts +53 -0
- package/dist/complex/record.d.ts.map +1 -0
- package/dist/complex/record.js +109 -0
- package/dist/complex/record.js.map +1 -0
- package/dist/index.d.ts +151 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +128 -0
- package/dist/index.js.map +1 -0
- package/dist/json-schema.d.ts +60 -0
- package/dist/json-schema.d.ts.map +1 -0
- package/dist/json-schema.js +280 -0
- package/dist/json-schema.js.map +1 -0
- package/dist/primitives/any.d.ts +44 -0
- package/dist/primitives/any.d.ts.map +1 -0
- package/dist/primitives/any.js +57 -0
- package/dist/primitives/any.js.map +1 -0
- package/dist/primitives/boolean.d.ts +39 -0
- package/dist/primitives/boolean.d.ts.map +1 -0
- package/dist/primitives/boolean.js +53 -0
- package/dist/primitives/boolean.js.map +1 -0
- package/dist/primitives/null.d.ts +26 -0
- package/dist/primitives/null.d.ts.map +1 -0
- package/dist/primitives/null.js +40 -0
- package/dist/primitives/null.js.map +1 -0
- package/dist/primitives/number.d.ts +87 -0
- package/dist/primitives/number.d.ts.map +1 -0
- package/dist/primitives/number.js +129 -0
- package/dist/primitives/number.js.map +1 -0
- package/dist/primitives/string.d.ts +64 -0
- package/dist/primitives/string.d.ts.map +1 -0
- package/dist/primitives/string.js +102 -0
- package/dist/primitives/string.js.map +1 -0
- package/dist/primitives/undefined.d.ts +26 -0
- package/dist/primitives/undefined.d.ts.map +1 -0
- package/dist/primitives/undefined.js +40 -0
- package/dist/primitives/undefined.js.map +1 -0
- package/dist/primitives/unknown.d.ts +47 -0
- package/dist/primitives/unknown.d.ts.map +1 -0
- package/dist/primitives/unknown.js +56 -0
- package/dist/primitives/unknown.js.map +1 -0
- package/dist/utils/literal.d.ts +47 -0
- package/dist/utils/literal.d.ts.map +1 -0
- package/dist/utils/literal.js +64 -0
- package/dist/utils/literal.js.map +1 -0
- package/dist/utils/nullable.d.ts +50 -0
- package/dist/utils/nullable.d.ts.map +1 -0
- package/dist/utils/nullable.js +69 -0
- package/dist/utils/nullable.js.map +1 -0
- package/dist/utils/optional.d.ts +50 -0
- package/dist/utils/optional.d.ts.map +1 -0
- package/dist/utils/optional.js +69 -0
- package/dist/utils/optional.js.map +1 -0
- package/dist/utils/union.d.ts +60 -0
- package/dist/utils/union.d.ts.map +1 -0
- package/dist/utils/union.js +87 -0
- package/dist/utils/union.js.map +1 -0
- package/package.json +39 -0
- package/src/__tests__/coerce.test.ts +88 -0
- package/src/__tests__/complex.test.ts +124 -0
- package/src/__tests__/errors.test.ts +129 -0
- package/src/__tests__/json-schema.test.ts +138 -0
- package/src/__tests__/primitives.test.ts +184 -0
- package/src/__tests__/type-inference.test.ts +68 -0
- package/src/__tests__/utils.test.ts +100 -0
- package/src/base.ts +185 -0
- package/src/coerce/boolean.ts +56 -0
- package/src/coerce/date.ts +68 -0
- package/src/coerce/number.ts +67 -0
- package/src/coerce/string.ts +54 -0
- package/src/complex/array.ts +108 -0
- package/src/complex/object.ts +141 -0
- package/src/complex/record.ts +129 -0
- package/src/index.ts +177 -0
- package/src/json-schema.ts +331 -0
- package/src/primitives/any.ts +64 -0
- package/src/primitives/boolean.ts +60 -0
- package/src/primitives/null.ts +47 -0
- package/src/primitives/number.ts +141 -0
- package/src/primitives/string.ts +113 -0
- package/src/primitives/undefined.ts +47 -0
- package/src/primitives/unknown.ts +63 -0
- package/src/utils/literal.ts +71 -0
- package/src/utils/nullable.ts +80 -0
- package/src/utils/optional.ts +80 -0
- package/src/utils/union.ts +103 -0
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { success, createParseMethods } from '../base';
|
|
2
|
+
import { optional } from '../utils/optional';
|
|
3
|
+
import { nullable } from '../utils/nullable';
|
|
4
|
+
const parseMethods = createParseMethods();
|
|
5
|
+
/**
|
|
6
|
+
* Schema that coerces values to booleans using Boolean(value).
|
|
7
|
+
* Uses JavaScript truthy/falsy rules.
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```typescript
|
|
11
|
+
* const schema = s.coerce.boolean();
|
|
12
|
+
* schema.parse(1); // true
|
|
13
|
+
* schema.parse(0); // false
|
|
14
|
+
* schema.parse(''); // false
|
|
15
|
+
* schema.parse('hello'); // true
|
|
16
|
+
* ```
|
|
17
|
+
*/
|
|
18
|
+
export class CoerceBooleanSchema {
|
|
19
|
+
description;
|
|
20
|
+
'~standard' = {
|
|
21
|
+
version: 1,
|
|
22
|
+
vendor: 'agentuity',
|
|
23
|
+
validate: (value) => {
|
|
24
|
+
// Coerce to boolean using JavaScript truthiness rules
|
|
25
|
+
return success(Boolean(value));
|
|
26
|
+
},
|
|
27
|
+
types: undefined,
|
|
28
|
+
};
|
|
29
|
+
describe(description) {
|
|
30
|
+
this.description = description;
|
|
31
|
+
return this;
|
|
32
|
+
}
|
|
33
|
+
optional() {
|
|
34
|
+
return optional(this);
|
|
35
|
+
}
|
|
36
|
+
nullable() {
|
|
37
|
+
return nullable(this);
|
|
38
|
+
}
|
|
39
|
+
parse = parseMethods.parse;
|
|
40
|
+
safeParse = parseMethods.safeParse;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Create a schema that coerces values to booleans.
|
|
44
|
+
* Useful for parsing checkboxes or boolean flags from strings.
|
|
45
|
+
*/
|
|
46
|
+
export function coerceBoolean() {
|
|
47
|
+
return new CoerceBooleanSchema();
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=boolean.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"boolean.js","sourceRoot":"","sources":["../../src/coerce/boolean.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE7C,MAAM,YAAY,GAAG,kBAAkB,EAAW,CAAC;AAEnD;;;;;;;;;;;;GAYG;AACH,MAAM,OAAO,mBAAmB;IAC/B,WAAW,CAAU;IAEZ,WAAW,GAAG;QACtB,OAAO,EAAE,CAAU;QACnB,MAAM,EAAE,WAAW;QACnB,QAAQ,EAAE,CAAC,KAAc,EAAE,EAAE;YAC5B,sDAAsD;YACtD,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;QAChC,CAAC;QACD,KAAK,EAAE,SAA2D;KAClE,CAAC;IAEF,QAAQ,CAAC,WAAmB;QAC3B,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,OAAO,IAAI,CAAC;IACb,CAAC;IAED,QAAQ;QACP,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC;IACvB,CAAC;IAED,QAAQ;QACP,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC;IACvB,CAAC;IACD,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC;IAC3B,SAAS,GAAG,YAAY,CAAC,SAAS,CAAC;CACnC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa;IAC5B,OAAO,IAAI,mBAAmB,EAAE,CAAC;AAClC,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { Schema } from '../base';
|
|
2
|
+
/**
|
|
3
|
+
* Schema that coerces values to Date objects using new Date(value).
|
|
4
|
+
* Fails if the result is an invalid date.
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* ```typescript
|
|
8
|
+
* const schema = s.coerce.date();
|
|
9
|
+
* schema.parse('2025-01-01'); // Date object
|
|
10
|
+
* schema.parse(1609459200000); // Date from timestamp
|
|
11
|
+
* schema.parse('invalid'); // throws ValidationError
|
|
12
|
+
* ```
|
|
13
|
+
*/
|
|
14
|
+
export declare class CoerceDateSchema implements Schema<unknown, Date> {
|
|
15
|
+
description?: string;
|
|
16
|
+
readonly '~standard': {
|
|
17
|
+
version: 1;
|
|
18
|
+
vendor: string;
|
|
19
|
+
validate: (value: unknown) => import("@agentuity/core").StandardSchemaV1.FailureResult | import("@agentuity/core").StandardSchemaV1.SuccessResult<Date>;
|
|
20
|
+
types: {
|
|
21
|
+
input: unknown;
|
|
22
|
+
output: Date;
|
|
23
|
+
};
|
|
24
|
+
};
|
|
25
|
+
describe(description: string): this;
|
|
26
|
+
optional(): import("..").OptionalSchema<this>;
|
|
27
|
+
nullable(): import("..").NullableSchema<this>;
|
|
28
|
+
parse: (this: Schema<any, Date>, value: unknown) => Date;
|
|
29
|
+
safeParse: (this: Schema<any, Date>, value: unknown) => import("..").SafeParseResult<Date>;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Create a schema that coerces values to Date objects.
|
|
33
|
+
* Useful for parsing ISO date strings or timestamps.
|
|
34
|
+
*/
|
|
35
|
+
export declare function coerceDate(): CoerceDateSchema;
|
|
36
|
+
//# sourceMappingURL=date.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"date.d.ts","sourceRoot":"","sources":["../../src/coerce/date.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAOtC;;;;;;;;;;;GAWG;AACH,qBAAa,gBAAiB,YAAW,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC;IAC7D,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,QAAQ,CAAC,WAAW;;;0BAGD,OAAO;eAiBM;YAAE,KAAK,EAAE,OAAO,CAAC;YAAC,MAAM,EAAE,IAAI,CAAA;SAAE;MAC9D;IAEF,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAKnC,QAAQ;IAIR,QAAQ;IAGR,KAAK,oDAAsB;IAC3B,SAAS,kFAA0B;CACnC;AAED;;;GAGG;AACH,wBAAgB,UAAU,IAAI,gBAAgB,CAE7C"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { createIssue, failure, success, createParseMethods } from '../base';
|
|
2
|
+
import { optional } from '../utils/optional';
|
|
3
|
+
import { nullable } from '../utils/nullable';
|
|
4
|
+
const parseMethods = createParseMethods();
|
|
5
|
+
/**
|
|
6
|
+
* Schema that coerces values to Date objects using new Date(value).
|
|
7
|
+
* Fails if the result is an invalid date.
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```typescript
|
|
11
|
+
* const schema = s.coerce.date();
|
|
12
|
+
* schema.parse('2025-01-01'); // Date object
|
|
13
|
+
* schema.parse(1609459200000); // Date from timestamp
|
|
14
|
+
* schema.parse('invalid'); // throws ValidationError
|
|
15
|
+
* ```
|
|
16
|
+
*/
|
|
17
|
+
export class CoerceDateSchema {
|
|
18
|
+
description;
|
|
19
|
+
'~standard' = {
|
|
20
|
+
version: 1,
|
|
21
|
+
vendor: 'agentuity',
|
|
22
|
+
validate: (value) => {
|
|
23
|
+
// Already a Date
|
|
24
|
+
if (value instanceof Date) {
|
|
25
|
+
if (isNaN(value.getTime())) {
|
|
26
|
+
return failure([createIssue('Invalid date')]);
|
|
27
|
+
}
|
|
28
|
+
return success(value);
|
|
29
|
+
}
|
|
30
|
+
// Coerce to Date
|
|
31
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
32
|
+
const coerced = new Date(value);
|
|
33
|
+
if (isNaN(coerced.getTime())) {
|
|
34
|
+
return failure([createIssue(`Cannot coerce ${typeof value} to date`)]);
|
|
35
|
+
}
|
|
36
|
+
return success(coerced);
|
|
37
|
+
},
|
|
38
|
+
types: undefined,
|
|
39
|
+
};
|
|
40
|
+
describe(description) {
|
|
41
|
+
this.description = description;
|
|
42
|
+
return this;
|
|
43
|
+
}
|
|
44
|
+
optional() {
|
|
45
|
+
return optional(this);
|
|
46
|
+
}
|
|
47
|
+
nullable() {
|
|
48
|
+
return nullable(this);
|
|
49
|
+
}
|
|
50
|
+
parse = parseMethods.parse;
|
|
51
|
+
safeParse = parseMethods.safeParse;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Create a schema that coerces values to Date objects.
|
|
55
|
+
* Useful for parsing ISO date strings or timestamps.
|
|
56
|
+
*/
|
|
57
|
+
export function coerceDate() {
|
|
58
|
+
return new CoerceDateSchema();
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=date.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"date.js","sourceRoot":"","sources":["../../src/coerce/date.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAC5E,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE7C,MAAM,YAAY,GAAG,kBAAkB,EAAQ,CAAC;AAEhD;;;;;;;;;;;GAWG;AACH,MAAM,OAAO,gBAAgB;IAC5B,WAAW,CAAU;IAEZ,WAAW,GAAG;QACtB,OAAO,EAAE,CAAU;QACnB,MAAM,EAAE,WAAW;QACnB,QAAQ,EAAE,CAAC,KAAc,EAAE,EAAE;YAC5B,iBAAiB;YACjB,IAAI,KAAK,YAAY,IAAI,EAAE,CAAC;gBAC3B,IAAI,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;oBAC5B,OAAO,OAAO,CAAC,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;gBAC/C,CAAC;gBACD,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC;YACvB,CAAC;YAED,iBAAiB;YACjB,8DAA8D;YAC9D,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,KAAY,CAAC,CAAC;YACvC,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;gBAC9B,OAAO,OAAO,CAAC,CAAC,WAAW,CAAC,iBAAiB,OAAO,KAAK,UAAU,CAAC,CAAC,CAAC,CAAC;YACxE,CAAC;YACD,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC;QACzB,CAAC;QACD,KAAK,EAAE,SAAwD;KAC/D,CAAC;IAEF,QAAQ,CAAC,WAAmB;QAC3B,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,OAAO,IAAI,CAAC;IACb,CAAC;IAED,QAAQ;QACP,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC;IACvB,CAAC;IAED,QAAQ;QACP,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC;IACvB,CAAC;IACD,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC;IAC3B,SAAS,GAAG,YAAY,CAAC,SAAS,CAAC;CACnC;AAED;;;GAGG;AACH,MAAM,UAAU,UAAU;IACzB,OAAO,IAAI,gBAAgB,EAAE,CAAC;AAC/B,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { Schema } from '../base';
|
|
2
|
+
/**
|
|
3
|
+
* Schema that coerces values to numbers using Number(value).
|
|
4
|
+
* Fails if the result is NaN.
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* ```typescript
|
|
8
|
+
* const schema = s.coerce.number();
|
|
9
|
+
* schema.parse('123'); // 123
|
|
10
|
+
* schema.parse(true); // 1
|
|
11
|
+
* schema.parse('abc'); // throws ValidationError
|
|
12
|
+
* ```
|
|
13
|
+
*/
|
|
14
|
+
export declare class CoerceNumberSchema implements Schema<unknown, number> {
|
|
15
|
+
description?: string;
|
|
16
|
+
readonly '~standard': {
|
|
17
|
+
version: 1;
|
|
18
|
+
vendor: string;
|
|
19
|
+
validate: (value: unknown) => import("@agentuity/core").StandardSchemaV1.FailureResult | import("@agentuity/core").StandardSchemaV1.SuccessResult<number>;
|
|
20
|
+
types: {
|
|
21
|
+
input: unknown;
|
|
22
|
+
output: number;
|
|
23
|
+
};
|
|
24
|
+
};
|
|
25
|
+
describe(description: string): this;
|
|
26
|
+
optional(): import("..").OptionalSchema<this>;
|
|
27
|
+
nullable(): import("..").NullableSchema<this>;
|
|
28
|
+
parse: (this: Schema<any, number>, value: unknown) => number;
|
|
29
|
+
safeParse: (this: Schema<any, number>, value: unknown) => import("..").SafeParseResult<number>;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Create a schema that coerces values to numbers.
|
|
33
|
+
* Useful for parsing form data or query parameters where numbers come as strings.
|
|
34
|
+
*/
|
|
35
|
+
export declare function coerceNumber(): CoerceNumberSchema;
|
|
36
|
+
//# sourceMappingURL=number.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"number.d.ts","sourceRoot":"","sources":["../../src/coerce/number.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAOtC;;;;;;;;;;;GAWG;AACH,qBAAa,kBAAmB,YAAW,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC;IACjE,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,QAAQ,CAAC,WAAW;;;0BAGD,OAAO;eAgBM;YAAE,KAAK,EAAE,OAAO,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE;MAChE;IAEF,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAKnC,QAAQ;IAIR,QAAQ;IAGR,KAAK,wDAAsB;IAC3B,SAAS,sFAA0B;CACnC;AAED;;;GAGG;AACH,wBAAgB,YAAY,IAAI,kBAAkB,CAEjD"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { createIssue, failure, success, createParseMethods } from '../base';
|
|
2
|
+
import { optional } from '../utils/optional';
|
|
3
|
+
import { nullable } from '../utils/nullable';
|
|
4
|
+
const parseMethods = createParseMethods();
|
|
5
|
+
/**
|
|
6
|
+
* Schema that coerces values to numbers using Number(value).
|
|
7
|
+
* Fails if the result is NaN.
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```typescript
|
|
11
|
+
* const schema = s.coerce.number();
|
|
12
|
+
* schema.parse('123'); // 123
|
|
13
|
+
* schema.parse(true); // 1
|
|
14
|
+
* schema.parse('abc'); // throws ValidationError
|
|
15
|
+
* ```
|
|
16
|
+
*/
|
|
17
|
+
export class CoerceNumberSchema {
|
|
18
|
+
description;
|
|
19
|
+
'~standard' = {
|
|
20
|
+
version: 1,
|
|
21
|
+
vendor: 'agentuity',
|
|
22
|
+
validate: (value) => {
|
|
23
|
+
// Already a number
|
|
24
|
+
if (typeof value === 'number') {
|
|
25
|
+
if (Number.isNaN(value)) {
|
|
26
|
+
return failure([createIssue('Cannot coerce NaN to number')]);
|
|
27
|
+
}
|
|
28
|
+
return success(value);
|
|
29
|
+
}
|
|
30
|
+
// Coerce to number
|
|
31
|
+
const coerced = Number(value);
|
|
32
|
+
if (Number.isNaN(coerced)) {
|
|
33
|
+
return failure([createIssue(`Cannot coerce ${typeof value} to number`)]);
|
|
34
|
+
}
|
|
35
|
+
return success(coerced);
|
|
36
|
+
},
|
|
37
|
+
types: undefined,
|
|
38
|
+
};
|
|
39
|
+
describe(description) {
|
|
40
|
+
this.description = description;
|
|
41
|
+
return this;
|
|
42
|
+
}
|
|
43
|
+
optional() {
|
|
44
|
+
return optional(this);
|
|
45
|
+
}
|
|
46
|
+
nullable() {
|
|
47
|
+
return nullable(this);
|
|
48
|
+
}
|
|
49
|
+
parse = parseMethods.parse;
|
|
50
|
+
safeParse = parseMethods.safeParse;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Create a schema that coerces values to numbers.
|
|
54
|
+
* Useful for parsing form data or query parameters where numbers come as strings.
|
|
55
|
+
*/
|
|
56
|
+
export function coerceNumber() {
|
|
57
|
+
return new CoerceNumberSchema();
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=number.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"number.js","sourceRoot":"","sources":["../../src/coerce/number.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAC5E,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE7C,MAAM,YAAY,GAAG,kBAAkB,EAAU,CAAC;AAElD;;;;;;;;;;;GAWG;AACH,MAAM,OAAO,kBAAkB;IAC9B,WAAW,CAAU;IAEZ,WAAW,GAAG;QACtB,OAAO,EAAE,CAAU;QACnB,MAAM,EAAE,WAAW;QACnB,QAAQ,EAAE,CAAC,KAAc,EAAE,EAAE;YAC5B,mBAAmB;YACnB,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAC/B,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;oBACzB,OAAO,OAAO,CAAC,CAAC,WAAW,CAAC,6BAA6B,CAAC,CAAC,CAAC,CAAC;gBAC9D,CAAC;gBACD,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC;YACvB,CAAC;YAED,mBAAmB;YACnB,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;YAC9B,IAAI,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC3B,OAAO,OAAO,CAAC,CAAC,WAAW,CAAC,iBAAiB,OAAO,KAAK,YAAY,CAAC,CAAC,CAAC,CAAC;YAC1E,CAAC;YACD,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC;QACzB,CAAC;QACD,KAAK,EAAE,SAA0D;KACjE,CAAC;IAEF,QAAQ,CAAC,WAAmB;QAC3B,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,OAAO,IAAI,CAAC;IACb,CAAC;IAED,QAAQ;QACP,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC;IACvB,CAAC;IAED,QAAQ;QACP,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC;IACvB,CAAC;IACD,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC;IAC3B,SAAS,GAAG,YAAY,CAAC,SAAS,CAAC;CACnC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY;IAC3B,OAAO,IAAI,kBAAkB,EAAE,CAAC;AACjC,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { Schema } from '../base';
|
|
2
|
+
/**
|
|
3
|
+
* Schema that coerces any value to a string using String(value).
|
|
4
|
+
*
|
|
5
|
+
* @example
|
|
6
|
+
* ```typescript
|
|
7
|
+
* const schema = s.coerce.string();
|
|
8
|
+
* schema.parse(123); // '123'
|
|
9
|
+
* schema.parse(true); // 'true'
|
|
10
|
+
* schema.parse(null); // 'null'
|
|
11
|
+
* ```
|
|
12
|
+
*/
|
|
13
|
+
export declare class CoerceStringSchema implements Schema<unknown, string> {
|
|
14
|
+
description?: string;
|
|
15
|
+
readonly '~standard': {
|
|
16
|
+
version: 1;
|
|
17
|
+
vendor: string;
|
|
18
|
+
validate: (value: unknown) => import("@agentuity/core").StandardSchemaV1.SuccessResult<string>;
|
|
19
|
+
types: {
|
|
20
|
+
input: unknown;
|
|
21
|
+
output: string;
|
|
22
|
+
};
|
|
23
|
+
};
|
|
24
|
+
describe(description: string): this;
|
|
25
|
+
optional(): import("..").OptionalSchema<this>;
|
|
26
|
+
nullable(): import("..").NullableSchema<this>;
|
|
27
|
+
parse: (this: Schema<any, string>, value: unknown) => string;
|
|
28
|
+
safeParse: (this: Schema<any, string>, value: unknown) => import("..").SafeParseResult<string>;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Create a schema that coerces values to strings.
|
|
32
|
+
* Useful for parsing form data or query parameters.
|
|
33
|
+
*/
|
|
34
|
+
export declare function coerceString(): CoerceStringSchema;
|
|
35
|
+
//# sourceMappingURL=string.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"string.d.ts","sourceRoot":"","sources":["../../src/coerce/string.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAOtC;;;;;;;;;;GAUG;AACH,qBAAa,kBAAmB,YAAW,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC;IACjE,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,QAAQ,CAAC,WAAW;;;0BAGD,OAAO;eAIM;YAAE,KAAK,EAAE,OAAO,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE;MAChE;IAEF,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAKnC,QAAQ;IAIR,QAAQ;IAGR,KAAK,wDAAsB;IAC3B,SAAS,sFAA0B;CACnC;AAED;;;GAGG;AACH,wBAAgB,YAAY,IAAI,kBAAkB,CAEjD"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { success, createParseMethods } from '../base';
|
|
2
|
+
import { optional } from '../utils/optional';
|
|
3
|
+
import { nullable } from '../utils/nullable';
|
|
4
|
+
const parseMethods = createParseMethods();
|
|
5
|
+
/**
|
|
6
|
+
* Schema that coerces any value to a string using String(value).
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```typescript
|
|
10
|
+
* const schema = s.coerce.string();
|
|
11
|
+
* schema.parse(123); // '123'
|
|
12
|
+
* schema.parse(true); // 'true'
|
|
13
|
+
* schema.parse(null); // 'null'
|
|
14
|
+
* ```
|
|
15
|
+
*/
|
|
16
|
+
export class CoerceStringSchema {
|
|
17
|
+
description;
|
|
18
|
+
'~standard' = {
|
|
19
|
+
version: 1,
|
|
20
|
+
vendor: 'agentuity',
|
|
21
|
+
validate: (value) => {
|
|
22
|
+
// Coerce to string
|
|
23
|
+
return success(String(value));
|
|
24
|
+
},
|
|
25
|
+
types: undefined,
|
|
26
|
+
};
|
|
27
|
+
describe(description) {
|
|
28
|
+
this.description = description;
|
|
29
|
+
return this;
|
|
30
|
+
}
|
|
31
|
+
optional() {
|
|
32
|
+
return optional(this);
|
|
33
|
+
}
|
|
34
|
+
nullable() {
|
|
35
|
+
return nullable(this);
|
|
36
|
+
}
|
|
37
|
+
parse = parseMethods.parse;
|
|
38
|
+
safeParse = parseMethods.safeParse;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Create a schema that coerces values to strings.
|
|
42
|
+
* Useful for parsing form data or query parameters.
|
|
43
|
+
*/
|
|
44
|
+
export function coerceString() {
|
|
45
|
+
return new CoerceStringSchema();
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=string.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"string.js","sourceRoot":"","sources":["../../src/coerce/string.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE7C,MAAM,YAAY,GAAG,kBAAkB,EAAU,CAAC;AAElD;;;;;;;;;;GAUG;AACH,MAAM,OAAO,kBAAkB;IAC9B,WAAW,CAAU;IAEZ,WAAW,GAAG;QACtB,OAAO,EAAE,CAAU;QACnB,MAAM,EAAE,WAAW;QACnB,QAAQ,EAAE,CAAC,KAAc,EAAE,EAAE;YAC5B,mBAAmB;YACnB,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAC/B,CAAC;QACD,KAAK,EAAE,SAA0D;KACjE,CAAC;IAEF,QAAQ,CAAC,WAAmB;QAC3B,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,OAAO,IAAI,CAAC;IACb,CAAC;IAED,QAAQ;QACP,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC;IACvB,CAAC;IAED,QAAQ;QACP,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC;IACvB,CAAC;IACD,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC;IAC3B,SAAS,GAAG,YAAY,CAAC,SAAS,CAAC;CACnC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY;IAC3B,OAAO,IAAI,kBAAkB,EAAE,CAAC;AACjC,CAAC"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import type { Schema, Infer } from '../base';
|
|
2
|
+
/**
|
|
3
|
+
* Schema for validating arrays with typed elements.
|
|
4
|
+
* Validates each element and collects all validation errors with array indices in paths.
|
|
5
|
+
*
|
|
6
|
+
* @template T - The schema type for array elements
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```typescript
|
|
10
|
+
* const tagsSchema = s.array(s.string());
|
|
11
|
+
* const tags = tagsSchema.parse(['tag1', 'tag2']);
|
|
12
|
+
*
|
|
13
|
+
* const usersSchema = s.array(s.object({
|
|
14
|
+
* name: s.string(),
|
|
15
|
+
* age: s.number()
|
|
16
|
+
* }));
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
export declare class ArraySchema<T extends Schema<any, any>> implements Schema<Array<Infer<T>>, Array<Infer<T>>> {
|
|
20
|
+
private itemSchema;
|
|
21
|
+
description?: string;
|
|
22
|
+
private parseMethods;
|
|
23
|
+
constructor(itemSchema: T);
|
|
24
|
+
readonly '~standard': {
|
|
25
|
+
version: 1;
|
|
26
|
+
vendor: string;
|
|
27
|
+
validate: (value: unknown) => import("@agentuity/core").StandardSchemaV1.FailureResult | import("@agentuity/core").StandardSchemaV1.SuccessResult<Infer<T>[]>;
|
|
28
|
+
types: {
|
|
29
|
+
input: Array<Infer<T>>;
|
|
30
|
+
output: Array<Infer<T>>;
|
|
31
|
+
};
|
|
32
|
+
};
|
|
33
|
+
describe(description: string): this;
|
|
34
|
+
optional(): import("..").OptionalSchema<this>;
|
|
35
|
+
nullable(): import("..").NullableSchema<this>;
|
|
36
|
+
parse: (this: Schema<any, Infer<T>[]>, value: unknown) => Infer<T>[];
|
|
37
|
+
safeParse: (this: Schema<any, Infer<T>[]>, value: unknown) => import("..").SafeParseResult<Infer<T>[]>;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Create an array schema with typed elements.
|
|
41
|
+
*
|
|
42
|
+
* @param itemSchema - The schema for validating each array element
|
|
43
|
+
*
|
|
44
|
+
* @example
|
|
45
|
+
* ```typescript
|
|
46
|
+
* const stringArray = s.array(s.string());
|
|
47
|
+
* const tags = stringArray.parse(['tag1', 'tag2']);
|
|
48
|
+
*
|
|
49
|
+
* const userArray = s.array(s.object({
|
|
50
|
+
* name: s.string(),
|
|
51
|
+
* age: s.number()
|
|
52
|
+
* }));
|
|
53
|
+
* ```
|
|
54
|
+
*/
|
|
55
|
+
export declare function array<T extends Schema<any, any>>(itemSchema: T): ArraySchema<T>;
|
|
56
|
+
//# sourceMappingURL=array.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"array.d.ts","sourceRoot":"","sources":["../../src/complex/array.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAK7C;;;;;;;;;;;;;;;;GAgBG;AAEH,qBAAa,WAAW,CAAC,CAAC,SAAS,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAClD,YAAW,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAKvC,OAAO,CAAC,UAAU;IAH9B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,YAAY,CAAyC;gBAEzC,UAAU,EAAE,CAAC;IAEjC,QAAQ,CAAC,WAAW;;;0BAGD,OAAO;eAkCM;YAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;SAAE;MACjF;IAEF,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAKnC,QAAQ;IAIR,QAAQ;IAIR,KAAK,gEAA2B;IAChC,SAAS,8FAA+B;CACxC;AAED;;;;;;;;;;;;;;;GAeG;AAEH,wBAAgB,KAAK,CAAC,CAAC,SAAS,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,UAAU,EAAE,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAE/E"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { createIssue, failure, success, createParseMethods } from '../base';
|
|
2
|
+
import { optional } from '../utils/optional';
|
|
3
|
+
import { nullable } from '../utils/nullable';
|
|
4
|
+
/**
|
|
5
|
+
* Schema for validating arrays with typed elements.
|
|
6
|
+
* Validates each element and collects all validation errors with array indices in paths.
|
|
7
|
+
*
|
|
8
|
+
* @template T - The schema type for array elements
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```typescript
|
|
12
|
+
* const tagsSchema = s.array(s.string());
|
|
13
|
+
* const tags = tagsSchema.parse(['tag1', 'tag2']);
|
|
14
|
+
*
|
|
15
|
+
* const usersSchema = s.array(s.object({
|
|
16
|
+
* name: s.string(),
|
|
17
|
+
* age: s.number()
|
|
18
|
+
* }));
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
22
|
+
export class ArraySchema {
|
|
23
|
+
itemSchema;
|
|
24
|
+
description;
|
|
25
|
+
parseMethods = createParseMethods();
|
|
26
|
+
constructor(itemSchema) {
|
|
27
|
+
this.itemSchema = itemSchema;
|
|
28
|
+
}
|
|
29
|
+
'~standard' = {
|
|
30
|
+
version: 1,
|
|
31
|
+
vendor: 'agentuity',
|
|
32
|
+
validate: (value) => {
|
|
33
|
+
if (value === null) {
|
|
34
|
+
return failure([createIssue('Expected array, got null')]);
|
|
35
|
+
}
|
|
36
|
+
if (!Array.isArray(value)) {
|
|
37
|
+
return failure([createIssue(`Expected array, got ${typeof value}`)]);
|
|
38
|
+
}
|
|
39
|
+
const result = [];
|
|
40
|
+
const issues = [];
|
|
41
|
+
for (let i = 0; i < value.length; i++) {
|
|
42
|
+
const validation = this.itemSchema['~standard'].validate(value[i]);
|
|
43
|
+
// Only support synchronous validation for now
|
|
44
|
+
if (validation instanceof Promise) {
|
|
45
|
+
throw new Error('Async validation not supported');
|
|
46
|
+
}
|
|
47
|
+
if (validation.issues) {
|
|
48
|
+
for (const issue of validation.issues) {
|
|
49
|
+
issues.push(createIssue(issue.message, issue.path ? [i, ...issue.path] : [i]));
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
result.push(validation.value);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
if (issues.length > 0) {
|
|
57
|
+
return failure(issues);
|
|
58
|
+
}
|
|
59
|
+
return success(result);
|
|
60
|
+
},
|
|
61
|
+
types: undefined,
|
|
62
|
+
};
|
|
63
|
+
describe(description) {
|
|
64
|
+
this.description = description;
|
|
65
|
+
return this;
|
|
66
|
+
}
|
|
67
|
+
optional() {
|
|
68
|
+
return optional(this);
|
|
69
|
+
}
|
|
70
|
+
nullable() {
|
|
71
|
+
return nullable(this);
|
|
72
|
+
}
|
|
73
|
+
parse = this.parseMethods.parse;
|
|
74
|
+
safeParse = this.parseMethods.safeParse;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Create an array schema with typed elements.
|
|
78
|
+
*
|
|
79
|
+
* @param itemSchema - The schema for validating each array element
|
|
80
|
+
*
|
|
81
|
+
* @example
|
|
82
|
+
* ```typescript
|
|
83
|
+
* const stringArray = s.array(s.string());
|
|
84
|
+
* const tags = stringArray.parse(['tag1', 'tag2']);
|
|
85
|
+
*
|
|
86
|
+
* const userArray = s.array(s.object({
|
|
87
|
+
* name: s.string(),
|
|
88
|
+
* age: s.number()
|
|
89
|
+
* }));
|
|
90
|
+
* ```
|
|
91
|
+
*/
|
|
92
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
93
|
+
export function array(itemSchema) {
|
|
94
|
+
return new ArraySchema(itemSchema);
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=array.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"array.js","sourceRoot":"","sources":["../../src/complex/array.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAC5E,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE7C;;;;;;;;;;;;;;;;GAgBG;AACH,8DAA8D;AAC9D,MAAM,OAAO,WAAW;IAMH;IAHpB,WAAW,CAAU;IACb,YAAY,GAAG,kBAAkB,EAAmB,CAAC;IAE7D,YAAoB,UAAa;QAAb,eAAU,GAAV,UAAU,CAAG;IAAG,CAAC;IAE5B,WAAW,GAAG;QACtB,OAAO,EAAE,CAAU;QACnB,MAAM,EAAE,WAAW;QACnB,QAAQ,EAAE,CAAC,KAAc,EAAE,EAAE;YAC5B,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;gBACpB,OAAO,OAAO,CAAC,CAAC,WAAW,CAAC,0BAA0B,CAAC,CAAC,CAAC,CAAC;YAC3D,CAAC;YACD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC3B,OAAO,OAAO,CAAC,CAAC,WAAW,CAAC,uBAAuB,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;YACtE,CAAC;YAED,MAAM,MAAM,GAAe,EAAE,CAAC;YAC9B,MAAM,MAAM,GAAqC,EAAE,CAAC;YAEpD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACvC,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;gBAEnE,8CAA8C;gBAC9C,IAAI,UAAU,YAAY,OAAO,EAAE,CAAC;oBACnC,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;gBACnD,CAAC;gBAED,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;oBACvB,KAAK,MAAM,KAAK,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;wBACvC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBAChF,CAAC;gBACF,CAAC;qBAAM,CAAC;oBACP,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;gBAC/B,CAAC;YACF,CAAC;YAED,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACvB,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC;YACxB,CAAC;YAED,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC;QACxB,CAAC;QACD,KAAK,EAAE,SAA2E;KAClF,CAAC;IAEF,QAAQ,CAAC,WAAmB;QAC3B,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,OAAO,IAAI,CAAC;IACb,CAAC;IAED,QAAQ;QACP,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC;IACvB,CAAC;IAED,QAAQ;QACP,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC;IACvB,CAAC;IAED,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;IAChC,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC;CACxC;AAED;;;;;;;;;;;;;;;GAeG;AACH,8DAA8D;AAC9D,MAAM,UAAU,KAAK,CAA6B,UAAa;IAC9D,OAAO,IAAI,WAAW,CAAC,UAAU,CAAC,CAAC;AACpC,CAAC"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import type { Schema, Infer } from '../base';
|
|
2
|
+
import { OptionalSchema } from '../utils/optional';
|
|
3
|
+
type ObjectShape = Record<string, Schema<any, any>>;
|
|
4
|
+
type IsOptional<T> = T extends OptionalSchema<any> ? true : false;
|
|
5
|
+
type RequiredKeys<T extends ObjectShape> = {
|
|
6
|
+
[K in keyof T]: IsOptional<T[K]> extends true ? never : K;
|
|
7
|
+
}[keyof T];
|
|
8
|
+
type OptionalKeys<T extends ObjectShape> = {
|
|
9
|
+
[K in keyof T]: IsOptional<T[K]> extends true ? K : never;
|
|
10
|
+
}[keyof T];
|
|
11
|
+
type InferObjectShape<T extends ObjectShape> = {
|
|
12
|
+
[K in RequiredKeys<T>]: Infer<T[K]>;
|
|
13
|
+
} & {
|
|
14
|
+
[K in OptionalKeys<T>]?: Infer<T[K]>;
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* Schema for validating objects with typed properties.
|
|
18
|
+
* Validates each property according to its schema and collects all validation errors.
|
|
19
|
+
*
|
|
20
|
+
* @template T - The object shape definition
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* ```typescript
|
|
24
|
+
* const userSchema = s.object({
|
|
25
|
+
* name: s.string(),
|
|
26
|
+
* age: s.number(),
|
|
27
|
+
* email: s.string()
|
|
28
|
+
* });
|
|
29
|
+
*
|
|
30
|
+
* const user = userSchema.parse({
|
|
31
|
+
* name: 'John',
|
|
32
|
+
* age: 30,
|
|
33
|
+
* email: 'john@example.com'
|
|
34
|
+
* });
|
|
35
|
+
* ```
|
|
36
|
+
*/
|
|
37
|
+
export declare class ObjectSchema<T extends ObjectShape> implements Schema<InferObjectShape<T>, InferObjectShape<T>> {
|
|
38
|
+
private shape;
|
|
39
|
+
description?: string;
|
|
40
|
+
private parseMethods;
|
|
41
|
+
constructor(shape: T);
|
|
42
|
+
readonly '~standard': {
|
|
43
|
+
version: 1;
|
|
44
|
+
vendor: string;
|
|
45
|
+
validate: (value: unknown) => import("@agentuity/core").StandardSchemaV1.FailureResult | import("@agentuity/core").StandardSchemaV1.SuccessResult<InferObjectShape<T>>;
|
|
46
|
+
types: {
|
|
47
|
+
input: InferObjectShape<T>;
|
|
48
|
+
output: InferObjectShape<T>;
|
|
49
|
+
};
|
|
50
|
+
};
|
|
51
|
+
describe(description: string): this;
|
|
52
|
+
optional(): OptionalSchema<this>;
|
|
53
|
+
nullable(): import("..").NullableSchema<this>;
|
|
54
|
+
parse: (this: Schema<any, InferObjectShape<T>>, value: unknown) => InferObjectShape<T>;
|
|
55
|
+
safeParse: (this: Schema<any, InferObjectShape<T>>, value: unknown) => import("..").SafeParseResult<InferObjectShape<T>>;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Create an object schema with typed properties.
|
|
59
|
+
*
|
|
60
|
+
* @param shape - Object defining the schema for each property
|
|
61
|
+
*
|
|
62
|
+
* @example
|
|
63
|
+
* ```typescript
|
|
64
|
+
* const userSchema = s.object({
|
|
65
|
+
* name: s.string().describe('Full name'),
|
|
66
|
+
* age: s.number().describe('Age in years'),
|
|
67
|
+
* email: s.optional(s.string())
|
|
68
|
+
* });
|
|
69
|
+
*
|
|
70
|
+
* type User = s.infer<typeof userSchema>;
|
|
71
|
+
* const user = userSchema.parse(data);
|
|
72
|
+
* ```
|
|
73
|
+
*/
|
|
74
|
+
export declare function object<T extends ObjectShape>(shape: T): ObjectSchema<T>;
|
|
75
|
+
export {};
|
|
76
|
+
//# sourceMappingURL=object.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"object.d.ts","sourceRoot":"","sources":["../../src/complex/object.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAE7C,OAAO,EAAY,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAI7D,KAAK,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AAIpD,KAAK,UAAU,CAAC,CAAC,IAAI,CAAC,SAAS,cAAc,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,KAAK,CAAC;AAGlE,KAAK,YAAY,CAAC,CAAC,SAAS,WAAW,IAAI;KACzC,CAAC,IAAI,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,GAAG,KAAK,GAAG,CAAC;CACzD,CAAC,MAAM,CAAC,CAAC,CAAC;AAEX,KAAK,YAAY,CAAC,CAAC,SAAS,WAAW,IAAI;KACzC,CAAC,IAAI,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,GAAG,CAAC,GAAG,KAAK;CACzD,CAAC,MAAM,CAAC,CAAC,CAAC;AAGX,KAAK,gBAAgB,CAAC,CAAC,SAAS,WAAW,IAAI;KAC7C,CAAC,IAAI,YAAY,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CACnC,GAAG;KACF,CAAC,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CACpC,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,YAAY,CAAC,CAAC,SAAS,WAAW,CAC9C,YAAW,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC;IAK/C,OAAO,CAAC,KAAK;IAHzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,YAAY,CAA6C;gBAE7C,KAAK,EAAE,CAAC;IAE5B,QAAQ,CAAC,WAAW;;;0BAGD,OAAO;eAyCM;YAAE,KAAK,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC;YAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAA;SAAE;MACzF;IAEF,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAKnC,QAAQ;IAIR,QAAQ;IAIR,KAAK,kFAA2B;IAChC,SAAS,gHAA+B;CACxC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,MAAM,CAAC,CAAC,SAAS,WAAW,EAAE,KAAK,EAAE,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAEvE"}
|