FileManager constructor for E-mc.
npm install @e-mc/file-manager* NodeJS 18.20 LTS
* ES2022
``typescript
import type { ChecksumValue, DataSource, IncrementalMatch, TaskAction } from "./squared";
import type { DocumentConstructor, HostConstructor, ICloud, ICompress, IDocument, IHost, IImage, IModule, IRequest, ITask, IWatch, ImageConstructor, TaskConstructor, WatchConstructor } from "./index";
import type { ExternalAsset, FileCommand, FileData, IFileThread, OutputFinalize } from "./asset";
import type { IPermission, PermissionReadWrite } from "./core";
import type { AssetContentOptions, CheckHashOptions, ChecksumOptions, DeleteFileAddendum, FileOutput, FinalizeResult, FindAssetOptions, IHttpDiskCache, IHttpMemoryCache, ImageMimeMap, InstallData, PostFinalizeCallback, ReplaceOptions } from "./filemanager";
import type { ExecCommand } from "./logger";
import type { CopyFileOptions, CreateDirOptions, DeleteFileOptions, MoveFileOptions, ReadFileOptions, RemoveDirOptions, WriteFileOptions } from "./module";
import type { RequestData, Settings } from "./node";
import type { Aria2Options, BufferFormat, OpenOptions } from "./request";
import type { CloudModule, CompressModule, DbModule, DocumentModule, HttpConnectSettings, HttpMemorySettings, ImageModule, RequestModule, TaskModule, WatchModule } from "./settings";
import type { SpawnOptions } from "node:child_process";
import type { NoParamCallback } from "node:fs";
interface IFileManager extends IHost, Set
processTimeout: number;
Request: IRequest;
Document: InstallData
Task: InstallData
Image: Map
Cloud: ICloud | null;
Watch: WatchInstance
Compress: ICompress | null;
readonly documentAssets: ExternalAsset[];
readonly taskAssets: (ExternalAsset & Required
readonly dataSourceItems: DataSource[];
readonly files: Set
readonly filesQueued: Set
readonly filesToRemove: Set
readonly filesToCompare: Map
readonly contentToAppend: Map
readonly contentToReplace: Map
readonly processing: IFileThread[];
readonly fetchedAssets: ExternalAsset[];
readonly copiedAssets: ExternalAsset[];
readonly emptyDir: Set
readonly cacheToDisk: IHttpDiskCache
readonly cacheToMemory: IHttpMemoryCache
install(name: "document", handler: string, module?: DocumentModule, ...args: unknown[]): IDocument | undefined;
install(name: "document", target: DocumentConstructor, module?: DocumentModule, ...args: unknown[]): IDocument | undefined;
install(name: "task", handler: string, module?: TaskModule, ...args: unknown[]): ITask | undefined;
install(name: "task", target: TaskConstructor, module?: TaskModule, ...args: unknown[]): ITask | undefined;
install(name: "cloud", handler: string, module?: CloudModule, ...args: unknown[]): ICloud | undefined;
install(name: "cloud", module?: CloudModule, ...args: unknown[]): ICloud | undefined;
install(name: "image", handler: string, module?: ImageModule, ...args: unknown[]): IImage | undefined;
install(name: "image", target: ImageConstructor, module?: ImageModule, ...args: unknown[]): IImage | undefined;
install(name: "image", targets: Map
install(name: "watch", handler: string, module?: WatchModule, ...args: unknown[]): IWatch | undefined;
install(name: "watch", target: WatchConstructor, module?: WatchModule, ...args: unknown[]): IWatch | undefined;
install(name: "watch", module: WatchModule): IWatch | undefined;
install(name: "compress", module?: CompressModule): ICompress | undefined;
install(name: string, ...args: unknown[]): IModule | undefined;
using(...items: ExternalAsset[] | [boolean, ...ExternalAsset[]]): this;
contains(item: ExternalAsset, condition?: (target: ExternalAsset) => boolean): boolean;
removeCwd(value: unknown): string;
findAsset(value: string | URL, instance?: IModule | FindAssetOptions
removeAsset(file: ExternalAsset): boolean;
replace(file: ExternalAsset, replaceWith: string, mimeType: string | undefined): boolean;
replace(file: ExternalAsset, replaceWith: string, options?: ReplaceOptions): boolean;
rename(file: ExternalAsset, value: string): boolean;
performAsyncTask(): void;
removeAsyncTask(): void;
completeAsyncTask(err?: unknown, uri?: string, parent?: ExternalAsset, type?: number): void;
performFinalize(override?: boolean): void;
hasDocument(instance: IModule, document: string | string[] | undefined): boolean;
getDocumentAssets(instance: IModule, condition?: (target: ExternalAsset) => boolean): ExternalAsset[];
getDataSourceItems(instance: IModule, condition?: (target: DataSource) => boolean): DataSource[];
checkFilename(file: ExternalAsset, pathname?: string): string;
setLocalUri(file: ExternalAsset, replace?: boolean): FileOutput;
getLocalUri(data: FileData
getMimeType(data: FileData
openThread(instance: IModule, data: IFileThread, timeout?: number): boolean;
closeThread(instance: IModule | null, data: IFileThread, callback?: (...args: unknown[]) => void): boolean;
addProcessTimeout(instance: IModule, file: ExternalAsset, timeout: number): void;
removeProcessTimeout(instance: IModule, file: ExternalAsset): void;
getProcessTimeout(handler: InstallData): number;
clearProcessTimeout(): void;
scheduleTask(uri: string | URL, data: unknown, priority: number): Promise
scheduleTask(uri: string | URL, data: unknown, thenCallback?: (...args: unknown[]) => unknown, catchCallback?: (...args: unknown[]) => unknown, priority?: number): Promise
setTaskLimit(value: number): void;
addDownload(value: number | Buffer | string, encoding: BufferEncoding): number;
addDownload(value: number | Buffer | string, type?: number | BufferEncoding, encoding?: BufferEncoding): number;
getDownload(type?: number): [number, number];
checkHash(checksum: ChecksumValue, options: CheckHashOptions): boolean;
checkHash(checksum: ChecksumValue, data: Bufferable | null, uri: string | URL | undefined): boolean;
checkHash(checksum: ChecksumValue, data: Bufferable, options?: CheckHashOptions): boolean;
transformAsset(data: IFileThread, parent?: ExternalAsset, override?: boolean): Promise
addCopy(data: FileCommand
handleFilePermission(file: ExternalAsset): void;
findMime(file: ExternalAsset, rename?: boolean): Promise
getUTF8String(file: ExternalAsset, uri?: string): string;
getBuffer(file: ExternalAsset, minStreamSize?: number): Promise
getCacheDir(url: string | URL, createDir?: boolean): string;
setAssetContent(file: ExternalAsset, content: string, options?: AssetContentOptions): string;
getAssetContent(file: ExternalAsset, content?: string): string | undefined;
writeBuffer(file: ExternalAsset, options?: WriteFileOptions): Buffer | null;
writeImage(document: string | string[], output: OutputFinalize
compressFile(file: ExternalAsset, overwrite?: boolean): Promise
fetchObject(uri: string | URL, format: BufferFormat): Promise
/ Set /
add(value: string, parent?: ExternalAsset, type?: number): this;
delete(value: string, emptyDir?: boolean): boolean;
has(value: unknown): value is string;
/ EventEmitter /
on(event: "end", listener: PostFinalizeCallback): this;
on(event: "asset:permission", listener: (file: ExternalAsset) => void): this;
once(event: "end", listener: PostFinalizeCallback): this;
once(event: "asset:permission", listener: (file: ExternalAsset) => void): this;
emit(event: "end", result: FinalizeResult): boolean;
emit(event: "asset:permission", file: ExternalAsset): boolean;
}
interface FileManagerConstructor extends HostConstructor {
purgeMemory(percent?: number, limit?: number | boolean, parent?: number | boolean): Promise
loadSettings(settings: Settings, password?: string): boolean;
loadSettings(settings: Settings, permission?: PermissionReadWrite, password?: string): boolean;
sanitizeAssets(assets: ExternalAsset[], exclusions?: string[]): ExternalAsset[];
writeChecksum(root: string, options: ChecksumOptions): Promise
writeChecksum(root: string, to?: string, options?: ChecksumOptions): Promise
verifyChecksum(root: string, options: ChecksumOptions): Promise<[string[], string[], number] | null>;
verifyChecksum(root: string, from?: string, options?: ChecksumOptions): Promise<[string[], string[], number] | null>;
createFileThread(host: IFileManager, file: ExternalAsset): IFileThread;
setTimeout(options: Record
defineHttpCache(options: HttpMemorySettings, disk?: boolean): void;
defineHttpConnect(options: HttpConnectSettings): void;
generateSessionId(): string;
readonly prototype: IFileManager;
new(baseDirectory: string, config: RequestData, postFinalize?: PostFinalizeCallback): IFileManager;
new(baseDirectory: string, config: RequestData, permission?: IPermission | null, postFinalize?: PostFinalizeCallback): IFileManager;
}
`
`typescript
import type { BackgroundColor, ForegroundColor, LoggerProgress } from "./logger";
interface ProcessModule {
thread?: {
sub_limit?: number;
};
}
interface MemoryModule {
settings?: {
stats?: {
file_count?: boolean;
};
};
}
interface RequestModule {
timeout?: number | string;
disk?: {
enabled?: boolean;
expires?: number | string;
limit?: number | string;
include?: string[];
exclude?: string[];
};
buffer?: {
enabled?: boolean;
expires?: number | string;
limit?: number | string;
include?: string[];
exclude?: string[];
limit_all?: number | string;
purge_amount?: number | string;
to_disk?: number | string | [number | string, (number | string)?];
};
connect?: {
timeout?: number | string;
retry_wait?: number | string;
retry_after?: number | string;
retry_limit?: number;
redirect_limit?: number;
};
}
interface ErrorModule {
retry_limit?: number;
}
interface LoggerModule {
progress?: LoggerProgress;
session_id?: boolean | number;
}
`
`javascript
const FileManager = require("@e-mc/file-manager");
FileManager.loadSettings({ // Global
process: {
thread: { sub_limit: 16 }
},
request: {
timeout: "15s",
disk: {
enabled: true,
limit: "1gb", // Content-Length
expires: "1d",
exclude: ["https://github.com", "zip"]
},
buffer: {
enabled: true,
limit: "64mb",
limit_all: "512mb",
expires: "1h",
purge_amount: 0.25 // When limit_all exceeded
}
},
permission: {
disk_read: ["*/"],
disk_write: ["/tmp/**"]
}
});
const requestData = {
assets: [
{ uri: "http://hostname/path/document1.png" }, // /path/workspace/document1.png
{ pathname: "output", uri: "http://hostname/path/unknown", mimeType: "image/png" }, // /path/workspace/output/unknown.png
{ pathname: "output", filename: "image2.png", uri: "http://hostname/path/document2.png" } // /path/workspace/output/image2.png
],
incremental: "etag",
threads: 8,
log: {
showSize: true,
showProgress: true,
showDiff: [
"*/assets/.js", // Local path
"javascript", // application/javascript | text/javascript
"text/css"
]
}
};
const instance = new FileManager("/path/workspace", requestData, { disk_write: ["/path/workspace/output/**"] });
await instance.start();
`
NOTE: FileManager is a sub-class of Host and Module. Their loadSettings` will be called as well which uses a combined Settings object.
- https://www.unpkg.com/@e-mc/types@0.13.8/lib/squared.d.ts
- https://www.unpkg.com/@e-mc/types@0.13.8/lib/asset.d.ts
- https://www.unpkg.com/@e-mc/types@0.13.8/lib/core.d.ts
- https://www.unpkg.com/@e-mc/types@0.13.8/lib/filemanager.d.ts
- https://www.unpkg.com/@e-mc/types@0.13.8/lib/logger.d.ts
- https://www.unpkg.com/@e-mc/types@0.13.8/lib/module.d.ts
- https://www.unpkg.com/@e-mc/types@0.13.8/lib/node.d.ts
- https://www.unpkg.com/@e-mc/types@0.13.8/lib/request.d.ts
- https://www.unpkg.com/@e-mc/types@0.13.8/lib/settings.d.ts
* https://www.npmjs.com/package/@types/node
BSD 3-Clause