Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
High-level I/O for web applications.
JavaScript CSS HTML Shell
Branch: master

README.md

Fortune.js

Build Status npm Version License

Fortune is a high-level I/O library for web applications. It provides an implementation of entity-relationship modelling, is agnostic about data storage, and can be used to power real-time (WebSocket) and hypermedia applications (RMM Level 3).

View the website for documentation. Get it from npm:

$ npm install fortune --save

Example

Let's build an API that models Twitter's basic functionality:

import fortune from 'fortune'
import http from 'http'

const store = fortune.create()

// The `net.http` function returns a listener function which does content
// negotiation, parses headers, and maps the response to an HTTP response.
const server = http.createServer(fortune.net.http(store))

store.defineType('user', {
  name: { type: String },

  // Following and followers are inversely related (many-to-many).
  following: { link: 'user', inverse: 'followers', isArray: true },
  followers: { link: 'user', inverse: 'following', isArray: true },

  // Many-to-one relationship of user posts to post author.
  posts: { link: 'post', inverse: 'author', isArray: true }
})

store.defineType('post', {
  message: { type: String },

  // One-to-many relationship of post author to user posts.
  author: { link: 'user', inverse: 'posts' }
})

store.connect().then(() => server.listen(1337))

This yields an ad hoc HTTP API. There are serializers for Micro API (JSON-LD) and JSON API.

By default, the data is persisted in memory. There are adapters for databases such as MongoDB, Postgres, and NeDB.

See the plugins page for more details.

License

This software is licensed under the MIT license.

Something went wrong with that request. Please try again.