@wener/common 2.0.5 → 2.0.6

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 (206) hide show
  1. package/lib/ai/qwen3vl/index.js +1 -1
  2. package/lib/ai/qwen3vl/utils.js +15 -15
  3. package/lib/ai/vision/DocLayoutElementTypeSchema.js +22 -22
  4. package/lib/ai/vision/ImageAnnotationSchema.js +63 -47
  5. package/lib/ai/vision/index.js +2 -2
  6. package/lib/ai/vision/resolveImageAnnotation.js +81 -95
  7. package/lib/cn/ChineseResidentIdNo.js +55 -41
  8. package/lib/cn/ChineseResidentIdNo.mod.js +6 -1
  9. package/lib/cn/ChineseResidentIdNo.test.js +22 -21
  10. package/lib/cn/DivisionCode.js +220 -235
  11. package/lib/cn/DivisionCode.mod.js +6 -1
  12. package/lib/cn/DivisionCode.test.js +92 -121
  13. package/lib/cn/Mod11.js +18 -37
  14. package/lib/cn/Mod31.js +23 -41
  15. package/lib/cn/UnifiedSocialCreditCode.js +143 -137
  16. package/lib/cn/UnifiedSocialCreditCode.mod.js +6 -1
  17. package/lib/cn/UnifiedSocialCreditCode.test.js +21 -15
  18. package/lib/cn/formatChineseAmount.js +46 -71
  19. package/lib/cn/index.js +6 -6
  20. package/lib/cn/mod.js +5 -3
  21. package/lib/cn/parseChineseNumber.js +81 -85
  22. package/lib/cn/parseChineseNumber.test.js +183 -261
  23. package/lib/cn/pinyin/cartesianProduct.js +19 -19
  24. package/lib/cn/pinyin/cartesianProduct.test.js +78 -178
  25. package/lib/cn/pinyin/loader.js +13 -11
  26. package/lib/cn/pinyin/preload.js +2 -1
  27. package/lib/cn/pinyin/toPinyin.test.js +149 -161
  28. package/lib/cn/pinyin/toPinyinPure.js +28 -23
  29. package/lib/cn/pinyin/transform.js +11 -11
  30. package/lib/cn/types.d.js +2 -2
  31. package/lib/consola/createStandardConsolaReporter.js +14 -15
  32. package/lib/consola/formatLogObject.js +149 -133
  33. package/lib/consola/formatLogObject.test.js +167 -178
  34. package/lib/consola/index.js +2 -2
  35. package/lib/data/formatSort.js +14 -12
  36. package/lib/data/formatSort.test.js +33 -33
  37. package/lib/data/index.js +3 -3
  38. package/lib/data/maybeNumber.js +23 -23
  39. package/lib/data/parseSort.js +75 -68
  40. package/lib/data/parseSort.test.js +196 -187
  41. package/lib/data/resolvePagination.js +38 -39
  42. package/lib/data/resolvePagination.test.js +228 -218
  43. package/lib/data/types.d.js +2 -2
  44. package/lib/dayjs/dayjs.js +20 -20
  45. package/lib/dayjs/formatDuration.js +56 -56
  46. package/lib/dayjs/formatDuration.test.js +63 -77
  47. package/lib/dayjs/index.js +4 -4
  48. package/lib/dayjs/parseDuration.js +21 -26
  49. package/lib/dayjs/parseRelativeTime.js +65 -66
  50. package/lib/dayjs/parseRelativeTime.test.js +227 -243
  51. package/lib/dayjs/resolveRelativeTime.js +73 -72
  52. package/lib/dayjs/resolveRelativeTime.test.js +296 -307
  53. package/lib/decimal/index.js +1 -1
  54. package/lib/decimal/parseDecimal.js +12 -12
  55. package/lib/drain3/Drain.js +303 -338
  56. package/lib/drain3/LogCluster.js +25 -25
  57. package/lib/drain3/Node.js +24 -24
  58. package/lib/drain3/TemplateMiner.js +197 -196
  59. package/lib/drain3/index.js +5 -5
  60. package/lib/drain3/persistence/FilePersistence.js +19 -19
  61. package/lib/drain3/persistence/MemoryPersistence.js +8 -8
  62. package/lib/drain3/persistence/PersistenceHandler.js +2 -2
  63. package/lib/drain3/types.js +2 -2
  64. package/lib/emittery/emitter.js +7 -7
  65. package/lib/emittery/index.js +1 -1
  66. package/lib/foundation/schema/SexType.js +15 -12
  67. package/lib/foundation/schema/index.js +1 -1
  68. package/lib/foundation/schema/parseSexType.js +15 -16
  69. package/lib/foundation/schema/types.js +8 -6
  70. package/lib/fs/FileSystemError.js +18 -18
  71. package/lib/fs/IFileSystem.d.js +2 -2
  72. package/lib/fs/MemoryFileSystem.test.js +172 -181
  73. package/lib/fs/createBrowserFileSystem.js +222 -235
  74. package/lib/fs/createMemoryFileSystem.js +472 -510
  75. package/lib/fs/createSandboxFileSystem.js +102 -101
  76. package/lib/fs/createWebDavFileSystem.js +162 -149
  77. package/lib/fs/createWebFileSystem.js +197 -220
  78. package/lib/fs/findMimeType.js +14 -14
  79. package/lib/fs/index.js +7 -7
  80. package/lib/fs/minio/createMinioFileSystem.js +959 -956
  81. package/lib/fs/minio/index.js +1 -1
  82. package/lib/fs/orpc/FileSystemContract.js +57 -57
  83. package/lib/fs/orpc/createContractClientFileSystem.js +88 -88
  84. package/lib/fs/orpc/index.js +2 -2
  85. package/lib/fs/orpc/server/createFileSystemContractImpl.js +62 -60
  86. package/lib/fs/orpc/server/index.js +1 -1
  87. package/lib/fs/s3/createS3MiniFileSystem.js +756 -737
  88. package/lib/fs/s3/index.js +1 -1
  89. package/lib/fs/s3/s3mini.test.js +524 -553
  90. package/lib/fs/scandir.js +56 -56
  91. package/lib/fs/server/createDatabaseFileSystem.js +834 -741
  92. package/lib/fs/server/createNodeFileSystem.js +407 -405
  93. package/lib/fs/server/dbfs.test.js +201 -214
  94. package/lib/fs/server/index.js +1 -1
  95. package/lib/fs/server/loadTestDatabase.js +40 -43
  96. package/lib/fs/tests/runFileSystemTest.js +352 -316
  97. package/lib/fs/types.js +17 -20
  98. package/lib/fs/utils/getFileUrl.js +24 -30
  99. package/lib/fs/utils.js +17 -17
  100. package/lib/fs/webdav/index.js +1 -1
  101. package/lib/index.js +2 -2
  102. package/lib/jsonschema/JsonSchema.js +216 -155
  103. package/lib/jsonschema/JsonSchema.test.js +123 -124
  104. package/lib/jsonschema/forEachJsonSchema.js +41 -41
  105. package/lib/jsonschema/index.js +2 -2
  106. package/lib/jsonschema/types.d.js +2 -2
  107. package/lib/meta/defineFileType.js +32 -38
  108. package/lib/meta/defineInit.js +39 -35
  109. package/lib/meta/defineMetadata.js +37 -34
  110. package/lib/meta/defineMetadata.test.js +13 -12
  111. package/lib/meta/index.js +3 -3
  112. package/lib/orpc/createOpenApiContractClient.js +26 -24
  113. package/lib/orpc/createRpcContractClient.js +37 -31
  114. package/lib/orpc/index.js +2 -2
  115. package/lib/orpc/resolveLinkPlugins.js +25 -25
  116. package/lib/password/PHC.js +187 -189
  117. package/lib/password/PHC.test.js +517 -535
  118. package/lib/password/Password.js +85 -80
  119. package/lib/password/Password.test.js +330 -364
  120. package/lib/password/createArgon2PasswordAlgorithm.js +50 -51
  121. package/lib/password/createBase64PasswordAlgorithm.js +11 -11
  122. package/lib/password/createBcryptPasswordAlgorithm.js +20 -18
  123. package/lib/password/createPBKDF2PasswordAlgorithm.js +65 -52
  124. package/lib/password/createScryptPasswordAlgorithm.js +74 -63
  125. package/lib/password/index.js +5 -5
  126. package/lib/password/server/index.js +1 -1
  127. package/lib/resource/Identifiable.js +2 -2
  128. package/lib/resource/ListQuery.js +42 -42
  129. package/lib/resource/getTitleOfResource.js +5 -5
  130. package/lib/resource/index.js +2 -2
  131. package/lib/resource/schema/AnyResourceSchema.js +91 -89
  132. package/lib/resource/schema/BaseResourceSchema.js +26 -26
  133. package/lib/resource/schema/ResourceActionType.js +117 -115
  134. package/lib/resource/schema/ResourceStatus.js +94 -92
  135. package/lib/resource/schema/ResourceType.js +25 -23
  136. package/lib/resource/schema/index.js +5 -5
  137. package/lib/resource/schema/types.js +86 -55
  138. package/lib/resource/schema/types.test.js +16 -13
  139. package/lib/s3/formatS3Url.js +60 -60
  140. package/lib/s3/formatS3Url.test.js +238 -261
  141. package/lib/s3/index.js +2 -2
  142. package/lib/s3/parseS3Url.js +61 -60
  143. package/lib/s3/parseS3Url.test.js +270 -269
  144. package/lib/schema/SchemaRegistry.js +41 -42
  145. package/lib/schema/SchemaRegistry.mod.js +1 -1
  146. package/lib/schema/TypeSchema.d.js +2 -2
  147. package/lib/schema/createSchemaData.js +113 -67
  148. package/lib/schema/findJsonSchemaByPath.js +28 -23
  149. package/lib/schema/formatZodError.js +112 -131
  150. package/lib/schema/formatZodError.test.js +192 -195
  151. package/lib/schema/getSchemaCache.js +7 -7
  152. package/lib/schema/getSchemaOptions.js +17 -16
  153. package/lib/schema/index.js +6 -6
  154. package/lib/schema/toJsonSchema.js +195 -189
  155. package/lib/schema/toJsonSchema.test.js +34 -26
  156. package/lib/schema/validate.js +105 -96
  157. package/lib/tools/generateSchema.js +40 -40
  158. package/lib/tools/renderJsonSchemaToMarkdownDoc.js +74 -74
  159. package/lib/utils/buildBaseUrl.js +8 -8
  160. package/lib/utils/buildRedactorFormSchema.js +54 -53
  161. package/lib/utils/getEstimateProcessTime.js +24 -19
  162. package/lib/utils/index.js +3 -3
  163. package/lib/utils/resolveFeatureOptions.js +9 -9
  164. package/package.json +14 -14
  165. package/src/ai/vision/index.ts +2 -2
  166. package/src/cn/index.ts +1 -2
  167. package/src/consola/index.ts +1 -1
  168. package/src/data/index.ts +3 -4
  169. package/src/data/resolvePagination.ts +2 -2
  170. package/src/dayjs/formatDuration.ts +8 -9
  171. package/src/dayjs/index.ts +1 -1
  172. package/src/dayjs/parseRelativeTime.ts +1 -1
  173. package/src/dayjs/resolveRelativeTime.ts +1 -1
  174. package/src/drain3/Drain.test.ts +2 -2
  175. package/src/drain3/index.ts +2 -4
  176. package/src/fs/createWebDavFileSystem.ts +2 -7
  177. package/src/fs/createWebFileSystem.ts +1 -1
  178. package/src/fs/index.ts +4 -4
  179. package/src/fs/minio/createMinioFileSystem.ts +2 -2
  180. package/src/fs/minio/index.ts +1 -1
  181. package/src/fs/s3/createS3MiniFileSystem.ts +1 -1
  182. package/src/fs/server/createDatabaseFileSystem.ts +84 -120
  183. package/src/fs/server/dbfs.test.ts +14 -10
  184. package/src/fs/server/index.ts +1 -0
  185. package/src/fs/server/loadTestDatabase.ts +8 -119
  186. package/src/jsonschema/index.ts +1 -1
  187. package/src/meta/index.ts +2 -3
  188. package/src/orm/createSqliteDialect.ts +17 -0
  189. package/src/orm/index.ts +1 -0
  190. package/src/orpc/createOpenApiContractClient.ts +1 -1
  191. package/src/orpc/index.ts +1 -1
  192. package/src/password/createArgon2PasswordAlgorithm.ts +1 -1
  193. package/src/password/index.ts +2 -2
  194. package/src/resource/index.ts +3 -3
  195. package/src/resource/schema/index.ts +4 -4
  196. package/src/s3/index.ts +1 -1
  197. package/src/schema/SchemaRegistry.ts +1 -1
  198. package/src/schema/createSchemaData.ts +1 -1
  199. package/src/schema/findJsonSchemaByPath.ts +1 -1
  200. package/src/schema/index.ts +5 -5
  201. package/src/schema/validate.ts +1 -1
  202. package/src/utils/buildRedactorFormSchema.ts +1 -1
  203. package/src/utils/formatNumber.ts +18 -0
  204. package/src/utils/formatPercent.ts +17 -0
  205. package/src/utils/index.ts +3 -3
  206. package/src/utils/resolveFeatureOptions.ts +1 -1
