Home Reference Source

packages/skygear-core/lib/asset_collect.js

import path from 'path';
import fs from 'fs';
import {ncp} from 'ncp';
import {execSync} from 'child_process';

import {
  settings
} from './cloud/settings';
import registry from './cloud/registry';

let cmd = 'index.js';
if (process.argv.length > 2) {
  cmd = process.argv[2];
}

if (cmd === '--help') {
  process.stdout.write(`
  Usage: skygear-asset <file>

  file will default to index.js if not provided.
  For configuration, please see skygear-node. Which provided details.
  `);

  process.exit();
}

const codePath = path.join(process.cwd(), cmd);
require(codePath);

if (fs.existsSync(settings.collectAsset)) {
  if (!settings.forceAsset) {
    process.stdout.write(`Directory '${settings.collectAsset}' already exists.
Remove the directory first, or specify FORCE_ASSET to discard files
in the directory.
`);
    process.exit();
  }
  execSync('rm -r ' + settings.collectAsset);
  console.log(`Cleaned up ${settings.collectAsset}`);
}

fs.mkdirSync(settings.collectAsset);

Object.keys(registry.staticAsset).forEach(function (key) {
  const src = registry.staticAsset[key]();
  const dest = path.join(settings.collectAsset, key);
  console.log(`Copying ${src} into ${dest}`);
  ncp(src, dest, function (err) {
    if (err) {
      return console.error(err);
    }
    console.log(`Copied ${src} into ${dest}`);
  });
});

// Force the process to exit because we might have imported code
// that queued a callback.
process.exit();