rails-dynamic-rendering 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.github/workflows/rspec.yml +35 -0
- data/.gitignore +22 -0
- data/.rspec +3 -0
- data/.ruby-version +1 -0
- data/CHANGELOG.md +3 -0
- data/Gemfile +26 -0
- data/LICENSE.txt +21 -0
- data/README.md +53 -0
- data/Rakefile +6 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/lib/dynamic_rendering/acts_as_dynamically_renderable.rb +149 -0
- data/lib/dynamic_rendering/version.rb +5 -0
- data/lib/rails-dynamic-rendering.rb +6 -0
- data/package.json +5 -0
- data/rails-dynamic-rendering.gemspec +34 -0
- data/yarn.lock +362 -0
- metadata +172 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 84bf44be445bc30c98214fed86b9d7d81414b4eae2ca0c0a5cfd94ed60ace248
|
4
|
+
data.tar.gz: baa1f5f209d87fe864303a6e4acd3afc360e0174abe45c0269848297b0c412af
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 9582d0e2dfc1c66c3895cbe52bb10608c6428e28cae0c1eb7eb2649f04de4322243707a2a4c72cce381a8c6b060b82b73e03a81b0636654963d38539452ad9e5
|
7
|
+
data.tar.gz: c5695606971ef4eb1a00234c4438ecf0545bd37c2ae88a1f25995748933f837cdde545897b4c8512f576e16a549e419c7e80212585809d6109838e83295f5407
|
@@ -0,0 +1,35 @@
|
|
1
|
+
name: RSpec Test Suite
|
2
|
+
|
3
|
+
on: [push]
|
4
|
+
|
5
|
+
jobs:
|
6
|
+
build:
|
7
|
+
runs-on: ubuntu-latest
|
8
|
+
steps:
|
9
|
+
- name: Checkout branch
|
10
|
+
uses: actions/checkout@v1
|
11
|
+
- name: Set up Ruby
|
12
|
+
uses: actions/setup-ruby@v1
|
13
|
+
with:
|
14
|
+
ruby-version: 2.6.6
|
15
|
+
- name: Set up Node
|
16
|
+
uses: actions/setup-node@v1
|
17
|
+
with:
|
18
|
+
node-version: 12.18.3
|
19
|
+
- name: Cache node modules
|
20
|
+
uses: actions/cache@v2
|
21
|
+
with:
|
22
|
+
path: node_modules
|
23
|
+
key: ${{ runner.OS }}-yarn-cache-${{ hashFiles('**/yarn.lock') }}${{ hashFiles('**/package.json')
|
24
|
+
}}"
|
25
|
+
restore-keys: "${{ runner.OS }}-yarn-cache-\n"
|
26
|
+
- name: Install system packages
|
27
|
+
run: |
|
28
|
+
sudo apt-get install libsqlite3-dev
|
29
|
+
command -v bundler || gem install bundler
|
30
|
+
- name: Install gems
|
31
|
+
run: bundle install --jobs $(nproc) --retry 3
|
32
|
+
- name: Install Yarn packages
|
33
|
+
run: yarn install
|
34
|
+
- name: Run RSpec test suite
|
35
|
+
run: bundle exec rspec spec
|
data/.gitignore
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
/Gemfile.lock
|
2
|
+
/.bundle/
|
3
|
+
/.yardoc
|
4
|
+
/_yardoc/
|
5
|
+
/coverage/
|
6
|
+
/doc/
|
7
|
+
/pkg/
|
8
|
+
/spec/reports/
|
9
|
+
/tmp/
|
10
|
+
/vendor
|
11
|
+
/node_modules
|
12
|
+
|
13
|
+
# rspec failure tracking
|
14
|
+
.rspec_status
|
15
|
+
|
16
|
+
/shell.nix
|
17
|
+
/tags
|
18
|
+
|
19
|
+
*.log
|
20
|
+
.DS_Store
|
21
|
+
|
22
|
+
.ruby-gemset
|
data/.rspec
ADDED
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
2.6.6
|
data/CHANGELOG.md
ADDED
data/Gemfile
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
source 'https://rubygems.org'
|
2
|
+
|
3
|
+
# Specify your gem's dependencies in rails-dynamic-rendering.gemspec
|
4
|
+
gemspec
|
5
|
+
|
6
|
+
group :development, :test do
|
7
|
+
gem 'guard-livereload', require: false
|
8
|
+
gem 'guard-rspec'
|
9
|
+
gem 'pry-byebug'
|
10
|
+
gem 'rb-fsevent', require: false
|
11
|
+
gem 'rb-readline'
|
12
|
+
gem 'reek'
|
13
|
+
gem 'rails', '>= 6.0.0'
|
14
|
+
gem 'rspec'
|
15
|
+
gem 'rubocop-rspec'
|
16
|
+
gem 'rubocop'
|
17
|
+
gem 'shoulda-matchers', require: false
|
18
|
+
gem 'sqlite3'
|
19
|
+
gem 'stackprof'
|
20
|
+
gem 'timecop'
|
21
|
+
end
|
22
|
+
|
23
|
+
group :test do
|
24
|
+
gem 'ffaker'
|
25
|
+
gem 'simplecov'
|
26
|
+
end
|
data/LICENSE.txt
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
The MIT License (MIT)
|
2
|
+
|
3
|
+
Copyright (c) 2020 Samuel Giles
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in
|
13
|
+
all copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
21
|
+
THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,53 @@
|
|
1
|
+

