statikly-router
Version:
file system router
83 lines (82 loc) • 3.32 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.fileExists = exports.writeSON = exports.readJSON = exports.generateSecret = exports.toAbsolutePath = exports.pathToRoute = exports.globPromise = void 0;
const promises_1 = __importDefault(require("fs/promises"));
const path_1 = __importDefault(require("path"));
const glob_1 = __importDefault(require("glob"));
const globPromise = (cwd, pattern) => {
return new Promise((resolve, reject) => {
(0, glob_1.default)(pattern, {
cwd,
}, function (error, files) {
if (error)
reject(error);
else
resolve(files);
});
});
};
exports.globPromise = globPromise;
const isRouteRoot = (name, dir, dirNameRoute = false) => {
if (name === "index")
return true;
if (dirNameRoute && dir.endsWith(name))
return true;
return false;
};
const transformRoutePath = (path, querySep) => {
if (path.includes("[")) {
return path.replace(/\[/gi, querySep).replace(/]/gi, "");
}
return path;
};
const condPrint = (cond, print, def = "") => {
if (cond)
return print;
return def;
};
const pathToRoute = ({ path, cwd, querySep, dirNameRoute = false, }) => {
const parsed = path_1.default.parse(path);
let url = condPrint(parsed.dir.startsWith("/"), parsed.dir, `/${parsed.dir}`);
url += condPrint(isRouteRoot(parsed.name, parsed.dir, dirNameRoute), "", `${condPrint(!url.endsWith("/"), "/")}${parsed.name}`);
url = transformRoutePath(url, querySep);
const route = Object.assign(Object.assign({}, parsed), { cwd, path: `${cwd}${path_1.default.sep}${path.replace(/\//g, path_1.default.sep)}`, url });
return route;
};
exports.pathToRoute = pathToRoute;
const toAbsolutePath = (path, cwd = process.cwd()) => {
if (!path)
return;
return path_1.default.isAbsolute(path) ? path : path_1.default.join(cwd, path);
};
exports.toAbsolutePath = toAbsolutePath;
const generateSecret = (length) => new Array(length)
.fill(0)
.map(() => Math.floor(Math.random() * 10))
.join("");
exports.generateSecret = generateSecret;
const readJSON = async (path, cwd) => {
const filePath = (0, exports.toAbsolutePath)(path, cwd);
const content = await promises_1.default.readFile(filePath, "utf8");
return JSON.parse(content);
};
exports.readJSON = readJSON;
const writeSON = async (path, content, cwd) => {
const filePath = path_1.default.join((0, exports.toAbsolutePath)(path, cwd), "routes.json");
await promises_1.default.writeFile(filePath, JSON.stringify(content, null, 2), "utf8");
};
exports.writeSON = writeSON;
const fileExists = async (path) => !!(await promises_1.default.stat(path).catch((e) => false));
exports.fileExists = fileExists;
exports.default = {
globPromise: exports.globPromise,
pathToRoute: exports.pathToRoute,
toAbsolutePath: exports.toAbsolutePath,
generateSecret: exports.generateSecret,
readJSON: exports.readJSON,
fileExists: exports.fileExists,
writeSON: exports.writeSON,
};