@@ -1,198 +1,204 @@
1
- import { omit, remove } from "es-toolkit";
2
- import { match, P } from "ts-pattern";
3
- import { z } from "zod/v4";
4
- import { getSchemaCache } from "./getSchemaCache.js";
5
- import { isTypeBoxSchema, isZodSchema } from "./validate.js";
1
+ import { omit, remove } from 'es-toolkit';
2
+ import { match, P } from 'ts-pattern';
3
+ import { z } from 'zod/v4';
4
+ import { getSchemaCache } from './getSchemaCache.js';
5
+ import { isTypeBoxSchema, isZodSchema } from './validate.js';
6
6
  export function toJsonSchema(schema) {
7
- if (isZodSchema(schema)) {
8
- return getSchemaCache(schema, "jsonschema", () => {
9
- // zod v4
10
- let js = z.toJSONSchema(schema, {
11
- unrepresentable: "any",
12
- override: ({ zodSchema, jsonSchema: js }) => {
13
- const def = zodSchema._zod.def;
14
- const meta = z.globalRegistry.get(zodSchema);
15
- if (meta) {
16
- Object.assign(js, meta);
17
- }
18
- switch (def.type) {
19
- case "union":
20
- if (zodSchema._zod.traits.has("ZodDiscriminatedUnion")) {
21
- resolveDiscriminator(js);
22
- }
23
- break;
24
- case "nonoptional":
25
- // js._ref maybe true
26
- js.nullable = false;
27
- break;
28
- case "nullable":
29
- case "optional":
30
- // prefer nullable
31
- match(js).with({
32
- anyOf: [
33
- P.select(),
34
- {
35
- type: "null"
36
- }
37
- ]
38
- }, (select) => {
39
- delete js.anyOf;
40
- Object.assign(js, select);
41
- js.nullable = true;
42
- }).otherwise((js) => {
43
- js.nullable = true;
44
- });
45
- break;
46
- }
47
- }
48
- });
49
- // remove redundant nullable, ensure required is sorted
50
- visit(js, (v) => {
51
- if (v.nullable === false) {
52
- delete v.nullable;
53
- }
54
- if (v.required) {
55
- v.required.sort();
56
- }
57
- });
58
- // maybe freeze
59
- return js;
60
- });
61
- }
62
- if (isTypeBoxSchema(schema)) {
63
- return schema;
64
- }
65
- return schema;
7
+ if (isZodSchema(schema)) {
8
+ return getSchemaCache(schema, 'jsonschema', () => {
9
+ // zod v4
10
+ let js = z.toJSONSchema(schema, {
11
+ unrepresentable: 'any',
12
+ override: ({ zodSchema, jsonSchema: js }) => {
13
+ const def = zodSchema._zod.def;
14
+ const meta = z.globalRegistry.get(zodSchema);
15
+ if (meta) {
16
+ Object.assign(js, meta);
17
+ }
18
+ switch (def.type) {
19
+ case 'union':
20
+ if (zodSchema._zod.traits.has('ZodDiscriminatedUnion')) {
21
+ resolveDiscriminator(js);
22
+ }
23
+ break;
24
+ case 'nonoptional':
25
+ // js._ref maybe true
26
+ js.nullable = false;
27
+ break;
28
+ case 'nullable':
29
+ case 'optional':
30
+ // prefer nullable
31
+ match(js)
32
+ .with(
33
+ {
34
+ anyOf: [
35
+ P.select(),
36
+ {
37
+ type: 'null',
38
+ },
39
+ ],
40
+ },
41
+ (select) => {
42
+ delete js.anyOf;
43
+ Object.assign(js, select);
44
+ js.nullable = true;
45
+ },
46
+ )
47
+ .otherwise((js) => {
48
+ js.nullable = true;
49
+ });
50
+ break;
51
+ }
52
+ },
53
+ });
54
+ // remove redundant nullable, ensure required is sorted
55
+ visit(js, (v) => {
56
+ if (v.nullable === false) {
57
+ delete v.nullable;
58
+ }
59
+ if (v.required) {
60
+ v.required.sort();
61
+ }
62
+ });
63
+ // maybe freeze
64
+ return js;
65
+ });
66
+ }
67
+ if (isTypeBoxSchema(schema)) {
68
+ return schema;
69
+ }
70
+ return schema;
66
71
  }
