Due to issues with the Internet.ee domain registry, our main domain, paste.ee, is currently disabled due to abuse reports. We are looking into alternative domains to continue operation, but for now the pastee.dev domain is the primary domain.
If you wish to blame someone, blame the scum using this site as a malware host.
Description: 60665491
Submitted on March 13, 2020 at 10:38 AM

pkg-name-check.js (JavaScript)

/**
 *  @title pkg-name-check
 *  @version 0.0.1
 *
 *  @fileoverview A utiliy script to help identify whether your chosen package
 *  name already exists with a similar name in the npm registry. See:
 *  https://blog.npmjs.org/post/168978377570/new-package-moniker-rules)
 *
 *  Prior to usage you'll need to:
 *
 *  1. Download npm registry (approx 124Mb of JSON) by running:
 *
 *     curl -X GET https://replicate.npmjs.com/_all_docs > /path/to/npm-registry.json
 *
 *  @example
 *     node path/to/pkg-name-check.js "<pkg-name>"
 */

const tick = process.platform === 'win32' ? '√' : '✔';
const cross = process.platform === 'win32' ? '×' : '✖';

const npmRegistry = require('./npm-registry.json');
const pkgName = process.argv[2];
const CHARSET = '[_\\.\\-]*?';

if (!pkgName) {
  console.log('\x1b[31mERR!\x1b[0m %s', 'pkg name argument must be provided.');
  process.exit(1);
}

// Construct the regex pattern.
const regex = RegExp(pkgName
    .split('')
    .map(function (char, i, arr) {

      // If last letter is `s` then add `?` qualifier (i.e. zero or one)
      // to test for non-plural instances.
      if (arr.length - 1 === i && char === 's') {
        char = char + '?'
      }

      // If character equals `-`, `_`, or `.` then add `*?` qualifier
      // (i.e. zero to unlimited) to test for names without `-`, `_`, or `.`
      return (char === '-' || char === '_' || char === '.') ? char + '*?' : char
    })

    // Insert $CHARSET between each letter
    .join(CHARSET)

     // Prefix string with $CHARSET
    .replace(/^/, CHARSET)

     // Suffix string with $CHARSET
    .replace(/$/, CHARSET)

    // Prefix string with ^
    .replace(/^/, '^')

    // Suffix string with `s` and `?` qualifier
    // (i.e. zero or one) to test for plural names.
    .concat('[s]?$')
    , 'g');


const result = npmRegistry.rows
    .filter(function (pkg) {
      return regex.test(pkg.id);
    })
    .map(function (pkg) {
      return pkg.id;
    });


if (result.length) {
  console.log('\x1b[31m%s\x1b[0m  "%s" is unavailable:', cross, pkgName);
  console.log(result.join('\n'));
} else {
  console.log('\x1b[32m%s\x1b[0m  "%s" is available.', tick, pkgName);
}