refactor: api, apiGet関数をosから@/scripts/api.tsに分離する (#9510)
* split api?
* fix
* ✌️
* no vue split?
* Revert "no vue split?"
This reverts commit 27ccec971e.
			
			
This commit is contained in:
		@@ -4,89 +4,11 @@ import { Component, markRaw, Ref, ref, defineAsyncComponent } from 'vue';
 | 
			
		||||
import { EventEmitter } from 'eventemitter3';
 | 
			
		||||
import insertTextAtCursor from 'insert-text-at-cursor';
 | 
			
		||||
import * as Misskey from 'misskey-js';
 | 
			
		||||
import { apiUrl, url } from '@/config';
 | 
			
		||||
import MkPostFormDialog from '@/components/MkPostFormDialog.vue';
 | 
			
		||||
import MkWaitingDialog from '@/components/MkWaitingDialog.vue';
 | 
			
		||||
import { MenuItem } from '@/types/menu';
 | 
			
		||||
import { $i } from '@/account';
 | 
			
		||||
 | 
			
		||||
export const pendingApiRequestsCount = ref(0);
 | 
			
		||||
 | 
			
		||||
const apiClient = new Misskey.api.APIClient({
 | 
			
		||||
	origin: url,
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
export const api = ((endpoint: string, data: Record<string, any> = {}, token?: string | null | undefined) => {
 | 
			
		||||
	pendingApiRequestsCount.value++;
 | 
			
		||||
 | 
			
		||||
	const onFinally = () => {
 | 
			
		||||
		pendingApiRequestsCount.value--;
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	const promise = new Promise((resolve, reject) => {
 | 
			
		||||
		// Append a credential
 | 
			
		||||
		if ($i) (data as any).i = $i.token;
 | 
			
		||||
		if (token !== undefined) (data as any).i = token;
 | 
			
		||||
 | 
			
		||||
		// Send request
 | 
			
		||||
		window.fetch(endpoint.indexOf('://') > -1 ? endpoint : `${apiUrl}/${endpoint}`, {
 | 
			
		||||
			method: 'POST',
 | 
			
		||||
			body: JSON.stringify(data),
 | 
			
		||||
			credentials: 'omit',
 | 
			
		||||
			cache: 'no-cache',
 | 
			
		||||
			headers: {
 | 
			
		||||
				'Content-Type': 'application/json',
 | 
			
		||||
			},
 | 
			
		||||
		}).then(async (res) => {
 | 
			
		||||
			const body = res.status === 204 ? null : await res.json();
 | 
			
		||||
 | 
			
		||||
			if (res.status === 200) {
 | 
			
		||||
				resolve(body);
 | 
			
		||||
			} else if (res.status === 204) {
 | 
			
		||||
				resolve();
 | 
			
		||||
			} else {
 | 
			
		||||
				reject(body.error);
 | 
			
		||||
			}
 | 
			
		||||
		}).catch(reject);
 | 
			
		||||
	});
 | 
			
		||||
 | 
			
		||||
	promise.then(onFinally, onFinally);
 | 
			
		||||
 | 
			
		||||
	return promise;
 | 
			
		||||
}) as typeof apiClient.request;
 | 
			
		||||
 | 
			
		||||
export const apiGet = ((endpoint: string, data: Record<string, any> = {}) => {
 | 
			
		||||
	pendingApiRequestsCount.value++;
 | 
			
		||||
 | 
			
		||||
	const onFinally = () => {
 | 
			
		||||
		pendingApiRequestsCount.value--;
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	const query = new URLSearchParams(data);
 | 
			
		||||
 | 
			
		||||
	const promise = new Promise((resolve, reject) => {
 | 
			
		||||
		// Send request
 | 
			
		||||
		window.fetch(`${apiUrl}/${endpoint}?${query}`, {
 | 
			
		||||
			method: 'GET',
 | 
			
		||||
			credentials: 'omit',
 | 
			
		||||
			cache: 'default',
 | 
			
		||||
		}).then(async (res) => {
 | 
			
		||||
			const body = res.status === 204 ? null : await res.json();
 | 
			
		||||
 | 
			
		||||
			if (res.status === 200) {
 | 
			
		||||
				resolve(body);
 | 
			
		||||
			} else if (res.status === 204) {
 | 
			
		||||
				resolve();
 | 
			
		||||
			} else {
 | 
			
		||||
				reject(body.error);
 | 
			
		||||
			}
 | 
			
		||||
		}).catch(reject);
 | 
			
		||||
	});
 | 
			
		||||
 | 
			
		||||
	promise.then(onFinally, onFinally);
 | 
			
		||||
 | 
			
		||||
	return promise;
 | 
			
		||||
}) as typeof apiClient.request;
 | 
			
		||||
import { pendingApiRequestsCount, api, apiGet } from '@/scripts/api';
 | 
			
		||||
export { pendingApiRequestsCount, api, apiGet };
 | 
			
		||||
 | 
			
		||||
export const apiWithDialog = ((
 | 
			
		||||
	endpoint: string,
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										79
									
								
								packages/frontend/src/scripts/api.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										79
									
								
								packages/frontend/src/scripts/api.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,79 @@
 | 
			
		||||
import { Endpoints } from 'misskey-js/built/api.types';
 | 
			
		||||
import { ref } from 'vue';
 | 
			
		||||
import { apiUrl } from '@/config';
 | 
			
		||||
import { $i } from '@/account';
 | 
			
		||||
export const pendingApiRequestsCount = ref(0);
 | 
			
		||||
 | 
			
		||||
// Implements Misskey.api.ApiClient.request
 | 
			
		||||
export function api<E extends keyof Endpoints, P extends Endpoints[E]['req']>(endpoint: E, data: P = {} as any, token?: string | null | undefined): Promise<Endpoints[E]['res']> {
 | 
			
		||||
	pendingApiRequestsCount.value++;
 | 
			
		||||
 | 
			
		||||
	const onFinally = () => {
 | 
			
		||||
		pendingApiRequestsCount.value--;
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	const promise = new Promise<Endpoints[E]['res'] | void>((resolve, reject) => {
 | 
			
		||||
		// Append a credential
 | 
			
		||||
		if ($i) (data as any).i = $i.token;
 | 
			
		||||
		if (token !== undefined) (data as any).i = token;
 | 
			
		||||
 | 
			
		||||
		// Send request
 | 
			
		||||
		window.fetch(endpoint.indexOf('://') > -1 ? endpoint : `${apiUrl}/${endpoint}`, {
 | 
			
		||||
			method: 'POST',
 | 
			
		||||
			body: JSON.stringify(data),
 | 
			
		||||
			credentials: 'omit',
 | 
			
		||||
			cache: 'no-cache',
 | 
			
		||||
			headers: {
 | 
			
		||||
				'Content-Type': 'application/json',
 | 
			
		||||
			},
 | 
			
		||||
		}).then(async (res) => {
 | 
			
		||||
			const body = res.status === 204 ? null : await res.json();
 | 
			
		||||
 | 
			
		||||
			if (res.status === 200) {
 | 
			
		||||
				resolve(body);
 | 
			
		||||
			} else if (res.status === 204) {
 | 
			
		||||
				resolve();
 | 
			
		||||
			} else {
 | 
			
		||||
				reject(body.error);
 | 
			
		||||
			}
 | 
			
		||||
		}).catch(reject);
 | 
			
		||||
	});
 | 
			
		||||
 | 
			
		||||
	promise.then(onFinally, onFinally);
 | 
			
		||||
 | 
			
		||||
	return promise;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// Implements Misskey.api.ApiClient.request
 | 
			
		||||
export function apiGet<E extends keyof Endpoints, P extends Endpoints[E]['req']>(endpoint: E, data: P = {} as any): Promise<Endpoints[E]['res']> {
 | 
			
		||||
	pendingApiRequestsCount.value++;
 | 
			
		||||
 | 
			
		||||
	const onFinally = () => {
 | 
			
		||||
		pendingApiRequestsCount.value--;
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	const query = new URLSearchParams(data as any);
 | 
			
		||||
 | 
			
		||||
	const promise = new Promise<Endpoints[E]['res'] | void>((resolve, reject) => {
 | 
			
		||||
		// Send request
 | 
			
		||||
		window.fetch(`${apiUrl}/${endpoint}?${query}`, {
 | 
			
		||||
			method: 'GET',
 | 
			
		||||
			credentials: 'omit',
 | 
			
		||||
			cache: 'default',
 | 
			
		||||
		}).then(async (res) => {
 | 
			
		||||
			const body = res.status === 204 ? null : await res.json();
 | 
			
		||||
 | 
			
		||||
			if (res.status === 200) {
 | 
			
		||||
				resolve(body);
 | 
			
		||||
			} else if (res.status === 204) {
 | 
			
		||||
				resolve();
 | 
			
		||||
			} else {
 | 
			
		||||
				reject(body.error);
 | 
			
		||||
			}
 | 
			
		||||
		}).catch(reject);
 | 
			
		||||
	});
 | 
			
		||||
 | 
			
		||||
	promise.then(onFinally, onFinally);
 | 
			
		||||
 | 
			
		||||
	return promise;
 | 
			
		||||
};
 | 
			
		||||
		Reference in New Issue
	
	Block a user