From a6fb6150a3557245f722ba1c084b0c081e6970e1 Mon Sep 17 00:00:00 2001
From: dojineko <dojineko.spiral@gmail.com>
Date: Wed, 22 Feb 2023 14:51:34 +0900
Subject: [PATCH] chore: add tiny definition for redis-lock (#9971)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

* add tiny definition for redis-lock

* Update packages/backend/src/@types/redis-lock.d.ts

Co-authored-by: Acid Chicken (硫酸鶏) <root@acid-chicken.com>

* fix type name

* add @typescript-eslint/naming-convention

* define taskToPerform type

* chore: use default settings for `@typescript-eslint/naming-convention`

* set `format:none` to typeParameter (default)

* ignore lines to be treated as exceptions

* chore: fix naming

---------

Co-authored-by: Acid Chicken (硫酸鶏) <root@acid-chicken.com>
Co-authored-by: syuilo <Syuilotan@yahoo.co.jp>
---
 packages/backend/src/@types/redis-lock.d.ts          |  8 ++++++++
 packages/backend/src/core/PushNotificationService.ts |  4 ++--
 packages/backend/src/core/activitypub/type.ts        |  4 ++--
 packages/backend/src/server/api/endpoint-base.ts     |  4 ++--
 packages/shared/.eslintrc.js                         | 11 +++++++++++
 5 files changed, 25 insertions(+), 6 deletions(-)
 create mode 100644 packages/backend/src/@types/redis-lock.d.ts

diff --git a/packages/backend/src/@types/redis-lock.d.ts b/packages/backend/src/@types/redis-lock.d.ts
new file mode 100644
index 0000000000..9242656a98
--- /dev/null
+++ b/packages/backend/src/@types/redis-lock.d.ts
@@ -0,0 +1,8 @@
+declare module 'redis-lock' {
+	import type Redis from 'ioredis';
+
+	type Lock = (lockName: string, timeout?: number, taskToPerform?: () => Promise<void>) => void;
+	function redisLock(client: Redis.Redis, retryDelay: number): Lock;
+
+	export = redisLock;
+}
diff --git a/packages/backend/src/core/PushNotificationService.ts b/packages/backend/src/core/PushNotificationService.ts
index 4b7ca5c968..545f86d764 100644
--- a/packages/backend/src/core/PushNotificationService.ts
+++ b/packages/backend/src/core/PushNotificationService.ts
@@ -9,7 +9,7 @@ import { MetaService } from '@/core/MetaService.js';
 import { bindThis } from '@/decorators.js';
 
 // Defined also packages/sw/types.ts#L13
-type pushNotificationsTypes = {
+type PushNotificationsTypes = {
 	'notification': Packed<'Notification'>;
 	'unreadAntennaNote': {
 		antenna: { id: string, name: string };
@@ -56,7 +56,7 @@ export class PushNotificationService {
 	}
 
 	@bindThis
-	public async pushNotification<T extends keyof pushNotificationsTypes>(userId: string, type: T, body: pushNotificationsTypes[T]) {
+	public async pushNotification<T extends keyof PushNotificationsTypes>(userId: string, type: T, body: PushNotificationsTypes[T]) {
 		const meta = await this.metaService.fetch();
 	
 		if (!meta.enableServiceWorker || meta.swPublicKey == null || meta.swPrivateKey == null) return;
diff --git a/packages/backend/src/core/activitypub/type.ts b/packages/backend/src/core/activitypub/type.ts
index 268bf99119..7f2ca9c05e 100644
--- a/packages/backend/src/core/activitypub/type.ts
+++ b/packages/backend/src/core/activitypub/type.ts
@@ -1,8 +1,8 @@
-export type obj = { [x: string]: any };
+export type Obj = { [x: string]: any };
 export type ApObject = IObject | string | (IObject | string)[];
 
 export interface IObject {
-	'@context'?: string | string[] | obj | obj[];
+	'@context'?: string | string[] | Obj | Obj[];
 	type: string | string[];
 	id?: string;
 	name?: string | null;
diff --git a/packages/backend/src/server/api/endpoint-base.ts b/packages/backend/src/server/api/endpoint-base.ts
index 115526d997..ed283eb834 100644
--- a/packages/backend/src/server/api/endpoint-base.ts
+++ b/packages/backend/src/server/api/endpoint-base.ts
@@ -20,14 +20,14 @@ type File = {
 };
 
 // TODO: paramsの型をT['params']のスキーマ定義から推論する
-type executor<T extends IEndpointMeta, Ps extends Schema> =
+type Executor<T extends IEndpointMeta, Ps extends Schema> =
 	(params: SchemaType<Ps>, user: T['requireCredential'] extends true ? LocalUser : LocalUser | null, token: AccessToken | null, file?: File, cleanup?: () => any, ip?: string | null, headers?: Record<string, string> | null) =>
 		Promise<T['res'] extends undefined ? Response : SchemaType<NonNullable<T['res']>>>;
 
 export abstract class Endpoint<T extends IEndpointMeta, Ps extends Schema> {
 	public exec: (params: any, user: T['requireCredential'] extends true ? LocalUser : LocalUser | null, token: AccessToken | null, file?: File, ip?: string | null, headers?: Record<string, string> | null) => Promise<any>;
 
-	constructor(meta: T, paramDef: Ps, cb: executor<T, Ps>) {
+	constructor(meta: T, paramDef: Ps, cb: Executor<T, Ps>) {
 		const validate = ajv.compile(paramDef);
 
 		this.exec = (params: any, user: T['requireCredential'] extends true ? LocalUser : LocalUser | null, token: AccessToken | null, file?: File, ip?: string | null, headers?: Record<string, string> | null) => {
diff --git a/packages/shared/.eslintrc.js b/packages/shared/.eslintrc.js
index 6d38a9fb9f..7c979a93dc 100644
--- a/packages/shared/.eslintrc.js
+++ b/packages/shared/.eslintrc.js
@@ -77,6 +77,17 @@ module.exports = {
 		'@typescript-eslint/prefer-nullish-coalescing': [
 			'error',
 		],
+		'@typescript-eslint/naming-convention': [
+			'error',
+			{
+				"selector": "typeLike",
+				"format": ["PascalCase"]
+			},
+			{
+				"selector": "typeParameter",
+				"format": []
+			}
+		],
 		'import/no-unresolved': ['off'],
 		'import/no-default-export': ['warn'],
 		'import/order': ['warn', {