@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.
Files changed (115) hide show
  1. package/AGENTS.md +86 -0
  2. package/README.md +323 -0
  3. package/dist/base.d.ts +111 -0
  4. package/dist/base.d.ts.map +1 -0
  5. package/dist/base.js +93 -0
  6. package/dist/base.js.map +1 -0
  7. package/dist/coerce/boolean.d.ts +37 -0
  8. package/dist/coerce/boolean.d.ts.map +1 -0
  9. package/dist/coerce/boolean.js +49 -0
  10. package/dist/coerce/boolean.js.map +1 -0
  11. package/dist/coerce/date.d.ts +36 -0
  12. package/dist/coerce/date.d.ts.map +1 -0
  13. package/dist/coerce/date.js +60 -0
  14. package/dist/coerce/date.js.map +1 -0
  15. package/dist/coerce/number.d.ts +36 -0
  16. package/dist/coerce/number.d.ts.map +1 -0
  17. package/dist/coerce/number.js +59 -0
  18. package/dist/coerce/number.js.map +1 -0
  19. package/dist/coerce/string.d.ts +35 -0
  20. package/dist/coerce/string.d.ts.map +1 -0
  21. package/dist/coerce/string.js +47 -0
  22. package/dist/coerce/string.js.map +1 -0
  23. package/dist/complex/array.d.ts +56 -0
  24. package/dist/complex/array.d.ts.map +1 -0
  25. package/dist/complex/array.js +96 -0
  26. package/dist/complex/array.js.map +1 -0
  27. package/dist/complex/object.d.ts +76 -0
  28. package/dist/complex/object.d.ts.map +1 -0
  29. package/dist/complex/object.js +104 -0
  30. package/dist/complex/object.js.map +1 -0
  31. package/dist/complex/record.d.ts +53 -0
  32. package/dist/complex/record.d.ts.map +1 -0
  33. package/dist/complex/record.js +109 -0
  34. package/dist/complex/record.js.map +1 -0
  35. package/dist/index.d.ts +151 -0
  36. package/dist/index.d.ts.map +1 -0
  37. package/dist/index.js +128 -0
  38. package/dist/index.js.map +1 -0
  39. package/dist/json-schema.d.ts +60 -0
  40. package/dist/json-schema.d.ts.map +1 -0
  41. package/dist/json-schema.js +280 -0
  42. package/dist/json-schema.js.map +1 -0
  43. package/dist/primitives/any.d.ts +44 -0
  44. package/dist/primitives/any.d.ts.map +1 -0
  45. package/dist/primitives/any.js +57 -0
  46. package/dist/primitives/any.js.map +1 -0
  47. package/dist/primitives/boolean.d.ts +39 -0
  48. package/dist/primitives/boolean.d.ts.map +1 -0
  49. package/dist/primitives/boolean.js +53 -0
  50. package/dist/primitives/boolean.js.map +1 -0
  51. package/dist/primitives/null.d.ts +26 -0
  52. package/dist/primitives/null.d.ts.map +1 -0
  53. package/dist/primitives/null.js +40 -0
  54. package/dist/primitives/null.js.map +1 -0
  55. package/dist/primitives/number.d.ts +87 -0
  56. package/dist/primitives/number.d.ts.map +1 -0
  57. package/dist/primitives/number.js +129 -0
  58. package/dist/primitives/number.js.map +1 -0
  59. package/dist/primitives/string.d.ts +64 -0
  60. package/dist/primitives/string.d.ts.map +1 -0
  61. package/dist/primitives/string.js +102 -0
  62. package/dist/primitives/string.js.map +1 -0
  63. package/dist/primitives/undefined.d.ts +26 -0
  64. package/dist/primitives/undefined.d.ts.map +1 -0
  65. package/dist/primitives/undefined.js +40 -0
  66. package/dist/primitives/undefined.js.map +1 -0
  67. package/dist/primitives/unknown.d.ts +47 -0
  68. package/dist/primitives/unknown.d.ts.map +1 -0
  69. package/dist/primitives/unknown.js +56 -0
  70. package/dist/primitives/unknown.js.map +1 -0
  71. package/dist/utils/literal.d.ts +47 -0
  72. package/dist/utils/literal.d.ts.map +1 -0
  73. package/dist/utils/literal.js +64 -0
  74. package/dist/utils/literal.js.map +1 -0
  75. package/dist/utils/nullable.d.ts +50 -0
  76. package/dist/utils/nullable.d.ts.map +1 -0
  77. package/dist/utils/nullable.js +69 -0
  78. package/dist/utils/nullable.js.map +1 -0
  79. package/dist/utils/optional.d.ts +50 -0
  80. package/dist/utils/optional.d.ts.map +1 -0
  81. package/dist/utils/optional.js +69 -0
  82. package/dist/utils/optional.js.map +1 -0
  83. package/dist/utils/union.d.ts +60 -0
  84. package/dist/utils/union.d.ts.map +1 -0
  85. package/dist/utils/union.js +87 -0
  86. package/dist/utils/union.js.map +1 -0
  87. package/package.json +39 -0
  88. package/src/__tests__/coerce.test.ts +88 -0
  89. package/src/__tests__/complex.test.ts +124 -0
  90. package/src/__tests__/errors.test.ts +129 -0
  91. package/src/__tests__/json-schema.test.ts +138 -0
  92. package/src/__tests__/primitives.test.ts +184 -0
  93. package/src/__tests__/type-inference.test.ts +68 -0
  94. package/src/__tests__/utils.test.ts +100 -0
  95. package/src/base.ts +185 -0
  96. package/src/coerce/boolean.ts +56 -0
  97. package/src/coerce/date.ts +68 -0
  98. package/src/coerce/number.ts +67 -0
  99. package/src/coerce/string.ts +54 -0
  100. package/src/complex/array.ts +108 -0
  101. package/src/complex/object.ts +141 -0
  102. package/src/complex/record.ts +129 -0
  103. package/src/index.ts +177 -0
  104. package/src/json-schema.ts +331 -0
  105. package/src/primitives/any.ts +64 -0
  106. package/src/primitives/boolean.ts +60 -0
  107. package/src/primitives/null.ts +47 -0
  108. package/src/primitives/number.ts +141 -0
  109. package/src/primitives/string.ts +113 -0
  110. package/src/primitives/undefined.ts +47 -0
  111. package/src/primitives/unknown.ts +63 -0
  112. package/src/utils/literal.ts +71 -0
  113. package/src/utils/nullable.ts +80 -0
  114. package/src/utils/optional.ts +80 -0
  115. 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"}