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

swiss-zx

v2.0.1

Published

A collection of helper functions and useful little things for Google's zx

Downloads

8

Readme

swiss-zx (Swiss Army Knife for zx)

A collection of helper functions and useful little things for Google's zx

Uses swiss-ak

Install

npm install swiss-zx

or

yarn add swiss-zx

$$ (double dollar)

cd

$$.cd(dir: string): ProcessPromise

Change the current working directory

await $$.pwd(); // '/Users/username'
await $$.cd('./some/folder');
await $$.pwd(); // '/Users/username/some/folder'

| # | Parameter Name | Required | Type | Default | |:---:|:---------------|:---------|:---------|:--------| | 0 | dir | No | string | '.' |

| Return Type | |------------------| | ProcessPromise |

pwd

$$.pwd(): Promise<string>

Get the current working directory

await $$.pwd(); // '/Users/username'
await $$.cd('./some/folder');
await $$.pwd(); // '/Users/username/some/folder'

| Return Type | |-------------------| | Promise<string> |

ls

$$.ls(dir: string, flags: string[]): Promise<string[]>

Wrapper for ls (list) command

await $$.ls('example') // ['a', 'b']

| # | Parameter Name | Required | Type | Default | |:---:|:---------------|:---------|:-----------|:--------| | 0 | dir | No | string | '.' | | 1 | flags | No | string[] | [] |

| Return Type | |---------------------| | Promise<string[]> |

rm

$$.rm(item: string): ProcessPromise

Wrapper for rm (remove) command

await $$.rm('example') // same as $`rm -rf 'example'`

| # | Parameter Name | Required | Type | |:---:|:---------------|:---------|:---------| | 0 | item | Yes | string |

| Return Type | |------------------| | ProcessPromise |

mkdir

$$.mkdir(item: string): ProcessPromise

Wrapper for mkdir (make directory) command

await $$.mkdir('example') // same as $`mkdir -p 'example'`

| # | Parameter Name | Required | Type | |:---:|:---------------|:---------|:---------| | 0 | item | Yes | string |

| Return Type | |------------------| | ProcessPromise |

cp

$$.cp(a: string, b: string): ProcessPromise

Wrapper for cp (copy) command

await $$.cp('example1', 'example2') // same as $`cp -r 'example1' 'example2'`

| # | Parameter Name | Required | Type | |:---:|:---------------|:---------|:---------| | 0 | a | Yes | string | | 1 | b | Yes | string |

| Return Type | |------------------| | ProcessPromise |

mv

$$.mv(a: string, b: string): ProcessPromise

Wrapper for mv (move) command

await $$.mv('example1', 'example2') // same as $`mv 'example1' 'example2'`

| # | Parameter Name | Required | Type | |:---:|:---------------|:---------|:---------| | 0 | a | Yes | string | | 1 | b | Yes | string |

| Return Type | |------------------| | ProcessPromise |

touch

$$.touch(item: string): ProcessPromise

Wrapper for touch (create blank file) command

await $$.touch('example') // same as $`touch 'example'`

| # | Parameter Name | Required | Type | |:---:|:---------------|:---------|:---------| | 0 | item | Yes | string |

| Return Type | |------------------| | ProcessPromise |

cat

$$.cat(item: string): ProcessPromise

Wrapper for cat (concatenate) command

await $$.cat('example') // same as $`cat 'example'`

| # | Parameter Name | Required | Type | |:---:|:---------------|:---------|:---------| | 0 | item | Yes | string |

| Return Type | |------------------| | ProcessPromise |

grep

$$.grep(pattern: string, file: string): Promise<string[]>

Wrapper for grep (Global Regular Expression Print) command

await $$.grep('example', '.') // same as $`grep 'example' '.'`

| # | Parameter Name | Required | Type | |:---:|:---------------|:---------|:---------| | 0 | pattern | Yes | string | | 1 | file | Yes | string |

| Return Type | |---------------------| | Promise<string[]> |

find

$$.find(dir: string, options: FindOptions): Promise<string[]>

Helper function for finding files

await $$.find('.', { type: 'f' }) // ['a', 'b']

| # | Parameter Name | Required | Type | Default | |:---:|:---------------|:---------|:--------------|:--------| | 0 | dir | No | string | '.' | | 1 | options | No | FindOptions | {} |

| Return Type | |---------------------| | Promise<string[]> |

FindOptions

$$.FindOptions;

Options for $$.find (and related other tools)

| Property | Required | Type | Description | | ----------------------- | -------- | -------- | ----------------------------------------- | | type | No | FindType | Type of item to find | | mindepth | No | number | Minimum depth to search | | maxdepth | No | number | Maximum depth to search | | name | No | string | Name of file/directory to find | | ext | No | string | Shortcut for regex-ing the file extension | | regex | No | string | Regular expression to match | | removePath | No | boolean | Removes the path from the result | | contentsOnly | No | boolean | Ensures input path has a trailing slash | | removeTrailingSlashes | No | boolean | Removes trailing slashes from the results | | showHidden | No | boolean | Includes files that start with a dot |

FindType

$$.FindType;

Type of item to find

| | Description | |---|-------------------| | d | directory | | f | regular file | | b | block special | | c | character special | | l | symbolic link | | p | FIFO | | s | socket |

findDirs

$$.findDirs(dir: string, options: FindOptions): Promise<string[]>

Find all directories in a given directory (shallow)

await $$.findDirs('.') // ['a', 'b']

| # | Parameter Name | Required | Type | Default | |:---:|:---------------|:---------|:--------------|:--------| | 0 | dir | No | string | '.' | | 1 | options | No | FindOptions | {} |

| Return Type | |---------------------| | Promise<string[]> |

findFiles

$$.findFiles(dir: string, options: FindOptions): Promise<string[]>

Find all files in a given directory (shallow)

await $$.findFiles('.') // ['a', 'b']

| # | Parameter Name | Required | Type | Default | |:---:|:---------------|:---------|:--------------|:--------| | 0 | dir | No | string | '.' | | 1 | options | No | FindOptions | {} |

| Return Type | |---------------------| | Promise<string[]> |

findModified

$$.findModified(dir: string, options: FindOptions): Promise<ModifiedFile[]>

Similar to $$.find, but returns a list of ModifiedFile objects, which includes information on what each item was last modified.

await $$.findModified('.')
// [
//   {
//     lastModified: 1689206400000,
//     path: './a.mp4',
//     dir: '.',
//     folders: ['.'],
//     name: 'a',
//     ext: 'mp4',
//     filename: 'a.mp4'
//   }
// ]

| # | Parameter Name | Required | Type | Default | |:---:|:---------------|:---------|:--------------|:--------| | 0 | dir | No | string | '.' | | 1 | options | No | FindOptions | {} |

| Return Type | |---------------------------| | Promise<ModifiedFile[]> |

ModifiedFile

$$.ModifiedFile;

Returned by $$.findModified.

Extends swiss-node's ExplodedPath, adding a new lastModified number property.

{
  lastModified: 1689206400000,
  path: './a.mp4',
  dir: '.',
  folders: ['.'],
  name: 'a',
  ext: 'mp4',
  filename: 'a.mp4'
}

lastModified

$$.lastModified(path: string): Promise<number>

Returns the last modified time of a file or files within a directory.

await $$.lastModified('a.mp4') // 1689206400000

| # | Parameter Name | Required | Type | |:---:|:---------------|:---------|:---------| | 0 | path | Yes | string |

| Return Type | |-------------------| | Promise<number> |

rsync

$$.rsync(a: string, b: string, flags: string[], progressBarOpts: Partial<progressBar.ProgressBarOptions>): Promise<any>

Wrapper for rsync command

await $$.rsync('example1', 'example2') // same as $`rsync -rut 'example1' 'example2'`

| # | Parameter Name | Required | Type | Default | |:---:|:------------------|:---------|:------------------------------------------|:--------| | 0 | a | Yes | string | | | 1 | b | Yes | string | | | 2 | flags | No | string[] | [] | | 3 | progressBarOpts | No | Partial<progressBar.ProgressBarOptions> | |

| Return Type | |----------------| | Promise<any> |

sync

$$.sync(a: string, b: string, progressBarOpts: Partial<progressBar.ProgressBarOptions>): Promise<any>

Helper function for syncing files

await $$.sync('example1', 'example2') // same as $`rsync -rut 'example1' 'example2' --delete`

