├── .eslintignore ├── .npmrc ├── .babelrc ├── test ├── mocha.opts ├── .eslintrc └── deline-tests.js ├── .eslintrc ├── CHANGELOG.md ├── .github └── FUNDING.yml ├── .npmignore ├── .gitignore ├── LICENSE ├── deline.js ├── package.json ├── README.md └── .travis.yml /.eslintignore: -------------------------------------------------------------------------------- 1 | build -------------------------------------------------------------------------------- /.npmrc: -------------------------------------------------------------------------------- 1 | package-lock=false 2 | -------------------------------------------------------------------------------- /.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": ["airbnb"] 3 | } 4 | -------------------------------------------------------------------------------- /test/mocha.opts: -------------------------------------------------------------------------------- 1 | --compilers js:babel-register 2 | -------------------------------------------------------------------------------- /.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "env": { 3 | "browser": true, 4 | "node": true, 5 | "es6": true 6 | }, 7 | "extends": "airbnb-base", 8 | "rules": { 9 | "no-plusplus": 0 10 | } 11 | } -------------------------------------------------------------------------------- /test/.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "env": { 3 | "mocha": true 4 | }, 5 | "rules": { 6 | "import/no-extraneous-dependencies": [2, { 7 | "devDependencies": true 8 | }] 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | 1.0.4 / 2016-12-18 2 | ================== 3 | * [Fix] Include an .npmignore file to override .gitignore (#2) 4 | * [Dev Deps] update `babel-register`, `eslint`, `eslint-config-airbnb-base`, `eslint-plugin-import`, `mocha`; use `rimraf` and `mkdirp` 5 | 6 | 1.0.3 / 2016-12-17 7 | ================== 8 | * Publish ES5 for compatibility with old node versions. 9 | 10 | 1.0.2 / 2016-10-17 11 | ================== 12 | * Initial release. 13 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: [ljharb] 4 | patreon: # Replace with a single Patreon username 5 | open_collective: # Replace with a single Open Collective username 6 | ko_fi: # Replace with a single Ko-fi username 7 | tidelift: npm/deline 8 | community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry 9 | liberapay: # Replace with a single Liberapay username 10 | issuehunt: # Replace with a single IssueHunt username 11 | otechie: # Replace with a single Otechie username 12 | custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] 13 | -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | 6 | # Runtime data 7 | pids 8 | *.pid 9 | *.seed 10 | 11 | # Directory for instrumented libs generated by jscoverage/JSCover 12 | lib-cov 13 | 14 | # Coverage directory used by tools like istanbul 15 | coverage 16 | 17 | # nyc test coverage 18 | .nyc_output 19 | 20 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) 21 | .grunt 22 | 23 | # node-waf configuration 24 | .lock-wscript 25 | 26 | # Compiled binary addons (http://nodejs.org/api/addons.html) 27 | build/Release 28 | 29 | # Dependency directories 30 | node_modules 31 | jspm_packages 32 | 33 | # Optional npm cache directory 34 | .npm 35 | 36 | # Optional REPL history 37 | .node_repl_history 38 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | 6 | # Runtime data 7 | pids 8 | *.pid 9 | *.seed 10 | 11 | # Directory for instrumented libs generated by jscoverage/JSCover 12 | lib-cov 13 | 14 | # Coverage directory used by tools like istanbul 15 | coverage 16 | 17 | # nyc test coverage 18 | .nyc_output 19 | 20 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) 21 | .grunt 22 | 23 | # node-waf configuration 24 | .lock-wscript 25 | 26 | # Compiled binary addons (http://nodejs.org/api/addons.html) 27 | build/Release 28 | 29 | # Dependency directories 30 | node_modules 31 | jspm_packages 32 | 33 | # Optional npm cache directory 34 | .npm 35 | 36 | # Optional REPL history 37 | .node_repl_history 38 | 39 | # Build directory 40 | build 41 | 42 | # Only apps should have lockfiles 43 | npm-shrinkwrap.json 44 | package-lock.json 45 | yarn.lock 46 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2016 Airbnb 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. -------------------------------------------------------------------------------- /deline.js: -------------------------------------------------------------------------------- 1 | function deline(strings, ...values) { 2 | let raw; 3 | if (typeof strings === 'string') { 4 | raw = [strings]; 5 | } else { 6 | ({ raw } = strings); 7 | } 8 | const resultArr = []; 9 | for (let i = 0; i < raw.length; i++) { 10 | resultArr.push(raw[i].replace(/\\\n[ \t]*/g, '').replace(/\\`/g, '`')); 11 | if (i < values.length) { 12 | resultArr.push(values[i]); 13 | } 14 | } 15 | const result = resultArr.join('').trim(); 16 | 17 | const lines = result.split('\n'); 18 | const ret = lines.reduce((accumulator, line, idx) => { 19 | const lineTrimmed = line.trim(); 20 | if (accumulator.length > 0 && lineTrimmed === '' && accumulator[accumulator.length] === '\n') { 21 | return accumulator; 22 | } 23 | if (lineTrimmed === '') { 24 | accumulator.push(accumulator.pop().slice(0, -1)); 25 | accumulator.push('\n'); 26 | } else { 27 | accumulator.push(`${lineTrimmed}${idx !== lines.length - 1 ? ' ' : ''}`); 28 | } 29 | return accumulator; 30 | }, []); 31 | return ret.join('').trim().replace(/\\n/g, '\n'); 32 | } 33 | 34 | module.exports = deline; 35 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "deline", 3 | "version": "1.0.4", 4 | "description": "Template tag that takes out unwanted newlines", 5 | "main": "build/deline.js", 6 | "scripts": { 7 | "pretest": "npm run --silent lint && npm run build", 8 | "test": "npm run tests-only", 9 | "posttest": "npx aud", 10 | "tests-only": "mocha", 11 | "lint": "eslint .", 12 | "build": "mkdirp build && babel deline.js --out-file build/deline.js --source-maps", 13 | "prepublish": "npm run build", 14 | "clean": "rimraf build" 15 | }, 16 | "repository": { 17 | "type": "git", 18 | "url": "git://github.com/airbnb/deline.git" 19 | }, 20 | "keywords": [ 21 | "deline", 22 | "tag", 23 | "es6", 24 | "multi-line", 25 | "string" 26 | ], 27 | "author": "Ian Sibner ", 28 | "license": "MIT", 29 | "bugs": { 30 | "url": "https://github.com/airbnb/deline/issues" 31 | }, 32 | "homepage": "https://github.com/airbnb/deline#readme", 33 | "devDependencies": { 34 | "babel-cli": "^6.26.0", 35 | "babel-preset-airbnb": "^2.6.0", 36 | "babel-register": "^6.26.0", 37 | "chai": "^3.5.0", 38 | "eslint": "^5.16.0", 39 | "eslint-config-airbnb-base": "^13.1.0", 40 | "eslint-plugin-import": "^2.17.3", 41 | "mkdirp": "^0.5.1", 42 | "mocha": "^3.5.3", 43 | "rimraf": "^2.6.3" 44 | }, 45 | "dependencies": {} 46 | } 47 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # deline 2 | 3 | An ES6 string tag that strips unwanted newlines from multi-line strings. 4 | 5 | ## Usage 6 | 7 | ```js 8 | import deline from 'deline'; 9 | 10 | function usageExample() { 11 | const example1 = deline` 12 | A string that’s too long to put on one line, so you decide to put it on multiple lines, but it 13 | actually isn’t supposed to have newlines in it because it’s just one long string. 14 | 15 | Except for above this line, which is ACTUALLY supposed to be a newline. But aside from that, no 16 | newlines. And we don’t want any leading/trailing lines, of course.\n 17 | 18 | Wait! Actually, we really want two newlines above this part. Otherwise it will look weird. One 19 | newline just isn’t enough, you know? Well, we have to be explicit about it with that newline 20 | character up there, but that’s no problem. 21 | `; 22 | 23 | const example2 = deline(` 24 | Also, deline can also be used as a function. Neat! 25 | `); 26 | 27 | return example1 + '\n\n' + example2; 28 | } 29 | ``` 30 | 31 | ```js 32 | > console.log(usageExample()); 33 | ``` 34 | 35 | ``` 36 | A string that’s too long to put on one line, so you decide to put it on multiple lines, but it actually isn’t supposed to have newlines in it because it’s just one long string. 37 | Except for above this line, which is ACTUALLY supposed to be a newline. But aside from that, no newlines. And we don’t want any leading/trailing lines, of course. 38 | 39 | Wait! Actually, we really want two newlines above this part. Otherwise it will look weird. One newline just isn’t enough, you know? Well, we have to be explicit about it with that newline character up there, but that’s no problem. 40 | 41 | Also, deline can also be used as a function. Neat! 42 | ``` 43 | 44 | ## Acknowledgements 45 | 46 | Deline is inspired by, and based on, the [dedent](https://github.com/dmnd/dedent) package. Thanks [@dmnd](https://github.com/dmnd)! 47 | 48 | ## License 49 | 50 | MIT 51 | -------------------------------------------------------------------------------- /test/deline-tests.js: -------------------------------------------------------------------------------- 1 | import { expect } from 'chai'; 2 | 3 | // eslint-disable-next-line import/no-unresolved, import/extensions 4 | import deline from '../build/deline'; 5 | 6 | describe('deline', () => { 7 | it('works without interpolation', () => { 8 | const result = deline`some 9 | text with 10 | newlines`; 11 | expect(result).to.eql('some text with newlines'); 12 | }); 13 | 14 | it('works with interpolation', () => { 15 | const result = deline`first ${'line'} 16 | ${'second'} 17 | third`; 18 | expect(result).to.eql('first line second third'); 19 | }); 20 | 21 | it('works with blank first line', () => { 22 | const result = deline` 23 | Lorem ipsum 24 | dolor sit amit 25 | `; 26 | 27 | expect(result).to.eql('Lorem ipsum dolor sit amit'); 28 | }); 29 | 30 | it('works with multiple blank first lines', () => { 31 | const result = deline` 32 | 33 | first 34 | second 35 | third`; 36 | expect(result).to.eql('first second third'); 37 | }); 38 | 39 | it('turns a double newline into a single newline', () => { 40 | const result = deline` 41 | It is wednesday 42 | 43 | my dudes 44 | `; 45 | expect(result).to.eql('It is wednesday\nmy dudes'); 46 | }); 47 | 48 | it('turns more than 2 newlines into a single newline', () => { 49 | const result = deline` 50 | It is wednesday 51 | 52 | 53 | 54 | 55 | 56 | 57 | my dudes 58 | `; 59 | expect(result).to.eql('It is wednesday\nmy dudes'); 60 | }); 61 | 62 | describe('single line input', () => { 63 | const expected = 'A single line of input.'; 64 | 65 | it('works with single line input', () => { 66 | const result = deline`A single line of input.`; 67 | expect(result).to.eql(expected); 68 | }); 69 | 70 | it('works with single line and closing backtick on newline', () => { 71 | const result = deline` 72 | A single line of input. 73 | `; 74 | expect(result).to.eql(expected); 75 | }); 76 | 77 | it('works with single line and inline closing backtick', () => { 78 | const result = deline` 79 | A single line of input.`; 80 | expect(result).to.eql(expected); 81 | }); 82 | }); 83 | 84 | it('can be used as a function', () => { 85 | const arg = ` 86 | A test argument. 87 | `; 88 | expect(deline(arg)).to.eql('A test argument.'); 89 | }); 90 | 91 | it('escapes backticks', () => { 92 | expect(deline`\``).to.eql('`'); 93 | }); 94 | 95 | it('doesn’t strip exlicit newlines', () => { 96 | const result = deline` 97 |

