Public
Edited
Jan 5, 2024
9 stars
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
recent = versions.filter(({ time }) => time >= new Date(2019, 0, 1))
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
patch = recent.filter((d) => d.change <= "3 patch")
Insert cell
versions = Object.entries(npmViewNext.time)
.map(([version, time]) => {
const [major, minor, patch, preRelease] = version.split(/[.-]/);
const change = !!preRelease
? "4 pre-release"
: patch !== "0"
? "3 patch"
: minor !== "0"
? "2 minor"
: "1 major";
return {
time: new Date(time),
version,
major: +major,
majorMinor: `${major}.${minor}`,
change,
canary: !!preRelease?.includes("canary")
};
})
.filter(({ version }) => version.match(/^\d/))
Insert cell
npmViewNext = FileAttachment("npm-view-next@2.json").json()
Insert cell

Purpose-built for displays of data

Observable is your go-to platform for exploring data and creating expressive data visualizations. Use reactive JavaScript notebooks for prototyping and a collaborative canvas for visual data exploration and dashboard creation.
Learn more