Skip to content

Instantly share code, notes, and snippets.

View kettanaito's full-sized avatar
Working on

Artem Zakharchenko kettanaito

Working on
View GitHub Profile
kettanaito /
Last active January 8, 2024 03:14
A Proper Package Registry for JavaScript

A Proper Package Registry for JavaScript

Historically, NPM has had a number of issues that affected the entire ecosystem one way or the other. I tend to believe most of those issues arise from the fundamental design flaws of NPM and are not as easily solved.

In this document, I propose an alternative to the NPM registry. Let's call it a "Proper Package Registry", or PPR for short. This alternative aimes to solve the long-standing issues with NPM, such as name squatting, package unpublishing, versioning, as well as add a few points concerning developer experience, which is close to non-existing when using NPM as a package author.

Package validation

PPR ships with a CLI that offers extensive tools to validate the package you are about to publish. This is completely missing from NPM and has been in the top of my painpoints list for all the years I've been publishing packages.

kettanaito /
Last active November 12, 2023 10:43
On Mocking Websockets

On Mocking WebSockets

Unlike HTTP, WebSocket communication is duplex (both the client and the server can emit and listen to events) and persistent. This difference is reflected in how one would expect to mock a WebSocket communication.


I believe mocking WebSockets should be connection-based. This way each individual connected client is scoped to a particular interceptor handler.

interceptor.on('connection', (connection) => {
kettanaito / yieldMany.js
Created August 18, 2023 09:53
Yield Promise.race()
async function* yieldMany(promises) {
promises.forEach((p) => {
return p.then((value) => {
promises.findIndex((xp) => xp === p),
return value;
kettanaito /
Last active July 9, 2023 18:19
World_SecretCellar.qst in Human Language

World_SecretCellar Quest Description

Hi, folks. I haven’t found a human-friendly representation of what’s going on in json/base/meta/Quest/World_SecretCellar.qst.json so I spend an hour writing one up. Below is what’s described in the quest file, some of my assumptions, and a few clear things from the data I’ve not seen mentioned yet.

The quest has 3 phases:

Phase 1

When the objective is set (quest is taken):

  1. Callback 1. A quest message is displayed (associated with the WORLD_SECRETCELLAR_STATUES_ACTIVATED enum). This is not a condition so this is a side-effect (arEventFilters) and not a player requirement.
  2. Callback 2. This one has multiple sub-callbacks.
kettanaito /
Created May 12, 2023 13:49 — forked from markerikson/
RTK ESM/TS Config meeting notes - 2023-02-27/28

RTK ESM/TS Discussion


  • Nathan Bierema
  • Mateusz Burzynski
  • Mark Erikson


  • Mateusz: what do you want besides "ship widely compat code?" What preferences?
// TODO: make `pages` optional and measure the div when unspecified, this will
// allow more normal document flow and make it easier to do both mobile and
// desktop.
import {
kettanaito /
Last active May 10, 2024 08:19
Chromium on Vercel (serveless)

Chromium on Vercel (serverless)

This is an up-to-date guide on running Chromium in Vercel serverless functions in 2022. What you will read below is the result of two days of research, debugging, 100+ failed deployments, and a little bit of stress.

Getting started

Step 1: Install dependencies

Use chrome-aws-lambda that comes with Chromium pre-configured to run in serverless, and puppeteer-core due to the smaller size of Chromium distributive.

kettanaito /
Last active January 31, 2022 01:36
Source private beta

Beta Program

Thank you for deciding to participate in the closed beta of our new library called "Source"! Through your feedback we will be able to refine it, making the lives of thousands of developers easier.

What is this library about?

The Source library allows you to generate request handlers from various sources. Currently, we support only HTTP archives (HAR) and OpenAPI (Swagger).

What do you expect from me?

kettanaito / apollo.d.ts
Created November 5, 2021 00:26
Annotate context type from "@apollo/client"
declare module '@apollo/client/core' {
export interface DefaultContext {
accessToken: string
export {}
kettanaito / getCompilationSource.ts
Last active February 9, 2021 17:23
Webpack – Get compilation source
import { createFsFromVolume, Volume } from 'memfs'
const fs = createFsFromVolume(new Volume())
const compiler = webpack({
entry: 'file.js',
output: { filename: 'main.js' }
// Compile the file to memory.
compiler.outputFileSystem = fs