JSPM

  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 20
  • Score
    100M100P100Q42829F
  • License GPL-3.0

Build social images with Node.js

Package Exports

  • cezanne

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (cezanne) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

Cezanne Core

Usage

In order to get started with Cezanne, you need a configuration file in the root of your project (where the package.json file is located). We suggest to use Dhall for a better development experience (not required, but recommended).

let makeUrl = \(item : Text) ->
    let remote    = "https://example.com"
    let opengraph = "${remote}/opengraph"
    let instagram = "${remote}/instagram"
    let twitter   = "${remote}/twitter"
    let linkedin  = "${remote}/linkedin"
    in {
        instagram = "${instagram}/${item}/:id"
      , opengraph = "${opengraph}/${item}/:id"
      , twitter   = "${twitter}/${item}/:id"
      , linkedin  = "${linkedin}/${item}/:id"
     }

in {
       version   = 0.1
     , endpoints = {
       articles  = makeUrl "articles"
     , topics    = makeUrl "topics"
     , authors   = makeUrl "authors"
     , languages = makeUrl "languages"
       }
    ,
    viewports = {
        instagram = [1080, 1080]
      , opengraph = [1200, 630]
      , twitter   = [1012, 506]
      , linkedin  = [1920, 1080]
    }
    ,
    aws = {
        access_key    = ""
      , access_secret = ""
      , bucket_name   = ""
      , path          = "/path/example/:item/:id"
    }
   }

the generated JSON file is:

{
  "version": 0.1,
  "endpoints": {
    "articles": {
      "instagram": "https://example.com/instagram/articles/:id",
      "linkedin": "https://example.com/linkedin/articles/:id",
      "opengraph": "https://example.com/opengraph/articles/:id",
      "twitter": "https://example.com/twitter/articles/:id"
    },
    "authors": {
      "instagram": "https://example.com/instagram/authors/:id",
      "linkedin": "https://example.com/linkedin/authors/:id",
      "opengraph": "https://example.com/opengraph/authors/:id",
      "twitter": "https://example.com/twitter/authors/:id"
    },
    "languages": {
      "instagram": "https://example.com/instagram/languages/:id",
      "linkedin": "https://example.com/linkedin/languages/:id",
      "opengraph": "https://example.com/opengraph/languages/:id",
      "twitter": "https://example.com/twitter/languages/:id"
    },
    "topics": {
      "instagram": "https://example.com/instagram/topics/:id",
      "linkedin": "https://example.com/linkedin/topics/:id",
      "opengraph": "https://example.com/opengraph/topics/:id",
      "twitter": "https://example.com/twitter/topics/:id"
    }
  },
  "viewports": {
    "instagram": [
      1080,
      1080
    ],
    "linkedin": [
      1920,
      1080
    ],
    "opengraph": [
      1200,
      630
    ],
    "twitter": [
      1012,
      506
    ]
  },
  "aws": {
    "access_key": "",
    "access_secret": "",
    "bucket_name": "",
    "path": "/path/example/:item/:id"
  }
}

Name the file cezanne.config.json and you can start to use Cezanne.

It will generate a dynamic method for every route listed in your cezanne.config.json file, following the format:

generate[Endpoint][Social]

so that with the given configuration file, you'll have the following methods:

generateArticlesInstagram(...);
generateArticlesLinkedin(...);
generateArticlesOpengraph(...);

and so on. If the specified uri has a dynamic parameter (using the Express.js colon notation), you'll need to pass an object with the parameter values as follows:

import cezanne from "cezanne";

const { generateArticlesInstagram } = cezanne;

// URI: https://example.com/instagram/articles/:id
//                                   dynamic id ^
generateArticlesInstagram({ id: "15" });