import * as path from 'path' import * as fs from 'fs' import { wrapper, TypeToolProp, TypeOnEveryFile, TypeOnBody, TypeToolOptions } from '@asset-toolkit/core' import { exiftool } from 'exiftool-vendored' export interface TypeProps extends TypeToolOptions {} /** * A tool to extract exif data to json file. * https://photostructure.github.io/exiftool-vendored.js/ * @param props - { pathIn, pathOut } * @param options - { raw, tags } * @returns { Promise(returns) } */ const exifExtractor: (_props: TypeToolProp, options?: TypeProps) => Promise = wrapper( ({ pathIn, pathOut, file, next, log }: TypeOnEveryFile) => { exiftool .read(path.resolve(pathIn || pathOut, file)) .then((tags: any) => { fs.writeFile(path.resolve(pathOut, file + '.json'), JSON.stringify(tags, null, ' '), {}, () => { log(file + '.json') next() }) }) .catch((err: any) => console.error('Something terrible happened: ', err)) }, ({ log }: TypeOnBody) => new Promise(resolve => { exiftool.end() resolve() }), { name: 'Exif Extractor' }, ) export default exifExtractor