From 5c2c4f71d2ae6a6cd6c8e37c51f785a96c7f0243 Mon Sep 17 00:00:00 2001 From: jacquemo Date: Fri, 30 Aug 2024 14:47:45 +0200 Subject: [PATCH 01/12] dev recommendation export --- Gemfile | 7 ++--- Gemfile.lock | 8 +++++ .../paginable/guidance_group_controller.rb | 15 ++++++++++ .../dmpopidor/public_pages_controller.rb | 29 +++++++++++++++++++ app/models/guidance_group.rb | 1 + .../branded/layouts/_navigation.html.erb | 4 +++ .../_guidance_group_export.html.erb | 15 ++++++++++ config/application.rb | 1 + config/initializers/grover.rb | 24 +++++++++++++++ config/initializers/mime_types.rb | 2 ++ config/routes.rb | 7 +++-- package.json | 1 + 12 files changed, 108 insertions(+), 6 deletions(-) create mode 100644 app/controllers/dmpopidor/paginable/guidance_group_controller.rb create mode 100644 app/views/guidance_group_exports/_guidance_group_export.html.erb create mode 100644 config/initializers/grover.rb diff --git a/Gemfile b/Gemfile index 38ecb5e18f..ace2ea33b2 100644 --- a/Gemfile +++ b/Gemfile @@ -44,7 +44,7 @@ gem 'propshaft' # (https://github.com/redis/redis-rb) gem "redis" -# redis-actionpack provides a session store for ActionPack, specifically for ActionDispatch. +# redis-actionpack provides a session store for ActionPack, specifically for ActionDispatch. # (https://github.com/redis-store/redis-actionpack) gem 'redis-actionpack' # Use Active Model has_secure_password @@ -368,7 +368,7 @@ group :development do end gem 'net-smtp' - +gem "foreman", "~> 0.88.1" # ======================# # MADMP OPIDOR FEATURES # # ===================== # @@ -377,5 +377,4 @@ gem 'madmp_opidor', path: 'engines/madmp_opidor' # , git: 'https://github.com/OP group :build do gem 'activerecord-nulldb-adapter' end - -gem "foreman", "~> 0.88.1" +gem 'grover', '~> 1.1' diff --git a/Gemfile.lock b/Gemfile.lock index 73eaf4d0b8..c3ab84d887 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -139,6 +139,9 @@ GEM open4 (~> 1.3) coderay (1.1.3) colored2 (3.1.2) + combine_pdf (1.0.26) + matrix + ruby-rc4 (>= 0.1.5) concurrent-ruby (1.3.4) connection_pool (2.4.1) contact_us (1.2.0) @@ -245,6 +248,9 @@ GEM rchardet (~> 1.8) globalid (1.2.1) activesupport (>= 6.1) + grover (1.1.9) + combine_pdf (~> 1.0) + nokogiri (~> 1.0) guard (2.18.1) formatador (>= 0.2.4) listen (>= 2.7, < 4.0) @@ -546,6 +552,7 @@ GEM rubocop (>= 1.48.1, < 2.0) rubocop-ast (>= 1.31.1, < 2.0) ruby-progressbar (1.13.0) + ruby-rc4 (0.1.5) ruby2_keywords (0.0.5) ruby_dig (0.0.2) rubyzip (2.3.2) @@ -658,6 +665,7 @@ DEPENDENCIES flag_shih_tzu foreman (~> 0.88.1) fuubar + grover (~> 1.1) guard htmltoword httparty diff --git a/app/controllers/dmpopidor/paginable/guidance_group_controller.rb b/app/controllers/dmpopidor/paginable/guidance_group_controller.rb new file mode 100644 index 0000000000..c6917d985c --- /dev/null +++ b/app/controllers/dmpopidor/paginable/guidance_group_controller.rb @@ -0,0 +1,15 @@ +module Dmpopidor + module Paginable + # Customized code for Paginable GuidanceGroupsController + module GuidanceGroupsController + # GET /paginable/guidance_groups/publicly_visible/:page (AJAX) + # ----------------------------------------------------- + def publicly_visible + # We want the pagination/sort/search to be retained in the URL so redirect instead + # of processing this as a JSON + paginable_params = params.permit(:page, :search, :sort_field, :sort_direction) + redirect_to public_guidance_groups_path(paginable_params.to_h) + end + end + end +end diff --git a/app/controllers/dmpopidor/public_pages_controller.rb b/app/controllers/dmpopidor/public_pages_controller.rb index 87429544fc..8cf4b2375a 100644 --- a/app/controllers/dmpopidor/public_pages_controller.rb +++ b/app/controllers/dmpopidor/public_pages_controller.rb @@ -23,6 +23,35 @@ def template_index .where(id: templates.uniq.flatten) .unarchived.published.order('orgs.name asc').page(1) end + + def guidance_group_index + @guidance_groups_query_params = { + page: paginable_params.fetch(:page, 1), + search: paginable_params.fetch(:search, ''), + sort_field: paginable_params.fetch(:sort_field, 'guidance_groups.name'), + sort_direction: paginable_params.fetch(:sort_direction, 'asc') + } + + guidance_groups = ::GuidanceGroup.published.pluck(:id) + @guidance_groups = ::GuidanceGroup.includes(:org) + .where(id: guidance_groups.uniq.flatten).order('orgs.name asc').page(1) + end + + def guidance_group_export + @guidance_group = GuidanceGroup.includes(guidances: :themes).find(params[:id]) + html = render_to_string({ + partial: 'branded/guidance_group_exports/guidance_group_export', + locals: { guidance_group: @guidance_group }, + layout: false + }) + file_name = @guidance_group.name.gsub(/[^a-zA-Z\d\s]/, '').tr(' ', '_') + respond_to do |format| + format.html do + pdf = Grover.new(html).to_pdf + send_data(pdf, disposition: 'inline', filename: "#{file_name}.pdf", type: 'application/pdf') + end + end + end # rubocop:enable Metrics/AbcSize end end diff --git a/app/models/guidance_group.rb b/app/models/guidance_group.rb index b7b3a82043..b138ea6b63 100644 --- a/app/models/guidance_group.rb +++ b/app/models/guidance_group.rb @@ -34,6 +34,7 @@ class GuidanceGroup < ApplicationRecord # ================ belongs_to :org + belongs_to :language has_many :guidances, dependent: :destroy diff --git a/app/views/branded/layouts/_navigation.html.erb b/app/views/branded/layouts/_navigation.html.erb index 2a7c356a74..e5a9049708 100644 --- a/app/views/branded/layouts/_navigation.html.erb +++ b/app/views/branded/layouts/_navigation.html.erb @@ -64,6 +64,10 @@
  • > <%= link_to _('DMP Templates'), public_templates_path + "#content" %>
  • + +
  • > + <%= link_to _('Guidance Groups'), public_guidance_groups_path + "#content" %> +
  • diff --git a/app/views/guidance_group_exports/_guidance_group_export.html.erb b/app/views/guidance_group_exports/_guidance_group_export.html.erb new file mode 100644 index 0000000000..1a7702343b --- /dev/null +++ b/app/views/guidance_group_exports/_guidance_group_export.html.erb @@ -0,0 +1,15 @@ + + + + + + <%= @guidance_group.name %> + + + + + +

    <%= "#{@guidance_group.name}" %>

    + + + diff --git a/config/application.rb b/config/application.rb index 00638820ea..3233488b6f 100644 --- a/config/application.rb +++ b/config/application.rb @@ -5,6 +5,7 @@ require 'rails/all' require 'csv' +require 'grover' # Require the gems listed in Gemfile, including any gems # you've limited to :test, :development, or :production. diff --git a/config/initializers/grover.rb b/config/initializers/grover.rb new file mode 100644 index 0000000000..5de9c4bda0 --- /dev/null +++ b/config/initializers/grover.rb @@ -0,0 +1,24 @@ +Grover.configure do |config| + config.options = { + format: 'A4', + margin: { + top: '5px', + bottom: '10cm' + }, + user_agent: 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0', + viewport: { + width: 1920, + height: 1080 + }, + prefer_css_page_size: true, + emulate_media: 'screen', + bypass_csp: true, + timezone: 'Europe/Paris', + cache: false, + timeout: 2000, + request_timeout: 1000, + convert_timeout: 2000, + launch_args: ['--font-render-hinting=medium'], + wait_until: 'domcontentloaded' + } +end diff --git a/config/initializers/mime_types.rb b/config/initializers/mime_types.rb index 6e1d16f027..6fb80dc3cd 100644 --- a/config/initializers/mime_types.rb +++ b/config/initializers/mime_types.rb @@ -1,5 +1,7 @@ # frozen_string_literal: true + # Be sure to restart your server when you modify this file. # Add new mime types for use in respond_to blocks: # Mime::Type.register "text/richtext", :rtf +# Mime::Type.register "application/pdf", :pdf diff --git a/config/routes.rb b/config/routes.rb index 8accb651d9..66a458fbd6 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -69,7 +69,9 @@ get 'public_plans' => 'public_pages#plan_index' get 'public_templates' => 'public_pages#template_index' get 'template_export/:id' => 'public_pages#template_export', as: 'template_export' - + get 'public_guidance_groups' => 'public_pages#guidance_group_index' + # Guidance group export + get 'guidance_group_export/:id', to: 'public_pages#guidance_group_export', as: 'guidance_group_export' # Static pages namespace :static do get ':name', to: 'static_pages#show' @@ -173,7 +175,7 @@ resources :research_outputs, only: %i[index update destroy], controller: 'research_outputs' end - resources :research_outputs, only: [:index, :show, :create, :destroy, :update], constraints: { format: [:json] } do + resources :research_outputs, only: %i[index show create destroy update], constraints: { format: [:json] } do get 'create_remote', on: :collection delete 'destroy_remote', on: :collection patch 'update_remote', on: :collection @@ -325,6 +327,7 @@ # Paginable actions for static pages resources :static_pages, only: [] do get 'index/:page', action: :index, on: :collection, as: :index + get 'publicly_visible/:page', action: :publicly_visible, on: :collection, as: :publicly_visible end # Paginable actions for departments resources :departments, only: [] do diff --git a/package.json b/package.json index 289599c4d1..95c0971eff 100755 --- a/package.json +++ b/package.json @@ -58,6 +58,7 @@ "js-cookie": "^3.0.1", "number-to-text": "^0.3.8", "popper.js": "^1.16.1", + "puppeteer": "^22.13.1", "rails-erb-loader": "^5.5.2", "react": "^18.2.0", "react-dom": "^18.2.0", From aa380edc13546f6caf4de667d9fd1fd49e12fb4e Mon Sep 17 00:00:00 2001 From: jacquemo Date: Fri, 30 Aug 2024 15:06:42 +0200 Subject: [PATCH 02/12] Dockerfile : Puppeteer --- Dockerfile | 52 ++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 42 insertions(+), 10 deletions(-) diff --git a/Dockerfile b/Dockerfile index 80e194a80e..361fceca46 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,9 +1,9 @@ FROM ruby:3.2.5-slim AS base WORKDIR /app -RUN apt update -y && apt install -y \ +RUN apt update -y && apt-get install -y --no-install-recommends \ + curl \ build-essential \ ca-certificates \ - curl \ gnupg \ wget \ libpq-dev \ @@ -11,14 +11,46 @@ RUN apt update -y && apt install -y \ imagemagick \ tzdata \ gnupg2 && \ - wget -qO- https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - && \ - echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list && \ - apt update -y && apt install -y yarn && \ - apt clean && \ - rm -rf /var/lib/apt/lists/* && \ - ln -sf /usr/share/zoneinfo/Europe/Paris /etc/localtime && \ - ln -sf /usr/bin/wkhtmltopdf /usr/local/bin/wkhtmltopdf && \ - chmod +x /usr/local/bin/wkhtmltopdf + curl -fsSL https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - && \ + echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list && \ + curl -fsSL https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add - && \ + sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list' && \ + apt-get update -y && \ + apt-get install -y --no-install-recommends \ + gnupg2 && \ + wget -qO- https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - && \ + echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list && \ + apt update -y && apt install -y yarn && \ + apt clean && \ + rm -rf /var/lib/apt/lists/* && \ + ln -sf /usr/share/zoneinfo/Europe/Paris /etc/localtime && \ + ln -sf /usr/bin/wkhtmltopdf /usr/local/bin/wkhtmltopdf && \ + chmod +x /usr/local/bin/wkhtmltopdf\ + fonts-ipafont-gothic \ + fonts-wqy-zenhei \ + fonts-thai-tlwg \ + fonts-kacst \ + fonts-freefont-ttf \ + libxss1 \ + yarn \ + google-chrome-stable && \ + ln -sf /usr/share/zoneinfo/Europe/Paris /etc/localtime && \ + ln -sf /usr/bin/wkhtmltopdf /usr/local/bin/wkhtmltopdf && \ + chmod +x /usr/local/bin/wkhtmltopdf && \ + apt-get clean && \ + rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* + +# Add and set up dumb-init +ADD https://github.com/Yelp/dumb-init/releases/download/v1.2.2/dumb-init_1.2.2_x86_64 /usr/local/bin/dumb-init +RUN chmod +x /usr/local/bin/dumb-init + +# Environment variables for Puppeteer +ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true \ + GROVER_NO_SANDBOX=true + +# Set entrypoint +ENTRYPOINT ["dumb-init", "--"] + FROM base AS dev COPY . . From 111cc0b22bf10efd09b49e924e901db565e74095 Mon Sep 17 00:00:00 2001 From: jacquemo Date: Fri, 30 Aug 2024 15:32:56 +0200 Subject: [PATCH 03/12] Dockerfile branch puppeteer --- Dockerfile | 39 ++-- yarn.lock | 568 ++++++++++++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 558 insertions(+), 49 deletions(-) diff --git a/Dockerfile b/Dockerfile index 361fceca46..873142e402 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,15 +1,11 @@ -FROM ruby:3.2.5-slim AS base +FROM ruby:3.2.4-slim AS base + WORKDIR /app -RUN apt update -y && apt-get install -y --no-install-recommends \ + +# Install necessary dependencies +RUN apt-get update -y && \ + apt-get install -y --no-install-recommends \ curl \ - build-essential \ - ca-certificates \ - gnupg \ - wget \ - libpq-dev \ - wkhtmltopdf \ - imagemagick \ - tzdata \ gnupg2 && \ curl -fsSL https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - && \ echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list && \ @@ -17,15 +13,12 @@ RUN apt update -y && apt-get install -y --no-install-recommends \ sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list' && \ apt-get update -y && \ apt-get install -y --no-install-recommends \ - gnupg2 && \ - wget -qO- https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - && \ - echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list && \ - apt update -y && apt install -y yarn && \ - apt clean && \ - rm -rf /var/lib/apt/lists/* && \ - ln -sf /usr/share/zoneinfo/Europe/Paris /etc/localtime && \ - ln -sf /usr/bin/wkhtmltopdf /usr/local/bin/wkhtmltopdf && \ - chmod +x /usr/local/bin/wkhtmltopdf\ + build-essential \ + ca-certificates \ + libpq-dev \ + wkhtmltopdf \ + imagemagick \ + tzdata \ fonts-ipafont-gothic \ fonts-wqy-zenhei \ fonts-thai-tlwg \ @@ -51,7 +44,6 @@ ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true \ # Set entrypoint ENTRYPOINT ["dumb-init", "--"] - FROM base AS dev COPY . . ENV NODE_MAJOR=20 @@ -73,12 +65,15 @@ RUN bin/docker ${DB_ADAPTER:-postgres} && \ rm -rf node_modules && \ bundle config set --local without 'mysql thin test ci aws development build' && \ bundle install +RUN mkdir -p .ssl && \ + openssl req -new -newkey rsa:2048 -sha1 -subj "/CN=`hostname`" -days 730 -nodes -x509 -keyout ./.ssl/cert.key -out ./.ssl/cert.crt FROM base AS production COPY . . COPY --from=production-builder /app/public ./public COPY --from=production-builder /app/config ./config COPY --from=production-builder /usr/local/bundle /usr/local/bundle +COPY --from=production-builder /app/.ssl ./.ssl EXPOSE 3000 -RUN chmod a+x /app/bin/run -CMD [ "/app/bin/run" ] +RUN chmod a+x /app/bin/prod +CMD [ "/app/bin/prod" ] diff --git a/yarn.lock b/yarn.lock index c705a56eb2..1d528924c0 100755 --- a/yarn.lock +++ b/yarn.lock @@ -1221,6 +1221,20 @@ resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== +"@puppeteer/browsers@2.3.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@puppeteer/browsers/-/browsers-2.3.0.tgz#791ea7d80450fea24eb19fb1d70c367ad4e08cae" + integrity sha512-ioXoq9gPxkss4MYhD+SFaU9p1IHFUX0ILAWFPyjGaBdjLsYAlZw6j1iLA0N/m12uVHLFDfSYNF7EQccjinIMDA== + dependencies: + debug "^4.3.5" + extract-zip "^2.0.1" + progress "^2.0.3" + proxy-agent "^6.4.0" + semver "^7.6.3" + tar-fs "^3.0.6" + unbzip2-stream "^1.4.3" + yargs "^17.7.2" + "@rails/actioncable@^7.0": version "7.2.100" resolved "https://registry.yarnpkg.com/@rails/actioncable/-/actioncable-7.2.100.tgz#86ec1c2e00c357cef1e421fd63863d5c34339ce8" @@ -1253,6 +1267,11 @@ resolved "https://registry.yarnpkg.com/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz#821f8442f4175d8f0467b9daf26e3a18e2d02af2" integrity sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA== +"@tootallnate/quickjs-emscripten@^0.23.0": + version "0.23.0" + resolved "https://registry.yarnpkg.com/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz#db4ecfd499a9765ab24002c3b696d02e6d32a12c" + integrity sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA== + "@types/cookie@^0.4.1": version "0.4.1" resolved "https://registry.yarnpkg.com/@types/cookie/-/cookie-0.4.1.tgz#bfd02c1f2224567676c1545199f87c3a861d878d" @@ -1265,6 +1284,22 @@ dependencies: "@types/node" "*" +"@types/eslint-scope@^3.7.3": + version "3.7.7" + resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.7.tgz#3108bd5f18b0cdb277c867b3dd449c9ed7079ac5" + integrity sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg== + dependencies: + "@types/eslint" "*" + "@types/estree" "*" + +"@types/eslint@*": + version "9.6.1" + resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-9.6.1.tgz#d5795ad732ce81715f27f75da913004a56751584" + integrity sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag== + dependencies: + "@types/estree" "*" + "@types/json-schema" "*" + "@types/eslint@^8.56.10": version "8.56.11" resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.56.11.tgz#e2ff61510a3b9454b3329fe7731e3b4c6f780041" @@ -1331,6 +1366,13 @@ dependencies: "@types/yargs-parser" "*" +"@types/yauzl@^2.9.1": + version "2.10.3" + resolved "https://registry.yarnpkg.com/@types/yauzl/-/yauzl-2.10.3.tgz#e9b2808b4f109504a03cda958259876f61017999" + integrity sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q== + dependencies: + "@types/node" "*" + "@ungap/structured-clone@^1.2.0": version "1.2.0" resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406" @@ -1505,6 +1547,13 @@ acorn@^8.7.1, acorn@^8.8.2, acorn@^8.9.0: resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.12.1.tgz#71616bdccbe25e27a54439e0046e89ca76df2248" integrity sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg== +agent-base@^7.0.2, agent-base@^7.1.0, agent-base@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.1.tgz#bdbded7dfb096b751a2a087eeeb9664725b2e317" + integrity sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA== + dependencies: + debug "^4.3.4" + ajv-formats@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-2.1.1.tgz#6e669400659eb74973bbf2e33327180a0996b520" @@ -1685,6 +1734,13 @@ arraybuffer.prototype.slice@^1.0.3: is-array-buffer "^3.0.4" is-shared-array-buffer "^1.0.2" +ast-types@^0.13.4: + version "0.13.4" + resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.13.4.tgz#ee0d77b343263965ecc3fb62da16e7222b2b6782" + integrity sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w== + dependencies: + tslib "^2.0.1" + autonumeric@^4.6.0: version "4.10.5" resolved "https://registry.yarnpkg.com/autonumeric/-/autonumeric-4.10.5.tgz#a6b71daceb8e31f49c4580f1c18925e2ff35d103" @@ -1697,6 +1753,11 @@ available-typed-arrays@^1.0.7: dependencies: possible-typed-array-names "^1.0.0" +b4a@^1.6.4: + version "1.6.6" + resolved "https://registry.yarnpkg.com/b4a/-/b4a-1.6.6.tgz#a4cc349a3851987c3c4ac2d7785c18744f6da9ba" + integrity sha512-5Tk1HLk6b6ctmjIkAcU/Ujv/1WqiDl0F0JdRCR80VsOcUlHcu7pWeWRlOqQLHfDEsVx9YH/aif5AG4ehoCtTmg== + babel-loader@^9.1.2: version "9.1.3" resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-9.1.3.tgz#3d0e01b4e69760cc694ee306fe16d358aa1c6f9a" @@ -1743,11 +1804,54 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== +bare-events@^2.0.0, bare-events@^2.2.0: + version "2.4.2" + resolved "https://registry.yarnpkg.com/bare-events/-/bare-events-2.4.2.tgz#3140cca7a0e11d49b3edc5041ab560659fd8e1f8" + integrity sha512-qMKFd2qG/36aA4GwvKq8MxnPgCQAmBWmSyLWsJcbn8v03wvIPQ/hG1Ms8bPzndZxMDoHpxez5VOS+gC9Yi24/Q== + +bare-fs@^2.1.1: + version "2.3.3" + resolved "https://registry.yarnpkg.com/bare-fs/-/bare-fs-2.3.3.tgz#0f66b203a72b9a632e9b5f2b6619d0ca19b758af" + integrity sha512-7RYKL+vZVCyAsMLi5SPu7QGauGGT8avnP/HO571ndEuV4MYdGXvLhtW67FuLPeEI8EiIY7zbbRR9x7x7HU0kgw== + dependencies: + bare-events "^2.0.0" + bare-path "^2.0.0" + bare-stream "^2.0.0" + +bare-os@^2.1.0: + version "2.4.2" + resolved "https://registry.yarnpkg.com/bare-os/-/bare-os-2.4.2.tgz#2de697579bfc7830a2b1892fe09a9cb365ee2352" + integrity sha512-HZoJwzC+rZ9lqEemTMiO0luOePoGYNBgsLLgegKR/cljiJvcDNhDZQkzC+NC5Oh0aHbdBNSOHpghwMuB5tqhjg== + +bare-path@^2.0.0, bare-path@^2.1.0: + version "2.1.3" + resolved "https://registry.yarnpkg.com/bare-path/-/bare-path-2.1.3.tgz#594104c829ef660e43b5589ec8daef7df6cedb3e" + integrity sha512-lh/eITfU8hrj9Ru5quUp0Io1kJWIk1bTjzo7JH1P5dWmQ2EL4hFUlfI8FonAhSlgIfhn63p84CDY/x+PisgcXA== + dependencies: + bare-os "^2.1.0" + +bare-stream@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/bare-stream/-/bare-stream-2.2.0.tgz#4046dce7567a5a9d2a4d416f6c2c178f6e13361f" + integrity sha512-+o9MG5bPRRBlkVSpfFlMag3n7wMaIZb4YZasU2+/96f+3HTQ4F9DKQeu3K/Sjz1W0umu6xvVq1ON0ipWdMlr3A== + dependencies: + streamx "^2.18.0" + +base64-js@^1.3.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + base64id@2.0.0, base64id@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/base64id/-/base64id-2.0.0.tgz#2770ac6bc47d312af97a8bf9a634342e0cd25cb6" integrity sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog== +basic-ftp@^5.0.2: + version "5.0.5" + resolved "https://registry.yarnpkg.com/basic-ftp/-/basic-ftp-5.0.5.tgz#14a474f5fffecca1f4f406f1c26b18f800225ac0" + integrity sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg== + big.js@^5.2.2: version "5.2.2" resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" @@ -1838,11 +1942,24 @@ browserslist@^4.23.1, browserslist@^4.23.3: node-releases "^2.0.18" update-browserslist-db "^1.1.0" +buffer-crc32@~0.2.3: + version "0.2.13" + resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" + integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ== + buffer-from@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== +buffer@^5.2.1: + version "5.7.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" + integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.1.13" + bytes@3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" @@ -1918,6 +2035,15 @@ chrome-trace-event@^1.0.2: resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz#05bffd7ff928465093314708c93bdfa9bd1f0f5b" integrity sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ== +chromium-bidi@0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/chromium-bidi/-/chromium-bidi-0.6.3.tgz#363fe1ca6b9c6122b9f1b2a47f9449ecf712f755" + integrity sha512-qXlsCmpCZJAnoTYI83Iu6EdYQpMYdVkCfq08KDh2pmlVqK5t5IA9mGs4/LwCwp4fqisSOMXZxP3HIh8w8aRn0A== + dependencies: + mitt "3.0.1" + urlpattern-polyfill "10.0.0" + zod "3.23.8" + ci-info@^3.2.0: version "3.9.0" resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4" @@ -1932,6 +2058,15 @@ cliui@^7.0.2: strip-ansi "^6.0.0" wrap-ansi "^7.0.0" +cliui@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" + integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.1" + wrap-ansi "^7.0.0" + clone-deep@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" @@ -2051,6 +2186,16 @@ cosmiconfig@^7.0.0: path-type "^4.0.0" yaml "^1.10.0" +cosmiconfig@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-9.0.0.tgz#34c3fc58287b915f3ae905ab6dc3de258b55ad9d" + integrity sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg== + dependencies: + env-paths "^2.2.1" + import-fresh "^3.3.0" + js-yaml "^4.1.0" + parse-json "^5.2.0" + cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" @@ -2084,6 +2229,11 @@ custom-event@~1.0.0: resolved "https://registry.yarnpkg.com/custom-event/-/custom-event-1.0.1.tgz#5d02a46850adf1b4a317946a3928fccb5bfd0425" integrity sha512-GAj5FOq0Hd+RsCGVJxZuKaIDXDf3h6GQoNEjFgbLLI/trgtavwUbSnZ5pVfg27DVCaWjIohryS0JFwIJyT2cMg== +data-uri-to-buffer@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-6.0.2.tgz#8a58bb67384b261a38ef18bea1810cb01badd28b" + integrity sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw== + data-view-buffer@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/data-view-buffer/-/data-view-buffer-1.0.1.tgz#8ea6326efec17a2e42620696e671d7d5a8bc66b2" @@ -2123,6 +2273,13 @@ debug@2.6.9: dependencies: ms "2.0.0" +debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@^4.3.5, debug@^4.3.6, debug@~4.3.1, debug@~4.3.2, debug@~4.3.4: + version "4.3.6" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.6.tgz#2ab2c38fbaffebf8aa95fdfe6d88438c7a13c52b" + integrity sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg== + dependencies: + ms "2.1.2" + debug@^3.2.7: version "3.2.7" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" @@ -2130,13 +2287,6 @@ debug@^3.2.7: dependencies: ms "^2.1.1" -debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@~4.3.1, debug@~4.3.2, debug@~4.3.4: - version "4.3.6" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.6.tgz#2ab2c38fbaffebf8aa95fdfe6d88438c7a13c52b" - integrity sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg== - dependencies: - ms "2.1.2" - deep-is@^0.1.3: version "0.1.4" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" @@ -2151,7 +2301,7 @@ define-data-property@^1.0.1, define-data-property@^1.1.4: es-errors "^1.3.0" gopd "^1.0.1" -define-properties@^1.1.3, define-properties@^1.2.0, define-properties@^1.2.1: +define-properties@^1.2.0, define-properties@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== @@ -2160,6 +2310,15 @@ define-properties@^1.1.3, define-properties@^1.2.0, define-properties@^1.2.1: has-property-descriptors "^1.0.0" object-keys "^1.1.1" +degenerator@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/degenerator/-/degenerator-5.0.1.tgz#9403bf297c6dad9a1ece409b37db27954f91f2f5" + integrity sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ== + dependencies: + ast-types "^0.13.4" + escodegen "^2.1.0" + esprima "^4.0.1" + depd@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" @@ -2170,6 +2329,11 @@ destroy@1.2.0: resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== +devtools-protocol@0.0.1312386: + version "0.0.1312386" + resolved "https://registry.yarnpkg.com/devtools-protocol/-/devtools-protocol-0.0.1312386.tgz#5ab824d6f1669ec6c6eb0fba047e73601d969052" + integrity sha512-DPnhUXvmvKT2dFA/j7B+riVLUt9Q6RKJlcppojL5CoRywJJKLDYnRlw0gTFKfgDPHP5E04UoB71SxoJlVZy8FA== + di@^0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/di/-/di-0.0.1.tgz#806649326ceaa7caa3306d75d985ea2748ba913c" @@ -2239,6 +2403,13 @@ encodeurl@~1.0.2: resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== +end-of-stream@^1.1.0: + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + engine.io-parser@~5.2.1: version "5.2.3" resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-5.2.3.tgz#00dc5b97b1f233a23c9398d0209504cf5f94d92f" @@ -2275,6 +2446,11 @@ ent@~2.2.0: dependencies: punycode "^1.4.1" +env-paths@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" + integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== + envinfo@^7.7.3: version "7.13.0" resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.13.0.tgz#81fbb81e5da35d74e814941aeab7c325a606fb31" @@ -2287,7 +2463,7 @@ error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" -es-abstract@^1.17.5, es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.23.0, es-abstract@^1.23.1, es-abstract@^1.23.2, es-abstract@^1.23.3: +es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.23.0, es-abstract@^1.23.1, es-abstract@^1.23.2, es-abstract@^1.23.3: version "1.23.3" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.23.3.tgz#8f0c5a35cd215312573c5a27c87dfd6c881a0aa0" integrity sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A== @@ -2428,6 +2604,17 @@ escape-string-regexp@^4.0.0: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== +escodegen@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.1.0.tgz#ba93bbb7a43986d29d6041f99f5262da773e2e17" + integrity sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w== + dependencies: + esprima "^4.0.1" + estraverse "^5.2.0" + esutils "^2.0.2" + optionalDependencies: + source-map "~0.6.1" + eslint-config-airbnb-base@^15.0.0: version "15.0.0" resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-15.0.0.tgz#6b09add90ac79c2f8d723a2580e07f3925afd236" @@ -2591,6 +2778,11 @@ espree@^9.6.0, espree@^9.6.1: acorn-jsx "^5.3.2" eslint-visitor-keys "^3.4.1" +esprima@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + esquery@^1.4.2: version "1.6.0" resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.6.0.tgz#91419234f804d852a82dceec3e16cdc22cf9dae7" @@ -2635,11 +2827,27 @@ extend@^3.0.0: resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== +extract-zip@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-2.0.1.tgz#663dca56fe46df890d5f131ef4a06d22bb8ba13a" + integrity sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg== + dependencies: + debug "^4.1.1" + get-stream "^5.1.0" + yauzl "^2.10.0" + optionalDependencies: + "@types/yauzl" "^2.9.1" + fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== +fast-fifo@^1.2.0, fast-fifo@^1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/fast-fifo/-/fast-fifo-1.3.2.tgz#286e31de96eb96d38a97899815740ba2a4f3640c" + integrity sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ== + fast-json-stable-stringify@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" @@ -2667,6 +2875,13 @@ fastq@^1.6.0: dependencies: reusify "^1.0.4" +fd-slicer@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e" + integrity sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g== + dependencies: + pend "~1.2.0" + file-entry-cache@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" @@ -2773,6 +2988,15 @@ foreground-child@^3.1.0: cross-spawn "^7.0.0" signal-exit "^4.0.1" +fs-extra@^11.2.0: + version "11.2.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.2.0.tgz#e70e17dfad64232287d01929399e0ea7c86b0e5b" + integrity sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + fs-extra@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" @@ -2833,6 +3057,13 @@ get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.3, get-intrinsic@ has-symbols "^1.0.3" hasown "^2.0.0" +get-stream@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" + integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== + dependencies: + pump "^3.0.0" + get-symbol-description@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.2.tgz#533744d5aa20aca4e079c8e5daf7fd44202821f5" @@ -2842,6 +3073,16 @@ get-symbol-description@^1.0.2: es-errors "^1.3.0" get-intrinsic "^1.2.4" +get-uri@^6.0.1: + version "6.0.3" + resolved "https://registry.yarnpkg.com/get-uri/-/get-uri-6.0.3.tgz#0d26697bc13cf91092e519aa63aa60ee5b6f385a" + integrity sha512-BzUrJBS9EcUb4cFol8r4W3v1cPsSyajLSthNkz5BxbpDcHN5tIrM10E2eNvfnvBn3DaT3DUgx0OpsBKkaOpanw== + dependencies: + basic-ftp "^5.0.2" + data-uri-to-buffer "^6.0.2" + debug "^4.3.4" + fs-extra "^11.2.0" + glob-parent@^6.0.2: version "6.0.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" @@ -2979,6 +3220,14 @@ http-errors@2.0.0: statuses "2.0.1" toidentifier "1.0.1" +http-proxy-agent@^7.0.0, http-proxy-agent@^7.0.1: + version "7.0.2" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz#9a8b1f246866c028509486585f62b8f2c18c270e" + integrity sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig== + dependencies: + agent-base "^7.1.0" + debug "^4.3.4" + http-proxy@^1.18.1: version "1.18.1" resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" @@ -2988,6 +3237,14 @@ http-proxy@^1.18.1: follow-redirects "^1.0.0" requires-port "^1.0.0" +https-proxy-agent@^7.0.3, https-proxy-agent@^7.0.5: + version "7.0.5" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz#9e8b5013873299e11fab6fd548405da2d6c602b2" + integrity sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw== + dependencies: + agent-base "^7.0.2" + debug "4" + iconv-lite@0.4.24: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" @@ -3000,6 +3257,11 @@ icss-utils@^5.0.0, icss-utils@^5.1.0: resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae" integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA== +ieee754@^1.1.13: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + ignore@^5.2.0: version "5.3.2" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5" @@ -3010,7 +3272,7 @@ immutable@^4.0.0: resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.7.tgz#c70145fc90d89fb02021e65c84eb0226e4e5a381" integrity sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw== -import-fresh@^3.2.1: +import-fresh@^3.2.1, import-fresh@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== @@ -3058,6 +3320,14 @@ interpret@^3.1.1: resolved "https://registry.yarnpkg.com/interpret/-/interpret-3.1.1.tgz#5be0ceed67ca79c6c4bc5cf0d7ee843dcea110c4" integrity sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ== +ip-address@^9.0.5: + version "9.0.5" + resolved "https://registry.yarnpkg.com/ip-address/-/ip-address-9.0.5.tgz#117a960819b08780c3bd1f14ef3c1cc1d3f3ea5a" + integrity sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g== + dependencies: + jsbn "1.1.0" + sprintf-js "^1.1.3" + is-array-buffer@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.4.tgz#7a1f92b3d61edd2bc65d24f130530ea93d7fae98" @@ -3375,6 +3645,11 @@ js-yaml@^4.1.0: dependencies: argparse "^2.0.1" +jsbn@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-1.1.0.tgz#b01307cb29b618a1ed26ec79e911f803c4da0040" + integrity sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A== + jsesc@^2.5.1: version "2.5.2" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" @@ -3429,6 +3704,15 @@ jsonfile@^4.0.0: optionalDependencies: graceful-fs "^4.1.6" +jsonfile@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== + dependencies: + universalify "^2.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + "jsx-ast-utils@^2.4.1 || ^3.0.0": version "3.3.5" resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz#4766bd05a8e2a11af222becd19e15575e52a853a" @@ -3636,6 +3920,11 @@ lru-cache@^5.1.1: dependencies: yallist "^3.0.2" +lru-cache@^7.14.1: + version "7.18.3" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.18.3.tgz#f793896e0fd0e954a59dfdd82f0773808df6aa89" + integrity sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA== + media-typer@0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" @@ -3695,6 +3984,11 @@ minimist@^1.2.0, minimist@^1.2.6: resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.2.tgz#93a9626ce5e5e66bd4db86849e7515e92340a707" integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw== +mitt@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/mitt/-/mitt-3.0.1.tgz#ea36cf0cc30403601ae074c8f77b7092cdab36d1" + integrity sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw== + mkdirp@^0.5.5: version "0.5.6" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" @@ -3737,6 +4031,11 @@ neo-async@^2.6.2: resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== +netmask@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/netmask/-/netmask-2.0.2.tgz#8b01a07644065d536383835823bc52004ebac5e7" + integrity sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg== + node-releases@^2.0.14, node-releases@^2.0.18: version "2.0.18" resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.18.tgz#f010e8d35e2fe8d6b2944f03f70213ecedc4ca3f" @@ -3805,6 +4104,15 @@ object.groupby@^1.0.1: define-properties "^1.2.1" es-abstract "^1.23.2" +object.hasown@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.4.tgz#e270ae377e4c120cdcb7656ce66884a6218283dc" + integrity sha512-FZ9LZt9/RHzGySlBARE3VF+gE26TxR38SdmqOqliuTnl9wrKulaQs+4dee1V+Io8VfxqzAfHu6YuRgUy8OHoTg== + dependencies: + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-object-atoms "^1.0.0" + object.values@^1.1.6, object.values@^1.1.7, object.values@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.2.0.tgz#65405a9d92cee68ac2d303002e0b8470a4d9ab1b" @@ -3828,7 +4136,7 @@ on-finished@~2.3.0: dependencies: ee-first "1.1.1" -once@^1.3.0: +once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== @@ -3894,6 +4202,28 @@ p-try@^2.0.0: resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== +pac-proxy-agent@^7.0.1: + version "7.0.2" + resolved "https://registry.yarnpkg.com/pac-proxy-agent/-/pac-proxy-agent-7.0.2.tgz#0fb02496bd9fb8ae7eb11cfd98386daaac442f58" + integrity sha512-BFi3vZnO9X5Qt6NRz7ZOaPja3ic0PhlsmCRYLOpN11+mWBCR6XJDqW5RF3j8jm4WGGQZtBA+bTfxYzeKW73eHg== + dependencies: + "@tootallnate/quickjs-emscripten" "^0.23.0" + agent-base "^7.0.2" + debug "^4.3.4" + get-uri "^6.0.1" + http-proxy-agent "^7.0.0" + https-proxy-agent "^7.0.5" + pac-resolver "^7.0.1" + socks-proxy-agent "^8.0.4" + +pac-resolver@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/pac-resolver/-/pac-resolver-7.0.1.tgz#54675558ea368b64d210fd9c92a640b5f3b8abb6" + integrity sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg== + dependencies: + degenerator "^5.0.0" + netmask "^2.0.2" + package-json-from-dist@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz#e501cd3094b278495eb4258d4c9f6d5ac3019f00" @@ -3906,7 +4236,7 @@ parent-module@^1.0.0: dependencies: callsites "^3.0.0" -parse-json@^5.0.0: +parse-json@^5.0.0, parse-json@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== @@ -3959,6 +4289,11 @@ path-type@^4.0.0: resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== +pend@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" + integrity sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg== + picocolors@^1.0.0, picocolors@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.1.tgz#a8ad579b571952f0e5d25892de5445bcfe25aaa1" @@ -4048,6 +4383,11 @@ prelude-ls@^1.2.1: resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== +progress@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" + integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== + prop-types@*, prop-types@^15.8.1: version "15.8.1" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" @@ -4057,6 +4397,33 @@ prop-types@*, prop-types@^15.8.1: object-assign "^4.1.1" react-is "^16.13.1" +proxy-agent@^6.4.0: + version "6.4.0" + resolved "https://registry.yarnpkg.com/proxy-agent/-/proxy-agent-6.4.0.tgz#b4e2dd51dee2b377748aef8d45604c2d7608652d" + integrity sha512-u0piLU+nCOHMgGjRbimiXmA9kM/L9EHh3zL81xCdp7m+Y2pHIsnmbdDoEDoAz5geaonNR6q6+yOPQs6n4T6sBQ== + dependencies: + agent-base "^7.0.2" + debug "^4.3.4" + http-proxy-agent "^7.0.1" + https-proxy-agent "^7.0.3" + lru-cache "^7.14.1" + pac-proxy-agent "^7.0.1" + proxy-from-env "^1.1.0" + socks-proxy-agent "^8.0.2" + +proxy-from-env@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + punycode@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" @@ -4067,6 +4434,27 @@ punycode@^2.1.0: resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== +puppeteer-core@22.15.0: + version "22.15.0" + resolved "https://registry.yarnpkg.com/puppeteer-core/-/puppeteer-core-22.15.0.tgz#c76926cce5dbc177572797a9dacc325c313fa91a" + integrity sha512-cHArnywCiAAVXa3t4GGL2vttNxh7GqXtIYGym99egkNJ3oG//wL9LkvO4WE8W1TJe95t1F1ocu9X4xWaGsOKOA== + dependencies: + "@puppeteer/browsers" "2.3.0" + chromium-bidi "0.6.3" + debug "^4.3.6" + devtools-protocol "0.0.1312386" + ws "^8.18.0" + +puppeteer@^22.13.1: + version "22.15.0" + resolved "https://registry.yarnpkg.com/puppeteer/-/puppeteer-22.15.0.tgz#4f842087090f1d9017ce947512e7baff55a10e75" + integrity sha512-XjCY1SiSEi1T7iSYuxS82ft85kwDJUS7wj1Z0eGVXKdtr5g4xnVcbjwxhq5xBnpK/E7x1VZZoJDxpjAOasHT4Q== + dependencies: + "@puppeteer/browsers" "2.3.0" + cosmiconfig "^9.0.0" + devtools-protocol "0.0.1312386" + puppeteer-core "22.15.0" + qjobs@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/qjobs/-/qjobs-1.2.0.tgz#c45e9c61800bd087ef88d7e256423bdd49e5d071" @@ -4084,6 +4472,11 @@ queue-microtask@^1.2.2: resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== +queue-tick@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/queue-tick/-/queue-tick-1.0.1.tgz#f6f07ac82c1fd60f82e098b417a80e52f1f4c142" + integrity sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag== + rails-erb-loader@^5.5.2: version "5.5.2" resolved "https://registry.yarnpkg.com/rails-erb-loader/-/rails-erb-loader-5.5.2.tgz#db3fa8ac89600f09d179a1a70a2ca18c592576ea" @@ -4364,7 +4757,7 @@ semver@^6.3.0, semver@^6.3.1: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.5.4: +semver@^7.5.4, semver@^7.6.3: version "7.6.3" resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== @@ -4437,6 +4830,11 @@ signal-exit@^4.0.1: resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== +smart-buffer@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" + integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== + socket.io-adapter@~2.5.2: version "2.5.5" resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-2.5.5.tgz#c7a1f9c703d7756844751b6ff9abfc1780664082" @@ -4466,6 +4864,23 @@ socket.io@^4.7.2: socket.io-adapter "~2.5.2" socket.io-parser "~4.2.4" +socks-proxy-agent@^8.0.2, socks-proxy-agent@^8.0.4: + version "8.0.4" + resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-8.0.4.tgz#9071dca17af95f483300316f4b063578fa0db08c" + integrity sha512-GNAq/eg8Udq2x0eNiFkr9gRg5bA7PXEWagQdeRX4cPSG+X/8V38v637gim9bjFptMk1QWsCTr0ttrJEiXbNnRw== + dependencies: + agent-base "^7.1.1" + debug "^4.3.4" + socks "^2.8.3" + +socks@^2.8.3: + version "2.8.3" + resolved "https://registry.yarnpkg.com/socks/-/socks-2.8.3.tgz#1ebd0f09c52ba95a09750afe3f3f9f724a800cb5" + integrity sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw== + dependencies: + ip-address "^9.0.5" + smart-buffer "^4.2.0" + "source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.0.tgz#16b809c162517b5b8c3e7dcd315a2a5c2612b2af" @@ -4479,7 +4894,7 @@ source-map-support@~0.5.20: buffer-from "^1.0.0" source-map "^0.6.0" -source-map@^0.6.0, source-map@^0.6.1: +source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== @@ -4489,6 +4904,11 @@ spark-md5@^3.0.1: resolved "https://registry.yarnpkg.com/spark-md5/-/spark-md5-3.0.2.tgz#7952c4a30784347abcee73268e473b9c0167e3fc" integrity sha512-wcFzz9cDfbuqe0FZzfi2or1sgyIrsDwmPwfZC4hiNidPdPINjeUwNfv5kldczoEAcjl9Y1L3SM7Uz2PUEQzxQw== +sprintf-js@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.3.tgz#4914b903a2f8b685d17fdf78a70e917e872e444a" + integrity sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA== + statuses@2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" @@ -4508,6 +4928,17 @@ streamroller@^3.1.5: debug "^4.3.4" fs-extra "^8.1.0" +streamx@^2.15.0, streamx@^2.18.0: + version "2.19.0" + resolved "https://registry.yarnpkg.com/streamx/-/streamx-2.19.0.tgz#c66a43ad667539e81967d1bacc68c1575eb9fdde" + integrity sha512-5z6CNR4gtkPbwlxyEqoDGDmWIzoNJqCBt4Eac1ICP9YaIT08ct712cFj0u1rx4F8luAuL+3Qc+RFIdI4OX00kg== + dependencies: + fast-fifo "^1.3.2" + queue-tick "^1.0.1" + text-decoder "^1.1.0" + optionalDependencies: + bare-events "^2.2.0" + "string-width-cjs@npm:string-width@^4.2.0": version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" @@ -4517,7 +4948,7 @@ streamroller@^3.1.5: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" -string-width@^4.1.0, string-width@^4.2.0: +string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -4553,14 +4984,6 @@ string.prototype.matchall@^4.0.11: set-function-name "^2.0.2" side-channel "^1.0.6" -string.prototype.repeat@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz#e90872ee0308b29435aa26275f6e1b762daee01a" - integrity sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.5" - string.prototype.trim@^1.2.9: version "1.2.9" resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz#b6fa326d72d2c78b6df02f7759c73f8f6274faa4" @@ -4666,6 +5089,26 @@ tapable@^2.1.1, tapable@^2.2.0: resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== +tar-fs@^3.0.6: + version "3.0.6" + resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-3.0.6.tgz#eaccd3a67d5672f09ca8e8f9c3d2b89fa173f217" + integrity sha512-iokBDQQkUyeXhgPYaZxmczGPhnhXZ0CmrqI+MOb/WFGS9DW5wnfrLgtjUJBvz50vQ3qfRwJ62QVoCFu8mPVu5w== + dependencies: + pump "^3.0.0" + tar-stream "^3.1.5" + optionalDependencies: + bare-fs "^2.1.1" + bare-path "^2.1.0" + +tar-stream@^3.1.5: + version "3.1.7" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-3.1.7.tgz#24b3fb5eabada19fe7338ed6d26e5f7c482e792b" + integrity sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ== + dependencies: + b4a "^1.6.4" + fast-fifo "^1.2.0" + streamx "^2.15.0" + terser-webpack-plugin@^5.3.10, terser-webpack-plugin@^5.3.9: version "5.3.10" resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz#904f4c9193c6fd2a03f693a2150c62a92f40d199" @@ -4687,11 +5130,23 @@ terser@^5.26.0: commander "^2.20.0" source-map-support "~0.5.20" +text-decoder@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/text-decoder/-/text-decoder-1.1.1.tgz#5df9c224cebac4a7977720b9f083f9efa1aefde8" + integrity sha512-8zll7REEv4GDD3x4/0pW+ppIxSNs7H1J10IKFZsuOMscumCdM2a+toDGLPA3T+1+fLBql4zbt5z83GEQGGV5VA== + dependencies: + b4a "^1.6.4" + text-table@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== +through@^2.3.8: + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== + timeago.js@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/timeago.js/-/timeago.js-4.0.2.tgz#724e8c8833e3490676c7bb0a75f5daf20e558028" @@ -4734,6 +5189,11 @@ tsconfig-paths@^3.15.0: minimist "^1.2.6" strip-bom "^3.0.0" +tslib@^2.0.1: + version "2.7.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.7.0.tgz#d9b40c5c40ab59e8738f297df3087bf1a2690c01" + integrity sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA== + type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" @@ -4813,10 +5273,18 @@ unbox-primitive@^1.0.2: has-symbols "^1.0.3" which-boxed-primitive "^1.0.2" -undici-types@~6.19.2: - version "6.19.8" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.19.8.tgz#35111c9d1437ab83a7cdc0abae2f26d88eda0a02" - integrity sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw== +unbzip2-stream@^1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz#b0da04c4371311df771cdc215e87f2130991ace7" + integrity sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg== + dependencies: + buffer "^5.2.1" + through "^2.3.8" + +undici-types@~5.26.4: + version "5.26.5" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" + integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== unicode-canonical-property-names-ecmascript@^2.0.0: version "2.0.0" @@ -4846,6 +5314,11 @@ universalify@^0.1.0: resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== +universalify@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" + integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== + unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" @@ -4866,6 +5339,11 @@ uri-js@^4.2.2: dependencies: punycode "^2.1.0" +urlpattern-polyfill@10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/urlpattern-polyfill/-/urlpattern-polyfill-10.0.0.tgz#f0a03a97bfb03cdf33553e5e79a2aadd22cac8ec" + integrity sha512-H/A06tKD7sS1O1X2SshBVeA5FLycRpjqiBeqGKmBwBDBy28EnRjORxTNe269KSSr5un5qyWi1iL61wLxpd+ZOg== + util-deprecate@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" @@ -5070,6 +5548,11 @@ wrappy@1: resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== +ws@^8.18.0: + version "8.18.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.0.tgz#0d7505a6eafe2b0e712d232b42279f53bc289bbc" + integrity sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw== + ws@~8.17.1: version "8.17.1" resolved "https://registry.yarnpkg.com/ws/-/ws-8.17.1.tgz#9293da530bb548febc95371d90f9c878727d919b" @@ -5095,6 +5578,11 @@ yargs-parser@^20.2.2: resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== +yargs-parser@^21.1.1: + version "21.1.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" + integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== + yargs@^16.1.1: version "16.2.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" @@ -5108,6 +5596,27 @@ yargs@^16.1.1: y18n "^5.0.5" yargs-parser "^20.2.2" +yargs@^17.7.2: + version "17.7.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" + integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== + dependencies: + cliui "^8.0.1" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.3" + y18n "^5.0.5" + yargs-parser "^21.1.1" + +yauzl@^2.10.0: + version "2.10.0" + resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" + integrity sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g== + dependencies: + buffer-crc32 "~0.2.3" + fd-slicer "~1.1.0" + yocto-queue@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" @@ -5117,3 +5626,8 @@ yocto-queue@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-1.1.1.tgz#fef65ce3ac9f8a32ceac5a634f74e17e5b232110" integrity sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g== + +zod@3.23.8: + version "3.23.8" + resolved "https://registry.yarnpkg.com/zod/-/zod-3.23.8.tgz#e37b957b5d52079769fb8097099b592f0ef4067d" + integrity sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g== From 99a4be5dd5681dad1577d3d2bdb256c4e7d6b7cd Mon Sep 17 00:00:00 2001 From: jacquemo Date: Wed, 4 Sep 2024 10:48:19 +0200 Subject: [PATCH 04/12] Export recommendations --- .../_guidance_group_export.html.erb | 34 ++++++++++++++++++ .../_publicly_visible.html.erb | 35 +++++++++++++++++++ .../guidance_group_index.html.erb | 24 +++++++++++++ 3 files changed, 93 insertions(+) create mode 100644 app/views/branded/guidance_group_exports/_guidance_group_export.html.erb create mode 100644 app/views/branded/paginable/guidance_groups/_publicly_visible.html.erb create mode 100644 app/views/branded/public_pages/guidance_group_index.html.erb diff --git a/app/views/branded/guidance_group_exports/_guidance_group_export.html.erb b/app/views/branded/guidance_group_exports/_guidance_group_export.html.erb new file mode 100644 index 0000000000..0eea79d1b3 --- /dev/null +++ b/app/views/branded/guidance_group_exports/_guidance_group_export.html.erb @@ -0,0 +1,34 @@ + + + + + + <%= @guidance_group.name %> + + + + + +

    <%= "#{@guidance_group.org}: #{@guidance_group.name} (#{@guidance_group.language.name})" %>

    + <% language= @guidance_group.language.abbreviation%> + <% t_list= ['description-des-donnees', 'reutilisation-de-donnees', 'collecte-des-donnees', 'metadonnees-&-documentation', 'qualite-scientifique-des-donnees', 'donnees-personnelles', 'droits-de-propriete-intellectuelle', 'ethique', 'traitement-&-analyse-des-donnees', 'stockage-&-securite', 'partage-des-donnees', 'conservation-a-long-terme'] %> + <% guidances= @guidance_group.guidances %> + <% for theme in t_list %> + <% for guidance in guidances %> + <% if guidance.themes[0].slug == theme %> + <% theme= guidance.themes[0] %> + <% if language == "fr-FR" %> +

    <%= theme.title %>

    + <% elsif language == "en-GB" %> +

    <%= theme.translations.dig('en-GB', 'title') %>

    + + <% end %> + +

    <%= sanitize guidance.text.chomp.strip %>

    + <% end %> + <% end %> + <% end %> + + + + diff --git a/app/views/branded/paginable/guidance_groups/_publicly_visible.html.erb b/app/views/branded/paginable/guidance_groups/_publicly_visible.html.erb new file mode 100644 index 0000000000..053d941012 --- /dev/null +++ b/app/views/branded/paginable/guidance_groups/_publicly_visible.html.erb @@ -0,0 +1,35 @@ +
    + + + + + + + + + + + <% scope.each do |guidance_group| %> + <% if guidance_group.published = "true"%> + + + + + + + + <% end %> + <% end %> + +
    <%= _('Guidance Group') %> <%= _('Organisation Name') %> <%= _('Last Updated') %> <%= _('Download') %>
    + <%= guidance_group.name %> + <%= guidance_group.org.name %><%= l guidance_group.updated_at.to_date, formats: :short %> + <%= link_to guidance_group_export_path(guidance_group.id), format: "pdf", target: '_blank' do %> + + <%= _('(new window)') %> + <% end %> + +
    +
    + +<%= render 'shared/copy_link_modal' %> diff --git a/app/views/branded/public_pages/guidance_group_index.html.erb b/app/views/branded/public_pages/guidance_group_index.html.erb new file mode 100644 index 0000000000..eef768feeb --- /dev/null +++ b/app/views/branded/public_pages/guidance_group_index.html.erb @@ -0,0 +1,24 @@ +<% title _('Guidance groups') %> +
    +
    +

    <%= _('Guidance groups') %>

    + <% if @guidance_groups.count > 0 %> +

    <%= _('Guidances are provided by a funder, an organisation, or a trusted party.') %>

    + <% else %> +

    <%= _('There are currently no public guidances.')%>

    + <% end %> +
    +
    +
    +
    + <% if @guidance_groups.count > 0 %> + <%= paginable_renderise( + partial: '/paginable/guidance_groups/publicly_visible', + controller: 'public_pages/guidance_group_export', + action: 'publicly_visible', + remote: false, + scope: @guidance_groups, + query_params: @guidance_groups_query_params) %> + <% end %> +
    +
    From 86472377dae037a9b950e51e7a121a046f72b58e Mon Sep 17 00:00:00 2001 From: jacquemo Date: Wed, 4 Sep 2024 13:16:02 +0200 Subject: [PATCH 05/12] guidance group export --- .../_guidance_group_export.html.erb | 21 ++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/app/views/guidance_group_exports/_guidance_group_export.html.erb b/app/views/guidance_group_exports/_guidance_group_export.html.erb index 1a7702343b..be93236bd9 100644 --- a/app/views/guidance_group_exports/_guidance_group_export.html.erb +++ b/app/views/guidance_group_exports/_guidance_group_export.html.erb @@ -9,7 +9,26 @@ -

    <%= "#{@guidance_group.name}" %>

    +

    <%= "#{@guidance_group.org}: #{@guidance_group.name} (#{@guidance_group.language.name})" %>

    + <% language= @guidance_group.language.abbreviation%> + <% t_list= ['description-des-donnees', collecte-des-donnees', 'droit-de-propriete-intellectuelle', 'data-format', 'data-reuse', 'budget'] %> + <% guidances= @guidance_group.guidances %> + <% for theme in t_list %> + <% for guidance in guidances %> + <% if guidance.themes[0].slug == theme %> + <% theme= guidance.themes[0] %> + <% if language == "fr-FR" %> +

    <%= theme.title %>

    + <% elsif language == "en-GB" %> +

    <%= theme.translations.dig('en-GB', 'title') %>

    + + <% end %> + +

    <%= sanitize guidance.text.chomp.strip %>

    + <% end %> + <% end %> + <% end %> + From 8eb785f3e6a6d35212bac0f90a6070b57d4aa459 Mon Sep 17 00:00:00 2001 From: jacquemo Date: Fri, 6 Sep 2024 09:15:20 +0200 Subject: [PATCH 06/12] themes and guidances styling --- .../dmpopidor/public_pages_controller.rb | 7 +- app/models/guidance_group.rb | 1 + .../_guidance_group_export.html.erb | 67 +++++++++++++++---- db/seeds.rb | 2 + 4 files changed, 61 insertions(+), 16 deletions(-) diff --git a/app/controllers/dmpopidor/public_pages_controller.rb b/app/controllers/dmpopidor/public_pages_controller.rb index 8cf4b2375a..f1895eeddf 100644 --- a/app/controllers/dmpopidor/public_pages_controller.rb +++ b/app/controllers/dmpopidor/public_pages_controller.rb @@ -32,13 +32,15 @@ def guidance_group_index sort_direction: paginable_params.fetch(:sort_direction, 'asc') } - guidance_groups = ::GuidanceGroup.published.pluck(:id) + guidance_groups = GuidanceGroup.where(published: true).pluck(:id) + @guidance_groups = ::GuidanceGroup.includes(:org) .where(id: guidance_groups.uniq.flatten).order('orgs.name asc').page(1) end def guidance_group_export @guidance_group = GuidanceGroup.includes(guidances: :themes).find(params[:id]) + @formatting = Settings::Template::DEFAULT_SETTINGS[:formatting] html = render_to_string({ partial: 'branded/guidance_group_exports/guidance_group_export', locals: { guidance_group: @guidance_group }, @@ -48,7 +50,8 @@ def guidance_group_export respond_to do |format| format.html do pdf = Grover.new(html).to_pdf - send_data(pdf, disposition: 'inline', filename: "#{file_name}.pdf", type: 'application/pdf') + send_data(pdf, disposition: 'inline', filename: "#{file_name}.pdf", + type: 'application/pdf') end end end diff --git a/app/models/guidance_group.rb b/app/models/guidance_group.rb index b138ea6b63..3533f00016 100644 --- a/app/models/guidance_group.rb +++ b/app/models/guidance_group.rb @@ -129,6 +129,7 @@ def self.all_viewable(user) def self.create_org_default(org) GuidanceGroup.create!( name: org.abbreviation? ? org.abbreviation : org.name, + language_id: Language.find_by(abbreviation: 'fr-FR').id, org: org, optional_subset: false ) diff --git a/app/views/branded/guidance_group_exports/_guidance_group_export.html.erb b/app/views/branded/guidance_group_exports/_guidance_group_export.html.erb index 0eea79d1b3..553a822746 100644 --- a/app/views/branded/guidance_group_exports/_guidance_group_export.html.erb +++ b/app/views/branded/guidance_group_exports/_guidance_group_export.html.erb @@ -5,30 +5,69 @@ <%= @guidance_group.name %> + + - -

    <%= "#{@guidance_group.org}: #{@guidance_group.name} (#{@guidance_group.language.name})" %>

    +

    <%= "#{@guidance_group.org}: #{@guidance_group.name} (#{@guidance_group.language.name})" %>

    <% language= @guidance_group.language.abbreviation%> - <% t_list= ['description-des-donnees', 'reutilisation-de-donnees', 'collecte-des-donnees', 'metadonnees-&-documentation', 'qualite-scientifique-des-donnees', 'donnees-personnelles', 'droits-de-propriete-intellectuelle', 'ethique', 'traitement-&-analyse-des-donnees', 'stockage-&-securite', 'partage-des-donnees', 'conservation-a-long-terme'] %> + <% t_list= ['description-des-donnees', 'reutilisation-de-donnees', 'collecte-des-donnees', 'metadonnees-documentation', 'qualite-scientifique-des-donnees', 'donnees-personnelles', 'droits-de-propriete-intellectuelle', 'ethique', 'traitement-analyse-des-donnees', 'stockage-securite', 'partage-des-donnees', 'conservation-a-long-terme'] %> <% guidances= @guidance_group.guidances %> <% for theme in t_list %> <% for guidance in guidances %> - <% if guidance.themes[0].slug == theme %> - <% theme= guidance.themes[0] %> - <% if language == "fr-FR" %> -

    <%= theme.title %>

    - <% elsif language == "en-GB" %> -

    <%= theme.translations.dig('en-GB', 'title') %>

    - + <% if guidance.published? %> + <% if guidance.themes[0].slug == theme %> + <% theme= guidance.themes[0] %> + <% if language == "fr-FR" %> +

    <%= theme.title %>

    + <% elsif language == "en-GB" %> +

    <%= theme.translations.dig('en-GB', 'title') %>

    + <% end%> +

    <%= sanitize guidance.text.chomp.strip %>

    <% end %> - -

    <%= sanitize guidance.text.chomp.strip %>

    <% end %> <% end %> <% end %> - - diff --git a/db/seeds.rb b/db/seeds.rb index be03b42381..3f9d37a5fd 100755 --- a/db/seeds.rb +++ b/db/seeds.rb @@ -309,10 +309,12 @@ # ------------------------------------------------------- guidance_groups = [ {name: "Generic Guidance (provided by the example curation centre)", + language_id: default_language.id, org: Org.find_by(abbreviation: Rails.configuration.x.organisation.abbreviation), optional_subset: true, published: true}, {name: "Government Agency Advice (Funder specific guidance)", + language_id: default_language.id, org: Org.find_by(abbreviation: 'GA'), optional_subset: false, published: true} From 1d815531aee72846c9f163f7dfa79d3cab6432c8 Mon Sep 17 00:00:00 2001 From: Benjamin FAURE Date: Thu, 12 Sep 2024 09:10:45 +0200 Subject: [PATCH 07/12] fix: variable names in guidance groups pdf export --- .../_guidance_group_export.html.erb | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/app/views/branded/guidance_group_exports/_guidance_group_export.html.erb b/app/views/branded/guidance_group_exports/_guidance_group_export.html.erb index 553a822746..3e702d985d 100644 --- a/app/views/branded/guidance_group_exports/_guidance_group_export.html.erb +++ b/app/views/branded/guidance_group_exports/_guidance_group_export.html.erb @@ -51,14 +51,14 @@

    <%= "#{@guidance_group.org}: #{@guidance_group.name} (#{@guidance_group.language.name})" %>

    - <% language= @guidance_group.language.abbreviation%> - <% t_list= ['description-des-donnees', 'reutilisation-de-donnees', 'collecte-des-donnees', 'metadonnees-documentation', 'qualite-scientifique-des-donnees', 'donnees-personnelles', 'droits-de-propriete-intellectuelle', 'ethique', 'traitement-analyse-des-donnees', 'stockage-securite', 'partage-des-donnees', 'conservation-a-long-terme'] %> - <% guidances= @guidance_group.guidances %> - <% for theme in t_list %> + <% language = @guidance_group.language.abbreviation%> + <% s_list= ['description-des-donnees', 'reutilisation-de-donnees', 'collecte-des-donnees', 'metadonnees-documentation', 'qualite-scientifique-des-donnees', 'donnees-personnelles', 'droits-de-propriete-intellectuelle', 'ethique', 'traitement-analyse-des-donnees', 'stockage-securite', 'partage-des-donnees', 'conservation-a-long-terme'] %> + <% guidances = @guidance_group.guidances %> + <% for slug in s_list %> <% for guidance in guidances %> <% if guidance.published? %> - <% if guidance.themes[0].slug == theme %> - <% theme= guidance.themes[0] %> + <% if guidance.themes[0].slug == slug %> + <% theme = guidance.themes[0] %> <% if language == "fr-FR" %>

    <%= theme.title %>

    <% elsif language == "en-GB" %> From 19a4c7d4fd1ee97dcda4671e44f804a7cd7fd110 Mon Sep 17 00:00:00 2001 From: Benjamin FAURE Date: Thu, 17 Oct 2024 08:21:02 +0200 Subject: [PATCH 08/12] feat: added sort handle to themes --- .../paginable/themes_controller.rb | 6 ++++- .../super_admin/themes_controller.rb | 12 ++++++++- .../src/superAdmin/themes/newEdit.js | 26 +++++++++++++++++++ app/policies/theme_policy.rb | 4 +++ .../branded/paginable/themes/_index.html.erb | 10 +++++-- app/views/paginable/themes/_index.html.erb | 2 +- config/routes.rb | 4 ++- ...ve_locale_and_add_translations_in_theme.rb | 0 .../20241015133454_add_number_to_themes.rb | 5 ++++ db/schema.rb | 3 ++- 10 files changed, 65 insertions(+), 7 deletions(-) mode change 100755 => 100644 db/migrate/20240531083744_remove_locale_and_add_translations_in_theme.rb create mode 100644 db/migrate/20241015133454_add_number_to_themes.rb diff --git a/app/controllers/paginable/themes_controller.rb b/app/controllers/paginable/themes_controller.rb index 19dbe3356e..76891cbb01 100644 --- a/app/controllers/paginable/themes_controller.rb +++ b/app/controllers/paginable/themes_controller.rb @@ -8,7 +8,11 @@ class ThemesController < ApplicationController # /paginable/themes/index/:page def index authorize(Theme) - paginable_renderise(partial: 'index', scope: Theme.all, format: :json) + paginable_renderise( + partial: 'index', + query_params: { sort_field: 'themes.number', sort_direction: :asc }, + scope: Theme.all, + format: :json) end end end diff --git a/app/controllers/super_admin/themes_controller.rb b/app/controllers/super_admin/themes_controller.rb index 413be5a9d2..39318d4b75 100644 --- a/app/controllers/super_admin/themes_controller.rb +++ b/app/controllers/super_admin/themes_controller.rb @@ -7,7 +7,7 @@ class ThemesController < ApplicationController def index authorize(Theme) @locales = Language::all - render(:index, locals: { themes: Theme.all.page(1) }) + render(:index, locals: { themes: Theme.all.order(:number).page(1) }) end def new @@ -61,6 +61,16 @@ def destroy render :edit end end + + + def sort + authorize(Theme) + params[:updated_order].each_with_index do |id, index| + ::Theme.find(id).update(number: index + 1) + end + head :ok + end + # Private instance methods private diff --git a/app/javascript/src/superAdmin/themes/newEdit.js b/app/javascript/src/superAdmin/themes/newEdit.js index 81b51bf55f..64d6e9dbee 100644 --- a/app/javascript/src/superAdmin/themes/newEdit.js +++ b/app/javascript/src/superAdmin/themes/newEdit.js @@ -2,4 +2,30 @@ import { Tinymce } from '../../utils/tinymce.js'; $(() => { Tinymce.init({ selector: '#theme_description' }); + + const sortableThemes = () => { + $('#themes').sortable({ + items: '.theme', + handle: '.theme-actions .handle', + update: () => { + const updatedOrder = []; + $('#themes .theme').each(function callback() { + updatedOrder.push($(this).find('.handle').data('theme-id')); + }); + $.ajax({ + url: '/super_admin/themes/sort', + method: 'post', + data: { + updated_order: updatedOrder, + }, + }); + } + }); + }; + + // Needs to re-apply sortable function after ajax paginable call + $('body').on('ajax:success', + 'a.paginable-action[data-remote="true"]', + sortableThemes); + sortableThemes(); }); diff --git a/app/policies/theme_policy.rb b/app/policies/theme_policy.rb index 9643db4ea5..60325ee0b0 100644 --- a/app/policies/theme_policy.rb +++ b/app/policies/theme_policy.rb @@ -28,4 +28,8 @@ def update? def destroy? @user.can_super_admin? end + + def sort? + @user.can_super_admin? + end end diff --git a/app/views/branded/paginable/themes/_index.html.erb b/app/views/branded/paginable/themes/_index.html.erb index fae7912634..3245ab2580 100644 --- a/app/views/branded/paginable/themes/_index.html.erb +++ b/app/views/branded/paginable/themes/_index.html.erb @@ -4,11 +4,12 @@ <%= _('Name') %> <%= paginable_sort_link('themes.title') %> <%= _('Guidance') %> <%= paginable_sort_link('themes.description') %> <%= _('Languages') %> + - + <% scope.each do |theme| %> - + <%= link_to(theme.title, edit_super_admin_theme_path(theme)) %> <%= sanitize(theme.description) %> @@ -18,6 +19,11 @@ <% languages.unshift(fr_locale.name) if fr_locale %> <%= languages.join(', ') %> + + + <% end %> diff --git a/app/views/paginable/themes/_index.html.erb b/app/views/paginable/themes/_index.html.erb index dea1556087..61b7452286 100644 --- a/app/views/paginable/themes/_index.html.erb +++ b/app/views/paginable/themes/_index.html.erb @@ -13,4 +13,4 @@ <% end %> - \ No newline at end of file + diff --git a/config/routes.rb b/config/routes.rb index 8d2dae92c2..5689752893 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -415,7 +415,9 @@ end end - resources :themes, only: %i[index new create edit update destroy] + resources :themes, only: %i[index new create edit update destroy] do + post 'sort', on: :collection + end resources :users, only: %i[edit update] do member do put :merge diff --git a/db/migrate/20240531083744_remove_locale_and_add_translations_in_theme.rb b/db/migrate/20240531083744_remove_locale_and_add_translations_in_theme.rb old mode 100755 new mode 100644 diff --git a/db/migrate/20241015133454_add_number_to_themes.rb b/db/migrate/20241015133454_add_number_to_themes.rb new file mode 100644 index 0000000000..56593646a3 --- /dev/null +++ b/db/migrate/20241015133454_add_number_to_themes.rb @@ -0,0 +1,5 @@ +class AddNumberToThemes < ActiveRecord::Migration[7.1] + def change + add_column :themes, :number, :integer + end +end diff --git a/db/schema.rb b/db/schema.rb index 413e98b0cc..36132ccc18 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema[7.1].define(version: 2024_05_31_083744) do +ActiveRecord::Schema[7.1].define(version: 2024_10_15_133454) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" enable_extension "unaccent" @@ -802,6 +802,7 @@ t.datetime "updated_at", precision: nil, null: false t.string "slug" t.json "translations", default: {} + t.integer "number" end create_table "themes_in_guidance", id: false, force: :cascade do |t| From 1d7cfc75a297d7ed8e699f99eed7a47c217c2dd0 Mon Sep 17 00:00:00 2001 From: Benjamin FAURE Date: Thu, 17 Oct 2024 11:27:55 +0200 Subject: [PATCH 09/12] chore: updated Docker base image --- Dockerfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index 64fea81b63..307c842373 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM ruby:3.2.4-slim AS base +FROM ruby:3.2.5-slim AS base WORKDIR /app @@ -34,7 +34,7 @@ RUN apt-get update -y && \ rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* # Add and set up dumb-init -ADD https://github.com/Yelp/dumb-init/releases/download/v1.2.2/dumb-init_1.2.2_x86_64 /usr/local/bin/dumb-init +ADD https://github.com/Yelp/dumb-init/releases/download/v1.2.5/dumb-init_1.2.5_x86_64 /usr/local/bin/dumb-init RUN chmod +x /usr/local/bin/dumb-init # Environment variables for Puppeteer From e9d14d803e8701f8421b71f02febfd829f3e92c0 Mon Sep 17 00:00:00 2001 From: Benjamin FAURE Date: Thu, 17 Oct 2024 11:29:17 +0200 Subject: [PATCH 10/12] refactor: guidance export now uses themes order to generate pdf --- .../dmpopidor/public_pages_controller.rb | 9 ++-- ...tml.erb => guidance_group_export.html.erb} | 43 ++++++++++--------- .../_guidance_group_export.html.erb | 34 --------------- 3 files changed, 27 insertions(+), 59 deletions(-) rename app/views/branded/guidance_group_exports/{_guidance_group_export.html.erb => guidance_group_export.html.erb} (58%) delete mode 100644 app/views/guidance_group_exports/_guidance_group_export.html.erb diff --git a/app/controllers/dmpopidor/public_pages_controller.rb b/app/controllers/dmpopidor/public_pages_controller.rb index f1895eeddf..44af65f664 100644 --- a/app/controllers/dmpopidor/public_pages_controller.rb +++ b/app/controllers/dmpopidor/public_pages_controller.rb @@ -32,18 +32,19 @@ def guidance_group_index sort_direction: paginable_params.fetch(:sort_direction, 'asc') } - guidance_groups = GuidanceGroup.where(published: true).pluck(:id) + guidance_groups = ::GuidanceGroup.where(published: true).pluck(:id) @guidance_groups = ::GuidanceGroup.includes(:org) .where(id: guidance_groups.uniq.flatten).order('orgs.name asc').page(1) end def guidance_group_export - @guidance_group = GuidanceGroup.includes(guidances: :themes).find(params[:id]) + @guidance_group = ::GuidanceGroup.includes(guidances: :themes).find(params[:id]) + @guidances = @guidance_group.guidances.joins(:themes).all + @themes = ::Theme.all.order(:number) @formatting = Settings::Template::DEFAULT_SETTINGS[:formatting] html = render_to_string({ - partial: 'branded/guidance_group_exports/guidance_group_export', - locals: { guidance_group: @guidance_group }, + template: 'guidance_group_exports/guidance_group_export', layout: false }) file_name = @guidance_group.name.gsub(/[^a-zA-Z\d\s]/, '').tr(' ', '_') diff --git a/app/views/branded/guidance_group_exports/_guidance_group_export.html.erb b/app/views/branded/guidance_group_exports/guidance_group_export.html.erb similarity index 58% rename from app/views/branded/guidance_group_exports/_guidance_group_export.html.erb rename to app/views/branded/guidance_group_exports/guidance_group_export.html.erb index 3e702d985d..972349f09f 100644 --- a/app/views/branded/guidance_group_exports/_guidance_group_export.html.erb +++ b/app/views/branded/guidance_group_exports/guidance_group_export.html.erb @@ -5,7 +5,7 @@ <%= @guidance_group.name %> - - -

    <%= "#{@guidance_group.org}: #{@guidance_group.name} (#{@guidance_group.language.name})" %>

    - <% language = @guidance_group.language.abbreviation%> - <% s_list= ['description-des-donnees', 'reutilisation-de-donnees', 'collecte-des-donnees', 'metadonnees-documentation', 'qualite-scientifique-des-donnees', 'donnees-personnelles', 'droits-de-propriete-intellectuelle', 'ethique', 'traitement-analyse-des-donnees', 'stockage-securite', 'partage-des-donnees', 'conservation-a-long-terme'] %> - <% guidances = @guidance_group.guidances %> - <% for slug in s_list %> - <% for guidance in guidances %> - <% if guidance.published? %> - <% if guidance.themes[0].slug == slug %> - <% theme = guidance.themes[0] %> - <% if language == "fr-FR" %> -

    <%= theme.title %>

    - <% elsif language == "en-GB" %> -

    <%= theme.translations.dig('en-GB', 'title') %>

    - <% end%> -

    <%= sanitize guidance.text.chomp.strip %>

    - <% end %> - <% end %> + <% language = @guidance_group.language.abbreviation %> + <% for theme in @themes %> + <% for guidance in @guidances.where(published: true, themes: { id: theme.id } ) %> + <% if language == "fr-FR" %> +

    <%= theme.title %>

    + <% elsif language == "en-GB" %> +

    <%= theme.translations.dig('en-GB', 'title') %>

    + <% end%> +

    <%= sanitize guidance.text %>

    <% end %> <% end %> diff --git a/app/views/guidance_group_exports/_guidance_group_export.html.erb b/app/views/guidance_group_exports/_guidance_group_export.html.erb deleted file mode 100644 index be93236bd9..0000000000 --- a/app/views/guidance_group_exports/_guidance_group_export.html.erb +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - <%= @guidance_group.name %> - - - - - -

    <%= "#{@guidance_group.org}: #{@guidance_group.name} (#{@guidance_group.language.name})" %>

    - <% language= @guidance_group.language.abbreviation%> - <% t_list= ['description-des-donnees', collecte-des-donnees', 'droit-de-propriete-intellectuelle', 'data-format', 'data-reuse', 'budget'] %> - <% guidances= @guidance_group.guidances %> - <% for theme in t_list %> - <% for guidance in guidances %> - <% if guidance.themes[0].slug == theme %> - <% theme= guidance.themes[0] %> - <% if language == "fr-FR" %> -

    <%= theme.title %>

    - <% elsif language == "en-GB" %> -

    <%= theme.translations.dig('en-GB', 'title') %>

    - - <% end %> - -

    <%= sanitize guidance.text.chomp.strip %>

    - <% end %> - <% end %> - <% end %> - - - - From 3f542bbd077d8b959ee7bec32e4188e4a452eb64 Mon Sep 17 00:00:00 2001 From: Benjamin FAURE Date: Tue, 22 Oct 2024 10:13:06 +0200 Subject: [PATCH 11/12] fix: ruby version in dockerfile --- Dockerfile | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index 006858f6be..29efe08da7 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,4 @@ -FROM ruby:3.2.5-slim AS base - +FROM ruby:3.3.5-slim AS base WORKDIR /app # Install necessary dependencies From 427520c944db44c1c2923d8e9aac8b322f4bb6cb Mon Sep 17 00:00:00 2001 From: Benjamin FAURE Date: Tue, 22 Oct 2024 11:57:38 +0200 Subject: [PATCH 12/12] fix: Dockerfile CMD --- Dockerfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index 29efe08da7..6edad1689b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -75,5 +75,5 @@ COPY --from=production-builder /app/config ./config COPY --from=production-builder /usr/local/bundle /usr/local/bundle COPY --from=production-builder /app/.ssl ./.ssl EXPOSE 3000 -RUN chmod a+x /app/bin/prod -CMD [ "/app/bin/prod" ] +RUN chmod a+x /app/bin/run +CMD [ "/app/bin/run" ]