A curated list of libraries & SDKs for the Bluesky API and AT Protocol

look up NPM releases for Tangled repos

+93 -19
+4 -4
lib/github_import.rb
··· 17 url =~ %r{^https://github\.com/[\w\-\.]+/[\w\-\.]+} 18 end 19 20 - def import_url(url) 21 url =~ %r{^https://github\.com/([\w\-\.]+)/([\w\-\.]+)} 22 user, repo = $1, $2 23 ··· 33 end 34 35 if ['JavaScript', 'TypeScript'].include?(repo_info['language']) 36 - npm = get_npm_releases(user, repo) 37 last_update = npm.map { |n| n.last_release_time }.sort.last 38 39 if last_update && (release.nil? || last_update > release['published_at']) ··· 142 end 143 end 144 145 - def get_npm_releases(user, repo) 146 sleep 5 147 148 search_url = URI("https://api.github.com/search/code") ··· 164 next if package.version.nil? || package.private? 165 166 if npm = NPMImport.new.get_package_info(package.name) 167 - if npm.repository_url =~ %r{://github\.com/#{Regexp.escape(user)}/#{Regexp.escape(repo)}(\.git)?$} 168 releases << npm 169 end 170 end
··· 17 url =~ %r{^https://github\.com/[\w\-\.]+/[\w\-\.]+} 18 end 19 20 + def import_url(url, project) 21 url =~ %r{^https://github\.com/([\w\-\.]+)/([\w\-\.]+)} 22 user, repo = $1, $2 23 ··· 33 end 34 35 if ['JavaScript', 'TypeScript'].include?(repo_info['language']) 36 + npm = get_npm_releases(user, repo, project) 37 last_update = npm.map { |n| n.last_release_time }.sort.last 38 39 if last_update && (release.nil? || last_update > release['published_at']) ··· 142 end 143 end 144 145 + def get_npm_releases(user, repo, project) 146 sleep 5 147 148 search_url = URI("https://api.github.com/search/code") ··· 164 next if package.version.nil? || package.private? 165 166 if npm = NPMImport.new.get_package_info(package.name) 167 + if project.urls.include?(npm.normalized_repository_url) 168 releases << npm 169 end 170 end
+10 -12
lib/metadata_import.rb
··· 1 require_relative 'github_import' 2 require_relative 'tangled_import' 3 4 class MetadataImport ··· 14 data = {} 15 end 16 17 - urls = get_repo_urls(language) 18 importers = [GithubImport.new, TangledImport.new] 19 20 - urls.each do |url| 21 - if imp = importers.detect { |i| i.url_matches?(url) } 22 - p url 23 - data[url] = imp.import_url(url) 24 - else 25 - puts "Skipping #{url}" 26 end 27 end 28 29 File.write(output_path, YAML.dump(data)) 30 - end 31 - 32 - def get_repo_urls(language = nil) 33 - yamls = Dir[File.join(__dir__, '..', '_data', 'projects', language ? "#{language}.yml" : '*.yml')] 34 - yamls.map { |x| YAML.load(File.read(x))['repos'] }.flatten.map { |x| x['url'] || x['urls'] }.flatten 35 end 36 end
··· 1 require_relative 'github_import' 2 + require_relative 'project' 3 require_relative 'tangled_import' 4 5 class MetadataImport ··· 15 data = {} 16 end 17 18 + projects = Project.load_all(language) 19 importers = [GithubImport.new, TangledImport.new] 20 21 + projects.each do |project| 22 + project.urls.each do |url| 23 + if imp = importers.detect { |i| i.url_matches?(url) } 24 + p url 25 + data[url] = imp.import_url(url, project) 26 + else 27 + puts "Skipping #{url}" 28 + end 29 end 30 end 31 32 File.write(output_path, YAML.dump(data)) 33 end 34 end
+21 -2
lib/npm_import.rb
··· 27 @json = json 28 end 29 30 def last_version 31 @json['dist-tags']['latest'] 32 end ··· 36 end 37 38 def repository_url 39 - @json['repository'] && @json['repository']['url'] 40 end 41 end 42 43 def get_package_info(name) 44 - response = get_response("https://registry.npmjs.com/#{name}") 45 46 if response.code.to_i == 200 47 RemotePackage.new(JSON.parse(response.body))
··· 27 @json = json 28 end 29 30 + def name 31 + @json['name'] 32 + end 33 + 34 def last_version 35 @json['dist-tags']['latest'] 36 end ··· 40 end 41 42 def repository_url 43 + @json.dig('repository', 'url') 44 + end 45 + 46 + def normalized_repository_url 47 + url = repository_url 48 + url && url.gsub(%r{^.*://}, 'https://').gsub(/\.git$/, '').gsub(%r{tangled\.org/@}, 'tangled.org/') 49 + end 50 + 51 + def inspect 52 + fields = [:name, :last_version, :last_release_time].map { |v| "#{v}=#{self.send(v).inspect}" }.join(", ") 53 + "#<#{self.class}:0x#{object_id} #{fields}>" 54 end 55 end 56 57 + def initialize 58 + @@cache ||= {} 59 + end 60 + 61 def get_package_info(name) 62 + response = @@cache[name] || get_response("https://registry.npmjs.com/#{name}") 63 + @@cache[name] = response 64 65 if response.code.to_i == 200 66 RemotePackage.new(JSON.parse(response.body))
+26
lib/project.rb
···
··· 1 + require 'yaml' 2 + 3 + class Project 4 + def self.load_all(language = nil) 5 + yamls = Dir[File.join(__dir__, '..', '_data', 'projects', language ? "#{language}.yml" : '*.yml')] 6 + yamls.map { |y| 7 + lang = File.basename(y).gsub(/\.yml$/, '') 8 + YAML.load(File.read(y))['repos'].map { |r| Project.new(r, lang) } 9 + }.flatten 10 + end 11 + 12 + attr_reader :language 13 + 14 + def initialize(yaml, language) 15 + @language = language.to_sym 16 + @yaml = yaml 17 + end 18 + 19 + def urls 20 + @yaml['url'] ? [@yaml['url']] : @yaml['urls'] 21 + end 22 + 23 + def name 24 + @yaml['name'] || urls.first.gsub(/\/$/, '').split('/').last 25 + end 26 + end
+32 -1
lib/tangled_import.rb
··· 17 url =~ %r{^https://tangled\.org/@[\w\-\.]+/[\w\-\.]+} 18 end 19 20 - def import_url(url) 21 url =~ %r{^https://tangled\.org/@([\w\-\.]+)/([\w\-\.]+)} 22 user, repo = $1, $2 23 ··· 46 end 47 48 data['stars'] = get_stars(repo_record['uri']) 49 50 data['last_commit'] = get_latest_commit(repo_folder) 51 ··· 112 113 json = JSON.parse(response.body) 114 json['total'] 115 end 116 end
··· 17 url =~ %r{^https://tangled\.org/@[\w\-\.]+/[\w\-\.]+} 18 end 19 20 + def import_url(url, project) 21 url =~ %r{^https://tangled\.org/@([\w\-\.]+)/([\w\-\.]+)} 22 user, repo = $1, $2 23 ··· 46 end 47 48 data['stars'] = get_stars(repo_record['uri']) 49 + 50 + if project.language == :js 51 + npm = get_npm_releases(repo_folder, project) 52 + last_update = npm.map { |n| n.last_release_time }.sort.last 53 + 54 + if last_update 55 + data['last_release'] = { 'published_at' => last_update } 56 + end 57 + end 58 59 data['last_commit'] = get_latest_commit(repo_folder) 60 ··· 121 122 json = JSON.parse(response.body) 123 json['total'] 124 + end 125 + 126 + def get_npm_releases(repo_folder, project) 127 + Dir.chdir(repo_folder) do 128 + packages = %x(find . -name 'package.json').strip 129 + releases = [] 130 + 131 + packages.lines.each do |file| 132 + contents = File.read(file.strip) 133 + package = NPMImport::LocalPackage.new(JSON.parse(contents)) 134 + 135 + next if package.version.nil? || package.private? 136 + 137 + if npm = NPMImport.new.get_package_info(package.name) 138 + if project.urls.include?(npm.normalized_repository_url) 139 + releases << npm 140 + end 141 + end 142 + end 143 + 144 + releases 145 + end 146 end 147 end