export async function readZip()

in src/zip.ts [15:46]


export async function readZip(packagePath: string, filter: (name: string) => boolean): Promise<Map<string, Buffer>> {
	const zipfile = await new Promise<ZipFile>((c, e) =>
		open(packagePath, { lazyEntries: true }, (err, zipfile) => (err ? e(err) : c(zipfile!)))
	);

	return await new Promise((c, e) => {
		const result = new Map<string, Buffer>();

		zipfile.once('close', () => c(result));

		zipfile.readEntry();
		zipfile.on('entry', (entry: Entry) => {
			const name = entry.fileName.toLowerCase();

			if (filter(name)) {
				zipfile.openReadStream(entry, (err, stream) => {
					if (err) {
						zipfile.close();
						return e(err);
					}

					bufferStream(stream!).then(buffer => {
						result.set(name, buffer);
						zipfile.readEntry();
					});
				});
			} else {
				zipfile.readEntry();
			}
		});
	});
}