67
72
  function visit(js, f) {
68
- const _visit = (js, f, _parent, path, _k) => {
69
- if (!js) {
70
- return;
71
- }
72
- f(js);
73
- if (js.properties) {
74
- for (const [k, v] of Object.entries(js.properties)) {
75
- if (v) {
76
- _visit(v, f, js, path.concat(k), "properties");
77
- }
78
- }
79
- }
80
- else if (js.items) {
81
- if (Array.isArray(js.items)) {
82
- for (const v of js.items) {
83
- _visit(v, f, js, path, "items");
84
- }
85
- }
86
- else {
87
- _visit(js.items, f, js, path, "items");
88
- }
89
- }
90
- else if (js.anyOf) {
91
- for (const v of js.anyOf) {
92
- _visit(v, f, js, path, "anyOf");
93
- }
94
- }
95
- else if (js.oneOf) {
96
- for (const v of js.oneOf) {
97
- _visit(v, f, js, path, "oneOf");
98
- }
99
- }
100
- else if (js.allOf) {
101
- for (const v of js.allOf) {
102
- _visit(v, f, js, path, "allOf");
103
- }
104
- }
105
- };
106
- _visit(js, f, undefined, []);
73
+ const _visit = (js, f, _parent, path, _k) => {
74
+ if (!js) {
75
+ return;
76
+ }
77
+ f(js);
78
+ if (js.properties) {
79
+ for (const [k, v] of Object.entries(js.properties)) {
80
+ if (v) {
81
+ _visit(v, f, js, path.concat(k), 'properties');
82
+ }
83
+ }
84
+ } else if (js.items) {
85
+ if (Array.isArray(js.items)) {
86
+ for (const v of js.items) {
87
+ _visit(v, f, js, path, 'items');
88
+ }
89
+ } else {
90
+ _visit(js.items, f, js, path, 'items');
91
+ }
92
+ } else if (js.anyOf) {
93
+ for (const v of js.anyOf) {
94
+ _visit(v, f, js, path, 'anyOf');
95
+ }
96
+ } else if (js.oneOf) {
97
+ for (const v of js.oneOf) {
98
+ _visit(v, f, js, path, 'oneOf');
99
+ }
100
+ } else if (js.allOf) {
101
+ for (const v of js.allOf) {
102
+ _visit(v, f, js, path, 'allOf');
103
+ }
104
+ }
105
+ };
106
+ _visit(js, f, undefined, []);
107
107
  }
