Skip to content

Instantly share code, notes, and snippets.

@n1ru4l
n1ru4l / ArtistList.js
Created January 24, 2017 15:42
mobx + apollo-client + react
import React from 'react'
import { observer } from 'mobx-react'
function ArtistList({ uiState: { artistData } }) {
const { data } = artistData;
if ( !data || !data.artists || !data.artists.length ) {
return <div>No artists bruh.</div>
}
const { artists } = data
return (
@n1ru4l
n1ru4l / offscreen-canvas-polyfill.js
Created August 28, 2019 09:24
offscreen-canvas-polyfill.js
if (!window.OffscreenCanvas) {
window.OffscreenCanvas = class OffscreenCanvas {
constructor(width, height) {
this.canvas = document.createElement("canvas");
this.canvas.width = width;
this.canvas.height = height;
this.canvas.convertToBlob = () => {
return new Promise(resolve => {
this.canvas.toBlob(resolve);
@n1ru4l
n1ru4l / index.js
Created August 7, 2017 10:47
Fetch blob and convert to base64
export const fetchAsBlob = url => fetch(url)
.then(response => response.blob());
export const convertBlobToBase64 = blob => new Promise((resolve, reject) => {
const reader = new FileReader;
reader.onerror = reject;
reader.onload = () => {
resolve(reader.result);
};
reader.readAsDataURL(blob);
@n1ru4l
n1ru4l / write-schema.ts
Created April 12, 2022 07:41
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 = awaitfetch(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 / 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 / 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("");