Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/mattdean1/contentful-sync-redis
Keep an up-to-date copy of your Contentful space in Redis
https://github.com/mattdean1/contentful-sync-redis
contentful nodejs npm-package redis sync-api
Last synced: 4 months ago
JSON representation
Keep an up-to-date copy of your Contentful space in Redis
- Host: GitHub
- URL: https://github.com/mattdean1/contentful-sync-redis
- Owner: mattdean1
- License: mit
- Created: 2017-08-25T17:46:22.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2017-10-05T13:46:23.000Z (over 7 years ago)
- Last Synced: 2024-10-03T06:09:23.893Z (4 months ago)
- Topics: contentful, nodejs, npm-package, redis, sync-api
- Language: JavaScript
- Homepage: https://www.npmjs.com/package/contentful-sync-redis
- Size: 163 KB
- Stars: 4
- Watchers: 2
- Forks: 2
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
[![Build Status](https://travis-ci.org/mattdean1/contentful-sync-redis.svg?branch=master)](https://travis-ci.org/mattdean1/contentful-sync-redis)
# contentful-sync-redis
> Keep an up-to-date copy of your Contentful space in Redis
#### What does this package do?
- Keeps a copy of your Contentful space in Redis, using the [Contentful Sync API](https://www.contentful.com/developers/docs/concepts/sync/).
- Provides a helper function to resolve [Links](https://www.contentful.com/developers/docs/concepts/links/) inside your entries.#### Why wouldn't I use the Contentful Javascript SDK?
The Contentful JS SDK is a only thin wrapper on top of their API, and it can be tedious to [implement the Sync API](https://www.contentful.com/developers/docs/javascript/tutorials/using-the-sync-api-with-js/) in every project.
# Install
```
npm install --save contentful-sync-redis
```# Usage
```javascript
const ContentfulSyncRedis = require('contentful-sync-redis')
const cf = new ContentfulSyncRedis({ space: 'space_id', token: 'access_token' })
cf.getEntries()
.then(entries => yourFunction(entries))
```# API
### Initialisation
Initialise the module using the `new` operator, passing in the mandatory values for:
- Contentful space ID
- Contentful access tokenOptionally, also pass in:
- Contentful API host
- Default: `cdn.contentful.com`
- Redis URL
- Default: `redis://localhost:6379````javascript
const ContentfulSyncRedis = require('contentful-sync-redis')
const cf = new ContentfulSyncRedis({
space: 'string',
token: 'string',
contentfulHost: 'optionalString',
redisHost: 'optionalString',
})
```### Synchronisation
Perform the initial download of content to Redis - it's often worth calling this just after initialisation
```javascript
cf.sync() // returns an empty promise
```### Getting Entries
Return all entries in the Contentful space, after making sure the cache is synced.
You can use this without calling `sync()` beforehand.
```javascript
cf.getEntries() // returns a promise containing the entries
```### Get Entries and Resolve Links
A wrapper function that calls `getEntries` and then `resolveReferences`.
```javascript
cf.getResolvedEntries(entries) // returns a promise containing the resolved entries
```###
### Resolving Links
Dereferences links to other entries in your content and groups fields by locale. Pass in an array of entries.
```javascript
cf.resolveReferences(entries) // returns a promise containing the resolved entries
```e.g.
```javascript
cf.resolveReferences([
{
sys: { ... },
fields: {
title: {
"en-US": `Home`,
},
summary: {
"en-US": `This is the homepage, it talks about the site `,
},
sections: {
"en-US": [
{
sys: {
type: `Link`,
linkType: `Entry`,
id: `6Gz0vGZmAoSgOSAM2Ks4gW`,
},
},
{
sys: {
type: `Link`,
linkType: `Entry`,
id: `S9n6QORFyEeKEUaGS2Ym4`,
},
},
],
},
},
}
])
```Returns a Promise which resolves to:
```javascript
{
sys: { ... },
fields: {
"en-US": {
title: `Home`,
summary: `This is the homepage, it talks about the site `,
sections: [
{
sys: { ... },
fields: {
"en-US": {
title: `About us`,
content: `Made by Matt Dean`,
},
},
},
{
sys: { ... },
fields: {
"en-US": {
title: `Introduction`,
content: `Hi this is contentful-sync-redis`,
},
},
},
],
},
},
}
```Where 'sections' is a multi-reference field
### Logging
See the [debug module](https://www.npmjs.com/package/debug). Use the package name (`contentful-sync-redis`) as the string in the environment variable.
# Release Map / Changelog
### MVP - 0.1
- [x] Implement Sync API
- [x] `resolveReferences` helper function
- [x] Preview API supported### 0.2
- [x] Tests using Mocha
- [x] CI integration using Travis
- [x] Contribution guidelines### 0.3
- [x] Group fields by locale
- [x] No longer configure Redis client using an environment variable### 0.4
- [x] Add sugar function to get entries and resolve references with a single call
### 1.0
- [ ] Support old versions of Node using webpack
### Later releases / To do
- Plugin functionality to allow for other databases
- Support filtering content
- Support assets# Contributions
All contributions welcome! Please feel free to open an issue/PR :smile: