Updated dependencies + A few other things (!150)
Initially this was going to be an update to dependencies but it seems i got a little carried away!
Anyways this PR removes 2 unused dependencies (`jshint` and `utf-8-validate`), and 2 other, `del` and `fs-extra` that were replaced by the built-in `fs/promises`.
It also renames all `tsconfig` and `Dockerfile` files, in a way that when viewed in a file tree sorted alphabetically they will be next to each other.
It also updates the typescript target to `ES2022`, and changes moduleResolution from `Node` to `Node10` (this isn't an update, they are the same thing but `Node` is now deprecated).
It also adds the `node:` discriminator to every import from built-in modules.
It also has major changes to the build script, `del` and `fs-extra` were only being used in the build script, it's now using `fs/promises` instead, cleaned up the code from some functions, adds better documentation to a few functions, and renames some gulp tasks and npm scripts to better represent what they actually do.
And finally it updates dependencies, except for `atomically` which can't be updated unless the project switches to ESM.
Reviewed-on: https://dev.sp-tarkov.com/SPT-AKI/Server/pulls/150
Co-authored-by: TheSparta <thesparta@noreply.dev.sp-tarkov.com>
Co-committed-by: TheSparta <thesparta@noreply.dev.sp-tarkov.com>
2023-10-14 09:01:41 +00:00
|
|
|
import crypto from "node:crypto";
|
2023-03-03 15:23:46 +00:00
|
|
|
import { inject, injectable } from "tsyringe";
|
2023-10-19 17:21:17 +00:00
|
|
|
import { TimeUtil } from "@spt-aki/utils/TimeUtil";
|
|
|
|
|
2023-03-03 15:23:46 +00:00
|
|
|
@injectable()
|
|
|
|
export class ObjectId
|
|
|
|
{
|
2023-11-15 20:35:05 -05:00
|
|
|
constructor(@inject("TimeUtil") protected timeUtil: TimeUtil)
|
|
|
|
{}
|
2023-03-03 15:23:46 +00:00
|
|
|
|
|
|
|
protected randomBytes = crypto.randomBytes(5);
|
|
|
|
protected constglobalCounter = 0;
|
|
|
|
protected consttime = 0;
|
|
|
|
protected globalCounter: number;
|
|
|
|
protected time: number;
|
|
|
|
|
|
|
|
public incGlobalCounter(): number
|
|
|
|
{
|
2024-02-03 01:21:03 -05:00
|
|
|
this.globalCounter = (this.globalCounter + 1) % 0xffffff;
|
|
|
|
return this.globalCounter;
|
2023-03-03 15:23:46 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
public toHexString(byteArray: string | any[] | Buffer): string
|
|
|
|
{
|
|
|
|
let hexString = "";
|
|
|
|
for (let i = 0; i < byteArray.length; i++)
|
|
|
|
{
|
2024-05-07 23:57:08 -04:00
|
|
|
hexString += `0${(byteArray[i] & 0xFF).toString(16)}`.slice(-2);
|
2023-03-03 15:23:46 +00:00
|
|
|
}
|
|
|
|
return hexString;
|
|
|
|
}
|
|
|
|
|
|
|
|
public generate(): string
|
|
|
|
{
|
|
|
|
const time = this.timeUtil.getTimestamp();
|
|
|
|
if (this.time !== time)
|
|
|
|
{
|
|
|
|
this.globalCounter = 0;
|
|
|
|
this.time = time;
|
|
|
|
}
|
|
|
|
const counter = this.incGlobalCounter();
|
|
|
|
const objectIdBinary = Buffer.alloc(12);
|
|
|
|
|
|
|
|
objectIdBinary[3] = time & 0xff;
|
2024-05-07 23:57:08 -04:00
|
|
|
objectIdBinary[2] = time >> 8 & 0xff;
|
|
|
|
objectIdBinary[1] = time >> 16 & 0xff;
|
|
|
|
objectIdBinary[0] = time >> 24 & 0xff;
|
2023-03-03 15:23:46 +00:00
|
|
|
objectIdBinary[4] = this.randomBytes[0];
|
|
|
|
objectIdBinary[5] = this.randomBytes[1];
|
|
|
|
objectIdBinary[6] = this.randomBytes[2];
|
|
|
|
objectIdBinary[7] = this.randomBytes[3];
|
|
|
|
objectIdBinary[8] = this.randomBytes[4];
|
2024-05-07 23:57:08 -04:00
|
|
|
objectIdBinary[9] = counter >> 16 & 0xff;
|
|
|
|
objectIdBinary[10] = counter >> 8 & 0xff;
|
2023-03-03 15:23:46 +00:00
|
|
|
objectIdBinary[11] = counter & 0xff;
|
|
|
|
|
|
|
|
return this.toHexString(objectIdBinary);
|
|
|
|
}
|
2023-11-15 20:35:05 -05:00
|
|
|
}
|