Skip to content

Instantly share code, notes, and snippets.

View htunnicliff's full-sized avatar

Hunter Tunnicliff htunnicliff

View GitHub Profile
@htunnicliff
htunnicliff / react-solid-flow.tsx
Created September 7, 2023 21:41
Show, Switch, and Match for React – borrowed from Solid.js
import { Children, ReactNode, isValidElement, useMemo } from 'react';
type ShowProps<T> = {
when: T;
fallback?: ReactNode;
children: ReactNode | ((item: NonNullable<T>) => ReactNode);
};
/**
* Concept borrowed from Solid: https://www.solidjs.com/docs/latest/api#show
type HttpStatus = {
// 2xx
200: 'Ok';
201: 'Created';
202: 'Accepted';
203: 'Non-Authoritative Information';
204: 'No Content';
205: 'Reset Content';
// 4xx
400: 'Bad Request';

GitHub Copilot Miracles

Whenever Copilot writes a script that does exactly what I was hoping it to do, I will record them here.

Rename all movies in a directory from "YYYY - Title.ext" to "Title (YYYY).ext"

import fs from "fs/promises";

async function renameMovies(dir) {
@htunnicliff
htunnicliff / generate-api-types.mjs
Created September 16, 2021 21:21
CLI script for generaterating TypeScript declaration files using an OpenAPI spec
#!/usr/bin/env node
import NextEnv from "@next/env";
import axios from "axios";
import chalk from "chalk";
import dtsgenerator from "dtsgenerator";
import fs from "node:fs/promises";
import path from "node:path";
import { oraPromise } from "ora";
import prettier from "prettier";
@htunnicliff
htunnicliff / _app.tsx
Created September 16, 2021 21:15
Next.js Auth0 AuthGate Strategy
import AppProviders from "@/components/AppProviders";
import AppShell from "@/components/AppShell";
import { withAuth } from "@/lib/auth0/with-auth";
import { AppProps } from "next/app";
import { ReactNode } from "react";
interface MyAppProps extends AppProps {
err: Error;
Component: AppProps["Component"] & {
displayAppShell?: boolean;
@htunnicliff
htunnicliff / knex-snowflake-dialect.ts
Created September 30, 2020 22:12
WIP Knex dialect for Snowflake in
import Knex, { MySqlConnectionConfig } from "knex";
import * as Snowflake from "snowflake-sdk";
import { promisify } from "util";
const Dialect = require("knex/lib/dialects/mysql/index.js");
Dialect.prototype._driver = () => Snowflake;
Dialect.prototype.wrapIdentifierImpl = (value: string) => value;
Dialect.prototype.validateConnection = () => true;
@htunnicliff
htunnicliff / turbolink-it.js
Last active May 28, 2020 22:39
Make any site use turbolinks

Keybase proof

I hereby claim:

  • I am htunnicliff on github.
  • I am htunnicliff (https://keybase.io/htunnicliff) on keybase.
  • I have a public key ASBltx__9o-mTXO9LnSyk24F3Dtx3XkZa3IBp6oHDLAqXgo

To claim this, I am signing this object:

async function weather(key, ...args) {
const url = `https://api.darksky.net/forecast/${key}/` + args.join(',')
const config = {
credentials: "same-origin",
mode: 'no-cors',
method: "GET",
headers: {
'Accept': 'application/json'
}
}
@htunnicliff
htunnicliff / gist:be6cc69227b1074a6dae9d998451201f
Created February 14, 2018 17:09 — forked from ogomez78/gist:3b5fbfa27ad8cd3d0fc6947477b1c862
DigitalOcean Drupal/CiviCRM Droplet cloning
Ubuntu 14.04
Drupal 7
CiviCRM 4.7