@equinor/fusion-framework-cli
Version:
--- title: Fusion Framework CLI ---
51 lines • 2.58 kB
JavaScript
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());
});
};
import tsc from 'typescript';
import { dirname, join, resolve } from 'node:path';
import { readPackageUp } from 'read-package-up';
import assert from 'node:assert';
import { existsSync } from 'node:fs';
import { mkdir, readFile, stat, writeFile } from 'node:fs/promises';
import { fileExists } from './file-exists.js';
export const transpile = (file) => __awaiter(void 0, void 0, void 0, function* () {
const pkg = yield readPackageUp();
assert(pkg, `failed to resolve bundle package`);
const pkgRoot = dirname(pkg.path);
const sourceFile = resolve(pkgRoot, file);
assert(sourceFile, `failed to resolve ${file}`);
const cacheDir = join(pkgRoot, 'node_modules', '.cache', 'ffc');
const targetFile = join(cacheDir, file.replace(pkgRoot, '').replace(/.ts$/, '.mjs'));
if (yield fileExists(targetFile)) {
const sourceTouch = (yield stat(sourceFile)).mtime;
const targetTouch = (yield stat(targetFile)).mtime;
if (sourceTouch < targetTouch) {
return targetFile;
}
}
if (!existsSync(dirname(targetFile))) {
yield mkdir(cacheDir, { recursive: true });
}
const compilerOptions = yield loadCompilerOptions('tsconfig.json');
const tsContent = (yield readFile(sourceFile)).toString();
const jsContent = tsc.transpileModule(tsContent, { compilerOptions }).outputText;
assert(jsContent, `failed to transpile [${file}]`);
yield writeFile(targetFile, jsContent);
return targetFile;
});
const loadCompilerOptions = (filename) => {
const config = tsc.readConfigFile(filename, tsc.sys.readFile).config;
if (config.extends) {
const extended = resolve(config.extends);
return Object.assign(Object.assign({}, loadCompilerOptions(extended)), config.compilerOptions);
}
return config.compilerOptions;
};
export default transpile;
//# sourceMappingURL=ts-transpile.js.map