Skip to content

Instantly share code, notes, and snippets.

View hugosenari's full-sized avatar
🌞

Hugo Sena Ribeiro hugosenari

🌞
View GitHub Profile
@hugosenari
hugosenari / gulpfile.js
Created March 13, 2020 01:22
Sapper postbuild Gulpfile
const tap = require('gulp-tap');
const postHTML = require('posthtml');
const { series, src, dest } = require('gulp');
const StreamFromPromise = require('stream-from-promise');
const { exec } = require('child_process');
const GLOB = './__sapper__/export/**/*.*';
const DEST = './__sapper__/rexport/';
const filter = (expr, cb) => file => expr.exec(file.path) && cb(file);
@hugosenari
hugosenari / sortPromisesByResolutionTime.js
Last active January 3, 2020 20:23
JS Async Generator Race
const genToAsyncGen = async iteration => ({
value: await (await iteration).value,
done: (await iteration).done,
});
const iterableToIterator = (iterable = []) => {
if (iterable[Symbol.asyncIterator])
return iterable[Symbol.asyncIterator]();
if (iterable[Symbol.iterator])
return iterable[Symbol.iterator]();
@hugosenari
hugosenari / map_maybe_either.js
Last active January 30, 2020 17:17
Map, Maybe, Either
const reduce = reducer => fns => value => fns.reduce(reducer, value);
const functor = (reducer) => (...fns) => {
const fn = reducer(fns);
fn.map = (...fnsToo) => functor(reducer)(...fns, ...fnsToo);
return fn;
};
const all = (acc, fn) => fn(acc);
const map = functor(reduce(all));
@hugosenari
hugosenari / ringedseal.jpg
Last active October 11, 2019 20:09
Ringed Seal Base 64
data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD//gAbY21wMy4xMC4zLjFMcTQgMHg4YmU3YmMzZP/iAkBJQ0NfUFJPRklMRQABAQAAAjBBREJFAhAAAG1udHJSR0IgWFlaIAfPAAYAAwAAAAAAAGFjc3BBUFBMAAAAAG5vbmUAAAAAAAAAAAAAAAAAAAAAAAD21gABAAAAANMtQURCRQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACmNwcnQAAAD8AAAAMmRlc2MAAAEwAAAAa3d0cHQAAAGcAAAAFGJrcHQAAAGwAAAAFHJUUkMAAAHEAAAADmdUUkMAAAHUAAAADmJUUkMAAAHkAAAADnJYWVoAAAH0AAAAFGdYWVoAAAIIAAAAFGJYWVoAAAIcAAAAFHRleHQAAAAAQ29weXJpZ2h0IDE5OTkgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQAAABkZXNjAAAAAAAAABFBZG9iZSBSR0IgKDE5OTgpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYWVogAAAAAAAA81EAAQAAAAEWzFhZWiAAAAAAAAAAAAAAAAAAAAAAY3VydgAAAAAAAAABAjMAAGN1cnYAAAAAAAAAAQIzAABjdXJ2AAAAAAAAAAECMwAAWFlaIAAAAAAAAJwYAABPpQAABPxYWVogAAAAAAAANI0AAKAsAAAPlVhZWiAAAAAAAAAmMQAAEC8AAL6c/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMPFB0aHx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyM
@hugosenari
hugosenari / Node_8_to_14_features.md
Last active August 24, 2020 21:06
Node 8 to 12 features

Versions:

  • node 8 (engine V8 5.9)
  • node 10 (engine V8 6.6)
  • node 12 (engine V8 7.4)
  • node 14 (engine V8 8.4)

V8 6.0:

  • SharedArrayBuffer
  • Object rest/spread properties
@hugosenari
hugosenari / handle.js
Last active September 18, 2019 17:06
laconiaWSS concept
const LaconiaWSS = require("@laconia/laconiaWSS");
const {
getHandler,
updateHandler,
disconnectHandler,
connectHandler,
sendHandler
} = laconiaWSS('WEBSOCKET_CONNECTION_TABLE_NAME');
@hugosenari
hugosenari / multiFnAdapter.js
Created September 17, 2019 21:24
Laconia High Order Function Adapter
const identity = value => value;
const mappingAdapter = (mappings = []) => fn => (event, laconiaContext) => {
const args = [
...mappings.reduce(
(actual, mapping) => mapping(
actual, event, laconiaContext
),
[]
),
@hugosenari
hugosenari / xdg-open.py
Created September 10, 2019 23:15
My xdg-open to open files at vscode -g (go to line)
#! /usr/bin/env python
import sys
import os
import subprocess
import collections
PathParm = collections.namedtuple('PathParm', 'app path')
FileParam = collections.namedtuple('FileParam', 'app path line col protocol filetype app_desktop')
@hugosenari
hugosenari / overload.js
Last active September 9, 2019 21:17
Javascript Function Overload/Single Dispatch
const typeNameOf = arg => {
if(arg === null) return 'Null';
if(Number.isNaN(arg)) return 'NaN';
if(arg === undefined) return 'Undefined';
return arg.constructor.name || typeof arg;
};
const overload = (defaultFn, registry = {}) => {
const overloaded = (...args) => {
const types = args.map(typeNameOf);
@hugosenari
hugosenari / handle.js
Created August 6, 2019 01:06
Add Service Scope to Laconia example of use
const laconia = require("@laconia/core");
const api = require("@laconia/adapter-api").apigateway({ inputType: "body" });
const AWS = require('aws-sdk');
const instances = ({ requestContext: { connectionId, domainName, stage } }) => ({
send: async payload => {
const client = new AWS.ApiGatewayManagementApi({
apiVersion: '2018-11-29',
endpoint: `https://${domainName}/${stage}`
});