There are always better modern alternatives to GraphQL for any given real-world use case in software development.
A better API option is one that:
- meets the functional requirement,
- uses established standards,
| import appRootPath from 'app-root-path'; | |
| import { readFile } from 'fs/promises'; | |
| import { resolve } from 'path'; | |
| import postcss from 'postcss'; | |
| import tailwindcss, { Config } from 'tailwindcss'; | |
| function extractTailwindClasses(htmlContent: string): string[] { | |
| const classRegex = /class=("([^"]+?)"|'([^']+?)')/g; | |
| const classes = new Set<string>(); |
| // ==UserScript== | |
| // @name YNAB Improvements | |
| // @namespace https://zornco.com/ | |
| // @version 0.0.7 | |
| // @description Improvements to the YNAB web app by Timothy Zorn (SystemDisc) | |
| // @author SystemDisc | |
| // @updateURL https://rawgit.com/SystemDisc/dc0f2745e8b3cf9e7dd7522c0609299d/raw/50c2268551b5f60d593e3a138e8b1bc4b4e048c8/ynab-improvements.user.js | |
| // @downloadURL https://rawgit.com/SystemDisc/dc0f2745e8b3cf9e7dd7522c0609299d/raw/50c2268551b5f60d593e3a138e8b1bc4b4e048c8/ynab-improvements.user.js | |
| // @match https://app.youneedabudget.com/* | |
| // @run-at document-end |
| export class DeferredPromise<T> { | |
| public promise: Promise<T>; | |
| private resolved: PromiseLike<T>; | |
| public constructor() { | |
| this.promise = new Promise((resolve, reject) => { | |
| if (this.resolved) { | |
| resolve(this.resolved); | |
| } | |
| this.resolve = resolve; |