Viewing version 3.0.0-nullsafety.0. Open the latest package page.
uuid
3.0.0-nullsafety.0RFC4122 (v1, v4, v5) UUID Generator and Parser for all Dart platforms (Web, VM, Flutter)
Readme
Build Status
uuid
Simple, fast generation of RFC4122 UUIDs.
Features:
- Generate RFC4122 version 1, version 4, or version 5 UUIDs
- Runs in web, server, and flutter
- Cryptographically strong random number generation on all platforms
- Defaults to non-crypto generator, see UuidUtil for cryptoRNG
- Documentation
Getting Started
Instructions
- Open a command line and cd to your projects root folder
- In your pubspec, add an entry for dart-uuid to your dependencies (example below)
- pub install
- If you wish to run tests, go into packages/dart-uuid/ and run 'dart test/uuid_test.dart'
Pubspec
There are 2 options. Directly from git, or from pub.dartlang.org
pub.dartlang.org: (you can use 'any' instead of a version if you just want the latest always)
dependencies:
uuid: 3.0.0-nullsafety.0
import 'package:uuid/uuid.dart';
var uuid = Uuid();
Then create some ids ...
// Generate a v1 (time-based) id
uuid.v1(); // -> '6c84fb90-12c4-11e1-840d-7b25c5ee775a'
// Generate a v4 (random) id
uuid.v4(); // -> '110ec58a-a0f2-4ac4-8393-c866d813b8d1'
// Generate a v5 (namespace-name-sha1-based) id
uuid.v5(Uuid.NAMESPACE_URL, 'www.google.com'); // -> 'c74a196f-f19d-5ea9-bffd-a2742432fc9c'
API
Uuid({Map<String, dynamic> options: null}) -> Uuid (Constructor)
Constructor supports setting some global RNG sertings so you don't have to specify them on each function call for v4 or v5
-
options- (Map<String, dynamic>) Optional uuid state to apply. Properties may include:grng- (Function) Random # generator to use as a global rng function. A Custom function that returns an list[16] of byte values or 1 of 2 provided.gNamedArgs- (Map<Symbol, dynamic>) The arguments and values you want to pass to your global rng function.gPositionalArgs- (List) The positional arguments for your global rng functions, if any.v1rng- (Function) Random # generator to use as a rng function for v1 seed. A Custom function that returns an list[16] of byte values or 1 of 2 provided.v1rngNamedArgs- (Map<Symbol, dynamic>) The arguments and values you want to pass to your v1 rng function.v1rngPositionalArgs- (List) The positional arguments for your v1 rng functions, if any.
Defaults are Uuid.mathRNG
Example: Using CryptoRNG globally
var uuid = new Uuid(options: {
'grng': UuidUtil.cryptoRNG
})
// Generate a v4 (random) id that will use cryptRNG for its rng function
uuid.v4();
uuid.v1({Map<String, dynamic> options: null) -> String
uuid.v1buffer(List buffer, {Map<String, dynamic> options: null, int offset: 0}) -> List
Generate and return a RFC4122 v1 (timestamp-based) UUID.
-
options- (Map<String, dynamic>) Optional uuid state to apply. Properties may include:node- (List) Node id as List of 6 bytes (per 4.1.6). Default: Randomnly generated ID.clockseq- (Number between 0 - 0x3fff) RFC clock sequence. Default: An internally maintained clockseq is used.msecs- (Number) Time in milliseconds since unix Epoch. Default: The current time is used.nsecs- (Number between 0-9999) additional time, in 100-nanosecond units. Ignored ifmsecsis unspecified. Default: internal uuid counter is used, as per 4.2.1.2.
-
buffer- (List) Array or buffer where UUID bytes are to be written. -
offset- (Int) Starting index inbufferat which to begin writing.
v1() returns a string representation of the uuid.
v1buffer() Returns a List buffer, if specified, also writes the data to the provided buffer.
Example: Generate string UUID with fully-specified options
uuid.v1(options: {
'node': [0x01, 0x23, 0x45, 0x67, 0x89, 0xab],
'clockSeq': 0x1234,
'mSecs': new DateTime.utc(2011,11,01).millisecondsSinceEpoch,
'nSecs': 5678
}) // -> "710b962e-041c-11e1-9234-0123456789ab"
Example: In-place generation of two binary IDs
// Generate two ids in an array
var myBuffer = new List(32); // -> []
uuid.v1buffer(myBuffer);
// -> [115, 189, 5, 128, 201, 91, 17, 225, 146, 52, 109, 0, 9, 0, 52, 128, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null]
uuid.v1buffer(myBuffer, offset: 16);
// -> [115, 189, 5, 128, 201, 91, 17, 225, 146, 52, 109, 0, 9, 0, 52, 128, 115, 189, 5, 129, 201, 91, 17, 225, 146, 52, 109, 0, 9, 0, 52, 128]
// Optionally use uuid.unparse() to get stringify the ids
uuid.unparse(myBuffer); // -> '73bd0580-c95b-11e1-9234-6d0009003480'
uuid.unparse(myBuffer, offset: 16) // -> '73bd0581-c95b-11e1-9234-6d0009003480'
uuid.v4({Map<String, dynamic> options: null})
uuid.v4buffer(List buffer, {Map<String, dynamic> options: null, int offset: 0})
Generate and return a RFC4122 v4 UUID.
-
options- (Map<String, dynamic>) Optional uuid state to apply. Properties may include:random- (Number[16]) List of 16 numbers (0-255) to use in place of randomly generated valuesrng- (Function) Random # generator to use. A Custom function that returns an list[16] of byte values or 1 of 2 provided.namedArgs- (Map<Symbol, dynamic>) The arguments and values you want to pass to your function.positionalArgs- (List) The positional arguments for your functions. if any.
-
buffer- (List) Array or buffer where UUID bytes are to be written. -
offset- (Number) Starting index inbufferat which to begin writing.
v4() returns a string representation of the uuid.
v4buffer() Returns a List buffer, if specified, also writes the data to the provided buffer.
Example: Generate string UUID with different RNG method
import 'package:uuid/uuid_util.dart';
uuid.v4(options: {
'rng': UuidUtil.cryptoRNG
});
// -> "109156be-c4fb-41ea-b1b4-efe1671c5836"
Example: Generate string UUID with different RNG method and named parameters
import 'package:uuid/uuid_util.dart';
uuid.v4(options: {
'rng': UuidUtil.mathRNG,
'namedArgs': new Map.fromIterables([const Symbol('seed')],[1])
});
// -> "09a91894-e93f-4141-a3ec-82eb32f2a3ef"
Example: Generate string UUID with different RNG method and positional parameters
import 'package:uuid/uuid_util.dart';
uuid.v4(options: {
'rng': UuidUtil.cryptoRNG,
'positionalArgs': [1]
});
// -> "09a91894-e93f-4141-a3ec-82eb32f2a3ef"
Example: Generate string UUID with fully-specified options
uuid.v4(options: {
'random': [
0x10, 0x91, 0x56, 0xbe, 0xc4, 0xfb, 0xc1, 0xea,
0x71, 0xb4, 0xef, 0xe1, 0x67, 0x1c, 0x58, 0x36
]
});
// -> "109156be-c4fb-41ea-b1b4-efe1671c5836"
Example: Generate two IDs in a single buffer
var myBuffer = new List(32);
uuid.v4buffer(myBuffer);
uuid.v4buffer(myBuffer, offset: 16);
uuid.v5(String namespace, String name, {Map<String, dynamic> options: null})
uuid.v5buffer(String namespace, String name, List buffer, {Map<String, dynamic> options: null, int offset: 0})
Generate and return a RFC4122 v5 UUID.
-
options- (Map<String, dynamic>) Optional uuid state to apply. Properties may include:randomNamespace- (Boolean) Default True. Returns if you want a v4 generated namespace (true) or NAMESPACE_NIL (false)
-
buffer- (List) Array or buffer where UUID bytes are to be written. -
offset- (Number) Starting index inbufferat which to begin writing.
v5() returns a string representation of the uuid.
v5buffer() Returns a List buffer, if specified, also writes the data to the provided buffer.
Example: Generate string UUID with fully-specified options
uuid.v5(Uuid.NAMESPACE_URL, 'www.google.com');
// -> "c74a196f-f19d-5ea9-bffd-a2742432fc9c"
Example: Generate two IDs in a single buffer
var myBuffer = new List(32);
uuid.v5buffer(Uuid.NAMESPACE_URL, 'www.google.com', myBuffer);
uuid.v5buffer(Uuid.NAMESPACE_URL, 'www.google.com', myBuffer, offset: 16);
uuid.parse(String uuid, {List buffer: null, int offset: 0})
uuid.unparse(List buffer, {int offset: 0})
Parse and unparse UUIDs
id- (String) UUID(-like) stringbuffer- (List) Array or buffer where UUID bytes are to be written. Default: A new Array or Buffer is usedoffset- (Int | Number) Starting index inbufferat which to begin writing. Default: 0
Example parsing and unparsing a UUID string
var bytes = uuid.parse('797ff043-11eb-11e1-80d6-510998755d10'); // -> [121, 127, 240, 67, 17, 235, 17, 225, 128, 214, 81, 9, 152, 117, 93, 16]
var string = uuid.unparse(bytes); // -> '797ff043-11eb-11e1-80d6-510998755d10'
For more examples or usage, check my test implementations.
Testing
In dartvm
dart test\uuid_test.dart
In Browser/flutter
No in browser testing, but I know many use it in Web and Flutter projects.
Dart2js output size (minified, optimized with -O2)
-
v1 only: 56kb
-
v4 only: 54kb
-
v4 crypto only: 55kb
-
v5 only: 67kb
-
v1 + v4: 59kb (includes crypto)
-
v4 + v5: 68kb (includes crypto)
-
ALL: 72kb
-
v1 + v5: 70kb
Release notes
See CHANGELOG
Changelog
v3.0.0-nullsafety.0
- Migrate package to null-safety, increase minimum SDK version to 2.12 (Thanks @simolus3)
v2.2.1 & v2.2.2
- Update pedantic analyzer options, fix linting issues, and increase SDK minimium to 2.2 to support set literals
v2.2.0
- fix v1 clock high to properly ignore c and d variants. (fixes #47)
- update example
v2.1.0
- Shuffle mathRNG bytes so that they don't generate duplicates. Will affect codes generated by a static seed.
v2.0.4
- Remove new keyword where not needed. (forgot to rerun before releasing 2.0.3)
v2.0.3
- Do some analyzer fixes and formatting/renaming.
v2.0.2
- Merge fix for time precision loss in V1 time based UUIDs.
v2.0.1
- Fix regression where CryptoRNG was default, moved back to MathRNG
- Added ability to set RNG globally to skip having to set it in every function call
- Allows you to set the v1 clock sequence, nodeID, and seed bytes to use cryptoRNG separately from globalRNG.
v2.0.0
- Fixup the API to split out Buffer and Non-buffer usages.
- Switch to build in Random.secure() and remove custom AES implementation.
- Less dependencies.
- Docs
- Cleanup
v1.0.3
- Fix SDK constraints to allow Dart 2.0 stable.
v1.0.2
- Fix constants breaking in Dart 1.x, need to be backwards compatible.
v1.0.1
- Fix constants to match Dart 2.0 spec
v1.0.0
- Cleanup and prep for dart 2.0
- Has been stable for a long time, upgrading to 1.0 version
v0.5.3
- Merged pull request to support crypto 2.0.0
- Support convert 2.0.0
v0.5.2
- Merged pull request to upgrade crypto library to 1.0.0.
v0.5.1
- Merged pull request for various updates and cleanup.
v0.5.0
- Reverted back to custom AES implementation. Moved RNG methods to UuidUtil (import 'package:uuid/uuid_util.dart')
- Fixed a potential bug with custom RNG method passing and added more ways to pass in custom RNG functions.
- Cleaned up and refactored some stuff. Using only v1 is only 67kb of js, Using only v4 is 97kb. Using crypt v4 is 118kb. Using both v1 and non-crypto v4 is 126kb.
- Default RNG for v4 is now the mathRNG function. If you wish to use cryptoRNG, import UuidUtil and pass in cryptoRNG.
- Updated README.md with more examples and usages.
- Updated Tests.
v0.4.1
- Changed initCipher location so that if you ever only use v1 UUIDs, you will get a very small Dart2JS output compared to v4 or v5 that do load it.
v0.4.0
- Use Cipher base.dart, as I don't need entropy generators, and this allows me to merge client/server together again and fix many issues this caused.
v0.3.2
- Fix import/library bug.
v0.3.1
- Update pubspec to allow installation of the latest Cipher 0.7.
v0.3.0
- Updated to latest Cipher at 0.6.0. This created a breaking change in the imports. Please make sure you update your code.
- Fixed problem when creating v4 UUIDs too fast, it would create duplicate UUIDs.
v0.2.2
- Pegging cipher to 0.4.0 temporarily for browser support
v0.2.1
- Using new version of cipher.
v0.2.0
- Dart 1.0 Readiness
- Switched from custom AES to cipher package AES.
v0.1.6
- Adjusting usage of constants.
- Fixing tests.
v0.1.5
- Stupid typo on import.
v0.1.4
- Fixing Crypto package move.
v0.1.3
- Fixing language changes.
v0.1.2
- Fix change of charCodes to codeUnits
v0.1.1
- Fixing syntax for upcoming breaking changes.
v0.1.0
- Cleanup, changes, and prep for M3.
v0.0.9
- Minor fix with a const RegExp
- Made sure everything builds on latest dart.
- Fixed pubspec to now import unittest from pub instead of sdk.
v0.0.8
- Changed to the new optional paramater syntaxes and usages.
- Adjusted tests for the new function call style due to parameter change.
- Fixed Import/Source/Library statements to the new format.
v0.0.7
- Made changes requested by the Google team to get my package up on pub.dartlang.org
v0.0.6
- Fixed up some code to make it possibly faster and using better Dart practices.
- Cleaned up some documentation.
v0.0.5
- Added Initial AES for Dart (untested if it actually works/matches other AES encryptors)
- Use AES cipher to create crypto strong bytes.
v0.0.4
- Issue wasn't Math.Random() but a bad reseed by me.
- Cleaned up for new Pub layout.
v0.0.3
- Added UUIDv5
- Fixed UUIDv4 bugs
- Added more unit tests
- Found bug in dart's Math.Random(), reported, waiting for fix to fix my code.
v0.0.2
- Initial tests
- Fixed some parser bugs.
v0.0.1
- Initial Release
- No tests
Installing
export PUB_HOSTED_URL=https://pub.mirror.p-hatan.ir
flutter pub add 'uuid:3.0.0-nullsafety.0'pubspec.yaml
name: uuid
version: 3.0.0-nullsafety.0
description: >
RFC4122 (v1, v4, v5) UUID Generator and Parser for all Dart platforms (Web, VM, Flutter)
homepage: https://github.com/Daegalus/dart-uuid
environment:
sdk: ">=2.12.0-0 <3.0.0"
dependencies:
crypto: "^3.0.0-nullsafety.0"
Version history
| Version | Published | Archive | SHA-256 |
|---|---|---|---|
| 0.0.6 | Cached · Upstream SHA-256 matched | Download | d27bb6c0…be6d19 |
| 0.0.7 | Cached · Upstream SHA-256 matched | Download | d5825879…e2df2c |
| 0.0.8 | Cached · Upstream SHA-256 matched | Download | 1a476151…e5f25f |
| 0.0.9 | Cached · Upstream SHA-256 matched | Download | 52a46f15…8de3e9 |
| 0.1.0 | Cached · Upstream SHA-256 matched | Download | b584cb32…c9072b |
| 0.1.1 | Cached · Upstream SHA-256 matched | Download | 32467249…f32c88 |
| 0.1.2 | Cached · Upstream SHA-256 matched | Download | 955a0b19…66d502 |
| 0.1.3 | Cached · Upstream SHA-256 matched | Download | 2ba86667…c61076 |
| 0.1.4 | Cached · Upstream SHA-256 matched | Download | db2564b6…bfc740 |
| 0.1.5 | Cached · Upstream SHA-256 matched | Download | 2f47eaa3…17a80e |
| 0.1.6 | Cached · Upstream SHA-256 matched | Download | b5fb17f2…d01e46 |
| 0.2.0 | Cached · Upstream SHA-256 matched | Download | 930a60d0…c344a4 |
| 0.2.1 | Cached · Upstream SHA-256 matched | Download | 2099b36e…cc6c06 |
| 0.2.2 | Cached · Upstream SHA-256 matched | Download | 5e639255…c44715 |
| 0.3.0 | Cached · Upstream SHA-256 matched | Download | 601c357d…7d5bcf |
| 0.3.1 | Cached · Upstream SHA-256 matched | Download | a6a21f04…6c0928 |
| 0.3.2 | Cached · Upstream SHA-256 matched | Download | 6833ce79…b17506 |
| 0.4.0 | Cached · Upstream SHA-256 matched | Download | f2438445…fc605a |
| 0.4.1 | Cached · Upstream SHA-256 matched | Download | ec889bc5…016f1d |
| 0.5.0 | Cached · Upstream SHA-256 matched | Download | 182e0f47…ec1565 |
| 0.5.1 | Cached · Upstream SHA-256 matched | Download | 07fee225…724990 |
| 0.5.2 | Cached · Upstream SHA-256 matched | Download | fdf930c6…674cc4 |
| 0.5.3 | Cached · Upstream SHA-256 matched | Download | 5ee46227…73d3f8 |
| 1.0.0 | Cached · Upstream SHA-256 matched | Download | 1524595b…cb95f9 |
| 1.0.1 | Cached · Upstream SHA-256 matched | Download | 9d076ca7…b9ae9f |
| 1.0.2 | Cached · Upstream SHA-256 matched | Download | a7605e1c…f1754e |
| 1.0.3 | Cached · Upstream SHA-256 matched | Download | 1b9363b6…11d1e2 |
| 2.0.0-rc1 | Cached · Upstream SHA-256 matched | Download | fae79d68…a80336 |
| 2.0.0 | Cached · Upstream SHA-256 matched | Download | 4930c7aa…5b3caa |
| 2.0.1 | Cached · Upstream SHA-256 matched | Download | 78a84f69…6c78f0 |
| 2.0.2 | Cached · Upstream SHA-256 matched | Download | 9007ebb8…a18370 |
| 2.0.3 | Cached · Upstream SHA-256 matched | Download | fe6702d3…31c8d8 |
| 2.0.4 | Cached · Upstream SHA-256 matched | Download | 4c4896fe…77d56e |
| 2.1.0 | Cached · Upstream SHA-256 matched | Download | 9f6a5645…064312 |
| 2.2.0 | Cached · Upstream SHA-256 matched | Download | 467d0a24…9a9e99 |
| 2.2.1 | Cached · Upstream SHA-256 matched | Download | bedb244e…9fd2fd |
| 2.2.2 | Cached · Upstream SHA-256 matched | Download | bd96a5d8…6d81b0 |
| 3.0.0-nullsafety.0 | Cached · Upstream SHA-256 matched | Download | c0a46930…20b156 |
| 3.0.0-nullsafety.1 | Cached · Upstream SHA-256 matched | Download | 68dff0a6…8b2540 |
| 3.0.0 | Cached · Upstream SHA-256 matched | Download | 9947b48c…a62ac6 |
| 3.0.1 | Cached · Upstream SHA-256 matched | Download | 29aa6310…e99d50 |
| 3.0.2 | Cached · Upstream SHA-256 matched | Download | e89f208c…1d2ccb |
| 3.0.3 | Cached · Upstream SHA-256 matched | Download | 4fe24cb4…6a566a |
| 3.0.4 | Cached · Upstream SHA-256 matched | Download | 0ea20bfc…ca3758 |
| 3.0.5 | Cached · Upstream SHA-256 matched | Download | 00ba1241…fc7714 |
| 3.0.6 | Cached · Upstream SHA-256 matched | Download | 2469694a…9a8afc |
| 3.0.7 | Cached · Upstream SHA-256 matched | Download | 648e1030…519313 |
| 4.0.0-beta1 | Cached · Upstream SHA-256 matched | Download | 20e95d65…17cde3 |
| 4.0.0-beta1-1 | Cached · Upstream SHA-256 matched | Download | e3cfb7bf…a6159f |
| 4.0.0-beta2 | Cached · Upstream SHA-256 matched | Download | 12bf9edc…bcd470 |
| 4.0.0-beta3 | Cached · Upstream SHA-256 matched | Download | 3b261f49…1ee4c0 |
| 4.0.0-beta3-1 | Cached · Upstream SHA-256 matched | Download | 2dd495c0…7bd8db |
| 4.0.0 | Cached · Upstream SHA-256 matched | Download | e0392888…3c3134 |
| 4.1.0 | Cached · Upstream SHA-256 matched | Download | b715b8d3…4af2a7 |
| 4.2.0 | Cached · Upstream SHA-256 matched | Download | 49ea0b5f…a2337b |
| 4.2.1 | Cached · Upstream SHA-256 matched | Download | df5a4d8f…889921 |
| 4.2.2 | Cached · Upstream SHA-256 matched | Download | 22c94e5a…82127f |
| 4.3.0 | Cached · Upstream SHA-256 matched | Download | 505d0e80…26e5b8 |
| 4.3.1 | Cached · Upstream SHA-256 matched | Download | bb55f389…1f36bc |
| 4.3.2 | Cached · Upstream SHA-256 matched | Download | 8c951c9c…3d4d77 |
| 4.3.3 | Cached · Upstream SHA-256 matched | Download | cd210a09…aa81c8 |
| 4.4.0 | Cached · Upstream SHA-256 matched | Download | 814e9e88…fd1ba8 |
| 4.4.1 | Cached · Upstream SHA-256 matched | Download | b3e1cb24…50f3fa |
| 4.4.2 | Cached · Upstream SHA-256 matched | Download | 83d37c7a…ffaa90 |
| 4.5.0 | Cached · Upstream SHA-256 matched | Download | f33d6bb6…576a77 |
| 4.5.1 | Cached · Upstream SHA-256 matched | Download | a5be9ef6…1690ff |
| 4.5.2 | Cached · Upstream SHA-256 matched | Download | a11b6664…6f96e8 |
| 4.5.3 | Cached · Upstream SHA-256 matched | Download | 1fef9e8e…a79489 |
| 4.6.0 | Cached · Upstream SHA-256 matched | Download | 9b129329…d01dcd |
Dependencies
crypto "^3.0.0-nullsafety.0"