|
2
|
+
|
3
|
+
# Dynamic Rendering 
|
4
|
+
|
5
|
+
Is your SEO performance being held hostage by frontend JavaScript UI frameworks? Dynamic rendering is a "workaround solution" (in the words of Google) to help make difficult to index JavaScript based content easier for search engine crawlers to understand by presenting them with a pre-rendered HTML snapshot of your page.
|
6
|
+
|
7
|
+
This gem implements dynamic rendering for Rails applications using [Puppeteer](https://github.com/puppeteer/puppeteer) via the [Grover](https://github.com/Studiosity/grover) gem.
|
8
|
+
|
9
|
+
You can find out more about dynamic rendering in Google's article:
|
10
|
+
https://developers.google.com/search/docs/guides/dynamic-rendering
|
11
|
+
|
12
|
+
## Is this server-side rendering / SSR?
|
13
|
+
|
14
|
+
Kind of - Server-side rendering typically involves pre-rendering JavaScript elements of the page on the server within some isolated NodeJS environment and then having the client "re-hydrate" the DOM after loading. Dynamic rendering differs in that it's targeted specifically at crawler user agents and doesn't involve any "re-hydration" of the DOM, rather it's a static representation of the DOM, a snapshot of how the page looked in a headless Chrome instance.
|
15
|
+
|
16
|
+
## How does this work?
|
17
|
+
|
18
|
+

|
19
|
+
|
20
|
+
## Install
|
21
|
+
|
22
|
+
`gem 'rails-dynamic-rendering'`
|
23
|
+
|
24
|
+
## Usage
|
25
|
+
|
26
|
+
Include the concern and then use `enable_dynamic_rendering`. Any controller action covered by the `enable_dynamic_rendering` call (which accepts all the same arguments as `after_action`) will based on the user agent choose to either just return the HTML with JS or choose to render the page in a headless Chrome instance & render back the serialized HTML with all JS removed.
|
27
|
+
|
28
|
+
```ruby
|
29
|
+
class ApplicationController
|
30
|
+
include DynamicRendering::ActsAsDynamicallyRenderable
|
31
|
+
|
32
|
+
enable_dynamic_rendering only: :index, if: -> { some_condition_is_met? }
|
33
|
+
|
34
|
+
def index
|
35
|
+
@my_code = 'Does fancy stuff'
|
36
|
+
end
|
37
|
+
|
38
|
+
private
|
39
|
+
|
40
|
+
def some_condition_is_met?
|
41
|
+
true
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
```
|
46
|
+
|
47
|
+
You can override the built in decision making thats used to determine whether a snapshot of the page should be returned by defining your own `#request_suitable_for_dynamic_rendering?` method. You might want to do this if you'd like to target other user agents:
|
48
|
+
|
49
|
+
```ruby
|
50
|
+
def request_suitable_for_dynamic_rendering?
|
51
|
+
request.user_agent.include? 'My Problematic Bot That Does Not Render JS Content'
|
52
|
+
end
|
53
|
+
```
|
data/Rakefile
ADDED
data/bin/console
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'bundler/setup'
|
4
|
+
require 'rspec/sorbet'
|
5
|
+
|
6
|
+
# You can add fixtures and/or initialization code here to make experimenting
|
7
|
+
# with your gem easier. You can also use a different console, if you like.
|
8
|
+
|
9
|
+
# (If you use this, don't forget to add pry to your Gemfile!)
|
10
|
+
# require "pry"
|
11
|
+
# Pry.start
|
12
|
+
|
13
|
+
require 'irb'
|
14
|
+
IRB.start(__FILE__)
|
data/bin/setup
ADDED
@@ -0,0 +1,149 @@
|
|
1
|
+
# typed: false
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
module DynamicRendering
|
5
|
+
module ActsAsDynamicallyRenderable
|
6
|
+
extend ActiveSupport::Concern
|
7
|
+
|
8
|
+
USE_DYNAMIC_RENDERING_FOR_USER_AGENTS = /(googlebot|google-structured-data-testing-tool|bingbot)/i
|
9
|
+
MOBILE_USER_AGENT = /mobile/i
|
10
|
+
MOBILE_VIEWPORT = { width: 410, height: 730 }
|
11
|
+
DESKTOP_VIEWPORT = { width: 1400, height: 950 }
|
12
|
+
|
13
|
+
included do
|
14
|
+
def render_dynamically(log_level: :info)
|
15
|
+
return unless request_suitable_for_dynamic_rendering? && response_suitable_for_dynamic_rendering?
|
16
|
+
|
17
|
+
Rails.logger.public_send(
|
18
|
+
log_level,
|
19
|
+
<<~TEXT
|
20
|
+
[Dynamic rendering 🔍 ]:
|
21
|
+
• URL: #{request.original_url}"
|
22
|
+
• User-Agent: #{request.user_agent}
|
23
|
+
• Viewport: #{dynamic_rendering_viewport.inspect}
|
24
|
+
TEXT
|
25
|
+
)
|
26
|
+
|
27
|
+
response.body = HtmlRenderer.new(
|
28
|
+
response.body,
|
29
|
+
dynamic_rendering_viewport,
|
30
|
+
request.original_url
|
31
|
+
).to_s
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
class_methods do
|
36
|
+
def enable_dynamic_rendering(arguments = {})
|
37
|
+
append_after_action(:render_dynamically, **arguments)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
private
|
42
|
+
|
43
|
+
def request_suitable_for_dynamic_rendering?
|
44
|
+
request.user_agent.match?(USE_DYNAMIC_RENDERING_FOR_USER_AGENTS)
|
45
|
+
end
|
46
|
+
|
47
|
+
def dynamic_rendering_viewport
|
48
|
+
return MOBILE_VIEWPORT if dynamic_rendering_request_from_mobile_crawler?
|
49
|
+
|
50
|
+
DESKTOP_VIEWPORT
|
51
|
+
end
|
52
|
+
|
53
|
+
def dynamic_rendering_request_from_mobile_crawler?
|
54
|
+
request.user_agent.match?(MOBILE_USER_AGENT)
|
55
|
+
end
|
56
|
+
|
57
|
+
def response_suitable_for_dynamic_rendering?
|
58
|
+
response.ok? &&
|
59
|
+
Mime::Type.lookup(response.media_type).html?
|
60
|
+
end
|
61
|
+
|
62
|
+
class HtmlRenderer
|
63
|
+
DEFAULT_OPTIONS = { 'waitUntil' => 'networkidle2' }
|
64
|
+
|
65
|
+
def initialize(original_response_body, viewport, original_url, options = DEFAULT_OPTIONS)
|
66
|
+
@original_response_body = original_response_body
|
67
|
+
@viewport = viewport
|
68
|
+
@original_url = original_url
|
69
|
+
@options = options
|
70
|
+
end
|
71
|
+
|
72
|
+
def to_s
|
73
|
+
HtmlPostProcessor.new(rendered_html).to_s
|
74
|
+
end
|
75
|
+
|
76
|
+
private
|
77
|
+
|
78
|
+
def rendered_html
|
79
|
+
processor.convert(
|
80
|
+
'content',
|
81
|
+
response_body_for_processor,
|
82
|
+
@options.merge(
|
83
|
+
'displayUrl' => @original_url,
|
84
|
+
viewport: @viewport
|
85
|
+
)
|
86
|
+
)
|
87
|
+
end
|
88
|
+
|
89
|
+
def processor
|
90
|
+
HtmlProcessor.new(Dir.pwd)
|
91
|
+
end
|
92
|
+
|
93
|
+
def response_body_for_processor
|
94
|
+
HtmlPreprocessor.new(@original_response_body).to_s
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
class HtmlPreprocessor
|
99
|
+
def initialize(html_as_string)
|
100
|
+
@html_as_string = html_as_string
|
101
|
+
end
|
102
|
+
|
103
|
+
def to_s
|
104
|
+
append_dynamic_rendering_variable!
|
105
|
+
@html_as_string
|
106
|
+
end
|
107
|
+
|
108
|
+
private
|
109
|
+
|
110
|
+
PRERENDER_VARIABLE = "<script type=\"text/javascript\">window.dynamicRendering = true;</script>"
|
111
|
+
|
112
|
+
def append_dynamic_rendering_variable!
|
113
|
+
@html_as_string.sub!(/<head[^>]*>/, "\\0#{PRERENDER_VARIABLE}")
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
class HtmlPostProcessor
|
118
|
+
def initialize(html_as_string)
|
119
|
+
@html = Nokogiri::HTML(html_as_string)
|
120
|
+
end
|
121
|
+
|
122
|
+
def to_s
|
123
|
+
remove_javascript!
|
124
|
+
@html.to_s
|
125
|
+
end
|
126
|
+
|
127
|
+
private
|
128
|
+
|
129
|
+
JAVASCRIPT_SELECTOR = 'script:not([type]), script[type="text/javascript"]'
|
130
|
+
|
131
|
+
def remove_javascript!
|
132
|
+
@html.css(JAVASCRIPT_SELECTOR).remove
|
133
|
+
end
|
134
|
+
end
|
135
|
+
|
136
|
+
class HtmlProcessor < ::Grover::Processor
|
137
|
+
def convert(method, url_or_html, options)
|
138
|
+
spawn_process
|
139
|
+
ensure_packages_are_initiated
|
140
|
+
result = call_js_method method, url_or_html, options
|
141
|
+
return unless result
|
142
|
+
|
143
|
+
result
|
144
|
+
ensure
|
145
|
+
cleanup_process if stdin
|
146
|
+
end
|
147
|
+
end
|
148
|
+
end
|
149
|
+
end
|
data/package.json
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
lib = File.expand_path('lib', __dir__)
|
2
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
3
|
+
|
4
|
+
require 'dynamic_rendering/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = 'rails-dynamic-rendering'
|
8
|
+
spec.version = DynamicRendering::VERSION
|
9
|
+
spec.authors = ['Samuel Giles']
|
10
|
+
spec.email = ['samuel.giles@bellroy.com']
|
11
|
+
|
12
|
+
spec.summary = 'Puppeteer based dynamic rendering for Rails applications'
|
13
|
+
spec.homepage = 'https://github.com/tricycle/rails-dynamic-rendering'
|
14
|
+
spec.license = 'MIT'
|
15
|
+
|
16
|
+
# Specify which files should be added to the gem when it is released.
|
17
|
+
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
18
|
+
spec.files = `git ls-files -z`.split("\x0").reject do |f|
|
19
|
+
f.match(%r{^spec/}) && !f.match(%r{^spec/support/factories/})
|
20
|
+
end
|
21
|
+
spec.bindir = 'exe'
|
22
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
23
|
+
spec.require_paths = ['lib']
|
24
|
+
|
25
|
+
spec.add_dependency 'grover'
|
26
|
+
spec.add_dependency 'rails'
|
27
|
+
spec.add_dependency 'nokogiri'
|
28
|
+
|
29
|
+
spec.add_development_dependency 'bundler'
|
30
|
+
spec.add_development_dependency 'pry'
|
31
|
+
spec.add_development_dependency 'rake', '~> 10.0'
|
32
|
+
spec.add_development_dependency 'rspec', '~> 3.0'
|
33
|
+
spec.add_development_dependency 'rspec-rails'
|
34
|
+
end
|
data/yarn.lock
ADDED
@@ -0,0 +1,362 @@
|
|
1
|
+
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
|
2
|
+
# yarn lockfile v1
|
3
|
+
|
4
|
+
|
5
|
+
"@types/node@*":
|
6
|
+
version "14.11.2"
|
7
|
+
resolved "https://registry.yarnpkg.com/@types/node/-/node-14.11.2.tgz#2de1ed6670439387da1c9f549a2ade2b0a799256"
|
8
|
+
integrity sha512-jiE3QIxJ8JLNcb1Ps6rDbysDhN4xa8DJJvuC9prr6w+1tIh+QAbYyNF3tyiZNLDBIuBCf4KEcV2UvQm/V60xfA==
|
9
|
+
|
10
|
+
"@types/yauzl@^2.9.1":
|
11
|
+
version "2.9.1"
|
12
|
+
resolved "https://registry.yarnpkg.com/@types/yauzl/-/yauzl-2.9.1.tgz#d10f69f9f522eef3cf98e30afb684a1e1ec923af"
|
13
|
+
integrity sha512-A1b8SU4D10uoPjwb0lnHmmu8wZhR9d+9o2PKBQT2jU5YPTKsxac6M2qGAdY7VcL+dHHhARVUDmeg0rOrcd9EjA==
|
14
|
+
dependencies:
|
15
|
+
"@types/node" "*"
|
16
|
+
|
17
|
+
agent-base@5:
|
18
|
+
version "5.1.1"
|
19
|
+
resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-5.1.1.tgz#e8fb3f242959db44d63be665db7a8e739537a32c"
|
20
|
+
integrity sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g==
|
21
|
+
|
22
|
+
balanced-match@^1.0.0:
|
23
|
+
version "1.0.0"
|
24
|
+
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
|
25
|
+
integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c=
|
26
|
+
|
27
|
+
base64-js@^1.0.2:
|
28
|
+
version "1.3.1"
|
29
|
+
resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1"
|
30
|
+
integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==
|
31
|
+
|
32
|
+
bl@^4.0.3:
|
33
|
+
version "4.0.3"
|
34
|
+
resolved "https://registry.yarnpkg.com/bl/-/bl-4.0.3.tgz#12d6287adc29080e22a705e5764b2a9522cdc489"
|
35
|
+
integrity sha512-fs4G6/Hu4/EE+F75J8DuN/0IpQqNjAdC7aEQv7Qt8MHGUH7Ckv2MwTEEeN9QehD0pfIDkMI1bkHYkKy7xHyKIg==
|
36
|
+
dependencies:
|
37
|
+
buffer "^5.5.0"
|
38
|
+
inherits "^2.0.4"
|
39
|
+
readable-stream "^3.4.0"
|
40
|
+
|
41
|
+
brace-expansion@^1.1.7:
|
42
|
+
version "1.1.11"
|
43
|
+
resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
|
44
|
+
integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
|
45
|
+
dependencies:
|
46
|
+
balanced-match "^1.0.0"
|
47
|
+
concat-map "0.0.1"
|
48
|
+
|
49
|
+
buffer-crc32@~0.2.3:
|
50
|
+
version "0.2.13"
|
51
|
+
resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242"
|
52
|
+
integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=
|
53
|
+
|
54
|
+
buffer@^5.2.1, buffer@^5.5.0:
|
55
|
+
version "5.6.0"
|
56
|
+
resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.6.0.tgz#a31749dc7d81d84db08abf937b6b8c4033f62786"
|
57
|
+
integrity sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==
|
58
|
+
dependencies:
|
59
|
+
base64-js "^1.0.2"
|
60
|
+
ieee754 "^1.1.4"
|
61
|
+
|
62
|
+
chownr@^1.1.1:
|
63
|
+
version "1.1.4"
|
64
|
+
resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b"
|
65
|
+
integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==
|
66
|
+
|
67
|
+
concat-map@0.0.1:
|
68
|
+
version "0.0.1"
|
69
|
+
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
|
70
|
+
integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
|
71
|
+
|
72
|
+
debug@4, debug@^4.1.0, debug@^4.1.1:
|
73
|
+
version "4.2.0"
|
74
|
+
resolved "https://registry.yarnpkg.com/debug/-/debug-4.2.0.tgz#7f150f93920e94c58f5574c2fd01a3110effe7f1"
|
75
|
+
integrity sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==
|
76
|
+
dependencies:
|
77
|
+
ms "2.1.2"
|
78
|
+
|
79
|
+
devtools-protocol@0.0.799653:
|
80
|
+
version "0.0.799653"
|
81
|
+
resolved "https://registry.yarnpkg.com/devtools-protocol/-/devtools-protocol-0.0.799653.tgz#86fc95ce5bf4fdf4b77a58047ba9d2301078f119"
|
82
|
+
integrity sha512-t1CcaZbvm8pOlikqrsIM9GOa7Ipp07+4h/q9u0JXBWjPCjHdBl9KkddX87Vv9vBHoBGtwV79sYQNGnQM6iS5gg==
|
83
|
+
|
84
|
+
end-of-stream@^1.1.0, end-of-stream@^1.4.1:
|
85
|
+
version "1.4.4"
|
86
|
+
resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0"
|
87
|
+
integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==
|
88
|
+
dependencies:
|
89
|
+
once "^1.4.0"
|
90
|
+
|
91
|
+
extract-zip@^2.0.0:
|
92
|
+
version "2.0.1"
|
93
|
+
resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-2.0.1.tgz#663dca56fe46df890d5f131ef4a06d22bb8ba13a"
|
94
|
+
integrity sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==
|
95
|
+
dependencies:
|
96
|
+
debug "^4.1.1"
|
97
|
+
get-stream "^5.1.0"
|
98
|
+
yauzl "^2.10.0"
|
99
|
+
optionalDependencies:
|
100
|
+
"@types/yauzl" "^2.9.1"
|
101
|
+
|
102
|
+
fd-slicer@~1.1.0:
|
103
|
+
version "1.1.0"
|
104
|
+
resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e"
|
105
|
+
integrity sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=
|
106
|
+
dependencies:
|
107
|
+
pend "~1.2.0"
|
108
|
+
|
109
|
+
find-up@^4.0.0:
|
110
|
+
version "4.1.0"
|
111
|
+
resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19"
|
112
|
+
integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==
|
113
|
+
dependencies:
|
114
|
+
locate-path "^5.0.0"
|
115
|
+
path-exists "^4.0.0"
|
116
|
+
|
117
|
+
fs-constants@^1.0.0:
|
118
|
+
version "1.0.0"
|
119
|
+
resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad"
|
120
|
+
integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==
|
121
|
+
|
122
|
+
fs.realpath@^1.0.0:
|
123
|
+
version "1.0.0"
|
124
|
+
resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
|
125
|
+
integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
|
126
|
+
|
127
|
+
get-stream@^5.1.0:
|
128
|
+
version "5.2.0"
|
129
|
+
resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3"
|
130
|
+
integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==
|
131
|
+
dependencies:
|
132
|
+
pump "^3.0.0"
|
133
|
+
|
134
|
+
glob@^7.1.3:
|
135
|
+
version "7.1.6"
|
136
|
+
resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6"
|
137
|
+
integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==
|
138
|
+
dependencies:
|
139
|
+
fs.realpath "^1.0.0"
|
140
|
+
inflight "^1.0.4"
|
141
|
+
inherits "2"
|
142
|
+
minimatch "^3.0.4"
|
143
|
+
once "^1.3.0"
|
144
|
+
path-is-absolute "^1.0.0"
|
145
|
+
|
146
|
+
https-proxy-agent@^4.0.0:
|
147
|
+
version "4.0.0"
|
148
|
+
resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz#702b71fb5520a132a66de1f67541d9e62154d82b"
|
149
|
+
integrity sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg==
|
150
|
+
dependencies:
|
151
|
+
agent-base "5"
|
152
|
+
debug "4"
|
153
|
+
|
154
|
+
ieee754@^1.1.4:
|
155
|
+
version "1.1.13"
|
156
|
+
resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84"
|
157
|
+
integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==
|
158
|
+
|
159
|
+
inflight@^1.0.4:
|
160
|
+
version "1.0.6"
|
161
|
+
resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
|
162
|
+
integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=
|
163
|
+
dependencies:
|
164
|
+
once "^1.3.0"
|
165
|
+
wrappy "1"
|
166
|
+
|
167
|
+
inherits@2, inherits@^2.0.3, inherits@^2.0.4:
|
168
|
+
version "2.0.4"
|
169
|
+
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
|
170
|
+
integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
|
171
|
+
|
172
|
+
locate-path@^5.0.0:
|
173
|
+
version "5.0.0"
|
174
|
+
resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0"
|
175
|
+
integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==
|
176
|
+
dependencies:
|
177
|
+
p-locate "^4.1.0"
|
178
|
+
|
179
|
+
minimatch@^3.0.4:
|
180
|
+
version "3.0.4"
|
181
|
+
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
|
182
|
+
integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==
|
183
|
+
dependencies:
|
184
|
+
brace-expansion "^1.1.7"
|
185
|
+
|
186
|
+
mkdirp-classic@^0.5.2:
|
187
|
+
version "0.5.3"
|
188
|
+
resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113"
|
189
|
+
integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==
|
190
|
+
|
191
|
+
ms@2.1.2:
|
192
|
+
version "2.1.2"
|
193
|
+
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
|
194
|
+
integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
|
195
|
+
|
196
|
+
once@^1.3.0, once@^1.3.1, once@^1.4.0:
|
197
|
+
version "1.4.0"
|
198
|
+
resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
|
199
|
+
integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E=
|
200
|
+
dependencies:
|
201
|
+
wrappy "1"
|
202
|
+
|
203
|
+
p-limit@^2.2.0:
|
204
|
+
version "2.3.0"
|
205
|
+
resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1"
|
206
|
+
integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==
|
207
|
+
dependencies:
|
208
|
+
p-try "^2.0.0"
|
209
|
+
|
210
|
+
p-locate@^4.1.0:
|
211
|
+
version "4.1.0"
|
212
|
+
resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07"
|
213
|
+
integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==
|
214
|
+
dependencies:
|
215
|
+
p-limit "^2.2.0"
|
216
|
+
|
217
|
+
p-try@^2.0.0:
|
218
|
+
version "2.2.0"
|
219
|
+
resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6"
|
220
|
+
integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==
|
221
|
+
|
222
|
+
path-exists@^4.0.0:
|
223
|
+
version "4.0.0"
|
224
|
+
resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3"
|
225
|
+
integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==
|
226
|
+
|
227
|
+
path-is-absolute@^1.0.0:
|
228
|
+
version "1.0.1"
|
229
|
+
resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
|
230
|
+
integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
|
231
|
+
|
232
|
+
pend@~1.2.0:
|
233
|
+
version "1.2.0"
|
234
|
+
resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50"
|
235
|
+
integrity sha1-elfrVQpng/kRUzH89GY9XI4AelA=
|
236
|
+
|
237
|
+
pkg-dir@^4.2.0:
|
238
|
+
version "4.2.0"
|
239
|
+
resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3"
|
240
|
+
integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==
|
241
|
+
dependencies:
|
242
|
+
find-up "^4.0.0"
|
243
|
+
|
244
|
+
progress@^2.0.1:
|
245
|
+
version "2.0.3"
|
246
|
+
resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8"
|
247
|
+
integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==
|
248
|
+
|
249
|
+
proxy-from-env@^1.0.0:
|
250
|
+
version "1.1.0"
|
251
|
+
resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2"
|
252
|
+
integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==
|
253
|
+
|
254
|
+
pump@^3.0.0:
|
255
|
+
version "3.0.0"
|
256
|
+
resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64"
|
257
|
+
integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==
|
258
|
+
dependencies:
|
259
|
+
end-of-stream "^1.1.0"
|
260
|
+
once "^1.3.1"
|
261
|
+
|
262
|
+
puppeteer@^5.3.1:
|
263
|
+
version "5.3.1"
|
264
|
+
resolved "https://registry.yarnpkg.com/puppeteer/-/puppeteer-5.3.1.tgz#324e190d89f25ac33dba539f57b82a18553f8646"
|
265
|
+
integrity sha512-YTM1RaBeYrj6n7IlRXRYLqJHF+GM7tasbvrNFx6w1S16G76NrPq7oYFKLDO+BQsXNtS8kW2GxWCXjIMPvfDyaQ==
|
266
|
+
dependencies:
|
267
|
+
debug "^4.1.0"
|
268
|
+
devtools-protocol "0.0.799653"
|
269
|
+
extract-zip "^2.0.0"
|
270
|
+
https-proxy-agent "^4.0.0"
|
271
|
+
pkg-dir "^4.2.0"
|
272
|
+
progress "^2.0.1"
|
273
|
+
proxy-from-env "^1.0.0"
|
274
|
+
rimraf "^3.0.2"
|
275
|
+
tar-fs "^2.0.0"
|
276
|
+
unbzip2-stream "^1.3.3"
|
277
|
+
ws "^7.2.3"
|
278
|
+
|
279
|
+
readable-stream@^3.1.1, readable-stream@^3.4.0:
|
280
|
+
version "3.6.0"
|
281
|
+
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198"
|
282
|
+
integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==
|
283
|
+
dependencies:
|
284
|
+
inherits "^2.0.3"
|
285
|
+
string_decoder "^1.1.1"
|
286
|
+
util-deprecate "^1.0.1"
|
287
|
+
|
288
|
+
rimraf@^3.0.2:
|
289
|
+
version "3.0.2"
|
290
|
+
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a"
|
291
|
+
integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==
|
292
|
+
dependencies:
|
293
|
+
glob "^7.1.3"
|
294
|
+
|
295
|
+
safe-buffer@~5.2.0:
|
296
|
+
version "5.2.1"
|
297
|
+
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
|
298
|
+
integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
|
299
|
+
|
300
|
+
string_decoder@^1.1.1:
|
301
|
+
version "1.3.0"
|
302
|
+
resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e"
|
303
|
+
integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==
|
304
|
+
dependencies:
|
305
|
+
safe-buffer "~5.2.0"
|
306
|
+
|
307
|
+
tar-fs@^2.0.0:
|
308
|
+
version "2.1.0"
|
309
|
+
resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.0.tgz#d1cdd121ab465ee0eb9ccde2d35049d3f3daf0d5"
|
310
|
+
integrity sha512-9uW5iDvrIMCVpvasdFHW0wJPez0K4JnMZtsuIeDI7HyMGJNxmDZDOCQROr7lXyS+iL/QMpj07qcjGYTSdRFXUg==
|
311
|
+
dependencies:
|
312
|
+
chownr "^1.1.1"
|
313
|
+
mkdirp-classic "^0.5.2"
|
314
|
+
pump "^3.0.0"
|
315
|
+
tar-stream "^2.0.0"
|
316
|
+
|
317
|
+
tar-stream@^2.0.0:
|
318
|
+
version "2.1.4"
|
319
|
+
resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.1.4.tgz#c4fb1a11eb0da29b893a5b25476397ba2d053bfa"
|
320
|
+
integrity sha512-o3pS2zlG4gxr67GmFYBLlq+dM8gyRGUOvsrHclSkvtVtQbjV0s/+ZE8OpICbaj8clrX3tjeHngYGP7rweaBnuw==
|
321
|
+
dependencies:
|
322
|
+
bl "^4.0.3"
|
323
|
+
end-of-stream "^1.4.1"
|
324
|
+
fs-constants "^1.0.0"
|
325
|
+
inherits "^2.0.3"
|
326
|
+
readable-stream "^3.1.1"
|
327
|
+
|
328
|
+
through@^2.3.8:
|
329
|
+
version "2.3.8"
|
330
|
+
resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
|
331
|
+
integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=
|
332
|
+
|
333
|
+
unbzip2-stream@^1.3.3:
|
334
|
+
version "1.4.3"
|
335
|
+
resolved "https://registry.yarnpkg.com/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz#b0da04c4371311df771cdc215e87f2130991ace7"
|
336
|
+
integrity sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==
|
337
|
+
dependencies:
|
338
|
+
buffer "^5.2.1"
|
339
|
+
through "^2.3.8"
|
340
|
+
|
341
|
+
util-deprecate@^1.0.1:
|
342
|
+
version "1.0.2"
|
343
|
+
resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
|
344
|
+
integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
|
345
|
+
|
346
|
+
wrappy@1:
|
347
|
+
version "1.0.2"
|
348
|
+
resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
|
349
|
+
integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
|
350
|
+
|
351
|
+
ws@^7.2.3:
|
352
|
+
version "7.3.1"
|
353
|
+
resolved "https://registry.yarnpkg.com/ws/-/ws-7.3.1.tgz#d0547bf67f7ce4f12a72dfe31262c68d7dc551c8"
|
354
|
+
integrity sha512-D3RuNkynyHmEJIpD2qrgVkc9DQ23OrN/moAwZX4L8DfvszsJxpjQuUq3LMx6HoYji9fbIOBY18XWBsAux1ZZUA==
|
355
|
+
|
356
|
+
yauzl@^2.10.0:
|
357
|
+
version "2.10.0"
|
358
|
+
resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9"
|
359
|
+
integrity sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=
|
360
|
+
dependencies:
|
361
|
+
buffer-crc32 "~0.2.3"
|
362
|
+
fd-slicer "~1.1.0"
|
metadata
ADDED
@@ -0,0 +1,172 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: rails-dynamic-rendering
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Samuel Giles
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2020-10-08 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: grover
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rails
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: nokogiri
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: bundler
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: pry
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: rake
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '10.0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '10.0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: rspec
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '3.0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '3.0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: rspec-rails
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
125
|
+
description:
|
126
|
+
email:
|
127
|
+
- samuel.giles@bellroy.com
|
128
|
+
executables: []
|
129
|
+
extensions: []
|
130
|
+
extra_rdoc_files: []
|
131
|
+
files:
|
132
|
+
- ".github/workflows/rspec.yml"
|
133
|
+
- ".gitignore"
|
134
|
+
- ".rspec"
|
135
|
+
- ".ruby-version"
|
136
|
+
- CHANGELOG.md
|
137
|
+
- Gemfile
|
138
|
+
- LICENSE.txt
|
139
|
+
- README.md
|
140
|
+
- Rakefile
|
141
|
+
- bin/console
|
142
|
+
- bin/setup
|
143
|
+
- lib/dynamic_rendering/acts_as_dynamically_renderable.rb
|
144
|
+
- lib/dynamic_rendering/version.rb
|
145
|
+
- lib/rails-dynamic-rendering.rb
|
146
|
+
- package.json
|
147
|
+
- rails-dynamic-rendering.gemspec
|
148
|
+
- yarn.lock
|
149
|
+
homepage: https://github.com/tricycle/rails-dynamic-rendering
|
150
|
+
licenses:
|
151
|
+
- MIT
|
152
|
+
metadata: {}
|
153
|
+
post_install_message:
|
154
|
+
rdoc_options: []
|
155
|
+
require_paths:
|
156
|
+
- lib
|
157
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
158
|
+
requirements:
|
159
|
+
- - ">="
|
160
|
+
- !ruby/object:Gem::Version
|
161
|
+
version: '0'
|
162
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
163
|
+
requirements:
|
164
|
+
- - ">="
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: '0'
|
167
|
+
requirements: []
|
168
|
+
rubygems_version: 3.0.3
|
169
|
+
signing_key:
|
170
|
+
specification_version: 4
|
171
|
+
summary: Puppeteer based dynamic rendering for Rails applications
|
172
|
+
test_files: []
|