{"_id":"is-safe-filename","_rev":"2-b7ec3b499d4985847e125515b17dc90b","name":"is-safe-filename","dist-tags":{"latest":"0.1.1"},"versions":{"0.1.0":{"name":"is-safe-filename","version":"0.1.0","keywords":["filename","safe","secure","path","traversal","security","validate","check","local"],"author":{"url":"https://sindresorhus.com","name":"Sindre Sorhus","email":"sindresorhus@gmail.com"},"license":"MIT","_id":"is-safe-filename@0.1.0","maintainers":[{"name":"sindresorhus","email":"sindresorhus@gmail.com"}],"homepage":"https://github.com/sindresorhus/is-safe-filename#readme","bugs":{"url":"https://github.com/sindresorhus/is-safe-filename/issues"},"dist":{"shasum":"740c5f147adbffb6807cd61a798004230b5dfbb6","tarball":"https://registry.npmjs.org/is-safe-filename/-/is-safe-filename-0.1.0.tgz","fileCount":5,"integrity":"sha512-sHJhnOtbNZw/t54s31NnbkkcwfHzTOpgi5n1bnlLu+40p/gU3ZHu+JX8CjIsnWUQkqWtvmNpJqCYUyaaKSPLZw==","signatures":[{"sig":"MEUCIQCs5jaKa0jIRBM1fApb3eQPuq0DuHx34f/ybh1J7zNwRwIgBEHhMOCDC/etiUUqB44GlEiuP2gWe3mjPjqWuGXalN4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4177},"type":"module","types":"./index.d.ts","engines":{"node":">=20"},"exports":{"types":"./index.d.ts","default":"./index.js"},"funding":"https://github.com/sponsors/sindresorhus","gitHead":"6b895ae1473425300ae3b6d0d32bcba9fe1d63f1","scripts":{"test":"xo && ava && tsc index.d.ts"},"_npmUser":{"name":"sindresorhus","email":"sindresorhus@gmail.com"},"repository":{"url":"git+https://github.com/sindresorhus/is-safe-filename.git","type":"git"},"_npmVersion":"11.7.0","description":"Check if a filename is safe to use in a path join operation","directories":{},"sideEffects":false,"_nodeVersion":"25.3.0","_hasShrinkwrap":false,"devDependencies":{"xo":"^0.60.0","ava":"^6.2.0","typescript":"^5.7.3"},"_npmOperationalInternal":{"tmp":"tmp/is-safe-filename_0.1.0_1769258734407_0.33149123976551764","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"is-safe-filename","version":"0.1.1","description":"Check if a filename is safe to use in a path join operation","license":"MIT","repository":{"type":"git","url":"git+https://github.com/sindresorhus/is-safe-filename.git"},"funding":"https://github.com/sponsors/sindresorhus","author":{"name":"Sindre Sorhus","email":"sindresorhus@gmail.com","url":"https://sindresorhus.com"},"type":"module","exports":{"types":"./index.d.ts","default":"./index.js"},"sideEffects":false,"engines":{"node":">=20"},"scripts":{"test":"xo && ava && tsc index.d.ts"},"keywords":["filename","safe","secure","path","traversal","security","validate","check","local"],"devDependencies":{"ava":"^6.2.0","typescript":"^5.7.3","xo":"^0.60.0"},"gitHead":"fd3603768a6bcae949f9e1df102abdd05bd4bdfe","types":"./index.d.ts","_id":"is-safe-filename@0.1.1","bugs":{"url":"https://github.com/sindresorhus/is-safe-filename/issues"},"homepage":"https://github.com/sindresorhus/is-safe-filename#readme","_nodeVersion":"25.3.0","_npmVersion":"11.7.0","dist":{"integrity":"sha512-4SrR7AdnY11LHfDKTZY1u6Ga3RuxZdl3YKWWShO5iyuG5h8QS4GD2tOb04peBJ5I7pXbR+CGBNEhTcwK+FzN3g==","shasum":"fb22eead097c614c47aa674de5d79a1648a53e66","tarball":"https://registry.npmjs.org/is-safe-filename/-/is-safe-filename-0.1.1.tgz","fileCount":5,"unpackedSize":5237,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDcTz0d/igFZGjBp3HniEabEQmiT7s1wW0KTcP6lr1B6wIgZFe1w9ggWBj3RoAaBIWV+FrFl9WmU7G2LgPcTnYSyJQ="}]},"_npmUser":{"name":"sindresorhus","email":"sindresorhus@gmail.com"},"directories":{},"maintainers":[{"name":"sindresorhus","email":"sindresorhus@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/is-safe-filename_0.1.1_1769327059893_0.26505740880954476"},"_hasShrinkwrap":false}},"time":{"created":"2026-01-24T12:45:34.406Z","modified":"2026-01-25T07:44:20.146Z","0.1.0":"2026-01-24T12:45:34.571Z","0.1.1":"2026-01-25T07:44:20.027Z"},"bugs":{"url":"https://github.com/sindresorhus/is-safe-filename/issues"},"author":{"name":"Sindre Sorhus","email":"sindresorhus@gmail.com","url":"https://sindresorhus.com"},"license":"MIT","homepage":"https://github.com/sindresorhus/is-safe-filename#readme","keywords":["filename","safe","secure","path","traversal","security","validate","check","local"],"repository":{"type":"git","url":"git+https://github.com/sindresorhus/is-safe-filename.git"},"description":"Check if a filename is safe to use in a path join operation","maintainers":[{"name":"sindresorhus","email":"sindresorhus@gmail.com"}],"readme":"# is-safe-filename\n\n> Check if a filename is safe to use in a path join operation\n\nA safe filename is one that won't escape the intended directory via path traversal.\n\nThis is a purely lexical check. It does not account for symlinks that may exist on the filesystem.\n\n## Install\n\n```sh\nnpm install is-safe-filename\n```\n\n## Usage\n\n```js\nimport isSafeFilename from 'is-safe-filename';\n\nisSafeFilename('foo');\n//=> true\n\nisSafeFilename('../foo');\n//=> false\n\nisSafeFilename('foo/bar');\n//=> false\n```\n\n## API\n\n### isSafeFilename(filename)\n\nReturns `true` if the filename is safe.\n\n### assertSafeFilename(filename)\n\nThrows an error if the filename is not safe.\n\n```js\nimport {assertSafeFilename} from 'is-safe-filename';\n\nassertSafeFilename('foo');\n// No error\n\nassertSafeFilename('../foo');\n//=> Error: Unsafe filename: \"../foo\"\n```\n\n### unsafeFilenameFixtures\n\nA list of common unsafe filename fixtures for testing path traversal vulnerabilities.\n\nUseful for testing that your code properly rejects unsafe filenames.\n\n```js\nimport {unsafeFilenameFixtures} from 'is-safe-filename';\n\nfor (const filename of unsafeFilenameFixtures) {\n\tassert.throws(() => myFunction(filename));\n}\n```\n","readmeFilename":"readme.md"}