Skip to content

Instantly share code, notes, and snippets.

@matthewp
matthewp / .gitignore
Created December 31, 2019 21:06
Minimal example
out.mjs
node_modules/

This is a huge release for Haunted, one of the biggest since the initial release. Before getting into features I want to give some appreciate to @jdin, @Gladear, and @chase-moskal who all made tremendous contributions to this release. That cannot go overstated, I did only a small part of this release, the Haunted community is what keeps this project alive. ❤️ 🎃 . Now that the sappy stuff is complete, on to the features!

State API

At its core Haunted is a container for state and lifecycle callbacks that is derived from hooks like useState, useMemo, even useEffect. With the component() API you get more than just that, you also get a scheduler that handles rendering and committing the result.

A lot of people have wanted to use hooks outside of the context of Haunted components. One example is using hooks inside of a LitElement component. The new State API enables this, by exposing the low-level part of Haunted which is its state container.

export default {
mode: 'universal',
/*
** Headers of the page
*/
head: {
title: process.env.npm_package_name || '',
meta: [
{ charset: 'utf-8' },
@matthewp
matthewp / fixture.js
Created September 10, 2019 19:28
Fixtures and schema merging
let RelativeDate = {
[Symbol.for("can.new")](value) {
if( date === "yesterday" ) {
return new Date()- 1000*24
}
return date;
},
[Symbol.for("can.isMember")](value) {
return value instanceof Date;
}
@matthewp
matthewp / machine.js
Created September 7, 2019 20:22
FSM backup
function valueEnumerable(value) {
return { enumerable: true, value };
}
function valueEnumerableWritable(value) {
return { enumerable: true, writable: true, value };
}
let truthy = () => true;
let empty = () => ({});
@matthewp
matthewp / machine.js
Created September 7, 2019 20:22
FSM backup
function valueEnumerable(value) {
return { enumerable: true, value };
}
function valueEnumerableWritable(value) {
return { enumerable: true, writable: true, value };
}
let truthy = () => true;
let empty = () => ({});
@matthewp
matthewp / helpers.js
Last active September 2, 2019 23:59
Filters for eleventy.
eleventyConfig.addFilter('bareUrl', url => {
return url.substr(1);
});
eleventyConfig.addFilter('baseUrl', url => {
let rel = path.relative(path.dirname(url), '/') || '.';
return rel + '/';
});
@matthewp
matthewp / lit-haunted-element.js
Last active October 17, 2021 15:52
Haunted State Integration
import { LitElement } from 'lit-element';
import { State } from 'haunted';
export default class LitHauntedElement extends LitElement {
constructor() {
super();
this.hauntedState = new State(() => this.requestUpdate(), this);
}
@matthewp
matthewp / constants.js
Last active July 20, 2022 19:55
FSM DSL
export const HOLE = 'hole';
export const ASSIGN = 'assign';
@matthewp
matthewp / .gitignore
Created July 12, 2019 15:17
haunted example
node_modules/
build/