Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit5653137

Browse files
committed
refactor(xsschema): improve structure
1 parent89234cb commit5653137

File tree

16 files changed

+116
-124
lines changed

16 files changed

+116
-124
lines changed

‎packages-top/xsschema/src/index.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
export{toJsonSchema,toJsonSchemaastoJSONSchema,toJsonSchemaSync,toJsonSchemaSyncastoJSONSchemaSync}from'./to-json-schema'
2-
exporttype{Infer,InferIn,JSONSchemaasJsonSchema,JSONSchema,Schema,StandardSchemaVendor}from'./types'
1+
export{initToJsonSchemaSyncVendor,toJsonSchema,toJsonSchemaastoJSONSchema,toJsonSchemaSync,toJsonSchemaSyncastoJSONSchemaSync}from'./to-json-schema'
2+
exporttype{Infer,InferIn,JSONSchemaasJsonSchema,JSONSchema,Schema}from'./types'
33
export{validate}from'./validate'
4-
export{registerStandardSchemaVendor,registerStandardSchemaVendors}from'./vendors'

‎packages-top/xsschema/src/to-json-schema.ts

Lines changed: 0 additions & 32 deletions
This file was deleted.
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
importtype{StandardSchemaV1}from'@standard-schema/spec'
2+
importtype{JSONSchema7}from'json-schema'
3+
4+
import{getToJsonSchemaFn}from'./vendors'
5+
6+
/**
7+
* Converts a Standard Schema to a JSON schema.
8+
*
9+
*@note This method is `async` because it has to `await import` the schema vendor's dependencies.
10+
*/
11+
exportconsttoJsonSchema=async(schema:StandardSchemaV1):Promise<JSONSchema7>=>
12+
getToJsonSchemaFn(schema['~standard'].vendor)
13+
.then(asynctoJsonSchema=>toJsonSchema(schema))
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
export{toJsonSchema}from'./async'
2+
export{initToJsonSchemaSyncVendor,toJsonSchemaSync}from'./sync'
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
importtype{StandardSchemaV1}from'@standard-schema/spec'
2+
importtype{JSONSchema7}from'json-schema'
3+
4+
importtype{ToJsonSchemaFn}from'./vendors'
5+
6+
import{getToJsonSchemaFn}from'./vendors'
7+
8+
constToJsonSchemaVendors=newMap<string,ToJsonSchemaFn>()
9+
10+
/**@experimental */
11+
exportconstinitToJsonSchemaSyncVendor=async(vendor:string)=>
12+
getToJsonSchemaFn(vendor)
13+
.then(fn=>ToJsonSchemaVendors.set(vendor,fn))
14+
15+
/**@experimental */
16+
exportconsttoJsonSchemaSync=(schema:StandardSchemaV1):JSONSchema7=>{
17+
const{ vendor}=schema['~standard']
18+
consttoJsonSchema=ToJsonSchemaVendors.get(vendor)
19+
20+
if(!toJsonSchema)
21+
thrownewError(`xsschema: Unregistered or unsupported schema vendor "${vendor}". Make sure to register the vendor using "await initToJsonSchemaSyncVendor('${vendor}')" before calling toJsonSchemaSync.`)
22+
23+
constresult=toJsonSchema(schema)
24+
25+
if(resultinstanceofPromise)
26+
thrownewError('xsschema: Function returns a Promise. you need to use toJsonSchema instead of toJsonSchemaSync.')
27+
28+
returnresult
29+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
importtype{Type}from'arktype'
2+
importtype{JSONSchema7}from'json-schema'
3+
4+
importtype{ToJsonSchemaFn}from'.'
5+
6+
exportconstgetToJsonSchemaFn=async():Promise<ToJsonSchemaFn>=>
7+
schema=>(schemaasType).toJsonSchema()asJSONSchema7
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
importtype{Schema}from'effect'
2+
importtype{JSONSchema7}from'json-schema'
3+
4+
importtype{ToJsonSchemaFn}from'.'
5+
6+
import{tryImport}from'.'
7+
8+
exportconstgetToJsonSchemaFn=async():Promise<ToJsonSchemaFn>=>{
9+
const{ JSONSchema}=awaittryImport(import('effect'),'effect')
10+
returnschema=>JSONSchema.make(schemaasSchema.Schema<unknown>)asJSONSchema7
11+
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
importtype{JSONSchema7}from'json-schema'
2+
3+
exporttypeToJsonSchemaFn=(schema:unknown)=>JSONSchema7|Promise<JSONSchema7>
4+
5+
exportconsttryImport=async<T>(result:Promise<T>,name:string):Promise<Awaited<T>>=>{
6+
try{
7+
returnawaitresult
8+
}
9+
catch{
10+
thrownewError(`xsschema: Missing dependencies "${name}".`)
11+
}
12+
}
13+
14+
exportconstgetToJsonSchemaFn=async(vendor:string):Promise<ToJsonSchemaFn>=>{
15+
switch(vendor){
16+
case'arktype':
17+
returnimport('./arktype')
18+
.then(async({ getToJsonSchemaFn})=>getToJsonSchemaFn())
19+
case'effect':
20+
returnimport('./effect')
21+
.then(async({ getToJsonSchemaFn})=>getToJsonSchemaFn())
22+
case'valibot':
23+
returnimport('./valibot')
24+
.then(async({ getToJsonSchemaFn})=>getToJsonSchemaFn())
25+
case'zod':
26+
returnimport('./zod')
27+
.then(async({ getToJsonSchemaFn})=>getToJsonSchemaFn())
28+
default:
29+
thrownewError(`xsschema: Unsupported schema vendor "${vendor}"`)
30+
}
31+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
importtype{BaseIssue,BaseSchema}from'valibot'
2+
3+
importtype{ToJsonSchemaFn}from'.'
4+
5+
import{tryImport}from'.'
6+
7+
exportconstgetToJsonSchemaFn=async():Promise<ToJsonSchemaFn>=>{
8+
const{ toJsonSchema}=awaittryImport(import('@valibot/to-json-schema'),'@valibot/to-json-schema')
9+
returnschema=>toJsonSchema(schemaasBaseSchema<unknown,unknown,BaseIssue<unknown>>)
10+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
importtype{JSONSchema7}from'json-schema'
2+
importtype{ZodSchema}from'zod'
3+
4+
importtype{ToJsonSchemaFn}from'.'
5+
6+
import{tryImport}from'.'
7+
8+
exportconstgetToJsonSchemaFn=async():Promise<ToJsonSchemaFn>=>{
9+
const{ zodToJsonSchema}=awaittryImport(import('zod-to-json-schema'),'zod-to-json-schema')
10+
returnschema=>zodToJsonSchema(schemaasZodSchema<unknown>)asJSONSchema7
11+
}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp