Skip to content

Commit fcd3390

Browse files
authored
Merge pull request #33 from Rich-Harris/prevent-duplicate-names
prevent duplicate parameter names
2 parents a602c57 + ec75c03 commit fcd3390

File tree

2 files changed

+25
-1
lines changed

2 files changed

+25
-1
lines changed

devalue.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -243,7 +243,7 @@ function get_name(num) {
243243
num = ~~(num / chars.length) - 1;
244244
} while (num >= 0);
245245

246-
return reserved.test(name) ? `${name}_` : name;
246+
return reserved.test(name) ? `${name}0` : name;
247247
}
248248

249249
/** @param {any} thing */

devalue.test.js

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,22 @@ function throws(name, fn) {
4545
}
4646
}
4747

48+
/**
49+
*
50+
* @param {string} name
51+
* @param {(...args: any[]) => void} fn
52+
*/
53+
function allows(name, fn) {
54+
try {
55+
fn();
56+
console.log(`✅ ${name}`);
57+
passed += 1;
58+
} catch (e) {
59+
console.log(`❌ ${name} (${e.message})`);
60+
failed += 1;
61+
}
62+
}
63+
4864
describe('basics', (t) => {
4965
t('number', 42, '42');
5066
t('negative number', -42, '-42');
@@ -173,6 +189,14 @@ describe('misc', (t) => {
173189
throws('throws for symbolic keys', () => {
174190
devalue({ [Symbol()]: null });
175191
});
192+
193+
allows('does not create duplicate parameter names', () => {
194+
const foo = new Array(20000).fill(0).map((_, i) => i);
195+
const bar = foo.map((_, i) => ({ [i]: foo[i] }));
196+
const serialized = devalue([foo, ...bar]);
197+
198+
eval(serialized);
199+
});
176200
});
177201

178202
console.log(`\n---\n${passed} passed, ${failed} failed\n`);

0 commit comments

Comments
 (0)