{"_id":"multiline","_rev":"140243","name":"multiline","description":"Multiline strings in JavaScript","dist-tags":{"latest":"2.0.0"},"maintainers":[{"name":"sindresorhus","email":""}],"time":{"modified":"2021-06-03T11:26:28.000Z","created":"2014-03-05T20:31:10.837Z","2.0.0":"2018-10-14T11:34:27.832Z","1.0.2":"2015-01-10T19:51:57.964Z","1.0.1":"2014-10-03T22:16:17.497Z","1.0.0":"2014-08-17T18:52:28.489Z","0.3.4":"2014-04-30T22:32:47.046Z","0.3.3":"2014-04-29T23:16:19.857Z","0.3.2":"2014-04-06T23:05:42.957Z","0.3.1":"2014-04-06T22:50:28.424Z","0.3.0":"2014-03-29T14:46:37.105Z","0.2.0":"2014-03-10T00:20:57.759Z","0.1.0":"2014-03-05T20:31:10.837Z"},"users":{"tunnckocore":true,"sq":true,"shawnbot":true,"willhoag":true,"lunelson":true,"joshhartigan":true,"toogle":true,"flyslow":true,"jondashkyle":true,"amongiants":true,"leonardorb":true,"joshwyatt":true,"carsy":true,"daizch":true,"xueboren":true,"itcorp":true,"edwardxyt":true},"author":{"name":"Sindre Sorhus","email":"sindresorhus@gmail.com","url":"sindresorhus.com"},"repository":{"type":"git","url":"git+https://github.com/sindresorhus/multiline.git"},"versions":{"2.0.0":{"name":"multiline","version":"2.0.0","description":"Multiline strings in JavaScript","license":"MIT","repository":{"type":"git","url":"git+https://github.com/sindresorhus/multiline.git"},"author":{"name":"Sindre Sorhus","email":"sindresorhus@gmail.com","url":"sindresorhus.com"},"engines":{"node":">=0.10.0"},"scripts":{"test":"mocha","browser":"browserify -s $npm_package_name -o browser.js ."},"keywords":["browser","multiline","multi-line","multiple","line","comment","string","str","text","comment"],"dependencies":{"strip-indent":"^2.0.0"},"devDependencies":{"browserify":"^14.5.0","callsites":"^2.0.0","mocha":"^4.1.0","uglify-js":"^2.4.13"},"gitHead":"81c2025e097a17042eb3665b65e94c504ba22f73","bugs":{"url":"https://github.com/sindresorhus/multiline/issues"},"homepage":"https://github.com/sindresorhus/multiline#readme","_id":"multiline@2.0.0","_npmVersion":"6.4.1","_nodeVersion":"8.12.0","_npmUser":{"name":"sindresorhus","email":"sindresorhus@gmail.com"},"dist":{"shasum":"4bb44ddc474c4fa6deaee4266c75c7be2535127a","size":3911,"noattachment":false,"key":"/multiline/-/multiline-2.0.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/multiline/download/multiline-2.0.0.tgz"},"maintainers":[{"name":"sindresorhus","email":""}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/multiline_2.0.0_1539516867678_0.23570420511554047"},"_hasShrinkwrap":false,"publish_time":1539516867832,"_cnpm_publish_time":1539516867832,"deprecated":"This was a fun hack, but now we have template literals, so use that instead."},"1.0.2":{"name":"multiline","version":"1.0.2","description":"Multiline strings in JavaScript","license":"MIT","repository":{"type":"git","url":"https://github.com/sindresorhus/multiline"},"author":{"name":"Sindre Sorhus","email":"sindresorhus@gmail.com","url":"http://sindresorhus.com"},"engines":{"node":">=0.10.0"},"scripts":{"test":"mocha","browser":"browserify -s $npm_package_name -o browser.js ."},"files":["index.js","browser.js"],"keywords":["browser","multiline","multi-line","multiple","line","comment","string","str","text","comment"],"dependencies":{"strip-indent":"^1.0.0"},"devDependencies":{"browserify":"^6.0.2","callsites":"^1.0.0","mocha":"*","uglify-js":"^2.4.13"},"gitHead":"bc7665a7f7e6a0c17956bbda532912d09ddb8be1","bugs":{"url":"https://github.com/sindresorhus/multiline/issues"},"homepage":"https://github.com/sindresorhus/multiline","_id":"multiline@1.0.2","_shasum":"69b1f25ff074d2828904f244ddd06b7d96ef6c93","_from":".","_npmVersion":"2.1.16","_nodeVersion":"0.10.32","_npmUser":{"name":"sindresorhus","email":"sindresorhus@gmail.com"},"maintainers":[{"name":"sindresorhus","email":""}],"dist":{"shasum":"69b1f25ff074d2828904f244ddd06b7d96ef6c93","size":3966,"noattachment":false,"key":"/multiline/-/multiline-1.0.2.tgz","tarball":"http://registry.cnpm.dingdandao.com/multiline/download/multiline-1.0.2.tgz"},"directories":{},"publish_time":1420919517964,"_cnpm_publish_time":1420919517964,"_hasShrinkwrap":false},"1.0.1":{"name":"multiline","version":"1.0.1","description":"Multiline strings in JavaScript","license":"MIT","repository":{"type":"git","url":"https://github.com/sindresorhus/multiline"},"author":{"name":"Sindre Sorhus","email":"sindresorhus@gmail.com","url":"http://sindresorhus.com"},"engines":{"node":">=0.10.0"},"scripts":{"test":"mocha","browser":"browserify -s $npm_package_name -o browser.js ."},"files":["index.js","browser.js"],"keywords":["browser","multiline","multi-line","multiple","line","comment","string","str","text","comment"],"dependencies":{"strip-indent":"^1.0.0"},"devDependencies":{"browserify":"^6.0.2","callsites":"^1.0.0","mocha":"*","uglify-js":"^2.4.13"},"gitHead":"69c26c826ec8909b8a92da37ae7aba562362faff","bugs":{"url":"https://github.com/sindresorhus/multiline/issues"},"homepage":"https://github.com/sindresorhus/multiline","_id":"multiline@1.0.1","_shasum":"47c37ddb87a0f9e0e33468278f5c8fbbefa0dcae","_from":".","_npmVersion":"2.1.2","_nodeVersion":"0.10.32","_npmUser":{"name":"sindresorhus","email":"sindresorhus@gmail.com"},"maintainers":[{"name":"sindresorhus","email":""}],"dist":{"shasum":"47c37ddb87a0f9e0e33468278f5c8fbbefa0dcae","size":3280,"noattachment":false,"key":"/multiline/-/multiline-1.0.1.tgz","tarball":"http://registry.cnpm.dingdandao.com/multiline/download/multiline-1.0.1.tgz"},"directories":{},"publish_time":1412374577497,"_cnpm_publish_time":1412374577497,"_hasShrinkwrap":false},"1.0.0":{"name":"multiline","version":"1.0.0","description":"Multiline strings in JavaScript","license":"MIT","repository":{"type":"git","url":"git://github.com/sindresorhus/multiline"},"author":{"name":"Sindre Sorhus","email":"sindresorhus@gmail.com","url":"http://sindresorhus.com"},"engines":{"node":">=0.10.0"},"scripts":{"test":"mocha","browser":"browserify -s $npm_package_name -o browser.js ."},"files":["index.js","browser.js"],"keywords":["browser","multiline","multi-line","multiple","line","comment","string","str","text","comment"],"dependencies":{"strip-indent":"^1.0.0"},"devDependencies":{"browserify":"^5.10.0","callsites":"^1.0.0","mocha":"*","uglify-js":"^2.4.13"},"gitHead":"5de3e423717b2ca4646e3269ab6380fae58e6183","bugs":{"url":"https://github.com/sindresorhus/multiline/issues"},"homepage":"https://github.com/sindresorhus/multiline","_id":"multiline@1.0.0","_shasum":"f162c517e478a0348e94864f682491f695c54afb","_from":".","_npmVersion":"1.4.14","_npmUser":{"name":"sindresorhus","email":"sindresorhus@gmail.com"},"maintainers":[{"name":"sindresorhus","email":""}],"dist":{"shasum":"f162c517e478a0348e94864f682491f695c54afb","size":3289,"noattachment":false,"key":"/multiline/-/multiline-1.0.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/multiline/download/multiline-1.0.0.tgz"},"directories":{},"publish_time":1408301548489,"_cnpm_publish_time":1408301548489,"_hasShrinkwrap":false},"0.3.4":{"name":"multiline","version":"0.3.4","description":"Multiline strings in JavaScript","license":"MIT","repository":{"type":"git","url":"git://github.com/sindresorhus/multiline"},"author":{"name":"Sindre Sorhus","email":"sindresorhus@gmail.com","url":"http://sindresorhus.com"},"engines":{"node":">=0.10.0"},"scripts":{"test":"mocha","browser":"browserify -s $npm_package_name -o browser.js ."},"files":["index.js","browser.js"],"keywords":["browser","multiline","multi-line","multiple","line","comment","string","str","text","comment"],"dependencies":{"strip-indent":"^0.1.0"},"devDependencies":{"mocha":"*","browserify":"^3.0.0","callsites":"^0.2.0"},"bugs":{"url":"https://github.com/sindresorhus/multiline/issues"},"homepage":"https://github.com/sindresorhus/multiline","_id":"multiline@0.3.4","dist":{"shasum":"1d38cb053097b5b94b21fcd31b10b116559defdc","size":3005,"noattachment":false,"key":"/multiline/-/multiline-0.3.4.tgz","tarball":"http://registry.cnpm.dingdandao.com/multiline/download/multiline-0.3.4.tgz"},"_from":".","_npmVersion":"1.4.6","_npmUser":{"name":"sindresorhus","email":"sindresorhus@gmail.com"},"maintainers":[{"name":"sindresorhus","email":""}],"directories":{},"publish_time":1398897167046,"_cnpm_publish_time":1398897167046,"_hasShrinkwrap":false},"0.3.3":{"name":"multiline","version":"0.3.3","description":"Multiline strings in JavaScript","license":"MIT","repository":{"type":"git","url":"git://github.com/sindresorhus/multiline"},"author":{"name":"Sindre Sorhus","email":"sindresorhus@gmail.com","url":"http://sindresorhus.com"},"engines":{"node":">=0.10.0"},"scripts":{"test":"mocha","browser":"a=$npm_package_name; browserify -r ./index:$a -s $a index.js -o browser.js"},"files":["index.js","browser.js"],"keywords":["browser","multiline","multi-line","multiple","line","comment","string","str","text","comment"],"dependencies":{"strip-indent":"^0.1.0"},"devDependencies":{"mocha":"*","browserify":"^3.0.0","callsite":"^1.0.0"},"bugs":{"url":"https://github.com/sindresorhus/multiline/issues"},"homepage":"https://github.com/sindresorhus/multiline","_id":"multiline@0.3.3","dist":{"shasum":"1d3453596ebf5793ddf496a68290415ba2f13240","size":3044,"noattachment":false,"key":"/multiline/-/multiline-0.3.3.tgz","tarball":"http://registry.cnpm.dingdandao.com/multiline/download/multiline-0.3.3.tgz"},"_from":".","_npmVersion":"1.4.6","_npmUser":{"name":"sindresorhus","email":"sindresorhus@gmail.com"},"maintainers":[{"name":"sindresorhus","email":""}],"directories":{},"publish_time":1398813379857,"_cnpm_publish_time":1398813379857,"_hasShrinkwrap":false},"0.3.2":{"name":"multiline","version":"0.3.2","description":"Multiline strings in JavaScript","license":"MIT","repository":{"type":"git","url":"git://github.com/sindresorhus/multiline"},"author":{"name":"Sindre Sorhus","email":"sindresorhus@gmail.com","url":"http://sindresorhus.com"},"engines":{"node":">=0.10.0"},"scripts":{"test":"mocha","browser":"a=$npm_package_name; browserify -r ./index:$a -s $a index.js -o browser.js"},"files":["index.js"],"keywords":["browser","multiline","multi-line","multiple","line","comment","string","str","text","comment"],"dependencies":{"strip-indent":"^0.1.0"},"devDependencies":{"mocha":"*","browserify":"^3.0.0","callsite":"^1.0.0"},"bugs":{"url":"https://github.com/sindresorhus/multiline/issues"},"homepage":"https://github.com/sindresorhus/multiline","_id":"multiline@0.3.2","dist":{"shasum":"1f51567569c24861a702d283d98f22333860de27","size":2393,"noattachment":false,"key":"/multiline/-/multiline-0.3.2.tgz","tarball":"http://registry.cnpm.dingdandao.com/multiline/download/multiline-0.3.2.tgz"},"_from":".","_npmVersion":"1.4.6","_npmUser":{"name":"sindresorhus","email":"sindresorhus@gmail.com"},"maintainers":[{"name":"sindresorhus","email":""}],"directories":{},"publish_time":1396825542957,"_cnpm_publish_time":1396825542957,"_hasShrinkwrap":false},"0.3.1":{"name":"multiline","version":"0.3.1","description":"Multiline strings in JavaScript","license":"MIT","repository":{"type":"git","url":"git://github.com/sindresorhus/multiline"},"author":{"name":"Sindre Sorhus","email":"sindresorhus@gmail.com","url":"http://sindresorhus.com"},"engines":{"node":">=0.10.0"},"scripts":{"test":"mocha","browser":"a=$npm_package_name; browserify -r ./index:$a -s $a index.js -o browser.js"},"files":["index.js"],"keywords":["browser","multiline","multi-line","multiple","line","comment","string","str","text","comment"],"dependencies":{"strip-indent":"^0.1.0"},"devDependencies":{"mocha":"*","browserify":"^3.0.0","callsite":"^1.0.0"},"bugs":{"url":"https://github.com/sindresorhus/multiline/issues"},"homepage":"https://github.com/sindresorhus/multiline","_id":"multiline@0.3.1","dist":{"shasum":"d40c244c8f4167596dc878e88464aad7ff4f5b17","size":2384,"noattachment":false,"key":"/multiline/-/multiline-0.3.1.tgz","tarball":"http://registry.cnpm.dingdandao.com/multiline/download/multiline-0.3.1.tgz"},"_from":".","_npmVersion":"1.4.6","_npmUser":{"name":"sindresorhus","email":"sindresorhus@gmail.com"},"maintainers":[{"name":"sindresorhus","email":""}],"directories":{},"publish_time":1396824628424,"_cnpm_publish_time":1396824628424,"_hasShrinkwrap":false},"0.3.0":{"name":"multiline","version":"0.3.0","description":"Multiline strings in JavaScript","license":"MIT","repository":{"type":"git","url":"git://github.com/sindresorhus/multiline"},"author":{"name":"Sindre Sorhus","email":"sindresorhus@gmail.com","url":"http://sindresorhus.com"},"engines":{"node":">=0.10.0"},"scripts":{"test":"mocha","browser":"a=$npm_package_name; browserify -r ./index:$a -s $a index.js -o browser.js"},"files":["index.js"],"keywords":["browser","multiline","multi-line","multiple","line","comment","string","str","text","comment"],"dependencies":{"strip-indent":"^0.1.0"},"devDependencies":{"mocha":"*","browserify":"^3.0.0","callsite":"^1.0.0"},"bugs":{"url":"https://github.com/sindresorhus/multiline/issues"},"homepage":"https://github.com/sindresorhus/multiline","_id":"multiline@0.3.0","dist":{"shasum":"2dc24f88ff3bd0e7c9964abce913072e98fb118e","size":2382,"noattachment":false,"key":"/multiline/-/multiline-0.3.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/multiline/download/multiline-0.3.0.tgz"},"_from":".","_npmVersion":"1.4.6","_npmUser":{"name":"sindresorhus","email":"sindresorhus@gmail.com"},"maintainers":[{"name":"sindresorhus","email":""}],"directories":{},"publish_time":1396104397105,"_cnpm_publish_time":1396104397105,"_hasShrinkwrap":false},"0.2.0":{"name":"multiline","version":"0.2.0","description":"Multiline strings in JavaScript","license":"MIT","main":"multiline.js","repository":{"type":"git","url":"git://github.com/sindresorhus/multiline"},"author":{"name":"Sindre Sorhus","email":"sindresorhus@gmail.com","url":"http://sindresorhus.com"},"engines":{"node":">=0.10.0"},"scripts":{"test":"mocha"},"files":["multiline.js"],"keywords":["multiline","multi-line","multiple","line","comment","string","str","text","comment"],"devDependencies":{"mocha":"*","callsite":"^1.0.0"},"bugs":{"url":"https://github.com/sindresorhus/multiline/issues"},"homepage":"https://github.com/sindresorhus/multiline","_id":"multiline@0.2.0","dist":{"shasum":"7cb4a4bd15b9f238007bf05b16306d2d12ab8958","size":2228,"noattachment":false,"key":"/multiline/-/multiline-0.2.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/multiline/download/multiline-0.2.0.tgz"},"_from":".","_npmVersion":"1.4.4","_npmUser":{"name":"sindresorhus","email":"sindresorhus@gmail.com"},"maintainers":[{"name":"sindresorhus","email":""}],"directories":{},"publish_time":1394410857759,"_cnpm_publish_time":1394410857759,"_hasShrinkwrap":false},"0.1.0":{"name":"multiline","version":"0.1.0","description":"Multiline strings in JavaScript","license":"MIT","main":"multiline.js","repository":{"type":"git","url":"git://github.com/sindresorhus/multiline"},"author":{"name":"Sindre Sorhus","email":"sindresorhus@gmail.com","url":"http://sindresorhus.com"},"engines":{"node":">=0.10.0"},"scripts":{"test":"mocha"},"files":["multiline.js"],"keywords":["multiline","multi-line","multiple","line","comment","string","str","text","comment"],"devDependencies":{"mocha":"*","callsite":"^1.0.0"},"bugs":{"url":"https://github.com/sindresorhus/multiline/issues"},"homepage":"https://github.com/sindresorhus/multiline","_id":"multiline@0.1.0","dist":{"shasum":"aaf5c8da152eb2ef38089552cae938d894873571","size":1577,"noattachment":false,"key":"/multiline/-/multiline-0.1.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/multiline/download/multiline-0.1.0.tgz"},"_from":".","_npmVersion":"1.4.4","_npmUser":{"name":"sindresorhus","email":"sindresorhus@gmail.com"},"maintainers":[{"name":"sindresorhus","email":""}],"directories":{},"publish_time":1394051470837,"_cnpm_publish_time":1394051470837,"_hasShrinkwrap":false}},"readme":"# multiline [![Build Status](https://travis-ci.org/sindresorhus/multiline.svg?branch=master)](https://travis-ci.org/sindresorhus/multiline)\n\n> Multiline strings in JavaScript\n\nNo more string concatenation or array join!\n\n*Use ES2015 [template literals](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/template_strings) instead whenever possible.*\n\n#### Before\n\n```js\nconst str = '' +\n'<!doctype html>' +\n'<html>' +\n'\t<body>' +\n'\t\t<h1>❤ unicorns</h1>' +\n'\t</body>' +\n'</html>' +\n'';\n```\n\n#### After\n\n```js\nconst str = multiline(()=>{/*\n<!doctype html>\n<html>\n\t<body>\n\t\t<h1>❤ unicorns</h1>\n\t</body>\n</html>\n*/});\n```\n\n\n## How\n\nIt works by wrapping the text in a block comment, anonymous function, and a function call. The anonymous function is passed into the function call and the contents of the comment extracted.\n\nEven though it's [slower than string concat](http://jsperf.com/multiline), that shouldn't realistically matter as you can still do 2 million of those a second. Convenience over micro performance always.\n\n\n## Install\n\n```\n$ npm install multiline\n```\n\n\n## Usage\n\nEverything after the first newline and before the last will be returned as seen below:\n\n```js\nconst str = multiline(()=>{/*\n<!doctype html>\n<html>\n\t<body>\n\t\t<h1>❤ unicorns</h1>\n\t</body>\n</html>\n*/});\n```\n\nWhich outputs:\n\n```\n<!doctype html>\n<html>\n\t<body>\n\t\t<h1>❤ unicorns</h1>\n\t</body>\n</html>\n```\n\n### Strip indent\n\nYou can use `multiline.stripIndent()` to be able to indent your multiline string without preserving the redundant leading whitespace.\n\n```js\n\tconst str = multiline.stripIndent(()=>{/*\n\t\t\t<!doctype html>\n\t\t\t<html>\n\t\t\t\t<body>\n\t\t\t\t\t<h1>❤ unicorns</h1>\n\t\t\t\t</body>\n\t\t\t</html>\n\t*/});\n```\n\nWhich outputs:\n\n```\n<!doctype html>\n<html>\n\t<body>\n\t\t<h1>❤ unicorns</h1>\n\t</body>\n</html>\n```\n\n\n### String substitution\n\n`console.log()` supports [string substitution](http://nodejs.org/docs/latest/api/console.html#console_console_log_data):\n\n```js\nconst str = 'unicorns';\n\nconsole.log(multiline(()=>{/*\n  I love %s\n*/}), str);\n\n//=> 'I love unicorns'\n```\n\n\n## Use cases\n\n- [CLI help output](https://github.com/sindresorhus/pageres/blob/cb85922dec2b962c7b45484023c9ba43a9abf6bd/cli.js#L14-L33)\n- [Test fixtures](https://twitter.com/TooTallNate/status/465392558000984064)\n- [Queries](https://github.com/freethejazz/twitter-to-neo4j/blob/a41b6c2e8480d4b9943640a8aa4b6976f07083bf/cypher/queries.js#L15-L22) - *here an example in Cypher, the query language for Neo4j*\n- [CLI welcome message](https://github.com/yeoman/generator-jquery/blob/4b532843663e4b5ce7d433d351e0a78dcf2b1e20/app/index.js#L28-L40) - *here in a Yeoman generator*\n\nHave one? [Let me know.](https://github.com/sindresorhus/multiline/issues/new)\n\n\n## Experiment\n\nI've also done an [experiment](experiment.js) where you don't need the anonymous function. It's too fragile and slow to be practical though.\n\nIt generates a callstack and extracts the contents of the comment in the function call.\n\n```js\nconst str = multiline(/*\n<!doctype html>\n<html>\n\t<body>\n\t\t<h1>❤ unicorns</h1>\n\t</body>\n</html>\n*/);\n```\n\n\n## FAQ\n\n### But JS already has multiline strings with `\\`?\n\n```js\nconst str = 'foo\\\nbar';\n```\n\nThis is not a multiline string. It's line-continuation. It doesn't preserve newlines, which is the main reason for wanting multiline strings.\n\nYou would need to do the following:\n\n```js\nconst str = 'foo\\n\\\nbar';\n```\n\nBut then you could just as well concatenate:\n\n```js\nconst str = 'foo\\n' +\n'bar';\n```\n\n\n## Browser\n\nWhile it does work fine in the browser, it's mainly intended for use in Node.js. Use at your own risk.\n\n```\n$ npm install multiline\n```\n\nWith Webpack, Browserify, or something similar.\n\n\n### Compatibility\n\n- Latest Chrome\n- Firefox >=17\n- Safari >=4\n- Opera >=9\n- Internet Explorer >=6\n\n### Minification\n\nEven though minifiers strip comments by default there are ways to preserve them:\n\n- Uglify: Use `/*@preserve` instead of `/*` and enable the `comments` option\n- Closure Compiler: Use `/*@preserve` instead of `/*`\n- YUI Compressor: Use `/*!` instead of `/*`\n\nYou also need to add `console.log` after the comment so it's not removed as dead-code.\n\nThe final result would be:\n\n```js\nconst str = multiline(function(){/*!@preserve\n<!doctype html>\n<html>\n\t<body>\n\t\t<h1>❤ unicorns</h1>\n\t</body>\n</html>\n*/console.log});\n```\n\n\n## License\n\nMIT © [Sindre Sorhus](https://sindresorhus.com)\n","_attachments":{},"homepage":"https://github.com/sindresorhus/multiline#readme","bugs":{"url":"https://github.com/sindresorhus/multiline/issues"},"license":"MIT"}