@flatfile/plugin-zip-extractor
Version:
A plugin for unzipping zip files and uploading content back in Flatfile.
1 lines • 5.93 kB
Source Map (JSON)
{"version":3,"sources":["../src/index.ts"],"names":["api","FlatfileClient","ZipExtractor","options","listener","event","fileId","file","jobs","Flatfile","jobHandler","tick","spaceId","environmentId","buffer","getFileBuffer","zip","AdmZip","zipEntries","zipEntry","zipEntryCount","i","asyncForEach","tmpdir","filePath","path","logInfo","stream","fs","e","zipExtractorPlugin"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { FlatfileEvent, FlatfileListener } from '@flatfile/listener'\nimport type { TickFunction } from '@flatfile/plugin-job-handler'\n\nimport { Flatfile, FlatfileClient } from '@flatfile/api'\nimport { jobHandler } from '@flatfile/plugin-job-handler'\nimport { logInfo } from '@flatfile/util-common'\nimport { getFileBuffer } from '@flatfile/util-file-buffer'\nimport AdmZip from 'adm-zip'\nimport fs from 'fs'\nimport { asyncForEach } from 'modern-async'\nimport { tmpdir } from 'os'\nimport path from 'path'\n\nconst api = new FlatfileClient()\nexport interface PluginOptions {\n readonly debug?: boolean\n}\n\nexport const ZipExtractor = (options: PluginOptions = {}) => {\n return (listener: FlatfileListener) => {\n listener.on('file:created', async (event) => {\n const { fileId } = event.context\n const { data: file } = await api.files.get(fileId)\n if (file.mode === 'export') {\n return\n }\n\n if (!file.name.endsWith('.zip')) {\n return\n }\n\n const jobs = await api.jobs.create({\n type: Flatfile.JobType.File,\n operation: 'extract-plugin-zip',\n status: Flatfile.JobStatus.Ready,\n source: fileId,\n })\n await api.jobs.execute(jobs.data.id)\n })\n listener.use(\n jobHandler(\n { operation: 'extract-plugin-zip' },\n async (event: FlatfileEvent, tick: TickFunction) => {\n const { spaceId, environmentId } = event.context\n\n try {\n await tick(1, 'Unzipping file')\n const buffer = await getFileBuffer(event)\n const zip = new AdmZip(buffer)\n const zipEntries = zip\n .getEntries()\n .filter(\n (zipEntry) =>\n !zipEntry.name.startsWith('.') &&\n !zipEntry.entryName.startsWith('__MACOSX') &&\n !zipEntry.isDirectory\n )\n const zipEntryCount = zipEntries.length\n\n await tick(10, 'Uploading files')\n let i = 0\n await asyncForEach(zipEntries, async (zipEntry) => {\n zip.extractEntryTo(zipEntry, tmpdir(), false, true)\n const filePath = path.join(tmpdir(), zipEntry.name)\n if (options.debug) {\n logInfo(\n '@flatfile/plugin-zip-extractor',\n `filePath ${filePath}`\n )\n }\n const stream = fs.createReadStream(filePath)\n await api.files.upload(stream, {\n spaceId,\n environmentId,\n })\n await fs.promises.unlink(filePath)\n await tick(\n 10 + Math.round(((i + 1) / zipEntryCount) * 89),\n 'File uploaded'\n )\n i++\n })\n\n return {\n outcome: {\n message: 'Extraction complete',\n },\n } as Flatfile.JobCompleteDetails\n } catch (e) {\n logInfo('@flatfile/plugin-zip-extractor', `error ${e}`)\n throw new Error(`Extraction failed ${e.message}`)\n }\n }\n )\n )\n }\n}\n\n/*\n * @deprecated use `ZipExtractor` instead\n */\nexport const zipExtractorPlugin = ZipExtractor\n"]}