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

@seneca/maintain

v0.1.0

Published

Run maintenance tests for Seneca plugins.

Downloads

2,416

Readme

Seneca

Run standardisation tests on your Seneca.js plugin.

seneca-maintain

| Voxgig | This open source module is sponsored and supported by Voxgig. | | ---------------------------------------------------- | --------------------------------------------------------------------------------------- |

This module is designed for contributors to the Seneca family of plugins. If you wish, you may make use of this to scan your own plugin prior to publishing to see if it meets our standardisation specifications.

If you're using this module, and need help, you can:

If you are new to Seneca in general, please take a look at senecajs.org. We have everything from tutorials to sample apps to help get you up and running quickly.

Install

npm install -D @seneca/maintain

Run the above command from your plugin's root directory to install this tool. The -D flag (alternatively --save-dev) marks it as a devDependency - meaning it is used during development and not as part of production.

Check out the official docs on dependencies and devDependencies here.

Quick Example

const { Maintain } = require('@seneca/maintain')

Maintain()

This maintenance tool can be run alongside existing tests, by including the above code snippet within your test script (usually index.test.js or similar).

Run the script with Jest (see More Examples below), or simply with node and the path to your test file:

$ node <index.test.js>

On success, nothing will be printed to console, and the script will continue as normal. On a fail, the script will throw a custom error with details of what went wrong.

More Examples

Return pass/fail boolean

If you're only looking for a simplified output in the form of a boolean (all checks pass/at least one check has failed), then you only need to set the returnBool parameter to false.

let maintainBool = await Maintain({returnBool:true})

Specify path to run checks on

If for example you need to run the maintain tool on one directory from another, it's possible to specify a root path. This should be the top level of the local package to test, ie. where the package.json and README.md files reside. Note that it is possible to step up levels from the current path using the .. syntax. A forward slash must preceed any path.

await Maintain({runPath:'/../path/to/package'})

If this optional parameter is not defined, the tool will default to running from the directory it was launched from (process.cwd()).

Running Custom Check List

It is possible to run only a select few checks, or to exclude certain ones, by making use of the optional parameters for the Maintain() function - an include array and an exclude array.

include - If checks are denoted in this array, they will be the only checks run.

exclude - Any checks denoted in this array will be excluded from the run.

To make use of these functionalities, simply include an object as the argument for the Maintain function - the key being the name of the array, and the value being the array of check names itself.

// to only run the Code of Conduct checks
Maintain({ include: ['exist_codeconduct', 'version_codeconduct'] })

// to exclude the default branch check, but run every other check
Maintain({ exclude: ['check_default'] })

Using Jest testing framework

Using the standard tool as a test suite for Jest is simple - a one line addition to your test file is all you need. In order to make use of the custom include and exclude lists however, the function call must be wrapped in an async/await block.

import { Maintain } from '@seneca/maintain'

// Standard run
test('maintain', Maintain)

// With parameters
test('maintain', async () => {
  await Maintain({
    exclude: ['exist_codeconduct', 'version_codeconduct'],
  })
})

Configurations

Configurations are used to run additional checks based on the architecture of your specific plugin. At the moment, there are three configs - Base, JavaScript, and TypeScript. The base configuration is run by default, and the tool will apply language-specific configurations based on the language of your plugin. No action on your part is necessary.

CLI Tool (coming soon)

~~$ cli-maintain~~

Sample output :

Total checks for this configuration: 8

Failed checks: 2
  exist_codeconduct (why: file not found)
  version_codeconduct (why: file not found)

Please refer to the README.md document for descriptions of all checks.
https://github.com/senecajs/seneca-maintain/blob/main/README.md

Check Descriptions

| Name | Description | | ----------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | check_default | Your default branch should be named main, and not master. | | content_readme | Your README.md file should contain the word "Voxgig" somewhere in it. Voxgig are the sponsors and supporters of many Seneca modules and plugins. | | content_gitignore | Your .gitignore file should contain the string package-lock.json, as this file should not be shipped with production. | | exist_codeconduct | Your plugin should contain a CODE_OF_CONDUCT.md file at the top level. Please refer to Contributor Covenant for further details. | | exist_dist | This is a TypeScript configuration check. Your plugin should contain a top-level file named <plugin>.ts, where <plugin> matches "main": "dist/<plugin>.js" in your package.json. For example - a file named maintain.ts and a (package.json) main value of dist/maintain.js. Instances where <plugin> is equal to "index" are not accepted. | | exist_entry | This is a JavaScript configuration check. Your plugin should contain a top-level file named <plugin>.js, where <plugin> matches "main": "<plugin>.js" in your package.json. For example - a file named maintain.js and a (package.json) main value of maintain.js. Instances where <plugin> is equal to "index" are not accepted. | | exist_license | Your plugin should include a license file at the top level, simply named LICENSE - no file extension. | | exist_pkgjson | Your plugin should include a package.json file, at the top level. This check simply scans for its existence. | | exist_readme | Your plugin should contain a README.md file at the top level, named exactly README.md. | | readme_title | Your README.md file should contain a H1-level heading (denoted by a single hash (#) in Markdown), the value of which should be <package.name>, where <package.name> is the name taken from the "name" value in the package.json file. | | readme_headings | Your README.md file should contain at least eight H2-level headings (denoted by a double-hash (##) in Markdown). The names of these H2 headings should be the following (order need not be conserved): Install, Quick Example, More Examples, Motivation, Support, API, Contributing, Background. | | scoped_package | If your plugin is an official Seneca plugin and grouped under the SenecaJS GitHub organisation, then it must be scoped as such. For example - this module named senecajs/seneca-maintain is scoped as @seneca/maintain in the package.json file. | | test_pkgjson | Your package.json file should include a scripts.test key (a key named "test" nested within the "scripts" value). The value of this key is up to you. | | version_codeconduct | Your CODE_OF_CONDUCT.md file should contain the latest version of Contributor Covenant's Code of Conduct, as denoted here. |

Motivation

Support

Check out our sponsors and supporters, Voxgig, on their website here.

API

No API functionality is currently shipped with this tool.

Contributing

The SenecaJS org encourages participation. If you feel you can help in any way, be it with bug reporting, documentation, examples, extra testing, or new features, feel free to create an issue, or better yet - submit a Pull Request. For more information on contribution, please see our Contributing Guide.

Background

Check out the SenecaJS roadmap here!

License

Licensed under MIT.