hotdrink v0.1.1
HotDrink
Getting started
npm install --save hotdrinkImport as module
Hotdrink is exported as an UMD (Universal Module Definition).
You can import HotDrink using ECMAScript's import:
// main.js
import { ConstraintSystem, component } from "hotdrink";
let system = new ConstraintSystem();
let comp = component`
    var a = 2, b;
    
    constraint {
      (a -> b) => a*2;
    }
  `
system.addComponent(comp)
// Print the current value of b (should be undefined)
// and a new value whenever the variable changes
comp.vs.b.value.subscribeValue(v => console.log('Value of b: ' + v));
system.update(); // This should print 'Value of b: 4'Running the file outputs the following.
$ node main.js
Value of b: undefined
Value of b: 4Note that node uses CommonJS-modules by default (uses module.exports and require for exporting and importing), so you'll have to add "type": "module" in your package.json if you're not using a bundler such as WebPack.
Use in website with WebPack
An easy way to develop a website with HotDrink is to use the WebPack Module Bundler. WebPack bundles all imported modules into one JavaScript-file and injects it in your HTML file.
- Initialise an NPM/yarn-project (npm init -y) in an empty folder
- Install webpackandwebpack-clias developer dependencies (npm install --save-dev webpack webpack-cli).
- Run npx webpack-cli initto use the default WebPack-template. Append--forceat the end to skip all the questions asked by the command-line tool (ES6 or TypeScript, CSS or SCSS, etc.).
- Install hotdrinkas a dependency (npm install --save hotdrink) and import it as a module in your JavaScript-files.
To start a development server, run npx webpack serve.
Documentation
Documentation can be found in ./docs.
Local Development
To get started with the repository on your computer, run
$ make lib # This will transpile FlowType files to JavaScript files in ./libYou can also run make help for more options.
You can add the local library to a local NPM project by running either of these commands in your project:
$ npm install --save /path/to/this/folder # Using NPM
# or
$ yarn add /path/to/this/folder # Using YarnYou can also bundle the library to a single, web-ready, JavaScript file with make bundle-dev. The generated file can be copied (or symlinked) into your web-project folder and linked directly to in your HTML-file.
<!-- index.html -->
<!-- ... -->
<script src="hotdrink/hotdrink.js"></script>
<script src="myScript.js"></script>
<!-- ... -->This exposes a global variable hd that contains all exposed classes and functions from HotDrink.
// myScript.js
function bind(inputElement, variable) {
  inputElement.addEventListener('change', event => {
    variable.set(parseInt(event.target.value));
  });
  variable.subscribeValue(v => {
    inputElement.value = v;
  })
}
// Notice that HotDrink is implicitly imported
const system = hd.defaultConstraintSystem;
const comp = hd.component`
    component comp {
        var c = 1, f;
        constraint {
            (f -> c) => (f - 31) / 1.8;
            (c -> f) => (c * 1.8) + 31;
        }
    }
`;
system.addComponent(comp);
bind(document.getElementById("cel"), comp.vs.c.value);
bind(document.getElementById("fahr"), comp.vs["f"].value);
system.update();