From a6fb55c4056d1c4038fd9cdc2294514e5e9e1589 Mon Sep 17 00:00:00 2001
From: Pranav K <prkrishn@hotmail.com>
Date: Mon, 16 Sep 2019 16:48:24 -0700
Subject: [PATCH] Build incrementalism for npmpropj files (#14032)

* Build incrementalism for npmpropj files

* Ensure missing js output files results in rebuild
* Make the _Pack target incremental
* Reduce build spew
---
 eng/targets/Npm.Common.targets                |  38 +++++++++++++-----
 ...osoft.AspNetCore.Components.Web.JS.npmproj |   5 +++
 .../Web.JS/dist/Release/blazor.server.js      | Bin 210558 -> 213871 bytes
 .../signalr-protocol-msgpack.npmproj          |   4 ++
 .../clients/ts/signalr/signalr.npmproj        |   5 +++
 5 files changed, 43 insertions(+), 9 deletions(-)

diff --git a/eng/targets/Npm.Common.targets b/eng/targets/Npm.Common.targets
index 062a9d3a8f7..7695ed7039d 100644
--- a/eng/targets/Npm.Common.targets
+++ b/eng/targets/Npm.Common.targets
@@ -20,16 +20,20 @@
   </PropertyGroup>
 
   <ItemGroup>
-    <TSFiles Include="$(MSBuildProjectDirectory)\*\*.ts" />
-    <TSFiles Include="$(MSBuildProjectDirectory)\package.json" />
-    <TSFiles Include="$(MSBuildProjectDirectory)\*.npmproj" />
+    <TSFiles Include="src\**\*.ts" />
+    <TSFiles Include="test\**\*.ts" />
+    <TSFiles Include="package.json" />
+    <TSFiles Include="*.npmproj" />
+
+    <BuildOutputFiles Include="$(BaseIntermediateOutputPath)\build-sentinel" />
+    <BuildOutputFiles Include="dist\**\*.js" />
   </ItemGroup>
 
   <Target Name="_CheckForInvalidConfiguration">
     <Error Text="Missing expected property: PackageId" Condition="'$(IsPackable)' != 'false' and '$(PackageId)' == ''" />
 
-    <Exec ContinueOnError="true" Command="node -v">
-       <Output TaskParameter="ExitCode" PropertyName="ErrorCode"/>
+    <Exec ContinueOnError="true" Command="node -v" StandardOutputImportance="Low">
+      <Output TaskParameter="ExitCode" PropertyName="ErrorCode"/>
     </Exec>
 
     <Error Text="Building *.npmproj but NodeJS was not detected on path. Ensure NodeJS is on path or disable building NodeJS projects with /p:BuildNodeJs=false. Skipping NodeJS projects will also skip managed projects depending on them, including Components, Mvc and Analysers." Condition="'$(ErrorCode)' != '0'"/>
@@ -53,12 +57,25 @@
     <CallTarget Targets="_Pack" Condition="'$(PackOnBuild)' == 'true'" />
   </Target>
 
+  <Target Name="GetBuildInputCacheFile">
+    <Hash ItemsToHash="@(TSFiles)">
+      <Output TaskParameter="HashResult" PropertyName="_TSFileHash" />
+    </Hash>
+
+    <WriteLinesToFile
+      Lines="$(_TSFileHash)"
+      File="$(BaseIntermediateOutputPath)tsfiles.cache"
+      Overwrite="True"
+      WriteOnlyWhenDifferent="True" />
+  </Target>
+
   <Target Name="_Build"
     Condition="'$(IsBuildable)' != 'false'"
-    Inputs="@(TSFiles)"
-    Outputs="$(BaseIntermediateOutputPath)\build-sentinel" >
+    DependsOnTargets="GetBuildInputCacheFile"
+    Inputs="@(TSFiles);$(BaseIntermediateOutputPath)tsfiles.cache"
+    Outputs="@(BuildOutputFiles)">
     <Yarn Command="$(NpmBuildArgs)" StandardOutputImportance="High" StandardErrorImportance="High" />
-    <WriteLinesToFile Overwrite="true" File="$(BaseIntermediateOutputPath)\build-sentinel" />
+    <WriteLinesToFile Overwrite="true" File="$(BaseIntermediateOutputPath)build-sentinel" />
   </Target>
 
   <PropertyGroup>
@@ -73,7 +90,10 @@
     </PackDependsOn>
   </PropertyGroup>
 
-  <Target Name="_Pack" Condition="'$(IsPackable)' == 'true'" >
+  <Target Name="_Pack" Condition="'$(IsPackable)' == 'true'"
+      Inputs="@(TSFiles)"
+      Outputs="$(PackageOutputPath)\$(PackageFileName)">
+
     <PropertyGroup>
       <_PackageTargetPath>$(MSBuildProjectDirectory)\$(PackageFileName)</_PackageTargetPath>
     </PropertyGroup>
diff --git a/src/Components/Web.JS/Microsoft.AspNetCore.Components.Web.JS.npmproj b/src/Components/Web.JS/Microsoft.AspNetCore.Components.Web.JS.npmproj
index 8e0a17ece09..cb890a62b87 100644
--- a/src/Components/Web.JS/Microsoft.AspNetCore.Components.Web.JS.npmproj
+++ b/src/Components/Web.JS/Microsoft.AspNetCore.Components.Web.JS.npmproj
@@ -6,6 +6,11 @@
     <IsPackable>false</IsPackable>
   </PropertyGroup>
 
+  <ItemGroup>
+    <BuildOutputFiles Include="dist\release\blazor.server.js" />
+    <BuildOutputFiles Include="dist\release\blazor.webassembly.js" />
+  </ItemGroup>
+
   <ItemGroup>
     <ProjectReference
       Include="..\..\SignalR\clients\ts\signalr\signalr.npmproj"
diff --git a/src/Components/Web.JS/dist/Release/blazor.server.js b/src/Components/Web.JS/dist/Release/blazor.server.js
index 3d73bad3e0e1e2f84b9b4ded620fadb212c7b1de..79e87de6695d06841cc2032f0bb3351456d7c1fd 100644
GIT binary patch
delta 6657
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
YADhdQOzt_PdDnq#)7XJ*^M#E60h0+wa{vGU

delta 5454
zcmbVQdsq}#mj7<I8Wok7JmuL!(*<SOJml3hh&17$0@5gP5Vg9yfQF_EyQ&q0HV_|~
zm~0Fjol0ViXfoe^>myNnvSjiSlgZ@en#355S&f?AnZ#8w*)Nls?Bubhs+z~l_hrA`
z{pZ|s?>%+yz32SyIp@~hU2}iDJ?BJhgjDa<gwM*!rf9p_Z7_~>dNr{GmVF%!i{f&L
z7k;s@lQ`k+g_)7O+0AW9x^Lx*N>S{p=QepcK{W9YoDvhsGh3WuTbYM*aBk7bx&(8w
zk>;T|C6Dm1Ii)mSFmp^B$2vHVU=sBDT3b737nu&OM=%JKbfc3*pbmi(18OT3Q3FQ{
z@KZ`O>WEIQE#Mi}#(P8qMSBeLPMi!&`6!xWL}w?*dqut8z>o8|Tws*KeGI3T+>h!-
zR`d$R<}9O8uOIIgWgCqpZbcu<*ieBgMUOKLT(^iF4<~f-Zh`CTo8;vwiYgr6%;d*`
zZ&Xbb<-_lJSg%hccG#v*vy7|G&=n@>GRAxIM;SUsH+j1MNg>?SFGO{7(-z<3WbE=1
zP?pv`gGH0jE&elUG$CzJ`gIICF&PZhd~i`oX)c3E6}p)=bYGdviJnp%DljaL({7)K
z6TKdHQVY6#p|swnnF*g!dFcDd^lPf(F8FKuS228FpMf{``Y6h@ne`+&=vKr{CPnv1
z1J7$>{PFZY65h%<3}Ty8pgG(c=R=om_TPPW8X-2R)J5j|L&UIY_jH=Gxg2^6{5k9J
zd<QCZOe!s>t#p~R>Cc+jFxpLfs9t#`r&(5MYK6<$3306q%QyuYE>1+9L8NsqzO|L}
zp#54QJjYBrVO5TvY=Q0^JL!TeIYvCm+$9#I^-C@i2T-{i3Gd&XdyQbHJzq~8{=xhw
z2-ysSJqw|xa2D?M7XyTXXBuKr;;F*Nv<{{WhApvZ_iB@*^qAaam|hfyBTpAagR!Uv
zCGRgvQ2Iv#s$Ayz#O5C`4-g#Imh2^V|Kla|<<9Y?fBF06jDGDhy}YCJG8rz_WrN6H
zDN92Bhq436@3+X~FI#F+O;Gt|qIJ?N1TRkt7R+puu^BHh+mzW%dm*wSIowXsF2%<^
zrhs!@P+d`ow|Zv<73yW2?#;ZN6`j1h%F#?a;dI4P;vK3?BrZs*jKUjP#&>qPI9Z^C
zV>pk8_msF`W#xiI7h_kaI0IGaV%!K`1IIW;u2aUl6KblXa=a9S%I$527O&eb>o9Os
zuS->fEbZV>HJ2o!l*?sf?Hxjs7tU9v%n)cNZruNUWtaxtg@=QCDi%QX@-QMm^YX>;
zQ$-B?dU*_nh11I)fTt@XV9knXc&;KCd@I5U>mOXvpvB2Q)@G&hj8*h-Y-bhjtkBL1
zT+-A-6{@g;ZFLF3CMU)Z4<q(;ab~lbhxWSc6sN(1D7T@44pZRcI;Xp}aOw!0sf$97
zT&^2Mk36|5OmS@e!#Gr6Z9w{{^)2mY0|x`mv9NyMJ&3Af*T+%if33lwMVT)eFCcy8
zJ}c6YwLVnz=-R6?3S3P^NdKv+8tFGpJCOFQ+ePd{&AkEO9BiIVvFg1Dc-W?1ya}5N
zRIh-+8Qmbj`R0?j!jAQaP?3Iv463I#q=9?GB87W^u#mVh8TrzUT_|yCV=D5WY-~ZZ
zm#}%rf9lY|6YMgS8z_&2|6~(zCe*fcLblsxlU>vwg>?Pv@epEPfE-&Cj}q0$+o8q&
z=ropYV&Pz3G=w<hn^L+l8Y&z;D0s#Ztt_%`nuDq5;CfjccDrrM;0f+UWg^z^YFUj2
z_P^d5qM64tRTKF2nc%i78vf#3f{0<-^@NvRF==D{eEYv^XO4qFdex*&gstv;94TYn
zcFrY_lt?FNG6Q~c$026o_%@_F`3$5d`S9os<|ZSZ#bwi(7^>uO<@UN<&2)n__^l=p
z{>mH32Dou-KIC`ZoL-JGtQ_>4%pq3ftdr5KN{x(<Y-%T@Lyd!VlW~xAD}fHo-BwZs
zgWW%o4h%tQ1w74;-`cvL_bKCIZJdkhRp4nXbha2;;p?6#(hA28=;o+VvdWF|(F%E6
z8MI>P4jue*YZ$Tm_iv3L#0n>S>(Tc4{fRT=NQ;T&;r^6>TvuNZ+TpYQc%)DE#cElz
z05JnHDz5ewBMRbtsgX|1nrt9z$~mmBPp89>)acu-oFh>IeVq*Y#c;wr!(Y5DAFUvt
zaK-=YgaRXadIYA+E3_HVH*`K-&`e>Sz?-5$)4xPHN(xdHh2H+c$+N)K{sJvOafXtC
zb$G7if%w3A(EEY&OwGy4d3ZceLL84l&n;r!EK&Tys2N9Y460opdmws7E7L+5czEuC
z^7sjPtP<qZ_4gm7LEd({5RHnJk6W&56d{k-?ZzNe!X`Q0SVAC7`4+5o>?J>^A`1R>
zdl-6SY`ac5Ybo;99dhgm-JyqbJG@gJ0UbMy2#%+AUROpJ!tkyjQU}L&6$I=w^TB5V
z+_?uY2DrC=X$o+u58XyCY<DK9SAlGq0_0j1$h-HvPwLUZdgy;_F0sIXSzhsHK>6tb
zxsIuWSOjG-)DQk4)5<7?m6GyVlMHCaj;Vf`hu<P_p1wY{+sN4(c~1xDp;&l#C>!<<
z&4IXsIz0NjLza1h&qw(XC%r7gyE~<jLTw~uf$Zoy$imH(9x{R-GEn*&)azs+zKe64
zCxRx`>-k$}S@-6n@FROqDJN4wZ9!Wmz>a;9q}9KF-~EKFP))LOib+bxO)?kUPmPil
z6J}ZYzc7pc#{&rjmyJJ|9IT$YhIep!J*(Hl;K4+29gM@-hYm7$i(fogiE)t(PnYx0
zj|Y;W9io+kei!JkI~=8AlfxJj<$vt(!{d_XXHSx4>ekyQx4v?<S&nsdjnYi|LEeH|
zkKJqbsO6VwwfSCyZi|4mSB=bZn-R_e@AcR@9p#gAY^7|5IM{w9MMVOfJ`#@HM@MW(
zPaI8z)ko!!)p;}~eKn?GkwN!bd3y&Znpfl9nbMt@z%uW|(L(&_*3p#k8s(#Md0nfr
zuDJ$u$BMBAW{({w%h2izrH%8nvq(D>9bXb*WtKVJtfz;bh>sk`M-_@kj^|=*ym9=n
zoM(1CKaT|2vD7S=Yad#KlW)w2y7bxpmru+kWD~q|vR2g&MW^N|$``}dQ*x^Op{#A_
zQV^v2>y(byf6I@hfx45BIBgJV_b+-ul-D@?&#AH}-X1xOwByBh0tzv+r%WV(_McAx
zu<N&LFx>GbIqClCw<}3Gl)Y4lblXcMI8w4Y0zP_a822_{UhIG7<zfvEe*S9e?1`X*
zDf~4W2gyh{ta|PFsS~qLXOnIyKD{1ycHlIx#D6tO8%Aj@J~d#lDFR%hc|k1ItX4>w
z*|4cJ9^M;G|G%E&-0vcx`OLkzlV{IlBE5K~7?+KB-H7~nNwER>*Is{e%0|RDitrAg
zTQn>MD;`Rfo-WePgm2#HSC^0DX)KUwf%eiax`l3|yJ*LFR&9sh{H`CDSn}qHRMzZf
z*v+gHv#E<~@UU)t?s-I^udk_@7R*N4Yi1E}xQ$Su$ji7mcdOV|VsM$gO@cq`_gNZL
zV;D_<?Qg$>+{$+>MDPzGMK@e}cZ;Uf04MiFz}VSRc>3%-_|1DEIPvCt1De{Y6G=FD
z`fRkOTN(6^ofYKoZRd=ra`62m@SnS?ayWYG{bHnFzh946-|_)HF+TKxCDz*HZqCr9
z$xli7nXEw9pi9$bl*3ma#D=NUI4j?257xTn5cgp^YODCrGNI@AhgCDmn>?roLeHjy
z{(J~d<(*GPv9;$vK)&O}7?^W0(!chjn5j2J2d7&iVCVvcBClNd80pZ*Ymnajco^vq
zWvLKyaS8l*Dh+}zdGYcNTml@A_~d)CNiC@|FIQ+9X$bx_hBU(7%X>+qpZfGr;O4-=
z=IOI0-G_*Vj4Lmo$c-yi8q%ngSzx*LNz_(+lIBwMT5R$ty4tL37kIahhS1B=u>ATQ
zQZ4Pz(x#y8eAiErtzf*7knc3F#e3exdISz1CniskGvH>ECnG}*c&yopCP6$@TWf0q
zqAcvXu^P*WD>t%{hI}ql%jek?&nPd2@h69i7r4N)!NIk#UYCebO)VUTKi@^xN^GAd
z-f#K0S}j>4F{9*AI(?tHSM;!Uu27CY2uVAKFD9F}Rq0z~j&{0R_(D5u{9-|*EL4SE
zPp9&pqqndgH%<+H5q_^c)regzDrn^mr)W?kn%(0Ro%sGzhROmR+ReMwWowY}DbM^0
z)wtJ#W=eI_wR0f)%OrGP!Iv&_AN=E&Ey&Nixd3VU%_5|j>@mbohwV3$$r||e&2Ah^
z_>V89HK1uB=~g5p-daE!z;x?drc$k?ydD?+EExA~8Dqysm&jq=I;HCA>)Q$&ZYOG%
z(~x{?KJ2}nPFBI_Z3DF535D-&$AENaE+pPb!Y9DeJLzzAEEIb0$SLyiJDJcqJqRw`
zNhW3R?Hwb&N7BZ!NCh;FQRuLpV|qm4v9U~q_h(}?;v(p-0dbLYcQIKGj=QO|dVK2N
zj#YlRJ134*Ny9-zBvm63bI8UZ(lN3*id>r+T4l~L7UY`7%ZQ|ok(MO#1|b$HT}OsU
z?Z~S-QZ@~{B#rD=8=drA8nGcCY9K4HS#Ka~)h0&z&_I?VA4ZWrZ1zxO8#ef9gJer5
zjVd26T}mg9An(W^c5I4ik|6ytLzzZi{?NFH#7J8VWUf>|k$KWxTG5K5BC-66A<5G3
z7m)&mZ9?gF3<)&J(q)EJkXk8uF*&9-Y0{q-lLwLa8Oc9j6O>5~s7;P^HIq1zpOa1U
zq-|NsH1eO|&>ynN4Q$@ZA?L99)e<s{&E;HDAa&)EHkChwO>Z9g7qv+l>C7ibUqHjg
zjFFEt*xvby)Xzk_Fa3@*Oz*%ygQE2PHzZaX9wqaox4t8L&>4;YMV1C*`}izPA-ShY
z7NUI8su~hGa(A{Sc{+X`8luSx>!9Ts$~VPNt3xyw&`%@jVVXC!=%}wEG`SkwOIozX
if?Zd%#wxpUG)CjX?xI)?8%!(@?x8dzdnoPonEwWcQKH`f

diff --git a/src/SignalR/clients/ts/signalr-protocol-msgpack/signalr-protocol-msgpack.npmproj b/src/SignalR/clients/ts/signalr-protocol-msgpack/signalr-protocol-msgpack.npmproj
index 72978faa2de..1a2b2deac3d 100644
--- a/src/SignalR/clients/ts/signalr-protocol-msgpack/signalr-protocol-msgpack.npmproj
+++ b/src/SignalR/clients/ts/signalr-protocol-msgpack/signalr-protocol-msgpack.npmproj
@@ -13,5 +13,9 @@
     <ProjectReference Include="..\signalr\signalr.npmproj" />
   </ItemGroup>
 
+  <ItemGroup>
+    <BuildOutputFiles Include="dist\browser\signalr-protocol-msgpack.js" />
+  </ItemGroup>
+
   <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), Directory.Build.targets))\Directory.Build.targets" />
 </Project>
diff --git a/src/SignalR/clients/ts/signalr/signalr.npmproj b/src/SignalR/clients/ts/signalr/signalr.npmproj
index e6a6c1d9930..dbd62e31c64 100644
--- a/src/SignalR/clients/ts/signalr/signalr.npmproj
+++ b/src/SignalR/clients/ts/signalr/signalr.npmproj
@@ -8,5 +8,10 @@
     <IsShippingPackage>true</IsShippingPackage>
   </PropertyGroup>
 
+  <ItemGroup>
+    <BuildOutputFiles Include="dist\browser\signalr.js" />
+    <BuildOutputFiles Include="dist\webworker\signalr.js" />
+  </ItemGroup>
+
   <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), Directory.Build.targets))\Directory.Build.targets" />
 </Project>
-- 
GitLab