From 57c489591cf1e5b8ef4f2591848b54448ff19b46 Mon Sep 17 00:00:00 2001 From: Ferit Date: Sun, 11 Oct 2026 18:05:36 +0300 Subject: [PATCH] fix: delete properties when reviver returns undefined --- cjs/index.js | 14 +++++++++++--- es.js | 2 +- esm.js | 2 +- esm/index.js | 14 +++++++++++--- index.js | 10 +++++++--- min.js | 2 +- test/index.js | 21 +++++++++++++++++++++ 7 files changed, 53 insertions(+), 12 deletions(-) diff --git a/cjs/index.js b/cjs/index.js index a4833a5..74aafd2 100644 --- a/cjs/index.js +++ b/cjs/index.js @@ -22,6 +22,14 @@ const Primitives = (_, value) => ( typeof value === primitive ? new Primitive(value) : value ); +const reviveProperty = (output, key, value, reviver) => { + const revived = reviver.call(output, key, value); + if (revived === void 0) + delete output[key]; + else + output[key] = revived; +}; + const resolver = (input, lazy, parsed, $) => output => { for (let ke = keys(output), {length} = ke, y = 0; y < length; y++) { const k = ke[y]; @@ -34,10 +42,10 @@ const resolver = (input, lazy, parsed, $) => output => { lazy.push({ o: output, k, r: tmp }); } else - output[k] = $.call(output, k, tmp); + reviveProperty(output, k, tmp, $); } else if (output[k] !== ignore) - output[k] = $.call(output, k, value); + reviveProperty(output, k, value, $); } return output; }; @@ -69,7 +77,7 @@ const parse = (text, reviver) => { while (i < lazy.length) { // it could be a lazy.shift() but that's costly const {o, k, r} = lazy[i++]; - o[k] = $.call(o, k, revive(r)); + reviveProperty(o, k, revive(r), $); } } diff --git a/es.js b/es.js index 3e4d187..17689a9 100644 --- a/es.js +++ b/es.js @@ -1 +1 @@ -self.Flatted=function(t){"use strict";const{parse:e,stringify:n}=JSON,{keys:r}=Object,o=String,s="string",c={},l="object",f=(t,e)=>e,i=t=>t instanceof o?o(t):t,a=(t,e)=>typeof e===s?new o(e):e,u=(t,e,n)=>{const r=o(e.push(n)-1);return t.set(n,r),r},p=(t,n)=>{const s=e(t,a).map(i),u=n||f;let p=s[0];if(typeof p===l&&p){const t=[],e=((t,e,n,s)=>f=>{for(let i=r(f),{length:a}=i,u=0;u{const o=e&&typeof e===l?(t,n)=>""===t||-1p(n(t)),t.parse=p,t.stringify=g,t.toJSON=t=>e(g(t)),t}({}); +self.Flatted=function(t){"use strict";const{parse:e,stringify:n}=JSON,{keys:r}=Object,o=String,s="string",c={},i="object",f=(t,e)=>e,l=t=>t instanceof o?o(t):t,a=(t,e)=>typeof e===s?new o(e):e,u=(t,e,n,r)=>{const o=r.call(t,e,n);void 0===o?delete t[e]:t[e]=o},p=(t,e,n)=>{const r=o(e.push(n)-1);return t.set(n,r),r},g=(t,n)=>{const s=e(t,a).map(l),p=n||f;let g=s[0];if(typeof g===i&&g){const t=[],e=((t,e,n,s)=>f=>{for(let l=r(f),{length:a}=l,p=0;p{const o=e&&typeof e===i?(t,n)=>""===t||-1g(n(t)),t.parse=g,t.stringify=h,t.toJSON=t=>e(h(t)),t}({}); diff --git a/esm.js b/esm.js index 2563a41..b6a65e8 100644 --- a/esm.js +++ b/esm.js @@ -1 +1 @@ -const{parse:t,stringify:e}=JSON,{keys:n}=Object,o=String,r="string",s={},c="object",l=(t,e)=>e,f=t=>t instanceof o?o(t):t,i=(t,e)=>typeof e===r?new o(e):e,a=(t,e,n)=>{const r=o(e.push(n)-1);return t.set(n,r),r},u=(e,r)=>{const a=t(e,i).map(f),u=r||l;let p=a[0];if(typeof p===c&&p){const t=[],e=((t,e,r,l)=>f=>{for(let i=n(f),{length:a}=i,u=0;u{const s=n&&typeof n===c?(t,e)=>""===t||-1t(p(e)),g=t=>u(e(t));export{g as fromJSON,u as parse,p as stringify,h as toJSON}; +const{parse:t,stringify:e}=JSON,{keys:n}=Object,o=String,r="string",s={},c="object",l=(t,e)=>e,f=t=>t instanceof o?o(t):t,i=(t,e)=>typeof e===r?new o(e):e,a=(t,e,n,o)=>{const r=o.call(t,e,n);void 0===r?delete t[e]:t[e]=r},u=(t,e,n)=>{const r=o(e.push(n)-1);return t.set(n,r),r},p=(e,r)=>{const u=t(e,i).map(f),p=r||l;let h=u[0];if(typeof h===c&&h){const t=[],e=((t,e,r,l)=>f=>{for(let i=n(f),{length:u}=i,p=0;p{const s=n&&typeof n===c?(t,e)=>""===t||-1t(h(e)),y=t=>p(e(t));export{y as fromJSON,p as parse,h as stringify,g as toJSON}; diff --git a/esm/index.js b/esm/index.js index eb2da2d..073b5f5 100644 --- a/esm/index.js +++ b/esm/index.js @@ -21,6 +21,14 @@ const Primitives = (_, value) => ( typeof value === primitive ? new Primitive(value) : value ); +const reviveProperty = (output, key, value, reviver) => { + const revived = reviver.call(output, key, value); + if (revived === void 0) + delete output[key]; + else + output[key] = revived; +}; + const resolver = (input, lazy, parsed, $) => output => { for (let ke = keys(output), {length} = ke, y = 0; y < length; y++) { const k = ke[y]; @@ -33,10 +41,10 @@ const resolver = (input, lazy, parsed, $) => output => { lazy.push({ o: output, k, r: tmp }); } else - output[k] = $.call(output, k, tmp); + reviveProperty(output, k, tmp, $); } else if (output[k] !== ignore) - output[k] = $.call(output, k, value); + reviveProperty(output, k, value, $); } return output; }; @@ -68,7 +76,7 @@ export const parse = (text, reviver) => { while (i < lazy.length) { // it could be a lazy.shift() but that's costly const {o, k, r} = lazy[i++]; - o[k] = $.call(o, k, revive(r)); + reviveProperty(o, k, revive(r), $); } } diff --git a/index.js b/index.js index 9386548..69064b6 100644 --- a/index.js +++ b/index.js @@ -32,6 +32,10 @@ self.Flatted = (function (exports) { var Primitives = function Primitives(_, value) { return _typeof(value) === primitive ? new Primitive(value) : value; }; + var reviveProperty = function reviveProperty(output, key, value, reviver) { + var revived = reviver.call(output, key, value); + if (revived === void 0) delete output[key];else output[key] = revived; + }; var resolver = function resolver(input, lazy, parsed, $) { return function (output) { for (var ke = keys(output), length = ke.length, y = 0; y < length; y++) { @@ -47,8 +51,8 @@ self.Flatted = (function (exports) { k: k, r: tmp }); - } else output[k] = $.call(output, k, tmp); - } else if (output[k] !== ignore) output[k] = $.call(output, k, value); + } else reviveProperty(output, k, tmp, $); + } else if (output[k] !== ignore) reviveProperty(output, k, value, $); } return output; }; @@ -80,7 +84,7 @@ self.Flatted = (function (exports) { o = _lazy$i.o, k = _lazy$i.k, r = _lazy$i.r; - o[k] = $.call(o, k, revive(r)); + reviveProperty(o, k, revive(r), $); } } return $.call({ diff --git a/min.js b/min.js index d3a97cb..d0d3ff1 100644 --- a/min.js +++ b/min.js @@ -1 +1 @@ -self.Flatted=function(n){"use strict";function t(n){return t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(n){return typeof n}:function(n){return n&&"function"==typeof Symbol&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},t(n)}var r=JSON.parse,e=JSON.stringify,o=Object.keys,u=String,f="string",i={},c="object",a=function(n,t){return t},l=function(n){return n instanceof u?u(n):n},s=function(n,r){return t(r)===f?new u(r):r},y=function(n,t,r){var e=u(t.push(r)-1);return n.set(r,e),e},p=function(n,e){var f=r(n,s).map(l),y=e||a,p=f[0];if(t(p)===c&&p){var v=[],S=function(n,r,e,f){return function(a){for(var l=o(a),s=l.length,y=0;y