This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Types for the result object with discriminated union | |
type Success<T> = { | |
data: T; | |
error: null; | |
}; | |
type Failure<E> = { | |
data: null; | |
error: E; | |
}; |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
type ValidateType<T extends string> = | |
T extends 'bad' ? 'Error message' | |
: T extends 'another bad' ? 'Another error message' | |
: T extends 'Error message' | 'Another error message' ? `Can't use '${ T }'` | |
: T | |
function fn<T extends string> ( arg: ValidateType<T> ) { } | |
fn( 'this should work' ) // works | |
fn( 'bad' ) // Argument of type '"bad"' is not assignable to parameter of type '"Error message"'. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
CORS blocks this request from the browser, so you will need to run this code on the server. | |
*/ | |
async function checkIfYouTubeChannelIsLive ( channelId: string ) { | |
const liveCheckURL = `https://www.youtube.com/embed/live_stream?channel=${ channelId }` | |
const responseText = await fetch( liveCheckURL ).then( res => res.text() ) | |
const isLive = responseText.indexOf( 'This video is unavailable' ) < 0 | |
return isLive | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import { z } from 'zod' | |
type ErrorCode = z.ZodIssueCode | 'required' | |
type Message = string | |
type MessageBuilder = ( data: unknown, options?: any[] ) => Message | |
type ErrorRecord = Partial<Record<ErrorCode, Message | MessageBuilder>> | |
function makeErrorMap ( errorRecord: ErrorRecord ): z.ZodErrorMap { | |
return ( issue, ctx ) => { | |
const options = issue.code === 'invalid_enum_value' | |
? issue.options : undefined |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import { z } from 'zod' | |
function safeParseJSON ( string: string ): any { | |
try { return JSON.parse( string ) } | |
catch { return string } | |
} | |
function searchParamsToValues ( searchParams: URLSearchParams ): Record<string, any> { | |
return Array.from( searchParams.keys() ).reduce( ( record, key ) => { | |
const values = searchParams.getAll( key ).map( safeParseJSON ) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const headings = content | |
.split('\n') | |
.filter((line) => line.match(/#{1,3}\s/)) | |
.map((line) => { | |
const [, level, title] = line.match(/(#{1,3})\s(.*)/) | |
return { | |
level: level.length, | |
title, | |
} | |
}) |