uuid.tool.ts 862 B

12345678910111213141516171819202122232425262728
  1. interface RandomUUID {
  2. (): `${string}-${string}-${string}-${string}-${string}`;
  3. }
  4. let randomUUID: RandomUUID = () => {
  5. try {
  6. if (typeof crypto?.randomUUID === 'function') randomUUID = crypto.randomUUID.bind(crypto);
  7. else {
  8. randomUUID = () => {
  9. const temp_url = URL.createObjectURL(new Blob());
  10. const uuid = temp_url.toString();
  11. return (URL.revokeObjectURL(temp_url), uuid.split('/').pop()) as ReturnType<typeof randomUUID>;
  12. };
  13. }
  14. return randomUUID();
  15. } catch (e) {
  16. randomUUID = () => {
  17. return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
  18. const r = (Math.random() * 16) | 0;
  19. const v = c === 'x' ? r : (r & 0x3) | 0x8;
  20. return v.toString(16);
  21. }) as ReturnType<typeof randomUUID>;
  22. };
  23. }
  24. return randomUUID();
  25. };
  26. export { randomUUID };