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

IIF

v0.1.0

Published

Downloads

1

Readme

What is this?

Well, i've gotten mighty tired of the conventional programming patterns, and i stumbled upon a very intrested ideea in Alex McCaw's book about Web Applications, and decided to walk on that path.

What's the catch?

With every object that inherits the model, you get to construct its controller at the same time, from the same object. I'll show you...

Here is how you would create a Users model :

class User extends require("Model") 			// using CommonJS here to get the module
	@extend require("EventHandler")				// Mixin the EventHandler into the controller
	@include require("EventHandler")			// Mixin the EventHandler into the model
	/* These methods belong *controller* part of the object */
	@getAllUsers: (data) ->						// fetches data from the server, let`s say, as a callback to a socket.io event
	@removeAllUsers: () -> 						// removes all of the users stored on the client side
	@fetchUsersFromLocalStorage: () -> 			// recover users saved in the HTML5 LocalStorage
	/* And now, these methods belong to the individual instances of the object, the *model* */
	init: (json) -> 							// Do something with the data 
	setName: (string) -> 						// Set the name of the individual user
	/* And so forth */

Oh and, here is how your getAllUsers:

	...
	/* Let`s suppose the data is transfered using jsons in the form of *id*: _userdata_ */
	@getAlLUsers: (data) ->
		@create(userdata, id) for id, userdata of data 
			// the *@create* method creates a new model, and calls the init method of the model created
	...

Because we extended the controller with EventHandler object, we can now create a new event to handle the user data.

...
require("EventHandler") 						// Making sure the EventHandler is registered
EventHandler.subscribe "getAllUserData", User.getAllUsers
IO = socket.io.connect("some_address")			// Connecting to a WebSocket
IO.on "getAllUserData", (err, json) ->			// Handling the event
	if err then trigger err						// Taking care of the errors
	EventHandler.publish "getAllUSerData", json // Triggering the event
...

Starting from this, we can use the event substructure to make the @removeAllUsers easier :

	...
	subscribe "removeAllObjects", @remove 		// Subscribe each model to the removeAllObjects event
	...
	@removeAllUsers() -> 
		@publish "removeAllObjects"				// Trigger the removeAllObjects event
	...

When the removeAllObjects event is triggered on the user controller, all of the users will react to it, removing themselves automatically.

You see, between controllers and events, there is nothing easier than programming in CoffeeScript :)

Anyways, currently only a StateMachine is implemented to demonstrate the EventHandler and the Model classes.

Have fun :)