tangled
alpha
login
or
join now
mackuba.eu
/
sdk.blue
6
fork
atom
A curated list of libraries & SDKs for the Bluesky API and AT Protocol
6
fork
atom
overview
issues
2
pulls
pipelines
look up NPM releases for Tangled repos
mackuba.eu
3 months ago
37aabd93
c9d54f4e
+93
-19
5 changed files
expand all
collapse all
unified
split
lib
github_import.rb
metadata_import.rb
npm_import.rb
project.rb
tangled_import.rb
+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'
0
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}"
0
0
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))
0
0
0
0
0
33
end
34
end
+21
-2
lib/npm_import.rb
···
27
@json = json
28
end
29
0
0
0
0
30
def last_version
31
@json['dist-tags']['latest']
32
end
···
36
end
37
38
def repository_url
39
-
@json['repository'] && @json['repository']['url']
0
0
0
0
0
0
0
0
0
0
40
end
41
end
42
0
0
0
0
43
def get_package_info(name)
44
-
response = get_response("https://registry.npmjs.com/#{name}")
0
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
···
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
···
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'])
0
0
0
0
0
0
0
0
0
49
50
data['last_commit'] = get_latest_commit(repo_folder)
51
···
112
113
json = JSON.parse(response.body)
114
json['total']
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
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