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

svgpipe

v0.0.20

Published

A flexible CLI tool around svgo for further postprocessing.

Downloads

9

Readme

Svgpipe

A flexible wrapper arround SVGO to postprocess optimized SVGs. Svgpipe comes with predefined handlers that can be used to create a typed icon-component or similar. But it is easy to create a custom handler.

Installation

 npm i --save-dev svgpipe
 pnpm add -D svgpipe
 yarn add -D svgpipe

Usage

Create a config file and a folder scaffold.

npx svgpipe init

Drop your SVGs in ./svgpipe/in/<yourFolder> and update the config.

// svgpipe.config.ts
import { defineConfig } from "svgpipe";

export Default defineConfig({
  modules: {
    // load SVGs from "./svgpipe/in/logo and process with 'css-mask' handler"
    logo: "css-mask",
    // load svg from "./svgpipe/in/icon" and apply custom handler
    icon: {
      handler: (conf) => ({})
    }
  },
});

Process SVGs and create files.

npx svgpipe run

Built-in Handlers

| Name | Output |  Note | | :------------- | :----------------------------------------------------------------------------------------------------------- | :---------------------------- | | css-mask | View  | | | vue-css-mask | View  | | | vue-inline | View  | Depends on vite-svg-loader. |

Options

| Property | Type | Default | Description | | :--------- | :---------------------------------- | :------------- | -------------------------------------------------------------------------- | | baseIn? | string   | ./svgpipe/in | Root folder to find the input SVGs. | | baseOut? | string | ./svgpipe/.out | Root folder for all output files. | | cleanup | boolean | true | Delete files in the output folders that where not part of the current run. | | modules | UserModuleConfig or HandlerName | | Config for one set of SVGs. See Handlers. |

Module

| Property | Type | Default |  Description | | :------------- | :------------------------- | :--------------------------- | :---------------------------------------------------------------------------------------------- | | in? | string   | {baseIn}/{objectKeyOfModule} | Folder where the SVGs for this module are. If undefined, the module key will be used. | | out? | string | {baseOut} | Folder for ouput. | | typePath? | string | {baseOut}/types | Folder for the TypeScript type file. This has a type with all the SVG names as string literals. | | tokenPath? | string | {baseOut}/token | Folder for the TypeScript token file. This has a variable with an array with all SVG names. | | ignoreBase? | boolean | false | Don't prepend the base path. | | prepareName? | (str: string) => string | | Modify the SVG file name. The name will be used for types, classes e.g. | | handler | CreateHandler | | The actual SVG handle. | | svgo? | UserModuleConfig["svgo"] | {} | SVGO Options. |

SVGO

| Property | Type | Default | Description | | :--------- | :----------- | :------ | :--------------------------------- | | config? | SvgoConfig | {} | SVGO Config. | | replace? | boolean | false | Opt out of default config merging. | | stdout? | boolean | false | Print the config to the console. |

Custom Handler

import { type CreateHandler, File } from "svgpipe"

const myHanlder: CreateHandler = (moduleConfig) => ({
  onFile: (svgFile) => {
    // Do what ever you want. Return the file to keep it.
    return svgFile
  },
  onEnd: (context) => {
    // Do cleanup work or create addtional files
    const myFile = new File()
    return [myFile]
  }
  config: {
    multipass: true
  },
})

Implement a CreateHandler. This is a function that recieves every processed module config and returns a ISvgHandler.

onFile

Will be called for every processed input svg file. Retrun the file if you want to keep it.

onEnd

Will be called with the Context after all SVGs are processed. Return nothing or IWriter[] with additional files that you want to write to disk. Context provides a type handler that creates a TypeScript type file for the module and a corresponding token handler.

config

The default SVGO config that should be used. This can be modified from the user config.

All built-in handlers are exported in case you want to extend one.