{"id":26107285,"url":"https://github.com/biggyspender/ts-iterable-functions","last_synced_at":"2025-10-11T03:54:01.830Z","repository":{"id":34504507,"uuid":"179754258","full_name":"biggyspender/ts-iterable-functions","owner":"biggyspender","description":"Tree-shakeable, functional, type-safe library for lazy transformation of iterable sequences in TypeScript.","archived":false,"fork":false,"pushed_at":"2023-07-19T01:30:48.000Z","size":2126,"stargazers_count":3,"open_issues_count":3,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-09-30T04:13:05.252Z","etag":null,"topics":["functional","iterable","iterator","javascript","lazy","library","pipes","point-free","typescript","unary-functions"],"latest_commit_sha":null,"homepage":"https://biggyspender.github.io/ts-iterable-functions/","language":"TypeScript","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/biggyspender.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":null,"code_of_conduct":"CODE_OF_CONDUCT.md","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,"zenodo":null}},"created_at":"2019-04-05T21:00:44.000Z","updated_at":"2023-01-25T16:48:07.000Z","dependencies_parsed_at":"2025-04-12T20:37:58.035Z","dependency_job_id":null,"html_url":"https://github.com/biggyspender/ts-iterable-functions","commit_stats":null,"previous_names":[],"tags_count":47,"template":false,"template_full_name":null,"purl":"pkg:github/biggyspender/ts-iterable-functions","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/biggyspender%2Fts-iterable-functions","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/biggyspender%2Fts-iterable-functions/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/biggyspender%2Fts-iterable-functions/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/biggyspender%2Fts-iterable-functions/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/biggyspender","download_url":"https://codeload.github.com/biggyspender/ts-iterable-functions/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/biggyspender%2Fts-iterable-functions/sbom","scorecard":{"id":237554,"data":{"date":"2025-08-11","repo":{"name":"github.com/biggyspender/ts-iterable-functions","commit":"f562868d95397db39b422764fbfe689689da1920"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":2.3,"checks":[{"name":"Code-Review","score":0,"reason":"Found 0/28 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/ts-iterable-functions.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Pinned-Dependencies","score":2,"reason":"dependency not pinned by hash detected -- score normalized to 2","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ts-iterable-functions.yml:17: update your workflow using https://app.stepsecurity.io/secureworkflow/biggyspender/ts-iterable-functions/ts-iterable-functions.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ts-iterable-functions.yml:18: update your workflow using https://app.stepsecurity.io/secureworkflow/biggyspender/ts-iterable-functions/ts-iterable-functions.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ts-iterable-functions.yml:51: update your workflow using https://app.stepsecurity.io/secureworkflow/biggyspender/ts-iterable-functions/ts-iterable-functions.yml/master?enable=pin","Warn: containerImage not pinned by hash: .devcontainer/Dockerfile:3","Warn: containerImage not pinned by hash: .devcontainer/base.Dockerfile:3","Info:   0 out of   1 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   2 third-party GitHubAction dependencies pinned","Info:   0 out of   2 containerImage dependencies pinned","Info:   1 out of   1 npmCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"License","score":0,"reason":"license file not detected","details":["Warn: project does not have a license file"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'","Warn: branch protection not enabled for branch 'alpha'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 2 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Vulnerabilities","score":0,"reason":"35 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-968p-4wvh-cqc8","Warn: Project is vulnerable to: GHSA-67hx-6x53-jw92","Warn: Project is vulnerable to: GHSA-h5c3-5r3r-rr8q","Warn: Project is vulnerable to: GHSA-rmvr-2pp2-xj38","Warn: Project is vulnerable to: GHSA-xx4v-prfh-6cgc","Warn: Project is vulnerable to: GHSA-v6h2-p8h4-qcjw","Warn: Project is vulnerable to: GHSA-grv7-fg5c-xmjg","Warn: Project is vulnerable to: GHSA-3xgq-45jj-v275","Warn: Project is vulnerable to: GHSA-67mh-4wv8-2f99","Warn: Project is vulnerable to: GHSA-4q6p-r6v2-jvc5","Warn: Project is vulnerable to: GHSA-rc47-6667-2j5j","Warn: Project is vulnerable to: GHSA-78xj-cgh5-2h22","Warn: Project is vulnerable to: GHSA-2p57-rm9w-gvfp","Warn: Project is vulnerable to: GHSA-952p-6rrq-rcjv","Warn: Project is vulnerable to: GHSA-mwcw-c2x4-8c55","Warn: Project is vulnerable to: GHSA-76c9-3jph-rj3q","Warn: Project is vulnerable to: GHSA-9wv6-86v2-598j","Warn: Project is vulnerable to: GHSA-7fh5-64p2-3v2j","Warn: Project is vulnerable to: GHSA-gcx4-mw62-g8wm","Warn: Project is vulnerable to: GHSA-c2qf-rxjj-qqgw","Warn: Project is vulnerable to: GHSA-f5x3-32g6-xq36","Warn: Project is vulnerable to: GHSA-52f5-9888-hmc6","Warn: Project is vulnerable to: GHSA-353f-5xf4-qw67","Warn: Project is vulnerable to: GHSA-c24v-8rfc-w8vw","Warn: Project is vulnerable to: GHSA-8jhw-289h-jh2g","Warn: Project is vulnerable to: GHSA-64vr-g452-qvp3","Warn: Project is vulnerable to: GHSA-9cwx-2883-4wfx","Warn: Project is vulnerable to: GHSA-vg6x-rcgg-rjx6","Warn: Project is vulnerable to: GHSA-x574-m823-4x7w","Warn: Project is vulnerable to: GHSA-4r4m-qw57-chr8","Warn: Project is vulnerable to: GHSA-xcj6-pq6g-qj4x","Warn: Project is vulnerable to: GHSA-356w-63v5-8wf4","Warn: Project is vulnerable to: GHSA-859w-5945-r5v3","Warn: Project is vulnerable to: GHSA-j8xg-fqg3-53r7","Warn: Project is vulnerable to: GHSA-m95q-7qp3-xv42"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-17T06:01:59.520Z","repository_id":34504507,"created_at":"2025-08-17T06:01:59.520Z","updated_at":"2025-08-17T06:01:59.520Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279006109,"owners_count":26084026,"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","status":"online","status_checked_at":"2025-10-11T02:00:06.511Z","response_time":55,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["functional","iterable","iterator","javascript","lazy","library","pipes","point-free","typescript","unary-functions"],"created_at":"2025-03-09T22:53:01.980Z","updated_at":"2025-10-11T03:54:01.814Z","avatar_url":"https://github.com/biggyspender.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ts-iterable-functions\n\nA collection of type-safe functions for operating over iterable sequences, with specialized versions that generate unary functions for use in pipes. Will feel immediately familiar for users of MS LINQ-to-objects.\n\n[![npm](https://img.shields.io/npm/v/ts-iterable-functions.svg?style=flat)](https://npmjs.org/package/ts-iterable-functions \"View this project on npm\")\n[![build](https://github.com/biggyspender/ts-iterable-functions/actions/workflows/ts-iterable-functions.yml/badge.svg?branch=master)](https://github.com/biggyspender/ts-iterable-functions/actions/workflows/ts-iterable-functions.yml)\n\n### Note\n\nVersions \u003e 5.x are now built with [esbuild](https://esbuild.github.io/) and no longer support IE11.\n\n## Installation\n\n```sh\nnpm install ts-iterable-functions ts-functional-pipe \\\n            ts-equality-comparer ts-comparer-builder\n```\n\n## Usage\n\nFirst, import `pipeInto` from [`ts-functional-pipe`](https://www.npmjs.com/package/ts-functional-pipe):\n\n```typescript\nimport { pipeInto as pp } from \"ts-functional-pipe\";\n```\n\nLet's make a collection of cars\n\n```typescript\nconst cars = [\n  {\n    manufacturer: \"Ford\",\n    model: \"Escort\",\n  },\n  {\n    manufacturer: \"Ford\",\n    model: \"Cortina\",\n  },\n  {\n    manufacturer: \"Renault\",\n    model: \"Clio\",\n  },\n  {\n    manufacturer: \"Vauxhall\",\n    model: \"Corsa\",\n  },\n  {\n    manufacturer: \"Ford\",\n    model: \"Fiesta\",\n  },\n  {\n    manufacturer: \"Fiat\",\n    model: \"500\",\n  },\n];\n```\n\n...and sort them by manufacturer, and then by model:\n\n```typescript\nconst orderedCars = pp(\n  cars,\n  orderBy((c) =\u003e c.manufacturer),\n  thenBy((c) =\u003e c.model),\n  toArray()\n);\n```\n\nOr we could count the number of cars for each manufacturer:\n\n```typescript\nconst carsPerManufacturer = pp(\n  cars,\n  groupBy((c) =\u003e c.manufacturer),\n  map((g) =\u003e ({\n    count: _count(g),\n    manufacturer: g.key,\n  })),\n  orderByDescending((c) =\u003e c.count),\n  thenBy((c) =\u003e c.manufacturer)\n);\nfor (var c of carsPerManufacturer) {\n  console.log(`${c.manufacturer} : ${c.count}`);\n}\n```\n\nto give\n\n```\nFord : 3\nFiat : 1\nRenault : 1\nVauxhall : 1\n```\n\n## Functions for iterable sequences\n\nAlmost every function in this collection is designed to work over `Iterable\u003cT\u003e`.\n\n### An example\n\nLet's start with `map` (which is also aliased to `select`) to see how it works.\n\nHere's an `Iterable\u003cnumber\u003e`\n\n```typescript\nconst src = [1, 2, 3];\n```\n\nWe can use the `_map` function to transform this as follows:\n\n```typescript\nconst times2 = _map(src, (x) =\u003e x + x);\n```\n\n### Two forms of the same function\n\nAll of the functions that transform iterables in this library exist in two forms.\n\nThe first form is the one we used above and looks like this:\n\n```typescript\nfunction _someOperator\u003cT, A, B, R\u003e(src: T, a: A, b: B): R;\n```\n\nand by convention is prefixed with an `_underscore`. While handy in their own way, composing these functions is ugly.\n\n```typescript\n//this looks awful\nconst times2squared = _map(\n  _map(src, (x) =\u003e x + x),\n  (x) =\u003e x * x\n);\n```\n\n### The pipeable function\n\nIf, instead, we had functions that look like this\n\n```typescript\nfunction someOperator\u003cT, A, B, R\u003e(a: A, b: B): (src: T) =\u003e R;\n```\n\nwhere the function returns a **_unary_** function of the form `(src: T) =\u003e R`, we can use them in pipes (where the output of one function is fed in to the input of the next function).\n\nIn fact, we can transform `_someOperator` into `someOperator` (preserving all type information) with the [`deferP0`](https://github.com/biggyspender/ts-functional-pipe/blob/master/src/deferP0.ts) function (from [ts-functional-pipe](https://github.com/biggyspender/ts-functional-pipe)):\n\n```typescript\nconst deferP0 =\n  \u003cP0, A extends any[], R\u003e(fn: (src: P0, ...args: A) =\u003e R) =\u003e\n  (...args: A) =\u003e\n  (src: P0): R =\u003e\n    fn(src, ...args);\n```\n\nso, we could take the `_map` function above and transform it into the pipeable form with a simple call to `deferP0(_map)`.\n\nAll functions that transform `Iterable\u003cT\u003e` in the library exist in the two forms. So, for instance the map function exists as `_map` and `map`. Moving forward, we'll be avoiding the `_underscored` functions.\n\n## Usage with pipes\n\nThe functions in this library are designed to be composed. Package [`ts-functional-pipe`](https://github.com/biggyspender/ts-functional-pipe) offers excellent type-inference for this purpose. There is good information about to use the `pipe`/`pipeInto`/`compose` functions it contains in the [`README`](https://github.com/biggyspender/ts-functional-pipe/blob/master/README.md) over there.\n\n### Making `times2squared` readable\n\nLet's use `pipeInto` (imported above as `pp`) to pipe our iterable into a chain of unary functions, generated (in this case) using the `map` function discussed above:\n\n```typescript\nconst src = [1, 2, 3];\nconst times2squared = pp(\n  src,\n  map((x) =\u003e x + x),\n  map((x) =\u003e x * x)\n);\n```\n\n## Types in the pipe are preserved\n\nDue to some funky type-definitions in [ts-functional-pipe](https://github.com/biggyspender/ts-functional-pipe), types flow through the pipe nicely:\n\n```typescript\nconst src = [1, 2, 3];\nconst toStringRepeated = pp(\n  src,\n  map((x) =\u003e x.toString()), // here x is number\n  map((s) =\u003e s + s) // here s is string\n); // returns a string\n```\n\nand all types are correctly inferred.\n\nMore coming soon.\n\n## Generators\n\n`range`, `repeat`, `repeatGenerate`\n\n## Transformers\n\n`aggregate`, `all`/`every`, `append`, `average`, `concat`, `count`, `defaultIfEmpty`, `distinctBy`, `distinct`, `elementAt`, `except`, `firstOrDefault`, `first`, `flatten`, `forEach`, `fullOuterGroupJoin`, `fullOuterJoin`, `groupAdjacent`, `groupBy`, `groupJoin`, `intersect`, `isSubsetOf`, `isSupersetOf`, `join`, `lastOrDefault`, `last`, `leftOuterJoin`, `maxBy`, `max`, `minBy`, `min`, `orderByDescending`, `orderBy`, `preprend`, `reduce`, `reduceRight`, `reverse`, `selectMany`/`flapMap`, `select`/`map`, `sequenceEqual`, `singleOrDefault`, `single`, `skip`, `skipWhile`, `some`, `sum`, `take`, `takeWhile`, `thenByDescending`, `thenBy`, `toArray`, `toLookup`, `toMap`, `toSet`, `union`, `where`/`filter`, `zipAll`, `zip`, `zipMap`\n\n### acknowledgements\n\nCreated using the wonderful [https://github.com/gjuchault/typescript-library-starter](https://github.com/gjuchault/typescript-library-starter).\n\n---\n\n# Typescript Library Starter\n\n![NPM](https://img.shields.io/npm/l/@gjuchault/typescript-library-starter)\n![NPM](https://img.shields.io/npm/v/@gjuchault/typescript-library-starter)\n![GitHub Workflow Status](https://github.com/gjuchault/typescript-library-starter/actions/workflows/typescript-library-starter.yml/badge.svg?branch=main)\n\nYet another (opinionated) typescript library starter template.\n\n## Opinions and limitations\n\n1. Relies as much as possible on each included library's defaults\n2. Only rely on GitHub Actions\n3. Do not include documentation generation\n\n## Getting started\n\n1. `npx degit gjuchault/typescript-library-starter my-project` or click on `Use this template` button on GitHub!\n2. `cd my-project`\n3. `npm install`\n4. `git init` (if you used degit)\n5. `npm run setup`\n\nTo enable deployment, you will need to:\n\n1. Setup `NPM_TOKEN` secret in GitHub actions ([Settings \u003e Secrets \u003e Actions](https://github.com/gjuchault/typescript-service-starter/settings/secrets/actions))\n2. Give `GITHUB_TOKEN` write permissions for GitHub releases ([Settings \u003e Actions \u003e General](https://github.com/gjuchault/typescript-service-starter/settings/actions) \u003e Workflow permissions)\n\n## Features\n\n### Node.js, npm version\n\nTypescript Library Starter relies on [volta](https://volta.sh/) to ensure node version to be consistent across developers. It's also used in the GitHub workflow file.\n\n### Typescript\n\nLeverages [esbuild](https://github.com/evanw/esbuild) for blazing fast builds, but keeps `tsc` to generate `.d.ts` files.\nGenerates two builds to support both ESM and CJS.\n\nCommands:\n\n- `build`: runs typechecking then generates CJS, ESM and `d.ts` files in the `build/` directory\n- `clean`: removes the `build/` directory\n- `type:dts`: only generates `d.ts`\n- `type:check`: only run typechecking\n- `type:build`: only generates CJS and ESM\n\n### Tests\n\ntypescript-library-starter uses [vitest](https://vitest.dev/). The coverage is done through vitest, using [c8](https://github.com/bcoe/c8).\n\nCommands:\n\n- `test`: runs vitest test runner\n- `test:watch`: runs vitest test runner in watch mode\n- `test:coverage`: runs vitest test runner and generates coverage reports\n\n### Format \u0026 lint\n\nThis template relies on the combination of [eslint](https://github.com/eslint/eslint) — through [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint) for linting and [prettier](https://github.com/prettier/prettier) for formatting.\nIt also uses [cspell](https://github.com/streetsidesoftware/cspell) to ensure spelling\n\nCommands:\n\n- `format`: runs prettier with automatic fixing\n- `format:check`: runs prettier without automatic fixing (used in CI)\n- `lint`: runs eslint with automatic fixing\n- `lint:check`: runs eslint without automatic fixing (used in CI)\n- `spell:check`: runs spellchecking\n\n### Releasing\n\nUnder the hood, this library uses [semantic-release](https://github.com/semantic-release/semantic-release) and [commitizen](https://github.com/commitizen/cz-cli).\nThe goal is to avoid manual release process. Using `semantic-release` will automatically create a github release (hence tags) as well as an npm release.\nBased on your commit history, `semantic-release` will automatically create a patch, feature or breaking release.\n\nCommands:\n\n- `cz`: interactive CLI that helps you generate a proper git commit message, using [commitizen](https://github.com/commitizen/cz-cli)\n- `semantic-release`: triggers a release (used in CI)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbiggyspender%2Fts-iterable-functions","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbiggyspender%2Fts-iterable-functions","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbiggyspender%2Fts-iterable-functions/lists"}