{"id":13526562,"url":"https://github.com/teambition/merge2","last_synced_at":"2025-07-01T23:08:25.938Z","repository":{"id":22067084,"uuid":"25396227","full_name":"teambition/merge2","owner":"teambition","description":"Merge multiple streams into one stream in sequence or parallel (~119M/month downloads).","archived":false,"fork":false,"pushed_at":"2024-07-26T11:26:50.000Z","size":149,"stargazers_count":170,"open_issues_count":3,"forks_count":14,"subscribers_count":16,"default_branch":"master","last_synced_at":"2025-06-08T21:11:46.982Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/teambition.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2014-10-18T12:08:24.000Z","updated_at":"2024-10-26T10:07:47.000Z","dependencies_parsed_at":"2023-12-19T01:01:15.992Z","dependency_job_id":"b355d34e-fd4e-4197-8de0-52338b2502e0","html_url":"https://github.com/teambition/merge2","commit_stats":{"total_commits":36,"total_committers":7,"mean_commits":5.142857142857143,"dds":"0.19444444444444442","last_synced_commit":"bc86a3dbacc035e229b68ca8bbf705d770fd395a"},"previous_names":["teambition/gulp-merge"],"tags_count":24,"template":false,"template_full_name":null,"purl":"pkg:github/teambition/merge2","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/teambition%2Fmerge2","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/teambition%2Fmerge2/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/teambition%2Fmerge2/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/teambition%2Fmerge2/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/teambition","download_url":"https://codeload.github.com/teambition/merge2/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/teambition%2Fmerge2/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":260076548,"owners_count":22955578,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-08-01T06:01:31.589Z","updated_at":"2025-07-01T23:08:25.900Z","avatar_url":"https://github.com/teambition.png","language":"JavaScript","readme":"# merge2\n\nMerge multiple streams into one stream in sequence or parallel.\n\n[![NPM version][npm-image]][npm-url]\n[![Build Status][travis-image]][travis-url]\n[![Downloads][downloads-image]][downloads-url]\n\n## Install\n\nInstall with [npm](https://npmjs.org/package/merge2)\n\n```sh\nnpm install merge2\n```\n\n## Usage\n\n```js\nconst gulp = require('gulp')\nconst merge2 = require('merge2')\nconst concat = require('gulp-concat')\nconst minifyHtml = require('gulp-minify-html')\nconst ngtemplate = require('gulp-ngtemplate')\n\ngulp.task('app-js', function () {\n  return merge2(\n      gulp.src('static/src/tpl/*.html')\n        .pipe(minifyHtml({empty: true}))\n        .pipe(ngtemplate({\n          module: 'genTemplates',\n          standalone: true\n        })),\n      gulp.src([\n        'static/src/js/app.js',\n        'static/src/js/locale_zh-cn.js',\n        'static/src/js/router.js',\n        'static/src/js/tools.js',\n        'static/src/js/services.js',\n        'static/src/js/filters.js',\n        'static/src/js/directives.js',\n        'static/src/js/controllers.js'\n      ])\n    )\n    .pipe(concat('app.js'))\n    .pipe(gulp.dest('static/dist/js/'))\n})\n```\n\n```js\nconst stream = merge2([stream1, stream2], stream3, {end: false})\n//...\nstream.add(stream4, stream5)\n//..\nstream.end()\n```\n\n```js\n// equal to merge2([stream1, stream2], stream3)\nconst stream = merge2()\nstream.add([stream1, stream2])\nstream.add(stream3)\n```\n\n```js\n// merge order:\n//   1. merge `stream1`;\n//   2. merge `stream2` and `stream3` in parallel after `stream1` merged;\n//   3. merge 'stream4' after `stream2` and `stream3` merged;\nconst stream = merge2(stream1, [stream2, stream3], stream4)\n\n// merge order:\n//   1. merge `stream5` and `stream6` in parallel after `stream4` merged;\n//   2. merge 'stream7' after `stream5` and `stream6` merged;\nstream.add([stream5, stream6], stream7)\n```\n\n```js\n// nest merge\n// equal to merge2(stream1, stream2, stream6, stream3, [stream4, stream5]);\nconst streamA = merge2(stream1, stream2)\nconst streamB = merge2(stream3, [stream4, stream5])\nconst stream = merge2(streamA, streamB)\nstreamA.add(stream6)\n```\n\n## API\n\n```js\nconst merge2 = require('merge2')\n```\n\n### merge2()\n\n### merge2(options)\n\n### merge2(stream1, stream2, ..., streamN)\n\n### merge2(stream1, stream2, ..., streamN, options)\n\n### merge2(stream1, [stream2, stream3, ...], streamN, options)\n\nreturn a duplex stream (mergedStream). streams in array will be merged in parallel.\n\n### mergedStream.add(stream)\n\n### mergedStream.add(stream1, [stream2, stream3, ...], ...)\n\nreturn the mergedStream.\n\n### mergedStream.on('queueDrain', function() {})\n\nIt will emit 'queueDrain' when all streams merged. If you set `end === false` in options, this event give you a notice that should add more streams to merge or end the mergedStream.\n\n#### stream\n\n*option*\nType: `Readable` or `Duplex` or `Transform` stream.\n\n#### options\n\n*option*\nType: `Object`.\n\n* **end** - `Boolean` - if `end === false` then mergedStream will not be auto ended, you should end by yourself. **Default:** `undefined`\n\n* **pipeError** - `Boolean` - if `pipeError === true` then mergedStream will emit `error` event from source streams. **Default:** `undefined`\n\n* **objectMode** - `Boolean` . **Default:** `true`\n\n`objectMode` and other options(`highWaterMark`, `defaultEncoding` ...) is same as Node.js `Stream`.\n\n## License\n\nMIT © [Teambition](https://www.teambition.com)\n\n[npm-url]: https://npmjs.org/package/merge2\n[npm-image]: http://img.shields.io/npm/v/merge2.svg\n\n[travis-url]: https://travis-ci.org/teambition/merge2\n[travis-image]: http://img.shields.io/travis/teambition/merge2.svg\n\n[downloads-url]: https://npmjs.org/package/merge2\n[downloads-image]: http://img.shields.io/npm/dm/merge2.svg?style=flat-square\n","funding_links":[],"categories":["Repository","JavaScript","Modules"],"sub_categories":["Streams"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fteambition%2Fmerge2","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fteambition%2Fmerge2","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fteambition%2Fmerge2/lists"}