UNPKG

@arc-fusion/cli

Version:

CLI for running Arc Fusion on your local machine

83 lines (64 loc) 2.05 kB
'use strict' const path = require('path') const { glob } = require('glob') const { rename } = require('fs/promises') 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] : '' } const extensionGlob = `.${arrayGlob(extensions)}` async function getCollection (projectRoot, collection, outputTypes) { const wildcardLevels = WILDCARD_LEVELS[collection] || 1 const wildcardGlob = `${path.sep}*`.repeat(wildcardLevels) const baseDir = path.join(projectRoot, 'components', collection) const genericFiles = await glob( path.join(baseDir, `${wildcardGlob}${extensionGlob}`), { nodir: true } ) const specificFiles = outputTypes && outputTypes.length ? await glob( path.join( baseDir, wildcardGlob, `${arrayGlob(outputTypes)}${extensionGlob}` ), { nodir: true } ) : [] return genericFiles.concat(specificFiles).filter(isNotTest) } async function migrate (projectRoot) { projectRoot = projectRoot || require('../environment').PROJECT_ROOT const outputTypeFiles = await getCollection(projectRoot, 'output-types') const outputTypes = outputTypeFiles.map( (filePath) => path.parse(filePath).name ) const [chainFiles, featureFiles, layoutFiles] = await Promise.all([ getCollection(projectRoot, 'chains', outputTypes), getCollection(projectRoot, 'features', outputTypes), getCollection(projectRoot, 'layouts', outputTypes) ]) const componentFiles = [].concat( outputTypeFiles, chainFiles, featureFiles, layoutFiles ) return Promise.all( componentFiles .filter((filePath) => !filePath.endsWith('x')) .map((filePath) => rename(filePath, `${filePath}x`)) ) } module.exports = migrate