108
108
  function _resolveJsonSchemaDef(js, _ctx) {
109
- return match(js).with({
110
- anyOf: [
111
- P.select(),
112
- {
113
- type: "null"
114
- }
115
- ]
116
- }, (select) => {
117
- return {
118
- ...omit(js, [
119
- "anyOf"
120
- ]),
121
- ...select,
122
- nullable: true
123
- };
124
- }).with({
125
- properties: P.nonNullable
126
- }, (schema) => {
127
- for (const key in schema.properties) {
128
- const prop = schema.properties[key];
129
- if (prop) {
130
- schema.properties[key] = _resolveJsonSchemaDef(prop, {
131
- parent: schema,
132
- key
133
- });
134
- }
135
- }
136
- return schema;
137
- }).otherwise(() => {
138
- return js;
139
- });
109
+ return match(js)
110
+ .with(
111
+ {
112
+ anyOf: [
113
+ P.select(),
114
+ {
115
+ type: 'null',
116
+ },
117
+ ],
118
+ },
119
+ (select) => {
120
+ return {
121
+ ...omit(js, ['anyOf']),
122
+ ...select,
123
+ nullable: true,
124
+ };
125
+ },
126
+ )
127
+ .with(
128
+ {
129
+ properties: P.nonNullable,
130
+ },
131
+ (schema) => {
132
+ for (const key in schema.properties) {
133
+ const prop = schema.properties[key];
134
+ if (prop) {
135
+ schema.properties[key] = _resolveJsonSchemaDef(prop, {
136
+ parent: schema,
137
+ key,
138
+ });
139
+ }
140
+ }
141
+ return schema;
142
+ },
143
+ )
144
+ .otherwise(() => {
145
+ return js;
146
+ });
140
147
  }
