Skip to content

Instantly share code, notes, and snippets.

View conartist6's full-sized avatar

Conrad Buck conartist6

  • Boulder, CO
View GitHub Profile
@conartist6
conartist6 / signal.js
Last active November 13, 2026 14:39
Stripped down SolidJS signals
// MIT License
// Copyright (c) 2016-2025 Ryan Carniato
// From https://github.com/solidjs/solid/blob/99714d4e2875d2d7ef8023e82f4ef6aa63ff0752/packages/solid/src/reactive/signal.ts
export const equalFn = (a, b) => a === b;
let signalOptions = { equals: equalFn };
let ERROR = null;
let runEffects = runQueue;
@conartist6
conartist6 / tamper.js
Created November 3, 2026 18:11
Tampermonkey: lobste.rs code highlighting
// Use with https://www.tampermonkey.net/
// ==UserScript==
// @name Lobsters Higlight Code
// @namespace http://tampermonkey.net/
// @version 2026-11-03
// @description Highlight monospace code on lobste.rs
// @author Conrad Buck
// @match https://lobste.rs/*
// @icon https://www.google.com/s2/favicons?sz=64&domain=lobste.rs
@conartist6
conartist6 / index.md
Created November 3, 2026 18:06
agAST docs

agAST

agAST is an in-memory storage format for CSTML trees. You can think of agAST as being the "Document Object Model" for CSTML.

Any CSTML stream can be stored in an agAST tree and then re-emitted without changing its meaning. The re-emitted stream may not be identical to its source stream, though. The agast-helpers library provides the utilites you will need to handle trees fluently, such as treeFrom(stream) and streamFrom(tree).

Each node in an agAST tree is a javascript array. It has, at least, a node[0] the value of which is a string that can be parsed as a CSTML open tag, gap tag, or null tag.

It's worth nothing that we often use the terms "node" and "tree" interchangeably. Here is our first simple tree then:

@conartist6
conartist6 / package.json
Last active October 22, 2026 20:54
BABLR rename variable (easy mode)
{
"name": "",
"type": "module",
"main": "./play.js",
"dependencies": {
"bablr": "0.12.6",
"@bablr/language-en-es3": "0.4.1",
"@bablr/agast-helpers": "0.11.4",
"@bablr/helpers": "0.26.5",
"@bablr/fs": "3.0.1"
@conartist6
conartist6 / json-stream-parser.js
Last active April 26, 2026 18:22
JSON stream parser for guthib-of-dan
import { StreamGenerator, wait } from '@bablr/stream-iterator';
import { decodeUTF8, readFile } from '@bablr/fs';
let { isArray } = Array;
let arrayLast = (arr) => arr[arr.length - 1];
let maybeWait = (maybePromise, callback) => {
let isPromise = maybePromise instanceof Promise;
return isPromise ? maybePromise.then(callback) : callback(maybePromise);
@conartist6
conartist6 / index.js
Created March 23, 2026 23:01
@bablr/regex benchmark
import { re } from '@bablr/boot';
import { generateMatches } from '@bablr/regex-vm';
let input = '5'.repeat(10000000);
console.time();
let matches = [];
for (let match of generateMatches(re`/\d+\s+/g`, input)) {
matches.push([...match[0]]);
@conartist6
conartist6 / index.cstml
Created January 26, 2026 13:05
`bablr -l @bablr/language-en-es3 -p Program -s <<< 'foo.bar = baz'`
<Program>
body[]$:
<ExpressionStatement>
expression+$:
<Identifier>
value*: <*Literal 'foo' />
</>
^^^
<MemberExpression>
object+$: <//>
@conartist6
conartist6 / index.cstml
Last active January 7, 2026 20:54
Typescript `declare function concat<T>(sources: Array<Wrappable<T>>);`
<Program>
body[]:
<_>
.: :TS:
<DeclarationStatement>
sigilToken*: <*Keyword 'declare' />
declaration*:
<_>
#: :Space: <*Space ' ' />
<FunctionDeclaration>
@conartist6
conartist6 / 1.log
Last active April 14, 2025 11:22
BABLR `/[--]/` parse log
>>> init('https://bablr.org/languages/core/en/bablr-regex-pattern')
>>> startFrame('eat', m`< />`, {})
>>> advance(t`<!0:cstml { bablrLanguage: 'https://bablr.org/languages/core/en/bablr-regex-pattern' }>`)
>>> advance(t`<$_>`)
--> `@bablr/fragment`
>>> eat(m`<$'https://bablr.org/languages/core/en/bablr-regex-pattern':Pattern />`)
>>> advance(t`.:`)
>>> startFrame('eat', m`.: <$'https://bablr.org/languages/core/en/bablr-regex-pattern':Pattern />`, { bind: false, allowEmpty: false })
>>> advance(t`<$'https://bablr.org/languages/core/en/bablr-regex-pattern':Pattern>`)
--> Pattern
@conartist6
conartist6 / index.js
Last active March 18, 2025 18:36
Text-only sumtree
import { buildModule, defaultNodeSize } from '@bablr/btree/enhanceable';
const { isArray } = Array;
const { freeze } = Object;
const LiteralTag = Symbol.for('LiteralTag');
export { defaultNodeSize };
export const {