{"_id":"@contrast/trumpet","_rev":"29-ada8ebb41af69f853c80682acdab6e2b","name":"@contrast/trumpet","dist-tags":{"latest":"1.8.0"},"versions":{"1.8.0":{"name":"@contrast/trumpet","version":"1.8.0","keywords":["html","streaming","parser","transform","selectors","css"],"author":{"url":"http://substack.net","name":"James Halliday","email":"mail@substack.net"},"license":"MIT","_id":"@contrast/trumpet@1.8.0","maintainers":[{"name":"michaelwitz","email":"michael.woytowitz@contrastsecurity.com"},{"name":"ao10","email":"ao10@umbc.edu"},{"name":"andrew.shanks","email":"andrew.shanks@contrastsecurity.com"},{"name":"pmcclory","email":"pat.mcclory@contrastsecurity.com"},{"name":"codebylogan","email":"mrslogansmyth@gmail.com"},{"name":"jcs!","email":"jamie.mcgurk@contrastsecurity.com"},{"name":"annettenugent","email":"annette.nugent@contrastsecurity.com"},{"name":"garellanosoler","email":"gerardo.arellano@contrastsecurity.com"},{"name":"tough-griff","email":"gryphon92@gmail.com"},{"name":"giners","email":"caustin.adwan@gmail.com"},{"name":"avuxo","email":"avuxob@gmail.com"},{"name":"bizob2828","email":"robert.evans25@gmail.com"},{"name":"meandthemoon","email":"md.henry4@gmail.com"},{"name":"dhafley","email":"david.hafley@contrastsecurity.com"},{"name":"mattaustin","email":"matt@m-austin.com"}],"homepage":"https://github.com/substack/node-trumpet#readme","bugs":{"url":"https://github.com/substack/node-trumpet/issues"},"dist":{"shasum":"0193635548acbc2972c66f519f9425558e3930c2","tarball":"https://registry.npmjs.org/@contrast/trumpet/-/trumpet-1.8.0.tgz","fileCount":83,"integrity":"sha512-TePdGu3Oqo3nS4k37ZShfbKkOCQwXw+Su6hQb1rD6bZQvk+erAauK3sU3LlaZ55CxagBGlsNDD9BdvXaIh4bow==","signatures":[{"sig":"MEQCIFXJyq73xEH7chKZYIfFPlJSJ+ZQHwneMg0Z2Ja3PHvzAiA2NovDKT7mBs3xmMDnKmhHcc5puGTCuDo10wYvHtxHnQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":75101,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJelLVKCRA9TVsSAnZWagAAY3sP/3OR5n+1Vj/1yZAWYVsj\nAzjolsb7mPqe/ucUNrKLCBQbDp1uMiuq8CGZf+k4JQyULqsVO3ftkURwU8tX\nFFPR1lyu9kXBStsDXTeR8Af3DDzQbuVLlD2ui6yD2G2NMaDapdmLDcW44I4d\nu9/GBR6mwUYNa2LRnQ//pXQ9uF+GFQJwF/jInHzhtAnmVVkDBRwLkF2MgO4W\nWwr9mD17FqHuUo8SXAagSQzydqKAy6kQT300QX9uw21DK4dFy76CvJfr5xE9\nE3UVhBr9DviBRwtNqAbsnIbFDb4y76gEIhH+E8zT4T8RgqAPxkhMT71jh94z\n6v0ERINKpbz0Xz9iVPBJQf/Wbh28TeBYdAGs/bFbTkGBWDSwTa7y0upzd7tz\n4K8PJFNri6MKV8QOZDO0Bv+ox/em0Vg2B3Cgi/kUFj+nyy0H3MM+nnJrbvCK\nOikefFL02iNi88l+OV8CaN/5DutruyKgjhZZ/XnEwkpL7sEyRsKLySizKprl\ngiTp7SH0FNqgcP5rFva/jOkluQsKQjlYhc/1l/LDfm3Ia2zoG8qK/nzuPIoj\nMsa/rhu3FyX5pgXDspp4yo+/6f+MgaqxiGUE38VD01uJogi6zaVK6TxVrkD7\nTOWPH2QT91b0oM0Dl9EmSZpffwTNlj0ydqwTbT3uKi2dpx24sIBs8ercOxiM\ncWKH\r\n=5Rem\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","engine":{"node":">=0.4"},"gitHead":"18ee631a718f2e23e541874ec65a3cfec08f1416","scripts":{"test":"tape test/*.js"},"_npmUser":{"name":"tough-griff","email":"gryphon92@gmail.com"},"repository":{"url":"git+ssh://git@github.com/substack/node-trumpet.git","type":"git"},"_npmVersion":"6.14.4","description":"parse and transform streaming html using css selectors","directories":{},"_nodeVersion":"10.20.0","dependencies":{"inherits":"^2.0.0","through2":"^1.0.0","duplexer2":"~0.0.2","html-tokenize":"^2.0.1","readable-stream":"^1.0.27-1","@contrast/html-select":"^2.4.0"},"_hasShrinkwrap":false,"devDependencies":{"tape":"^4.13.2","through":"~2.3.4","concat-stream":"~1.4.5"},"_npmOperationalInternal":{"tmp":"tmp/trumpet_1.8.0_1586804041376_0.07871837666899761","host":"s3://npm-registry-packages"}}},"time":{"created":"2020-04-13T18:54:01.376Z","modified":"2025-09-17T18:30:26.314Z","1.8.0":"2020-04-13T18:54:01.637Z"},"bugs":{"url":"https://github.com/substack/node-trumpet/issues"},"author":{"url":"http://substack.net","name":"James Halliday","email":"mail@substack.net"},"license":"MIT","homepage":"https://github.com/substack/node-trumpet#readme","keywords":["html","streaming","parser","transform","selectors","css"],"repository":{"url":"git+ssh://git@github.com/substack/node-trumpet.git","type":"git"},"description":"parse and transform streaming html using css selectors","maintainers":[{"email":"gryphon92@gmail.com","name":"tough-griff"},{"email":"christopher.dunne@contrastsecurity.com","name":"chrisdunne"},{"email":"nodejs@contrastsecurity.com","name":"contrast_admin"},{"email":"Jacob.kaplan@contrastsecurity.com","name":"jcolekaplan"},{"email":"contrast-labs@contrastsecurity.com","name":"contrastsec"},{"email":"matthew.henry@contrastsecurity.com","name":"mhenry-contrast"},{"email":"naomi.buckwalter@contrastsecurity.com","name":"nbuckwalt"}],"readme":"# trumpet\n\nparse and transform streaming html using css selectors\n\n[![build status](https://secure.travis-ci.org/substack/node-trumpet.png)](http://travis-ci.org/substack/node-trumpet)\n\n![trumpet](http://substack.net/images/trumpet.png)\n\n# example\n\n## table\n\ninput html:\n\n``` html\n<table>\n  <tbody>blah blah blah</tbody>\n  <tr><td>there</td></tr>\n  <tr><td>it</td></tr>\n  <tr><td>is</td></tr>\n</table>\n```\n\n``` js\nvar trumpet = require('trumpet');\nvar tr = trumpet();\ntr.pipe(process.stdout);\n \nvar ws = tr.select('tbody').createWriteStream();\nws.end('<tr><td>rawr</td></tr>');\n\nvar fs = require('fs');\nfs.createReadStream(__dirname + '/html/table.html').pipe(tr);\n```\n\noutput:\n\n``` html\n<table>\n  <tbody><tr><td>rawr</td></tr></tbody>\n  <tr><td>there</td></tr>\n  <tr><td>it</td></tr>\n  <tr><td>is</td></tr>\n</table>\n```\n\n## read all\n\ninput html:\n\n``` html\n<html>\n  <head>\n    <title>beep</title>\n  </head>\n  <body>\n    <div class=\"a\">¡¡¡</div>\n    <div class=\"b\">\n      <span>tacos</span>\n      <span> y </span>\n      <span>burritos</span>\n    </div>\n    <div class=\"a\">!!!</div>\n  </body>\n</html>\n```\n\n``` js\nvar trumpet = require('trumpet');\nvar tr = trumpet();\n\ntr.selectAll('.b span', function (span) {\n    span.createReadStream().pipe(process.stdout);\n});\n\nvar fs = require('fs');\nfs.createReadStream(__dirname + '/html/read_all.html').pipe(tr);\n```\n\noutput:\n\n``` html\ntacos y burritos\n```\n\n# methods\n\n``` js\nvar trumpet = require('trumpet')\n```\n\n## var tr = trumpet(opts)\n\nCreate a new trumpet stream. This stream is readable and writable.\nPipe an html stream into `tr` and get back a transformed html stream.\n\nParse errors are emitted by `tr` in an `'error'` event.\n\n## var elem = tr.select(selector)\n\nReturn a result object `elem` for the first element matching `selector`.\n\n## tr.selectAll(selector, function (elem) {})\n\nGet a result object `elem` for every element matching `selector`.\n\n## elem.getAttribute(name, cb)\n\nWhen the selector for `elem` matches, query the case-insensitive attribute\ncalled `name` with `cb(value)`.\n\nReturns `elem`.\n\n## elem.getAttributes(name, cb)\n\nGet all the elements in `cb(attributes)` as an object `attributes` with\nlower-case keys.\n\nReturns `elem`.\n\n## elem.setAttribute(name, value)\n\nWhen the selector for `elem` matches, replace the case-insensitive attribute\ncalled `name` with `value`.\n\nIf the attribute doesn't exist, it will be created in the output stream.\n\nReturns `elem`.\n\n## elem.removeAttribute(name)\n\nWhen the selector for `elem` matches, remove the attribute called `name` if it\nexists.\n\nReturns `elem`.\n\n## elem.createReadStream(opts)\n\nCreate a new readable stream with the inner html content under `elem`.\n\nTo use the outer html content instead of the inner, set `opts.outer` to `true`.\n\n## elem.createWriteStream(opts)\n\nCreate a new write stream to replace the inner html content under `elem`.\n\nTo use the outer html content instead of the inner, set `opts.outer` to `true`.\n\n## elem.createStream(opts)\n\nCreate a new readable writable stream that outputs the content under `elem` and\nreplaces the content with the data written to it.\n\nTo use the outer html content instead of the inner, set `opts.outer` to `true`.\n\n## tr.createStream(sel, opts)\n\nShort-hand for `tr.select(sel).createStream(opts)`.\n\n## tr.createReadStream(sel, opts)\n\nShort-hand for `tr.select(sel).createReadStream(opts)`.\n\n## tr.createWriteStream(sel, opts)\n\nShort-hand for `tr.select(sel).createWriteStream(opts)`.\n\n# attributes\n\n## elem.name\n\nThe element name as a lower-case string. For example: `'div'`.\n\n# selector syntax\n\nPresently these [css selectors](http://www.w3.org/TR/CSS2/selector.html) work:\n\n* *\n* E\n* E F\n* E > F\n* E + F\n* E.class\n* E#id\n* E[attr=value]\n* E[attr~=search]\n* E[attr|=prefix]\n* E[attr^=prefix]\n* E[attr$=suffix]\n* E[attr*=search]\n\n# install\n\nWith [npm](http://npmjs.org) do:\n\n```\nnpm install trumpet\n```\n\n# license\n\nMIT\n","readmeFilename":"readme.markdown"}