msgpackr 1.11.9 → 1.11.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -30,13 +30,6 @@
30
30
  var sequentialMode = false;
31
31
  var inlineObjectReadThreshold = 2;
32
32
  var readStruct;
33
- // no-eval build
34
- try {
35
- new Function('');
36
- } catch(error) {
37
- // if eval variants are not supported, do not create inline object readers ever
38
- inlineObjectReadThreshold = Infinity;
39
- }
40
33
 
41
34
  class Unpackr {
42
35
  constructor(options) {
@@ -502,11 +495,18 @@
502
495
  function readObject() {
503
496
  // This initial function is quick to instantiate, but runs slower. After several iterations pay the cost to build the faster function
504
497
  if (readObject.count++ > inlineObjectReadThreshold) {
505
- let readObject = structure.read = (new Function('r', 'return function(){return ' + (currentUnpackr.freezeData ? 'Object.freeze' : '') +
506
- '({' + structure.map(key => key === '__proto__' ? '__proto_:r()' : validName.test(key) ? key + ':r()' : ('[' + JSON.stringify(key) + ']:r()')).join(',') + '})}'))(read);
498
+ let optimizedReadObject;
499
+ try {
500
+ optimizedReadObject = structure.read = (new Function('r', 'return function(){return ' + (currentUnpackr.freezeData ? 'Object.freeze' : '') +
501
+ '({' + structure.map(key => key === '__proto__' ? '__proto_:r()' : validName.test(key) ? key + ':r()' : ('[' + JSON.stringify(key) + ']:r()')).join(',') + '})}'))(read);
502
+ } catch(error) {
503
+ // in CF workers, the new Function call could begin to fail at any point in time
504
+ inlineObjectReadThreshold = Infinity; // disable going forward
505
+ return readObject(); // recursively try again
506
+ }
507
507
  if (structure.highByte === 0)
508
508
  structure.read = createSecondByteReader(firstId, structure.read);
509
- return readObject() // second byte is already read, if there is one so immediately read object
509
+ return optimizedReadObject() // second byte is already read, if there is one so immediately read object
510
510
  }
511
511
  let object = {};
512
512
  for (let i = 0, l = structure.length; i < l; i++) {