Skip to content

Instantly share code, notes, and snippets.

View laphilosophia's full-sized avatar
🖖
live long and prosper

Erdem Arslan laphilosophia

🖖
live long and prosper
View GitHub Profile
@laphilosophia
laphilosophia / immutable.ts
Created December 30, 2022 12:34
simple immutable class library
export class ImmutableUtility<T> {
#draft: any
constructor(array: Array<T>) {
if (array.length === 0) {
throw new Error('Out of bounds...')
}
this.#draft = [...array]
}
@laphilosophia
laphilosophia / removeItem.ts
Created December 30, 2022 12:33
Simple, shallow checked, remove item from array
export function removeItem<T>(array: Array<T>) {
let cache = array
let count = array.length
let checkArrayContains = (() => Object.is(cache[0], cache[count - 1]))()
let findCurrentIndex = (key: any) => cache.findIndex((item: any) => item === key)
let immutableSlice = (start: number) => [...cache.slice(0, start), ...cache.slice(start + 1)]
if (!Array.isArray(cache)) throw new Error('type error! [array] expected!')
@laphilosophia
laphilosophia / count.ts
Created December 29, 2022 16:14
Simple, yet elegant python like string count
export default function count(
str: string,
{
trim,
strict,
custom,
}: {
trim?: boolean
strict?: boolean
custom?: RegExp
@laphilosophia
laphilosophia / areEquivalent.js
Created December 10, 2021 10:55 — forked from DLiblik/areEquivalent.js
Fast JS function for testing if Javascript values/objects are equivalent or equal - guards against circular references, prioritizes speed.
/**
Compares two items (values or references) for nested equivalency, meaning that
at root and at each key or index they are equivalent as follows:
- If a value type, values are either hard equal (===) or are both NaN
(different than JS where NaN !== NaN)
- If functions, they are the same function instance or have the same value
when converted to string via `toString()`
- If Date objects, both have the same getTime() or are both NaN (invalid)
- If arrays, both are same length, and all contained values areEquivalent
@laphilosophia
laphilosophia / promise_map.js
Created May 4, 2021 12:29 — forked from tokland/promise_map.js
Execute promises sequentially (one at at a time) and return array with the results
function promiseMap(inputValues, mapper) {
const reducer = (acc$, inputValue) =>
acc$.then(acc => mapper(inputValue).then(result => acc.push(result) && acc));
return inputValues.reduce(reducer, Promise.resolve([]));
}
/* Example */
const axios = require('axios');
@laphilosophia
laphilosophia / fpsMeter.js
Created December 21, 2020 18:21 — forked from capfsb/fpsMeter.js
JavaScript FPS meter - Calculating frames per second
fpsMeter() {
let prevTime = Date.now(),
frames = 0;
requestAnimationFrame(function loop() {
const time = Date.now();
frames++;
if (time > prevTime + 1000) {
let fps = Math.round( ( frames * 1000 ) / ( time - prevTime ) );
prevTime = time;
@laphilosophia
laphilosophia / spinner.ts
Created December 9, 2020 15:03
Typescript spinner sample
export default class Spinner {
#elements: NodeListOf<HTMLElement> = document.querySelectorAll('[data-zm-spinner]')
#config: {
title: string,
max: number,
min: number,
} = {
title: 'ADET',
max: 10,
min: 1,
/**
* @param {number} range
*/
function* generator (range) {
let i = 0
while (i < range) {
i += 1
yield i
}
// Long Polling
let ID = 1
const foo = document.createElement('p')
async function timeout (callback, delay) {
return await setTimeout(callback, delay)
}
function polling () {
return timeout(() => {
const scrollDistance = (callback, refresh) => {
if (!callback || typeof callback !== 'function') return
let isScrolling, start, end, distance
window.addEventListener('scroll', event => {
if (!start) {
start = window.pageYOffset
}