UNPKG

@strapi/data-transfer

Version:

Data transfer capabilities for Strapi

59 lines (55 loc) 1.77 kB
'use strict'; var fs = require('fs'); var path = require('path'); var stream = require('stream'); /** * JSONL writer that mirrors {@link createTarEntryStream} but writes files under a root directory. */ const createDirectoryJsonlWriter = (rootDir, pathFactory, maxSize = 2.56e8)=>{ let fileIndex = 0; let buffer = ''; const resolvePath = (posixName)=>path.join(rootDir, ...posixName.split('/')); const flush = async ()=>{ if (!buffer) { return; } fileIndex += 1; const name = pathFactory(fileIndex); const targetPath = resolvePath(name); await fs.promises.mkdir(path.dirname(targetPath), { recursive: true }); await fs.promises.writeFile(targetPath, buffer, 'utf8'); buffer = ''; }; const push = (chunk)=>{ buffer += chunk; }; return new stream.Writable({ async final (callback) { try { await flush(); callback(); } catch (err) { callback(err instanceof Error ? err : new Error(String(err))); } }, async destroy (err, callback) { await flush(); callback(err); }, async write (chunk, _encoding, callback) { const size = chunk.length; if (chunk.length > maxSize) { callback(new Error(`payload too large: ${chunk.length}>${maxSize}`)); return; } if (buffer.length + size > maxSize) { await flush(); } push(chunk); callback(null); } }); }; exports.createDirectoryJsonlWriter = createDirectoryJsonlWriter; //# sourceMappingURL=utils.js.map