Code Monkey home page Code Monkey logo

nanoid.nim's Introduction

nanoid.nim

the Nim implementation of NanoID

Build Status

What even?

NanoID is a tiny, secure URL-friendly unique string ID generator.
It's safe. It uses cryptographically strong random APIs that guarantees proper distribution of symbols.
And it's compact. It uses a larger alphabet than the standard UUID (A-Za-z0-9_-), and has a similar number of unique IDs in just 21 symbols instead of 36.

Installation

nimble install nanoid

Optionally, run the test suite (after cloning this repo) using

nimble test

Usage

Simple

Uses the default alphabet set (A-Za-z0-9_-) and a size of 21 symbols.

import nanoid

echo generate()  # RKF2A0-pGhJfpm6-rSi5C

Non-secure

import nanoid

echo generateNonSecure()  # SL8Zh8Lfw9TIRbaQI-DxB

Custom alphabet/size

import nanoid

let
  a = "abcdef12345"
  s = 10

echo generate(alphabet=a, size=10)  # 15aa1d2b3a

That’s it, really.

TODO

  • Async API

Contributing

Bad code? New feature in mind? Open an issue. Better still, learn Nim and shoot a PR ✨

License

MIT © Anirudh Oppiliappan

nanoid.nim's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

Forkers

wiltonlazary dsrw

nanoid.nim's Issues

Doesn't compile with Nim 0.19.0 on Windows

Firstly, thanks a lot for the package! NanoID is really cool, it's so cool we can have it in Nim.

Here's the error I'm getting:

$ nimble build
  Verifying dependencies for [email protected]
      Info: Dependency on websocket@any version already satisfied
  Verifying dependencies for [email protected]
 Installing nanoid@any version
    Prompt: nanoid not found in any local packages.json, check internet for updated packages? [y/N]
    Answer: y
Downloading Official package list
    Success Package list downloaded.
Downloading https://github.com/icyphox/nanoid.nim using git
  Verifying dependencies for [email protected]
 Installing random@>= 0.5.5
Downloading https://github.com/oprypin/nim-random using git
  Verifying dependencies for [email protected]
 Installing [email protected]
   Success: random installed successfully.
 Installing [email protected]
   Building nanoid/nanoid.exe using c backend
       Tip: 31 messages have been suppressed, use --verbose to show them.
     Error: nimble.nim(1106)         nimble
        ... nimble.nim(1064)         doAction
        ... nimble.nim(507)          build
        ... nimble.nim(183)          processDeps
        ... nimble.nim(483)          install
        ... nimble.nim(359)          installFromDir
        ... nimble.nim(253)          buildFromDir
        ... nimble.nim(245)          buildFromDir
        ... Build failed for package: nanoid
        ... Details:
        ... nimble.nim(1106)         nimble
        ... nimble.nim(1064)         doAction
        ... nimble.nim(507)          build
        ... nimble.nim(183)          processDeps
        ... nimble.nim(483)          install
        ... nimble.nim(359)          installFromDir
        ... nimble.nim(253)          buildFromDir
        ... nimble.nim(237)          buildFromDir
        ... tools.nim(37)            doCmd
        ... Execution failed with exit code 1
        ... Command: "C:\Users\moigagoo\.nimble\bin\nim.exe" c --noBabelPath -d:release --path:"C:\Users\moigagoo\AppData\Local\Temp\nimble_15848\githubcom_oprypinnimrandom_0.5.5\src"  -o:"C:\Users\moigagoo\AppData\Local\Temp\nimble_15848\githubcom_icyphoxnanoidnim\nanoid.exe" "C:\Users\moigagoo\AppData\Local\Temp\nimble_15848\githubcom_icyphoxnanoidnim\src\nanoid.nim"
        ... Output: Hint: used config file 'C:\Users\moigagoo\.choosenim\toolchains\nim-0.19.0\config\nim.cfg' [Conf]
        ... Hint: system [Processing]
        ... Hint: nanoid [Processing]
        ... Hint: math [Processing]
        ... Hint: bitops [Processing]
        ... Hint: lenientops [Processing]
        ... Hint: typetraits [Processing]
        ... Hint: random [Processing]
        ... Hint: times [Processing]
        ... Hint: strutils [Processing]
        ... Hint: parseutils [Processing]
        ... Hint: algorithm [Processing]
        ... Hint: unicode [Processing]
        ... Hint: options [Processing]
        ... Hint: strformat [Processing]
        ... Hint: macros [Processing]
        ... Hint: winlean [Processing]
        ... Hint: dynlib [Processing]
        ... Hint: mersenne [Processing]
        ... Hint: common [Processing]
        ... Hint: intsets [Processing]
        ... Hint: hashes [Processing]
        ... Hint: util [Processing]
        ... Hint: random_real [Processing]
        ... Hint: mt19937ar [Processing]
        ... Hint: urandom [Processing]
        ... CC: nanoid_nanoid
        ... CC: stdlib_system
        ... CC: stdlib_math
        ... CC: stdlib_lenientops
        ... CC: stdlib_bitops
        ... CC: stdlib_typetraits
        ... CC: random_random
        ... CC: stdlib_times
        ... CC: stdlib_macros
        ... CC: stdlib_strutils
        ... CC: stdlib_parseutils
        ... CC: stdlib_algorithm
        ... CC: stdlib_unicode
        ... CC: stdlib_options
        ... CC: stdlib_strformat
        ... CC: stdlib_winlean
        ... CC: stdlib_dynlib
        ... CC: random_mersenne
        ... CC: random_common
        ... CC: stdlib_intsets
        ... CC: stdlib_hashes
        ... CC: random_util
        ... CC: random_random_real
        ... CC: random_mt19937ar
        ... CC: random_urandom
        ... Error: execution of an external compiler program 'gcc.exe -c  -w -mno-ms-bitfields -DWIN32_LEAN_AND_MEAN -O3 -fno-strict-aliasing  -IC:\Users\moigagoo\.choosenim\toolchains\nim-0.19.0\lib -o C:\Users\moigagoo\nimcache\nanoid_r\stdlib_math.c.o C:\Users\moigagoo\nimcache\nanoid_r\stdlib_math.c' failed with exit code: 1
        ... C:\Users\moigagoo\nimcache\nanoid_r\random_urandom.c: In function 'urandomInit_kN1KeADYBcNXBL31s4ZpOg':
        ... C:\Users\moigagoo\nimcache\nanoid_r\random_urandom.c:299:81: error: 'PROV_RSA_FULL' undeclared (first use in this function)
        ...   success = Dl_260201_((&cryptProv_QYmaJrNrOSePQ9c9bh9bYJIDA), NIM_NIL, NIM_NIL, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT);
        ...                                                                                  ^
        ... C:\Users\moigagoo\nimcache\nanoid_r\random_urandom.c:299:81: note: each undeclared identifier is reported only once for
each function it appears in
        ... C:\Users\moigagoo\nimcache\nanoid_r\random_urandom.c:299:96: error: 'CRYPT_VERIFYCONTEXT' undeclared (first use in this
function)
        ...   success = Dl_260201_((&cryptProv_QYmaJrNrOSePQ9c9bh9bYJIDA), NIM_NIL, NIM_NIL, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT);
        ... 

API 2.0

Let’s update the library to be compatible with the latest Nano ID 2.0:

  • Replace ~ to - in default alphabet
  • Add non-secure fast generator
  • Async API?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.