shortlink_FrzJzDij.mjs 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. globalThis.process ??= {}; globalThis.process.env ??= {};
  2. import require$$0 from '.prisma/client/default';
  3. /* @ts-self-types="./index.d.ts" */
  4. let random = bytes => crypto.getRandomValues(new Uint8Array(bytes));
  5. let customRandom = (alphabet, defaultSize, getRandom) => {
  6. let mask = (2 << Math.log2(alphabet.length - 1)) - 1;
  7. let step = -~((1.6 * mask * defaultSize) / alphabet.length);
  8. return (size = defaultSize) => {
  9. let id = '';
  10. while (true) {
  11. let bytes = getRandom(step);
  12. let j = step | 0;
  13. while (j--) {
  14. id += alphabet[bytes[j] & mask] || '';
  15. if (id.length >= size) return id
  16. }
  17. }
  18. }
  19. };
  20. let customAlphabet = (alphabet, size = 21) =>
  21. customRandom(alphabet, size | 0, random);
  22. var _default;
  23. var hasRequired_default;
  24. function require_default () {
  25. if (hasRequired_default) return _default;
  26. hasRequired_default = 1;
  27. _default = {
  28. ...require$$0,
  29. };
  30. return _default;
  31. }
  32. var _defaultExports = /*@__PURE__*/ require_default();
  33. const globalForPrisma = globalThis;
  34. const prisma = globalForPrisma.prisma ?? new _defaultExports.PrismaClient();
  35. const nanoid = customAlphabet("23456789abcdefghijkmnpqrstuvwxyz", 6);
  36. async function generateShortLink(fullUrl) {
  37. let shortCode = "";
  38. let exists = true;
  39. while (exists) {
  40. shortCode = nanoid();
  41. const existing = await prisma.shortLink.findUnique({
  42. where: { shortCode }
  43. });
  44. exists = !!existing;
  45. }
  46. await prisma.shortLink.create({
  47. data: {
  48. shortCode,
  49. fullUrl
  50. }
  51. });
  52. const domain = process.env.DOMAIN || "localhost:4321";
  53. return `${domain}/${shortCode}`;
  54. }
  55. async function resolveShortLink(shortCode) {
  56. const link = await prisma.shortLink.findUnique({
  57. where: { shortCode }
  58. });
  59. return link?.fullUrl || null;
  60. }
  61. export { generateShortLink as g, resolveShortLink as r };