export * as NpmConfig from "./npm-config" import { fileURLToPath } from "url" // @ts-expect-error npm does not publish types for this internal config API. import Config from "@npmcli/config" // @ts-expect-error npm does not publish types for this internal config API. import { definitions, flatten, nerfDarts, shorthands } from "@npmcli/config/lib/definitions/index.js" import { Effect } from "effect" const npmPath = fileURLToPath(new URL("..", import.meta.url)) export const load = (dir: string) => Effect.tryPromise({ try: async () => { const config = new Config({ npmPath, cwd: dir, env: { ...process.env }, argv: [process.execPath, process.execPath], execPath: process.execPath, platform: process.platform, definitions, flatten, nerfDarts, shorthands, warn: false, }) await config.load() return config.flat as Record }, catch: (cause) => cause, }).pipe(Effect.orElseSucceed(() => ({}) as Record)) export const registry = (dir: string) => load(dir).pipe( Effect.map((config) => { const registry = typeof config.registry === "string" ? config.registry : "https://registry.npmjs.org" return registry.endsWith("/") ? registry.slice(0, -1) : registry }), )