mirror of
https://github.com/anomalyco/opencode.git
synced 2026-05-16 09:33:24 +00:00
41 lines
1.3 KiB
TypeScript
41 lines
1.3 KiB
TypeScript
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<string, unknown>
|
|
},
|
|
catch: (cause) => cause,
|
|
}).pipe(Effect.orElseSucceed(() => ({}) as Record<string, unknown>))
|
|
|
|
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
|
|
}),
|
|
)
|