Ver código fonte

Merge branch 'main' into Yton

YenTonv 1 ano atrás
pai
commit
4c75920e6f

+ 1 - 1
.github/workflows/build.yml

@@ -13,7 +13,7 @@ jobs:
     steps:
     - uses: actions/checkout@ee0669bd1cc54295c223e0bb666b733df41de1c5 # v2.7.0
     - name: Set up Ruby
-      uses: ruby/setup-ruby@360dc864d5da99d54fcb8e9148c14a84b90d3e88 # v1.165.1
+      uses: ruby/setup-ruby@22fdc77bf4148f810455b226c90fb81b5cbc00a7 # v1.171.0
       with:
         bundler-cache: true # runs 'bundle install' and caches installed gems automatically
     - name: Run tests

+ 1 - 1
.github/workflows/schedule-doc-report.yml

@@ -11,7 +11,7 @@ jobs:
     steps:
     - uses: actions/checkout@ee0669bd1cc54295c223e0bb666b733df41de1c5 # v2.7.0
     - name: Set up Ruby
-      uses: ruby/setup-ruby@360dc864d5da99d54fcb8e9148c14a84b90d3e88 # v1.165.1
+      uses: ruby/setup-ruby@22fdc77bf4148f810455b226c90fb81b5cbc00a7 # v1.171.0
       with:
         bundler-cache: true # runs 'bundle install' and caches installed gems automatically
     - name: Generate report

+ 1 - 1
.github/workflows/test.yml

@@ -11,7 +11,7 @@ jobs:
     steps:
     - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
     - name: Set up Ruby
-      uses: ruby/setup-ruby@360dc864d5da99d54fcb8e9148c14a84b90d3e88 # v1.165.1
+      uses: ruby/setup-ruby@22fdc77bf4148f810455b226c90fb81b5cbc00a7 # v1.171.0
       with:
         bundler-cache: true # runs 'bundle install' and caches installed gems automatically
     - name: Run tests

+ 7 - 7
Gemfile.lock

@@ -1,7 +1,7 @@
 GEM
   remote: https://rubygems.org/
   specs:
-    activesupport (7.1.2)
+    activesupport (7.1.3)
       base64
       bigdecimal
       concurrent-ruby (~> 1.0, >= 1.0.2)
@@ -16,12 +16,12 @@ GEM
       erubi (>= 1.0.0)
       rack (>= 0.9.0)
       rouge (>= 1.0.0)
-    bigdecimal (3.1.5)
+    bigdecimal (3.1.6)
     browser (5.3.1)
     byebug (11.1.3)
     chunky_png (1.4.0)
     coderay (1.1.3)
-    concurrent-ruby (1.2.2)
+    concurrent-ruby (1.2.3)
     connection_pool (2.4.1)
     daemons (1.4.1)
     drb (2.2.0)
@@ -30,7 +30,7 @@ GEM
     ethon (0.16.0)
       ffi (>= 1.15.0)
     eventmachine (1.2.7)
-    execjs (2.8.1)
+    execjs (2.9.1)
     exifr (1.4.0)
     ffi (1.15.5)
     fspath (3.1.2)
@@ -53,7 +53,7 @@ GEM
     in_threads (1.6.0)
     method_source (1.0.0)
     mini_portile2 (2.8.5)
-    minitest (5.21.1)
+    minitest (5.22.2)
     multi_json (1.15.0)
     mustermann (3.0.0)
       ruby2_keywords (~> 0.0.1)
@@ -62,7 +62,7 @@ GEM
       net-ssh (>= 5.0.0, < 8.0.0)
     net-ssh (7.0.1)
     newrelic_rpm (8.16.0)
-    nokogiri (1.16.0)
+    nokogiri (1.16.2)
       mini_portile2 (~> 2.8.2)
       racc (~> 1.4)
     options (2.3.2)
@@ -125,7 +125,7 @@ GEM
     strings-ansi (0.2.0)
     terminal-table (3.0.2)
       unicode-display_width (>= 1.1.1, < 3)
-    terser (1.1.20)
+    terser (1.2.0)
       execjs (>= 0.3.0, < 3)
     thin (1.8.2)
       daemons (~> 1.0, >= 1.0.9)

+ 1 - 0
README.md

