Skip to content

Commit 0f2a69b

Browse files
kriskclaude
andcommitted
fix(index): strip getFn from keys in toJSON() for safe serialization
getFn functions in keys caused DataCloneError when writing the index to IndexedDB or other structured-clone-based storage. Closes #798 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent 0b37ba4 commit 0f2a69b

15 files changed

Lines changed: 184 additions & 55 deletions

dist/fuse.basic.cjs

Lines changed: 36 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,26 @@ function _objectSpread2(e) {
6666
}
6767
return e;
6868
}
69+
function _objectWithoutProperties(e, t) {
70+
if (null == e) return {};
71+
var o,
72+
r,
73+
i = _objectWithoutPropertiesLoose(e, t);
74+
if (Object.getOwnPropertySymbols) {
75+
var n = Object.getOwnPropertySymbols(e);
76+
for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]);
77+
}
78+
return i;
79+
}
80+
function _objectWithoutPropertiesLoose(r, e) {
81+
if (null == r) return {};
82+
var t = {};
83+
for (var n in r) if ({}.hasOwnProperty.call(r, n)) {
84+
if (-1 !== e.indexOf(n)) continue;
85+
t[n] = r[n];
86+
}
87+
return t;
88+
}
6989
function _toConsumableArray(r) {
7090
return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread();
7191
}
@@ -345,6 +365,7 @@ function norm() {
345365
};
346366
}
347367

368+
var _excluded = ["getFn"];
348369
var FuseIndex = /*#__PURE__*/function () {
349370
function FuseIndex() {
350371
var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
@@ -521,19 +542,23 @@ var FuseIndex = /*#__PURE__*/function () {
521542
key: "toJSON",
522543
value: function toJSON() {
523544
return {
524-
keys: this.keys,
545+
keys: this.keys.map(function (_ref2) {
546+
_ref2.getFn;
547+
var key = _objectWithoutProperties(_ref2, _excluded);
548+
return key;
549+
}),
525550
records: this.records
526551
};
527552
}
528553
}]);
529554
return FuseIndex;
530555
}();
531556
function createIndex(keys, docs) {
532-
var _ref2 = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},
533-
_ref2$getFn = _ref2.getFn,
534-
getFn = _ref2$getFn === void 0 ? Config.getFn : _ref2$getFn,
535-
_ref2$fieldNormWeight = _ref2.fieldNormWeight,
536-
fieldNormWeight = _ref2$fieldNormWeight === void 0 ? Config.fieldNormWeight : _ref2$fieldNormWeight;
557+
var _ref3 = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},
558+
_ref3$getFn = _ref3.getFn,
559+
getFn = _ref3$getFn === void 0 ? Config.getFn : _ref3$getFn,
560+
_ref3$fieldNormWeight = _ref3.fieldNormWeight,
561+
fieldNormWeight = _ref3$fieldNormWeight === void 0 ? Config.fieldNormWeight : _ref3$fieldNormWeight;
537562
var myIndex = new FuseIndex({
538563
getFn: getFn,
539564
fieldNormWeight: fieldNormWeight
@@ -544,11 +569,11 @@ function createIndex(keys, docs) {
544569
return myIndex;
545570
}
546571
function parseIndex(data) {
547-
var _ref3 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
548-
_ref3$getFn = _ref3.getFn,
549-
getFn = _ref3$getFn === void 0 ? Config.getFn : _ref3$getFn,
550-
_ref3$fieldNormWeight = _ref3.fieldNormWeight,
551-
fieldNormWeight = _ref3$fieldNormWeight === void 0 ? Config.fieldNormWeight : _ref3$fieldNormWeight;
572+
var _ref4 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
573+
_ref4$getFn = _ref4.getFn,
574+
getFn = _ref4$getFn === void 0 ? Config.getFn : _ref4$getFn,
575+
_ref4$fieldNormWeight = _ref4.fieldNormWeight,
576+
fieldNormWeight = _ref4$fieldNormWeight === void 0 ? Config.fieldNormWeight : _ref4$fieldNormWeight;
552577
var keys = data.keys,
553578
records = data.records;
554579
var myIndex = new FuseIndex({

dist/fuse.basic.js

Lines changed: 36 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,26 @@
7070
}
7171
return e;
7272
}
73+
function _objectWithoutProperties(e, t) {
74+
if (null == e) return {};
75+
var o,
76+
r,
77+
i = _objectWithoutPropertiesLoose(e, t);
78+
if (Object.getOwnPropertySymbols) {
79+
var n = Object.getOwnPropertySymbols(e);
80+
for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]);
81+
}
82+
return i;
83+
}
84+
function _objectWithoutPropertiesLoose(r, e) {
85+
if (null == r) return {};
86+
var t = {};
87+
for (var n in r) if ({}.hasOwnProperty.call(r, n)) {
88+
if (-1 !== e.indexOf(n)) continue;
89+
t[n] = r[n];
90+
}
91+
return t;
92+
}
7393
function _toConsumableArray(r) {
7494
return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread();
7595
}
@@ -349,6 +369,7 @@
349369
};
350370
}
351371

