Skip to content

Instantly share code, notes, and snippets.

@n1ru4l
n1ru4l / write-schema.ts
Last active June 24, 2024 13:34
Introspect and write GraphQL schema to file-system
import * as fs from 'fs';
import * as path from 'path';
import {
getIntrospectionQuery,
buildClientSchema,
print
} 'graphql';
async function main() {
const response = await fetch(process.env.GRAPHQL_API_URL, {
@n1ru4l
n1ru4l / error-masking.ts
Last active March 31, 2022 10:46
yoga tweet snippets
import {createServer, GraphQLYogaError } from "@graphql-yoga/node"
const server = createServer({
schema: {
typeDefs: /* GraphQL */ `
type Query {
foo: String
bar: String
}
`,
@n1ru4l
n1ru4l / diff.diff
Created June 10, 2021 07:05
graphql-tools TS Strict diff
diff --git a/./diff/old/dist/batch-delegate/src/getLoader.d.ts b/./diff/new/dist/batch-delegate/src/getLoader.d.ts
index b00864d6..f8dd9c23 100644
--- a/./diff/old/dist/batch-delegate/src/getLoader.d.ts
+++ b/./diff/new/dist/batch-delegate/src/getLoader.d.ts
@@ -1,3 +1,3 @@
import DataLoader from 'dataloader';
import { BatchDelegateOptions } from './types';
-export declare function getLoader<K = any, V = any, C = K>(options: BatchDelegateOptions): DataLoader<K, V, C>;
+export declare function getLoader<K = any, V = any, C = K>(options: BatchDelegateOptions<any>): DataLoader<K, V, C>;
diff --git a/./diff/old/dist/batch-execute/src/getBatchingExecutor.d.ts b/./diff/new/dist/batch-execute/src/getBatchingExecutor.d.ts
@n1ru4l
n1ru4l / macro.txt
Last active May 21, 2021 21:28
dungeon-revealer dsa dice macro
<Template
id="skillCheck"
var-skill={{"type":"select","label":"Skills","options":[{"label":"Fliegen","value":{"score":0,"attr1":{"name":"Mut","value":16},"attr2":{"name":"Intuition","value":11},"attr3":{"name":"Gewandheit","value":13}}},{"label":"Gaukeleien","value":{"score":10,"attr1":{"name":"Mut","value":16},"attr2":{"name":"Charisma","value":12},"attr3":{"name":"Fingerfertigkeit","value":13}}},{"label":"Klettern","value":{"score":9,"attr1":{"name":"Mut","value":16},"attr2":{"name":"Gewandheit","value":13},"attr3":{"name":"Körperkraft","value":16}}},{"label":"Körperbeherrschung","value":{"score":10,"attr1":{"name":"Gewandheit","value":13},"attr2":{"name":"Gewandheit","value":13},"attr3":{"name":"Konstitution","value":14}}},{"label":"Kraftakt","value":{"score":10,"attr1":{"name":"Konstitution","value":14},"attr2":{"name":"Körperkraft","value":16},"attr3":{"name":"Körperkraft","value":16}}},{"label":"Reiten","value":{"score":10,"attr1":{"name":"Charisma","value":12},"attr2":{"name":"Gewandheit","value":1
@n1ru4l
n1ru4l / graphql-logger.ts
Last active March 6, 2021 13:28
GraphQL Logger Middleware
import { isAsyncIterable } from "@n1ru4l/push-pull-async-iterable-iterator";
type MaybePromise<T> = Promise<T> | T;
const map = <T, O>(map: (input: T) => Promise<O> | O) =>
async function* mapGenerator(asyncIterable: AsyncIterableIterator<T>) {
for await (const value of asyncIterable) {
yield map(value);
}
};
@n1ru4l
n1ru4l / crypto.ts
Created February 19, 2021 11:56
Create SHA-256 of file in browser (with http fallback)
// window.crypto.subtle is undefined on page served via http :(
const crypto: null | SubtleCrypto = window?.crypto?.subtle ?? null;
const i2hex = (i: number): string => {
return ("00" + i.toString(16)).slice(-2);
};
const generateHexFromUint8Array = (arr: Uint8Array) =>
Array.prototype.map.call(arr, i2hex).join("");
@n1ru4l
n1ru4l / ContextPyramidOfDoomPreventer.tsx
Last active December 7, 2020 13:37
Having a lot of React Contexts?
import * as React from "react";
export type ComponentWithPropsTuple<TProps = any> = [
(props: TProps) => React.ReactElement,
TProps
];
/**
* This component allows rendering Components in a flat structure.
* Some components rely on a lot of differen context providers.
@n1ru4l
n1ru4l / find-version-range-conflicts.ts
Last active March 11, 2021 23:00
Find conflicting package.json ranges in mono repository
/**
* This is a simple script for detecting conflicting
* version ranges across packages inside a mono repository.
*/
import fs from "fs";
import glob from "glob"; // yarn add -W -E -E -D glob@7.1.6
import { promisify } from "util";
const globP = promisify(glob);
@n1ru4l
n1ru4l / makePushPullAsyncIterableIterator.ts
Created December 2, 2020 08:35
Without using Symbol.asyncIterator
type Deferred<T> = {
resolve: (value: T) => void;
reject: (value: unknown) => void;
promise: Promise<T>;
};
function createDeferred<T>(): Deferred<T> {
const d = {} as Deferred<T>;
d.promise = new Promise<T>((resolve, reject) => {
@n1ru4l
n1ru4l / AsyncIteratorUtilities.ts
Created September 21, 2020 16:05
AsyncIteratorUtilities.ts
export const map = <T, O>(map: (input: T) => Promise<O> | O) =>
async function* mapGenerator(asyncIterable: AsyncIterableIterator<T>) {
for await (const value of asyncIterable) {
yield map(value);
}
};
export const filter = <T, U extends T>(filter: (input: T) => input is U) =>
async function* filterGenerator(asyncIterable: AsyncIterableIterator<T>) {