├── .editorconfig ├── .eslintignore ├── .eslintrc.js ├── .gitattributes ├── .github ├── FUNDING.yml ├── actions │ └── setup │ │ └── action.yaml └── workflows │ └── continuous-integrations.yaml ├── .gitignore ├── .npmignore ├── LICENSE ├── README.md ├── assets └── logo.png ├── data ├── animal │ ├── adjective.json │ ├── index.ts │ ├── noun.json │ └── verb.json ├── grammer │ ├── adjective.json │ ├── adverb.json │ ├── index.ts │ ├── personal-noun.json │ └── verb.json ├── index.ts ├── name │ ├── first.json │ ├── index.ts │ ├── last.json │ └── middle.json └── place │ ├── index.ts │ └── place.json ├── dist ├── index.cjs ├── index.cjs.map ├── index.esm.js ├── index.esm.js.map ├── index.js ├── index.js.map ├── index.mjs ├── index.mjs.map ├── index.umd.js ├── index.umd.js.map ├── index.umd.min.js └── index.umd.min.js.map ├── docs ├── .nojekyll └── README.md ├── jest.config.js ├── package-lock.json ├── package.json ├── rollup.config.js ├── src ├── index.test.ts ├── index.ts ├── index2.ts ├── low-entropy.ts ├── readable.ts ├── schema.ts └── util.ts ├── tsconfig.bundle.json ├── tsconfig.json ├── typedoc.json └── types ├── data ├── animal │ ├── index.d.ts │ └── index.d.ts.map ├── grammer │ ├── index.d.ts │ └── index.d.ts.map ├── name │ ├── index.d.ts │ └── index.d.ts.map └── place │ ├── index.d.ts │ └── index.d.ts.map └── src ├── index.d.ts ├── index.d.ts.map ├── index2.d.ts ├── index2.d.ts.map ├── low-entropy.d.ts ├── low-entropy.d.ts.map ├── readable.d.ts ├── readable.d.ts.map ├── schema.d.ts ├── schema.d.ts.map ├── util.d.ts └── util.d.ts.map /.editorconfig: -------------------------------------------------------------------------------- 1 | # Settings for editors and IDEs. 2 | # References at https://editorconfig.org/. 3 | 4 | root = true 5 | 6 | # Settings for any file. 7 | [*] 8 | charset = utf-8 9 | end_of_line = lf 10 | indent_size = 2 11 | indent_style = space 12 | insert_final_newline = true 13 | trim_trailing_whitespace = true 14 | -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | # Unlinted files and folders. 2 | # References at https://eslint.org/docs/user-guide/configuring#eslintignore 3 | 4 | # Generated docs, bundles and type definitions. 5 | docs/ 6 | dist/ 7 | types/ 8 | -------------------------------------------------------------------------------- /.eslintrc.js: -------------------------------------------------------------------------------- 1 | // @ts-check 2 | /* eslint-env node */ 3 | 4 | 'use strict'; 5 | 6 | /** 7 | * An object with ESLint options. 8 | * @type {import('eslint').Linter.Config} 9 | */ 10 | const options = { 11 | root: true, 12 | parser: '@typescript-eslint/parser', 13 | parserOptions: { 14 | ecmaFeatures: { 15 | jsx: true, 16 | }, 17 | ecmaVersion: 2021, 18 | }, 19 | plugins: ['@typescript-eslint'], 20 | extends: [ 21 | 'eslint:recommended', 22 | 'plugin:prettier/recommended', 23 | 'plugin:@typescript-eslint/eslint-recommended', 24 | 'plugin:@typescript-eslint/recommended', 25 | ], 26 | }; 27 | 28 | module.exports = options; 29 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | # File attributes for Git repository. 2 | # References at https://git-scm.com/docs/gitattributes. 3 | 4 | # Handle files as text and ensure Unix line endings. 5 | * text=auto eol=lf 6 | 7 | # Ignore differences on NPM's lockfile. 8 | # Since version 5.7.0, NPM automatically handles merge conflicts. 9 | package-lock.json -diff 10 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: debdut 4 | ko_fi: debdut 5 | -------------------------------------------------------------------------------- /.github/actions/setup/action.yaml: -------------------------------------------------------------------------------- 1 | name: 'Setup' 2 | description: "Setups Node.js and npm to run GitHub Actions' jobs." 3 | runs: 4 | using: 'composite' 5 | steps: 6 | - name: 'Setup Node.js' 7 | uses: 'actions/setup-node@v3' 8 | with: 9 | node-version: '16.x' 10 | cache: 'npm' 11 | cache-dependency-path: '**/package-lock.json' 12 | 13 | - name: 'Keep npm cache for future workflows' 14 | uses: 'actions/cache@v3' 15 | with: 16 | key: "${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}" 17 | path: '~/.npm' 18 | restore-keys: | 19 | ${{ runner.os }}-node- 20 | 21 | - name: 'Install dependencies' 22 | run: 'npm ci' 23 | shell: 'bash' 24 | -------------------------------------------------------------------------------- /.github/workflows/continuous-integrations.yaml: -------------------------------------------------------------------------------- 1 | name: 'Continuous Integrations' 2 | 3 | on: 4 | push: 5 | branches: ['main'] 6 | 7 | jobs: 8 | lint: 9 | name: 'Run ESLint and Prettier' 10 | runs-on: 'ubuntu-latest' 11 | steps: 12 | - name: 'Checkout the repository' 13 | uses: 'actions/checkout@v3' 14 | 15 | - name: 'Setup Node.js and npm' 16 | uses: './.github/actions/setup' 17 | 18 | - name: 'Execute the lint script' 19 | run: 'npm run lint' 20 | 21 | 22 | test: 23 | name: 'Run unit tests with Jest' 24 | runs-on: 'ubuntu-latest' 25 | steps: 26 | - name: 'Checkout the repository' 27 | uses: 'actions/checkout@v3' 28 | 29 | - name: 'Setup Node.js and npm' 30 | uses: './.github/actions/setup' 31 | 32 | - name: 'Execute the test script' 33 | run: 'npm run test' 34 | 35 | bundle: 36 | name: 'Bundle package with Rollup.js' 37 | runs-on: 'ubuntu-latest' 38 | steps: 39 | - name: 'Checkout the repository' 40 | uses: 'actions/checkout@v3' 41 | 42 | - name: 'Setup Node.js and npm' 43 | uses: './.github/actions/setup' 44 | 45 | - name: 'Execute the build script' 46 | run: 'npm run build' 47 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Unversioned files and folders. 2 | # References at https://git-scm.com/docs/gitignore. 3 | 4 | # Finder's configuration files (Mac). 5 | .DS_Store 6 | 7 | # Node.js modules. 8 | node_modules/ 9 | 10 | # NPM's shrinkwrap. 11 | # We're using `package-lock.json` instead. 12 | npm-shrinkwrap.json 13 | 14 | # Yarn's lockfile, Plug'n'Play, folder and settings. 15 | # We're using npm, and it provides its lockfile and settings. 16 | yarn.lock 17 | .pnp.* 18 | .yarn/ 19 | .yarnrc 20 | .yarnrc.yaml 21 | 22 | # pnpm's lockfile, workspace definitions and hooks. 23 | # We're using npm, and it provides its lockfile and settings. 24 | pnpm-lock.yaml 25 | pnpm-workspace.yaml 26 | pnpmfile.js 27 | 28 | # Log files. 29 | *.log 30 | *.log.* 31 | -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | .travis.yml 2 | src 3 | test 4 | .gitignore 5 | **/.DS_Store 6 | **/.vscode 7 | *.config.js 8 | .babelrc 9 | examples 10 | scripts 11 | data 12 | assets 13 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 Debdut Karmakar 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # uuid-readable [![Generic badge](https://img.shields.io/twitter/follow/KarmakarDebdut?style=social)](https://twitter.com/KarmakarDebdut) [![Generic Badge](https://img.shields.io/twitter/url?style=social&url=https%3A%2F%2Fctt.ac%2F9y3cf)](https://ctt.ac/9y3cf) 2 | 3 | ![Generic badge](https://img.shields.io/badge/build-success-brightgreen.svg) ![Generic badge](https://img.shields.io/badge/tests-100%25-brightgreen.svg) 4 | 5 | > _Generate Easy to Remember, Readable UUIDs, that are **Shakespearean** and Grammatically Correct Sentences 🥳_ 6 | 7 | ![Logo](/assets/logo.png) 8 | 9 | - Built on UUID v4 10 | - Optionally pass your UUID to generate a unique sentence 11 | - 128 Bit Crypto Secure 12 | - Grammatically correct sentences 13 | - Easy to remember 14 | - Has a Shakespeare feeling 15 | - Universally Unique Identifier 16 | - Generate Low Entropy 32 Bit Tokens 17 | 18 | ## Example 19 | 20 | ### 128 Bit UUID Readable 21 | 22 | > _Loren Chariot Addy the Titbit of Cholame questioned Cele Garth Alda and 16 windy frogs_ 23 | 24 | > _Drucill Hubert Lewse the Comer of Avera rejoices Fiann Craggy Florie and 5 hard trouts_ 25 | 26 | > _Jacquette Brandt John the Pectus of Barnsdall doubted Glenn Gay Gregg and 12 noisy stoats_ 27 | 28 | ### Low Entropy 32 Bit 29 | 30 | > _11 pretty dragonflies regularly sang_ 31 | 32 | > _2 fat toads happily buzzed_ 33 | 34 | ### Note 35 | 36 | > _Think of it this way, it's impossible to remember 32 random characters in UUID, but these sentences even though hard can be remembered, and are definitely fun!_ 37 | 38 | Alternatively, generate 32 bit readable small sentences from 128 bit UUID and check later if they match. 39 | 40 | ## API 41 | 42 | Thanks to [uuid.rocks](https://uuid.rocks), we have an [API Endpoint](https://uuid.rocks/plain?readable) 43 | 44 | ```sh 45 | curl https://uuid.rocks/plain?readable 46 | # Joyce Ange Barrett the Orient of Alco killed Marlyn Hewett Lady and 11 strong bulls 47 | ``` 48 | 49 | ## Installation 50 | 51 | ```sh 52 | npm install uuid-readable --save 53 | ``` 54 | 55 | ## Usage 56 | 57 | ```js 58 | const id = require('uuid-readable') 59 | 60 | console.log( id.generate() ) 61 | // Cathleen d Dieball the Monolith of Alderson reflects Arly Arnie Keenan and 18 large ants 62 | ``` 63 | 64 | Pass your own UUID 65 | 66 | ```js 67 | console.log( id.generate(uuid) ) 68 | ``` 69 | 70 | Inverse, get UUID back from Readable UUID 71 | 72 | ```js 73 | const uuid = '1b9d6bcd-bbfd-4b2d-9b5d-ab8dfbbd4bed' 74 | const readable = id.generate(uuid) 75 | const inverse = id.inverse(readable) 76 | 77 | inverse === uuid // true 78 | ``` 79 | 80 | Low Entropy 32bit Readable (Use as Readable Hash) 81 | 82 | ```js 83 | const short = id.short(uuid) 84 | // 5 fat toads happily buzzed 85 | 86 | // Check Later 87 | id.check(short, uuid) //true 88 | ``` 89 | 90 | MongoDB 91 | 92 | ```js 93 | const id = require('uuid-readable') 94 | 95 | readable_id: { 96 | 'type': String, 97 | 'default': id 98 | } 99 | 100 | // or use as real id 101 | 102 | _id: { 103 | 'type': String, 104 | 'default': id 105 | } 106 | ``` 107 | 108 | ## How does it work? 109 | 110 | UUID is converted to 128 bits. 111 | 112 | - 12 bits for first name 113 | - 11 bits for middle name 114 | - 14 bits for last name 115 | - 13 bits for a personal pronoun 116 | - 13 bits for name of place 117 | - 10 bits for verb 118 | - 12 bits for first name 119 | - 11 bits for middle name 120 | - 14 bits for last name 121 | - 5 bits for number of animals 122 | - 6 bits for animal adjective 123 | - 7 bits for animal 124 | 125 | For example, 7 bits for animal means we choose one animal from a list of atleast `2**7 = 128` animals 126 | 127 | Alternatively, the inverse funcation proves that UUID and Readable UUID form a bijection, hence no loss of entropy. 128 | 129 | ## Use Cases 130 | 131 | - Customer Support 132 | 133 | You can remember parts of the id and that's enough to search it up and communicate throughout a large team. I will be using it as a secret generation for a service, and customer tickets. 134 | 135 | ## Sponsors 136 | 137 | [Shakespeare Geek](http://www.shakespearegeek.com) 138 | -------------------------------------------------------------------------------- /assets/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Debdut/uuid-readable/2787308da3fd368bfe122485dde6bc70e3fc7b61/assets/logo.png -------------------------------------------------------------------------------- /data/animal/adjective.json: -------------------------------------------------------------------------------- 1 | [ 2 | "cute", 3 | "dapper", 4 | "large", 5 | "small", 6 | "long", 7 | "short", 8 | "thick", 9 | "narrow", 10 | "deep", 11 | "flat", 12 | "whole", 13 | "low", 14 | "high", 15 | "near", 16 | "far", 17 | "fast", 18 | "quick", 19 | "slow", 20 | "early", 21 | "late", 22 | "bright", 23 | "dark", 24 | "cloudy", 25 | "warm", 26 | "cool", 27 | "cold", 28 | "windy", 29 | "noisy", 30 | "loud", 31 | "quiet", 32 | "dry", 33 | "clear", 34 | "hard", 35 | "soft", 36 | "heavy", 37 | "light", 38 | "strong", 39 | "weak", 40 | "tidy", 41 | "clean", 42 | "dirty", 43 | "empty", 44 | "full", 45 | "close", 46 | "thirsty", 47 | "hungry", 48 | "fat", 49 | "old", 50 | "fresh", 51 | "dead", 52 | "healthy", 53 | "sweet", 54 | "sour", 55 | "bitter", 56 | "salty", 57 | "good", 58 | "bad", 59 | "great", 60 | "important", 61 | "useful", 62 | "expensive", 63 | "cheap", 64 | "free", 65 | "difficult", 66 | "able", 67 | "rich", 68 | "afraid", 69 | "brave", 70 | "fine", 71 | "sad", 72 | "proud", 73 | "comfortable", 74 | "happy", 75 | "clever", 76 | "interesting", 77 | "famous", 78 | "exciting", 79 | "funny", 80 | "kind", 81 | "polite", 82 | "fair", 83 | "share", 84 | "busy", 85 | "lazy", 86 | "lucky", 87 | "careful", 88 | "safe", 89 | "dangerous" 90 | ] -------------------------------------------------------------------------------- /data/animal/index.ts: -------------------------------------------------------------------------------- 1 | import * as Noun from "./noun.json"; 2 | import * as Adjective from "./adjective.json"; 3 | import * as Verb from "./verb.json"; 4 | 5 | export default { Noun, Adjective, Verb }; 6 | -------------------------------------------------------------------------------- /data/animal/noun.json: -------------------------------------------------------------------------------- 1 | [ 2 | "rabbits", 3 | "badgers", 4 | "foxes", 5 | "chickens", 6 | "bats", 7 | "deer", 8 | "snakes", 9 | "hares", 10 | "hedgehogs", 11 | "platypuses", 12 | "moles", 13 | "mice", 14 | "otters", 15 | "rats", 16 | "squirrels", 17 | "stoats", 18 | "weasels", 19 | "crows", 20 | "doves", 21 | "ducks", 22 | "geese", 23 | "hawks", 24 | "herons", 25 | "kingfishers", 26 | "owls", 27 | "peafowl", 28 | "pheasants", 29 | "pigeons", 30 | "robins", 31 | "rooks", 32 | "sparrows", 33 | "starlings", 34 | "swans", 35 | "ants", 36 | "bees", 37 | "butterflies", 38 | "dragonflies", 39 | "flies", 40 | "moths", 41 | "spiders", 42 | "pikes", 43 | "salmons", 44 | "trouts", 45 | "frogs", 46 | "newts", 47 | "toads", 48 | "crabs", 49 | "lobsters", 50 | "clams", 51 | "cockles", 52 | "mussles", 53 | "oysters", 54 | "snails", 55 | "cattle", 56 | "dogs", 57 | "donkeys", 58 | "goats", 59 | "horses", 60 | "pigs", 61 | "sheep", 62 | "ferrets", 63 | "gerbils", 64 | "guinea-pigs", 65 | "parrots", 66 | "gregs", 67 | "aardvarks", 68 | "alligators", 69 | "alpacas", 70 | "antelopes", 71 | "apes", 72 | "armadillos", 73 | "baboons", 74 | "bears", 75 | "beavers", 76 | "bisons", 77 | "boars", 78 | "buffaloes", 79 | "bulls", 80 | "camels", 81 | "canaries", 82 | "capybaras", 83 | "cats", 84 | "chameleons", 85 | "cheetas", 86 | "chimpanzees", 87 | "chinchillas", 88 | "chipmunks", 89 | "cougars", 90 | "cows", 91 | "coyotes", 92 | "crocodiles", 93 | "deers", 94 | "dingos", 95 | "dromedaries", 96 | "elephants", 97 | "elks", 98 | "ewes", 99 | "finchs", 100 | "fishes", 101 | "gazelles", 102 | "gila-monsters", 103 | "giraffes", 104 | "gnus", 105 | "gophers", 106 | "gorillas", 107 | "grizzly-bears", 108 | "ground-hogs", 109 | "hamsters", 110 | "hippopotamuses", 111 | "hogs", 112 | "hyenas", 113 | "ibexes", 114 | "iguanas", 115 | "impalas", 116 | "jackals", 117 | "jaguars", 118 | "kangaroos", 119 | "koalas", 120 | "lambs", 121 | "lemurs", 122 | "leopards", 123 | "lions", 124 | "lizards", 125 | "llamas", 126 | "lynxes", 127 | "mandrills", 128 | "marmosets", 129 | "minks", 130 | "mongooses", 131 | "monkeys", 132 | "mooses", 133 | "mountain-goats", 134 | "mouses", 135 | "mules", 136 | "muskrats", 137 | "mustangs", 138 | "mynah-birds", 139 | "ocelots", 140 | "opossums", 141 | "orangutans", 142 | "oryxs", 143 | "oxs", 144 | "pandas", 145 | "panthers", 146 | "parakeets", 147 | "platypuss", 148 | "polar-bears", 149 | "porcupines", 150 | "porpoises", 151 | "prairie-dogs", 152 | "pumas", 153 | "raccoons", 154 | "rams", 155 | "reindeers", 156 | "reptiles", 157 | "rhinoceross", 158 | "salamanders", 159 | "seals", 160 | "sheeps", 161 | "shrews", 162 | "silver-foxs", 163 | "skunks", 164 | "sloths", 165 | "tapirs", 166 | "tigers", 167 | "turtles", 168 | "walruses", 169 | "warthogs", 170 | "whales", 171 | "wildcats", 172 | "wolves", 173 | "wolverines", 174 | "wombats", 175 | "woodchucks", 176 | "yaks", 177 | "zebras" 178 | ] -------------------------------------------------------------------------------- /data/animal/verb.json: -------------------------------------------------------------------------------- 1 | [ 2 | "sang", 3 | "played", 4 | "knitted", 5 | "floundered", 6 | "danced", 7 | "listened", 8 | "ran", 9 | "talked", 10 | "cuddled", 11 | "sat", 12 | "kissed", 13 | "hugged", 14 | "whimpered", 15 | "whooped", 16 | "hid", 17 | "fought", 18 | "whispered", 19 | "cried", 20 | "snuggled", 21 | "walked", 22 | "drove", 23 | "loitered", 24 | "felt", 25 | "jumped", 26 | "hopped", 27 | "went", 28 | "married", 29 | "engaged", 30 | "sings", 31 | "plays", 32 | "knits", 33 | "dances" 34 | ] -------------------------------------------------------------------------------- /data/grammer/adjective.json: -------------------------------------------------------------------------------- 1 | [ 2 | "Aristotelian", 3 | "Arthurian", 4 | "Bohemian", 5 | "Brethren", 6 | "Mosaic", 7 | "Oceanic", 8 | "Proctor", 9 | "Terran", 10 | "Tudor", 11 | "abroad", 12 | "absorbing", 13 | "abstract", 14 | "academic", 15 | "accelerated", 16 | "accented", 17 | "accountant", 18 | "acquainted", 19 | "acute", 20 | "addicting", 21 | "addictive", 22 | "adjustable", 23 | "admired", 24 | "adult", 25 | "adverse", 26 | "advised", 27 | "aerosol", 28 | "afraid", 29 | "aggravated", 30 | "aggressive", 31 | "agreeable", 32 | "alienate", 33 | "aligned", 34 | "all-round", 35 | "alleged", 36 | "almond", 37 | "alright", 38 | "altruistic", 39 | "ambient", 40 | "ambivalent", 41 | "amiable", 42 | "amino", 43 | "amorphous", 44 | "amused", 45 | "anatomical", 46 | "ancestral", 47 | "angelic", 48 | "angrier", 49 | "answerable", 50 | "antiquarian", 51 | "antiretroviral", 52 | "appellate", 53 | "applicable", 54 | "apportioned", 55 | "approachable", 56 | "appropriated", 57 | "archer", 58 | "aroused", 59 | "arrested", 60 | "assertive", 61 | "assigned", 62 | "athletic", 63 | "atrocious", 64 | "attained", 65 | "authoritarian", 66 | "autobiographical", 67 | "avaricious", 68 | "avocado", 69 | "awake", 70 | "awsome", 71 | "backstage", 72 | "backwoods", 73 | "balding", 74 | "bandaged", 75 | "banded", 76 | "banned", 77 | "barreled", 78 | "battle", 79 | "beaten", 80 | "begotten", 81 | "beguiled", 82 | "bellied", 83 | "belted", 84 | "beneficent", 85 | "besieged", 86 | "betting", 87 | "big-money", 88 | "biggest", 89 | "biochemical", 90 | "bipolar", 91 | "blackened", 92 | "blame", 93 | "blessed", 94 | "blindfolded", 95 | "bloat", 96 | "blocked", 97 | "blooded", 98 | "blue-collar", 99 | "blushing", 100 | "boastful", 101 | "bolder", 102 | "bolstered", 103 | "bonnie", 104 | "bored", 105 | "boundary", 106 | "bounded", 107 | "bounding", 108 | "branched", 109 | "brawling", 110 | "brazen", 111 | "breeding", 112 | "bridged", 113 | "brimming", 114 | "brimstone", 115 | "broadest", 116 | "broiled", 117 | "broker", 118 | "bronze", 119 | "bruising", 120 | "buffy", 121 | "bullied", 122 | "bungling", 123 | "burial", 124 | "buttery", 125 | "candied", 126 | "canonical", 127 | "cantankerous", 128 | "cardinal", 129 | "carefree", 130 | "caretaker", 131 | "casual", 132 | "cathartic", 133 | "causal", 134 | "chapel", 135 | "characterized", 136 | "charcoal", 137 | "cheeky", 138 | "cherished", 139 | "chipotle", 140 | "chirping", 141 | "chivalrous", 142 | "circumstantial", 143 | "civic", 144 | "civil", 145 | "civilised", 146 | "clanking", 147 | "clapping", 148 | "claptrap", 149 | "classless", 150 | "cleansed", 151 | "cleric", 152 | "cloistered", 153 | "codified", 154 | "colloquial", 155 | "colour", 156 | "combat", 157 | "combined", 158 | "comely", 159 | "commissioned", 160 | "commonplace", 161 | "commuter", 162 | "commuting", 163 | "comparable", 164 | "complementary", 165 | "compromising", 166 | "conceding", 167 | "concentrated", 168 | "conceptual", 169 | "conditioned", 170 | "confederate", 171 | "confident", 172 | "confidential", 173 | "confining", 174 | "confuse", 175 | "congressional", 176 | "consequential", 177 | "conservative", 178 | "constituent", 179 | "contaminated", 180 | "contemporaneous", 181 | "contraceptive", 182 | "convertible", 183 | "convex", 184 | "cooked", 185 | "coronary", 186 | "corporatist", 187 | "correlated", 188 | "corroborated", 189 | "cosmic", 190 | "cover", 191 | "crash", 192 | "crypto", 193 | "culminate", 194 | "cushioned", 195 | "dandy", 196 | "dashing", 197 | "dazzled", 198 | "decreased", 199 | "decrepit", 200 | "dedicated", 201 | "defaced", 202 | "defective", 203 | "defenseless", 204 | "deluded", 205 | "deodorant", 206 | "departed", 207 | "depress", 208 | "designing", 209 | "despairing", 210 | "destitute", 211 | "detective", 212 | "determined", 213 | "devastating", 214 | "deviant", 215 | "devilish", 216 | "devoted", 217 | "diagonal", 218 | "dictated", 219 | "didactic", 220 | "differentiated", 221 | "diffused", 222 | "dirtier", 223 | "disabling", 224 | "disconnected", 225 | "discovered", 226 | "disdainful", 227 | "diseased", 228 | "disfigured", 229 | "disheartened", 230 | "disheveled", 231 | "disillusioned", 232 | "disparate", 233 | "dissident", 234 | "doable", 235 | "doctrinal", 236 | "doing", 237 | "dotted", 238 | "double-blind", 239 | "downbeat", 240 | "dozen", 241 | "draining", 242 | "draught", 243 | "dread", 244 | "dried", 245 | "dropped", 246 | "dulled", 247 | "duplicate", 248 | "eaten", 249 | "echoing", 250 | "economical", 251 | "elaborated", 252 | "elastic", 253 | "elective", 254 | "electoral", 255 | "elven", 256 | "embryo", 257 | "emerald", 258 | "emergency", 259 | "emissary", 260 | "emotional", 261 | "employed", 262 | "enamel", 263 | "encased", 264 | "encrusted", 265 | "endangered", 266 | "engraved", 267 | "engrossing", 268 | "enlarged", 269 | "enlisted", 270 | "enlivened", 271 | "ensconced", 272 | "entangled", 273 | "enthralling", 274 | "entire", 275 | "envious", 276 | "eradicated", 277 | "eroded", 278 | "esoteric", 279 | "essential", 280 | "evaporated", 281 | "ever-present", 282 | "evergreen", 283 | "everlasting", 284 | "exacting", 285 | "exasperated", 286 | "excess", 287 | "exciting", 288 | "executable", 289 | "existent", 290 | "exonerated", 291 | "exorbitant", 292 | "exponential", 293 | "export", 294 | "extraordinary", 295 | "exultant", 296 | "exulting", 297 | "facsimile", 298 | "fading", 299 | "fainter", 300 | "faith-based", 301 | "fallacious", 302 | "faltering", 303 | "famous", 304 | "fancier", 305 | "fast-growing", 306 | "fated", 307 | "favourable", 308 | "fearless", 309 | "feathered", 310 | "fellow", 311 | "fermented", 312 | "ferocious", 313 | "fiddling", 314 | "filling", 315 | "firmer", 316 | "fitted", 317 | "flammable", 318 | "flawed", 319 | "fledgling", 320 | "fleshy", 321 | "flexible", 322 | "flickering", 323 | "floral", 324 | "flowering", 325 | "flowing", 326 | "foggy", 327 | "folic", 328 | "foolhardy", 329 | "foolish", 330 | "footy", 331 | "forehand", 332 | "forked", 333 | "formative", 334 | "formulaic", 335 | "foul-mouthed", 336 | "fractional", 337 | "fragrant", 338 | "fraudulent", 339 | "freakish", 340 | "freckled", 341 | "freelance", 342 | "freight", 343 | "fresh", 344 | "fretted", 345 | "frugal", 346 | "fulfilling", 347 | "fuming", 348 | "funded", 349 | "funny", 350 | "garbled", 351 | "gathered", 352 | "geologic", 353 | "geometric", 354 | "gibberish", 355 | "gilded", 356 | "ginger", 357 | "glare", 358 | "glaring", 359 | "gleaming", 360 | "glorified", 361 | "glorious", 362 | "goalless", 363 | "gold-plated", 364 | "goody", 365 | "grammatical", 366 | "grande", 367 | "grateful", 368 | "gratuitous", 369 | "graven", 370 | "greener", 371 | "grinding", 372 | "grizzly", 373 | "groaning", 374 | "grudging", 375 | "guaranteed", 376 | "gusty", 377 | "half-breed", 378 | "hand-held", 379 | "handheld", 380 | "hands-off", 381 | "hard-pressed", 382 | "harlot", 383 | "healing", 384 | "healthier", 385 | "healthiest", 386 | "heart", 387 | "heart-shaped", 388 | "heathen", 389 | "hedonistic", 390 | "heralded", 391 | "herbal", 392 | "high-density", 393 | "high-performance", 394 | "high-res", 395 | "high-yield", 396 | "hissy", 397 | "hitless", 398 | "holiness", 399 | "homesick", 400 | "honorable", 401 | "hooded", 402 | "hopeless", 403 | "horrendous", 404 | "horrible", 405 | "hot-button", 406 | "huddled", 407 | "human", 408 | "humbling", 409 | "humid", 410 | "humiliating", 411 | "hypnotized", 412 | "idealistic", 413 | "idiosyncratic", 414 | "ignited", 415 | "illustrated", 416 | "illustrative", 417 | "imitated", 418 | "immense", 419 | "immersive", 420 | "immigrant", 421 | "immoral", 422 | "impassive", 423 | "impressionable", 424 | "improbable", 425 | "impulsive", 426 | "in-between", 427 | "in-flight", 428 | "inattentive", 429 | "inbound", 430 | "inbounds", 431 | "incalculable", 432 | "incomprehensible", 433 | "indefatigable", 434 | "indigo", 435 | "indiscriminate", 436 | "indomitable", 437 | "inert", 438 | "inflate", 439 | "inform", 440 | "inheriting", 441 | "injured", 442 | "injurious", 443 | "inking", 444 | "inoffensive", 445 | "insane", 446 | "insensible", 447 | "insidious", 448 | "insincere", 449 | "insistent", 450 | "insolent", 451 | "insufferable", 452 | "intemperate", 453 | "interdependent", 454 | "interesting", 455 | "interfering", 456 | "intern", 457 | "interpreted", 458 | "intersecting", 459 | "intolerable", 460 | "intolerant", 461 | "intuitive", 462 | "irresolute", 463 | "irritate", 464 | "jealous", 465 | "jerking", 466 | "joining", 467 | "joint", 468 | "journalistic", 469 | "joyful", 470 | "keyed", 471 | "knowing", 472 | "lacklustre", 473 | "laden", 474 | "lagging", 475 | "lamented", 476 | "laughable", 477 | "layered", 478 | "leather", 479 | "leathern", 480 | "leery", 481 | "left-footed", 482 | "legible", 483 | "leisure", 484 | "lessening", 485 | "liberating", 486 | "life-size", 487 | "lifted", 488 | "lightest", 489 | "limitless", 490 | "listening", 491 | "literary", 492 | "liver", 493 | "livid", 494 | "lobster", 495 | "locked", 496 | "long-held", 497 | "long-lasting", 498 | "long-running", 499 | "long-suffering", 500 | "loudest", 501 | "loveliest", 502 | "low-budget", 503 | "low-carb", 504 | "lowering", 505 | "lucid", 506 | "luckless", 507 | "lusty", 508 | "luxurious", 509 | "magazine", 510 | "maniac", 511 | "manmade", 512 | "maroon", 513 | "mastered", 514 | "mated", 515 | "material", 516 | "materialistic", 517 | "meaningful", 518 | "measuring", 519 | "mediaeval", 520 | "medical", 521 | "meditated", 522 | "medley", 523 | "melodic", 524 | "memorable", 525 | "memorial", 526 | "metabolic", 527 | "metallic", 528 | "metallurgical", 529 | "metering", 530 | "midair", 531 | "midterm", 532 | "midway", 533 | "mighty", 534 | "migrating", 535 | "mind-blowing", 536 | "mind-boggling", 537 | "minor", 538 | "mirrored", 539 | "misguided", 540 | "misshapen", 541 | "mitigated", 542 | "mixed", 543 | "modernized", 544 | "molecular", 545 | "monarch", 546 | "monastic", 547 | "morbid", 548 | "motley", 549 | "motorized", 550 | "mounted", 551 | "multi-million", 552 | "multidisciplinary", 553 | "muscled", 554 | "muscular", 555 | "muted", 556 | "mysterious", 557 | "mythic", 558 | "nail-biting", 559 | "natural", 560 | "nauseous", 561 | "negative", 562 | "networked", 563 | "neurological", 564 | "neutered", 565 | "newest", 566 | "night", 567 | "nitrous", 568 | "no-fly", 569 | "noncommercial", 570 | "nonsense", 571 | "north", 572 | "nuanced", 573 | "occurring", 574 | "offensive", 575 | "oldest", 576 | "oncoming", 577 | "one-eyed", 578 | "one-year", 579 | "onstage", 580 | "onward", 581 | "opaque", 582 | "open-ended", 583 | "operating", 584 | "opportunist", 585 | "opposing", 586 | "opt-in", 587 | "ordinate", 588 | "outdone", 589 | "outlaw", 590 | "outsized", 591 | "overboard", 592 | "overheated", 593 | "oversize", 594 | "overworked", 595 | "oyster", 596 | "paced", 597 | "panting", 598 | "paralyzed", 599 | "paramount", 600 | "parental", 601 | "parted", 602 | "partisan", 603 | "passive", 604 | "pastel", 605 | "patriot", 606 | "peacekeeping", 607 | "pedestrian", 608 | "peevish", 609 | "penal", 610 | "penned", 611 | "pensive", 612 | "perceptual", 613 | "perky", 614 | "permissible", 615 | "pernicious", 616 | "perpetuate", 617 | "perplexed", 618 | "pervasive", 619 | "petrochemical", 620 | "philosophical", 621 | "picturesque", 622 | "pillaged", 623 | "piped", 624 | "piquant", 625 | "pitching", 626 | "plausible", 627 | "pliable", 628 | "plumb", 629 | "politician", 630 | "polygamous", 631 | "poorest", 632 | "portmanteau", 633 | "posed", 634 | "positive", 635 | "possible", 636 | "postpartum", 637 | "prank", 638 | "pre-emptive", 639 | "precocious", 640 | "predicted", 641 | "premium", 642 | "preparatory", 643 | "prerequisite", 644 | "prescient", 645 | "preserved", 646 | "presidential", 647 | "pressed", 648 | "pressurized", 649 | "presumed", 650 | "prewar", 651 | "priced", 652 | "pricier", 653 | "primal", 654 | "primer", 655 | "primetime", 656 | "printed", 657 | "private", 658 | "problem", 659 | "procedural", 660 | "process", 661 | "prodigious", 662 | "professional", 663 | "programmed", 664 | "progressive", 665 | "prolific", 666 | "promising", 667 | "promulgated", 668 | "pronged", 669 | "proportionate", 670 | "protracted", 671 | "pulled", 672 | "pulsed", 673 | "purgatory", 674 | "quick", 675 | "rapid-fire", 676 | "raunchy", 677 | "razed", 678 | "reactive", 679 | "readable", 680 | "realizing", 681 | "recognised", 682 | "recovering", 683 | "recurrent", 684 | "recycled", 685 | "redeemable", 686 | "reflecting", 687 | "regal", 688 | "registering", 689 | "reliable", 690 | "reminiscent", 691 | "remorseless", 692 | "removable", 693 | "renewable", 694 | "repeating", 695 | "repellent", 696 | "reserve", 697 | "resigned", 698 | "respectful", 699 | "rested", 700 | "restrict", 701 | "resultant", 702 | "retaliatory", 703 | "retiring", 704 | "revelatory", 705 | "reverend", 706 | "reversing", 707 | "revolving", 708 | "ridiculous", 709 | "right-hand", 710 | "ringed", 711 | "risque", 712 | "robust", 713 | "roomful", 714 | "rotating", 715 | "roused", 716 | "rubber", 717 | "run-down", 718 | "running", 719 | "runtime", 720 | "rustling", 721 | "safest", 722 | "salient", 723 | "sanctioned", 724 | "saute", 725 | "saved", 726 | "scandalized", 727 | "scarlet", 728 | "scattering", 729 | "sceptical", 730 | "scheming", 731 | "scoundrel", 732 | "scratched", 733 | "scratchy", 734 | "scrolled", 735 | "seated", 736 | "second-best", 737 | "segregated", 738 | "self-taught", 739 | "semiautomatic", 740 | "senior", 741 | "sensed", 742 | "sentient", 743 | "sexier", 744 | "shadowy", 745 | "shaken", 746 | "shaker", 747 | "shameless", 748 | "shaped", 749 | "shiny", 750 | "shipped", 751 | "shivering", 752 | "shoestring", 753 | "short", 754 | "short-lived", 755 | "signed", 756 | "simplest", 757 | "simplistic", 758 | "sizable", 759 | "skeleton", 760 | "skinny", 761 | "skirting", 762 | "skyrocketed", 763 | "slamming", 764 | "slanting", 765 | "slapstick", 766 | "sleek", 767 | "sleepless", 768 | "sleepy", 769 | "slender", 770 | "slimmer", 771 | "smacking", 772 | "smokeless", 773 | "smothered", 774 | "smouldering", 775 | "snuff", 776 | "socialized", 777 | "solid-state", 778 | "sometime", 779 | "sought", 780 | "spanking", 781 | "sparing", 782 | "spattered", 783 | "specialized", 784 | "specific", 785 | "speedy", 786 | "spherical", 787 | "spiky", 788 | "spineless", 789 | "sprung", 790 | "squint", 791 | "stainless", 792 | "standing", 793 | "starlight", 794 | "startled", 795 | "stately", 796 | "statewide", 797 | "stereoscopic", 798 | "sticky", 799 | "stimulant", 800 | "stinky", 801 | "stoked", 802 | "stolen", 803 | "storied", 804 | "strained", 805 | "strapping", 806 | "strengthened", 807 | "stubborn", 808 | "stylized", 809 | "suave", 810 | "subjective", 811 | "subjugated", 812 | "subordinate", 813 | "succeeding", 814 | "suffering", 815 | "summary", 816 | "sunset", 817 | "sunshine", 818 | "supernatural", 819 | "supervisory", 820 | "supply-side", 821 | "surrogate", 822 | "suspended", 823 | "suspenseful", 824 | "swarthy", 825 | "sweating", 826 | "sweeping", 827 | "swinging", 828 | "swooning", 829 | "sympathize", 830 | "synchronized", 831 | "synonymous", 832 | "synthetic", 833 | "tailed", 834 | "tallest", 835 | "tangible", 836 | "tanked", 837 | "tarry", 838 | "technical", 839 | "tectonic", 840 | "telepathic", 841 | "tenderest", 842 | "territorial", 843 | "testimonial", 844 | "theistic", 845 | "thicker", 846 | "threatening", 847 | "tight-lipped", 848 | "timed", 849 | "timely", 850 | "timid", 851 | "torrent", 852 | "totalled", 853 | "tougher", 854 | "traditional", 855 | "transformed", 856 | "trapped", 857 | "traveled", 858 | "traverse", 859 | "treated", 860 | "trial", 861 | "trunk", 862 | "trusting", 863 | "trying", 864 | "twisted", 865 | "two-lane", 866 | "tyrannical", 867 | "unaided", 868 | "unassisted", 869 | "unassuming", 870 | "unattractive", 871 | "uncapped", 872 | "uncomfortable", 873 | "uncontrolled", 874 | "uncooked", 875 | "uncooperative", 876 | "underground", 877 | "undersea", 878 | "undisturbed", 879 | "unearthly", 880 | "uneasy", 881 | "unequal", 882 | "unfazed", 883 | "unfinished", 884 | "unforeseen", 885 | "unforgivable", 886 | "unidentified", 887 | "unimaginative", 888 | "uninspired", 889 | "unintended", 890 | "uninvited", 891 | "universal", 892 | "unmasked", 893 | "unorthodox", 894 | "unparalleled", 895 | "unpleasant", 896 | "unprincipled", 897 | "unread", 898 | "unreasonable", 899 | "unregulated", 900 | "unreliable", 901 | "unremitting", 902 | "unsafe", 903 | "unsanitary", 904 | "unsealed", 905 | "unsuccessful", 906 | "unsupervised", 907 | "untimely", 908 | "unwary", 909 | "unwrapped", 910 | "uppity", 911 | "upstart", 912 | "useless", 913 | "utter", 914 | "valiant", 915 | "valid", 916 | "valued", 917 | "vanilla", 918 | "vaulting", 919 | "vaunted", 920 | "veering", 921 | "vegetative", 922 | "vented", 923 | "verbal", 924 | "verifying", 925 | "veritable", 926 | "versed", 927 | "vinyl", 928 | "virgin", 929 | "visceral", 930 | "visual", 931 | "voluptuous", 932 | "walk-on", 933 | "wanton", 934 | "warlike", 935 | "washed", 936 | "waterproof", 937 | "waved", 938 | "weakest", 939 | "well-bred", 940 | "well-chosen", 941 | "well-informed", 942 | "wetting", 943 | "wheeled", 944 | "whirlwind", 945 | "widen", 946 | "widening", 947 | "willful", 948 | "willing", 949 | "winnable", 950 | "winningest", 951 | "wireless", 952 | "wistful", 953 | "woeful", 954 | "wooded", 955 | "woodland", 956 | "wordless", 957 | "workable", 958 | "worldly", 959 | "worldwide", 960 | "worst-case", 961 | "worsted", 962 | "worthless" 963 | ] -------------------------------------------------------------------------------- /data/grammer/adverb.json: -------------------------------------------------------------------------------- 1 | [ 2 | "abnormally", 3 | "absentmindedly", 4 | "accidentally", 5 | "acidly", 6 | "actually", 7 | "adventurously", 8 | "afterwards", 9 | "almost", 10 | "always", 11 | "angrily", 12 | "annually", 13 | "anxiously", 14 | "arrogantly", 15 | "awkwardly", 16 | "badly", 17 | "bashfully", 18 | "beautifully", 19 | "bitterly", 20 | "bleakly", 21 | "blindly", 22 | "blissfully", 23 | "boastfully", 24 | "boldly", 25 | "bravely", 26 | "briefly", 27 | "brightly", 28 | "briskly", 29 | "broadly", 30 | "busily", 31 | "calmly", 32 | "carefully", 33 | "carelessly", 34 | "cautiously", 35 | "certainly", 36 | "cheerfully", 37 | "clearly", 38 | "cleverly", 39 | "closely", 40 | "coaxingly", 41 | "colorfully", 42 | "commonly", 43 | "continually", 44 | "coolly", 45 | "correctly", 46 | "courageously", 47 | "crossly", 48 | "cruelly", 49 | "curiously", 50 | "daily", 51 | "daintily", 52 | "dearly", 53 | "deceivingly", 54 | "deeply", 55 | "defiantly", 56 | "deliberately", 57 | "delightfully", 58 | "diligently", 59 | "dimly", 60 | "doubtfully", 61 | "dreamily", 62 | "easily", 63 | "elegantly", 64 | "energetically", 65 | "enormously", 66 | "enthusiastically", 67 | "equally", 68 | "especially", 69 | "even", 70 | "evenly", 71 | "eventually", 72 | "exactly", 73 | "excitedly", 74 | "extremely", 75 | "fairly", 76 | "faithfully", 77 | "famously", 78 | "far", 79 | "fast", 80 | "fatally", 81 | "ferociously", 82 | "fervently", 83 | "fiercely", 84 | "fondly", 85 | "foolishly", 86 | "fortunately", 87 | "frankly", 88 | "frantically", 89 | "freely", 90 | "frenetically", 91 | "frightfully", 92 | "fully", 93 | "furiously", 94 | "generally", 95 | "generously", 96 | "gently", 97 | "gladly", 98 | "gleefully", 99 | "gracefully", 100 | "gratefully", 101 | "greatly", 102 | "greedily", 103 | "happily", 104 | "hastily", 105 | "healthily", 106 | "heavily", 107 | "helpfully", 108 | "helplessly", 109 | "highly", 110 | "honestly", 111 | "hopelessly", 112 | "hourly", 113 | "hungrily", 114 | "immediately", 115 | "innocently", 116 | "inquisitively", 117 | "instantly", 118 | "intensely", 119 | "intently", 120 | "interestingly", 121 | "inwardly", 122 | "irritably", 123 | "jaggedly", 124 | "jealously", 125 | "joshingly", 126 | "jovially", 127 | "joyfully", 128 | "joyously", 129 | "jubilantly", 130 | "judgementally", 131 | "justly", 132 | "keenly", 133 | "kiddingly", 134 | "kindheartedly", 135 | "kindly", 136 | "kissingly", 137 | "knavishly", 138 | "knottily", 139 | "knowingly", 140 | "knowledgeably", 141 | "kookily", 142 | "lazily", 143 | "less", 144 | "lightly", 145 | "likely", 146 | "limply", 147 | "lively", 148 | "loftily", 149 | "longingly", 150 | "loosely", 151 | "loudly", 152 | "lovingly", 153 | "loyally", 154 | "madly", 155 | "majestically", 156 | "meaningfully", 157 | "mechanically", 158 | "merrily", 159 | "miserably", 160 | "mockingly", 161 | "monthly", 162 | "more", 163 | "mortally", 164 | "mostly", 165 | "mysteriously", 166 | "naturally", 167 | "nearly", 168 | "neatly", 169 | "needily", 170 | "nervously", 171 | "never", 172 | "nicely", 173 | "noisily", 174 | "not", 175 | "obediently", 176 | "obnoxiously", 177 | "oddly", 178 | "offensively", 179 | "officially", 180 | "often", 181 | "only", 182 | "openly", 183 | "optimistically", 184 | "overconfidently", 185 | "owlishly", 186 | "painfully", 187 | "partially", 188 | "patiently", 189 | "perfectly", 190 | "physically", 191 | "playfully", 192 | "politely", 193 | "poorly", 194 | "positively", 195 | "potentially", 196 | "powerfully", 197 | "promptly", 198 | "properly", 199 | "punctually", 200 | "quaintly", 201 | "quarrelsomely", 202 | "queasily", 203 | "queerly", 204 | "questionably", 205 | "questioningly", 206 | "quicker", 207 | "quickly", 208 | "quietly", 209 | "quirkily", 210 | "quizzically", 211 | "rapidly", 212 | "rarely", 213 | "readily", 214 | "really", 215 | "reassuringly", 216 | "recklessly", 217 | "regularly", 218 | "reluctantly", 219 | "repeatedly", 220 | "reproachfully", 221 | "restfully", 222 | "righteously", 223 | "rightfully", 224 | "rigidly", 225 | "roughly", 226 | "rudely", 227 | "sadly", 228 | "safely", 229 | "scarcely", 230 | "scarily", 231 | "searchingly", 232 | "sedately", 233 | "seemingly", 234 | "seldom", 235 | "selfishly", 236 | "separately", 237 | "seriously", 238 | "shakily", 239 | "sharply", 240 | "sheepishly", 241 | "shrilly", 242 | "shyly", 243 | "silently", 244 | "sleepily", 245 | "slowly", 246 | "smoothly", 247 | "softly", 248 | "solemnly", 249 | "solidly", 250 | "sometimes", 251 | "soon", 252 | "speedily", 253 | "stealthily", 254 | "sternly", 255 | "strictly", 256 | "successfully", 257 | "suddenly", 258 | "surprisingly", 259 | "suspiciously", 260 | "sweetly", 261 | "swiftly", 262 | "sympathetically", 263 | "tenderly", 264 | "tensely", 265 | "terribly", 266 | "thankfully", 267 | "thoroughly", 268 | "thoughtfully", 269 | "tightly", 270 | "tomorrow", 271 | "too", 272 | "tremendously", 273 | "triumphantly", 274 | "truly", 275 | "truthfully", 276 | "ultimately", 277 | "unabashedly", 278 | "unaccountably", 279 | "unbearably", 280 | "unethically", 281 | "unexpectedly", 282 | "unfortunately", 283 | "unimpressively", 284 | "unnaturally", 285 | "unnecessarily", 286 | "upbeat", 287 | "upliftingly", 288 | "upright", 289 | "upside-down", 290 | "upward", 291 | "upwardly", 292 | "urgently", 293 | "usefully", 294 | "uselessly", 295 | "usually", 296 | "utterly", 297 | "vacantly", 298 | "vaguely", 299 | "vainly", 300 | "valiantly", 301 | "vastly", 302 | "verbally", 303 | "very", 304 | "viciously", 305 | "victoriously", 306 | "violently", 307 | "vivaciously", 308 | "voluntarily", 309 | "warmly", 310 | "weakly", 311 | "wearily", 312 | "well", 313 | "wetly", 314 | "wholly", 315 | "wildly", 316 | "willfully", 317 | "wisely", 318 | "woefully", 319 | "wonderfully", 320 | "worriedly", 321 | "wrongly", 322 | "yawningly", 323 | "yearly", 324 | "yearningly", 325 | "yesterday", 326 | "yieldingly", 327 | "youthfully" 328 | ] -------------------------------------------------------------------------------- /data/grammer/index.ts: -------------------------------------------------------------------------------- 1 | import * as Adjective from "./adjective.json"; 2 | import * as Adverb from "./adverb.json"; 3 | import * as Verb from "./verb.json"; 4 | import * as PersonalNoun from "./personal-noun.json"; 5 | 6 | export default { Adjective, Adverb, Verb, PersonalNoun }; 7 | -------------------------------------------------------------------------------- /data/index.ts: -------------------------------------------------------------------------------- 1 | import * as Animal from "./animal/index.js"; 2 | import * as Grammer from "./grammer/index.js"; 3 | import * as Name from "./name/index.js"; 4 | import Place from "./place/index.js"; 5 | 6 | export default { Animal, Grammer, Name, Place }; 7 | -------------------------------------------------------------------------------- /data/name/index.ts: -------------------------------------------------------------------------------- 1 | import * as First from "./first.json"; 2 | import * as Last from "./last.json"; 3 | import * as Middle from "./middle.json"; 4 | 5 | export default { First, Last, Middle }; 6 | -------------------------------------------------------------------------------- /data/place/index.ts: -------------------------------------------------------------------------------- 1 | import * as Place from "./place.json"; 2 | 3 | export default Place; 4 | -------------------------------------------------------------------------------- /dist/index.cjs: -------------------------------------------------------------------------------- 1 | /*! 2 | * uuid-readable v0.0.0 3 | * (c) Debdut Karmakar 4 | * Released under the MIT License. 5 | */ 6 | 7 | 'use strict'; 8 | 9 | Object.defineProperty(exports, '__esModule', { value: true }); 10 | 11 | var UUID = require('uuid'); 12 | 13 | function _interopNamespace(e) { 14 | if (e && e.__esModule) return e; 15 | var n = Object.create(null); 16 | if (e) { 17 | Object.keys(e).forEach(function (k) { 18 | if (k !== 'default') { 19 | var d = Object.getOwnPropertyDescriptor(e, k); 20 | Object.defineProperty(n, k, d.get ? d : { 21 | enumerable: true, 22 | get: function () { return e[k]; } 23 | }); 24 | } 25 | }); 26 | } 27 | n["default"] = e; 28 | return Object.freeze(n); 29 | } 30 | 31 | var UUID__namespace = /*#__PURE__*/_interopNamespace(UUID); 32 | 33 | var First = /*#__PURE__*/Object.freeze({ 34 | __proto__: null 35 | }); 36 | 37 | var Last = /*#__PURE__*/Object.freeze({ 38 | __proto__: null 39 | }); 40 | 41 | var Middle = /*#__PURE__*/Object.freeze({ 42 | __proto__: null 43 | }); 44 | 45 | var Name = { First: First, Last: Last, Middle: Middle }; 46 | 47 | var Adjective$1 = /*#__PURE__*/Object.freeze({ 48 | __proto__: null 49 | }); 50 | 51 | var Adverb = /*#__PURE__*/Object.freeze({ 52 | __proto__: null 53 | }); 54 | 55 | var Verb$1 = /*#__PURE__*/Object.freeze({ 56 | __proto__: null 57 | }); 58 | 59 | var PersonalNoun = /*#__PURE__*/Object.freeze({ 60 | __proto__: null 61 | }); 62 | 63 | var Grammer = { Adjective: Adjective$1, Adverb: Adverb, Verb: Verb$1, PersonalNoun: PersonalNoun }; 64 | 65 | var Place = /*#__PURE__*/Object.freeze({ 66 | __proto__: null 67 | }); 68 | 69 | var Noun = /*#__PURE__*/Object.freeze({ 70 | __proto__: null 71 | }); 72 | 73 | var Adjective = /*#__PURE__*/Object.freeze({ 74 | __proto__: null 75 | }); 76 | 77 | var Verb = /*#__PURE__*/Object.freeze({ 78 | __proto__: null 79 | }); 80 | 81 | var Animal = { Noun: Noun, Adjective: Adjective, Verb: Verb }; 82 | 83 | var caps = function (w) { return w.charAt(0).toUpperCase() + w.slice(1); }; 84 | var deCaps = function (w) { return w.toLowerCase(); }; 85 | var toBits = function (byte, length) { 86 | if (length === void 0) { length = 8; } 87 | var bits = []; 88 | for (var i = 0; i < length; i++) { 89 | bits.unshift(byte % 2); 90 | byte = byte >> 1; 91 | } 92 | return bits; 93 | }; 94 | var toByte = function (bits) { 95 | var byte = 0; 96 | for (var i = 0; i < bits.length; i++) { 97 | var bit = bits[i]; 98 | byte = 2 * byte + bit; 99 | } 100 | return byte; 101 | }; 102 | var _ = { caps: caps, deCaps: deCaps, toBits: toBits, toByte: toByte }; 103 | 104 | var Element = /** @class */ (function () { 105 | function Element(length, generate, inv) { 106 | (this.length = length), (this.generate = generate); 107 | this.inv = inv; 108 | this.bit = Math.trunc(Math.log2(this.length)); 109 | } 110 | Element.prototype.inverse = function (val) { 111 | var byte = this.inv(val); 112 | if (byte === -1) { 113 | return -1; 114 | } 115 | return _.toBits(byte, this.bit); 116 | }; 117 | return Element; 118 | }()); 119 | var Count = function (n) { 120 | return new Element(n, function (i) { return i + 2; }, function (i) { return (i > 1 && i < 34 ? i - 2 : -1); }); 121 | }; 122 | var List = function (list) { 123 | return new Element(list.length, function (i) { return list[i % list.length]; }, function (word) { return list.indexOf(word); }); 124 | }; 125 | var Full = [ 126 | List(Name.First), 127 | List(Name.Middle), 128 | List(Name.Last), 129 | List(Grammer.PersonalNoun), 130 | List(Place), 131 | List(Grammer.Verb), 132 | List(Name.First), 133 | List(Name.Middle), 134 | List(Name.Last), 135 | Count(32), 136 | List(Animal.Adjective), 137 | List(Animal.Noun), 138 | ]; 139 | var LowEntropy$1 = [ 140 | Count(64), 141 | List(Animal.Adjective), 142 | List(Animal.Noun), 143 | List(Grammer.Adverb), 144 | List(Animal.Verb), 145 | ]; 146 | var Schema = { Full: Full, LowEntropy: LowEntropy$1 }; 147 | 148 | var partition$1 = function (parts, bytes) { 149 | var bits = Array.from(bytes) 150 | .map(function (byte) { return _.toBits(byte); }) 151 | .reduce(function (a, c) { return a.concat(c); }, []); 152 | var _bytes = []; 153 | for (var i = 0; i < parts.length; i++) { 154 | var part = parts[i]; 155 | var temp = bits.splice(part); 156 | var part_bits = bits; 157 | bits = temp; 158 | var byte = _.toByte(part_bits); 159 | _bytes.push(byte); 160 | } 161 | return _bytes; 162 | }; 163 | var dePartition = function (bitsList) { 164 | var bits = bitsList.reduce(function (a, c) { return a.concat(c); }, []); 165 | var bytes = []; 166 | for (var i = 0; i < 16; i++) { 167 | var part = bits.slice(8 * i, 8 * (i + 1)); 168 | var byte = _.toByte(part); 169 | bytes.push(byte); 170 | } 171 | return bytes; 172 | }; 173 | var sentence$1 = function (w) { 174 | return "".concat(w[0], " ").concat(w[1], " ").concat(w[2], " the ").concat(_.caps("".concat(w[3])), " of ").concat(w[4], " ").concat(w[5], " ").concat(w[6], " ").concat(w[7], " ").concat(w[8], " and ").concat(w[9], " ").concat(w[10], " ").concat(w[11]); 175 | }; 176 | var deSentence$1 = function (s) { 177 | var rest = s.split(" the "); 178 | var p1 = rest[0].trim().split(" "); 179 | rest = rest[1].split(" of "); 180 | var p2 = rest[0].trim().split(" "); 181 | rest = rest[1].split(" and "); 182 | var p3 = rest[0].trim().split(" "); 183 | var p4 = rest[1].trim().split(" "); 184 | var w = [ 185 | p1[0], 186 | p1[1], 187 | p1[2], 188 | _.deCaps(p2[0] || ""), 189 | p3[0], 190 | p3[1], 191 | p3[2], 192 | p3[3], 193 | p3[4], 194 | parseInt(p4[0] || "", 10), 195 | p4[1], 196 | p4[2], 197 | ]; 198 | return w; 199 | }; 200 | var valid = function () { 201 | return Schema.Full.map(function (s) { return s.bit; }).reduce(function (a, c) { return a + c; }) === 128; 202 | }; 203 | // Parts 204 | // [ 205 | // 12, 11, 14, 13, 13, 206 | // 10, 12, 11, 14, 5, 207 | // 6, 7 208 | // ] 209 | var generate$2 = function (uuid) { 210 | var parts = Schema.Full.map(function (s) { return s.bit; }); 211 | var words = partition$1(parts, uuid).map(function (b, i) { var _a; return (_a = Schema.Full[i]) === null || _a === void 0 ? void 0 : _a.generate(b); }); 212 | return sentence$1(words); 213 | }; 214 | var inverse$1 = function (readable) { 215 | var bits = deSentence$1(readable).map(function (w, i) { var _a; return (_a = Schema.Full[i]) === null || _a === void 0 ? void 0 : _a.inverse(w); }); 216 | // Check -1 in words 217 | if (bits.indexOf(-1) >= 0) { 218 | throw new Error("Not A Valid UUID Readable"); 219 | } 220 | // dePartition 221 | var bytes = dePartition(bits); 222 | return bytes; 223 | }; 224 | var Readable = { generate: generate$2, inverse: inverse$1, valid: valid }; 225 | 226 | var partition = function (parts, bytes) { 227 | var bits = Array.from(bytes) 228 | .map(function (byte) { return _.toBits(byte); }) 229 | .map(function (bits) { return bits.slice(0, 2); }) 230 | .reduce(function (a, c) { return a.concat(c); }, []); 231 | var _bytes = []; 232 | for (var i = 0; i < parts.length; i++) { 233 | var part = parts[i]; 234 | var temp = bits.splice(part); 235 | var part_bits = bits; 236 | bits = temp; 237 | var byte = _.toByte(part_bits); 238 | _bytes.push(byte); 239 | } 240 | return _bytes; 241 | }; 242 | var sentence = function (w) { 243 | return "".concat(w[0], " ").concat(w[1], " ").concat(w[2], " ").concat(w[3], " ").concat(w[4]); 244 | }; 245 | var deSentence = function (s) { 246 | var w = s.trim().split(" "); 247 | return [parseInt(w[0], 10), w[1], w[2], w[3], w[4]]; 248 | }; 249 | var generate$1 = function (uuid) { 250 | var parts = Schema.LowEntropy.map(function (s) { return s.bit; }); 251 | var words = partition(parts, uuid).map(function (b, i) { var _a; return (_a = Schema.LowEntropy[i]) === null || _a === void 0 ? void 0 : _a.generate(b); }); 252 | return sentence(words); 253 | }; 254 | var check$1 = function (readable, uuid) { 255 | var uuidBits = Array.from(uuid) 256 | .map(function (byte) { return _.toBits(byte); }) 257 | .map(function (bits) { return bits.slice(0, 2); }) 258 | .reduce(function (a, c) { return a.concat(c); }, []); 259 | var readableBits = deSentence(readable).map(function (w, i) { var _a; return (_a = Schema.LowEntropy[i]) === null || _a === void 0 ? void 0 : _a.inverse(w); }); 260 | if (readableBits.indexOf(-1) >= 0) { 261 | return false; 262 | } 263 | var readableBitsReduced = readableBits.reduce(function (a, c) { return a.concat(c); }, []); 264 | for (var i = 0; i < uuidBits.length; i++) { 265 | // @ts-ignore 266 | if (uuidBits[i] !== readableBitsReduced[i]) { 267 | return false; 268 | } 269 | } 270 | return true; 271 | }; 272 | var LowEntropy = { generate: generate$1, check: check$1 }; 273 | 274 | // Generate a uuid readable. 275 | var generate = function (uuid) { 276 | if (!uuid) { 277 | var _uuid = []; 278 | UUID__namespace.v4({}, _uuid); 279 | return Readable.generate(_uuid); 280 | } 281 | return Readable.generate(UUID__namespace.parse(uuid)); 282 | }; 283 | // Get uuid back from readable. 284 | var inverse = function (readable) { 285 | return UUID__namespace.stringify(Readable.inverse(readable)); 286 | }; 287 | // Create a low entropy 32 bit uuid readable. 288 | var short = function (uuid) { 289 | return LowEntropy.generate(UUID__namespace.parse(uuid)); 290 | }; 291 | // Check if the low entropy uuid is generated from the given uuid. 292 | var check = function (readable, uuid) { 293 | return LowEntropy.check(readable, UUID__namespace.parse(uuid)); 294 | }; 295 | 296 | exports.check = check; 297 | exports.generate = generate; 298 | exports.inverse = inverse; 299 | exports.short = short; 300 | //# sourceMappingURL=index.cjs.map 301 | -------------------------------------------------------------------------------- /dist/index.cjs.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"index.cjs","sources":["../data/name/index.ts","../data/grammer/index.ts","../data/animal/index.ts","../src/util.ts","../src/schema.ts","../src/readable.ts","../src/low-entropy.ts","../src/index.ts"],"sourcesContent":["import * as First from \"./first.json\";\nimport * as Last from \"./last.json\";\nimport * as Middle from \"./middle.json\";\n\nexport default { First, Last, Middle };\n","import * as Adjective from \"./adjective.json\";\nimport * as Adverb from \"./adverb.json\";\nimport * as Verb from \"./verb.json\";\nimport * as PersonalNoun from \"./personal-noun.json\";\n\nexport default { Adjective, Adverb, Verb, PersonalNoun };\n","import * as Noun from \"./noun.json\";\nimport * as Adjective from \"./adjective.json\";\nimport * as Verb from \"./verb.json\";\n\nexport default { Noun, Adjective, Verb };\n","const caps = (w: string) => w.charAt(0).toUpperCase() + w.slice(1);\nconst deCaps = (w: string) => w.toLowerCase();\n\nconst toBits = (byte: number, length = 8) => {\n const bits = [];\n for (let i = 0; i < length; i++) {\n bits.unshift(byte % 2);\n byte = byte >> 1;\n }\n\n return bits;\n};\n\nconst toByte = (bits: number[]) => {\n let byte = 0;\n for (let i = 0; i < bits.length; i++) {\n const bit = bits[i] as number;\n byte = 2 * byte + bit;\n }\n return byte;\n};\n\nexport default { caps, deCaps, toBits, toByte };\n","import Name from \"../data/name\";\nimport Grammer from \"../data/grammer\";\nimport Place from \"../data/place\";\nimport Animal from \"../data/animal\";\n\nimport _ from \"./util.js\";\n\nclass Element {\n length: number;\n generate: (a: number) => T;\n inv: (a: T) => number;\n bit: number;\n constructor(\n length: number,\n generate: (a: number) => T,\n inv: (a: T) => number\n ) {\n (this.length = length), (this.generate = generate);\n this.inv = inv;\n\n this.bit = Math.trunc(Math.log2(this.length));\n }\n\n inverse(val: T) {\n const byte = this.inv(val);\n if (byte === -1) {\n return -1;\n }\n\n return _.toBits(byte, this.bit);\n }\n}\n\nconst Count = (n: number) =>\n new Element(\n n,\n (i: number) => i + 2,\n (i: number) => (i > 1 && i < 34 ? i - 2 : -1)\n );\n\nconst List = (list: string[]) =>\n new Element(\n list.length,\n (i: number) => list[i % list.length] as string,\n (word: string) => list.indexOf(word)\n );\n\nconst Full = [\n List(Name.First),\n List(Name.Middle),\n List(Name.Last),\n List(Grammer.PersonalNoun),\n List(Place),\n List(Grammer.Verb),\n List(Name.First),\n List(Name.Middle),\n List(Name.Last),\n Count(32),\n List(Animal.Adjective),\n List(Animal.Noun),\n];\n\nconst LowEntropy = [\n Count(64),\n List(Animal.Adjective),\n List(Animal.Noun),\n List(Grammer.Adverb),\n List(Animal.Verb),\n];\n\nexport default { Full, LowEntropy };\n","import Schema from \"./schema\";\nimport _ from \"./util\";\n\nconst partition = (parts: number[], bytes: number[]) => {\n let bits = Array.from(bytes)\n .map((byte) => _.toBits(byte))\n .reduce((a, c) => a.concat(c), []);\n const _bytes = [];\n\n for (let i = 0; i < parts.length; i++) {\n const part = parts[i] as number;\n const temp = bits.splice(part);\n const part_bits = bits;\n bits = temp;\n const byte = _.toByte(part_bits);\n _bytes.push(byte);\n }\n\n return _bytes;\n};\n\nconst dePartition = (bitsList: number[][]) => {\n const bits = bitsList.reduce((a, c) => a.concat(c), []);\n\n const bytes = [];\n\n for (let i = 0; i < 16; i++) {\n const part = bits.slice(8 * i, 8 * (i + 1));\n const byte = _.toByte(part);\n bytes.push(byte);\n }\n\n return bytes;\n};\n\nconst sentence = (w: (string | number | undefined)[]) =>\n `${w[0]} ${w[1]} ${w[2]} the ${_.caps(`${w[3]}`)} of ${w[4]} ${w[5]} ${\n w[6]\n } ${w[7]} ${w[8]} and ${w[9]} ${w[10]} ${w[11]}`;\nconst deSentence = (s: string) => {\n let rest = s.split(\" the \") as string[];\n\n const p1 = (rest[0] as string).trim().split(\" \");\n\n rest = (rest[1] as string).split(\" of \");\n const p2 = (rest[0] as string).trim().split(\" \");\n\n rest = (rest[1] as string).split(\" and \");\n const p3 = (rest[0] as string).trim().split(\" \");\n const p4 = (rest[1] as string).trim().split(\" \");\n\n const w = [\n p1[0],\n p1[1],\n p1[2],\n _.deCaps(p2[0] || \"\"),\n p3[0],\n p3[1],\n p3[2],\n p3[3],\n p3[4],\n parseInt(p4[0] || \"\", 10),\n p4[1],\n p4[2],\n ];\n\n return w;\n};\n\nconst valid = () => {\n return Schema.Full.map((s) => s.bit).reduce((a, c) => a + c) === 128;\n};\n\n// Parts\n// [\n// 12, 11, 14, 13, 13,\n// 10, 12, 11, 14, 5,\n// 6, 7\n// ]\n\nconst generate = (uuid: number[]) => {\n const parts = Schema.Full.map((s) => s.bit);\n const words = partition(parts, uuid).map((b, i) =>\n Schema.Full[i]?.generate(b)\n );\n return sentence(words);\n};\n\nconst inverse = (readable: string) => {\n const bits = deSentence(readable).map((w, i) =>\n Schema.Full[i]?.inverse(w as never)\n );\n\n // Check -1 in words\n if (bits.indexOf(-1) >= 0) {\n throw new Error(\"Not A Valid UUID Readable\");\n }\n\n // dePartition\n const bytes = dePartition(bits as number[][]);\n\n return bytes;\n};\n\nexport default { generate, inverse, valid };\n","import Schema from \"./schema.js\";\nimport _ from \"./util.js\";\n\nconst partition = (parts: number[], bytes: number[]) => {\n let bits = Array.from(bytes)\n .map((byte) => _.toBits(byte))\n .map((bits) => bits.slice(0, 2))\n .reduce((a, c) => a.concat(c), []);\n const _bytes = [];\n\n for (let i = 0; i < parts.length; i++) {\n const part = parts[i] as number;\n const temp = bits.splice(part);\n const part_bits = bits;\n bits = temp;\n const byte = _.toByte(part_bits);\n _bytes.push(byte);\n }\n\n return _bytes;\n};\n\nconst sentence = (w: (string | number | undefined)[]) =>\n `${w[0]} ${w[1]} ${w[2]} ${w[3]} ${w[4]}`;\nconst deSentence = (s: string) => {\n const w = s.trim().split(\" \");\n\n return [parseInt(w[0] as string, 10), w[1], w[2], w[3], w[4]];\n};\n\nconst generate = (uuid: number[]) => {\n const parts = Schema.LowEntropy.map((s) => s.bit);\n\n const words = partition(parts, uuid).map((b, i) =>\n Schema.LowEntropy[i]?.generate(b)\n );\n\n return sentence(words);\n};\n\nconst check = (readable: string, uuid: number[]) => {\n const uuidBits = Array.from(uuid)\n .map((byte) => _.toBits(byte))\n .map((bits) => bits.slice(0, 2))\n .reduce((a, c) => a.concat(c), []);\n\n const readableBits = deSentence(readable).map((w, i) =>\n Schema.LowEntropy[i]?.inverse(w as never)\n );\n\n if (readableBits.indexOf(-1) >= 0) {\n return false;\n }\n\n const readableBitsReduced = readableBits.reduce(\n (a, c) => (a as number[]).concat(c as number[]),\n []\n );\n\n for (let i = 0; i < uuidBits.length; i++) {\n // @ts-ignore\n if (uuidBits[i] !== readableBitsReduced[i]) {\n return false;\n }\n }\n\n return true;\n};\n\nexport default { generate, check };\n","import * as UUID from \"uuid\";\nimport Readable from \"./readable\";\nimport LowEntropy from \"./low-entropy\";\n\n// Generate a uuid readable.\nexport const generate = (uuid: string) => {\n if (!uuid) {\n const _uuid: number[] = [];\n UUID.v4({}, _uuid);\n\n return Readable.generate(_uuid);\n }\n\n return Readable.generate(UUID.parse(uuid) as number[]);\n};\n\n// Get uuid back from readable.\nexport const inverse = (readable: string) => {\n return UUID.stringify(Readable.inverse(readable));\n};\n\n// Create a low entropy 32 bit uuid readable.\nexport const short = (uuid: string) => {\n return LowEntropy.generate(UUID.parse(uuid) as number[]);\n};\n\n// Check if the low entropy uuid is generated from the given uuid.\nexport const check = (readable: string, uuid: string) => {\n return LowEntropy.check(readable, UUID.parse(uuid) as number[]);\n};\n"],"names":["Adjective","Verb","LowEntropy","partition","sentence","deSentence","generate","inverse","check","UUID"],"mappings":"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"} -------------------------------------------------------------------------------- /dist/index.esm.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * uuid-readable v0.0.0 3 | * (c) Debdut Karmakar 4 | * Released under the MIT License. 5 | */ 6 | 7 | import * as UUID from 'uuid'; 8 | 9 | var First = /*#__PURE__*/Object.freeze({ 10 | __proto__: null 11 | }); 12 | 13 | var Last = /*#__PURE__*/Object.freeze({ 14 | __proto__: null 15 | }); 16 | 17 | var Middle = /*#__PURE__*/Object.freeze({ 18 | __proto__: null 19 | }); 20 | 21 | var Name = { First: First, Last: Last, Middle: Middle }; 22 | 23 | var Adjective$1 = /*#__PURE__*/Object.freeze({ 24 | __proto__: null 25 | }); 26 | 27 | var Adverb = /*#__PURE__*/Object.freeze({ 28 | __proto__: null 29 | }); 30 | 31 | var Verb$1 = /*#__PURE__*/Object.freeze({ 32 | __proto__: null 33 | }); 34 | 35 | var PersonalNoun = /*#__PURE__*/Object.freeze({ 36 | __proto__: null 37 | }); 38 | 39 | var Grammer = { Adjective: Adjective$1, Adverb: Adverb, Verb: Verb$1, PersonalNoun: PersonalNoun }; 40 | 41 | var Place = /*#__PURE__*/Object.freeze({ 42 | __proto__: null 43 | }); 44 | 45 | var Noun = /*#__PURE__*/Object.freeze({ 46 | __proto__: null 47 | }); 48 | 49 | var Adjective = /*#__PURE__*/Object.freeze({ 50 | __proto__: null 51 | }); 52 | 53 | var Verb = /*#__PURE__*/Object.freeze({ 54 | __proto__: null 55 | }); 56 | 57 | var Animal = { Noun: Noun, Adjective: Adjective, Verb: Verb }; 58 | 59 | var caps = function (w) { return w.charAt(0).toUpperCase() + w.slice(1); }; 60 | var deCaps = function (w) { return w.toLowerCase(); }; 61 | var toBits = function (byte, length) { 62 | if (length === void 0) { length = 8; } 63 | var bits = []; 64 | for (var i = 0; i < length; i++) { 65 | bits.unshift(byte % 2); 66 | byte = byte >> 1; 67 | } 68 | return bits; 69 | }; 70 | var toByte = function (bits) { 71 | var byte = 0; 72 | for (var i = 0; i < bits.length; i++) { 73 | var bit = bits[i]; 74 | byte = 2 * byte + bit; 75 | } 76 | return byte; 77 | }; 78 | var _ = { caps: caps, deCaps: deCaps, toBits: toBits, toByte: toByte }; 79 | 80 | var Element = /** @class */ (function () { 81 | function Element(length, generate, inv) { 82 | (this.length = length), (this.generate = generate); 83 | this.inv = inv; 84 | this.bit = Math.trunc(Math.log2(this.length)); 85 | } 86 | Element.prototype.inverse = function (val) { 87 | var byte = this.inv(val); 88 | if (byte === -1) { 89 | return -1; 90 | } 91 | return _.toBits(byte, this.bit); 92 | }; 93 | return Element; 94 | }()); 95 | var Count = function (n) { 96 | return new Element(n, function (i) { return i + 2; }, function (i) { return (i > 1 && i < 34 ? i - 2 : -1); }); 97 | }; 98 | var List = function (list) { 99 | return new Element(list.length, function (i) { return list[i % list.length]; }, function (word) { return list.indexOf(word); }); 100 | }; 101 | var Full = [ 102 | List(Name.First), 103 | List(Name.Middle), 104 | List(Name.Last), 105 | List(Grammer.PersonalNoun), 106 | List(Place), 107 | List(Grammer.Verb), 108 | List(Name.First), 109 | List(Name.Middle), 110 | List(Name.Last), 111 | Count(32), 112 | List(Animal.Adjective), 113 | List(Animal.Noun), 114 | ]; 115 | var LowEntropy$1 = [ 116 | Count(64), 117 | List(Animal.Adjective), 118 | List(Animal.Noun), 119 | List(Grammer.Adverb), 120 | List(Animal.Verb), 121 | ]; 122 | var Schema = { Full: Full, LowEntropy: LowEntropy$1 }; 123 | 124 | var partition$1 = function (parts, bytes) { 125 | var bits = Array.from(bytes) 126 | .map(function (byte) { return _.toBits(byte); }) 127 | .reduce(function (a, c) { return a.concat(c); }, []); 128 | var _bytes = []; 129 | for (var i = 0; i < parts.length; i++) { 130 | var part = parts[i]; 131 | var temp = bits.splice(part); 132 | var part_bits = bits; 133 | bits = temp; 134 | var byte = _.toByte(part_bits); 135 | _bytes.push(byte); 136 | } 137 | return _bytes; 138 | }; 139 | var dePartition = function (bitsList) { 140 | var bits = bitsList.reduce(function (a, c) { return a.concat(c); }, []); 141 | var bytes = []; 142 | for (var i = 0; i < 16; i++) { 143 | var part = bits.slice(8 * i, 8 * (i + 1)); 144 | var byte = _.toByte(part); 145 | bytes.push(byte); 146 | } 147 | return bytes; 148 | }; 149 | var sentence$1 = function (w) { 150 | return "".concat(w[0], " ").concat(w[1], " ").concat(w[2], " the ").concat(_.caps("".concat(w[3])), " of ").concat(w[4], " ").concat(w[5], " ").concat(w[6], " ").concat(w[7], " ").concat(w[8], " and ").concat(w[9], " ").concat(w[10], " ").concat(w[11]); 151 | }; 152 | var deSentence$1 = function (s) { 153 | var rest = s.split(" the "); 154 | var p1 = rest[0].trim().split(" "); 155 | rest = rest[1].split(" of "); 156 | var p2 = rest[0].trim().split(" "); 157 | rest = rest[1].split(" and "); 158 | var p3 = rest[0].trim().split(" "); 159 | var p4 = rest[1].trim().split(" "); 160 | var w = [ 161 | p1[0], 162 | p1[1], 163 | p1[2], 164 | _.deCaps(p2[0] || ""), 165 | p3[0], 166 | p3[1], 167 | p3[2], 168 | p3[3], 169 | p3[4], 170 | parseInt(p4[0] || "", 10), 171 | p4[1], 172 | p4[2], 173 | ]; 174 | return w; 175 | }; 176 | var valid = function () { 177 | return Schema.Full.map(function (s) { return s.bit; }).reduce(function (a, c) { return a + c; }) === 128; 178 | }; 179 | // Parts 180 | // [ 181 | // 12, 11, 14, 13, 13, 182 | // 10, 12, 11, 14, 5, 183 | // 6, 7 184 | // ] 185 | var generate$2 = function (uuid) { 186 | var parts = Schema.Full.map(function (s) { return s.bit; }); 187 | var words = partition$1(parts, uuid).map(function (b, i) { var _a; return (_a = Schema.Full[i]) === null || _a === void 0 ? void 0 : _a.generate(b); }); 188 | return sentence$1(words); 189 | }; 190 | var inverse$1 = function (readable) { 191 | var bits = deSentence$1(readable).map(function (w, i) { var _a; return (_a = Schema.Full[i]) === null || _a === void 0 ? void 0 : _a.inverse(w); }); 192 | // Check -1 in words 193 | if (bits.indexOf(-1) >= 0) { 194 | throw new Error("Not A Valid UUID Readable"); 195 | } 196 | // dePartition 197 | var bytes = dePartition(bits); 198 | return bytes; 199 | }; 200 | var Readable = { generate: generate$2, inverse: inverse$1, valid: valid }; 201 | 202 | var partition = function (parts, bytes) { 203 | var bits = Array.from(bytes) 204 | .map(function (byte) { return _.toBits(byte); }) 205 | .map(function (bits) { return bits.slice(0, 2); }) 206 | .reduce(function (a, c) { return a.concat(c); }, []); 207 | var _bytes = []; 208 | for (var i = 0; i < parts.length; i++) { 209 | var part = parts[i]; 210 | var temp = bits.splice(part); 211 | var part_bits = bits; 212 | bits = temp; 213 | var byte = _.toByte(part_bits); 214 | _bytes.push(byte); 215 | } 216 | return _bytes; 217 | }; 218 | var sentence = function (w) { 219 | return "".concat(w[0], " ").concat(w[1], " ").concat(w[2], " ").concat(w[3], " ").concat(w[4]); 220 | }; 221 | var deSentence = function (s) { 222 | var w = s.trim().split(" "); 223 | return [parseInt(w[0], 10), w[1], w[2], w[3], w[4]]; 224 | }; 225 | var generate$1 = function (uuid) { 226 | var parts = Schema.LowEntropy.map(function (s) { return s.bit; }); 227 | var words = partition(parts, uuid).map(function (b, i) { var _a; return (_a = Schema.LowEntropy[i]) === null || _a === void 0 ? void 0 : _a.generate(b); }); 228 | return sentence(words); 229 | }; 230 | var check$1 = function (readable, uuid) { 231 | var uuidBits = Array.from(uuid) 232 | .map(function (byte) { return _.toBits(byte); }) 233 | .map(function (bits) { return bits.slice(0, 2); }) 234 | .reduce(function (a, c) { return a.concat(c); }, []); 235 | var readableBits = deSentence(readable).map(function (w, i) { var _a; return (_a = Schema.LowEntropy[i]) === null || _a === void 0 ? void 0 : _a.inverse(w); }); 236 | if (readableBits.indexOf(-1) >= 0) { 237 | return false; 238 | } 239 | var readableBitsReduced = readableBits.reduce(function (a, c) { return a.concat(c); }, []); 240 | for (var i = 0; i < uuidBits.length; i++) { 241 | // @ts-ignore 242 | if (uuidBits[i] !== readableBitsReduced[i]) { 243 | return false; 244 | } 245 | } 246 | return true; 247 | }; 248 | var LowEntropy = { generate: generate$1, check: check$1 }; 249 | 250 | // Generate a uuid readable. 251 | var generate = function (uuid) { 252 | if (!uuid) { 253 | var _uuid = []; 254 | UUID.v4({}, _uuid); 255 | return Readable.generate(_uuid); 256 | } 257 | return Readable.generate(UUID.parse(uuid)); 258 | }; 259 | // Get uuid back from readable. 260 | var inverse = function (readable) { 261 | return UUID.stringify(Readable.inverse(readable)); 262 | }; 263 | // Create a low entropy 32 bit uuid readable. 264 | var short = function (uuid) { 265 | return LowEntropy.generate(UUID.parse(uuid)); 266 | }; 267 | // Check if the low entropy uuid is generated from the given uuid. 268 | var check = function (readable, uuid) { 269 | return LowEntropy.check(readable, UUID.parse(uuid)); 270 | }; 271 | 272 | export { check, generate, inverse, short }; 273 | //# sourceMappingURL=index.esm.js.map 274 | -------------------------------------------------------------------------------- /dist/index.esm.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"index.esm.js","sources":["../data/name/index.ts","../data/grammer/index.ts","../data/animal/index.ts","../src/util.ts","../src/schema.ts","../src/readable.ts","../src/low-entropy.ts","../src/index.ts"],"sourcesContent":["import * as First from \"./first.json\";\nimport * as Last from \"./last.json\";\nimport * as Middle from \"./middle.json\";\n\nexport default { First, Last, Middle };\n","import * as Adjective from \"./adjective.json\";\nimport * as Adverb from \"./adverb.json\";\nimport * as Verb from \"./verb.json\";\nimport * as PersonalNoun from \"./personal-noun.json\";\n\nexport default { Adjective, Adverb, Verb, PersonalNoun };\n","import * as Noun from \"./noun.json\";\nimport * as Adjective from \"./adjective.json\";\nimport * as Verb from \"./verb.json\";\n\nexport default { Noun, Adjective, Verb };\n","const caps = (w: string) => w.charAt(0).toUpperCase() + w.slice(1);\nconst deCaps = (w: string) => w.toLowerCase();\n\nconst toBits = (byte: number, length = 8) => {\n const bits = [];\n for (let i = 0; i < length; i++) {\n bits.unshift(byte % 2);\n byte = byte >> 1;\n }\n\n return bits;\n};\n\nconst toByte = (bits: number[]) => {\n let byte = 0;\n for (let i = 0; i < bits.length; i++) {\n const bit = bits[i] as number;\n byte = 2 * byte + bit;\n }\n return byte;\n};\n\nexport default { caps, deCaps, toBits, toByte };\n","import Name from \"../data/name\";\nimport Grammer from \"../data/grammer\";\nimport Place from \"../data/place\";\nimport Animal from \"../data/animal\";\n\nimport _ from \"./util.js\";\n\nclass Element {\n length: number;\n generate: (a: number) => T;\n inv: (a: T) => number;\n bit: number;\n constructor(\n length: number,\n generate: (a: number) => T,\n inv: (a: T) => number\n ) {\n (this.length = length), (this.generate = generate);\n this.inv = inv;\n\n this.bit = Math.trunc(Math.log2(this.length));\n }\n\n inverse(val: T) {\n const byte = this.inv(val);\n if (byte === -1) {\n return -1;\n }\n\n return _.toBits(byte, this.bit);\n }\n}\n\nconst Count = (n: number) =>\n new Element(\n n,\n (i: number) => i + 2,\n (i: number) => (i > 1 && i < 34 ? i - 2 : -1)\n );\n\nconst List = (list: string[]) =>\n new Element(\n list.length,\n (i: number) => list[i % list.length] as string,\n (word: string) => list.indexOf(word)\n );\n\nconst Full = [\n List(Name.First),\n List(Name.Middle),\n List(Name.Last),\n List(Grammer.PersonalNoun),\n List(Place),\n List(Grammer.Verb),\n List(Name.First),\n List(Name.Middle),\n List(Name.Last),\n Count(32),\n List(Animal.Adjective),\n List(Animal.Noun),\n];\n\nconst LowEntropy = [\n Count(64),\n List(Animal.Adjective),\n List(Animal.Noun),\n List(Grammer.Adverb),\n List(Animal.Verb),\n];\n\nexport default { Full, LowEntropy };\n","import Schema from \"./schema\";\nimport _ from \"./util\";\n\nconst partition = (parts: number[], bytes: number[]) => {\n let bits = Array.from(bytes)\n .map((byte) => _.toBits(byte))\n .reduce((a, c) => a.concat(c), []);\n const _bytes = [];\n\n for (let i = 0; i < parts.length; i++) {\n const part = parts[i] as number;\n const temp = bits.splice(part);\n const part_bits = bits;\n bits = temp;\n const byte = _.toByte(part_bits);\n _bytes.push(byte);\n }\n\n return _bytes;\n};\n\nconst dePartition = (bitsList: number[][]) => {\n const bits = bitsList.reduce((a, c) => a.concat(c), []);\n\n const bytes = [];\n\n for (let i = 0; i < 16; i++) {\n const part = bits.slice(8 * i, 8 * (i + 1));\n const byte = _.toByte(part);\n bytes.push(byte);\n }\n\n return bytes;\n};\n\nconst sentence = (w: (string | number | undefined)[]) =>\n `${w[0]} ${w[1]} ${w[2]} the ${_.caps(`${w[3]}`)} of ${w[4]} ${w[5]} ${\n w[6]\n } ${w[7]} ${w[8]} and ${w[9]} ${w[10]} ${w[11]}`;\nconst deSentence = (s: string) => {\n let rest = s.split(\" the \") as string[];\n\n const p1 = (rest[0] as string).trim().split(\" \");\n\n rest = (rest[1] as string).split(\" of \");\n const p2 = (rest[0] as string).trim().split(\" \");\n\n rest = (rest[1] as string).split(\" and \");\n const p3 = (rest[0] as string).trim().split(\" \");\n const p4 = (rest[1] as string).trim().split(\" \");\n\n const w = [\n p1[0],\n p1[1],\n p1[2],\n _.deCaps(p2[0] || \"\"),\n p3[0],\n p3[1],\n p3[2],\n p3[3],\n p3[4],\n parseInt(p4[0] || \"\", 10),\n p4[1],\n p4[2],\n ];\n\n return w;\n};\n\nconst valid = () => {\n return Schema.Full.map((s) => s.bit).reduce((a, c) => a + c) === 128;\n};\n\n// Parts\n// [\n// 12, 11, 14, 13, 13,\n// 10, 12, 11, 14, 5,\n// 6, 7\n// ]\n\nconst generate = (uuid: number[]) => {\n const parts = Schema.Full.map((s) => s.bit);\n const words = partition(parts, uuid).map((b, i) =>\n Schema.Full[i]?.generate(b)\n );\n return sentence(words);\n};\n\nconst inverse = (readable: string) => {\n const bits = deSentence(readable).map((w, i) =>\n Schema.Full[i]?.inverse(w as never)\n );\n\n // Check -1 in words\n if (bits.indexOf(-1) >= 0) {\n throw new Error(\"Not A Valid UUID Readable\");\n }\n\n // dePartition\n const bytes = dePartition(bits as number[][]);\n\n return bytes;\n};\n\nexport default { generate, inverse, valid };\n","import Schema from \"./schema.js\";\nimport _ from \"./util.js\";\n\nconst partition = (parts: number[], bytes: number[]) => {\n let bits = Array.from(bytes)\n .map((byte) => _.toBits(byte))\n .map((bits) => bits.slice(0, 2))\n .reduce((a, c) => a.concat(c), []);\n const _bytes = [];\n\n for (let i = 0; i < parts.length; i++) {\n const part = parts[i] as number;\n const temp = bits.splice(part);\n const part_bits = bits;\n bits = temp;\n const byte = _.toByte(part_bits);\n _bytes.push(byte);\n }\n\n return _bytes;\n};\n\nconst sentence = (w: (string | number | undefined)[]) =>\n `${w[0]} ${w[1]} ${w[2]} ${w[3]} ${w[4]}`;\nconst deSentence = (s: string) => {\n const w = s.trim().split(\" \");\n\n return [parseInt(w[0] as string, 10), w[1], w[2], w[3], w[4]];\n};\n\nconst generate = (uuid: number[]) => {\n const parts = Schema.LowEntropy.map((s) => s.bit);\n\n const words = partition(parts, uuid).map((b, i) =>\n Schema.LowEntropy[i]?.generate(b)\n );\n\n return sentence(words);\n};\n\nconst check = (readable: string, uuid: number[]) => {\n const uuidBits = Array.from(uuid)\n .map((byte) => _.toBits(byte))\n .map((bits) => bits.slice(0, 2))\n .reduce((a, c) => a.concat(c), []);\n\n const readableBits = deSentence(readable).map((w, i) =>\n Schema.LowEntropy[i]?.inverse(w as never)\n );\n\n if (readableBits.indexOf(-1) >= 0) {\n return false;\n }\n\n const readableBitsReduced = readableBits.reduce(\n (a, c) => (a as number[]).concat(c as number[]),\n []\n );\n\n for (let i = 0; i < uuidBits.length; i++) {\n // @ts-ignore\n if (uuidBits[i] !== readableBitsReduced[i]) {\n return false;\n }\n }\n\n return true;\n};\n\nexport default { generate, check };\n","import * as UUID from \"uuid\";\nimport Readable from \"./readable\";\nimport LowEntropy from \"./low-entropy\";\n\n// Generate a uuid readable.\nexport const generate = (uuid: string) => {\n if (!uuid) {\n const _uuid: number[] = [];\n UUID.v4({}, _uuid);\n\n return Readable.generate(_uuid);\n }\n\n return Readable.generate(UUID.parse(uuid) as number[]);\n};\n\n// Get uuid back from readable.\nexport const inverse = (readable: string) => {\n return UUID.stringify(Readable.inverse(readable));\n};\n\n// Create a low entropy 32 bit uuid readable.\nexport const short = (uuid: string) => {\n return LowEntropy.generate(UUID.parse(uuid) as number[]);\n};\n\n// Check if the low entropy uuid is generated from the given uuid.\nexport const check = (readable: string, uuid: string) => {\n return LowEntropy.check(readable, UUID.parse(uuid) as number[]);\n};\n"],"names":["Adjective","Verb","LowEntropy","partition","sentence","deSentence","generate","inverse","check"],"mappings":"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"} -------------------------------------------------------------------------------- /dist/index.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * uuid-readable v0.0.0 3 | * (c) Debdut Karmakar 4 | * Released under the MIT License. 5 | */ 6 | 7 | 'use strict'; 8 | 9 | Object.defineProperty(exports, '__esModule', { value: true }); 10 | 11 | var UUID = require('uuid'); 12 | 13 | function _interopNamespace(e) { 14 | if (e && e.__esModule) return e; 15 | var n = Object.create(null); 16 | if (e) { 17 | Object.keys(e).forEach(function (k) { 18 | if (k !== 'default') { 19 | var d = Object.getOwnPropertyDescriptor(e, k); 20 | Object.defineProperty(n, k, d.get ? d : { 21 | enumerable: true, 22 | get: function () { return e[k]; } 23 | }); 24 | } 25 | }); 26 | } 27 | n["default"] = e; 28 | return Object.freeze(n); 29 | } 30 | 31 | var UUID__namespace = /*#__PURE__*/_interopNamespace(UUID); 32 | 33 | var First = /*#__PURE__*/Object.freeze({ 34 | __proto__: null 35 | }); 36 | 37 | var Last = /*#__PURE__*/Object.freeze({ 38 | __proto__: null 39 | }); 40 | 41 | var Middle = /*#__PURE__*/Object.freeze({ 42 | __proto__: null 43 | }); 44 | 45 | var Name = { First: First, Last: Last, Middle: Middle }; 46 | 47 | var Adjective$1 = /*#__PURE__*/Object.freeze({ 48 | __proto__: null 49 | }); 50 | 51 | var Adverb = /*#__PURE__*/Object.freeze({ 52 | __proto__: null 53 | }); 54 | 55 | var Verb$1 = /*#__PURE__*/Object.freeze({ 56 | __proto__: null 57 | }); 58 | 59 | var PersonalNoun = /*#__PURE__*/Object.freeze({ 60 | __proto__: null 61 | }); 62 | 63 | var Grammer = { Adjective: Adjective$1, Adverb: Adverb, Verb: Verb$1, PersonalNoun: PersonalNoun }; 64 | 65 | var Place = /*#__PURE__*/Object.freeze({ 66 | __proto__: null 67 | }); 68 | 69 | var Noun = /*#__PURE__*/Object.freeze({ 70 | __proto__: null 71 | }); 72 | 73 | var Adjective = /*#__PURE__*/Object.freeze({ 74 | __proto__: null 75 | }); 76 | 77 | var Verb = /*#__PURE__*/Object.freeze({ 78 | __proto__: null 79 | }); 80 | 81 | var Animal = { Noun: Noun, Adjective: Adjective, Verb: Verb }; 82 | 83 | var caps = function (w) { return w.charAt(0).toUpperCase() + w.slice(1); }; 84 | var deCaps = function (w) { return w.toLowerCase(); }; 85 | var toBits = function (byte, length) { 86 | if (length === void 0) { length = 8; } 87 | var bits = []; 88 | for (var i = 0; i < length; i++) { 89 | bits.unshift(byte % 2); 90 | byte = byte >> 1; 91 | } 92 | return bits; 93 | }; 94 | var toByte = function (bits) { 95 | var byte = 0; 96 | for (var i = 0; i < bits.length; i++) { 97 | var bit = bits[i]; 98 | byte = 2 * byte + bit; 99 | } 100 | return byte; 101 | }; 102 | var _ = { caps: caps, deCaps: deCaps, toBits: toBits, toByte: toByte }; 103 | 104 | var Element = /** @class */ (function () { 105 | function Element(length, generate, inv) { 106 | (this.length = length), (this.generate = generate); 107 | this.inv = inv; 108 | this.bit = Math.trunc(Math.log2(this.length)); 109 | } 110 | Element.prototype.inverse = function (val) { 111 | var byte = this.inv(val); 112 | if (byte === -1) { 113 | return -1; 114 | } 115 | return _.toBits(byte, this.bit); 116 | }; 117 | return Element; 118 | }()); 119 | var Count = function (n) { 120 | return new Element(n, function (i) { return i + 2; }, function (i) { return (i > 1 && i < 34 ? i - 2 : -1); }); 121 | }; 122 | var List = function (list) { 123 | return new Element(list.length, function (i) { return list[i % list.length]; }, function (word) { return list.indexOf(word); }); 124 | }; 125 | var Full = [ 126 | List(Name.First), 127 | List(Name.Middle), 128 | List(Name.Last), 129 | List(Grammer.PersonalNoun), 130 | List(Place), 131 | List(Grammer.Verb), 132 | List(Name.First), 133 | List(Name.Middle), 134 | List(Name.Last), 135 | Count(32), 136 | List(Animal.Adjective), 137 | List(Animal.Noun), 138 | ]; 139 | var LowEntropy$1 = [ 140 | Count(64), 141 | List(Animal.Adjective), 142 | List(Animal.Noun), 143 | List(Grammer.Adverb), 144 | List(Animal.Verb), 145 | ]; 146 | var Schema = { Full: Full, LowEntropy: LowEntropy$1 }; 147 | 148 | var partition$1 = function (parts, bytes) { 149 | var bits = Array.from(bytes) 150 | .map(function (byte) { return _.toBits(byte); }) 151 | .reduce(function (a, c) { return a.concat(c); }, []); 152 | var _bytes = []; 153 | for (var i = 0; i < parts.length; i++) { 154 | var part = parts[i]; 155 | var temp = bits.splice(part); 156 | var part_bits = bits; 157 | bits = temp; 158 | var byte = _.toByte(part_bits); 159 | _bytes.push(byte); 160 | } 161 | return _bytes; 162 | }; 163 | var dePartition = function (bitsList) { 164 | var bits = bitsList.reduce(function (a, c) { return a.concat(c); }, []); 165 | var bytes = []; 166 | for (var i = 0; i < 16; i++) { 167 | var part = bits.slice(8 * i, 8 * (i + 1)); 168 | var byte = _.toByte(part); 169 | bytes.push(byte); 170 | } 171 | return bytes; 172 | }; 173 | var sentence$1 = function (w) { 174 | return "".concat(w[0], " ").concat(w[1], " ").concat(w[2], " the ").concat(_.caps("".concat(w[3])), " of ").concat(w[4], " ").concat(w[5], " ").concat(w[6], " ").concat(w[7], " ").concat(w[8], " and ").concat(w[9], " ").concat(w[10], " ").concat(w[11]); 175 | }; 176 | var deSentence$1 = function (s) { 177 | var rest = s.split(" the "); 178 | var p1 = rest[0].trim().split(" "); 179 | rest = rest[1].split(" of "); 180 | var p2 = rest[0].trim().split(" "); 181 | rest = rest[1].split(" and "); 182 | var p3 = rest[0].trim().split(" "); 183 | var p4 = rest[1].trim().split(" "); 184 | var w = [ 185 | p1[0], 186 | p1[1], 187 | p1[2], 188 | _.deCaps(p2[0] || ""), 189 | p3[0], 190 | p3[1], 191 | p3[2], 192 | p3[3], 193 | p3[4], 194 | parseInt(p4[0] || "", 10), 195 | p4[1], 196 | p4[2], 197 | ]; 198 | return w; 199 | }; 200 | var valid = function () { 201 | return Schema.Full.map(function (s) { return s.bit; }).reduce(function (a, c) { return a + c; }) === 128; 202 | }; 203 | // Parts 204 | // [ 205 | // 12, 11, 14, 13, 13, 206 | // 10, 12, 11, 14, 5, 207 | // 6, 7 208 | // ] 209 | var generate$2 = function (uuid) { 210 | var parts = Schema.Full.map(function (s) { return s.bit; }); 211 | var words = partition$1(parts, uuid).map(function (b, i) { var _a; return (_a = Schema.Full[i]) === null || _a === void 0 ? void 0 : _a.generate(b); }); 212 | return sentence$1(words); 213 | }; 214 | var inverse$1 = function (readable) { 215 | var bits = deSentence$1(readable).map(function (w, i) { var _a; return (_a = Schema.Full[i]) === null || _a === void 0 ? void 0 : _a.inverse(w); }); 216 | // Check -1 in words 217 | if (bits.indexOf(-1) >= 0) { 218 | throw new Error("Not A Valid UUID Readable"); 219 | } 220 | // dePartition 221 | var bytes = dePartition(bits); 222 | return bytes; 223 | }; 224 | var Readable = { generate: generate$2, inverse: inverse$1, valid: valid }; 225 | 226 | var partition = function (parts, bytes) { 227 | var bits = Array.from(bytes) 228 | .map(function (byte) { return _.toBits(byte); }) 229 | .map(function (bits) { return bits.slice(0, 2); }) 230 | .reduce(function (a, c) { return a.concat(c); }, []); 231 | var _bytes = []; 232 | for (var i = 0; i < parts.length; i++) { 233 | var part = parts[i]; 234 | var temp = bits.splice(part); 235 | var part_bits = bits; 236 | bits = temp; 237 | var byte = _.toByte(part_bits); 238 | _bytes.push(byte); 239 | } 240 | return _bytes; 241 | }; 242 | var sentence = function (w) { 243 | return "".concat(w[0], " ").concat(w[1], " ").concat(w[2], " ").concat(w[3], " ").concat(w[4]); 244 | }; 245 | var deSentence = function (s) { 246 | var w = s.trim().split(" "); 247 | return [parseInt(w[0], 10), w[1], w[2], w[3], w[4]]; 248 | }; 249 | var generate$1 = function (uuid) { 250 | var parts = Schema.LowEntropy.map(function (s) { return s.bit; }); 251 | var words = partition(parts, uuid).map(function (b, i) { var _a; return (_a = Schema.LowEntropy[i]) === null || _a === void 0 ? void 0 : _a.generate(b); }); 252 | return sentence(words); 253 | }; 254 | var check$1 = function (readable, uuid) { 255 | var uuidBits = Array.from(uuid) 256 | .map(function (byte) { return _.toBits(byte); }) 257 | .map(function (bits) { return bits.slice(0, 2); }) 258 | .reduce(function (a, c) { return a.concat(c); }, []); 259 | var readableBits = deSentence(readable).map(function (w, i) { var _a; return (_a = Schema.LowEntropy[i]) === null || _a === void 0 ? void 0 : _a.inverse(w); }); 260 | if (readableBits.indexOf(-1) >= 0) { 261 | return false; 262 | } 263 | var readableBitsReduced = readableBits.reduce(function (a, c) { return a.concat(c); }, []); 264 | for (var i = 0; i < uuidBits.length; i++) { 265 | // @ts-ignore 266 | if (uuidBits[i] !== readableBitsReduced[i]) { 267 | return false; 268 | } 269 | } 270 | return true; 271 | }; 272 | var LowEntropy = { generate: generate$1, check: check$1 }; 273 | 274 | // Generate a uuid readable. 275 | var generate = function (uuid) { 276 | if (!uuid) { 277 | var _uuid = []; 278 | UUID__namespace.v4({}, _uuid); 279 | return Readable.generate(_uuid); 280 | } 281 | return Readable.generate(UUID__namespace.parse(uuid)); 282 | }; 283 | // Get uuid back from readable. 284 | var inverse = function (readable) { 285 | return UUID__namespace.stringify(Readable.inverse(readable)); 286 | }; 287 | // Create a low entropy 32 bit uuid readable. 288 | var short = function (uuid) { 289 | return LowEntropy.generate(UUID__namespace.parse(uuid)); 290 | }; 291 | // Check if the low entropy uuid is generated from the given uuid. 292 | var check = function (readable, uuid) { 293 | return LowEntropy.check(readable, UUID__namespace.parse(uuid)); 294 | }; 295 | 296 | exports.check = check; 297 | exports.generate = generate; 298 | exports.inverse = inverse; 299 | exports.short = short; 300 | //# sourceMappingURL=index.js.map 301 | -------------------------------------------------------------------------------- /dist/index.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"index.js","sources":["../data/name/index.ts","../data/grammer/index.ts","../data/animal/index.ts","../src/util.ts","../src/schema.ts","../src/readable.ts","../src/low-entropy.ts","../src/index.ts"],"sourcesContent":["import * as First from \"./first.json\";\nimport * as Last from \"./last.json\";\nimport * as Middle from \"./middle.json\";\n\nexport default { First, Last, Middle };\n","import * as Adjective from \"./adjective.json\";\nimport * as Adverb from \"./adverb.json\";\nimport * as Verb from \"./verb.json\";\nimport * as PersonalNoun from \"./personal-noun.json\";\n\nexport default { Adjective, Adverb, Verb, PersonalNoun };\n","import * as Noun from \"./noun.json\";\nimport * as Adjective from \"./adjective.json\";\nimport * as Verb from \"./verb.json\";\n\nexport default { Noun, Adjective, Verb };\n","const caps = (w: string) => w.charAt(0).toUpperCase() + w.slice(1);\nconst deCaps = (w: string) => w.toLowerCase();\n\nconst toBits = (byte: number, length = 8) => {\n const bits = [];\n for (let i = 0; i < length; i++) {\n bits.unshift(byte % 2);\n byte = byte >> 1;\n }\n\n return bits;\n};\n\nconst toByte = (bits: number[]) => {\n let byte = 0;\n for (let i = 0; i < bits.length; i++) {\n const bit = bits[i] as number;\n byte = 2 * byte + bit;\n }\n return byte;\n};\n\nexport default { caps, deCaps, toBits, toByte };\n","import Name from \"../data/name\";\nimport Grammer from \"../data/grammer\";\nimport Place from \"../data/place\";\nimport Animal from \"../data/animal\";\n\nimport _ from \"./util.js\";\n\nclass Element {\n length: number;\n generate: (a: number) => T;\n inv: (a: T) => number;\n bit: number;\n constructor(\n length: number,\n generate: (a: number) => T,\n inv: (a: T) => number\n ) {\n (this.length = length), (this.generate = generate);\n this.inv = inv;\n\n this.bit = Math.trunc(Math.log2(this.length));\n }\n\n inverse(val: T) {\n const byte = this.inv(val);\n if (byte === -1) {\n return -1;\n }\n\n return _.toBits(byte, this.bit);\n }\n}\n\nconst Count = (n: number) =>\n new Element(\n n,\n (i: number) => i + 2,\n (i: number) => (i > 1 && i < 34 ? i - 2 : -1)\n );\n\nconst List = (list: string[]) =>\n new Element(\n list.length,\n (i: number) => list[i % list.length] as string,\n (word: string) => list.indexOf(word)\n );\n\nconst Full = [\n List(Name.First),\n List(Name.Middle),\n List(Name.Last),\n List(Grammer.PersonalNoun),\n List(Place),\n List(Grammer.Verb),\n List(Name.First),\n List(Name.Middle),\n List(Name.Last),\n Count(32),\n List(Animal.Adjective),\n List(Animal.Noun),\n];\n\nconst LowEntropy = [\n Count(64),\n List(Animal.Adjective),\n List(Animal.Noun),\n List(Grammer.Adverb),\n List(Animal.Verb),\n];\n\nexport default { Full, LowEntropy };\n","import Schema from \"./schema\";\nimport _ from \"./util\";\n\nconst partition = (parts: number[], bytes: number[]) => {\n let bits = Array.from(bytes)\n .map((byte) => _.toBits(byte))\n .reduce((a, c) => a.concat(c), []);\n const _bytes = [];\n\n for (let i = 0; i < parts.length; i++) {\n const part = parts[i] as number;\n const temp = bits.splice(part);\n const part_bits = bits;\n bits = temp;\n const byte = _.toByte(part_bits);\n _bytes.push(byte);\n }\n\n return _bytes;\n};\n\nconst dePartition = (bitsList: number[][]) => {\n const bits = bitsList.reduce((a, c) => a.concat(c), []);\n\n const bytes = [];\n\n for (let i = 0; i < 16; i++) {\n const part = bits.slice(8 * i, 8 * (i + 1));\n const byte = _.toByte(part);\n bytes.push(byte);\n }\n\n return bytes;\n};\n\nconst sentence = (w: (string | number | undefined)[]) =>\n `${w[0]} ${w[1]} ${w[2]} the ${_.caps(`${w[3]}`)} of ${w[4]} ${w[5]} ${\n w[6]\n } ${w[7]} ${w[8]} and ${w[9]} ${w[10]} ${w[11]}`;\nconst deSentence = (s: string) => {\n let rest = s.split(\" the \") as string[];\n\n const p1 = (rest[0] as string).trim().split(\" \");\n\n rest = (rest[1] as string).split(\" of \");\n const p2 = (rest[0] as string).trim().split(\" \");\n\n rest = (rest[1] as string).split(\" and \");\n const p3 = (rest[0] as string).trim().split(\" \");\n const p4 = (rest[1] as string).trim().split(\" \");\n\n const w = [\n p1[0],\n p1[1],\n p1[2],\n _.deCaps(p2[0] || \"\"),\n p3[0],\n p3[1],\n p3[2],\n p3[3],\n p3[4],\n parseInt(p4[0] || \"\", 10),\n p4[1],\n p4[2],\n ];\n\n return w;\n};\n\nconst valid = () => {\n return Schema.Full.map((s) => s.bit).reduce((a, c) => a + c) === 128;\n};\n\n// Parts\n// [\n// 12, 11, 14, 13, 13,\n// 10, 12, 11, 14, 5,\n// 6, 7\n// ]\n\nconst generate = (uuid: number[]) => {\n const parts = Schema.Full.map((s) => s.bit);\n const words = partition(parts, uuid).map((b, i) =>\n Schema.Full[i]?.generate(b)\n );\n return sentence(words);\n};\n\nconst inverse = (readable: string) => {\n const bits = deSentence(readable).map((w, i) =>\n Schema.Full[i]?.inverse(w as never)\n );\n\n // Check -1 in words\n if (bits.indexOf(-1) >= 0) {\n throw new Error(\"Not A Valid UUID Readable\");\n }\n\n // dePartition\n const bytes = dePartition(bits as number[][]);\n\n return bytes;\n};\n\nexport default { generate, inverse, valid };\n","import Schema from \"./schema.js\";\nimport _ from \"./util.js\";\n\nconst partition = (parts: number[], bytes: number[]) => {\n let bits = Array.from(bytes)\n .map((byte) => _.toBits(byte))\n .map((bits) => bits.slice(0, 2))\n .reduce((a, c) => a.concat(c), []);\n const _bytes = [];\n\n for (let i = 0; i < parts.length; i++) {\n const part = parts[i] as number;\n const temp = bits.splice(part);\n const part_bits = bits;\n bits = temp;\n const byte = _.toByte(part_bits);\n _bytes.push(byte);\n }\n\n return _bytes;\n};\n\nconst sentence = (w: (string | number | undefined)[]) =>\n `${w[0]} ${w[1]} ${w[2]} ${w[3]} ${w[4]}`;\nconst deSentence = (s: string) => {\n const w = s.trim().split(\" \");\n\n return [parseInt(w[0] as string, 10), w[1], w[2], w[3], w[4]];\n};\n\nconst generate = (uuid: number[]) => {\n const parts = Schema.LowEntropy.map((s) => s.bit);\n\n const words = partition(parts, uuid).map((b, i) =>\n Schema.LowEntropy[i]?.generate(b)\n );\n\n return sentence(words);\n};\n\nconst check = (readable: string, uuid: number[]) => {\n const uuidBits = Array.from(uuid)\n .map((byte) => _.toBits(byte))\n .map((bits) => bits.slice(0, 2))\n .reduce((a, c) => a.concat(c), []);\n\n const readableBits = deSentence(readable).map((w, i) =>\n Schema.LowEntropy[i]?.inverse(w as never)\n );\n\n if (readableBits.indexOf(-1) >= 0) {\n return false;\n }\n\n const readableBitsReduced = readableBits.reduce(\n (a, c) => (a as number[]).concat(c as number[]),\n []\n );\n\n for (let i = 0; i < uuidBits.length; i++) {\n // @ts-ignore\n if (uuidBits[i] !== readableBitsReduced[i]) {\n return false;\n }\n }\n\n return true;\n};\n\nexport default { generate, check };\n","import * as UUID from \"uuid\";\nimport Readable from \"./readable\";\nimport LowEntropy from \"./low-entropy\";\n\n// Generate a uuid readable.\nexport const generate = (uuid: string) => {\n if (!uuid) {\n const _uuid: number[] = [];\n UUID.v4({}, _uuid);\n\n return Readable.generate(_uuid);\n }\n\n return Readable.generate(UUID.parse(uuid) as number[]);\n};\n\n// Get uuid back from readable.\nexport const inverse = (readable: string) => {\n return UUID.stringify(Readable.inverse(readable));\n};\n\n// Create a low entropy 32 bit uuid readable.\nexport const short = (uuid: string) => {\n return LowEntropy.generate(UUID.parse(uuid) as number[]);\n};\n\n// Check if the low entropy uuid is generated from the given uuid.\nexport const check = (readable: string, uuid: string) => {\n return LowEntropy.check(readable, UUID.parse(uuid) as number[]);\n};\n"],"names":["Adjective","Verb","LowEntropy","partition","sentence","deSentence","generate","inverse","check","UUID"],"mappings":"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"} -------------------------------------------------------------------------------- /dist/index.mjs: -------------------------------------------------------------------------------- 1 | /*! 2 | * uuid-readable v0.0.0 3 | * (c) Debdut Karmakar 4 | * Released under the MIT License. 5 | */ 6 | 7 | import * as UUID from 'uuid'; 8 | 9 | var First = /*#__PURE__*/Object.freeze({ 10 | __proto__: null 11 | }); 12 | 13 | var Last = /*#__PURE__*/Object.freeze({ 14 | __proto__: null 15 | }); 16 | 17 | var Middle = /*#__PURE__*/Object.freeze({ 18 | __proto__: null 19 | }); 20 | 21 | var Name = { First: First, Last: Last, Middle: Middle }; 22 | 23 | var Adjective$1 = /*#__PURE__*/Object.freeze({ 24 | __proto__: null 25 | }); 26 | 27 | var Adverb = /*#__PURE__*/Object.freeze({ 28 | __proto__: null 29 | }); 30 | 31 | var Verb$1 = /*#__PURE__*/Object.freeze({ 32 | __proto__: null 33 | }); 34 | 35 | var PersonalNoun = /*#__PURE__*/Object.freeze({ 36 | __proto__: null 37 | }); 38 | 39 | var Grammer = { Adjective: Adjective$1, Adverb: Adverb, Verb: Verb$1, PersonalNoun: PersonalNoun }; 40 | 41 | var Place = /*#__PURE__*/Object.freeze({ 42 | __proto__: null 43 | }); 44 | 45 | var Noun = /*#__PURE__*/Object.freeze({ 46 | __proto__: null 47 | }); 48 | 49 | var Adjective = /*#__PURE__*/Object.freeze({ 50 | __proto__: null 51 | }); 52 | 53 | var Verb = /*#__PURE__*/Object.freeze({ 54 | __proto__: null 55 | }); 56 | 57 | var Animal = { Noun: Noun, Adjective: Adjective, Verb: Verb }; 58 | 59 | var caps = function (w) { return w.charAt(0).toUpperCase() + w.slice(1); }; 60 | var deCaps = function (w) { return w.toLowerCase(); }; 61 | var toBits = function (byte, length) { 62 | if (length === void 0) { length = 8; } 63 | var bits = []; 64 | for (var i = 0; i < length; i++) { 65 | bits.unshift(byte % 2); 66 | byte = byte >> 1; 67 | } 68 | return bits; 69 | }; 70 | var toByte = function (bits) { 71 | var byte = 0; 72 | for (var i = 0; i < bits.length; i++) { 73 | var bit = bits[i]; 74 | byte = 2 * byte + bit; 75 | } 76 | return byte; 77 | }; 78 | var _ = { caps: caps, deCaps: deCaps, toBits: toBits, toByte: toByte }; 79 | 80 | var Element = /** @class */ (function () { 81 | function Element(length, generate, inv) { 82 | (this.length = length), (this.generate = generate); 83 | this.inv = inv; 84 | this.bit = Math.trunc(Math.log2(this.length)); 85 | } 86 | Element.prototype.inverse = function (val) { 87 | var byte = this.inv(val); 88 | if (byte === -1) { 89 | return -1; 90 | } 91 | return _.toBits(byte, this.bit); 92 | }; 93 | return Element; 94 | }()); 95 | var Count = function (n) { 96 | return new Element(n, function (i) { return i + 2; }, function (i) { return (i > 1 && i < 34 ? i - 2 : -1); }); 97 | }; 98 | var List = function (list) { 99 | return new Element(list.length, function (i) { return list[i % list.length]; }, function (word) { return list.indexOf(word); }); 100 | }; 101 | var Full = [ 102 | List(Name.First), 103 | List(Name.Middle), 104 | List(Name.Last), 105 | List(Grammer.PersonalNoun), 106 | List(Place), 107 | List(Grammer.Verb), 108 | List(Name.First), 109 | List(Name.Middle), 110 | List(Name.Last), 111 | Count(32), 112 | List(Animal.Adjective), 113 | List(Animal.Noun), 114 | ]; 115 | var LowEntropy$1 = [ 116 | Count(64), 117 | List(Animal.Adjective), 118 | List(Animal.Noun), 119 | List(Grammer.Adverb), 120 | List(Animal.Verb), 121 | ]; 122 | var Schema = { Full: Full, LowEntropy: LowEntropy$1 }; 123 | 124 | var partition$1 = function (parts, bytes) { 125 | var bits = Array.from(bytes) 126 | .map(function (byte) { return _.toBits(byte); }) 127 | .reduce(function (a, c) { return a.concat(c); }, []); 128 | var _bytes = []; 129 | for (var i = 0; i < parts.length; i++) { 130 | var part = parts[i]; 131 | var temp = bits.splice(part); 132 | var part_bits = bits; 133 | bits = temp; 134 | var byte = _.toByte(part_bits); 135 | _bytes.push(byte); 136 | } 137 | return _bytes; 138 | }; 139 | var dePartition = function (bitsList) { 140 | var bits = bitsList.reduce(function (a, c) { return a.concat(c); }, []); 141 | var bytes = []; 142 | for (var i = 0; i < 16; i++) { 143 | var part = bits.slice(8 * i, 8 * (i + 1)); 144 | var byte = _.toByte(part); 145 | bytes.push(byte); 146 | } 147 | return bytes; 148 | }; 149 | var sentence$1 = function (w) { 150 | return "".concat(w[0], " ").concat(w[1], " ").concat(w[2], " the ").concat(_.caps("".concat(w[3])), " of ").concat(w[4], " ").concat(w[5], " ").concat(w[6], " ").concat(w[7], " ").concat(w[8], " and ").concat(w[9], " ").concat(w[10], " ").concat(w[11]); 151 | }; 152 | var deSentence$1 = function (s) { 153 | var rest = s.split(" the "); 154 | var p1 = rest[0].trim().split(" "); 155 | rest = rest[1].split(" of "); 156 | var p2 = rest[0].trim().split(" "); 157 | rest = rest[1].split(" and "); 158 | var p3 = rest[0].trim().split(" "); 159 | var p4 = rest[1].trim().split(" "); 160 | var w = [ 161 | p1[0], 162 | p1[1], 163 | p1[2], 164 | _.deCaps(p2[0] || ""), 165 | p3[0], 166 | p3[1], 167 | p3[2], 168 | p3[3], 169 | p3[4], 170 | parseInt(p4[0] || "", 10), 171 | p4[1], 172 | p4[2], 173 | ]; 174 | return w; 175 | }; 176 | var valid = function () { 177 | return Schema.Full.map(function (s) { return s.bit; }).reduce(function (a, c) { return a + c; }) === 128; 178 | }; 179 | // Parts 180 | // [ 181 | // 12, 11, 14, 13, 13, 182 | // 10, 12, 11, 14, 5, 183 | // 6, 7 184 | // ] 185 | var generate$2 = function (uuid) { 186 | var parts = Schema.Full.map(function (s) { return s.bit; }); 187 | var words = partition$1(parts, uuid).map(function (b, i) { var _a; return (_a = Schema.Full[i]) === null || _a === void 0 ? void 0 : _a.generate(b); }); 188 | return sentence$1(words); 189 | }; 190 | var inverse$1 = function (readable) { 191 | var bits = deSentence$1(readable).map(function (w, i) { var _a; return (_a = Schema.Full[i]) === null || _a === void 0 ? void 0 : _a.inverse(w); }); 192 | // Check -1 in words 193 | if (bits.indexOf(-1) >= 0) { 194 | throw new Error("Not A Valid UUID Readable"); 195 | } 196 | // dePartition 197 | var bytes = dePartition(bits); 198 | return bytes; 199 | }; 200 | var Readable = { generate: generate$2, inverse: inverse$1, valid: valid }; 201 | 202 | var partition = function (parts, bytes) { 203 | var bits = Array.from(bytes) 204 | .map(function (byte) { return _.toBits(byte); }) 205 | .map(function (bits) { return bits.slice(0, 2); }) 206 | .reduce(function (a, c) { return a.concat(c); }, []); 207 | var _bytes = []; 208 | for (var i = 0; i < parts.length; i++) { 209 | var part = parts[i]; 210 | var temp = bits.splice(part); 211 | var part_bits = bits; 212 | bits = temp; 213 | var byte = _.toByte(part_bits); 214 | _bytes.push(byte); 215 | } 216 | return _bytes; 217 | }; 218 | var sentence = function (w) { 219 | return "".concat(w[0], " ").concat(w[1], " ").concat(w[2], " ").concat(w[3], " ").concat(w[4]); 220 | }; 221 | var deSentence = function (s) { 222 | var w = s.trim().split(" "); 223 | return [parseInt(w[0], 10), w[1], w[2], w[3], w[4]]; 224 | }; 225 | var generate$1 = function (uuid) { 226 | var parts = Schema.LowEntropy.map(function (s) { return s.bit; }); 227 | var words = partition(parts, uuid).map(function (b, i) { var _a; return (_a = Schema.LowEntropy[i]) === null || _a === void 0 ? void 0 : _a.generate(b); }); 228 | return sentence(words); 229 | }; 230 | var check$1 = function (readable, uuid) { 231 | var uuidBits = Array.from(uuid) 232 | .map(function (byte) { return _.toBits(byte); }) 233 | .map(function (bits) { return bits.slice(0, 2); }) 234 | .reduce(function (a, c) { return a.concat(c); }, []); 235 | var readableBits = deSentence(readable).map(function (w, i) { var _a; return (_a = Schema.LowEntropy[i]) === null || _a === void 0 ? void 0 : _a.inverse(w); }); 236 | if (readableBits.indexOf(-1) >= 0) { 237 | return false; 238 | } 239 | var readableBitsReduced = readableBits.reduce(function (a, c) { return a.concat(c); }, []); 240 | for (var i = 0; i < uuidBits.length; i++) { 241 | // @ts-ignore 242 | if (uuidBits[i] !== readableBitsReduced[i]) { 243 | return false; 244 | } 245 | } 246 | return true; 247 | }; 248 | var LowEntropy = { generate: generate$1, check: check$1 }; 249 | 250 | // Generate a uuid readable. 251 | var generate = function (uuid) { 252 | if (!uuid) { 253 | var _uuid = []; 254 | UUID.v4({}, _uuid); 255 | return Readable.generate(_uuid); 256 | } 257 | return Readable.generate(UUID.parse(uuid)); 258 | }; 259 | // Get uuid back from readable. 260 | var inverse = function (readable) { 261 | return UUID.stringify(Readable.inverse(readable)); 262 | }; 263 | // Create a low entropy 32 bit uuid readable. 264 | var short = function (uuid) { 265 | return LowEntropy.generate(UUID.parse(uuid)); 266 | }; 267 | // Check if the low entropy uuid is generated from the given uuid. 268 | var check = function (readable, uuid) { 269 | return LowEntropy.check(readable, UUID.parse(uuid)); 270 | }; 271 | 272 | export { check, generate, inverse, short }; 273 | //# sourceMappingURL=index.mjs.map 274 | -------------------------------------------------------------------------------- /dist/index.mjs.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"index.mjs","sources":["../data/name/index.ts","../data/grammer/index.ts","../data/animal/index.ts","../src/util.ts","../src/schema.ts","../src/readable.ts","../src/low-entropy.ts","../src/index.ts"],"sourcesContent":["import * as First from \"./first.json\";\nimport * as Last from \"./last.json\";\nimport * as Middle from \"./middle.json\";\n\nexport default { First, Last, Middle };\n","import * as Adjective from \"./adjective.json\";\nimport * as Adverb from \"./adverb.json\";\nimport * as Verb from \"./verb.json\";\nimport * as PersonalNoun from \"./personal-noun.json\";\n\nexport default { Adjective, Adverb, Verb, PersonalNoun };\n","import * as Noun from \"./noun.json\";\nimport * as Adjective from \"./adjective.json\";\nimport * as Verb from \"./verb.json\";\n\nexport default { Noun, Adjective, Verb };\n","const caps = (w: string) => w.charAt(0).toUpperCase() + w.slice(1);\nconst deCaps = (w: string) => w.toLowerCase();\n\nconst toBits = (byte: number, length = 8) => {\n const bits = [];\n for (let i = 0; i < length; i++) {\n bits.unshift(byte % 2);\n byte = byte >> 1;\n }\n\n return bits;\n};\n\nconst toByte = (bits: number[]) => {\n let byte = 0;\n for (let i = 0; i < bits.length; i++) {\n const bit = bits[i] as number;\n byte = 2 * byte + bit;\n }\n return byte;\n};\n\nexport default { caps, deCaps, toBits, toByte };\n","import Name from \"../data/name\";\nimport Grammer from \"../data/grammer\";\nimport Place from \"../data/place\";\nimport Animal from \"../data/animal\";\n\nimport _ from \"./util.js\";\n\nclass Element {\n length: number;\n generate: (a: number) => T;\n inv: (a: T) => number;\n bit: number;\n constructor(\n length: number,\n generate: (a: number) => T,\n inv: (a: T) => number\n ) {\n (this.length = length), (this.generate = generate);\n this.inv = inv;\n\n this.bit = Math.trunc(Math.log2(this.length));\n }\n\n inverse(val: T) {\n const byte = this.inv(val);\n if (byte === -1) {\n return -1;\n }\n\n return _.toBits(byte, this.bit);\n }\n}\n\nconst Count = (n: number) =>\n new Element(\n n,\n (i: number) => i + 2,\n (i: number) => (i > 1 && i < 34 ? i - 2 : -1)\n );\n\nconst List = (list: string[]) =>\n new Element(\n list.length,\n (i: number) => list[i % list.length] as string,\n (word: string) => list.indexOf(word)\n );\n\nconst Full = [\n List(Name.First),\n List(Name.Middle),\n List(Name.Last),\n List(Grammer.PersonalNoun),\n List(Place),\n List(Grammer.Verb),\n List(Name.First),\n List(Name.Middle),\n List(Name.Last),\n Count(32),\n List(Animal.Adjective),\n List(Animal.Noun),\n];\n\nconst LowEntropy = [\n Count(64),\n List(Animal.Adjective),\n List(Animal.Noun),\n List(Grammer.Adverb),\n List(Animal.Verb),\n];\n\nexport default { Full, LowEntropy };\n","import Schema from \"./schema\";\nimport _ from \"./util\";\n\nconst partition = (parts: number[], bytes: number[]) => {\n let bits = Array.from(bytes)\n .map((byte) => _.toBits(byte))\n .reduce((a, c) => a.concat(c), []);\n const _bytes = [];\n\n for (let i = 0; i < parts.length; i++) {\n const part = parts[i] as number;\n const temp = bits.splice(part);\n const part_bits = bits;\n bits = temp;\n const byte = _.toByte(part_bits);\n _bytes.push(byte);\n }\n\n return _bytes;\n};\n\nconst dePartition = (bitsList: number[][]) => {\n const bits = bitsList.reduce((a, c) => a.concat(c), []);\n\n const bytes = [];\n\n for (let i = 0; i < 16; i++) {\n const part = bits.slice(8 * i, 8 * (i + 1));\n const byte = _.toByte(part);\n bytes.push(byte);\n }\n\n return bytes;\n};\n\nconst sentence = (w: (string | number | undefined)[]) =>\n `${w[0]} ${w[1]} ${w[2]} the ${_.caps(`${w[3]}`)} of ${w[4]} ${w[5]} ${\n w[6]\n } ${w[7]} ${w[8]} and ${w[9]} ${w[10]} ${w[11]}`;\nconst deSentence = (s: string) => {\n let rest = s.split(\" the \") as string[];\n\n const p1 = (rest[0] as string).trim().split(\" \");\n\n rest = (rest[1] as string).split(\" of \");\n const p2 = (rest[0] as string).trim().split(\" \");\n\n rest = (rest[1] as string).split(\" and \");\n const p3 = (rest[0] as string).trim().split(\" \");\n const p4 = (rest[1] as string).trim().split(\" \");\n\n const w = [\n p1[0],\n p1[1],\n p1[2],\n _.deCaps(p2[0] || \"\"),\n p3[0],\n p3[1],\n p3[2],\n p3[3],\n p3[4],\n parseInt(p4[0] || \"\", 10),\n p4[1],\n p4[2],\n ];\n\n return w;\n};\n\nconst valid = () => {\n return Schema.Full.map((s) => s.bit).reduce((a, c) => a + c) === 128;\n};\n\n// Parts\n// [\n// 12, 11, 14, 13, 13,\n// 10, 12, 11, 14, 5,\n// 6, 7\n// ]\n\nconst generate = (uuid: number[]) => {\n const parts = Schema.Full.map((s) => s.bit);\n const words = partition(parts, uuid).map((b, i) =>\n Schema.Full[i]?.generate(b)\n );\n return sentence(words);\n};\n\nconst inverse = (readable: string) => {\n const bits = deSentence(readable).map((w, i) =>\n Schema.Full[i]?.inverse(w as never)\n );\n\n // Check -1 in words\n if (bits.indexOf(-1) >= 0) {\n throw new Error(\"Not A Valid UUID Readable\");\n }\n\n // dePartition\n const bytes = dePartition(bits as number[][]);\n\n return bytes;\n};\n\nexport default { generate, inverse, valid };\n","import Schema from \"./schema.js\";\nimport _ from \"./util.js\";\n\nconst partition = (parts: number[], bytes: number[]) => {\n let bits = Array.from(bytes)\n .map((byte) => _.toBits(byte))\n .map((bits) => bits.slice(0, 2))\n .reduce((a, c) => a.concat(c), []);\n const _bytes = [];\n\n for (let i = 0; i < parts.length; i++) {\n const part = parts[i] as number;\n const temp = bits.splice(part);\n const part_bits = bits;\n bits = temp;\n const byte = _.toByte(part_bits);\n _bytes.push(byte);\n }\n\n return _bytes;\n};\n\nconst sentence = (w: (string | number | undefined)[]) =>\n `${w[0]} ${w[1]} ${w[2]} ${w[3]} ${w[4]}`;\nconst deSentence = (s: string) => {\n const w = s.trim().split(\" \");\n\n return [parseInt(w[0] as string, 10), w[1], w[2], w[3], w[4]];\n};\n\nconst generate = (uuid: number[]) => {\n const parts = Schema.LowEntropy.map((s) => s.bit);\n\n const words = partition(parts, uuid).map((b, i) =>\n Schema.LowEntropy[i]?.generate(b)\n );\n\n return sentence(words);\n};\n\nconst check = (readable: string, uuid: number[]) => {\n const uuidBits = Array.from(uuid)\n .map((byte) => _.toBits(byte))\n .map((bits) => bits.slice(0, 2))\n .reduce((a, c) => a.concat(c), []);\n\n const readableBits = deSentence(readable).map((w, i) =>\n Schema.LowEntropy[i]?.inverse(w as never)\n );\n\n if (readableBits.indexOf(-1) >= 0) {\n return false;\n }\n\n const readableBitsReduced = readableBits.reduce(\n (a, c) => (a as number[]).concat(c as number[]),\n []\n );\n\n for (let i = 0; i < uuidBits.length; i++) {\n // @ts-ignore\n if (uuidBits[i] !== readableBitsReduced[i]) {\n return false;\n }\n }\n\n return true;\n};\n\nexport default { generate, check };\n","import * as UUID from \"uuid\";\nimport Readable from \"./readable\";\nimport LowEntropy from \"./low-entropy\";\n\n// Generate a uuid readable.\nexport const generate = (uuid: string) => {\n if (!uuid) {\n const _uuid: number[] = [];\n UUID.v4({}, _uuid);\n\n return Readable.generate(_uuid);\n }\n\n return Readable.generate(UUID.parse(uuid) as number[]);\n};\n\n// Get uuid back from readable.\nexport const inverse = (readable: string) => {\n return UUID.stringify(Readable.inverse(readable));\n};\n\n// Create a low entropy 32 bit uuid readable.\nexport const short = (uuid: string) => {\n return LowEntropy.generate(UUID.parse(uuid) as number[]);\n};\n\n// Check if the low entropy uuid is generated from the given uuid.\nexport const check = (readable: string, uuid: string) => {\n return LowEntropy.check(readable, UUID.parse(uuid) as number[]);\n};\n"],"names":["Adjective","Verb","LowEntropy","partition","sentence","deSentence","generate","inverse","check"],"mappings":"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"} -------------------------------------------------------------------------------- /dist/index.umd.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * uuid-readable v0.0.0 3 | * (c) Debdut Karmakar 4 | * Released under the MIT License. 5 | */ 6 | 7 | (function (global, factory) { 8 | typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('uuid')) : 9 | typeof define === 'function' && define.amd ? define(['exports', 'uuid'], factory) : 10 | (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.uuidReadable = {}, global.UUID)); 11 | })(this, (function (exports, UUID) { 'use strict'; 12 | 13 | function _interopNamespace(e) { 14 | if (e && e.__esModule) return e; 15 | var n = Object.create(null); 16 | if (e) { 17 | Object.keys(e).forEach(function (k) { 18 | if (k !== 'default') { 19 | var d = Object.getOwnPropertyDescriptor(e, k); 20 | Object.defineProperty(n, k, d.get ? d : { 21 | enumerable: true, 22 | get: function () { return e[k]; } 23 | }); 24 | } 25 | }); 26 | } 27 | n["default"] = e; 28 | return Object.freeze(n); 29 | } 30 | 31 | var UUID__namespace = /*#__PURE__*/_interopNamespace(UUID); 32 | 33 | var First = /*#__PURE__*/Object.freeze({ 34 | __proto__: null 35 | }); 36 | 37 | var Last = /*#__PURE__*/Object.freeze({ 38 | __proto__: null 39 | }); 40 | 41 | var Middle = /*#__PURE__*/Object.freeze({ 42 | __proto__: null 43 | }); 44 | 45 | var Name = { First: First, Last: Last, Middle: Middle }; 46 | 47 | var Adjective$1 = /*#__PURE__*/Object.freeze({ 48 | __proto__: null 49 | }); 50 | 51 | var Adverb = /*#__PURE__*/Object.freeze({ 52 | __proto__: null 53 | }); 54 | 55 | var Verb$1 = /*#__PURE__*/Object.freeze({ 56 | __proto__: null 57 | }); 58 | 59 | var PersonalNoun = /*#__PURE__*/Object.freeze({ 60 | __proto__: null 61 | }); 62 | 63 | var Grammer = { Adjective: Adjective$1, Adverb: Adverb, Verb: Verb$1, PersonalNoun: PersonalNoun }; 64 | 65 | var Place = /*#__PURE__*/Object.freeze({ 66 | __proto__: null 67 | }); 68 | 69 | var Noun = /*#__PURE__*/Object.freeze({ 70 | __proto__: null 71 | }); 72 | 73 | var Adjective = /*#__PURE__*/Object.freeze({ 74 | __proto__: null 75 | }); 76 | 77 | var Verb = /*#__PURE__*/Object.freeze({ 78 | __proto__: null 79 | }); 80 | 81 | var Animal = { Noun: Noun, Adjective: Adjective, Verb: Verb }; 82 | 83 | var caps = function (w) { return w.charAt(0).toUpperCase() + w.slice(1); }; 84 | var deCaps = function (w) { return w.toLowerCase(); }; 85 | var toBits = function (byte, length) { 86 | if (length === void 0) { length = 8; } 87 | var bits = []; 88 | for (var i = 0; i < length; i++) { 89 | bits.unshift(byte % 2); 90 | byte = byte >> 1; 91 | } 92 | return bits; 93 | }; 94 | var toByte = function (bits) { 95 | var byte = 0; 96 | for (var i = 0; i < bits.length; i++) { 97 | var bit = bits[i]; 98 | byte = 2 * byte + bit; 99 | } 100 | return byte; 101 | }; 102 | var _ = { caps: caps, deCaps: deCaps, toBits: toBits, toByte: toByte }; 103 | 104 | var Element = /** @class */ (function () { 105 | function Element(length, generate, inv) { 106 | (this.length = length), (this.generate = generate); 107 | this.inv = inv; 108 | this.bit = Math.trunc(Math.log2(this.length)); 109 | } 110 | Element.prototype.inverse = function (val) { 111 | var byte = this.inv(val); 112 | if (byte === -1) { 113 | return -1; 114 | } 115 | return _.toBits(byte, this.bit); 116 | }; 117 | return Element; 118 | }()); 119 | var Count = function (n) { 120 | return new Element(n, function (i) { return i + 2; }, function (i) { return (i > 1 && i < 34 ? i - 2 : -1); }); 121 | }; 122 | var List = function (list) { 123 | return new Element(list.length, function (i) { return list[i % list.length]; }, function (word) { return list.indexOf(word); }); 124 | }; 125 | var Full = [ 126 | List(Name.First), 127 | List(Name.Middle), 128 | List(Name.Last), 129 | List(Grammer.PersonalNoun), 130 | List(Place), 131 | List(Grammer.Verb), 132 | List(Name.First), 133 | List(Name.Middle), 134 | List(Name.Last), 135 | Count(32), 136 | List(Animal.Adjective), 137 | List(Animal.Noun), 138 | ]; 139 | var LowEntropy$1 = [ 140 | Count(64), 141 | List(Animal.Adjective), 142 | List(Animal.Noun), 143 | List(Grammer.Adverb), 144 | List(Animal.Verb), 145 | ]; 146 | var Schema = { Full: Full, LowEntropy: LowEntropy$1 }; 147 | 148 | var partition$1 = function (parts, bytes) { 149 | var bits = Array.from(bytes) 150 | .map(function (byte) { return _.toBits(byte); }) 151 | .reduce(function (a, c) { return a.concat(c); }, []); 152 | var _bytes = []; 153 | for (var i = 0; i < parts.length; i++) { 154 | var part = parts[i]; 155 | var temp = bits.splice(part); 156 | var part_bits = bits; 157 | bits = temp; 158 | var byte = _.toByte(part_bits); 159 | _bytes.push(byte); 160 | } 161 | return _bytes; 162 | }; 163 | var dePartition = function (bitsList) { 164 | var bits = bitsList.reduce(function (a, c) { return a.concat(c); }, []); 165 | var bytes = []; 166 | for (var i = 0; i < 16; i++) { 167 | var part = bits.slice(8 * i, 8 * (i + 1)); 168 | var byte = _.toByte(part); 169 | bytes.push(byte); 170 | } 171 | return bytes; 172 | }; 173 | var sentence$1 = function (w) { 174 | return "".concat(w[0], " ").concat(w[1], " ").concat(w[2], " the ").concat(_.caps("".concat(w[3])), " of ").concat(w[4], " ").concat(w[5], " ").concat(w[6], " ").concat(w[7], " ").concat(w[8], " and ").concat(w[9], " ").concat(w[10], " ").concat(w[11]); 175 | }; 176 | var deSentence$1 = function (s) { 177 | var rest = s.split(" the "); 178 | var p1 = rest[0].trim().split(" "); 179 | rest = rest[1].split(" of "); 180 | var p2 = rest[0].trim().split(" "); 181 | rest = rest[1].split(" and "); 182 | var p3 = rest[0].trim().split(" "); 183 | var p4 = rest[1].trim().split(" "); 184 | var w = [ 185 | p1[0], 186 | p1[1], 187 | p1[2], 188 | _.deCaps(p2[0] || ""), 189 | p3[0], 190 | p3[1], 191 | p3[2], 192 | p3[3], 193 | p3[4], 194 | parseInt(p4[0] || "", 10), 195 | p4[1], 196 | p4[2], 197 | ]; 198 | return w; 199 | }; 200 | var valid = function () { 201 | return Schema.Full.map(function (s) { return s.bit; }).reduce(function (a, c) { return a + c; }) === 128; 202 | }; 203 | // Parts 204 | // [ 205 | // 12, 11, 14, 13, 13, 206 | // 10, 12, 11, 14, 5, 207 | // 6, 7 208 | // ] 209 | var generate$2 = function (uuid) { 210 | var parts = Schema.Full.map(function (s) { return s.bit; }); 211 | var words = partition$1(parts, uuid).map(function (b, i) { var _a; return (_a = Schema.Full[i]) === null || _a === void 0 ? void 0 : _a.generate(b); }); 212 | return sentence$1(words); 213 | }; 214 | var inverse$1 = function (readable) { 215 | var bits = deSentence$1(readable).map(function (w, i) { var _a; return (_a = Schema.Full[i]) === null || _a === void 0 ? void 0 : _a.inverse(w); }); 216 | // Check -1 in words 217 | if (bits.indexOf(-1) >= 0) { 218 | throw new Error("Not A Valid UUID Readable"); 219 | } 220 | // dePartition 221 | var bytes = dePartition(bits); 222 | return bytes; 223 | }; 224 | var Readable = { generate: generate$2, inverse: inverse$1, valid: valid }; 225 | 226 | var partition = function (parts, bytes) { 227 | var bits = Array.from(bytes) 228 | .map(function (byte) { return _.toBits(byte); }) 229 | .map(function (bits) { return bits.slice(0, 2); }) 230 | .reduce(function (a, c) { return a.concat(c); }, []); 231 | var _bytes = []; 232 | for (var i = 0; i < parts.length; i++) { 233 | var part = parts[i]; 234 | var temp = bits.splice(part); 235 | var part_bits = bits; 236 | bits = temp; 237 | var byte = _.toByte(part_bits); 238 | _bytes.push(byte); 239 | } 240 | return _bytes; 241 | }; 242 | var sentence = function (w) { 243 | return "".concat(w[0], " ").concat(w[1], " ").concat(w[2], " ").concat(w[3], " ").concat(w[4]); 244 | }; 245 | var deSentence = function (s) { 246 | var w = s.trim().split(" "); 247 | return [parseInt(w[0], 10), w[1], w[2], w[3], w[4]]; 248 | }; 249 | var generate$1 = function (uuid) { 250 | var parts = Schema.LowEntropy.map(function (s) { return s.bit; }); 251 | var words = partition(parts, uuid).map(function (b, i) { var _a; return (_a = Schema.LowEntropy[i]) === null || _a === void 0 ? void 0 : _a.generate(b); }); 252 | return sentence(words); 253 | }; 254 | var check$1 = function (readable, uuid) { 255 | var uuidBits = Array.from(uuid) 256 | .map(function (byte) { return _.toBits(byte); }) 257 | .map(function (bits) { return bits.slice(0, 2); }) 258 | .reduce(function (a, c) { return a.concat(c); }, []); 259 | var readableBits = deSentence(readable).map(function (w, i) { var _a; return (_a = Schema.LowEntropy[i]) === null || _a === void 0 ? void 0 : _a.inverse(w); }); 260 | if (readableBits.indexOf(-1) >= 0) { 261 | return false; 262 | } 263 | var readableBitsReduced = readableBits.reduce(function (a, c) { return a.concat(c); }, []); 264 | for (var i = 0; i < uuidBits.length; i++) { 265 | // @ts-ignore 266 | if (uuidBits[i] !== readableBitsReduced[i]) { 267 | return false; 268 | } 269 | } 270 | return true; 271 | }; 272 | var LowEntropy = { generate: generate$1, check: check$1 }; 273 | 274 | // Generate a uuid readable. 275 | var generate = function (uuid) { 276 | if (!uuid) { 277 | var _uuid = []; 278 | UUID__namespace.v4({}, _uuid); 279 | return Readable.generate(_uuid); 280 | } 281 | return Readable.generate(UUID__namespace.parse(uuid)); 282 | }; 283 | // Get uuid back from readable. 284 | var inverse = function (readable) { 285 | return UUID__namespace.stringify(Readable.inverse(readable)); 286 | }; 287 | // Create a low entropy 32 bit uuid readable. 288 | var short = function (uuid) { 289 | return LowEntropy.generate(UUID__namespace.parse(uuid)); 290 | }; 291 | // Check if the low entropy uuid is generated from the given uuid. 292 | var check = function (readable, uuid) { 293 | return LowEntropy.check(readable, UUID__namespace.parse(uuid)); 294 | }; 295 | 296 | exports.check = check; 297 | exports.generate = generate; 298 | exports.inverse = inverse; 299 | exports.short = short; 300 | 301 | Object.defineProperty(exports, '__esModule', { value: true }); 302 | 303 | })); 304 | //# sourceMappingURL=index.umd.js.map 305 | -------------------------------------------------------------------------------- /dist/index.umd.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"index.umd.js","sources":["../data/name/index.ts","../data/grammer/index.ts","../data/animal/index.ts","../src/util.ts","../src/schema.ts","../src/readable.ts","../src/low-entropy.ts","../src/index.ts"],"sourcesContent":["import * as First from \"./first.json\";\nimport * as Last from \"./last.json\";\nimport * as Middle from \"./middle.json\";\n\nexport default { First, Last, Middle };\n","import * as Adjective from \"./adjective.json\";\nimport * as Adverb from \"./adverb.json\";\nimport * as Verb from \"./verb.json\";\nimport * as PersonalNoun from \"./personal-noun.json\";\n\nexport default { Adjective, Adverb, Verb, PersonalNoun };\n","import * as Noun from \"./noun.json\";\nimport * as Adjective from \"./adjective.json\";\nimport * as Verb from \"./verb.json\";\n\nexport default { Noun, Adjective, Verb };\n","const caps = (w: string) => w.charAt(0).toUpperCase() + w.slice(1);\nconst deCaps = (w: string) => w.toLowerCase();\n\nconst toBits = (byte: number, length = 8) => {\n const bits = [];\n for (let i = 0; i < length; i++) {\n bits.unshift(byte % 2);\n byte = byte >> 1;\n }\n\n return bits;\n};\n\nconst toByte = (bits: number[]) => {\n let byte = 0;\n for (let i = 0; i < bits.length; i++) {\n const bit = bits[i] as number;\n byte = 2 * byte + bit;\n }\n return byte;\n};\n\nexport default { caps, deCaps, toBits, toByte };\n","import Name from \"../data/name\";\nimport Grammer from \"../data/grammer\";\nimport Place from \"../data/place\";\nimport Animal from \"../data/animal\";\n\nimport _ from \"./util.js\";\n\nclass Element {\n length: number;\n generate: (a: number) => T;\n inv: (a: T) => number;\n bit: number;\n constructor(\n length: number,\n generate: (a: number) => T,\n inv: (a: T) => number\n ) {\n (this.length = length), (this.generate = generate);\n this.inv = inv;\n\n this.bit = Math.trunc(Math.log2(this.length));\n }\n\n inverse(val: T) {\n const byte = this.inv(val);\n if (byte === -1) {\n return -1;\n }\n\n return _.toBits(byte, this.bit);\n }\n}\n\nconst Count = (n: number) =>\n new Element(\n n,\n (i: number) => i + 2,\n (i: number) => (i > 1 && i < 34 ? i - 2 : -1)\n );\n\nconst List = (list: string[]) =>\n new Element(\n list.length,\n (i: number) => list[i % list.length] as string,\n (word: string) => list.indexOf(word)\n );\n\nconst Full = [\n List(Name.First),\n List(Name.Middle),\n List(Name.Last),\n List(Grammer.PersonalNoun),\n List(Place),\n List(Grammer.Verb),\n List(Name.First),\n List(Name.Middle),\n List(Name.Last),\n Count(32),\n List(Animal.Adjective),\n List(Animal.Noun),\n];\n\nconst LowEntropy = [\n Count(64),\n List(Animal.Adjective),\n List(Animal.Noun),\n List(Grammer.Adverb),\n List(Animal.Verb),\n];\n\nexport default { Full, LowEntropy };\n","import Schema from \"./schema\";\nimport _ from \"./util\";\n\nconst partition = (parts: number[], bytes: number[]) => {\n let bits = Array.from(bytes)\n .map((byte) => _.toBits(byte))\n .reduce((a, c) => a.concat(c), []);\n const _bytes = [];\n\n for (let i = 0; i < parts.length; i++) {\n const part = parts[i] as number;\n const temp = bits.splice(part);\n const part_bits = bits;\n bits = temp;\n const byte = _.toByte(part_bits);\n _bytes.push(byte);\n }\n\n return _bytes;\n};\n\nconst dePartition = (bitsList: number[][]) => {\n const bits = bitsList.reduce((a, c) => a.concat(c), []);\n\n const bytes = [];\n\n for (let i = 0; i < 16; i++) {\n const part = bits.slice(8 * i, 8 * (i + 1));\n const byte = _.toByte(part);\n bytes.push(byte);\n }\n\n return bytes;\n};\n\nconst sentence = (w: (string | number | undefined)[]) =>\n `${w[0]} ${w[1]} ${w[2]} the ${_.caps(`${w[3]}`)} of ${w[4]} ${w[5]} ${\n w[6]\n } ${w[7]} ${w[8]} and ${w[9]} ${w[10]} ${w[11]}`;\nconst deSentence = (s: string) => {\n let rest = s.split(\" the \") as string[];\n\n const p1 = (rest[0] as string).trim().split(\" \");\n\n rest = (rest[1] as string).split(\" of \");\n const p2 = (rest[0] as string).trim().split(\" \");\n\n rest = (rest[1] as string).split(\" and \");\n const p3 = (rest[0] as string).trim().split(\" \");\n const p4 = (rest[1] as string).trim().split(\" \");\n\n const w = [\n p1[0],\n p1[1],\n p1[2],\n _.deCaps(p2[0] || \"\"),\n p3[0],\n p3[1],\n p3[2],\n p3[3],\n p3[4],\n parseInt(p4[0] || \"\", 10),\n p4[1],\n p4[2],\n ];\n\n return w;\n};\n\nconst valid = () => {\n return Schema.Full.map((s) => s.bit).reduce((a, c) => a + c) === 128;\n};\n\n// Parts\n// [\n// 12, 11, 14, 13, 13,\n// 10, 12, 11, 14, 5,\n// 6, 7\n// ]\n\nconst generate = (uuid: number[]) => {\n const parts = Schema.Full.map((s) => s.bit);\n const words = partition(parts, uuid).map((b, i) =>\n Schema.Full[i]?.generate(b)\n );\n return sentence(words);\n};\n\nconst inverse = (readable: string) => {\n const bits = deSentence(readable).map((w, i) =>\n Schema.Full[i]?.inverse(w as never)\n );\n\n // Check -1 in words\n if (bits.indexOf(-1) >= 0) {\n throw new Error(\"Not A Valid UUID Readable\");\n }\n\n // dePartition\n const bytes = dePartition(bits as number[][]);\n\n return bytes;\n};\n\nexport default { generate, inverse, valid };\n","import Schema from \"./schema.js\";\nimport _ from \"./util.js\";\n\nconst partition = (parts: number[], bytes: number[]) => {\n let bits = Array.from(bytes)\n .map((byte) => _.toBits(byte))\n .map((bits) => bits.slice(0, 2))\n .reduce((a, c) => a.concat(c), []);\n const _bytes = [];\n\n for (let i = 0; i < parts.length; i++) {\n const part = parts[i] as number;\n const temp = bits.splice(part);\n const part_bits = bits;\n bits = temp;\n const byte = _.toByte(part_bits);\n _bytes.push(byte);\n }\n\n return _bytes;\n};\n\nconst sentence = (w: (string | number | undefined)[]) =>\n `${w[0]} ${w[1]} ${w[2]} ${w[3]} ${w[4]}`;\nconst deSentence = (s: string) => {\n const w = s.trim().split(\" \");\n\n return [parseInt(w[0] as string, 10), w[1], w[2], w[3], w[4]];\n};\n\nconst generate = (uuid: number[]) => {\n const parts = Schema.LowEntropy.map((s) => s.bit);\n\n const words = partition(parts, uuid).map((b, i) =>\n Schema.LowEntropy[i]?.generate(b)\n );\n\n return sentence(words);\n};\n\nconst check = (readable: string, uuid: number[]) => {\n const uuidBits = Array.from(uuid)\n .map((byte) => _.toBits(byte))\n .map((bits) => bits.slice(0, 2))\n .reduce((a, c) => a.concat(c), []);\n\n const readableBits = deSentence(readable).map((w, i) =>\n Schema.LowEntropy[i]?.inverse(w as never)\n );\n\n if (readableBits.indexOf(-1) >= 0) {\n return false;\n }\n\n const readableBitsReduced = readableBits.reduce(\n (a, c) => (a as number[]).concat(c as number[]),\n []\n );\n\n for (let i = 0; i < uuidBits.length; i++) {\n // @ts-ignore\n if (uuidBits[i] !== readableBitsReduced[i]) {\n return false;\n }\n }\n\n return true;\n};\n\nexport default { generate, check };\n","import * as UUID from \"uuid\";\nimport Readable from \"./readable\";\nimport LowEntropy from \"./low-entropy\";\n\n// Generate a uuid readable.\nexport const generate = (uuid: string) => {\n if (!uuid) {\n const _uuid: number[] = [];\n UUID.v4({}, _uuid);\n\n return Readable.generate(_uuid);\n }\n\n return Readable.generate(UUID.parse(uuid) as number[]);\n};\n\n// Get uuid back from readable.\nexport const inverse = (readable: string) => {\n return UUID.stringify(Readable.inverse(readable));\n};\n\n// Create a low entropy 32 bit uuid readable.\nexport const short = (uuid: string) => {\n return LowEntropy.generate(UUID.parse(uuid) as number[]);\n};\n\n// Check if the low entropy uuid is generated from the given uuid.\nexport const check = (readable: string, uuid: string) => {\n return LowEntropy.check(readable, UUID.parse(uuid) as number[]);\n};\n"],"names":["Adjective","Verb","LowEntropy","partition","sentence","deSentence","generate","inverse","check","UUID"],"mappings":"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"} -------------------------------------------------------------------------------- /dist/index.umd.min.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * uuid-readable v0.0.0 3 | * (c) Debdut Karmakar 4 | * Released under the MIT License. 5 | */ 6 | !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("uuid")):"function"==typeof define&&define.amd?define(["exports","uuid"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).uuidReadable={},e.UUID)}(this,(function(e,t){"use strict";function n(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach((function(n){if("default"!==n){var r=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(t,n,r.get?r:{enumerable:!0,get:function(){return e[n]}})}})),t.default=e,Object.freeze(t)}var r=n(t),o={First:Object.freeze({__proto__:null}),Last:Object.freeze({__proto__:null}),Middle:Object.freeze({__proto__:null})},u={Adjective:Object.freeze({__proto__:null}),Adverb:Object.freeze({__proto__:null}),Verb:Object.freeze({__proto__:null}),PersonalNoun:Object.freeze({__proto__:null})},c=Object.freeze({__proto__:null}),i={Noun:Object.freeze({__proto__:null}),Adjective:Object.freeze({__proto__:null}),Verb:Object.freeze({__proto__:null})},a=function(e){return e.charAt(0).toUpperCase()+e.slice(1)},f=function(e){return e.toLowerCase()},l=function(e,t){void 0===t&&(t=8);for(var n=[],r=0;r>=1;return n},p=function(e){for(var t=0,n=0;n1&&e<34?e-2:-1}))},v=function(e){return new s(e.length,(function(t){return e[t%e.length]}),(function(t){return e.indexOf(t)}))},_={Full:[v(o.First),v(o.Middle),v(o.Last),v(u.PersonalNoun),v(c),v(u.Verb),v(o.First),v(o.Middle),v(o.Last),d(32),v(i.Adjective),v(i.Noun)],LowEntropy:[d(64),v(i.Adjective),v(i.Noun),v(u.Adverb),v(i.Verb)]},b=function(e){var t,n=function(e,t){for(var n=Array.from(t).map((function(e){return l(e)})).reduce((function(e,t){return e.concat(t)}),[]),r=[],o=0;o=0)throw new Error("Not A Valid UUID Readable");var a=function(e){for(var t=e.reduce((function(e,t){return e.concat(t)}),[]),n=[],r=0;r<16;r++){var o=t.slice(8*r,8*(r+1)),u=p(o);n.push(u)}return n}(i);return a},j=function(e){var t,n=function(e,t){for(var n=Array.from(t).map((function(e){return l(e)})).map((function(e){return e.slice(0,2)})).reduce((function(e,t){return e.concat(t)}),[]),r=[],o=0;o=0)return!1;for(var c=u.reduce((function(e,t){return e.concat(t)}),[]),i=0;i w.charAt(0).toUpperCase() + w.slice(1);\nconst deCaps = (w: string) => w.toLowerCase();\n\nconst toBits = (byte: number, length = 8) => {\n const bits = [];\n for (let i = 0; i < length; i++) {\n bits.unshift(byte % 2);\n byte = byte >> 1;\n }\n\n return bits;\n};\n\nconst toByte = (bits: number[]) => {\n let byte = 0;\n for (let i = 0; i < bits.length; i++) {\n const bit = bits[i] as number;\n byte = 2 * byte + bit;\n }\n return byte;\n};\n\nexport default { caps, deCaps, toBits, toByte };\n","import Name from \"../data/name\";\nimport Grammer from \"../data/grammer\";\nimport Place from \"../data/place\";\nimport Animal from \"../data/animal\";\n\nimport _ from \"./util.js\";\n\nclass Element {\n length: number;\n generate: (a: number) => T;\n inv: (a: T) => number;\n bit: number;\n constructor(\n length: number,\n generate: (a: number) => T,\n inv: (a: T) => number\n ) {\n (this.length = length), (this.generate = generate);\n this.inv = inv;\n\n this.bit = Math.trunc(Math.log2(this.length));\n }\n\n inverse(val: T) {\n const byte = this.inv(val);\n if (byte === -1) {\n return -1;\n }\n\n return _.toBits(byte, this.bit);\n }\n}\n\nconst Count = (n: number) =>\n new Element(\n n,\n (i: number) => i + 2,\n (i: number) => (i > 1 && i < 34 ? i - 2 : -1)\n );\n\nconst List = (list: string[]) =>\n new Element(\n list.length,\n (i: number) => list[i % list.length] as string,\n (word: string) => list.indexOf(word)\n );\n\nconst Full = [\n List(Name.First),\n List(Name.Middle),\n List(Name.Last),\n List(Grammer.PersonalNoun),\n List(Place),\n List(Grammer.Verb),\n List(Name.First),\n List(Name.Middle),\n List(Name.Last),\n Count(32),\n List(Animal.Adjective),\n List(Animal.Noun),\n];\n\nconst LowEntropy = [\n Count(64),\n List(Animal.Adjective),\n List(Animal.Noun),\n List(Grammer.Adverb),\n List(Animal.Verb),\n];\n\nexport default { Full, LowEntropy };\n","import Schema from \"./schema\";\nimport _ from \"./util\";\n\nconst partition = (parts: number[], bytes: number[]) => {\n let bits = Array.from(bytes)\n .map((byte) => _.toBits(byte))\n .reduce((a, c) => a.concat(c), []);\n const _bytes = [];\n\n for (let i = 0; i < parts.length; i++) {\n const part = parts[i] as number;\n const temp = bits.splice(part);\n const part_bits = bits;\n bits = temp;\n const byte = _.toByte(part_bits);\n _bytes.push(byte);\n }\n\n return _bytes;\n};\n\nconst dePartition = (bitsList: number[][]) => {\n const bits = bitsList.reduce((a, c) => a.concat(c), []);\n\n const bytes = [];\n\n for (let i = 0; i < 16; i++) {\n const part = bits.slice(8 * i, 8 * (i + 1));\n const byte = _.toByte(part);\n bytes.push(byte);\n }\n\n return bytes;\n};\n\nconst sentence = (w: (string | number | undefined)[]) =>\n `${w[0]} ${w[1]} ${w[2]} the ${_.caps(`${w[3]}`)} of ${w[4]} ${w[5]} ${\n w[6]\n } ${w[7]} ${w[8]} and ${w[9]} ${w[10]} ${w[11]}`;\nconst deSentence = (s: string) => {\n let rest = s.split(\" the \") as string[];\n\n const p1 = (rest[0] as string).trim().split(\" \");\n\n rest = (rest[1] as string).split(\" of \");\n const p2 = (rest[0] as string).trim().split(\" \");\n\n rest = (rest[1] as string).split(\" and \");\n const p3 = (rest[0] as string).trim().split(\" \");\n const p4 = (rest[1] as string).trim().split(\" \");\n\n const w = [\n p1[0],\n p1[1],\n p1[2],\n _.deCaps(p2[0] || \"\"),\n p3[0],\n p3[1],\n p3[2],\n p3[3],\n p3[4],\n parseInt(p4[0] || \"\", 10),\n p4[1],\n p4[2],\n ];\n\n return w;\n};\n\nconst valid = () => {\n return Schema.Full.map((s) => s.bit).reduce((a, c) => a + c) === 128;\n};\n\n// Parts\n// [\n// 12, 11, 14, 13, 13,\n// 10, 12, 11, 14, 5,\n// 6, 7\n// ]\n\nconst generate = (uuid: number[]) => {\n const parts = Schema.Full.map((s) => s.bit);\n const words = partition(parts, uuid).map((b, i) =>\n Schema.Full[i]?.generate(b)\n );\n return sentence(words);\n};\n\nconst inverse = (readable: string) => {\n const bits = deSentence(readable).map((w, i) =>\n Schema.Full[i]?.inverse(w as never)\n );\n\n // Check -1 in words\n if (bits.indexOf(-1) >= 0) {\n throw new Error(\"Not A Valid UUID Readable\");\n }\n\n // dePartition\n const bytes = dePartition(bits as number[][]);\n\n return bytes;\n};\n\nexport default { generate, inverse, valid };\n","import Schema from \"./schema.js\";\nimport _ from \"./util.js\";\n\nconst partition = (parts: number[], bytes: number[]) => {\n let bits = Array.from(bytes)\n .map((byte) => _.toBits(byte))\n .map((bits) => bits.slice(0, 2))\n .reduce((a, c) => a.concat(c), []);\n const _bytes = [];\n\n for (let i = 0; i < parts.length; i++) {\n const part = parts[i] as number;\n const temp = bits.splice(part);\n const part_bits = bits;\n bits = temp;\n const byte = _.toByte(part_bits);\n _bytes.push(byte);\n }\n\n return _bytes;\n};\n\nconst sentence = (w: (string | number | undefined)[]) =>\n `${w[0]} ${w[1]} ${w[2]} ${w[3]} ${w[4]}`;\nconst deSentence = (s: string) => {\n const w = s.trim().split(\" \");\n\n return [parseInt(w[0] as string, 10), w[1], w[2], w[3], w[4]];\n};\n\nconst generate = (uuid: number[]) => {\n const parts = Schema.LowEntropy.map((s) => s.bit);\n\n const words = partition(parts, uuid).map((b, i) =>\n Schema.LowEntropy[i]?.generate(b)\n );\n\n return sentence(words);\n};\n\nconst check = (readable: string, uuid: number[]) => {\n const uuidBits = Array.from(uuid)\n .map((byte) => _.toBits(byte))\n .map((bits) => bits.slice(0, 2))\n .reduce((a, c) => a.concat(c), []);\n\n const readableBits = deSentence(readable).map((w, i) =>\n Schema.LowEntropy[i]?.inverse(w as never)\n );\n\n if (readableBits.indexOf(-1) >= 0) {\n return false;\n }\n\n const readableBitsReduced = readableBits.reduce(\n (a, c) => (a as number[]).concat(c as number[]),\n []\n );\n\n for (let i = 0; i < uuidBits.length; i++) {\n // @ts-ignore\n if (uuidBits[i] !== readableBitsReduced[i]) {\n return false;\n }\n }\n\n return true;\n};\n\nexport default { generate, check };\n","import * as UUID from \"uuid\";\nimport Readable from \"./readable\";\nimport LowEntropy from \"./low-entropy\";\n\n// Generate a uuid readable.\nexport const generate = (uuid: string) => {\n if (!uuid) {\n const _uuid: number[] = [];\n UUID.v4({}, _uuid);\n\n return Readable.generate(_uuid);\n }\n\n return Readable.generate(UUID.parse(uuid) as number[]);\n};\n\n// Get uuid back from readable.\nexport const inverse = (readable: string) => {\n return UUID.stringify(Readable.inverse(readable));\n};\n\n// Create a low entropy 32 bit uuid readable.\nexport const short = (uuid: string) => {\n return LowEntropy.generate(UUID.parse(uuid) as number[]);\n};\n\n// Check if the low entropy uuid is generated from the given uuid.\nexport const check = (readable: string, uuid: string) => {\n return LowEntropy.check(readable, UUID.parse(uuid) as number[]);\n};\n"],"names":["Name","First","Last","Middle","Grammer","Adjective","Adverb","Verb","PersonalNoun","Animal","Noun","_","w","charAt","toUpperCase","slice","toLowerCase","byte","length","bits","i","unshift","Element","generate","inv","this","bit","Math","trunc","log2","prototype","inverse","val","Count","n","List","list","word","indexOf","Schema","Full","Place","LowEntropy","Readable","uuid","words","parts","bytes","Array","from","map","reduce","a","c","concat","_bytes","part","temp","splice","part_bits","push","partition","s","b","_a","readable","rest","p1","p2","p3","p4","split","trim","parseInt","Error","bitsList","dePartition","uuidBits","readableBits","readableBitsReduced","UUID","parse","_uuid","v4","stringify"],"mappings":"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"} -------------------------------------------------------------------------------- /docs/.nojekyll: -------------------------------------------------------------------------------- 1 | TypeDoc added this file to prevent GitHub Pages from using Jekyll. You can turn off this behavior by setting the `githubPages` option to false. -------------------------------------------------------------------------------- /docs/README.md: -------------------------------------------------------------------------------- 1 | UUID Readable 2 | 3 | # UUID Readable 4 | 5 | ## Table of contents 6 | 7 | ### Functions 8 | 9 | - [check](README.md#check) 10 | - [generate](README.md#generate) 11 | - [inverse](README.md#inverse) 12 | - [short](README.md#short) 13 | 14 | ## Functions 15 | 16 | ### check 17 | 18 | ▸ **check**(`readable`, `uuid`): `boolean` 19 | 20 | #### Parameters 21 | 22 | | Name | Type | 23 | | :------ | :------ | 24 | | `readable` | `string` | 25 | | `uuid` | `string` | 26 | 27 | #### Returns 28 | 29 | `boolean` 30 | 31 | ___ 32 | 33 | ### generate 34 | 35 | ▸ **generate**(`uuid`): `string` 36 | 37 | #### Parameters 38 | 39 | | Name | Type | 40 | | :------ | :------ | 41 | | `uuid` | `string` | 42 | 43 | #### Returns 44 | 45 | `string` 46 | 47 | ___ 48 | 49 | ### inverse 50 | 51 | ▸ **inverse**(`readable`): `string` 52 | 53 | #### Parameters 54 | 55 | | Name | Type | 56 | | :------ | :------ | 57 | | `readable` | `string` | 58 | 59 | #### Returns 60 | 61 | `string` 62 | 63 | ___ 64 | 65 | ### short 66 | 67 | ▸ **short**(`uuid`): `string` 68 | 69 | #### Parameters 70 | 71 | | Name | Type | 72 | | :------ | :------ | 73 | | `uuid` | `string` | 74 | 75 | #### Returns 76 | 77 | `string` 78 | -------------------------------------------------------------------------------- /jest.config.js: -------------------------------------------------------------------------------- 1 | // @ts-check 2 | /* eslint-env node */ 3 | 4 | /** 5 | * An object with Jest options. 6 | * @type {import('@jest/types').Config.InitialOptions} 7 | */ 8 | const options = { 9 | preset: 'ts-jest', 10 | resolver: 'ts-jest-resolver', 11 | }; 12 | 13 | module.exports = options; 14 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "uuid-readable", 3 | "version": "0.0.0", 4 | "description": "", 5 | "cdn": "dist/index.umd.js", 6 | "main": "dist/index.js", 7 | "types": "types/index.d.ts", 8 | "unpkg": "dist/index.umd.js", 9 | "module": "dist/index.esm.js", 10 | "jsdelivr": "dist/index.umd.js", 11 | "umd:main": "dist/index.umd.js", 12 | "exports": { 13 | ".": [ 14 | { 15 | "import": "./dist/index.mjs", 16 | "require": "./dist/index.cjs", 17 | "default": "./dist/index.js" 18 | }, 19 | "./dist/index.js" 20 | ] 21 | }, 22 | "devDependencies": { 23 | "@types/eslint": "^8.4.5", 24 | "@types/jest": "^28.1.6", 25 | "@types/prettier": "^2.6.3", 26 | "@typescript-eslint/eslint-plugin": "^5.30.6", 27 | "@typescript-eslint/parser": "^5.30.6", 28 | "eslint": "^8.19.0", 29 | "eslint-config-prettier": "^8.5.0", 30 | "eslint-plugin-prettier": "^4.2.1", 31 | "jest": "^28.1.3", 32 | "prettier": "^2.7.1", 33 | "rollup": "^2.77.0", 34 | "rollup-plugin-terser": "^7.0.2", 35 | "rollup-plugin-typescript2": "^0.32.1", 36 | "ts-jest": "^28.0.6", 37 | "ts-jest-resolver": "^2.0.0", 38 | "typedoc": "^0.23.7", 39 | "typedoc-plugin-markdown": "^3.13.3", 40 | "typescript": "^4.7.4" 41 | }, 42 | "scripts": { 43 | "doc": "typedoc src/index.ts", 44 | "test": "jest", 45 | "lint": "eslint \"*/**/*.{ts,js,json}\"", 46 | "lint:fix": "eslint \"*/**/*.{ts,js,json}\" --fix", 47 | "build": "rollup --config ./rollup.config.js", 48 | "prepublishOnly": "npm run doc && npm run build" 49 | }, 50 | "repository": { 51 | "type": "git", 52 | "url": "git+https://github.com/debdut/uuid-readable.git" 53 | }, 54 | "keywords": [], 55 | "author": { 56 | "name": "Debdut Karmakar " 57 | }, 58 | "license": "MIT", 59 | "bugs": { 60 | "url": "https://github.com/debdut/uuid-readable/issues" 61 | }, 62 | "homepage": "https://github.com/debdut/uuid-readable#readme", 63 | "dependencies": { 64 | "@types/uuid": "^8.3.4", 65 | "uuid": "^9.0.0" 66 | } 67 | } 68 | -------------------------------------------------------------------------------- /rollup.config.js: -------------------------------------------------------------------------------- 1 | // @ts-check 2 | 3 | import { terser } from 'rollup-plugin-terser'; 4 | import typescript2 from 'rollup-plugin-typescript2'; 5 | 6 | import pkg from './package.json'; 7 | 8 | /** 9 | * Comment with library information to be appended in the generated bundles. 10 | */ 11 | const banner = `/*! 12 | * ${pkg.name} v${pkg.version} 13 | * (c) ${pkg.author.name} 14 | * Released under the ${pkg.license} License. 15 | */ 16 | `; 17 | 18 | /** 19 | * Creates an output options object for Rollup.js. 20 | * @param {import('rollup').OutputOptions} options 21 | * @returns {import('rollup').OutputOptions} 22 | */ 23 | function createOutputOptions(options) { 24 | return { 25 | banner, 26 | name: 'uuidReadable', 27 | exports: 'named', 28 | sourcemap: true, 29 | ...options, 30 | }; 31 | } 32 | 33 | /** 34 | * @type {import('rollup').RollupOptions} 35 | */ 36 | const options = { 37 | input: './src/index.ts', 38 | output: [ 39 | createOutputOptions({ 40 | file: './dist/index.js', 41 | format: 'commonjs', 42 | }), 43 | createOutputOptions({ 44 | file: './dist/index.cjs', 45 | format: 'commonjs', 46 | }), 47 | createOutputOptions({ 48 | file: './dist/index.mjs', 49 | format: 'esm', 50 | }), 51 | createOutputOptions({ 52 | file: './dist/index.esm.js', 53 | format: 'esm', 54 | }), 55 | createOutputOptions({ 56 | file: './dist/index.umd.js', 57 | format: 'umd', 58 | }), 59 | createOutputOptions({ 60 | file: './dist/index.umd.min.js', 61 | format: 'umd', 62 | plugins: [terser()], 63 | }), 64 | ], 65 | plugins: [ 66 | typescript2({ 67 | clean: true, 68 | useTsconfigDeclarationDir: true, 69 | tsconfig: './tsconfig.bundle.json', 70 | }), 71 | ], 72 | }; 73 | 74 | export default options; 75 | -------------------------------------------------------------------------------- /src/index.test.ts: -------------------------------------------------------------------------------- 1 | import * as UUID from "uuid"; 2 | import { generate, inverse, short, check } from "./index"; 3 | 4 | describe("uuid readable", () => { 5 | const uuid = UUID.v4(); 6 | const readable = generate(uuid); 7 | const uuidFromReadable = inverse(readable); 8 | const shortReadable = short(uuid); 9 | const checkShortReadable = check(shortReadable, uuid); 10 | 11 | it("generate", () => { 12 | expect(typeof readable).toBe("string"); 13 | }); 14 | 15 | it("inverse", () => { 16 | expect(uuidFromReadable).toBe(uuid); 17 | }); 18 | 19 | it("short", () => { 20 | expect(typeof shortReadable).toBe("string"); 21 | }); 22 | 23 | it("check", () => { 24 | expect(checkShortReadable).toBe(true); 25 | }); 26 | }); 27 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | import * as UUID from "uuid"; 2 | import Readable from "./readable"; 3 | import LowEntropy from "./low-entropy"; 4 | 5 | // Generate a uuid readable. 6 | export const generate = (uuid: string) => { 7 | if (!uuid) { 8 | const _uuid: number[] = []; 9 | UUID.v4({}, _uuid); 10 | 11 | return Readable.generate(_uuid); 12 | } 13 | 14 | return Readable.generate(UUID.parse(uuid) as number[]); 15 | }; 16 | 17 | // Get uuid back from readable. 18 | export const inverse = (readable: string) => { 19 | return UUID.stringify(Readable.inverse(readable)); 20 | }; 21 | 22 | // Create a low entropy 32 bit uuid readable. 23 | export const short = (uuid: string) => { 24 | return LowEntropy.generate(UUID.parse(uuid) as number[]); 25 | }; 26 | 27 | // Check if the low entropy uuid is generated from the given uuid. 28 | export const check = (readable: string, uuid: string) => { 29 | return LowEntropy.check(readable, UUID.parse(uuid) as number[]); 30 | }; 31 | -------------------------------------------------------------------------------- /src/index2.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * A Branded Type for values parseable to number. 3 | */ 4 | export type NumberParseable = (number | string | boolean) & { 5 | readonly isNumberParseble: unique symbol; 6 | }; 7 | 8 | /** 9 | * Check if value is parseable to number. 10 | * @example 11 | * ```js 12 | * isNumberParseable('AAAA'); 13 | * //=> false 14 | * 15 | * isNumberParseable('100'); 16 | * //=> true 17 | * 18 | * if (!isNumberParseable(value)) 19 | * throw new Error('Value can\'t be parseable to `Number`.') 20 | * return Number(value); 21 | * ``` 22 | * @param value - An `unknown` value to be checked. 23 | */ 24 | export const isNumberParseable = (value: unknown): value is NumberParseable => 25 | !Number.isNaN(Number(value)); 26 | -------------------------------------------------------------------------------- /src/low-entropy.ts: -------------------------------------------------------------------------------- 1 | import Schema from "./schema.js"; 2 | import _ from "./util.js"; 3 | 4 | const partition = (parts: number[], bytes: number[]) => { 5 | let bits = Array.from(bytes) 6 | .map((byte) => _.toBits(byte)) 7 | .map((bits) => bits.slice(0, 2)) 8 | .reduce((a, c) => a.concat(c), []); 9 | const _bytes = []; 10 | 11 | for (let i = 0; i < parts.length; i++) { 12 | const part = parts[i] as number; 13 | const temp = bits.splice(part); 14 | const part_bits = bits; 15 | bits = temp; 16 | const byte = _.toByte(part_bits); 17 | _bytes.push(byte); 18 | } 19 | 20 | return _bytes; 21 | }; 22 | 23 | const sentence = (w: (string | number | undefined)[]) => 24 | `${w[0]} ${w[1]} ${w[2]} ${w[3]} ${w[4]}`; 25 | const deSentence = (s: string) => { 26 | const w = s.trim().split(" "); 27 | 28 | return [parseInt(w[0] as string, 10), w[1], w[2], w[3], w[4]]; 29 | }; 30 | 31 | const generate = (uuid: number[]) => { 32 | const parts = Schema.LowEntropy.map((s) => s.bit); 33 | 34 | const words = partition(parts, uuid).map((b, i) => 35 | Schema.LowEntropy[i]?.generate(b) 36 | ); 37 | 38 | return sentence(words); 39 | }; 40 | 41 | const check = (readable: string, uuid: number[]) => { 42 | const uuidBits = Array.from(uuid) 43 | .map((byte) => _.toBits(byte)) 44 | .map((bits) => bits.slice(0, 2)) 45 | .reduce((a, c) => a.concat(c), []); 46 | 47 | const readableBits = deSentence(readable).map((w, i) => 48 | Schema.LowEntropy[i]?.inverse(w as never) 49 | ); 50 | 51 | if (readableBits.indexOf(-1) >= 0) { 52 | return false; 53 | } 54 | 55 | const readableBitsReduced = readableBits.reduce( 56 | (a, c) => (a as number[]).concat(c as number[]), 57 | [] 58 | ); 59 | 60 | for (let i = 0; i < uuidBits.length; i++) { 61 | // @ts-ignore 62 | if (uuidBits[i] !== readableBitsReduced[i]) { 63 | return false; 64 | } 65 | } 66 | 67 | return true; 68 | }; 69 | 70 | export default { generate, check }; 71 | -------------------------------------------------------------------------------- /src/readable.ts: -------------------------------------------------------------------------------- 1 | import Schema from "./schema"; 2 | import _ from "./util"; 3 | 4 | const partition = (parts: number[], bytes: number[]) => { 5 | let bits = Array.from(bytes) 6 | .map((byte) => _.toBits(byte)) 7 | .reduce((a, c) => a.concat(c), []); 8 | const _bytes = []; 9 | 10 | for (let i = 0; i < parts.length; i++) { 11 | const part = parts[i] as number; 12 | const temp = bits.splice(part); 13 | const part_bits = bits; 14 | bits = temp; 15 | const byte = _.toByte(part_bits); 16 | _bytes.push(byte); 17 | } 18 | 19 | return _bytes; 20 | }; 21 | 22 | const dePartition = (bitsList: number[][]) => { 23 | const bits = bitsList.reduce((a, c) => a.concat(c), []); 24 | 25 | const bytes = []; 26 | 27 | for (let i = 0; i < 16; i++) { 28 | const part = bits.slice(8 * i, 8 * (i + 1)); 29 | const byte = _.toByte(part); 30 | bytes.push(byte); 31 | } 32 | 33 | return bytes; 34 | }; 35 | 36 | const sentence = (w: (string | number | undefined)[]) => 37 | `${w[0]} ${w[1]} ${w[2]} the ${_.caps(`${w[3]}`)} of ${w[4]} ${w[5]} ${ 38 | w[6] 39 | } ${w[7]} ${w[8]} and ${w[9]} ${w[10]} ${w[11]}`; 40 | const deSentence = (s: string) => { 41 | let rest = s.split(" the ") as string[]; 42 | 43 | const p1 = (rest[0] as string).trim().split(" "); 44 | 45 | rest = (rest[1] as string).split(" of "); 46 | const p2 = (rest[0] as string).trim().split(" "); 47 | 48 | rest = (rest[1] as string).split(" and "); 49 | const p3 = (rest[0] as string).trim().split(" "); 50 | const p4 = (rest[1] as string).trim().split(" "); 51 | 52 | const w = [ 53 | p1[0], 54 | p1[1], 55 | p1[2], 56 | _.deCaps(p2[0] || ""), 57 | p3[0], 58 | p3[1], 59 | p3[2], 60 | p3[3], 61 | p3[4], 62 | parseInt(p4[0] || "", 10), 63 | p4[1], 64 | p4[2], 65 | ]; 66 | 67 | return w; 68 | }; 69 | 70 | const valid = () => { 71 | return Schema.Full.map((s) => s.bit).reduce((a, c) => a + c) === 128; 72 | }; 73 | 74 | // Parts 75 | // [ 76 | // 12, 11, 14, 13, 13, 77 | // 10, 12, 11, 14, 5, 78 | // 6, 7 79 | // ] 80 | 81 | const generate = (uuid: number[]) => { 82 | const parts = Schema.Full.map((s) => s.bit); 83 | const words = partition(parts, uuid).map((b, i) => 84 | Schema.Full[i]?.generate(b) 85 | ); 86 | return sentence(words); 87 | }; 88 | 89 | const inverse = (readable: string) => { 90 | const bits = deSentence(readable).map((w, i) => 91 | Schema.Full[i]?.inverse(w as never) 92 | ); 93 | 94 | // Check -1 in words 95 | if (bits.indexOf(-1) >= 0) { 96 | throw new Error("Not A Valid UUID Readable"); 97 | } 98 | 99 | // dePartition 100 | const bytes = dePartition(bits as number[][]); 101 | 102 | return bytes; 103 | }; 104 | 105 | export default { generate, inverse, valid }; 106 | -------------------------------------------------------------------------------- /src/schema.ts: -------------------------------------------------------------------------------- 1 | import Name from "../data/name"; 2 | import Grammer from "../data/grammer"; 3 | import Place from "../data/place"; 4 | import Animal from "../data/animal"; 5 | 6 | import _ from "./util.js"; 7 | 8 | class Element { 9 | length: number; 10 | generate: (a: number) => T; 11 | inv: (a: T) => number; 12 | bit: number; 13 | constructor( 14 | length: number, 15 | generate: (a: number) => T, 16 | inv: (a: T) => number 17 | ) { 18 | (this.length = length), (this.generate = generate); 19 | this.inv = inv; 20 | 21 | this.bit = Math.trunc(Math.log2(this.length)); 22 | } 23 | 24 | inverse(val: T) { 25 | const byte = this.inv(val); 26 | if (byte === -1) { 27 | return -1; 28 | } 29 | 30 | return _.toBits(byte, this.bit); 31 | } 32 | } 33 | 34 | const Count = (n: number) => 35 | new Element( 36 | n, 37 | (i: number) => i + 2, 38 | (i: number) => (i > 1 && i < 34 ? i - 2 : -1) 39 | ); 40 | 41 | const List = (list: string[]) => 42 | new Element( 43 | list.length, 44 | (i: number) => list[i % list.length] as string, 45 | (word: string) => list.indexOf(word) 46 | ); 47 | 48 | const Full = [ 49 | List(Name.First), 50 | List(Name.Middle), 51 | List(Name.Last), 52 | List(Grammer.PersonalNoun), 53 | List(Place), 54 | List(Grammer.Verb), 55 | List(Name.First), 56 | List(Name.Middle), 57 | List(Name.Last), 58 | Count(32), 59 | List(Animal.Adjective), 60 | List(Animal.Noun), 61 | ]; 62 | 63 | const LowEntropy = [ 64 | Count(64), 65 | List(Animal.Adjective), 66 | List(Animal.Noun), 67 | List(Grammer.Adverb), 68 | List(Animal.Verb), 69 | ]; 70 | 71 | export default { Full, LowEntropy }; 72 | -------------------------------------------------------------------------------- /src/util.ts: -------------------------------------------------------------------------------- 1 | const caps = (w: string) => w.charAt(0).toUpperCase() + w.slice(1); 2 | const deCaps = (w: string) => w.toLowerCase(); 3 | 4 | const toBits = (byte: number, length = 8) => { 5 | const bits = []; 6 | for (let i = 0; i < length; i++) { 7 | bits.unshift(byte % 2); 8 | byte = byte >> 1; 9 | } 10 | 11 | return bits; 12 | }; 13 | 14 | const toByte = (bits: number[]) => { 15 | let byte = 0; 16 | for (let i = 0; i < bits.length; i++) { 17 | const bit = bits[i] as number; 18 | byte = 2 * byte + bit; 19 | } 20 | return byte; 21 | }; 22 | 23 | export default { caps, deCaps, toBits, toByte }; 24 | -------------------------------------------------------------------------------- /tsconfig.bundle.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | // Transpilation settings. 5 | "module": "ES2020", 6 | "target": "ES5", 7 | 8 | // Output settings. 9 | "charset": "utf-8", 10 | "newLine": "LF", 11 | "sourceMap": true, 12 | 13 | // Type declaration settings. 14 | "declaration": true, 15 | "declarationDir": "types/", 16 | "declarationMap": true 17 | }, 18 | "exclude": ["./src/**/*.test.ts", "./src/**/*.test.tsx"] 19 | } 20 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "baseUrl": ".", 4 | // Module settings. 5 | "allowSyntheticDefaultImports": true, 6 | "esModuleInterop": true, 7 | "isolatedModules": true, 8 | "moduleResolution": "node", 9 | "resolveJsonModule": true, 10 | 11 | // Strictness and quality settings. 12 | "alwaysStrict": true, 13 | "exactOptionalPropertyTypes": true, 14 | "forceConsistentCasingInFileNames": true, 15 | "importsNotUsedAsValues": "error", 16 | "noFallthroughCasesInSwitch": true, 17 | "noImplicitOverride": true, 18 | "noImplicitReturns": true, 19 | "noPropertyAccessFromIndexSignature": true, 20 | "noUncheckedIndexedAccess": true, 21 | "noUnusedLocals": true, 22 | "noUnusedParameters": true, 23 | "strict": true, 24 | 25 | // Type-checking settings. 26 | "lib": ["ES2020"], 27 | "skipDefaultLibCheck": true, 28 | "skipLibCheck": true, 29 | "types": ["jest"] 30 | }, 31 | "include": ["./src/**/*.ts", "./src/**/*.tsx"] 32 | } 33 | -------------------------------------------------------------------------------- /typedoc.json: -------------------------------------------------------------------------------- 1 | { 2 | "out": "./docs", 3 | "name": "UUID Readable", 4 | "theme": "markdown", 5 | "readme": "none", 6 | "tsconfig": "./tsconfig.bundle.json" 7 | } 8 | -------------------------------------------------------------------------------- /types/data/animal/index.d.ts: -------------------------------------------------------------------------------- 1 | declare const _default: { 2 | Noun: string[]; 3 | Adjective: string[]; 4 | Verb: string[]; 5 | }; 6 | export default _default; 7 | //# sourceMappingURL=index.d.ts.map -------------------------------------------------------------------------------- /types/data/animal/index.d.ts.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../data/animal/index.ts"],"names":[],"mappings":";;;;;AAIA,wBAAyC"} -------------------------------------------------------------------------------- /types/data/grammer/index.d.ts: -------------------------------------------------------------------------------- 1 | declare const _default: { 2 | Adjective: string[]; 3 | Adverb: string[]; 4 | Verb: string[]; 5 | PersonalNoun: string[]; 6 | }; 7 | export default _default; 8 | //# sourceMappingURL=index.d.ts.map -------------------------------------------------------------------------------- /types/data/grammer/index.d.ts.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../data/grammer/index.ts"],"names":[],"mappings":";;;;;;AAKA,wBAAyD"} -------------------------------------------------------------------------------- /types/data/name/index.d.ts: -------------------------------------------------------------------------------- 1 | declare const _default: { 2 | First: string[]; 3 | Last: string[]; 4 | Middle: string[]; 5 | }; 6 | export default _default; 7 | //# sourceMappingURL=index.d.ts.map -------------------------------------------------------------------------------- /types/data/name/index.d.ts.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../data/name/index.ts"],"names":[],"mappings":";;;;;AAIA,wBAAuC"} -------------------------------------------------------------------------------- /types/data/place/index.d.ts: -------------------------------------------------------------------------------- 1 | import * as Place from "./place.json"; 2 | export default Place; 3 | //# sourceMappingURL=index.d.ts.map -------------------------------------------------------------------------------- /types/data/place/index.d.ts.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../data/place/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AAEtC,eAAe,KAAK,CAAC"} -------------------------------------------------------------------------------- /types/src/index.d.ts: -------------------------------------------------------------------------------- 1 | export declare const generate: (uuid: string) => string; 2 | export declare const inverse: (readable: string) => string; 3 | export declare const short: (uuid: string) => string; 4 | export declare const check: (readable: string, uuid: string) => boolean; 5 | //# sourceMappingURL=index.d.ts.map -------------------------------------------------------------------------------- /types/src/index.d.ts.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,QAAQ,SAAU,MAAM,WASpC,CAAC;AAGF,eAAO,MAAM,OAAO,aAAc,MAAM,WAEvC,CAAC;AAGF,eAAO,MAAM,KAAK,SAAU,MAAM,WAEjC,CAAC;AAGF,eAAO,MAAM,KAAK,aAAc,MAAM,QAAQ,MAAM,YAEnD,CAAC"} -------------------------------------------------------------------------------- /types/src/index2.d.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * A Branded Type for values parseable to number. 3 | */ 4 | export declare type NumberParseable = (number | string | boolean) & { 5 | readonly isNumberParseble: unique symbol; 6 | }; 7 | /** 8 | * Check if value is parseable to number. 9 | * @example 10 | * ```js 11 | * isNumberParseable('AAAA'); 12 | * //=> false 13 | * 14 | * isNumberParseable('100'); 15 | * //=> true 16 | * 17 | * if (!isNumberParseable(value)) 18 | * throw new Error('Value can\'t be parseable to `Number`.') 19 | * return Number(value); 20 | * ``` 21 | * @param value - An `unknown` value to be checked. 22 | */ 23 | export declare const isNumberParseable: (value: unknown) => value is NumberParseable; 24 | //# sourceMappingURL=index2.d.ts.map -------------------------------------------------------------------------------- /types/src/index2.d.ts.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"index2.d.ts","sourceRoot":"","sources":["../../src/index2.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,oBAAY,eAAe,GAAG,CAAC,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,GAAG;IAC1D,QAAQ,CAAC,gBAAgB,EAAE,OAAO,MAAM,CAAC;CAC1C,CAAC;AAEF;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,iBAAiB,UAAW,OAAO,6BAClB,CAAC"} -------------------------------------------------------------------------------- /types/src/low-entropy.d.ts: -------------------------------------------------------------------------------- 1 | declare const _default: { 2 | generate: (uuid: number[]) => string; 3 | check: (readable: string, uuid: number[]) => boolean; 4 | }; 5 | export default _default; 6 | //# sourceMappingURL=low-entropy.d.ts.map -------------------------------------------------------------------------------- /types/src/low-entropy.d.ts.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"low-entropy.d.ts","sourceRoot":"","sources":["../../src/low-entropy.ts"],"names":[],"mappings":";;;;AAqEA,wBAAmC"} -------------------------------------------------------------------------------- /types/src/readable.d.ts: -------------------------------------------------------------------------------- 1 | declare const _default: { 2 | generate: (uuid: number[]) => string; 3 | inverse: (readable: string) => number[]; 4 | valid: () => boolean; 5 | }; 6 | export default _default; 7 | //# sourceMappingURL=readable.d.ts.map -------------------------------------------------------------------------------- /types/src/readable.d.ts.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"readable.d.ts","sourceRoot":"","sources":["../../src/readable.ts"],"names":[],"mappings":";;;;;AAwGA,wBAA4C"} -------------------------------------------------------------------------------- /types/src/schema.d.ts: -------------------------------------------------------------------------------- 1 | declare class Element { 2 | length: number; 3 | generate: (a: number) => T; 4 | inv: (a: T) => number; 5 | bit: number; 6 | constructor(length: number, generate: (a: number) => T, inv: (a: T) => number); 7 | inverse(val: T): -1 | number[]; 8 | } 9 | declare const _default: { 10 | Full: (Element | Element)[]; 11 | LowEntropy: (Element | Element)[]; 12 | }; 13 | export default _default; 14 | //# sourceMappingURL=schema.d.ts.map -------------------------------------------------------------------------------- /types/src/schema.d.ts.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/schema.ts"],"names":[],"mappings":"AAOA,cAAM,OAAO,CAAC,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,CAAC,CAAC;IAC3B,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,MAAM,CAAC;IACtB,GAAG,EAAE,MAAM,CAAC;gBAEV,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,CAAC,EAC1B,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,MAAM;IAQvB,OAAO,CAAC,GAAG,EAAE,CAAC;CAQf;;;;;AAuCD,wBAAoC"} -------------------------------------------------------------------------------- /types/src/util.d.ts: -------------------------------------------------------------------------------- 1 | declare const _default: { 2 | caps: (w: string) => string; 3 | deCaps: (w: string) => string; 4 | toBits: (byte: number, length?: number) => number[]; 5 | toByte: (bits: number[]) => number; 6 | }; 7 | export default _default; 8 | //# sourceMappingURL=util.d.ts.map -------------------------------------------------------------------------------- /types/src/util.d.ts.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../src/util.ts"],"names":[],"mappings":";;;;;;AAsBA,wBAAgD"} --------------------------------------------------------------------------------