simple-json-order
Version:
A lightweight JavaScript utility to preserve the insertion order of top-level keys in JSON objects — ideal for config files, logs, or any use case where key order matters.
104 lines (83 loc) • 2.33 kB
JavaScript
import { describe, it, expect } from 'vitest';
import { JSONOrder } from './index';
describe('JSONOrder', () => {
it('should instantiate', () => {
const jsonOrdered = new JSONOrder();
expect(jsonOrdered.size()).toBe(0);
});
it('should add values to map', () => {
const jsonOrdered = new JSONOrder();
jsonOrdered.add("20", "value 10");
jsonOrdered.add("a", "value a");
jsonOrdered.add("5", "value 5");
jsonOrdered.add("1", "value 1");
expect(jsonOrdered.size()).toBe(4);
});
it('should get all values in the Map', () => {
const jsonOrdered = new JSONOrder();
jsonOrdered.add("20", "value 10");
jsonOrdered.add("a", "value a");
expect(jsonOrdered.getAll()).toStrictEqual([
[
"20",
"value 10",
],
[
"a",
"value a",
],
]);
});
it('should get a single value', () => {
const jsonOrdered = new JSONOrder();
jsonOrdered.add("20", "value 10");
jsonOrdered.add("a", "value a");
expect(jsonOrdered.get(20)).toBe("value 10");
});
it('should delete by id', () => {
const jsonOrdered = new JSONOrder();
jsonOrdered.add("20", "value 10");
jsonOrdered.add("a", "value a");
jsonOrdered.add("5", "value 5");
jsonOrdered.add("1", "value 1");
jsonOrdered.delete(5)
expect(jsonOrdered.getAll()).toStrictEqual([
[
"20",
"value 10",
],
[
"a",
"value a",
],
[
"1",
"value 1",
],
]);
});
it('should stringify and keep the order of inserction', () => {
const jsonOrdered = new JSONOrder();
jsonOrdered.add("20", "value 10");
jsonOrdered.add("a", "value a");
expect(jsonOrdered.stringify()).toBe("{\"20\": \"value 10\",\"a\": \"value a\"}");
});
it('should parse and keep the order of the string', () => {
const jsonOrdered = new JSONOrder();
jsonOrdered.parse('{"20": "value 20", "5": "value 5", "100": "value 100"}')
expect(jsonOrdered.getAll()).toStrictEqual([
[
"20",
"value 20",
],
[
"5",
"value 5",
],
[
"100",
"value 100",
],
]);
});
});