diff options
| author | tamaina <tamaina@hotmail.co.jp> | 2021-09-12 01:12:23 +0900 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-09-12 01:12:23 +0900 |
| commit | 53f3b779bf16abcda4f6e026c51384f3b8fbcc62 (patch) | |
| tree | 7c4bfeb42a3fdbc9e2fa36771a2bc2b67a509301 /src/misc | |
| parent | Revert "fix: use master branch when build docker image" (diff) | |
| download | sharkey-53f3b779bf16abcda4f6e026c51384f3b8fbcc62.tar.gz sharkey-53f3b779bf16abcda4f6e026c51384f3b8fbcc62.tar.bz2 sharkey-53f3b779bf16abcda4f6e026c51384f3b8fbcc62.zip | |
refactor: Expand schema (#7772)
* packedNotificationSchemaを更新
* read:gallery, write:gallery, read:gallery-likes, write:gallery-likesに翻訳を追加
* fix
* add header, choice, invitation
* test
* fix
* yatta
* remove no longer needed "as PackedUser/PackedNote"
* clean up
* add simple-schema
* fix lint
* define items in full Schema
* revert https://github.com/misskey-dev/misskey/pull/7772#discussion_r706627736
* user packとnote packの型不整合を修正
Diffstat (limited to 'src/misc')
| -rw-r--r-- | src/misc/schema.ts | 70 | ||||
| -rw-r--r-- | src/misc/simple-schema.ts | 15 |
2 files changed, 73 insertions, 12 deletions
diff --git a/src/misc/schema.ts b/src/misc/schema.ts index e14e6e0dd7..d27c9eff99 100644 --- a/src/misc/schema.ts +++ b/src/misc/schema.ts @@ -1,15 +1,57 @@ -export type Schema = { - type: 'boolean' | 'number' | 'string' | 'array' | 'object' | 'any'; - nullable: boolean; - optional: boolean; +import { SimpleObj, SimpleSchema } from './simple-schema'; +import { packedUserSchema } from '@/models/repositories/user'; +import { packedNoteSchema } from '@/models/repositories/note'; +import { packedUserListSchema } from '@/models/repositories/user-list'; +import { packedAppSchema } from '@/models/repositories/app'; +import { packedMessagingMessageSchema } from '@/models/repositories/messaging-message'; +import { packedNotificationSchema } from '@/models/repositories/notification'; +import { packedDriveFileSchema } from '@/models/repositories/drive-file'; +import { packedDriveFolderSchema } from '@/models/repositories/drive-folder'; +import { packedFollowingSchema } from '@/models/repositories/following'; +import { packedMutingSchema } from '@/models/repositories/muting'; +import { packedBlockingSchema } from '@/models/repositories/blocking'; +import { packedNoteReactionSchema } from '@/models/repositories/note-reaction'; +import { packedHashtagSchema } from '@/models/repositories/hashtag'; +import { packedPageSchema } from '@/models/repositories/page'; +import { packedUserGroupSchema } from '@/models/repositories/user-group'; +import { packedNoteFavoriteSchema } from '@/models/repositories/note-favorite'; +import { packedChannelSchema } from '@/models/repositories/channel'; +import { packedAntennaSchema } from '@/models/repositories/antenna'; +import { packedClipSchema } from '@/models/repositories/clip'; +import { packedFederationInstanceSchema } from '@/models/repositories/federation-instance'; +import { packedQueueCountSchema } from '@/models/repositories/queue'; +import { packedGalleryPostSchema } from '@/models/repositories/gallery-post'; + +export const refs = { + User: packedUserSchema, + UserList: packedUserListSchema, + UserGroup: packedUserGroupSchema, + App: packedAppSchema, + MessagingMessage: packedMessagingMessageSchema, + Note: packedNoteSchema, + NoteReaction: packedNoteReactionSchema, + NoteFavorite: packedNoteFavoriteSchema, + Notification: packedNotificationSchema, + DriveFile: packedDriveFileSchema, + DriveFolder: packedDriveFolderSchema, + Following: packedFollowingSchema, + Muting: packedMutingSchema, + Blocking: packedBlockingSchema, + Hashtag: packedHashtagSchema, + Page: packedPageSchema, + Channel: packedChannelSchema, + QueueCount: packedQueueCountSchema, + Antenna: packedAntennaSchema, + Clip: packedClipSchema, + FederationInstance: packedFederationInstanceSchema, + GalleryPost: packedGalleryPostSchema, +}; + +export interface Schema extends SimpleSchema { items?: Schema; properties?: Obj; - description?: string; - example?: any; - format?: string; - ref?: string; - enum?: string[]; -}; + ref?: keyof typeof refs; +} type NonUndefinedPropertyNames<T extends Obj> = { [K in keyof T]: T[K]['optional'] extends true ? never : K @@ -22,7 +64,7 @@ type UndefinedPropertyNames<T extends Obj> = { type OnlyRequired<T extends Obj> = Pick<T, NonUndefinedPropertyNames<T>>; type OnlyOptional<T extends Obj> = Pick<T, UndefinedPropertyNames<T>>; -export type Obj = { [key: string]: Schema }; +export interface Obj extends SimpleObj { [key: string]: Schema; } export type ObjType<s extends Obj> = { [P in keyof OnlyOptional<s>]?: SchemaType<s[P]> } & @@ -48,6 +90,10 @@ export type SchemaType<p extends Schema> = p['type'] extends 'string' ? NullOrUndefined<p, string> : p['type'] extends 'boolean' ? NullOrUndefined<p, boolean> : p['type'] extends 'array' ? NullOrUndefined<p, MyType<NonNullable<p['items']>>[]> : - p['type'] extends 'object' ? NullOrUndefined<p, ObjType<NonNullable<p['properties']>>> : + p['type'] extends 'object' ? ( + p['ref'] extends keyof typeof refs + ? NullOrUndefined<p, SchemaType<typeof refs[p['ref']]>> + : NullOrUndefined<p, ObjType<NonNullable<p['properties']>>> + ) : p['type'] extends 'any' ? NullOrUndefined<p, any> : any; diff --git a/src/misc/simple-schema.ts b/src/misc/simple-schema.ts new file mode 100644 index 0000000000..abbb348e24 --- /dev/null +++ b/src/misc/simple-schema.ts @@ -0,0 +1,15 @@ +export interface SimpleSchema { + type: 'boolean' | 'number' | 'string' | 'array' | 'object' | 'any'; + nullable: boolean; + optional: boolean; + items?: SimpleSchema; + properties?: SimpleObj; + description?: string; + example?: any; + format?: string; + ref?: string; + enum?: string[]; + default?: boolean | null; +} + +export interface SimpleObj { [key: string]: SimpleSchema; } |