{"id":13395859,"url":"https://github.com/google/quiver-dart","last_synced_at":"2025-04-23T20:44:42.785Z","repository":{"id":10064694,"uuid":"12117219","full_name":"google/quiver-dart","owner":"google","description":"A set of utility libraries for Dart","archived":false,"fork":false,"pushed_at":"2025-03-02T20:17:22.000Z","size":1370,"stargazers_count":1048,"open_issues_count":54,"forks_count":132,"subscribers_count":33,"default_branch":"master","last_synced_at":"2025-04-19T22:27:35.138Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://pub.dev/packages/quiver","language":"Dart","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/google.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","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":"AUTHORS","dei":null,"publiccode":null,"codemeta":null}},"created_at":"2013-08-14T19:13:01.000Z","updated_at":"2025-04-18T06:37:54.000Z","dependencies_parsed_at":"2023-12-14T22:53:07.803Z","dependency_job_id":"d42b7d16-271d-4db4-bcf0-3234cb2a03ae","html_url":"https://github.com/google/quiver-dart","commit_stats":{"total_commits":658,"total_committers":71,"mean_commits":9.267605633802816,"dds":0.4787234042553191,"last_synced_commit":"58909bdea7ea6bc071e55029c59a89f098c95001"},"previous_names":[],"tags_count":85,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/google%2Fquiver-dart","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/google%2Fquiver-dart/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/google%2Fquiver-dart/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/google%2Fquiver-dart/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/google","download_url":"https://codeload.github.com/google/quiver-dart/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":250172573,"owners_count":21386995,"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-07-30T18:00:34.035Z","updated_at":"2025-04-23T20:44:42.756Z","avatar_url":"https://github.com/google.png","language":"Dart","readme":"A set of utility libraries for Dart that makes using many Dart libraries easier\nand more convenient, or adds additional functionality.\n\n[![Build Status](https://github.com/google/quiver-dart/workflows/Dart%20CI/badge.svg)](https://github.com/google/quiver-dart/actions?query=workflow%3A\"Dart+CI\"+branch%3Amaster)\n[![Coverage Status](https://img.shields.io/coveralls/google/quiver-dart.svg)](https://coveralls.io/r/google/quiver-dart)\n[![Pub](https://img.shields.io/pub/v/quiver.svg)](https://pub.dev/packages/quiver)\n\n## Documentation\n\n[API Docs](https://pub.dev/documentation/quiver/latest/) are available.\n\n## Main Libraries\n\n## [quiver.async][]\n\nUtilities for working with Futures, Streams and async computations.\n\n`collect` collects the completion events of an `Iterable` of `Future`s into a\n`Stream`.\n\n`enumerate` and `concat` represent `Stream` versions of the same-named\n[quiver.iterables][] methods.\n\n`StreamBuffer` allows for the orderly reading of elements from a stream, such as\na socket.\n\n`FutureStream` turns a `Future\u003cStream\u003e` into a `Stream` which emits the same\nevents as the stream returned from the future.\n\n`StreamRouter` splits a Stream into multiple streams based on a set of\npredicates.\n\n`CountdownTimer` is a simple countdown timer that fires events in regular\nincrements.\n\n`Metronome` is a self-correcting alternative to `Timer.periodic`. It provides a\nsimple, tracking periodic stream of `DateTime` events with optional anchor time.\n\n`stringFromByteStream` constructs a string from a stream of byte lists.\n\n[quiver.async]:\n  https://pub.dev/documentation/quiver/latest/quiver.async/quiver.async-library.html\n\n## [quiver.cache][]\n\n`Cache` is a semi-persistent, asynchronously accessed, mapping of keys to\nvalues. Caches are similar to Maps, except that the cache implementation might\nstore values in a remote system, so all operations are asynchronous, and caches\nmight have eviction policies.\n\n`MapCache` is a Cache implementation backed by a Map.\n\n[quiver.cache]:\n  https://pub.dev/documentation/quiver/latest/quiver.cache/quiver.cache-library.html\n\n## [quiver.check][]\n\n`checkArgument` throws `ArgumentError` if the specified argument check\nexpression is false.\n\n`checkListIndex` throws `RangeError` if the specified index is out of bounds.\n\n`checkState` throws `StateError` if the specified state check expression is\nfalse.\n\n[quiver.check]:\n  https://pub.dev/documentation/quiver/latest/quiver.check/quiver.check-library.html\n\n## [quiver.collection][]\n\n`listsEqual`, `mapsEqual` and `setsEqual` check collections for equality.\n\n`indexOf` finds the first index of an item satisfying a predicate.\n\n`LruMap` is a map that removes the least recently used item when a threshold\nlength is exceeded.\n\n`Multimap` is an associative collection that maps keys to collections of values.\n\n`BiMap` is a bidirectional map and provides an inverse view, allowing lookup of\nkey by value.\n\n`TreeSet` is a balanced binary tree that offers a bidirectional iterator, the\nability to iterate from an arbitrary anchor, and 'nearest' search.\n\n[quiver.collection]:\n  https://pub.dev/documentation/quiver/latest/quiver.collection/quiver.collection-library.html\n\n## [quiver.core][]\n\n`Optional` is a way to represent optional values without allowing `null`.\n\n`hashObjects`, `hash2`, `hash3`, and `hash4` generate high-quality hashCodes for\na list of objects, or 2, 3, or 4 arguments respectively.\n\n[quiver.core]:\n  https://pub.dev/documentation/quiver/latest/quiver.core/quiver.core-library.html\n\n## [quiver.iterables][]\n\n`concat`, `count`, `cycle`, `enumerate`, `merge`, `partition`, `range`, and\n`zip` create, transform, or combine Iterables in different ways, similar to\nPython's itertools.\n\n`min`, `max`, and `extent` retrieve the minimum and maximum elements from an\niterable.\n\n`GeneratingIterable` is an easy way to create lazy iterables that produce\nelements by calling a function. A common use-case is to traverse properties in\nan object graph, like the parent relationship in a tree.\n\n`InfiniteIterable` is a base class for Iterables that throws on operations that\nrequire a finite length.\n\n[quiver.iterables]:\n  https://pub.dev/documentation/quiver/latest/quiver.iterables/quiver.iterables-library.html\n\n## [quiver.pattern][]\n\npattern.dart container utilities for work with `Pattern`s and `RegExp`s.\n\n`Glob` implements glob patterns that are commonly used with filesystem paths.\n\n`matchesAny` combines multiple Patterns into one, and allows for exclusions.\n\n`matchesFull` returns true if a Pattern matches an entire String.\n\n`escapeRegex` escapes special regex characters in a String so that it can be\nused as a literal match inside of a RegExp.\n\n[quiver.pattern]:\n  https://pub.dev/documentation/quiver/latest/quiver.pattern/quiver.pattern-library.html\n\n## [quiver.strings][]\n\n`isBlank` checks if a string is `null`, empty or made of whitespace characters.\n\n`isNotBlank` checks if a string is not `null`, and not blank.\n\n`isEmpty` checks if a string is `null` or empty.\n\n`isNotEmpty` checks if a string is not `null` and not empty.\n\n`equalsIgnoreCase` checks if two strings are equal, ignoring case.\n\n`compareIgnoreCase` compares two strings, ignoring case.\n\n`loop` allows you to loop through characters in a string starting and ending at\narbitrary indices. Out of bounds indices allow you to wrap around the string,\nsupporting a number of use-cases, including:\n\n- Rotating: `loop('lohel', -3, 2) =\u003e 'hello'`\n- Repeating, like `String`'s `operator*`, but with better character-level\n  control, e.g.: `loop('la ', 0, 8) =\u003e 'la la la' // no trailing space`\n- Tailing: `loop('/path/to/some/file.txt', -3) =\u003e 'txt'`\n- Reversing: `loop('top', 3, 0) =\u003e 'pot'`\n\n[quiver.strings]:\n  https://pub.dev/documentation/quiver/latest/quiver.strings/quiver.strings-library.html\n\n## [quiver.time][]\n\n`Clock` provides points in time relative to the current point in time, for\nexample: now, 2 days ago, 4 weeks from now, etc. For testability, use Clock\nrather than other ways of accessing time, like `new DateTime()`, so that you can\nuse a fake time function in your tests to control time.\n\n`Now` is a typedef for functions that return the current time in microseconds,\nsince Clock deals in DateTime which only have millisecond accuracy.\n\n`aMicrosecond`, `aMillisecond`, `aSecond`, `aMinute`, `anHour`, `aDay`, and\n`aWeek` are unit duration constants to allow writing for example:\n\n- `aDay` vs. `const Duration(days: 1)`\n- `aSecond * 30` vs. `const Duration(seconds: 30)`\n\n[quiver.time]:\n  https://pub.dev/documentation/quiver/latest/quiver.time/quiver.time-library.html\n\n## Testing Libraries\n\nThe Quiver testing libraries are intended to be used in testing code, not\nproduction code. It currently consists of fake implementations of some Quiver\ninterfaces.\n\n## [quiver.testing.async][]\n\n`FakeAsync` enables testing of units which depend upon timers and microtasks. It\nsupports fake advancements of time and the microtask queue, which cause fake\ntimers and microtasks to be processed. A `Clock` is provided from which to read\nthe current fake time. Faking synchronous or blocking time advancement is also\nsupported.\n\n[quiver.testing.async]:\n  https://pub.dev/documentation/quiver/latest/quiver.testing.async/quiver.testing.async-library.html\n\n## [quiver.testing.equality][]\n\n`areEqualityGroups` is a matcher that supports testing `operator==` and\n`hashCode` implementations.\n\n[quiver.testing.equality]:\n  https://pub.dev/documentation/quiver/latest/quiver.testing.equality/quiver.testing.equality-library.html\n\n## [quiver.testing.time][]\n\n`FakeStopwatch` is a Stopwatch that uses a provided `now()` function to get the\ncurrent time.\n\n[quiver.testing.time]:\n  https://pub.dev/documentation/quiver/latest/quiver.testing.time/quiver.testing.time-library.html\n","funding_links":[],"categories":["Utilities","Dart","公用","Libraries"],"sub_categories":["Utility"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgoogle%2Fquiver-dart","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgoogle%2Fquiver-dart","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgoogle%2Fquiver-dart/lists"}