forked from Goutam/lynkeduppro-crm
chore: untrack vendor sdk node_modules, sync lockfile
The /vendor/photo-gallery-sdk/node_modules ignore rule had no effect because the nanoid files inside it were already tracked, so `npm install` kept surfacing them as modified. Drops them from the index; they stay on disk and npm install regenerates them (photo-gallery-sdk is a file: dep). Lockfile churn is from that same install: onnxruntime-web and friends un-hoisted under @huggingface/transformers, and @types/react/csstype moved dev -> devOptional. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -9,6 +9,7 @@
|
|||||||
!.yarn/plugins
|
!.yarn/plugins
|
||||||
!.yarn/releases
|
!.yarn/releases
|
||||||
!.yarn/versions
|
!.yarn/versions
|
||||||
|
/vendor/photo-gallery-sdk/node_modules
|
||||||
|
|
||||||
# testing
|
# testing
|
||||||
/coverage
|
/coverage
|
||||||
|
|||||||
Generated
+36
-12
@@ -518,6 +518,29 @@
|
|||||||
"sharp": "^0.34.5"
|
"sharp": "^0.34.5"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/@huggingface/transformers/node_modules/long": {
|
||||||
|
"version": "5.3.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/long/-/long-5.3.2.tgz",
|
||||||
|
"integrity": "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA=="
|
||||||
|
},
|
||||||
|
"node_modules/@huggingface/transformers/node_modules/onnxruntime-common": {
|
||||||
|
"version": "1.24.0-dev.20251116-b39e144322",
|
||||||
|
"resolved": "https://registry.npmjs.org/onnxruntime-common/-/onnxruntime-common-1.24.0-dev.20251116-b39e144322.tgz",
|
||||||
|
"integrity": "sha512-BOoomdHYmNRL5r4iQ4bMvsl2t0/hzVQ3OM3PHD0gxeXu1PmggqBv3puZicEUVOA3AtHHYmqZtjMj9FOfGrATTw=="
|
||||||
|
},
|
||||||
|
"node_modules/@huggingface/transformers/node_modules/onnxruntime-web": {
|
||||||
|
"version": "1.26.0-dev.20260416-b7804b056c",
|
||||||
|
"resolved": "https://registry.npmjs.org/onnxruntime-web/-/onnxruntime-web-1.26.0-dev.20260416-b7804b056c.tgz",
|
||||||
|
"integrity": "sha512-MD6Ss4GSpQBo6zqoJzyT9LRbKYs7x/JVN23FT24EcEvlqF4VuzPOeH6X38orZPKHQDbprn7K+SBpu0/mj2CQiw==",
|
||||||
|
"dependencies": {
|
||||||
|
"flatbuffers": "^25.1.24",
|
||||||
|
"guid-typescript": "^1.0.9",
|
||||||
|
"long": "^5.2.3",
|
||||||
|
"onnxruntime-common": "1.24.0-dev.20251116-b39e144322",
|
||||||
|
"platform": "^1.3.6",
|
||||||
|
"protobufjs": "^7.2.4"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/@humanfs/core": {
|
"node_modules/@humanfs/core": {
|
||||||
"version": "0.19.2",
|
"version": "0.19.2",
|
||||||
"resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.2.tgz",
|
"resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.2.tgz",
|
||||||
@@ -2049,7 +2072,7 @@
|
|||||||
"version": "19.2.17",
|
"version": "19.2.17",
|
||||||
"resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.17.tgz",
|
"resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.17.tgz",
|
||||||
"integrity": "sha512-MXfmqaVPEVgkBT/aY0aGCkRWWtByiYQXo3xdQ8r5RzuFrPiRn8Gar2tQdXSUQ2GKV3bkXckek89V8wQBY2Q/Aw==",
|
"integrity": "sha512-MXfmqaVPEVgkBT/aY0aGCkRWWtByiYQXo3xdQ8r5RzuFrPiRn8Gar2tQdXSUQ2GKV3bkXckek89V8wQBY2Q/Aw==",
|
||||||
"dev": true,
|
"devOptional": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"csstype": "^3.2.2"
|
"csstype": "^3.2.2"
|
||||||
@@ -3431,7 +3454,7 @@
|
|||||||
"version": "3.2.3",
|
"version": "3.2.3",
|
||||||
"resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz",
|
"resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz",
|
||||||
"integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==",
|
"integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==",
|
||||||
"dev": true,
|
"devOptional": true,
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
"node_modules/damerau-levenshtein": {
|
"node_modules/damerau-levenshtein": {
|
||||||
@@ -6613,15 +6636,15 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/onnxruntime-web": {
|
"node_modules/onnxruntime-web": {
|
||||||
"version": "1.26.0-dev.20260416-b7804b056c",
|
"version": "1.21.0",
|
||||||
"resolved": "https://registry.npmjs.org/onnxruntime-web/-/onnxruntime-web-1.26.0-dev.20260416-b7804b056c.tgz",
|
"resolved": "https://registry.npmjs.org/onnxruntime-web/-/onnxruntime-web-1.21.0.tgz",
|
||||||
"integrity": "sha512-MD6Ss4GSpQBo6zqoJzyT9LRbKYs7x/JVN23FT24EcEvlqF4VuzPOeH6X38orZPKHQDbprn7K+SBpu0/mj2CQiw==",
|
"integrity": "sha512-adzOe+7uI7lKz6pQNbAsLMQd2Fq5Jhmoxd8LZjJr8m3KvbFyiYyRxRiC57/XXD+jb18voppjeGAjoZmskXG+7A==",
|
||||||
"license": "MIT",
|
"peer": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"flatbuffers": "^25.1.24",
|
"flatbuffers": "^25.1.24",
|
||||||
"guid-typescript": "^1.0.9",
|
"guid-typescript": "^1.0.9",
|
||||||
"long": "^5.2.3",
|
"long": "^5.2.3",
|
||||||
"onnxruntime-common": "1.24.0-dev.20251116-b39e144322",
|
"onnxruntime-common": "1.21.0",
|
||||||
"platform": "^1.3.6",
|
"platform": "^1.3.6",
|
||||||
"protobufjs": "^7.2.4"
|
"protobufjs": "^7.2.4"
|
||||||
}
|
}
|
||||||
@@ -6630,13 +6653,14 @@
|
|||||||
"version": "5.3.2",
|
"version": "5.3.2",
|
||||||
"resolved": "https://registry.npmjs.org/long/-/long-5.3.2.tgz",
|
"resolved": "https://registry.npmjs.org/long/-/long-5.3.2.tgz",
|
||||||
"integrity": "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==",
|
"integrity": "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==",
|
||||||
"license": "Apache-2.0"
|
"license": "Apache-2.0",
|
||||||
|
"peer": true
|
||||||
},
|
},
|
||||||
"node_modules/onnxruntime-web/node_modules/onnxruntime-common": {
|
"node_modules/onnxruntime-web/node_modules/onnxruntime-common": {
|
||||||
"version": "1.24.0-dev.20251116-b39e144322",
|
"version": "1.21.0",
|
||||||
"resolved": "https://registry.npmjs.org/onnxruntime-common/-/onnxruntime-common-1.24.0-dev.20251116-b39e144322.tgz",
|
"resolved": "https://registry.npmjs.org/onnxruntime-common/-/onnxruntime-common-1.21.0.tgz",
|
||||||
"integrity": "sha512-BOoomdHYmNRL5r4iQ4bMvsl2t0/hzVQ3OM3PHD0gxeXu1PmggqBv3puZicEUVOA3AtHHYmqZtjMj9FOfGrATTw==",
|
"integrity": "sha512-Q632iLLrtCAVOTO65dh2+mNbQir/QNTVBG3h/QdZBpns7mZ0RYbLRBgGABPbpU9351AgYy7SJf1WaeVwMrBFPQ==",
|
||||||
"license": "MIT"
|
"peer": true
|
||||||
},
|
},
|
||||||
"node_modules/opencollective-postinstall": {
|
"node_modules/opencollective-postinstall": {
|
||||||
"version": "2.0.3",
|
"version": "2.0.3",
|
||||||
|
|||||||
-1
@@ -1 +0,0 @@
|
|||||||
../nanoid/bin/nanoid.js
|
|
||||||
-20
@@ -1,20 +0,0 @@
|
|||||||
The MIT License (MIT)
|
|
||||||
|
|
||||||
Copyright 2017 Andrey Sitnik <andrey@sitnik.es>
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
|
||||||
this software and associated documentation files (the "Software"), to deal in
|
|
||||||
the Software without restriction, including without limitation the rights to
|
|
||||||
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
|
||||||
the Software, and to permit persons to whom the Software is furnished to do so,
|
|
||||||
subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all
|
|
||||||
copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
|
||||||
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
|
||||||
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
|
||||||
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
||||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
-34
@@ -1,34 +0,0 @@
|
|||||||
# Nano ID
|
|
||||||
|
|
||||||
<img src="https://ai.github.io/nanoid/logo.svg" align="right"
|
|
||||||
alt="Nano ID logo by Anton Lovchikov" width="180" height="94">
|
|
||||||
|
|
||||||
**English** | [日本語](./README.ja.md) | [Русский](./README.ru.md) | [简体中文](./README.zh-CN.md) | [Bahasa Indonesia](./README.id-ID.md) | [한국어](./README.ko.md) | [العربية](./README.ar.md)
|
|
||||||
|
|
||||||
A tiny, secure, URL-friendly, unique string ID generator for JavaScript.
|
|
||||||
|
|
||||||
> “An amazing level of senseless perfectionism,
|
|
||||||
> which is simply impossible not to respect.”
|
|
||||||
|
|
||||||
- **Small.** 118 bytes (minified and brotlied). No dependencies.
|
|
||||||
[Size Limit] controls the size.
|
|
||||||
- **Safe.** It uses hardware random generator. Can be used in clusters.
|
|
||||||
- **Short IDs.** It uses a larger alphabet than UUID (`A-Za-z0-9_-`).
|
|
||||||
So ID size was reduced from 36 to 21 symbols.
|
|
||||||
- **Portable.** Nano ID was ported
|
|
||||||
to over [20 programming languages](./README.md#other-programming-languages).
|
|
||||||
|
|
||||||
```js
|
|
||||||
import { nanoid } from 'nanoid'
|
|
||||||
model.id = nanoid() //=> "V1StGXR8_Z5jdHi6B-myT"
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
<img src="https://cdn.evilmartians.com/badges/logo-no-label.svg" alt="" width="22" height="16" /> Made at <b><a href="https://evilmartians.com/devtools?utm_source=nanoid&utm_campaign=devtools-button&utm_medium=github">Evil Martians</a></b>, product consulting for <b>developer tools</b>.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
[online tool]: https://gitpod.io/#https://github.com/ai/nanoid/
|
|
||||||
[with Babel]: https://developer.epages.com/blog/coding/how-to-transpile-node-modules-with-babel-and-webpack-in-a-monorepo/
|
|
||||||
[Size Limit]: https://github.com/ai/size-limit
|
|
||||||
-66
@@ -1,66 +0,0 @@
|
|||||||
#!/usr/bin/env node
|
|
||||||
|
|
||||||
import { readFileSync } from 'node:fs'
|
|
||||||
import { dirname, join } from 'node:path'
|
|
||||||
import { fileURLToPath } from 'node:url'
|
|
||||||
|
|
||||||
import { customAlphabet, nanoid } from '../index.js'
|
|
||||||
|
|
||||||
function print(msg) {
|
|
||||||
process.stdout.write(msg + '\n')
|
|
||||||
}
|
|
||||||
|
|
||||||
function error(msg) {
|
|
||||||
process.stderr.write(msg + '\n')
|
|
||||||
process.exit(1)
|
|
||||||
}
|
|
||||||
|
|
||||||
if (process.argv.includes('--version') || process.argv.includes('-v')) {
|
|
||||||
let root = dirname(fileURLToPath(import.meta.url))
|
|
||||||
let pkg = JSON.parse(readFileSync(join(root, '..', 'package.json'), 'utf8'))
|
|
||||||
print(pkg.version)
|
|
||||||
process.exit()
|
|
||||||
}
|
|
||||||
|
|
||||||
if (process.argv.includes('--help') || process.argv.includes('-h')) {
|
|
||||||
print(`Usage
|
|
||||||
$ nanoid [options]
|
|
||||||
|
|
||||||
Options
|
|
||||||
-s, --size Generated ID size
|
|
||||||
-a, --alphabet Alphabet to use
|
|
||||||
-v, --version Show version number
|
|
||||||
-h, --help Show this help
|
|
||||||
|
|
||||||
Examples
|
|
||||||
$ nanoid -s 15
|
|
||||||
S9sBF77U6sDB8Yg
|
|
||||||
|
|
||||||
$ nanoid --size 10 --alphabet abc
|
|
||||||
bcabababca`)
|
|
||||||
process.exit()
|
|
||||||
}
|
|
||||||
|
|
||||||
let alphabet, size
|
|
||||||
for (let i = 2; i < process.argv.length; i++) {
|
|
||||||
let arg = process.argv[i]
|
|
||||||
if (arg === '--size' || arg === '-s') {
|
|
||||||
size = Number(process.argv[i + 1])
|
|
||||||
i += 1
|
|
||||||
if (Number.isNaN(size) || size <= 0) {
|
|
||||||
error('Size must be positive integer')
|
|
||||||
}
|
|
||||||
} else if (arg === '--alphabet' || arg === '-a') {
|
|
||||||
alphabet = process.argv[i + 1]
|
|
||||||
i += 1
|
|
||||||
} else {
|
|
||||||
error('Unknown argument ' + arg)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (alphabet) {
|
|
||||||
let customNanoid = customAlphabet(alphabet, size)
|
|
||||||
print(customNanoid())
|
|
||||||
} else {
|
|
||||||
print(nanoid(size))
|
|
||||||
}
|
|
||||||
-57
@@ -1,57 +0,0 @@
|
|||||||
|
|
||||||
|
|
||||||
import { urlAlphabet as scopedUrlAlphabet } from './url-alphabet/index.js'
|
|
||||||
|
|
||||||
export { urlAlphabet } from './url-alphabet/index.js'
|
|
||||||
|
|
||||||
export let random = bytes => crypto.getRandomValues(new Uint8Array(bytes))
|
|
||||||
|
|
||||||
export let customRandom = (alphabet, defaultSize, getRandom) => {
|
|
||||||
let safeByteCutoff = 256 - (256 % alphabet.length)
|
|
||||||
|
|
||||||
if (safeByteCutoff === 256) {
|
|
||||||
let mask = alphabet.length - 1
|
|
||||||
|
|
||||||
return (size = defaultSize) => {
|
|
||||||
if (!size) return ''
|
|
||||||
let id = ''
|
|
||||||
while (true) {
|
|
||||||
let bytes = getRandom(size)
|
|
||||||
let j = size
|
|
||||||
while (j--) {
|
|
||||||
id += alphabet[bytes[j] & mask]
|
|
||||||
if (id.length >= size) return id
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
let step = Math.ceil((1.6 * 256 * defaultSize) / safeByteCutoff)
|
|
||||||
|
|
||||||
return (size = defaultSize) => {
|
|
||||||
if (!size) return ''
|
|
||||||
let id = ''
|
|
||||||
while (true) {
|
|
||||||
let bytes = getRandom(step)
|
|
||||||
let j = step
|
|
||||||
while (j--) {
|
|
||||||
if (bytes[j] < safeByteCutoff) {
|
|
||||||
id += alphabet[bytes[j] % alphabet.length]
|
|
||||||
if (id.length >= size) return id
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export let customAlphabet = (alphabet, size = 21) =>
|
|
||||||
customRandom(alphabet, size | 0, random)
|
|
||||||
|
|
||||||
export let nanoid = (size = 21) => {
|
|
||||||
let id = ''
|
|
||||||
let bytes = crypto.getRandomValues(new Uint8Array((size |= 0)))
|
|
||||||
while (size--) {
|
|
||||||
id += scopedUrlAlphabet[bytes[size] & 63]
|
|
||||||
}
|
|
||||||
return id
|
|
||||||
}
|
|
||||||
-106
@@ -1,106 +0,0 @@
|
|||||||
/**
|
|
||||||
* A tiny, secure, URL-friendly, unique string ID generator for JavaScript
|
|
||||||
* with hardware random generator.
|
|
||||||
*
|
|
||||||
* ```js
|
|
||||||
* import { nanoid } from 'nanoid'
|
|
||||||
* model.id = nanoid() //=> "V1StGXR8_Z5jdHi6B-myT"
|
|
||||||
* ```
|
|
||||||
*
|
|
||||||
* @module
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Generate secure URL-friendly unique ID.
|
|
||||||
*
|
|
||||||
* By default, the ID will have 21 symbols to have a collision probability
|
|
||||||
* similar to UUID v4.
|
|
||||||
*
|
|
||||||
* ```js
|
|
||||||
* import { nanoid } from 'nanoid'
|
|
||||||
* model.id = nanoid() //=> "Uakgb_J5m9g-0JDMbcJqL"
|
|
||||||
* ```
|
|
||||||
*
|
|
||||||
* @param size Size of the ID. The default size is 21.
|
|
||||||
* @typeparam Type The ID type to replace `string` with some opaque type.
|
|
||||||
* @returns A random string.
|
|
||||||
*/
|
|
||||||
export function nanoid<Type extends string>(size?: number): Type
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Generate secure unique ID with custom alphabet.
|
|
||||||
*
|
|
||||||
* Alphabet must contain 256 symbols or less. Otherwise, the generator
|
|
||||||
* will not be secure.
|
|
||||||
*
|
|
||||||
* @param alphabet Alphabet used to generate the ID.
|
|
||||||
* @param defaultSize Size of the ID. The default size is 21.
|
|
||||||
* @typeparam Type The ID type to replace `string` with some opaque type.
|
|
||||||
* @returns A random string generator.
|
|
||||||
*
|
|
||||||
* ```js
|
|
||||||
* import { customAlphabet } from 'nanoid'
|
|
||||||
* const nanoid = customAlphabet('0123456789абвгдеё', 5)
|
|
||||||
* nanoid() //=> "8ё56а"
|
|
||||||
* ```
|
|
||||||
*/
|
|
||||||
export function customAlphabet<Type extends string>(
|
|
||||||
alphabet: string,
|
|
||||||
defaultSize?: number
|
|
||||||
): (size?: number) => Type
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Generate unique ID with custom random generator and alphabet.
|
|
||||||
*
|
|
||||||
* Alphabet must contain 256 symbols or less. Otherwise, the generator
|
|
||||||
* will not be secure.
|
|
||||||
*
|
|
||||||
* ```js
|
|
||||||
* import { customRandom } from 'nanoid'
|
|
||||||
*
|
|
||||||
* const nanoid = customRandom('abcdef', 5, size => {
|
|
||||||
* const random = []
|
|
||||||
* for (let i = 0; i < size; i++) {
|
|
||||||
* random.push(randomByte())
|
|
||||||
* }
|
|
||||||
* return random
|
|
||||||
* })
|
|
||||||
*
|
|
||||||
* nanoid() //=> "fbaef"
|
|
||||||
* ```
|
|
||||||
*
|
|
||||||
* @param alphabet Alphabet used to generate a random string.
|
|
||||||
* @param size Size of the random string.
|
|
||||||
* @param random A random bytes generator.
|
|
||||||
* @typeparam Type The ID type to replace `string` with some opaque type.
|
|
||||||
* @returns A random string generator.
|
|
||||||
*/
|
|
||||||
export function customRandom<Type extends string>(
|
|
||||||
alphabet: string,
|
|
||||||
size: number,
|
|
||||||
random: (bytes: number) => Uint8Array
|
|
||||||
): (size?: number) => Type
|
|
||||||
|
|
||||||
/**
|
|
||||||
* URL safe symbols.
|
|
||||||
*
|
|
||||||
* ```js
|
|
||||||
* import { urlAlphabet } from 'nanoid'
|
|
||||||
* const nanoid = customAlphabet(urlAlphabet, 10)
|
|
||||||
* nanoid() //=> "Uakgb_J5m9"
|
|
||||||
* ```
|
|
||||||
*/
|
|
||||||
export const urlAlphabet: string
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Generate an array of random bytes collected from hardware noise.
|
|
||||||
*
|
|
||||||
* ```js
|
|
||||||
* import { customRandom, random } from 'nanoid'
|
|
||||||
* const nanoid = customRandom("abcdef", 5, random)
|
|
||||||
* ```
|
|
||||||
*
|
|
||||||
* @param bytes Size of the array.
|
|
||||||
* @returns An array of random bytes.
|
|
||||||
*/
|
|
||||||
export function random(bytes: number): Uint8Array
|
|
||||||
-83
@@ -1,83 +0,0 @@
|
|||||||
import { webcrypto as crypto } from 'node:crypto'
|
|
||||||
|
|
||||||
import { urlAlphabet as scopedUrlAlphabet } from './url-alphabet/index.js'
|
|
||||||
|
|
||||||
export { urlAlphabet } from './url-alphabet/index.js'
|
|
||||||
|
|
||||||
const POOL_SIZE_MULTIPLIER = 128
|
|
||||||
let pool, poolOffset
|
|
||||||
|
|
||||||
function fillPool(bytes) {
|
|
||||||
if (bytes < 0) throw new RangeError('Wrong ID size')
|
|
||||||
try {
|
|
||||||
if (!pool || pool.length < bytes) {
|
|
||||||
pool = Buffer.allocUnsafe(bytes * POOL_SIZE_MULTIPLIER)
|
|
||||||
crypto.getRandomValues(pool)
|
|
||||||
poolOffset = 0
|
|
||||||
} else if (poolOffset + bytes > pool.length) {
|
|
||||||
crypto.getRandomValues(pool)
|
|
||||||
poolOffset = 0
|
|
||||||
}
|
|
||||||
} catch (e) {
|
|
||||||
pool = undefined
|
|
||||||
throw e
|
|
||||||
}
|
|
||||||
poolOffset += bytes
|
|
||||||
}
|
|
||||||
|
|
||||||
export function random(bytes) {
|
|
||||||
fillPool((bytes |= 0))
|
|
||||||
return pool.subarray(poolOffset - bytes, poolOffset)
|
|
||||||
}
|
|
||||||
|
|
||||||
export function customRandom(alphabet, defaultSize, getRandom) {
|
|
||||||
let safeByteCutoff = 256 - (256 % alphabet.length)
|
|
||||||
|
|
||||||
if (safeByteCutoff === 256) {
|
|
||||||
let mask = alphabet.length - 1
|
|
||||||
|
|
||||||
return (size = defaultSize) => {
|
|
||||||
if (!size) return ''
|
|
||||||
let id = ''
|
|
||||||
while (true) {
|
|
||||||
let bytes = getRandom(size)
|
|
||||||
let i = size
|
|
||||||
while (i--) {
|
|
||||||
id += alphabet[bytes[i] & mask]
|
|
||||||
if (id.length >= size) return id
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
let step = Math.ceil((1.6 * 256 * defaultSize) / safeByteCutoff)
|
|
||||||
|
|
||||||
return (size = defaultSize) => {
|
|
||||||
if (!size) return ''
|
|
||||||
let id = ''
|
|
||||||
while (true) {
|
|
||||||
let bytes = getRandom(step)
|
|
||||||
let i = step
|
|
||||||
while (i--) {
|
|
||||||
if (bytes[i] < safeByteCutoff) {
|
|
||||||
id += alphabet[bytes[i] % alphabet.length]
|
|
||||||
if (id.length >= size) return id
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export function customAlphabet(alphabet, size = 21) {
|
|
||||||
return customRandom(alphabet, size, random)
|
|
||||||
}
|
|
||||||
|
|
||||||
export function nanoid(size = 21) {
|
|
||||||
fillPool((size |= 0))
|
|
||||||
|
|
||||||
let id = ''
|
|
||||||
for (let i = poolOffset - size; i < poolOffset; i++) {
|
|
||||||
id += scopedUrlAlphabet[pool[i] & 63]
|
|
||||||
}
|
|
||||||
return id
|
|
||||||
}
|
|
||||||
-1
@@ -1 +0,0 @@
|
|||||||
let a="useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict";export let nanoid=(e=21)=>{let t="",r=crypto.getRandomValues(new Uint8Array(e|=0));for(;e--;)t+=a[63&r[e]];return t};
|
|
||||||
-48
@@ -1,48 +0,0 @@
|
|||||||
/**
|
|
||||||
* By default, Nano ID uses hardware random bytes generation for security
|
|
||||||
* and low collision probability. If you are not so concerned with security,
|
|
||||||
* you can use it for environments without hardware random generators.
|
|
||||||
*
|
|
||||||
* ```js
|
|
||||||
* import { nanoid } from 'nanoid/non-secure'
|
|
||||||
* const id = nanoid() //=> "Uakgb_J5m9g-0JDMbcJqLJ"
|
|
||||||
* ```
|
|
||||||
*
|
|
||||||
* @module
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Generate URL-friendly unique ID. This method uses the non-secure
|
|
||||||
* predictable random generator with bigger collision probability.
|
|
||||||
*
|
|
||||||
* ```js
|
|
||||||
* import { nanoid } from 'nanoid/non-secure'
|
|
||||||
* model.id = nanoid() //=> "Uakgb_J5m9g-0JDMbcJqL"
|
|
||||||
* ```
|
|
||||||
*
|
|
||||||
* @param size Size of the ID. The default size is 21.
|
|
||||||
* @typeparam Type The ID type to replace `string` with some opaque type.
|
|
||||||
* @returns A random string.
|
|
||||||
*/
|
|
||||||
export function nanoid<Type extends string>(size?: number): Type
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Generate a unique ID based on a custom alphabet.
|
|
||||||
* This method uses the non-secure predictable random generator
|
|
||||||
* with bigger collision probability.
|
|
||||||
*
|
|
||||||
* @param alphabet Alphabet used to generate the ID.
|
|
||||||
* @param defaultSize Size of the ID. The default size is 21.
|
|
||||||
* @typeparam Type The ID type to replace `string` with some opaque type.
|
|
||||||
* @returns A random string generator.
|
|
||||||
*
|
|
||||||
* ```js
|
|
||||||
* import { customAlphabet } from 'nanoid/non-secure'
|
|
||||||
* const nanoid = customAlphabet('0123456789абвгдеё', 5)
|
|
||||||
* model.id = nanoid() //=> "8ё56а"
|
|
||||||
* ```
|
|
||||||
*/
|
|
||||||
export function customAlphabet<Type extends string>(
|
|
||||||
alphabet: string,
|
|
||||||
defaultSize?: number
|
|
||||||
): (size?: number) => Type
|
|
||||||
-23
@@ -1,23 +0,0 @@
|
|||||||
|
|
||||||
let urlAlphabet =
|
|
||||||
'useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict'
|
|
||||||
|
|
||||||
export let customAlphabet = (alphabet, defaultSize = 21) => {
|
|
||||||
return (size = defaultSize) => {
|
|
||||||
let id = ''
|
|
||||||
let i = size | 0
|
|
||||||
while (i-- > 0) {
|
|
||||||
id += alphabet[(Math.random() * alphabet.length) | 0]
|
|
||||||
}
|
|
||||||
return id
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export let nanoid = (size = 21) => {
|
|
||||||
let id = ''
|
|
||||||
let i = size | 0
|
|
||||||
while (i-- > 0) {
|
|
||||||
id += urlAlphabet[(Math.random() * 64) | 0]
|
|
||||||
}
|
|
||||||
return id
|
|
||||||
}
|
|
||||||
-46
@@ -1,46 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "nanoid",
|
|
||||||
"version": "5.1.16",
|
|
||||||
"description": "A tiny (118 bytes), secure URL-friendly unique string ID generator",
|
|
||||||
"keywords": [
|
|
||||||
"id",
|
|
||||||
"random",
|
|
||||||
"url",
|
|
||||||
"uuid"
|
|
||||||
],
|
|
||||||
"license": "MIT",
|
|
||||||
"author": "Andrey Sitnik <andrey@sitnik.es>",
|
|
||||||
"repository": "ai/nanoid",
|
|
||||||
"funding": [
|
|
||||||
{
|
|
||||||
"type": "github",
|
|
||||||
"url": "https://github.com/sponsors/ai"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"bin": "./bin/nanoid.js",
|
|
||||||
"type": "module",
|
|
||||||
"sideEffects": false,
|
|
||||||
"browser": {
|
|
||||||
"./index.js": "./index.browser.js"
|
|
||||||
},
|
|
||||||
"types": "./index.d.ts",
|
|
||||||
"react-native": {
|
|
||||||
"./index.js": "./index.browser.js"
|
|
||||||
},
|
|
||||||
"exports": {
|
|
||||||
".": {
|
|
||||||
"types": "./index.d.ts",
|
|
||||||
"browser": "./index.browser.js",
|
|
||||||
"react-native": "./index.browser.js",
|
|
||||||
"default": "./index.js"
|
|
||||||
},
|
|
||||||
"./non-secure": {
|
|
||||||
"types": "./non-secure/index.d.ts",
|
|
||||||
"default": "./non-secure/index.js"
|
|
||||||
},
|
|
||||||
"./package.json": "./package.json"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": "^18 || >=20"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
-2
@@ -1,2 +0,0 @@
|
|||||||
export let urlAlphabet =
|
|
||||||
'useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict'
|
|
||||||
Reference in New Issue
Block a user