@repka-kit/ts
Version:
Next generation build tools for monorepo: lint, bundle and package your TypeScript projects
73 lines (68 loc) • 11.1 kB
JavaScript
import { stat } from 'node:fs/promises';
import { dirname, sep, join } from 'node:path';
import { fileURLToPath } from 'node:url';
function once(fn) {
let value;
let calculated = false;
return () => {
if (calculated) {
return value;
}
value = fn();
calculated = true;
return value;
};
}
const getModuleRootDirectoryForImportMetaUrl = (opts) => {
const __fileName = fileURLToPath(new URL(opts.importMetaUrl));
const parent = dirname(__fileName);
const superParent = dirname(parent);
const isBundledInRoot = () => parent.endsWith(sep + "@repka-kit/ts".replace("/", sep));
const isBundledInDist = () => parent.endsWith(sep + "dist");
const isBundledInBin = () => parent.endsWith(sep + "bin") && !superParent.endsWith(sep + "src");
if (isBundledInRoot() || isBundledInBin() || isBundledInDist()) {
return {
type: "bundled",
path: fileURLToPath(new URL(`./`, opts.importMetaUrl))
};
}
return {
type: "source",
path: fileURLToPath(new URL(`../../`, opts.importMetaUrl))
};
};
const moduleRootDirectory = once(
() => getModuleRootDirectoryForImportMetaUrl({ importMetaUrl: import.meta.url }).path
);
async function isFile(filePath) {
return await stat(filePath).then((result) => result.isFile()).catch(() => false);
}
async function* iterateNodeModules(startWith, path) {
let current = startWith;
while (current !== sep && current !== "~/") {
const candidate = join(current, "node_modules", path);
if (await isFile(candidate)) {
yield candidate;
}
if (current === dirname(current)) {
break;
}
current = dirname(current);
}
}
async function findBinScript(startWith, binScriptPath) {
for await (const path of iterateNodeModules(startWith, binScriptPath)) {
return path;
}
return void 0;
}
async function binPath(opts) {
const root = moduleRootDirectory();
const result = await findBinScript(root, opts.binScriptPath);
if (result) {
return result;
}
throw new Error(`Cannot find bin ${opts.binName}`);
}
export { binPath as b, getModuleRootDirectoryForImportMetaUrl as g, moduleRootDirectory as m, once as o };
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2h1bmsuZ3FHVkp3VF8uanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3V0aWxzL3RzL3NyYy9vbmNlLnRzIiwiLi4vc3JjL3V0aWxzL21vZHVsZVJvb3REaXJlY3RvcnkudHMiLCIuLi9zcmMvdXRpbHMvYmluUGF0aC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gb25jZTxUPihmbjogKCkgPT4gVCk6ICgpID0+IFQge1xuICBsZXQgdmFsdWU6IFQ7XG4gIGxldCBjYWxjdWxhdGVkID0gZmFsc2U7XG4gIHJldHVybiAoKTogVCA9PiB7XG4gICAgaWYgKGNhbGN1bGF0ZWQpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgdmFsdWUgPSBmbigpO1xuICAgIGNhbGN1bGF0ZWQgPSB0cnVlO1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfTtcbn1cbiIsImltcG9ydCB7IGRpcm5hbWUsIHNlcCB9IGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgeyBmaWxlVVJMVG9QYXRoIH0gZnJvbSAnbm9kZTp1cmwnO1xuXG5pbXBvcnQgeyBvbmNlIH0gZnJvbSAnQHV0aWxzL3RzJztcblxuZXhwb3J0IGNvbnN0IGdldE1vZHVsZVJvb3REaXJlY3RvcnlGb3JJbXBvcnRNZXRhVXJsID0gKG9wdHM6IHtcbiAgaW1wb3J0TWV0YVVybDogc3RyaW5nO1xufSkgPT4ge1xuICAvLyB0aGlzIGlzIGhpZ2hseSBkZXBlbmRlbnQgb24gdGhlIG91dHB1dCBkaXJlY3Rvcnkgc3RydWN0dXJlXG4gIC8vIGFuZCB0aGUgY29udGV4dCBpbiB3aGljaCB0aGlzIGZ1bmN0aW9uIGlzIHJ1biAoYnVuZGxlZCBjb2RlIHZzIHRzeCAuL3NyYy90c2ZpbGUudHMpXG4gIGNvbnN0IF9fZmlsZU5hbWUgPSBmaWxlVVJMVG9QYXRoKG5ldyBVUkwob3B0cy5pbXBvcnRNZXRhVXJsKSk7XG4gIGNvbnN0IHBhcmVudCA9IGRpcm5hbWUoX19maWxlTmFtZSk7XG4gIGNvbnN0IHN1cGVyUGFyZW50ID0gZGlybmFtZShwYXJlbnQpO1xuXG4gIGNvbnN0IGlzQnVuZGxlZEluUm9vdCA9ICgpID0+XG4gICAgcGFyZW50LmVuZHNXaXRoKHNlcCArICdAcmVwa2Eta2l0L3RzJy5yZXBsYWNlKCcvJywgc2VwKSk7XG4gIGNvbnN0IGlzQnVuZGxlZEluRGlzdCA9ICgpID0+IHBhcmVudC5lbmRzV2l0aChzZXAgKyAnZGlzdCcpO1xuICBjb25zdCBpc0J1bmRsZWRJbkJpbiA9ICgpID0+XG4gICAgcGFyZW50LmVuZHNXaXRoKHNlcCArICdiaW4nKSAmJiAhc3VwZXJQYXJlbnQuZW5kc1dpdGgoc2VwICsgJ3NyYycpO1xuXG4gIGlmIChpc0J1bmRsZWRJblJvb3QoKSB8fCBpc0J1bmRsZWRJbkJpbigpIHx8IGlzQnVuZGxlZEluRGlzdCgpKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdidW5kbGVkJyBhcyBjb25zdCxcbiAgICAgIHBhdGg6IGZpbGVVUkxUb1BhdGgobmV3IFVSTChgLi9gLCBvcHRzLmltcG9ydE1ldGFVcmwpKSxcbiAgICB9O1xuICB9XG5cbiAgLy8gcnVuIHZpYSB0c3ggdG8gYnVpbGQgdGhlIEByZXBrYS1raXQvdHMgaXRzZWxmXG4gIHJldHVybiB7XG4gICAgdHlwZTogJ3NvdXJjZScgYXMgY29uc3QsXG4gICAgcGF0aDogZmlsZVVSTFRvUGF0aChuZXcgVVJMKGAuLi8uLi9gLCBvcHRzLmltcG9ydE1ldGFVcmwpKSxcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBtb2R1bGVSb290RGlyZWN0b3J5ID0gb25jZShcbiAgKCkgPT5cbiAgICBnZXRNb2R1bGVSb290RGlyZWN0b3J5Rm9ySW1wb3J0TWV0YVVybCh7IGltcG9ydE1ldGFVcmw6IGltcG9ydC5tZXRhLnVybCB9KVxuICAgICAgLnBhdGhcbik7XG4iLCJpbXBvcnQgeyByZWFkRmlsZSwgc3RhdCB9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHsgZGlybmFtZSwgam9pbiwgc2VwIH0gZnJvbSAnbm9kZTpwYXRoJztcblxuaW1wb3J0IHsgbW9kdWxlUm9vdERpcmVjdG9yeSB9IGZyb20gJy4vbW9kdWxlUm9vdERpcmVjdG9yeSc7XG5cbmFzeW5jIGZ1bmN0aW9uIGlzRmlsZShmaWxlUGF0aDogc3RyaW5nKSB7XG4gIHJldHVybiBhd2FpdCBzdGF0KGZpbGVQYXRoKVxuICAgIC50aGVuKChyZXN1bHQpID0+IHJlc3VsdC5pc0ZpbGUoKSlcbiAgICAuY2F0Y2goKCkgPT4gZmFsc2UpO1xufVxuXG5hc3luYyBmdW5jdGlvbiogaXRlcmF0ZU5vZGVNb2R1bGVzKHN0YXJ0V2l0aDogc3RyaW5nLCBwYXRoOiBzdHJpbmcpIHtcbiAgbGV0IGN1cnJlbnQgPSBzdGFydFdpdGg7XG4gIHdoaWxlIChjdXJyZW50ICE9PSBzZXAgJiYgY3VycmVudCAhPT0gJ34vJykge1xuICAgIGNvbnN0IGNhbmRpZGF0ZSA9IGpvaW4oY3VycmVudCwgJ25vZGVfbW9kdWxlcycsIHBhdGgpO1xuICAgIGlmIChhd2FpdCBpc0ZpbGUoY2FuZGlkYXRlKSkge1xuICAgICAgeWllbGQgY2FuZGlkYXRlO1xuICAgIH1cbiAgICBpZiAoY3VycmVudCA9PT0gZGlybmFtZShjdXJyZW50KSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGN1cnJlbnQgPSBkaXJuYW1lKGN1cnJlbnQpO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGZpbmRCaW5TY3JpcHQoc3RhcnRXaXRoOiBzdHJpbmcsIGJpblNjcmlwdFBhdGg6IHN0cmluZykge1xuICBmb3IgYXdhaXQgKGNvbnN0IHBhdGggb2YgaXRlcmF0ZU5vZGVNb2R1bGVzKHN0YXJ0V2l0aCwgYmluU2NyaXB0UGF0aCkpIHtcbiAgICByZXR1cm4gcGF0aDtcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYmluUGF0aChvcHRzOiB7XG4gIGJpbk5hbWU6IHN0cmluZztcbiAgYmluU2NyaXB0UGF0aDogc3RyaW5nO1xufSkge1xuICBjb25zdCByb290ID0gbW9kdWxlUm9vdERpcmVjdG9yeSgpO1xuICBjb25zdCByZXN1bHQgPSBhd2FpdCBmaW5kQmluU2NyaXB0KHJvb3QsIG9wdHMuYmluU2NyaXB0UGF0aCk7XG4gIGlmIChyZXN1bHQpIHtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGZpbmQgYmluICR7b3B0cy5iaW5OYW1lfWApO1xufVxuXG5mdW5jdGlvbiBzY3JpcHRGcm9tUGFja2FnZUpzb24ob3B0czoge1xuICBiaW5OYW1lOiBzdHJpbmc7XG4gIHBhY2thZ2VKc29uOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn0pIHtcbiAgY29uc3QgY2FuZGlkYXRlID0gb3B0cy5wYWNrYWdlSnNvblsnYmluJ107XG4gIGlmICh0eXBlb2YgY2FuZGlkYXRlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBjYW5kaWRhdGU7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGNhbmRpZGF0ZSA9PT0gJ29iamVjdCcgJiYgY2FuZGlkYXRlICE9PSBudWxsKSB7XG4gICAgY29uc3QgZW50cnkgPSAoY2FuZGlkYXRlIGFzIFJlY29yZDxzdHJpbmcsIHN0cmluZz4pW29wdHMuYmluTmFtZV07XG4gICAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBlbnRyeTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRldGVybWluZUJpblNjcmlwdFBhdGgob3B0czoge1xuICBiaW5OYW1lOiBzdHJpbmc7XG4gIGJpblBhY2thZ2VOYW1lOiBzdHJpbmc7XG59KSB7XG4gIGZvciBhd2FpdCAoY29uc3QgcGF0aCBvZiBpdGVyYXRlTm9kZU1vZHVsZXMoXG4gICAgbW9kdWxlUm9vdERpcmVjdG9yeSgpLFxuICAgIGpvaW4ob3B0cy5iaW5QYWNrYWdlTmFtZSwgJ3BhY2thZ2UuanNvbicpXG4gICkpIHtcbiAgICBjb25zdCBwa2cgPSBhd2FpdCByZWFkRmlsZShwYXRoLCAndXRmLTgnKVxuICAgICAgLnRoZW4oKHRleHQpID0+IEpTT04ucGFyc2UodGV4dCkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pXG4gICAgICAuY2F0Y2goKCkgPT4gbnVsbCk7XG4gICAgaWYgKCFwa2cpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IHNjcmlwdFBhdGggPSBzY3JpcHRGcm9tUGFja2FnZUpzb24oe1xuICAgICAgYmluTmFtZTogb3B0cy5iaW5OYW1lLFxuICAgICAgcGFja2FnZUpzb246IHBrZyxcbiAgICB9KTtcbiAgICBpZiAoIXNjcmlwdFBhdGgpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IGNhbmRpZGF0ZSA9IGpvaW4oZGlybmFtZShwYXRoKSwgc2NyaXB0UGF0aCk7XG4gICAgaWYgKGF3YWl0IGlzRmlsZShjYW5kaWRhdGUpKSB7XG4gICAgICAvLyBkZW5vcm1hbGl6ZSBhbmQgbWFrZSB0aGlzIGNvbnNpc3RlbnQgb24gYWxsIHBsYXRmb3Jtc1xuICAgICAgLy8gYXMgdGhlIHBhdGggd2lsbCB3b3JrIGJvdGggZm9yIHdpbmRvd3MgYW5kIG5vbi13aW5kb3dzXG4gICAgICByZXR1cm4gam9pbihvcHRzLmJpblBhY2thZ2VOYW1lLCBzY3JpcHRQYXRoKS5yZXBsYWNlQWxsKHNlcCwgJy8nKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQU8sU0FBUyxLQUFRLEVBQXNCLEVBQUE7QUFDNUMsRUFBSSxJQUFBLEtBQUEsQ0FBQTtBQUNKLEVBQUEsSUFBSSxVQUFhLEdBQUEsS0FBQSxDQUFBO0FBQ2pCLEVBQUEsT0FBTyxNQUFTO0FBQ2QsSUFBQSxJQUFJLFVBQVksRUFBQTtBQUNkLE1BQU8sT0FBQSxLQUFBLENBQUE7QUFBQSxLQUNUO0FBQ0EsSUFBQSxLQUFBLEdBQVEsRUFBRyxFQUFB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