Skip to content

Instantly share code, notes, and snippets.

View mattfysh's full-sized avatar
🌐

Matt mattfysh

🌐
View GitHub Profile
@mattfysh
mattfysh / index.ts
Last active February 4, 2025 15:14
Bun socket listener invoked twice [intermittent]
import net from 'node:net'
import { spawn } from 'bun'
const ready = Promise.withResolvers<number>()
const server = spawn({
cmd: ['bun', 'server.ts'],
stdio: ['inherit', 'inherit', 'inherit'],
serialization: 'json',
ipc: port => ready.resolve(port),
import os
import sys
import json
from time import sleep
# if we open the fd before bun has written to it
# we'll get a "bad fd" error :\
sleep(1)
fd = 3
@mattfysh
mattfysh / child.js
Created January 25, 2025 03:45
Bun extra stdio fd's + IPC
import fs from 'node:fs'
import { log } from './log.js'
const fds = fs.readdirSync('/dev/fd').join(' ')
console.log('child.fds', fds)
process.send('test IPC')
log('node', 3)
@mattfysh
mattfysh / bundler.ts
Last active January 31, 2025 00:01
bun build --target cloudflare
import path from 'node:path'
import Bun from 'bun'
import { z } from 'zod'
function soft(to: string, from: string) {
return new URL(import.meta.resolve(to, from)).pathname
}
function hard(to: string, from: string) {
return Bun.resolveSync(to, path.dirname(from))
@mattfysh
mattfysh / paginate.ts
Created May 18, 2024 09:22
Drizzle `withPagination`
import invariant from 'tiny-invariant'
import type { PgColumn, PgSelect } from 'drizzle-orm/pg-core'
import type { SQL } from 'drizzle-orm'
import { desc, gt, lt, eq, and, or } from 'drizzle-orm'
// using `asc` or `desc` outside this function obscures the
// original column name, so they must be applied internally
type Order = 'desc' | 'asc'
type OrderColumn = PgColumn | [PgColumn, Order]
type Options = {
@mattfysh
mattfysh / express.js
Last active May 11, 2024 02:47
Express as miniflare wrapper
const express = require('express')
const { text } = require('node:stream/consumers')
const { Writable } = require('node:stream')
const { Miniflare, Log } = require('miniflare')
const app = express()
const mf = new Miniflare({
script: `addEventListener("fetch", (event) => {
event.respondWith(new Response("Hello Miniflare!"));
@mattfysh
mattfysh / delta_log.py
Created April 4, 2024 00:58
read delta table as a stream
import os
import json
from typing import Any
SKIP_OPERATIONS = ["OPTIMIZE", "VACUUM START", "VACUUM END"]
def is_subset(a: dict[str, Any], b: dict[str, Any]):
sub = a.items()
full = b.items()
@mattfysh
mattfysh / frankenstein.js
Created March 18, 2024 12:09
declaring drizzle types for a table defined elsewhere
import {
SQLiteTableWithColumns,
SQLiteTextBuilderInitial,
SQLiteTextJsonBuilderInitial,
SQLiteIntegerBuilderInitial,
SQLiteColumnBuilderBase,
} from 'drizzle-orm/sqlite-core'
import type { BuildColumns, HasDefault, NotNull } from 'drizzle-orm'
@mattfysh
mattfysh / frankenstein.js
Created March 14, 2024 04:06
using push-generated statements in `generate:sqlite`
import { get, patch, wrapImports } from './rewire'
const push = get('logSuggestionsAndReturn2')
const move = patch('_moveDataStatements', function (tableName, json) {
// set dataLoss=false to generate copy statements
return move.call(this, tableName, json, false)
})
wrapImports('init_migrate', {
@mattfysh
mattfysh / kafka.py
Created March 13, 2024 01:04
bytewax KafkaBuilder
from typing import Dict, List
from bytewax import operators as op
from bytewax.dataflow import Dataflow, Stream
from bytewax.connectors.kafka import operators as kop
from bytewax.connectors.kafka.serde import SchemaDeserializer
class KeyDeserializer(SchemaDeserializer[bytes, str]):
def de(self, data):
return data.decode()