@clibu/loader
v0.1.1
Published
Configuration loader for Clibu (TS/JS/JSON)
Readme
@clibu/loader
Configuration loader for Clibu. Discovers configuration from explicit package.json opt‑in (clibu.configFile) or filename-based clibu.config.* files with first‑match resolution and lightweight TypeScript transpile + cache.
Features
- Explicit opt‑in (preferred): specify a config file (or directory) via
package.json:
{
"clibu": {
"configFile": "./src/index.ts" // or ./clibu-config.ts, or a directory
}
}- If
configFilepoints to a directory, loader attemptsindex.ts,index.mts,index.cts,index.mjs,index.js,index.cjs,index.jsoninside it. - This is prioritized before filename discovery.
Filename discovery (first match wins):
clibu.config.tsclibu.config.mtsclibu.config.ctsclibu.config.mjsclibu.config.jsclibu.config.cjsclibu.config.json
TypeScript files are transpiled on the fly and cached in
.clibu/cache/using a SHA‑1 of contents..ts/.mts→ ESM (.mjs).cts→ CJS (.cjs)
Basic usage
import type { CLIConfig } from "@clibu/core"
import { loadConfig, sampleConfigHint } from "@clibu/loader"
async function main() {
const cfg: CLIConfig | null = await loadConfig(process.cwd())
if (!cfg) {
console.error(sampleConfigHint())
process.exitCode = 1
return
}
// Use cfg with @clibu/core
}Example TypeScript config
// clibu.config.ts
import { defineConfig } from "clibu"
export default {
name: "mycli",
version: "0.0.1",
options: {
verbose: { kind: "flag", alias: "v", description: "Verbose output" }
},
commands: {
hello: {
description: "Greet user",
run(ctx) {
console.log("hello", ctx.args.join(" "))
}
}
}
}Notes
- Opt‑in path (
clibu.configFile) is safest for packages whose entry file has side‑effects: point directly to a pure config module. - Directory form lets you structure config in
src/without adding a new top‑level file. - Cache invalidation is content‑based; modifying the source regenerates the cache file.
- Loader concerns only discovery + loading; parsing/validation/runtime live in
@clibu/core.
License
MIT © KazViz
