From a1913e4b62984542baf91ee396e46e84f601dbea Mon Sep 17 00:00:00 2001 From: Vincenzo Chianese <vincenz.chianese@icloud.com> Date: Tue, 17 Sep 2019 16:12:03 +0200 Subject: [PATCH] fix: do not remove shared required properties in allOf selection (#524) * fix: do not remove shared required properties * test: add test --- dist/bundle.umd.min.js | Bin 222213 -> 222264 bytes dist/index.esm.js | Bin 49183 -> 49258 bytes dist/index.js | Bin 49385 -> 49460 bytes dist/index.umd.js | Bin 76249 -> 76324 bytes dist/index.umd.min.js | Bin 28898 -> 28949 bytes dist/index.umd.min.js.map | Bin 113080 -> 113202 bytes src/core/run.js | 2 +- .../required/do-not-delete-shared-props.json | 69 ++++++++++++++++++ 8 files changed, 70 insertions(+), 1 deletion(-) create mode 100644 tests/schema/core/required/do-not-delete-shared-props.json diff --git a/dist/bundle.umd.min.js b/dist/bundle.umd.min.js index 848748539616e0d5c24954896e58387f6a865432..c4d89ff3a7ee3bb434b35695297d2062d700f8f2 100644 GIT binary patch delta 62 zcmZoY!Mo!GZ$k@X3)2>6_88X8oRZX{=?g=dg(VbA^omjoOEZg7Q}i<Pl5<K^Qj0ZG SHEX9gE@c$nE*``DjvWBS_ZB<= delta 25 hcmdmSg17YqZ$k@X3)2>6_L#|yHp1I|W0+sF0|0^{2}J+^ diff --git a/dist/index.esm.js b/dist/index.esm.js index 35ead862e388d8573bf9e467f13e834703ec3566..8aab5fe752f920ca0742812513a3e717930ea9af 100644 GIT binary patch delta 95 zcmbQ=!2GI#dBfxN9+^2MsYM!TrFqFEnfZAN8bzsvrI|&kDVhq^3Pq_UrA2uPifNe@ lsVRCe8NJNB<ebu!)MA8MYlYg$2a81}CunkS{=Z&9001o<C3gS- delta 22 ecmaFWz&yW!dBfxNlV2JMPEOF|-t4tOK>z@IlL?go diff --git a/dist/index.js b/dist/index.js index b64016d42e47cf6e4775659ba0e60e93fbed9534..8d05375d63a343539b2121754898e26149998a1a 100644 GIT binary patch delta 91 zcmaFa$h@VAdBf@r9+^2MsYM!TrFqFEnfZAN8bzsvrI|&kDVhq^3Pq_UrA2uPifNe@ hsVRCe8NJNB<ebu!)MA8MYlYg$YiyM_pWYxR005AsBfkIu delta 22 ecmdne#Qd_6dBf@rlcyUCPCj7EzgcXfoB#lLbqQwx diff --git a/dist/index.umd.js b/dist/index.umd.js index 17023b7c16afeabf1cfdbef77f5a31bb8849dbb8..149b6ef75ff23c141d7f6662e404953cd9e39e99 100644 GIT binary patch delta 91 zcmcb4nPtfpmWC~ijS`-jIVGt@8fm3@$t9Wjc?udusfDGPMX4#83e^flsU@XFc?ybY gnH8xidN3Ki%)I2B(v;L<gj#EbTFveC5{yxT0B0~E@c;k- delta 29 lcmZ2-h2`dDmWC~ijS`bHZwgL+H&1YKzB|YEZxW1pf&k803}*lU diff --git a/dist/index.umd.min.js b/dist/index.umd.min.js index bfbb5052724591f8bac839b191f89f7bdb6927c1..ea5aa55bdb7ffe8b9724f3931df524e9d9a0fcec 100644 GIT binary patch delta 43 zcmaF#ka6lG#tlz0CNmpKNGg`-6{QxIW)`KU=w;?5=ai<T7Hgzx)@m+(l)(W2jqMRD delta 14 WcmbRGi1E=w#tlz0Hj8KeV+Q~`hzD^1 diff --git a/dist/index.umd.min.js.map b/dist/index.umd.min.js.map index ffd4bef441cfa98be8a9e9378254f3a4b68aefd7..cd29ca7a5e9c53f9c491b3f1538f9f60bb7d465d 100644 GIT binary patch delta 1031 zcmdn-nQhY-wuUW?jZ)s3IVGt@8bzsvrI|&kDGIiB3W{l&6{#tDFd@CnyyTqHl+<Fl zB27)bwEQC1#N-T(w9>rflFa-(1&!>~%E^r$qT3fqG5%6yhichA!-nxziM^?lPP&t$ zqrZuhPN<_}qM5gjtD~c@xwlTRqhqi(gwprc@pg0!ukzCgbaV^^$%Gnt>x4QwTe?nf z+{jqQQSPqe>*(mKKmGqk#!!w-Cy*K8S<_=SF)D}}gy^_CIvO~Gj8AgZ33ha@a4MNT zaTDWO4l|Ist^ozp-8M4@@n%Qq_=Al1c61KQn!a>1qlrm+0LY}^tOyY0n;oH(>gbs1 zWbO;%`kVRc<T^RJRyezW^aVSDtO+fPoW5`&qv&*{EsPQz*-<*dj_v`b+nu&BnlZ{) z_=1!KRygVSJ32>Hf?XM?6YA(1l;J;p%2q}V4sEc>zWURTY-Ln7hwuWcoWR<2+#TH^ zn%qN7BXv9-9evFrbs`-d{WJVP?g=dR0a3n2)8)1?n%9>&gTg7;5FDN$xo}5!OD6-c zS)L`%I@wN+j*$r2P)GMP7aey;H~&ho5|At19bLUjz=j5v`sjE&x|=#dBt0wKbuyhC z9m6Z!K~{oH2Su6@NT+iESV}3x*h$CJ(K*Bj>`h-|5asOW2vYB_<LT%fVl@5RHbx_j zvT#VG`h$W#($TfdsW2R*C=lctM~E}rGn}-i2W)556E+9Mk!t|hm|#$%@Xeh*aXX_5 zW7hO-+ZlCr&75^y9i6?LLE#b!jy3NrNa*M|gCf4%9b{WDh!c=GU0?^JpS`gwC}sF( zI)g&l(*Wd7M}K1%kQ=;nopt;j-SeFDopih%T^+r_O0s;R@$Ks9oRm3z?hZz&dgDmA zn0t~@Bv_rkH#lX7R``R=@-0sUrPv%NL$F1mC0-yM{s>8TN9PQuEKs1ihk(<PXBpIh z3~(w$H^9;pYyenN(h($!X+nn2bpM@<N;26|I^K@X{@yyCjxfWsA^9%2YI^TZMrnc4 PD6pGzoj~Ces#FUA9(OX% delta 853 zcmdn=g>A=YwuUW?jZ%~O4vA0KlVaqW{y>V6W&2Yp#&3$-pV=^8E8(y5)5&ylbPP1| z)(LfVPMZFEBV!pysk@G^qoc3o^vX?)p&aQ>I<Ah6;ThAfZDLdqtqjp|cXTvx)(LfV zOmfr-c66?ADw@u{nQ<+LiMNioqiaCk^aGn2gLpHebo?D119iL|ox?Jw%Wq*ck<<1E znG~E60it{}BXm+79W$LweL-A*lj((97)2OMrnhZj)Z@sE(g}8S4=~=oXA7elql}p^ z$kxCzCmnxB=ZJE!ivo2*9bJR;{igG6W7OcV0Gr}#Io)m>qp~@K7g*s0)~4g`=nm23 z9%3A+<LT(=YZ9pw>FDUM57re}>;rOwufg;g+ZfFmi>6=L#wf~B3D)dcH2v*1Mrn?6 zFfXudy1;fuQEv#(v&<bFdf^rBApLM-KuVnhz)~TGPCA~B&LIY1C;J+LC}%%MkaB+= zPe<<%gXsm^8I3eb!gT^cp#=`INJrN)r~Gh`qCgk056VDBx@S09Oh2`qQBT+u6t=Db zU}J)Hyd52Vv!`?KU{qnum~OCxQCGyoS;y7U*~=N^$4GE!duL29+`%Zpm_EI02cuuT zp(`l<{4<?Frh8U`T;=F*=mN6QJJ(sq-_bqKIoAmkosQmMB^kb;*bD~Q=$w=ejt$Rr zP;59t#WFxHbo4ZggsXE;GKd80we;3WcXD(LtpG>AZ)u`VeW;^zj#Cxb_Rtb9kQRT0 zth=LghEo<O+}uMP!6uYIO~?oUxe#OmvH_N!U;_}6m<H&3gVI`HnLj9%hgnR&wv$nm vF?0Hxos3dC6^S50FN+9}RiPyjp!DGxq~q!6UglIB1rqekbppjss8THeg`oW2 diff --git a/src/core/run.js b/src/core/run.js index 430f8dc4..23ac43e8 100644 --- a/src/core/run.js +++ b/src/core/run.js @@ -169,7 +169,7 @@ function run(refs, schema, container) { if (sub.oneOf) { mix.forEach(omit => { if (omit !== fixed && omit.required) { - omit.required.forEach(key => { + omit.required.filter(required => !fixed.required.includes(required)).forEach(function (key) { delete copy.properties[key]; }); } diff --git a/tests/schema/core/required/do-not-delete-shared-props.json b/tests/schema/core/required/do-not-delete-shared-props.json new file mode 100644 index 00000000..d9c80973 --- /dev/null +++ b/tests/schema/core/required/do-not-delete-shared-props.json @@ -0,0 +1,69 @@ +[ + { + "description": "when allOf is provided and all the schemas are sharing some required properties", + "tests": [ + { + "description": "should not remove the shared properties", + "schema": { + "type": "object", + "oneOf": [ + { + "$ref": "#/components/A" + }, + { + "$ref": "#/components/B" + } + ], + "components": { + "A": { + "required": [ + "name", + "resourceType" + ], + "type": "object", + "properties": { + "resourceType": { + "type": "string" + }, + "name": { + "type": "string" + }, + "color": { + "type": "string" + }, + "length": { + "type": "integer" + } + } + }, + "B": { + "required": [ + "name", + "resourceType" + ], + "type": "object", + "properties": { + "resourceType": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "age": { + "type": "integer" + } + } + } + } + }, + "hasProps": [ + "name", + "resourceType" + ] + } + ] + } +] -- GitLab