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

topiarist

v0.1.4

Published

Topiarist provides tree and shape-based type verification for JavaScript.

Downloads

15

Readme

Topiarist

Topiarist provides tree and shape-based type verification for JavaScript.

Build Status

You can read the introductory blog post for more information.

A Note on implementation

This library makes liberal use of nonenumerable attributes and Object.getPrototypeOf. It is therefore suitable only for Ecmascript 5 engines. It will work in Ecmascript 6 engines but there would be a much nicer implementation in that case, using Map and private symbols.

Getting It

In Node.js:

npm install --save topiarist

then:

var topiarist = require('topiarist');

For the browser, download the latest release, and refer to it from your script tag:

<script type="text/javascript" src="dist/topiarist.js"></script>

Usage

This library provides the following action methods:

  • topiarist.extend(subclass, superclass) which implements classical single inheritance by setting up the prototype chain.
  • topiarist.implement(class, interface) which declares a classes intention to implement an interface, where verification is delayed until after the class has been finalized.
  • topiarist.hasImplemented(class, interface) which declares that a class implements an interface and throws an exception if it does not.
  • topiarist.inherit(class, parent) which provides multiple inheritance by copying functionality from the parent to the class.
  • topiarist.mixin(class, mixin) which provides mixin inheritance, sandboxing mixin methods that are copied onto the class.

and the following query methods:

  • topiarist.isA(instance, parent) which returns true if the instance is of a type which has been declared to be descended from the parent, e.g. because it's extended or implemented or mixed-in.
  • topiarist.classIsA(class, parent) which returns true if the class has been declared to be descended from the parent, e.g. through extension, implementation, etc.
  • topiarist.fulfills(instance, interface) which returns true if the instance supports everything on the interface.
  • topiarist.classFulfills(class, interface) which returns true if instances of the class will be created supporting everything on the interface.

The following convenience methods are also provided:

  • topiarist.install() which copies the appropriate methods onto the Function and Object prototype, renaming them where appropriate. This lets you do things like Subclass.extends(Superclass)
  • topiarist.exportTo() which copies the appropriate methods onto the global object so they can be accessed directly.