reasonable-filename
TypeScript icon, indicating that this package has built-in type declarations

1.2.1 • Public • Published

A simple JavaScript/TypeScript utility to reasonably validate file and folder names.

# NPM
npm install reasonable-filename
# Yarn
yarn add reasonable-filename
# Bun???
bun add reasonable-filename
import isReasonableFilename from 'reasonable-filename'

console.log(isReasonableFilename('file.c')) // true
console.log(isReasonableFilename('LPT2.tar.gz')) // false (invalid on Windows)

// If you want to access the regex directly...
// This doesn't do length checks.
import { unreasonableFilenameRegex } from 'reasonable-filename'
console.log(!unreasonableFilenameRegex.test('file.c')) // true

How is this better than valid-filename by sindresorhus?

  • Checks for things valid-filename doesn't, for example, Windows reserved keywords with extensions
  • Does not incorrectly disallow COM0 and LPT0
  • Clearly specifies exactly what guarantees it provides in the README
  • Has 31 unit tests based on actual results across platforms and filesystems

Sure, this is less popular, but even if I die and stop providing support, reasonable-filename is small enough that you can easily copy it into your project.

I love you sindresorhus!

Rules

  • Cannot end with . (this also rules out . and .. as names)
  • Cannot start or end with whitespace
  • Cannot contain \/:*?"<>|
  • Cannot contain non-printable characters (U+0000 to U+001F)
  • The portion before the first ., with trailing whitespace trimmed, cannot case-insensitively match a Windows reserved keyword such as CON and LPT2
  • Must be 255 characters or fewer, and at least 1 character

Why only reasonable?

Filenames are super weird. Different platforms have different requirements, with Windows being the strictest. Windows in particular is a backwards compatibilty behemoth with a lot of strange reserved names. As such, it's impossible to create a perfect test of filename compatibility on every platform.

This package gets as close as I can. It can't provide any security guarantees beyond what is specified under Rules above, but but it will help validate most cases.

Contributions

Spot a rule we're missing or a mistake in the current ruleset? Feel free to submit a PR or issue! I will review everything in less than 24 hours from issue or pull request submission.

Package Sidebar

Install

npm i reasonable-filename

Weekly Downloads

96

Version

1.2.1

License

MIT

Unpacked Size

9.29 kB

Total Files

15

Last publish

Collaborators

  • archmaster