Skip to content

Instantly share code, notes, and snippets.

View omarkdev's full-sized avatar

Marcos Felipe omarkdev

View GitHub Profile
const arr1 = ['a', 'b', 'c', [1, 2, 3]];
const arr1Flatted = arr1.flat();
// ["a", "b", "c", 1, 2, 3]
function analyze(target: any, key: string) {
console.log(target, key);
}
class Task {
@analyze
public title: string;
constructor(title: string) {
this.title = title;
function logProperty(target: any, key: string) {
const newKey = `_${key}`;
Object.defineProperty(target, key, {
get() {
console.log(`Get: ${key} => ${this[newKey]}`);
return this[newKey];
},
set(newVal) {
console.log(`Set: ${key} => ${newVal}`);
function setApiVersion(constructor) {
return class extends constructor {
version = '0.0.1';
}
}
@setApiVersion
class Wizard {
}
function setApiVersion(constructor) {
constructor.api = '0.0.1';
}
@setApiVersion
class Wizard {}
console.log(Wizard); // { [Function: Wizard] api: '0.0.1' }
function log(prefix) {
return target => {
console.log(`${prefix} - ${target}`);
}
}
@log('Awesome')
class Foo {}
// Awesome - function Foo() {
function log(target) {
console.log(target);
}
@log
class Foo {}
// [Function: Foo]
@omarkdev
omarkdev / design-pattern-null-object-article-example-before.ts
Created January 9, 2020 18:10
Exemplo ANTES da refatoração do artigo Design Patterns: Null Object.
interface Logger {
warn(message: string): void;
}
class ConsoleLogger implements Logger {
warn(message: string): void {
console.warn(message);
}
}
@omarkdev
omarkdev / design-pattern-null-object-article-example-after.ts
Last active January 9, 2020 18:20
Exemplo DEPOIS da refatoração do artigo Design Patterns: Null Object.
class NullLogger implements Logger {
warn(message: string): void {
}
}
class LoggerFactory {
factory(env: string): Logger {
if (env === 'development') {
return new ConsoleLogger();
}
@omarkdev
omarkdev / object-calisthenics-rule1-example3.php
Created March 5, 2019 01:21
Object Calisthenics - Primeira Regra - Exemplo 3
<?php
function premiumUsers($users)
{
return array_filter($users, function ($user) {
return $user->type === USER_TYPE_PREMIUM;
});
}