- Improved documentation about generator's clock rollback behavior
- Updated dev dependencies
- Refactored default random number generator to defer detection Web Crypto API
until creation of
Scru128Generator
- Fixed wrong test case
Most notably, v3 switches the letter case of generated IDs from uppercase (e.g., "036Z951MHJIKZIK2GSL81GR7L") to lowercase (e.g., "036z951mhjikzik2gsl81gr7l"), though it is technically not supposed to break existing code because SCRU128 is a case-insensitive scheme. Other changes include the removal of deprecated APIs.
- CommonJS entry point
- Deprecated items:
Scru128Generator#generateCore()
Scru128Generator#getLastStatus()
Scru128Id.fromArrayBuffer()
Scru128Id#toArrayBuffer()
node:crypto
-based CSPRNG implementation; now falls back onMath.random()
in Node v14 or older where Web Crypto API is not yet available- Non-ESM browser test runner
- Letter case of generated IDs from uppercase to lowercase
- TypeScript transpilation target from ES2015 to ES2016
- Edge case behavior of generator functions' rollback allowance handling
- Updated dev dependencies
Scru128Id.fromBigInt()
andScru128Id#toBigInt()
- Error messages thrown by
Scru128Id
to improve error reporting
Scru128Id.fromArrayBuffer()
andScru128Id#toArrayBuffer()
- Updated dev dependencies
- Updated dev dependencies
- Tweaked docs and tests
generateOrAbort()
andgenerateOrAbortCore()
toScru128Generator
(formerly named asgenerateNoRewind()
andgenerateCoreNoRewind()
)Scru128Generator#generateOrResetCore()
Scru128Generator#generateCore()
Scru128Generator#getLastStatus()
- Updated TypeScript version to 5.0
generateNoRewind()
andgenerateCoreNoRewind()
toScru128Generator
(experimental)
- Precedence of PRNG selection in Node.js: Web Crypto first if available
- node:crypto > Web Crypto > Math.random -> Web > node > Math
- Improved documentation about generator method flavors
- Updated dev dependencies
Scru128Id#bytes
,Scru128Id.ofInner()
, andScru128Id.fromBytes()
- Updated dev dependencies
- CHANGELOG.md to NPM package
- Adopted
node16
module setting to build CommonJS entry point - Updated dev dependencies
- Iterable and Iterator implementations to
Scru128Generator
to make it work as infinite iterator
- Updated dev dependencies
- Updated dev dependencies
generateCore()
to updatecounter_hi
whentimestamp
passed < 1000
- Updated dev dependencies
generateCore()
to reject zero astimestamp
value
- Updated dev dependencies
generateCore()
andgetLastStatus()
toScru128Generator
- Updated dev dependencies
- Textual representation: 26-digit Base32 -> 25-digit Base36
- Field structure: {
timestamp
: 44 bits,counter
: 28 bits,per_sec_random
: 24 bits,per_gen_random
: 32 bits } -> {timestamp
: 48 bits,counter_hi
: 24 bits,counter_lo
: 24 bits,entropy
: 32 bits } - Timestamp epoch: 2020-01-01 00:00:00.000 UTC -> 1970-01-01 00:00:00.000 UTC
- Counter overflow handling: stall generator -> increment timestamp
- Dual packaging method: CommonJS + ESM wrapper -> native ESM + isolate CommonJS
setLogger()
as counter overflow is no longer likely to occurTIMESTAMP_BIAS
Scru128Id#counter
,Scru128Id#perSecRandom
,Scru128Id#perGenRandom
Scru128Id#counterHi
,Scru128Id#counterLo
,Scru128Id#entropy
- CommonJS entry points
- Updated dev dependencies
- Initial stable release