convert spreadsheet | collect google sheets resources | convert sheet helper functions | Search

The code requires several modules for file system operations and importing functionality, and defines three main functions: initSync, copyAllFiles, and importTest. The importTest function imports sheet resources, filters out existing files, and returns a promise resolving with new files to be copied, using copyAllFiles and initSync functions.

Run example

npm run import -- "sheet to web"

sheet to web

var fs = require('fs');
var path = require('path');
var importer = require('../Core');
var getEnvironment = importer.import("get environment");
var importSheet = importer.import("sheet marketing import");
var {glob} = importer.import("glob files")
var streamToGoogle

function initSync(env) {
    getEnvironment(env || process.env.ENVIRONMENT || 'TEST_SPREADSHEET');
    if((process.env.ENVIRONMENT || '').includes('LOCAL')
    || (process.env.ENVIRONMENT || '').includes('TEST')
    || !(process.env.ENVIRONMENT || '').includes('DEPLOY')) {
        streamToGoogle = importer.import("test stream to output");
    } else {
        streamToGoogle = importer.import("upload files google cloud");
    }
}

initSync(process.env.ENVIRONMENT);

var copyAllFiles = (resources, bucketName) => Promise.all(resources
    .map(f => f && streamToGoogle(path.basename(f),
                                  bucketName,
                                  fs.createReadStream(f))
        .catch(e => console.error(e))))

async function importTest(link, domain, env) {
    if(env) {
        initSync(env)
    }
    var resources = await importSheet(link, domain)
    // TODO: fix google storage check
    if(process.env.PROJECT_OUTPUT) {
        var existingFiles = glob(resources
            .map(r => `**/*${path.basename(r)}*`), process.env.PROJECT_OUTPUT)
        resources = resources.filter(r => existingFiles.filter(e => e.includes(path.basename(r))).length == 0)
        console.log(resources)
    }
    var newFiles = glob(resources
        .map(r => `**/*${path.basename(r)}*`), process.env.DOWNLOAD_PATH)
    resources = resources.filter(r => newFiles.filter(e => e.includes(path.basename(r))).length == 0)
    var desktopFiles = glob(resources
        .map(r => `**/*${path.basename(r)}*`), path.join(process.env.DOWNLOAD_PATH, '../Desktop'))
    var pictureFiles = glob(resources
        .map(r => `**/*${path.basename(r)}*`), path.join(process.env.DOWNLOAD_PATH, '../Pictures'))
    return copyAllFiles(newFiles.concat(desktopFiles).concat(pictureFiles), domain)
}

module.exports = importTest;

What the code could have been:

const fs = require('fs');
const path = require('path');
const { glob } = require('glob');
const importer = require('../Core');

const getEnvironment = importer.import('get environment');
const importSheet = importer.import('sheet marketing import');
const streamToGoogle = importer.import('stream to google');

class FileExporter {
  constructor(env) {
    this.env = env;
    this.streamToGoogle = this.getStreamToGoogle();
  }

  getStreamToGoogle() {
    if ([
      'LOCAL',
      'TEST',
    ].some(mode => this.env.includes(mode)) &&!this.env.includes('DEPLOY')) {
      return importer.import('test stream to output');
    }
    return importer.import('upload files google cloud');
  }

  initSync() {
    getEnvironment(this.env || process.env.ENVIRONMENT || 'TEST_SPREADSHEET');
  }

  async importTest(link, domain) {
    this.initSync();

    const resources = await importSheet(link, domain);
    const filesToCopy = this.getFilesToCopy(resources, process.env.PROJECT_OUTPUT || '');
    const newFiles = this.getFilesToCopy(resources, process.env.DOWNLOAD_PATH);
    const desktopFiles = this.getFilesToCopy(resources, path.join(process.env.DOWNLOAD_PATH, '../Desktop'));
    const pictureFiles = this.getFilesToCopy(resources, path.join(process.env.DOWNLOAD_PATH, '../Pictures'));
    return Promise.all(newFiles.concat(desktopFiles).concat(pictureFiles)
     .map(file => this.streamToGoogle(path.basename(file), domain, fs.createReadStream(file)))
     .catch(e => console.error(e)));
  }

  getFilesToCopy(resources, directory) {
    const existingFiles = glob(resources.map(r => `**/*${path.basename(r)}*`), directory);
    return resources.filter(r => existingFiles.filter(e => e.includes(path.basename(r))).length === 0);
  }
}

module.exports = (link, domain, env = process.env.ENVIRONMENT) => {
  return new FileExporter(env).importTest(link, domain);
};

Code Breakdown

Requires and Imports

initSync Function

copyAllFiles Function

importTest Function

Observations and Suggestions