| # | Parameter Name | Required | Type | |:---:|:------------------|:---------|:------------------------------------------| | 0 | a | Yes | string | | 1 | b | Yes | string | | 2 | progressBarOpts | No | Partial<progressBar.ProgressBarOptions> |

| Return Type | |----------------| | Promise<any> |

isFileExist

$$.isFileExist(file: string): Promise<boolean>

Check if a file exists

await $$.isFileExist('example') // true

| # | Parameter Name | Required | Type | |:---:|:---------------|:---------|:---------| | 0 | file | Yes | string |

| Return Type | |--------------------| | Promise<boolean> |

isDirExist

$$.isDirExist(dir: string): Promise<boolean>

Check if a directory exists

await $$.isDirExist('example') // true

| # | Parameter Name | Required | Type | |:---:|:---------------|:---------|:---------| | 0 | dir | Yes | string |

| Return Type | |--------------------| | Promise<boolean> |

readFile

$$.readFile(filepath: string): Promise<string>

Read a file's contents

await $$.readFile('example') // 'hello world'

| # | Parameter Name | Required | Type | |:---:|:---------------|:---------|:---------| | 0 | filepath | Yes | string |

| Return Type | |-------------------| | Promise<string> |

writeFile

$$.writeFile(filepath: string, contents: string): Promise<void>

Write to a file

await $$.writeFile('example', 'hello world') // saves a new file called 'example' with the contents 'hello world'

| # | Parameter Name | Required | Type | |:---:|:---------------|:---------|:---------| | 0 | filepath | Yes | string | | 1 | contents | Yes | string |

| Return Type | |-----------------| | Promise<void> |

readJSON

$$.readJSON<T>(filepath: string): Promise<T>

Read a JSON file

await $$.readJSON('example.json') // { hello: 'world' }

| # | Parameter Name | Required | Type | |:---:|:---------------|:---------|:---------| | 0 | filepath | Yes | string |

| Return Type | |--------------| | Promise<T> |

writeJSON

$$.writeJSON<T>(obj: T): Promise<T>

Write to a JSON file

await $$.writeJSON('example.json', { hello: 'world' }) // saves a new file called 'example.json' with the contents {'hello':'world'}

| # | Parameter Name | Required | Type | |:---:|:---------------|:---------|:-----| | 0 | obj | Yes | T |

| Return Type | |--------------| | Promise<T> |

pipe

$$.pipe(processes: ((index?: number, arg?: T) => ProcessPromise)[], arg: T): ProcessPromise

Pipes a series of $ or $$ commands sequentially

await $$.pipe([
  () => gm.convert(basePath, gm.PIPE, opts1),
  () => gm.composite(changePath, gm.PIPE, gm.PIPE, changePath, opts2)
]);

| # | Parameter Name | Required | Type | |:---:|:---------------|:---------|:--------------------------------------------------| | 0 | processes | Yes | ((index?: number, arg?: T) => ProcessPromise)[] | | 1 | arg | No | T |

| Return Type | |------------------| | ProcessPromise |

exiftool

$$.exiftool(file: string, setAttr: ExifToolAttributesObj, getAttr: (ExifToolAttributes | string)[], outFile: string): Promise<ExifToolAttributesObj>

Usage:

$$.exiftool('/path/to/file.jpg', {'Copyright': 'Eg val'});
$$.exiftool('/path/to/file.jpg', {'Copyright': 'Eg val'}, undefined, '/path/to/new_file.jpg');

| # | Parameter Name | Required | Type | |:---:|:---------------|:---------|:-----------------------------------| | 0 | file | Yes | string | | 1 | setAttr | No | ExifToolAttributesObj | | 2 | getAttr | No | (ExifToolAttributes \| string)[] | | 3 | outFile | No | string |

| Return Type | |----------------------------------| | Promise<ExifToolAttributesObj> |

ExifToolAttributesObj

$$.ExifToolAttributesObj;

Interface for the attributes returned by exiftool

ExifToolAttributes

$$.ExifToolAttributes;

Type for the names of the attributes returned by exiftool

utils

intoLines

$$.utils.intoLines(out: ProcessOutput): string[]

Turns ProcessOutput into string array, split into lines

utils.intoLines($`echo "1\n2\n3"`) // ['1', '2', '3']

