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

@wendellhu/squirrel

v0.1.7

Published

A no (or low) config bundler for bundling Typescript libraries. Auto-detect secondary entry points and build them for you.

Downloads

15

Readme

🐿️ squirrel

A no (or low) config bundler for bundling Typescript libraries. Auto-detect secondary entry points and build them for you.

Usage

One-line command

npx run @wendellhu/squirrel

Or add this to your 'package.json' file

"scripts": {
+  "build": "squirrel"
}

install and then build

npm install @wendellhu/squirrel
npm run build

Config

{
    "$schema": {
        "type": "string"
    },
    "dest": {
        "description": "Destination for production files",
        "type": "string",
        "default": "publish"
    },
    "entryFileName": {
        "description": "Entry file name",
        "type": "string",
        "default": "publicApi.ts"
    },
    "srcRoot": {
        "description": "Root dir name of the source files",
        "type": "string",
        "default": "src"
    },
    "tsConfig": {
        "description": "Relative path to the ts config file",
        "type": "string",
        "default": "tsconfig.json"
    },
    "copyFiles": {
        "description": "Files should copied to dest folder",
        "type": "array",
        "default": ["README.md"]
    }
}

Secondary Entry Points

Sometimes you don't want to group symbols with those exported from the primary entry points. The module id of a secondary entry directs the module loader to a sub-directory by the secondary's name.

import { Injector } from '@wendellhu/redi' // a dependency injection framework
import { connectDependencies } from '@wendellhu/redi/react-bindings' // some utils to help bind your React app to the dependency injection framework

You can just put a 'package.json' file in that sub folder and create a 'publicApi.ts' file to export things you want to export:

/src
  /react-bindings
    publicApi.ts
    package.json
  publicApi.ts
// package.json
{
    "$schema": "https://raw.githubusercontent.com/wendellhu95/squirrel/master/src/schema/squirrel.schema.json",
    "entryFileName": "./publicApi.ts"
}
export { useInjector, WithDependency } from './reactHooks'
export { connectInjector, connectDependencies } from './reactComponent'
export { RediContext } from './reactContext'

And that's it! Squirrel would discover secondary entry points by searching these 'package.json' files.

Entry Point Encapsulation & Cyclic Dependency Prohibition

Import from files outside of a entry point via relative path is forbidden. Squirrel would throw error if it detect that entry point encapsulation is violated.

For example, relatively import secondary entry point 'src/foo' would cause an error.

// src/foo/bar.ts
import {} from '../buz.ts' // error!

You need to use absolute path to import in this case:

import {} from 'your-package-name'

Also, if an entry points cyclically depends on itself, Squirrel would throw an error and stop bundling.

// src/buz.ts
import {} from 'your-package-name/foo'

// src/foo/bar.ts
import {} from 'your-package-name' // error!

Used by

  • redi, a dependency injection library

License

MIT. Copyright 2021-present Wenzhao Hu.