ayakashi
Version:
The next generation web scraping framework
133 lines (132 loc) • 5.35 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());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.buildTS = exports.isTypescriptDistReady = exports.getTypescriptDist = exports.getTypescriptRoot = exports.isTypescriptProject = void 0;
const path_1 = require("path");
const child_process_1 = require("child_process");
const util_1 = require("util");
const fs_1 = require("fs");
const json5_1 = require("json5");
const opLog_1 = require("../opLog/opLog");
const readdir = util_1.promisify(fs_1.readdir);
const lstat = util_1.promisify(fs_1.lstat);
const readFile = util_1.promisify(fs_1.readFile);
const opLog = opLog_1.getOpLog();
function isTypescriptProject(directory) {
return __awaiter(this, void 0, void 0, function* () {
try {
const pkg = require(path_1.resolve(directory, "package.json"));
const dependencies = Object.keys(pkg.devDependencies || {})
.concat(Object.keys(pkg.dependencies || {}));
if (dependencies.includes("typescript")) {
const files = yield readdir(directory);
const tsConfigFile = files.find(f => f.includes("tsconfig") && f.includes(".json"));
if (tsConfigFile) {
return true;
}
else {
return false;
}
}
else {
return false;
}
}
catch (e) {
opLog.error("Could not determine project type. Is this an ayakashi project folder?");
process.exit(1);
}
});
}
exports.isTypescriptProject = isTypescriptProject;
function getTypescriptRoot(directory) {
return __awaiter(this, void 0, void 0, function* () {
const files = yield readdir(directory);
const tsConfigFile = files.find(f => f.includes("tsconfig") && f.includes(".json"));
if (!tsConfigFile) {
opLog.error("Typescript project does not have a tsconfig.json");
process.exit(1);
}
const tsConfigContent = yield readFile(path_1.resolve(directory, tsConfigFile), "utf-8");
const tsConfig = json5_1.parse(tsConfigContent);
const root = tsConfig.compilerOptions.rootDir;
if (!root) {
opLog.error("tsconfig.json does not specify a rootDir");
process.exit(1);
}
let result = path_1.resolve(directory, root);
if (process.platform === "win32") {
result = result.replace(/\\/g, "/");
}
return result;
});
}
exports.getTypescriptRoot = getTypescriptRoot;
function getTypescriptDist(directory) {
return __awaiter(this, void 0, void 0, function* () {
const files = yield readdir(directory);
const tsConfigFile = files.find(f => f.includes("tsconfig") && f.includes(".json"));
if (!tsConfigFile) {
opLog.error("Typescript project does not have a tsconfig.json");
process.exit(1);
}
const tsConfigContent = yield readFile(path_1.resolve(directory, tsConfigFile), "utf-8");
const tsConfig = json5_1.parse(tsConfigContent);
const dist = tsConfig.compilerOptions.outDir;
if (!dist) {
opLog.error("tsconfig.json does not specify an outDir");
process.exit(1);
}
let result = path_1.resolve(directory, dist);
if (process.platform === "win32") {
result = result.replace(/\\/g, "/");
}
return result;
});
}
exports.getTypescriptDist = getTypescriptDist;
function isTypescriptDistReady(directory) {
return __awaiter(this, void 0, void 0, function* () {
try {
const stats = yield lstat(directory);
if (!stats.isDirectory())
return false;
const files = yield readdir(directory);
if (files.length === 0)
return false;
return true;
}
catch (_e) {
return false;
}
});
}
exports.isTypescriptDistReady = isTypescriptDistReady;
function buildTS() {
const waiter = opLog.waiter("compiling typescript");
return new Promise(function (resolve) {
const ps = child_process_1.exec("npx tsc --pretty false");
ps.stdout.on("data", function (d) {
waiter.clear();
process.stderr.write(d.toString());
});
ps.on("exit", function (code) {
if (code) {
waiter.warn("typescript compiled with errors");
}
else {
waiter.succeed("typescript compiled");
}
resolve();
});
});
}
exports.buildTS = buildTS;