Skip to content

Instantly share code, notes, and snippets.

View jacob-ebey's full-sized avatar

Jacob Ebey jacob-ebey

View GitHub Profile
@jacob-ebey
jacob-ebey / deferred.tsx
Created April 30, 2022 01:36
Remix deferred example
import { deferred, LoaderFunction } from "@remix-run/node";
import {
Deferred,
Link,
useDeferred,
useLoaderData,
useSearchParams,
} from "@remix-run/react";
import { getAllPokemon } from "~/pokemon";
@jacob-ebey
jacob-ebey / entry.server.tsx
Last active April 1, 2022 03:12
CF React 18 Streaming
import { renderToReadableStream } from "react-dom/server";
import { RemixServer } from "remix";
import type { EntryContext } from "remix";
import isbot from "isbot";
export default async function handleRequest(
request: Request,
responseStatusCode: number,
responseHeaders: Headers,
remixContext: EntryContext
@jacob-ebey
jacob-ebey / styles.server.ts
Created January 11, 2022 19:00
Remix PostCSS Dev Resource Route
import fsp from "fs/promises";
import type { LoaderFunction } from "remix";
import postcss from "postcss";
import postcssrc from "postcss-load-config";
export let loader: LoaderFunction = async () => {
let { options, plugins } = await postcssrc();
let { css } = await postcss(plugins).process(
await fsp.readFile("styles/global.css", "utf8"),
{"requestedUrl":"https://shopify.vercel.store/","finalUrl":"https://shopify.vercel.store/","lighthouseVersion":"9.0.0","userAgent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/95.0.4638.69 Safari/537.36","fetchTime":"2022-01-02T09:51:04.078Z","environment":{"networkUserAgent":"Mozilla/5.0 (Linux; Android 7.0; Moto G (4)) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4695.0 Mobile Safari/537.36 Chrome-Lighthouse","hostUserAgent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/95.0.4638.69 Safari/537.36","benchmarkIndex":1548},"runWarnings":[],"configSettings":{"emulatedFormFactor":"mobile","formFactor":"mobile","locale":"en-US","onlyCategories":["performance","accessibility","best-practices","seo"],"channel":"lr"},"audits":{"aria-required-attr":{"id":"aria-required-attr","title":"`[role]`s have all required `[aria-*]` attributes","description":"Some ARIA roles have required attributes that describe the state of the element to
{"requestedUrl":"https://remix-ecommerce.fly.dev/","finalUrl":"https://remix-ecommerce.fly.dev/","lighthouseVersion":"9.0.0","userAgent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/95.0.4638.69 Safari/537.36","fetchTime":"2022-01-02T09:53:12.290Z","environment":{"networkUserAgent":"Mozilla/5.0 (Linux; Android 7.0; Moto G (4)) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4695.0 Mobile Safari/537.36 Chrome-Lighthouse","hostUserAgent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/95.0.4638.69 Safari/537.36","benchmarkIndex":1302.5},"runWarnings":[],"configSettings":{"emulatedFormFactor":"mobile","formFactor":"mobile","locale":"en-US","onlyCategories":["performance","accessibility","best-practices","seo"],"channel":"lr"},"audits":{"th-has-data-cells":{"id":"th-has-data-cells","title":"`<th>` elements and elements with `[role=\"columnheader\"/\"rowheader\"]` have data cells they describe.","description":"Screen readers have f
@jacob-ebey
jacob-ebey / image.ts
Last active September 18, 2024 19:12
Remix Image Component
import { createHash } from "crypto";
import fs from "fs";
import fsp from "fs/promises";
import path from "path";
import https from "https";
import { PassThrough } from "stream";
import type { Readable } from "stream";
import type { LoaderFunction } from "remix";
import sharp from "sharp";
import type { Request as NodeRequest } from "@remix-run/node";
@jacob-ebey
jacob-ebey / cache.server.ts
Last active December 22, 2021 22:04
upstash GET SWR request cache
import { createHash } from "crypto";
import { get, set, setex } from "@upstash/redis";
type CachedResponse = {
status: number;
statusText: string;
body: string;
headers: [string, string][];
};
@jacob-ebey
jacob-ebey / remix-compose-routes.ts
Created July 16, 2021 16:47
Compose Remix routes
import type { LinksFunction, LoaderFunction, MetaFunction } from "remix";
export let composeMeta =
(
...metas: (MetaFunction | { data: string; meta: MetaFunction })[]
): MetaFunction =>
(args) =>
metas.reduce<ReturnType<MetaFunction>>((res, meta) => {
if (typeof meta === "function") {
return { ...res, ...meta(args) };
@jacob-ebey
jacob-ebey / renderToStringWithWritable.js
Last active June 27, 2021 05:15
React18 renderToStringWithWritable
const { PassThrough } = require('stream');
const { pipeToNodeWritable } = require('react-dom/server');
function renderToStringWithWritable(element, timeout = 10000) {
return new Promise((resolve, reject) => {
const writable = new PassThrough();
let res = '';
writable.on('data', d => {
res += String(d);
@jacob-ebey
jacob-ebey / webpack-stats-with-exposed-federated-modules.js
Last active May 15, 2021 21:56
Discover federated chunks using webpack-flush-chunks
new StatsWriterPlugin({
stats: {
all: true,
},
transform(stats) {
const federatedChunks = stats.chunks.filter((chunk) =>
chunk.origins.some((origin) => origin.moduleName === "container entry")
);
const assetsByChunkName = Object.entries(