1+ local NODEJS_UTILS = {}
2+
3+ NODEJS_UTILS .NodeBaseUrl = " https://nodejs.org/dist/v%s/"
4+ NODEJS_UTILS .FileName = " node-v%s-%s-%s%s"
5+ NODEJS_UTILS .npmDownloadUrl = " https://github.com/npm/cli/archive/v%s.%s"
6+ NODEJS_UTILS .VersionSourceUrl = " https://nodejs.org/dist/index.json"
7+
8+ function NODEJS_UTILS .compare_versions (v1o , v2o )
9+ local v1 = v1o .version
10+ local v2 = v2o .version
11+ local v1_parts = {}
12+ for part in string.gmatch (v1 , " [^.]+" ) do
13+ table.insert (v1_parts , tonumber (part ))
14+ end
15+
16+ local v2_parts = {}
17+ for part in string.gmatch (v2 , " [^.]+" ) do
18+ table.insert (v2_parts , tonumber (part ))
19+ end
20+
21+ for i = 1 , math.max (# v1_parts , # v2_parts ) do
22+ local v1_part = v1_parts [i ] or 0
23+ local v2_part = v2_parts [i ] or 0
24+ if v1_part > v2_part then
25+ return true
26+ elseif v1_part < v2_part then
27+ return false
28+ end
29+ end
30+
31+ return false
32+ end
33+
34+
35+ function NODEJS_UTILS .get_checksum (file_content , file_name )
36+ for line in string.gmatch (file_content , ' ([^\n ]*)\n ?' ) do
37+ local checksum , name = string.match (line , ' (%w+)%s+(%S+)' )
38+ if name == file_name then
39+ return checksum
40+ end
41+ end
42+ return nil
43+ end
44+
45+ function NODEJS_UTILS .is_semver_simple (str )
46+ -- match pattern: three digits, separated by dot
47+ local pattern = " ^%d+%.%d+%.%d+$"
48+ return str :match (pattern ) ~= nil
49+ end
50+
51+
52+ function NODEJS_UTILS .extract_semver (semver )
53+ local pattern = " ^(%d+)%.(%d+)%.[%d.]+$"
54+ local major , minor = semver :match (pattern )
55+ return major , minor
56+ end
57+
58+
59+ function NODEJS_UTILS .calculate_shorthand (list )
60+ local versions_shorthand = {}
61+ for _ , v in ipairs (list ) do
62+ local version = v .version
63+ local major , minor = extract_semver (version )
64+
65+ if major then
66+ if not versions_shorthand [major ] then
67+ versions_shorthand [major ] = version
68+ else
69+ if compare_versions ({version = version }, {version = versions_shorthand [major ]}) then
70+ versions_shorthand [major ] = version
71+ end
72+ end
73+
74+ if minor then
75+ local major_minor = major .. " ." .. minor
76+ if not versions_shorthand [major_minor ] then
77+ versions_shorthand [major_minor ] = version
78+ else
79+ if compare_versions ({version = version }, {version = versions_shorthand [major_minor ]}) then
80+ versions_shorthand [major_minor ] = version
81+ end
82+ end
83+ end
84+ end
85+ end
86+
87+ return versions_shorthand
88+ end
89+
90+ return NODEJS_UTILS
0 commit comments