UNPKG

@focuson/cod

Version:

A command line tool to help with the code on demand

53 lines (52 loc) 2.33 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.TsxTransformer = void 0; const path = require('path'); const babel = require("@babel/core"); class TsxTransformer { constructor(files) { this.remoteImportStatementsAndBlankNewLines = (contents) => { return contents. // replace(/^import.*$/gm, ''). // replace(/^\s*[\r\n]/gm, ''). // replace(/^\s*export /gm, ''); }; this.toFileName = (sourceAndTargetDir) => (parsedPath, sha) => path.parse(path.join(sourceAndTargetDir.targetDir, parsedPath.base)); this.files = files; } transformTheCodeAfterBabel(result, file) { const fileNameNoExt = path.parse(file).name; const babelCode = result.replace('"use strict";', '').trim(); const appendStr = `return ${fileNameNoExt};`; const transformedContents = `${babelCode} ${appendStr}`; return transformedContents; } checkResult(file, result) { if (result == null) throw new Error(`Could not compile ${file}` + result); return result; } transformCode(contents, file) { return babel.transformAsync(this.remoteImportStatementsAndBlankNewLines(contents)) .then((result) => this.transformTheCodeAfterBabel(result.code, file)) .then(this.checkResult(file, contents)); } loadAndTransformOneFile(sourceAndTargetDir) { return file => { let parsedPath = path.parse(path.join(sourceAndTargetDir.sourceDir, file)); return this.files.copyTransformAndSaveFileForContentAddressableData(parsedPath, this.transformCode, this.toFileName(sourceAndTargetDir)); }; } loadAndtransformAllFiles(sourceAndTargetDir) { this.validate(sourceAndTargetDir); return this.files.forEachFile(sourceAndTargetDir.sourceDir)(this.loadAndTransformOneFile(sourceAndTargetDir)); } validate(sourceAndTargetDir) { return Promise.all([ this.files.validateDirectoryExists("Source Directory", sourceAndTargetDir.sourceDir), this.files.validateDirectoryExists("Target Directory", sourceAndTargetDir.targetDir) ]); } } exports.TsxTransformer = TsxTransformer;