{"_id":"@netlify/redirect-matcher","_rev":"5-5c7e71396e28e8d1accc997b87866c0c","name":"@netlify/redirect-matcher","dist-tags":{"latest":"0.7.0"},"versions":{"0.4.0":{"name":"@netlify/redirect-matcher","version":"0.4.0","author":{"name":"Netlify Inc."},"license":"UNLICENSED","_id":"@netlify/redirect-matcher@0.4.0","maintainers":[{"name":"netlify-bot","email":"bot@netlify.com"},{"name":"mikewen","email":"mike.wen@netlify.com"},{"name":"youvalv","email":"youval.vaknin@gmail.com"},{"name":"serhalp-netlify","email":"philippe.serhal@netlify.com"},{"name":"mlgualtieri-gatsby","email":"mike.gualtieri@netlify.com"}],"dist":{"shasum":"955c904377c8fd36b7a738aa769b957cf3e4fc95","tarball":"https://registry.npmjs.org/@netlify/redirect-matcher/-/redirect-matcher-0.4.0.tgz","fileCount":6,"integrity":"sha512-MgD4A6Y/D4c17laTQnyZzwGMbmvhd9VTO73UkH1kvCvkGw2KqDJttZ7tzastWR0qsecapWRmnNkvMAbMZLIppA==","signatures":[{"sig":"MEUCICa6hz7qSMIKB7cO2LOLcMCulWwH2kSGPoo/vjSPHcqFAiEAhVnSJifuzsv56ZMpKj+0mTSRXnEiOqYwEeKhJL6eLzY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4383859},"type":"module","types":"./index.d.ts","engines":{"node":">=22.12.0"},"exports":{".":{"types":"./index.d.ts","default":"./index.js"}},"gitHead":"b091205328cd03cba6c1463cbbfa1a7239bd4f5d","scripts":{"test":"node --test","build":"make -C .. wasm"},"_npmUser":{"name":"netlify-bot","email":"bot@netlify.com"},"_npmVersion":"10.9.9","description":"Netlify's redirect rule matcher, compiled from go-redirects to WebAssembly","directories":{},"_nodeVersion":"24.21.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/redirect-matcher_0.4.0_1790939371477_0.43296252063732665","host":"s3://npm-registry-packages-npm-production"}},"0.4.1":{"name":"@netlify/redirect-matcher","version":"0.4.1","author":{"name":"Netlify Inc."},"license":"UNLICENSED","_id":"@netlify/redirect-matcher@0.4.1","maintainers":[{"name":"netlify-bot","email":"bot@netlify.com"},{"name":"mikewen","email":"mike.wen@netlify.com"},{"name":"youvalv","email":"youval.vaknin@gmail.com"},{"name":"serhalp-netlify","email":"philippe.serhal@netlify.com"},{"name":"mlgualtieri-gatsby","email":"mike.gualtieri@netlify.com"}],"dist":{"shasum":"e68c0c50251c941713fb02eef780bf66ab647656","tarball":"https://registry.npmjs.org/@netlify/redirect-matcher/-/redirect-matcher-0.4.1.tgz","fileCount":6,"integrity":"sha512-yITewp44JrxijRrvffIUWUikWRsI3oF3puie6rYs56hqhgXlasj1CbmYEED47WqgNLD5NErvALgNVsw8KTJ2dg==","signatures":[{"sig":"MEUCIH5+CF6C88GGLyzjxlgVVKLoIdfzIagjifEbWsd4lulkAiEAwqYUIi57XSVqcrmmr+sUb118uzplvuSJJ37FvnzTQ9w=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCsMiFxqXc6XOBiTcY/oL8n2jp8guVuu/zfAyyQrxw6UAIhAL+9UVt2h7leMio3nY7wQ/5/0r6PW+YIJmS12RD51G3V","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4384059},"type":"module","types":"./index.d.ts","engines":{"node":">=22.12.0"},"exports":{".":{"types":"./index.d.ts","default":"./index.js"}},"gitHead":"3b2fc1750bd136daa7b52bbc449cd8b6f86a7d32","scripts":{"test":"node --test","build":"make -C .. wasm"},"_npmUser":{"name":"netlify-bot","email":"bot@netlify.com"},"_npmVersion":"10.9.9","description":"Netlify's redirect rule matcher, compiled from go-redirects to WebAssembly","directories":{},"_nodeVersion":"24.21.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/redirect-matcher_0.4.1_1790941697203_0.9545919412291499","host":"s3://npm-registry-packages-npm-production"}},"0.4.2":{"name":"@netlify/redirect-matcher","version":"0.4.2","author":{"name":"Netlify Inc."},"license":"UNLICENSED","_id":"@netlify/redirect-matcher@0.4.2","maintainers":[{"name":"netlify-bot","email":"bot@netlify.com"},{"name":"mikewen","email":"mike.wen@netlify.com"},{"name":"youvalv","email":"youval.vaknin@gmail.com"},{"name":"serhalp-netlify","email":"philippe.serhal@netlify.com"},{"name":"mlgualtieri-gatsby","email":"mike.gualtieri@netlify.com"}],"dist":{"shasum":"be975a6eaf798d6a14f9941dc48ab37808432ead","tarball":"https://registry.npmjs.org/@netlify/redirect-matcher/-/redirect-matcher-0.4.2.tgz","fileCount":6,"integrity":"sha512-rPiVS6niO2xTMj1NhqVF5goFzJiNZul5NiZ5PVqU3wVB4psJCplLFlePg4GDIL+guiKN0UVwl0P1LWtcrywmoA==","signatures":[{"sig":"MEUCIQCw4oQhJ5qtWzoKNAy+ia7cvAHRy+qzltWTFV1ZetRqygIgRleCrtNLw0QAuntE5znB92TR7xns33Wvr74lRTH0hNQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCnCBY9e36RoHqiSJ3V+rYSe4Qc+l9TLi0wwoj6n9770wIhAP4WJiCRoHGsd5h5S+z7lI97K4r/k1GsmunWI56WP0v7","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4384004},"type":"module","types":"./index.d.ts","engines":{"node":">=22.12.0"},"exports":{".":{"types":"./index.d.ts","default":"./index.js"}},"gitHead":"85e6f54efee86495bd6b93f443a2f76b9ff0188e","scripts":{"test":"node --test","build":"make -C .. wasm"},"_npmUser":{"name":"netlify-bot","email":"bot@netlify.com"},"_npmVersion":"10.9.9","description":"Netlify's redirect rule matcher, compiled to WebAssembly","directories":{},"_nodeVersion":"24.21.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/redirect-matcher_0.4.2_1790943317008_0.7033738216835179","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"@netlify/redirect-matcher","version":"0.6.0","author":{"name":"Netlify Inc."},"license":"UNLICENSED","_id":"@netlify/redirect-matcher@0.6.0","maintainers":[{"name":"netlify-bot","email":"bot@netlify.com"},{"name":"mikewen","email":"mike.wen@netlify.com"},{"name":"youvalv","email":"youval.vaknin@gmail.com"},{"name":"serhalp-netlify","email":"philippe.serhal@netlify.com"},{"name":"mlgualtieri-gatsby","email":"mike.gualtieri@netlify.com"}],"dist":{"shasum":"6d1db68e614512ede8018097f657fd2ac058788f","tarball":"https://registry.npmjs.org/@netlify/redirect-matcher/-/redirect-matcher-0.6.0.tgz","fileCount":6,"integrity":"sha512-9nwFpzK246ScqAYKr4VkAKRYt/TThJ1mXX9mffhErSKRWCpGehi6bMtGbhhTX6OHRO4NCcEGaBGHD4isOY1yyg==","signatures":[{"sig":"MEUCIQDbKo0PEghXIdPG1LauCjKNJxzXPHQ1Lc/Ihi3oWKsK/gIgUHEsgVNTQ6BDTcf2cJ2eWz5Wk4S5OmBp/5urtKV/B3M=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCr6wU5KvHqK9raNJaGWtCI3O972JLJE1lzlVPKqDrkdQIhANxltUKJtz5frtPFpUwyBbFSIyQx1GWN0OxJV4BiYpB2","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4391138},"type":"module","types":"./index.d.ts","engines":{"node":">=22.12.0"},"exports":{".":{"types":"./index.d.ts","default":"./index.js"}},"gitHead":"698ea1d600acf1d5ca80ac253250d54ebf241393","scripts":{"test":"node --test","build":"make -C .. wasm"},"_npmUser":{"name":"netlify-bot","email":"bot@netlify.com"},"_npmVersion":"10.9.9","description":"Netlify's redirect rule matcher, compiled to WebAssembly","directories":{},"_nodeVersion":"24.21.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/redirect-matcher_0.6.0_1793099806170_0.37720514680991624","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"_id":"@netlify/redirect-matcher@0.7.0","dist":{"shasum":"648dc9923f2594159909605d22e4b3e6370c2dc7","tarball":"https://registry.npmjs.org/@netlify/redirect-matcher/-/redirect-matcher-0.7.0.tgz","fileCount":6,"integrity":"sha512-M0qUt/dOBcFhCvU7fQu7CyX/LSazZp3UBegRTWOj/0E0Fr9zy1nUvTpUxLemsXbFECLSsyG9VTv2DS8s6SAedQ==","signatures":[{"sig":"MEYCIQCVoFtsFDGvC2i4VjrkaVNVoK7ApnBLT1ayPYv3EpKLZwIhAPWFaG2usnIIL9Cs8xZBQSH4QKgoV0w2Y5WBg7ODiuJF","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCDRsFsHrVO2CEupKCIi8Bx+zKC6URZzNHxBPz8DmBVUQIgWc04SpDyCtpLgxi8p8tTV3gD1gCbIrcvY2eNr7zmpOI="}],"unpackedSize":4388523},"name":"@netlify/redirect-matcher","type":"module","types":"./index.d.ts","author":{"name":"Netlify Inc."},"engines":{"node":">=22.12.0"},"exports":{".":{"types":"./index.d.ts","default":"./index.js"}},"gitHead":"5f7355b0c8d541d88c17e5995b22a8b45741dd44","license":"UNLICENSED","scripts":{"test":"node --test","build":"make -C .. wasm"},"version":"0.7.0","_npmUser":{"name":"netlify-bot","email":"bot@netlify.com"},"_npmVersion":"10.9.9","description":"Netlify's redirect rule matcher, compiled to WebAssembly","directories":{},"maintainers":[{"name":"netlify-bot","email":"bot@netlify.com"},{"name":"mikewen","email":"mike.wen@netlify.com"},{"name":"youvalv","email":"youval.vaknin@gmail.com"},{"name":"serhalp-netlify","email":"philippe.serhal@netlify.com"},{"name":"mlgualtieri-gatsby","email":"mike.gualtieri@netlify.com"}],"_nodeVersion":"24.22.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/redirect-matcher_0.7.0_1793208470433_0.32766757825935666"}}},"time":{"created":"2026-10-02T11:09:31.220Z","modified":"2026-10-28T17:27:50.890Z","0.4.0":"2026-10-02T11:09:31.681Z","0.4.1":"2026-10-02T11:48:17.310Z","0.4.2":"2026-10-02T12:15:17.169Z","0.6.0":"2026-10-27T11:16:46.327Z","0.7.0":"2026-10-28T17:27:50.663Z"},"author":{"name":"Netlify Inc."},"license":"UNLICENSED","description":"Netlify's redirect rule matcher, compiled to WebAssembly","maintainers":[{"name":"netlify-bot","email":"bot@netlify.com"},{"name":"mikewen","email":"mike.wen@netlify.com"},{"name":"youvalv","email":"youval.vaknin@gmail.com"},{"name":"serhalp-netlify","email":"philippe.serhal@netlify.com"},{"name":"mlgualtieri-gatsby","email":"mike.gualtieri@netlify.com"}],"readme":"# @netlify/redirect-matcher\n\nNetlify's redirect rule matcher, compiled to WebAssembly, for matching requests\nagainst Netlify redirect rules in local tooling.\n\n```js\nimport { createMatcher } from '@netlify/redirect-matcher'\n\nconst matcher = await createMatcher(rules, { jwtSecret, jwtRoleClaim })\nconst result = matcher.match({ scheme: 'https', host, path, query, headers, cookies })\n\nif (result?.type === 'match') {\n  console.log(result.status, result.to)\n}\n\nmatcher.close()\n```\n\n`rules` is the JSON produced by `@netlify/redirect-parser`, as a string or an\narray. Rules that fail to parse are skipped and listed in\n`matcher.parseErrors`. `match` returns `null` when nothing matched, and\n`{ type: 'forcedNotFound' }` when a role-gated rule rejected the request and no\nlater rule matched.\n\n`headers` and `cookies` may be plain objects or iterables of `[name, value]`\npairs, such as `Headers` or `Map`. Header names are matched case-insensitively,\nso names that differ only in case collide, and the last one wins. A header\nwhose value is an array matches on its first element, and `null` or\n`undefined` values are treated as absent.\n\nLoading the matcher defines these globals, which Go's WebAssembly runtime\nneeds: `globalThis.Go`, `globalThis.__netlifyRedirectMatcher`, and, if they\nare not already defined, stub `globalThis.fs` and `globalThis.path` objects.\n\nRequires Node.js 22.12 or later.\n","readmeFilename":"README.md"}