directus

Форк
0
33 строки · 915.0 Байт
1
import { useEnv } from '@directus/env';
2
import type { Reference } from 'isolated-vm';
3
import { useLogger } from '../../../../logger.js';
4

5
type Args<T> = T extends (...args: infer Args) => unknown ? Args : any[];
6
type Result<T> = T extends (...args: any) => infer Result ? Result : unknown;
7

8
export async function callReference<T extends (...args: any[]) => unknown | Promise<unknown>>(
9
	fn: Reference<T>,
10
	args: Args<T>,
11
): Promise<Reference<Result<T>>> {
12
	const env = useEnv();
13
	const logger = useLogger();
14

15
	const sandboxTimeout = Number(env['EXTENSIONS_SANDBOX_TIMEOUT']);
16

17
	try {
18
		return await fn.apply(undefined, args, {
19
			arguments: { copy: true },
20
			result: { reference: true, promise: true },
21
			timeout: sandboxTimeout,
22
		});
23
	} catch (e) {
24
		if (e instanceof RangeError) {
25
			logger.error(`Extension sandbox has reached the memory limit`);
26
			logger.error(e);
27

28
			process.abort();
29
		}
30

31
		throw e;
32
	}
33
}
34

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.