| # | Parameter Name | Required | Type | |:---:|:---------------|:---------|:----------------| | 0 | out | Yes | ProcessOutput |

| Return Type | |-------------| | string[] |

os

closeFinder

closeFinder(): Promise<void>
os.closeFinder(): Promise<void>

Close all Mac OS X Finder windows.

await closeFinder();

| Return Type | |-----------------| | Promise<void> |

ffmpegTools

ffmpeg

ffmpeg(command: () => ProcessPromise, progressFileName: string, totalFrames: number, progressBarOpts: progressBar.ProgressBarOptions): Promise<void>
ffmpegTools.ffmpeg(command: () => ProcessPromise, progressFileName: string, totalFrames: number, progressBarOpts: progressBar.ProgressBarOptions): Promise<void>

Wrapper for ffmpeg command that provides progress bar to track progress

const progBarOpts = {}; // Same options as getProgressBar
await ffmpeg(() => $`ffmpeg -y -i ${a} ${b} -progress ${pr}`, pr, framesNum, progBarOpts);

| # | Parameter Name | Required | Type | Default | |:---:|:-------------------|:---------|:---------------------------------|:--------------------------------------| | 0 | command | No | () => ProcessPromise | () => $`ffmpeg -progress pr.txt` | | 1 | progressFileName | No | string | 'pr.txt' | | 2 | totalFrames | No | number | 1 | | 3 | progressBarOpts | No | progressBar.ProgressBarOptions | {} |

| Return Type | |-----------------| | Promise<void> |

toFFmpegTimeFormat

ffmpegTools.toFFmpegTimeFormat(time: ms): string

Convert a number of milliseconds to a time format usable by FFmpeg.

ffmpegTools.toFFmpegTimeFormat(minutes(3)); // '03:00.000'
ffmpegTools.toFFmpegTimeFormat(minutes(3) + seconds(21)); // '03:21.000'
ffmpegTools.toFFmpegTimeFormat(minutes(3) + seconds(21) + 456); // '03:21.456'

| # | Parameter Name | Required | Type | |:---:|:---------------|:---------|:-----| | 0 | time | Yes | ms |

| Return Type | |-------------| | string |

getProbe

ffmpegTools.getProbe(file: string): Promise<ProbeResult>

Get the probe of a file as an object

const probe = await getProbe('file.mp4'); // { width: 1280, height: 720, ... }

| # | Parameter Name | Required | Type | |:---:|:---------------|:---------|:---------| | 0 | file | Yes | string |

| Return Type | |------------------------| | Promise<ProbeResult> |

ProbeResult

ffmpegTools.ProbeResult;

Note: this interface is a guide, and other properties may exist, and some may be have different types

getProbeValue

ffmpegTools.getProbeValue(file: string, propertyName: string): Promise<string>

Get a value from ffprobe output

const probe = await getProbe('file.mp4', 'width'); // '1280'

| # | Parameter Name | Required | Type | |:---:|:---------------|:---------|:---------| | 0 | file | Yes | string | | 1 | propertyName | Yes | string |

| Return Type | |-------------------| | Promise<string> |

getTotalFrames

ffmpegTools.getTotalFrames(list: string | string[]): Promise<number>

Get the total number of frames in a video file.

const num = await getTotalFrames('video.mp4'); // 120 (2 secs at 60fps)

| # | Parameter Name | Required | Type | |:---:|:---------------|:---------|:---------------------| | 0 | list | No | string \| string[] |

| Return Type | |-------------------| | Promise<number> |

gm

convert

gm.convert(inPath: string, outPath: string, flags: ConvertFlagsObj): ProcessPromise

Wrapper function for gm (GraphicsMagick) convert command

const converted = await gm.convert(input, output, {});

| # | Parameter Name | Required | Type | Default | |:---:|:---------------|:---------|:------------------|:--------| | 0 | inPath | No | string | PIPE | | 1 | outPath | No | string | PIPE | | 2 | flags | No | ConvertFlagsObj | {} |

| Return Type | |------------------| | ProcessPromise |

ConvertFlagsObj

gm.ConvertFlagsObj;

Options configuration for the gm.convert function

Extends CommonFlagsObj

composite

gm.composite(changePath: string, basePath: string, outPath: string, maskPath: string, flags: ChangeAndMaskFlags | CompositeFlagsObj): ProcessPromise

