Skip to content

Instantly share code, notes, and snippets.

@unrevised6419
unrevised6419 / youtube-transcript.js
Last active June 21, 2025 11:41
youtube transcript
javascript: (() => {
/* First open YT Transcript Panel, then copy paste this snippet into the console */
let linesEl = [...document.querySelector('#segments-container').children];
let linesTextIrregular = linesEl.map(el => el.textContent.trim());
let linesText = linesTextIrregular.map(l => l.split('\n').map(s => s.trim()).filter(Boolean).join(' '));
let paragraph = linesText.join('\n');
copy(paragraph);
})();
@unrevised6419
unrevised6419 / README.md
Last active June 30, 2025 08:46
Support `exactOptionalPropertyTypes` compiler flag in TypeScript

Note

This is a generic issue template to raise awareness about exactOptionalPropertyTypes support across TypeScript libraries.

Summary

This package's types are not fully compatible with TypeScript's exactOptionalPropertyTypes compiler flag (tsconfig.json).

Problem

With exactOptionalPropertyTypes: true, optional properties behave differently — they can’t be assigned undefined unless it's explicitly part of the type. Currently, this library's types treat optional properties as implicitly allowing undefined, which causes type errors in strict setups.

@unrevised6419
unrevised6419 / InlineSvg.vue
Last active January 25, 2025 11:19
Vue InlineSvg Implementation
<template>
<component :is="vnode" />
</template>
<script setup lang="ts">
import {
h,
onServerPrefetch,
shallowRef,
watch,
@unrevised6419
unrevised6419 / useStartTransition.tsx
Last active December 6, 2024 19:39
React startTransition wrapper
"use client";
import { startTransition, type TransitionFunction } from "react";
function useStartTransition<Args extends unknown[]>(
cb: (...args: Args) => ReturnType<TransitionFunction>,
) {
return (...args: Args) => startTransition(() => cb(...args));
}
  • npm init
  • git ignore
  • ni ts
  • add tsconfig.json, tsconfig.1.json, tsconfig2.json (+ schema)
  • add file.ts, file1.ts, file2.ts with params example
  • run from terminal, show IDE
  • add TS Config no property index
  • run from terminal, show IDE
  • Fix
  • run from terminal, show IDE
@unrevised6419
unrevised6419 / portal-provider.ts
Created November 19, 2024 11:49
Vue Portal Provider that nests/recurse
import {
inject,
provide,
type InjectionKey,
type SlotsType,
type ComputedRef,
computed,
toRef,
defineComponent,
} from 'vue';
const cacheControlDirective = new GraphQLDirective({
name: 'cacheControl',
locations: [
DirectiveLocation.FIELD_DEFINITION,
DirectiveLocation.OBJECT,
DirectiveLocation.INTERFACE,
DirectiveLocation.UNION,
],
args: {
maxAge: {
@unrevised6419
unrevised6419 / remove-twitter.md
Created February 12, 2024 20:01
Remove Twitter

Get rid of all content from Twitter

How to use "Remove Tweets"

  1. Sign in to Twitter
  2. Go to your Profile
  3. Open DevTools and go to the 'Console' tab
  4. Copy and paste the following script
@unrevised6419
unrevised6419 / YouTube-Watch-Later-Time.js
Created January 11, 2024 10:50
YouTube Watch Later Time
$$('ytd-playlist-video-renderer .style-scope ytd-thumbnail-overlay-time-status-renderer')
.map(e => e.textContent.trim().split(':').reverse())
.map(([s = '0', m = '0', h = '0']) => ({ s: parseInt(s), m: parseInt(m), h: parseInt(h) }))
.map(({ s, m, h }) => s + m * 60 + h * 3600)
.reduce((a, b) => a + b) / 3600
$$('.runtimeLabel')
.map(e => e.textContent.trim().replace('Length: ',''))
.map(text => {
const hasHours = text.includes('and')
const [hText, mText] = hasHours
? text.split(' and ')
: ['0 hrs', text]
const h = Number.parseInt(hText)
const m = Number.parseInt(mText)
return h * 60 + m