refactor: getJsonSchemaで正しいスキーマが返されるように修正
This commit is contained in:
parent
1984ee50b8
commit
de56fe5f4c
|
@ -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>>>;
|
||||||
|
|
|
@ -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';
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
|
@ -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';
|
||||||
|
|
|
@ -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';
|
||||||
|
|
|
@ -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[];
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue