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

standardlint

v1.2.1

Published

Extensible standards linter and auditor.

Downloads

135

Readme

StandardLint 📏

Build Status Quality Gate Status CodeScene Code Health CodeScene System Mastery codecov Maintainability

Extensible standards auditing and linting tool. Nags like your mother but is probably a lot more technical.


With StandardLint, you use Checks to inform what standards you want to inspect, in effect being your standards yardstick:

A fact or standard by which you can judge the success or value of something. — Cambridge Dictionary

StandardLint makes it convenient and easy to set up guardrails and guidelines for development teams and making sure they follow your house conventions.

The result of a run could look like this:

✅ PASS: Diagrams
✅ PASS: Changelog
🛎️ No custom path assigned to check "Diagrams" - Using default path "diagrams"...
⚠️ WARN: Diagrams
✅ PASS: Lock files
✅ PASS: License
❌ FAIL: Code owners
❌ FAIL: Contribution information
🛎️ No custom path assigned to check "IAC configuration" - Using default path "serverless.yml"...
✅ PASS: IAC configuration
🛎️ No custom path assigned to check "SLOs" - Using default path "manifest.json"...
⚠️ WARN: SLOs
🛎️ No custom path assigned to check "Tags" - Using default path "manifest.json"...
✅ PASS: Tags
🛎️ No custom path assigned to check "CI configuration" - Using default path ".github/workflows/main.yml"...
✅ PASS: CI configuration
✅ PASS: Security information
🛎️ No custom path assigned to check "Service metadata" - Using default path "manifest.json"...
✅ PASS: Service metadata

Relation to projects like ESLint

The majority of StandardLint checks are meant to assess the overall architecture, for example presence of certain files or documentation. While StandardLint has a few checks that inspect code (throwing errors and using console), the majority of such use cases are better handled with something like ESLint.

StandardLint GitHub Action

There's a ready-to-use StandardLint GitHub Action in the Marketplace if you really want the minimum hassle. Plus, you get a great visual overview of your checks!

Usage

Installation

Install StandardLint with npm install standardlint.

Configuration

Before running StandardLint you need a configuration. This is a basic JSON file with the name standardlint.json. Place it in the root of your project.

The format is:

{
  "basePath": "",
  "checks": [],
  "defaultSeverity": ""
}

| Key | Required | Default | Example | Description | | ----------------- | -------- | --------------- | ----------------------------------------- | ----------------------------------------------------------------------- | | basePath | No | . | ./project_dir/ | Sets the base path for any file lookups. | | ignorePaths | No | [] | ["/tests/", "/src/problematic-file.ts"] | Paths that will be ignored for some checks. Does not support globbing. | | checks | Yes | - | ["checkForPresenceLicense"] | A list of checks to run, either using string or object form. | | defaultSeverity | No | error | warn | Sets the default severity level for any issues. | | path | No | Multiple values | api/schema.yml | Sets the exact path to a resource. Only used optionally by some checks. |

Base path

If you for some reason keep your project files "lower" than in the root where you want to do file lookups, you can add this optional argument.

It's recommended you do not change this unless you know what you are doing.

Ignore paths

This provides the possibility to ignore certain paths.

These paths will be respected and discarded by the following checks:

  • checkForConsoleUsage
  • checkForPresenceTests
  • checkForThrowingPlainErrors

Checks

Checks can be provided in string form or object form:

  • String format: ["checkForDefinedTags"]
  • Object format: [{ "name": "checkForPresenceContributing", "severity": "warn" }]

You need to use the object form if you want to override the overall severity level, and use the check's severity level.

You can also combine the formats for different checks.

  • ["checkForDefinedTags", { "name": "checkForPresenceContributing", "severity": "warn" }]

Some checks also provide the optional path key. Use this when you want to override default values, for example to the location of an API schema.

  • [{ "name": "checkForPresenceApiSchema", "path": "api/schema.yml" }]

Default severity

