Skip to content

dll

Minified3.58 KBMinzipped1.01 KB

Functional doubly-linked lists.

Example

ts
import { Dll } from "@monstermann/dll";

// Create a doubly-linked list
const dll = Dll.create<number>([1, 2, 3]);

// Add elements
const linkA = Dll.append(dll, 4);
const linkB = Dll.prepend(dll, 0);

// Access elements
console.log(Dll.first(dll)?.value); // 0
console.log(Dll.last(dll)?.value); // 4

// Remove elements
Dll.unlink(dll, linkA);
Dll.unlink(dll, linkB);

Installation

sh
npm install @monstermann/dll
sh
pnpm add @monstermann/dll
sh
yarn add @monstermann/dll
sh
bun add @monstermann/dll

Tree-shaking

Installation

sh
npm install -D @monstermann/unplugin-dll
sh
pnpm -D add @monstermann/unplugin-dll
sh
yarn -D add @monstermann/unplugin-dll
sh
bun -D add @monstermann/unplugin-dll

Usage

ts
// vite.config.ts
import dll from "@monstermann/unplugin-dll/vite";

export default defineConfig({
    plugins: [dll()],
});
ts
// rollup.config.js
import dll from "@monstermann/unplugin-dll/rollup";

export default {
    plugins: [dll()],
};
ts
// rolldown.config.js
import dll from "@monstermann/unplugin-dll/rolldown";

export default {
    plugins: [dll()],
};
ts
// webpack.config.js
const dll = require("@monstermann/unplugin-dll/webpack");

module.exports = {
    plugins: [dll()],
};
ts
// rspack.config.js
const dll = require("@monstermann/unplugin-dll/rspack");

module.exports = {
    plugins: [dll()],
};
ts
// esbuild.config.js
import { build } from "esbuild";
import dll from "@monstermann/unplugin-dll/esbuild";

build({
    plugins: [dll()],
});

Benchmarks

  • Runtime: Node v25.1.0
  • CPU: AMD Ryzen 9 7900 12-Core
nameops/sectime/opmarginsamples
Dsp.prepend(dll, number) x 140M26ns±0.10%38M
Dsp.prepend(dll, number) x 1004M335ns±1.84%3M
Dsp.prepend(dll, number) x 1000364K3µs±6.71%340K
array.unshift(number) x 116M62ns±0.07%16M
array.unshift(number) x 100503K2µs±0.13%498K
array.unshift(number) x 100024K42µs±0.27%24K
nameops/sectime/opmarginsamples
Dsp.removeFirst(dll) x 140M26ns±0.06%39M
Dsp.removeFirst(dll) x 1005M214ns±0.07%5M
Dsp.removeFirst(dll) x 1000455K2µs±0.09%453K
array.shift() x 136M28ns±0.07%35M
array.shift() x 100961K1µs±0.07%951K
array.shift() x 100044K23µs±0.09%44K
nameops/sectime/opmarginsamples
Dsp.append(dll, number) x 140M26ns±0.13%38M
Dsp.append(dll, number) x 1004M309ns±0.37%3M
Dsp.append(dll, number) x 1000363K3µs±6.59%340K
array.push(number) x 138M28ns±0.04%36M
array.push(number) x 1006M201ns±0.30%5M
array.push(number) x 1000307K3µs±5.93%289K
nameops/sectime/opmarginsamples
Dsp.removeLast(dll) x 140M26ns±0.13%38M
Dsp.removeLast(dll) x 1005M214ns±0.05%5M
Dsp.removeLast(dll) x 1000477K2µs±0.08%475K
array.pop() x 141M25ns±0.05%40M
array.pop() x 10013M79ns±0.05%13M
array.pop() x 10002M586ns±0.08%2M