View emitter.js
class Emitter {
constructor (data) {
this.data = data
this.events = new Map()
}
on (name, fn) {
const fns = this.events.get(name) || new Set()
fns.add(fn)
this.events.set(name, fns)
View a11y-observer.js
;(function (w, c) {
var s, o = new MutationObserver(d(a), 1000)
if (typeof axe === 'undefined') {
s = w.createElement('script')
s.src = 'https://cdnjs.cloudflare.com/ajax/libs/axe-core/3.0.2/axe.min.js'
s.onload = function () {
o.observe(w.body, c)
}
w.body.appendChild(s)
View better-nodejs-require-paths.md

Better local require() paths for Node.js

Problem

When the directory structure of your Node.js application (not library!) has some depth, you end up with a lot of annoying relative paths in your require calls like:

var Article = require('../../../models/article');

Those suck for maintenance and they're ugly.

Possible solutions

View handleError.js
const PrettyError = require('pretty-error')
process.on('unhandledRejection', error => {
const err = new PrettyError()
console.log(err.render(error))
})
// OR
const createCallsiteRecord = require('callsite-record')
View lovable.md

Lovable

Lovable modules maximize developer trust.

To learn how to maximize trust, I studied developers I trust and some of their most popular modules. It's no coincidence that I ended up using some of their modules to build mine!

Dependencies

Dependencies introduce friction. Most of the modules I trust have a small number of dependencies (including siblings). This makes sense. Removing dependencies from your module will remove friction of adoption. I decided that my first lovable module should have zero dependencies.

View speech.js
async function speak(text) {
const msg = new SpeechSynthesisUtterance();
msg.text = text;
// msg.volume = 1; // 0 to 1
// msg.rate = 1; // 0.1 to 10
// msg.pitch = 1; //0 to 2
// msg.lang = this.DEST_LANG;
msg.voice = await new Promise(resolve => {
// Voice are populated, async.
speechSynthesis.onvoiceschanged = (e) => {
View deep-copy.js
function structuredClone(obj) {
const oldState = history.state
history.replaceState(obj, window.title)
const copy = history.state
history.replaceState(oldState, window.title)
return copy
}
View axe-tape-puppeteer.test.js
const test = require('tape')
const util = require('util')
const puppeteer = require('puppeteer')
const component = 'my-component'
let browser, page, focus
const componentId = 'my-component-instance'
const interactionId = 'my-component-trigger'
test(component, async t => {
View index.js
// map with native fn
[' a', 'b ', 'c'].map(Function.prototype.call, String.prototype.trim)
View preact-set-state.js
import { h, Component } from 'preact'
import style from './style'
import state from 'set-state'
const toInteger = n => (isNaN(n) ? 0 : parseInt(n || 0, 10))
// raw count state with default
const count = state(0)
// collects events used to set count
const setCount = state()
// projection of count as integer