This can be either warn or error (the default value). Using it in error mode means that any failure will produce an error, while the warn mode simply warns for any non-compliance.

Usage

From the command line

It's super easy to use StandardLint from the CLI! Just run npx standardlint and it will use the configuration in your project.

Outputting results into a JSON file

To output the results into standardlint.results.json, run npx standardlint --output.

Importing StandardLint as a Node package

You can also import and use StandardLint like a conventional Node package.

It exposes a factory function to vend a new StandardLint instance with a check() method.

If using it as an imported package, you will need to provide either a configuration file (for example loaded with fs) or the actual configuration as an object.

import { createNewStandardLint } from 'standardlint';

const config = {
  checks: [
    { name: 'checkForPresenceContributing', severity: 'warn' },
    { name: 'checkForPresenceLicense', severity: 'error' }
  ]
};

const standardLint = createNewStandardLint(config);
const results = standardLint.check();

console.log(results);

Using static file trees instead of reading from disk

If you want to use a static representation of paths rather than actually checking on disk, then this is possible using the filetree parameter.

const standardlint = createNewStandardLint(config, ['path/to/file.js']);
Outputting results into a JSON file

To output the results into standardlint.results.json, run:

const standardLint = createNewStandardLint(config);
const results = standardLint.check(true); // <--- Adding true here will output the results to disk

Available checks

Service metadata definition checks assume you are using Catalogist or something with the same manifest file structure.

Any check with a default value can be overridden using the path argument.

all

Runs all checks.

checkForConflictingLockfiles

Checks if there are conflicting Node package lock files (i.e. both a Yarn lock file and an NPM lock file).

checkForConsoleUsage

Checks if console is used, e.g. console.log() and similar. This is useful when you want to ensure a more comprehensive logging approach is used.

Note that this uses a naive solution so even just a mention of console.log() (or similar) will fail this check.

Will respect ignorePaths options.

Default: src

checkForDefinedRelations

Checks if the service metadata defines system relations.

Default: manifest.json

checkForDefinedServiceLevelObjectives

Checks if the service metadata defines Service Level Objectives.

Default: manifest.json

checkForDefinedTags

Checks if the service metadata defines tags.

Default: manifest.json

checkForPresenceApiSchema

Checks if there is an API schema.

Default: api/schema.json

checkForPresenceChangelog

Checks if there is a CHANGELOG.md file.

checkForPresenceCiConfig

Checks if there is a CI/CD configuration file.

Default: .github/workflows/main.yml

checkForPresenceCodeowners

Checks if there is a CODEOWNERS file.

checkForPresenceContributing

Checks if there is a CONTRIBUTING.md file.

checkForPresenceDiagramsFolder

Checks if there is a diagrams folder with diagram files in it. The check assumes .drawio files.

Default: diagrams

checkForPresenceIacConfig

Checks if there is Infrastructure-as-Code configuration present.

Default: serverless.yml

checkForPresenceLicense

Checks if there is a LICENSE.md file.

checkForPresenceReadme

Checks if there is a README.md file.

checkForPresenceSecurity

Checks if there is a SECURITY.md file.

checkForPresenceServiceMetadata

Checks if there a service metadata file present.

Default: manifest.json

checkForPresenceTemplateIssues

Checks if there is a template for GitHub issues.

Default: .github/ISSUE_TEMPLATE/issue.md

checkForPresenceTemplatePullRequests

Checks if there is a template for GitHub Pull Requests.

Default: .github/ISSUE_TEMPLATE/pull_request.md

checkForPresenceTests

Checks if there are any tests in the provided location. This will match anything ending in (test|spec).(ts|js).

Default: tests

Will respect ignorePaths options.

checkForThrowingPlainErrors

Checks if any file uses throw Error or throw new Error. This is meant to push toward the use of actual loggers, rather than plain console output.

Will respect ignorePaths options.


Ideas for improvements

  • Service metadata: Do you link to observability resources (logs/metrics/traces/dashboards etc.)?
  • Support for external config