From 21e5a87fabf277ebf637a7bd13d7bebd31494c9a Mon Sep 17 00:00:00 2001 From: dan Date: Sat, 27 Apr 2024 07:54:47 +0100 Subject: [PATCH] Patch lexicon for perf (#3733) --- patches/@atproto+lexicon+0.4.0.patch | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 patches/@atproto+lexicon+0.4.0.patch diff --git a/patches/@atproto+lexicon+0.4.0.patch b/patches/@atproto+lexicon+0.4.0.patch new file mode 100644 index 00000000..4643db32 --- /dev/null +++ b/patches/@atproto+lexicon+0.4.0.patch @@ -0,0 +1,28 @@ +diff --git a/node_modules/@atproto/lexicon/dist/validators/complex.js b/node_modules/@atproto/lexicon/dist/validators/complex.js +index 32d7798..9d688b7 100644 +--- a/node_modules/@atproto/lexicon/dist/validators/complex.js ++++ b/node_modules/@atproto/lexicon/dist/validators/complex.js +@@ -113,7 +113,22 @@ function object(lexicons, path, def, value) { + if (value[key] === null && nullableProps.has(key)) { + continue; + } +- const propDef = def.properties[key]; ++ const propDef = def.properties[key] ++ if (typeof value[key] === 'undefined' && !requiredProps.has(key)) { ++ // Fast path for non-required undefined props. ++ if ( ++ propDef.type === 'integer' || ++ propDef.type === 'boolean' || ++ propDef.type === 'string' ++ ) { ++ if (typeof propDef.default === 'undefined') { ++ continue ++ } ++ } else { ++ // Other types have no defaults. ++ continue ++ } ++ } + const propPath = `${path}/${key}`; + const validated = (0, util_1.validateOneOf)(lexicons, propPath, propDef, value[key]); + const propValue = validated.success ? validated.value : value[key];