@tabsircg/snowflake 1.1.0 → 1.2.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/dist/index.d.ts CHANGED
@@ -11,20 +11,8 @@ export type SnowflakeId<T extends boolean> = T extends true ? string : bigint;
11
11
  * const id = generator(); // 1234567890123456789n
12
12
  * const stringId = generator(true); // "1234567890123456789"
13
13
  */
14
- export declare const createSnowflakeGenerator: <T extends boolean = false>(workerId: number, datacenterId: number, returnAsString?: T) => () => SnowflakeId<T>;
15
- /**
16
- * Generates a Snowflake ID for a specific timestamp (used for cleanup thresholds).
17
- *
18
- * @param timestamp - Unix timestamp in milliseconds
19
- * @param workerId - Worker ID (default: 0 for minimum possible ID)
20
- * @param datacenterId - Datacenter ID (default: 0 for minimum possible ID)
21
- * @param sequence - Sequence number (default: 0 for minimum possible ID)
22
- * @returns Snowflake ID as BigInt
23
- *
24
- * @example
25
- * // Get threshold for deleting records older than 30 days
26
- * const thirtyDaysAgo = Date.now() - (30 * 24 * 60 * 60 * 1000);
27
- * const threshold = generateTimestampSnowflake(thirtyDaysAgo);
28
- */
29
- export declare const generateTimestampSnowflake: (timestamp: number, workerId: number, datacenterId: number, sequence: number) => bigint;
14
+ export declare const createSnowflakeGenerator: <T extends boolean = false>(workerId: number, datacenterId: number, returnAsString?: T) => {
15
+ generateId: () => SnowflakeId<T>;
16
+ generateIdWithTimestamp: (timestamp: number, workerIdOverride?: number, datacenterIdOverride?: number, sequenceOverride?: number) => SnowflakeId<T>;
17
+ };
30
18
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAoBA,MAAM,MAAM,WAAW,CAAC,CAAC,SAAS,OAAO,IAAI,CAAC,SAAS,IAAI,GAAG,MAAM,GAAG,MAAM,CAAC;AAE9E;;;;;;;;;;;GAWG;AAEH,eAAO,MAAM,wBAAwB,GAAI,CAAC,SAAS,OAAO,GAAG,KAAK,EAChE,UAAU,MAAM,EAChB,cAAc,MAAM,EACpB,iBAAiB,CAAC,WAyBP,WAAW,CAAC,CAAC,CA+BzB,CAAC;AAEF;;;;;;;;;;;;;GAaG;AAEH,eAAO,MAAM,0BAA0B,GACrC,WAAW,MAAM,EACjB,UAAU,MAAM,EAChB,cAAc,MAAM,EACpB,UAAU,MAAM,WAUjB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAoBA,MAAM,MAAM,WAAW,CAAC,CAAC,SAAS,OAAO,IAAI,CAAC,SAAS,IAAI,GAAG,MAAM,GAAG,MAAM,CAAC;AAE9E;;;;;;;;;;;GAWG;AAEH,eAAO,MAAM,wBAAwB,GAAI,CAAC,SAAS,OAAO,GAAG,KAAK,EAChE,UAAU,MAAM,EAChB,cAAc,MAAM,EACpB,iBAAiB,CAAC;sBA4CK,WAAW,CAAC,CAAC,CAAC;yCAlBxB,MAAM,qBACE,MAAM,yBACF,MAAM,qBACX,MAAM,KACvB,WAAW,CAAC,CAAC,CAAC;CAkDlB,CAAC"}
package/dist/index.js CHANGED
@@ -45,7 +45,17 @@ export const createSnowflakeGenerator = (workerId, datacenterId, returnAsString)
45
45
  }
46
46
  return timestamp;
47
47
  };
