Skip to content

Editor

ts
/// <reference types="node" resolution-mode="require"/>
import { LoomFile } from './file.js';
import { LineResult, SearchResult } from '../helper/result.js';
import { TextItemList } from '../helper/textItemList.js';
import { FileHandler, SourceAdapter } from '../definitions.js';
interface ReadWrite {
    getSizeInBytes(): Promise<number>;
}
export interface Reader extends ReadWrite {
    search(value: string | Buffer): Promise<SearchResult | undefined>;
    searchFirst(value: string | Buffer): Promise<SearchResult | undefined>;
    searchFirst(value: string | Buffer, start: number): Promise<SearchResult | undefined>;
    searchLast(value: string | Buffer): Promise<SearchResult | undefined>;
    searchLast(value: string | Buffer, start: number): Promise<SearchResult | undefined>;
    read(start: number, length: number): Promise<Buffer>;
    close(): Promise<void>;
}
export interface ReaderInternal extends Reader {
    loopForward(value: Buffer, first: number, last: number): Promise<TextItemList | undefined>;
    loopReverse(value: Buffer, first: number, last: number): Promise<TextItemList | undefined>;
}
export interface Writer {
    close(): Promise<void>;
}
export declare class Editor implements Reader, Writer, ReaderInternal, Disposable {
    protected ref: LoomFile;
    protected file: FileHandler;
    protected chunkSize: number;
    protected lineInfo: TextItemList | undefined;
    protected newLineCharacter: Buffer;
    protected currentLine: number;
    protected EOF: boolean;
    static from(adapter: SourceAdapter, file: LoomFile): Promise<Editor>;
    constructor(ref: LoomFile, file: FileHandler);
    /**
     * Get the raw file handle
     */
    get raw(): FileHandler;
    getSizeInBytes(): Promise<number>;
    /**
     * Close the file
     */
    close(): Promise<void>;
    /**
     * Symbol to close automatically with using
     */
    [Symbol.asyncDispose](): Promise<void>;
    [Symbol.dispose](): void;
    /**
     * Alias for searchFirst
     *
     * @param value - value to search
     * @returns
     */
    search(value: string | Buffer): Promise<SearchResult | undefined>;
    /**
     * Search for a string in the file by chunking the file into pieces to avoid memory overflow.
     * set start to 'EOF' to search from the end of the file.
     *
     * @param value - value to search
     * @param start - start position in the file
     */
    searchFirst(value: string | Buffer, start?: number): Promise<SearchResult | undefined>;
    /**
     * Search for a string in the file by chunking the file into pieces to avoid memory overflow.
     * set start to 'EOF' to search from the end of the file.
     *
     * @param value - value to search
     * @param start - last value included in the search
     */
    searchLast(value: string | Buffer, start?: number): Promise<SearchResult | undefined>;
    protected calcChunkSize(valueLength: number): number;
    loopForward(value: Buffer, first: number, last: number): Promise<TextItemList | undefined>;
    loopReverse(value: Buffer, first: number | undefined, last: number): Promise<TextItemList | undefined>;
    protected searchInChunk(value: Buffer, chunk: Buffer): number[];
    /**
     * Generate the next chunk position and length for fs.read function
     *
     * @param current - Start position of the last chunk
     * @param chunkSize - chunk size of the last chunk
     * @param valueLength - length of the value to search
     * @param min - minimum positive position in file
     * @returns
     */
    protected loopReverseCalcNextChunk(current: number, chunkSize: number, valueLength: number, min: number): {
        position: number;
        length: number;
    };
    protected convertChunkMatchesToItems(matches: number[], valueLength: number, chunkPosition: number, isReverseRead?: boolean): TextItemList | undefined;
    /**
     * Read a chunk of the file
     *
     * @param start - start position in the file
     * @param length - length of the data to read
     * @returns - return a buffer with the data read from the file
     */
    read(start: number, length: number): Promise<Buffer>;
    protected handleFileWithOnlyOneLine(separator: Buffer): Promise<LineResult>;
    /**
     * Analyze the file junkvisely till the first line is found
     * and return a LineResult object to read the line or step to the next one.
     *
     * @param separator - line separator to use, default is new line character LF
     * @returns - return a LineResult object witch allow you to read line by line forward (next) and backward (prev)
     */
    firstLine(separator?: Buffer | string): Promise<LineResult>;
    /**
     * Analyze the file junkvisely from the end till the last line is found
     * and return a LineResult object to read the line or step to the previous one.
     *
     * @param separator - line separator to use, default is new line character LF
     * @returns - return a LineResult object witch allow you to read line by line forward (next) and backward (prev)
     */
    lastLine(separator?: Buffer | string): Promise<LineResult>;
    get [Symbol.toStringTag](): string;
}
export {};