From 720cae11416728e8747c4cd2c2141b1523e3722d Mon Sep 17 00:00:00 2001 From: donny-wong <141858744+donny-wong@users.noreply.github.com> Date: Thu, 15 Aug 2024 16:59:57 -0400 Subject: [PATCH 001/102] V2.5.0 changelog (#7182) * test * update changelog with new release v2.5.0 [ci skip] * removed unncesscary code [ci skip] --------- Co-authored-by: Donny Wong --- Changelog.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Changelog.md b/Changelog.md index 075de3e799..1576805ae4 100644 --- a/Changelog.md +++ b/Changelog.md @@ -4,6 +4,13 @@ ### 🚨 Breaking changes +### ✨ New features and improvements + +### 🐛 Bug fixes + +### 🔧 Internal changes + +## [v2.5.0] ### ✨ New features and improvements From 173bf78237eb377f03d7c0a549ee7aa36c29fac8 Mon Sep 17 00:00:00 2001 From: David Liu Date: Sat, 10 Aug 2024 22:06:34 -0400 Subject: [PATCH 002/102] Install Ruby 3.3 in Docker container --- .dockerfiles/Dockerfile | 19 +++++++++++++++---- .dockerfiles/entrypoint-dev-rails.sh | 7 ++++++- .github/workflows/test_ci.yml | 2 +- Changelog.md | 3 +++ Gemfile | 1 + Gemfile.lock | 6 ++++-- compose.yaml | 12 ++++++------ markus.control | 6 ------ markus_1.0_all.deb | Bin 2856 -> 2780 bytes 9 files changed, 36 insertions(+), 20 deletions(-) diff --git a/.dockerfiles/Dockerfile b/.dockerfiles/Dockerfile index 0c9e85dfd2..ec6483b142 100644 --- a/.dockerfiles/Dockerfile +++ b/.dockerfiles/Dockerfile @@ -2,6 +2,7 @@ FROM ubuntu:jammy AS base ARG NODE_MAJOR=20 ARG BUNDLER_VERSION='2.4.13' +ARG RUBY_VERSION='3.3.4' ARG USER=markus # Required in order to ensure bind-mounts are owned by the correct user inside the container @@ -20,10 +21,19 @@ RUN sh /tmp/setup_node.sh COPY markus_1.0_all.deb / # Install basic system dependencies -RUN apt-get update -qq && \ +RUN apt-get update && \ DEBIAN_FRONTEND=noninteractive apt-get install -yq --no-install-recommends /markus_1.0_all.deb && \ rm /tmp/setup_node.sh /markus_1.0_all.deb +# Install Ruby (we use ruby-install to configure the installed ruby version). +RUN DEBIAN_FRONTEND=noninteractive apt-get install -yq --no-install-recommends wget ca-certificates sudo && \ + wget https://github.com/postmodern/ruby-install/releases/download/v0.9.3/ruby-install-0.9.3.tar.gz && \ + tar -xzvf ruby-install-0.9.3.tar.gz && \ + cd ruby-install-0.9.3/ && \ + make install && \ + ruby-install --update && \ + ruby-install --system ruby $RUBY_VERSION + # Enable reading of PDF files with imagemagick RUN sed -ri 's/(rights=")none("\s+pattern="PDF")/\1read\2/' /etc/ImageMagick-6/policy.xml @@ -71,7 +81,8 @@ RUN apt-get update -qq && \ python3 \ python3-dev \ python3-venv \ - equivs + equivs \ + libjemalloc2 # pre-create mount-points for volumes and set ownership of these mountpoints RUN mkdir -p /bundle \ @@ -110,7 +121,7 @@ COPY --chown=${USER}:${USER} .dockerfiles/database.yml.postgresql /app/config/da COPY --chown=${USER}:${USER} .dockerfiles/git-ssh.rc /home/${USER}/.ssh/rc # Install bundler -RUN gem install bundler -v $BUNDLER_VERSION +RUN gem install bundler -v $BUNDLER_VERSION && bundle config set --local without 'development test offline production_test' USER $USER @@ -121,7 +132,7 @@ ENV RAILS_ENV=production ENV NODE_ENV=production # Install gems -RUN SECRET_KEY_BASE=1 bundle install --deployment --without development test offline production_test +RUN SECRET_KEY_BASE=1 bundle install --deployment # Precompile assets RUN SECRET_KEY_BASE=1 NO_SCHEMA_VALIDATE=true NO_INIT_SCHEDULER=true PGDATABASE=dummy bundle exec rails assets:precompile diff --git a/.dockerfiles/entrypoint-dev-rails.sh b/.dockerfiles/entrypoint-dev-rails.sh index b7a5b9bfc1..ca9e946f71 100755 --- a/.dockerfiles/entrypoint-dev-rails.sh +++ b/.dockerfiles/entrypoint-dev-rails.sh @@ -1,7 +1,12 @@ #!/usr/bin/env bash +# Enable jemalloc for reduced memory usage and latency. +if [ -z "${LD_PRELOAD+x}" ] && [ -f /usr/lib/*/libjemalloc.so.2 ]; then + export LD_PRELOAD="$(echo /usr/lib/*/libjemalloc.so.2)" +fi + # install bundle gems if not up to date with the Gemfile.lock file -bundle check 2>/dev/null || bundle install --without unicorn +bundle check 2>/dev/null || bundle install # install node packages npm list &> /dev/null || npm ci diff --git a/.github/workflows/test_ci.yml b/.github/workflows/test_ci.yml index f35dc69957..00bd443595 100644 --- a/.github/workflows/test_ci.yml +++ b/.github/workflows/test_ci.yml @@ -49,7 +49,7 @@ jobs: - name: Set up ruby and cache gems uses: ruby/setup-ruby@v1 with: - ruby-version: ruby-3.0 + ruby-version: ruby-3.3 bundler-cache: true - name: Set up node and cache packages uses: actions/setup-node@v4 diff --git a/Changelog.md b/Changelog.md index 1576805ae4..4333a862e7 100644 --- a/Changelog.md +++ b/Changelog.md @@ -10,6 +10,8 @@ ### 🔧 Internal changes +- Upgrade Docker environment to use Ruby v3.3 (#7185) + ## [v2.5.0] ### ✨ New features and improvements @@ -62,6 +64,7 @@ - Remove CI chromedriver version and Chrome dependency (#7170) - Update Jupyter notebook Javascript dependencies (require.js to v2.3.7, plotly.js to v2.34.0) (#7175) - Do not require i18n-tasks in Gemfile (#7180) +- Update Docker containers to install Ruby v3.3 (#7181) ## [v2.4.12] diff --git a/Gemfile b/Gemfile index bb62bc0e7a..8803935cbb 100644 --- a/Gemfile +++ b/Gemfile @@ -50,6 +50,7 @@ gem 'rmagick', '~> 6.0.1' gem 'rtesseract' # Ruby miscellany +gem 'csv' gem 'json' gem 'mini_mime' gem 'redcarpet' diff --git a/Gemfile.lock b/Gemfile.lock index 59a9f66a1b..b93877f3e1 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -123,7 +123,7 @@ GEM rack-test (>= 0.6.3) regexp_parser (>= 1.5, < 3.0) xpath (~> 3.2) - cgi (0.3.6) + cgi (0.4.1) chunky_png (1.4.0) combine_pdf (1.0.26) matrix @@ -140,6 +140,7 @@ GEM crass (1.0.6) cssbundling-rails (1.4.1) railties (>= 6.0.0) + csv (3.2.8) date (3.3.4) debug (1.9.2) irb (~> 1.10) @@ -501,6 +502,7 @@ DEPENDENCIES config cookies_eu cssbundling-rails (~> 1.4) + csv debug (>= 1.0.0) descriptive_statistics dry-validation @@ -554,4 +556,4 @@ DEPENDENCIES webmock BUNDLED WITH - 2.4.13 + 2.5.17 diff --git a/compose.yaml b/compose.yaml index cf2bb525c2..ac02d3ecc8 100644 --- a/compose.yaml +++ b/compose.yaml @@ -4,7 +4,7 @@ services: context: . dockerfile: ./.dockerfiles/Dockerfile target: dev - image: markus-dev:1.1.0 + image: markus-dev:1.2.0 tmpfs: - /tmp stdin_open: true @@ -23,7 +23,7 @@ services: rails: &rails <<: *app - image: markus-dev-rails:1.1.0 + image: markus-dev-rails:1.2.0 entrypoint: .dockerfiles/entrypoint-dev-rails.sh command: bundle exec rails server -b 0.0.0.0 environment: @@ -58,7 +58,7 @@ services: ssh: <<: *rails - image: markus-dev-ssh:1.1.0 + image: markus-dev-ssh:1.2.0 volumes: - log:/home/markus/log - repos:/home/markus/csc108 @@ -76,7 +76,7 @@ services: resque: &resque <<: *rails - image: markus-dev-resque:1.1.0 + image: markus-dev-resque:1.2.0 entrypoint: .dockerfiles/entrypoint-dev-wait-for-install.sh command: bundle exec rails resque:work QUEUE=* TERM_CHILD=1 depends_on: @@ -85,7 +85,7 @@ services: resque-scheduler: <<: *resque - image: markus-dev-resque-scheduler:1.1.0 + image: markus-dev-resque-scheduler:1.2.0 command: bundle exec rails resque:scheduler postgres: @@ -109,7 +109,7 @@ services: webpack: <<: *app - image: markus-dev-webpack:1.1.0 + image: markus-dev-webpack:1.2.0 entrypoint: .dockerfiles/entrypoint-dev-webpack.sh command: npm run build-dev volumes: diff --git a/markus.control b/markus.control index 27d6fcd4d4..39af4b8ce2 100644 --- a/markus.control +++ b/markus.control @@ -28,12 +28,6 @@ Depends: libyaml-dev, # nodejs: for serving/managing javascript nodejs (>= 18), nodejs (<< 21), -# ruby: required to run Rails - ruby (>= 1:2.7) | ruby3.0, ruby (<< 1:3) | ruby3.0, -# ruby-dev: required to run rails - ruby-dev (>= 1:2.7) | ruby3.0-dev, ruby-dev (<< 1:3) | ruby3.0-dev, -# rubygems-integration: required to install ruby gems - rubygems-integration, # tesseract-ocr: required for scanned exams tesseract-ocr (>= 4.1.1-2build2), # pandoc: required for Jupyter notebook to PDF conversion diff --git a/markus_1.0_all.deb b/markus_1.0_all.deb index e0bf18dc258a44f4c716b85f942a909f1aafd00a..b2a262f1a0b5a1591597ea375d5d7ec59e624d5f 100644 GIT binary patch delta 2730 zcmV;b3RU%}7Tgt(8VE8oGcqtZH!+bSIDaxTGcqtZH!&a}Fd!fxARsUxARr(hF)%PT zG&CR}IW;&SARr(hARu50D77#B0BEfp0A}%zCJ>Lh0XTrSZS~t9de|r>?Y@C`JfLsm zRk;5D9^ck+A_4$V4L|{j0EYm109+Yb)NN2ST;l)aaT`71>#gLWY^)Jl(-!`)z<;hU z7g_<-NRXo7lcvZS3@n|MTVc0yT^YhYg=Z59E1_MbGee7!X;xoXw;nxc4dYfKr$6n8 z_SuB;wUVxQ^0=Xa9_JnpNq4^)p7a4Cj#;64XSH6h#lnF``In z7!D>eV{ERZQk_nx4eh;O_4Pw@pnuHf^EFitr3_tH|A{&Fa$eVb)1<=b3Ob#ZW|>r` z*z+&n#GJ)3j)CZ#OMOhM6M(!#!znMWIE;(c<4C-c9uf$YOqo2d_!1Zxh?ofG^u1MW zL%^B9Ah%qs0OXdSAYeVdB~Eghd95TynrXfxooX7NsLR>qMxwGSxTuBxJ>}6@p z$1PC114wC}uBCqD-yVr5}76wDZ}AJJ0zL*2&2iKErPApfHe#m$eeNCh1FyrJ)gJZCJBE0n z%lU1g&Ke&CN)kz~jEqs-qJU+HHIEP*n|w%+x*y4EG#|P~)(nx9cfdK6890Xe*+S!- zRMIAH(8ou_I|N)~{5nKqV!U4*++BP=pvN+So|%Do{(u~N<9|LHK6R*_p`BE_e0onw zfLMd#u{j?PRW_KGN0A3A6j?XJ1$_ayqj?y#4Erog$`6Q50Gy%NY%-Y%cbfc6J^Z7s)E8$3mo79tbD>ohVKdp;1`*@xC)Te|8TSe17u-zVJ>uG zaxQvvbRZxgAb&A8GBYzWFgQ0cARsUxARr(hFd!fxARsX?Fg7$aARsX|GC3e1ARr(h zU$r7{4DPdE@oz}}_<5GB}ld!fxg+d5gHweoEy*dA6gUYWI%wk4^zl&fjE zyCu0-O>_3Qns+7qXYlV!n{^W*yRFw70cOIODue>?T7TmJ*Z>;=H)74620t23g^1cn zESv_l`G%YeUad#6D)i@XYbu}%{^(+jy)w=t-ES#Ja_3V?LkUbrLRZVU%mTw zR_{gauhHN7R-air$L&r3Jn4P$sbebhgBv^ORZ!*^yT;qKov}Kq_}Ewbork~mOv`;g zyff4m^nb%<=zD_O|C=yxiara&k@|F9!67N7XZ&)Lr?wM{L!nf6*6uxMJ0U!@c3h}! zbt>r*mS?!3xRQry3Z>dgpC_nKsFZ0dWj&U((Z)EB-1FRe9Ho53omQh2%9KK_QYjT` z8>Lb!)2O5c;rpHR^Z3=*#h&~A#+WFL9*k@Db^t1o2dbIXsuBQ}R zuK9Os9`VdE?W(S!oLQ~kZtxrNtGa{!bj;q~`1v);=i7Lp~Cwv}EaJI6ai(wDJDHJMCS zDzUVMYT#AO7d)zVSI!T=;uRv2)i zqemEIh>37a&XO+@ifp7{iOH}5;lvOjD6t|i7eTzpjvOe0V@re|WOgh_-~)^U7k^MF z)UYul1j|athAtakL6Qn2G!qmwWvUo?qC^WUON;Wvt5DLGRN;=@ zN$wTM_+Sa+B`sbH)ZASpQo$%0vwMYc91t zt{TfaJ>wF+(|7gXV^{Omm45a+J=gGg%JvIu|IaTEXZ~;&U1s1&K0zP!eXsh+91h>@ z{4noz-2RG|n>Z79?PC}R(}f8^|3*LK^D6MH3g*E(T*fC^})# zTjTU{HiJ$pda}|%VVnXR(GA&Fw$_UDs7J<0Xo~HY)TDk`f|$%@62q&W;eygv1-@+- zAxY&U`FD9gk;qD#j$~@40^nfK-*dK1co6qcnD8pfNzKZndMDYf7k^80d@_W(t^QTk zkkQky*8!hqB2ZHT)jjH^3`g`QO{ijT;SPo%CMXiN&|!iv)yoE$5XE!jH}uPO6A!Ta z+CatT&_-m`zSxmJx&zA?Oh2IpA+NDk4QxU7 z!xx-x0f(tQ0sYrYwtq-pq*DRB;W$gM64WrS>ujbMn$|~3r9IiyV80mDgJRR!csR(?B!(F%mp_{4LYdSI zm}ZMaY7G*w!bFRf2JC`R*ki)VASLY`^O+jb1pEk9*&GQdVt)ZhdTkGmkO}z+ilj=JYoTB-X)TB%$E)2HILu9vQ1VN)0^d~QzoE6c zWR_J|Qba|!-*6CN!FS}fIQF3h#<-zDP3anka59LYJ!c|dJ( zmMD^(#nA*dRvK#qdmk?u(^%#`bjN|zKL?-oPx1VjMFH#>-GH4 zM=!^;rZrG~l(Da??Mk_wk$KB0r+K8NGTqt)AV1-dPOB@fX_9)JBvR5t0)ewFC@)fN z2@DKGP2`I8eMNCYz)@UKV=`C(YD`cNz)?O%QoL8nKE1dhJKE|0&OjM&mw#56!e}vr z{`cRdt*A>Uv$WdC;Az^tjX1-nI`p;t)yUaMcUUiY7xk$JkyDSnJ>LYbS$ zm1|$K*Jjl#OSyWnvfxSiU$$3xls>WL_AAfKPPgU*%#M?@?Fw@9#|nbkdwkQOlyM^O zgsHtI6}{34OPFZo?TfOc5`PP;m5WXy-3{U-=tT{B1R-p1iXtzeUC8e8c_-HBzaZmmxX(z9@fU~F(DTB%g(TKDpC53cAgb-6#s{& z-5-0PlS6yfb6m>eonJ05DCHMJ7J)JBJ)EW)IxK@AAJ-cK$k?xWi`2a}QI|csSYjv^ zEnhHMn8)V~oj4Fn_+lAL7vrMFZh@0g(H~;bp5Dn2xasHvPCW=8UlNSL2h-8>1;LHLn)eKE?Lzp7FVc0Up0GZdep9*B zbBa(p`@x`r`!c$!@&Gz~`i)ua-65b}lySb=)_uL*0hVN8bYU)ZVR9~db95jeARsX} zF*7kZI5RjhlUxKCe>OHCARr(hAYck8wJ-euXw5SK`cPmHN6;8I2cQs5!rdfn!o@*= z7eb!_)m`OuSi%~8UMxW?rtI?md0+77R4z% z1%qV+=K$LP8UZdN^WsvvV8WU^{dq1Mijbs$fD4ny{&Pm^^2&j zA~*M>LHp;a$ZE}1`_j2fN9hhyqAGnYy8hbTx3hL1YX6J=*0=g-?G$%6{qv;v!>5j^ z%>QldUsu1DU+fxh*LMC?5yk&}wa+>DTaQ}q`{30S^s^@Ddw$#Bo2+hzK7yb~eY&n+ zkCf6gUU^nJf0arl(?%kh?yTH*xM)6fNYSXa>@>o($jTGUNE_B+IvSZY?DPDzHY#Nr zmbHjop^b44x#zjH7%F)v+fE_VC_8Q2DKn9@P^omvLf93ni#z#ye(oxDO<~uso8fdZ zbMi9={XwjMEY_d%hd77&MLqi0@*nNR7oEQ|4nMmme{w$kZC!c(y?@59`z)L}|8{Lj zJD>Ur`#4)pKl|^hMQgw1dde{6mwUHn5s!{3S9JyDXtjR3KTpJ~>i+ptF?W08>#yhA zosC`*>j`q+mh+_A@2YWFLwzv_;*MhhZST>VIZ>vu_RQf(>)T;^XSj*9OS?$9!=l~I zd~w|~e|x`g6>0Fjm+Tsyu8|Y7hC!criZ3|F?b56_Le-NAg@NALVs+JM`k_JBxWd@mphFq=s{QA2E6yE1!N6#a;vg+JO24f&QvRMc z1b<`NQQu_|^GGbaG;AfZQ@j%tc^O~yYPDJze}>ZG-k+oP1T(H7nM$ORNy}r1LpFK> zs3?KuP@<0j&=q`0Spefkm|8GJffEN*szkBrv0{i57CtdWa&oc|h>|41pQM%46H(2I z7aioR~&+YuI?q}RSP|C9{+pc}g+K`R1H)XsA zfefhOBy$cSnh}u{BuSbBfepqa%Vve76?_)3DvY3j{3%F| z^lBmHf|2K{xVn;>-h2AO=rpAlUaJq&h(7l6e)HM=qfiog88ECU2KhuVYu)e{fAHR1 zE8x5p^59G`!6q`k`l?E)bTehCLQF?f^_5?eb##a}Y<~bG!W*R40p}k1e<@>+{$2yB zU@eHyA#TNhsw@b=;G=ai(`2ezt4TzO)4%}3TSnS;ZxdOHc((2t~W&amPpTHs2Hz5t>`y*G5?7X8@}=)%?lrY{}x z@^dNJ_A>V+XZ8rxcV)W%APf*D$52`Faq8ufs!Kb&mBx5?$$Qsdd(~fra66WoJ0+T?umr_BJxq*N88tm=o-8c)9A!5q!c=IEfkwK z8Gl^cluKz@LnU)m-uGLHz>1ZWzY|eQ`yt}{q&fjUgn3|rnN_Q)I&zetkRG*`6V3kB p26UPRaD2-V4so8A8AC7zu;UXyyvpt^K+$7XF@(j4{QSIP)dAxeR!9H< From e5feb6f1a01a0c2717fc01d1a8c584dd1529bdd5 Mon Sep 17 00:00:00 2001 From: David Liu Date: Sat, 10 Aug 2024 22:35:47 -0400 Subject: [PATCH 003/102] Upgrade to Rails v7.2 --- Changelog.md | 2 +- Gemfile | 5 +- Gemfile.lock | 145 +++++++++--------- app/models/test_group.rb | 5 +- app/models/test_run.rb | 2 +- app/models/user.rb | 2 +- bin/brakeman | 7 + config/application.rb | 7 +- .../initializers/filter_parameter_logging.rb | 8 + config/initializers/permissions_policy.rb | 13 ++ package-lock.json | 15 +- package.json | 2 +- 12 files changed, 117 insertions(+), 96 deletions(-) create mode 100755 bin/brakeman create mode 100644 config/initializers/filter_parameter_logging.rb create mode 100644 config/initializers/permissions_policy.rb diff --git a/Changelog.md b/Changelog.md index 4333a862e7..8ff0678e9e 100644 --- a/Changelog.md +++ b/Changelog.md @@ -11,6 +11,7 @@ ### 🔧 Internal changes - Upgrade Docker environment to use Ruby v3.3 (#7185) +- Upgrade to Rails v7.2 (#7185) ## [v2.5.0] @@ -64,7 +65,6 @@ - Remove CI chromedriver version and Chrome dependency (#7170) - Update Jupyter notebook Javascript dependencies (require.js to v2.3.7, plotly.js to v2.34.0) (#7175) - Do not require i18n-tasks in Gemfile (#7180) -- Update Docker containers to install Ruby v3.3 (#7181) ## [v2.4.12] diff --git a/Gemfile b/Gemfile index 8803935cbb..1fc8abfb3a 100644 --- a/Gemfile +++ b/Gemfile @@ -8,7 +8,7 @@ source 'https://rubygems.org' # Bundler requires these gems in all environments gem 'puma' -gem 'rails', '~> 7.1.3' +gem 'rails', '~> 7.2.0' gem 'sprockets' gem 'sprockets-rails' @@ -91,8 +91,9 @@ group :test do gem 'fuubar' gem 'machinist', '< 3' gem 'rails-controller-testing' - gem 'shoulda' gem 'shoulda-callback-matchers', '~> 1.1.1' + gem 'shoulda-context', '~> 3.0.0.rc1' + gem 'shoulda-matchers', '~> 6.0' gem 'simplecov', require: false gem 'simplecov-lcov', require: false gem 'time-warp' diff --git a/Gemfile.lock b/Gemfile.lock index b93877f3e1..beddf7c4be 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -3,70 +3,65 @@ GEM specs: action_policy (0.7.1) ruby-next-core (>= 1.0) - actioncable (7.1.3.4) - actionpack (= 7.1.3.4) - activesupport (= 7.1.3.4) + actioncable (7.2.0) + actionpack (= 7.2.0) + activesupport (= 7.2.0) nio4r (~> 2.0) websocket-driver (>= 0.6.1) zeitwerk (~> 2.6) - actionmailbox (7.1.3.4) - actionpack (= 7.1.3.4) - activejob (= 7.1.3.4) - activerecord (= 7.1.3.4) - activestorage (= 7.1.3.4) - activesupport (= 7.1.3.4) - mail (>= 2.7.1) - net-imap - net-pop - net-smtp - actionmailer (7.1.3.4) - actionpack (= 7.1.3.4) - actionview (= 7.1.3.4) - activejob (= 7.1.3.4) - activesupport (= 7.1.3.4) - mail (~> 2.5, >= 2.5.4) - net-imap - net-pop - net-smtp + actionmailbox (7.2.0) + actionpack (= 7.2.0) + activejob (= 7.2.0) + activerecord (= 7.2.0) + activestorage (= 7.2.0) + activesupport (= 7.2.0) + mail (>= 2.8.0) + actionmailer (7.2.0) + actionpack (= 7.2.0) + actionview (= 7.2.0) + activejob (= 7.2.0) + activesupport (= 7.2.0) + mail (>= 2.8.0) rails-dom-testing (~> 2.2) - actionpack (7.1.3.4) - actionview (= 7.1.3.4) - activesupport (= 7.1.3.4) + actionpack (7.2.0) + actionview (= 7.2.0) + activesupport (= 7.2.0) nokogiri (>= 1.8.5) racc - rack (>= 2.2.4) + rack (>= 2.2.4, < 3.2) rack-session (>= 1.0.1) rack-test (>= 0.6.3) rails-dom-testing (~> 2.2) rails-html-sanitizer (~> 1.6) - actiontext (7.1.3.4) - actionpack (= 7.1.3.4) - activerecord (= 7.1.3.4) - activestorage (= 7.1.3.4) - activesupport (= 7.1.3.4) + useragent (~> 0.16) + actiontext (7.2.0) + actionpack (= 7.2.0) + activerecord (= 7.2.0) + activestorage (= 7.2.0) + activesupport (= 7.2.0) globalid (>= 0.6.0) nokogiri (>= 1.8.5) - actionview (7.1.3.4) - activesupport (= 7.1.3.4) + actionview (7.2.0) + activesupport (= 7.2.0) builder (~> 3.1) erubi (~> 1.11) rails-dom-testing (~> 2.2) rails-html-sanitizer (~> 1.6) - activejob (7.1.3.4) - activesupport (= 7.1.3.4) + activejob (7.2.0) + activesupport (= 7.2.0) globalid (>= 0.3.6) activejob-status (1.0.1) activejob (>= 6.0) activesupport (>= 6.0) - activemodel (7.1.3.4) - activesupport (= 7.1.3.4) + activemodel (7.2.0) + activesupport (= 7.2.0) activemodel-serializers-xml (1.0.2) activemodel (> 5.x) activesupport (> 5.x) builder (~> 3.1) - activerecord (7.1.3.4) - activemodel (= 7.1.3.4) - activesupport (= 7.1.3.4) + activerecord (7.2.0) + activemodel (= 7.2.0) + activesupport (= 7.2.0) timeout (>= 0.4.0) activerecord-session_store (2.1.0) actionpack (>= 6.1) @@ -75,22 +70,23 @@ GEM multi_json (~> 1.11, >= 1.11.2) rack (>= 2.0.8, < 4) railties (>= 6.1) - activestorage (7.1.3.4) - actionpack (= 7.1.3.4) - activejob (= 7.1.3.4) - activerecord (= 7.1.3.4) - activesupport (= 7.1.3.4) + activestorage (7.2.0) + actionpack (= 7.2.0) + activejob (= 7.2.0) + activerecord (= 7.2.0) + activesupport (= 7.2.0) marcel (~> 1.0) - activesupport (7.1.3.4) + activesupport (7.2.0) base64 bigdecimal - concurrent-ruby (~> 1.0, >= 1.0.2) + concurrent-ruby (~> 1.0, >= 1.3.1) connection_pool (>= 2.2.5) drb i18n (>= 1.6, < 2) + logger (>= 1.4.2) minitest (>= 5.1) - mutex_m - tzinfo (~> 2.0) + securerandom (>= 0.3) + tzinfo (~> 2.0, >= 2.0.5) addressable (2.8.6) public_suffix (>= 2.0.2, < 6.0) ast (2.4.2) @@ -262,7 +258,6 @@ GEM multi_json (1.15.0) mustermann (3.0.0) ruby2_keywords (~> 0.0.1) - mutex_m (0.2.0) net-imap (0.4.12) date net-protocol @@ -312,20 +307,20 @@ GEM rackup (1.0.0) rack (< 3) webrick - rails (7.1.3.4) - actioncable (= 7.1.3.4) - actionmailbox (= 7.1.3.4) - actionmailer (= 7.1.3.4) - actionpack (= 7.1.3.4) - actiontext (= 7.1.3.4) - actionview (= 7.1.3.4) - activejob (= 7.1.3.4) - activemodel (= 7.1.3.4) - activerecord (= 7.1.3.4) - activestorage (= 7.1.3.4) - activesupport (= 7.1.3.4) + rails (7.2.0) + actioncable (= 7.2.0) + actionmailbox (= 7.2.0) + actionmailer (= 7.2.0) + actionpack (= 7.2.0) + actiontext (= 7.2.0) + actionview (= 7.2.0) + activejob (= 7.2.0) + activemodel (= 7.2.0) + activerecord (= 7.2.0) + activestorage (= 7.2.0) + activesupport (= 7.2.0) bundler (>= 1.15.0) - railties (= 7.1.3.4) + railties (= 7.2.0) rails-controller-testing (1.0.5) actionpack (>= 5.0.1.rc1) actionview (>= 5.0.1.rc1) @@ -345,10 +340,10 @@ GEM railties redis redis-namespace - railties (7.1.3.4) - actionpack (= 7.1.3.4) - activesupport (= 7.1.3.4) - irb + railties (7.2.0) + actionpack (= 7.2.0) + activesupport (= 7.2.0) + irb (~> 1.13) rackup (>= 1.0.0) rake (>= 12.2) thor (~> 1.0, >= 1.2.2) @@ -417,20 +412,18 @@ GEM rufus-scheduler (3.9.1) fugit (~> 1.1, >= 1.1.6) rugged (1.7.2) + securerandom (0.3.1) selenium-webdriver (4.23.0) base64 (~> 0.2) logger (~> 1.4) rexml (~> 3.2, >= 3.2.5) rubyzip (>= 1.2.2, < 3.0) websocket (~> 1.0) - shoulda (4.0.0) - shoulda-context (~> 2.0) - shoulda-matchers (~> 4.0) shoulda-callback-matchers (1.1.4) activesupport (>= 3) - shoulda-context (2.0.0) - shoulda-matchers (4.3.0) - activesupport (>= 4.2.0) + shoulda-context (3.0.0.rc1) + shoulda-matchers (6.4.0) + activesupport (>= 5.2.0) simplecov (0.22.0) docile (~> 1.1) simplecov-html (~> 0.11) @@ -469,6 +462,7 @@ GEM kgio (~> 2.6) raindrops (~> 0.7) uniform_notifier (1.16.0) + useragent (0.16.10) webmock (3.23.1) addressable (>= 2.8.0) crack (>= 0.3.2) @@ -528,7 +522,7 @@ DEPENDENCIES prawn-qrcode puma rack-cors - rails (~> 7.1.3) + rails (~> 7.2.0) rails-controller-testing rails-html-sanitizer rails-i18n (~> 7.0.0) @@ -544,8 +538,9 @@ DEPENDENCIES rubyzip rugged selenium-webdriver - shoulda shoulda-callback-matchers (~> 1.1.1) + shoulda-context (~> 3.0.0.rc1) + shoulda-matchers (~> 6.0) simplecov simplecov-lcov sprockets diff --git a/app/models/test_group.rb b/app/models/test_group.rb index ad29f21312..f957d91a28 100644 --- a/app/models/test_group.rb +++ b/app/models/test_group.rb @@ -1,6 +1,7 @@ class TestGroup < ApplicationRecord - enum display_output: { instructors: 0, instructors_and_student_tests: 1, instructors_and_students: 2 }, - _prefix: :display_to + enum :display_output, + { instructors: 0, instructors_and_student_tests: 1, instructors_and_students: 2 }, + prefix: :display_to belongs_to :assignment, foreign_key: :assessment_id, inverse_of: :test_groups belongs_to :criterion, optional: true diff --git a/app/models/test_run.rb b/app/models/test_run.rb index 3619bda970..affe790169 100644 --- a/app/models/test_run.rb +++ b/app/models/test_run.rb @@ -1,5 +1,5 @@ class TestRun < ApplicationRecord - enum status: { in_progress: 0, complete: 1, cancelled: 2, failed: 3 } + enum :status, { in_progress: 0, complete: 1, cancelled: 2, failed: 3 } has_many :test_group_results, dependent: :destroy has_many :feedback_files, through: :test_group_results belongs_to :test_batch, optional: true diff --git a/app/models/user.rb b/app/models/user.rb index 835924c324..57f349b306 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -10,7 +10,7 @@ class User < ApplicationRecord before_validation :strip_name before_validation :nillify_empty_email_and_id_number - enum theme: { light: 1, dark: 2 } + enum :theme, { light: 1, dark: 2 } # Group relationships has_many :key_pairs, dependent: :destroy diff --git a/bin/brakeman b/bin/brakeman new file mode 100755 index 0000000000..9c405df728 --- /dev/null +++ b/bin/brakeman @@ -0,0 +1,7 @@ +#!/usr/bin/env ruby +require 'rubygems' +require 'bundler/setup' + +ARGV.unshift('--ensure-latest') + +load Gem.bin_path('brakeman', 'brakeman') diff --git a/config/application.rb b/config/application.rb index 7f12016932..662290b860 100644 --- a/config/application.rb +++ b/config/application.rb @@ -17,7 +17,7 @@ module Markus class Application < Rails::Application # Initialize configuration defaults for originally generated Rails version - config.load_defaults 7.1 + config.load_defaults 7.2 # Change the format of the cache entry. # @@ -29,11 +29,6 @@ class Application < Rails::Application # and you have no plans to rollback. config.active_support.cache_format_version = 7.1 - # Sensitive parameters which will be filtered from the log file - config.filter_parameters += [ - :passw, :secret, :token, :_key, :crypt, :salt, :certificate, :otp, :ssn - ] - # Use json serializer for cookies config.action_dispatch.cookies_serializer = :json diff --git a/config/initializers/filter_parameter_logging.rb b/config/initializers/filter_parameter_logging.rb new file mode 100644 index 0000000000..c010b83ddd --- /dev/null +++ b/config/initializers/filter_parameter_logging.rb @@ -0,0 +1,8 @@ +# Be sure to restart your server when you modify this file. + +# Configure parameters to be partially matched (e.g. passw matches password) and filtered from the log file. +# Use this to limit dissemination of sensitive information. +# See the ActiveSupport::ParameterFilter documentation for supported notations and behaviors. +Rails.application.config.filter_parameters += [ + :passw, :email, :secret, :token, :_key, :crypt, :salt, :certificate, :otp, :ssn +] diff --git a/config/initializers/permissions_policy.rb b/config/initializers/permissions_policy.rb new file mode 100644 index 0000000000..7db3b9577e --- /dev/null +++ b/config/initializers/permissions_policy.rb @@ -0,0 +1,13 @@ +# Be sure to restart your server when you modify this file. + +# Define an application-wide HTTP permissions policy. For further +# information see: https://developers.google.com/web/updates/2018/06/feature-policy + +# Rails.application.config.permissions_policy do |policy| +# policy.camera :none +# policy.gyroscope :none +# policy.microphone :none +# policy.usb :none +# policy.fullscreen :self +# policy.payment :self, "https://secure.example.com" +# end diff --git a/package-lock.json b/package-lock.json index c1df346aa5..182a4b803f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,7 +12,7 @@ "@fortawesome/free-regular-svg-icons": "^6.6.0", "@fortawesome/free-solid-svg-icons": "^6.6.0", "@fortawesome/react-fontawesome": "^0.2.2", - "@rails/actioncable": "^7.1.3-4", + "@rails/actioncable": "^7.2.0", "@rails/ujs": "^7.1.3-4", "@rjsf/core": "^5.19.4", "@rjsf/validator-ajv8": "^5.19.4", @@ -2841,9 +2841,10 @@ } }, "node_modules/@rails/actioncable": { - "version": "7.1.3-4", - "resolved": "https://registry.npmjs.org/@rails/actioncable/-/actioncable-7.1.3-4.tgz", - "integrity": "sha512-54K+dO4wvL1FVnw8XFRkY8VZXTU9HdjB5QCd2dNDAkE9cJRD8bBrQZAi8zm5npL2sKGKwOSGmfZrXFE12LMYGA==" + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@rails/actioncable/-/actioncable-7.2.0.tgz", + "integrity": "sha512-crcsPF3skrqJkFZLxesZoyUEt8ol25XtTuOAUMdLa5qQKWTZpL8eLVW71bDCwKDQLbV2z5sBZ/XGEC0i+ZZa+A==", + "license": "MIT" }, "node_modules/@rails/ujs": { "version": "7.1.3-4", @@ -13806,9 +13807,9 @@ } }, "@rails/actioncable": { - "version": "7.1.3-4", - "resolved": "https://registry.npmjs.org/@rails/actioncable/-/actioncable-7.1.3-4.tgz", - "integrity": "sha512-54K+dO4wvL1FVnw8XFRkY8VZXTU9HdjB5QCd2dNDAkE9cJRD8bBrQZAi8zm5npL2sKGKwOSGmfZrXFE12LMYGA==" + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@rails/actioncable/-/actioncable-7.2.0.tgz", + "integrity": "sha512-crcsPF3skrqJkFZLxesZoyUEt8ol25XtTuOAUMdLa5qQKWTZpL8eLVW71bDCwKDQLbV2z5sBZ/XGEC0i+ZZa+A==" }, "@rails/ujs": { "version": "7.1.3-4", diff --git a/package.json b/package.json index 69b5c89490..2b14aba7b8 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,7 @@ "@fortawesome/free-regular-svg-icons": "^6.6.0", "@fortawesome/free-solid-svg-icons": "^6.6.0", "@fortawesome/react-fontawesome": "^0.2.2", - "@rails/actioncable": "^7.1.3-4", + "@rails/actioncable": "^7.2.0", "@rails/ujs": "^7.1.3-4", "@rjsf/core": "^5.19.4", "@rjsf/validator-ajv8": "^5.19.4", From b23342f4730ad08b934843546ef13984eb47275d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 20 Aug 2024 13:32:26 -0400 Subject: [PATCH 004/102] build(deps): bump fugit from 1.9.0 to 1.11.1 (#7183) Bumps [fugit](https://github.com/floraison/fugit) from 1.9.0 to 1.11.1. - [Changelog](https://github.com/floraison/fugit/blob/master/CHANGELOG.md) - [Commits](https://github.com/floraison/fugit/compare/v1.9.0...v1.11.1) --- updated-dependencies: - dependency-name: fugit dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile.lock | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index beddf7c4be..1707ed1f0c 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -124,7 +124,7 @@ GEM combine_pdf (1.0.26) matrix ruby-rc4 (>= 0.1.5) - concurrent-ruby (1.3.3) + concurrent-ruby (1.3.4) config (5.5.1) deep_merge (~> 1.2, >= 1.2.1) connection_pool (2.4.1) @@ -180,7 +180,7 @@ GEM dry-schema (>= 1.12, < 2) zeitwerk (~> 2.6) erubi (1.13.0) - et-orbi (1.2.7) + et-orbi (1.2.11) tzinfo exception_notification (4.5.0) actionmailer (>= 5.2, < 8) @@ -194,8 +194,8 @@ GEM faker (3.4.2) i18n (>= 1.8.11, < 2) ffi (1.16.3) - fugit (1.9.0) - et-orbi (~> 1, >= 1.2.7) + fugit (1.11.1) + et-orbi (~> 1, >= 1.2.11) raabro (~> 1.4) fuubar (2.5.1) rspec-core (~> 3.0) From e8d28f21ab00fa58094acb5214814510121e5fd2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 22 Aug 2024 19:03:21 -0400 Subject: [PATCH 005/102] build(deps-dev): bump rexml from 3.3.4 to 3.3.6 (#7186) Bumps [rexml](https://github.com/ruby/rexml) from 3.3.4 to 3.3.6. - [Release notes](https://github.com/ruby/rexml/releases) - [Changelog](https://github.com/ruby/rexml/blob/master/NEWS.md) - [Commits](https://github.com/ruby/rexml/compare/v3.3.4...v3.3.6) --- updated-dependencies: - dependency-name: rexml dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 1707ed1f0c..cf03f9a92a 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -376,7 +376,7 @@ GEM redis (>= 3.3) resque (>= 1.27) rufus-scheduler (~> 3.2, != 3.3) - rexml (3.3.4) + rexml (3.3.6) strscan rmagick (6.0.1) observer (~> 0.1) From a620c5b9f5ca9c8b8287eed5f02b045937440636 Mon Sep 17 00:00:00 2001 From: David Liu Date: Tue, 27 Aug 2024 14:47:15 +0000 Subject: [PATCH 006/102] Fix bug in syntax highlighting caused by incorrect function call (#7187) --- Changelog.md | 2 ++ .../Components/Result/text_viewer.jsx | 2 +- .../Components/__tests__/text_viewer.test.jsx | 17 ++++++++++++++--- 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/Changelog.md b/Changelog.md index 8ff0678e9e..45c7263d7c 100644 --- a/Changelog.md +++ b/Changelog.md @@ -8,6 +8,8 @@ ### 🐛 Bug fixes +- Fix bug in syntax highlighting caused by incorrect function call (#7187) + ### 🔧 Internal changes - Upgrade Docker environment to use Ruby v3.3 (#7185) diff --git a/app/assets/javascripts/Components/Result/text_viewer.jsx b/app/assets/javascripts/Components/Result/text_viewer.jsx index eadb5306a0..b3fad2514d 100644 --- a/app/assets/javascripts/Components/Result/text_viewer.jsx +++ b/app/assets/javascripts/Components/Result/text_viewer.jsx @@ -115,7 +115,7 @@ export class TextViewer extends React.PureComponent { } } if (currLine.textContent.length > 0) { - nodeLines.appendChild(currLine); + nodeLines.push(currLine); } nodeLines.push(this.raw_content.current.lastChild.cloneNode(true)); while (this.raw_content.current.firstChild) { diff --git a/app/assets/javascripts/Components/__tests__/text_viewer.test.jsx b/app/assets/javascripts/Components/__tests__/text_viewer.test.jsx index 30b1e10bca..373eae78aa 100644 --- a/app/assets/javascripts/Components/__tests__/text_viewer.test.jsx +++ b/app/assets/javascripts/Components/__tests__/text_viewer.test.jsx @@ -5,7 +5,9 @@ import {TextViewer} from "../Result/text_viewer"; describe("TextViewer", () => { let props; - beforeEach(() => { + afterEach(cleanup); + + it("should render its text content when the content ends with a new line", () => { props = { content: "def f(n: int) -> int:\n return n + 1\n", annotations: [], @@ -14,11 +16,20 @@ describe("TextViewer", () => { }; render(); + + expect(screen.getByText("def f(n: int) -> int:")).toBeInTheDocument(); }); - afterEach(cleanup); + it("should render its text content when the content doesn't end with a new line", () => { + props = { + content: "def f(n: int) -> int:\n return n + 1", + annotations: [], + focusLine: null, + submission_file_id: 1, + }; + + render(); - it("should render its text content", () => { expect(screen.getByText("def f(n: int) -> int:")).toBeInTheDocument(); }); }); From f2bea41ac92cff528c5e7d45e92a443fe622da3b Mon Sep 17 00:00:00 2001 From: Samuel Maldonado Date: Wed, 28 Aug 2024 10:46:08 -0400 Subject: [PATCH 007/102] Changelog: update changelog (#7189) --- Changelog.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/Changelog.md b/Changelog.md index 45c7263d7c..c527092b46 100644 --- a/Changelog.md +++ b/Changelog.md @@ -8,13 +8,17 @@ ### 🐛 Bug fixes -- Fix bug in syntax highlighting caused by incorrect function call (#7187) - ### 🔧 Internal changes - Upgrade Docker environment to use Ruby v3.3 (#7185) - Upgrade to Rails v7.2 (#7185) +## [v2.5.1] + +### 🐛 Bug fixes + +- Fix bug in syntax highlighting caused by incorrect function call (#7187) + ## [v2.5.0] ### ✨ New features and improvements From a5efbf5c39d9d989d4669f2bd271fd2663e6841c Mon Sep 17 00:00:00 2001 From: David Liu Date: Sun, 1 Sep 2024 13:16:50 +0000 Subject: [PATCH 008/102] Manually specify chromedriver port number in Github actions (#7209) --- .github/workflows/test_ci.yml | 10 ++++++---- Changelog.md | 1 + 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/.github/workflows/test_ci.yml b/.github/workflows/test_ci.yml index 00bd443595..96c5c9fedd 100644 --- a/.github/workflows/test_ci.yml +++ b/.github/workflows/test_ci.yml @@ -94,11 +94,13 @@ jobs: - name: Install chromedriver uses: nanasess/setup-chromedriver@v2 - name: Run chromedriver - run: chromedriver --whitelisted-ips & + run: chromedriver --port=9515 --whitelisted-ips & - name: Run rspec tests - run: | - bundle exec rspec - bundle exec rspec spec/system + run: bundle exec rspec + env: + MARKUS__PYTHON: ./venv/bin/python3 + - name: Run rspec system tests + run: bundle exec rspec spec/system env: MARKUS__PYTHON: ./venv/bin/python3 - name: Coveralls Parallel (rspec) diff --git a/Changelog.md b/Changelog.md index c527092b46..f7860a3b41 100644 --- a/Changelog.md +++ b/Changelog.md @@ -12,6 +12,7 @@ - Upgrade Docker environment to use Ruby v3.3 (#7185) - Upgrade to Rails v7.2 (#7185) +- Manually specify chromedriver port number in Github actions (#7209) ## [v2.5.1] From 812d6b01b1738883c22564e98bd237f59f9aff4d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 1 Sep 2024 09:43:12 -0400 Subject: [PATCH 009/102] build(deps-dev): bump webpack from 5.93.0 to 5.94.0 (#7190) Bumps [webpack](https://github.com/webpack/webpack) from 5.93.0 to 5.94.0. - [Release notes](https://github.com/webpack/webpack/releases) - [Commits](https://github.com/webpack/webpack/compare/v5.93.0...v5.94.0) --- updated-dependencies: - dependency-name: webpack dependency-type: direct:development ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 60 +++++++---------------------------------------- package.json | 2 +- 2 files changed, 10 insertions(+), 52 deletions(-) diff --git a/package-lock.json b/package-lock.json index 182a4b803f..39a4b2c578 100644 --- a/package-lock.json +++ b/package-lock.json @@ -65,7 +65,7 @@ "mini-css-extract-plugin": "^2.9.0", "sass": "^1.77.8", "sass-loader": "^16.0.0", - "webpack": "^5.93.0", + "webpack": "^5.94.0", "webpack-cli": "^5.1.4", "webpack-merge": "^5.10.0" } @@ -3260,26 +3260,6 @@ "@babel/types": "^7.20.7" } }, - "node_modules/@types/eslint": { - "version": "8.4.5", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.5.tgz", - "integrity": "sha512-dhsC09y1gpJWnK+Ff4SGvCuSnk9DaU0BJZSzOwa6GVSg65XtTugLBITDAAzRU5duGBoXBHpdR/9jHGxJjNflJQ==", - "dev": true, - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "node_modules/@types/eslint-scope": { - "version": "3.7.4", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", - "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", - "dev": true, - "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, "node_modules/@types/estree": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", @@ -11415,12 +11395,11 @@ } }, "node_modules/webpack": { - "version": "5.93.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.93.0.tgz", - "integrity": "sha512-Y0m5oEY1LRuwly578VqluorkXbvXKh7U3rLoQCEO04M97ScRr44afGVkI0FQFsXzysk5OgFAxjZAb9rsGQVihA==", + "version": "5.94.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.94.0.tgz", + "integrity": "sha512-KcsGn50VT+06JH/iunZJedYGUJS5FGjow8wb9c0v5n1Om8O1g4L6LjtfxwlXIATopoQu+vOXXa7gYisWxCoPyg==", "dev": true, "dependencies": { - "@types/eslint-scope": "^3.7.3", "@types/estree": "^1.0.5", "@webassemblyjs/ast": "^1.12.1", "@webassemblyjs/wasm-edit": "^1.12.1", @@ -11429,7 +11408,7 @@ "acorn-import-attributes": "^1.9.5", "browserslist": "^4.21.10", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.17.0", + "enhanced-resolve": "^5.17.1", "es-module-lexer": "^1.2.1", "eslint-scope": "5.1.1", "events": "^3.2.0", @@ -14146,26 +14125,6 @@ "@babel/types": "^7.20.7" } }, - "@types/eslint": { - "version": "8.4.5", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.5.tgz", - "integrity": "sha512-dhsC09y1gpJWnK+Ff4SGvCuSnk9DaU0BJZSzOwa6GVSg65XtTugLBITDAAzRU5duGBoXBHpdR/9jHGxJjNflJQ==", - "dev": true, - "requires": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "@types/eslint-scope": { - "version": "3.7.4", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", - "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", - "dev": true, - "requires": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, "@types/estree": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", @@ -20175,12 +20134,11 @@ "dev": true }, "webpack": { - "version": "5.93.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.93.0.tgz", - "integrity": "sha512-Y0m5oEY1LRuwly578VqluorkXbvXKh7U3rLoQCEO04M97ScRr44afGVkI0FQFsXzysk5OgFAxjZAb9rsGQVihA==", + "version": "5.94.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.94.0.tgz", + "integrity": "sha512-KcsGn50VT+06JH/iunZJedYGUJS5FGjow8wb9c0v5n1Om8O1g4L6LjtfxwlXIATopoQu+vOXXa7gYisWxCoPyg==", "dev": true, "requires": { - "@types/eslint-scope": "^3.7.3", "@types/estree": "^1.0.5", "@webassemblyjs/ast": "^1.12.1", "@webassemblyjs/wasm-edit": "^1.12.1", @@ -20189,7 +20147,7 @@ "acorn-import-attributes": "^1.9.5", "browserslist": "^4.21.10", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.17.0", + "enhanced-resolve": "^5.17.1", "es-module-lexer": "^1.2.1", "eslint-scope": "5.1.1", "events": "^3.2.0", diff --git a/package.json b/package.json index 2b14aba7b8..3069ed4038 100644 --- a/package.json +++ b/package.json @@ -60,7 +60,7 @@ "mini-css-extract-plugin": "^2.9.0", "sass": "^1.77.8", "sass-loader": "^16.0.0", - "webpack": "^5.93.0", + "webpack": "^5.94.0", "webpack-cli": "^5.1.4", "webpack-merge": "^5.10.0" }, From d358d499b742770f96961d602a1e32ba2ad6a60d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 1 Sep 2024 14:15:46 +0000 Subject: [PATCH 010/102] build(deps): bump playwright from 1.45.1 to 1.46.0 (#7191) Bumps [playwright](https://github.com/Microsoft/playwright-python) from 1.45.1 to 1.46.0. - [Release notes](https://github.com/Microsoft/playwright-python/releases) - [Commits](https://github.com/Microsoft/playwright-python/compare/v1.45.1...v1.46.0) --- updated-dependencies: - dependency-name: playwright dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- requirements-jupyter.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements-jupyter.txt b/requirements-jupyter.txt index 398e2c8d60..3cf993f049 100644 --- a/requirements-jupyter.txt +++ b/requirements-jupyter.txt @@ -1,3 +1,3 @@ # TODO: replace requirements files with Pipfile file (when it is stable and supported by pip) nbconvert==7.16.4 -playwright==1.45.1 +playwright==1.46.0 From b57facedf41cab6d6cce7f278d7baf39a6821355 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 1 Sep 2024 14:16:26 +0000 Subject: [PATCH 011/102] build(deps-dev): bump rspec-rails from 6.1.3 to 6.1.4 (#7195) Bumps [rspec-rails](https://github.com/rspec/rspec-rails) from 6.1.3 to 6.1.4. - [Changelog](https://github.com/rspec/rspec-rails/blob/main/Changelog.md) - [Commits](https://github.com/rspec/rspec-rails/compare/v6.1.3...v6.1.4) --- updated-dependencies: - dependency-name: rspec-rails dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile | 2 +- Gemfile.lock | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Gemfile b/Gemfile index 1fc8abfb3a..93c80d348b 100644 --- a/Gemfile +++ b/Gemfile @@ -107,7 +107,7 @@ group :development, :test do gem 'capybara' gem 'debug', '>= 1.0.0' gem 'i18n-tasks', require: false - gem 'rspec-rails', '~> 6.1.3' + gem 'rspec-rails', '~> 6.1.4' gem 'selenium-webdriver' end diff --git a/Gemfile.lock b/Gemfile.lock index cf03f9a92a..52799f25e1 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -252,7 +252,7 @@ GEM matrix (0.4.2) mini_mime (1.1.5) mini_portile2 (2.8.7) - minitest (5.24.1) + minitest (5.25.1) mono_logger (1.1.2) msgpack (1.7.2) multi_json (1.15.0) @@ -388,13 +388,13 @@ GEM rqrcode_core (1.2.0) rspec-core (3.13.0) rspec-support (~> 3.13.0) - rspec-expectations (3.13.1) + rspec-expectations (3.13.2) diff-lcs (>= 1.2.0, < 2.0) rspec-support (~> 3.13.0) rspec-mocks (3.13.1) diff-lcs (>= 1.2.0, < 2.0) rspec-support (~> 3.13.0) - rspec-rails (6.1.3) + rspec-rails (6.1.4) actionpack (>= 6.1) activesupport (>= 6.1) railties (>= 6.1) @@ -449,7 +449,7 @@ GEM unicode-display_width (>= 1.1.1, < 3) terser (1.2.3) execjs (>= 0.3.0, < 3) - thor (1.3.1) + thor (1.3.2) tilt (2.3.0) time-warp (1.0.15) timeout (0.4.1) @@ -533,7 +533,7 @@ DEPENDENCIES resque resque-scheduler rmagick (~> 6.0.1) - rspec-rails (~> 6.1.3) + rspec-rails (~> 6.1.4) rtesseract rubyzip rugged From 785b790bce26963989a001cd9d9e264889fb9531 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 1 Sep 2024 14:17:51 +0000 Subject: [PATCH 012/102] build(deps-dev): bump sass-loader from 16.0.0 to 16.0.1 (#7205) Bumps [sass-loader](https://github.com/webpack-contrib/sass-loader) from 16.0.0 to 16.0.1. - [Release notes](https://github.com/webpack-contrib/sass-loader/releases) - [Changelog](https://github.com/webpack-contrib/sass-loader/blob/master/CHANGELOG.md) - [Commits](https://github.com/webpack-contrib/sass-loader/compare/v16.0.0...v16.0.1) --- updated-dependencies: - dependency-name: sass-loader dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 39a4b2c578..bb3f2c4ab4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -64,7 +64,7 @@ "jsdom-worker": "^0.3.0", "mini-css-extract-plugin": "^2.9.0", "sass": "^1.77.8", - "sass-loader": "^16.0.0", + "sass-loader": "^16.0.1", "webpack": "^5.94.0", "webpack-cli": "^5.1.4", "webpack-merge": "^5.10.0" @@ -10332,9 +10332,9 @@ } }, "node_modules/sass-loader": { - "version": "16.0.0", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-16.0.0.tgz", - "integrity": "sha512-n13Z+3rU9A177dk4888czcVFiC8CL9dii4qpXWUg3YIIgZEvi9TCFKjOQcbK0kJM7DJu9VucrZFddvNfYCPwtw==", + "version": "16.0.1", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-16.0.1.tgz", + "integrity": "sha512-xACl1ToTsKnL9Ce5yYpRxrLj9QUDCnwZNhzpC7tKiFyA8zXsd3Ap+HGVnbCgkdQcm43E+i6oKAWBsvGA6ZoiMw==", "dev": true, "dependencies": { "neo-async": "^2.6.2" @@ -19362,9 +19362,9 @@ } }, "sass-loader": { - "version": "16.0.0", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-16.0.0.tgz", - "integrity": "sha512-n13Z+3rU9A177dk4888czcVFiC8CL9dii4qpXWUg3YIIgZEvi9TCFKjOQcbK0kJM7DJu9VucrZFddvNfYCPwtw==", + "version": "16.0.1", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-16.0.1.tgz", + "integrity": "sha512-xACl1ToTsKnL9Ce5yYpRxrLj9QUDCnwZNhzpC7tKiFyA8zXsd3Ap+HGVnbCgkdQcm43E+i6oKAWBsvGA6ZoiMw==", "dev": true, "requires": { "neo-async": "^2.6.2" diff --git a/package.json b/package.json index 3069ed4038..d3bccfb677 100644 --- a/package.json +++ b/package.json @@ -59,7 +59,7 @@ "jsdom-worker": "^0.3.0", "mini-css-extract-plugin": "^2.9.0", "sass": "^1.77.8", - "sass-loader": "^16.0.0", + "sass-loader": "^16.0.1", "webpack": "^5.94.0", "webpack-cli": "^5.1.4", "webpack-merge": "^5.10.0" From c96915c725a9bd497118de54ca99b78d64274556 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 1 Sep 2024 14:57:29 +0000 Subject: [PATCH 013/102] build(deps-dev): bump brakeman from 6.1.2 to 6.2.1 (#7193) Bumps [brakeman](https://github.com/presidentbeef/brakeman) from 6.1.2 to 6.2.1. - [Release notes](https://github.com/presidentbeef/brakeman/releases) - [Changelog](https://github.com/presidentbeef/brakeman/blob/main/CHANGES.md) - [Commits](https://github.com/presidentbeef/brakeman/compare/v6.1.2...v6.2.1) --- updated-dependencies: - dependency-name: brakeman dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 52799f25e1..45044c95bf 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -103,7 +103,7 @@ GEM debug_inspector (>= 1.2.0) bootsnap (1.18.3) msgpack (~> 1.2) - brakeman (6.1.2) + brakeman (6.2.1) racc browser (5.3.1) builder (3.3.0) From b7b21fa001d9b66433b22d5a47a871817a888d57 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 1 Sep 2024 14:58:22 +0000 Subject: [PATCH 014/102] build(deps-dev): bump selenium-webdriver from 4.23.0 to 4.24.0 (#7199) Bumps [selenium-webdriver](https://github.com/SeleniumHQ/selenium) from 4.23.0 to 4.24.0. - [Release notes](https://github.com/SeleniumHQ/selenium/releases) - [Changelog](https://github.com/SeleniumHQ/selenium/blob/trunk/rb/CHANGES) - [Commits](https://github.com/SeleniumHQ/selenium/compare/selenium-4.23.0...selenium-4.24.0) --- updated-dependencies: - dependency-name: selenium-webdriver dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 45044c95bf..a2552c2fd9 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -413,7 +413,7 @@ GEM fugit (~> 1.1, >= 1.1.6) rugged (1.7.2) securerandom (0.3.1) - selenium-webdriver (4.23.0) + selenium-webdriver (4.24.0) base64 (~> 0.2) logger (~> 1.4) rexml (~> 3.2, >= 3.2.5) From 9a0a0dd1d0d68822323e14d2a4eeff6ddbc31348 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 1 Sep 2024 15:09:13 +0000 Subject: [PATCH 015/102] build(deps-dev): bump webpack-merge from 5.10.0 to 6.0.1 (#7203) Bumps [webpack-merge](https://github.com/survivejs/webpack-merge) from 5.10.0 to 6.0.1. - [Changelog](https://github.com/survivejs/webpack-merge/blob/develop/CHANGELOG.md) - [Commits](https://github.com/survivejs/webpack-merge/compare/v5.10.0...v6.0.1) --- updated-dependencies: - dependency-name: webpack-merge dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 49 +++++++++++++++++++++++++++++++++++------------ package.json | 2 +- 2 files changed, 38 insertions(+), 13 deletions(-) diff --git a/package-lock.json b/package-lock.json index bb3f2c4ab4..78935c012f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -67,7 +67,7 @@ "sass-loader": "^16.0.1", "webpack": "^5.94.0", "webpack-cli": "^5.1.4", - "webpack-merge": "^5.10.0" + "webpack-merge": "^6.0.1" } }, "node_modules/@adobe/css-tools": { @@ -11494,7 +11494,7 @@ "node": ">=14" } }, - "node_modules/webpack-merge": { + "node_modules/webpack-cli/node_modules/webpack-merge": { "version": "5.10.0", "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", @@ -11508,6 +11508,20 @@ "node": ">=10.0.0" } }, + "node_modules/webpack-merge": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-6.0.1.tgz", + "integrity": "sha512-hXXvrjtx2PLYx4qruKl+kyRSLc52V+cCvMxRjmKwoA+CBbbF5GfIBtR6kCvl0fYGqTUPKB+1ktVmTHqMOzgCBg==", + "dev": true, + "dependencies": { + "clone-deep": "^4.0.1", + "flat": "^5.0.2", + "wildcard": "^2.0.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, "node_modules/webpack-sources": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", @@ -11629,9 +11643,9 @@ } }, "node_modules/wildcard": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", - "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", + "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", "dev": true }, "node_modules/word-wrap": { @@ -20203,18 +20217,29 @@ "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", "dev": true + }, + "webpack-merge": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", + "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", + "dev": true, + "requires": { + "clone-deep": "^4.0.1", + "flat": "^5.0.2", + "wildcard": "^2.0.0" + } } } }, "webpack-merge": { - "version": "5.10.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", - "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-6.0.1.tgz", + "integrity": "sha512-hXXvrjtx2PLYx4qruKl+kyRSLc52V+cCvMxRjmKwoA+CBbbF5GfIBtR6kCvl0fYGqTUPKB+1ktVmTHqMOzgCBg==", "dev": true, "requires": { "clone-deep": "^4.0.1", "flat": "^5.0.2", - "wildcard": "^2.0.0" + "wildcard": "^2.0.1" } }, "webpack-sources": { @@ -20293,9 +20318,9 @@ } }, "wildcard": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", - "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", + "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", "dev": true }, "word-wrap": { diff --git a/package.json b/package.json index d3bccfb677..3ed2857238 100644 --- a/package.json +++ b/package.json @@ -62,7 +62,7 @@ "sass-loader": "^16.0.1", "webpack": "^5.94.0", "webpack-cli": "^5.1.4", - "webpack-merge": "^5.10.0" + "webpack-merge": "^6.0.1" }, "browserslist": [ "defaults" From 031b61f17ad276ae5efaa81d08245817bb705232 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 1 Sep 2024 15:24:36 +0000 Subject: [PATCH 016/102] build(deps-dev): bump @testing-library/jest-dom from 6.4.8 to 6.5.0 (#7204) Bumps [@testing-library/jest-dom](https://github.com/testing-library/jest-dom) from 6.4.8 to 6.5.0. - [Release notes](https://github.com/testing-library/jest-dom/releases) - [Changelog](https://github.com/testing-library/jest-dom/blob/main/CHANGELOG.md) - [Commits](https://github.com/testing-library/jest-dom/compare/v6.4.8...v6.5.0) --- updated-dependencies: - dependency-name: "@testing-library/jest-dom" dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 16 +++++++--------- package.json | 2 +- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/package-lock.json b/package-lock.json index 78935c012f..f00a4515c5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -49,7 +49,7 @@ "@babel/plugin-transform-runtime": "^7.24.7", "@babel/preset-env": "^7.25.3", "@babel/preset-react": "^7.24.7", - "@testing-library/jest-dom": "^6.4.8", + "@testing-library/jest-dom": "^6.5.0", "@testing-library/react": "^12.1.5", "babel-jest": "^29.4.3", "babel-loader": "^9.1.3", @@ -3093,13 +3093,12 @@ } }, "node_modules/@testing-library/jest-dom": { - "version": "6.4.8", - "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.4.8.tgz", - "integrity": "sha512-JD0G+Zc38f5MBHA4NgxQMR5XtO5Jx9g86jqturNTt2WUfRmLDIY7iKkWHDCCTiDuFMre6nxAD5wHw9W5kI4rGw==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.5.0.tgz", + "integrity": "sha512-xGGHpBXYSHUUr6XsKBfs85TWlYKpTc37cSBBVrXcib2MkHLboWlkClhWF37JKlDb9KEq3dHs+f2xR7XJEWGBxA==", "dev": true, "dependencies": { "@adobe/css-tools": "^4.4.0", - "@babel/runtime": "^7.9.2", "aria-query": "^5.0.0", "chalk": "^3.0.0", "css.escape": "^1.5.1", @@ -14003,13 +14002,12 @@ } }, "@testing-library/jest-dom": { - "version": "6.4.8", - "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.4.8.tgz", - "integrity": "sha512-JD0G+Zc38f5MBHA4NgxQMR5XtO5Jx9g86jqturNTt2WUfRmLDIY7iKkWHDCCTiDuFMre6nxAD5wHw9W5kI4rGw==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.5.0.tgz", + "integrity": "sha512-xGGHpBXYSHUUr6XsKBfs85TWlYKpTc37cSBBVrXcib2MkHLboWlkClhWF37JKlDb9KEq3dHs+f2xR7XJEWGBxA==", "dev": true, "requires": { "@adobe/css-tools": "^4.4.0", - "@babel/runtime": "^7.9.2", "aria-query": "^5.0.0", "chalk": "^3.0.0", "css.escape": "^1.5.1", diff --git a/package.json b/package.json index 3ed2857238..10d29808d8 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,7 @@ "@babel/plugin-transform-runtime": "^7.24.7", "@babel/preset-env": "^7.25.3", "@babel/preset-react": "^7.24.7", - "@testing-library/jest-dom": "^6.4.8", + "@testing-library/jest-dom": "^6.5.0", "@testing-library/react": "^12.1.5", "babel-jest": "^29.4.3", "babel-loader": "^9.1.3", From 56e77d2c13ebd25cee97954bc6218f8db9379bc1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 1 Sep 2024 15:24:58 +0000 Subject: [PATCH 017/102] build(deps): bump tslib from 2.6.3 to 2.7.0 (#7208) Bumps [tslib](https://github.com/Microsoft/tslib) from 2.6.3 to 2.7.0. - [Release notes](https://github.com/Microsoft/tslib/releases) - [Commits](https://github.com/Microsoft/tslib/compare/v2.6.3...v2.7.0) --- updated-dependencies: - dependency-name: tslib dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index f00a4515c5..eecad29649 100644 --- a/package-lock.json +++ b/package-lock.json @@ -41,7 +41,7 @@ "react-modal": "^3.16.1", "react-table": "^6.11.5", "react-tabs": "^4.3.0", - "tslib": "^2.6.3", + "tslib": "^2.7.0", "ui-contextmenu": "^1.18.1" }, "devDependencies": { @@ -11036,9 +11036,9 @@ } }, "node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==" }, "node_modules/type-check": { "version": "0.3.2", @@ -19874,9 +19874,9 @@ } }, "tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==" }, "type-check": { "version": "0.3.2", diff --git a/package.json b/package.json index 10d29808d8..349d6c6df8 100644 --- a/package.json +++ b/package.json @@ -36,7 +36,7 @@ "react-modal": "^3.16.1", "react-table": "^6.11.5", "react-tabs": "^4.3.0", - "tslib": "^2.6.3", + "tslib": "^2.7.0", "ui-contextmenu": "^1.18.1" }, "devDependencies": { From 6e6b54c1f60887b3f66ef6be1a63ba9337e35e5a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 1 Sep 2024 15:25:30 +0000 Subject: [PATCH 018/102] build(deps-dev): bump bootsnap from 1.18.3 to 1.18.4 (#7197) Bumps [bootsnap](https://github.com/Shopify/bootsnap) from 1.18.3 to 1.18.4. - [Changelog](https://github.com/Shopify/bootsnap/blob/main/CHANGELOG.md) - [Commits](https://github.com/Shopify/bootsnap/compare/v1.18.3...v1.18.4) --- updated-dependencies: - dependency-name: bootsnap dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index a2552c2fd9..8abfb8c65c 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -101,7 +101,7 @@ GEM bigdecimal (3.1.8) binding_of_caller (1.0.1) debug_inspector (>= 1.2.0) - bootsnap (1.18.3) + bootsnap (1.18.4) msgpack (~> 1.2) brakeman (6.2.1) racc From 8bed3fe5c096361d270ef357ecbfe4c98668ab55 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 1 Sep 2024 15:36:16 +0000 Subject: [PATCH 019/102] build(deps): bump csv from 3.2.8 to 3.3.0 (#7192) Bumps [csv](https://github.com/ruby/csv) from 3.2.8 to 3.3.0. - [Release notes](https://github.com/ruby/csv/releases) - [Changelog](https://github.com/ruby/csv/blob/master/NEWS.md) - [Commits](https://github.com/ruby/csv/compare/v3.2.8...v3.3.0) --- updated-dependencies: - dependency-name: csv dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 8abfb8c65c..6ec932587e 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -136,7 +136,7 @@ GEM crass (1.0.6) cssbundling-rails (1.4.1) railties (>= 6.0.0) - csv (3.2.8) + csv (3.3.0) date (3.3.4) debug (1.9.2) irb (~> 1.10) From 0b1b76146240fc74cddc7ea8bdb01ea9a23c9d8e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 1 Sep 2024 15:52:31 +0000 Subject: [PATCH 020/102] build(deps): bump autoprefixer-rails from 10.4.16.0 to 10.4.19.0 (#7198) Bumps [autoprefixer-rails](https://github.com/ai/autoprefixer-rails) from 10.4.16.0 to 10.4.19.0. - [Changelog](https://github.com/ai/autoprefixer-rails/blob/master/CHANGELOG.md) - [Commits](https://github.com/ai/autoprefixer-rails/compare/10.4.16.0...10.4.19.0) --- updated-dependencies: - dependency-name: autoprefixer-rails dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 6ec932587e..490584d6b7 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -90,7 +90,7 @@ GEM addressable (2.8.6) public_suffix (>= 2.0.2, < 6.0) ast (2.4.2) - autoprefixer-rails (10.4.16.0) + autoprefixer-rails (10.4.19.0) execjs (~> 2) awesome_print (1.9.2) base64 (0.2.0) From ac68ac50dc13a38aa28e73dc669a6c17906f44e8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 1 Sep 2024 15:59:26 +0000 Subject: [PATCH 021/102] build(deps): bump pdfjs-dist from 4.3.136 to 4.5.136 (#7207) Bumps [pdfjs-dist](https://github.com/mozilla/pdf.js) from 4.3.136 to 4.5.136. - [Release notes](https://github.com/mozilla/pdf.js/releases) - [Commits](https://github.com/mozilla/pdf.js/compare/v4.3.136...v4.5.136) --- updated-dependencies: - dependency-name: pdfjs-dist dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 30 +++++++++++++++--------------- package.json | 2 +- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/package-lock.json b/package-lock.json index eecad29649..d79f6af3f4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -30,7 +30,7 @@ "mime": "^4.0.4", "moment": "^2.30.1", "mousetrap": "^1.6.5", - "pdfjs-dist": "^4.3.136", + "pdfjs-dist": "^4.5.136", "prismjs": "^1.29.0", "prop-types": "^15.8.1", "react": "^16.14.0", @@ -9480,24 +9480,24 @@ "dev": true }, "node_modules/path2d": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/path2d/-/path2d-0.2.0.tgz", - "integrity": "sha512-KdPAykQX6kmLSOO6Jpu2KNcCED7CKjmaBNGGNuctOsG0hgYO1OdYQaan6cYXJiG0WmXOwZZPILPBimu5QAIw3A==", + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/path2d/-/path2d-0.2.1.tgz", + "integrity": "sha512-Fl2z/BHvkTNvkuBzYTpTuirHZg6wW9z8+4SND/3mDTEcYbbNKWAy21dz9D3ePNNwrrK8pqZO5vLPZ1hLF6T7XA==", "optional": true, "engines": { "node": ">=6" } }, "node_modules/pdfjs-dist": { - "version": "4.3.136", - "resolved": "https://registry.npmjs.org/pdfjs-dist/-/pdfjs-dist-4.3.136.tgz", - "integrity": "sha512-gzfnt1qc4yA+U46golPGYtU4WM2ssqP2MvFjKga8GEKOrEnzRPrA/9jogLLPYHiA3sGBPJ+p7BdAq+ytmw3jEg==", + "version": "4.5.136", + "resolved": "https://registry.npmjs.org/pdfjs-dist/-/pdfjs-dist-4.5.136.tgz", + "integrity": "sha512-V1BALcAN/FmxBEShLxoP73PlQZAZtzlaNfRbRhJrKvXzjLC5VaIlBAQUJuWP8iaYUmIdmdLHmt3E2TBglxOm3w==", "engines": { "node": ">=18" }, "optionalDependencies": { "canvas": "^2.11.2", - "path2d": "^0.2.0" + "path2d": "^0.2.1" } }, "node_modules/performance-now": { @@ -18760,18 +18760,18 @@ "dev": true }, "path2d": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/path2d/-/path2d-0.2.0.tgz", - "integrity": "sha512-KdPAykQX6kmLSOO6Jpu2KNcCED7CKjmaBNGGNuctOsG0hgYO1OdYQaan6cYXJiG0WmXOwZZPILPBimu5QAIw3A==", + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/path2d/-/path2d-0.2.1.tgz", + "integrity": "sha512-Fl2z/BHvkTNvkuBzYTpTuirHZg6wW9z8+4SND/3mDTEcYbbNKWAy21dz9D3ePNNwrrK8pqZO5vLPZ1hLF6T7XA==", "optional": true }, "pdfjs-dist": { - "version": "4.3.136", - "resolved": "https://registry.npmjs.org/pdfjs-dist/-/pdfjs-dist-4.3.136.tgz", - "integrity": "sha512-gzfnt1qc4yA+U46golPGYtU4WM2ssqP2MvFjKga8GEKOrEnzRPrA/9jogLLPYHiA3sGBPJ+p7BdAq+ytmw3jEg==", + "version": "4.5.136", + "resolved": "https://registry.npmjs.org/pdfjs-dist/-/pdfjs-dist-4.5.136.tgz", + "integrity": "sha512-V1BALcAN/FmxBEShLxoP73PlQZAZtzlaNfRbRhJrKvXzjLC5VaIlBAQUJuWP8iaYUmIdmdLHmt3E2TBglxOm3w==", "requires": { "canvas": "^2.11.2", - "path2d": "^0.2.0" + "path2d": "^0.2.1" } }, "performance-now": { diff --git a/package.json b/package.json index 349d6c6df8..fca0933de4 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,7 @@ "mime": "^4.0.4", "moment": "^2.30.1", "mousetrap": "^1.6.5", - "pdfjs-dist": "^4.3.136", + "pdfjs-dist": "^4.5.136", "prismjs": "^1.29.0", "prop-types": "^15.8.1", "react": "^16.14.0", From 44d63e3f0b3d7b90ba8f3517def4539001d4ffbc Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 1 Sep 2024 16:02:44 +0000 Subject: [PATCH 022/102] build(deps): bump chart.js from 4.4.3 to 4.4.4 (#7206) Bumps [chart.js](https://github.com/chartjs/Chart.js) from 4.4.3 to 4.4.4. - [Release notes](https://github.com/chartjs/Chart.js/releases) - [Commits](https://github.com/chartjs/Chart.js/compare/v4.4.3...v4.4.4) --- updated-dependencies: - dependency-name: chart.js dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index d79f6af3f4..ca8b1b323f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,7 +16,7 @@ "@rails/ujs": "^7.1.3-4", "@rjsf/core": "^5.19.4", "@rjsf/validator-ajv8": "^5.19.4", - "chart.js": "^4.4.3", + "chart.js": "^4.4.4", "core-js": "^3.37.1", "dompurify": "^3.1.6", "flatpickr": "^4.6.13", @@ -4371,9 +4371,9 @@ } }, "node_modules/chart.js": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.4.3.tgz", - "integrity": "sha512-qK1gkGSRYcJzqrrzdR6a+I0vQ4/R+SoODXyAjscQ/4mzuNzySaMCd+hyVxitSY1+L2fjPD1Gbn+ibNqRmwQeLw==", + "version": "4.4.4", + "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.4.4.tgz", + "integrity": "sha512-emICKGBABnxhMjUjlYRR12PmOXhJ2eJjEHL2/dZlWjxRAZT1D8xplLFq5M0tMQK8ja+wBS/tuVEJB5C6r7VxJA==", "dependencies": { "@kurkle/color": "^0.3.0" }, @@ -15008,9 +15008,9 @@ "dev": true }, "chart.js": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.4.3.tgz", - "integrity": "sha512-qK1gkGSRYcJzqrrzdR6a+I0vQ4/R+SoODXyAjscQ/4mzuNzySaMCd+hyVxitSY1+L2fjPD1Gbn+ibNqRmwQeLw==", + "version": "4.4.4", + "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.4.4.tgz", + "integrity": "sha512-emICKGBABnxhMjUjlYRR12PmOXhJ2eJjEHL2/dZlWjxRAZT1D8xplLFq5M0tMQK8ja+wBS/tuVEJB5C6r7VxJA==", "requires": { "@kurkle/color": "^0.3.0" } diff --git a/package.json b/package.json index fca0933de4..6b213572ee 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,7 @@ "@rails/ujs": "^7.1.3-4", "@rjsf/core": "^5.19.4", "@rjsf/validator-ajv8": "^5.19.4", - "chart.js": "^4.4.3", + "chart.js": "^4.4.4", "core-js": "^3.37.1", "dompurify": "^3.1.6", "flatpickr": "^4.6.13", From 68208083e928ef90e30ebc8564449cb2cf092779 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 1 Sep 2024 16:25:40 +0000 Subject: [PATCH 023/102] build(deps): bump the babel group with 3 updates (#7200) Bumps the babel group with 3 updates: [@babel/runtime](https://github.com/babel/babel/tree/HEAD/packages/babel-runtime), [@babel/plugin-transform-runtime](https://github.com/babel/babel/tree/HEAD/packages/babel-plugin-transform-runtime) and [@babel/preset-env](https://github.com/babel/babel/tree/HEAD/packages/babel-preset-env). Updates `@babel/runtime` from 7.25.0 to 7.25.6 - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md) - [Commits](https://github.com/babel/babel/commits/v7.25.6/packages/babel-runtime) Updates `@babel/plugin-transform-runtime` from 7.24.7 to 7.25.4 - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md) - [Commits](https://github.com/babel/babel/commits/v7.25.4/packages/babel-plugin-transform-runtime) Updates `@babel/preset-env` from 7.25.3 to 7.25.4 - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md) - [Commits](https://github.com/babel/babel/commits/v7.25.4/packages/babel-preset-env) --- updated-dependencies: - dependency-name: "@babel/runtime" dependency-type: direct:production update-type: version-update:semver-patch dependency-group: babel - dependency-name: "@babel/plugin-transform-runtime" dependency-type: direct:development update-type: version-update:semver-minor dependency-group: babel - dependency-name: "@babel/preset-env" dependency-type: direct:development update-type: version-update:semver-patch dependency-group: babel ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 395 +++++++++++++++++++--------------------------- package.json | 6 +- 2 files changed, 166 insertions(+), 235 deletions(-) diff --git a/package-lock.json b/package-lock.json index ca8b1b323f..6dce01abb1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6,7 +6,7 @@ "": { "name": "MarkUs", "dependencies": { - "@babel/runtime": "^7.25.0", + "@babel/runtime": "^7.25.6", "@fortawesome/fontawesome-svg-core": "^6.6.0", "@fortawesome/free-brands-svg-icons": "^6.6.0", "@fortawesome/free-regular-svg-icons": "^6.6.0", @@ -46,8 +46,8 @@ }, "devDependencies": { "@babel/core": "^7.25.2", - "@babel/plugin-transform-runtime": "^7.24.7", - "@babel/preset-env": "^7.25.3", + "@babel/plugin-transform-runtime": "^7.25.4", + "@babel/preset-env": "^7.25.4", "@babel/preset-react": "^7.24.7", "@testing-library/jest-dom": "^6.5.0", "@testing-library/react": "^12.1.5", @@ -103,9 +103,9 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.2.tgz", - "integrity": "sha512-bYcppcpKBvX4znYaPEeFau03bp89ShqNMLs+rmdptMw+heSZh9+z84d2YG+K7cYLbWwzdjtDoW/uqZmPjulClQ==", + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.4.tgz", + "integrity": "sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ==", "dev": true, "engines": { "node": ">=6.9.0" @@ -148,12 +148,12 @@ "dev": true }, "node_modules/@babel/generator": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.0.tgz", - "integrity": "sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw==", + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.6.tgz", + "integrity": "sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw==", "dev": true, "dependencies": { - "@babel/types": "^7.25.0", + "@babel/types": "^7.25.6", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^2.5.1" @@ -233,19 +233,17 @@ "dev": true }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.7.tgz", - "integrity": "sha512-kTkaDl7c9vO80zeX1rJxnuRpEsD5tA81yh11X1gQo+PhSti3JS+7qeZo9U4RHobKRiFPKaGK3svUAeb8D0Q7eg==", + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.4.tgz", + "integrity": "sha512-ro/bFs3/84MDgDmMwbcHgDa8/E6J3QKNTk4xJJnVeFtGE+tL0K26E3pNxhYz2b67fJpt7Aphw5XcploKXuCvCQ==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-environment-visitor": "^7.24.7", - "@babel/helper-function-name": "^7.24.7", - "@babel/helper-member-expression-to-functions": "^7.24.7", + "@babel/helper-member-expression-to-functions": "^7.24.8", "@babel/helper-optimise-call-expression": "^7.24.7", - "@babel/helper-replace-supers": "^7.24.7", + "@babel/helper-replace-supers": "^7.25.0", "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", - "@babel/helper-split-export-declaration": "^7.24.7", + "@babel/traverse": "^7.25.4", "semver": "^6.3.1" }, "engines": { @@ -273,9 +271,9 @@ } }, "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.1.tgz", - "integrity": "sha512-o7SDgTJuvx5vLKD6SFvkydkSMBvahDKGiNJzG22IZYXhiqoe9efY7zocICBgzHV4IRg5wdgl2nEL/tulKIEIbA==", + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz", + "integrity": "sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==", "dev": true, "dependencies": { "@babel/helper-compilation-targets": "^7.22.6", @@ -288,31 +286,6 @@ "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz", - "integrity": "sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==", - "dev": true, - "dependencies": { - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.24.7.tgz", - "integrity": "sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==", - "dev": true, - "dependencies": { - "@babel/template": "^7.24.7", - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/helper-member-expression-to-functions": { "version": "7.24.8", "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.8.tgz", @@ -438,18 +411,6 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz", - "integrity": "sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/helper-string-parser": { "version": "7.24.8", "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", @@ -520,12 +481,12 @@ } }, "node_modules/@babel/parser": { - "version": "7.25.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.3.tgz", - "integrity": "sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw==", + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.6.tgz", + "integrity": "sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==", "dev": true, "dependencies": { - "@babel/types": "^7.25.2" + "@babel/types": "^7.25.6" }, "bin": { "parser": "bin/babel-parser.js" @@ -918,15 +879,15 @@ } }, "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.0.tgz", - "integrity": "sha512-uaIi2FdqzjpAMvVqvB51S42oC2JEVgh0LDsGfZVDysWE8LrJtQC2jvKmOqEYThKyB7bDEb7BP1GYWDm7tABA0Q==", + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.4.tgz", + "integrity": "sha512-jz8cV2XDDTqjKPwVPJBIjORVEmSGYhdRa8e5k5+vN+uwcjSrSxUaebBRa4ko1jqNF2uxyg8G6XYk30Jv285xzg==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.24.8", "@babel/helper-remap-async-to-generator": "^7.25.0", "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/traverse": "^7.25.0" + "@babel/traverse": "^7.25.4" }, "engines": { "node": ">=6.9.0" @@ -983,13 +944,13 @@ } }, "node_modules/@babel/plugin-transform-class-properties": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.7.tgz", - "integrity": "sha512-vKbfawVYayKcSeSR5YYzzyXvsDFWU2mD8U5TFeXtbCPLFUqe7GyCgvO6XDHzje862ODrOwy6WCPmKeWHbCFJ4w==", + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.4.tgz", + "integrity": "sha512-nZeZHyCWPfjkdU5pA/uHiTaDAFUEqkpzf1YoQT2NeSynCGYq9rxfyI3XpQbfx/a0hSnFH6TGlEXvae5Vi7GD8g==", "dev": true, "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-create-class-features-plugin": "^7.25.4", + "@babel/helper-plugin-utils": "^7.24.8" }, "engines": { "node": ">=6.9.0" @@ -1016,16 +977,16 @@ } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.0.tgz", - "integrity": "sha512-xyi6qjr/fYU304fiRwFbekzkqVJZ6A7hOjWZd+89FVcBqPV3S9Wuozz82xdpLspckeaafntbzglaW4pqpzvtSw==", + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.4.tgz", + "integrity": "sha512-oexUfaQle2pF/b6E0dwsxQtAol9TLSO88kQvym6HHBWFliV2lGdrPieX+WgMRLSJDVzdYywk7jXbLPuO2KLTLg==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-compilation-targets": "^7.24.8", + "@babel/helper-compilation-targets": "^7.25.2", "@babel/helper-plugin-utils": "^7.24.8", "@babel/helper-replace-supers": "^7.25.0", - "@babel/traverse": "^7.25.0", + "@babel/traverse": "^7.25.4", "globals": "^11.1.0" }, "engines": { @@ -1469,13 +1430,13 @@ } }, "node_modules/@babel/plugin-transform-private-methods": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.7.tgz", - "integrity": "sha512-COTCOkG2hn4JKGEKBADkA8WNb35TGkkRbI5iT845dB+NyqgO8Hn+ajPbSnIQznneJTa3d30scb6iz/DhH8GsJQ==", + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.4.tgz", + "integrity": "sha512-ao8BG7E2b/URaUQGqN3Tlsg+M3KlHY6rJ1O1gXAEUnZoyNQnvKyH87Kfg+FoxSeyWUB8ISZZsC91C44ZuBFytw==", "dev": true, "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-create-class-features-plugin": "^7.25.4", + "@babel/helper-plugin-utils": "^7.24.8" }, "engines": { "node": ">=6.9.0" @@ -1614,15 +1575,15 @@ } }, "node_modules/@babel/plugin-transform-runtime": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.24.7.tgz", - "integrity": "sha512-YqXjrk4C+a1kZjewqt+Mmu2UuV1s07y8kqcUf4qYLnoqemhR4gRQikhdAhSVJioMjVTu6Mo6pAbaypEA3jY6fw==", + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.25.4.tgz", + "integrity": "sha512-8hsyG+KUYGY0coX6KUCDancA0Vw225KJ2HJO0yCNr1vq5r+lJTleDaJf0K7iOhjw4SWhu03TMBzYTJ9krmzULQ==", "dev": true, "dependencies": { "@babel/helper-module-imports": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.8", "babel-plugin-polyfill-corejs2": "^0.4.10", - "babel-plugin-polyfill-corejs3": "^0.10.1", + "babel-plugin-polyfill-corejs3": "^0.10.6", "babel-plugin-polyfill-regenerator": "^0.6.1", "semver": "^6.3.1" }, @@ -1757,13 +1718,13 @@ } }, "node_modules/@babel/plugin-transform-unicode-sets-regex": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.24.7.tgz", - "integrity": "sha512-2G8aAvF4wy1w/AGZkemprdGMRg5o6zPNhbHVImRz3lss55TYCBd6xStN19rt8XJHq20sqV0JbyWjOWwQRwV/wg==", + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.4.tgz", + "integrity": "sha512-qesBxiWkgN1Q+31xUE9RcMk79eOXXDCv6tfyGMRSs4RGlioSg2WVyQAm07k726cSE56pa+Kb0y9epX2qaXzTvA==", "dev": true, "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-create-regexp-features-plugin": "^7.25.2", + "@babel/helper-plugin-utils": "^7.24.8" }, "engines": { "node": ">=6.9.0" @@ -1773,12 +1734,12 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.25.3", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.25.3.tgz", - "integrity": "sha512-QsYW7UeAaXvLPX9tdVliMJE7MD7M6MLYVTovRTIwhoYQVFHR1rM4wO8wqAezYi3/BpSD+NzVCZ69R6smWiIi8g==", + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.25.4.tgz", + "integrity": "sha512-W9Gyo+KmcxjGahtt3t9fb14vFRWvPpu5pT6GBlovAK6BTBcxgjfVMSQCfJl4oi35ODrxP6xx2Wr8LNST57Mraw==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.25.2", + "@babel/compat-data": "^7.25.4", "@babel/helper-compilation-targets": "^7.25.2", "@babel/helper-plugin-utils": "^7.24.8", "@babel/helper-validator-option": "^7.24.8", @@ -1807,13 +1768,13 @@ "@babel/plugin-syntax-top-level-await": "^7.14.5", "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", "@babel/plugin-transform-arrow-functions": "^7.24.7", - "@babel/plugin-transform-async-generator-functions": "^7.25.0", + "@babel/plugin-transform-async-generator-functions": "^7.25.4", "@babel/plugin-transform-async-to-generator": "^7.24.7", "@babel/plugin-transform-block-scoped-functions": "^7.24.7", "@babel/plugin-transform-block-scoping": "^7.25.0", - "@babel/plugin-transform-class-properties": "^7.24.7", + "@babel/plugin-transform-class-properties": "^7.25.4", "@babel/plugin-transform-class-static-block": "^7.24.7", - "@babel/plugin-transform-classes": "^7.25.0", + "@babel/plugin-transform-classes": "^7.25.4", "@babel/plugin-transform-computed-properties": "^7.24.7", "@babel/plugin-transform-destructuring": "^7.24.8", "@babel/plugin-transform-dotall-regex": "^7.24.7", @@ -1841,7 +1802,7 @@ "@babel/plugin-transform-optional-catch-binding": "^7.24.7", "@babel/plugin-transform-optional-chaining": "^7.24.8", "@babel/plugin-transform-parameters": "^7.24.7", - "@babel/plugin-transform-private-methods": "^7.24.7", + "@babel/plugin-transform-private-methods": "^7.25.4", "@babel/plugin-transform-private-property-in-object": "^7.24.7", "@babel/plugin-transform-property-literals": "^7.24.7", "@babel/plugin-transform-regenerator": "^7.24.7", @@ -1854,10 +1815,10 @@ "@babel/plugin-transform-unicode-escapes": "^7.24.7", "@babel/plugin-transform-unicode-property-regex": "^7.24.7", "@babel/plugin-transform-unicode-regex": "^7.24.7", - "@babel/plugin-transform-unicode-sets-regex": "^7.24.7", + "@babel/plugin-transform-unicode-sets-regex": "^7.25.4", "@babel/preset-modules": "0.1.6-no-external-plugins", "babel-plugin-polyfill-corejs2": "^0.4.10", - "babel-plugin-polyfill-corejs3": "^0.10.4", + "babel-plugin-polyfill-corejs3": "^0.10.6", "babel-plugin-polyfill-regenerator": "^0.6.1", "core-js-compat": "^3.37.1", "semver": "^6.3.1" @@ -1910,9 +1871,9 @@ "dev": true }, "node_modules/@babel/runtime": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.0.tgz", - "integrity": "sha512-7dRy4DwXwtzBrPbZflqxnvfxLF8kdZXPkhymtDeFoFqE6ldzjQFgYTtYIFARcLEYDrqfBfYcZt1WqFxRoyC9Rw==", + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.6.tgz", + "integrity": "sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ==", "dependencies": { "regenerator-runtime": "^0.14.0" }, @@ -1935,16 +1896,16 @@ } }, "node_modules/@babel/traverse": { - "version": "7.25.3", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.3.tgz", - "integrity": "sha512-HefgyP1x754oGCsKmV5reSmtV7IXj/kpaE1XYY+D9G5PvKKoFfSbiS4M77MdjuwlZKDIKFCffq9rPU+H/s3ZdQ==", + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.6.tgz", + "integrity": "sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ==", "dev": true, "dependencies": { "@babel/code-frame": "^7.24.7", - "@babel/generator": "^7.25.0", - "@babel/parser": "^7.25.3", + "@babel/generator": "^7.25.6", + "@babel/parser": "^7.25.6", "@babel/template": "^7.25.0", - "@babel/types": "^7.25.2", + "@babel/types": "^7.25.6", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -1953,9 +1914,9 @@ } }, "node_modules/@babel/types": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.2.tgz", - "integrity": "sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==", + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.6.tgz", + "integrity": "sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==", "dev": true, "dependencies": { "@babel/helper-string-parser": "^7.24.8", @@ -4099,13 +4060,13 @@ } }, "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.10.4", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.4.tgz", - "integrity": "sha512-25J6I8NGfa5YkCDogHRID3fVCadIR8/pGl1/spvCkzb6lVn6SR3ojpx9nOn9iEBcUsjY24AmdKm5khcfKdylcg==", + "version": "0.10.6", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz", + "integrity": "sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==", "dev": true, "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.1", - "core-js-compat": "^3.36.1" + "@babel/helper-define-polyfill-provider": "^0.6.2", + "core-js-compat": "^3.38.0" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" @@ -4639,12 +4600,12 @@ } }, "node_modules/core-js-compat": { - "version": "3.37.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.37.1.tgz", - "integrity": "sha512-9TNiImhKvQqSUkOvk/mMRZzOANTiEVC7WaBNhHcKM7x+/5E1l5NvsysR19zuDQScE8k+kfQXWRN3AtS/eOSHpg==", + "version": "3.38.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.38.1.tgz", + "integrity": "sha512-JRH6gfXxGmrzF3tZ57lFx97YARxCXPaMzPo6jELZhv88pBH5VXpQ+y0znKGlFnzuaihqhLbefxSJxWJMPtfDzw==", "dev": true, "dependencies": { - "browserslist": "^4.23.0" + "browserslist": "^4.23.3" }, "funding": { "type": "opencollective", @@ -11844,9 +11805,9 @@ } }, "@babel/compat-data": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.2.tgz", - "integrity": "sha512-bYcppcpKBvX4znYaPEeFau03bp89ShqNMLs+rmdptMw+heSZh9+z84d2YG+K7cYLbWwzdjtDoW/uqZmPjulClQ==", + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.4.tgz", + "integrity": "sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ==", "dev": true }, "@babel/core": { @@ -11881,12 +11842,12 @@ } }, "@babel/generator": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.0.tgz", - "integrity": "sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw==", + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.6.tgz", + "integrity": "sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw==", "dev": true, "requires": { - "@babel/types": "^7.25.0", + "@babel/types": "^7.25.6", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^2.5.1" @@ -11955,19 +11916,17 @@ } }, "@babel/helper-create-class-features-plugin": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.7.tgz", - "integrity": "sha512-kTkaDl7c9vO80zeX1rJxnuRpEsD5tA81yh11X1gQo+PhSti3JS+7qeZo9U4RHobKRiFPKaGK3svUAeb8D0Q7eg==", + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.4.tgz", + "integrity": "sha512-ro/bFs3/84MDgDmMwbcHgDa8/E6J3QKNTk4xJJnVeFtGE+tL0K26E3pNxhYz2b67fJpt7Aphw5XcploKXuCvCQ==", "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-environment-visitor": "^7.24.7", - "@babel/helper-function-name": "^7.24.7", - "@babel/helper-member-expression-to-functions": "^7.24.7", + "@babel/helper-member-expression-to-functions": "^7.24.8", "@babel/helper-optimise-call-expression": "^7.24.7", - "@babel/helper-replace-supers": "^7.24.7", + "@babel/helper-replace-supers": "^7.25.0", "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", - "@babel/helper-split-export-declaration": "^7.24.7", + "@babel/traverse": "^7.25.4", "semver": "^6.3.1" } }, @@ -11983,9 +11942,9 @@ } }, "@babel/helper-define-polyfill-provider": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.1.tgz", - "integrity": "sha512-o7SDgTJuvx5vLKD6SFvkydkSMBvahDKGiNJzG22IZYXhiqoe9efY7zocICBgzHV4IRg5wdgl2nEL/tulKIEIbA==", + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz", + "integrity": "sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==", "dev": true, "requires": { "@babel/helper-compilation-targets": "^7.22.6", @@ -11995,25 +11954,6 @@ "resolve": "^1.14.2" } }, - "@babel/helper-environment-visitor": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz", - "integrity": "sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==", - "dev": true, - "requires": { - "@babel/types": "^7.24.7" - } - }, - "@babel/helper-function-name": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.24.7.tgz", - "integrity": "sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==", - "dev": true, - "requires": { - "@babel/template": "^7.24.7", - "@babel/types": "^7.24.7" - } - }, "@babel/helper-member-expression-to-functions": { "version": "7.24.8", "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.8.tgz", @@ -12103,15 +12043,6 @@ "@babel/types": "^7.24.7" } }, - "@babel/helper-split-export-declaration": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz", - "integrity": "sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==", - "dev": true, - "requires": { - "@babel/types": "^7.24.7" - } - }, "@babel/helper-string-parser": { "version": "7.24.8", "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", @@ -12164,12 +12095,12 @@ } }, "@babel/parser": { - "version": "7.25.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.3.tgz", - "integrity": "sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw==", + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.6.tgz", + "integrity": "sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==", "dev": true, "requires": { - "@babel/types": "^7.25.2" + "@babel/types": "^7.25.6" } }, "@babel/plugin-bugfix-firefox-class-in-computed-class-key": { @@ -12428,15 +12359,15 @@ } }, "@babel/plugin-transform-async-generator-functions": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.0.tgz", - "integrity": "sha512-uaIi2FdqzjpAMvVqvB51S42oC2JEVgh0LDsGfZVDysWE8LrJtQC2jvKmOqEYThKyB7bDEb7BP1GYWDm7tABA0Q==", + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.4.tgz", + "integrity": "sha512-jz8cV2XDDTqjKPwVPJBIjORVEmSGYhdRa8e5k5+vN+uwcjSrSxUaebBRa4ko1jqNF2uxyg8G6XYk30Jv285xzg==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.24.8", "@babel/helper-remap-async-to-generator": "^7.25.0", "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/traverse": "^7.25.0" + "@babel/traverse": "^7.25.4" } }, "@babel/plugin-transform-async-to-generator": { @@ -12469,13 +12400,13 @@ } }, "@babel/plugin-transform-class-properties": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.7.tgz", - "integrity": "sha512-vKbfawVYayKcSeSR5YYzzyXvsDFWU2mD8U5TFeXtbCPLFUqe7GyCgvO6XDHzje862ODrOwy6WCPmKeWHbCFJ4w==", + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.4.tgz", + "integrity": "sha512-nZeZHyCWPfjkdU5pA/uHiTaDAFUEqkpzf1YoQT2NeSynCGYq9rxfyI3XpQbfx/a0hSnFH6TGlEXvae5Vi7GD8g==", "dev": true, "requires": { - "@babel/helper-create-class-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-create-class-features-plugin": "^7.25.4", + "@babel/helper-plugin-utils": "^7.24.8" } }, "@babel/plugin-transform-class-static-block": { @@ -12490,16 +12421,16 @@ } }, "@babel/plugin-transform-classes": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.0.tgz", - "integrity": "sha512-xyi6qjr/fYU304fiRwFbekzkqVJZ6A7hOjWZd+89FVcBqPV3S9Wuozz82xdpLspckeaafntbzglaW4pqpzvtSw==", + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.4.tgz", + "integrity": "sha512-oexUfaQle2pF/b6E0dwsxQtAol9TLSO88kQvym6HHBWFliV2lGdrPieX+WgMRLSJDVzdYywk7jXbLPuO2KLTLg==", "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-compilation-targets": "^7.24.8", + "@babel/helper-compilation-targets": "^7.25.2", "@babel/helper-plugin-utils": "^7.24.8", "@babel/helper-replace-supers": "^7.25.0", - "@babel/traverse": "^7.25.0", + "@babel/traverse": "^7.25.4", "globals": "^11.1.0" } }, @@ -12775,13 +12706,13 @@ } }, "@babel/plugin-transform-private-methods": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.7.tgz", - "integrity": "sha512-COTCOkG2hn4JKGEKBADkA8WNb35TGkkRbI5iT845dB+NyqgO8Hn+ajPbSnIQznneJTa3d30scb6iz/DhH8GsJQ==", + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.4.tgz", + "integrity": "sha512-ao8BG7E2b/URaUQGqN3Tlsg+M3KlHY6rJ1O1gXAEUnZoyNQnvKyH87Kfg+FoxSeyWUB8ISZZsC91C44ZuBFytw==", "dev": true, "requires": { - "@babel/helper-create-class-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-create-class-features-plugin": "^7.25.4", + "@babel/helper-plugin-utils": "^7.24.8" } }, "@babel/plugin-transform-private-property-in-object": { @@ -12866,15 +12797,15 @@ } }, "@babel/plugin-transform-runtime": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.24.7.tgz", - "integrity": "sha512-YqXjrk4C+a1kZjewqt+Mmu2UuV1s07y8kqcUf4qYLnoqemhR4gRQikhdAhSVJioMjVTu6Mo6pAbaypEA3jY6fw==", + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.25.4.tgz", + "integrity": "sha512-8hsyG+KUYGY0coX6KUCDancA0Vw225KJ2HJO0yCNr1vq5r+lJTleDaJf0K7iOhjw4SWhu03TMBzYTJ9krmzULQ==", "dev": true, "requires": { "@babel/helper-module-imports": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.8", "babel-plugin-polyfill-corejs2": "^0.4.10", - "babel-plugin-polyfill-corejs3": "^0.10.1", + "babel-plugin-polyfill-corejs3": "^0.10.6", "babel-plugin-polyfill-regenerator": "^0.6.1", "semver": "^6.3.1" } @@ -12955,22 +12886,22 @@ } }, "@babel/plugin-transform-unicode-sets-regex": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.24.7.tgz", - "integrity": "sha512-2G8aAvF4wy1w/AGZkemprdGMRg5o6zPNhbHVImRz3lss55TYCBd6xStN19rt8XJHq20sqV0JbyWjOWwQRwV/wg==", + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.4.tgz", + "integrity": "sha512-qesBxiWkgN1Q+31xUE9RcMk79eOXXDCv6tfyGMRSs4RGlioSg2WVyQAm07k726cSE56pa+Kb0y9epX2qaXzTvA==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-create-regexp-features-plugin": "^7.25.2", + "@babel/helper-plugin-utils": "^7.24.8" } }, "@babel/preset-env": { - "version": "7.25.3", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.25.3.tgz", - "integrity": "sha512-QsYW7UeAaXvLPX9tdVliMJE7MD7M6MLYVTovRTIwhoYQVFHR1rM4wO8wqAezYi3/BpSD+NzVCZ69R6smWiIi8g==", + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.25.4.tgz", + "integrity": "sha512-W9Gyo+KmcxjGahtt3t9fb14vFRWvPpu5pT6GBlovAK6BTBcxgjfVMSQCfJl4oi35ODrxP6xx2Wr8LNST57Mraw==", "dev": true, "requires": { - "@babel/compat-data": "^7.25.2", + "@babel/compat-data": "^7.25.4", "@babel/helper-compilation-targets": "^7.25.2", "@babel/helper-plugin-utils": "^7.24.8", "@babel/helper-validator-option": "^7.24.8", @@ -12999,13 +12930,13 @@ "@babel/plugin-syntax-top-level-await": "^7.14.5", "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", "@babel/plugin-transform-arrow-functions": "^7.24.7", - "@babel/plugin-transform-async-generator-functions": "^7.25.0", + "@babel/plugin-transform-async-generator-functions": "^7.25.4", "@babel/plugin-transform-async-to-generator": "^7.24.7", "@babel/plugin-transform-block-scoped-functions": "^7.24.7", "@babel/plugin-transform-block-scoping": "^7.25.0", - "@babel/plugin-transform-class-properties": "^7.24.7", + "@babel/plugin-transform-class-properties": "^7.25.4", "@babel/plugin-transform-class-static-block": "^7.24.7", - "@babel/plugin-transform-classes": "^7.25.0", + "@babel/plugin-transform-classes": "^7.25.4", "@babel/plugin-transform-computed-properties": "^7.24.7", "@babel/plugin-transform-destructuring": "^7.24.8", "@babel/plugin-transform-dotall-regex": "^7.24.7", @@ -13033,7 +12964,7 @@ "@babel/plugin-transform-optional-catch-binding": "^7.24.7", "@babel/plugin-transform-optional-chaining": "^7.24.8", "@babel/plugin-transform-parameters": "^7.24.7", - "@babel/plugin-transform-private-methods": "^7.24.7", + "@babel/plugin-transform-private-methods": "^7.25.4", "@babel/plugin-transform-private-property-in-object": "^7.24.7", "@babel/plugin-transform-property-literals": "^7.24.7", "@babel/plugin-transform-regenerator": "^7.24.7", @@ -13046,10 +12977,10 @@ "@babel/plugin-transform-unicode-escapes": "^7.24.7", "@babel/plugin-transform-unicode-property-regex": "^7.24.7", "@babel/plugin-transform-unicode-regex": "^7.24.7", - "@babel/plugin-transform-unicode-sets-regex": "^7.24.7", + "@babel/plugin-transform-unicode-sets-regex": "^7.25.4", "@babel/preset-modules": "0.1.6-no-external-plugins", "babel-plugin-polyfill-corejs2": "^0.4.10", - "babel-plugin-polyfill-corejs3": "^0.10.4", + "babel-plugin-polyfill-corejs3": "^0.10.6", "babel-plugin-polyfill-regenerator": "^0.6.1", "core-js-compat": "^3.37.1", "semver": "^6.3.1" @@ -13087,9 +13018,9 @@ "dev": true }, "@babel/runtime": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.0.tgz", - "integrity": "sha512-7dRy4DwXwtzBrPbZflqxnvfxLF8kdZXPkhymtDeFoFqE6ldzjQFgYTtYIFARcLEYDrqfBfYcZt1WqFxRoyC9Rw==", + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.6.tgz", + "integrity": "sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ==", "requires": { "regenerator-runtime": "^0.14.0" } @@ -13106,24 +13037,24 @@ } }, "@babel/traverse": { - "version": "7.25.3", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.3.tgz", - "integrity": "sha512-HefgyP1x754oGCsKmV5reSmtV7IXj/kpaE1XYY+D9G5PvKKoFfSbiS4M77MdjuwlZKDIKFCffq9rPU+H/s3ZdQ==", + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.6.tgz", + "integrity": "sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ==", "dev": true, "requires": { "@babel/code-frame": "^7.24.7", - "@babel/generator": "^7.25.0", - "@babel/parser": "^7.25.3", + "@babel/generator": "^7.25.6", + "@babel/parser": "^7.25.6", "@babel/template": "^7.25.0", - "@babel/types": "^7.25.2", + "@babel/types": "^7.25.6", "debug": "^4.3.1", "globals": "^11.1.0" } }, "@babel/types": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.2.tgz", - "integrity": "sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==", + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.6.tgz", + "integrity": "sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==", "dev": true, "requires": { "@babel/helper-string-parser": "^7.24.8", @@ -14818,13 +14749,13 @@ } }, "babel-plugin-polyfill-corejs3": { - "version": "0.10.4", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.4.tgz", - "integrity": "sha512-25J6I8NGfa5YkCDogHRID3fVCadIR8/pGl1/spvCkzb6lVn6SR3ojpx9nOn9iEBcUsjY24AmdKm5khcfKdylcg==", + "version": "0.10.6", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz", + "integrity": "sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==", "dev": true, "requires": { - "@babel/helper-define-polyfill-provider": "^0.6.1", - "core-js-compat": "^3.36.1" + "@babel/helper-define-polyfill-provider": "^0.6.2", + "core-js-compat": "^3.38.0" } }, "babel-plugin-polyfill-regenerator": { @@ -15223,12 +15154,12 @@ "integrity": "sha512-Xn6qmxrQZyB0FFY8E3bgRXei3lWDJHhvI+u0q9TKIYM49G8pAr0FgnnrFRAmsbptZL1yxRADVXn+x5AGsbBfyw==" }, "core-js-compat": { - "version": "3.37.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.37.1.tgz", - "integrity": "sha512-9TNiImhKvQqSUkOvk/mMRZzOANTiEVC7WaBNhHcKM7x+/5E1l5NvsysR19zuDQScE8k+kfQXWRN3AtS/eOSHpg==", + "version": "3.38.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.38.1.tgz", + "integrity": "sha512-JRH6gfXxGmrzF3tZ57lFx97YARxCXPaMzPo6jELZhv88pBH5VXpQ+y0znKGlFnzuaihqhLbefxSJxWJMPtfDzw==", "dev": true, "requires": { - "browserslist": "^4.23.0" + "browserslist": "^4.23.3" } }, "create-jest": { diff --git a/package.json b/package.json index 6b213572ee..fedacc96d6 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "MarkUs", "dependencies": { - "@babel/runtime": "^7.25.0", + "@babel/runtime": "^7.25.6", "@fortawesome/fontawesome-svg-core": "^6.6.0", "@fortawesome/free-brands-svg-icons": "^6.6.0", "@fortawesome/free-regular-svg-icons": "^6.6.0", @@ -41,8 +41,8 @@ }, "devDependencies": { "@babel/core": "^7.25.2", - "@babel/plugin-transform-runtime": "^7.24.7", - "@babel/preset-env": "^7.25.3", + "@babel/plugin-transform-runtime": "^7.25.4", + "@babel/preset-env": "^7.25.4", "@babel/preset-react": "^7.24.7", "@testing-library/jest-dom": "^6.5.0", "@testing-library/react": "^12.1.5", From f2136aa3d304118daeecd90411cc5e1693a1f99a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 1 Sep 2024 16:35:09 +0000 Subject: [PATCH 024/102] build(deps): bump @rails/actioncable in the rails group (#7201) Bumps the rails group with 1 update: [@rails/actioncable](https://github.com/rails/rails). Updates `@rails/actioncable` from 7.2.0 to 7.2.100 - [Release notes](https://github.com/rails/rails/releases) - [Commits](https://github.com/rails/rails/commits) --- updated-dependencies: - dependency-name: "@rails/actioncable" dependency-type: direct:production update-type: version-update:semver-patch dependency-group: rails ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 15 +++++++-------- package.json | 2 +- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6dce01abb1..63b34d64a8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,7 +12,7 @@ "@fortawesome/free-regular-svg-icons": "^6.6.0", "@fortawesome/free-solid-svg-icons": "^6.6.0", "@fortawesome/react-fontawesome": "^0.2.2", - "@rails/actioncable": "^7.2.0", + "@rails/actioncable": "^7.2.100", "@rails/ujs": "^7.1.3-4", "@rjsf/core": "^5.19.4", "@rjsf/validator-ajv8": "^5.19.4", @@ -2802,10 +2802,9 @@ } }, "node_modules/@rails/actioncable": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@rails/actioncable/-/actioncable-7.2.0.tgz", - "integrity": "sha512-crcsPF3skrqJkFZLxesZoyUEt8ol25XtTuOAUMdLa5qQKWTZpL8eLVW71bDCwKDQLbV2z5sBZ/XGEC0i+ZZa+A==", - "license": "MIT" + "version": "7.2.100", + "resolved": "https://registry.npmjs.org/@rails/actioncable/-/actioncable-7.2.100.tgz", + "integrity": "sha512-7xtIENf0Yw59AFDM3+xqxPCZxev3QVAqjPmUzmgsB9eL8S/zTpB0IU9srNc7XknzJI4e09XKNnCaJRx3gfYzXA==" }, "node_modules/@rails/ujs": { "version": "7.1.3-4", @@ -13730,9 +13729,9 @@ } }, "@rails/actioncable": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@rails/actioncable/-/actioncable-7.2.0.tgz", - "integrity": "sha512-crcsPF3skrqJkFZLxesZoyUEt8ol25XtTuOAUMdLa5qQKWTZpL8eLVW71bDCwKDQLbV2z5sBZ/XGEC0i+ZZa+A==" + "version": "7.2.100", + "resolved": "https://registry.npmjs.org/@rails/actioncable/-/actioncable-7.2.100.tgz", + "integrity": "sha512-7xtIENf0Yw59AFDM3+xqxPCZxev3QVAqjPmUzmgsB9eL8S/zTpB0IU9srNc7XknzJI4e09XKNnCaJRx3gfYzXA==" }, "@rails/ujs": { "version": "7.1.3-4", diff --git a/package.json b/package.json index fedacc96d6..7c0d8f37ac 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,7 @@ "@fortawesome/free-regular-svg-icons": "^6.6.0", "@fortawesome/free-solid-svg-icons": "^6.6.0", "@fortawesome/react-fontawesome": "^0.2.2", - "@rails/actioncable": "^7.2.0", + "@rails/actioncable": "^7.2.100", "@rails/ujs": "^7.1.3-4", "@rjsf/core": "^5.19.4", "@rjsf/validator-ajv8": "^5.19.4", From 48143d8d1b589de372272dc44311bc1feace6ccf Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 1 Sep 2024 16:35:25 +0000 Subject: [PATCH 025/102] build(deps): bump rails from 7.2.0 to 7.2.1 (#7196) Bumps [rails](https://github.com/rails/rails) from 7.2.0 to 7.2.1. - [Release notes](https://github.com/rails/rails/releases) - [Commits](https://github.com/rails/rails/compare/v7.2.0...v7.2.1) --- updated-dependencies: - dependency-name: rails dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile | 2 +- Gemfile.lock | 110 +++++++++++++++++++++++++-------------------------- 2 files changed, 56 insertions(+), 56 deletions(-) diff --git a/Gemfile b/Gemfile index 93c80d348b..84012125b8 100644 --- a/Gemfile +++ b/Gemfile @@ -8,7 +8,7 @@ source 'https://rubygems.org' # Bundler requires these gems in all environments gem 'puma' -gem 'rails', '~> 7.2.0' +gem 'rails', '~> 7.2.1' gem 'sprockets' gem 'sprockets-rails' diff --git a/Gemfile.lock b/Gemfile.lock index 490584d6b7..5bb8fe78ea 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -3,29 +3,29 @@ GEM specs: action_policy (0.7.1) ruby-next-core (>= 1.0) - actioncable (7.2.0) - actionpack (= 7.2.0) - activesupport (= 7.2.0) + actioncable (7.2.1) + actionpack (= 7.2.1) + activesupport (= 7.2.1) nio4r (~> 2.0) websocket-driver (>= 0.6.1) zeitwerk (~> 2.6) - actionmailbox (7.2.0) - actionpack (= 7.2.0) - activejob (= 7.2.0) - activerecord (= 7.2.0) - activestorage (= 7.2.0) - activesupport (= 7.2.0) + actionmailbox (7.2.1) + actionpack (= 7.2.1) + activejob (= 7.2.1) + activerecord (= 7.2.1) + activestorage (= 7.2.1) + activesupport (= 7.2.1) mail (>= 2.8.0) - actionmailer (7.2.0) - actionpack (= 7.2.0) - actionview (= 7.2.0) - activejob (= 7.2.0) - activesupport (= 7.2.0) + actionmailer (7.2.1) + actionpack (= 7.2.1) + actionview (= 7.2.1) + activejob (= 7.2.1) + activesupport (= 7.2.1) mail (>= 2.8.0) rails-dom-testing (~> 2.2) - actionpack (7.2.0) - actionview (= 7.2.0) - activesupport (= 7.2.0) + actionpack (7.2.1) + actionview (= 7.2.1) + activesupport (= 7.2.1) nokogiri (>= 1.8.5) racc rack (>= 2.2.4, < 3.2) @@ -34,34 +34,34 @@ GEM rails-dom-testing (~> 2.2) rails-html-sanitizer (~> 1.6) useragent (~> 0.16) - actiontext (7.2.0) - actionpack (= 7.2.0) - activerecord (= 7.2.0) - activestorage (= 7.2.0) - activesupport (= 7.2.0) + actiontext (7.2.1) + actionpack (= 7.2.1) + activerecord (= 7.2.1) + activestorage (= 7.2.1) + activesupport (= 7.2.1) globalid (>= 0.6.0) nokogiri (>= 1.8.5) - actionview (7.2.0) - activesupport (= 7.2.0) + actionview (7.2.1) + activesupport (= 7.2.1) builder (~> 3.1) erubi (~> 1.11) rails-dom-testing (~> 2.2) rails-html-sanitizer (~> 1.6) - activejob (7.2.0) - activesupport (= 7.2.0) + activejob (7.2.1) + activesupport (= 7.2.1) globalid (>= 0.3.6) activejob-status (1.0.1) activejob (>= 6.0) activesupport (>= 6.0) - activemodel (7.2.0) - activesupport (= 7.2.0) + activemodel (7.2.1) + activesupport (= 7.2.1) activemodel-serializers-xml (1.0.2) activemodel (> 5.x) activesupport (> 5.x) builder (~> 3.1) - activerecord (7.2.0) - activemodel (= 7.2.0) - activesupport (= 7.2.0) + activerecord (7.2.1) + activemodel (= 7.2.1) + activesupport (= 7.2.1) timeout (>= 0.4.0) activerecord-session_store (2.1.0) actionpack (>= 6.1) @@ -70,13 +70,13 @@ GEM multi_json (~> 1.11, >= 1.11.2) rack (>= 2.0.8, < 4) railties (>= 6.1) - activestorage (7.2.0) - actionpack (= 7.2.0) - activejob (= 7.2.0) - activerecord (= 7.2.0) - activesupport (= 7.2.0) + activestorage (7.2.1) + actionpack (= 7.2.1) + activejob (= 7.2.1) + activerecord (= 7.2.1) + activesupport (= 7.2.1) marcel (~> 1.0) - activesupport (7.2.0) + activesupport (7.2.1) base64 bigdecimal concurrent-ruby (~> 1.0, >= 1.3.1) @@ -258,7 +258,7 @@ GEM multi_json (1.15.0) mustermann (3.0.0) ruby2_keywords (~> 0.0.1) - net-imap (0.4.12) + net-imap (0.4.15) date net-protocol net-pop (0.1.2) @@ -307,20 +307,20 @@ GEM rackup (1.0.0) rack (< 3) webrick - rails (7.2.0) - actioncable (= 7.2.0) - actionmailbox (= 7.2.0) - actionmailer (= 7.2.0) - actionpack (= 7.2.0) - actiontext (= 7.2.0) - actionview (= 7.2.0) - activejob (= 7.2.0) - activemodel (= 7.2.0) - activerecord (= 7.2.0) - activestorage (= 7.2.0) - activesupport (= 7.2.0) + rails (7.2.1) + actioncable (= 7.2.1) + actionmailbox (= 7.2.1) + actionmailer (= 7.2.1) + actionpack (= 7.2.1) + actiontext (= 7.2.1) + actionview (= 7.2.1) + activejob (= 7.2.1) + activemodel (= 7.2.1) + activerecord (= 7.2.1) + activestorage (= 7.2.1) + activesupport (= 7.2.1) bundler (>= 1.15.0) - railties (= 7.2.0) + railties (= 7.2.1) rails-controller-testing (1.0.5) actionpack (>= 5.0.1.rc1) actionview (>= 5.0.1.rc1) @@ -340,9 +340,9 @@ GEM railties redis redis-namespace - railties (7.2.0) - actionpack (= 7.2.0) - activesupport (= 7.2.0) + railties (7.2.1) + actionpack (= 7.2.1) + activesupport (= 7.2.1) irb (~> 1.13) rackup (>= 1.0.0) rake (>= 12.2) @@ -522,7 +522,7 @@ DEPENDENCIES prawn-qrcode puma rack-cors - rails (~> 7.2.0) + rails (~> 7.2.1) rails-controller-testing rails-html-sanitizer rails-i18n (~> 7.0.0) From c42bf54971e76a53227b9c49e0d3665191979576 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 1 Sep 2024 16:35:50 +0000 Subject: [PATCH 026/102] build(deps): bump the rjsf group with 2 updates (#7202) Bumps the rjsf group with 2 updates: [@rjsf/core](https://github.com/rjsf-team/react-jsonschema-form) and [@rjsf/validator-ajv8](https://github.com/rjsf-team/react-jsonschema-form). Updates `@rjsf/core` from 5.19.4 to 5.20.1 - [Release notes](https://github.com/rjsf-team/react-jsonschema-form/releases) - [Changelog](https://github.com/rjsf-team/react-jsonschema-form/blob/main/CHANGELOG.md) - [Commits](https://github.com/rjsf-team/react-jsonschema-form/compare/5.19.4...5.20.1) Updates `@rjsf/validator-ajv8` from 5.19.4 to 5.20.1 - [Release notes](https://github.com/rjsf-team/react-jsonschema-form/releases) - [Changelog](https://github.com/rjsf-team/react-jsonschema-form/blob/main/CHANGELOG.md) - [Commits](https://github.com/rjsf-team/react-jsonschema-form/compare/5.19.4...5.20.1) --- updated-dependencies: - dependency-name: "@rjsf/core" dependency-type: direct:production update-type: version-update:semver-minor dependency-group: rjsf - dependency-name: "@rjsf/validator-ajv8" dependency-type: direct:production update-type: version-update:semver-minor dependency-group: rjsf ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 44 ++++++++++++++++++++++---------------------- package.json | 4 ++-- 2 files changed, 24 insertions(+), 24 deletions(-) diff --git a/package-lock.json b/package-lock.json index 63b34d64a8..b22bc726ef 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,8 +14,8 @@ "@fortawesome/react-fontawesome": "^0.2.2", "@rails/actioncable": "^7.2.100", "@rails/ujs": "^7.1.3-4", - "@rjsf/core": "^5.19.4", - "@rjsf/validator-ajv8": "^5.19.4", + "@rjsf/core": "^5.20.1", + "@rjsf/validator-ajv8": "^5.20.1", "chart.js": "^4.4.4", "core-js": "^3.37.1", "dompurify": "^3.1.6", @@ -2827,9 +2827,9 @@ "integrity": "sha512-Pc/AFTdwZwEKJxFJvlxrSmGe/di+aAOBn60sremrpLo6VI/6cmiUYNNwlI5KNYttg7uypzA3ILPMPgxB2GYZEg==" }, "node_modules/@rjsf/core": { - "version": "5.19.4", - "resolved": "https://registry.npmjs.org/@rjsf/core/-/core-5.19.4.tgz", - "integrity": "sha512-HsbvyBs5TcM5VZgsw6Txk8UOhGG5BbCmeAYlHpzb6tbR3ZsLf1MSiFQKIZXHe+BTOW4FekZMBfGa9BfWQZjyLQ==", + "version": "5.20.1", + "resolved": "https://registry.npmjs.org/@rjsf/core/-/core-5.20.1.tgz", + "integrity": "sha512-IOeONl5EBco6SunpGeL8yK9VlEypf1fy5RYqVf1pR/vRx7MPSS6H28p/IqkJGwcFqQBeUNjUAlGANYr808EpHA==", "dependencies": { "lodash": "^4.17.21", "lodash-es": "^4.17.21", @@ -2841,14 +2841,14 @@ "node": ">=14" }, "peerDependencies": { - "@rjsf/utils": "^5.19.x", + "@rjsf/utils": "^5.20.x", "react": "^16.14.0 || >=17" } }, "node_modules/@rjsf/utils": { - "version": "5.19.4", - "resolved": "https://registry.npmjs.org/@rjsf/utils/-/utils-5.19.4.tgz", - "integrity": "sha512-853BZuQvl62Xw2Ve07dkOdEzlr7jCBU/XFPhj9tik3s++InY1brBIDBRZKABvWHjymdSvO9gSzQXzj9aFREcFA==", + "version": "5.20.1", + "resolved": "https://registry.npmjs.org/@rjsf/utils/-/utils-5.20.1.tgz", + "integrity": "sha512-bQrJt5lsAHbdmivIDDVJPXPCkkXJZvXBx8MrjA5umGO2+tykPcphZx/75+1AY5WhUECSgwBeZe2DEWhPbX46oQ==", "peer": true, "dependencies": { "json-schema-merge-allof": "^0.8.1", @@ -2871,9 +2871,9 @@ "peer": true }, "node_modules/@rjsf/validator-ajv8": { - "version": "5.19.4", - "resolved": "https://registry.npmjs.org/@rjsf/validator-ajv8/-/validator-ajv8-5.19.4.tgz", - "integrity": "sha512-meatFQFif92mlFUcmywbDElWSOUdLg6rIowisNaquktUxTRce2TL9TPd7vgcMdwFI1h9NiFok5q6V8v3XyyLLQ==", + "version": "5.20.1", + "resolved": "https://registry.npmjs.org/@rjsf/validator-ajv8/-/validator-ajv8-5.20.1.tgz", + "integrity": "sha512-8uzN3ncMk2G2EQq0bAig2zU2LC482B6KDmDtWlFytlU4GEzczHFTcpjoWU0iT7S+E8LoQiunTv5SBBxAnxSoOw==", "dependencies": { "ajv": "^8.12.0", "ajv-formats": "^2.1.1", @@ -2884,7 +2884,7 @@ "node": ">=14" }, "peerDependencies": { - "@rjsf/utils": "^5.19.x" + "@rjsf/utils": "^5.20.x" } }, "node_modules/@rjsf/validator-ajv8/node_modules/ajv": { @@ -13754,9 +13754,9 @@ "integrity": "sha512-Pc/AFTdwZwEKJxFJvlxrSmGe/di+aAOBn60sremrpLo6VI/6cmiUYNNwlI5KNYttg7uypzA3ILPMPgxB2GYZEg==" }, "@rjsf/core": { - "version": "5.19.4", - "resolved": "https://registry.npmjs.org/@rjsf/core/-/core-5.19.4.tgz", - "integrity": "sha512-HsbvyBs5TcM5VZgsw6Txk8UOhGG5BbCmeAYlHpzb6tbR3ZsLf1MSiFQKIZXHe+BTOW4FekZMBfGa9BfWQZjyLQ==", + "version": "5.20.1", + "resolved": "https://registry.npmjs.org/@rjsf/core/-/core-5.20.1.tgz", + "integrity": "sha512-IOeONl5EBco6SunpGeL8yK9VlEypf1fy5RYqVf1pR/vRx7MPSS6H28p/IqkJGwcFqQBeUNjUAlGANYr808EpHA==", "requires": { "lodash": "^4.17.21", "lodash-es": "^4.17.21", @@ -13766,9 +13766,9 @@ } }, "@rjsf/utils": { - "version": "5.19.4", - "resolved": "https://registry.npmjs.org/@rjsf/utils/-/utils-5.19.4.tgz", - "integrity": "sha512-853BZuQvl62Xw2Ve07dkOdEzlr7jCBU/XFPhj9tik3s++InY1brBIDBRZKABvWHjymdSvO9gSzQXzj9aFREcFA==", + "version": "5.20.1", + "resolved": "https://registry.npmjs.org/@rjsf/utils/-/utils-5.20.1.tgz", + "integrity": "sha512-bQrJt5lsAHbdmivIDDVJPXPCkkXJZvXBx8MrjA5umGO2+tykPcphZx/75+1AY5WhUECSgwBeZe2DEWhPbX46oQ==", "peer": true, "requires": { "json-schema-merge-allof": "^0.8.1", @@ -13787,9 +13787,9 @@ } }, "@rjsf/validator-ajv8": { - "version": "5.19.4", - "resolved": "https://registry.npmjs.org/@rjsf/validator-ajv8/-/validator-ajv8-5.19.4.tgz", - "integrity": "sha512-meatFQFif92mlFUcmywbDElWSOUdLg6rIowisNaquktUxTRce2TL9TPd7vgcMdwFI1h9NiFok5q6V8v3XyyLLQ==", + "version": "5.20.1", + "resolved": "https://registry.npmjs.org/@rjsf/validator-ajv8/-/validator-ajv8-5.20.1.tgz", + "integrity": "sha512-8uzN3ncMk2G2EQq0bAig2zU2LC482B6KDmDtWlFytlU4GEzczHFTcpjoWU0iT7S+E8LoQiunTv5SBBxAnxSoOw==", "requires": { "ajv": "^8.12.0", "ajv-formats": "^2.1.1", diff --git a/package.json b/package.json index 7c0d8f37ac..893dfd8e21 100644 --- a/package.json +++ b/package.json @@ -9,8 +9,8 @@ "@fortawesome/react-fontawesome": "^0.2.2", "@rails/actioncable": "^7.2.100", "@rails/ujs": "^7.1.3-4", - "@rjsf/core": "^5.19.4", - "@rjsf/validator-ajv8": "^5.19.4", + "@rjsf/core": "^5.20.1", + "@rjsf/validator-ajv8": "^5.20.1", "chart.js": "^4.4.4", "core-js": "^3.37.1", "dompurify": "^3.1.6", From f05a82c26e838bc4ddd728d559bad5442ebdfd0d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 1 Sep 2024 18:14:24 +0000 Subject: [PATCH 027/102] build(deps): bump redis from 4.8.1 to 5.3.0 (#7194) Bumps [redis](https://github.com/redis/redis-rb) from 4.8.1 to 5.3.0. - [Changelog](https://github.com/redis/redis-rb/blob/master/CHANGELOG.md) - [Commits](https://github.com/redis/redis-rb/compare/v4.8.1...v5.3.0) --- updated-dependencies: - dependency-name: redis dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile | 2 +- Gemfile.lock | 7 +++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/Gemfile b/Gemfile index 84012125b8..d8ab26b13e 100644 --- a/Gemfile +++ b/Gemfile @@ -40,7 +40,7 @@ gem 'i18n-js' gem 'rails-i18n', '~> 7.0.0' # Redis -gem 'redis', '~> 4.8.1' +gem 'redis', '~> 5.3.0' # Exam template requirements gem 'combine_pdf' diff --git a/Gemfile.lock b/Gemfile.lock index 5bb8fe78ea..8589685507 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -357,7 +357,10 @@ GEM rdoc (6.7.0) psych (>= 4.0.0) redcarpet (3.6.0) - redis (4.8.1) + redis (5.3.0) + redis-client (>= 0.22.0) + redis-client (0.22.2) + connection_pool redis-namespace (1.11.0) redis (>= 4) regexp_parser (2.9.0) @@ -528,7 +531,7 @@ DEPENDENCIES rails-i18n (~> 7.0.0) rails_performance redcarpet - redis (~> 4.8.1) + redis (~> 5.3.0) responders resque resque-scheduler From d8ef6329ee0743ec94a66c1a7e34375298d61d08 Mon Sep 17 00:00:00 2001 From: David Liu Date: Wed, 4 Sep 2024 23:42:44 +0000 Subject: [PATCH 028/102] Improve textviewer rendering speed (#7211) --- Changelog.md | 2 + .../Components/Result/text_viewer.jsx | 73 ++++++------------- 2 files changed, 25 insertions(+), 50 deletions(-) diff --git a/Changelog.md b/Changelog.md index f7860a3b41..e827001a89 100644 --- a/Changelog.md +++ b/Changelog.md @@ -6,6 +6,8 @@ ### ✨ New features and improvements +- Improve textviewer rendering speed (#7211) + ### 🐛 Bug fixes ### 🔧 Internal changes diff --git a/app/assets/javascripts/Components/Result/text_viewer.jsx b/app/assets/javascripts/Components/Result/text_viewer.jsx index b3fad2514d..2f85d90ae8 100644 --- a/app/assets/javascripts/Components/Result/text_viewer.jsx +++ b/app/assets/javascripts/Components/Result/text_viewer.jsx @@ -68,62 +68,35 @@ export class TextViewer extends React.PureComponent { let nodeLines = []; let currLine = document.createElement("span"); currLine.classList.add("source-line"); + let currChildren = []; for (let node of this.raw_content.current.childNodes) { - if (node.nodeType === Node.TEXT_NODE) { - // SourceCodeLine.glow assumes text nodes are wrapped in elements - let textContainer = document.createElement("span"); - let textNode = null; - if (node.textContent.includes("\n")) { - const splits = node.textContent.split("\n"); - for (let i = 0; i < splits.length - 1; i++) { - textNode = document.createTextNode(splits[i] + "\n"); - textContainer.appendChild(textNode); - currLine.appendChild(textContainer); - nodeLines.push(currLine); - currLine = document.createElement("span"); - currLine.classList.add("source-line"); - textContainer = document.createElement("span"); - } - textNode = document.createTextNode(splits[splits.length - 1]); - } else { - textNode = node.cloneNode(true); - } - textContainer.appendChild(textNode); - currLine.appendChild(textContainer); - } else { - if (node.textContent.includes("\n")) { - const splits = node.textContent.split("\n"); - let textContainer = document.createElement("span"); - textContainer.className = node.className; - let textNode = null; - for (let i = 0; i < splits.length - 1; i++) { - textNode = document.createTextNode(splits[i] + "\n"); - textContainer.appendChild(textNode); - currLine.appendChild(textContainer); - nodeLines.push(currLine); - currLine = document.createElement("span"); - currLine.classList.add("source-line"); - textContainer = document.createElement("span"); - textContainer.className = node.className; - } - textNode = document.createTextNode(splits[splits.length - 1]); - textContainer.appendChild(textNode); - currLine.appendChild(textContainer); - } else { - currLine.appendChild(node.cloneNode(true)); - } + // Note: SourceCodeLine.glow assumes text nodes are wrapped in elements + let textContainer = document.createElement("span"); + let className = node.nodeType === Node.TEXT_NODE ? "" : node.className; + textContainer.className = className; + + const splits = node.textContent.split("\n"); + for (let i = 0; i < splits.length - 1; i++) { + textContainer.textContent = splits[i] + "\n"; + currLine.append(...currChildren, textContainer); + nodeLines.push(currLine); + currLine = document.createElement("span"); + currLine.classList.add("source-line"); + currChildren = []; + textContainer = document.createElement("span"); + textContainer.className = className; } + + textContainer.textContent = splits[splits.length - 1]; + currLine.append(...currChildren, textContainer); } if (currLine.textContent.length > 0) { nodeLines.push(currLine); } - nodeLines.push(this.raw_content.current.lastChild.cloneNode(true)); - while (this.raw_content.current.firstChild) { - this.raw_content.current.removeChild(this.raw_content.current.lastChild); - } - for (let n of nodeLines) { - this.raw_content.current.appendChild(n); - } + this.raw_content.current.replaceChildren( + ...nodeLines, + this.raw_content.current.lastChild.cloneNode(true) + ); }; change_font_size = delta => { From fbd3b1e4df740ef6e2fbebd5a84fcd42c57c8375 Mon Sep 17 00:00:00 2001 From: ch-iv <108201575+ch-iv@users.noreply.github.com> Date: Sun, 15 Sep 2024 23:02:39 -0400 Subject: [PATCH 029/102] Create tests for overtime messages of submission rules (#7216) * Fix incorrect deduction amount for GracePeriodSubmissionRule when files are submitted on time --- Changelog.md | 2 ++ app/models/grace_period_submission_rule.rb | 1 + doc/markus-contributors.txt | 1 + .../grace_period_submission_rule_spec.rb | 23 +++++++++++++++++++ spec/models/no_late_submission_rule_spec.rb | 14 +++++++++++ ...nalty_decay_period_submission_rule_spec.rb | 17 ++++++++++++++ .../penalty_period_submission_rule_spec.rb | 17 ++++++++++++++ 7 files changed, 75 insertions(+) diff --git a/Changelog.md b/Changelog.md index e827001a89..0d7810fad8 100644 --- a/Changelog.md +++ b/Changelog.md @@ -9,12 +9,14 @@ - Improve textviewer rendering speed (#7211) ### 🐛 Bug fixes +- Fix incorrect calculation of token penalties when submissions are on time (#7216) ### 🔧 Internal changes - Upgrade Docker environment to use Ruby v3.3 (#7185) - Upgrade to Rails v7.2 (#7185) - Manually specify chromedriver port number in Github actions (#7209) +- Create tests for overtime messages of the submission rule classes (#7216) ## [v2.5.1] diff --git a/app/models/grace_period_submission_rule.rb b/app/models/grace_period_submission_rule.rb index cdbf308808..614a98b749 100644 --- a/app/models/grace_period_submission_rule.rb +++ b/app/models/grace_period_submission_rule.rb @@ -97,6 +97,7 @@ def hours_sum # Given a certain number of hours into the grace periods, calculate how many credits to # deduct def calculate_deduction_amount(overtime_hours) + return 0 if overtime_hours <= 0 total_deduction = 0 periods.each do |period| total_deduction += 1 diff --git a/doc/markus-contributors.txt b/doc/markus-contributors.txt index 8bc074beae..a1eacabb5e 100644 --- a/doc/markus-contributors.txt +++ b/doc/markus-contributors.txt @@ -95,6 +95,7 @@ Ignas Panero Armoska Irene Fung Isabelle Chan Ishan Thukral +Ivan Chepelev Jackson Lee Jakub Subczynski Jason Mai diff --git a/spec/models/grace_period_submission_rule_spec.rb b/spec/models/grace_period_submission_rule_spec.rb index 86b469f091..50d2bd15b0 100644 --- a/spec/models/grace_period_submission_rule_spec.rb +++ b/spec/models/grace_period_submission_rule_spec.rb @@ -23,6 +23,21 @@ expect { apply_rule }.not_to(change { grouping.inviter.grace_period_deductions.count }) end end + + context 'when the student has one grace credit' do + before do + grouping.inviter.update!(grace_credits: 1) + end + + it 'has an overtime message mentioning the number of credits remaining and the number of credits to use' do + pretend_now_is(due_date - 1.day) + apply_rule + rule_overtime_message = rule.overtime_message(grouping) + expected_overtime_message = I18n.t 'grace_period_submission_rules.overtime_message_with_credits_left', + grace_credits_remaining: 1, grace_credits_to_use: 0 + expect(rule_overtime_message).to eq expected_overtime_message + end + end end context 'when the group submitted during the first penalty period' do @@ -143,6 +158,14 @@ it 'does not deduct credits' do expect { apply_rule }.not_to(change { grouping.reload.grace_period_deductions.count }) end + + it 'has an overtime message mentioning that there are no credits remaining' do + pretend_now_is(due_date + 5.days) + apply_rule + rule_overtime_message = rule.overtime_message(grouping) + expected_overtime_message = I18n.t 'grace_period_submission_rules.overtime_message_without_credits_left' + expect(rule_overtime_message).to eq expected_overtime_message + end end describe 'when the student has one grace credits' do diff --git a/spec/models/no_late_submission_rule_spec.rb b/spec/models/no_late_submission_rule_spec.rb index 9c2be9709c..df480b2a3c 100644 --- a/spec/models/no_late_submission_rule_spec.rb +++ b/spec/models/no_late_submission_rule_spec.rb @@ -3,6 +3,16 @@ it { is_expected.to have_one(:course) } + shared_examples 'valid overtime message' do |submission_time_offset| + it 'has an overtime message' do + pretend_now_is(due_date + submission_time_offset) + apply_rule + rule_overtime_message = rule.overtime_message(grouping) + human_after_collection_message = NoLateSubmissionRule.human_attribute_name(:after_collection_message) + expect(rule_overtime_message).to eq(human_after_collection_message) + end + end + context 'when the group submitted on time' do include_context 'submission_rule_on_time' it 'should be able to calculate collection time' do @@ -12,6 +22,8 @@ it 'should be able to calculate collection time for a grouping' do expect(assignment.due_date).to eq(rule.calculate_grouping_collection_time(grouping)) end + + include_examples 'valid overtime message', -5.days end context 'when the group submitted late' do @@ -23,5 +35,7 @@ it 'should not create an extra mark' do expect { apply_rule }.not_to(change { submission.get_latest_result.extra_marks.count }) end + + include_examples 'valid overtime message', 5.days end end diff --git a/spec/models/penalty_decay_period_submission_rule_spec.rb b/spec/models/penalty_decay_period_submission_rule_spec.rb index 253d425e0f..3aaa0bb945 100644 --- a/spec/models/penalty_decay_period_submission_rule_spec.rb +++ b/spec/models/penalty_decay_period_submission_rule_spec.rb @@ -4,6 +4,17 @@ it { is_expected.to have_one(:course) } + shared_examples 'valid overtime message' do |potential_penalty, submission_time_offset| + it 'has an overtime message with a potential penalty' do + pretend_now_is(due_date + submission_time_offset) + apply_rule + rule_overtime_message = rule.overtime_message(grouping) + expected_overtime_message = I18n.t 'penalty_decay_period_submission_rules.overtime_message', + potential_penalty: potential_penalty + expect(rule_overtime_message).to eq expected_overtime_message + end + end + context 'when the group submitted on time' do include_context 'submission_rule_on_time' context 'when the student did not submit any files' do @@ -24,6 +35,8 @@ expect { apply_rule }.not_to(change { result.extra_marks.count }) end end + + it_behaves_like 'valid overtime message', 0, -5.days end context 'when the group submitted during the first penalty period' do @@ -36,6 +49,8 @@ apply_rule expect(result.extra_marks.first.unit).to eq ExtraMark::PERCENTAGE end + + it_behaves_like 'valid overtime message', 1.0, 10.hours end context 'when the group submitted during the second penalty period' do @@ -48,5 +63,7 @@ apply_rule expect(result.extra_marks.first.unit).to eq ExtraMark::PERCENTAGE end + + it_behaves_like 'valid overtime message', 2.0, 25.hours end end diff --git a/spec/models/penalty_period_submission_rule_spec.rb b/spec/models/penalty_period_submission_rule_spec.rb index 1574f827d0..6bf5138b25 100644 --- a/spec/models/penalty_period_submission_rule_spec.rb +++ b/spec/models/penalty_period_submission_rule_spec.rb @@ -4,6 +4,17 @@ it { is_expected.to have_one(:course) } + shared_examples 'valid overtime message' do |potential_penalty, submission_time_offset| + it 'has an overtime message with a potential penalty' do + pretend_now_is(due_date + submission_time_offset) + apply_rule + rule_overtime_message = rule.overtime_message(grouping) + expected_overtime_message = I18n.t 'penalty_decay_period_submission_rules.overtime_message', + potential_penalty: potential_penalty + expect(rule_overtime_message).to eq expected_overtime_message + end + end + context 'when the group submitted on time' do include_context 'submission_rule_on_time' context 'when the student did not submit any files' do @@ -24,6 +35,8 @@ expect { apply_rule }.not_to(change { result.extra_marks.count }) end end + + it_behaves_like 'valid overtime message', 0, -5.days end context 'when the group submitted during the first penalty period' do @@ -36,6 +49,8 @@ apply_rule expect(result.extra_marks.first.unit).to eq ExtraMark::PERCENTAGE end + + it_behaves_like 'valid overtime message', 1.0, 10.hours end context 'when the group submitted during the second penalty period' do @@ -48,5 +63,7 @@ apply_rule expect(result.extra_marks.first.unit).to eq ExtraMark::PERCENTAGE end + + it_behaves_like 'valid overtime message', 2.0, 25.hours end end From db6b76dd89af64214b8c71cc02375acf23bdf3d7 Mon Sep 17 00:00:00 2001 From: Anubha Joshi <56412457+anubhajoshi01@users.noreply.github.com> Date: Tue, 17 Sep 2024 21:53:11 -0400 Subject: [PATCH 030/102] Improve test coverage for StudentController#create_group_for_working_alone_student (#7218) Also move error messages to locale files. --- Changelog.md | 2 ++ app/models/student.rb | 8 ++------ config/locales/views/users/en.yml | 3 +++ doc/markus-contributors.txt | 1 + spec/models/student_spec.rb | 22 ++++++++++++++++++++++ 5 files changed, 30 insertions(+), 6 deletions(-) diff --git a/Changelog.md b/Changelog.md index 0d7810fad8..65ec51ec19 100644 --- a/Changelog.md +++ b/Changelog.md @@ -16,6 +16,8 @@ - Upgrade Docker environment to use Ruby v3.3 (#7185) - Upgrade to Rails v7.2 (#7185) - Manually specify chromedriver port number in Github actions (#7209) +- Move Exception message in student model to a localization file (#7218) +- Add test cases for the student model to cover Group or Grouping save method failure (#7218) - Create tests for overtime messages of the submission rule classes (#7216) ## [v2.5.1] diff --git a/app/models/student.rb b/app/models/student.rb index b4beaf7fc5..19ceca9346 100644 --- a/app/models/student.rb +++ b/app/models/student.rb @@ -133,9 +133,7 @@ def create_group_for_working_alone_student(aid) m_logger.log("Could not create a group for Student '#{user_name}'. " \ "The group was #{@group.inspect} - errors: " \ "#{@group.errors.inspect}", MarkusLogger::ERROR) - raise 'Sorry! For some reason, your group could not be created. ' \ - 'Please wait a few seconds, then hit refresh to try again. ' \ - 'If you come back to this page, you should inform the course instructor.' + raise I18n.t('students.errors.group_creation_failure') end # a grouping can be found if the student has an (empty) existing grouping that he is not a member of @@ -146,9 +144,7 @@ def create_group_for_working_alone_student(aid) m_logger.log("Could not create a grouping for Student '#{user_name}'. " \ "The grouping was: #{@grouping.inspect} - errors: " \ "#{@grouping.errors.inspect}", MarkusLogger::ERROR) - raise 'Sorry! For some reason, your grouping could not be created. ' \ - 'Please wait a few seconds, and hit refresh to try again. If you ' \ - 'come back to this page, you should inform the course instructor.' + raise I18n.t('students.errors.grouping_creation_failure') end # Create the membership diff --git a/config/locales/views/users/en.yml b/config/locales/views/users/en.yml index 8162fbcf16..f10d09081f 100644 --- a/config/locales/views/users/en.yml +++ b/config/locales/views/users/en.yml @@ -12,6 +12,9 @@ en: students: display_inactive: Display inactive students edit: Edit a Student + errors: + group_creation_failure: Sorry! For some reason, your group could not be created. Please wait a few seconds, then hit refresh to try again. If you come back to this page, you should inform the course instructor. + grouping_creation_failure: Sorry! For some reason, your grouping could not be created. Please wait a few seconds, and hit refresh to try again. If you come back to this page, you should inform the course instructor. help: manage_students: Mark students as active or inactive, give them grace credits. instructor_actions: diff --git a/doc/markus-contributors.txt b/doc/markus-contributors.txt index a1eacabb5e..2558f96f57 100644 --- a/doc/markus-contributors.txt +++ b/doc/markus-contributors.txt @@ -25,6 +25,7 @@ Ante Zheng Anthony Labaere Anthony Le Jallé Anton Braverman +Anubha Joshi Anushiya Antony Arianne Dee Augustin Doury diff --git a/spec/models/student_spec.rb b/spec/models/student_spec.rb index 3f0520a6bf..dd7b2b86cb 100644 --- a/spec/models/student_spec.rb +++ b/spec/models/student_spec.rb @@ -265,6 +265,28 @@ expect(group.group_name).to eq(group.get_autogenerated_group_name) end end + + context 'when error occurs on group save' do + it 'raises an error on group save failure when creating group' do + allow_any_instance_of(Group).to receive(:save).and_return(false) + + expect do + @student.create_group_for_working_alone_student(@assignment.id) + end.to raise_error(RuntimeError, + I18n.t('students.errors.group_creation_failure')) + end + end + + context 'when error occurs on grouping save' do + it 'raises an error on grouping save failure when creating group' do + allow_any_instance_of(Grouping).to receive(:save).and_return(false) + + expect do + @student.create_group_for_working_alone_student(@assignment.id) + end.to raise_error(RuntimeError, + I18n.t('students.errors.grouping_creation_failure')) + end + end end context 'working alone but has an existing group' do From 006ad50b657f9c52e8ac549bf7d59b900f55bbf7 Mon Sep 17 00:00:00 2001 From: Omid Hemmati <129822623+hemmatio@users.noreply.github.com> Date: Wed, 18 Sep 2024 14:40:29 -0400 Subject: [PATCH 031/102] Add correct content type for pdf upload in exam_templates_controller_spec.rb (#7213) --- Changelog.md | 1 + doc/markus-contributors.txt | 1 + .../exam_templates_controller_spec.rb | 34 ++++++++++++++++++- 3 files changed, 35 insertions(+), 1 deletion(-) diff --git a/Changelog.md b/Changelog.md index 65ec51ec19..632edb6dff 100644 --- a/Changelog.md +++ b/Changelog.md @@ -13,6 +13,7 @@ ### 🔧 Internal changes +- Fix test coverage for ExamTemplate.create_with_file method (#7213) - Upgrade Docker environment to use Ruby v3.3 (#7185) - Upgrade to Rails v7.2 (#7185) - Manually specify chromedriver port number in Github actions (#7209) diff --git a/doc/markus-contributors.txt b/doc/markus-contributors.txt index 2558f96f57..d3759f1b61 100644 --- a/doc/markus-contributors.txt +++ b/doc/markus-contributors.txt @@ -161,6 +161,7 @@ Nikhi Bhambra Nina Huang Noé Bedetti Oloruntobi Ogunbiyi +Omid Hemmati Ope Akanji Oussama Ben Amar Parker Hutcheson diff --git a/spec/controllers/exam_templates_controller_spec.rb b/spec/controllers/exam_templates_controller_spec.rb index 596d7728fa..6985881f98 100644 --- a/spec/controllers/exam_templates_controller_spec.rb +++ b/spec/controllers/exam_templates_controller_spec.rb @@ -11,7 +11,7 @@ end describe '#create' do - let(:file_io) { fixture_file_upload('scanned_exams/midterm1-v2-test.pdf') } + let(:file_io) { fixture_file_upload('scanned_exams/midterm1-v2-test.pdf', 'application/pdf') } let(:params) do { create_template: { file_io: file_io, name: 'Template 1' }, assignment_id: exam_template.assignment.id, course_id: course.id } @@ -22,6 +22,38 @@ it('should respond with 302') { expect(response).to have_http_status :found } end + describe '#create with empty filename' do + let(:file_io) { fixture_file_upload('scanned_exams/midterm1-v2-test.pdf', 'application/pdf') } + let(:params) do + { create_template: { file_io: file_io, name: '' }, + assignment_id: exam_template.assignment.id, course_id: course.id } + end + + before { post_as user, :create, params: params } + + it('should create an ExamTemplate with a default name') do + expect(ExamTemplate.count).to eq 1 + created_template = ExamTemplate.last + expect(created_template.name).to eq 'midterm1-v2-test' # default name should be the filename w/ no extension + end + + it('should respond with 302') { expect(response).to have_http_status :found } + end + + describe '#create without specified content type' do + let(:file_io) { fixture_file_upload('scanned_exams/midterm1-v2-test.pdf') } + let(:params) do + { create_template: { file_io: file_io, name: '' }, + assignment_id: exam_template.assignment.id, course_id: course.id } + end + + before { post_as user, :create, params: params } + + it 'flashes an exam template create failure error message' do + expect(flash[:error].map { |f| extract_text f }).to eq [I18n.t('exam_templates.create.failure')] + end + end + describe '#edit' do it 'should respond with 200 with html format' do get_as user, :edit, format: 'html', params: { course_id: course.id, id: exam_template.id } From 12ac171f4851241af2459ced3472d18d86da96ba Mon Sep 17 00:00:00 2001 From: Samuel Maldonado Date: Wed, 18 Sep 2024 15:13:03 -0400 Subject: [PATCH 032/102] Enable cron-based automatic syncing of LTI rosters (#7178) --- Changelog.md | 1 + .../Components/Modals/roster_sync_modal.jsx | 16 ++++++- app/controllers/courses_controller.rb | 22 ++++++++-- app/helpers/lti_helper.rb | 3 +- app/jobs/lti_roster_sync_job.rb | 9 ++-- config.ru | 2 + config/initializers/config.rb | 1 + config/initializers/resque.rb | 1 + config/locales/common/en.yml | 1 + config/settings/development.yml | 1 + config/settings/production.yml | 1 + config/settings/test.yml | 1 + spec/controllers/courses_controller_spec.rb | 43 +++++++++++++++++++ spec/helpers/lti_helper_spec.rb | 24 +++++------ spec/jobs/lti_roster_sync_job_spec.rb | 2 +- 15 files changed, 106 insertions(+), 22 deletions(-) diff --git a/Changelog.md b/Changelog.md index 632edb6dff..a50e322d52 100644 --- a/Changelog.md +++ b/Changelog.md @@ -7,6 +7,7 @@ ### ✨ New features and improvements - Improve textviewer rendering speed (#7211) +- Add periodic roster syncing via LTI (#7178) ### 🐛 Bug fixes - Fix incorrect calculation of token penalties when submissions are on time (#7216) diff --git a/app/assets/javascripts/Components/Modals/roster_sync_modal.jsx b/app/assets/javascripts/Components/Modals/roster_sync_modal.jsx index 2b7743c07f..b59194196f 100644 --- a/app/assets/javascripts/Components/Modals/roster_sync_modal.jsx +++ b/app/assets/javascripts/Components/Modals/roster_sync_modal.jsx @@ -10,6 +10,7 @@ class LtiRosterModal extends React.Component { include_tas: true, include_students: true, include_instructors: true, + automatic_sync: true, }; } @@ -36,6 +37,7 @@ class LtiRosterModal extends React.Component { include_students: this.state.include_students, include_tas: this.state.include_tas, include_instructors: this.state.include_instructors, + automatic_sync: this.state.automatic_sync, lti_deployment_id: this.props.roster_deployment_id, }, }); @@ -82,13 +84,25 @@ class LtiRosterModal extends React.Component { {I18n.t("lti.sync_instructors")}

+

+ +

diff --git a/app/controllers/courses_controller.rb b/app/controllers/courses_controller.rb index 716469a8e3..ba6a4dcafd 100644 --- a/app/controllers/courses_controller.rb +++ b/app/controllers/courses_controller.rb @@ -171,10 +171,24 @@ def sync_roster if params[:include_instructors] == 'true' roles.append(LtiDeployment::LTI_ROLES[:instructor]) end - @current_job = LtiRosterSyncJob.perform_later(deployment, @current_course, - roles, - can_create_users: allowed_to?(:lti_manage?, with: UserPolicy), - can_create_roles: allowed_to?(:manage?, with: RolePolicy)) + job_args = {} + job_args[:deployment_id] = deployment.id + job_args[:role_types] = roles + job_args[:can_create_users] = allowed_to?(:lti_manage?, with: UserPolicy) + job_args[:can_create_roles] = allowed_to?(:manage?, with: RolePolicy) + name = "LtiRosterSync_#{deployment.id}_#{root_path.tr!('/', '')}" + if params[:automatic_sync] == 'true' + config = {} + config[:class] = 'ActiveJob::QueueAdapters::ResqueAdapter::JobWrapper' + config[:args] = { job_class: 'LtiRosterSyncJob', arguments: [job_args] } + config[:cron] = Settings.lti.sync_schedule + config[:persist] = true + config[:queue] = LtiRosterSyncJob.queue_name + Resque.set_schedule(name, config) + else + Resque.remove_schedule(name) + end + @current_job = LtiRosterSyncJob.perform_later(job_args) session[:job_id] = @current_job.job_id redirect_to edit_course_path(@current_course) end diff --git a/app/helpers/lti_helper.rb b/app/helpers/lti_helper.rb index 7059d94401..324b4add2b 100644 --- a/app/helpers/lti_helper.rb +++ b/app/helpers/lti_helper.rb @@ -4,8 +4,9 @@ module LtiHelper # if role is not nil, attempt to create users # based on the values of can_create_users and # can_create_roles. - def roster_sync(lti_deployment, course, role_types, can_create_users: false, can_create_roles: false) + def roster_sync(lti_deployment, role_types, can_create_users: false, can_create_roles: false) error = false + course = lti_deployment.course auth_data = lti_deployment.lti_client.get_oauth_token([LtiDeployment::LTI_SCOPES[:names_role]]) names_service = lti_deployment.lti_services.find_by!(service_type: 'namesrole') membership_uri = URI(names_service.url) diff --git a/app/jobs/lti_roster_sync_job.rb b/app/jobs/lti_roster_sync_job.rb index f6e88cb10c..24d20b845a 100644 --- a/app/jobs/lti_roster_sync_job.rb +++ b/app/jobs/lti_roster_sync_job.rb @@ -9,9 +9,12 @@ def self.completed_message(_status) I18n.t('lti.roster_sync_complete') end - def perform(lti_deployment, course, role_types, can_create_users: false, can_create_roles: false) - roster_error = roster_sync(lti_deployment, course, role_types, can_create_users: can_create_users, - can_create_roles: can_create_roles) + def perform(args) + args = args.deep_symbolize_keys + lti_deployment = LtiDeployment.find(args[:deployment_id]) + + roster_error = roster_sync(lti_deployment, args[:role_types], can_create_users: args[:can_create_users], + can_create_roles: args[:can_create_roles]) if roster_error status.update(warning_message: [status[:warning_message], I18n.t('lti.roster_sync_errors')].compact.join("\n")) end diff --git a/config.ru b/config.ru index 2b6f81c649..992918243f 100644 --- a/config.ru +++ b/config.ru @@ -1,6 +1,8 @@ # This file is used by Rack-based servers to start the application. require File.expand_path('config/environment', __dir__) +# Required for managing scheduled jobs via web interface +use Rack::MethodOverride map ENV['RAILS_RELATIVE_URL_ROOT'] || '/' do run Markus::Application end diff --git a/config/initializers/config.rb b/config/initializers/config.rb index 4dab29bf2c..cf9746d527 100644 --- a/config/initializers/config.rb +++ b/config/initializers/config.rb @@ -193,6 +193,7 @@ required(:domains).array(:str?) required(:token_endpoint).filled(:string) optional(:unpermitted_new_course_message).filled(:string) + required(:sync_schedule).filled(:string) end end end diff --git a/config/initializers/resque.rb b/config/initializers/resque.rb index 4d3e207e34..56cab8e3c5 100644 --- a/config/initializers/resque.rb +++ b/config/initializers/resque.rb @@ -19,4 +19,5 @@ end Resque.schedule = Settings.resque_scheduler.to_h.deep_stringify_keys + Resque::Scheduler.dynamic = true end diff --git a/config/locales/common/en.yml b/config/locales/common/en.yml index d004b4afec..b426716c05 100644 --- a/config/locales/common/en.yml +++ b/config/locales/common/en.yml @@ -48,6 +48,7 @@ en: select_course: Select the course that matches %{course_name} start_grade_sync: Syncing Grades start_roster_sync: Syncing Roster + sync_automatically: Enable automatic syncing sync_grades: Sync Grades sync_grades_lms: Sync grades with LMS sync_instructors: Sync Instructor roster diff --git a/config/settings/development.yml b/config/settings/development.yml index 7c2186f3b3..c00eab1d19 100644 --- a/config/settings/development.yml +++ b/config/settings/development.yml @@ -43,3 +43,4 @@ lti: domains: <%= %w[host.docker.internal] %> token_endpoint: "http://host.docker.internal:3100/login/oauth2/token" unpermitted_new_course_message: 'You are not permitted to create a new MarkUs course for %{course_name}. Please contact your system administrator.' + sync_schedule: "0 3 * * *" diff --git a/config/settings/production.yml b/config/settings/production.yml index 3675e7e8db..e6414c88f7 100644 --- a/config/settings/production.yml +++ b/config/settings/production.yml @@ -37,3 +37,4 @@ autotest: lti: domains: <%= %w[canvas.instructure.com] %> token_endpoint: "https://canvas.instructure.com/login/oauth2/token" + sync_schedule: "0 3 * * *" diff --git a/config/settings/test.yml b/config/settings/test.yml index c2fb4f99f5..88f0a218cf 100644 --- a/config/settings/test.yml +++ b/config/settings/test.yml @@ -36,3 +36,4 @@ lti: domains: <%= %w[test.host] %> token_endpoint: "http://test.host.com/login/oauth2/token" unpermitted_new_course_message: 'You are not permitted to create a new MarkUs course for %{course_name}. Please contact your system administrator.' + sync_schedule: "0 3 * * *" diff --git a/spec/controllers/courses_controller_spec.rb b/spec/controllers/courses_controller_spec.rb index bdc7d44958..d161d8fbfb 100644 --- a/spec/controllers/courses_controller_spec.rb +++ b/spec/controllers/courses_controller_spec.rb @@ -619,4 +619,47 @@ expect(response.parsed_body[0]).to have_key('lti_client') end end + + describe 'sync_roster' do + let!(:lti_deployment) { create(:lti_deployment, course: course) } + + before do + create(:lti_service_namesrole, lti_deployment: lti_deployment) + create(:lti_service_lineitem, lti_deployment: lti_deployment) + end + + after do + Resque.remove_schedule("LtiRosterSync_#{lti_deployment.id}_#{root_path.tr!('/', '')}") + clear_enqueued_jobs + clear_performed_jobs + end + + it 'enqueues a job' do + post_as instructor, :sync_roster, + params: { id: course.id, lti_deployment_id: lti_deployment.id, include_students: 'true' } + expect { LtiRosterSyncJob.perform_later }.to have_enqueued_job + end + + it 'creates a schedule' do + post_as instructor, :sync_roster, + params: { id: course.id, lti_deployment_id: lti_deployment.id, + include_students: 'true', automatic_sync: 'true' } + expect(Resque.fetch_schedule("LtiRosterSync_#{lti_deployment.id}_#{root_path.tr!('/', '')}")).not_to be_nil + end + + it 'unsets a schedule' do + post_as instructor, :sync_roster, + params: { id: course.id, lti_deployment_id: lti_deployment.id, + include_students: 'true', automatic_sync: 'true' } + post_as instructor, :sync_roster, + params: { id: course.id, lti_deployment_id: lti_deployment.id, include_students: 'true' } + expect(Resque.fetch_schedule("LtiRosterSync_#{lti_deployment.id}_#{root_path.tr!('/', '')}")).to be_nil + end + + it 'does not raise an error when no schedule can be unset' do + post_as instructor, :sync_roster, + params: { id: course.id, lti_deployment_id: lti_deployment.id, include_students: 'true' } + expect(response).to have_http_status :redirect + end + end end diff --git a/spec/helpers/lti_helper_spec.rb b/spec/helpers/lti_helper_spec.rb index 47b1d7517f..9069cb1370 100644 --- a/spec/helpers/lti_helper_spec.rb +++ b/spec/helpers/lti_helper_spec.rb @@ -95,8 +95,8 @@ context 'when run by an admin user' do subject do - roster_sync lti_deployment, course, [LtiDeployment::LTI_ROLES[:learner]], can_create_users: true, - can_create_roles: true + roster_sync lti_deployment, [LtiDeployment::LTI_ROLES[:learner]], can_create_users: true, + can_create_roles: true end it 'creates a new user' do @@ -127,8 +127,8 @@ context 'when run by an instructor' do subject do - roster_sync lti_deployment, course, [LtiDeployment::LTI_ROLES[:learner]], can_create_users: true, - can_create_roles: true + roster_sync lti_deployment, [LtiDeployment::LTI_ROLES[:learner]], can_create_users: true, + can_create_roles: true end it 'does create users' do @@ -171,7 +171,7 @@ context 'when run by an admin user' do subject do - roster_sync lti_deployment, course, [LtiDeployment::LTI_ROLES[:learner], LtiDeployment::LTI_ROLES[:ta]], + roster_sync lti_deployment, [LtiDeployment::LTI_ROLES[:learner], LtiDeployment::LTI_ROLES[:ta]], can_create_users: true, can_create_roles: true end @@ -203,7 +203,7 @@ context 'when run by an instructor' do subject do - roster_sync lti_deployment, course, [LtiDeployment::LTI_ROLES[:learner], LtiDeployment::LTI_ROLES[:ta]], + roster_sync lti_deployment, [LtiDeployment::LTI_ROLES[:learner], LtiDeployment::LTI_ROLES[:ta]], can_create_users: true, can_create_roles: true end @@ -247,8 +247,8 @@ context 'when run by an admin user' do subject do - roster_sync lti_deployment, course, [LtiDeployment::LTI_ROLES[:learner], LtiDeployment::LTI_ROLES[:ta], - LtiDeployment::LTI_ROLES[:instructor]], + roster_sync lti_deployment, [LtiDeployment::LTI_ROLES[:learner], LtiDeployment::LTI_ROLES[:ta], + LtiDeployment::LTI_ROLES[:instructor]], can_create_users: true, can_create_roles: true end @@ -280,8 +280,8 @@ context 'when run by an instructor' do subject do - roster_sync lti_deployment, course, [LtiDeployment::LTI_ROLES[:learner], LtiDeployment::LTI_ROLES[:ta], - LtiDeployment::LTI_ROLES[:instructor]], + roster_sync lti_deployment, [LtiDeployment::LTI_ROLES[:learner], LtiDeployment::LTI_ROLES[:ta], + LtiDeployment::LTI_ROLES[:instructor]], can_create_users: true, can_create_roles: true end @@ -318,8 +318,8 @@ context 'with paginated results' do subject do - roster_sync lti_deployment, course, [LtiDeployment::LTI_ROLES[:learner], LtiDeployment::LTI_ROLES[:ta], - LtiDeployment::LTI_ROLES[:instructor]], + roster_sync lti_deployment, [LtiDeployment::LTI_ROLES[:learner], LtiDeployment::LTI_ROLES[:ta], + LtiDeployment::LTI_ROLES[:instructor]], can_create_users: true, can_create_roles: true end diff --git a/spec/jobs/lti_roster_sync_job_spec.rb b/spec/jobs/lti_roster_sync_job_spec.rb index d1ca323d0a..1f8517fa96 100644 --- a/spec/jobs/lti_roster_sync_job_spec.rb +++ b/spec/jobs/lti_roster_sync_job_spec.rb @@ -30,7 +30,7 @@ context 'when running as a background job' do let(:job_args) do - [lti_deployment.id, course, [LtiDeployment::LTI_ROLES[:learner], LtiDeployment::LTI_ROLES[:ta]]] + [lti_deployment.id, [LtiDeployment::LTI_ROLES[:learner], LtiDeployment::LTI_ROLES[:ta]]] end include_examples 'background job' From 89fc20eb038e79215f5720aa340288bf99f7c163 Mon Sep 17 00:00:00 2001 From: Pranav Rao <56097527+pranavrao145@users.noreply.github.com> Date: Wed, 18 Sep 2024 15:22:22 -0400 Subject: [PATCH 033/102] Only include most recent test results in test summary download (#7214) * feat(most-recent-test-results): fixed JSON/CSV summary of tests to only have results from latest test run --- Changelog.md | 1 + app/models/assignment.rb | 33 ++++++++++--------- .../assignments_controller_spec.rb | 4 +-- spec/models/assignment_spec.rb | 16 ++++++++- 4 files changed, 36 insertions(+), 18 deletions(-) diff --git a/Changelog.md b/Changelog.md index a50e322d52..73b8de355d 100644 --- a/Changelog.md +++ b/Changelog.md @@ -11,6 +11,7 @@ ### 🐛 Bug fixes - Fix incorrect calculation of token penalties when submissions are on time (#7216) +- Fix JSON/CSV summary of test results to always be inline with latest test run (#7214) ### 🔧 Internal changes diff --git a/app/models/assignment.rb b/app/models/assignment.rb index 8fea685f10..1a7eca45cf 100644 --- a/app/models/assignment.rb +++ b/app/models/assignment.rb @@ -634,22 +634,25 @@ def summary_json(user) # Generates the summary of the most test results associated with an assignment. def summary_test_results - test_groups_query = self.test_groups - .joins(test_group_results: { test_run: :grouping }) - .group('test_groups.id', 'groupings.id') - .select('test_groups.id AS test_groups_id', - 'MAX(test_group_results.created_at) AS test_group_results_created_at') - .where.not('test_runs.submission_id': nil) - .to_sql - - self.test_groups - .joins(test_group_results: [:test_results, { test_run: { grouping: :group } }]) - .joins("INNER JOIN (#{test_groups_query}) sub \ - ON test_groups.id = sub.test_groups_id - AND test_group_results_test_groups.created_at = sub.test_group_results_created_at") + latest_test_run_by_grouping = TestRun.group('grouping_id').select('MAX(created_at) as test_runs_created_at', + 'grouping_id') + .where.not(submission_id: nil) + .to_sql + + latest_test_runs = TestRun + .joins(grouping: :group) + .joins("INNER JOIN (#{latest_test_run_by_grouping}) latest_test_run_by_grouping \ + ON latest_test_run_by_grouping.grouping_id = test_runs.grouping_id \ + AND latest_test_run_by_grouping.test_runs_created_at = test_runs.created_at") + .select('id', 'test_runs.grouping_id', 'groups.group_name') + .to_sql + + self.test_groups.joins(test_group_results: :test_results) + .joins("INNER JOIN (#{latest_test_runs}) latest_test_runs \ + ON test_group_results.test_run_id = latest_test_runs.id") .select('test_groups.name', - 'test_groups_id', - 'groups.group_name', + 'test_groups.id as test_groups_id', + 'latest_test_runs.group_name', 'test_results.name as test_result_name', 'test_results.status', 'test_results.marks_earned', diff --git a/spec/controllers/assignments_controller_spec.rb b/spec/controllers/assignments_controller_spec.rb index 0cd5e3ab30..eb1fbbb63b 100644 --- a/spec/controllers/assignments_controller_spec.rb +++ b/spec/controllers/assignments_controller_spec.rb @@ -183,7 +183,7 @@ test_results = CSV.parse(response.body, headers: true) expect(test_results.to_a.size).to eq 4 - expect(test_results.headers.length).to eq 10 + expect(test_results.headers.length).to eq 4 end it 'returns the correct csv headers' do @@ -219,7 +219,7 @@ count += 1 end end - expect(count).to eq 3 + expect(count).to eq 1 end end diff --git a/spec/models/assignment_spec.rb b/spec/models/assignment_spec.rb index c021e70543..cc5b030f96 100644 --- a/spec/models/assignment_spec.rb +++ b/spec/models/assignment_spec.rb @@ -2058,7 +2058,7 @@ def grouping_count(groupings) end end - context 'an assignment with test results' do + context 'an assignment with test results across multiple test groups' do let(:assignment) { create(:assignment_with_criteria_and_test_results) } it 'has the correct group and test names' do @@ -2095,6 +2095,20 @@ def grouping_count(groupings) end end end + + it 'has multiple test groups' do + expect(assignment.test_groups.size).to be > 1 + end + + # despite having multiple test groups, assignment is set up so every test + # run contains results from exactly one test group; so this should also + # return results from only one test group + it 'returns results from only one test group for each group' do + summary_test_results = JSON.parse(assignment.summary_test_result_json) + summary_test_results.map do |_group_name, group| + expect(group.count).to eq 1 + end + end end end From 0a03ff510a034c29199d42ba156cef14e2610cb0 Mon Sep 17 00:00:00 2001 From: Aina Merchant <129339474+AinaMerch@users.noreply.github.com> Date: Wed, 18 Sep 2024 15:58:22 -0400 Subject: [PATCH 034/102] Enable assigning graders by section (#7179) --- Changelog.md | 1 + .../Modals/section_distribution_modal.js | 80 +++++++++++++++ .../Components/graders_manager.jsx | 41 ++++++++ app/assets/javascripts/fontawesome_config.js | 2 + app/controllers/graders_controller.rb | 69 +++++++++++-- app/models/grouping.rb | 9 ++ config/locales/views/graders/en.yml | 3 + spec/controllers/graders_controller_spec.rb | 98 +++++++++++++++++++ 8 files changed, 296 insertions(+), 7 deletions(-) create mode 100644 app/assets/javascripts/Components/Modals/section_distribution_modal.js diff --git a/Changelog.md b/Changelog.md index 73b8de355d..96e0ea6b02 100644 --- a/Changelog.md +++ b/Changelog.md @@ -8,6 +8,7 @@ - Improve textviewer rendering speed (#7211) - Add periodic roster syncing via LTI (#7178) +- Allow instructors to assign graders by section (#7179) ### 🐛 Bug fixes - Fix incorrect calculation of token penalties when submissions are on time (#7216) diff --git a/app/assets/javascripts/Components/Modals/section_distribution_modal.js b/app/assets/javascripts/Components/Modals/section_distribution_modal.js new file mode 100644 index 0000000000..3ea46e9ec0 --- /dev/null +++ b/app/assets/javascripts/Components/Modals/section_distribution_modal.js @@ -0,0 +1,80 @@ +import React from "react"; +import Modal from "react-modal"; +import PropTypes from "prop-types"; + +export class SectionDistributionModal extends React.Component { + static defaultProps = { + override: false, + }; + + constructor(props) { + super(props); + this.input = React.createRef(); + this.sectionsArray = Object.values(this.props.sections).sort(); + this.graderMap = this.props.graders.reduce((map, grader) => { + map[grader.user_name] = grader._id; + return map; + }, {}); + } + + componentDidMount() { + Modal.setAppElement("body"); + } + + onSubmit = event => { + event.preventDefault(); + const form = new FormData(this.input.current); + const assignments = {}; + form.forEach((value, key) => { + assignments[key] = this.graderMap[value]; + }); + this.props.onSubmit(assignments); + }; + + renderSectionRow = section => { + const {graders} = this.props; + return ( +
+ + +
+ ); + }; + + render() { + return ( + +
+
+

{I18n.t("graders.assign_by_section_modal_title")}

+

{I18n.t("graders.assign_by_section_instruction")}

+ {this.sectionsArray.map(section => this.renderSectionRow(section))} +
+
+ +
+
+
+ ); + } +} + +SectionDistributionModal.propTypes = { + graders: PropTypes.arrayOf(PropTypes.object).isRequired, + isOpen: PropTypes.bool.isRequired, + onSubmit: PropTypes.func.isRequired, + sections: PropTypes.objectOf(PropTypes.string).isRequired, +}; diff --git a/app/assets/javascripts/Components/graders_manager.jsx b/app/assets/javascripts/Components/graders_manager.jsx index cdc70c2f58..8ad927a2ac 100644 --- a/app/assets/javascripts/Components/graders_manager.jsx +++ b/app/assets/javascripts/Components/graders_manager.jsx @@ -6,6 +6,7 @@ import {FontAwesomeIcon} from "@fortawesome/react-fontawesome"; import {withSelection, CheckboxTable} from "./markus_with_selection_hoc"; import {selectFilter} from "./Helpers/table_helpers"; import {GraderDistributionModal} from "./Modals/graders_distribution_modal"; +import {SectionDistributionModal} from "./Modals/section_distribution_modal"; class GradersManager extends React.Component { constructor(props) { @@ -22,6 +23,7 @@ class GradersManager extends React.Component { hide_unassigned_criteria: false, sections: {}, isGraderDistributionModalOpen: false, + isSectionDistributionModalOpen: false, show_hidden: false, show_hidden_groups: false, hidden_graders_count: 0, @@ -51,6 +53,11 @@ class GradersManager extends React.Component { isGraderDistributionModalOpen: true, }); }; + openSectionDistributionModal = () => { + this.setState({ + isSectionDistributionModalOpen: true, + }); + }; fetchData = () => { fetch(Routes.course_assignment_graders_path(this.props.course_id, this.props.assignment_id), { @@ -87,6 +94,7 @@ class GradersManager extends React.Component { anonymize_groups: res.anonymize_groups, hide_unassigned_criteria: res.hide_unassigned_criteria, isGraderDistributionModalOpen: false, + isSectionDistributionModalOpen: false, hidden_graders_count: res.graders.filter(grader => grader.hidden).length, inactive_groups_count: inactive_groups_count, }); @@ -124,6 +132,25 @@ class GradersManager extends React.Component { }).then(this.fetchData); }; + assignSections = assignments => { + let sections = Object.keys(assignments); + let graders = Object.values(assignments); + $.post({ + url: Routes.global_actions_course_assignment_graders_path( + this.props.course_id, + this.props.assignment_id + ), + data: { + global_actions: "assign_sections", + current_table: this.state.tableName, + skip_empty_submissions: this.state.skip_empty_submissions, + assignments: assignments, + sections: sections, + graders: graders, + }, + }).then(this.fetchData); + }; + assignRandomly = weightings => { let groups = this.groupsTable ? this.groupsTable.state.selection : []; let criteria = this.criteriaTable ? this.criteriaTable.state.selection : []; @@ -305,6 +332,7 @@ class GradersManager extends React.Component { )} + {this.state.isSectionDistributionModalOpen && ( + this.setState({isSectionDistributionModalOpen: false})} + onSubmit={this.assignSections} + graders={this.state.graders} + sections={this.state.sections} + /> + )} ); } @@ -778,6 +815,10 @@ class GradersActionBox extends React.Component { {I18n.t("graders.actions.randomly_assign_graders")} +