UNPKG

ayakashi

Version:

The next generation web scraping framework

133 lines (132 loc) 5.35 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 }); 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;