Giter Club home page Giter Club logo

contentful-sync-redis's Introduction

Build Status

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.
  • Provides a helper function to resolve 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 in every project.

Install

npm install --save contentful-sync-redis

Usage

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 token

Optionally, also pass in:

  • Contentful API host
    • Default: cdn.contentful.com
  • Redis URL
    • Default: redis://localhost:6379
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

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.

cf.getEntries() // returns a promise containing the entries

Get Entries and Resolve Links

A wrapper function that calls getEntries and then resolveReferences.

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.

cf.resolveReferences(entries) // returns a promise containing the resolved entries

e.g.

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:

{
  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. Use the package name (contentful-sync-redis) as the string in the environment variable.

Release Map / Changelog

MVP - 0.1

  • Implement Sync API
  • resolveReferences helper function
  • Preview API supported

0.2

  • Tests using Mocha
  • CI integration using Travis
  • Contribution guidelines

0.3

  • Group fields by locale
  • No longer configure Redis client using an environment variable

0.4

  • 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 ๐Ÿ˜„

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.