UNPKG

derw

Version:

An Elm-inspired language that transpiles to TypeScript

94 lines (93 loc) 3.17 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.fileExists = fileExists; exports.ensureDirectoryExists = ensureDirectoryExists; exports.getDerwFiles = getDerwFiles; exports.getFlatFiles = getFlatFiles; exports.suggestFileNames = suggestFileNames; const result_1 = require("@eeue56/ts-core/build/main/lib/result"); const fs_1 = require("fs"); const promises_1 = require("fs/promises"); const path_1 = __importDefault(require("path")); const distance_1 = require("../errors/distance"); async function fileExists(name) { try { await fs_1.promises.access(name); } catch (e) { return false; } return true; } async function ensureDirectoryExists(directory) { try { const lstat = await fs_1.promises.lstat(directory); if (!lstat.isDirectory()) { await fs_1.promises.mkdir(directory, { recursive: true }); } } catch (error) { await fs_1.promises.mkdir(directory, { recursive: true }); } } async function getDerwFiles(dir) { try { const lstat = await fs_1.promises.lstat(dir); if (!lstat.isDirectory()) { return (0, result_1.Ok)([dir]); } } catch (error) { return (0, result_1.Err)(`${error}`); } let files = []; for (const file of await (0, promises_1.readdir)(dir, { withFileTypes: true })) { if (file.isFile()) { if (file.name.endsWith("derw")) { files.push(path_1.default.join(dir, file.name)); } } else if (file.isDirectory()) { if (file.name === "node_modules") { } else { const nested = await getDerwFiles(path_1.default.join(dir, file.name)); if (nested.kind === "Ok") { files = files.concat(nested.value); } else { return nested; } } } } return (0, result_1.Ok)(files); } async function getFlatFiles(files) { const nestedFiles = await Promise.all(files.map(async (file) => await getDerwFiles(file))); let returnedFiles = []; for (const innerFiles of nestedFiles) { if (innerFiles.kind === "Err") { return (0, result_1.Err)(`Failed to find the file ${innerFiles.error}`); } else { returnedFiles = returnedFiles.concat(innerFiles.value); } } return (0, result_1.Ok)(returnedFiles); } async function suggestFileNames(fullPath) { const dir = path_1.default.dirname(fullPath); const files = await getDerwFiles(dir); if (files.kind === "Err") { return `I couldn't find a directory called ${dir}`; } const suggestions = (0, distance_1.suggestName)(fullPath, files.value); if (suggestions.length === 0) { return `I couldn't find the file ${fullPath} and have no suggestions.`; } return `I couldn't find the file ${fullPath}. Maybe you meant ${suggestions.join(",")}?`; }