rc-config-loader

WebJar for rc-config-loader

License

License

MIT
Categories

Categories

config Application Layer Libs Configuration
GroupId

GroupId

org.webjars.npm
ArtifactId

ArtifactId

rc-config-loader
Last Version

Last Version

3.0.0
Release Date

Release Date

Type

Type

jar
Description

Description

rc-config-loader
WebJar for rc-config-loader
Project URL

Project URL

https://www.webjars.org
Source Code Management

Source Code Management

https://github.com/azu/rc-config-loader

Download rc-config-loader

How to add to project

<!-- https://jarcasting.com/artifacts/org.webjars.npm/rc-config-loader/ -->
<dependency>
    <groupId>org.webjars.npm</groupId>
    <artifactId>rc-config-loader</artifactId>
    <version>3.0.0</version>
</dependency>
// https://jarcasting.com/artifacts/org.webjars.npm/rc-config-loader/
implementation 'org.webjars.npm:rc-config-loader:3.0.0'
// https://jarcasting.com/artifacts/org.webjars.npm/rc-config-loader/
implementation ("org.webjars.npm:rc-config-loader:3.0.0")
'org.webjars.npm:rc-config-loader:jar:3.0.0'
<dependency org="org.webjars.npm" name="rc-config-loader" rev="3.0.0">
  <artifact name="rc-config-loader" type="jar" />
</dependency>
@Grapes(
@Grab(group='org.webjars.npm', module='rc-config-loader', version='3.0.0')
)
libraryDependencies += "org.webjars.npm" % "rc-config-loader" % "3.0.0"
[org.webjars.npm/rc-config-loader "3.0.0"]

Dependencies

compile (4)

Group / Artifact Type Version
org.webjars.npm : debug jar [4.1.1,5)
org.webjars.npm : js-yaml jar [3.12.0,4)
org.webjars.npm : json5 jar [2.1.1,3)
org.webjars.npm : require-from-string jar [2.0.2,3)

Project Modules

There are no modules declared in this project.

rc-config-loader Build Status

Load config from .{product}rc.{json,yml,js} file.

It is a Node.js library for loading .textlintrc, .eslintrc, .stylelintrc etc...

Features

Find and load a configuration object from:

  • a package.json property if it is needed
  • a JSON or YAML, JS "rc file"
    • .<product>rc or .<product>rc.json or .<product>rc.js or.<product>rc.yml, .<product>rc.yaml
  • TypeScript support
    • Includes .d.ts

Difference

with MoOx/rc-loader

  • Safe API
    • rc contains shabang in .js file
  • Enhance Error message

with cosmiconfig

If you want to async support and customize loader, recommenced to use cosmiconfig.

Install

Install with npm:

npm install rc-config-loader

Usage

API

export interface rcConfigLoaderOption {
    // does look for `package.json`
    packageJSON?:
        | boolean
        | {
              fieldName: string;
          };
    // if config file name is not same with packageName, set the name
    configFileName?: string;
    // treat default(no ext file) as some extension
    defaultExtension?: string | string[];
    // where start to load
    cwd?: string;
}
/**
 * Find and load rcfile, return { config, filePath }
 * If not found any rcfile, throw an Error.
 * @param {string} pkgName
 * @param {rcConfigLoaderOption} [opts]
 * @returns {{ config: Object, filePath:string } | undefined}
 */
export declare function rcFile<R extends {}>(pkgName: string, opts?: rcConfigLoaderOption): {
    config: R;
    filePath: string;
} | undefined;

rcFile return { config, filePath } object.

  • config: it is config object
  • filePath: absolute path to config file

Note:

  • rcFile function return undefined if the config file is not found
  • rcFile throw an Error if the config file content is malformed (causing a parsing error)

Recommenced usage:

import { rcFile } from "rc-config-loader"

function loadRcFile(rcFileName){
    try {
        const results = rcFile(rcFileName);
        // Not Found
        if (!results) {
            return {};
        }
        return results.config;
    } catch (error) {
        // Found it, but it is parsing error
        return {} ; // default value
    }
}
// load config
const config = loadRcFile("your-application");
console.log(config); // => rcfile content

Example

"use strict";
import { rcFile } from "rc-config-loader"
// load .eslintrc from current dir
console.log(rcFile("eslint"));

// load .eslintrc from specific path
console.log(rcFile("eslint", {
    configFileName: `${__dirname}/test/fixtures/.eslintrc`
}));
/*
config: { extends: 'standard',
  rules:
   { 'comma-dangle': [ 2, 'always-multiline' ],
     'arrow-parens': [ 2, 'as-needed' ] } }
filePath: ${__dirname}/test/fixtures/.eslintrc
 */

// load property from pacakge.json
console.log(rcFile("rc-config-loader", {
    packageJSON: {
        fieldName: "directories"
    }
}));
/*
config: { test: 'test' }
filePath: /path/to/package.json
 */

// load .eslintrc from specific dir
console.log(rcFile("eslint", {
    cwd: `${__dirname}/test/fixtures`
}));

// load specific filename from current dir
console.log(rcFile("travis", {configFileName: ".travis"}));
/*
config: { sudo: false, language: 'node_js', node_js: 'stable' }
filePath: /path/to/.travis
 */

// try to load as .json, .yml, js
console.log(rcFile("bar", {
    configFileName: `${__dirname}/test/fixtures/.barrc`,
    defaultExtension: [".json", ".yml", ".js"]
}));

// try to load as foobar, but .foobarrc is not found
console.log(rcFile("foorbar")); // => undefined

// try to load as .json, but it is not json
// throw SyntaxError
try {
    rcFile("unknown", {
        // This is not json
        configFileName: `${__dirname}/test/fixtures/.unknownrc`,
        defaultExtension: ".json"
    })
} catch (error) {
    console.log(error);
    /*
    SyntaxError: Cannot read config file: /test/fixtures/.unknownrc
    */
}

Users

Changelog

See Releases page.

Running tests

Install devDependencies and Run npm test:

npm i -d && npm test

Contributing

Pull requests and stars are always welcome.

For bugs and feature requests, please create an issue.

  1. Fork it!
  2. Create your feature branch: git checkout -b my-new-feature
  3. Commit your changes: git commit -am 'Add some feature'
  4. Push to the branch: git push origin my-new-feature
  5. Submit a pull request :D

Author

License

MIT © azu

Acknowledgement

Difference

  • support multiple defaultExtension

Versions

Version
3.0.0