@arc-fusion/cli
Version:
CLI for running Arc Fusion on your local machine
79 lines (61 loc) • 2.01 kB
JavaScript
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