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

carna

v8.1.29

Published

Global management of the config files.

Downloads

124

Readme

Carna

npm David Release GitHub

Global management of the config files

Installation

npm install carna -D

Never install carna globally, but always into the local context.

Quick Start

To run carna, execute the following command:

npx carna

Commands

The following commands are available:

| Commands | Description | | ------------------------------ | -------------------------------- | | analyse | Run the code quality tools | | test | Run the tests | | license | Checks for incompatible licenses | | build | Build the application | | start | Run a script | | manage | Run general conditions check | | ci | Run different Tasks as unit | | git | Handler for the git hooks |

For the help text, execute npx carna --help and the individual commands npx carna <command> --help.

Global options

| Options | short | Description | | --------- | ----- | ------------------------- | | --ci | | Run carna in CI mode | | --help | | Show help | | --verbose | -v | Print info messages | | --vvv | | Print info/debug messages | | --version | | Show version number |

Hook system

Each time a command is executed, different hooks are called. Every hook corresponds to a script in the npm package.json.

The hooks have the structure <pre|post>carna:<task>.

If you add the option --verbose when calling a command, all possible hooks will be displayed.

The analyse task

Run the code quality tools

When the command is executed, only the changed or new files are checked. If all files are to be checked, then the parameter --all must be set. If the .git folder does not exist, all files are always checked.

Options

| Options | short | Description | | ------- | ----- | ------------------------------------------- | | --all | -a | Checks all files | | --path | -p | Checks only files in the specified path | | --only | -o | Run a single code quality tool | | | | Choices: eslint, prettier, typescript |

Exit codes

| Exit code | Description | | --------- | ----------- | | 0 | Success | | 1 | task failed |

The test task

Runs the unit, integration and other tests with jest.

Each subfolder in the tests folder is a test project, such as unit or integration test. By default, the projects unit, integration and e2e are created. For a new test project, a folder must be created in the tests folder and the jest-config must be adjusted.

The test projects are executed in the following order: unit, integration, e2e and the rest alphabetically.

The Code Coverage Threshold can be configured in .carnarc.json.

For helper functions and/or functions for multiple test projects can be stored in the folder test/shared. This folder is not interpreted as a test project. Likewise, the folder test/type is ignored, since this is for type tests and are checked by Typescript directly.

If there is an pre.[js|ts] or post.[js|ts] file in the test project folder, then it is called before or after from the respective test project.

If there is an setupTests.[js|ts] file in the test project folder, then the file is called before each test file.

Options

| Options | short | Description | | ---------------- | ----- | ------------------------------------------------------------------------- | | --project | -p | Run only the tests of the specified projects | | --runInBand | -i | Run all tests serially in the current process | | --updateSnapshot | -u | Use this flag to re-record every snapshot that fails during this test run | | --watch | -w | Watch files for changes and rerun tests related to changed files |

Exit codes

| Exit code | Description | | --------- | ----------- | | 0 | Success | | 1 | task failed |

The build task

Build the application

Options

