Spaces:
Runtime error
Runtime error
File size: 6,772 Bytes
311cc15 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 |
'use strict';
var __defProp = Object.defineProperty;
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
var __publicField = (obj, key, value) => {
__defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
return value;
};
// src/lib/Snowflake.ts
var IncrementSymbol = Symbol("@sapphire/snowflake.increment");
var EpochSymbol = Symbol("@sapphire/snowflake.epoch");
var ProcessIdSymbol = Symbol("@sapphire/snowflake.processId");
var WorkerIdSymbol = Symbol("@sapphire/snowflake.workerId");
var MaximumWorkerId = 0b11111n;
var MaximumProcessId = 0b11111n;
var MaximumIncrement = 0b111111111111n;
var _a, _b, _c, _d;
var Snowflake = class {
/**
* @param epoch the epoch to use
*/
constructor(epoch) {
/**
* Alias for {@link deconstruct}
*/
// eslint-disable-next-line @typescript-eslint/unbound-method
__publicField(this, "decode", this.deconstruct);
/**
* Internal reference of the epoch passed in the constructor
* @internal
*/
__publicField(this, _a);
/**
* Internal incrementor for generating snowflakes
* @internal
*/
__publicField(this, _b, 0n);
/**
* The process ID that will be used by default in the generate method
* @internal
*/
__publicField(this, _c, 1n);
/**
* The worker ID that will be used by default in the generate method
* @internal
*/
__publicField(this, _d, 0n);
this[EpochSymbol] = BigInt(epoch instanceof Date ? epoch.getTime() : epoch);
}
/**
* The epoch for this snowflake
*/
get epoch() {
return this[EpochSymbol];
}
/**
* Gets the configured process ID
*/
get processId() {
return this[ProcessIdSymbol];
}
/**
* Sets the process ID that will be used by default for the {@link generate} method
* @param value The new value, will be coerced to BigInt and masked with `0b11111n`
*/
set processId(value) {
this[ProcessIdSymbol] = BigInt(value) & MaximumProcessId;
}
/**
* Gets the configured worker ID
*/
get workerId() {
return this[WorkerIdSymbol];
}
/**
* Sets the worker ID that will be used by default for the {@link generate} method
* @param value The new value, will be coerced to BigInt and masked with `0b11111n`
*/
set workerId(value) {
this[WorkerIdSymbol] = BigInt(value) & MaximumWorkerId;
}
/**
* Generates a snowflake given an epoch and optionally a timestamp
* @param options options to pass into the generator, see {@link SnowflakeGenerateOptions}
*
* **note** when `increment` is not provided it defaults to the private `increment` of the instance
* @example
* ```typescript
* const epoch = new Date('2000-01-01T00:00:00.000Z');
* const snowflake = new Snowflake(epoch).generate();
* ```
* @returns A unique snowflake
*/
generate({
increment,
timestamp = Date.now(),
workerId = this[WorkerIdSymbol],
processId = this[ProcessIdSymbol]
} = {}) {
if (timestamp instanceof Date)
timestamp = BigInt(timestamp.getTime());
else if (typeof timestamp === "number")
timestamp = BigInt(timestamp);
else if (typeof timestamp !== "bigint") {
throw new TypeError(`"timestamp" argument must be a number, bigint, or Date (received ${typeof timestamp})`);
}
if (typeof increment !== "bigint") {
increment = this[IncrementSymbol];
this[IncrementSymbol] = increment + 1n & MaximumIncrement;
}
return timestamp - this[EpochSymbol] << 22n | (workerId & MaximumWorkerId) << 17n | (processId & MaximumProcessId) << 12n | increment & MaximumIncrement;
}
/**
* Deconstructs a snowflake given a snowflake ID
* @param id the snowflake to deconstruct
* @returns a deconstructed snowflake
* @example
* ```typescript
* const epoch = new Date('2000-01-01T00:00:00.000Z');
* const snowflake = new Snowflake(epoch).deconstruct('3971046231244935168');
* ```
*/
deconstruct(id) {
const bigIntId = BigInt(id);
const epoch = this[EpochSymbol];
return {
id: bigIntId,
timestamp: (bigIntId >> 22n) + epoch,
workerId: bigIntId >> 17n & MaximumWorkerId,
processId: bigIntId >> 12n & MaximumProcessId,
increment: bigIntId & MaximumIncrement,
epoch
};
}
/**
* Retrieves the timestamp field's value from a snowflake.
* @param id The snowflake to get the timestamp value from.
* @returns The UNIX timestamp that is stored in `id`.
*/
timestampFrom(id) {
return Number((BigInt(id) >> 22n) + this[EpochSymbol]);
}
/**
* Returns a number indicating whether a reference snowflake comes before, or after, or is same as the given
* snowflake in sort order.
* @param a The first snowflake to compare.
* @param b The second snowflake to compare.
* @returns `-1` if `a` is older than `b`, `0` if `a` and `b` are equals, `1` if `a` is newer than `b`.
* @example Sort snowflakes in ascending order
* ```typescript
* const ids = ['737141877803057244', '1056191128120082432', '254360814063058944'];
* console.log(ids.sort((a, b) => Snowflake.compare(a, b)));
* // β ['254360814063058944', '737141877803057244', '1056191128120082432'];
* ```
* @example Sort snowflakes in descending order
* ```typescript
* const ids = ['737141877803057244', '1056191128120082432', '254360814063058944'];
* console.log(ids.sort((a, b) => -Snowflake.compare(a, b)));
* // β ['1056191128120082432', '737141877803057244', '254360814063058944'];
* ```
*/
static compare(a, b) {
const typeA = typeof a;
return typeA === typeof b ? typeA === "string" ? cmpString(a, b) : cmpBigInt(a, b) : cmpBigInt(BigInt(a), BigInt(b));
}
};
__name(Snowflake, "Snowflake");
_a = EpochSymbol, _b = IncrementSymbol, _c = ProcessIdSymbol, _d = WorkerIdSymbol;
function cmpBigInt(a, b) {
return a === b ? 0 : a < b ? -1 : 1;
}
__name(cmpBigInt, "cmpBigInt");
function cmpString(a, b) {
return a === b ? 0 : a.length < b.length ? -1 : a.length > b.length ? 1 : a < b ? -1 : 1;
}
__name(cmpString, "cmpString");
// src/lib/DiscordSnowflake.ts
var DiscordSnowflake = new Snowflake(1420070400000n);
// src/lib/TwitterSnowflake.ts
var TwitterSnowflake = new Snowflake(1288834974657n);
exports.DiscordSnowflake = DiscordSnowflake;
exports.MaximumIncrement = MaximumIncrement;
exports.MaximumProcessId = MaximumProcessId;
exports.MaximumWorkerId = MaximumWorkerId;
exports.Snowflake = Snowflake;
exports.TwitterSnowflake = TwitterSnowflake;
//# sourceMappingURL=out.js.map
//# sourceMappingURL=index.js.map |