# bower-json

> Read bower.json files with semantics, normalisation, defaults and validation

Latest version **0.8.4** (published 2020-04-27) · MIT license · 0 weekly downloads

## Install

```sh
npm install bower-json
pnpm add bower-json
yarn add bower-json
bun add bower-json
```

## 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.8.4 |
| Published | 2020-04-27 |
| First published | 2013-07-09 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Node | >=0.10.0 |
| Dependencies | 6 |
| Unpacked size | 16.4 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Author | Twitter |
| Maintainers | desandro, paulirish, satazor, sheerun, sindresorhus, wibblymat |

## Links

- npm: https://www.npmjs.com/package/bower-json
- Repository: https://github.com/bower/bower/tree/master/packages/bower-json
- npm.io page: https://npm.io/package/bower-json

## Dependencies (6)

- [ext-list](https://npm.io/package/ext-list.md) ^2.0.0
- [ends-with](https://npm.io/package/ends-with.md) ^0.2.0
- [intersect](https://npm.io/package/intersect.md) ^1.0.1
- [deep-extend](https://npm.io/package/deep-extend.md) ^0.5.1
- [graceful-fs](https://npm.io/package/graceful-fs.md) ^4.1.3
- [sort-keys-length](https://npm.io/package/sort-keys-length.md) ^1.0.0

## Recent versions

- 0.8.4 (latest) — 2020-04-27
- 0.8.3 — 2020-04-27
- 0.8.2 — 2020-04-26
- 0.8.1 — 2016-04-04
- 0.8.0 — 2016-04-04
- 0.7.0 — 2016-02-10
- 0.6.0 — 2015-07-29
- 0.5.0 — 2015-05-19
- 0.4.0 — 2013-08-11
- 0.3.0 — 2013-08-05
- 0.2.0 — 2013-07-27
- 0.1.0-rc.1 — 2013-07-09

## README

# bower-json

Read `bower.json` files with semantics, normalisation, defaults and validation.

Install via [npm](https://www.npmjs.org/package/bower-json): `npm install --save bower-json`

## Usage

#### .read(file, options, callback)
#### .readSync(file, options)

Reads `file` and applies normalisation, defaults and validation according to the `bower.json` spec.
If the passed `file` does not exist, the callback is called with `error.code` equal to `ENOENT`.
If the passed `file` contents are not valid JSON, the callback is called with `error.code` equal to `EMALFORMED`.
If the `json` does not comply with the `bower.json` spec, the callback is called with `error.code` equal to `EINVALID`.

If `file` is a directory, `find()` will be used to search for the json file.
The `options` argument is optional and can be omitted. These options will be passed to `parse` method.


```js
var bowerJson = require('bower-json');

// Can also be used by simply calling bowerJson()
bowerJson.read('/path/to/bower.json', function (err, json) {
    if (err) {
        console.error('There was an error reading the file');
        console.error(err.message);
        return;
    }

    console.log('JSON: ', json);
});
```


#### .parse(json, options)

Parses an object. Useful when you want to apply normalisation and validation directly to an object.
If the `json` does not comply with the `bower.json` spec, an error is thrown with `error.code` equal to `EINVALID`.

The `options` arguments is optional and can be omitted. Available options:

- validate: Apply validation, defaults to `true`
- normalize: Apply normalisation, defaults to `false`
- clone: clone, use and return the passed in `json` object instead of using it directly, defaults to `false`


```js
var bowerJson = require('bower-json');

var json = {
    name: 'my-package',
    version: '0.0.1'
};

try {
    bowerJson.parse(json);
} catch (err) {
    console.error('There was an error parsing the object');
    console.error(err.message);
}
```

#### .getIssues(json) - DEPRECATED

Validates the passed `json` object.

Returns an object with errors and warnings of this bower.json contents.

```js
var bowerJson = require('bower-json');

var json = {
    name: 'myPackage',
    version: '0.0.1',
    main: {}
};

var issues = bowerJson.getIssues(json);

expect(issues).toEqual({
  errors: ['The "main" field has to be either an Array or a String'],
  warnings: ['The "name" must be lowercase']
});

#### .validate(json)

Validates the passed `json` object.

Throws an error with `error.code` equal to `EINVALID` if it does not comply with the spec.

```js
var bowerJson = require('bower-json');

var json = {
    name: 'myPackage',
    version: '0.0.1'
};

try {
    bowerJson.validate(json);
} catch (err) {
    console.error('There was an error validating the object');
    console.error(err.message);
}
```

#### .normalize(json)

```js
var bowerJson = require('bower-json');

var json = {
    name: 'my-package',
    version: '0.0.1',
    main: 'foo.js,bar.js'
};

bowerJson.normalize(json);
json.main // ['foo.js', 'bar.js']
```


#### .find(folder, callback)
#### .findSync(folder)

Finds the `json` filename inside a folder.
Checks if a `bower.json` exists, falling back to `component.json` (deprecated) and `.bower.json`.
If no file was found, the callback is called with a `error.code` of `ENOENT`.

```js
var bowerJson = require('bower-json');

bowerJson.find('/path/to/folder', function (err, filename) {
    if (err) {
        console.error('There is no json file in the folder');
        return;
    }

    console.log('Filename: ', filename);

    // Now that we got the filename, we can read its contents
    bowerJson.read(filename, function (err, json) {
        if (err) {
            console.error('There was an error reading the file');
            console.error(err.message);
            return;
        }

        console.log('JSON: ', json);
    });
});
```


## License

Released under the [MIT License](http://www.opensource.org/licenses/mit-license.php).

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