{"_id":"purl","_rev":"29-c01af4670cd41536dc3de590c5be0ab5","name":"purl","dist-tags":{"latest":"2.2.1"},"versions":{"0.0.1":{"name":"purl","version":"0.0.1","author":{"url":"purl.re","name":"purl.re","email":"purl@purl.re"},"_id":"purl@0.0.1","maintainers":[{"name":"purl","email":"purl@purl.re"}],"homepage":"purl.re","dist":{"shasum":"80e96f3c4a66d8477f8f8a8545367aabb2907d8f","tarball":"https://registry.npmjs.org/purl/-/purl-0.0.1.tgz","integrity":"sha512-+fmnXg/elzGY8Vq2/tnfJwCDvda2HtL8K82n/Nfst/U8iVaWnMvTHvuMNMZmhat+4DwgMQOB5dq5ZdrGiSvqpg==","signatures":[{"sig":"MEUCIQC5v7GBIiGd5Hfxkph/jlQVTanQ0NBJGDS7x9FMVc4FTAIgQyEHFje3skABZyCujJ7GN8dDWlliL5NAws6Eox+Taiw=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"index.js","engines":{"node":"*"},"_npmUser":{"name":"purl","email":"purl@purl.re"},"repository":{"url":"purl.re"},"_npmVersion":"1.1.16","description":"purl Reunion (Full Translations)","directories":{},"_nodeVersion":"v0.6.14","dependencies":{},"_defaultsLoaded":true,"devDependencies":{},"_engineSupported":true,"optionalDependencies":{}},"1.0.1":{"name":"purl","version":"1.0.1","keywords":["url","parse","browser","javascript","isomorphic"],"author":{"name":"intuitivcloud Engineering","email":"engineering@intuitivcloud.com"},"license":"BSD-3-Clause","_id":"purl@1.0.1","maintainers":[{"name":"intuitivcloud","email":"engineering@intuitivcloud.com"}],"homepage":"https://github.com/intuitivcloud/purl#readme","bugs":{"url":"https://github.com/intuitivcloud/purl/issues"},"dist":{"shasum":"696e809c53ec90fcfdc95de7a7c9f328276873a8","tarball":"https://registry.npmjs.org/purl/-/purl-1.0.1.tgz","integrity":"sha512-JkExedyij0QUm61G/ThT+ZBlJW0+k2llyTOWqdxNvNGSQYHWLV5gqIGXTJE3GKtr574ITll0gLKxnzpYO1hCWQ==","signatures":[{"sig":"MEUCIDufQKK2d4dpnL+4Nq1pkLDebu38EcVKGpsWcyDShUEXAiEAkhWNFj1Y7mjAfBmNTZB4Y6Vs5aMcC+hzojfmiPdtVGc=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"index.js","_from":".","_shasum":"696e809c53ec90fcfdc95de7a7c9f328276873a8","gitHead":"dc3e70a63b41b3ae3da67fb0e67b50ab623d5963","scripts":{"test":"gulp build"},"_npmUser":{"name":"intuitivcloud","email":"engineering@intuitivcloud.com"},"repository":{"url":"git+https://github.com/intuitivcloud/purl.git","type":"git"},"_npmVersion":"2.11.0","description":"A minuscule library to parse URLs","directories":{},"_nodeVersion":"0.10.38","devDependencies":{"gulp":"^3.9.0","webpack":"^1.9.10","expect.js":"^0.3.1","gulp-util":"^3.0.5","gulp-mocha":"^2.1.1","gulp-eslint":"^0.13.2","gulp-load-plugins":"^1.0.0-rc.1","node-libs-browser":"^0.5.2"}},"1.0.2":{"name":"purl","version":"1.0.2","keywords":["url","parse","browser","javascript","isomorphic"],"author":{"name":"intuitivcloud Engineering","email":"engineering@intuitivcloud.com"},"license":"BSD-3-Clause","_id":"purl@1.0.2","maintainers":[{"name":"intuitivcloud","email":"engineering@intuitivcloud.com"}],"homepage":"https://github.com/intuitivcloud/purl#readme","bugs":{"url":"https://github.com/intuitivcloud/purl/issues"},"dist":{"shasum":"1161cab9023b0f148e9af69611b6b3611b059260","tarball":"https://registry.npmjs.org/purl/-/purl-1.0.2.tgz","integrity":"sha512-1Mb6RUYcRMEMDqkNjdmEcPqnUs+vH60iyShSJLHJsLX/rsa8LEhEu1QLbq+R7qcUs61KrmdjBhIhlFWvvT4kjg==","signatures":[{"sig":"MEYCIQCPxpCAHLpUmqHNd53giyCQYLO/krSy8fa7QVzxPegpIgIhAOcny7LJaTZS1OtY/ZuPYy5Htr2Ucs9hq6lm+f3u9hd5","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"index.js","_from":".","_shasum":"1161cab9023b0f148e9af69611b6b3611b059260","gitHead":"4cb3969f32d2ec7bc15d4dc7da12504fa6ddc7af","scripts":{"test":"gulp build"},"_npmUser":{"name":"intuitivcloud","email":"engineering@intuitivcloud.com"},"repository":{"url":"git+https://github.com/intuitivcloud/purl.git","type":"git"},"_npmVersion":"2.11.0","description":"A minuscule library to parse URLs","directories":{},"_nodeVersion":"0.10.38","devDependencies":{"gulp":"^3.9.0","webpack":"^1.9.10","expect.js":"^0.3.1","gulp-util":"^3.0.5","gulp-mocha":"^2.1.1","gulp-eslint":"^0.13.2","gulp-load-plugins":"^1.0.0-rc.1","node-libs-browser":"^0.5.2"}},"1.0.3":{"name":"purl","version":"1.0.3","keywords":["url","parse","browser","javascript","isomorphic"],"author":{"name":"intuitivcloud Engineering","email":"engineering@intuitivcloud.com"},"license":"BSD-3-Clause","_id":"purl@1.0.3","maintainers":[{"name":"intuitivcloud","email":"engineering@intuitivcloud.com"}],"homepage":"https://github.com/intuitivcloud/purl#readme","bugs":{"url":"https://github.com/intuitivcloud/purl/issues"},"dist":{"shasum":"7c18ef9d602c6ad5dc09cc7416e75230e94ec095","tarball":"https://registry.npmjs.org/purl/-/purl-1.0.3.tgz","integrity":"sha512-JSPOtoO7WVinY73wyd4h7jjOIGrr7CrLBeIt2yJTiPwJxgqBfTOuNB//n8TDeosQHRMr73jHmr+yR8oUIr3UJw==","signatures":[{"sig":"MEQCIDwqNWp14cZJPqh1qbuUPGLhB0RX/bJgyJ99hSxQtk36AiBOMF6h/udSMlqP1upkWugvYeHTK8Z+Gwu61KxxPBxqoA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"index.js","_from":".","_shasum":"7c18ef9d602c6ad5dc09cc7416e75230e94ec095","gitHead":"47bba7229fb8f11cffb15c062e6bc80ca2198424","scripts":{"test":"gulp build"},"_npmUser":{"name":"intuitivcloud","email":"engineering@intuitivcloud.com"},"repository":{"url":"git+https://github.com/intuitivcloud/purl.git","type":"git"},"_npmVersion":"2.11.0","description":"A minuscule library to parse URLs","directories":{},"_nodeVersion":"0.10.38","devDependencies":{"gulp":"^3.9.0","jsdom":"^3.1.2","webpack":"^1.9.10","expect.js":"^0.3.1","gulp-util":"^3.0.5","gulp-mocha":"^2.1.1","gulp-eslint":"^0.13.2","gulp-load-plugins":"^1.0.0-rc.1","node-libs-browser":"^0.5.2"}},"1.0.4":{"name":"purl","version":"1.0.4","keywords":["url","parse","browser","javascript","isomorphic"],"author":{"name":"intuitivcloud Engineering","email":"engineering@intuitivcloud.com"},"license":"BSD-3-Clause","_id":"purl@1.0.4","maintainers":[{"name":"intuitivcloud","email":"engineering@intuitivcloud.com"},{"name":"codematix","email":"codematix@intuitivcloud.com"}],"homepage":"https://github.com/intuitivcloud/purl#readme","bugs":{"url":"https://github.com/intuitivcloud/purl/issues"},"dist":{"shasum":"bcd9b027d60b775782ea0b79bcea9e24ffde5ebd","tarball":"https://registry.npmjs.org/purl/-/purl-1.0.4.tgz","integrity":"sha512-GxUP2febFAWFjezObKjI/XPa0tTvUN7cNOWImPRo4ZNHYx+6zwnNh1yL2C6iwu6zI7g745VuhJbSLZvD4iOFdg==","signatures":[{"sig":"MEQCIAx1d1Iobi8yLnpDsHndDH5ApyoisNNqWoE/9vClLAmXAiB8G8gh9x3VJwuoby0B4jtkF5oJ2yh1yd2KJrkZ1kXDsw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"index.js","_from":".","_shasum":"bcd9b027d60b775782ea0b79bcea9e24ffde5ebd","gitHead":"5c66b51ff1bddea25057b21b060048a7def044eb","scripts":{"test":"gulp build"},"_npmUser":{"name":"intuitivcloud","email":"engineering@intuitivcloud.com"},"repository":{"url":"git+https://github.com/intuitivcloud/purl.git","type":"git"},"_npmVersion":"2.11.3","description":"A minuscule library to parse URLs","directories":{},"_nodeVersion":"0.12.7","devDependencies":{"gulp":"^3.9.0","jsdom":"^3.1.2","webpack":"^1.9.10","expect.js":"^0.3.1","gulp-util":"^3.0.5","gulp-mocha":"^2.1.1","gulp-eslint":"^0.13.2","gulp-load-plugins":"^1.0.0-rc.1","node-libs-browser":"^0.5.2"}},"2.0.0":{"name":"purl","version":"2.0.0","keywords":["purl","package url","package","url","ecma-427"],"author":{"name":"Jordan Harband","email":"ljharb@gmail.com"},"license":"MIT","_id":"purl@2.0.0","maintainers":[{"name":"ljharb","email":"ljharb@gmail.com"}],"homepage":"https://github.com/ljharb/purl#readme","bugs":{"url":"https://github.com/ljharb/purl/issues"},"bin":{"purl":"bin.mjs"},"dist":{"shasum":"6147a716e5ae6354a353373e0db3656d72362433","tarball":"https://registry.npmjs.org/purl/-/purl-2.0.0.tgz","fileCount":42,"integrity":"sha512-eZvPCjSTM8UFKjZkiqkS1o8KLpo/q4+hPSQjLTBJI5MSsBcnMXLL6yAi5UGbbdEXL/d09Gdj4GeLx674EeicsQ==","signatures":[{"sig":"MEUCICeSfwbVmT8WYHBx/c+qZ6ZoiiEnpRzBW26EIOIte3RHAiEArw4zknx9bBAumhhUv6lqJ9ve2SQwQrO5jUFQ79qCv/E=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":68503},"main":"./index.mjs","engines":{"node":"^22.21 || ^24.11 || >= 25.2"},"exports":{".":{"types":"./index.d.mts","default":"./index.mjs"},"./eq":{"types":"./eq.d.mts","default":"./eq.mjs"},"./url":{"types":"./url.d.mts","default":"./url.mjs"},"./name":{"types":"./name.d.mts","default":"./name.mjs"},"./purl":{"types":"./purl.d.mts","default":"./purl.mjs"},"./type":{"types":"./type.d.mts","default":"./type.mjs"},"./parse":{"types":"./parse.d.mts","default":"./parse.mjs"},"./valid":{"types":"./valid.d.mts","default":"./valid.mjs"},"./compare":{"types":"./compare.d.mts","default":"./compare.mjs"},"./subpath":{"types":"./subpath.d.mts","default":"./subpath.mjs"},"./version":{"types":"./version.d.mts","default":"./version.mjs"},"./from-npm":{"types":"./from-npm.d.mts","default":"./from-npm.mjs"},"./validate":{"types":"./validate.d.mts","default":"./validate.mjs"},"./namespace":{"types":"./namespace.d.mts","default":"./namespace.mjs"},"./normalize":{"types":"./normalize.d.mts","default":"./normalize.mjs"},"./stringify":{"types":"./stringify.d.mts","default":"./stringify.mjs"},"./qualifiers":{"types":"./qualifiers.d.mts","default":"./qualifiers.mjs"},"./package.json":"./package.json"},"gitHead":"10ccdc5094d24d256daf0519e030829a19d22c8f","scripts":{"lint":"eslint .","test":"npm run tests-only","prepack":"npmignore --auto --commentLines=autogenerated","pretest":"npm run lint","version":"auto-changelog && git add CHANGELOG.md","postlint":"tsc && attw -P","posttest":"npx npm@'>= 10.2' audit --production","prepublish":"not-in-publish || npm run prepublishOnly","tests-only":"c8 tape 'test/**/*.mjs'","postversion":"auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\"","prepublishOnly":"safe-publish-latest"},"_npmUser":{"name":"ljharb","email":"ljharb@gmail.com"},"repository":{"url":"git+https://github.com/ljharb/purl.git","type":"git"},"_npmVersion":"11.6.2","description":"a PURL ( https://tc54.org/purl/ ) parser and serializer","directories":{},"_nodeVersion":"25.2.1","dependencies":{"pargs":"^1.2.2","npm-package-arg":"^13.0.2"},"publishConfig":{"ignore":[".github/workflows","test",".attw.json","eslint.config.mjs"]},"_hasShrinkwrap":false,"auto-changelog":{"output":"CHANGELOG.md","template":"keepachangelog","hideCredit":true,"unreleased":false,"commitLimit":false,"backfillLimit":false},"devDependencies":{"c8":"^10.1.3","tape":"^5.9.0","eslint":"^9.39.2","npmignore":"^0.3.5","in-publish":"^2.0.1","typescript":"next","@types/node":"^22.18.13","@types/tape":"^5.8.1","auto-changelog":"^2.5.0","@ljharb/tsconfig":"^0.3.2","safe-publish-latest":"^2.0.0","@arethetypeswrong/cli":"^0.17.4","@ljharb/eslint-config":"^22.1.3","@types/npm-package-arg":"^6.1.4"},"_npmOperationalInternal":{"tmp":"tmp/purl_2.0.0_1767940850019_0.7702621150566205","host":"s3://npm-registry-packages-npm-production"}},"2.1.0":{"name":"purl","version":"2.1.0","keywords":["purl","package url","package","url","ecma-427"],"author":{"name":"Jordan Harband","email":"ljharb@gmail.com"},"license":"MIT","_id":"purl@2.1.0","maintainers":[{"name":"ljharb","email":"ljharb@gmail.com"}],"homepage":"https://github.com/ljharb/purl#readme","bugs":{"url":"https://github.com/ljharb/purl/issues"},"bin":{"purl":"bin.mjs"},"dist":{"shasum":"53708f6287ea185943b413839870f742722f42d3","tarball":"https://registry.npmjs.org/purl/-/purl-2.1.0.tgz","fileCount":46,"integrity":"sha512-VaLTxYl+NHMlwANo0uYlH4aDsnzdWfC9Yf7u4jTew7rDLb4DDyIHBkXo+fuXUS5cN6AlqAokTw91p4i9ofHk/Q==","signatures":[{"sig":"MEQCIFOgsOfxiyjbIHntZQZ+S+IEaDYXMAupr+quJ+8TlvDCAiBRKHRxgOWYU5xCr6TRiV4HdNNC7fuGp4LzyqOKDH+N3g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":102829},"main":"./index.mjs","engines":{"node":"^22.21 || ^24.11 || >= 25.2"},"exports":{".":{"types":"./index.d.mts","default":"./index.mjs"},"./eq":{"types":"./eq.d.mts","default":"./eq.mjs"},"./url":{"types":"./url.d.mts","default":"./url.mjs"},"./name":{"types":"./name.d.mts","default":"./name.mjs"},"./purl":{"types":"./purl.d.mts","default":"./purl.mjs"},"./type":{"types":"./type.d.mts","default":"./type.mjs"},"./parse":{"types":"./parse.d.mts","default":"./parse.mjs"},"./types":{"types":"./types.d.mts","default":"./types.mjs"},"./valid":{"types":"./valid.d.mts","default":"./valid.mjs"},"./compare":{"types":"./compare.d.mts","default":"./compare.mjs"},"./subpath":{"types":"./subpath.d.mts","default":"./subpath.mjs"},"./version":{"types":"./version.d.mts","default":"./version.mjs"},"./from-npm":{"types":"./from-npm.d.mts","default":"./from-npm.mjs"},"./validate":{"types":"./validate.d.mts","default":"./validate.mjs"},"./namespace":{"types":"./namespace.d.mts","default":"./namespace.mjs"},"./normalize":{"types":"./normalize.d.mts","default":"./normalize.mjs"},"./stringify":{"types":"./stringify.d.mts","default":"./stringify.mjs"},"./qualifiers":{"types":"./qualifiers.d.mts","default":"./qualifiers.mjs"},"./package.json":"./package.json"},"gitHead":"025d0b8999a3c3beceaf4d42177a329239fbecfe","scripts":{"lint":"eslint .","test":"npm run tests-only","prepack":"git submodule update --init --recursive && npmignore --auto --commentLines=autogenerated","pretest":"npm run lint","version":"auto-changelog && git add CHANGELOG.md","postlint":"tsc && attw -P","posttest":"npx npm@'>= 10.2' audit --production","prepublish":"not-in-publish || npm run prepublishOnly","tests-only":"c8 tape 'test/**/*.mjs'","postversion":"auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\"","pretests-only":"git submodule update --init --recursive","prepublishOnly":"safe-publish-latest"},"_npmUser":{"name":"ljharb","email":"ljharb@gmail.com"},"repository":{"url":"git+https://github.com/ljharb/purl.git","type":"git"},"_npmVersion":"11.6.2","description":"a PURL ( https://tc54.org/purl/ ) parser and serializer","directories":{},"_nodeVersion":"25.3.0","dependencies":{"pargs":"^1.2.2","npm-package-arg":"^13.0.2"},"publishConfig":{"ignore":[".github/workflows","test",".attw.json","eslint.config.mjs","vendor/purl-spec/**","!vendor/purl-spec/purl-types.json"]},"_hasShrinkwrap":false,"auto-changelog":{"output":"CHANGELOG.md","template":"keepachangelog","hideCredit":true,"unreleased":false,"commitLimit":false,"backfillLimit":false},"devDependencies":{"c8":"^10.1.3","tape":"^5.9.0","eslint":"^9.39.2","npmignore":"^0.3.5","in-publish":"^2.0.1","typescript":"next","@types/node":"^22.18.13","@types/tape":"^5.8.1","auto-changelog":"^2.5.0","@ljharb/tsconfig":"^0.3.2","safe-publish-latest":"^2.0.0","@arethetypeswrong/cli":"^0.17.4","@ljharb/eslint-config":"^22.1.3","@types/npm-package-arg":"^6.1.4"},"_npmOperationalInternal":{"tmp":"tmp/purl_2.1.0_1768415804567_0.6626899263318968","host":"s3://npm-registry-packages-npm-production"}},"2.2.0":{"name":"purl","version":"2.2.0","keywords":["purl","package url","package","url","ecma-427"],"author":{"name":"Jordan Harband","email":"ljharb@gmail.com"},"license":"MIT","_id":"purl@2.2.0","maintainers":[{"name":"ljharb","email":"ljharb@gmail.com"}],"homepage":"https://github.com/ljharb/purl#readme","bugs":{"url":"https://github.com/ljharb/purl/issues"},"bin":{"purl":"bin.mjs"},"dist":{"shasum":"d1564e02b67795577aac7700eec0bb4aea539bcf","tarball":"https://registry.npmjs.org/purl/-/purl-2.2.0.tgz","fileCount":45,"integrity":"sha512-C8hTOa5/70y+C2QJcSfYdpmE70dvhhF+IxYWw0ACxvVxmVHxFADN8rzcHpUfuzYUS73JENWLOS1hzZeplDJ7Ew==","signatures":[{"sig":"MEYCIQC3ZaGWirGQjwS6AQZrhudNoSM7aU30Y0YQ+8Wobr9oAQIhALFru9FgXvuqAQ+4omD0gvRFi5/NJKpZzxioxILIdjcU","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":108301},"main":"./index.mjs","engines":{"node":"^22.21 || ^24.11 || >= 25.2"},"exports":{".":{"types":"./index.d.mts","default":"./index.mjs"},"./eq":{"types":"./eq.d.mts","default":"./eq.mjs"},"./url":{"types":"./url.d.mts","default":"./url.mjs"},"./name":{"types":"./name.d.mts","default":"./name.mjs"},"./purl":{"types":"./purl.d.mts","default":"./purl.mjs"},"./type":{"types":"./type.d.mts","default":"./type.mjs"},"./parse":{"types":"./parse.d.mts","default":"./parse.mjs"},"./types":{"types":"./types.d.mts","default":"./types.mjs"},"./valid":{"types":"./valid.d.mts","default":"./valid.mjs"},"./compare":{"types":"./compare.d.mts","default":"./compare.mjs"},"./subpath":{"types":"./subpath.d.mts","default":"./subpath.mjs"},"./version":{"types":"./version.d.mts","default":"./version.mjs"},"./from-npm":{"types":"./from-npm.d.mts","default":"./from-npm.mjs"},"./validate":{"types":"./validate.d.mts","default":"./validate.mjs"},"./namespace":{"types":"./namespace.d.mts","default":"./namespace.mjs"},"./normalize":{"types":"./normalize.d.mts","default":"./normalize.mjs"},"./stringify":{"types":"./stringify.d.mts","default":"./stringify.mjs"},"./qualifiers":{"types":"./qualifiers.d.mts","default":"./qualifiers.mjs"},"./package.json":"./package.json"},"gitHead":"d380241c3122a8a780283b61dae1c0e5c7ea6b52","scripts":{"lint":"eslint .","test":"npm run tests-only","prepack":"git submodule update --init --recursive && npmignore --auto --commentLines=autogenerated","pretest":"npm run lint","version":"auto-changelog && git add CHANGELOG.md","postlint":"tsc && attw -P","posttest":"npx npm@'>= 10.2' audit --production","prepublish":"not-in-publish || npm run prepublishOnly","tests-only":"c8 tape 'test/**/*.mjs'","postversion":"auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\"","pretests-only":"git submodule update --init --recursive","prepublishOnly":"safe-publish-latest"},"_npmUser":{"name":"ljharb","email":"ljharb@gmail.com","approver":{"name":"ljharb","email":"ljharb@gmail.com"}},"overrides":{"yargs":"17.7.3-candidate.0"},"repository":{"url":"git+https://github.com/ljharb/purl.git","type":"git"},"_npmVersion":"11.16.0","description":"a PURL ( https://tc54.org/purl/ ) parser and serializer","directories":{},"_nodeVersion":"26.3.0","dependencies":{"pargs":"^1.4.2","npm-package-arg":"^13.0.2"},"publishConfig":{"ignore":[".github/workflows","test",".attw.json","eslint.config.mjs","vendor/purl-spec/**","!vendor/purl-spec/purl-types.json"]},"_hasShrinkwrap":false,"auto-changelog":{"output":"CHANGELOG.md","template":"keepachangelog","hideCredit":true,"unreleased":false,"commitLimit":false,"backfillLimit":false},"devDependencies":{"c8":"^10.1.3","tape":"^5.10.2","eslint":"^10.5.0","npmignore":"^0.3.5","in-publish":"^2.0.1","typescript":"next","@types/node":"^22.19.17","auto-changelog":"^2.6.0","@ljharb/tsconfig":"^0.3.2","safe-publish-latest":"^2.0.0","@arethetypeswrong/cli":"^0.18.3","@ljharb/eslint-config":"^22.2.3","@types/npm-package-arg":"^6.1.4"},"_npmOperationalInternal":{"tmp":"tmp/purl_2.2.0_1781808346270_0.2807819473573745","host":"s3://npm-registry-packages-npm-production"}},"2.2.1":{"_id":"purl@2.2.1","bin":{"purl":"bin.mjs"},"bugs":{"url":"https://github.com/ljharb/purl/issues"},"dist":{"shasum":"b653b655f5d135d320f4a2c49221f05859d230ba","tarball":"https://registry.npmjs.org/purl/-/purl-2.2.1.tgz","integrity":"sha512-wb5+WUjDMBbYtvLug/6/AK4XcddPRCME8HRFTOJ1GVRdVVZhzimAXL4Fd/bXxNkmyMRlVEQyM9sM3H4q/1GkFg==","fileCount":44,"unpackedSize":111229,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCTdaZH9N90FN4V6UwD/wo/V0K1OsGhfCR52j8uSKM/ZAIgcoOb29lqBbGgUCxHhTA2MXluySnbf3Bk2cgiyeS+Xl4="}]},"main":"./index.mjs","name":"purl","author":{"name":"Jordan Harband","email":"ljharb@gmail.com"},"engines":{"node":"^22.21 || ^24.11 || >= 25.2"},"exports":{".":{"types":"./index.d.mts","default":"./index.mjs"},"./eq":{"types":"./eq.d.mts","default":"./eq.mjs"},"./url":{"types":"./url.d.mts","default":"./url.mjs"},"./name":{"types":"./name.d.mts","default":"./name.mjs"},"./purl":{"types":"./purl.d.mts","default":"./purl.mjs"},"./type":{"types":"./type.d.mts","default":"./type.mjs"},"./parse":{"types":"./parse.d.mts","default":"./parse.mjs"},"./types":{"types":"./types.d.mts","default":"./types.mjs"},"./valid":{"types":"./valid.d.mts","default":"./valid.mjs"},"./compare":{"types":"./compare.d.mts","default":"./compare.mjs"},"./subpath":{"types":"./subpath.d.mts","default":"./subpath.mjs"},"./version":{"types":"./version.d.mts","default":"./version.mjs"},"./from-npm":{"types":"./from-npm.d.mts","default":"./from-npm.mjs"},"./validate":{"types":"./validate.d.mts","default":"./validate.mjs"},"./namespace":{"types":"./namespace.d.mts","default":"./namespace.mjs"},"./normalize":{"types":"./normalize.d.mts","default":"./normalize.mjs"},"./stringify":{"types":"./stringify.d.mts","default":"./stringify.mjs"},"./qualifiers":{"types":"./qualifiers.d.mts","default":"./qualifiers.mjs"},"./package.json":"./package.json"},"gitHead":"e27c019a26909e07f6580380d76dd6838116e23f","license":"MIT","scripts":{"lint":"eslint .","test":"npm run tests-only","prepack":"git submodule update --init --recursive && npmignore --auto --commentLines=autogenerated","pretest":"npm run lint","version":"auto-changelog && git add CHANGELOG.md","postlint":"tsc && attw -P","posttest":"npx npm@'>= 10.2' audit --production","prepublish":"not-in-publish || npm run prepublishOnly","tests-only":"c8 tape 'test/**/*.mjs'","postversion":"auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\"","dependencies":"node -p \"process.env.npm_command\" | npx \"dt-clean@^1.2.2\" --auto","pretests-only":"git submodule update --init --recursive","prepublishOnly":"safe-publish-latest"},"version":"2.2.1","_npmUser":{"name":"ljharb","email":"ljharb@gmail.com","approver":{"name":"ljharb","email":"ljharb@gmail.com"}},"homepage":"https://github.com/ljharb/purl#readme","keywords":["purl","package url","package","url","ecma-427"],"repository":{"url":"git+https://github.com/ljharb/purl.git","type":"git"},"_npmVersion":"12.0.2","description":"a PURL ( https://tc54.org/purl/ ) parser and serializer","directories":{},"maintainers":[{"name":"ljharb","email":"ljharb@gmail.com"}],"_nodeVersion":"26.8.2","dependencies":{"pargs":"^1.5.0","npm-package-arg":"^13.0.2"},"publishConfig":{"ignore":[".github/workflows",".gitmodules","test",".attw.json","eslint.config.mjs","vendor/package-url/**","vendor/purl-spec/**","!vendor/purl-spec/purl-types.json"]},"auto-changelog":{"output":"CHANGELOG.md","template":"keepachangelog","hideCredit":true,"unreleased":false,"commitLimit":false,"backfillLimit":false},"devDependencies":{"c8":"^12.0.0","tape":"^5.10.2","eslint":"^10.11.0","npmignore":"^0.3.5","in-publish":"^2.0.1","typescript":"next","@types/node":"^22.20.3","auto-changelog":"^2.6.1","@ljharb/tsconfig":"^0.3.2","safe-publish-latest":"^2.0.0","@arethetypeswrong/cli":"^0.18.5","@ljharb/eslint-config":"^22.2.4","@types/npm-package-arg":"^6.1.4"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/purl_2.2.1_1789954660116_0.4100561539745875"},"_hasShrinkwrap":false}},"time":{"created":"2012-04-12T07:10:33.668Z","modified":"2026-09-21T01:37:40.318Z","0.0.1":"2012-04-12T07:10:42.871Z","1.0.0":"2015-06-10T19:06:37.713Z","1.0.1":"2015-06-10T19:28:17.421Z","1.0.2":"2015-06-11T03:44:39.242Z","1.0.3":"2015-06-14T18:06:43.103Z","1.0.4":"2015-08-18T18:16:39.145Z","2.0.0":"2026-01-09T06:40:50.173Z","2.1.0":"2026-01-14T18:36:44.710Z","2.2.0":"2026-06-18T18:45:46.470Z","2.2.1":"2026-09-21T01:37:40.211Z"},"bugs":{"url":"https://github.com/ljharb/purl/issues"},"author":{"name":"Jordan Harband","email":"ljharb@gmail.com"},"license":"MIT","homepage":"https://github.com/ljharb/purl#readme","keywords":["purl","package url","package","url","ecma-427"],"repository":{"url":"git+https://github.com/ljharb/purl.git","type":"git"},"description":"a PURL ( https://tc54.org/purl/ ) parser and serializer","maintainers":[{"name":"ljharb","email":"ljharb@gmail.com"}],"readme":"# purl <sup>[![Version Badge][npm-version-svg]][package-url]</sup>\n\n[![github actions][actions-image]][actions-url]\n[![coverage][codecov-image]][codecov-url]\n[![License][license-image]][license-url]\n[![Downloads][downloads-image]][downloads-url]\n\n[![npm badge][npm-badge-png]][package-url]\n\nA [PURL (Package URL)][purl-spec] parser and serializer, implementing the [TC54 PURL specification][purl-spec].\n\n## Install\n\n```sh\nnpm install purl\n```\n\n## CLI Usage\n\n```sh\npurl [options] <input>\n```\n\n### Arguments\n\n- `input` - An npm package specifier or PURL string\n\n### Options\n\n- `--check, -c` - Validate the package exists on its registry and show latest version\n- `--json` - Output only JSON to stdout (no colored PURL output)\n- `--help` - Show help message\n- `--version` - Show version number\n\n### Behavior\n\n- If input is a valid PURL string, outputs the normalized PURL on stdout\n- If input is an npm package specifier, converts it to a PURL and outputs on stdout\n- Parse information (including package URL if available) is output on stderr as JSON\n- With `--json`, outputs only JSON to stdout (useful for scripting)\n- Exit code 1 if input is invalid or validation fails\n\n### Examples\n\n```sh\npurl lodash@4.17.21           # outputs pkg:npm/lodash@4.17.21\npurl @babel/core@7.0.0        # outputs pkg:npm/%40babel/core@7.0.0\npurl express                  # outputs pkg:npm/express\npurl 'pkg:pypi/requests@2.28' # outputs pkg:pypi/requests@2.28\npurl -c lodash@4.17.21        # validates package exists, then outputs PURL\n```\n\n### Supported Registry Checks (`--check`)\n\nnpm, pypi, gem, cargo, nuget, hex, maven, composer, pub, hackage, cocoapods\n\n## API\n\n```js\nimport {\n\tPURL,\n\tparse,\n\tstringify,\n\tvalid,\n\tnormalize,\n\teq,\n\tcompare,\n\ttype,\n\tnamespace,\n\tname,\n\tversion,\n\tqualifiers,\n\tsubpath,\n\tfromNPM,\n\turl,\n\tvalidate,\n\tvalidateTypes,\n} from 'purl';\n```\n\n### `PURL` class\n\n```js\nimport PURL from 'purl/purl';\n\nconst purl = new PURL('pkg:npm/lodash@4.17.21');\n\npurl.type;       // 'npm'\npurl.namespace;  // null\npurl.name;       // 'lodash'\npurl.version;    // '4.17.21'\npurl.qualifiers; // null\npurl.subpath;    // null\n\nString(purl);    // 'pkg:npm/lodash@4.17.21'\n\n// From components\nconst purl2 = new PURL({\n\ttype: 'npm',\n\tnamespace: '@babel',\n\tname: 'core',\n\tversion: '7.0.0',\n});\nString(purl2);   // 'pkg:npm/%40babel/core@7.0.0'\n\n// Instance methods\npurl.equals(other);  // boolean\npurl.compare(other); // -1 | 0 | 1\n```\n\n### `parse(purl)`\n\nParse a PURL string into a `PURL` object. Returns `null` if invalid.\n\n```js\nimport parse from 'purl/parse';\n\nparse('pkg:npm/lodash@4.17.21'); // PURL instance\nparse('invalid');                // null\n```\n\n### `stringify(components)`\n\nConvert PURL components to a canonical PURL string.\n\n```js\nimport stringify from 'purl/stringify';\n\nstringify({ type: 'npm', name: 'lodash', version: '4.17.21' });\n// 'pkg:npm/lodash@4.17.21'\n```\n\n### `valid(purl)`\n\nReturns the normalized PURL string if valid, `null` otherwise.\n\n```js\nimport valid from 'purl/valid';\n\nvalid('pkg:NPM/lodash@4.17.21'); // 'pkg:npm/lodash@4.17.21'\nvalid('invalid');                // null\n```\n\n### `normalize(purl)`\n\nNormalize a PURL string. Throws if invalid.\n\n```js\nimport normalize from 'purl/normalize';\n\nnormalize('pkg:NPM/lodash@4.17.21'); // 'pkg:npm/lodash@4.17.21'\nnormalize('invalid');                // throws\n```\n\n### `eq(a, b)`\n\nCompare two PURLs for equality.\n\n```js\nimport eq from 'purl/eq';\n\neq('pkg:npm/lodash@4.17.21', 'pkg:NPM/lodash@4.17.21'); // true\neq('pkg:npm/lodash@4.17.21', 'pkg:npm/lodash@4.17.20'); // false\n```\n\n### `compare(a, b)`\n\nCompare two PURLs for sorting. Returns `-1`, `0`, or `1`.\n\n```js\nimport compare from 'purl/compare';\n\n['pkg:npm/bbb', 'pkg:npm/aaa'].sort(compare);\n// ['pkg:npm/aaa', 'pkg:npm/bbb']\n```\n\n### Component accessors\n\nEach accessor returns the component value or `null` if invalid/missing.\n\n```js\nimport type from 'purl/type';\nimport namespace from 'purl/namespace';\nimport name from 'purl/name';\nimport version from 'purl/version';\nimport qualifiers from 'purl/qualifiers';\nimport subpath from 'purl/subpath';\n\ntype('pkg:npm/lodash@4.17.21');      // 'npm'\nnamespace('pkg:npm/%40babel/core');  // '@babel'\nname('pkg:npm/lodash@4.17.21');      // 'lodash'\nversion('pkg:npm/lodash@4.17.21');   // '4.17.21'\nqualifiers('pkg:npm/foo?a=b');       // { a: 'b' }\nsubpath('pkg:npm/foo#lib/index.js'); // 'lib/index.js'\n```\n\n### `fromNPM(specifier)`\n\nConvert an npm package specifier to a `PURL` object.\n\n```js\nimport fromNPM from 'purl/from-npm';\n\nfromNPM('lodash@4.17.21');    // PURL for pkg:npm/lodash@4.17.21\nfromNPM('@babel/core@7.0.0'); // PURL for pkg:npm/%40babel/core@7.0.0\nfromNPM('lodash@^4.0.0');     // PURL for pkg:npm/lodash (no version for ranges)\n```\n\n### `url(purl)`\n\nGet the registry URL for a PURL.\n\n```js\nimport url from 'purl/url';\n\nurl('pkg:npm/lodash@4.17.21');       // 'https://www.npmjs.com/package/lodash/v/4.17.21'\nurl('pkg:pypi/requests@2.28.0');     // 'https://pypi.org/project/requests/2.28.0/'\nurl('pkg:github/ljharb/qs@6.11.0');  // 'https://github.com/ljharb/qs/tree/6.11.0'\n```\n\n#### Supported URL Types\n\nbioconductor, bitbucket, cargo, chrome-extension, clojars, cocoapods, composer, conan, conda, cpan, deno, docker, elm, gem, github, golang, hackage, hex, homebrew, huggingface, luarocks, maven, npm, nuget, pub, pypi, swift, vscode-extension\n\n### `validate(purl)`\n\nValidate a PURL against its package registry. Returns a promise.\n\n```js\nimport validate, { supportedTypes } from 'purl/validate';\n\nconst result = await validate('pkg:npm/lodash@4.17.21');\n// { valid: true, latestVersion: '4.17.21' }\n\nconst result2 = await validate('pkg:npm/nonexistent-package-xyz');\n// { valid: false, error: 'npm package \"nonexistent-package-xyz\" not found', latestVersion: null }\n\nsupportedTypes; // ['npm', 'pypi', 'gem', 'cargo', 'nuget', 'hex', 'maven', 'composer', 'pub', 'hackage', 'cocoapods']\n```\n\n## Tests\n\nClone the repo, `npm install`, and run `npm test`.\n\n## Versions before v2\n\nPrior to v2, `purl` was a different package.\nv0 was just a placeholder, but v1 can be found both on [archive.org](https://web.archive.org/web/20201029170451/https://github.com/intuitivcloud/purl) and on the [original](https://github.com/ljharb/purl/tree/original) branch of this repo.\n\n[package-url]: https://npmjs.org/package/purl\n[npm-version-svg]: https://versionbadg.es/ljharb/purl.svg\n[npm-badge-png]: https://nodei.co/npm/purl.png?downloads=true&stars=true\n[license-image]: https://img.shields.io/npm/l/purl.svg\n[license-url]: LICENSE\n[downloads-image]: https://img.shields.io/npm/dm/purl.svg\n[downloads-url]: https://npm-stat.com/charts.html?package=purl\n[codecov-image]: https://codecov.io/gh/ljharb/purl/branch/main/graphs/badge.svg\n[codecov-url]: https://app.codecov.io/gh/ljharb/purl/\n[actions-image]: https://img.shields.io/github/check-runs/ljharb/purl/main\n[actions-url]: https://github.com/ljharb/purl/actions\n[purl-spec]: https://tc54.org/purl/\n","readmeFilename":"README.md","users":{"wrick17":true,"bluelover":true,"intuitivcloud":true}}