View mapped-type-conversion.ts
type Input<Output> = { | |
[K in keyof Output]: { foo: () => Output[K] }; | |
}; | |
function convert<Output>(input: Input<Output>): Output { | |
const keys = Object.keys(input) as (keyof Input<Output>)[]; | |
return keys.reduce( | |
(output, key) => ({ ...output, [key]: input[key].foo() }), | |
{} as Output |
View gulpfile.js
import gulp from 'gulp'; | |
import Vinyl from 'vinyl'; | |
import vinylAdapter from './vinyl-adapter'; | |
gulp.task('build', () => { | |
const file = new Vinyl({ | |
path: 'hello.js', | |
contents: Buffer.from(`console.log('👋');`) | |
}); |
View ban-generators-and-async.json
{ | |
"rules": { | |
"no-restricted-syntax": [ | |
"error", | |
"[generator=true]", | |
"[async=true]", | |
"AwaitExpression" | |
] | |
} | |
} |
View get-color-in-range.js
import { scaleLinear } from "d3-scale"; | |
const getColor = scaleLinear().domain([0, 100]).range(["#ccc", "#419fcf"]); | |
getColor(0); // 0% = #ccc | |
getColor(80); // 80% = #5da8ce | |
getColor(100); // 100% = #419fcf |
View express-curl-middleware.js
// After body-parsing middleware... | |
app.use(function(req, res, next) { | |
console.log( | |
"curl '%s://%s%s' -X %s -H 'Content-Type: %s' -d '%s'", | |
req.protocol, | |
req.get("host"), | |
req.originalUrl, | |
req.method, | |
req.get("Content-Type"), | |
JSON.stringify(req.body) |
View es6-map-to-object-literal.js
let map = new Map(); | |
map.set("a", 1); | |
map.set("b", 2); | |
map.set("c", 3); | |
let obj = Array.from(map).reduce((obj, [key, value]) => ( | |
Object.assign(obj, { [key]: value }) // Be careful! Maps can have non-String keys; object literals can't. | |
), {}); | |
console.log(obj); // => { a: 1, b: 2, c: 3 } |
View interceptors.coffee
.config ($httpProvider) -> | |
$httpProvider.interceptors.push ($q, $rootScope, apiUrl, authToken) -> | |
request: (config) -> | |
# Intercept API requests and inject the auth token. | |
config.headers["X-Auth-Token"] = authToken if config.url.indexOf(apiUrl) is 0 and authToken? | |
config or $q.when config | |
responseError: (response) -> | |
# Intercept unauthorised API responses and fire an event. |
View routes.html.erb
<!DOCTYPE html> | |
<html lang="en"> | |
<head> | |
<meta charset="utf-8"> | |
<meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1"> | |
<meta name="viewport" content="width=device-width, initial-scale=1.0"> | |
<title>Routes</title> | |
<link href="//netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap.min.css" rel="stylesheet"> | |
</head> | |
<body> |
View excel-grid-plugin.js
var newGridCellValue = '', | |
deleteGridCellValue = false; | |
Ext.define('ExcelCellEditing', { | |
extend: 'Ext.grid.plugin.CellEditing', | |
alias: 'plugin.excelcellediting', | |
initEditTriggers: function () { | |
var me = this; |
View sibelius_fixer.bat
cd %~dp0 | |
mkdir converted | |
FOR %%A IN (%*) DO ( | |
sox %%A "converted/%%~nxA" reverse trim 4.3 reverse trim 0.3 gain -n -1 | |
lame -V7 converted/%%~nxA | |
) | |
pause |
NewerOlder