npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

advent-event

v0.2.0

Published

A customizable advent calendar library to manage unlockable content, countdowns, and day-based events.

Readme

Description

The advent-event library provides a customizable and flexible way to manage advent-style countdowns or unlockable content systems. Ideal for projects like event calendars, daily challenges, or reward systems, it allows you to define a starting date and manage days programmatically.

Package name: advent-event

Features

  • Customizable Length: Define the number of days for your calendar (default: 24 days).
  • Unlockable Days: Determine if a specific day is unlocked based on the current time.
  • Time Calculation: Get precise unlock times for each day.
  • Countdown Timer: Calculate the remaining time until a specific day is unlocked.
  • Dynamic State Management: Check if the advent period is over and retrieve the last unlocked day.
  • Remaining Days: Calculate how many days are left in the advent period.

Usage Example

import { AdventEvent } from 'advent-event';

// Initialize with a start time and default length of 24 days
const calendar = new AdventEvent(new Date('2025-12-01T00:00:00Z'));

// Check if day 5 is unlocked
console.log(calendar.isUnlocked(5)); // true or false

// Get unlock time for day 10
console.log(new Date(calendar.getTime(10)));

// Calculate countdown for day 15
console.log(calendar.getCountdown(15)); // Time remaining in milliseconds

// Check if the calendar period is over
console.log(calendar.isLastDayUnlocked());

// Retrieve the last unlocked day
console.log(calendar.getLastUnlockedDay());

// Get the number of remaining days in the advent calendar
console.log(calendar.getRemainingDays());

Use Cases

  • Create advent calendars for games or websites.
  • Manage time-gated rewards, events, or challenges.
  • Implement unlockable content systems for marketing or engagement.

API Reference

  • constructor(startTime: Date, length: number = 24): Initializes the calendar.
  • isUnlocked(day: number, currentTime?: Date): boolean: Checks if a specific day is unlocked.
  • getTime(day: number): number: Gets the unlock time for a day (as a timestamp).
  • getCountdown(day: number, currentTime?: Date): number: Calculates the time remaining until a day is unlocked.
  • isLastDayUnlocked(currentTime?: Date): boolean: Checks if the calendar period is over.
  • getLastUnlockedDay(currentTime?: Date): number: Finds the most recent unlocked day.
  • getRemainingDays(currentTime?: Date): number: Gets the number of days left in the advent calendar.