• Stars
    star
    151
  • Rank 246,057 (Top 5 %)
  • Language
    JavaScript
  • License
    MIT License
  • Created over 8 years ago
  • Updated about 8 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

A guard that represents a central point of control in your application

Refraction

Build Status npm version npm downloads Coverage Status Join the chat at https://gitter.im/mbasso/refraction

A guard that represents a central point of control in your application.

Modern javascript applications are often organized into modules, which are awesome but have some problems that we can't avoid. When we are writing an application in this way, we must consider that all our modules must be independent, testable, instantly reusable and secure. Refraction's purpose is to make these concerns take care of themselves by using some design patterns. Since modules might be independent, with no inter-module dependencies, Refraction adds an intermediate layer that handles all messages that an application uses, allowing communication between modules. This way, modules don't need to know each other, only the layer that is responsible for managaging communication. If we want to change a module, we can do so without worrying about how other modules use it. Modules have a very limited knowledge of what's going in the rest of the system. For this reason, we can define refraction as a guard, a central point of control.

Installation

You can install Refraction using npm:

npm install --save refraction

If you aren't using npm in your project, you can include Refraction using UMD build in the dist folder with <script> tag.

Usage

Refraction exposes only a small set of APIs. What is important to know is it's concept. A complete guide about usage can be found here. However, here is the gist:

import Refraction from 'refraction';

class CustomRefraction extends Refraction {

  routeChange(route) {
    this.publish('routeChange', {
      type: 'route',
      payload: route,
    });
  }
}

class RouteManager {

  routeChange({ payload }) {
    window.location.href = payload;
  }
}

class ConsoleManager {

  routeChange({ payload }) {
    console.log(`New location = ${payload}`);
  }
}

const routeMiddleware = (param) => {
  const result = Object.assign({}, param);
  if (result && result.type === 'route') {
    // build complete url
    result.payload = `${window.location.protocol}//${window.location.host}${result.payload}`;
  }
  return result;
}

const refractionInstance = new CustomRefraction([ routeMiddleware ]);
const routeManager = new RouteManager();
const consoleManager = new ConsoleManager();

refractionInstance.subscribe(routeManager);
refractionInstance.subscribe(consoleManager);

// change route and log
refractionInstance.routeChange('home');

Documentation

Examples

You can find a series of examples in this repository under the examples folder. Alternatively, you can check awesome-refraction.

If you want to run examples, check out the instructions here.

Chat

This project has an official chat channel on gitter. This is the right place to talk about Refraction with us and others developers. Feel free to participate.

Join chat here.

Change Log

This project adheres to Semantic Versioning.
Every release, along with the migration instructions, is documented on the Github Releases page.

Inspiration

Refraction is inspired by different articles and tools:

  • Its architecture is inspired by this article based on Addy Osmani's talk of the same name, presented at LondonJS.
  • Its style is inspired by Redux

Authors

Matteo Basso

Adriano Buscema

Copyright and License

Copyright (c) 2016, Matteo Basso.

Refraction source code is licensed under the MIT License.

More Repositories

1

awesome-wasm

😎 Curated list of awesome things regarding WebAssembly (wasm) ecosystem.
8,801
star
2

asm-dom

A minimal WebAssembly virtual DOM to build C++ SPA (Single page applications)
C++
2,794
star
3

react-decoration

A collection of decorators for React Components
JavaScript
630
star
4

react-wasm

Declarative WebAssembly instantiation for React
JavaScript
447
star
5

gccx

Transforms CPX (JSX like syntax) into asm-dom Virtual DOM
JavaScript
261
star
6

wasm-worker

Move a WebAssembly module into its own thread
JavaScript
257
star
7

natural-regex

Create regex from natural language
JavaScript
152
star
8

ienumerable

Deep immutable, Lightweight Enumerable with superpowers
JavaScript
66
star
9

react-browser-detection

React component to detect browser
JavaScript
57
star
10

react-cssom

Css selector for React Components
JavaScript
57
star
11

asm-dom-boilerplate

A simple boilerplate to start using asm-dom without configuration.
Makefile
52
star
12

styled-components-test-utils

Test utils for styled-components compatible with jest, expect, chai and jasmine
JavaScript
46
star
13

react-https-redirect

Force a redirect to HTTPS when not on a local web server
JavaScript
34
star
14

react-http-request

React component exposes network request functionality
JavaScript
19
star
15

script-wasm

Require WebAssembly modules using script tag
JavaScript
14
star
16

watpl

Create WebAssembly modules using template strings
JavaScript
13
star
17

mandrake

Facility, Prosperity and Maintainability.
Elixir
9
star
18

refraction-react

React bindings for refraction
JavaScript
6
star
19

make-watch

Continuously run Make in watch mode
JavaScript
4
star
20

awesome-refraction

A collection of awesome things regarding Refraction ecosystem
4
star
21

spaceSurvival

A simple, free, open source game designed with Phaser.io
JavaScript
3
star
22

refraction-player

An events player for refraction
JavaScript
2
star
23

natural-regex-cli

Command line tool for natural-regex
JavaScript
2
star
24

npm-react-boilerplate

Minimal dev environment to build React modules
JavaScript
1
star
25

emscripten-issue-6442

Makefile
1
star
26

cleanChat

A simple free chat
JavaScript
1
star
27

se-assignment-8

Software Engineering course @ USI - Assignment 8
Java
1
star