372+
var _excluded = ["getFn"];
352373
var FuseIndex = /*#__PURE__*/function () {
353374
function FuseIndex() {
354375
var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
@@ -525,19 +546,23 @@
525546
key: "toJSON",
526547
value: function toJSON() {
527548
return {
528-
keys: this.keys,
549+
keys: this.keys.map(function (_ref2) {
550+
_ref2.getFn;
551+
var key = _objectWithoutProperties(_ref2, _excluded);
552+
return key;
553+
}),
529554
records: this.records
530555
};
531556
}
532557
}]);
533558
return FuseIndex;
534559
}();
535560
function createIndex(keys, docs) {
536-
var _ref2 = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},
537-
_ref2$getFn = _ref2.getFn,
538-
getFn = _ref2$getFn === void 0 ? Config.getFn : _ref2$getFn,
539-
_ref2$fieldNormWeight = _ref2.fieldNormWeight,
540-
fieldNormWeight = _ref2$fieldNormWeight === void 0 ? Config.fieldNormWeight : _ref2$fieldNormWeight;
561+
var _ref3 = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},
562+
_ref3$getFn = _ref3.getFn,
563+
getFn = _ref3$getFn === void 0 ? Config.getFn : _ref3$getFn,
564+
_ref3$fieldNormWeight = _ref3.fieldNormWeight,
565+
fieldNormWeight = _ref3$fieldNormWeight === void 0 ? Config.fieldNormWeight : _ref3$fieldNormWeight;
541566
var myIndex = new FuseIndex({
542567
getFn: getFn,
543568
fieldNormWeight: fieldNormWeight
@@ -548,11 +573,11 @@
548573
return myIndex;
549574
}
550575
function parseIndex(data) {
551-
var _ref3 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
552-
_ref3$getFn = _ref3.getFn,
553-
getFn = _ref3$getFn === void 0 ? Config.getFn : _ref3$getFn,
554-
_ref3$fieldNormWeight = _ref3.fieldNormWeight,
555-
fieldNormWeight = _ref3$fieldNormWeight === void 0 ? Config.fieldNormWeight : _ref3$fieldNormWeight;
576+
var _ref4 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
577+
_ref4$getFn = _ref4.getFn,
578+
getFn = _ref4$getFn === void 0 ? Config.getFn : _ref4$getFn,
579+
_ref4$fieldNormWeight = _ref4.fieldNormWeight,
580+
fieldNormWeight = _ref4$fieldNormWeight === void 0 ? Config.fieldNormWeight : _ref4$fieldNormWeight;
556581
var keys = data.keys,
557582
records = data.records;
558583
var myIndex = new FuseIndex({

dist/fuse.basic.min.cjs

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

dist/fuse.basic.min.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/fuse.basic.min.mjs

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

dist/fuse.basic.mjs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -378,7 +378,10 @@ class FuseIndex {
378378
}
379379
toJSON() {
380380
return {
381-
keys: this.keys,
381+
keys: this.keys.map(({
382+
getFn,
383+
...key
384+
}) => key),
382385
records: this.records
383386
};
384387
}

dist/fuse.cjs

Lines changed: 36 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,26 @@ function _objectSpread2(e) {
107107
}
108108
return e;
109109
}
110+
function _objectWithoutProperties(e, t) {
111+
if (null == e) return {};
112+
var o,
113+
r,
114+
i = _objectWithoutPropertiesLoose(e, t);
115+
if (Object.getOwnPropertySymbols) {
116+
var n = Object.getOwnPropertySymbols(e);
117+
for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]);
118+
}
119+
return i;
120+
}
121+
function _objectWithoutPropertiesLoose(r, e) {
122+
if (null == r) return {};
123+
var t = {};
124+
for (var n in r) if ({}.hasOwnProperty.call(r, n)) {
125+
if (-1 !== e.indexOf(n)) continue;
126+
t[n] = r[n];
127+
}
128+
return t;
129+
}
110130
function _possibleConstructorReturn(t, e) {
111131
if (e && ("object" == typeof e || "function" == typeof e)) return e;
112132
if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined");
@@ -394,6 +414,7 @@ function norm() {
394414
};
395415
}
396416

417+
var _excluded = ["getFn"];
397418
var FuseIndex = /*#__PURE__*/function () {
398419
function FuseIndex() {
399420
var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
@@ -570,19 +591,23 @@ var FuseIndex = /*#__PURE__*/function () {
570591
key: "toJSON",
571592
value: function toJSON() {
572593
return {
573-
keys: this.keys,
594+
keys: this.keys.map(function (_ref2) {
595+
_ref2.getFn;
596+
var key = _objectWithoutProperties(_ref2, _excluded);
597+
return key;
598+
}),
574599
records: this.records
575600
};
576601
}
577602
}]);
578603
return FuseIndex;
579604
}();
580605
function createIndex(keys, docs) {
581-
var _ref2 = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},
582-
_ref2$getFn = _ref2.getFn,
583-
getFn = _ref2$getFn === void 0 ? Config.getFn : _ref2$getFn,
584-
_ref2$fieldNormWeight = _ref2.fieldNormWeight,
585-
fieldNormWeight = _ref2$fieldNormWeight === void 0 ? Config.fieldNormWeight : _ref2$fieldNormWeight;
606+
var _ref3 = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},
607+
_ref3$getFn = _ref3.getFn,
608+
getFn = _ref3$getFn === void 0 ? Config.getFn : _ref3$getFn,
609+
_ref3$fieldNormWeight = _ref3.fieldNormWeight,
610+
fieldNormWeight = _ref3$fieldNormWeight === void 0 ? Config.fieldNormWeight : _ref3$fieldNormWeight;
586611
var myIndex = new FuseIndex({
587612
getFn: getFn,
588613
fieldNormWeight: fieldNormWeight
@@ -593,11 +618,11 @@ function createIndex(keys, docs) {
593618
return myIndex;
594619
}
595620
function parseIndex(data) {
596-
var _ref3 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
597-
_ref3$getFn = _ref3.getFn,
598-
getFn = _ref3$getFn === void 0 ? Config.getFn : _ref3$getFn,
599-
_ref3$fieldNormWeight = _ref3.fieldNormWeight,
600-
fieldNormWeight = _ref3$fieldNormWeight === void 0 ? Config.fieldNormWeight : _ref3$fieldNormWeight;
621+
var _ref4 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
622+
_ref4$getFn = _ref4.getFn,
623+
getFn = _ref4$getFn === void 0 ? Config.getFn : _ref4$getFn,
624+
_ref4$fieldNormWeight = _ref4.fieldNormWeight,
625+
fieldNormWeight = _ref4$fieldNormWeight === void 0 ? Config.fieldNormWeight : _ref4$fieldNormWeight;
601626
var keys = data.keys,
602627
records = data.records;
603628
var myIndex = new FuseIndex({

dist/fuse.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -190,7 +190,7 @@ declare class FuseIndex<T = any> {
190190
_addString(doc: string, docIndex: number): void;
191191
_addObject(doc: any, docIndex: number): void;
192192
toJSON(): {
193-
keys: ReadonlyArray<KeyObject>;
193+
keys: ReadonlyArray<Omit<KeyObject, 'getFn'>>;
194194
records: IndexRecord[];
195195
};
196196
}

dist/fuse.js

Lines changed: 36 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,26 @@
111111
}
112112
return e;
113113
}
114+
function _objectWithoutProperties(e, t) {
115+
if (null == e) return {};
116+
var o,
117+
r,
118+
i = _objectWithoutPropertiesLoose(e, t);
119+
if (Object.getOwnPropertySymbols) {
120+
var n = Object.getOwnPropertySymbols(e);
121+
for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]);
122+
}
123+
return i;
124+
}
125+
function _objectWithoutPropertiesLoose(r, e) {
126+
if (null == r) return {};
127+
var t = {};
128+
for (var n in r) if ({}.hasOwnProperty.call(r, n)) {
129+
if (-1 !== e.indexOf(n)) continue;
130+
t[n] = r[n];
131+
}
132+
return t;
133+
}
114134
function _possibleConstructorReturn(t, e) {
115135
if (e && ("object" == typeof e || "function" == typeof e)) return e;
116136
if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined");
@@ -398,6 +418,7 @@
398418
};
399419
}
400420

