@focuson/cod
Version:
A command line tool to help with the code on demand
53 lines (52 loc) • 2.33 kB
JavaScript
;
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;