{"id":13457581,"url":"https://github.com/arogozine/LinqToTypeScript","last_synced_at":"2025-03-24T14:32:10.352Z","repository":{"id":46685638,"uuid":"73287917","full_name":"arogozine/LinqToTypeScript","owner":"arogozine","description":"LINQ to TypeScript","archived":false,"fork":false,"pushed_at":"2025-02-28T04:32:00.000Z","size":3805,"stargazers_count":146,"open_issues_count":5,"forks_count":18,"subscribers_count":9,"default_branch":"master","last_synced_at":"2025-02-28T11:03:37.789Z","etag":null,"topics":["async","async-await","async-iteration","enumerable","es2019","javascript","linq","typescript"],"latest_commit_sha":null,"homepage":"https://arogozine.github.io/linqtotypescript/","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/arogozine.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":"2016-11-09T13:47:48.000Z","updated_at":"2025-02-28T04:16:57.000Z","dependencies_parsed_at":"2023-12-18T02:24:57.607Z","dependency_job_id":"ee8da2ab-05f8-4ed1-aabd-d4312e48eb19","html_url":"https://github.com/arogozine/LinqToTypeScript","commit_stats":{"total_commits":695,"total_committers":2,"mean_commits":347.5,"dds":"0.0014388489208633226","last_synced_commit":"14067dbfd0dcf387892061948ddcbeec538b21bc"},"previous_names":[],"tags_count":45,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arogozine%2FLinqToTypeScript","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arogozine%2FLinqToTypeScript/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arogozine%2FLinqToTypeScript/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arogozine%2FLinqToTypeScript/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/arogozine","download_url":"https://codeload.github.com/arogozine/LinqToTypeScript/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245289608,"owners_count":20591101,"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":["async","async-await","async-iteration","enumerable","es2019","javascript","linq","typescript"],"created_at":"2024-07-31T09:00:30.295Z","updated_at":"2025-03-24T14:32:10.332Z","avatar_url":"https://github.com/arogozine.png","language":"TypeScript","funding_links":[],"categories":["TypeScript"],"sub_categories":[],"readme":"# LINQ To TypeScript\n- **Implementation of [LINQ](https://en.wikipedia.org/wiki/Language_Integrated_Query) for TypeScript**\n- **Targets TypeScript 5.6.X and ES 2022**\n```TypeScript\nawait from([bing, google, quackQuackGo])\n    .asParallel()\n    .selectAsync(downloadHtml)\n    .select(getTitle)\n    .toArray()\n```\n## Getting Started\n```sh\nnpm i linq-to-typescript\n```\n[![npm](https://img.shields.io/npm/v/linq-to-typescript?color=brightgreen\u0026style=flat-square)][npm-url]\n[![npm bundle size](https://img.shields.io/bundlephobia/min/linq-to-typescript?color=brightgreen\u0026style=flat-square)][npm-url]\n[![License](https://img.shields.io/npm/l/linq-to-typescript?color=brightgreen\u0026style=flat-square)](LICENSE)\n[![npm](https://img.shields.io/npm/dw/linq-to-typescript?color=brightgreen\u0026style=flat-square)][npm-url]\n[![][master-build-azure-badge]][master-build-azure-url]\n\n[npm-url]: https://www.npmjs.com/package/linq-to-typescript\n[master-build-azure-url]: https://arogozine.visualstudio.com/LinqToTypeScript/_build/latest?definitionId=7\u0026branchName=master\n[master-build-azure-badge]: https://arogozine.visualstudio.com/LinqToTypeScript/_apis/build/status/arogozine.LinqToTypeScript?branchName=master\n\n### tsconfig.json\n```JSON\n\"compilerOptions\": {\n    \"target\": \"es2022\",\n    \"lib\": [\n      \"es2022\"\n    ]\n}\n```\n* The `strict` TS option is recommended.\n\n### Using the Library\n#### With Wrappers\n```TypeScript\n// 0. Import Module\nimport { from } from \"linq-to-typescript\"\n\n// To Use With Wrappers\nconst evenNumbers = from([1, 2, 3, 4, 5, 6, 7, 8, 9]).where((x) =\u003e x % 2 === 0).toArray()\n```\n#### Without Wrappers\n```TypeScript\n// 0. Import Module\nimport { initializeLinq, IEnumerable } from \"linq-to-typescript\"\n// 1. Declare that the JS types implement the IEnumerable interface\ndeclare global {\n    interface Array\u003cT\u003e extends IEnumerable\u003cT\u003e { }\n    interface Uint8Array extends IEnumerable\u003cnumber\u003e { }\n    interface Uint8ClampedArray extends IEnumerable\u003cnumber\u003e { }\n    interface Uint16Array extends IEnumerable\u003cnumber\u003e { }\n    interface Uint32Array extends IEnumerable\u003cnumber\u003e { }\n    interface Int8Array extends IEnumerable\u003cnumber\u003e { }\n    interface Int16Array extends IEnumerable\u003cnumber\u003e { }\n    interface Int32Array extends IEnumerable\u003cnumber\u003e { }\n    interface Float32Array extends IEnumerable\u003cnumber\u003e { }\n    interface Float64Array extends IEnumerable\u003cnumber\u003e { }\n    interface Map\u003cK, V\u003e extends IEnumerable\u003c[K, V]\u003e { }\n    interface Set\u003cT\u003e extends IEnumerable\u003cT\u003e { }\n    interface String extends IEnumerable\u003cstring\u003e { }\n}\n// 2. Bind Linq Functions to Array, Map, etc\ninitializeLinq()\n// 3. Use without a wrapper type\nconst evenNumbers = [1, 2, 3, 4, 5, 6, 7, 8, 9].where((x) =\u003e x % 2 === 0).toArray()\n```\n\n### Examples\n\nPlease refer to the [examples folder](https://github.com/arogozine/LinqToTypeScript/blob/master/examples)\n\n### ES6 Modules (ESM)\n\nTo use library with ES6 modules make sure that you specify `\"type\": \"module\"` in package.json\n\n## API\n\n[TypeDoc API Surface Documentation](https://arogozine.github.io/linqtotypescript/)\n\n**LinqToTypeScript implements the functionality of the IEnumerable interface**\n\n- IEnumerable, IAsyncEnumerable, and IParallelEnumerable interfaces are based on,\n- [IEnumerable\u0026lt;T\u0026gt; Interface](https://msdn.microsoft.com/en-us/library/9eekhta0(v=vs.110).aspx)\n- Some changes made due to conflics with existing method names\n- Some changes made due to limitations of JavaScript\n\n#### IEnumerable\n- Inspired by LINQ API Surface\n- Has Async methods that return `Promise` or `IAsyncEnumerable`\n- Implements `Iterable\u003cT\u003e` \n- Use `from` to wrap your arrays\n\n#### IAsyncEnumerable\n- Inspired by LINQ API Surface\n- Has Async methods that return `Promise` or `IAsyncEnumerable`\n- For asynchronous iteration\n- Implements `AsyncIterable\u003cT\u003e` interface\n- Use `fromAsync` to wrap your AsyncIterable type\n\n#### IParallelEnumerable\n- Inspired by LINQ API Surface\n- Has Async methods that return `Promise` or `IParallelEnumerable`\n- For asynchronous iteration in parallel (where possible)\n- Implements `AsyncIterable\u003cT\u003e` interface\n- Use `fromParallel` to create a parallel enumeration\n\n#### Shared Instance Methods\n\n| Method             | Async\\* | Tests Coverage | Notes |\n|--------------------|---------|----------------|-------|\n| aggregate          | No      | [Sync](https://github.com/arogozine/LinqToTypeScript/blob/master/tests/unittests/tests/Aggregate.ts)\n| all                | Yes     | [Sync](https://github.com/arogozine/LinqToTypeScript/blob/master/tests/unittests/tests/All.ts), [Async](https://github.com/arogozine/LinqToTypeScript/blob/master/tests/unittests/tests/AllAsync.ts)\n| any                | Yes     | [Sync](https://github.com/arogozine/LinqToTypeScript/blob/master/tests/unittests/tests/Any.ts), [Async](https://github.com/arogozine/LinqToTypeScript/blob/master/tests/unittests/tests/AnyAsync.ts)\n| append             | No      | [Sync](https://github.com/arogozine/LinqToTypeScript/blob/master/tests/unittests/tests/Append.ts)\n| average            | Yes     | [Sync](https://github.com/arogozine/LinqToTypeScript/blob/master/tests/unittests/tests/Average.ts), [Async](https://github.com/arogozine/LinqToTypeScript/blob/master/tests/unittests/tests/AverageAsync.ts)\n| chunk              | No      | [Sync](https://github.com/arogozine/LinqToTypeScript/blob/master/tests/unittests/tests/Chunk.ts)\n| concatenate        | No      | [Sync](https://github.com/arogozine/LinqToTypeScript/blob/master/tests/unittests/tests/Concatenate.ts) | Equivalent to `.Concat` but renamed to avoid conflict with JS\n| contains           | Yes     | [Sync](https://github.com/arogozine/LinqToTypeScript/blob/master/tests/unittests/tests/Contains.ts), [Async](https://github.com/arogozine/LinqToTypeScript/blob/master/tests/unittests/tests/ContainsAsync.ts)\n| count              | Yes     | [Sync](https://github.com/arogozine/LinqToTypeScript/blob/master/tests/unittests/tests/Count.ts), [Async](https://github.com/arogozine/LinqToTypeScript/blob/master/tests/unittests/tests/CountAsync.ts)\n| defaultIfEmpty     | No      | [Sync](https://github.com/arogozine/LinqToTypeScript/blob/master/tests/unittests/tests/DefaultIfEmpty.ts)\n| distinct           | Yes     | [Sync](https://github.com/arogozine/LinqToTypeScript/blob/master/tests/unittests/tests/Distinct.ts), [Async](https://github.com/arogozine/LinqToTypeScript/blob/master/tests/unittests/tests/DistinctAsync.ts)\n| elementAt          | No      | [Sync](https://github.com/arogozine/LinqToTypeScript/blob/master/tests/unittests/tests/ElementAt.ts)\n| elementAtOrDefault | No      | [Sync](https://github.com/arogozine/LinqToTypeScript/blob/master/tests/unittests/tests/ElementAtOrDefault.ts)\n| except             | Yes     | [Sync](https://github.com/arogozine/LinqToTypeScript/blob/master/tests/unittests/tests/Except.ts), [Async](https://github.com/arogozine/LinqToTypeScript/blob/master/tests/unittests/tests/ExceptAsync.ts)\n| first              | Yes     | [Sync](https://github.com/arogozine/LinqToTypeScript/blob/master/tests/unittests/tests/First.ts), [Async](https://github.com/arogozine/LinqToTypeScript/blob/master/tests/unittests/tests/FirstAsync.ts)\n| firstOrDefault     | Yes     | [Sync](https://github.com/arogozine/LinqToTypeScript/blob/master/tests/unittests/tests/FirstOrDefault.ts), [Async](https://github.com/arogozine/LinqToTypeScript/blob/master/tests/unittests/tests/FirstOrDefaultAsync.ts)\n| each               | Yes     | [Sync](https://github.com/arogozine/LinqToTypeScript/blob/master/tests/unittests/tests/Each.ts), [Async](https://github.com/arogozine/LinqToTypeScript/blob/master/tests/unittests/tests/EachAsync.ts) | From `List\u003cT\u003e.ForEach`\n| groupBy            | Yes     | [Sync](https://github.com/arogozine/LinqToTypeScript/blob/master/tests/unittests/tests/GroupBy.ts), [Async](https://github.com/arogozine/LinqToTypeScript/blob/master/tests/unittests/tests/GroupByAsync.ts)\n| groupByWithSel     | No      | [Sync](https://github.com/arogozine/LinqToTypeScript/blob/master/tests/unittests/tests/GroupByWithSel.ts)\n| groupJoin          | Yes     | [Sync](https://github.com/arogozine/LinqToTypeScript/blob/master/tests/unittests/tests/GroupJoin.ts), [Async](/tests/unittests/tests/GroupJoinAsync.ts)\n| intersect          | Yes     | [Sync](https://github.com/arogozine/LinqToTypeScript/blob/master/tests/unittests/tests/Intersect.ts), [Async](https://github.com/arogozine/LinqToTypeScript/blob/master/tests/unittests/tests/IntersectAsync.ts)\n| joinByKey          | No      | [Sync](https://github.com/arogozine/LinqToTypeScript/blob/master/tests/unittests/tests/JoinByKey.ts)\n| last               | Yes     | [Sync](https://github.com/arogozine/LinqToTypeScript/blob/master/tests/unittests/tests/Last.ts), [Async](https://github.com/arogozine/LinqToTypeScript/blob/master/tests/unittests/tests/LastAsync.ts)\n| lastOrDefault      | Yes     | [Sync](https://github.com/arogozine/LinqToTypeScript/blob/master/tests/unittests/tests/LastOrDefault.ts), [Async](https://github.com/arogozine/LinqToTypeScript/blob/master/tests/unittests/tests/LastOrDefaultAsync.ts)\n| max                | Yes     | [Sync](https://github.com/arogozine/LinqToTypeScript/blob/master/tests/unittests/tests/Max.ts), [Async](https://github.com/arogozine/LinqToTypeScript/blob/master/tests/unittests/tests/MaxAsync.ts)\n| min                | Yes     | [Sync](https://github.com/arogozine/LinqToTypeScript/blob/master/tests/unittests/tests/Min.ts), [Async](https://github.com/arogozine/LinqToTypeScript/blob/master/tests/unittests/tests/MinAsync.ts)\n| ofType             | No      | [Sync](https://github.com/arogozine/LinqToTypeScript/blob/master/tests/unittests/tests/OfType.ts)\n| order              | No      | [Sync](/tests/unittests/tests/Order.ts)\n| orderBy            | Yes     | [Sync](https://github.com/arogozine/LinqToTypeScript/blob/master/tests/unittests/tests/OrderBy.ts), [Async](https://github.com/arogozine/LinqToTypeScript/blob/master/tests/unittests/tests/OrderByAsync.ts)\n| orderByDescending  | Yes     | [Sync](https://github.com/arogozine/LinqToTypeScript/blob/master/tests/unittests/tests/OrderByDescending.ts), [Async](https://github.com/arogozine/LinqToTypeScript/blob/master/tests/unittests/tests/OrderByDescendingAsync.ts)\n| orderDescending    | No      | [Sync](https://github.com/arogozine/LinqToTypeScript/blob/master/tests/unittests/tests/OrderDescending.ts)\n| partition          | Yes     | [Sync](https://github.com/arogozine/LinqToTypeScript/blob/master/tests/unittests/tests/Partition.ts), [Async](https://github.com/arogozine/LinqToTypeScript/blob/master/tests/unittests/tests/PartitionAsync.ts)\n| prepend            | No      | [Sync](https://github.com/arogozine/LinqToTypeScript/blob/master/tests/unittests/tests/Prepend.ts)\n| reverse            | No      | [Sync](https://github.com/arogozine/LinqToTypeScript/blob/master/tests/unittests/tests/Reverse.ts)\n| select             | Yes     | [Sync](https://github.com/arogozine/LinqToTypeScript/blob/master/tests/unittests/tests/Select.ts), [Async](https://github.com/arogozine/LinqToTypeScript/blob/master/tests/unittests/tests/SelectAsync.ts)\n| selectMany         | Yes     | [Sync](https://github.com/arogozine/LinqToTypeScript/blob/master/tests/unittests/tests/SelectMany.ts), [Async](https://github.com/arogozine/LinqToTypeScript/blob/master/tests/unittests/tests/SelectManyAsync.ts)\n| sequenceEquals     | Yes     | [Sync](https://github.com/arogozine/LinqToTypeScript/blob/master/tests/unittests/tests/SequenceEquals.ts), [Async](https://github.com/arogozine/LinqToTypeScript/blob/master/tests/unittests/tests/SequenceEqualsAsync.ts)\n| single             | Yes     | [Sync](https://github.com/arogozine/LinqToTypeScript/blob/master/tests/unittests/tests/Single.ts), [Async](https://github.com/arogozine/LinqToTypeScript/blob/master/tests/unittests/tests/SingleAsync.ts)\n| singleOrDefault    | Yes     | [Sync](https://github.com/arogozine/LinqToTypeScript/blob/master/tests/unittests/tests/SingleOrDefault.ts), [Async](https://github.com/arogozine/LinqToTypeScript/blob/master/tests/unittests/tests/SingleOrDefaultAsync.ts)\n| skip               | No      | [Sync](https://github.com/arogozine/LinqToTypeScript/blob/master/tests/unittests/tests/Skip.ts)\n| skipWhile          | Yes     | [Sync](https://github.com/arogozine/LinqToTypeScript/blob/master/tests/unittests/tests/SkipWhile.ts), [Async](https://github.com/arogozine/LinqToTypeScript/blob/master/tests/unittests/tests/SkipWhileAsync.ts)\n| sum                | Yes     | [Sync](https://github.com/arogozine/LinqToTypeScript/blob/master/tests/unittests/tests/Sum.ts), [Async](https://github.com/arogozine/LinqToTypeScript/blob/master/tests/unittests/tests/SumAsync.ts)\n| take               | No      | [Sync](https://github.com/arogozine/LinqToTypeScript/blob/master/tests/unittests/tests/Take.ts)\n| takeWhile          | Yes     | [Sync](https://github.com/arogozine/LinqToTypeScript/blob/master/tests/unittests/tests/TakeWhile.ts), [Async](https://github.com/arogozine/LinqToTypeScript/blob/master/tests/unittests/tests/TakeWhileAsync.ts)\n| toArray            | No      | [Sync](https://github.com/arogozine/LinqToTypeScript/blob/master/tests/unittests/tests/ToArray.ts)\n| toMap              | Yes     | [Sync](https://github.com/arogozine/LinqToTypeScript/blob/master/tests/unittests/tests/ToMap.ts), [Async](https://github.com/arogozine/LinqToTypeScript/blob/master/tests/unittests/tests/ToMapAsync.ts) | Equivalent to `ToDictionary`\n| toObject           | Yes     | [Sync](https://github.com/arogozine/LinqToTypeScript/blob/master/tests/unittests/tests/toObject.ts), [Async](https://github.com/arogozine/LinqToTypeScript/blob/master/tests/unittests/tests/toObjectAsync.ts)\n| toSet              | No      | [Sync](https://github.com/arogozine/LinqToTypeScript/blob/master/tests/unittests/tests/ToSet.ts) | Equivalent to `ToHashSet`. No comparer overload for JS.\n| union              | Yes     | [Sync](https://github.com/arogozine/LinqToTypeScript/blob/master/tests/unittests/tests/Union.ts)\n| where              | Yes     | [Sync](https://github.com/arogozine/LinqToTypeScript/blob/master/tests/unittests/tests/Where.ts), [Async](https://github.com/arogozine/LinqToTypeScript/blob/master/tests/unittests/tests/WhereAsync.ts)\n| zip                | Yes     | [Sync](https://github.com/arogozine/LinqToTypeScript/blob/master/tests/unittests/tests/Zip.ts), [Async](https://github.com/arogozine/LinqToTypeScript/blob/master/tests/unittests/tests/ZipAsync.ts)\n\n\\* Async methods take an async function\n\n#### Static Methods\n\n| Method          | Async                | Parallel          | Tests Coverage |\n|-----------------|----------------------|-------------------|----------------|\n| empty           | emptyAsync           | emptyParallel     | [Test](https://github.com/arogozine/LinqToTypeScript/blob/master/tests/unittests/tests/staticmethods/Empty.ts)\n| enumerateObject | enumerateObjectAsync | N/A               | [Test](https://github.com/arogozine/LinqToTypeScript/blob/master/tests/unittests/tests/staticmethods/EnumerateObject.ts)\n| flatten         | flattenAsync         | flattenParallel   | [Test](https://github.com/arogozine/LinqToTypeScript/blob/master/tests/unittests/tests/staticmethods/Flatten.ts)\n| range           | rangeAsync           | rangeParallel     | [Test](https://github.com/arogozine/LinqToTypeScript/blob/master/tests/unittests/tests/staticmethods/Range.ts)\n| repeat          | repeatAsync          | repeatParallel    | [Test](https://github.com/arogozine/LinqToTypeScript/blob/master/tests/unittests/tests/staticmethods/Repeat.ts)\n\n#### Index Methods\n\n| Method               | Notes                                                   |\n|----------------------|---------------------------------------------------------|\n| bindArray            | Binds IEnumerable methods to an ArrayLike Iterable type |\n| bindLinq             | Binds IEnumerable methods to an Interable type          |\n| bindLinqAsync        | Binds IAsyncEnumerable methods to an AsyncIterable type |\n| isEnumerable         | Determines if source implements IEnumerable             |\n| isAsyncEnumerable    | Determines if source implements IAsyncEnumerable        |\n| isParallelEnumerable | Determines if source implements IParallelEnumerable     |\n| initializeLinq       | Binds to IEnumerable to Array Types, Map, Set, \u0026 String |\n\n#### Exception Types\n\n| Exception                   | Notes                                            |\n|-----------------------------|--------------------------------------------------|\n| ArgumentOutOfRangeException | Thrown when a passed in argument is invalid      |\n| InvalidOperationException   | Thrown when no elements or no predicate match    |\n\n### Design\n\n#### Binding new APIs to Array Types\nJavaScript doesn't have extension methods like in C#, therefore we extend the class itself with new methods.\nCall ```initializeLinq``` to bind library functions to default Array methods, \n\nThe following collections support ```IEnumerable```,\n* `Array`\n* `Map`\n* `Set`\n* `String`\n* `Int8Array`\n* `Int16Array`\n* `Int32Array`\n* `Uint8Array`\n* `Uint8ClampedArray`\n* `Uint16Array`\n* `Uint32Array`\n* `Float32Array`\n* `Float64Array`\n\n#### Using Wrappers\nNOTE: Wrappers are safer as they won't interfere with other libraries.\n\n```TypeScript\n// To Create an IEnumerable\u003cT\u003e\nimport { from } from \"linq-to-typescript\"\nfrom(iterableIteratorOrArray)\n\n// To Create an IAsyncEnumerable\u003cT\u003e\nimport { fromAsync } from \"linq-to-typescript\"\nfromAsync(asyncIterableIteratorOrPromiseArray)\n\n// To Create an IParallelEnumerable\u003cT\u003e\n// You have to specify the parallel generator function type\nimport { fromParallel, ParallelGeneratorType } from \"linq-to-typescript\"\nfromParallel(ParallelGeneratorType.PromiseToArray, asyncFuncThatReturnsAnArray)\n```\n\n### Issues and Questions\n\n**Q1: How does this compare to other LINQ libraries?**\n\nOther libraries tend to use eager evaluation and work with arrays instead of iterables.\n\n**Q2: Can I use your code?**\n\nWith attribution; the code is licensed under MIT.\n\n**Q3: Why should I use this instead of lodash or something similar?**\n\nThe whole library is written in TypeScript first and avoids typechecking done by TypeScript Language Service.\n\nLazy evaluation. Not much happens until you iterate over the enumerable or conver it to an Array, Map, etc.\n\n**Q4: Is IE11 supported?**\n\nNo.\n\n**Q5: Can I contribute?**\n\nPlease do!","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farogozine%2FLinqToTypeScript","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Farogozine%2FLinqToTypeScript","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farogozine%2FLinqToTypeScript/lists"}