Aquilio/gatsby-plugin-liist-config

View on GitHub
README.md

Summary

Maintainability
Test Coverage
# gatsby-plugin-liist-config

[![npm package](https://flat.badgen.net/npm/v/gatsby-plugin-liist-config)](https://badgen.net/npm/v/gatsby-plugin-liist-config)
[![Maintainability](https://flat.badgen.net/codeclimate/maintainability/Aquilio/gatsby-plugin-liist-config)](https://codeclimate.com/github/Aquilio/gatsby-plugin-liist-config/maintainability)
![Dependabot](https://flat.badgen.net/dependabot/thepracticaldev/dev.to?icon=dependabot)

A Gatsby plugin for pulling [Liist](https://liist.io) config from a spreadsheet.

The plugin uses the `gatsby-source-google-sheets` plugin to retrieve rows of key-value pairs that configure a Liist site.

---

- [Install](#install)
  - [Manual](#manual)
- [How to use](#how-to-use)
  - [Options](#options)
  - [Site Images](#site-images)
  - [Theme](#theme)
  - [Fonts](#fonts)
  - [Environment Variables](#environment-variables)
- [Changelog](#changelog)
- [License](#license)

## Install

### Manual

1. Install `gatsby-plugin-liist-config`

   `npm install --save gatsby-plugin-liist-config`

2. Add plugin to `gatsby-config.js`

   ```javascript
   // In your gatsby-config.js
    module.exports = {
      plugins: [
        {
        resolve: `gatsby-plugin-liist-config`,
        options: {
          spreadsheetId: '1234',
          worksheetTitle: 'Settings',
          credentials: {/* service account credentials */},
          imageSettings: [/* ... */],
          themeSettings: {/* ... */},
          fontKeys: [/* .. */]
        }
      ],
    };
   ```

## How to use

### Options

| Option                     | Explanation                                                                 |
| -------------------------- | --------------------------------------------------------------------------- |
| `spreadsheetId`            | The id of the spreadsheet (required)                                        |
| `worksheetTitle`           | The title of the shett containing the configuration (required)              |
| `credentials`              | The service account credentials generated from the Google Developer Console |
| `imageSettings`            | Array of image configs                                                      |
| `imageSettings.key`        | The key of the row the value comes from                                     |
| `imageSettings.dest`       | The destination folder (relative to the root of the site)                   |
| `imageSettings.outputName` | The name of the output (minues the extension)                               |
| `themeSettings`            | Theme settings                                                              |
| `themeSettings.output`     | Name of the generated scss file                                             |
| `themeSettings.formatters` | Array of variable (inner part of the [...]) key (function) pairs            |
| `fontKeys`                 | Array of theme variables that are fonts that should be prefetched           |

### Images

Any images configured with the `imageSettings` option will be downloaded, placed in the destination folder and have the public path exposed as an environment variable.

This configuration:

```js
{
  imageSettings: [
    {
      key: 'GATSBY_LOGO',
      dest: 'src/images',
      outputName: 'logo',
    },
  ];
}
```

Would result in the image being downloaded and stored in `src/images/logo.{ext}`. The environment variable `GATSBY_LOGO` would equal `images/logo.{ext}`

### Theme

Any settings with a key of the format `THEME[$secondary]` will be put into a custom scss file located at `src/scss/` with the filename specified by `themeSettings.output`. The value inside the `[...]` is the variable name and the values will be printed as is.

If a variable's value requires a custom format, provide that in `themeSettings.formatters`. The key should be the theme variable and the function takes the value from the spreadsheet and must return a string to be written to the SCSS file.

For example a row with the key `THEME[$default]` and value `#00ff00` becomes:

`$default: #00ff00;`

Adding a custom formatter:

```js
{
  formatters: {
    '$default': value => `'Something'`;
  }
}
```

Now it becomes:

`$default: 'Something';`

### Fonts

Theme variables that are provided in the `fontKeys` options will be treated differently. In addition to being output in the generated SCSS files, they are also prefetched using the `gatsby-plugin-prefetch-google-fonts` plugin.

### Environment Variables

All other settings will be put on `process.env` using their key as the variable name.

For example

`GATSBY_SITE_TITLE => Site Title`

```js
console.log(process.env.GATSBY_SITE_TITLE); //-> 'Site Title'
```

## Changelog

See [CHANGELOG.md](CHANGELOG.md).

## License

[MIT](https://github.com/pixelplicity/gatsby-plugin-liist-config/blob/master/LICENSE) © [Pixelplicity](https://github.com/pixelplicity)