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

http-server-md-lib

v1.1.2

Published

Shared utility library for http-server-md

Downloads

2

Readme

http-server-md-lib

NPM Version Build Status Downloads Stats

Shared utility library for sermit

Installation

npm badge

pnpm add http-server-md-lib

Developing

pnpm gen-readme // update README.md
pnpm docs // update DOCUMENTATION.md
pnpm test // lint & mocha
pnpm update-deps // bump all deps

Release History

See CHANGELOG.md for more information.

License

Distributed under the MIT license. See LICENSE.md for more information.

Contributing

  1. Fork it
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create a new Pull Request

API Reference

The standalone JSDoc reference can be found in DOCUMENTATION.md

Modules

Classes

Functions

Typedefs

http-server-md-lib

Shared utility library for the http-server-md utility and supported templates, plugins, and other extensions. Provides general utilities (@see requireDynamicModule), and methods to render template (@see http-server-md-template-default) assets and SCSS stylesheets.

See: http-server-md
License: MIT

PathDoesNotExistError ⇐ Error

Error thrown when a path does not exist.

Kind: global class
Extends: Error
Todo

  • [ ] colorize stack trace if color enabled.

new PathDoesNotExistError(path, [fsError], [color], [message], [stack])

Create a new PathDoesNotExistError object.

| Param | Type | Description | | --- | --- | --- | | path | string | path that does not exist. | | [fsError] | string | Error | original native error or native message. | | [color] | boolean | enables colorized message. | | [message] | string | error message override | | [stack] | Array.<string> | stack trace override |

Example

throw new PathDoesNotExist('/some/path')

pathDoesNotExistError.path ⇒ string

Get the non-existent path.

Kind: instance property of PathDoesNotExistError
Returns: string - path - path supplied to error.

pathDoesNotExistError.parts ⇒ Array.<string>

Get the non-existent path parts.

Kind: instance property of PathDoesNotExistError
Returns: Array.<string> - pathParts - path split by system path seperator.

pathDoesNotExistError.color ⇒ boolean

Get the color setting.

Kind: instance property of PathDoesNotExistError
Returns: boolean - color - indicates if the error message will be colorized

pathDoesNotExistError.fsError ⇒ Error

Get the original FS error object.

Kind: instance property of PathDoesNotExistError
Returns: Error - fsError

PathDoesNotExistError.message(path, [fsError], [color]) ⇒ string

Generate a message for PathDoesNotExistError.

Kind: static method of PathDoesNotExistError
Returns: string - message - error message

| Param | Type | Default | Description | | --- | --- | --- | --- | | path | string | | path that does not exist. | | [fsError] | string | Error | | original native error or native message. | | [color] | boolean | true | colorizes message. |

Example

const message = PathDoesNotExistError.genMessage('/some/path')

console.log(message)

renderAssets(params) ⇒ Promise

Renders a map of { [dest]: src } path pairs representing static assets, either files or folders.

Kind: global function
Returns: Promise - p

| Param | Type | Description | | --- | --- | --- | | params | object | params. | | params.assets | object | asset dest paths key'ed by src path. Source paths starting with ~ are assumed module paths, and loaded via requireDynamicModule. | | params.srcPath | string | absolute path to asset src folder. | | params.buildPath | string | absolute path to asset build folder. | | [params.requirePath] | string | path to directory containing node_modules; used to resolve module assets, not passed to require.resolve! | | [params.quiet] | boolean | if false, progress is logged to the. console. | | [params.dry] | boolean | if true, progress is logged but not files are modified. |

Example (rendering assets to `public/`)

renderAssets({
  dry: true,
  quiet: false,
  requirePath: path.join(__dirname, '../'),
  buildPath: path.join(__dirname, '../public'),
  srcPath: path.join(__dirname, '../res/assets'),
  assets: {
    fonts: 'fonts', // asset folder
    'css/highlightjs': '~highlight.js/styles' // module folder
  }
})

renderStyles(params) ⇒ Promise

Renders a map of { [dest]: src } path pairs representing SCSS stylesheets.

Kind: global function
Returns: Promise - p - resolves to array of rendered CSS stylesheets

| Param | Type | Description | | --- | --- | --- | | params | object | params. | | params.styles | object | scss stylesheet dest paths key'ed by src path. | | params.includePaths | Array.<string> | array of absolute include paths to resolve @import statements. | | params.srcPath | string | absolute path to scss src folder. | | params.buildPath | string | absolute path to scss build folder. | | [params.quiet] | boolean | if false, progress is logged to the. console. | | [params.dry] | boolean | if true, progress is logged but not files are modified. |

Example (rendering styles to `public/css`)

renderStyles({
  dry: true,
  quiet: false,
  requirePath: path.join(__dirname, '../'),
  buildPath: path.join(__dirname, '../public/css'),
  srcPath: path.join(__dirname, '../res/styles'),
  styles: {
   'index.css': 'index.scss'
  }
})

explodePath(params) ⇒ Array.<strings>

Generates an array of paths from '/' up to the provided path.

Kind: global function
Returns: Array.<strings> - paths

| Param | Type | Default | Description | | --- | --- | --- | --- | | params | object | | params | | params.fromPath | string | | path to explode. | | [params.directory] | boolean | | indicates basePath is a directory; if not provided, the path is checked to resolve directory/file. | | [params.prefix] | string | "''" | prefix for all generated paths. | | [params.suffix] | string | "''" | suffix for all generated paths. | | [params.paths] | Array.<Array> | [] | target array to append generated paths too |

Example

await explodePath(__dirname, { prefix: '/', suffix: 'node_modules' })
const module = require.resolve(moduleName, { paths: searchPaths })

