diff options
| author | syuilo <Syuilotan@yahoo.co.jp> | 2022-02-19 14:05:32 +0900 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-02-19 14:05:32 +0900 |
| commit | 510de87607283d4d49239b1d14026a577299c99e (patch) | |
| tree | d56933864d6cf07751e2e2a11a373ee752338c80 /packages/backend/src/services/chart | |
| parent | update deps (diff) | |
| download | misskey-510de87607283d4d49239b1d14026a577299c99e.tar.gz misskey-510de87607283d4d49239b1d14026a577299c99e.tar.bz2 misskey-510de87607283d4d49239b1d14026a577299c99e.zip | |
refactor: use ajv instead of cafy (#8324)
* wip
* wip
* Update abuse-user-reports.ts
* Update files.ts
* Update list-remote.ts
* Update list.ts
* Update show-users.ts
* wip
* wip
* wip
* wip
* wip
* wip
* wip
* wip
* wip
* wip
* wip
* Update update.ts
* Update search.ts
* Update reactions.ts
* Update search.ts
* wip
* wip
* wip
* wip
* Update update.ts
* Update relation.ts
* Update available.ts
* wip
* wip
* wip
* Update packages/backend/src/server/api/define.ts
Co-authored-by: Johann150 <johann.galle@protonmail.com>
* Update define.ts
* Update define.ts
* typo
* wip
* wip
* wip
* wip
* wip
* wip
* wip
* wip
* Update update.ts
* wip
* Update signup.ts
* Update call.ts
* minimum for limit
* type
* remove needless annotation
* wip
* Update signup.ts
* wip
* wip
* fix
* Update create.ts
Co-authored-by: Johann150 <johann.galle@protonmail.com>
Diffstat (limited to 'packages/backend/src/services/chart')
| -rw-r--r-- | packages/backend/src/services/chart/core.ts | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/packages/backend/src/services/chart/core.ts b/packages/backend/src/services/chart/core.ts index cc10900e9f..c6bea0feea 100644 --- a/packages/backend/src/services/chart/core.ts +++ b/packages/backend/src/services/chart/core.ts @@ -82,6 +82,38 @@ type Unflatten<T extends Record<string, any>> = UnionToIntersection< }[Extract<keyof T, string>] >; +type ToJsonSchema<S> = { + type: 'object'; + properties: { + [K in keyof S]: S[K] extends number[] ? { type: 'array'; items: { type: 'number'; }; } : ToJsonSchema<S[K]>; + }, + required: (keyof S)[]; +}; + +export function getJsonSchema<S extends Schema>(schema: S): ToJsonSchema<Unflatten<ChartResult<S>>> { + const object = {}; + for (const [k, v] of Object.entries(schema)) { + nestedProperty.set(object, k, null); + } + + function f(obj: Record<string, null | Record<string, unknown>>) { + const jsonSchema = { + type: 'object', + properties: {} as Record<string, unknown>, + required: [], + }; + for (const [k, v] of Object.entries(obj)) { + jsonSchema.properties[k] = v === null ? { + type: 'array', + items: { type: 'number' }, + } : f(v as Record<string, null | Record<string, unknown>>); + } + return jsonSchema; + } + + return f(object) as ToJsonSchema<Unflatten<ChartResult<S>>>; +} + /** * 様々なチャートの管理を司るクラス */ |