Hello world!

\n 98 | `; 99 | expect(result).to.eql('

Hello world!

\n'); 100 | }); 101 | }); 102 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | os: 3 | - linux 4 | node_js: 5 | - "12.4" 6 | - "11.15" 7 | - "10.15" 8 | - "9.11" 9 | - "8.15" 10 | - "7.10" 11 | - "6.17" 12 | - "5.12" 13 | - "4.9" 14 | - "iojs-v3.3" 15 | - "iojs-v2.5" 16 | - "iojs-v1.8" 17 | - "0.12" 18 | - "0.10" 19 | - "0.8" 20 | before_install: 21 | - 'case "${TRAVIS_NODE_VERSION}" in 0.*) export NPM_CONFIG_STRICT_SSL=false ;; esac' 22 | - 'nvm install-latest-npm' 23 | install: 24 | - 'if [ "${TRAVIS_NODE_VERSION}" = "0.6" ] || [ "${TRAVIS_NODE_VERSION}" = "0.9" ]; then nvm install --latest-npm 0.8 && npm install && nvm use "${TRAVIS_NODE_VERSION}"; else npm install; fi;' 25 | script: 26 | - 'if [ -n "${PRETEST-}" ]; then npm run pretest ; fi' 27 | - 'if [ -n "${POSTTEST-}" ]; then npm run posttest ; fi' 28 | - 'if [ -n "${COVERAGE-}" ]; then npm run coverage ; fi' 29 | - 'if [ -n "${TEST-}" ]; then npm run tests-only ; fi' 30 | sudo: false 31 | env: 32 | - TEST=true 33 | matrix: 34 | fast_finish: true 35 | include: 36 | - node_js: "lts/*" 37 | env: PRETEST=true 38 | - node_js: "lts/*" 39 | env: POSTTEST=true 40 | - node_js: "12.3" 41 | env: TEST=true ALLOW_FAILURE=true 42 | - node_js: "12.1" 43 | env: TEST=true ALLOW_FAILURE=true 44 | - node_js: "12.0" 45 | env: TEST=true ALLOW_FAILURE=true 46 | - node_js: "11.14" 47 | env: TEST=true ALLOW_FAILURE=true 48 | - node_js: "11.13" 49 | env: TEST=true ALLOW_FAILURE=true 50 | - node_js: "11.12" 51 | env: TEST=true ALLOW_FAILURE=true 52 | - node_js: "11.11" 53 | env: TEST=true ALLOW_FAILURE=true 54 | - node_js: "11.10" 55 | env: TEST=true ALLOW_FAILURE=true 56 | - node_js: "11.9" 57 | env: TEST=true ALLOW_FAILURE=true 58 | - node_js: "11.8" 59 | env: TEST=true ALLOW_FAILURE=true 60 | - node_js: "11.7" 61 | env: TEST=true ALLOW_FAILURE=true 62 | - node_js: "11.6" 63 | env: TEST=true ALLOW_FAILURE=true 64 | - node_js: "11.5" 65 | env: TEST=true ALLOW_FAILURE=true 66 | - node_js: "11.4" 67 | env: TEST=true ALLOW_FAILURE=true 68 | - node_js: "11.3" 69 | env: TEST=true ALLOW_FAILURE=true 70 | - node_js: "11.2" 71 | env: TEST=true ALLOW_FAILURE=true 72 | - node_js: "11.1" 73 | env: TEST=true ALLOW_FAILURE=true 74 | - node_js: "11.0" 75 | env: TEST=true ALLOW_FAILURE=true 76 | - node_js: "10.14" 77 | env: TEST=true ALLOW_FAILURE=true 78 | - node_js: "10.13" 79 | env: TEST=true ALLOW_FAILURE=true 80 | - node_js: "10.12" 81 | env: TEST=true ALLOW_FAILURE=true 82 | - node_js: "10.11" 83 | env: TEST=true ALLOW_FAILURE=true 84 | - node_js: "10.10" 85 | env: TEST=true ALLOW_FAILURE=true 86 | - node_js: "10.9" 87 | env: TEST=true ALLOW_FAILURE=true 88 | - node_js: "10.8" 89 | env: TEST=true ALLOW_FAILURE=true 90 | - node_js: "10.7" 91 | env: TEST=true ALLOW_FAILURE=true 92 | - node_js: "10.6" 93 | env: TEST=true ALLOW_FAILURE=true 94 | - node_js: "10.5" 95 | env: TEST=true ALLOW_FAILURE=true 96 | - node_js: "10.4" 97 | env: TEST=true ALLOW_FAILURE=true 98 | - node_js: "10.3" 99 | env: TEST=true ALLOW_FAILURE=true 100 | - node_js: "10.2" 101 | env: TEST=true ALLOW_FAILURE=true 102 | - node_js: "10.1" 103 | env: TEST=true ALLOW_FAILURE=true 104 | - node_js: "10.0" 105 | env: TEST=true ALLOW_FAILURE=true 106 | - node_js: "9.10" 107 | env: TEST=true ALLOW_FAILURE=true 108 | - node_js: "9.9" 109 | env: TEST=true ALLOW_FAILURE=true 110 | - node_js: "9.8" 111 | env: TEST=true ALLOW_FAILURE=true 112 | - node_js: "9.7" 113 | env: TEST=true ALLOW_FAILURE=true 114 | - node_js: "9.6" 115 | env: TEST=true ALLOW_FAILURE=true 116 | - node_js: "9.5" 117 | env: TEST=true ALLOW_FAILURE=true 118 | - node_js: "9.4" 119 | env: TEST=true ALLOW_FAILURE=true 120 | - node_js: "9.3" 121 | env: TEST=true ALLOW_FAILURE=true 122 | - node_js: "9.2" 123 | env: TEST=true ALLOW_FAILURE=true 124 | - node_js: "9.1" 125 | env: TEST=true ALLOW_FAILURE=true 126 | - node_js: "9.0" 127 | env: TEST=true ALLOW_FAILURE=true 128 | - node_js: "8.14" 129 | env: TEST=true ALLOW_FAILURE=true 130 | - node_js: "8.13" 131 | env: TEST=true ALLOW_FAILURE=true 132 | - node_js: "8.12" 133 | env: TEST=true ALLOW_FAILURE=true 134 | - node_js: "8.11" 135 | env: TEST=true ALLOW_FAILURE=true 136 | - node_js: "8.10" 137 | env: TEST=true ALLOW_FAILURE=true 138 | - node_js: "8.9" 139 | env: TEST=true ALLOW_FAILURE=true 140 | - node_js: "8.8" 141 | env: TEST=true ALLOW_FAILURE=true 142 | - node_js: "8.7" 143 | env: TEST=true ALLOW_FAILURE=true 144 | - node_js: "8.6" 145 | env: TEST=true ALLOW_FAILURE=true 146 | - node_js: "8.5" 147 | env: TEST=true ALLOW_FAILURE=true 148 | - node_js: "8.4" 149 | env: TEST=true ALLOW_FAILURE=true 150 | - node_js: "8.3" 151 | env: TEST=true ALLOW_FAILURE=true 152 | - node_js: "8.2" 153 | env: TEST=true ALLOW_FAILURE=true 154 | - node_js: "8.1" 155 | env: TEST=true ALLOW_FAILURE=true 156 | - node_js: "8.0" 157 | env: TEST=true ALLOW_FAILURE=true 158 | - node_js: "7.9" 159 | env: TEST=true ALLOW_FAILURE=true 160 | - node_js: "7.8" 161 | env: TEST=true ALLOW_FAILURE=true 162 | - node_js: "7.7" 163 | env: TEST=true ALLOW_FAILURE=true 164 | - node_js: "7.6" 165 | env: TEST=true ALLOW_FAILURE=true 166 | - node_js: "7.5" 167 | env: TEST=true ALLOW_FAILURE=true 168 | - node_js: "7.4" 169 | env: TEST=true ALLOW_FAILURE=true 170 | - node_js: "7.3" 171 | env: TEST=true ALLOW_FAILURE=true 172 | - node_js: "7.2" 173 | env: TEST=true ALLOW_FAILURE=true 174 | - node_js: "7.1" 175 | env: TEST=true ALLOW_FAILURE=true 176 | - node_js: "7.0" 177 | env: TEST=true ALLOW_FAILURE=true 178 | - node_js: "6.16" 179 | env: TEST=true ALLOW_FAILURE=true 180 | - node_js: "6.15" 181 | env: TEST=true ALLOW_FAILURE=true 182 | - node_js: "6.14" 183 | env: TEST=true ALLOW_FAILURE=true 184 | - node_js: "6.13" 185 | env: TEST=true ALLOW_FAILURE=true 186 | - node_js: "6.12" 187 | env: TEST=true ALLOW_FAILURE=true 188 | - node_js: "6.11" 189 | env: TEST=true ALLOW_FAILURE=true 190 | - node_js: "6.10" 191 | env: TEST=true ALLOW_FAILURE=true 192 | - node_js: "6.9" 193 | env: TEST=true ALLOW_FAILURE=true 194 | - node_js: "6.8" 195 | env: TEST=true ALLOW_FAILURE=true 196 | - node_js: "6.7" 197 | env: TEST=true ALLOW_FAILURE=true 198 | - node_js: "6.6" 199 | env: TEST=true ALLOW_FAILURE=true 200 | - node_js: "6.5" 201 | env: TEST=true ALLOW_FAILURE=true 202 | - node_js: "6.4" 203 | env: TEST=true ALLOW_FAILURE=true 204 | - node_js: "6.3" 205 | env: TEST=true ALLOW_FAILURE=true 206 | - node_js: "6.2" 207 | env: TEST=true ALLOW_FAILURE=true 208 | - node_js: "6.1" 209 | env: TEST=true ALLOW_FAILURE=true 210 | - node_js: "6.0" 211 | env: TEST=true ALLOW_FAILURE=true 212 | - node_js: "5.11" 213 | env: TEST=true ALLOW_FAILURE=true 214 | - node_js: "5.10" 215 | env: TEST=true ALLOW_FAILURE=true 216 | - node_js: "5.9" 217 | env: TEST=true ALLOW_FAILURE=true 218 | - node_js: "5.8" 219 | env: TEST=true ALLOW_FAILURE=true 220 | - node_js: "5.7" 221 | env: TEST=true ALLOW_FAILURE=true 222 | - node_js: "5.6" 223 | env: TEST=true ALLOW_FAILURE=true 224 | - node_js: "5.5" 225 | env: TEST=true ALLOW_FAILURE=true 226 | - node_js: "5.4" 227 | env: TEST=true ALLOW_FAILURE=true 228 | - node_js: "5.3" 229 | env: TEST=true ALLOW_FAILURE=true 230 | - node_js: "5.2" 231 | env: TEST=true ALLOW_FAILURE=true 232 | - node_js: "5.1" 233 | env: TEST=true ALLOW_FAILURE=true 234 | - node_js: "5.0" 235 | env: TEST=true ALLOW_FAILURE=true 236 | - node_js: "4.8" 237 | env: TEST=true ALLOW_FAILURE=true 238 | - node_js: "4.7" 239 | env: TEST=true ALLOW_FAILURE=true 240 | - node_js: "4.6" 241 | env: TEST=true ALLOW_FAILURE=true 242 | - node_js: "4.5" 243 | env: TEST=true ALLOW_FAILURE=true 244 | - node_js: "4.4" 245 | env: TEST=true ALLOW_FAILURE=true 246 | - node_js: "4.3" 247 | env: TEST=true ALLOW_FAILURE=true 248 | - node_js: "4.2" 249 | env: TEST=true ALLOW_FAILURE=true 250 | - node_js: "4.1" 251 | env: TEST=true ALLOW_FAILURE=true 252 | - node_js: "4.0" 253 | env: TEST=true ALLOW_FAILURE=true 254 | - node_js: "iojs-v3.2" 255 | env: TEST=true ALLOW_FAILURE=true 256 | - node_js: "iojs-v3.1" 257 | env: TEST=true ALLOW_FAILURE=true 258 | - node_js: "iojs-v3.0" 259 | env: TEST=true ALLOW_FAILURE=true 260 | - node_js: "iojs-v2.4" 261 | env: TEST=true ALLOW_FAILURE=true 262 | - node_js: "iojs-v2.3" 263 | env: TEST=true ALLOW_FAILURE=true 264 | - node_js: "iojs-v2.2" 265 | env: TEST=true ALLOW_FAILURE=true 266 | - node_js: "iojs-v2.1" 267 | env: TEST=true ALLOW_FAILURE=true 268 | - node_js: "iojs-v2.0" 269 | env: TEST=true ALLOW_FAILURE=true 270 | - node_js: "iojs-v1.7" 271 | env: TEST=true ALLOW_FAILURE=true 272 | - node_js: "iojs-v1.6" 273 | env: TEST=true ALLOW_FAILURE=true 274 | - node_js: "iojs-v1.5" 275 | env: TEST=true ALLOW_FAILURE=true 276 | - node_js: "iojs-v1.4" 277 | env: TEST=true ALLOW_FAILURE=true 278 | - node_js: "iojs-v1.3" 279 | env: TEST=true ALLOW_FAILURE=true 280 | - node_js: "iojs-v1.2" 281 | env: TEST=true ALLOW_FAILURE=true 282 | - node_js: "iojs-v1.1" 283 | env: TEST=true ALLOW_FAILURE=true 284 | - node_js: "iojs-v1.0" 285 | env: TEST=true ALLOW_FAILURE=true 286 | - node_js: "0.11" 287 | env: TEST=true ALLOW_FAILURE=true 288 | - node_js: "0.9" 289 | env: TEST=true ALLOW_FAILURE=true 290 | - node_js: "0.6" 291 | env: TEST=true ALLOW_FAILURE=true 292 | - node_js: "0.4" 293 | env: TEST=true ALLOW_FAILURE=true 294 | allow_failures: 295 | - os: osx 296 | - env: TEST=true ALLOW_FAILURE=true 297 | - env: COVERAGE=true 298 | - env: POSTTEST=true 299 | --------------------------------------------------------------------------------