# arcee

> Easy configuration

Latest version **0.3.1** (published 2014-10-25) · GPL-3.0+ license · 0 weekly downloads

## Install

```sh
npm install arcee
pnpm add arcee
yarn add arcee
bun add arcee
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support; pre 1.0.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.3.1 |
| Published | 2014-10-25 |
| First published | 2014-08-26 |
| Weekly downloads | 0 |
| License | GPL-3.0+ |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 3 |
| Known vulnerabilities | 0 (+3 in 2 direct dependencies) |
| Install scripts | no |
| GitHub stars | 20 |
| Author | Médi-Rémi Hashim |
| Maintainers | medimatrix |
| Keywords | rc, config, toml, yaml, arcee |

## Links

- npm: https://www.npmjs.com/package/arcee
- Repository: https://github.com/medimatrix/arcee
- Issues: https://github.com/medimatrix/arcee/issues
- npm.io page: https://npm.io/package/arcee

## Dependencies (3)

- [toml](https://npm.io/package/toml.md) ^2.0.6
- [yaml](https://npm.io/package/yaml.md) ^0.2.3
- [deep-extend](https://npm.io/package/deep-extend.md) ^0.3.2

## Alternatives

- [monaco-yaml](https://npm.io/package/monaco-yaml.md) — 420.1K weekly downloads
- [@crewx/workflow](https://npm.io/package/@crewx/workflow.md) — 3.1K weekly downloads
- [yaml-cat](https://npm.io/package/yaml-cat.md) — 38 weekly downloads
- [nunjucks-in-yaml](https://npm.io/package/nunjucks-in-yaml.md) — 9 weekly downloads
- [shopify-symlinks](https://npm.io/package/shopify-symlinks.md) — 3 weekly downloads

## Recent versions

- 0.3.1 (latest) — 2014-10-25
- 0.2.1 — 2014-08-28
- 0.2.0 — 2014-08-28
- 0.1.0 — 2014-08-26

## README

# Arcee
Easy node.js configuration
---

[![Build Status](https://travis-ci.org/medimatrix/arcee.svg?branch=master)](https://travis-ci.org/medimatrix/arcee)
[![David DM](https://david-dm.org/medimatrix/arcee.svg)](https://david-dm.org/medimatrix/arcee)
[![Code Climate](https://codeclimate.com/github/medimatrix/arcee/badges/gpa.svg)](https://codeclimate.com/github/medimatrix/arcee)

[![NPM](https://nodei.co/npm/arcee.png?compact=true)](https://nodei.co/npm/arcee/)

Arcee offers mutable and immutable configuration storage that can be shared
between modules and workers.

`npm install arcee`

## Usage

```js
var config = require("arcee")

// You can pass an object...
config.set("app.webserver", {
  port: 8000,
  engine: "haml"
})

// ...or the location of a file
config.set("app.db", "config/db.yaml")

// Get all config under the 'app' namespace
config.get("app") // => {webserver: {...}, db: {...}}
// Get only webserver data
config.get("app.webserver") // => {port: 8000, ...}

// Objects returned are immutable by default
var webconf = config.get("app.webserver")
webconf.port // => 8000
webconf.port = 80
webconf.port // => 8000

// To allow mutable config, prefix namespace by '!'
config.set("!app.foo", {...})

// Trying to set config again throws an error...
config.set("app.mongodb", {a: 1})
config.set("app.mongodb", {a: 1, b: 2}) // => Error

// ...unless that particular configuration is mutable
config.set("!app.mongodb", {a: 1})
config.set("!app.mongodb", {a: 1, b: 2})
```

## Methods

### set(namespace, config)
Stores config.

Throws an error if config has already been set at the namespace and the config
is not mutable.

#### `namespace` (String)
If it contains a dot, `arcee` will separate the string
into a namespace. For example, `"app.foo"` and `"app.bar"` will belong to the
`app` namespace.

If namespace if prefixed by `!` (`!app.foo`), then the configuration is mutable.

#### `config` (Object || String)
Can be an object or a file location to a JSON, YAML, TOML or JavaScript file.

#### Examples

```js
arcee.set("foo", {baz: 42})

arcee.set("!data", {number: 42})

arcee.set("app.bar", {hello: "hi"})

arcee.set("file", "info.toml")

arcee.set("commonjs_file", "config.js")
```

### get(namespace)
Returns config.

If there is no config at that namespace, an `Error` is thrown.

The `Object` returned will be a copy of the object passed to `arcee.set`.

### addExtension(ext, parser, passFileLocation)
Arcee supports TOML, YAML, CommonJS and JSON by default. If you would like to add support
for more markup languages, use this method.

#### `ext` (String)

#### `parser` (Function)
The function provided must return an object.

#### `passFileLocation` (Boolean)
If true, the file location is passed to `parser` instead of the contents of the
file.

#### Example

```js
arcee.addExtension("ini", require("ini").parse)

arcee.addExtension("common-js", require, true)
```

### supportedExtensions()
Returns an array containing supported config filetypes.

## Test
Arcee has test coverage of 100%. You can check that yourself by running
`npm run coverage` (you will need to install
[covert](https://www.npmjs.org/package/covert) first).

```sh
$ cd node_modules/arcee
$ npm install
$ npm test
```

## Contributing

See [CONTRIBUTING.md](CONTRIBUTING.md)

## License
GPLv3 or later.

> Copyright (C) 2014 Médi-Rémi Hashim

> This program is free software: you can redistribute it and/or modify
> it under the terms of the GNU General Public License as published by
> the Free Software Foundation, either version 3 of the License, or
> (at your option) any later version.

> This program is distributed in the hope that it will be useful,
> but WITHOUT ANY WARRANTY; without even the implied warranty of
> MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> GNU General Public License for more details.

> You should have received a copy of the GNU General Public License
> along with this program.  If not, see <http://www.gnu.org/licenses/>.

[LICENSE file](LICENSE)

---
_Source: https://npm.io/package/arcee · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
