Skip to content

Instantly share code, notes, and snippets.

View balanza's full-sized avatar

Emanuele De Cupis balanza

View GitHub Profile
@balanza
balanza / mobile.ts
Last active February 1, 2019 08:20
type ConfirmedMobile = string & { __random_transparent_property: never }
type UnconfirmedMobile = string & { __another_random_transparent_property: never }
type CertifiedMobile = string & { __again_random_transparent_property: never }
type Mobile = // ConfirmedMobile | UnconfirmedMobile | CertifiedMobile :)
ConfirmedMobile
| UnconfirmedMobile
| CertifiedMobile
const printString = (p: string) => console.log(`print String ${p}`)
const printConfirmedMobile = (p: ConfirmedMobile) => console.log(`print ConfirmedMobile ${p}`)
@balanza
balanza / of.ts
Last active January 31, 2019 14:48
// it's just a cast ;)
const createOf = <T extends Base, Base>(original: Base) => <T>original
@balanza
balanza / mobile.ts
Last active January 31, 2019 15:33
type ConfirmedMobile = string & { __phantom_1548946378096: never }
const createConfirmedMobile = (num: String) => createOf<ConfirmedMobile, String>(num)
type CertifiedMobile = string & { __phantom_1548946391842: never }
const createCertifiedMobile = (num: String) => createOf<CertifiedMobile, String>(num)
const confirmed = createConfirmedMobile('2984829202')
// ^^^ ConfirmedMobile
const certified = createCertifiedMobile('2984829202')
// ^^^ CertifiedMobile
type Foo = {
value: string,
__phantom: never
}
const f = () => { throw '' }
const x: Foo = { value: 'foo', __phantom: f() }
// email.ts
import { Email } from './mobile';
export type Email = string & { __phantom_1549009918142: never }
export const createEmail = (input: string): Email | Error => {
 const pattern = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0–9]{1,3}\.[0–9]{1,3}\.[0–9]{1,3}\.[0–9]{1,3}])|(([a-zA-Z\-0–9]+\.)+[a-zA-Z]{2,}))$/
 if(pattern.test(input)) return createOf<Email, string>(input)
 else return new Error(`invalid email format: ${input}`)
}
@balanza
balanza / swagger-es6-dynamic-client.js
Created May 16, 2019 08:51
swagger-es6-client.js
import Swagger from 'swagger-client';
const url = 'https://petstore.swagger.io/v2/swagger.json'; // or where the spec is
const requestInterceptor = req => {
// Here you can add custom headers
// ex: req.headers['Authorization'] = 'Bearer <YOUR TOKEN>';
return req;
};
@balanza
balanza / example.sh
Created February 4, 2020 01:25
Git snippets to checkout latest test-passing commit
# get latest commit with passing tests
while true; do npm test && break || git checkout HEAD~1; done
# count how many commits in between
echo $(($(git rev-list --count HEAD..master) - 1))
# checkout where things got broken
while true; do npm test && break || git checkout HEAD~1; done; git checkout master~$(($(git rev-list --count HEAD..master) - 1))
{"lastUpload":"2019-12-19T15:29:42.810Z","extensionVersion":"v3.4.3"}
@balanza
balanza / checkupdates.sh
Last active October 20, 2020 22:40
Given a repo, check which commit were added to master after the last release
#!/bin/bash
bold=$(tput bold)
normal=$(tput sgr0)
# project name
REPO=$1
# github owner
GH_ORG=$2
# azure devops organization
@balanza
balanza / gitnoob.md
Created November 11, 2020 08:11
Git for Noobs

Git for noobs

Una serie di comandi base per operare con git senza essere esperti

Fare il punto della situazione

git status

Ti dice in che branch ti trovi, quali file hai modificato, quali sono nell'index.

Annullare tutte le modifiche fatte