import { a as AbstractTokenizer, o as EndOfStreamError, r as fromStream$1 } from "./core-BsQGdXTu.js";
import { open, stat } from "node:fs/promises";

//#region node_modules/.pnpm/strtok3@10.3.4/node_modules/strtok3/lib/FileTokenizer.js
var FileTokenizer = class FileTokenizer extends AbstractTokenizer {
	/**
	* Create tokenizer from provided file path
	* @param sourceFilePath File path
	*/
	static async fromFile(sourceFilePath) {
		const fileHandle = await open(sourceFilePath, "r");
		return new FileTokenizer(fileHandle, { fileInfo: {
			path: sourceFilePath,
			size: (await fileHandle.stat()).size
		} });
	}
	constructor(fileHandle, options) {
		super(options);
		this.fileHandle = fileHandle;
		this.fileInfo = options.fileInfo;
	}
	/**
	* Read buffer from file
	* @param uint8Array - Uint8Array to write result to
	* @param options - Read behaviour options
	* @returns Promise number of bytes read
	*/
	async readBuffer(uint8Array, options) {
		const normOptions = this.normalizeOptions(uint8Array, options);
		this.position = normOptions.position;
		if (normOptions.length === 0) return 0;
		const res = await this.fileHandle.read(uint8Array, 0, normOptions.length, normOptions.position);
		this.position += res.bytesRead;
		if (res.bytesRead < normOptions.length && (!options || !options.mayBeLess)) throw new EndOfStreamError();
		return res.bytesRead;
	}
	/**
	* Peek buffer from file
	* @param uint8Array - Uint8Array (or Buffer) to write data to
	* @param options - Read behaviour options
	* @returns Promise number of bytes read
	*/
	async peekBuffer(uint8Array, options) {
		const normOptions = this.normalizeOptions(uint8Array, options);
		const res = await this.fileHandle.read(uint8Array, 0, normOptions.length, normOptions.position);
		if (!normOptions.mayBeLess && res.bytesRead < normOptions.length) throw new EndOfStreamError();
		return res.bytesRead;
	}
	async close() {
		await this.fileHandle.close();
		return super.close();
	}
	setPosition(position) {
		this.position = position;
	}
	supportsRandomAccess() {
		return true;
	}
};

//#endregion
//#region node_modules/.pnpm/strtok3@10.3.4/node_modules/strtok3/lib/index.js
/**
* Construct ReadStreamTokenizer from given Stream.
* Will set fileSize, if provided given Stream has set the .path property.
* @param stream - Node.js Stream.Readable
* @param options - Pass additional file information to the tokenizer
* @returns Tokenizer
*/
async function fromStream(stream, options) {
	const rst = fromStream$1(stream, options);
	if (stream.path) {
		const stat$1 = await stat(stream.path);
		rst.fileInfo.path = stream.path;
		rst.fileInfo.size = stat$1.size;
	}
	return rst;
}
const fromFile = FileTokenizer.fromFile;

//#endregion
export { fromStream as n, fromFile as t };