141
148
  function resolveDiscriminator(jsd) {
142
- if (!(jsd.anyOf && jsd.anyOf.length > 1)) {
143
- return;
144
- }
145
- if (jsd.discriminator) {
146
- return;
147
- }
148
- let names = [];
149
- {
150
- // candidate for discriminator
151
- const v = jsd.anyOf[0];
152
- if (v && v.type === "object" && v.properties) {
153
- if (Array.isArray(v.required)) {
154
- for (const k of v.required) {
155
- if (v.properties[k].const !== undefined) {
156
- names.push(k);
157
- }
158
- }
159
- }
160
- }
161
- }
162
- if (names.length >= 1) {
163
- for (let i = 0; i < jsd.anyOf.length; i++) {
164
- if (i === 0) {
165
- continue;
166
- }
167
- if (!names.length) {
168
- break;
169
- }
170
- const v = jsd.anyOf[i];
171
- if (v && v.type === "object" && v.properties) {
172
- const props = v.properties;
173
- remove(names, (k) => {
174
- // dont care the mapping
175
- let p = props[k];
176
- switch (typeof p.const) {
177
- case "string":
178
- case "number":
179
- case "boolean":
180
- return false;
181
- default:
182
- return true;
183
- }
184
- });
185
- }
186
- else {
187
- names = [];
188
- break;
189
- }
190
- }
191
- }
192
- if (names.length === 1) {
193
- jsd.discriminator = {
194
- propertyName: names[0]
195
- };
196
- }
149
+ if (!(jsd.anyOf && jsd.anyOf.length > 1)) {
150
+ return;
151
+ }
152
+ if (jsd.discriminator) {
153
+ return;
154
+ }
155
+ let names = [];
156
+ {
157
+ // candidate for discriminator
158
+ const v = jsd.anyOf[0];
159
+ if (v && v.type === 'object' && v.properties) {
160
+ if (Array.isArray(v.required)) {
161
+ for (const k of v.required) {
162
+ if (v.properties[k].const !== undefined) {
163
+ names.push(k);
164
+ }
165
+ }
166
+ }
167
+ }
168
+ }
169
+ if (names.length >= 1) {
170
+ for (let i = 0; i < jsd.anyOf.length; i++) {
171
+ if (i === 0) {
172
+ continue;
173
+ }
174
+ if (!names.length) {
175
+ break;
176
+ }
177
+ const v = jsd.anyOf[i];
178
+ if (v && v.type === 'object' && v.properties) {
179
+ const props = v.properties;
180
+ remove(names, (k) => {
181
+ // dont care the mapping
182
+ let p = props[k];
183
+ switch (typeof p.const) {
184
+ case 'string':
185
+ case 'number':
186
+ case 'boolean':
187
+ return false;
188
+ default:
189
+ return true;
190
+ }
191
+ });
192
+ } else {
193
+ names = [];
194
+ break;
195
+ }
196
+ }
197
+ }
198
+ if (names.length === 1) {
199
+ jsd.discriminator = {
200
+ propertyName: names[0],
201
+ };
202
+ }
197
203
  }
