Skip to content

Commit f0ef3c0

Browse files
committed
Replace opaque HCON merge values
1 parent a8b39c9 commit f0ef3c0

2 files changed

Lines changed: 8 additions & 2 deletions

File tree

src/htmx.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,8 +74,8 @@ var htmx = (() => {
7474
for (let [key, val] of Object.entries(source)) {
7575
if (['__proto__', 'constructor', 'prototype'].includes(key)) continue;
7676

77-
let sourceIsObject = val && typeof val === 'object' && !Array.isArray(val);
78-
let targetIsObject = target[key] && typeof target[key] === 'object' && !Array.isArray(target[key]);
77+
let sourceIsObject = val?.constructor === Object;
78+
let targetIsObject = target[key]?.constructor === Object;
7979

8080
if (sourceIsObject && targetIsObject) {
8181
HCON.merge(val, target[key]);

test/tests/unit/HCON.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -396,6 +396,12 @@ describe('HCON.merge unit tests', function() {
396396
assert.deepEqual(result.list, [3, 4])
397397
})
398398

399+
it('does not deep-merge non-plain objects (replaces them)', function () {
400+
let signal = new AbortController().signal
401+
let result = HCON.merge({ signal }, { signal: new AbortController().signal })
402+
assert.strictEqual(result.signal, signal)
403+
})
404+
399405
// string source (auto-parse)
400406

401407
it('parses an HCON string source', function () {

0 commit comments

Comments
 (0)