packages feed

NanoID 1.2.0 → 2.0.0

raw patch · 4 files changed

+43/−19 lines, 4 filesPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

+ Data.NanoID: alphanumeric :: Alphabet
+ Data.NanoID: hexadecimalLowercase :: Alphabet
+ Data.NanoID: hexadecimalUppercase :: Alphabet
+ Data.NanoID: lowercase :: Alphabet
+ Data.NanoID: nolookalikes :: Alphabet
+ Data.NanoID: nolookalikesSafe :: Alphabet
+ Data.NanoID: numbers :: Alphabet
+ Data.NanoID: uppercase :: Alphabet
- Data.NanoID: customNanoID :: Alphabet -> Length -> GenIO -> IO (Either String NanoID)
+ Data.NanoID: customNanoID :: Alphabet -> Maybe Length -> GenIO -> IO (Either String NanoID)

Files

NanoID.cabal view
@@ -1,5 +1,5 @@ name:                NanoID-version:             1.2.0+version:             2.0.0 synopsis:            NanoID generator description:         Library and CLI tool for NanoID generation license:             BSD3@@ -20,9 +20,9 @@  library   exposed-modules:     Data.NanoID-  build-depends:       base       >= 4.7 && < 4.16+  build-depends:       base       >= 4.7  && < 4.16                      , bytestring >= 0.10 && < 0.12-                     , extra      >= 1.6 && < 1.8+                     , extra      >= 1.6  && < 1.8                      , mwc-random >= 0.13 && < 0.16   hs-source-dirs:      src   default-language:    Haskell2010@@ -30,7 +30,7 @@ executable nanoid   main-is:             Main.hs   other-modules:       Options-  build-depends:       base                 >= 4.7 && < 4.16+  build-depends:       base                 >= 4.7  && < 4.16                      , bytestring           >= 0.10 && < 0.12                      , mwc-random           >= 0.13 && < 0.16                      , NanoID
ReadMe.md view
@@ -2,7 +2,7 @@  ``` [user@box ~] $ nanoid -h-nanoid v1.0.1, (c) Michel Boucey 2021+nanoid v2.0.0, (c) Michel Boucey 2021  Usage: nanoid [-a|--alphabet ARG] [-l|--length ARG] [-q|--quantity ARG]                [-n|--newline]
app/Main.hs view
@@ -13,12 +13,12 @@ main :: IO () main = do   Options{..} <- execParser opts-  if length > 21-    then putStrLn "The length of NanoID is less or equal to 21" >> exitFailure+  if length < 1 +    then putStrLn "Strange (nano)idea... less than one char" >> exitFailure     else do       let alphabet' = Alphabet { unAlphabet = C.pack alphabet }       replicateM_ quantity $-        createSystemRandom >>= customNanoID alphabet' length >>= putNanoID newline+        createSystemRandom >>= customNanoID alphabet' (Just length) >>= putNanoID newline       exitSuccess         where           putNanoID nl = either (put nl . C.pack) (put nl . unNanoID)
src/Data/NanoID.hs view
@@ -2,6 +2,7 @@  import           Control.Monad import qualified Data.ByteString.Char8 as C+import           Data.Maybe import           System.Random.MWC  newtype NanoID = NanoID { unNanoID :: C.ByteString } deriving (Eq, Show)@@ -10,18 +11,41 @@  type Length = Int -defaultAlphabet :: Alphabet-defaultAlphabet = Alphabet (C.pack "ABCDEFGHIJKLMNOPKRSTUVWXYZ_-abcdefghijklmnopqrstuvwxyz")- nanoID :: IO (Either String NanoID)-nanoID = createSystemRandom >>= customNanoID defaultAlphabet 21+nanoID = createSystemRandom >>= customNanoID defaultAlphabet Nothing -customNanoID :: Alphabet -> Length -> GenIO-> IO (Either String NanoID)+customNanoID :: Alphabet -> Maybe Length -> GenIO-> IO (Either String NanoID) customNanoID a l g =-  if l > 21-    then return (Left "The length of NanoID is less or equal to 21")-    else do-      let acs = unAlphabet a-          al = C.length acs-      pure . NanoID . C.pack <$> replicateM l ((\r -> C.index acs (r-1)) <$> uniformR (1,al) g)+  let ua = unAlphabet a+      al = C.length ua in+  pure . NanoID . C.pack <$> replicateM (fromMaybe 21 l) ((\r -> C.index ua (r-1)) <$> uniformR (1,al) g)++-- | The default 'Alphabet', made of URL-friendly symbols.+defaultAlphabet :: Alphabet+defaultAlphabet = Alphabet (C.pack "ABCDEFGHIJKLMNOPKRSTUVWXYZ_1234567890-abcdefghijklmnopqrstuvwxyz")++-- | Predefined 'Alphabet's borrowed from <https://github.com/CyberAP/nanoid-dictionary>+numbers :: Alphabet+numbers = Alphabet (C.pack "1234567890")++hexadecimalLowercase :: Alphabet+hexadecimalLowercase = Alphabet (C.pack "0123456789abcdef")++hexadecimalUppercase :: Alphabet+hexadecimalUppercase = Alphabet (C.pack "0123456789ABCDEF")++lowercase :: Alphabet+lowercase = Alphabet (C.pack "abcdefghijklmnopqrstuvwxyz")++uppercase :: Alphabet+uppercase = Alphabet (C.pack "ABCDEFGHIJKLMNOPQRSTUVWXYZ")++alphanumeric :: Alphabet+alphanumeric = Alphabet (C.pack "ABCDEFGHIJKLMNOPKRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyz")++nolookalikes :: Alphabet+nolookalikes = Alphabet (C.pack "346789ABCDEFGHJKLMNPQRTUVWXYabcdefghijkmnpqrtwxyz")++nolookalikesSafe :: Alphabet+nolookalikesSafe = Alphabet (C.pack "6789ABCDEFGHJKLMNPQRTUWYabcdefghijkmnpqrtwyz")