198
204
  //# sourceMappingURL=toJsonSchema.js.map
@@ -1,27 +1,35 @@
1
- import { inspect } from "node:util";
2
- import { describe, expect, it } from "vitest";
3
- import { z } from "zod/v4";
4
- import { toJsonSchema } from "./toJsonSchema.js";
5
- describe("toJsonSchema", function () {
6
- it("should handle discriminatedUnion", function () {
7
- console.log(inspect(toJsonSchema(z.discriminatedUnion("type", [
8
- z.object({
9
- type: z.literal("string"),
10
- value: z.string()
11
- }),
12
- z.object({
13
- type: z.literal("number"),
14
- value: z.number()
15
- })
16
- ])), {
17
- depth: 10,
18
- colors: true
19
- }));
20
- });
21
- it("should cache", function () {
22
- var zs = z.object({
23
- name: z.string()
24
- });
25
- expect(toJsonSchema(zs)).toBe(toJsonSchema(zs));
26
- });
1
+ import { inspect } from 'node:util';
2
+ import { describe, expect, it } from 'vitest';
3
+ import { z } from 'zod/v4';
4
+ import { toJsonSchema } from './toJsonSchema.js';
5
+
6
+ describe('toJsonSchema', () => {
7
+ it('should handle discriminatedUnion', () => {
8
+ console.log(
9
+ inspect(
10
+ toJsonSchema(
11
+ z.discriminatedUnion('type', [
12
+ z.object({
13
+ type: z.literal('string'),
14
+ value: z.string(),
15
+ }),
16
+ z.object({
17
+ type: z.literal('number'),
18
+ value: z.number(),
19
+ }),
20
+ ]),
21
+ ),
22
+ {
23
+ depth: 10,
24
+ colors: true,
25
+ },
26
+ ),
27
+ );
28
+ });
29
+ it('should cache', () => {
30
+ var zs = z.object({
31
+ name: z.string(),
32
+ });
33
+ expect(toJsonSchema(zs)).toBe(toJsonSchema(zs));
34
+ });
27
35
  });