Skip to content

Instantly share code, notes, and snippets.

View geovanisouza92's full-sized avatar
🏠
Working from home

Geo geovanisouza92

🏠
Working from home
View GitHub Profile
@geovanisouza92
geovanisouza92 / make.go
Created September 25, 2018 15:22
Go tasks
package main
import (
"github.com/geovanisouza92/go-tasks"
"github.com/geovanisouza92/go-tasks/vcs/git"
"github.com/geovanisouza92/go-tasks/build/docker"
"github.com/geovanisouza92/go-tasks/deploy/kubernetes"
)
func main() {
@geovanisouza92
geovanisouza92 / main.js
Last active September 25, 2018 14:36
Async iterator for pagination
class Token {
nextRange() {
return `${this._range}-`;
}
feed(response) {
this._range = response.headers.Range;
}
}

Keybase proof

I hereby claim:

  • I am geovanisouza92 on github.
  • I am geovanisouza92 (https://keybase.io/geovanisouza92) on keybase.
  • I have a public key ASCpolGtmdNixlFQCCB-CbnR2smOlL8WtGUTk7GFb5CMfgo

To claim this, I am signing this object:

@geovanisouza92
geovanisouza92 / mapping.json
Created December 21, 2017 12:55
Remover acentos com TS
{
"À": "A",
"Á": "A",
"Â": "A",
"Ã": "A",
"Ä": "A",
"Å": "A",
"Ấ": "A",
"Ắ": "A",
"Ẳ": "A",
@geovanisouza92
geovanisouza92 / README.md
Created June 22, 2018 17:08
Injeção de módulos com Webpack

Uma forma simples de reduzir acoplamento modificando apenas a configuração de build.

Como a configuração é "apenas Javascript", fica fácil manipular, porém é importante tomar cuidado para não cair na situação do "na minha máquina funciona", pois cada ambiente pode gerar um bundle diferente. Testar é sempre importante.

Isso pode ser muito útil para injetar arquivos de configuração, implementação de features específicas (tracing, logging, metrics, error tracking, etc.) e até incluir módulos específicos de um ambiente, como suporte a source-map, por exemplo.

@geovanisouza92
geovanisouza92 / awesome.ts
Last active April 27, 2018 00:11
Typescript pega os erros que você não vê
// isso indica que a função "fn" pode ser invocada com uma lista de objetos que
// tenham, pelo menos, um atributo "id" do tipo number, e que o retorno vai ser
// uma lista de números
function fn<T extends { id: number }>(items: T[]): number[];
// isso indica que a função "fn" pode ser invocada com uma lista de "qualquer
// coisa" e que o segundo parâmetro deve ser o nome de um atributo presente em
// todos os itens da lista, e que o retorno vai ser uma lista com valores dos
// tipos de cada atributo encontrado na lista
function fn<T, K extends keyof T>(items: T[], idProp: K): T[K][];
@geovanisouza92
geovanisouza92 / strict-functions-causes-errors.ts
Last active December 14, 2017 20:10
--strictFunctionTypes generates errors with generic functions
type Direction = keyof IDirectionOptions;
interface IDirectionOptions {
"horizontal": { foo: number; };
"vertical": { bar: string; };
"diagonal": { baz: boolean; };
}
// This structure works
@geovanisouza92
geovanisouza92 / flow-analysis.ts
Created December 13, 2017 11:35
Análise de fluxo para evitar de "esquecer" de tratar código
// Aqui você define uma enumeração de valores: ela não é constante, vc define
// valores estruturais (não tipos) que são aceitos
type WillyWonkaElevatorDirection = "horizontal"
| "vertical"
// | "diagonal" // Descomente isso
;
// Aqui você pode usar esse novo tipo
function handleDirection(direction: WillyWonkaElevatorDirection) {
switch (direction) {
@geovanisouza92
geovanisouza92 / stats.js
Created November 21, 2017 11:39
Simple Node.js memory stats
const used = process.memoryUsage();
for (let key in used) {
console.log(`${key} ${Math.round(used[key] / 1024 / 1024 * 100) / 100} MB`);
}