aboutsummaryrefslogtreecommitdiffstats
path: root/vanilla/node_modules/nanoid/index.browser.js
diff options
context:
space:
mode:
authorAdam Mathes <adam@adammathes.com>2026-02-13 21:34:48 -0800
committerAdam Mathes <adam@adammathes.com>2026-02-13 21:34:48 -0800
commit76cb9c2a39d477a64824a985ade40507e3bbade1 (patch)
tree41e997aa9c6f538d3a136af61dae9424db2005a9 /vanilla/node_modules/nanoid/index.browser.js
parent819a39a21ac992b1393244a4c283bbb125208c69 (diff)
downloadneko-76cb9c2a39d477a64824a985ade40507e3bbade1.tar.gz
neko-76cb9c2a39d477a64824a985ade40507e3bbade1.tar.bz2
neko-76cb9c2a39d477a64824a985ade40507e3bbade1.zip
feat(vanilla): add testing infrastructure and tests (NK-wjnczv)
Diffstat (limited to 'vanilla/node_modules/nanoid/index.browser.js')
-rw-r--r--vanilla/node_modules/nanoid/index.browser.js34
1 files changed, 34 insertions, 0 deletions
diff --git a/vanilla/node_modules/nanoid/index.browser.js b/vanilla/node_modules/nanoid/index.browser.js
new file mode 100644
index 0000000..7d3b876
--- /dev/null
+++ b/vanilla/node_modules/nanoid/index.browser.js
@@ -0,0 +1,34 @@
+import { urlAlphabet } from './url-alphabet/index.js'
+let random = bytes => crypto.getRandomValues(new Uint8Array(bytes))
+let customRandom = (alphabet, defaultSize, getRandom) => {
+ let mask = (2 << (Math.log(alphabet.length - 1) / Math.LN2)) - 1
+ let step = -~((1.6 * mask * defaultSize) / alphabet.length)
+ return (size = defaultSize) => {
+ let id = ''
+ while (true) {
+ let bytes = getRandom(step)
+ let j = step | 0
+ while (j--) {
+ id += alphabet[bytes[j] & mask] || ''
+ if (id.length === size) return id
+ }
+ }
+ }
+}
+let customAlphabet = (alphabet, size = 21) =>
+ customRandom(alphabet, size, random)
+let nanoid = (size = 21) =>
+ crypto.getRandomValues(new Uint8Array(size)).reduce((id, byte) => {
+ byte &= 63
+ if (byte < 36) {
+ id += byte.toString(36)
+ } else if (byte < 62) {
+ id += (byte - 26).toString(36).toUpperCase()
+ } else if (byte > 62) {
+ id += '-'
+ } else {
+ id += '_'
+ }
+ return id
+ }, '')
+export { nanoid, customAlphabet, customRandom, urlAlphabet, random }