FazBrowse GitHub Viewer
|
Trending
|
URL:
|
Home
Tools:
[Download Repo ZIP]
[View Raw Code]
[Original HTTPS Page]
nodejs.dev/util-node/getNodeReleasesData.js at main · nodejs/nodejs.dev · GitHub
Uh oh!
There was an error while loading.
Please reload this page
.
This repository was archived by the owner on Apr 26, 2024. It is now read-only.
nodejs
/
nodejs.dev
Public archive
Notifications
You must be signed in to change notification settings
Fork
1k
Star
2.3k
Code
Pull requests
0
Actions
Security and quality
0
Insights
Additional navigation options
Code
Pull requests
Actions
Security and quality
Insights
Expand file tree
Breadcrumbs
nodejs.dev
/
util-node
/
getNodeReleasesData.js
Copy path
More file actions
More file actions
Latest commit
History
History
History
104 lines (85 loc) · 3.66 KB
Breadcrumbs
nodejs.dev
/
util-node
/
getNodeReleasesData.js
Copy path
File metadata and controls
104 lines (85 loc) · 3.66 KB
Raw
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
const
nodeVersions
=
require
(
'@pkgjs/nv'
)
;
const
path
=
require
(
'path'
)
;
const
async
=
require
(
'async'
)
;
const
fs
=
require
(
'fs'
)
;
const
getReleaseStatus
=
require
(
'./getReleaseStatus'
)
;
const
{
nodeReleaseSchedule
}
=
require
(
'../apiUrls'
)
;
const
{
apiPath
}
=
require
(
'../pathPrefixes'
)
;
const
apiDocsDirectory
=
path
.
resolve
(
__dirname
,
`../content
${
apiPath
}
`
)
;
const
availableApiVersions
=
fs
.
readdirSync
(
apiDocsDirectory
,
{
withFileTypes
:
true
}
)
.
filter
(
dirent
=>
dirent
.
isDirectory
(
)
)
.
map
(
dirent
=>
dirent
.
name
)
;
function
getNodeReleasesData
(
nodeReleasesDataCallback
)
{
const
fetchNodeReleaseSchedule
=
callback
=>
{
fetch
(
nodeReleaseSchedule
)
.
then
(
response
=>
response
.
json
(
)
)
.
then
(
releaseSchedule
=>
callback
(
null
,
releaseSchedule
)
)
;
}
;
const
fetchNodeReleaseDetail
=
callback
=>
{
nodeVersions
(
[
'supported'
]
)
.
then
(
response
=>
callback
(
null
,
response
)
)
;
}
;
const
formateReleaseDate
=
date
=>
date
?
new
Date
(
date
)
.
toISOString
(
)
.
split
(
'T'
)
[
0
]
:
''
;
const
parseReleaseData
=
(
_
,
results
)
=>
{
const
{
releaseSchedule
,
releaseDetails
}
=
results
;
const
isReleaseCurrentlyLTS
=
release
=>
(
new
Date
(
release
.
lts
)
<=
new
Date
(
)
&&
new
Date
(
release
.
maintenance
)
>=
new
Date
(
)
)
||
(
getReleaseStatus
(
release
)
===
'Maintenance LTS'
&&
formateReleaseDate
(
release
.
end
)
>=
new
Date
(
)
.
toISOString
(
)
.
split
(
'T'
)
[
0
]
)
;
const
mapReleaseData
=
key
=>
{
const
release
=
releaseSchedule
[
key
]
;
return
{
fullVersion
:
key
,
version
:
key
,
codename
:
release
.
codename
||
key
,
isLts
:
release
.
lts
?
isReleaseCurrentlyLTS
(
release
)
:
getReleaseStatus
(
release
)
===
'Maintenance LTS'
&&
formateReleaseDate
(
release
.
end
)
>=
new
Date
(
)
.
toISOString
(
)
.
split
(
'T'
)
[
0
]
,
status
:
getReleaseStatus
(
release
)
,
initialRelease
:
formateReleaseDate
(
release
.
start
)
,
ltsStart
:
formateReleaseDate
(
release
.
lts
)
,
maintenanceStart
:
formateReleaseDate
(
release
.
maintenance
)
,
endOfLife
:
formateReleaseDate
(
release
.
end
)
,
}
;
}
;
const
mappedReleasesData
=
releaseDetails
.
map
(
release
=>
(
{
fullVersion
:
`v
${
release
.
version
}
`
,
version
:
release
.
versionName
,
codename
:
release
.
codename
,
isLts
:
isReleaseCurrentlyLTS
(
release
)
,
status
:
getReleaseStatus
(
release
)
,
initialRelease
:
formateReleaseDate
(
release
.
start
)
,
ltsStart
:
formateReleaseDate
(
release
.
lts
)
,
maintenanceStart
:
formateReleaseDate
(
release
.
maintenance
)
,
endOfLife
:
formateReleaseDate
(
release
.
end
)
,
}
)
)
;
const
removeDuplicatedScheduleEntries
=
version
=>
mappedReleasesData
.
every
(
entry
=>
entry
.
version
!==
version
)
;
const
filteredReleasesData
=
Object
.
keys
(
releaseSchedule
)
.
filter
(
removeDuplicatedScheduleEntries
)
.
map
(
mapReleaseData
)
;
mappedReleasesData
.
push
(
...
filteredReleasesData
)
;
const
sortedReleasesByRelease
=
mappedReleasesData
.
sort
(
(
a
,
b
)
=>
new
Date
(
a
.
initialRelease
)
-
new
Date
(
b
.
initialRelease
)
)
;
sortedReleasesByRelease
.
reverse
(
)
;
nodeReleasesDataCallback
(
{
nodeReleasesData
:
sortedReleasesByRelease
,
apiAvailableVersions
:
availableApiVersions
,
}
)
;
}
;
const
asyncTasks
=
{
releaseSchedule
:
fetchNodeReleaseSchedule
,
releaseDetails
:
fetchNodeReleaseDetail
,
}
;
// This creates a parallel worker pool with 2 workers that asynchronously fetches the different
// API requests. And then it works towards parsing the data on `parseReleaseData`
// When the data gets parsed, it gets returned as a callback to the `getNodeReleasesData` function
async
.
parallel
(
asyncTasks
,
parseReleaseData
,
2
)
;
}
module
.
exports
=
getNodeReleasesData
;
Back
|
FazBrowse Home
|
New Git URL