All Projects → vadimdemedes → Lanterns

vadimdemedes / Lanterns

Licence: mit
⛩Write Markdown and get a GraphQL API for querying them for free

Programming Languages

javascript
184084 projects - #8 most used programming language


Lanterns


Lanterns Build Status

Write Markdown and get a GraphQL API for querying them for free

Deploy to now

Install

$ npm install --global lanterns

Usage

Create a folder for storing your Markdown files and name it documents:

mkdir documents

Create a file and name it according to [year]-[month]-[day]-[slug] format, then write the contents:

---
title: Hello World
category: News
---

This is my first post!

Run Lanterns:

$ lanterns
❯ Server is listening at port 3000

Execute GraphQL queries at http://localhost:3000/graphql:

{
	query {
		documents {
			title
			slug
			category
			body
		}
	}
}

Schema

Document

Document represents a single Markdown file in the file system.

type Document {
	# Title extracted from frontmatter's `title`
	title: String!
	# Title converted to a slug
	slug: String!
	# Category extracted from frontmatter's `category`
	category: String
	# All frontmatter fields
	frontmatter: JSON!
	# Document body without frontmatter
	body: String!
	# Date when a document was created
	createdAt: Date!
	# Date when a document was last updated
	updatedAt: Date!
}

documents(skip: Int, limit: Int, category: String)

Query documents with optional pagination parameters skip and limit. There's an optional category parameter to filter posts by their category.

Example:

{
	query {
		documents {
			title
			slug
			category
			frontmatter
			body
			createdAt
			updatedAt
		}
	}
}

document(slug: String!)

Query a single document by its slug.

Example:

{
	query {
		document(slug: "hello-world") {
			title
			slug
			category
			frontmatter
			body
			createdAt
			updatedAt
		}
	}
}

categories

Query all categories. This resolver scans all documents looking for category field in frontmatter, removes duplicates and returns the list.

License

MIT © Vadim Demedes

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].