UNPKG

budgie-cli

Version:
106 lines 4.68 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); const os_1 = require("os"); const ts_budgie_1 = require("ts-budgie"); const ts = require("typescript"); const extensions_1 = require("../../utils/extensions"); const values_1 = require("../../utils/values"); const budgieConverter_1 = require("../budgieConverter"); const converter_1 = require("../converter"); /** * Extension for TypeScript files. */ exports.tsExtension = ".ts"; /** * Creates TS source files for each file name. * * @param existingFileContents Writable cache of contents of file paths, keyed by unique file name. * @param scriptTarget Specified TypeScript language output target. * @returns TypeScript source files, keyed by unique file path. */ const createSourceFilesMap = (existingFileContents, scriptTarget) => { const map = new Map(); existingFileContents.forEach((fileContents, fileName) => { map.set(fileName, ts.createSourceFile(fileName, fileContents, scriptTarget, true, ts.ScriptKind.TS)); }); return map; }; /** * @todo Use this once ts-budgie supports emitting a summary of unsupported syntax. */ exports.complainForTransformation = (sourceFile, complaint) => { const { text } = sourceFile; const { start } = complaint.range; const line = text.substring(0, start).split(/\r\n|\r|\n/g).length; return `Line ${line + 1}: Unsupported syntax: ${complaint.line.args[0]}`; }; /** * Converts TypeScript files to their Budgie outputs. */ class TypeScriptConverter { /** * Initializes a new instance of the TypeScriptConverter class. * * @param dependencies Dependencies used for initialization. * @param options Options for converting files. */ constructor(dependencies) { this.dependencies = dependencies; this.sourceFiles = createSourceFilesMap(dependencies.existingFileContents, values_1.defaultValue(dependencies.tsconfigOptions.compilerOptions.target, () => ts.ScriptTarget.Latest)); this.transformer = ts_budgie_1.createTransformer({ baseDirectory: dependencies.baseDirectory, outputNamespace: dependencies.outputNamespace, sourceFiles: Array.from(this.sourceFiles.values()), }); } /** * Converts a TypeScript file to its Budgie output. * * @param sourcePath Original Budgie file path. * @returns The file's Budgie output. */ convertFile(sourcePath) { return __awaiter(this, void 0, void 0, function* () { if (this.dependencies.metadata !== undefined && sourcePath === "src/index.ts") { return { sourcePath, status: converter_1.ConversionStatus.Succeeded, }; } const sourceFile = this.sourceFiles.get(sourcePath); if (sourceFile === undefined) { throw new Error(`Unknown source file: '${sourcePath}'.`); } const outputPath = extensions_1.replaceFileExtension(sourcePath, exports.tsExtension, budgieConverter_1.budgieExtension); let transformationResults; try { transformationResults = this.transformer.transformSourceFile(sourceFile); } catch (error) { return { error, outputPath, sourcePath, status: converter_1.ConversionStatus.Failed, }; } yield this.dependencies.fileSystem.writeFile(outputPath, transformationResults.printed.join(os_1.EOL)); return { outputPath, sourcePath, status: converter_1.ConversionStatus.Succeeded, }; }); } } exports.TypeScriptConverter = TypeScriptConverter; //# sourceMappingURL=typescriptConverter.js.map