UNPKG

@repka-kit/ts

Version:

Next generation build tools for monorepo: lint, bundle and package your TypeScript projects

73 lines (68 loc) 11.1 kB
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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