summaryrefslogtreecommitdiff
path: root/packages/backend
diff options
context:
space:
mode:
authorsyuilo <Syuilotan@yahoo.co.jp>2022-02-18 22:29:23 +0900
committersyuilo <Syuilotan@yahoo.co.jp>2022-02-18 22:29:23 +0900
commit0cee1dfbd6b60ff80d2ac3cc0612f2753a08ac6c (patch)
tree468dced980257bd25dad72c72ffe6f590d09b7a5 /packages/backend
parentrefactor: add InstanceRepository (diff)
downloadsharkey-0cee1dfbd6b60ff80d2ac3cc0612f2753a08ac6c.tar.gz
sharkey-0cee1dfbd6b60ff80d2ac3cc0612f2753a08ac6c.tar.bz2
sharkey-0cee1dfbd6b60ff80d2ac3cc0612f2753a08ac6c.zip
refactor: better getChart result type
Diffstat (limited to 'packages/backend')
-rw-r--r--packages/backend/src/services/chart/core.ts16
1 files changed, 14 insertions, 2 deletions
diff --git a/packages/backend/src/services/chart/core.ts b/packages/backend/src/services/chart/core.ts
index ddcedba94b..cc10900e9f 100644
--- a/packages/backend/src/services/chart/core.ts
+++ b/packages/backend/src/services/chart/core.ts
@@ -70,6 +70,18 @@ type ChartResult<T extends Schema> = {
[P in keyof T]: number[];
};
+type UnionToIntersection<T> = (T extends any ? (x: T) => any : never) extends (x: infer R) => any ? R : never;
+
+type UnflattenSingleton<K extends string, V> = K extends `${infer A}.${infer B}`
+ ? { [_ in A]: UnflattenSingleton<B, V>; }
+ : { [_ in K]: V; };
+
+type Unflatten<T extends Record<string, any>> = UnionToIntersection<
+ {
+ [K in Extract<keyof T, string>]: UnflattenSingleton<K, T[K]>;
+ }[Extract<keyof T, string>]
+>;
+
/**
* 様々なチャートの管理を司るクラス
*/
@@ -642,12 +654,12 @@ export default abstract class Chart<T extends Schema> {
}
@autobind
- public async getChart(span: 'hour' | 'day', amount: number, cursor: Date | null, group: string | null = null): Promise<Record<string, unknown>> {
+ public async getChart(span: 'hour' | 'day', amount: number, cursor: Date | null, group: string | null = null): Promise<Unflatten<ChartResult<T>>> {
const result = await this.getChartRaw(span, amount, cursor, group);
const object = {};
for (const [k, v] of Object.entries(result)) {
nestedProperty.set(object, k, v);
}
- return object;
+ return object as Unflatten<ChartResult<T>>;
}
}