# sections

> Manipulate sections in a markdown string. A 'section' is a block of content preceded by a valid markdown ATX heading.

Latest version **1.0.0** (published 2017-04-27) · MIT license · 0 weekly downloads

## Install

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

## Health

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

Positive: no vulnerabilities.

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

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 1.0.0 |
| Published | 2017-04-27 |
| First published | 2016-02-15 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Node | >=0.10.0 |
| Dependencies | 2 |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 7 |
| Author | Jon Schlinkert |
| Maintainers | jonschlinkert |
| Keywords | format, markdown, md, parse, sections |

## Links

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

## Dependencies (2)

- [sort-by-value](https://npm.io/package/sort-by-value.md) ^0.1.0
- [gfm-code-blocks](https://npm.io/package/gfm-code-blocks.md) ^1.0.0

## Alternatives

- [@mdxeditor/editor](https://npm.io/package/@mdxeditor/editor.md) — 962.4K weekly downloads
- [mmdb-lib](https://npm.io/package/mmdb-lib.md) — 680.9K weekly downloads
- [playcanvas](https://npm.io/package/playcanvas.md) — 36.2K weekly downloads
- [@glw907/cairn-cms](https://npm.io/package/@glw907/cairn-cms.md) — 967 weekly downloads
- [markdown-to-confluence](https://npm.io/package/markdown-to-confluence.md) — 103 weekly downloads

## Recent versions

- 1.0.0 (latest) — 2017-04-27
- 0.1.10 — 2017-03-16
- 0.1.9 — 2016-08-04
- 0.1.8 — 2016-03-20
- 0.1.7 — 2016-03-02
- 0.1.6 — 2016-02-23
- 0.1.5 — 2016-02-23
- 0.1.4 — 2016-02-23
- 0.1.2 — 2016-02-22
- 0.1.1 — 2016-02-15
- 0.1.0 — 2016-02-15

## README

# sections [![NPM version](https://img.shields.io/npm/v/sections.svg?style=flat)](https://www.npmjs.com/package/sections) [![NPM monthly downloads](https://img.shields.io/npm/dm/sections.svg?style=flat)](https://npmjs.org/package/sections)  [![NPM total downloads](https://img.shields.io/npm/dt/sections.svg?style=flat)](https://npmjs.org/package/sections) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/sections.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/sections)

> Manipulate sections in a markdown string. A 'section' is a block of content preceded by a valid markdown ATX heading.

## Install

Install with [npm](https://www.npmjs.com/):

```sh
$ npm install --save sections
```

Install with [yarn](https://yarnpkg.com):

```sh
$ yarn add sections
```

## Usage

This is meant to be fast and opinionated, and only works with [ATX headings](http://spec.commonmark.org/0.24/#atx-headings).

```js
var sections = require('sections');
var obj = sections.parse(str);
```

## API

<details>
<summary><strong>.parse</strong></summary>

### [.parse](index.js#L34)

Parses sections in a `string` of markdown and returns an object with two properties:

* `sections`: an array of markdown "sections", delimited by [ATX headings](http://spec.commonmark.org/0.24/#atx-headings),
* `result`: the cumulative result of whatever is returned by the (optional) function that is passed as the second argument.
Returns an object that looks [something like this](#example-object)

**Params**

* `string` **{String}**
* `fn` **{Function}**
* `returns` **{Object}**

**Example**

```js
var fs = require('fs');
var readme = fs.readFileSync('readme.md', 'utf8');
var sections = require('sections');
console.log(sections.parse(readme));
```

</details>

<details>
<summary><strong>.format</strong></summary>

### [.format](index.js#L72)

Format sections. By default, if no filter function
is passed, this filters out empty sections fixes
whitespace between sections.

**Params**

* `str` **{String}**: Markdown string
* `fn` **{Function}**: optional filter function
* `returns` **{String}**

</details>

<details>
<summary><strong>.sortBy</strong></summary>

### [.sortBy](index.js#L117)

Sort the sections in a parsed sections object, by the
given `prop` and array of `values`.

**Params**

* `obj` **{Object}**: Object returned from [.parse](#parse)
* `prop` **{String|Array}**: Defaults to `title`. The property to sort by, or the array of values to sort by.
* `values` **{Array}**: Array of values to sort by.
* `returns` **{Object}**

</details>

<details>
<summary><strong>.render</strong></summary>

### [.render](index.js#L152)

Renders the array of `sections` from [.parse](#parse).

**Params**

* `obj` **{Object}**: Sections object returned from [.parse](#parse)
* `values` **{Array}**: (optional) To sort the array of sections by `title`, pass an array of values to sort by.
* `returns` **{String}**

**Example**

```js
var fs = require('fs');
var readme = fs.readFileSync('readme.md', 'utf8');
var sections = require('sections');
var obj = sections.parse(readme);
var str = sections.render(obj);
console.log(str);
```

</details>

### Example object

The parsed object that is returned looks something like this:

```js
{ sections:
   [ Section {
       pos: 12,
       count: 0,
       string: '# sections \n',
       heading: '# sections',
       level: 1,
       title: 'sections',
       body: '' },
     Section {
       pos: 32,
       count: 1,
       string: '\n## Foo\nThis is foo\n',
       heading: '## Foo',
       level: 2,
       title: 'Foo',
       body: 'This is foo' },
     Section {
       pos: 52,
       count: 2,
       string: '\n## Bar\nThis is bar\n',
       heading: '## Bar',
       level: 2,
       title: 'Bar',
       body: 'This is bar' },
     Section {
       pos: 72,
       count: 3,
       string: '\n## Baz\nThis is baz\n',
       heading: '## Baz',
       level: 2,
       title: 'Baz',
       body: 'This is baz' } ],
  result: '',
  headings: [ 'sections', 'Foo', 'Bar', 'Baz' ] }
```

## About

### Related projects

* [gulp-format-md](https://www.npmjs.com/package/gulp-format-md): Gulp plugin for beautifying markdown using pretty-remarkable. | [homepage](https://github.com/jonschlinkert/gulp-format-md "Gulp plugin for beautifying markdown using pretty-remarkable.")
* [markdown-utils](https://www.npmjs.com/package/markdown-utils): Micro-utils for creating markdown snippets. | [homepage](https://github.com/jonschlinkert/markdown-utils "Micro-utils for creating markdown snippets.")
* [remarkable](https://www.npmjs.com/package/remarkable): Markdown parser, done right. 100% Commonmark support, extensions, syntax plugins, high speed - all in… [more](https://github.com/jonschlinkert/remarkable) | [homepage](https://github.com/jonschlinkert/remarkable "Markdown parser, done right. 100% Commonmark support, extensions, syntax plugins, high speed - all in one.")

### Contributing

Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new).

### Building docs

_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_

To generate the readme, run the following command:

```sh
$ npm install -g verbose/verb#dev verb-generate-readme && verb
```

### Running tests

Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command:

```sh
$ npm install && npm test
```

### Author

**Jon Schlinkert**

* [github/jonschlinkert](https://github.com/jonschlinkert)
* [twitter/jonschlinkert](https://twitter.com/jonschlinkert)

### License

Copyright © 2017, [Jon Schlinkert](https://github.com/jonschlinkert).
Released under the [MIT License](LICENSE).

***

_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.6.0, on April 27, 2017._

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