mirror of
https://github.com/misskey-dev/misskey.git
synced 2024-12-28 16:38:23 +01:00
add simple-schema
This commit is contained in:
parent
f89a326d7f
commit
abbeb9a071
5 changed files with 28 additions and 21 deletions
|
@ -1,3 +1,4 @@
|
||||||
|
import { SimpleObj, SimpleSchema } from './simple-schema';
|
||||||
import { packedUserSchema } from '@/models/repositories/user';
|
import { packedUserSchema } from '@/models/repositories/user';
|
||||||
import { packedNoteSchema } from '@/models/repositories/note';
|
import { packedNoteSchema } from '@/models/repositories/note';
|
||||||
import { packedUserListSchema } from '@/models/repositories/user-list';
|
import { packedUserListSchema } from '@/models/repositories/user-list';
|
||||||
|
@ -46,18 +47,9 @@ export const refs = {
|
||||||
GalleryPost: packedGalleryPostSchema,
|
GalleryPost: packedGalleryPostSchema,
|
||||||
};
|
};
|
||||||
|
|
||||||
export type Schema = {
|
export interface Schema extends SimpleSchema {
|
||||||
type: 'boolean' | 'number' | 'string' | 'array' | 'object' | 'any';
|
|
||||||
nullable: boolean;
|
|
||||||
optional: boolean;
|
|
||||||
items?: Schema;
|
|
||||||
properties?: Obj;
|
properties?: Obj;
|
||||||
description?: string;
|
|
||||||
example?: any;
|
|
||||||
format?: string;
|
|
||||||
ref?: keyof typeof refs;
|
ref?: keyof typeof refs;
|
||||||
enum?: string[];
|
|
||||||
default?: boolean | null;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
type NonUndefinedPropertyNames<T extends Obj> = {
|
type NonUndefinedPropertyNames<T extends Obj> = {
|
||||||
|
@ -71,7 +63,7 @@ type UndefinedPropertyNames<T extends Obj> = {
|
||||||
type OnlyRequired<T extends Obj> = Pick<T, NonUndefinedPropertyNames<T>>;
|
type OnlyRequired<T extends Obj> = Pick<T, NonUndefinedPropertyNames<T>>;
|
||||||
type OnlyOptional<T extends Obj> = Pick<T, UndefinedPropertyNames<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> =
|
export type ObjType<s extends Obj> =
|
||||||
{ [P in keyof OnlyOptional<s>]?: SchemaType<s[P]> } &
|
{ [P in keyof OnlyOptional<s>]?: SchemaType<s[P]> } &
|
||||||
|
|
15
src/misc/simple-schema.ts
Normal file
15
src/misc/simple-schema.ts
Normal file
|
@ -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 type SimpleObj = { [key: string]: SimpleSchema };
|
|
@ -3,7 +3,7 @@ import { dirname } from 'path';
|
||||||
import { Context } from 'cafy';
|
import { Context } from 'cafy';
|
||||||
import * as path from 'path';
|
import * as path from 'path';
|
||||||
import * as glob from 'glob';
|
import * as glob from 'glob';
|
||||||
import { Schema } from '@/misc/schema';
|
import { SimpleSchema } from '@/misc/simple-schema';
|
||||||
|
|
||||||
//const _filename = fileURLToPath(import.meta.url);
|
//const _filename = fileURLToPath(import.meta.url);
|
||||||
const _filename = __filename;
|
const _filename = __filename;
|
||||||
|
@ -34,7 +34,7 @@ export interface IEndpointMeta {
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
res?: Schema;
|
res?: SimpleSchema;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* このエンドポイントにリクエストするのにユーザー情報が必須か否か
|
* このエンドポイントにリクエストするのにユーザー情報が必須か否か
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
import * as nestedProperty from 'nested-property';
|
import * as nestedProperty from 'nested-property';
|
||||||
import autobind from 'autobind-decorator';
|
import autobind from 'autobind-decorator';
|
||||||
import Logger from '../logger';
|
import Logger from '../logger';
|
||||||
import { Schema } from '@/misc/schema';
|
import { SimpleSchema } from '@/misc/simple-schema';
|
||||||
import { EntitySchema, getRepository, Repository, LessThan, Between } from 'typeorm';
|
import { EntitySchema, getRepository, Repository, LessThan, Between } from 'typeorm';
|
||||||
import { dateUTC, isTimeSame, isTimeBefore, subtractTime, addTime } from '@/prelude/time';
|
import { dateUTC, isTimeSame, isTimeBefore, subtractTime, addTime } from '@/prelude/time';
|
||||||
import { getChartInsertLock } from '@/misc/app-lock';
|
import { getChartInsertLock } from '@/misc/app-lock';
|
||||||
|
@ -56,7 +56,7 @@ export default abstract class Chart<T extends Record<string, any>> {
|
||||||
diff: DeepPartial<T>;
|
diff: DeepPartial<T>;
|
||||||
group: string | null;
|
group: string | null;
|
||||||
}[] = [];
|
}[] = [];
|
||||||
public schema: Schema;
|
public schema: SimpleSchema;
|
||||||
protected repository: Repository<Log>;
|
protected repository: Repository<Log>;
|
||||||
|
|
||||||
protected abstract genNewLog(latest: T): DeepPartial<T>;
|
protected abstract genNewLog(latest: T): DeepPartial<T>;
|
||||||
|
@ -69,7 +69,7 @@ export default abstract class Chart<T extends Record<string, any>> {
|
||||||
protected abstract fetchActual(group: string | null): Promise<DeepPartial<T>>;
|
protected abstract fetchActual(group: string | null): Promise<DeepPartial<T>>;
|
||||||
|
|
||||||
@autobind
|
@autobind
|
||||||
private static convertSchemaToFlatColumnDefinitions(schema: Schema) {
|
private static convertSchemaToFlatColumnDefinitions(schema: SimpleSchema) {
|
||||||
const columns = {} as any;
|
const columns = {} as any;
|
||||||
const flatColumns = (x: Obj, path?: string) => {
|
const flatColumns = (x: Obj, path?: string) => {
|
||||||
for (const [k, v] of Object.entries(x)) {
|
for (const [k, v] of Object.entries(x)) {
|
||||||
|
@ -181,7 +181,7 @@ export default abstract class Chart<T extends Record<string, any>> {
|
||||||
}
|
}
|
||||||
|
|
||||||
@autobind
|
@autobind
|
||||||
public static schemaToEntity(name: string, schema: Schema): EntitySchema {
|
public static schemaToEntity(name: string, schema: SimpleSchema): EntitySchema {
|
||||||
return new EntitySchema({
|
return new EntitySchema({
|
||||||
name: `__chart__${camelToSnake(name)}`,
|
name: `__chart__${camelToSnake(name)}`,
|
||||||
columns: {
|
columns: {
|
||||||
|
@ -211,7 +211,7 @@ export default abstract class Chart<T extends Record<string, any>> {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
constructor(name: string, schema: Schema, grouped = false) {
|
constructor(name: string, schema: SimpleSchema, grouped = false) {
|
||||||
this.name = name;
|
this.name = name;
|
||||||
this.schema = schema;
|
this.schema = schema;
|
||||||
const entity = Chart.schemaToEntity(name, schema);
|
const entity = Chart.schemaToEntity(name, schema);
|
||||||
|
@ -546,8 +546,8 @@ export default abstract class Chart<T extends Record<string, any>> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export function convertLog(logSchema: Schema): Schema {
|
export function convertLog(logSchema: SimpleSchema): SimpleSchema {
|
||||||
const v: Schema = JSON.parse(JSON.stringify(logSchema)); // copy
|
const v: SimpleSchema = JSON.parse(JSON.stringify(logSchema)); // copy
|
||||||
if (v.type === 'number') {
|
if (v.type === 'number') {
|
||||||
v.type = 'array';
|
v.type = 'array';
|
||||||
v.items = {
|
v.items = {
|
||||||
|
|
|
@ -158,7 +158,7 @@ export async function initTestDb(justBorrow = false, initEntities?: any[]) {
|
||||||
await conn.close();
|
await conn.close();
|
||||||
} catch (e) {}
|
} catch (e) {}
|
||||||
|
|
||||||
return await createConnection({
|
return createConnection({
|
||||||
type: 'postgres',
|
type: 'postgres',
|
||||||
host: config.db.host,
|
host: config.db.host,
|
||||||
port: config.db.port,
|
port: config.db.port,
|
||||||
|
|
Loading…
Reference in a new issue