@@ -176,6 +176,7 @@ Made something cool? Feel free to open a PR to add a new row to this table! You
 | [waiting-for-dev/vim-www](https://github.com/waiting-for-dev/vim-www)                       | Vim plugin                           | ![Latest GitHub commit](https://img.shields.io/github/last-commit/waiting-for-dev/vim-www?logo=github&label)         | ![GitHub stars](https://img.shields.io/github/stars/waiting-for-dev/vim-www?logo=github&label)         |
 | [luckasRanarison/nvim-devdocs](https://github.com/luckasRanarison/nvim-devdocs)             | Neovim plugin                        | ![Latest GitHub commit](https://img.shields.io/github/last-commit/luckasRanarison/nvim-devdocs?logo=github&label)    | ![GitHub stars](https://img.shields.io/github/stars/luckasRanarison/nvim-devdocs?logo=github&label)    |
 | [toiletbril/dedoc](https://github.com/toiletbril/dedoc)                                     | Terminal based viewer                | ![Latest GitHub commit](https://img.shields.io/github/last-commit/toiletbril/dedoc?logo=github&label)                | ![GitHub stars](https://img.shields.io/github/stars/toiletbril/dedoc?logo=github&label)                |
+| [Raycast Devdocs](https://www.raycast.com/pomdtr/devdocs)                                     | Raycast extension                | Unavailable                | Unavailable                |
 
 ## Copyright / License
 

+ 9 - 1
assets/javascripts/news.json

@@ -1,8 +1,16 @@
 [
   [
-    "2024-01-24",
+    "2024-02-20",
     "New documentation: <a href=\"/nextjs/\">Nextjs</a>"
   ],
+  [
+    "2024-01-24",
+    "New documentation: <a href=\"/playwright/\">Playwright</a>"
+  ],
+  [
+    "2024-01-20",
+    "New documentation: <a href=\"/htmx/\">htmx</a>"
+  ],
   [
     "2024-01-12",
     "New documentation: <a href=\"/hammerspoon/\">Hammerspoon</a>"

+ 2 - 2
docs/file-scrapers.md

@@ -167,8 +167,8 @@ download it, extract it with `dpkg -x $PACKAGE ./` and move `./usr/share/doc/ope
 to `path/to/devdocs/docs/openjdk~$VERSION`
 
 ```sh
-curl -O http://ftp.at.debian.org/debian/pool/main/o/openjdk-21/openjdk-21-doc_21.0.1+12-3_all.deb
-tar xf openjdk-21-doc_21.0.1+12-3_all.deb
+curl -O http://ftp.at.debian.org/debian/pool/main/o/openjdk-21/openjdk-21-doc_21.0.2+13-2_all.deb
+tar xf openjdk-21-doc_21.0.2+13-2_all.deb
 tar xf data.tar.xz
 mv ./usr/share/doc/openjdk-21-jre-headless/api/ docs/openjdk~$VERSION
 ```

+ 13 - 0
lib/docs/filters/htmx/clean_html.rb

@@ -0,0 +1,13 @@
+module Docs
+  class Htmx
+    class CleanHtmlFilter < Filter
+      def call
+        css('.zola-anchor').remove
+        doc.prepend_child("<h1>htmx</h1>") if root_page?
+        css('div:contains("NEWS:")').remove
+        css('h2:contains("sponsors"), #sponsor-table').remove
+        doc
+      end
+    end
+  end
+end

+ 31 - 0
lib/docs/filters/htmx/entries.rb

@@ -0,0 +1,31 @@
+module Docs
+  class Htmx
+    class EntriesFilter < Docs::EntriesFilter
+      def get_name
+        at_css('h1').content
+      end
+
+      def get_type
+        if slug.start_with?('attributes')
+          'Attributes'
+        elsif slug.start_with?('headers')
+          'Headers'
+        elsif slug.start_with?('events')
+          'Events'
+        elsif slug.start_with?('extensions')
+          'Extensions'
+        else
+          get_name
+        end
+      end
+      
+      def additional_entries
+        css('h3[id]:has(code)').each_with_object [] do |node, entries|
+          name = node.at_css('code').content
+          id = node['id']
+          entries << [name, id]
+        end
+      end
+    end
+  end
+end

+ 7 - 4
lib/docs/filters/nim/entries.rb

@@ -16,8 +16,10 @@ module Docs
         name.remove! ' User Guide'
         name.remove! ' User\'s manual'
         name.remove! %r{ \-.*}
+        name.remove! %r{\Asrc/}
+        name.remove! %r{\Astd/}
         name.strip!
-        name
+        name.split("/").last
       end
 
       def get_type
@@ -54,10 +56,11 @@ module Docs
         else
 
           css('.simple-toc-section a, .nested-toc-section a').each do |node|
-            entry_name = node.content
-            entry_name.gsub!(/,.*/, '')
+            match = /^`(.*)`|^(\w+)/.match(node.content)
+            entry_name = match[1] || match[2]
+
             entry_id = slug + node['href']
-            entries << [entry_name, entry_id, name]
+            entries << ["#{entry_name} (#{name})", entry_id, name]
           end
 
         end

+ 1 - 0
lib/docs/filters/openjdk/clean_html_new.rb

@@ -12,6 +12,7 @@ module Docs
         end
 
         css('.header .sub-title', 'hr', '.table-tabs').remove
+        css('.copy').remove
 
         # fix ul section that contains summaries or tables
         css('ul').each do |node|

+ 29 - 0
lib/docs/filters/playwright/clean_html.rb

@@ -0,0 +1,29 @@
+module Docs
+  class Playwright
+    class CleanHtmlFilter < Filter
+      def call
+        @doc = at_css('.markdown')
+
+        css('x-search').remove
+        css('hr').remove
+        css('font:contains("Added in")').remove
+        css('.list-anchor').remove
+
+        css('.alert').each do |node|
+          node.name = 'blockquote'
+        end
+
+        css('pre').each do |node|
+          node.content = node.css('.token-line').map(&:content).join("\n")
+          node.remove_attribute('style')
+          node['data-language'] = node.content =~ /\A\s*</ ? 'html' : 'javascript'
+          node.ancestors('.theme-code-block').first.replace(node)
+        end
+
+        css('*[class]').remove_attribute('class')
+
+        doc
+      end
+    end
+  end
+end

+ 23 - 0
lib/docs/filters/playwright/entries.rb

@@ -0,0 +1,23 @@
+module Docs
+  class Playwright
+    class EntriesFilter < Docs::EntriesFilter
+      def get_name
+        at_css('h1').children.select(&:text?).map(&:content).join.strip
+      end
+
+      def type
+        type = at_css('.menu__link--active').content
+        return "#{type}: #{name}" if slug.starts_with?('api/')
+        type
+      end
+
+      def additional_entries
+        css('x-search').each_with_object [] do |node, entries|
+          prev = node.previous_element
+          prev = prev.previous_element until prev['id']
+          entries << [node.text, prev['id']]
+        end
+      end
+    end
+  end
+end

+ 89 - 31
lib/docs/filters/pytorch/entries.rb

@@ -1,57 +1,115 @@
 module Docs
   class Pytorch
     class EntriesFilter < Docs::EntriesFilter
-      NAME_REPLACEMENTS = {
-        "Distributed communication package - torch.distributed" => "torch.distributed"
+      TYPE_REPLACEMENTS = {
+        "torch.Tensor" => "Tensor",
+        "torch.nn" => "Neuro Network",
+        "Probability distributions - torch.distributions" => "Probability Distributions",
+        "torch" => "Torch",
+        "Quantization" => "Quantization",
+        "torch.optim" => "Optimization",
+        "torch.Storage" => "Storage",
+        "torch.nn.functional" => "NN Functions",
+        "torch.cuda" => "CUDA",
+        "Torch Distributed Elastic" => "Distributed Elastic",
+        "torch.fx" => "FX",
+        "TorchScript" => "Torch Script",
+        "torch.onnx" => "ONNX",
+        "Distributed communication package - torch.distributed" => "Distributed Communication",
+        "Automatic differentiation package - torch.autograd" => "Automatic Differentiation",
+        "torch.linalg" => "Linear Algebra",
+        "Distributed Checkpoint - torch.distributed.checkpoint" => "Distributed Checkpoint",
+        "Distributed RPC Framework" => "Distributed RPC",
+        "torch.special" => "SciPy-like Special",
+        "torch.package" => "Package",
+        "torch.backends" => "Backends",
+        "FullyShardedDataParallel" => "Fully Sharded Data Parallel",
+        "torch.sparse" => "Sparse Tensors",
+        "torch.export" => "Traced Graph Export",
+        "torch.fft" => "Discrete Fourier Transforms",
+        "torch.utils.data" => "Datasets and Data Loaders",
+        "torch.monitor" => "Monitor",
+        "Automatic Mixed Precision package - torch.amp" => "Automatic Mixed Precision",
+        "torch.utils.tensorboard" => "Tensorboard",
+        "torch.profiler" => "Profiler",
+        "torch.mps" => "MPS",
+        "DDP Communication Hooks" => "DDP Communication Hooks",
+        "Benchmark Utils - torch.utils.benchmark" => "Benchmark Utils",
+        "torch.nn.init" => "Parameter Initializations",
+        "Tensor Parallelism - torch.distributed.tensor.parallel" => "Tensor Parallelism",
+        "torch.func" => "JAX-like Function Transforms",
+        "Distributed Optimizers" => "Distributed Optimizers",
+        "torch.signal" => "SciPy-like Signal",
+        "torch.futures" => "Miscellaneous",
+        "torch.utils.cpp_extension" => "Miscellaneous",
+        "torch.overrides" => "Miscellaneous",
+        "Generic Join Context Manager" => "Miscellaneous",
+        "torch.hub" => "Miscellaneous",
+        "torch.cpu" => "Miscellaneous",
+        "torch.random" => "Miscellaneous",
+        "torch.compiler" => "Miscellaneous",
+        "Pipeline Parallelism" => "Miscellaneous",
+        "Named Tensors" => "Miscellaneous",
+        "Multiprocessing package - torch.multiprocessing" => "Miscellaneous",
+        "torch.utils" => "Miscellaneous",
+        "torch.library" => "Miscellaneous",
+        "Tensor Attributes" => "Miscellaneous",
+        "torch.testing" => "Miscellaneous",
+        "torch.nested" => "Miscellaneous",
+        "Understanding CUDA Memory Usage" => "Miscellaneous",
+        "torch.utils.dlpack" => "Miscellaneous",
+        "torch.utils.checkpoint" => "Miscellaneous",
+        "torch.__config__" => "Miscellaneous",
+        "Type Info" => "Miscellaneous",
+        "torch.utils.model_zoo" => "Miscellaneous",
+        "torch.utils.mobile_optimizer" => "Miscellaneous",
+        "torch._logging" => "Miscellaneous",
+        "torch.masked" => "Miscellaneous",
+        "torch.utils.bottleneck" => "Miscellaneous"
       }
 
-      def get_breadcrumbs()
-        css('.pytorch-breadcrumbs > li').map { |node| node.content.delete_suffix(' >') }
+      def get_breadcrumbs
+        css('.pytorch-breadcrumbs > li').map {
+          |node| node.content.delete_suffix(' >').strip
+        }.reject { |item| item.nil? || item.empty? }
       end
 
       def get_name
-        # The id of the container `div.section` indicates the page type.
-        # If the id starts with `module-`, then it's an API reference,
-        # otherwise it is a note or design doc.
-        section_id = at_css('.section[id], section[id]')['id']
-        if section_id.starts_with? 'module-'
-          section_id.remove('module-')
-        else
-          name = get_breadcrumbs()[1]
-          NAME_REPLACEMENTS.fetch(name, name)
-        end
+        b = get_breadcrumbs
+        b[(b[1] == 'torch' ? 2 : 1)..].join('.')
       end
 
       def get_type
-        name
+        t = get_breadcrumbs[1]
+        TYPE_REPLACEMENTS.fetch(t, t)
       end
 
       def include_default_entry?
-        # Only include API references, and ignore notes or design docs
-        !subpath.start_with? 'generated/' and type.start_with? 'torch'
+        # Only include API entries to simplify and unify the list
+        return name.start_with?('torch.')
       end
 
       def additional_entries
         return [] if root_page?
 
         entries = []
-
-        css('dt').each do |node|
-          name = node['id']
-          if name == self.name or name == nil
+        css('dl').each do |node|
+          dt = node.at_css('dt')
+          if dt == nil
+            next
+          end
+          id = dt['id']
+          if id == name or id == nil
             next
           end
 
-          case node.parent['class']
-          when 'method', 'function'
-            if node.at_css('code').content.starts_with? 'property '
-              # this instance method is a property, so treat it as an attribute
-              entries << [name, node['id']]
-            else
-              entries << [name + '()', node['id']]
-            end
-          when 'class', 'attribute'
-            entries << [name, node['id']]
+          case node['class']
+          when 'py method', 'py function'
+            entries << [id + '()', id]
+          when 'py class', 'py attribute', 'py property'
+            entries << [id, id]
+          when 'footnote brackets', 'field-list simple'
+            next
           end
         end
 

+ 2 - 0
lib/docs/filters/vitest/entries.rb

@@ -4,12 +4,14 @@ module Docs
       def get_name
         name = at_css('h1').content
         name.sub! %r{\s*#\s*}, ''
+        name.sub! %r{\s*\u200B\s*}, ''
         name
       end
 
       def get_type
         name = at_css('h1').content
         name.sub! %r{\s*#\s*}, ''
+        name.sub! %r{\s*\u200B\s*}, ''
         name
       end
 

+ 5 - 0
lib/docs/scrapers/django.rb

@@ -34,6 +34,11 @@ module Docs
       Licensed under the BSD License.
     HTML
 
+    version '5.0' do
+      self.release = '5.0'
+      self.base_url = "https://docs.djangoproject.com/en/#{self.version}/"
+    end
+
     version '4.2' do
       self.release = '4.2'
       self.base_url = "https://docs.djangoproject.com/en/#{self.version}/"

+ 1 - 1
lib/docs/scrapers/esbuild.rb

@@ -16,7 +16,7 @@ module Docs
       Licensed under the MIT License.
     HTML
 
-    self.release = '0.19.11'
+    self.release = '0.20.0'
     self.base_url = 'https://esbuild.github.io/'
     html_filters.push 'esbuild/clean_html', 'esbuild/entries'
 

+ 2 - 2
lib/docs/scrapers/git.rb

@@ -1,7 +1,7 @@
 module Docs
   class Git < UrlScraper
     self.type = 'git'
-    self.release = '2.42.0'
+    self.release = '2.43.1'
     self.base_url = 'https://git-scm.com/docs'
     self.initial_paths = %w(/git.html)
     self.links = {
@@ -16,7 +16,7 @@ module Docs
     options[:skip] = %w(/howto-index.html)
 
     options[:attribution] = <<-HTML
-      &copy; 2012&ndash;2023 Scott Chacon and others<br>
+      &copy; 2012&ndash;2024 Scott Chacon and others<br>
       Licensed under the MIT License.
     HTML
 

+ 1 - 1
lib/docs/scrapers/go.rb

@@ -1,7 +1,7 @@
 module Docs
   class Go < UrlScraper
     self.type = 'go'
-    self.release = '1.21.5'
+    self.release = '1.22.0'
     self.base_url = 'https://golang.org/pkg/'
     self.links = {
       home: 'https://golang.org/',

+ 5 - 0
lib/docs/scrapers/haproxy.rb

@@ -20,6 +20,11 @@ module Docs
       Licensed under the GNU General Public License version 2.
     HTML
 
+    version '2.9' do
+      self.release = '2.9.0'
+      self.base_url = "https://docs.haproxy.org/#{self.version}/"
+    end
+
     version '2.8' do
       self.release = '2.8.0'
       self.base_url = "https://docs.haproxy.org/#{self.version}/"

+ 35 - 0
lib/docs/scrapers/htmx.rb

@@ -0,0 +1,35 @@
+module Docs
+  class Htmx < UrlScraper
+    self.name = 'htmx'
+    self.type = 'simple'
+    self.slug = 'htmx'
+    self.links = {
+      home: 'https://htmx.org/',
+      code: 'https://github.com/bigskysoftware/htmx'
+    }
+	self.release = '1.9.10'
+	self.base_url = "https://htmx.org/"
+    self.initial_paths = %w(reference/)
+
+    html_filters.push 'htmx/entries', 'htmx/clean_html'
+
+    options[:trailing_slash] = true
+	options[:container] = '.content'
+    options[:download_images] = false
+    options[:skip_patterns] = [
+		/\Aessays/,
+		/\Aexamples/,
+		/\Amigration-guide/,
+		/\Aposts/,
+	]
+
+	# https://github.com/bigskysoftware/htmx/blob/master/LICENSE
+    options[:attribution] = <<-HTML
+	  Licensed under the Zero-Clause BSD License.
+    HTML
+
+    def get_latest_version(opts)
+      get_npm_version('htmx.org', opts)
+    end
+  end
+end

+ 22 - 2
lib/docs/scrapers/kubernetes.rb

@@ -20,15 +20,35 @@ module Docs
 
     # latest version has a special URL that does not include the version identifier 
     version do
-      self.release = "1.26"
+      self.release = "1.29"
       self.base_url = "https://kubernetes.io/docs/reference/kubernetes-api/"
     end
 
-    version '1.20' do
+    version '1.28' do
       self.release = "#{version}"
       self.base_url = "https://v#{version.sub('.', '-')}.docs.kubernetes.io/docs/reference/kubernetes-api/"
     end
 
+    version '1.27' do
+      self.release = "#{version}"
+      self.base_url = "https://v#{version.sub('.', '-')}.docs.kubernetes.io/docs/reference/kubernetes-api/"
+    end
+
+   version '1.26' do
+      self.release = "#{version}"
+      self.base_url = "https://v#{version.sub('.', '-')}.docs.kubernetes.io/docs/reference/kubernetes-api/"
+   end
+
+   version '1.25' do
+      self.release = "#{version}"
+      self.base_url = "https://v#{version.sub('.', '-')}.docs.kubernetes.io/docs/reference/kubernetes-api/"
+   end
+
+   version '1.24' do
+      self.release = "#{version}"
+      self.base_url = "https://v#{version.sub('.', '-')}.docs.kubernetes.io/docs/reference/kubernetes-api/"
+   end
+
     def get_latest_version(opts)
       get_latest_github_release('kubernetes', 'kubernetes', opts)
     end

+ 9 - 2
lib/docs/scrapers/nim.rb

@@ -1,7 +1,6 @@
 module Docs
   class Nim < UrlScraper
     self.type = 'simple'
-    self.release = '1.4.8'
     self.base_url = 'https://nim-lang.org/docs/'
     self.root_path = 'overview.html'
     self.links = {
@@ -14,10 +13,18 @@ module Docs
     options[:skip] = %w(theindex.html docgen.html tut1.html tut2.html tut3.html tools.html)
 
     options[:attribution] = <<-HTML
-      &copy; 2006&ndash;2021 Andreas Rumpf<br>
+      &copy; 2006&ndash;2024 Andreas Rumpf<br>
       Licensed under the MIT License.
     HTML
 
+    version do
+      self.release = '2.0.2'
+    end
+
+    version '1' do
+      self.release = '1.4.8'
+    end
+
     def get_latest_version(opts)
       doc = fetch_doc('https://nim-lang.org/docs/overview.html', opts)
       doc.at_css('.container > .docinfo > tbody > tr:last-child > td').content.strip

+ 27 - 0
lib/docs/scrapers/playwright.rb

@@ -0,0 +1,27 @@
+module Docs
+  class Playwright < UrlScraper
+    self.name = 'Playwright'
+    self.type = 'simple'
+    self.release = '1.41.1'
+    self.base_url = 'https://playwright.dev/docs/'
+    self.root_path = 'intro'
+    self.links = {
+      home: 'https://playwright.dev/',
+      code: 'https://github.com/microsoft/playwright'
+    }
+
+    # Docusaurus like react_native
+    html_filters.push 'playwright/entries', 'playwright/clean_html'
+    options[:download_images] = false
+
+	# https://github.com/microsoft/playwright/blob/main/LICENSE
+    options[:attribution] = <<-HTML
+      &copy; 2024 Microsoft<br>
+	  Licensed under the Apache License, Version 2.0.
+    HTML
+
+    def get_latest_version(opts)
+      get_npm_version('@playwright/test', opts)
+      end
+  end
+end

+ 3 - 5
lib/docs/scrapers/pytorch.rb

@@ -3,7 +3,6 @@ module Docs
     self.name = 'PyTorch'
     self.slug = 'pytorch'
     self.type = 'sphinx'
-    self.force_gzip = true
     self.links = {
       home: 'https://pytorch.org/',
       code: 'https://github.com/pytorch/pytorch'
@@ -11,13 +10,12 @@ module Docs
 
     html_filters.push 'pytorch/entries', 'pytorch/clean_html', 'sphinx/clean_html'
 
-    options[:skip] = ['cpp_index.html', 'packages.html', 'py-modindex.html', 'genindex.html']
+    options[:skip] = ['cpp_index.html', 'deploy.html', 'packages.html', 'py-modindex.html', 'genindex.html']
     options[:skip_patterns] = [/\Acommunity/, /\A_modules/, /\Anotes/, /\Aorg\/pytorch\//]
-    options[:max_image_size] = 256_000
 
     options[:attribution] = <<-HTML
-    &copy; 2019-2024 Torch Contributors<br>
-    Licensed under the 3-clause BSD License.
+    &copy; 2024, PyTorch Contributors<br>
+    PyTorch has a BSD-style license, as found in the <a href="https://github.com/pytorch/pytorch/blob/main/LICENSE">LICENSE</a> file.
     HTML
 
     version '2' do

+ 1 - 1
lib/docs/scrapers/sqlite.rb

@@ -2,7 +2,7 @@ module Docs
   class Sqlite < UrlScraper
     self.name = 'SQLite'
     self.type = 'sqlite'
-    self.release = '3.44.2'
+    self.release = '3.45.1'
     self.base_url = 'https://sqlite.org/'
     self.root_path = 'docs.html'
     self.initial_paths = %w(keyword_index.html)

+ 2 - 1
lib/docs/scrapers/vitest.rb

@@ -9,6 +9,7 @@ module Docs
     }
 
     options[:root_title] = 'Vitest'
+    options[:download_images] = false
 
     options[:attribution] = <<-HTML
       &copy; 2021-Present Anthony Fu<br>
@@ -16,7 +17,7 @@ module Docs
       Licensed under the MIT License.
     HTML
 
-    self.release = '1.1.3'
+    self.release = '1.2.2'
     self.base_url = 'https://vitest.dev/'
     self.initial_paths = %w(guide/)
     html_filters.push 'vitest/entries', 'vite/clean_html'

BIN
public/icons/docs/htmx/16.png


BIN
public/icons/docs/htmx/16@2x.png


+ 1 - 0
public/icons/docs/htmx/SOURCE

@@ -0,0 +1 @@
+https://github.com/bigskysoftware/htmx/blob/v1.9.10/www/static/img/htmx_logo.2.png

BIN
public/icons/docs/playwright/16.png


BIN
public/icons/docs/playwright/16@2x.png


+ 1 - 0
public/icons/docs/playwright/SOURCE

@@ -0,0 +1 @@
+https://playwright.dev/img/playwright-logo.svg

+ 189 - 0
techstack.md

@@ -0,0 +1,189 @@
+<!--
+&lt;--- Readme.md Snippet without images Start ---&gt;
+## Tech Stack
+freeCodeCamp/devdocs is built on the following main stack:
+
+- [New Relic](http://newrelic.com) – Performance Monitoring
+- [Ruby](https://www.ruby-lang.org) – Languages
+- [Sinatra](http://www.sinatrarb.com/) – Microframeworks (Backend)
+- [JavaScript](https://developer.mozilla.org/en-US/docs/Web/JavaScript) – Languages
+- [Capybara](http://jnicklas.github.io/capybara/) – Testing Frameworks
+- [GitHub Actions](https://github.com/features/actions) – Continuous Integration
+- [Docker](https://www.docker.com/) – Virtual Machine Platforms & Containers
+
+Full tech stack [here](/techstack.md)
+
+&lt;--- Readme.md Snippet without images End ---&gt;
+
+&lt;--- Readme.md Snippet with images Start ---&gt;
+## Tech Stack
+freeCodeCamp/devdocs is built on the following main stack:
+
+- <img width='25' height='25' src='https://img.stackshare.io/service/103/default_193410db3a7e419c7b436961bf41d733c7346b59.png' alt='New Relic'/> [New Relic](http://newrelic.com) – Performance Monitoring
+- <img width='25' height='25' src='https://img.stackshare.io/service/989/ruby.png' alt='Ruby'/> [Ruby](https://www.ruby-lang.org) – Languages
+- <img width='25' height='25' src='https://img.stackshare.io/service/999/logo.png' alt='Sinatra'/> [Sinatra](http://www.sinatrarb.com/) – Microframeworks (Backend)
+- <img width='25' height='25' src='https://img.stackshare.io/service/1209/javascript.jpeg' alt='JavaScript'/> [JavaScript](https://developer.mozilla.org/en-US/docs/Web/JavaScript) – Languages
+- <img width='25' height='25' src='https://img.stackshare.io/service/2595/capybara.png' alt='Capybara'/> [Capybara](http://jnicklas.github.io/capybara/) – Testing Frameworks
+- <img width='25' height='25' src='https://img.stackshare.io/service/11563/actions.png' alt='GitHub Actions'/> [GitHub Actions](https://github.com/features/actions) – Continuous Integration
+- <img width='25' height='25' src='https://img.stackshare.io/service/586/n4u37v9t_400x400.png' alt='Docker'/> [Docker](https://www.docker.com/) – Virtual Machine Platforms & Containers
+
+Full tech stack [here](/techstack.md)
+
+&lt;--- Readme.md Snippet with images End ---&gt;
+-->
+<div align="center">
+
+# Tech Stack File
+![](https://img.stackshare.io/repo.svg "repo") [freeCodeCamp/devdocs](https://github.com/freeCodeCamp/devdocs)![](https://img.stackshare.io/public_badge.svg "public")
+<br/><br/>
+|43<br/>Tools used|01/27/24 <br/>Report generated|
+|------|------|
+</div>
+
+## <img src='https://img.stackshare.io/languages.svg'/> Languages (3)
+<table><tr>
+  <td align='center'>
+  <img width='36' height='36' src='https://img.stackshare.io/service/6727/css.png' alt='CSS 3'>
+  <br>
+  <sub><a href="https://developer.mozilla.org/en-US/docs/Web/CSS/CSS3">CSS 3</a></sub>
+  <br>
+  <sub></sub>
+</td>
+
+<td align='center'>
+  <img width='36' height='36' src='https://img.stackshare.io/service/1209/javascript.jpeg' alt='JavaScript'>
+  <br>
+  <sub><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript">JavaScript</a></sub>
+  <br>
+  <sub></sub>
+</td>
+
+<td align='center'>
+  <img width='36' height='36' src='https://img.stackshare.io/service/989/ruby.png' alt='Ruby'>
+  <br>
+  <sub><a href="https://www.ruby-lang.org">Ruby</a></sub>
+  <br>
+  <sub>v3.3.0</sub>
+</td>
+
+</tr>
+</table>
+
+## <img src='https://img.stackshare.io/frameworks.svg'/> Frameworks (1)
+<table><tr>
+  <td align='center'>
+  <img width='36' height='36' src='https://img.stackshare.io/service/999/logo.png' alt='Sinatra'>
+  <br>
+  <sub><a href="http://www.sinatrarb.com/">Sinatra</a></sub>
+  <br>
+  <sub></sub>
+</td>
+
+</tr>
+</table>
+
+## <img src='https://img.stackshare.io/devops.svg'/> DevOps (7)
+<table><tr>
+  <td align='center'>
+  <img width='36' height='36' src='https://img.stackshare.io/service/2595/capybara.png' alt='Capybara'>
+  <br>
+  <sub><a href="http://jnicklas.github.io/capybara/">Capybara</a></sub>
+  <br>
+  <sub></sub>
+</td>
+
+<td align='center'>
+  <img width='36' height='36' src='https://img.stackshare.io/service/586/n4u37v9t_400x400.png' alt='Docker'>
+  <br>
+  <sub><a href="https://www.docker.com/">Docker</a></sub>
+  <br>
+  <sub></sub>
+</td>
+
+<td align='center'>
+  <img width='36' height='36' src='https://img.stackshare.io/service/1046/git.png' alt='Git'>
+  <br>
+  <sub><a href="http://git-scm.com/">Git</a></sub>
+  <br>
+  <sub></sub>
+</td>
+
+<td align='center'>
+  <img width='36' height='36' src='https://img.stackshare.io/service/11563/actions.png' alt='GitHub Actions'>
+  <br>
+  <sub><a href="https://github.com/features/actions">GitHub Actions</a></sub>
+  <br>
+  <sub></sub>
+</td>
+
+<td align='center'>
+  <img width='36' height='36' src='https://img.stackshare.io/service/103/default_193410db3a7e419c7b436961bf41d733c7346b59.png' alt='New Relic'>
+  <br>
+  <sub><a href="http://newrelic.com">New Relic</a></sub>
+  <br>
+  <sub></sub>
+</td>
+
+<td align='center'>
+  <img width='36' height='36' src='https://img.stackshare.io/service/12795/5jL6-BA5_400x400.jpeg' alt='RubyGems'>
+  <br>
+  <sub><a href="https://rubygems.org/">RubyGems</a></sub>
+  <br>
+  <sub></sub>
+</td>
+
+<td align='center'>
+  <img width='36' height='36' src='https://img.stackshare.io/service/1120/lejvzrnlpb308aftn31u.png' alt='npm'>
+  <br>
+  <sub><a href="https://www.npmjs.com/">npm</a></sub>
+  <br>
+  <sub></sub>
+</td>
+
+</tr>
+</table>
+
+
+## <img src='https://img.stackshare.io/group.svg' /> Open source packages (32)</h2>
+
+## <img width='24' height='24' src='https://img.stackshare.io/service/12795/5jL6-BA5_400x400.jpeg'/> RubyGems (32)
+
+|NAME|VERSION|LAST UPDATED|LAST UPDATED BY|LICENSE|VULNERABILITIES|
+|:------|:------|:------|:------|:------|:------|
+|[activesupport](https://rubygems.org/activesupport)|v7.1.3|11/14/22|Paul Sernatinger |MIT|N/A|
+|[better_errors](https://rubygems.org/better_errors)|v2.10.1|10/24/13|Thibaut |MIT|N/A|
+|[browser](https://rubygems.org/browser)|v5.3.1|11/14/22|Paul Sernatinger |MIT|N/A|
+|[chunky_png](https://rubygems.org/chunky_png)|v1.4.0|11/14/22|Paul Sernatinger |MIT|N/A|
+|[erubi](https://rubygems.org/erubi)|v1.12.0|11/14/22|Paul Sernatinger |MIT|N/A|
+|[html-pipeline](https://rubygems.org/html-pipeline)|v2.14.3|10/21/18|Thibaut Courouble |MIT|N/A|
+|[image_optim](https://rubygems.org/image_optim)|v0.31.3|11/14/22|Paul Sernatinger |MIT|N/A|
+|[image_optim_pack](https://rubygems.org/image_optim_pack)|v0.10.1|11/14/22|Paul Sernatinger |MIT|N/A|
+|[minitest](https://rubygems.org/minitest)|v5.21.2|01/03/15|Thibaut |MIT|N/A|
+|[net-sftp](https://rubygems.org/net-sftp)|v4.0.0|11/14/22|Paul Sernatinger |MIT|N/A|
+|[newrelic_rpm](https://rubygems.org/newrelic_rpm)|v8.16.0|03/24/18|Thibaut Courouble |Apache-2.0|N/A|
+|[nokogiri](https://rubygems.org/nokogiri)|v1.16.0|10/21/18|Thibaut Courouble |MIT|N/A|
+|[progress_bar](https://rubygems.org/progress_bar)|v1.3.3|01/26/14|Thibaut |WTFPL|N/A|
+|[pry-byebug](https://rubygems.org/pry-byebug)|v3.10.1|11/14/22|Paul Sernatinger |MIT|N/A|
+|[rack](https://rubygems.org/rack)|v2.2.8|11/14/22|Paul Sernatinger |MIT|N/A|
+|[rack-ssl-enforcer](https://rubygems.org/rack-ssl-enforcer)|v0.2.9|11/14/22|Paul Sernatinger |MIT|N/A|
+|[rack-test](https://rubygems.org/rack-test)|v2.1.0|11/14/22|Paul Sernatinger |MIT|N/A|
+|[rake](https://rubygems.org/rake)|v13.1.0|11/14/22|Paul Sernatinger |MIT|N/A|
+|[redcarpet](https://rubygems.org/redcarpet)|v3.6.0|11/14/22|Paul Sernatinger |MIT|N/A|
+|[rr](https://rubygems.org/rr)|v3.1.0|10/24/13|Thibaut |MIT|N/A|
+|[sass](https://rubygems.org/sass)|v3.7.4|01/13/24|Simon Legner |MIT|N/A|
+|[selenium-webdriver](https://rubygems.org/selenium-webdriver)|N/A|01/26/14|Thibaut |Apache-2.0|N/A|
+|[sinatra-contrib](https://rubygems.org/sinatra-contrib)|v3.2.0|11/14/22|Paul Sernatinger |MIT|N/A|
+|[sprockets](https://rubygems.org/sprockets)|v3.7.2|01/13/24|Simon Legner |MIT|N/A|
+|[sprockets-helpers](https://rubygems.org/sprockets-helpers)|v1.4.0|01/13/24|Simon Legner |MIT|N/A|
+|[sprockets-sass](https://rubygems.org/sprockets-sass)|N/A|01/13/24|Simon Legner |MIT|N/A|
+|[terminal-table](https://rubygems.org/terminal-table)|v3.0.2|10/11/19|Jasper van Merle |MIT|N/A|
+|[thin](https://rubygems.org/thin)|v1.8.2|11/14/22|Paul Sernatinger |GPL-2.0+,Ruby|N/A|
+|[thor](https://rubygems.org/thor)|v1.3.0|11/14/22|Paul Sernatinger |MIT|N/A|
+|[tty-pager](https://rubygems.org/tty-pager)|v0.14.0|01/24/16|Thibaut Courouble |MIT|N/A|
+|[typhoeus](https://rubygems.org/typhoeus)|v1.4.1|11/14/22|Paul Sernatinger |MIT|N/A|
+|[yajl-ruby](https://rubygems.org/yajl-ruby)|v1.4.3|01/09/24|Nicholas La Roux |MIT|N/A|
+
+<br/>
+<div align='center'>
+
+Generated via [Stack File](https://github.com/marketplace/stack-file)

+ 597 - 0
techstack.yml

@@ -0,0 +1,597 @@
+repo_name: freeCodeCamp/devdocs
+report_id: 281e8991a46b88702952b7b18dd5e2b0
+version: 0.1
+repo_type: Public
+timestamp: '2024-01-27T03:50:22+00:00'
+requested_by: renovate[bot]
+provider: github
+branch: main
+detected_tools_count: 43
+tools:
+- name: CSS 3
+  description: The latest evolution of the Cascading Style Sheets language
+  website_url: https://developer.mozilla.org/en-US/docs/Web/CSS/CSS3
+  open_source: true
+  hosted_saas: false
+  category: Languages & Frameworks
+  sub_category: Languages
+  image_url: https://img.stackshare.io/service/6727/css.png
+  detection_source_url: https://github.com/freeCodeCamp/devdocs
+  detection_source: Repo Metadata
+- name: JavaScript
+  description: Lightweight, interpreted, object-oriented language with first-class
+    functions
+  website_url: https://developer.mozilla.org/en-US/docs/Web/JavaScript
+  open_source: true
+  hosted_saas: false
+  category: Languages & Frameworks
+  sub_category: Languages
+  image_url: https://img.stackshare.io/service/1209/javascript.jpeg
+  detection_source_url: https://github.com/freeCodeCamp/devdocs
+  detection_source: Repo Metadata
+- name: Ruby
+  description: A dynamic, interpreted, open source programming language with a focus
+    on simplicity and productivity
+  website_url: https://www.ruby-lang.org
+  version: 3.3.0
+  open_source: true
+  hosted_saas: false
+  category: Languages & Frameworks
+  sub_category: Languages
+  image_url: https://img.stackshare.io/service/989/ruby.png
+  detection_source_url: https://github.com/freeCodeCamp/devdocs/blob/main/Gemfile.lock
+  detection_source: Repo Metadata
+  last_updated_by: Thibaut
+  last_updated_on: 2013-10-24 18:25:52.000000000 Z
+- name: Sinatra
+  description: Classy web-development dressed in a DSL
+  website_url: http://www.sinatrarb.com/
+  license: MIT
+  open_source: true
+  hosted_saas: false
+  category: Languages & Frameworks
+  sub_category: Microframeworks (Backend)
+  image_url: https://img.stackshare.io/service/999/logo.png
+  detection_source_url: https://github.com/freeCodeCamp/devdocs/blob/main/Gemfile
+  detection_source: Gemfile
+  last_updated_by: Paul Sernatinger
+  last_updated_on: 2022-11-14 14:30:30.000000000 Z
+- name: Capybara
+  description: Acceptance test framework for web applications
+  website_url: http://jnicklas.github.io/capybara/
+  license: MIT
+  open_source: true
+  hosted_saas: false
+  category: Build, Test, Deploy
+  sub_category: Testing Frameworks
+  image_url: https://img.stackshare.io/service/2595/capybara.png
+  detection_source_url: https://github.com/freeCodeCamp/devdocs/blob/main/Gemfile
+  detection_source: Gemfile
+  last_updated_by: Thibaut
+  last_updated_on: 2014-01-26 21:01:54.000000000 Z
+- name: Docker
+  description: Enterprise Container Platform for High-Velocity Innovation.
+  website_url: https://www.docker.com/
+  license: Apache-2.0
+  open_source: true
+  hosted_saas: false
+  category: Build, Test, Deploy
+  sub_category: Virtual Machine Platforms & Containers
+  image_url: https://img.stackshare.io/service/586/n4u37v9t_400x400.png
+  detection_source_url: https://github.com/freeCodeCamp/devdocs
+  detection_source: Repo Metadata
+- name: Git
+  description: Fast, scalable, distributed revision control system
+  website_url: http://git-scm.com/
+  open_source: true
+  hosted_saas: false
+  category: Build, Test, Deploy
+  sub_category: Version Control System
+  image_url: https://img.stackshare.io/service/1046/git.png
+  detection_source_url: https://github.com/freeCodeCamp/devdocs
+  detection_source: Repo Metadata
+- name: GitHub Actions
+  description: Automate your workflow from idea to production
+  website_url: https://github.com/features/actions
+  open_source: false
+  hosted_saas: true
+  category: Build, Test, Deploy
+  sub_category: Continuous Integration
+  image_url: https://img.stackshare.io/service/11563/actions.png
+  detection_source_url: https://github.com/freeCodeCamp/devdocs/blob/main/.github/workflows/build.yml
+  detection_source: ".github/workflows/build.yml"
+  last_updated_by: renovate[bot]
+  last_updated_on: 2023-03-25 01:01:01.000000000 Z
+- name: New Relic
+  description: New Relic is the industry’s largest and most comprehensive cloud-based
+    observability platform.
+  website_url: http://newrelic.com
+  open_source: false
+  hosted_saas: true
+  category: Monitoring
+  sub_category: Performance Monitoring
+  image_url: https://img.stackshare.io/service/103/default_193410db3a7e419c7b436961bf41d733c7346b59.png
+  detection_source_url: https://github.com/freeCodeCamp/devdocs/blob/main/Gemfile
+  detection_source: Gemfile
+  last_updated_by: Thibaut Courouble
+  last_updated_on: 2018-03-24 19:06:19.000000000 Z
+- name: RubyGems
+  description: Easily download, install, and use ruby software packages on your system
+  website_url: https://rubygems.org/
+  open_source: false
+  hosted_saas: false
+  category: Build, Test, Deploy
+  sub_category: Package Managers
+  image_url: https://img.stackshare.io/service/12795/5jL6-BA5_400x400.jpeg
+  detection_source_url: https://github.com/freeCodeCamp/devdocs/blob/main/Gemfile
+  detection_source: Gemfile
+  last_updated_by: Thibaut
+  last_updated_on: 2013-10-24 18:25:52.000000000 Z
+- name: npm
+  description: The package manager for JavaScript.
+  website_url: https://www.npmjs.com/
+  open_source: false
+  hosted_saas: false
+  category: Build, Test, Deploy
+  sub_category: Front End Package Manager
+  image_url: https://img.stackshare.io/service/1120/lejvzrnlpb308aftn31u.png
+  detection_source_url: https://github.com/freeCodeCamp/devdocs/blob/main/Gemfile
+  detection_source: Gemfile
+  last_updated_by: Thibaut
+  last_updated_on: 2013-10-24 18:25:52.000000000 Z
+- name: activesupport
+  description: A toolkit of support libraries and Ruby core extensions extracted from
+    the Rails framework
+  package_url: https://rubygems.org/activesupport
+  version: 7.1.3
+  license: MIT
+  open_source: true
+  hosted_saas: false
+  category: Libraries
+  sub_category: RubyGems Packages
+  image_url: https://img.stackshare.io/package/18817/default_b17f14dbef6c1275120b34d9ec2eff5942499bd5.png
+  detection_source_url: https://github.com/freeCodeCamp/devdocs/blob/main/Gemfile.lock
+  detection_source: Gemfile
+  last_updated_by: Paul Sernatinger
+  last_updated_on: 2022-11-14 14:30:30.000000000 Z
+- name: better_errors
+  description: Provides a better error page for Rails and other Rack apps
+  package_url: https://rubygems.org/better_errors
+  version: 2.10.1
+  license: MIT
+  open_source: true
+  hosted_saas: false
+  category: Libraries
+  sub_category: RubyGems Packages
+  image_url: https://img.stackshare.io/package/19224/default_90da4313847baa579409c050c1ebb8de5a6e0fbc.png
+  detection_source_url: https://github.com/freeCodeCamp/devdocs/blob/main/Gemfile.lock
+  detection_source: Gemfile
+  last_updated_by: Thibaut
+  last_updated_on: 2013-10-24 18:25:52.000000000 Z
+- name: browser
+  description: Do some browser detection with Ruby
+  package_url: https://rubygems.org/browser
+  version: 5.3.1
+  license: MIT
+  open_source: true
+  hosted_saas: false
+  category: Libraries
+  sub_category: RubyGems Packages
+  image_url: https://img.stackshare.io/package/19740/default_dd31b4f280886d69f8a43459d55ecc7f1ae44486.png
+  detection_source_url: https://github.com/freeCodeCamp/devdocs/blob/main/Gemfile.lock
+  detection_source: Gemfile
+  last_updated_by: Paul Sernatinger
+  last_updated_on: 2022-11-14 14:30:30.000000000 Z
+- name: chunky_png
+  description: This pure Ruby library can read and write PNG images without depending
+    on an external image library, like RMagick
+  package_url: https://rubygems.org/chunky_png
+  version: 1.4.0
+  license: MIT
+  open_source: true
+  hosted_saas: false
+  category: Libraries
+  sub_category: RubyGems Packages
+  image_url: https://img.stackshare.io/package/19118/default_ab0024f54be625eb1e21abc015158fc74b2e3704.png
+  detection_source_url: https://github.com/freeCodeCamp/devdocs/blob/main/Gemfile.lock
+  detection_source: Gemfile
+  last_updated_by: Paul Sernatinger
+  last_updated_on: 2022-11-14 14:30:30.000000000 Z
+- name: erubi
+  description: Erubi is a ERB template engine for ruby
+  package_url: https://rubygems.org/erubi
+  version: 1.12.0
+  license: MIT
+  open_source: true
+  hosted_saas: false
+  category: Libraries
+  sub_category: RubyGems Packages
+  image_url: https://img.stackshare.io/package/rubygems/image.png
+  detection_source_url: https://github.com/freeCodeCamp/devdocs/blob/main/Gemfile.lock
+  detection_source: Gemfile
+  last_updated_by: Paul Sernatinger
+  last_updated_on: 2022-11-14 14:30:30.000000000 Z
+- name: html-pipeline
+  description: GitHub HTML processing filters and utilities
+  package_url: https://rubygems.org/html-pipeline
+  version: 2.14.3
+  license: MIT
+  open_source: true
+  hosted_saas: false
+  category: Libraries
+  sub_category: RubyGems Packages
+  image_url: https://img.stackshare.io/package/19386/default_b0770ebdd12e1eb479a98261d0175b1714524f87.png
+  detection_source_url: https://github.com/freeCodeCamp/devdocs/blob/main/Gemfile.lock
+  detection_source: Gemfile
+  last_updated_by: Thibaut Courouble
+  last_updated_on: 2018-10-21 22:41:35.000000000 Z
+- name: image_optim
+  description: Command line tool and ruby interface to optimize
+  package_url: https://rubygems.org/image_optim
+  version: 0.31.3
+  license: MIT
+  open_source: true
+  hosted_saas: false
+  category: Libraries
+  sub_category: RubyGems Packages
+  image_url: https://img.stackshare.io/package/19798/default_5acb201e8340ca5b337b8c46c2fcaff7aa0db0ec.png
+  detection_source_url: https://github.com/freeCodeCamp/devdocs/blob/main/Gemfile.lock
+  detection_source: Gemfile
+  last_updated_by: Paul Sernatinger
+  last_updated_on: 2022-11-14 14:30:30.000000000 Z
+- name: image_optim_pack
+  description: 'Precompiled binaries for image_optim: advpng'
+  package_url: https://rubygems.org/image_optim_pack
+  version: 0.10.1
+  license: MIT
+  open_source: true
+  hosted_saas: false
+  category: Libraries
+  sub_category: RubyGems Packages
+  image_url: https://img.stackshare.io/package/rubygems/image.png
+  detection_source_url: https://github.com/freeCodeCamp/devdocs/blob/main/Gemfile.lock
+  detection_source: Gemfile
+  last_updated_by: Paul Sernatinger
+  last_updated_on: 2022-11-14 14:30:30.000000000 Z
+- name: minitest
+  description: Minitest provides a complete suite of testing facilities supporting
+    TDD, BDD, mocking, and benchmarking
+  package_url: https://rubygems.org/minitest
+  version: 5.21.2
+  license: MIT
+  open_source: true
+  hosted_saas: false
+  category: Libraries
+  sub_category: RubyGems Packages
+  image_url: https://img.stackshare.io/package/18818/default_f36df1cfa9ff6061d7f9b4879088be8538581c49.png
+  detection_source_url: https://github.com/freeCodeCamp/devdocs/blob/main/Gemfile.lock
+  detection_source: Gemfile
+  last_updated_by: Thibaut
+  last_updated_on: 2015-01-03 15:38:22.000000000 Z
+- name: net-sftp
+  description: A pure Ruby implementation of the SFTP client protocol
+  package_url: https://rubygems.org/net-sftp
+  version: 4.0.0
+  license: MIT
+  open_source: true
+  hosted_saas: false
+  category: Libraries
+  sub_category: RubyGems Packages
+  image_url: https://img.stackshare.io/package/19106/default_92b412aaa5197ea1fc2d70a503018e4186714110.png
+  detection_source_url: https://github.com/freeCodeCamp/devdocs/blob/main/Gemfile.lock
+  detection_source: Gemfile
+  last_updated_by: Paul Sernatinger
+  last_updated_on: 2022-11-14 14:30:30.000000000 Z
+- name: newrelic_rpm
+  description: New Relic is a performance management system, developed by New Relic,
+    Inc
+  package_url: https://rubygems.org/newrelic_rpm
+  version: 8.16.0
+  license: Apache-2.0
+  open_source: true
+  hosted_saas: false
+  category: Libraries
+  sub_category: RubyGems Packages
+  image_url: https://img.stackshare.io/package/19246/default_518f3430d0c3ea4653c591ebd7e75da67f51cfaf.png
+  detection_source_url: https://github.com/freeCodeCamp/devdocs/blob/main/Gemfile.lock
+  detection_source: Gemfile
+  last_updated_by: Thibaut Courouble
+  last_updated_on: 2018-03-24 19:06:19.000000000 Z
+- name: nokogiri
+  description: Nokogiri
+  package_url: https://rubygems.org/nokogiri
+  version: 1.16.0
+  license: MIT
+  open_source: true
+  hosted_saas: false
+  category: Libraries
+  sub_category: RubyGems Packages
+  image_url: https://img.stackshare.io/package/18823/default_b8fbb83e23c963442e15398c5b56262cc6267d6f.png
+  detection_source_url: https://github.com/freeCodeCamp/devdocs/blob/main/Gemfile.lock
+  detection_source: Gemfile
+  last_updated_by: Thibaut Courouble
+  last_updated_on: 2018-10-21 22:41:35.000000000 Z
+- name: progress_bar
+  description: 'Give people feedback about long-running tasks without overloading
+    them with information: Use a progress bar'
+  package_url: https://rubygems.org/progress_bar
+  version: 1.3.3
+  license: WTFPL
+  open_source: true
+  hosted_saas: false
+  category: Libraries
+  sub_category: RubyGems Packages
+  image_url: https://img.stackshare.io/package/19696/default_2312d4d1847ef96af6bbd57ed9959234ab92321c.png
+  detection_source_url: https://github.com/freeCodeCamp/devdocs/blob/main/Gemfile.lock
+  detection_source: Gemfile
+  last_updated_by: Thibaut
+  last_updated_on: 2014-01-26 21:01:54.000000000 Z
+- name: pry-byebug
+  description: Combine 'pry' with 'byebug'
+  package_url: https://rubygems.org/pry-byebug
+  version: 3.10.1
+  license: MIT
+  open_source: true
+  hosted_saas: false
+  category: Libraries
+  sub_category: RubyGems Packages
+  image_url: https://img.stackshare.io/package/18848/default_1c2935fa69cec14d38adad302e002464101cd71f.png
+  detection_source_url: https://github.com/freeCodeCamp/devdocs/blob/main/Gemfile.lock
+  detection_source: Gemfile
+  last_updated_by: Paul Sernatinger
+  last_updated_on: 2022-11-14 14:30:30.000000000 Z
+- name: rack
+  description: Rack provides a minimal, modular and adaptable interface for developing
+    web applications in Ruby
+  package_url: https://rubygems.org/rack
+  version: 2.2.8
+  license: MIT
+  open_source: true
+  hosted_saas: false
+  category: Libraries
+  sub_category: RubyGems Packages
+  image_url: https://img.stackshare.io/package/18839/default_db5cfb0d85d9fd8bfb40a863581417a2a57791ab.png
+  detection_source_url: https://github.com/freeCodeCamp/devdocs/blob/main/Gemfile.lock
+  detection_source: Gemfile
+  last_updated_by: Paul Sernatinger
+  last_updated_on: 2022-11-14 14:30:30.000000000 Z
+- name: rack-ssl-enforcer
+  description: Rack::SslEnforcer is a simple Rack middleware to enforce ssl connections
+  package_url: https://rubygems.org/rack-ssl-enforcer
+  version: 0.2.9
+  license: MIT
+  open_source: true
+  hosted_saas: false
+  category: Libraries
+  sub_category: RubyGems Packages
+  image_url: https://img.stackshare.io/package/rubygems/image.png
+  detection_source_url: https://github.com/freeCodeCamp/devdocs/blob/main/Gemfile.lock
+  detection_source: Gemfile
+  last_updated_by: Paul Sernatinger
+  last_updated_on: 2022-11-14 14:30:30.000000000 Z
+- name: rack-test
+  description: Rack::Test is a small, simple testing API for Rack apps
+  package_url: https://rubygems.org/rack-test
+  version: 2.1.0
+  license: MIT
+  open_source: true
+  hosted_saas: false
+  category: Libraries
+  sub_category: RubyGems Packages
+  image_url: https://img.stackshare.io/package/18845/default_db5cfb0d85d9fd8bfb40a863581417a2a57791ab.png
+  detection_source_url: https://github.com/freeCodeCamp/devdocs/blob/main/Gemfile.lock
+  detection_source: Gemfile
+  last_updated_by: Paul Sernatinger
+  last_updated_on: 2022-11-14 14:30:30.000000000 Z
+- name: rake
+  description: Rake is a Make-like program implemented in Ruby
+  package_url: https://rubygems.org/rake
+  version: 13.1.0
+  license: MIT
+  open_source: true
+  hosted_saas: false
+  category: Libraries
+  sub_category: RubyGems Packages
+  image_url: https://img.stackshare.io/package/18812/default_f582e4648f4682adb72d2b201218cda7f8e894ac.png
+  detection_source_url: https://github.com/freeCodeCamp/devdocs/blob/main/Gemfile.lock
+  detection_source: Gemfile
+  last_updated_by: Paul Sernatinger
+  last_updated_on: 2022-11-14 14:30:30.000000000 Z
+- name: redcarpet
+  description: A fast, safe and extensible Markdown to
+  package_url: https://rubygems.org/redcarpet
+  version: 3.6.0
+  license: MIT
+  open_source: true
+  hosted_saas: false
+  category: Libraries
+  sub_category: RubyGems Packages
+  image_url: https://img.stackshare.io/package/18853/default_b87d202e13d56f87c63181fa49bc5e099c9abaac.png
+  detection_source_url: https://github.com/freeCodeCamp/devdocs/blob/main/Gemfile.lock
+  detection_source: Gemfile
+  last_updated_by: Paul Sernatinger
+  last_updated_on: 2022-11-14 14:30:30.000000000 Z
+- name: rr
+  description: RR is a test double framework that features a rich selection of double
+    techniques and a terse syntax
+  package_url: https://rubygems.org/rr
+  version: 3.1.0
+  license: MIT
+  open_source: true
+  hosted_saas: false
+  category: Libraries
+  sub_category: RubyGems Packages
+  image_url: https://img.stackshare.io/package/18915/default_353d3fd998e68372ebd6d80dbb4c0632f387d091.png
+  detection_source_url: https://github.com/freeCodeCamp/devdocs/blob/main/Gemfile.lock
+  detection_source: Gemfile
+  last_updated_by: Thibaut
+  last_updated_on: 2013-10-24 18:25:52.000000000 Z
+- name: sass
+  description: Ruby Sass is deprecated! See https://sass-lang.com/ruby-sass for details
+  package_url: https://rubygems.org/sass
+  version: 3.7.4
+  license: MIT
+  open_source: true
+  hosted_saas: false
+  category: Libraries
+  sub_category: RubyGems Packages
+  image_url: https://img.stackshare.io/package/18882/default_b1cb499f3e62fe773109c989f76e3365fbe49857.png
+  detection_source_url: https://github.com/freeCodeCamp/devdocs/blob/main/Gemfile.lock
+  detection_source: Gemfile
+  last_updated_by: Simon Legner
+  last_updated_on: 2024-01-13 21:26:48.000000000 Z
+- name: selenium-webdriver
+  description: WebDriver is a tool for writing automated tests of websites
+  package_url: https://rubygems.org/selenium-webdriver
+  license: Apache-2.0
+  open_source: true
+  hosted_saas: false
+  category: Libraries
+  sub_category: RubyGems Packages
+  image_url: https://img.stackshare.io/package/18901/default_f0ad2b1ffbe10fdd866f9f8e5f812599d9e8085b.png
+  detection_source_url: https://github.com/freeCodeCamp/devdocs/blob/main/Gemfile
+  detection_source: Gemfile
+  last_updated_by: Thibaut
+  last_updated_on: 2014-01-26 21:01:54.000000000 Z
+- name: sinatra-contrib
+  description: Collection of useful Sinatra extensions
+  package_url: https://rubygems.org/sinatra-contrib
+  version: 3.2.0
+  license: MIT
+  open_source: true
+  hosted_saas: false
+  category: Libraries
+  sub_category: RubyGems Packages
+  image_url: https://img.stackshare.io/package/19010/default_4361ccfae4dee655802081d8182ddcaebd7a2b3f.png
+  detection_source_url: https://github.com/freeCodeCamp/devdocs/blob/main/Gemfile.lock
+  detection_source: Gemfile
+  last_updated_by: Paul Sernatinger
+  last_updated_on: 2022-11-14 14:30:30.000000000 Z
+- name: sprockets
+  description: Sprockets is a Rack-based asset packaging system that concatenates
+    and serves JavaScript
+  package_url: https://rubygems.org/sprockets
+  version: 3.7.2
+  license: MIT
+  open_source: true
+  hosted_saas: false
+  category: Libraries
+  sub_category: RubyGems Packages
+  image_url: https://img.stackshare.io/package/18932/default_36bbb38c1cd5521e90d6e99982778960b00ec515.png
+  detection_source_url: https://github.com/freeCodeCamp/devdocs/blob/main/Gemfile.lock
+  detection_source: Gemfile
+  last_updated_by: Simon Legner
+  last_updated_on: 2024-01-13 21:26:48.000000000 Z
+- name: sprockets-helpers
+  description: Asset path helpers for Sprockets 2.x &amp;amp; 3.x applications
+  package_url: https://rubygems.org/sprockets-helpers
+  version: 1.4.0
+  license: MIT
+  open_source: true
+  hosted_saas: false
+  category: Libraries
+  sub_category: RubyGems Packages
+  image_url: https://img.stackshare.io/package/19732/default_be22d39d0c697424d0da2019daf25b87c93b4c6e.png
+  detection_source_url: https://github.com/freeCodeCamp/devdocs/blob/main/Gemfile.lock
+  detection_source: Gemfile
+  last_updated_by: Simon Legner
+  last_updated_on: 2024-01-13 21:26:48.000000000 Z
+- name: sprockets-sass
+  description: When using Sprockets 2.0 with Sass you will eventually run into a pretty
+    big issue
+  package_url: https://rubygems.org/sprockets-sass
+  license: MIT
+  open_source: true
+  hosted_saas: false
+  category: Libraries
+  sub_category: RubyGems Packages
+  image_url: https://img.stackshare.io/package/19683/default_5a5984fb57132e73bff841a1ebf058577d3c8cb9.png
+  detection_source_url: https://github.com/freeCodeCamp/devdocs/blob/main/Gemfile
+  detection_source: Gemfile
+  last_updated_by: Simon Legner
+  last_updated_on: 2024-01-13 21:26:48.000000000 Z
+- name: terminal-table
+  description: Simple, feature rich ascii table generation library
+  package_url: https://rubygems.org/terminal-table
+  version: 3.0.2
+  license: MIT
+  open_source: true
+  hosted_saas: false
+  category: Libraries
+  sub_category: RubyGems Packages
+  image_url: https://img.stackshare.io/package/18923/default_401820e785202ca0018a36ea3e12ee9a92b3efac.png
+  detection_source_url: https://github.com/freeCodeCamp/devdocs/blob/main/Gemfile.lock
+  detection_source: Gemfile
+  last_updated_by: Jasper van Merle
+  last_updated_on: 2019-10-11 15:55:09.000000000 Z
+- name: thin
+  description: A thin and fast web server
+  package_url: https://rubygems.org/thin
+  version: 1.8.2
+  license: GPL-2.0+,Ruby
+  open_source: true
+  hosted_saas: false
+  category: Libraries
+  sub_category: RubyGems Packages
+  image_url: https://img.stackshare.io/package/18900/default_f0ad2b1ffbe10fdd866f9f8e5f812599d9e8085b.png
+  detection_source_url: https://github.com/freeCodeCamp/devdocs/blob/main/Gemfile.lock
+  detection_source: Gemfile
+  last_updated_by: Paul Sernatinger
+  last_updated_on: 2022-11-14 14:30:30.000000000 Z
+- name: thor
+  description: Thor is a toolkit for building powerful command-line interfaces
+  package_url: https://rubygems.org/thor
+  version: 1.3.0
+  license: MIT
+  open_source: true
+  hosted_saas: false
+  category: Libraries
+  sub_category: RubyGems Packages
+  image_url: https://img.stackshare.io/package/18827/default_fa0604c1b3b2c413c942b4fa310935704d314c2f.png
+  detection_source_url: https://github.com/freeCodeCamp/devdocs/blob/main/Gemfile.lock
+  detection_source: Gemfile
+  last_updated_by: Paul Sernatinger
+  last_updated_on: 2022-11-14 14:30:30.000000000 Z
+- name: tty-pager
+  description: Terminal output paging in a cross-platform way supporting all major
+    ruby interpreters
+  package_url: https://rubygems.org/tty-pager
+  version: 0.14.0
+  license: MIT
+  open_source: true
+  hosted_saas: false
+  category: Libraries
+  sub_category: RubyGems Packages
+  image_url: https://img.stackshare.io/package/rubygems/image.png
+  detection_source_url: https://github.com/freeCodeCamp/devdocs/blob/main/Gemfile.lock
+  detection_source: Gemfile
+  last_updated_by: Thibaut Courouble
+  last_updated_on: 2016-01-24 15:03:12.000000000 Z
+- name: typhoeus
+  description: Like a modern code version of the mythical beast with 100 serpent heads
+  package_url: https://rubygems.org/typhoeus
+  version: 1.4.1
+  license: MIT
+  open_source: true
+  hosted_saas: false
+  category: Libraries
+  sub_category: RubyGems Packages
+  image_url: https://img.stackshare.io/package/18891/default_b7088ec778267614a78a5a472c67252ec1721d10.png
+  detection_source_url: https://github.com/freeCodeCamp/devdocs/blob/main/Gemfile.lock
+  detection_source: Gemfile
+  last_updated_by: Paul Sernatinger
+  last_updated_on: 2022-11-14 14:30:30.000000000 Z
+- name: yajl-ruby
+  description: Ruby C bindings to the excellent Yajl JSON stream-based parser library
+  package_url: https://rubygems.org/yajl-ruby
+  version: 1.4.3
+  license: MIT
+  open_source: true
+  hosted_saas: false
+  category: Libraries
+  sub_category: RubyGems Packages
+  image_url: https://img.stackshare.io/package/18895/default_9386886dd1c6c396a11bd4b49732afb9ec444f8d.png
+  detection_source_url: https://github.com/freeCodeCamp/devdocs/blob/main/Gemfile.lock
+  detection_source: Gemfile
+  last_updated_by: Nicholas La Roux
+  last_updated_on: 2024-01-09 12:48:51.000000000 Z