https://github.com/1111mp/lib-configuration-resolver
Find and load configuration for your library 🌈
https://github.com/1111mp/lib-configuration-resolver
lib-configuration-resolver
Last synced: over 1 year ago
JSON representation
Find and load configuration for your library 🌈
- Host: GitHub
- URL: https://github.com/1111mp/lib-configuration-resolver
- Owner: 1111mp
- License: mit
- Created: 2024-03-26T04:24:45.000Z (over 2 years ago)
- Default Branch: main
- Last Pushed: 2024-04-09T08:25:54.000Z (over 2 years ago)
- Last Synced: 2025-04-01T10:04:14.542Z (over 1 year ago)
- Topics: lib-configuration-resolver
- Language: TypeScript
- Homepage:
- Size: 78.1 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# lib-configuration-resolver
`lib-configuration-resolver` searches for and loads configuration for your library. Inspired by [Vite](https://vitejs.dev/) but supports more file formats.
By default, `lib-configuration-resolver` will check the current working directory for the following:
- JSON `*.json`
- YAML `*.{yml|yaml}`
- JavaScript `*.{js|mjs|cjs}`
- TypeScript `*.{ts|mts|cts}`
For example, if your module's name is `"resolver.config"`, `lib-configuration-resolver` will try to load configuration data from these files:
- `resolver.config.json`
- `resolver.config.yml`, `resolver.config.yaml`
- `resolver.config.js`, `resolver.config.mjs`, `resolver.config.cjs`
- `resolver.config.ts`, `resolver.config.mts`, `resolver.config.cts`
Alternatively you can change the search directory by passing `root`.
## Installation
```
npm install lib-configuration-resolver
```
## Quick Start
#### Basic usage
Use the `configResolver` api to automatically parse configuration files:
```ts
// resolver.config.ts
export default {
name: "lib-configuration-resolver",
desc: "This is a template for testing lib-configuration-resolver",
entry: ["index.ts"],
minify: true,
plugins: [() => {}]
}
```
```ts
import { configResolver } from "lib-configuration-resolver"
interface Config {
name: string
desc: string
entry: string[]
minify: boolean
plugins: VoidFunction[]
}
configResolver("resolver.config.ts").then(config => {
// config: Config | null
console.log(config)
/**
* config: {
configFile: '/lib-configuration-resolver/resolver.config.ts',
config: {
name: 'lib-configuration-resolver',
desc: 'This is a template for testing lib-configuration-resolver',
entry: [ 'index.ts' ],
minify: true,
plugins: [ [Function (anonymous)] ]
},
dependencies: [ 'src/__tests__/configurations/resolver.config.ts' ]
}
*/
})
```
Or just provide file name:
```ts
const config = await configResolver("resolver.config")
// config: Config | null
console.log(config)
/**
* config: {
configFile: '/lib-configuration-resolver/resolver.config.ts',
config: {
name: 'lib-configuration-resolver',
desc: 'This is a template for testing lib-configuration-resolver',
entry: [ 'index.ts' ],
minify: true,
plugins: [ [Function (anonymous)] ]
},
dependencies: [ 'src/__tests__/configurations/resolver.config.ts' ]
}
*/
if (config === null) {
// no config file found.
}
```
It will try to search for the following files:
```
[
`resolver.config.json`,
`resolver.config.yml`,
`resolver.config.yaml`,
`resolver.config.js`,
`resolver.config.mjs`
`resolver.config.cjs`,
`resolver.config.ts`,
`resolver.config.mts`,
`resolver.config.cts`
]
```
#### With `defineConfig` helper
You can use the defineConfig helper to export your configuration:
```ts
// resolver.config.ts
import { defineConfig } from "lib-configuration-resolver"
interface Config {
name: string
desc: string
entry: string[]
minify: boolean
plugins: VoidFunction[]
}
export default defineConfig(({ mode }) => {
console.log(mode)
// production or development
// the value of process.env.NODE_ENV
return {
name: "lib-configuration-resolver",
desc: "This is a template for testing lib-configuration-resolver",
entry: ["index.ts"],
minify: true,
plugins: [() => {}]
}
})
```
```ts
import { configResolver } from "lib-configuration-resolver"
const config = await configResolver("resolver.config")
// config: Config
console.log(config)
/**
* config: {
configFile: '/lib-configuration-resolver/resolver.config.ts',
config: {
name: 'lib-configuration-resolver',
desc: 'This is a template for testing lib-configuration-resolver',
entry: [ 'index.ts' ],
minify: true,
plugins: [ [Function (anonymous)] ]
},
dependencies: [ 'src/__tests__/configurations/resolver.config.ts' ]
}
*/
```
#### Change search directory
Change the directory where configuration files are searched by passing `root`:
```ts
import { resolve } from "node:path"
import { configResolver } from "lib-configuration-resolver"
const config = await configResolver("resolver.config", {
root: resolve(process.cwd(), "src", "__tests__", "configurations")
})
// config: Config
console.log(config)
/**
* config: {
configFile: '/lib-configuration-resolver/src/__tests__/configurations/resolver.config.ts',
config: {
name: 'lib-configuration-resolver',
desc: 'This is a template for testing lib-configuration-resolver',
entry: [ 'index.ts' ],
minify: true,
plugins: [ [Function (anonymous)] ]
},
dependencies: [ 'src/__tests__/configurations/resolver.config.ts' ]
}
*/
```
## API
#### `configResolver`
```ts
type Config = {
[key: string]: any
}
interface InlineConfig extends Config {
/**
* Project root directory. Can be an absolute path, or a path relative from
* the location of the config file itself.
* @default process.cwd()
*/
root?: string
/**
* Explicitly set a mode to run in. This will override the default mode.
*/
mode?: string
}
type ConfigResult = {
configFile: string
config: T
dependencies: string[]
}
declare function configResolver(
name: string,
inlineConfig?: InlineConfig,
defaultMode: string = "development"
): Promise | null>
```
#### `defineConfig`
```ts
interface ConfigEnv {
mode: string
}
type ConfigFnObject = (env: ConfigEnv) => T
type ConfigFnPromise = (env: ConfigEnv) => Promise
type ConfigFn = (env: ConfigEnv) => T | Promise
type ConfigExport = T | Promise | ConfigFnObject | ConfigFnPromise | ConfigFn
declare function defineConfig(config: ConfigExport): ConfigExport
```