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 🙏

© 2024 – Pkg Stats / Ryan Hefner

@endgame/calvin

v1.0.8-alpha.0

Published

Changing Any Lifeless Value Into Notifications

Downloads

103

Readme

CALVIN

CALVIN: Changing Any Lifeless Value Into Notifications

Installation

yarn add @endgame/calvin
# or
npm i -S @endgame/calvin

Wait... WHY ?

Writing a lot of JS logic is very cool, stylish and SWAG... but putting too much logic in your files can make them bloated and hard to maintain.

NOT ANYMORE!!!

NOW YOU CAN USE COMPUTED PROPERTIES AND WATCHERS... IN VANILLA JS 😱

P.S. TypeScript is fully supported

🤔 Computed properties... watchers... WTF??? Are you even talking English man?

Yeah dude... just read thaaaaaaat and then... only then... go cry to your mother!

The example 😏

import { Calvin } from '@endgame/calvin';

// Declare a new data reactor like this 🚀
const reactor = new Calvin({
  myReactiveData: 0,
});

// Declare computed properties this way
reactor.computed({
  myAwesomeComputed() {
    return `myReactiveData equals: ${this.myReactiveData}`;
  },
});

// Get notified any time a property is updated
reactor.watch({
  myReactiveData() {
    // This watcher will be called whenever you update myReactiveData

    // You can, for example, call a specific method on myReactiveData's update
    handleMyReactiveDataUpdate(this.myReactiveData);
  },
  myAwesomeComputed() {
    // This watcher will be called whenever myAwesomeComputed gets updated
    console.log(this.myAwesomeComputed);
  },
});

// Let's see what can be done with this cool reactor 🔥
// Try to run this loop to see what CALVIN does.
const letsSeeWhatCanBeDoneWithThisCoolReactor = () => {
  setTimeout(() => {
    // Add one every 1 seconds in order to test the reactor's features
    reactor.data.myReactiveData += 1;

    // Repeat it to test it... indefinitely 😍
    letsSeeWhatCanBeDoneWithThisCoolReactor();
  }, 1000);
};

List of features

Access data

import { Calvin } from '@endgame/calvin';

const reactor = new Calvin({
  myReactiveData: 0,
});

reactor.computed({
  myComputed() {
    return `myReactiveData equals: ${this.myReactiveData}`;
  },
});

// Access the declared data and computed
console.log(reactor.data.myReactiveData);
console.log(reactor.data.myComputed);

Watch

import { Calvin } from '@endgame/calvin';

const reactor = new Calvin({
  myReactiveData: 0,
});

// Get notified any time myReactiveData is updated
reactor.watch({
  myReactiveData() {
    console.log(this.myReactiveData);
  },
});

Unwatch

import { Calvin } from '@endgame/calvin';

const reactor = new Calvin({
  myReactiveData: 0,
});

const watchersIds = reactor.watch({
  myReactiveData() {
    console.log(this.myReactiveData);
  },
});

// ⚡ Unwatch data to avoid memory leak
reactor.unwatch(watchersIds);