diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index f26ba88d..b8d2f066 100644 --- a/.github/workflows/build.yml +++ b/.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@432702e864cadc1b56247e31aa341be5be3e129a # v1.168.0 + uses: ruby/setup-ruby@161cd54b698f1fb3ea539faab2e036d409550e3c # v1.187.0 with: bundler-cache: true # runs 'bundle install' and caches installed gems automatically - name: Run tests diff --git a/.github/workflows/schedule-doc-report.yml b/.github/workflows/schedule-doc-report.yml index 6b3e90d6..e4488d80 100644 --- a/.github/workflows/schedule-doc-report.yml +++ b/.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@432702e864cadc1b56247e31aa341be5be3e129a # v1.168.0 + uses: ruby/setup-ruby@161cd54b698f1fb3ea539faab2e036d409550e3c # v1.187.0 with: bundler-cache: true # runs 'bundle install' and caches installed gems automatically - name: Generate report diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index c8904151..99ab59bb 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -9,9 +9,9 @@ jobs: test: runs-on: ubuntu-latest steps: - - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 + - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 - name: Set up Ruby - uses: ruby/setup-ruby@432702e864cadc1b56247e31aa341be5be3e129a # v1.168.0 + uses: ruby/setup-ruby@161cd54b698f1fb3ea539faab2e036d409550e3c # v1.187.0 with: bundler-cache: true # runs 'bundle install' and caches installed gems automatically - name: Run tests diff --git a/.ruby-version b/.ruby-version index 15a27998..a0891f56 100644 --- a/.ruby-version +++ b/.ruby-version @@ -1 +1 @@ -3.3.0 +3.3.4 diff --git a/.tool-versions b/.tool-versions index 3294aeda..05668b72 100644 --- a/.tool-versions +++ b/.tool-versions @@ -1 +1 @@ -ruby 3.3.0 +ruby 3.3.4 diff --git a/Dockerfile b/Dockerfile index eb384111..03ea1393 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM ruby:3.3.0 +FROM ruby:3.3.4 ENV LANG=C.UTF-8 ENV ENABLE_SERVICE_WORKER=true diff --git a/Dockerfile-alpine b/Dockerfile-alpine index 54db8897..93a8b482 100644 --- a/Dockerfile-alpine +++ b/Dockerfile-alpine @@ -1,4 +1,4 @@ -FROM ruby:3.3.0-alpine +FROM ruby:3.3.4-alpine ENV LANG=C.UTF-8 ENV ENABLE_SERVICE_WORKER=true diff --git a/Gemfile b/Gemfile index 12be6c4f..cfbf549f 100644 --- a/Gemfile +++ b/Gemfile @@ -1,5 +1,5 @@ source 'https://rubygems.org' -ruby '3.3.0' +ruby '3.3.4' gem 'activesupport', require: false gem 'html-pipeline' diff --git a/Gemfile.lock b/Gemfile.lock index 1bbdc197..e673c7b6 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,7 +1,7 @@ GEM remote: https://rubygems.org/ specs: - activesupport (7.1.3) + activesupport (7.1.3.4) base64 bigdecimal concurrent-ruby (~> 1.0, >= 1.0.2) @@ -16,7 +16,7 @@ GEM erubi (>= 1.0.0) rack (>= 0.9.0) rouge (>= 1.0.0) - bigdecimal (3.1.6) + bigdecimal (3.1.8) browser (5.3.1) byebug (11.1.3) chunky_png (1.4.0) @@ -24,13 +24,12 @@ GEM concurrent-ruby (1.2.3) connection_pool (2.4.1) daemons (1.4.1) - drb (2.2.0) - ruby2_keywords - erubi (1.12.0) + drb (2.2.1) + erubi (1.13.0) 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) @@ -38,7 +37,7 @@ GEM html-pipeline (2.14.3) activesupport (>= 2) nokogiri (>= 1.4) - i18n (1.14.1) + i18n (1.14.5) concurrent-ruby (~> 1.0) image_optim (0.31.3) exifr (~> 1.2, >= 1.2.2) @@ -52,8 +51,8 @@ GEM image_size (3.3.0) in_threads (1.6.0) method_source (1.0.0) - mini_portile2 (2.8.5) - minitest (5.21.2) + mini_portile2 (2.8.7) + minitest (5.24.1) multi_json (1.15.0) mustermann (3.0.0) ruby2_keywords (~> 0.0.1) @@ -62,13 +61,13 @@ 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.6) mini_portile2 (~> 2.8.2) racc (~> 1.4) options (2.3.2) progress (3.6.0) - progress_bar (1.3.3) - highline (>= 1.6, < 3) + progress_bar (1.3.4) + highline (>= 1.6) options (~> 2.3.0) pry (0.14.2) coderay (~> 1.1) @@ -77,14 +76,14 @@ GEM byebug (~> 11.0) pry (>= 0.13, < 0.15) racc (1.7.3) - rack (2.2.8) + rack (2.2.9) rack-protection (3.2.0) base64 (>= 0.1.0) rack (~> 2.2, >= 2.2.4) rack-ssl-enforcer (0.2.9) rack-test (2.1.0) rack (>= 1.3) - rake (13.1.0) + rake (13.2.1) rb-fsevent (0.11.2) rb-inotify (0.10.1) ffi (~> 1.0) @@ -111,7 +110,8 @@ GEM rack-protection (= 3.2.0) sinatra (= 3.2.0) tilt (~> 2.0) - sprockets (3.7.2) + sprockets (3.7.3) + base64 concurrent-ruby (~> 1.0) rack (> 1, < 3) sprockets-helpers (1.4.0) @@ -125,13 +125,13 @@ 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.3) execjs (>= 0.3.0, < 3) thin (1.8.2) daemons (~> 1.0, >= 1.0.9) eventmachine (~> 1.0, >= 1.0.4) rack (>= 1, < 3) - thor (1.3.0) + thor (1.3.1) tilt (2.3.0) tty-pager (0.14.0) strings (~> 0.2.0) @@ -187,7 +187,7 @@ DEPENDENCIES yajl-ruby RUBY VERSION - ruby 3.3.0p0 + ruby 3.3.4p94 BUNDLED WITH 2.4.6 diff --git a/README.md b/README.md index 8dec3856..a54f4992 100644 --- a/README.md +++ b/README.md @@ -172,10 +172,12 @@ Made something cool? Feel free to open a PR to add a new row to this table! You | [mohamed3nan/DevDocs-Tab](https://github.com/mohamed3nan/DevDocs-Tab) | VS Code extension (view as tab) | ![Latest GitHub commit](https://img.shields.io/github/last-commit/mohamed3nan/DevDocs-Tab?logo=github&label) | ![GitHub stars](https://img.shields.io/github/stars/mohamed3nan/DevDocs-Tab?logo=github&label) | | [deibit/vscode-devdocs](https://marketplace.visualstudio.com/items?itemName=deibit.devdocs) | VS Code extension (open the browser) | ![Latest GitHub commit](https://img.shields.io/github/last-commit/deibit/vscode-devdocs?logo=github&label) | ![GitHub stars](https://img.shields.io/github/stars/deibit/vscode-devdocs?logo=github&label) | | [mdh34/quickDocs](https://github.com/mdh34/quickDocs) | Vala/Python based viewer | ![Latest GitHub commit](https://img.shields.io/github/last-commit/mdh34/quickDocs?logo=github&label) | ![GitHub stars](https://img.shields.io/github/stars/mdh34/quickDocs?logo=github&label) | +| [girishji/devdocs.vim](https://github.com/girishji/devdocs.vim) | Vim plugin & TUI (browse inside Vim) | ![Latest GitHub commit](https://img.shields.io/github/last-commit/girishji/devdocs.vim?logo=github&label) | ![GitHub stars](https://img.shields.io/github/stars/girishji/devdocs.vim?logo=github&label) | | [romainl/vim-devdocs](https://github.com/romainl/vim-devdocs) | Vim plugin | ![Latest GitHub commit](https://img.shields.io/github/last-commit/romainl/vim-devdocs?logo=github&label) | ![GitHub stars](https://img.shields.io/github/stars/romainl/vim-devdocs?logo=github&label) | | [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 diff --git a/assets/javascripts/news.json b/assets/javascripts/news.json index b5340a3c..39b2883c 100644 --- a/assets/javascripts/news.json +++ b/assets/javascripts/news.json @@ -1,4 +1,12 @@ [ + [ + "2024-06-12", + "New documentations: Next.js, click" + ], + [ + "2024-01-24", + "New documentation: Playwright" + ], [ "2024-01-20", "New documentation: htmx" diff --git a/assets/stylesheets/pages/_tailwindcss.scss b/assets/stylesheets/pages/_tailwindcss.scss index b4dd10e6..b7ebab9e 100644 --- a/assets/stylesheets/pages/_tailwindcss.scss +++ b/assets/stylesheets/pages/_tailwindcss.scss @@ -2,7 +2,6 @@ // Styling for customizing-colors page - color swatches (based on original tailwind display design) .colors { display: flex; - flex-direction: column; gap: 1.2rem; // Text offset diff --git a/docs/file-scrapers.md b/docs/file-scrapers.md index 62dfcf3e..1a7149b3 100644 --- a/docs/file-scrapers.md +++ b/docs/file-scrapers.md @@ -180,8 +180,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 ``` diff --git a/lib/docs/filters/click/entries.rb b/lib/docs/filters/click/entries.rb new file mode 100644 index 00000000..01fa1a72 --- /dev/null +++ b/lib/docs/filters/click/entries.rb @@ -0,0 +1,58 @@ +module Docs + class Click + class EntriesFilter < Docs::EntriesFilter + TYPE_BY_SLUG = {} + + def call + if root_page? + css('section').each do |node| + next if ['documentation', 'api-reference'].include?(node['id']) + type = node.at_css('h2').content.strip + node.css('li > a').each do |toclink| + slug = toclink['href'].split('/')[-2] + TYPE_BY_SLUG[slug] = type + end + end + end + super + end + + def get_name + return at_css('h1').content.strip + end + + def get_type + TYPE_BY_SLUG[slug.split('/').first] || at_css('h1').content.strip + end + + def include_default_entry? + TYPE_BY_SLUG.include?(slug.split('/').first) + end + + def additional_entries + return [] if root_page? || TYPE_BY_SLUG.include?(slug.split('/').first) + + if slug == 'api/' + entries = [] + doc.css('> section').each do |section| + title = section.at_css('h2').content.strip + section.css('dl.py > dt[id]').each do |dt| + name = dt['id'].split('.')[1..].join('.') + name << '()' if dt.parent.classes.intersect?(['function', 'method', 'classmethod', 'staticmethod']) + entries << [name, dt['id'], title] + end + end + return entries + end + + (doc.css('> section') || []).map do |section| + title = section.at_css('h2').content.strip + [title, section['id']] + end + end + + private + + end + end +end diff --git a/lib/docs/filters/click/pre_clean_html.rb b/lib/docs/filters/click/pre_clean_html.rb new file mode 100644 index 00000000..e0552a6a --- /dev/null +++ b/lib/docs/filters/click/pre_clean_html.rb @@ -0,0 +1,11 @@ +module Docs + class Click + class PreCleanHtmlFilter < Filter + def call + # Remove ¶ character from headers + css('.headerlink').remove + doc + end + end + end +end diff --git a/lib/docs/filters/elisp/entries.rb b/lib/docs/filters/elisp/entries.rb index 9ccacb59..a699c7b0 100644 --- a/lib/docs/filters/elisp/entries.rb +++ b/lib/docs/filters/elisp/entries.rb @@ -2,7 +2,7 @@ module Docs class Elisp class EntriesFilter < Docs::EntriesFilter def get_name - # remove numbers at the beginnig + # remove numbers at the beginning name = at_css('.chapter', '.section', '.subsection', '.subsubsection', '.appendix').content.slice(/[[:alpha:]]...*/) # remove 'Appendix' word diff --git a/lib/docs/filters/gtk/entries.rb b/lib/docs/filters/gtk/entries.rb index 5cb3d27a..b51f1544 100644 --- a/lib/docs/filters/gtk/entries.rb +++ b/lib/docs/filters/gtk/entries.rb @@ -4,7 +4,7 @@ module Docs # The GTK documentation paths are "flat" and while the contents of each # page provides a way to determine the direct parent relationship, we # really need a full hierarchy of pages *a priori* to be able to fully - # categorize all pages and entries. So we're going to recursivly generate + # categorize all pages and entries. So we're going to recursively generate # a full map of page -> parent relationships from the table of contents... PARENT_BY_PATH = {} diff --git a/lib/docs/filters/kubectl/entries.rb b/lib/docs/filters/kubectl/entries.rb index 2a15d508..0d335c05 100644 --- a/lib/docs/filters/kubectl/entries.rb +++ b/lib/docs/filters/kubectl/entries.rb @@ -15,7 +15,7 @@ module Docs group = 'kubectl' commands = css('h1').to_a() commands.map do |node| - # handle titles differnetly by converting them into sidebar groups (types) + # handle titles differently by converting them into sidebar groups (types) new_group = at_css("##{node['id']} > strong") if new_group group = new_group.content.titleize diff --git a/lib/docs/filters/nextjs/clean_html.rb b/lib/docs/filters/nextjs/clean_html.rb new file mode 100644 index 00000000..99523bdd --- /dev/null +++ b/lib/docs/filters/nextjs/clean_html.rb @@ -0,0 +1,30 @@ +module Docs + class Nextjs + class CleanHtmlFilter < Filter + def call + @doc = at_css('.prose') + + css('.zola-anchor').remove + doc.prepend_child("