48
- return () => {
48
+ const generateIdWithTimestamp = (timestamp, workerIdOverride, datacenterIdOverride, sequenceOverride = 0) => {
49
+ const finalWorkerId = workerIdOverride ?? workerId;
50
+ const finalDatacenterId = datacenterIdOverride ?? datacenterId;
51
+ const id = (BigInt(timestamp - SNOWFLAKE_EPOCH) <<
52
+ BigInt(SNOWFLAKE_SHIFTS.TIMESTAMP)) +
53
+ (BigInt(finalDatacenterId) << BigInt(SNOWFLAKE_SHIFTS.DATACENTER_ID)) +
54
+ (BigInt(finalWorkerId) << BigInt(SNOWFLAKE_SHIFTS.WORKER_ID)) +
55
+ BigInt(sequenceOverride);
56
+ return (returnAsString ? id.toString() : id);
57
+ };
58
+ const generateId = () => {
49
59
  let timestamp = getCurrentTimestamp();
50
60
  if (timestamp < lastTimestamp) {
51
61
  throw new Error(`Clock moved backwards. Refusing to generate id for ${lastTimestamp - timestamp} milliseconds`);
@@ -67,27 +77,9 @@ export const createSnowflakeGenerator = (workerId, datacenterId, returnAsString)
67
77
  BigInt(sequence);
68
78
  return (returnAsString ? id.toString() : id);
69
79
  };
70
- };
71
- /**
72
- * Generates a Snowflake ID for a specific timestamp (used for cleanup thresholds).
73
- *
74
- * @param timestamp - Unix timestamp in milliseconds
75
- * @param workerId - Worker ID (default: 0 for minimum possible ID)
76
- * @param datacenterId - Datacenter ID (default: 0 for minimum possible ID)
77
- * @param sequence - Sequence number (default: 0 for minimum possible ID)
78
- * @returns Snowflake ID as BigInt
79
- *
80
- * @example
81
- * // Get threshold for deleting records older than 30 days
82
- * const thirtyDaysAgo = Date.now() - (30 * 24 * 60 * 60 * 1000);
83
- * const threshold = generateTimestampSnowflake(thirtyDaysAgo);
84
- */
85
- export const generateTimestampSnowflake = (timestamp, workerId, datacenterId, sequence) => {
86
- const id = (BigInt(timestamp - SNOWFLAKE_EPOCH) <<
87
- BigInt(SNOWFLAKE_SHIFTS.TIMESTAMP)) +
88
- (BigInt(datacenterId) << BigInt(SNOWFLAKE_SHIFTS.DATACENTER_ID)) +
89
- (BigInt(workerId) << BigInt(SNOWFLAKE_SHIFTS.WORKER_ID)) +
90
- BigInt(sequence);
91
- return id;
80
+ return {
81
+ generateId,
82
+ generateIdWithTimestamp,
83
+ };
92
84
  };
93
85
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,MAAM,eAAe,GAAG,aAAa,CAAC;AACtC,MAAM,cAAc,GAAG;IACrB,QAAQ,EAAE,EAAE;IACZ,SAAS,EAAE,CAAC;IACZ,aAAa,EAAE,CAAC;CACR,CAAC;AAEX,MAAM,gBAAgB,GAAG;IACvB,SAAS,EAAE,cAAc,CAAC,QAAQ;IAClC,aAAa,EAAE,cAAc,CAAC,QAAQ,GAAG,cAAc,CAAC,SAAS;IACjE,SAAS,EACP,cAAc,CAAC,QAAQ;QACvB,cAAc,CAAC,SAAS;QACxB,cAAc,CAAC,aAAa;CACtB,CAAC;AAEX,MAAM,eAAe,GAAG;IACtB,QAAQ,EAAE,CAAC,CAAC,IAAI,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC;CACpC,CAAC;AAIX;;;;;;;;;;;GAWG;AAEH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CACtC,QAAgB,EAChB,YAAoB,EACpB,cAAkB,EAClB,EAAE;IACF,MAAM,WAAW,GAAG,CAAC,CAAC,IAAI,cAAc,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IACxD,MAAM,eAAe,GAAG,CAAC,CAAC,IAAI,cAAc,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;IAEhE,IAAI,QAAQ,GAAG,CAAC,IAAI,QAAQ,GAAG,WAAW,EAAE,CAAC;QAC3C,MAAM,IAAI,KAAK,CAAC,mCAAmC,WAAW,EAAE,CAAC,CAAC;IACpE,CAAC;IACD,IAAI,YAAY,GAAG,CAAC,IAAI,YAAY,GAAG,eAAe,EAAE,CAAC;QACvD,MAAM,IAAI,KAAK,CAAC,uCAAuC,eAAe,EAAE,CAAC,CAAC;IAC5E,CAAC;IAED,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,IAAI,aAAa,GAAG,CAAC,CAAC,CAAC;IAEvB,MAAM,mBAAmB,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;IAE7C,MAAM,iBAAiB,GAAG,CAAC,aAAqB,EAAE,EAAE;QAClD,IAAI,SAAS,GAAG,mBAAmB,EAAE,CAAC;QACtC,OAAO,SAAS,IAAI,aAAa,EAAE,CAAC;YAClC,SAAS,GAAG,mBAAmB,EAAE,CAAC;QACpC,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC,CAAC;IAEF,OAAO,GAAmB,EAAE;QAC1B,IAAI,SAAS,GAAG,mBAAmB,EAAE,CAAC;QAEtC,IAAI,SAAS,GAAG,aAAa,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CACb,sDACE,aAAa,GAAG,SAClB,eAAe,CAChB,CAAC;QACJ,CAAC;QAED,IAAI,SAAS,KAAK,aAAa,EAAE,CAAC;YAChC,QAAQ,GAAG,CAAC,QAAQ,GAAG,CAAC,CAAC,GAAG,eAAe,CAAC,QAAQ,CAAC;YAErD,IAAI,QAAQ,KAAK,CAAC,EAAE,CAAC;gBACnB,SAAS,GAAG,iBAAiB,CAAC,aAAa,CAAC,CAAC;YAC/C,CAAC;QACH,CAAC;aAAM,CAAC;YACN,QAAQ,GAAG,CAAC,CAAC;QACf,CAAC;QAED,aAAa,GAAG,SAAS,CAAC;QAE1B,MAAM,EAAE,GACN,CAAC,MAAM,CAAC,SAAS,GAAG,eAAe,CAAC;YAClC,MAAM,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;YACrC,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,MAAM,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC;YAChE,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;YACxD,MAAM,CAAC,QAAQ,CAAC,CAAC;QACnB,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAmB,CAAC;IACjE,CAAC,CAAC;AACJ,CAAC,CAAC;AAEF;;;;;;;;;;;;;GAaG;AAEH,MAAM,CAAC,MAAM,0BAA0B,GAAG,CACxC,SAAiB,EACjB,QAAgB,EAChB,YAAoB,EACpB,QAAgB,EAChB,EAAE;IACF,MAAM,EAAE,GACN,CAAC,MAAM,CAAC,SAAS,GAAG,eAAe,CAAC;QAClC,MAAM,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;QACrC,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,MAAM,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC;QAChE,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;QACxD,MAAM,CAAC,QAAQ,CAAC,CAAC;IAEnB,OAAO,EAAE,CAAC;AACZ,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tabsircg/snowflake",
3
- "version": "1.1.0",
3
+ "version": "1.2.0",
4
4
  "description": "Lightweight Snowflake ID generator for Node.js",
5
5
  "license": "ISC",
6
6
  "author": "Tabsir CG",