421+
var _excluded = ["getFn"];
401422
var FuseIndex = /*#__PURE__*/function () {
402423
function FuseIndex() {
403424
var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
@@ -574,19 +595,23 @@
574595
key: "toJSON",
575596
value: function toJSON() {
576597
return {
577-
keys: this.keys,
598+
keys: this.keys.map(function (_ref2) {
599+
_ref2.getFn;
600+
var key = _objectWithoutProperties(_ref2, _excluded);
601+
return key;
602+
}),
578603
records: this.records
579604
};
580605
}
581606
}]);
582607
return FuseIndex;
583608
}();
584609
function createIndex(keys, docs) {
585-
var _ref2 = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},
586-
_ref2$getFn = _ref2.getFn,
587-
getFn = _ref2$getFn === void 0 ? Config.getFn : _ref2$getFn,
588-
_ref2$fieldNormWeight = _ref2.fieldNormWeight,
589-
fieldNormWeight = _ref2$fieldNormWeight === void 0 ? Config.fieldNormWeight : _ref2$fieldNormWeight;
610+
var _ref3 = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},
611+
_ref3$getFn = _ref3.getFn,
612+
getFn = _ref3$getFn === void 0 ? Config.getFn : _ref3$getFn,
613+
_ref3$fieldNormWeight = _ref3.fieldNormWeight,
614+
fieldNormWeight = _ref3$fieldNormWeight === void 0 ? Config.fieldNormWeight : _ref3$fieldNormWeight;
590615
var myIndex = new FuseIndex({
591616
getFn: getFn,
592617
fieldNormWeight: fieldNormWeight
@@ -597,11 +622,11 @@
597622
return myIndex;
598623
}
599624
function parseIndex(data) {
600-
var _ref3 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
601-
_ref3$getFn = _ref3.getFn,
602-
getFn = _ref3$getFn === void 0 ? Config.getFn : _ref3$getFn,
603-
_ref3$fieldNormWeight = _ref3.fieldNormWeight,
604-
fieldNormWeight = _ref3$fieldNormWeight === void 0 ? Config.fieldNormWeight : _ref3$fieldNormWeight;
625+
var _ref4 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
626+
_ref4$getFn = _ref4.getFn,
627+
getFn = _ref4$getFn === void 0 ? Config.getFn : _ref4$getFn,
628+
_ref4$fieldNormWeight = _ref4.fieldNormWeight,
629+
fieldNormWeight = _ref4$fieldNormWeight === void 0 ? Config.fieldNormWeight : _ref4$fieldNormWeight;
605630
var keys = data.keys,
606631
records = data.records;
607632
var myIndex = new FuseIndex({

dist/fuse.min.cjs

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

0 commit comments

Comments
 (0)