NextJS2

") if root_page? + css('div:contains("NEWS:")').remove + css('h2:contains("sponsors"), #sponsor-table').remove + css('div.sticky').remove #remove the floating menu + css('div.-mt-4').remove #remove the navigation line + css('footer').remove + css('div.feedback_inlineTriggerWrapper__o7yUx').remove + css('header').remove #remove links from the top of the page + css('nav').remove + + css('h1, h2, h3, h4').each { |node| node.content = node.content } + + css('pre > code').each do |node| + node.parent['data-language'] = 'typescript' + node.parent.content = node.parent.content + end + css('div[class^="code-block_header"]').remove + + doc + end + end + end +end diff --git a/lib/docs/filters/nextjs/entries.rb b/lib/docs/filters/nextjs/entries.rb new file mode 100644 index 00000000..03c6bc09 --- /dev/null +++ b/lib/docs/filters/nextjs/entries.rb @@ -0,0 +1,43 @@ +module Docs + class Nextjs + class EntriesFilter < Docs::EntriesFilter + def get_name + name = at_css('h1').content + name.strip! + #name + subpath_items = subpath.split('/', -1) + if subpath_items.length >= 5 + subpath_items[3].capitalize + ': ' + name # e.g. Routing: Defining Routes + else + name + end + end + + def get_type + if slug.start_with?('architecture') + 'Architecture' + elsif slug.start_with?('community') + 'Community' + elsif slug.start_with?('getting-started') + 'Getting Started' + elsif slug.start_with?('messages') + 'Messages' + elsif slug.start_with?('app/building-your-application') + 'Using App Router: Building your application' + elsif slug.start_with?('app/api-reference') + 'Using App Router: api-reference' + elsif slug.start_with?('app') + 'Using App Router' + elsif slug.start_with?('pages/building-your-application') + 'Using Pages Router: Building your application' + elsif slug.start_with?('pages/api-reference') + 'Using Pages Router: api-reference' + elsif slug.start_with?('pages') + 'Using Pages Router' + else + get_name + end + end + end + end +end diff --git a/lib/docs/filters/nim/entries.rb b/lib/docs/filters/nim/entries.rb index 7461ab5f..1ec4609a 100644 --- a/lib/docs/filters/nim/entries.rb +++ b/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 diff --git a/lib/docs/filters/openjdk/clean_html_new.rb b/lib/docs/filters/openjdk/clean_html_new.rb index 90341926..608dbab6 100644 --- a/lib/docs/filters/openjdk/clean_html_new.rb +++ b/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| diff --git a/lib/docs/filters/playwright/clean_html.rb b/lib/docs/filters/playwright/clean_html.rb new file mode 100644 index 00000000..cc97294d --- /dev/null +++ b/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* "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 diff --git a/lib/docs/filters/vitest/entries.rb b/lib/docs/filters/vitest/entries.rb index 03527ef6..daa43bc5 100644 --- a/lib/docs/filters/vitest/entries.rb +++ b/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 diff --git a/lib/docs/scrapers/click.rb b/lib/docs/scrapers/click.rb new file mode 100644 index 00000000..71c2a423 --- /dev/null +++ b/lib/docs/scrapers/click.rb @@ -0,0 +1,30 @@ +module Docs + class Click < UrlScraper + self.name = 'click' + self.type = 'sphinx' + self.root_path = 'index.html' + self.links = { + home: 'https://click.palletsprojects.com/', + code: 'https://github.com/pallets/click' + } + + html_filters.push 'click/pre_clean_html', 'click/entries', 'sphinx/clean_html' + + options[:container] = '.body > section' + options[:skip] = ['changes/', 'genindex/', 'py-modindex/'] + options[:title] = false + + options[:attribution] = <<-HTML + © Copyright 2014 Pallets.
+ Licensed under the BSD 3-Clause License.
+ We are not supported nor endorsed by Pallets. + HTML + + self.release = '8.1.x' + self.base_url = "https://click.palletsprojects.com/en/#{self.release}/" + + def get_latest_version(opts) + get_latest_github_release('pallets', 'click', opts) + end + end +end diff --git a/lib/docs/scrapers/crystal.rb b/lib/docs/scrapers/crystal.rb index ed26c585..94da0e29 100644 --- a/lib/docs/scrapers/crystal.rb +++ b/lib/docs/scrapers/crystal.rb @@ -36,7 +36,7 @@ module Docs def get_latest_version(opts) doc = fetch_doc('https://crystal-lang.org/', opts) - doc.at_css('.latest-release').content.scan(/([0-9.]+)/)[0][0] + doc.at_css('.latest-release-info > a > strong').content.scan(/([0-9.]+)/)[0][0] end end end diff --git a/lib/docs/scrapers/django.rb b/lib/docs/scrapers/django.rb index fc179dbc..98181e3d 100644 --- a/lib/docs/scrapers/django.rb +++ b/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}/" diff --git a/lib/docs/scrapers/docker.rb b/lib/docs/scrapers/docker.rb index 5d01341d..070796ae 100644 --- a/lib/docs/scrapers/docker.rb +++ b/lib/docs/scrapers/docker.rb @@ -96,7 +96,7 @@ module Docs def get_latest_version(opts) doc = fetch_doc('https://docs.docker.com/engine/release-notes/', opts) - latest_version = doc.at_css('.content > section > h2').content.strip + latest_version = doc.at_css('.DocSearch-content > h2 > a').content.strip latest_version.rpartition(' ')[-1] end end diff --git a/lib/docs/scrapers/esbuild.rb b/lib/docs/scrapers/esbuild.rb index e0b6c861..f5c463f1 100644 --- a/lib/docs/scrapers/esbuild.rb +++ b/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' diff --git a/lib/docs/scrapers/git.rb b/lib/docs/scrapers/git.rb index 2f3ea3b6..9380099e 100644 --- a/lib/docs/scrapers/git.rb +++ b/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 - © 2012–2023 Scott Chacon and others
+ © 2012–2024 Scott Chacon and others
Licensed under the MIT License. HTML diff --git a/lib/docs/scrapers/go.rb b/lib/docs/scrapers/go.rb index c94a5455..cc20b49a 100644 --- a/lib/docs/scrapers/go.rb +++ b/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/', diff --git a/lib/docs/scrapers/haproxy.rb b/lib/docs/scrapers/haproxy.rb index bac09b9c..9135f4d7 100644 --- a/lib/docs/scrapers/haproxy.rb +++ b/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}/" diff --git a/lib/docs/scrapers/htmx.rb b/lib/docs/scrapers/htmx.rb index 6e6f638e..719277b2 100644 --- a/lib/docs/scrapers/htmx.rb +++ b/lib/docs/scrapers/htmx.rb @@ -25,7 +25,7 @@ module Docs # https://github.com/bigskysoftware/htmx/blob/master/LICENSE options[:attribution] = <<-HTML - Licensed under the Zero-Clause BSD + Licensed under the Zero-Clause BSD License. HTML def get_latest_version(opts) diff --git a/lib/docs/scrapers/kubernetes.rb b/lib/docs/scrapers/kubernetes.rb index 2eb30c63..22149d06 100644 --- a/lib/docs/scrapers/kubernetes.rb +++ b/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 diff --git a/lib/docs/scrapers/nextjs.rb b/lib/docs/scrapers/nextjs.rb new file mode 100644 index 00000000..99d3f5ca --- /dev/null +++ b/lib/docs/scrapers/nextjs.rb @@ -0,0 +1,26 @@ +module Docs + class Nextjs < UrlScraper + self.name = 'Next.js' + self.slug = 'nextjs' + self.type = 'simple' + self.release = '14.2.4' + self.base_url = 'https://nextjs.org/docs' + self.initial_paths = %w(reference/) + self.links = { + home: 'https://www.nextjs.org/', + code: 'https://github.com/vercel/next.js' + } + + html_filters.push 'nextjs/entries', 'nextjs/clean_html' + options[:download_images] = false + + options[:attribution] = <<-HTML + © 2024 Vercel, Inc.
+ Licensed under the MIT License. + HTML + + def get_latest_version(opts) + get_npm_version('next', opts) + end + end +end diff --git a/lib/docs/scrapers/nim.rb b/lib/docs/scrapers/nim.rb index 5a9d4f00..9001dbee 100644 --- a/lib/docs/scrapers/nim.rb +++ b/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 - © 2006–2021 Andreas Rumpf
+ © 2006–2024 Andreas Rumpf
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 diff --git a/lib/docs/scrapers/node.rb b/lib/docs/scrapers/node.rb index 60a89677..d8dc6cb4 100644 --- a/lib/docs/scrapers/node.rb +++ b/lib/docs/scrapers/node.rb @@ -24,10 +24,15 @@ module Docs HTML version do - self.release = '20.8.0' + self.release = '22.3.0' self.base_url = 'https://nodejs.org/api/' end + version '20 LTS' do + self.release = '20.15.01' + self.base_url = 'https://nodejs.org/dist/latest-v20.x/docs/api/' + end + version '18 LTS' do self.release = '18.18.0' self.base_url = 'https://nodejs.org/dist/latest-v18.x/docs/api/' @@ -74,8 +79,8 @@ module Docs end def get_latest_version(opts) - doc = fetch_doc('https://nodejs.org/en/', opts) - doc.at_css('#home-intro > .home-downloadblock:last-of-type > a')['data-version'][1..-1] + tags = get_github_tags('nodejs', 'node', opts) + tags[0]['name'][1..-1] end end end diff --git a/lib/docs/scrapers/octave.rb b/lib/docs/scrapers/octave.rb index fa9103fc..def6541e 100644 --- a/lib/docs/scrapers/octave.rb +++ b/lib/docs/scrapers/octave.rb @@ -51,7 +51,7 @@ module Docs def get_latest_version(opts) doc = fetch_doc('https://octave.org/doc/interpreter/', opts) - doc.at_css('h1').content.scan(/([0-9.]+)/)[0][0] + doc.at_css('#SEC_Top + p').content.scan(/([0-9.]+)/)[1][0][0..-2] end end diff --git a/lib/docs/scrapers/phalcon.rb b/lib/docs/scrapers/phalcon.rb index c6ca63f2..a0fa8e06 100644 --- a/lib/docs/scrapers/phalcon.rb +++ b/lib/docs/scrapers/phalcon.rb @@ -31,8 +31,8 @@ module Docs end def get_latest_version(opts) - doc = fetch_doc('https://docs.phalconphp.com/', opts) - doc.at_css('.header__lang.expand > div > ul > li > a').content + tags = get_github_tags('phalcon', 'cphalcon', opts) + tags[0]['name'][1..-1] end end end diff --git a/lib/docs/scrapers/playwright.rb b/lib/docs/scrapers/playwright.rb new file mode 100644 index 00000000..a791cddb --- /dev/null +++ b/lib/docs/scrapers/playwright.rb @@ -0,0 +1,27 @@ +module Docs + class Playwright < UrlScraper + self.name = 'Playwright' + self.type = 'simple' + self.release = '1.44.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 + © 2024 Microsoft
+ Licensed under the Apache License, Version 2.0. + HTML + + def get_latest_version(opts) + get_npm_version('@playwright/test', opts) + end + end +end diff --git a/lib/docs/scrapers/pytorch.rb b/lib/docs/scrapers/pytorch.rb index a6d9ea82..ae79ec36 100644 --- a/lib/docs/scrapers/pytorch.rb +++ b/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 - © 2019-2024 Torch Contributors
- Licensed under the 3-clause BSD License. + © 2024, PyTorch Contributors
+ PyTorch has a BSD-style license, as found in the LICENSE file. HTML version '2' do diff --git a/lib/docs/scrapers/sanctuary_type_classes.rb b/lib/docs/scrapers/sanctuary_type_classes.rb index 5156e689..87f4410f 100644 --- a/lib/docs/scrapers/sanctuary_type_classes.rb +++ b/lib/docs/scrapers/sanctuary_type_classes.rb @@ -23,7 +23,7 @@ module Docs HTML def get_latest_version(opts) - get-npm-version("sanctuary-type-classes", opts) + get_npm_version("sanctuary-type-classes", opts) end end end diff --git a/lib/docs/scrapers/sqlite.rb b/lib/docs/scrapers/sqlite.rb index 062d907c..9a7ed376 100644 --- a/lib/docs/scrapers/sqlite.rb +++ b/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) diff --git a/lib/docs/scrapers/tailwindcss.rb b/lib/docs/scrapers/tailwindcss.rb index a9acf0c9..71b84d5f 100644 --- a/lib/docs/scrapers/tailwindcss.rb +++ b/lib/docs/scrapers/tailwindcss.rb @@ -7,7 +7,7 @@ module Docs self.root_path = '/' self.release = '3.3.2' self.links = { - home: 'tps://tailwindcss.com/', + home: 'https://tailwindcss.com/', code: 'https://github.com/tailwindlabs/tailwindcss' } diff --git a/lib/docs/scrapers/vite.rb b/lib/docs/scrapers/vite.rb index 46309fa7..e63b1454 100644 --- a/lib/docs/scrapers/vite.rb +++ b/lib/docs/scrapers/vite.rb @@ -22,7 +22,7 @@ module Docs html_filters.push 'vite/entries', 'vite/clean_html' version do - self.release = '5.0.11' + self.release = '5.2.13' self.base_url = 'https://vitejs.dev/' end diff --git a/lib/docs/scrapers/vitest.rb b/lib/docs/scrapers/vitest.rb index 820b9eef..251b6c69 100644 --- a/lib/docs/scrapers/vitest.rb +++ b/lib/docs/scrapers/vitest.rb @@ -9,6 +9,7 @@ module Docs } options[:root_title] = 'Vitest' + options[:download_images] = false options[:attribution] = <<-HTML © 2021-Present Anthony Fu
@@ -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' diff --git a/lib/docs/scrapers/vue.rb b/lib/docs/scrapers/vue.rb index 7fac3ce6..25a21011 100644 --- a/lib/docs/scrapers/vue.rb +++ b/lib/docs/scrapers/vue.rb @@ -19,7 +19,7 @@ module Docs HTML version '3' do - self.release = '3.4.5' + self.release = '3.4.27' self.base_url = 'https://vuejs.org/' self.initial_paths = %w(guide/introduction.html) html_filters.push 'vue/entries_v3', 'vue/clean_html' diff --git a/lib/docs/scrapers/zig.rb b/lib/docs/scrapers/zig.rb index a4fd556b..9223b8ca 100644 --- a/lib/docs/scrapers/zig.rb +++ b/lib/docs/scrapers/zig.rb @@ -2,7 +2,7 @@ module Docs class Zig < UrlScraper self.name = 'Zig' self.type = 'simple' - self.release = '0.11.0' + self.release = '0.13.0' self.base_url = "https://ziglang.org/documentation/#{self.release}/" self.links = { home: 'https://ziglang.org/', @@ -13,7 +13,7 @@ module Docs options[:follow_links] = false options[:attribution] = <<-HTML - © 2015–2023, Zig contributors
+ © 2015–2024, Zig contributors
Licensed under the MIT License. HTML diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 00000000..c77b993a --- /dev/null +++ b/package-lock.json @@ -0,0 +1,6 @@ +{ + "name": "devdocs", + "lockfileVersion": 3, + "requires": true, + "packages": {} +} diff --git a/public/icons/docs/click/16.png b/public/icons/docs/click/16.png new file mode 100644 index 00000000..d1497c30 Binary files /dev/null and b/public/icons/docs/click/16.png differ diff --git a/public/icons/docs/click/16@2x.png b/public/icons/docs/click/16@2x.png new file mode 100644 index 00000000..3bc91ffb Binary files /dev/null and b/public/icons/docs/click/16@2x.png differ diff --git a/public/icons/docs/click/SOURCE b/public/icons/docs/click/SOURCE new file mode 100644 index 00000000..be844957 --- /dev/null +++ b/public/icons/docs/click/SOURCE @@ -0,0 +1 @@ +https://github.com/pallets/click/blob/main/docs/_static/click-icon.png diff --git a/public/icons/docs/nextjs/16.png b/public/icons/docs/nextjs/16.png new file mode 100644 index 00000000..41e7ff4d Binary files /dev/null and b/public/icons/docs/nextjs/16.png differ diff --git a/public/icons/docs/nextjs/16@2x.png b/public/icons/docs/nextjs/16@2x.png new file mode 100644 index 00000000..e35d18e2 Binary files /dev/null and b/public/icons/docs/nextjs/16@2x.png differ diff --git a/public/icons/docs/nextjs/SOURCE b/public/icons/docs/nextjs/SOURCE new file mode 100644 index 00000000..178b8630 --- /dev/null +++ b/public/icons/docs/nextjs/SOURCE @@ -0,0 +1,2 @@ +https://assets.vercel.com/image/upload/v1662130559/nextjs/Icon_dark_background.png +https://github.com/vercel/next.js/blob/canary/examples/cms-enterspeed/public/favicon/favicon.ico \ No newline at end of file diff --git a/public/icons/docs/playwright/16.png b/public/icons/docs/playwright/16.png new file mode 100644 index 00000000..a209989d Binary files /dev/null and b/public/icons/docs/playwright/16.png differ diff --git a/public/icons/docs/playwright/16@2x.png b/public/icons/docs/playwright/16@2x.png new file mode 100644 index 00000000..e621e1f0 Binary files /dev/null and b/public/icons/docs/playwright/16@2x.png differ diff --git a/public/icons/docs/playwright/SOURCE b/public/icons/docs/playwright/SOURCE new file mode 100644 index 00000000..e60a4d3f --- /dev/null +++ b/public/icons/docs/playwright/SOURCE @@ -0,0 +1 @@ +https://playwright.dev/img/playwright-logo.svg diff --git a/techstack.md b/techstack.md new file mode 100644 index 00000000..f9657f09 --- /dev/null +++ b/techstack.md @@ -0,0 +1,189 @@ + +
+ +# 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") +

+|43
Tools used|01/27/24
Report generated| +|------|------| +
+ +## Languages (3) + + + + + + + + +
+ CSS 3 +
+ CSS 3 +
+ +
+ JavaScript +
+ JavaScript +
+ +
+ Ruby +
+ Ruby +
+ v3.3.0 +
+ +## Frameworks (1) + + + + +
+ Sinatra +
+ Sinatra +
+ +
+ +## DevOps (7) + + + + + + + + + + + + + + + + +
+ Capybara +
+ Capybara +
+ +
+ Docker +
+ Docker +
+ +
+ Git +
+ Git +
+ +
+ GitHub Actions +
+ GitHub Actions +
+ +
+ New Relic +
+ New Relic +
+ +
+ RubyGems +
+ RubyGems +
+ +
+ npm +
+ npm +
+ +
+ + +## Open source packages (32) + +## 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| + +
+
+ +Generated via [Stack File](https://github.com/marketplace/stack-file) diff --git a/techstack.yml b/techstack.yml new file mode 100644 index 00000000..88f89c51 --- /dev/null +++ b/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; 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