plain-object
Version:
Convert nested JSON to simple plain JSON object
260 lines (227 loc) • 4.57 kB
text/typescript
const plainObject = require("./index.ts");
import {
MOCK,
MOCK_DATE,
MOCK_BIGINT,
MOCK_BUFFER,
MOCK_REGEXP,
MOCK_PROMISE,
} from "./mock";
describe("[plain-object pkg] plainObject method", () => {
it("plain object using [string]", () => {
const data = {
one: {
one: "1",
two: {
two: "two",
},
},
};
const expected = {
one: "1",
two: "two",
};
expect(plainObject(data)).toEqual(expected);
});
it("plain object using [number]", () => {
const data = {
one: {
one: 1,
two: {
two: 123,
},
},
};
const expected = {
one: 1,
two: 123,
};
expect(plainObject(data)).toEqual(expected);
});
it("plain object using [boolean]", () => {
const data = {
one: {
one: true,
two: {
two: false,
},
},
};
const expected = {
one: true,
two: false,
};
expect(plainObject(data)).toEqual(expected);
});
it("plain object using [array]", () => {
const data = {
one: {
one: [1, 2, 3],
two: {
two: [3],
three: {
three: [],
},
},
},
};
const expected = {
one: [1, 2, 3],
two: [3],
three: [],
};
expect(plainObject(data)).toEqual(expected);
});
it("plain object using [date]", () => {
const date = new Date();
const month = date.getMonth() + 1;
const data = {
one: {
one: date,
two: {
two: month,
},
},
};
const expected = {
one: date,
two: month,
};
expect(plainObject(data)).toEqual(expected);
});
it("plain object using [function]", () => {
const fn = function () {
return "fn";
};
const data = {
one: {
one: fn,
two: {
two: false,
},
},
};
const expected = {
one: fn,
two: false,
};
expect(plainObject(data)).toEqual(expected);
});
it("plain object using [map/set]", () => {
const map = new Map();
const set = new Set();
map.set("key", "value");
set.add("value");
const data = {
one: {
one: map,
two: {
two: set,
},
},
};
const expected = {
one: map,
two: set,
};
expect(plainObject(data)).toEqual(expected);
});
it("plain object using [bigint]", () => {
const data = {
one: {
one: MOCK_BIGINT,
two: {
two: false,
},
},
};
const expected = {
one: MOCK_BIGINT,
two: false,
};
expect(plainObject(data)).toEqual(expected);
});
it("plain object using [symbol]", () => {
const sym = Symbol("Sym");
const data = {
one: {
one: false,
two: {
two: sym,
},
},
};
const expected = {
one: false,
two: sym,
};
expect(plainObject(data)).toEqual(expected);
});
it("plain object using [buffer]", () => {
const data = {
one: {
one: [1, 2, 3],
two: {
two: MOCK_BUFFER,
},
},
};
const expected = {
one: [1, 2, 3],
two: MOCK_BUFFER,
};
expect(plainObject(data)).toEqual(expected);
});
it("plain object using [regexp]", () => {
const data = {
one: {
one: [1, 2, 3],
two: {
two: MOCK_REGEXP,
},
},
};
const expected = {
one: [1, 2, 3],
two: MOCK_REGEXP,
};
expect(plainObject(data)).toEqual(expected);
});
it("plain object using [promise]", () => {
const data = {
one: {
one: new Set(),
two: {
two: MOCK_PROMISE,
},
},
};
const expected = {
one: new Set(),
two: MOCK_PROMISE,
};
expect(plainObject(data)).toEqual(expected);
});
it("plain object using all types", () => {
const expected = {
one: "1",
two: true,
three: 1,
four: [1, 2, 3],
five: MOCK_DATE,
six: function () {
return "seven";
},
seven: new Map(),
eight: new Set(),
nine: MOCK_BIGINT.toString(),
ten: Symbol("Sym"),
eleven: MOCK_BUFFER,
twelve: MOCK_REGEXP,
thirteen: MOCK_PROMISE,
};
const result = plainObject(MOCK);
result.nine = MOCK_BIGINT.toString();
expect(JSON.stringify(result)).toEqual(JSON.stringify(expected));
});
});