$> curl "https://gist.githubusercontent.com/pftg/fa8fe4ca2bb4638fbd19324376487f42/raw/f9056244c416d2f56d6d94290e5ecef5960abf66/rejuvenation.rb" | rubyor
$> ruby rejuvenation.rb
$> yarn install| #!/usr/bin/env ruby | |
| # USAGE: `$> ruby rejuvenation.rb` | |
| require 'json' | |
| EXTRACT_DEPENDENCY_NAME = /"?(.+?)@.+?"?(?:,\s+|\Z)/.freeze | |
| EXTRACT_DEPENDENCY_DETAILS = /(^((?!= ).*?):\n.*?(?:\n\n|\Z))/m.freeze | |
| def direct_dependencies_names | |
| package_json = JSON.parse(File.open('package.json').read) | |
| direct_dependencies = package_json.fetch_values('dependencies', 'devDependencies', 'peerDependencies') { } | |
| direct_dependencies.compact.inject([]) { |memo, v| memo.concat(v.keys) } | |
| end | |
| @dependencies = direct_dependencies_names | |
| yarn_lock_content = File.open('yarn.lock').read | |
| File.open('yarn.lock', 'w') do |file| | |
| yarn_lock_content.scan(EXTRACT_DEPENDENCY_DETAILS).map do |dependency_block| | |
| direct_dep = @dependencies.include?(dependency_block[1].match(EXTRACT_DEPENDENCY_NAME).to_a[1]) | |
| file.puts dependency_block[0] if direct_dep | |
| end | |
| end | |
| `yarn install` |
$> curl "https://gist.githubusercontent.com/pftg/fa8fe4ca2bb4638fbd19324376487f42/raw/f9056244c416d2f56d6d94290e5ecef5960abf66/rejuvenation.rb" | rubyor
$> ruby rejuvenation.rb
$> yarn install