Skip to content

Commit fa79a18

Browse files
committed
add unflatten function
1 parent e39f9e4 commit fa79a18

File tree

3 files changed

+26
-3
lines changed

3 files changed

+26
-3
lines changed

index.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
export { uneval } from './src/uneval.js';
2-
export { parse } from './src/parse.js';
2+
export { parse, unflatten } from './src/parse.js';
33
export { stringify } from './src/stringify.js';

src/parse.js

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,14 @@ import {
1212
* @param {string} serialized
1313
*/
1414
export function parse(serialized) {
15-
const parsed = JSON.parse(serialized);
15+
return unflatten(JSON.parse(serialized));
16+
}
1617

18+
/**
19+
* Revive a value flattened with `devalue.flatten`
20+
* @param {number | any[]} parsed
21+
*/
22+
export function unflatten(parsed) {
1723
if (typeof parsed === 'number') return hydrate(parsed, true);
1824

1925
if (!Array.isArray(parsed) || parsed.length === 0) {

test/test.js

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import * as vm from 'vm';
22
import * as assert from 'uvu/assert';
33
import * as uvu from 'uvu';
4-
import { uneval, parse, stringify } from '../index.js';
4+
import { uneval, unflatten, parse, stringify } from '../index.js';
55

66
const fixtures = {
77
basics: [
@@ -406,6 +406,23 @@ for (const [name, tests] of Object.entries(fixtures)) {
406406
test.run();
407407
}
408408

409+
for (const [name, tests] of Object.entries(fixtures)) {
410+
const test = uvu.suite(`unflatten: ${name}`);
411+
for (const t of tests) {
412+
test(t.name, () => {
413+
const actual = unflatten(JSON.parse(t.json));
414+
const expected = t.value;
415+
416+
if (t.validate) {
417+
t.validate(actual);
418+
} else {
419+
assert.equal(actual, expected);
420+
}
421+
});
422+
}
423+
test.run();
424+
}
425+
409426
const invalid = [
410427
{
411428
name: 'empty string',

0 commit comments

Comments
 (0)