fsStat(path, [returnError]) ⇒ Promise

Safe wrapper for fs.stat with returns null or Error on failure instead of throwing.

Kind: global function
Returns: Promise - p - resolves to Stats, null, or Error object on failure.

| Param | Type | Default | Description | | --- | --- | --- | --- | | path | string | | path to pass to fs.stat | | [returnError] | boolean | false | if true, Error object is returned on failure instead of null. |

Example

const _isNull = require('lodash/isNull')
const _isError = require('lodash/isError')

info = await statPath('/some/path')

if (_isNull(info)) {
  console.log('path does not exist')
} else {
  console.log('path stats: ', JSON.stringify(info))
}

info = await statPath('/some/path', true)

if (_isError(info)) {
  console.error(info.stack)
} else {
  console.log('path stats: ', JSON.stringify(info))
}

getGitIgnore(config) ⇒ ignore

Attempts to load any .gitignore file in the configured content root and returns a configured instance of ignore.

Kind: global function
Returns: ignore - ignore

| Param | Type | Description | | --- | --- | --- | | config | Config | configuration data, with basePath set. |

Example (load `.gitignore` and filter paths)

const nodes = {}
const ig = await getGitIgnore(config)
const allNodes = await fs.readdir(srcPath, { withFileTypes: true })

allNodes
  .filter(n => n.isFile() || n.isDirectory())
  .forEach((n) => { nodes[n.name] = n })

const visibleNodes = excludeGitIgnore
  ? ig.filter(_keys(nodes)).map(n => nodes[n])
  : _keys(nodes).map(n => nodes[n])

// do something with visibleNodes array...

getLogger(scope) ⇒ Signale

Creates a new scoped signale logger instance.

Kind: global function
Returns: Signale - l

| Param | Type | Description | | --- | --- | --- | | scope | string | scope |

Example

const l = getLogger('template:render-md')

getRelativePath(absPath, config) ⇒ string

Converts the provided absolute path to a path relative to the configured content root, with a / prefix for linking in rendered HTML.

Kind: global function
Returns: string - relPath

| Param | Type | Description | | --- | --- | --- | | absPath | string | absolute path | | config | Config | config |

Example

const { state } = config
const { template } = state
const { genRawSrcMarkdown } = template
const relPath = getRelativePath('/home/user/markdown-it/README.md', config)

await genRawSrcMarkdown({ relPath, ...genData })

logModuleResolved(moduleName, modulePath, [params])

Logs successful module resolution.

Kind: global function

| Param | Type | Default | Description | | --- | --- | --- | --- | | moduleName | string | | name of module. | | modulePath | string | | path to module. | | [params] | object | {} | optional params | | [params.logger] | Signale | | signale logger instance, defaults to plain unscoped logger. | | [params.lType] | string | "'debug'" | signale logger type to use. | | [params.loaded] | boolean | | indicates if module was loaded or only the path was resolved. | | [params.color] | boolean | | enables colorized output. |

Example (log module resolution)

logModuleResolved('http-server-md', process.cwd(), { color: false })

resolveGlobal(moduleName, [params]) ⇒ string | null

Safe wrapper around external:resolve-global that returns null on failure instead of throwing.

Kind: global function
Returns: string | null - globalModulePath

| Param | Type | Description | | --- | --- | --- | | moduleName | string | module to resolve globally. | | [params] | object | optional params | | [params.prefix] | string | resolved path prefix | | [params.suffix] | string | resolved path suffix |

Example

const modulePath = resolveGlobal('http-server-md')

requireModule(moduleName, config, [load]) ⇒ object | function | string

Attempts to resolve a module by name from the configured basePath, searching every directory up from it, along with the local node_modules folder. Call with load false to get the module path.

If the module cannot be resolved by walking the path, an attempt is made to load it from the global module path.

Kind: global function
Returns: object | function | string - module
Throws:

  • Error fails if the module is not resolved.

| Param | Type | Default | Description | | --- | --- | --- | --- | | moduleName | string | | name of module passed to require.resolve. | | config | Config | | configuration, with basePath set. | | [load] | boolean | true | if false, the resolved module path is returned instead of the loaded module. |

Example (load `markdown-it` anchor plugin)

const parserPlugin = requireModule('markdown-it-anchor', config)

resolveModule(moduleName, [paths]) ⇒ null | string

Safe wrapper around require.resolve that retuns null on failure instead of throwing an error.

Kind: global function
Returns: null | string - modulePath - null on failure.

| Param | Type | Default | Description | | --- | --- | --- | --- | | moduleName | string | | name of module to resolve path to. | | [paths] | null | Array.<string> | [] | paths to attempt resolve from; passed through _uniq. |

Example (resolve from cwd)

const modulePath = resolveModule('http-server-md-lib', [process.cwd()])

if (_isEmpty(modulePath)) {
  return
}

const module = require(modulePath)

readAsset(config, assetPath) ⇒ AssetData

Attempts to read a template asset from disk.

Kind: global function
Returns: AssetData - data

| Param | Type | Description | | --- | --- | --- | | config | Config | configuration, with basePath set. | | assetPath | string | relative to template public folder. |

Example (read and serve template asset)

const serveAsset = async (ctx, url, config) => {
  try {
    const { type, src } = await readAsset(config, url)

    ctx.body = src
    ctx.type = type
    ctx.renderType = 'asset'

    return true
  } catch (e) {
    return false
  }
}

AssetData : object

Kind: global typedef
Properties

| Name | Type | Description | | --- | --- | --- | | src | Buffer | asset contents | | type | string | mime type, defaults to 'text/plain' if not resolved. |