PHP WebShell
Текущая директория: /usr/lib/node_modules/bitgo/node_modules/metro-cache/src/stores
Просмотр файла: AutoCleanFileStore.js.flow
/**
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @flow strict-local
* @format
* @oncall react_native
*/
import type {Options} from './FileStore';
import FileStore from './FileStore';
import fs from 'fs';
import path from 'path';
type CleanOptions = $ReadOnly<{
...Options,
intervalMs?: number,
cleanupThresholdMs?: number,
}>;
/**
* A FileStore that, at a given interval, stats the content of the cache root
* and deletes any file last modified a set threshold in the past.
*
* @deprecated This is not efficiently implemented and may cause significant
* redundant I/O when caches are large. Prefer your own cleanup scripts, or a
* custom Metro cache that uses watches, hooks get/set, and/or implements LRU.
*/
export default class AutoCleanFileStore<T> extends FileStore<T> {
+#intervalMs: number;
+#cleanupThresholdMs: number;
+#root: string;
constructor(opts: CleanOptions) {
super({root: opts.root});
this.#root = opts.root;
this.#intervalMs = opts.intervalMs ?? 10 * 60 * 1000; // 10 minutes
this.#cleanupThresholdMs =
opts.cleanupThresholdMs ?? 3 * 24 * 60 * 60 * 1000; // 3 days
this.#scheduleCleanup();
}
#scheduleCleanup() {
setTimeout(() => this.#doCleanup(), this.#intervalMs);
}
#doCleanup() {
const dirents = fs.readdirSync(this.#root, {
recursive: true,
withFileTypes: true,
});
let warned = false;
const minModifiedTime = Date.now() - this.#cleanupThresholdMs;
dirents
.filter(dirent => dirent.isFile())
.forEach(dirent => {
const absolutePath = path.join(
// $FlowFixMe[prop-missing] - dirent.parentPath added in Node 20.12
dirent.parentPath,
dirent.name.toString(),
);
try {
if (fs.statSync(absolutePath).mtimeMs < minModifiedTime) {
fs.unlinkSync(absolutePath);
}
} catch (e) {
if (!warned) {
console.warn(
'Problem cleaning up cache for ' +
absolutePath +
': ' +
e.message,
);
warned = true;
}
}
});
this.#scheduleCleanup();
}
}
Выполнить команду
Для локальной разработки. Не используйте в интернете!