UNPKG

1.73 kBJavaScriptView Raw
1const path = require('path');
2const { default: PQueue } = require('p-queue');
3
4const { uploadFile } = require('./api/fileManager');
5const { walk } = require('./lib/walk');
6const { logger } = require('./logger');
7const { createIgnoreFilter } = require('./ignoreRules');
8const escapeRegExp = require('./lib/escapeRegExp');
9const { convertToUnixPath } = require('./path');
10const {
11 ApiErrorContext,
12 logApiUploadErrorInstance,
13 isFatalError,
14} = require('./errorHandlers');
15
16const queue = new PQueue({
17 concurrency: 10,
18});
19
20/**
21 *
22 * @param {number} portalId
23 * @param {string} src
24 * @param {string} dest
25 * @param {object} options
26 */
27async function uploadFolder(portalId, src, dest, { cwd }) {
28 const regex = new RegExp(`^${escapeRegExp(src)}`);
29 const files = await walk(src);
30
31 const filesToUpload = files.filter(createIgnoreFilter(cwd));
32
33 return queue.addAll(
34 filesToUpload.map(file => {
35 const relativePath = file.replace(regex, '');
36 const destPath = convertToUnixPath(path.join(dest, relativePath));
37 return async () => {
38 logger.debug('Attempting to upload file "%s" to "%s"', file, destPath);
39 try {
40 await uploadFile(portalId, file, destPath);
41 logger.log('Uploaded file "%s" to "%s"', file, destPath);
42 } catch (error) {
43 logger.error('Uploading file "%s" to "%s" failed', file, destPath);
44 if (isFatalError(error)) {
45 throw error;
46 }
47 logApiUploadErrorInstance(
48 error,
49 new ApiErrorContext({
50 portalId,
51 request: destPath,
52 payload: file,
53 })
54 );
55 }
56 };
57 })
58 );
59}
60
61module.exports = {
62 uploadFolder,
63};