Skip to content

Instantly share code, notes, and snippets.

View fetch-with-timeout.js
function fetchWithTimeout( url, timeout ) {
return new Promise( (resolve, reject) => {
// Set timeout timer
let timer = setTimeout(
() => reject( new Error('Request timed out') ),
timeout
);
fetch( url ).then(
response => resolve( response ),
View abort-fetch.js
const controller = new AbortController()
const signal = controller.signal
setTimeout(() => {
controller.abort()
}, 1000)
fetch(url, { signal })
View .js
gainResult(fn) {
return Promise.race([
new Promise(resolve => {
try {
const ret = fn((err, result) => {
if (err) {
resolve({
type: "async",
error: err.message
});
View gist:429f27ca22185161ca540dbc8c5289fa
#!/bin/bash
cd dist
shopt -s nullglob
for f in *.map
do
echo "uploading $f to New Relic"
publish-sourcemap $f $SCHUMACHER_CLIENT_ROOT --applicationId=238312787 --nrAdminKey=$NEW_RELIC_ADMIN_KEY
done
cd -
View now.json
{
"version": 2,
"name": "phmt.me",
"builds": [
{ "src": "package.json", "use": "@now/static-build", "config": { "distDir": "build" } }
],
"routes": [
{ "src": "/static/(.*)", "headers": { "cache-control": "s-maxage=31536000,immutable" }, "dest": "/static/$1" },
{ "src": "/favicon.ico", "dest": "/favicon.ico" },
{ "src": "/asset-manifest.json", "dest": "/asset-manifest.json" },
View gist:738ba56765a08208fa3a416a9eb403a7
diff --git c/src/ui/form/InputField.css i/src/ui/form/InputField.css
index 088fbc98..7946478e 100644
--- c/src/ui/form/InputField.css
+++ i/src/ui/form/InputField.css
@@ -4,13 +4,24 @@
width: 100%;
}
-.inputField-input[type="text"] {
+.inputField-input[type="text"],
View serialization.js
import transform from 'transform-keys'
// https://github.com/bjoerge/transform-keys#custom-key-transformers
export function camelify(obj) {
return transform(obj, (key) => {
return key.replace(/_([a-z])/ig, (_, $1) => {
return $1.toUpperCase()
})
})
}
View gist:b3455c22dfb215759fb2a5d77a7edb28
ARNING in ./stories/ButtonGroup_story.js
Module build failed: SyntaxError: Unexpected token (9:19)
at Parser.pp$4.raise (/Users/dmarr/code/schumacher/node_modules/@storybook/addon-storysource/node_modules/acorn/dist/acorn.js:2748:13)
at Parser.pp.unexpected (/Users/dmarr/code/schumacher/node_modules/@storybook/addon-storysource/node_modules/acorn/dist/acorn.js:644:8)
at Parser.pp.expect (/Users/dmarr/code/schumacher/node_modules/@storybook/addon-storysource/node_modules/acorn/dist/acorn.js:638:26)
at Parser.pp$3.parseMethod (/Users/dmarr/code/schumacher/node_modules/@storybook/addon-storysource/node_modules/acorn/dist/acorn.js:2521:8)
at Parser.pp$1.parseClassMethod (/Users/dmarr/code/schumacher/node_modules/@storybook/addon-storysource/node_modules/acorn/dist/acorn.js:1308:23)
at Parser.parseClassMethod (/Users/dmarr/code/schumacher/node_modules/acorn-class-fields/inject.js:104:23)
at Parser.pp$1.parseClassMember (/Users/dmarr/code/schumacher/node_modules/@storybook/addon-storysou
View gist:ce6b5ffdf54335eedc806cf9bccf4376
const path = require('path');
const OpenBrowserPlugin = require('open-browser-webpack-plugin');
/*
* Storybook Webpack FULL CONTROL MODE
*
* extend carefully, please read the docs!
* https://storybook.js.org/configurations/custom-webpack-config/#full-control-mode
*
* @param {object} config - the default Storybook webpack config object
View .js
export const getTaxAmount = (rate, total) => {
const totalCents = parseInt(total * 100, 10);
const tax = Math.round(totalCents / (1 + rate) * rate);
return {
subtotal: (totalCents - tax) / 100,
tax: tax / 100,
total,
};
};