Wrapper function for gm (GraphicsMagick) composite command

Has extra functionality for using a 'Screen' blending mode (similar to Photoshop)

const composited = await gm.composite(change, base, out, undefined, {});

| # | Parameter Name | Required | Type | Default | |:---:|:---------------|:---------|:------------------------------------------|:--------| | 0 | changePath | No | string | PIPE | | 1 | basePath | No | string | PIPE | | 2 | outPath | No | string | PIPE | | 3 | maskPath | No | string | '' | | 4 | flags | No | ChangeAndMaskFlags \| CompositeFlagsObj | {} |

| Return Type | |------------------| | ProcessPromise |

CompositeFlagsObj

gm.CompositeFlagsObj;

Options configuration for the gm.composite function

Extends CommonFlagsObj

ChangeAndMaskFlags

gm.ChangeAndMaskFlags;

If compositing with a mask, you can specify the change and mask flags separately

{
  change?: CompositeFlagsObj;
  mask?: CompositeFlagsObj;
}

pipe

gm.pipe(inPath: string, outPath: string, processes: ((pipeIn?: string, pipeOut?: string, index?: number) => ProcessPromise)[]): ProcessPromise

Pipe a series of gm commands together

WARNING: If inPath is provided, it will be piped in to first process WARNING: If outPath is provided, it will be piped out from last process

await pipe(basePath, outPath, [
  (p) => convert(p, p, opts1),
  (p) => composite(changePath, p, p, changePath, opts2)
]);
await pipe(undefined, undefined, [
  (p) => convert(basePath, p, opts1),
  (p) => composite(changePath, p, outPath, changePath, opts2)
]);

| # | Parameter Name | Required | Type | Default | |:---:|:---------------|:---------|:----------------------------------------------------------------------------|:--------| | 0 | inPath | No | string | | | 1 | outPath | No | string | | | 2 | processes | No | ((pipeIn?: string, pipeOut?: string, index?: number) => ProcessPromise)[] | [] |

| Return Type | |------------------| | ProcessPromise |

PIPE

gm.PIPE;

A shortcut constant for the GraphicsMagick pipe path which is MIFF:-

This can be used in place any path parameter to pipe the result of a gm command to another gm command

Types

CommonFlagsObj

gm.CommonFlagsObj;

Option configuration options that are common to both gm.convert and gm.composite

FlagsObj

gm.FlagsObj;

ConvertFlagsObj & CompositeFlagsObj

channel

gm.channel;

'red' | 'green' | 'blue' | 'cyan' | 'magenta' | 'yellow' | 'black' | 'opacity' | 'gray' | 'matte'

utils

flagsObjToArray

gm.utils.flagsObjToArray(obj: gm.FlagsObj): (string | number)[]

Converts a FlagsObj to an array of flags and values (for zx).

gm.utils.flagsObjToArray({ channel: 'red' }); // [ '-channel', 'red' ]
gm.utils.flagsObjToArray({ displace: '10' }); // [ '-displace', '10' ]

gm.utils.flagsObjToArray({ resize: '1080', fill: 'gray', gravity: 'SouthEast' });
// ['-resize', '1080', '-fill', 'gray', '-gravity', 'SouthEast']

gm.utils.flagsObjToArray({ brightness: 150, saturation: 50, hue: 200 });
// [ '-modulate', '150,50,200' ]

| # | Parameter Name | Required | Type | |:---:|:---------------|:---------|:--------------| | 0 | obj | Yes | gm.FlagsObj |

| Return Type | |------------------------| | (string \| number)[] |

channelComposeCopyMap

gm.utils.channelComposeCopyMap;

A dictionary for mapping channel names to their respective compose copy names.

gm.utils.channelComposeCopyMap['red'] // 'CopyRed'
gm.utils.channelComposeCopyMap['magena'] // 'CopyMagenta'
gm.utils.channelComposeCopyMap['gray'] // 'Copy'

supportedFlags

gm.utils.supportedFlags;

An object containing the supported flags and their types (or options).

GMCommand
gm.utils.GMCommand;

An internal string indictor for which gm command to use.

Only used in configuration for gm.utils.SupportedFlag.

'convert' | 'composite'
SupportedFlag
gm.utils.SupportedFlag;

An internal configuration object for a supported flag.