refactor: getJsonSchemaで正しいスキーマが返されるように修正

This commit is contained in:
yukineko 2024-01-06 02:28:59 +09:00
parent 1984ee50b8
commit de56fe5f4c
No known key found for this signature in database
GPG Key ID: E5BACB72109B7B90
6 changed files with 155 additions and 83 deletions

View File

@ -94,6 +94,29 @@ type ToJsonSchema<S> = {
}; };
export function getJsonSchema<S extends Schema>(schema: S): ToJsonSchema<Unflatten<ChartResult<S>>> { export function getJsonSchema<S extends Schema>(schema: S): ToJsonSchema<Unflatten<ChartResult<S>>> {
const unflatten = (str: string, parent: Record<string, any>) => {
const keys = str.split('.');
const key = keys.shift();
const nextKey = keys[0];
if (!key) return;
if (!parent.properties[key]) {
parent.properties[key] = nextKey ? {
type: 'object',
properties: {},
required: [],
} : {
type: 'array',
items: {
type: 'number',
},
};
}
if (nextKey) unflatten(keys.join('.'), parent.properties[key] as Record<string, any>);
};
const jsonSchema = { const jsonSchema = {
type: 'object', type: 'object',
properties: {} as Record<string, unknown>, properties: {} as Record<string, unknown>,
@ -101,10 +124,7 @@ export function getJsonSchema<S extends Schema>(schema: S): ToJsonSchema<Unflatt
}; };
for (const k in schema) { for (const k in schema) {
jsonSchema.properties[k] = { unflatten(k, jsonSchema);
type: 'array',
items: { type: 'number' },
};
} }
return jsonSchema as ToJsonSchema<Unflatten<ChartResult<S>>>; return jsonSchema as ToJsonSchema<Unflatten<ChartResult<S>>>;

View File

@ -1,6 +1,6 @@
/* /*
* version: 2023.12.2 * version: 2023.12.2
* generatedAt: 2024-01-03T14:50:11.647Z * generatedAt: 2024-01-05T17:21:28.094Z
*/ */
import type { SwitchCaseResponseType } from '../api.js'; import type { SwitchCaseResponseType } from '../api.js';

View File

@ -1,6 +1,6 @@
/* /*
* version: 2023.12.2 * version: 2023.12.2
* generatedAt: 2024-01-03T14:50:11.643Z * generatedAt: 2024-01-05T17:21:28.090Z
*/ */
import type { import type {

View File

@ -1,6 +1,6 @@
/* /*
* version: 2023.12.2 * version: 2023.12.2
* generatedAt: 2024-01-03T14:50:11.639Z * generatedAt: 2024-01-05T17:21:28.088Z
*/ */
import { operations } from './types.js'; import { operations } from './types.js';

View File

@ -1,6 +1,6 @@
/* /*
* version: 2023.12.2 * version: 2023.12.2
* generatedAt: 2024-01-03T14:50:11.637Z * generatedAt: 2024-01-05T17:21:28.087Z
*/ */
import { components } from './types.js'; import { components } from './types.js';

View File

@ -3,7 +3,7 @@
/* /*
* version: 2023.12.2 * version: 2023.12.2
* generatedAt: 2024-01-03T14:50:11.515Z * generatedAt: 2024-01-05T17:21:27.961Z
*/ */
/** /**
@ -10877,14 +10877,18 @@ export type operations = {
200: { 200: {
content: { content: {
'application/json': { 'application/json': {
'local.incCount': number[]; local: {
'local.incSize': number[]; incCount: number[];
'local.decCount': number[]; incSize: number[];
'local.decSize': number[]; decCount: number[];
'remote.incCount': number[]; decSize: number[];
'remote.incSize': number[]; };
'remote.decCount': number[]; remote: {
'remote.decSize': number[]; incCount: number[];
incSize: number[];
decCount: number[];
decSize: number[];
};
}; };
}; };
}; };
@ -11012,30 +11016,44 @@ export type operations = {
200: { 200: {
content: { content: {
'application/json': { 'application/json': {
'requests.failed': number[]; requests: {
'requests.succeeded': number[]; failed: number[];
'requests.received': number[]; succeeded: number[];
'notes.total': number[]; received: number[];
'notes.inc': number[]; };
'notes.dec': number[]; notes: {
'notes.diffs.normal': number[]; total: number[];
'notes.diffs.reply': number[]; inc: number[];
'notes.diffs.renote': number[]; dec: number[];
'notes.diffs.withFile': number[]; diffs: {
'users.total': number[]; normal: number[];
'users.inc': number[]; reply: number[];
'users.dec': number[]; renote: number[];
'following.total': number[]; withFile: number[];
'following.inc': number[]; };
'following.dec': number[]; };
'followers.total': number[]; users: {
'followers.inc': number[]; total: number[];
'followers.dec': number[]; inc: number[];
'drive.totalFiles': number[]; dec: number[];
'drive.incFiles': number[]; };
'drive.decFiles': number[]; following: {
'drive.incUsage': number[]; total: number[];
'drive.decUsage': number[]; inc: number[];
dec: number[];
};
followers: {
total: number[];
inc: number[];
dec: number[];
};
drive: {
totalFiles: number[];
incFiles: number[];
decFiles: number[];
incUsage: number[];
decUsage: number[];
};
}; };
}; };
}; };
@ -11095,20 +11113,28 @@ export type operations = {
200: { 200: {
content: { content: {
'application/json': { 'application/json': {
'local.total': number[]; local: {
'local.inc': number[]; total: number[];
'local.dec': number[]; inc: number[];
'local.diffs.normal': number[]; dec: number[];
'local.diffs.reply': number[]; diffs: {
'local.diffs.renote': number[]; normal: number[];
'local.diffs.withFile': number[]; reply: number[];
'remote.total': number[]; renote: number[];
'remote.inc': number[]; withFile: number[];
'remote.dec': number[]; };
'remote.diffs.normal': number[]; };
'remote.diffs.reply': number[]; remote: {
'remote.diffs.renote': number[]; total: number[];
'remote.diffs.withFile': number[]; inc: number[];
dec: number[];
diffs: {
normal: number[];
reply: number[];
renote: number[];
withFile: number[];
};
};
}; };
}; };
}; };
@ -11237,18 +11263,30 @@ export type operations = {
200: { 200: {
content: { content: {
'application/json': { 'application/json': {
'local.followings.total': number[]; local: {
'local.followings.inc': number[]; followings: {
'local.followings.dec': number[]; total: number[];
'local.followers.total': number[]; inc: number[];
'local.followers.inc': number[]; dec: number[];
'local.followers.dec': number[]; };
'remote.followings.total': number[]; followers: {
'remote.followings.inc': number[]; total: number[];
'remote.followings.dec': number[]; inc: number[];
'remote.followers.total': number[]; dec: number[];
'remote.followers.inc': number[]; };
'remote.followers.dec': number[]; };
remote: {
followings: {
total: number[];
inc: number[];
dec: number[];
};
followers: {
total: number[];
inc: number[];
dec: number[];
};
};
}; };
}; };
}; };
@ -11313,10 +11351,12 @@ export type operations = {
total: number[]; total: number[];
inc: number[]; inc: number[];
dec: number[]; dec: number[];
'diffs.normal': number[]; diffs: {
'diffs.reply': number[]; normal: number[];
'diffs.renote': number[]; reply: number[];
'diffs.withFile': number[]; renote: number[];
withFile: number[];
};
}; };
}; };
}; };
@ -11378,10 +11418,14 @@ export type operations = {
200: { 200: {
content: { content: {
'application/json': { 'application/json': {
'upv.user': number[]; upv: {
'pv.user': number[]; user: number[];
'upv.visitor': number[]; visitor: number[];
'pv.visitor': number[]; };
pv: {
user: number[];
visitor: number[];
};
}; };
}; };
}; };
@ -11443,8 +11487,12 @@ export type operations = {
200: { 200: {
content: { content: {
'application/json': { 'application/json': {
'local.count': number[]; local: {
'remote.count': number[]; count: number[];
};
remote: {
count: number[];
};
}; };
}; };
}; };
@ -11504,12 +11552,16 @@ export type operations = {
200: { 200: {
content: { content: {
'application/json': { 'application/json': {
'local.total': number[]; local: {
'local.inc': number[]; total: number[];
'local.dec': number[]; inc: number[];
'remote.total': number[]; dec: number[];
'remote.inc': number[]; };
'remote.dec': number[]; remote: {
total: number[];
inc: number[];
dec: number[];
};
}; };
}; };
}; };