Skip to content

Instantly share code, notes, and snippets.

@alex-taxiera
alex-taxiera / job-queue.ts
Last active April 11, 2021 04:52
Promise Queue classes for async jobs
export type JobFunction<T> = (...args: Array<any>) => Promise<T> // eslint-disable-line @typescript-eslint/no-explicit-any
export type JobResult<T> = {
id: number
priority?: number
data: T
}
export type Job<T> = {
id: number
priority?: number
handlePromise: {
@alex-taxiera
alex-taxiera / ExtendedMap.js
Last active May 15, 2019 02:07
A Map class with some extra features for iterating.
class ExtendedMap extends Map {
constructor (iter) {
super(iter)
this._array = null
}
set (key, val) {
this._array = null
return super.set(key, val)
}
@alex-taxiera
alex-taxiera / child.js
Created June 4, 2019 01:19
Simple Node Child Process Broadcasting
process.on('message', (message) => {
console.log('child received:', message)
process.send(message) // echo the message back to parent
})
@alex-taxiera
alex-taxiera / sendTyping.js
Created August 26, 2019 18:09
Simple typing management for d.js v12
const {
TextChannel,
DMChannel
} = require('discord.js')
function isTextBasedChannel (channel) {
return channel instanceof TextChannel || channel instanceof DMChannel
}
module.exports = function (channel, limit) {
@alex-taxiera
alex-taxiera / request.js
Last active October 25, 2019 02:39
Native HTTP Request Module
// request('https://www.google.com').then(console.log)
const https = require('https')
const http = require('http')
const { URL } = require('url')
const requesters = {
'http:': http,
'https:': https
}
@alex-taxiera
alex-taxiera / Artist.js
Created November 11, 2019 23:37
A front end canvas manager
import Upload from './Upload.js'
export default class Artist {
constructor (canvas) {
this.canvas = canvas
this.ctx = canvas.getContext('2d')
}
getLink () {
return this.canvas.toDataURL()
const { EventEmitter } = require('events')
class PriorityJobQueue extends EventEmitter {
constructor (levels, ...rest) {
super(...rest)
this.queues = new Array(levels).fill([])
this.currentJob = null
this.totalJobs = 0
}
@alex-taxiera
alex-taxiera / meme.ts
Last active February 21, 2020 00:15
Just an Azure DevOps meme...
class Project {
private _workItems: WorkItem[] = [];
public get workItems(): WorkItem[] {
return this._workItems;
}
public addWorkItem(item: WorkItem): number {
const id = this._workItems.push(item);
item.id = id;
@alex-taxiera
alex-taxiera / stream.ts
Last active March 26, 2020 05:08
Simple example of server side events with express in TypeScript
import express, { RequestHandler, Response } from 'express'
import bodyParser from 'body-parser'
import cors from 'cors'
interface Client {
id: string
res: Response
}
interface Item {
@alex-taxiera
alex-taxiera / group-by.ts
Created June 19, 2020 02:57
group by function to replace lodash groupBy
function groupBy <T = unknown> (
list: Array<T>,
keyGen: (item: T) => string | number,
): {[k: string]: Array<T>} {
return list.reduce<{[k: string]: Array<T>}>((ax, dx) => {
const key = keyGen(dx)
if (ax[key]) {
ax[key].push(dx)
} else {