simpleflakes 3.0.4 → 3.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -11,7 +11,7 @@
11
11
  [![Last Commit](https://img.shields.io/github/last-commit/leodutra/simpleflakes.svg?style=flat)](https://github.com/leodutra/simpleflakes)
12
12
  [![coveralls status][coveralls-badge]][coveralls-link] [![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fleodutra%2Fsimpleflakes.svg?type=shield)](https://app.fossa.io/projects/git%2Bgithub.com%2Fleodutra%2Fsimpleflakes?ref=badge_shield)
13
13
 
14
- > **Fast, reliable, distributed 64-bit ID generation for Node.js** ⚡
14
+ > **Fast, lightweight, and reliable distributed 64-bit ID generation for Node.js** ⚡
15
15
  > Zero dependencies • TypeScript-ready • 8.8M+ ops/sec performance
16
16
 
17
17
  ## ✨ Features
@@ -57,7 +57,7 @@ console.log(id); // 4234673179811182512n (BigInt)
57
57
  // Convert to different formats
58
58
  console.log(id.toString()); // "4234673179811182512"
59
59
  console.log(id.toString(16)); // "3ac494d21e84f7b0" (hex)
60
- console.log(id.toString(36)); // "20rfh5bt4k0g" (base36 - shortest)
60
+ console.log(id.toString(36)); // "w68acyhy50hc" (base36 - shortest)
61
61
  ```
62
62
 
63
63
  ### TypeScript / ES Modules
@@ -136,7 +136,7 @@ This gives you:
136
136
 
137
137
  ## ⚡ Performance
138
138
 
139
- Simpleflakes is optimized for speed:
139
+ This library is optimized for speed:
140
140
 
141
141
  ```javascript
142
142
  // Benchmark results (operations per second)
@@ -255,7 +255,7 @@ const id = uuidv4(); // "f47ac10b-58cc-4372-a567-0e02b2c3d479"
255
255
 
256
256
  // After (Simpleflake)
257
257
  import { simpleflake } from 'simpleflakes';
258
- const id = simpleflake().toString(36); // "20rfh5bt4k0g" (shorter!)
258
+ const id = simpleflake().toString(36); // "w68acyhy50hc" (shorter!)
259
259
  ```
260
260
 
261
261
  ### From Twitter Snowflake
@@ -286,7 +286,7 @@ const serviceBId = simpleflake(); // Service B
286
286
  ### Short URLs
287
287
  ```javascript
288
288
  // Generate compact URL identifiers
289
- const shortId = simpleflake().toString(36); // "20rfh5bt4k0g"
289
+ const shortId = simpleflake().toString(36); // "w68acyhy50hc"
290
290
  const url = `https://short.ly/${shortId}`;
291
291
  ```
292
292
 
@@ -335,15 +335,16 @@ npm run clean
335
335
 
336
336
  ## 🆚 Comparison
337
337
 
338
- | Feature | Simpleflakes | UUID v4 | Twitter Snowflake |
339
- |---------|-------------|---------|------------------|
340
- | **Size** | 64-bit | 128-bit | 64-bit |
341
- | **Time-ordered** | ✅ Yes | ❌ No | ✅ Yes |
342
- | **Distributed** | ✅ Yes | ✅ Yes | ⚠️ Needs config |
343
- | **Dependencies** | ✅ Zero | ❌ crypto | ❌ System clock |
344
- | **Performance** | 🚀 8.8M/sec | 🐌 ~2M/sec | 🚀 ~10M/sec |
345
- | **URL-friendly** | ✅ Base36 | ❌ Long hex | ✅ Base36 |
346
- | **Database-friendly** | ✅ Integer | ❌ String | ✅ Integer |
338
+ | Feature | Simpleflake | UUID v4 | UUID v7 | Nanoid | KSUID | Twitter Snowflake |
339
+ |---------|-------------|---------|---------|--------|-------|------------------|
340
+ | **Size** | 64-bit | 128-bit | 128-bit | Variable | 160-bit | 64-bit |
341
+ | **Time-ordered** | ✅ Yes | ❌ No | ✅ Yes | ❌ No | ✅ Yes | ✅ Yes |
342
+ | **Distributed** | ✅ Yes | ✅ Yes | ✅ Yes | ✅ Yes | ✅ Yes | ⚠️ Needs config |
343
+ | **Dependencies** | ✅ Zero | ❌ crypto | ❌ crypto | ✅ Zero | ❌ crypto | ❌ System clock |
344
+ | **Performance** | 🚀 8.8M/sec | 🐌 ~2M/sec | 🐌 ~2M/sec | 🚀 ~5M/sec | 🐌 ~1M/sec | 🚀 ~10M/sec |
345
+ | **URL-friendly** | ✅ Base36 | ❌ Long hex | ❌ Long hex | Custom | ✅ Base62 | ✅ Base36 |
346
+ | **Database-friendly** | ✅ Integer | ❌ String | ❌ String | ❌ String | ❌ String | ✅ Integer |
347
+ | **Collision-resistant** | ✅ 8.3M/ms | ✅ ~0 chance | ✅ ~0 chance | ✅ Configurable | ✅ ~0 chance | ✅ 4096/ms |
347
348
 
348
349
  ## 🤝 Contributing
349
350
 
@@ -1,91 +1,3 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.SIMPLEFLAKE_EPOCH = exports.simpleflakeStruct = exports.SimpleFlakeStruct = void 0;
4
- exports.simpleflake = simpleflake;
5
- exports.binary = binary;
6
- exports.extractBits = extractBits;
7
- exports.parseSimpleflake = parseSimpleflake;
8
- const SIMPLEFLAKE_EPOCH = 946684800000; // Date.UTC(2000, 0, 1) == epoch ms, since 1 Jan 2000 00:00
9
- exports.SIMPLEFLAKE_EPOCH = SIMPLEFLAKE_EPOCH;
10
- const UNSIGNED_23BIT_MAX = 8388607; // (Math.pow(2, 23) - 1) >> 0
11
- const SIMPLEFLAKE_TIMESTAMP_LENGTH = 41n;
12
- const SIMPLEFLAKE_RANDOM_LENGTH = 23n;
13
- const SIMPLEFLAKE_RANDOM_SHIFT = 0n;
14
- const SIMPLEFLAKE_TIMESTAMP_SHIFT = 23n;
15
- const CACHE_64_BIT_ZEROS = '0000000000000000000000000000000000000000000000000000000000000000';
16
- /**
17
- * Generates a simpleflake ID
18
- * @param ts - Timestamp in milliseconds (defaults to current time)
19
- * @param randomBits - Random bits for the ID (defaults to a random value)
20
- * @param epoch - Epoch timestamp in milliseconds (defaults to SIMPLEFLAKE_EPOCH)
21
- * @returns Generated simpleflake as a BigInt
22
- */
23
- function simpleflake(ts = Date.now(), randomBits, epoch = SIMPLEFLAKE_EPOCH) {
24
- return ((BigInt(ts) - BigInt(epoch)) << SIMPLEFLAKE_TIMESTAMP_SHIFT) +
25
- BigInt(randomBits ?? Math.round(Math.random() * UNSIGNED_23BIT_MAX));
26
- }
27
- /**
28
- * Converts a value to binary representation
29
- * @param value - The value to convert to binary
30
- * @param padding - Whether to pad to 64 bits (defaults to true)
31
- * @returns Binary string representation
32
- */
33
- function binary(value, padding = true) {
34
- const binValue = BigInt(value).toString(2);
35
- return padding && binValue.length < 64
36
- ? CACHE_64_BIT_ZEROS.substr(0, 64 - binValue.length) + binValue
37
- : binValue;
38
- }
39
- /**
40
- * Extracts bits from a data value
41
- * @param data - The data to extract bits from
42
- * @param shift - Number of bits to shift
43
- * @param length - Number of bits to extract
44
- * @returns Extracted bits as a BigInt
45
- */
46
- function extractBits(data, shift, length) {
47
- const shiftN = BigInt(shift);
48
- const bitmask = ((1n << BigInt(length)) - 1n) << shiftN;
49
- return (BigInt(data) & bitmask) >> shiftN;
50
- }
51
- /**
52
- * Structure representing a parsed simpleflake
53
- */
54
- class SimpleFlakeStruct {
55
- constructor(timestamp, randomBits) {
56
- if (timestamp == null || randomBits == null) {
57
- throw new Error('Missing argument for SimpleFlakeStruct.');
58
- }
59
- this.timestamp = timestamp;
60
- this.randomBits = randomBits;
61
- }
62
- }
63
- exports.SimpleFlakeStruct = SimpleFlakeStruct;
64
- /**
65
- * Parses a simpleflake into its components
66
- * @param flake - The simpleflake to parse
67
- * @returns SimpleFlakeStruct containing timestamp and random bits
68
- */
69
- function parseSimpleflake(flake) {
70
- return new SimpleFlakeStruct(
71
- // timestamp
72
- (extractBits(flake, SIMPLEFLAKE_TIMESTAMP_SHIFT, SIMPLEFLAKE_TIMESTAMP_LENGTH)
73
- + BigInt(SIMPLEFLAKE_EPOCH)).toString(10),
74
- // random bits
75
- extractBits(flake, SIMPLEFLAKE_RANDOM_SHIFT, SIMPLEFLAKE_RANDOM_LENGTH).toString(10));
76
- }
77
- // Legacy function alias for backwards compatibility
78
- exports.simpleflakeStruct = SimpleFlakeStruct;
79
- // Default export for CommonJS compatibility
80
- exports.default = {
81
- // Enhancements
82
- SimpleFlakeStruct: SimpleFlakeStruct,
83
- // original API
84
- simpleflakeStruct: SimpleFlakeStruct,
85
- extractBits: extractBits,
86
- parseSimpleflake: parseSimpleflake,
87
- binary: binary,
88
- SIMPLEFLAKE_EPOCH: SIMPLEFLAKE_EPOCH,
89
- simpleflake: simpleflake
90
- };
1
+ "use strict";function _define_property(t,e,r){return e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}Object.defineProperty(exports,"__esModule",{value:!0}),function(t,e){for(var r in e)Object.defineProperty(t,r,{enumerable:!0,get:Object.getOwnPropertyDescriptor(e,r).get})}(exports,{get SIMPLEFLAKE_EPOCH(){return SIMPLEFLAKE_EPOCH},get SimpleFlakeStruct(){return SimpleFlakeStruct},get binary(){return binary},get default(){return _default},get extractBits(){return extractBits},get parseSimpleflake(){return parseSimpleflake},get simpleflake(){return simpleflake},get simpleflakeStruct(){return simpleflakeStruct}});const SIMPLEFLAKE_EPOCH=9466848e5;function simpleflake(t=Date.now(),e,r=SIMPLEFLAKE_EPOCH){return(BigInt(t)-BigInt(r)<<23n)+BigInt(e??Math.round(8388607*Math.random()))}function binary(t,e=!0){let r=BigInt(t).toString(2);return e&&r.length<64?"0000000000000000000000000000000000000000000000000000000000000000".substr(0,64-r.length)+r:r}function extractBits(t,e,r){let i=BigInt(e),n=(1n<<BigInt(r))-1n<<i;return(BigInt(t)&n)>>i}class SimpleFlakeStruct{constructor(t,e){if(_define_property(this,"timestamp",void 0),_define_property(this,"randomBits",void 0),null==t||null==e)throw Error("Missing argument for SimpleFlakeStruct.");this.timestamp=t,this.randomBits=e}}function parseSimpleflake(t){return new SimpleFlakeStruct((extractBits(t,23n,41n)+BigInt(SIMPLEFLAKE_EPOCH)).toString(10),extractBits(t,0n,23n).toString(10))}const simpleflakeStruct=SimpleFlakeStruct,_default={SimpleFlakeStruct:SimpleFlakeStruct,simpleflakeStruct:SimpleFlakeStruct,extractBits:extractBits,parseSimpleflake:parseSimpleflake,binary:binary,SIMPLEFLAKE_EPOCH:SIMPLEFLAKE_EPOCH,simpleflake:simpleflake};
2
+
91
3
  //# sourceMappingURL=simpleflakes.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"simpleflakes.js","sourceRoot":"","sources":["../src/simpleflakes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"sources":["../src/simpleflakes.ts"],"names":["SIMPLEFLAKE_EPOCH","SimpleFlakeStruct","binary","extractBits","parseSimpleflake","simpleflake","simpleflakeStruct","ts","Date","now","randomBits","epoch","BigInt","Math","round","random","value","padding","binValue","toString","length","CACHE_64_BIT_ZEROS","substr","data","shift","shiftN","bitmask","timestamp","Error","flake"],"mappings":"8UAoFSA,2BAAAA,uBAhCIC,2BAAAA,uBAvBGC,gBAAAA,YA0DhB,iBAAA,cA5CgBC,qBAAAA,iBA2BAC,0BAAAA,sBApDAC,qBAAAA,iBA+DHC,2BAAAA,qBAjFb,MAAMN,kBAAoB,UAkBnB,SAASK,YAAYE,EAAaC,KAAKC,GAAG,EAAE,CAAEC,CAAmB,CAAEC,EAAgBX,iBAAiB,EACzG,MAAO,AAAC,CAAA,AAACY,OAAOL,GAAMK,OAAOD,IAZK,EAAA,AAAG,CAAA,AAY6B,EAChEC,OAAOF,GAAcG,KAAKC,KAAK,CAnBR,AAmBSD,QAAAA,KAAKE,MAAM,IAC/C,CAQO,SAASb,OAAOc,CAA+B,CAAEC,EAAmB,CAAA,CAAI,EAC7E,IAAMC,EAAWN,OAAOI,GAAOG,QAAQ,CAAC,GACxC,OAAOF,GAAWC,EAASE,MAAM,CAAG,GAtBX,AAuBrBC,mEAAmBC,MAAM,CAAC,EAAG,GAAKJ,EAASE,MAAM,EAAIF,EACrDA,CACN,CASO,SAASf,YAAYoB,CAA8B,CAAEC,CAAsB,CAAEJ,CAAuB,EACzG,IAAMK,EAASb,OAAOY,GAChBE,EAAU,AAAE,CAAA,CAAA,AAAE,CAAA,EAAId,OAAOQ,EAAM,EAAK,CAAA,AAAE,CAAA,EAAKK,EACjD,MAAO,AAACb,CAAAA,OAAOW,GAAQG,CAAM,GAAMD,CACrC,CAKO,MAAMxB,kBAIX,YAAY0B,CAAiB,CAAEjB,CAAkB,CAAE,CACjD,GAJF,sBAAgBiB,YAAhB,KAAA,GACA,sBAAgBjB,aAAhB,KAAA,GAGMiB,AAAa,MAAbA,GAAqBjB,AAAc,MAAdA,EACvB,MAAM,AAAIkB,MAAM,0CAElB,CAAA,IAAI,CAACD,SAAS,CAAGA,EACjB,IAAI,CAACjB,UAAU,CAAGA,CACpB,CACF,CAOO,SAASN,iBAAiByB,CAA+B,EAC9D,OAAO,IAAI5B,kBAET,AAACE,CAAAA,YAAY0B,EAlEmB,EAAA,AAAG,CAAA,CAJF,EAAA,AAAG,CAAA,EAuEhCjB,OAAOZ,kBAAiB,EAAGmB,QAAQ,CAAC,IAExChB,YAAY0B,EAtEiB,CAAA,AAAE,CAAA,CAFD,EAAA,AAAG,CAAA,EAwEuCV,QAAQ,CAAC,IAErF,CAGO,MAAMb,kBAAoBL,kBAMjC,SAAe,CAEbA,kBAAmBA,kBAGnBK,kBAAmBL,kBACnBE,YAAaA,YACbC,iBAAkBA,iBAClBF,OAAQA,OACRF,kBAAmBA,kBACnBK,YAAaA,WACf","file":"simpleflakes.js","sourcesContent":["const SIMPLEFLAKE_EPOCH = 946684800000; // Date.UTC(2000, 0, 1) == epoch ms, since 1 Jan 2000 00:00\nconst UNSIGNED_23BIT_MAX = 8388607; // (Math.pow(2, 23) - 1) >> 0\n\nconst SIMPLEFLAKE_TIMESTAMP_LENGTH = 41n;\nconst SIMPLEFLAKE_RANDOM_LENGTH = 23n;\n\nconst SIMPLEFLAKE_RANDOM_SHIFT = 0n;\nconst SIMPLEFLAKE_TIMESTAMP_SHIFT = 23n;\n\nconst CACHE_64_BIT_ZEROS = '0000000000000000000000000000000000000000000000000000000000000000';\n\n/**\n * Generates a simpleflake ID\n * @param ts - Timestamp in milliseconds (defaults to current time)\n * @param randomBits - Random bits for the ID (defaults to a random value)\n * @param epoch - Epoch timestamp in milliseconds (defaults to SIMPLEFLAKE_EPOCH)\n * @returns Generated simpleflake as a BigInt\n */\nexport function simpleflake(ts: number = Date.now(), randomBits?: number, epoch: number = SIMPLEFLAKE_EPOCH): bigint {\n return ((BigInt(ts) - BigInt(epoch)) << SIMPLEFLAKE_TIMESTAMP_SHIFT) +\n BigInt(randomBits ?? Math.round(Math.random() * UNSIGNED_23BIT_MAX));\n}\n\n/**\n * Converts a value to binary representation\n * @param value - The value to convert to binary\n * @param padding - Whether to pad to 64 bits (defaults to true)\n * @returns Binary string representation\n */\nexport function binary(value: bigint | number | string, padding: boolean = true): string {\n const binValue = BigInt(value).toString(2);\n return padding && binValue.length < 64\n ? CACHE_64_BIT_ZEROS.substr(0, 64 - binValue.length) + binValue\n : binValue;\n}\n\n/**\n * Extracts bits from a data value\n * @param data - The data to extract bits from\n * @param shift - Number of bits to shift\n * @param length - Number of bits to extract\n * @returns Extracted bits as a BigInt\n */\nexport function extractBits(data: bigint | number | string, shift: bigint | number, length: bigint | number): bigint {\n const shiftN = BigInt(shift);\n const bitmask = ((1n << BigInt(length)) - 1n) << shiftN;\n return (BigInt(data) & bitmask) >> shiftN;\n}\n\n/**\n * Structure representing a parsed simpleflake\n */\nexport class SimpleFlakeStruct {\n public readonly timestamp: string;\n public readonly randomBits: string;\n\n constructor(timestamp: string, randomBits: string) {\n if (timestamp == null || randomBits == null) {\n throw new Error('Missing argument for SimpleFlakeStruct.');\n }\n this.timestamp = timestamp;\n this.randomBits = randomBits;\n }\n}\n\n/**\n * Parses a simpleflake into its components\n * @param flake - The simpleflake to parse\n * @returns SimpleFlakeStruct containing timestamp and random bits\n */\nexport function parseSimpleflake(flake: bigint | number | string): SimpleFlakeStruct {\n return new SimpleFlakeStruct(\n // timestamp\n (extractBits(flake, SIMPLEFLAKE_TIMESTAMP_SHIFT, SIMPLEFLAKE_TIMESTAMP_LENGTH)\n + BigInt(SIMPLEFLAKE_EPOCH)).toString(10),\n // random bits\n extractBits(flake, SIMPLEFLAKE_RANDOM_SHIFT, SIMPLEFLAKE_RANDOM_LENGTH).toString(10)\n );\n}\n\n// Legacy function alias for backwards compatibility\nexport const simpleflakeStruct = SimpleFlakeStruct;\n\n// Export constants\nexport { SIMPLEFLAKE_EPOCH };\n\n// Default export for CommonJS compatibility\nexport default {\n // Enhancements\n SimpleFlakeStruct: SimpleFlakeStruct,\n\n // original API\n simpleflakeStruct: SimpleFlakeStruct,\n extractBits: extractBits,\n parseSimpleflake: parseSimpleflake,\n binary: binary,\n SIMPLEFLAKE_EPOCH: SIMPLEFLAKE_EPOCH,\n simpleflake: simpleflake\n};\n"]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "simpleflakes",
3
- "version": "3.0.4",
4
- "description": "Fast, and reliable, distributed 64-bit ID generation, in pure JavaScript, for Node.js.",
3
+ "version": "3.1.0",
4
+ "description": "Fast, lightweight, and reliable distributed 64-bit ID generation with zero dependencies for Node.js.",
5
5
  "main": "dist/simpleflakes.js",
6
6
  "types": "dist/simpleflakes.d.ts",
7
7
  "files": [
@@ -10,10 +10,12 @@
10
10
  "LICENSE"
11
11
  ],
12
12
  "scripts": {
13
- "build": "tsc",
13
+ "build": "npm run type-check && npm run build:js && npm run build:dts",
14
+ "build:js": "swc src/simpleflakes.ts -o dist/simpleflakes.js --source-maps",
15
+ "build:dts": "tsc --emitDeclarationOnly",
14
16
  "build:clean": "rimraf dist",
15
17
  "prebuild": "npm run build:clean",
16
- "postbuild": "echo 'TypeScript compilation complete. Output in ./dist/'",
18
+ "postbuild": "echo 'Build complete. Output in ./dist/'",
17
19
  "type-check": "tsc --noEmit",
18
20
  "test": "npm run build && tape tests/**/*.js | faucet",
19
21
  "test:ci": "npm run test:coverage",
@@ -33,14 +35,17 @@
33
35
  "snowflake",
34
36
  "flake",
35
37
  "id",
36
- "uuidv4",
38
+ "uuid",
39
+ "sequential",
40
+ "monotonic",
41
+ "ksuid",
42
+ "nanoid",
37
43
  "uuidv7",
38
44
  "database",
39
- "shards",
45
+ "distributed",
40
46
  "bigint",
41
- "sql",
42
- "nosql",
43
- "partition"
47
+ "time-ordered",
48
+ "typescript"
44
49
  ],
45
50
  "author": {
46
51
  "name": "Leonardo Dutra",
@@ -56,6 +61,8 @@
56
61
  "node": ">=16.0.0"
57
62
  },
58
63
  "devDependencies": {
64
+ "@swc/cli": "^0.7.8",
65
+ "@swc/core": "^1.13.5",
59
66
  "@types/node": "^24.3.1",
60
67
  "benchmark": "^2.1.4",
61
68
  "faucet": "^0.0.4",