UNPKG

@arc-fusion/cli

Version:

CLI for running Arc Fusion on your local machine

79 lines (61 loc) 2.01 kB
'use strict' const fs = require('fs') const path = require('path') const { promisify } = require('util') const glob = promisify(require('glob')) const rename = promisify(fs.rename.bind(fs)) // search for all extensions to ensure we catch all output-types const extensions = [ 'js', 'jsx', 'ts', 'tsx' ] const WILDCARD_LEVELS = { features: 2 } const isTest = (f) => /(\/_+(tests?|snapshots?)_+\/|\.test\.js|\.snap$)/.test(f) const isNotTest = (f) => !isTest(f) function arrayGlob (items) { return (items && items.length > 1) ? `{${items.join(',')}}` : (items && items.length) ? items[0] : '' } async function migrate (projectRoot) { projectRoot = projectRoot || require('../environment').PROJECT_ROOT async function getCollection (collection, outputTypes) { const wildcardLevels = WILDCARD_LEVELS[collection] || 1 const wildcardGlob = `${path.sep}*`.repeat(wildcardLevels) const extensionGlob = `.${arrayGlob(extensions)}` const genericFiles = await glob( path.join(projectRoot, 'components', collection, `${wildcardGlob}${extensionGlob}`), { nodir: true } ) const specificFiles = (outputTypes && outputTypes.length) ? await glob( path.join(projectRoot, 'components', collection, wildcardGlob, `${arrayGlob(outputTypes)}${extensionGlob}`), { nodir: true } ) : [] return genericFiles .concat(specificFiles) .filter(isNotTest) } const outputTypeFiles = await getCollection('output-types') const outputTypes = outputTypeFiles .map((filePath) => path.parse(filePath).name) const componentFiles = [].concat( outputTypeFiles, await getCollection('chains', outputTypes), await getCollection('features', outputTypes), await getCollection('layouts', outputTypes) ) return Promise.all( componentFiles .filter((filePath) => !filePath.endsWith('x')) .map((filePath) => rename(filePath, `${filePath}x`)) ) } module.exports = migrate