Files
webstudio/apps/builder/app/shared/nano-hash.ts
T
Ivan Starkov 7a8b849591 chore: Add nanoid hash function (#3618)
## Description

ref #2647

To use in id conversion.

## Steps for reproduction

1. click button
2. expect xyz

## Code Review

- [ ] hi @kof, I need you to do
  - conceptual review (architecture, feature-correctness)
  - detailed review (read every line)
  - test it on preview

## Before requesting a review

- [ ] made a self-review
- [ ] added inline comments where things may be not obvious (the "why",
not "what")

## Before merging

- [ ] tested locally and on preview environment (preview dev login:
5de6)
- [ ] updated [test
cases](https://github.com/webstudio-is/webstudio/blob/main/apps/builder/docs/test-cases.md)
document
- [ ] added tests
- [ ] if any new env variables are added, added them to `.env` file
2024-06-25 22:14:58 +03:00

19 lines
595 B
TypeScript

import { customRandom } from "nanoid";
// https://github.com/ai/nanoid/blob/main/url-alphabet/index.js
const alphabet =
"useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict";
const NANOID_DEFAULT_SIZE = 21;
// Generates hash strings using the same alphabet as nanoid
export const nanoHash = async (data: string) => {
const encoder = new TextEncoder();
const dataBuffer = encoder.encode(data);
const hashBuffer = await crypto.subtle.digest("SHA-256", dataBuffer);
return customRandom(
alphabet,
NANOID_DEFAULT_SIZE,
() => new Uint8Array(hashBuffer)
)();
};