{"_id":"rehype-sanitize","_rev":"4127037","name":"rehype-sanitize","description":"rehype plugin to sanitize HTML","dist-tags":{"latest":"6.0.0"},"maintainers":[{"name":"kmck","email":"keith@mcknig.ht"},{"name":"remcohaszing","email":""},{"name":"wooorm","email":"tituswormer@gmail.com"}],"time":{"modified":"2026-03-01T18:25:32.000Z","created":"2017-02-23T21:18:09.519Z","6.0.0":"2023-08-26T11:11:05.469Z","5.0.1":"2021-12-08T13:20:35.523Z","5.0.0":"2021-08-01T20:58:31.489Z","4.0.0":"2020-08-22T10:15:14.748Z","3.0.1":"2020-03-15T13:38:07.469Z","3.0.0":"2019-07-01T12:36:13.032Z","2.0.3":"2019-06-01T08:10:58.008Z","2.0.2":"2018-11-17T12:28:40.287Z","2.0.1":"2017-06-20T14:20:48.082Z","2.0.0":"2017-02-23T21:18:09.519Z"},"users":{},"author":{"name":"Titus Wormer","email":"tituswormer@gmail.com","url":"https://wooorm.com"},"repository":{"type":"git","url":"git+https://github.com/rehypejs/rehype-sanitize.git"},"versions":{"6.0.0":{"name":"rehype-sanitize","version":"6.0.0","description":"rehype plugin to sanitize HTML","license":"MIT","keywords":["clean","html","plugin","rehype","rehype-plugin","sanitize","unified","xss"],"repository":{"type":"git","url":"git+https://github.com/rehypejs/rehype-sanitize.git"},"bugs":{"url":"https://github.com/rehypejs/rehype-sanitize/issues"},"funding":{"type":"opencollective","url":"https://opencollective.com/unified"},"author":{"name":"Titus Wormer","email":"tituswormer@gmail.com","url":"https://wooorm.com"},"contributors":[{"name":"Titus Wormer","email":"tituswormer@gmail.com","url":"https://wooorm.com"}],"sideEffects":false,"type":"module","exports":"./index.js","dependencies":{"@types/hast":"^3.0.0","hast-util-sanitize":"^5.0.0"},"devDependencies":{"@types/node":"^20.0.0","c8":"^8.0.0","deepmerge":"^4.0.0","prettier":"^3.0.0","rehype":"^13.0.0","remark-cli":"^11.0.0","remark-preset-wooorm":"^9.0.0","type-coverage":"^2.0.0","typescript":"^5.0.0","xo":"^0.56.0"},"scripts":{"build":"tsc --build --clean && tsc --build && type-coverage","format":"remark . --frail --output --quiet && prettier . --log-level warn --write && xo --fix","prepack":"npm run build && npm run format","test":"npm run build && npm run format && npm run test-coverage","test-api":"node --conditions development test.js","test-coverage":"c8 --100 --check-coverage --reporter lcov npm run test-api"},"prettier":{"bracketSpacing":false,"singleQuote":true,"semi":false,"tabWidth":2,"trailingComma":"none","useTabs":false},"remarkConfig":{"plugins":["remark-preset-wooorm"]},"typeCoverage":{"atLeast":100,"detail":true,"ignoreCatch":true,"strict":true},"xo":{"prettier":true},"gitHead":"566a856d8b626c3d016f610048bdaf327464e467","types":"./index.d.ts","homepage":"https://github.com/rehypejs/rehype-sanitize#readme","_id":"rehype-sanitize@6.0.0","_nodeVersion":"20.0.0","_npmVersion":"9.7.2","dist":{"shasum":"16e95f4a67a69cbf0f79e113c8e0df48203db73c","size":7341,"noattachment":false,"key":"/rehype-sanitize/-/rehype-sanitize-6.0.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/rehype-sanitize/download/rehype-sanitize-6.0.0.tgz"},"_npmUser":{"name":"wooorm","email":"tituswormer@gmail.com"},"directories":{},"maintainers":[{"name":"kmck","email":"keith@mcknig.ht"},{"name":"remcohaszing","email":""},{"name":"wooorm","email":"tituswormer@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/rehype-sanitize_6.0.0_1693048265312_0.7067604123622222"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2023-08-26T11:11:05.469Z","publish_time":1693048265469,"_source_registry_name":"default","_cnpm_publish_time":1693048265469},"5.0.1":{"name":"rehype-sanitize","version":"5.0.1","description":"rehype plugin to sanitize HTML","license":"MIT","keywords":["unified","rehype","rehype-plugin","plugin","xss","sanitize","clean","html"],"repository":{"type":"git","url":"git+https://github.com/rehypejs/rehype-sanitize.git"},"bugs":{"url":"https://github.com/rehypejs/rehype-sanitize/issues"},"funding":{"type":"opencollective","url":"https://opencollective.com/unified"},"author":{"name":"Titus Wormer","email":"tituswormer@gmail.com","url":"https://wooorm.com"},"contributors":[{"name":"Titus Wormer","email":"tituswormer@gmail.com","url":"https://wooorm.com"}],"sideEffects":false,"type":"module","main":"index.js","types":"index.d.ts","dependencies":{"@types/hast":"^2.0.0","hast-util-sanitize":"^4.0.0","unified":"^10.0.0"},"devDependencies":{"@types/tape":"^4.0.0","browserify":"^17.0.0","c8":"^7.0.0","deepmerge":"^4.0.0","prettier":"^2.0.0","rehype":"^12.0.0","remark-cli":"^10.0.0","remark-preset-wooorm":"^9.0.0","rimraf":"^3.0.0","tape":"^5.0.0","tinyify":"^3.0.0","type-coverage":"^2.0.0","typescript":"^4.0.0","xo":"^0.47.0"},"scripts":{"build":"rimraf \"*.d.ts\" && tsc && type-coverage","format":"remark . -qfo && prettier . -w --loglevel warn && xo --fix","test-api":"node --conditions development test.js","test-coverage":"c8 --check-coverage --branches 100 --functions 100 --lines 100 --statements 100 --reporter lcov node --conditions development test.js","test":"npm run build && npm run format && npm run test-coverage"},"prettier":{"tabWidth":2,"useTabs":false,"singleQuote":true,"bracketSpacing":false,"semi":false,"trailingComma":"none"},"xo":{"prettier":true,"ignores":["types/"]},"remarkConfig":{"plugins":["preset-wooorm"]},"typeCoverage":{"atLeast":100,"detail":true,"strict":true,"ignoreCatch":true},"gitHead":"b05e645ad2e087d666e922a9ee5799c17566d13c","homepage":"https://github.com/rehypejs/rehype-sanitize#readme","_id":"rehype-sanitize@5.0.1","_nodeVersion":"17.0.1","_npmVersion":"8.1.0","dist":{"shasum":"dac01a7417bdd329260c74c74449697b4be5eb56","size":7207,"noattachment":false,"key":"/rehype-sanitize/-/rehype-sanitize-5.0.1.tgz","tarball":"http://registry.cnpm.dingdandao.com/rehype-sanitize/download/rehype-sanitize-5.0.1.tgz"},"_npmUser":{"name":"wooorm","email":"tituswormer@gmail.com"},"directories":{},"maintainers":[{"name":"kmck","email":"keith@mcknig.ht"},{"name":"remcohaszing","email":""},{"name":"wooorm","email":"tituswormer@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/rehype-sanitize_5.0.1_1638969635396_0.24515813802096997"},"_hasShrinkwrap":false,"publish_time":1638969635523,"_cnpm_publish_time":1638969635523,"_cnpmcore_publish_time":"2021-12-16T17:36:58.303Z"},"5.0.0":{"name":"rehype-sanitize","version":"5.0.0","description":"rehype plugin to sanitize HTML","license":"MIT","keywords":["unified","rehype","rehype-plugin","plugin","xss","sanitize","clean","html"],"repository":{"type":"git","url":"git+https://github.com/rehypejs/rehype-sanitize.git"},"bugs":{"url":"https://github.com/rehypejs/rehype-sanitize/issues"},"funding":{"type":"opencollective","url":"https://opencollective.com/unified"},"author":{"name":"Titus Wormer","email":"tituswormer@gmail.com","url":"https://wooorm.com"},"contributors":[{"name":"Titus Wormer","email":"tituswormer@gmail.com","url":"https://wooorm.com"}],"sideEffects":false,"type":"module","main":"index.js","types":"index.d.ts","dependencies":{"@types/hast":"^2.0.0","hast-util-sanitize":"^4.0.0","unified":"^10.0.0"},"devDependencies":{"@types/tape":"^4.0.0","browserify":"^17.0.0","c8":"^7.0.0","deepmerge":"^4.0.0","prettier":"^2.0.0","rehype":"^12.0.0","remark-cli":"^9.0.0","remark-preset-wooorm":"^8.0.0","rimraf":"^3.0.0","tape":"^5.0.0","tinyify":"^3.0.0","type-coverage":"^2.0.0","typescript":"^4.0.0","xo":"^0.42.0"},"scripts":{"build":"rimraf \"*.d.ts\" && tsc && type-coverage","format":"remark . -qfo && prettier . -w --loglevel warn && xo --fix","test-api":"node --conditions development test.js","test-coverage":"c8 --check-coverage --branches 100 --functions 100 --lines 100 --statements 100 --reporter lcov node --conditions development test.js","test":"npm run build && npm run format && npm run test-coverage"},"prettier":{"tabWidth":2,"useTabs":false,"singleQuote":true,"bracketSpacing":false,"semi":false,"trailingComma":"none"},"xo":{"prettier":true,"ignores":["types/"]},"remarkConfig":{"plugins":["preset-wooorm"]},"typeCoverage":{"atLeast":100,"detail":true,"strict":true,"ignoreCatch":true},"gitHead":"f65fcf399da9ff3a771cb3bc536c31b67b998351","homepage":"https://github.com/rehypejs/rehype-sanitize#readme","_id":"rehype-sanitize@5.0.0","_nodeVersion":"16.6.0","_npmVersion":"7.19.1","dist":{"shasum":"04822335bf48afa7dc67513f663576564b0db5b0","size":3642,"noattachment":false,"key":"/rehype-sanitize/-/rehype-sanitize-5.0.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/rehype-sanitize/download/rehype-sanitize-5.0.0.tgz"},"_npmUser":{"name":"wooorm","email":"tituswormer@gmail.com"},"directories":{},"maintainers":[{"name":"kmck","email":"keith@mcknig.ht"},{"name":"remcohaszing","email":""},{"name":"wooorm","email":"tituswormer@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/rehype-sanitize_5.0.0_1627851511300_0.4248407221034196"},"_hasShrinkwrap":false,"publish_time":1627851511489,"_cnpm_publish_time":1627851511489,"_cnpmcore_publish_time":"2021-12-16T17:36:58.503Z"},"4.0.0":{"name":"rehype-sanitize","version":"4.0.0","description":"rehype plugin to sanitize HTML","license":"MIT","keywords":["unified","rehype","rehype-plugin","plugin","xss","sanitize","clean","html"],"repository":{"type":"git","url":"git+https://github.com/rehypejs/rehype-sanitize.git"},"bugs":{"url":"https://github.com/rehypejs/rehype-sanitize/issues"},"funding":{"type":"opencollective","url":"https://opencollective.com/unified"},"author":{"name":"Titus Wormer","email":"tituswormer@gmail.com","url":"https://wooorm.com"},"contributors":[{"name":"Titus Wormer","email":"tituswormer@gmail.com","url":"https://wooorm.com"}],"types":"types/index.d.ts","dependencies":{"hast-util-sanitize":"^3.0.0"},"devDependencies":{"browserify":"^16.0.0","deepmerge":"^4.0.0","dtslint":"^3.0.0","nyc":"^15.0.0","prettier":"^2.0.0","rehype":"^11.0.0","remark-cli":"^8.0.0","remark-preset-wooorm":"^7.0.0","tape":"^5.0.0","tinyify":"^3.0.0","xo":"^0.33.0"},"scripts":{"format":"remark . -qfo && prettier . --write && xo --fix","build-bundle":"browserify index.js -s rehypeSanitize > rehype-sanitize.js","build-mangle":"browserify index.js -s rehypeSanitize -p tinyify > rehype-sanitize.min.js","build":"npm run build-bundle && npm run build-mangle","test-api":"node test","test-coverage":"nyc --reporter lcov tape test.js","test-types":"dtslint types","test":"npm run format && npm run build && npm run test-coverage && npm run test-types"},"nyc":{"check-coverage":true,"lines":100,"functions":100,"branches":100},"prettier":{"tabWidth":2,"useTabs":false,"singleQuote":true,"bracketSpacing":false,"semi":false,"trailingComma":"none"},"xo":{"prettier":true,"esnext":false,"rules":{"unicorn/string-content":"off","import/no-extraneous-dependencies":"off"},"ignores":["rehype-sanitize.js"]},"remarkConfig":{"plugins":["preset-wooorm"]},"gitHead":"a6ddc5eee07b7e2bdbeed1e9d9e9f045989bd9ec","homepage":"https://github.com/rehypejs/rehype-sanitize#readme","_id":"rehype-sanitize@4.0.0","_nodeVersion":"14.7.0","_npmVersion":"6.14.8","dist":{"shasum":"b5241cf66bcedc49cd4e924a5f7a252f00a151ad","size":3380,"noattachment":false,"key":"/rehype-sanitize/-/rehype-sanitize-4.0.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/rehype-sanitize/download/rehype-sanitize-4.0.0.tgz"},"maintainers":[{"name":"kmck","email":"keith@mcknig.ht"},{"name":"remcohaszing","email":""},{"name":"wooorm","email":"tituswormer@gmail.com"}],"_npmUser":{"name":"wooorm","email":"tituswormer@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/rehype-sanitize_4.0.0_1598091314620_0.735481299144934"},"_hasShrinkwrap":false,"publish_time":1598091314748,"_cnpm_publish_time":1598091314748,"_cnpmcore_publish_time":"2021-12-16T17:36:58.743Z"},"3.0.1":{"name":"rehype-sanitize","version":"3.0.1","description":"rehype plugin to sanitize HTML","license":"MIT","keywords":["unified","rehype","rehype-plugin","plugin","xss","sanitize","clean","html"],"repository":{"type":"git","url":"git+https://github.com/rehypejs/rehype-sanitize.git"},"bugs":{"url":"https://github.com/rehypejs/rehype-sanitize/issues"},"funding":{"type":"opencollective","url":"https://opencollective.com/unified"},"author":{"name":"Titus Wormer","email":"tituswormer@gmail.com","url":"https://wooorm.com"},"contributors":[{"name":"Titus Wormer","email":"tituswormer@gmail.com","url":"https://wooorm.com"}],"dependencies":{"hast-util-sanitize":"^2.0.0"},"devDependencies":{"browserify":"^16.0.0","deepmerge":"^4.0.0","nyc":"^15.0.0","prettier":"^1.0.0","rehype":"^9.0.0","remark-cli":"^7.0.0","remark-preset-wooorm":"^6.0.0","tape":"^4.0.0","tinyify":"^2.0.0","xo":"^0.28.0"},"scripts":{"format":"remark . -qfo && prettier --write \"**/*.js\" && xo --fix","build-bundle":"browserify index.js -s rehypeSanitize > rehype-sanitize.js","build-mangle":"browserify index.js -s rehypeSanitize -p tinyify > rehype-sanitize.min.js","build":"npm run build-bundle && npm run build-mangle","test-api":"node test","test-coverage":"nyc --reporter lcov tape test.js","test":"npm run format && npm run build && npm run test-coverage"},"nyc":{"check-coverage":true,"lines":100,"functions":100,"branches":100},"prettier":{"tabWidth":2,"useTabs":false,"singleQuote":true,"bracketSpacing":false,"semi":false,"trailingComma":"none"},"xo":{"prettier":true,"esnext":false,"rules":{"unicorn/string-content":"off"},"ignores":["rehype-sanitize.js"]},"remarkConfig":{"plugins":["preset-wooorm"]},"gitHead":"75023be086f0e693687e26bd3a27c2073d8712ac","homepage":"https://github.com/rehypejs/rehype-sanitize#readme","_id":"rehype-sanitize@3.0.1","_nodeVersion":"13.10.1","_npmVersion":"6.14.2","dist":{"shasum":"7494df68614fc528780a0c673d6cad6ad0c0df4d","size":3218,"noattachment":false,"key":"/rehype-sanitize/-/rehype-sanitize-3.0.1.tgz","tarball":"http://registry.cnpm.dingdandao.com/rehype-sanitize/download/rehype-sanitize-3.0.1.tgz"},"maintainers":[{"name":"kmck","email":"keith@mcknig.ht"},{"name":"remcohaszing","email":""},{"name":"wooorm","email":"tituswormer@gmail.com"}],"_npmUser":{"name":"wooorm","email":"tituswormer@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/rehype-sanitize_3.0.1_1584279487266_0.9894778856812276"},"_hasShrinkwrap":false,"publish_time":1584279487469,"_cnpm_publish_time":1584279487469,"_cnpmcore_publish_time":"2021-12-16T17:36:58.912Z"},"3.0.0":{"name":"rehype-sanitize","version":"3.0.0","description":"rehype plugin to sanitize HTML","license":"MIT","keywords":["unified","rehype","plugin","sanitize","clean","html"],"repository":{"type":"git","url":"git+https://github.com/rehypejs/rehype-sanitize.git"},"bugs":{"url":"https://github.com/rehypejs/rehype-sanitize/issues"},"author":{"name":"Titus Wormer","email":"tituswormer@gmail.com","url":"https://wooorm.com"},"contributors":[{"name":"Titus Wormer","email":"tituswormer@gmail.com","url":"https://wooorm.com"}],"dependencies":{"hast-util-sanitize":"^2.0.0"},"devDependencies":{"browserify":"^16.0.0","deepmerge":"^3.0.0","nyc":"^14.0.0","prettier":"^1.0.0","rehype":"^8.0.0","remark-cli":"^6.0.0","remark-preset-wooorm":"^5.0.0","tape":"^4.0.0","tinyify":"^2.0.0","xo":"^0.24.0"},"scripts":{"format":"remark . -qfo && prettier --write \"**/*.js\" && xo --fix","build-bundle":"browserify index.js -s rehypeSanitize > rehype-sanitize.js","build-mangle":"browserify index.js -s rehypeSanitize -p tinyify > rehype-sanitize.min.js","build":"npm run build-bundle && npm run build-mangle","test-api":"node test","test-coverage":"nyc --reporter lcov tape test.js","test":"npm run format && npm run build && npm run test-coverage"},"nyc":{"check-coverage":true,"lines":100,"functions":100,"branches":100},"prettier":{"tabWidth":2,"useTabs":false,"singleQuote":true,"bracketSpacing":false,"semi":false,"trailingComma":"none"},"xo":{"prettier":true,"esnext":false,"ignores":["rehype-sanitize.js"]},"remarkConfig":{"plugins":["preset-wooorm"]},"gitHead":"e2cc13fbedf00deadddceefc831adc560cf3a2fa","homepage":"https://github.com/rehypejs/rehype-sanitize#readme","_id":"rehype-sanitize@3.0.0","_nodeVersion":"12.2.0","_npmVersion":"6.9.2","dist":{"shasum":"d3d031fd683e47da732970b08b99e2b67a71e2dd","size":3012,"noattachment":false,"key":"/rehype-sanitize/-/rehype-sanitize-3.0.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/rehype-sanitize/download/rehype-sanitize-3.0.0.tgz"},"maintainers":[{"name":"kmck","email":"keith@mcknig.ht"},{"name":"remcohaszing","email":""},{"name":"wooorm","email":"tituswormer@gmail.com"}],"_npmUser":{"name":"wooorm","email":"tituswormer@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/rehype-sanitize_3.0.0_1561984572899_0.9538617455372385"},"_hasShrinkwrap":false,"publish_time":1561984573032,"_cnpm_publish_time":1561984573032,"_cnpmcore_publish_time":"2021-12-16T17:36:59.147Z"},"2.0.3":{"name":"rehype-sanitize","version":"2.0.3","description":"rehype plugin to sanitize HTML","license":"MIT","keywords":["unified","rehype","plugin","sanitize","clean","html"],"repository":{"type":"git","url":"git+https://github.com/rehypejs/rehype-sanitize.git"},"bugs":{"url":"https://github.com/rehypejs/rehype-sanitize/issues"},"author":{"name":"Titus Wormer","email":"tituswormer@gmail.com","url":"https://wooorm.com"},"contributors":[{"name":"Titus Wormer","email":"tituswormer@gmail.com","url":"https://wooorm.com"}],"dependencies":{"hast-util-sanitize":"^1.1.0"},"devDependencies":{"browserify":"^16.0.0","deepmerge":"^3.0.0","nyc":"^14.0.0","prettier":"^1.0.0","rehype":"^7.0.0","remark-cli":"^6.0.0","remark-preset-wooorm":"^5.0.0","tape":"^4.0.0","tinyify":"^2.0.0","xo":"^0.24.0"},"scripts":{"format":"remark . -qfo && prettier --write \"**/*.js\" && xo --fix","build-bundle":"browserify index.js -s rehypeSanitize > rehype-sanitize.js","build-mangle":"browserify index.js -s rehypeSanitize -p tinyify > rehype-sanitize.min.js","build":"npm run build-bundle && npm run build-mangle","test-api":"node test","test-coverage":"nyc --reporter lcov tape test.js","test":"npm run format && npm run build && npm run test-coverage"},"nyc":{"check-coverage":true,"lines":100,"functions":100,"branches":100},"prettier":{"tabWidth":2,"useTabs":false,"singleQuote":true,"bracketSpacing":false,"semi":false,"trailingComma":"none"},"xo":{"prettier":true,"esnext":false,"ignores":["rehype-sanitize.js"]},"remarkConfig":{"plugins":["preset-wooorm"]},"gitHead":"49ddad6cffed23bc7e765e2b7e040eeb852bf3a3","homepage":"https://github.com/rehypejs/rehype-sanitize#readme","_id":"rehype-sanitize@2.0.3","_nodeVersion":"12.2.0","_npmVersion":"6.9.0","dist":{"shasum":"20b36076f32e68c04b04abddcf43cf5fdc69f561","size":3014,"noattachment":false,"key":"/rehype-sanitize/-/rehype-sanitize-2.0.3.tgz","tarball":"http://registry.cnpm.dingdandao.com/rehype-sanitize/download/rehype-sanitize-2.0.3.tgz"},"maintainers":[{"name":"kmck","email":"keith@mcknig.ht"},{"name":"remcohaszing","email":""},{"name":"wooorm","email":"tituswormer@gmail.com"}],"_npmUser":{"name":"wooorm","email":"tituswormer@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/rehype-sanitize_2.0.3_1559376657897_0.9964681901763475"},"_hasShrinkwrap":false,"publish_time":1559376658008,"_cnpm_publish_time":1559376658008,"_cnpmcore_publish_time":"2021-12-16T17:36:59.643Z"},"2.0.2":{"name":"rehype-sanitize","version":"2.0.2","description":"Sanitize HTML with rehype","license":"MIT","keywords":["rehype","plugin","sanitize","clean","html"],"repository":{"type":"git","url":"git+https://github.com/rehypejs/rehype-sanitize.git"},"bugs":{"url":"https://github.com/rehypejs/rehype-sanitize/issues"},"author":{"name":"Titus Wormer","email":"tituswormer@gmail.com","url":"https://wooorm.com"},"contributors":[{"name":"Titus Wormer","email":"tituswormer@gmail.com","url":"https://wooorm.com"}],"dependencies":{"hast-util-sanitize":"^1.1.0"},"devDependencies":{"browserify":"^16.0.0","deepmerge":"^2.0.0","nyc":"^13.0.0","prettier":"^1.13.7","rehype":"^6.0.0","remark-cli":"^6.0.0","remark-preset-wooorm":"^4.0.0","tape":"^4.0.0","tinyify":"^2.4.3","xo":"^0.23.0"},"scripts":{"format":"remark . -qfo && prettier --write '**/*.js' && xo --fix","build-bundle":"browserify index.js -s rehypeSanitize > rehype-sanitize.js","build-mangle":"browserify index.js -s rehypeSanitize -p tinyify > rehype-sanitize.min.js","build":"npm run build-bundle && npm run build-mangle","test-api":"node test","test-coverage":"nyc --reporter lcov tape test.js","test":"npm run format && npm run build && npm run test-coverage"},"nyc":{"check-coverage":true,"lines":100,"functions":100,"branches":100},"prettier":{"tabWidth":2,"useTabs":false,"singleQuote":true,"bracketSpacing":false,"semi":false,"trailingComma":"none"},"xo":{"prettier":true,"esnext":false,"ignores":["rehype-sanitize.js"]},"remarkConfig":{"plugins":["preset-wooorm"]},"gitHead":"b1796aed3fa0a274fbf93f1ad9699e4347ac5b7e","homepage":"https://github.com/rehypejs/rehype-sanitize#readme","_id":"rehype-sanitize@2.0.2","_npmVersion":"6.4.1","_nodeVersion":"11.0.0","_npmUser":{"name":"wooorm","email":"tituswormer@gmail.com"},"dist":{"shasum":"b84586af1111a82c860fc31538e9f72b6b937c00","size":2817,"noattachment":false,"key":"/rehype-sanitize/-/rehype-sanitize-2.0.2.tgz","tarball":"http://registry.cnpm.dingdandao.com/rehype-sanitize/download/rehype-sanitize-2.0.2.tgz"},"maintainers":[{"name":"kmck","email":"keith@mcknig.ht"},{"name":"remcohaszing","email":""},{"name":"wooorm","email":"tituswormer@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/rehype-sanitize_2.0.2_1542457720102_0.0830579083104086"},"_hasShrinkwrap":false,"publish_time":1542457720287,"_cnpm_publish_time":1542457720287,"_cnpmcore_publish_time":"2021-12-16T17:36:59.846Z"},"2.0.1":{"name":"rehype-sanitize","version":"2.0.1","description":"Sanitize HTML with rehype","license":"MIT","keywords":["rehype","plugin","sanitize","clean","html"],"repository":{"type":"git","url":"git+https://github.com/wooorm/rehype-sanitize.git"},"bugs":{"url":"https://github.com/wooorm/rehype-sanitize/issues"},"author":{"name":"Titus Wormer","email":"tituswormer@gmail.com","url":"http://wooorm.com"},"contributors":[{"name":"Titus Wormer","email":"tituswormer@gmail.com","url":"http://wooorm.com"}],"files":["index.js"],"dependencies":{"hast-util-sanitize":"^1.1.0"},"devDependencies":{"browserify":"^14.1.0","deepmerge":"^1.2.0","esmangle":"^1.0.0","hast-util-sanitize":"^1.1.0","nyc":"^11.0.0","rehype":"^5.0.0","remark-cli":"^3.0.0","remark-preset-wooorm":"^3.0.0","tape":"^4.0.0","xo":"^0.18.0"},"scripts":{"build-md":"remark . -qfo","build-bundle":"browserify index.js --bare -s rehypeSanitize > rehype-sanitize.js","build-mangle":"esmangle rehype-sanitize.js > rehype-sanitize.min.js","build":"npm run build-md && npm run build-bundle && npm run build-mangle","lint":"xo","test-api":"node test/index.js","test-coverage":"nyc --reporter lcov tape test.js","test":"npm run build && npm run lint && npm run test-coverage"},"nyc":{"check-coverage":true,"lines":100,"functions":100,"branches":100},"xo":{"space":true,"esnext":false,"ignores":["rehype-sanitize.js"]},"remarkConfig":{"plugins":["preset-wooorm"]},"gitHead":"31b0ff2a949de38ddd76310143077c3cb36e5bbf","homepage":"https://github.com/wooorm/rehype-sanitize#readme","_id":"rehype-sanitize@2.0.1","_shasum":"ab2866cacc51b45c30696cfee7b7b30cf918465e","_from":".","_npmVersion":"2.14.2","_nodeVersion":"4.0.0","_npmUser":{"name":"wooorm","email":"tituswormer@gmail.com"},"dist":{"shasum":"ab2866cacc51b45c30696cfee7b7b30cf918465e","size":2484,"noattachment":false,"key":"/rehype-sanitize/-/rehype-sanitize-2.0.1.tgz","tarball":"http://registry.cnpm.dingdandao.com/rehype-sanitize/download/rehype-sanitize-2.0.1.tgz"},"maintainers":[{"name":"kmck","email":"keith@mcknig.ht"},{"name":"remcohaszing","email":""},{"name":"wooorm","email":"tituswormer@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/rehype-sanitize-2.0.1.tgz_1497968447073_0.14819502085447311"},"directories":{},"publish_time":1497968448082,"_hasShrinkwrap":false,"_cnpm_publish_time":1497968448082,"_cnpmcore_publish_time":"2021-12-16T17:37:00.064Z"},"2.0.0":{"name":"rehype-sanitize","version":"2.0.0","description":"Sanitize HTML with rehype","license":"MIT","keywords":["rehype","plugin","sanitize","clean","html"],"repository":{"type":"git","url":"git+https://github.com/wooorm/rehype-sanitize.git"},"bugs":{"url":"https://github.com/wooorm/rehype-sanitize/issues"},"author":{"name":"Titus Wormer","email":"tituswormer@gmail.com","url":"http://wooorm.com"},"contributors":[{"name":"Titus Wormer","email":"tituswormer@gmail.com","url":"http://wooorm.com"}],"files":["index.js"],"dependencies":{"hast-util-sanitize":"^1.1.0"},"devDependencies":{"bail":"^1.0.1","browserify":"^14.1.0","deepmerge":"^1.2.0","esmangle":"^1.0.0","hast-util-sanitize":"^1.1.0","is-hidden":"^1.0.1","negate":"^1.0.0","nyc":"^10.0.0","rehype":"^4.0.0","remark-cli":"^3.0.0","remark-preset-wooorm":"^2.0.0","tape":"^4.0.0","to-vfile":"^2.1.1","xo":"^0.17.0"},"scripts":{"build-md":"remark . -qfo","build-bundle":"browserify index.js --bare -s rehypeSanitize > rehype-sanitize.js","build-mangle":"esmangle rehype-sanitize.js > rehype-sanitize.min.js","build":"npm run build-md && npm run build-bundle && npm run build-mangle","lint":"xo","test-api":"node test/index.js","test-coverage":"nyc --reporter lcov tape test.js","test":"npm run build && npm run lint && npm run test-coverage"},"nyc":{"check-coverage":true,"lines":100,"functions":100,"branches":100},"xo":{"space":true,"ignores":["rehype-sanitize.js"]},"remarkConfig":{"plugins":["preset-wooorm"]},"gitHead":"31a265ab5d993694224722ed86cf949822f14e82","homepage":"https://github.com/wooorm/rehype-sanitize#readme","_id":"rehype-sanitize@2.0.0","_shasum":"af5fb9d88ae020bd09f5bbf0ee1440c02556836c","_from":".","_npmVersion":"4.0.3","_nodeVersion":"7.0.0","_npmUser":{"name":"wooorm","email":"tituswormer@gmail.com"},"dist":{"shasum":"af5fb9d88ae020bd09f5bbf0ee1440c02556836c","size":2480,"noattachment":false,"key":"/rehype-sanitize/-/rehype-sanitize-2.0.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/rehype-sanitize/download/rehype-sanitize-2.0.0.tgz"},"maintainers":[{"name":"kmck","email":"keith@mcknig.ht"},{"name":"remcohaszing","email":""},{"name":"wooorm","email":"tituswormer@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/rehype-sanitize-2.0.0.tgz_1487884687558_0.8145027121063322"},"directories":{},"publish_time":1487884689519,"_hasShrinkwrap":false,"_cnpm_publish_time":1487884689519,"_cnpmcore_publish_time":"2021-12-16T17:37:00.305Z"}},"readme":"# rehype-sanitize\n\n[![Build][build-badge]][build]\n[![Coverage][coverage-badge]][coverage]\n[![Downloads][downloads-badge]][downloads]\n[![Size][size-badge]][size]\n[![Sponsors][sponsors-badge]][collective]\n[![Backers][backers-badge]][collective]\n[![Chat][chat-badge]][chat]\n\n**[rehype][]** plugin to sanitize HTML.\n\n## Contents\n\n*   [What is this?](#what-is-this)\n*   [When should I use this?](#when-should-i-use-this)\n*   [Install](#install)\n*   [Use](#use)\n*   [API](#api)\n    *   [`defaultSchema`](#defaultschema)\n    *   [`unified().use(rehypeSanitize[, schema])`](#unifieduserehypesanitize-schema)\n    *   [`Options`](#options)\n*   [Example](#example)\n    *   [Example: headings (DOM clobbering)](#example-headings-dom-clobbering)\n    *   [Example: math](#example-math)\n    *   [Example: syntax highlighting](#example-syntax-highlighting)\n*   [Types](#types)\n*   [Compatibility](#compatibility)\n*   [Security](#security)\n*   [Related](#related)\n*   [Contribute](#contribute)\n*   [License](#license)\n\n## What is this?\n\nThis package is a [unified][] ([rehype][]) plugin to make sure HTML is safe.\nIt drops anything that isn’t explicitly allowed by a schema (defaulting to how\n`github.com` works).\n\n**unified** is a project that transforms content with abstract syntax trees\n(ASTs).\n**rehype** adds support for HTML to unified.\n**hast** is the HTML AST that rehype uses.\nThis is a rehype plugin that transforms hast.\n\n## When should I use this?\n\nIt’s recommended to sanitize your HTML any time you do not completely trust\nauthors or the plugins being used.\n\nThis plugin is built on [`hast-util-sanitize`][hast-util-sanitize], which cleans\n[hast][] syntax trees.\nrehype focusses on making it easier to transform content by abstracting such\ninternals away.\n\n## Install\n\nThis package is [ESM only][esm].\nIn Node.js (version 16+), install with [npm][]:\n\n```sh\nnpm install rehype-sanitize\n```\n\nIn Deno with [`esm.sh`][esmsh]:\n\n```js\nimport rehypeSanitize from 'https://esm.sh/rehype-sanitize@6'\n```\n\nIn browsers with [`esm.sh`][esmsh]:\n\n```html\n<script type=\"module\">\n  import rehypeSanitize from 'https://esm.sh/rehype-sanitize@6?bundle'\n</script>\n```\n\n## Use\n\nSay we have the following file `index.html`:\n\n```html\n<div onmouseover=\"alert('alpha')\">\n  <a href=\"jAva script:alert('bravo')\">delta</a>\n  <img src=\"x\" onerror=\"alert('charlie')\">\n  <iframe src=\"javascript:alert('delta')\"></iframe>\n  <math>\n    <mi xlink:href=\"data:x,<script>alert('echo')</script>\"></mi>\n  </math>\n</div>\n<script>\nrequire('child_process').spawn('echo', ['hack!']);\n</script>\n```\n\n…and our module `example.js` looks as follows:\n\n```js\nimport rehypeParse from 'rehype-parse'\nimport rehypeSanitize from 'rehype-sanitize'\nimport rehypeStringify from 'rehype-stringify'\nimport {read} from 'to-vfile'\nimport {unified} from 'unified'\n\nconst file = await unified()\n  .use(rehypeParse, {fragment: true})\n  .use(rehypeSanitize)\n  .use(rehypeStringify)\n  .process(await read('index.html'))\n\nconsole.log(String(file))\n```\n\nNow running `node example.js` yields:\n\n```html\n<div>\n  <a>delta</a>\n  <img src=\"x\">\n\n\n\n\n</div>\n```\n\n## API\n\nThis package exports the identifier [`defaultSchema`][api-default-schema].\nThe default export is [`rehypeSanitize`][api-rehype-sanitize].\n\n### `defaultSchema`\n\nDefault schema ([`Options`][api-options]).\n\nFollows GitHub style sanitation.\n\n### `unified().use(rehypeSanitize[, schema])`\n\nSanitize HTML.\n\n###### Parameters\n\n*   `options` ([`Options`][api-options], optional)\n    — configuration\n\n###### Returns\n\nTransform ([`Transformer`][unified-transformer]).\n\n### `Options`\n\nSchema that defines what nodes and properties are allowed (TypeScript type).\n\nThis option is a bit advanced as it requires knowledge of syntax trees, so see\nthe docs for [`Schema` in `hast-util-sanitize`][hast-util-sanitize-schema].\n\n## Example\n\n### Example: headings (DOM clobbering)\n\nDOM clobbering is an attack in which malicious HTML confuses an application by\nnaming elements, through `id` or `name` attributes, such that they overshadow\npresumed properties in `window` (the global scope in browsers).\nDOM clobbering often occurs when user content is used to generate heading IDs.\nTo illustrate, say we have this `browser.js` file:\n\n```js\nconsole.log(current)\n```\n\nAnd our module `example.js` contains:\n\n```js\n/**\n * @typedef {import('hast').Root} Root\n */\n\nimport fs from 'node:fs/promises'\nimport rehypeParse from 'rehype-parse'\nimport rehypeStringify from 'rehype-stringify'\nimport {unified} from 'unified'\n\nconst browser = String(await fs.readFile('browser.js'))\nconst document = `<a name=\"old\"></a>\n<h1 id=\"current\">Current</h1>\n${`<p>${'Lorem ipsum dolor sit amet. '.repeat(20)}</p>\\n`.repeat(20)}\n<p>Link to <a href=\"#current\">current</a>, link to <a href=\"#old\">old</a>.`\n\nconst file = await unified()\n  .use(rehypeParse, {fragment: true})\n  .use(function () {\n    /**\n     * @param {Root} tree\n     */\n    return function (tree) {\n      tree.children.push({\n        type: 'element',\n        tagName: 'script',\n        properties: {type: 'module'},\n        children: [{type: 'text', value: browser}]\n      })\n    }\n  })\n  .use(rehypeStringify)\n  .process(document)\n\nawait fs.writeFile('output.html', String(file))\n```\n\nThis code processes HTML, inlines our browser script into it, and writes it out.\nThe input HTML models how markdown often looks on platforms like GitHub, which\nallow heading IDs to be generated from their text and embedded HTML (including\n`<a name=\"old\"></a>`, which can be used to create anchors for renamed headings\nto prevent links from breaking).\nThe generated HTML looks like:\n\n```html\n<a name=\"old\"></a>\n<h1 id=\"current\">Current</h1>\n<p>Lorem ipsum dolor sit amet.<!--…--></p>\n<p>Link to <a href=\"#current\">current</a>, link to <a href=\"#old\">old</a>.</p>\n<script type=\"module\">console.log(current)</script>\n```\n\nWhen you run this code locally and open the generated `output.html`, you can\nobserve that the links at the bottom work, but also that the `<h1>` element\nis printed to the console (the clobbering).\n\n`rehype-sanitize` solves the clobbering by prefixing every `id` and `name`\nattribute with `'user-content-'`.\nChanging `example.js`:\n\n```diff\n@@ -15,6 +15,7 @@ ${`<p>${'Lorem ipsum dolor sit amet. '.repeat(20)}</p>\\n`.repeat(20)}\n\n   const file = await unified()\n     .use(rehypeParse, {fragment: true})\n+    .use(rehypeSanitize)\n     .use(function () {\n       /**\n        * @param {Root} tree\n```\n\nNow yields:\n\n```diff\n-<a name=\"old\"></a>\n-<h1 id=\"current\">Current</h1>\n+<a name=\"user-content-old\"></a>\n+<h1 id=\"user-content-current\">Current</h1>\n```\n\nThis introduces another problem as the links are now broken.\nIt could perhaps be solved by changing all links, but that would make the links\nrather ugly, and we’d need to track what IDs we have outside of the user content\non our pages too.\nAlternatively, and what arguably looks better, we could rewrite pretty links to\ntheir safe but ugly prefixed elements.\nThis is what GitHub does.\nReplace `browser.js` with the following:\n\n```js\n/// <reference lib=\"dom\" />\n/* eslint-env browser */\n\n// Page load (you could wrap this in a DOM ready if the script is loaded early).\nhashchange()\n\n// When URL changes.\nwindow.addEventListener('hashchange', hashchange)\n\n// When on the URL already, perhaps after scrolling, and clicking again, which\n// doesn’t emit `hashchange`.\ndocument.addEventListener(\n  'click',\n  function (event) {\n    if (\n      event.target &&\n      event.target instanceof HTMLAnchorElement &&\n      event.target.href === location.href &&\n      location.hash.length > 1\n    ) {\n      setImmediate(function () {\n        if (!event.defaultPrevented) {\n          hashchange()\n        }\n      })\n    }\n  },\n  false\n)\n\nfunction hashchange() {\n  /** @type {string | undefined} */\n  let hash\n\n  try {\n    hash = decodeURIComponent(location.hash.slice(1)).toLowerCase()\n  } catch {\n    return\n  }\n\n  const name = 'user-content-' + hash\n  const target =\n    document.getElementById(name) || document.getElementsByName(name)[0]\n\n  if (target) {\n    setImmediate(function () {\n      target.scrollIntoView()\n    })\n  }\n}\n```\n\n### Example: math\n\nMath can be enabled in rehype by using the plugins\n[`rehype-katex`][rehype-katex] or [`rehype-mathjax`][rehype-mathjax].\nThe operate on `span`s and `div`s with certain classes and inject complex markup\nand of inline styles, most of which this plugin will remove.\nSay our module `example.js` contains:\n\n```js\nimport rehypeKatex from 'rehype-katex'\nimport rehypeParse from 'rehype-parse'\nimport rehypeSanitize from 'rehype-sanitize'\nimport rehypeStringify from 'rehype-stringify'\nimport {unified} from 'unified'\n\nconst file = await unified()\n  .use(rehypeParse, {fragment: true})\n  .use(rehypeKatex)\n  .use(rehypeSanitize)\n  .use(rehypeStringify)\n  .process('<span class=\"math math-inline\">L</span>')\n\nconsole.log(String(file))\n```\n\nRunning that yields:\n\n```html\n<span><span><span>LL</span><span aria-hidden=\"true\"><span><span></span><span>L</span></span></span></span></span>\n```\n\nIt is possible to pass a schema which allows MathML and inline styles, but it\nwould be complex, and allows *all* inline styles, which is unsafe.\nAlternatively, and arguably better, would be to *first* sanitize the HTML,\nallowing only the specific classes that `rehype-katex` and `rehype-mathjax` use,\nand *then* using those plugins:\n\n```diff\n@@ -1,7 +1,7 @@\n import rehypeKatex from 'rehype-katex'\n import rehypeParse from 'rehype-parse'\n-import rehypeSanitize from 'rehype-sanitize'\n+import rehypeSanitize, {defaultSchema} from 'rehype-sanitize'\n import rehypeStringify from 'rehype-stringify'\n import {unified} from 'unified'\n\n main()\n@@ -9,8 +9,21 @@ main()\n const file = await unified()\n   .use(rehypeParse, {fragment: true})\n+  .use(rehypeSanitize, {\n+    ...defaultSchema,\n+    attributes: {\n+      ...defaultSchema.attributes,\n+      div: [\n+        ...(defaultSchema.attributes.div || []),\n+        ['className', 'math', 'math-display']\n+      ],\n+      span: [\n+        ...(defaultSchema.attributes.span || []),\n+        ['className', 'math', 'math-inline']\n+      ]\n+    }\n+  })\n   .use(rehypeKatex)\n-  .use(rehypeSanitize)\n   .use(rehypeStringify)\n   .process('<span class=\"math math-inline\">L</span>')\n```\n\n### Example: syntax highlighting\n\nHighlighting, for example with [`rehype-highlight`][rehype-highlight], can be\nsolved similar to how math is solved (see previous example).\nThat is, use `rehype-sanitize` and allow the classes needed for highlighting,\nand highlight afterwards:\n\n```js\nimport rehypeHighlight from 'rehype-highlight'\nimport rehypeParse from 'rehype-parse'\nimport rehypeSanitize, {defaultSchema} from 'rehype-sanitize'\nimport rehypeStringify from 'rehype-stringify'\nimport {unified} from 'unified'\n\nconst file = await unified()\n  .use(rehypeParse, {fragment: true})\n  .use(rehypeSanitize, {\n    ...defaultSchema,\n    attributes: {\n      ...defaultSchema.attributes,\n      code: [\n        ...(defaultSchema.attributes.code || []),\n        // List of all allowed languages:\n        ['className', 'language-js', 'language-css', 'language-md']\n      ]\n    }\n  })\n  .use(rehypeHighlight, {subset: false})\n  .use(rehypeStringify)\n  .process('<pre><code className=\"language-js\">console.log(1)</code></pre>')\n\nconsole.log(String(file))\n```\n\nAlternatively, it’s possible to make highlighting safe by allowing all the\nclasses used on tokens.\nModifying the above code like so:\n\n```diff\n const file = await unified()\n   .use(rehypeParse, {fragment: true})\n+  .use(rehypeHighlight, {subset: false})\n   .use(rehypeSanitize, {\n     ...defaultSchema,\n     attributes: {\n       ...defaultSchema.attributes,\n-      code: [\n-        ...(defaultSchema.attributes.code || []),\n-        // List of all allowed languages:\n-        ['className', 'hljs', 'language-js', 'language-css', 'language-md']\n+      span: [\n+        ...(defaultSchema.attributes.span || []),\n+        // List of all allowed tokens:\n+        ['className', 'hljs-addition', 'hljs-attr', 'hljs-attribute', 'hljs-built_in', 'hljs-bullet', 'hljs-char', 'hljs-code', 'hljs-comment', 'hljs-deletion', 'hljs-doctag', 'hljs-emphasis', 'hljs-formula', 'hljs-keyword', 'hljs-link', 'hljs-literal', 'hljs-meta', 'hljs-name', 'hljs-number', 'hljs-operator', 'hljs-params', 'hljs-property', 'hljs-punctuation', 'hljs-quote', 'hljs-regexp', 'hljs-section', 'hljs-selector-attr', 'hljs-selector-class', 'hljs-selector-id', 'hljs-selector-pseudo', 'hljs-selector-tag', 'hljs-string', 'hljs-strong', 'hljs-subst', 'hljs-symbol', 'hljs-tag', 'hljs-template-tag', 'hljs-template-variable', 'hljs-title', 'hljs-type', 'hljs-variable'\n+          ]\n       ]\n     }\n   })\n-  .use(rehypeHighlight, {subset: false})\n   .use(rehypeStringify)\n   .process('<pre><code className=\"language-js\">console.log(1)</code></pre>')\n```\n\n## Types\n\nThis package is fully typed with [TypeScript][].\nIt exports the additional type [`Options`][api-options].\n\n## Compatibility\n\nProjects maintained by the unified collective are compatible with maintained\nversions of Node.js.\n\nWhen we cut a new major release, we drop support for unmaintained versions of\nNode.\nThis means we try to keep the current release line, `rehype-sanitize@^6`,\ncompatible with Node.js 16.\n\nThis plugin works with `rehype-parse` version 3+, `rehype-stringify` version 3+,\n`rehype` version 5+, and `unified` version 6+.\n\n## Security\n\nThe defaults are safe but improper use of `rehype-sanitize` can open you up to a\n[cross-site scripting (XSS)][xss] attack.\n\nUse `rehype-sanitize` after the last unsafe thing: everything after\n`rehype-sanitize` could be unsafe (but is fine if you do trust it).\n\n## Related\n\n*   [`hast-util-sanitize`](https://github.com/syntax-tree/hast-util-sanitize)\n    — utility to sanitize [hast][]\n*   [`rehype-format`](https://github.com/rehypejs/rehype-format)\n    — format HTML\n*   [`rehype-minify`](https://github.com/rehypejs/rehype-minify)\n    — minify HTML\n\n## Contribute\n\nSee [`contributing.md`][contributing] in [`rehypejs/.github`][health] for ways\nto get started.\nSee [`support.md`][support] for ways to get help.\n\nThis project has a [code of conduct][coc].\nBy interacting with this repository, organization, or community you agree to\nabide by its terms.\n\n## License\n\n[MIT][license] © [Titus Wormer][author]\n\n<!-- Definitions -->\n\n[build-badge]: https://github.com/rehypejs/rehype-sanitize/workflows/main/badge.svg\n\n[build]: https://github.com/rehypejs/rehype-sanitize/actions\n\n[coverage-badge]: https://img.shields.io/codecov/c/github/rehypejs/rehype-sanitize.svg\n\n[coverage]: https://codecov.io/github/rehypejs/rehype-sanitize\n\n[downloads-badge]: https://img.shields.io/npm/dm/rehype-sanitize.svg\n\n[downloads]: https://www.npmjs.com/package/rehype-sanitize\n\n[size-badge]: https://img.shields.io/bundlejs/size/rehype-sanitize\n\n[size]: https://bundlejs.com/?q=rehype-sanitize\n\n[sponsors-badge]: https://opencollective.com/unified/sponsors/badge.svg\n\n[backers-badge]: https://opencollective.com/unified/backers/badge.svg\n\n[collective]: https://opencollective.com/unified\n\n[chat-badge]: https://img.shields.io/badge/chat-discussions-success.svg\n\n[chat]: https://github.com/rehypejs/rehype/discussions\n\n[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c\n\n[esmsh]: https://esm.sh\n\n[npm]: https://docs.npmjs.com/cli/install\n\n[health]: https://github.com/rehypejs/.github\n\n[contributing]: https://github.com/rehypejs/.github/blob/HEAD/contributing.md\n\n[support]: https://github.com/rehypejs/.github/blob/HEAD/support.md\n\n[coc]: https://github.com/rehypejs/.github/blob/HEAD/code-of-conduct.md\n\n[license]: license\n\n[author]: https://wooorm.com\n\n[xss]: https://en.wikipedia.org/wiki/Cross-site_scripting\n\n[typescript]: https://www.typescriptlang.org\n\n[hast]: https://github.com/syntax-tree/hast\n\n[hast-util-sanitize]: https://github.com/syntax-tree/hast-util-sanitize\n\n[hast-util-sanitize-schema]: https://github.com/syntax-tree/hast-util-sanitize#schema\n\n[rehype]: https://github.com/rehypejs/rehype\n\n[rehype-katex]: https://github.com/remarkjs/remark-math/tree/main/packages/rehype-katex\n\n[rehype-mathjax]: https://github.com/remarkjs/remark-math/tree/main/packages/rehype-mathjax\n\n[rehype-highlight]: https://github.com/rehypejs/rehype-highlight\n\n[unified]: https://github.com/unifiedjs/unified\n\n[unified-transformer]: https://github.com/unifiedjs/unified?tab=readme-ov-file#transformer\n\n[api-default-schema]: #defaultschema\n\n[api-options]: #options\n\n[api-rehype-sanitize]: #unifieduserehypesanitize-schema\n","_attachments":{},"homepage":"https://github.com/rehypejs/rehype-sanitize#readme","bugs":{"url":"https://github.com/rehypejs/rehype-sanitize/issues"},"license":"MIT"}