0.0.0 • Published 7 months ago

ordered-dictionary v0.0.0

Weekly downloads
-
License
MIT
Repository
github
Last release
7 months ago

A class for creating ordered dictionary data structures in JavaScript.

An ordered dictionary is essentially a Map: a collection of key-value pairs that maintains a stable and guaranteed insertion order. But sometimes you may need to access the value of a Map based on its position in the map (like accessing an array value by its index). You also may need to add or remove items at a given position rather than by key.

Enter the OrderedDict class.

import { OrderedDict } from "ordered-dictionary";

const dictionary = OrderedDict([
	["a", 1],
	["b", 2],
	["d", 4],
]);
// OrderedDict(3) {'a' => 1, 'b' => 2, 'd' => 4}

// inherits methods and properties from Map
assert(dictionary.get("a") === 1);
dictionary.set("e", 5);
assert(dictionary.get("e") === 5);
dictionary.entries();
// MapIterator {"a" => 1, "b" => 2, "d" => 4, "e" => 5}

// access values by index
assert(dictionary.at(0) === 1);
assert(dictionary.at(1) === 2);
assert(dictionary.at(-1) === 5);

// insert items by index
dictionary.insert(2, "c", 3);
assert(dictionary.at(2) === 3);

// remove items by index
dictionary.deleteAt(0);
assert(dictionary.at(0) === 2);
dictionary.deleteAt(-1);
assert(dictionary.at(-1) === 4);

Getting Started

Author your package in src/. By default, the entrypoint is src/index.ts. Multiple entrypoints can be configured in tsup.config.ts.

Build your package with npm run build. This will output the compiled package to dist/ and ... you're done! Your package is ready to publish. Kick back and enjoy your new OSS package.

Bundling

Vite is installed because it is a peer dependency of Vitest. I still use tsup for bundling by default, as it has a simpler interface. While Vite is a great bundler, it is only really useful for browser packages where you might want a testing page for development.

Vite and tsup are both powered by esbuild and Rollup under the hood, so a) the added dependency overhead is minimal, and b) switching should be relatively simple and result in similar output if you want Vite's features.

In the future I may turn this project into a CLI script that allows you to choose Vite for browser packages.

Contributing

PRs welcome!

0.0.0

7 months ago