| Options | short | Description | | ------- | ----- | ---------------------------------------------------------------------------- | | --watch | -w | Watch files for changes and rebuild the changed files (only for monorepo's). |

Exit codes

| Exit code | Description | | --------- | ----------- | | 0 | Success | | 1 | task failed |

The start task

Calls the application directly, without build process.

Options

| Options | short | Description | | -------------------- | ----- | --------------------------------------------------------------------------- | | --script | -s | Script to be called (default: src/index.[ts\|js]) | | --watch | -w | Watch files for changes and rerun script | | --build-dependencies | -b | In a monorepo, all packages are built beforehand | | --clear-console | -c | Clear console on each restart (only in watch mode) | | --pino-pretty | -p | Enables the pino log formatter |

Exit codes

| Exit code | Description | | --------- | ----------- | | 0 | Success | | 1 | task failed |

The manage task

The task analyzes...

  • ...the structure of package.json. In the carna config file the subtask can be configured under the point packageLint.

  • ...if there are orphaned packages. In the carna config file the subtask can be configured under the point deps.

  • ...the license compatibility of each dependency. In the carna config file the subtask can be configured under the point license. The license is read from the package.json or from another source from the dependency. The compatibility list is used to validate the license for compatibility.

    If you think that an assignment is incorrect or can be added, please submit a pull request with the change in the compatibility list or license list.

    If the project uses an unknown license, the compatibility check will be disabled.

    Note: License compatibility checking is only a suggestion and it is not legal advice. If you would like to have a legally binding assessment, please contact a lawyer.

Options

None

Exit codes

| Exit code | Description | | --------- | ----------- | | 0 | Success | | 1 | task failed |

The ci task

Run build, analyse, tests, license and deps tasks. This command is intended for execution in a CI.

Options

| Options | short | Description | | ------- | ----- | --------------------------------------- | | --build | -b | Executes additionally the build process |

Exit codes

| Exit code | Description | | --------- | ----------- | | 0 | Success | | 1 | task failed |

The git task

The tasks will be automatically called by husky (via git hooks).

The following hooks exists:

  • commit: Checks the files in staged with a part of analyse command (git-hook: pre-commit).
  • msg: Checks the git commit message and run the other part of analyse and test, license and deps (git-hook: commit-msg).

Options

| Options | Description | | ------- | ---------------------------------------------------- | | --hook | The git hook to execute (Choices: commit, msg) | | --edit | Path to the COMMIT_EDITMSG file (only by msg hook) |

Exit codes

| Exit code | Description | | --------- | ----------- | | 0 | Success | | 1 | task failed |

Carna config file

Carna can be adjusted via the configuration file .carnarc.json. The file is structured as follows

{
  deps: {
    // Disables the verification
    disable: false,

    ignore: {
      // Ignores the packets when checking whether a packet is used or not
      packages: [],
    },
  },

  license: {
    // Disables the verification
    disable: false,

    // Whether to merge or replace the existing list with the list defined here
    replaceAliaseList: false,
    replaceCompatibleList: false,
    replaceHeuristicList: false,

    // If the license cannot be extracted, a license can be defined here
    aliases: {
      // <package-name>: { <version>: <existing license name> }
    },

    // List which license is compatible with the other licenses
    compatibilities: {
      // <license-name>: ['<compatible license>', '<...>'],
    },

    // The license name must be entered at the top of the combalitity list
    // Important: The name should **not** be an existing license
    heuristics: {
      // Searches with the regexp in the corresponding files (z.B. license/readme/markdown files)
      // <license-name>: /<search-regexp>/u
    },

    ignore: {
      // The packages are ignored during the license check
      packages: [],
    },
  },

  packageLint: {
    // Disables the verification
    disable: false,
  }

  log: {
    ignore: {
      // Will be passed 1to1 to --ignore argument from pino-pretty
      keys: [],
    },
  },

  test: {
    coverage: {
      // Overwrites default coverage threshold (value: number or tuple with two numbers)
      threshold: {
        statements: 90,
        branches: 90,
        functions: 90,
        lines: [50, 90],
      },
    },
  },
}

Default config files

It is possible to overwrite the default config files.

The following files can be overwritten and must be created in the root folder of the project. If the existing configuration is only to be extended, the corresponding code block must be copied into the file.

.commitlintrc.json

{
  "extends": "@kettil"
}

.eslintrc.json

{
  "extends": "@kettil"
}

.prettierrc.json

The configuration cannot be extended, but is overwritten.

For VS Code users the entry prettier.configPath in the .vscode/settings.json must be removed.

{
  "printWidth": 120,
  "tabWidth": 2,
  "useTabs": false,
  "semi": true,
  "singleQuote": true,
  "trailingComma": "all",
  "bracketSpacing": true,
  "arrowParens": "always",
  "overrides": [
    { "files": "{*.ts,*.tsx}", "options": { "parser": "typescript" } },
    { "files": "{*.json,.prettierrc}", "options": { "parser": "json" } },
    { "files": "*.md", "options": { "parser": "markdown" } },
    { "files": "*.scss", "options": { "parser": "scss" } },
    { "files": ["*.yml", "*.yaml"], "options": { "parser": "yaml" } },
    { "files": "*.html", "options": { "parser": "html" } }
  ]
}