Skip to content

Instantly share code, notes, and snippets.

View balanza's full-sized avatar

Emanuele De Cupis balanza

View GitHub Profile
@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))
@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;
};
// 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}`)
}
type Foo = {
value: string,
__phantom: never
}
const f = () => { throw '' }
const x: Foo = { value: 'foo', __phantom: f() }
@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
@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 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}`)
type ConfirmedMobile = string
type UnconfirmedMobile = string
type CertifiedMobile = string
type Mobile = // just string :(
ConfirmedMobile
| UnconfirmedMobile
| CertifiedMobile
const exhaustionCheck = (e: never) => console.log('this will never be executed')
const printMobileSafe = (mobile: Mobile) => {
if(mobile.status === 'confirmed') {
console.log('Your mobile is confirmed!')
} else if(mobile.status === 'unconfirmed') {
console.warn('Your mobile is not confirmed!')
} else {
exhaustionCheck(mobile) // <-- you'll get a compilation error here!
}
const certified: CertifiedMobile = { status: 'certified', value: '543234531' }
printMobile(certified) // warn: Your mobile is not confirmed!
printMobileAlternative(certified) // unhandled exception: illegal state! mobile.status=certified