diff --git a/src/cli.ts b/src/cli.ts index 37596d3..2399253 100644 --- a/src/cli.ts +++ b/src/cli.ts @@ -6,7 +6,7 @@ import { } from './utils'; import { sassBuild, sassBuildFiles, sassBuildString } from './build'; import { sassCompile } from './compile'; -import { migrateCompilerConfig } from './config-migrate'; +import { migrate } from './migrate'; import { buildConfig } from './config-build'; const commandMap = { @@ -231,12 +231,12 @@ function cli_compile(params) { // eslint-disable-next-line camelcase function cli_migrate(params) { - const { file, outFile } = params; + const { file, outFile, transformer } = params; const src = file || COMPILER_CONFIG; const dest = outFile || SASS_CONFIG; - migrateCompilerConfig( src, dest ); + migrate( src, dest, transformer ); } diff --git a/src/config-migrate.ts b/src/migrate/complier-config-transformer.ts similarity index 59% rename from src/config-migrate.ts rename to src/migrate/complier-config-transformer.ts index 78c6f5c..ccd4c7c 100644 --- a/src/config-migrate.ts +++ b/src/migrate/complier-config-transformer.ts @@ -1,12 +1,11 @@ +import fs from 'fs'; + import { exit, - logger, - requireUserFile, - fileExists, - writeFile -} from './utils'; + fileExists +} from '../utils'; -type CompilerConfigFileEntry = { +type CompilerConfigEntry = { inputFile: string; outputFile: string; minify: { @@ -18,16 +17,13 @@ type CompilerConfigFileEntry = { } } -export function migrateCompilerConfig(src : string, dest : string) { - - if (!fileExists(src)) { - exit(2, 'error', 'migrate', `Cannot find file ${src}`); +export function compilerConfigTransformer(pathToConfig: string) { + if (!fileExists(pathToConfig)) { + exit(2, 'error', 'migrate > transformer', `Cannot find file ${pathToConfig}`); } - logger.silly('migrate', 'Found %s.', src); - logger.silly('migrate', ' Migrating...'); + const compilerConfigJson : CompilerConfigEntry[] = JSON.parse(fs.readFileSync( pathToConfig, 'utf-8' )); - const compilerConfigContent : CompilerConfigFileEntry[] = requireUserFile(src); let sassConfigContent : any = { extends: [ 'sass-build:recommended' @@ -35,7 +31,7 @@ export function migrateCompilerConfig(src : string, dest : string) { files: [] }; - compilerConfigContent.forEach(oldEntry => { + compilerConfigJson.forEach(oldEntry => { const newEntry = { file: oldEntry.inputFile, outFile: oldEntry.outputFile, @@ -52,8 +48,5 @@ export function migrateCompilerConfig(src : string, dest : string) { return space + word.replaceAll('"', ''); }); - writeFile( dest, sassConfigContent ); - - logger.info('migrate', 'Successfully migrated %s to %s', src, dest ); - + return sassConfigContent; } diff --git a/src/migrate/index.ts b/src/migrate/index.ts new file mode 100644 index 0000000..ea18a05 --- /dev/null +++ b/src/migrate/index.ts @@ -0,0 +1 @@ +export * from './migrate'; diff --git a/src/migrate/migrate.ts b/src/migrate/migrate.ts new file mode 100644 index 0000000..8883c53 --- /dev/null +++ b/src/migrate/migrate.ts @@ -0,0 +1,37 @@ +import { + exit, + logger, + requireUserFile, + fileExists, + writeFile +} from '../utils'; +import { compilerConfigTransformer } from './complier-config-transformer'; + + +export function migrate(src: string, dest: string, transformer: string | Function = compilerConfigTransformer) { + + if (!fileExists(src)) { + exit(2, 'error', 'migrate', `Cannot find file ${src}`); + } + + if (typeof transformer === 'string') { + if (!fileExists(transformer)) { + exit(2, 'error', 'migrate', `Cannot find file ${src}`); + } + // eslint-disable-next-line no-param-reassign + transformer = requireUserFile(transformer); + } + + if (typeof transformer !== 'function') { + exit(22, 'error', 'migrate', `Transformer is not a function.`); + } + + logger.silly('migrate', 'Found %s.', src); + logger.silly('migrate', ' Migrating...'); + + const sassConfigContent = transformer( src ); + + writeFile( dest, sassConfigContent ); + + logger.info('migrate', 'Successfully migrated %s to %s', src, dest ); +}