UNPKG

@neuledge/id

Version:

Globally unique identifier based on the upcoming UUIDv7 standard.

1 lines 2.94 kB
{"version":3,"sources":["../src/id.ts"],"sourcesContent":["import { TypeID, typeid } from 'typeid-js';\n\nexport type IdType<Prefix extends string> = `${Prefix}_${string}`;\n\nexport class Id<Prefix extends string> {\n public readonly type: IdType<Prefix>;\n\n constructor(public readonly prefix: Prefix) {\n this.type = `${this.prefix}_`;\n }\n\n generate(): IdType<Prefix> {\n return typeid(this.prefix).toString() as IdType<Prefix>;\n }\n\n is(id: unknown): id is IdType<Prefix> {\n if (typeof id !== 'string') {\n return false;\n }\n\n try {\n const typeId = TypeID.fromString(id);\n return typeId.getType() === this.prefix;\n } catch {\n return false;\n }\n }\n\n /**\n * @deprecated Use `is` instead\n */\n isValid(id: unknown): boolean {\n return this.is(id);\n }\n\n // TypeID\n\n getTypeId(id: IdType<Prefix>): TypeID<Prefix> {\n const typeId = TypeID.fromString(id);\n\n if (typeId.getType() !== this.prefix) {\n throw new Error(`Invalid id type: ${id}`);\n }\n\n return typeId as TypeID<Prefix>;\n }\n\n // Suffix\n\n getSuffix(id: IdType<Prefix>): string {\n return this.getTypeId(id).getSuffix();\n }\n\n fromSuffix(suffix: string): IdType<Prefix> {\n return typeid(this.prefix, suffix).toString() as IdType<Prefix>;\n }\n\n // UUID\n\n getUUID(id: IdType<Prefix>): string {\n return this.getTypeId(id).toUUID();\n }\n\n fromUUID(uuid: string): IdType<Prefix> {\n return TypeID.fromUUID(this.prefix, uuid).toString() as IdType<Prefix>;\n }\n\n // bytes\n\n getBytes(id: IdType<Prefix>): Uint8Array {\n return this.getTypeId(id).toUUIDBytes();\n }\n\n fromBytes(bytes: Uint8Array): IdType<Prefix> {\n return TypeID.fromUUIDBytes(\n this.prefix,\n bytes,\n ).toString() as IdType<Prefix>;\n }\n}\n"],"mappings":";AAAA,SAAS,QAAQ,cAAc;AAIxB,IAAM,KAAN,MAAgC;AAAA,EAGrC,YAA4B,QAAgB;AAAhB;AAC1B,SAAK,OAAO,GAAG,KAAK,MAAM;AAAA,EAC5B;AAAA,EAJgB;AAAA,EAMhB,WAA2B;AACzB,WAAO,OAAO,KAAK,MAAM,EAAE,SAAS;AAAA,EACtC;AAAA,EAEA,GAAG,IAAmC;AACpC,QAAI,OAAO,OAAO,UAAU;AAC1B,aAAO;AAAA,IACT;AAEA,QAAI;AACF,YAAM,SAAS,OAAO,WAAW,EAAE;AACnC,aAAO,OAAO,QAAQ,MAAM,KAAK;AAAA,IACnC,QAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,QAAQ,IAAsB;AAC5B,WAAO,KAAK,GAAG,EAAE;AAAA,EACnB;AAAA;AAAA,EAIA,UAAU,IAAoC;AAC5C,UAAM,SAAS,OAAO,WAAW,EAAE;AAEnC,QAAI,OAAO,QAAQ,MAAM,KAAK,QAAQ;AACpC,YAAM,IAAI,MAAM,oBAAoB,EAAE,EAAE;AAAA,IAC1C;AAEA,WAAO;AAAA,EACT;AAAA;AAAA,EAIA,UAAU,IAA4B;AACpC,WAAO,KAAK,UAAU,EAAE,EAAE,UAAU;AAAA,EACtC;AAAA,EAEA,WAAW,QAAgC;AACzC,WAAO,OAAO,KAAK,QAAQ,MAAM,EAAE,SAAS;AAAA,EAC9C;AAAA;AAAA,EAIA,QAAQ,IAA4B;AAClC,WAAO,KAAK,UAAU,EAAE,EAAE,OAAO;AAAA,EACnC;AAAA,EAEA,SAAS,MAA8B;AACrC,WAAO,OAAO,SAAS,KAAK,QAAQ,IAAI,EAAE,SAAS;AAAA,EACrD;AAAA;AAAA,EAIA,SAAS,IAAgC;AACvC,WAAO,KAAK,UAAU,EAAE,EAAE,YAAY;AAAA,EACxC;AAAA,EAEA,UAAU,OAAmC;AAC3C,WAAO,OAAO;AAAA,MACZ,KAAK;AAAA,MACL;AAAA,IACF,EAAE,SAAS;AAAA,EACb;AACF;","names":[]}