Skip to content

Instantly share code, notes, and snippets.

View freddi301's full-sized avatar

Frederik Batuna freddi301

View GitHub Profile
@freddi301
freddi301 / dsl.ts
Created May 14, 2018 11:38
Typescript example DSL
interface MyProgramDSL<T> {
read: () => Promise<string>;
write: (value: string) => Promise<void>
done: (value: T) => Promise<T>
}
const MyProgram = async ({ read, write, done }: MyProgramDSL<string>) => {
await write("Hello, what is your name?");
const name = await read();
@freddi301
freddi301 / ypx.sh
Created May 22, 2018 11:00
ypx - npx for yarn
#!/usr/bin/env bash
package_name=$1
temp_dir="/tmp/ypx/$package_name/$(date +%s%N)"
mkdir -p $temp_dir
(cd $temp_dir; yarn add $package_name) && (PATH="$temp_dir/node_modules/.bin":$PATH; "$@")
rm -rf $temp_dir
@freddi301
freddi301 / transducers.ts
Created May 31, 2018 09:22
Transducers in TypeScript
type Reducer<Memo, Item> = (memo: Memo, item: Item) => Memo
type Transducer<Memo, Item, ToItem> = (reducing: Reducer<Memo, ToItem>) => Reducer<Memo, Item>
type Mapper<A, B> = (a: A) => B;
const mapping = <Memo, Item, ToItem>(mapper: Mapper<Item, ToItem>): Transducer<Memo, Item, ToItem> =>
reducing => (memo, item) =>
reducing(memo, mapper(item))
@freddi301
freddi301 / ParameterType.ts
Last active September 14, 2018 11:35
TypeScript Utility Types
export type Parameter1Type<Fun extends (...parameters: any[]) => any> = Fun extends (parameter1: infer Parameter1, ...parameters: any[]) => any ? Parameter1 : never;
export type Parameter2Type<Fun extends (...parameters: any[]) => any> = Fun extends (parameter1: any, parameter2: infer Parameter2, ...parameters: any[]) => any ? Parameter2 : never;
export type Parameter3Type<Fun extends (...parameters: any[]) => any> = Fun extends (parameter1: any, parameter2: any, parameter3: infer Parameter3, ...parameters: any[]) => any ? Parameter3 : never;
export type Parameter4Type<Fun extends (...parameters: any[]) => any> = Fun extends (parameter1: any, parameter2: any, parameter3: any, parameter4: infer Parameter4, ...parameters: any[]) => any ? Parameter4 : never;
export type Parameter5Type<Fun extends (...parameters: any[]) => any> = Fun extends (parameter1: any, parameter2: any, parameter3: any, parameter4: any, parameter5: infer Parameter5, ...parameters: any[]) => any ? Parameter5 : never;
export type Parameter6Ty
@freddi301
freddi301 / reduce-boilerplate.ts
Last active June 21, 2021 04:10
TypeScript Redux reduce boilerplate
export interface ActionHandler<State, Payload> {
(state: State, payload: Payload): State;
}
export interface ActionHandlers<State> {
[index: string]: ActionHandler<State, any>;
}
export interface Action<Type, Payload> {
type: Type;
payload: Payload;
@freddi301
freddi301 / FAQ.md
Last active August 9, 2018 08:47
Liferay 6.2

If new version of classes of service builder i deployed and doesn't match the version saved on database, it's needed to to delete a row from table servicecomponent where buildernamespace=

If namespace isolation is required, use <portlet:namespace /> in *.jsp file. Example:

@freddi301
freddi301 / WindowResizeListener.ts
Created August 10, 2018 15:13
Responsive React Component
import * as React from "react";
type Pixels = number;
interface Params {
width: Pixels;
height: Pixels;
}
export class WindowResizeListener extends React.Component<
@freddi301
freddi301 / frontend-architecture.txt
Last active November 27, 2018 12:58
Frontend Architecture
view:
component: composition of
helper: prepare data for template so no code goes into the tempalte
template: does only view, can dispatch events
container: composition of
injector: grabs data from state
wireframe: conecptual representation of ui, it's a projections of data to display and possible actions
domain:
@freddi301
freddi301 / ts-ql.ts
Last active January 7, 2019 22:43
grapql in typescript
type DataTypeUnion = ObjectType<any> | ArrayType<any> | PrimitiveTypeUnion;
type PrimitiveTypeUnion = typeof string | typeof number | typeof boolean;
interface QueryType<
Params extends { [key: string]: PrimitiveTypeUnion },
T extends DataTypeUnion
> {
kind: "query";
params: Params;
@freddi301
freddi301 / I18n.tsx
Created January 4, 2019 16:27
React TypeScript i18n
import React from "react";
type Dictionary = Record<string, string | ((arg: any) => string)>;
export type L12n<T extends Dictionary> = T;
export function makeI18n<T extends Dictionary>() {
const Context = React.createContext<T | undefined>(undefined);
const I18ContextConsumer = Context.Consumer;
const I18ContextProvider = Context.Provider;
function I18n<K extends keyof T>(