To install, add this gist as a dependency, and @types/stripe-v3 as a dev dependency.
yarn add --dev @types/stripe-v3
yarn add https://gist.github.com/955eafd92692f4ba54d50d447cef6327.gitOr with npm
| const create = sessionUser => data => Promise.try(() => transaction(model, async (modelTransaction) => { | |
| const { CAN_CREATE_ORGANIZATIONS } = getPermissions(sessionUser.permissions); | |
| const { userId } = sessionUser; | |
| const { avatar, ...orgData } = data; | |
| if (!CAN_CREATE_ORGANIZATIONS) { | |
| throw Unauthorized({ message: 'Sie haben nicht das Recht Organisationen zu erstellen' }); | |
| } | |
| const insert = params => modelTransaction.query() |
| let estate; | |
| let signed; | |
| let watches; | |
| function getImagesAndServePages() { | |
| estate = require('fs').readdirSync('./public/imgs/estate'); | |
| signed = require('fs').readdirSync('./public/imgs/signed'); | |
| watches = require('fs').readdirSync('./public/imgs/watches'); |
| const get = (array, currentKey, direction) => { | |
| const k = currentKey ? currentKey : array[0]; | |
| const delta = direction == 'inc' ? 1 : -1 | |
| const index = array.indexOf(k); | |
| const nextIndex = (index + delta + array.length) % array.length; | |
| console.log(array[nextIndex]); | |
| }; |
| import React, { useState } from 'react'; | |
| import styled from '@emotion/styled'; | |
| import { Col, Row } from './Flex'; | |
| const splitBasis = (percent) => { | |
| const SCALE = 10000; | |
| const p = Math.floor(percent * SCALE); | |
| const shared = { flexShrink: 1 }; | |
| return { | |
| a: { flexGrow: String(p), ...shared }, |
| export async function json_to_sheet(...args) { | |
| const XLSX = await import('xlsx') | |
| return XLSX.utils.json_to_sheet(...args); | |
| } |
| function on(eventTarget, eventType, handler) { | |
| // Distinct but identical event handler | |
| const handler2 = (event) => handler(event); | |
| eventTarget.addEventListener(eventType, hander2); | |
| const unsub = () => { | |
| eventTarget.removeEventListener(eventType, hander2); | |
| }; | |
| return unsub; |
| async function promiseMap(array, mapper, concurrency) { | |
| const promises = []; | |
| const results = Array.from({ length: array.length }); | |
| const drainOne = async () => { | |
| const [pj, { index, resolved, rejected }] = await Promise.race(promises.map((p, pi) => p.then((v) => [pi, v]))); | |
| promises.splice(pj, 1); | |
| if (resolved) { | |
| results[index] = resolved[0]; |
| function domOn(subject, eventName, handler, options = false) { | |
| // This function is useless except in the case domOn(x, 'e', f); domOn(x, 'e', f); is run | |
| // where cleanup can remove the distinct 'inner' function from each call, instead of both 'f' listeners. | |
| function inner(event) { | |
| return handler.call(this, event); | |
| } | |
| subject.addEventListener(eventName, inner, options); | |
| const cleanup = () => subject.removeEventListener(eventName, inner, options); |
| import match, { matches, Instance, TypeOf, PropEq, Eq, Check, Index } from '@brigand/unnamed-match-thing'; | |
| // Simple matching. | |
| // Note that this is an object literal, so all of these need to | |
| // return something with a toString, and match needs to convert that | |
| // back to the pattern. This implies we need to store Eq('production') in | |
| // module level storage and somehow avoid leaking memory for every pattern ever used. | |
| // Something every toString called here allocates the pattern, and when match() is called | |
| // it can claim all patterns before it (since the toString calls run before match()), removing | |
| // them from the global storage, and then execute the patterns. |
To install, add this gist as a dependency, and @types/stripe-v3 as a dev dependency.
yarn add --dev @types/stripe-v3
yarn add https://gist.github.com/955eafd92692f4ba54d50d447cef6327.gitOr with npm