Skip to content

Instantly share code, notes, and snippets.

View dejanvasic85's full-sized avatar

Dejan Vasic dejanvasic85

View GitHub Profile
@dejanvasic85
dejanvasic85 / compose.ts
Created July 2, 2023 04:01
Composing promises in typescript
// Here's the original article for function composition and piping: https://blog.logrocket.com/how-to-create-compose-function-typescript/
interface Context {
user: string;
content: string;
}
// And this is how to implement the same method using Promises:
const compose = <T>(fn1: (a: T) => Promise<T>, ...fns: Array<(a: T) => Promise<T>>) =>
fns.reduce((prevFn, nextFn) => async (value) => await prevFn(value).then(nextFn), fn1);
@dejanvasic85
dejanvasic85 / ArrayToType.tsx
Last active March 17, 2022 22:29
Typescript string array to Type
export const layout = ['inline', 'stacked'] as const;
export type Layout = typeof layout[number];
// Then it can be used in React props
interface Props {
layout: Layout;
}
const Component = ({ layout }: Props) => (
@dejanvasic85
dejanvasic85 / chat.tsx
Last active January 8, 2021 11:37
Chat.tsx
import React, { Fragment, useEffect, useRef } from 'react';
import { useQuery, useMutation } from '@apollo/client';
import { List, Typography } from 'antd';
import PageLoader from '../PageLoader/PageLoader';
import ChatInput from './components/ChatInput';
import ChatComment from './components/ChatComment';
import { ADD_MESSAGE, CHAT_ROOM, COMMENTS_SUBSCRIPTION } from './Chat.graphql';
import { AddResponse, ChatRequest, ChatResponse, MessageInput, NewMessage, Props } from './Chat.types';
import styles from './Chat.less';
@dejanvasic85
dejanvasic85 / httpClient.ts
Created September 23, 2020 00:28
Axios Http Client with Logging
import axios, { AxiosInstance, AxiosRequestConfig } from 'axios';
import tracingLogger from '../../logging/tracingLogger';
interface RequestConfig extends AxiosRequestConfig {
metadata: {
startTime: number;
};
}
const createHttpClient = (baseURL: string, defaultHeaders: any = {}): AxiosInstance => {
@dejanvasic85
dejanvasic85 / profile.spec.js
Created August 7, 2020 11:38
Cypress Example
/// <reference types="cypress" />
context('Invite Client', () => {
after(() => {
cy.logout().then(() => {
cy.url().should('contains', Cypress.env('base_login_url'));
});
});
it('should display the profile page with confirmed email', () => {
@dejanvasic85
dejanvasic85 / mock.ts
Created July 24, 2020 00:21
Jest Typescript mocking function example
import * as dateService from './dateService';
const nowMock = dateService.now as jest.MockedFunction<typeof dateService.now>;
describe('some service', () => {
const mockNow = 'now';
beforeEach(() => {
nowMock.mockReturnedValue(mockNow);
});
@dejanvasic85
dejanvasic85 / .mocharc.json
Created July 2, 2020 03:30
Example of Mocha Typescript config
{
"diff": true,
"extension": ["ts", "js"],
"package": "./package.json",
"reporter": "spec",
"slow": 75,
"timeout": 2000,
"watch-files": ["src/**/*.js", "src/**/*.ts"],
"watch-extensions": ["ts", "js"],
"require": ["ts-node/register"]
@dejanvasic85
dejanvasic85 / ColourAvatar.spec.tsx
Last active June 3, 2020 12:24
Jest Testing Examples
import React from 'react';
import { Avatar } from 'antd';
import { shallow, ShallowWrapper } from 'enzyme';
import ColourAvatar from './ColourAvatar';
describe('ColourAvatar', () => {
let wrapper: ShallowWrapper;
const defaultProps: any = {
@dejanvasic85
dejanvasic85 / logging.cs
Last active March 19, 2020 06:24
Logging Configuration
public static IAppBuilder ConfigureSerilog(this IAppBuilder app, HttpConfiguration config)
{
config.Services.Add(typeof(IExceptionLogger), new SerilogExceptionLogger());
var assembly = typeof(SerilogConfig).Assembly.GetName();
var configurationProvider = new ConfigurationProvider(AppSettingKey.Prefix);
var logEventLevel = configurationProvider.Get(AppSettingKey.SerilogLoggingLevel, LogEventLevel.Error);
const string logFileName = "talentsearch-api.json";
var logFilePath = Path.Combine(configurationProvider.Get(AppSettingKey.SerilogFilePath), logFileName);
@dejanvasic85
dejanvasic85 / 01-cwl-setup-agent.config
Last active March 5, 2020 05:36
Elastic Beanstalk Setup Cloudwatch custom logs
###################################################################################################
#### Copyright 2016 Amazon.com, Inc. or its affiliates. All Rights Reserved.
####
#### Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file
#### except in compliance with the License. A copy of the License is located at
####
#### http://aws.amazon.com/apache2.0/
####
#### or in the "license" file accompanying this file. This file is distributed on an "AS IS"
#### BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the