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