derw
Version:
An Elm-inspired language that transpiles to TypeScript
95 lines (94 loc) • 3.31 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.suggestFileNames = exports.getFlatFiles = exports.getDerwFiles = exports.ensureDirectoryExists = exports.fileExists = void 0;
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;
}
exports.fileExists = fileExists;
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 });
}
}
exports.ensureDirectoryExists = ensureDirectoryExists;
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);
}
exports.getDerwFiles = getDerwFiles;
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);
}
exports.getFlatFiles = getFlatFiles;
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(",")}?`;
}
exports.suggestFileNames = suggestFileNames;