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 +15 -14
- package/dist/simpleflakes.js +2 -90
- package/dist/simpleflakes.js.map +1 -1
- package/package.json +16 -9
package/README.md
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
[](https://github.com/leodutra/simpleflakes)
|
|
12
12
|
[![coveralls status][coveralls-badge]][coveralls-link] [](https://app.fossa.io/projects/git%2Bgithub.com%2Fleodutra%2Fsimpleflakes?ref=badge_shield)
|
|
13
13
|
|
|
14
|
-
> **Fast,
|
|
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)); // "
|
|
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
|
-
|
|
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); // "
|
|
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); // "
|
|
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 |
|
|
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
|
|
package/dist/simpleflakes.js
CHANGED
|
@@ -1,91 +1,3 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
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
|
package/dist/simpleflakes.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
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
|
-
"description": "Fast, and reliable
|
|
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": "
|
|
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 '
|
|
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
|
-
"
|
|
38
|
+
"uuid",
|
|
39
|
+
"sequential",
|
|
40
|
+
"monotonic",
|
|
41
|
+
"ksuid",
|
|
42
|
+
"nanoid",
|
|
37
43
|
"uuidv7",
|
|
38
44
|
"database",
|
|
39
|
-
"
|
|
45
|
+
"distributed",
|
|
40
46
|
"bigint",
|
|
41
|
-
"
|
|
42
|
-
"
|
|
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",
|