├── api ├── readme.md ├── .bazelversion ├── .bazelignore ├── .cargo │ └── config ├── .gitignore ├── docs │ └── graph.png ├── local.settings.json ├── host.json ├── .funcignore ├── tsconfig.json ├── func │ ├── function.json │ ├── BUILD.bazel │ ├── index.ts │ └── wasm_loader.ts ├── BUILD.bazel ├── Cargo.toml ├── LICENSE ├── rust │ ├── BUILD.bazel │ ├── test.js │ └── lib.rs ├── package.json ├── WORKSPACE ├── Cargo.lock ├── .bazelrc └── package-lock.json ├── app ├── src │ ├── assets │ │ ├── .gitkeep │ │ └── flip.wav │ ├── favicon.ico │ ├── environments │ │ ├── environment.prod.ts │ │ └── environment.ts │ ├── main.ts │ ├── app │ │ ├── app.module.ts │ │ ├── package.json │ │ ├── app.component.ts │ │ ├── flip-board.component.ts │ │ └── generator.service.ts │ ├── index.html │ ├── styles.css │ └── polyfills.ts ├── tsconfig.app.json ├── tsconfig.json ├── scripts │ └── stamp.sh ├── .browserslistrc ├── .gitignore ├── package.json ├── README.md └── angular.json ├── .gitignore ├── docs └── header.png ├── scripts └── build.linux.sh ├── README.md └── .github └── workflows └── azure-static-web-apps-ambitious-smoke-0c318d403.yml /api/readme.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/src/assets/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | -------------------------------------------------------------------------------- /api/.bazelversion: -------------------------------------------------------------------------------- 1 | 3.0.0 2 | 3 | -------------------------------------------------------------------------------- /api/.bazelignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | dist 3 | bazel-out 4 | 5 | -------------------------------------------------------------------------------- /api/.cargo/config: -------------------------------------------------------------------------------- 1 | [build] 2 | target-dir = "dist/cargo" 3 | -------------------------------------------------------------------------------- /api/.gitignore: -------------------------------------------------------------------------------- 1 | bazel-* 2 | node_modules 3 | target 4 | dist 5 | pkg -------------------------------------------------------------------------------- /docs/header.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/manekinekko/catsify/HEAD/docs/header.png -------------------------------------------------------------------------------- /api/docs/graph.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/manekinekko/catsify/HEAD/api/docs/graph.png -------------------------------------------------------------------------------- /app/src/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/manekinekko/catsify/HEAD/app/src/favicon.ico -------------------------------------------------------------------------------- /api/local.settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "IsEncrypted": false, 3 | "Host": { 4 | "CORS": "*" 5 | } 6 | } -------------------------------------------------------------------------------- /app/src/assets/flip.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/manekinekko/catsify/HEAD/app/src/assets/flip.wav -------------------------------------------------------------------------------- /app/src/environments/environment.prod.ts: -------------------------------------------------------------------------------- 1 | export const environment = { 2 | production: true, 3 | api: '/api/name-suggestion' 4 | }; 5 | -------------------------------------------------------------------------------- /api/host.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "2.0", 3 | "extensionBundle": { 4 | "id": "Microsoft.Azure.Functions.ExtensionBundle", 5 | "version": "[1.*, 2.0.0)" 6 | } 7 | } -------------------------------------------------------------------------------- /api/.funcignore: -------------------------------------------------------------------------------- 1 | *.js.map 2 | *.ts 3 | .git* 4 | .vscode 5 | local.settings.json 6 | test 7 | node_modules 8 | 9 | BUILD.bazel 10 | bazel-out 11 | dist/api 12 | dist/cargo 13 | dist/func 14 | dist/out 15 | dist/testlogs -------------------------------------------------------------------------------- /app/tsconfig.app.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "./out-tsc/app", 5 | "types": [] 6 | }, 7 | "files": [ 8 | "src/main.ts", 9 | "src/polyfills.ts" 10 | ], 11 | "include": [ 12 | "src/**/*.d.ts" 13 | ] 14 | } 15 | -------------------------------------------------------------------------------- /api/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "module": "commonjs", 4 | "target": "es6", 5 | "outDir": "dist", 6 | "rootDir": ".", 7 | "sourceMap": true, 8 | "strict": false, 9 | "baseUrl": ".", 10 | "paths": { 11 | "catsify/*": ["*"] 12 | } 13 | }, 14 | } -------------------------------------------------------------------------------- /scripts/build.linux.sh: -------------------------------------------------------------------------------- 1 | !/bin/sh 2 | 3 | set -ex 4 | 5 | CI=true 6 | api="$(pwd)/api" 7 | 8 | # Build the API (using the Rust toolchain + wasm-pack) 9 | cd $api 10 | npm install 11 | curl https://rustwasm.github.io/wasm-pack/installer/init.sh -sSf | sh 12 | 13 | npm run build 14 | 15 | # Note: Oryx skips non-regular (symlinks) files. Give it regular files! 16 | mkdir -p dist/func 17 | cp bazel-dist/bin/func/*.* dist/func 18 | -------------------------------------------------------------------------------- /app/src/main.ts: -------------------------------------------------------------------------------- 1 | import { enableProdMode } from '@angular/core'; 2 | import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; 3 | 4 | import { AppModule } from './app/app.module'; 5 | import { environment } from './environments/environment'; 6 | 7 | if (environment.production) { 8 | enableProdMode(); 9 | } 10 | 11 | platformBrowserDynamic().bootstrapModule(AppModule) 12 | .catch(err => console.error(err)); 13 | -------------------------------------------------------------------------------- /api/func/function.json: -------------------------------------------------------------------------------- 1 | { 2 | "bindings": [ 3 | { 4 | "authLevel": "anonymous", 5 | "type": "httpTrigger", 6 | "direction": "in", 7 | "name": "req", 8 | "methods": [ 9 | "get" 10 | ], 11 | "route": "name-suggestion" 12 | }, 13 | { 14 | "type": "http", 15 | "direction": "out", 16 | "name": "res" 17 | } 18 | ], 19 | "scriptFile": "../dist/func/index.js" 20 | } -------------------------------------------------------------------------------- /app/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compileOnSave": false, 3 | "compilerOptions": { 4 | "baseUrl": "./", 5 | "outDir": "./dist/out-tsc", 6 | "sourceMap": true, 7 | "declaration": false, 8 | "downlevelIteration": true, 9 | "experimentalDecorators": true, 10 | "module": "es2020", 11 | "moduleResolution": "node", 12 | "importHelpers": true, 13 | "target": "es2015", 14 | "lib": [ 15 | "es2018", 16 | "dom" 17 | ] 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /app/src/app/app.module.ts: -------------------------------------------------------------------------------- 1 | import { BrowserModule } from '@angular/platform-browser'; 2 | import { NgModule } from '@angular/core'; 3 | 4 | import { AppComponent } from './app.component'; 5 | import { FlipBoardComponent } from './flip-board.component'; 6 | 7 | @NgModule({ 8 | declarations: [ 9 | AppComponent, 10 | FlipBoardComponent 11 | ], 12 | imports: [ 13 | BrowserModule 14 | ], 15 | providers: [], 16 | bootstrap: [AppComponent] 17 | }) 18 | export class AppModule { } 19 | -------------------------------------------------------------------------------- /api/BUILD.bazel: -------------------------------------------------------------------------------- 1 | # Add rules here to build your software 2 | # See https://docs.bazel.build/versions/master/build-ref.html#BUILD_files 3 | 4 | # Allow any ts_library rules in this workspace to reference the config 5 | # Note: if you move the tsconfig.json file to a subdirectory, you can add an alias() here instead 6 | # so that ts_library rules still use it by default. 7 | # See https://www.npmjs.com/package/@bazel/typescript#installation 8 | package(default_visibility = ["//public"]) 9 | 10 | exports_files(["tsconfig.json"], visibility = ["//:__subpackages__"]) 11 | -------------------------------------------------------------------------------- /app/scripts/stamp.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -o errexit 4 | set -o pipefail 5 | 6 | if [ -z "$GITHUB_SHA" ] 7 | then 8 | b=`git rev-parse --abbrev-ref HEAD` 9 | v=`git rev-parse --short HEAD` 10 | version="$b+sha.$v" 11 | else 12 | v=`echo $GITHUB_SHA | cut -c1-8` 13 | version="build: $v" 14 | fi 15 | 16 | ## replease _BUILD_HASH_ with the current build number 17 | perl -i -pe "s/_BUILD_HASH_/$version/g" dist/ui/index.html 18 | 19 | status=$? 20 | if [ $status -eq 0 ];then 21 | echo ">> Build was stamped: $version" 22 | else 23 | echo ">> Could not stamp this build!" 24 | fi -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ![Azure Static Web Apps CI/CD](https://github.com/manekinekko/catsify/workflows/Azure%20Static%20Web%20Apps%20CI/CD/badge.svg) 2 | 3 |

4 | 5 |

6 | 7 | ### What is Catsify? 8 | 9 | Catsify is a Cat names generator, hosted on Azure Static Web Apps. The tech stack consists of: 10 | 11 | - An [UI](./app) written in Angular v10 (preview). 12 | - An [API](./api) written in Rust, compiled to WASM and exposed through a Node.js serverless Function. 13 | 14 | ### Bazel dependency graph 15 | 16 |

17 | 18 |

19 | -------------------------------------------------------------------------------- /api/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "catsify" 3 | version = "1.0.0" 4 | authors = ["Wassim Chegham "] 5 | edition = "2018" 6 | license = "MIT" 7 | repository = "" 8 | description = "" 9 | 10 | # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html 11 | 12 | [dependencies] 13 | wasm-bindgen = "0.2.58" 14 | 15 | [lib] 16 | crate-type = ["cdylib", "rlib"] 17 | path = "rust/lib.rs" 18 | 19 | [[bin]] 20 | name = "generator" 21 | path = "rust/lib.rs" 22 | 23 | [profile.release] 24 | lto = true 25 | panic = "abort" 26 | # Tell `rustc` to optimize for small code size. 27 | opt-level = "s" 28 | -------------------------------------------------------------------------------- /app/src/app/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ui", 3 | "private": true, 4 | "description": "This is a special package.json file that is not used by package managers. It is however used to tell the tools and bundlers whether the code under this directory is free of code with non-local side-effect. Any code that does have non-local side-effects can't be well optimized (tree-shaken) and will result in unnecessary increased payload size. It should be safe to set this option to 'false' for new applications, but existing code bases could be broken when built with the production config if the application code does contain non-local side-effects that the application depends on.", 5 | "sideEffects": true 6 | } 7 | -------------------------------------------------------------------------------- /api/func/BUILD.bazel: -------------------------------------------------------------------------------- 1 | load("@npm_bazel_typescript//:index.bzl", "ts_library") 2 | 3 | package(default_visibility = ["//visibility:public"]) 4 | 5 | ts_library( 6 | name = "func", 7 | srcs = ["index.ts"], 8 | deps = [ 9 | ":func_lib", 10 | "@npm//@azure/functions", 11 | ], 12 | ) 13 | 14 | ts_library( 15 | name = "func_lib", 16 | srcs = ["wasm_loader.ts"], 17 | deps = [ 18 | "@npm//@types/node", 19 | ], 20 | data = [ 21 | ":generator_wasm" 22 | ] 23 | ) 24 | 25 | genrule( 26 | name = "generator_wasm", 27 | srcs = [ 28 | "//rust:generator_bindgen_bg.wasm" 29 | ], 30 | outs = ["generator.wasm"], 31 | cmd = "mv $(SRCS) $@", 32 | ) -------------------------------------------------------------------------------- /app/.browserslistrc: -------------------------------------------------------------------------------- 1 | # This file is used by the build system to adjust CSS and JS output to support the specified browsers below. 2 | # For additional information regarding the format and rule options, please see: 3 | # https://github.com/browserslist/browserslist#queries 4 | 5 | # For the full list of supported browsers by the Angular framework, please see: 6 | # https://angular.io/guide/browser-support 7 | 8 | # You can see what browsers were selected by your queries by running: 9 | # npx browserslist 10 | 11 | last 1 Chrome version 12 | last 1 Firefox version 13 | last 2 Edge major versions 14 | last 2 Safari major version 15 | last 2 iOS major versions 16 | Firefox ESR 17 | not IE 9-11 # For IE 9-11 support, remove 'not'. 18 | -------------------------------------------------------------------------------- /api/func/index.ts: -------------------------------------------------------------------------------- 1 | // File autogenerated by hexa.run on 2020-02-11T17:28:27.872Z 2 | import { AzureFunction, Context, HttpRequest } from "@azure/functions"; 3 | const { generate } = require("./wasm_loader"); 4 | 5 | const func: AzureFunction = async function (context: Context, req: HttpRequest): Promise { 6 | try { 7 | const name: string = await generate(); 8 | const [adjective, noun] = name.split(" "); 9 | console.log("generated name:", adjective, noun); 10 | 11 | context.res = { 12 | body: { 13 | adjective, 14 | noun, 15 | }, 16 | }; 17 | } catch (error) { 18 | context.res = { 19 | body: { 20 | error, 21 | }, 22 | }; 23 | } 24 | }; 25 | 26 | export default func; 27 | -------------------------------------------------------------------------------- /app/src/environments/environment.ts: -------------------------------------------------------------------------------- 1 | // This file can be replaced during build by using the `fileReplacements` array. 2 | // `ng build --prod` replaces `environment.ts` with `environment.prod.ts`. 3 | // The list of file replacements can be found in `angular.json`. 4 | 5 | export const environment = { 6 | production: false, 7 | api: 'http://localhost:7071/api/name-suggestion' 8 | }; 9 | 10 | /* 11 | * For easier debugging in development mode, you can import the following file 12 | * to ignore zone related error stack frames such as `zone.run`, `zoneDelegate.invokeTask`. 13 | * 14 | * This import should be commented out in production mode because it will have a negative impact 15 | * on performance if an error is thrown. 16 | */ 17 | 18 | // import 'zone.js/dist/zone-error'; // Included with Angular CLI. 19 | -------------------------------------------------------------------------------- /app/.gitignore: -------------------------------------------------------------------------------- 1 | # See http://help.github.com/ignore-files/ for more about ignoring files. 2 | 3 | # compiled output 4 | /dist 5 | /tmp 6 | /out-tsc 7 | # Only exists if Bazel was run 8 | /bazel-out 9 | 10 | # dependencies 11 | /node_modules 12 | 13 | # profiling files 14 | chrome-profiler-events*.json 15 | speed-measure-plugin*.json 16 | 17 | # IDEs and editors 18 | /.idea 19 | .project 20 | .classpath 21 | .c9/ 22 | *.launch 23 | .settings/ 24 | *.sublime-workspace 25 | 26 | # IDE - VSCode 27 | .vscode/* 28 | !.vscode/settings.json 29 | !.vscode/tasks.json 30 | !.vscode/launch.json 31 | !.vscode/extensions.json 32 | .history/* 33 | 34 | # misc 35 | /.sass-cache 36 | /connect.lock 37 | /coverage 38 | /libpeerconnection.log 39 | npm-debug.log 40 | yarn-error.log 41 | testem.log 42 | /typings 43 | 44 | # System Files 45 | .DS_Store 46 | Thumbs.db 47 | -------------------------------------------------------------------------------- /app/src/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CATSIFY 6 | 7 | 8 | 9 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /app/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ui", 3 | "version": "0.0.0", 4 | "scripts": { 5 | "ng": "ng", 6 | "start": "ng serve", 7 | "build": "ng build", 8 | "postbuild": "./scripts/stamp.sh", 9 | "test": "ng test", 10 | "lint": "ng lint", 11 | "e2e": "ng e2e" 12 | }, 13 | "private": true, 14 | "dependencies": { 15 | "@angular/animations": "~11.2.13", 16 | "@angular/common": "~11.2.13", 17 | "@angular/compiler": "~11.2.13", 18 | "@angular/core": "~11.2.13", 19 | "@angular/forms": "~11.2.13", 20 | "@angular/platform-browser": "~11.2.13", 21 | "@angular/platform-browser-dynamic": "~11.2.13", 22 | "@angular/router": "~11.2.13", 23 | "@pqina/flip": "^1.7.5", 24 | "rxjs": "~7.0.0", 25 | "tslib": "^1.10.0", 26 | "zone.js": "~0.10.2" 27 | }, 28 | "devDependencies": { 29 | "@angular-devkit/build-angular": "^0.1102.12", 30 | "@angular/cli": "^11.2.12", 31 | "@angular/compiler-cli": "~11.2.13", 32 | "@types/node": "^12.11.1", 33 | "ts-node": "~8.3.0", 34 | "tslint": "~6.1.0", 35 | "typescript": "~4.1.5" 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /app/README.md: -------------------------------------------------------------------------------- 1 | # Ui 2 | 3 | This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 10.0.0-next.4. 4 | 5 | ## Development server 6 | 7 | Run `ng serve` for a dev server. Navigate to `http://localhost:4200/`. The app will automatically reload if you change any of the source files. 8 | 9 | ## Code scaffolding 10 | 11 | Run `ng generate component component-name` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module`. 12 | 13 | ## Build 14 | 15 | Run `ng build` to build the project. The build artifacts will be stored in the `dist/` directory. Use the `--prod` flag for a production build. 16 | 17 | ## Running unit tests 18 | 19 | Run `ng test` to execute the unit tests via [Karma](https://karma-runner.github.io). 20 | 21 | ## Running end-to-end tests 22 | 23 | Run `ng e2e` to execute the end-to-end tests via [Protractor](http://www.protractortest.org/). 24 | 25 | ## Further help 26 | 27 | To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI README](https://github.com/angular/angular-cli/blob/master/README.md). 28 | -------------------------------------------------------------------------------- /api/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License 2 | 3 | Copyright (c) 2020 Wassim Chegham, https://wassim.dev 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 13 | all 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 21 | THE SOFTWARE. -------------------------------------------------------------------------------- /api/rust/BUILD.bazel: -------------------------------------------------------------------------------- 1 | package(default_visibility = ["//visibility:public"]) 2 | 3 | load("@io_bazel_rules_rust//rust:rust.bzl", "rust_binary") 4 | load("@io_bazel_rules_rust//wasm_bindgen:wasm_bindgen.bzl", "rust_wasm_bindgen") 5 | load("@build_bazel_rules_nodejs//:index.bzl", "nodejs_binary") 6 | 7 | genrule( 8 | name = "generator_wasm_bin", 9 | srcs = [ 10 | ":generator_bindgen_bg.wasm" 11 | ], 12 | outs = ["generator_bindgen_bg"], 13 | cmd = "mv $(SRCS) $@", 14 | ) 15 | 16 | rust_binary( 17 | name = "generator_rust_wasm", 18 | srcs = ["lib.rs"], 19 | edition = "2018", 20 | rustc_flags = [ 21 | "--crate-type=cdylib", 22 | "--codegen=opt-level=2", 23 | "--codegen=lto=thin", 24 | "--codegen=opt-level=z", 25 | "--codegen=panic=abort", 26 | ], 27 | deps = [ 28 | "@io_bazel_rules_rust//wasm_bindgen/raze:wasm_bindgen", 29 | ], 30 | ) 31 | 32 | rust_wasm_bindgen( 33 | name = "generator_bindgen", 34 | wasm_file = ":generator_rust_wasm", 35 | bindgen_flags = ["--target=nodejs", "--keep-debug"] 36 | ) 37 | 38 | nodejs_binary( 39 | name = "generator_wasm", 40 | args = [ 41 | "--experimental-wasm-modules", 42 | "--experimental-modules" 43 | ], 44 | data = [ 45 | ":generator_wasm_bin", 46 | ":generator_bindgen", 47 | ], 48 | entry_point = ":test.js", 49 | ) -------------------------------------------------------------------------------- /api/func/wasm_loader.ts: -------------------------------------------------------------------------------- 1 | const fs = require('fs'); 2 | const path = require('path'); 3 | 4 | // the WASM file is copied to dis/func during the build 5 | const wasmFile = path.join(__dirname, 'generator.wasm'); 6 | 7 | // #region 8 | let cachedTextDecoder = new TextDecoder('utf-8'); 9 | let cachegetInt32Memory = null; 10 | function getInt32Memory(wasm) { 11 | if ( 12 | cachegetInt32Memory === null || 13 | cachegetInt32Memory.buffer !== wasm.memory.buffer 14 | ) { 15 | cachegetInt32Memory = new Int32Array(wasm.memory.buffer); 16 | } 17 | return cachegetInt32Memory; 18 | } 19 | 20 | let cachegetUint8Memory = null; 21 | function getUint8Memory(wasm) { 22 | if ( 23 | cachegetUint8Memory === null || 24 | cachegetUint8Memory.buffer !== wasm.memory.buffer 25 | ) { 26 | cachegetUint8Memory = new Uint8Array(wasm.memory.buffer); 27 | } 28 | return cachegetUint8Memory; 29 | } 30 | 31 | function getStringFromWasm(wasm, ptr, len) { 32 | return cachedTextDecoder.decode( 33 | getUint8Memory(wasm).subarray(ptr, ptr + len) 34 | ); 35 | } 36 | 37 | export const generate = async function() { 38 | const bytes = new Uint8Array(fs.readFileSync(wasmFile)); 39 | const result = await WebAssembly.instantiate(bytes); 40 | const wasm: any = await Promise.resolve(result.instance.exports); 41 | const retptr = 8; 42 | const seed = Date.now() % 1000 | 0; 43 | const ret = wasm.generate_name_str(retptr, seed); 44 | const memi32 = getInt32Memory(wasm); 45 | const v0 = getStringFromWasm( 46 | wasm, 47 | memi32[retptr / 4 + 0], 48 | memi32[retptr / 4 + 1] 49 | ).slice(); 50 | wasm.__wbindgen_free(memi32[retptr / 4 + 0], memi32[retptr / 4 + 1] * 1); 51 | return v0; 52 | }; 53 | // #endregion 54 | -------------------------------------------------------------------------------- /api/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "catsify", 3 | "version": "1.0.0", 4 | "author": { 5 | "name": "Wassim Chegham", 6 | "email": "github@wassim.dev" 7 | }, 8 | "bugs": { 9 | "url": "https://github.com/manekinekko/catsify/issues" 10 | }, 11 | "repository": { 12 | "type": "git", 13 | "url": "https://github.com/manekinekko/catsify.git" 14 | }, 15 | "keywords": [ 16 | "azure", 17 | "bazel", 18 | "rust", 19 | "wasm", 20 | "serverless", 21 | "cloud", 22 | "javascript" 23 | ], 24 | "license": "MIT", 25 | "scripts": { 26 | "//FUNC--": "//", 27 | "func:build": "bazelisk build //func:func", 28 | "func:build:prod": "npm run func:build && npm prune --production", 29 | "func:watch": "ibazel build //func:func", 30 | "func:start:host": "func start", 31 | "//WASM--": "//", 32 | "wasm:build": "bazelisk build //rust:generator_wasm", 33 | "//PUBLIC--": "//", 34 | "prestart": "npm-run-all wasm:build func:build", 35 | "start": "npm-run-all --parallel func:start:host func:watch", 36 | "build": "npm-run-all func:build", 37 | "query": "bazelisk query --noimplicit_deps 'deps(//...)' --output graph | dot -Tpng > docs/graph.png", 38 | "test": "bazelisk run //rust:generator_wasm", 39 | "clean": "bazelisk clean --expunge && rimraf dist" 40 | }, 41 | "description": "", 42 | "devDependencies": { 43 | "@azure/functions": "^1.2.0", 44 | "@bazel/bazelisk": "^1.4.0", 45 | "@bazel/ibazel": "^0.13.1", 46 | "@bazel/typescript": "^1.6.1", 47 | "@types/node": "^13.13.9", 48 | "azure-functions-core-tools": "^2.7.2508", 49 | "npm-run-all": "^4.1.5", 50 | "rimraf": "^3.0.2", 51 | "typescript": "^3.3.3" 52 | }, 53 | "engines": { 54 | "node": "^12" 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /api/rust/test.js: -------------------------------------------------------------------------------- 1 | const fs = require('fs'); 2 | const path = require('path'); 3 | const wasmFile = path.join(__dirname, 'generator_bindgen_bg.wasm'); 4 | 5 | // #region 6 | let cachedTextDecoder = new TextDecoder('utf-8'); 7 | let cachegetInt32Memory = null; 8 | function getInt32Memory(wasm) { 9 | if (cachegetInt32Memory === null || cachegetInt32Memory.buffer !== wasm.memory.buffer) { 10 | cachegetInt32Memory = new Int32Array(wasm.memory.buffer); 11 | } 12 | return cachegetInt32Memory; 13 | } 14 | 15 | let cachegetUint8Memory = null; 16 | function getUint8Memory(wasm) { 17 | if (cachegetUint8Memory === null || cachegetUint8Memory.buffer !== wasm.memory.buffer) { 18 | cachegetUint8Memory = new Uint8Array(wasm.memory.buffer); 19 | } 20 | return cachegetUint8Memory; 21 | } 22 | 23 | function getStringFromWasm(wasm, ptr, len) { 24 | return cachedTextDecoder.decode(getUint8Memory(wasm).subarray(ptr, ptr + len)); 25 | } 26 | 27 | const generate_name_str = function(seed, wasm) { 28 | const retptr = 8; 29 | const ret = wasm.generate_name_str(retptr, seed); 30 | const memi32 = getInt32Memory(wasm); 31 | const v0 = getStringFromWasm(wasm, memi32[retptr / 4 + 0], memi32[retptr / 4 + 1]).slice(); 32 | wasm.__wbindgen_free(memi32[retptr / 4 + 0], memi32[retptr / 4 + 1] * 1); 33 | return v0; 34 | }; 35 | // #endregion 36 | 37 | (async () => { 38 | try { 39 | const bytes = new Uint8Array(fs.readFileSync(wasmFile)); 40 | const result = await WebAssembly.instantiate(bytes); 41 | const wasm = await Promise.resolve(result.instance.exports); 42 | const seed = (Date.now() % 1000) | 0; 43 | console.log('\n******************************************************') 44 | console.log('Generated name:', generate_name_str(seed, wasm)); 45 | console.log('******************************************************') 46 | } catch (error) { 47 | console.error('FAIL'); 48 | console.error(error); 49 | } 50 | })(); 51 | -------------------------------------------------------------------------------- /.github/workflows/azure-static-web-apps-ambitious-smoke-0c318d403.yml: -------------------------------------------------------------------------------- 1 | name: Azure Static Web Apps CI/CD 2 | 3 | on: 4 | push: 5 | branches: 6 | - main 7 | pull_request: 8 | types: [opened, synchronize, reopened, closed] 9 | branches: 10 | - main 11 | 12 | jobs: 13 | build_and_deploy_job: 14 | if: github.event_name == 'push' || (github.event_name == 'pull_request' && github.event.action != 'closed') 15 | runs-on: ubuntu-latest 16 | name: Build and Deploy Job 17 | steps: 18 | - uses: actions/checkout@v2 19 | with: 20 | submodules: true 21 | 22 | - name: Setup Rust toolchain 23 | uses: actions-rs/toolchain@v1 24 | with: 25 | toolchain: stable 26 | 27 | - name: Setup Node.js 12 28 | uses: actions/setup-node@v1 29 | with: 30 | node-version: 12 31 | 32 | - name: Build 33 | run: "./scripts/build.linux.sh" 34 | env: 35 | CI: true 36 | 37 | - name: Build And Deploy 38 | id: builddeploy 39 | uses: Azure/static-web-apps-deploy@v0.0.1-preview 40 | with: 41 | azure_static_web_apps_api_token: ${{ secrets.AZURE_STATIC_WEB_APPS_API_TOKEN_AMBITIOUS_SMOKE_0C318D403 }} 42 | repo_token: ${{ secrets.GITHUB_TOKEN }} # Used for Github integrations (i.e. PR comments) 43 | action: "upload" 44 | ###### Repository/Build Configurations - These values can be configured to match your app requirements. ###### 45 | # For more information regarding Static Web App workflow configurations, please visit: https://aka.ms/swaworkflowconfig 46 | app_location: "app" # App source code path 47 | api_location: "" # Api source code path - optional 48 | output_location: "dist/ui" # Built app content directory - optional 49 | app_build_command: "npm run build -- --prod" 50 | api_build_command: "echo 'manually building the API (see ./scripts/build.linux.sh)'" 51 | ###### End of Repository/Build Configurations ###### 52 | 53 | close_pull_request_job: 54 | if: github.event_name == 'pull_request' && github.event.action == 'closed' 55 | runs-on: ubuntu-latest 56 | name: Close Pull Request Job 57 | steps: 58 | - name: Close Pull Request 59 | id: closepullrequest 60 | uses: Azure/static-web-apps-deploy@v0.0.1-preview 61 | with: 62 | azure_static_web_apps_api_token: ${{ secrets.AZURE_STATIC_WEB_APPS_API_TOKEN_AMBITIOUS_SMOKE_0C318D403 }} 63 | action: "close" 64 | -------------------------------------------------------------------------------- /app/src/styles.css: -------------------------------------------------------------------------------- 1 | /* You can add global styles to this file, and also import other style files */ 2 | 3 | html { 4 | position: relative; 5 | top: 0; 6 | bottom: 0; 7 | height: 100%; 8 | } 9 | 10 | body { 11 | background-color: rgb(184, 49, 92); 12 | display: flex; 13 | justify-content: center; 14 | align-items: center; 15 | flex-direction: column; 16 | top: 0; 17 | bottom: 0; 18 | left: 0; 19 | right: 0; 20 | position: absolute; 21 | font-family: "Alegreya Sans", sans-serif; 22 | } 23 | 24 | footer { 25 | bottom: 0; 26 | position: absolute; 27 | color: white; 28 | } 29 | 30 | footer a { 31 | color: white; 32 | font-weight: bold; 33 | } 34 | 35 | .noisy { 36 | background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAMAAAAp4XiDAAAAUVBMVEWFhYWDg4N3d3dtbW17e3t1dXWBgYGHh4d5eXlzc3OLi4ubm5uVlZWPj4+NjY19fX2JiYl/f39ra2uRkZGZmZlpaWmXl5dvb29xcXGTk5NnZ2c8TV1mAAAAG3RSTlNAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAvEOwtAAAFVklEQVR4XpWWB67c2BUFb3g557T/hRo9/WUMZHlgr4Bg8Z4qQgQJlHI4A8SzFVrapvmTF9O7dmYRFZ60YiBhJRCgh1FYhiLAmdvX0CzTOpNE77ME0Zty/nWWzchDtiqrmQDeuv3powQ5ta2eN0FY0InkqDD73lT9c9lEzwUNqgFHs9VQce3TVClFCQrSTfOiYkVJQBmpbq2L6iZavPnAPcoU0dSw0SUTqz/GtrGuXfbyyBniKykOWQWGqwwMA7QiYAxi+IlPdqo+hYHnUt5ZPfnsHJyNiDtnpJyayNBkF6cWoYGAMY92U2hXHF/C1M8uP/ZtYdiuj26UdAdQQSXQErwSOMzt/XWRWAz5GuSBIkwG1H3FabJ2OsUOUhGC6tK4EMtJO0ttC6IBD3kM0ve0tJwMdSfjZo+EEISaeTr9P3wYrGjXqyC1krcKdhMpxEnt5JetoulscpyzhXN5FRpuPHvbeQaKxFAEB6EN+cYN6xD7RYGpXpNndMmZgM5Dcs3YSNFDHUo2LGfZuukSWyUYirJAdYbF3MfqEKmjM+I2EfhA94iG3L7uKrR+GdWD73ydlIB+6hgref1QTlmgmbM3/LeX5GI1Ux1RWpgxpLuZ2+I+IjzZ8wqE4nilvQdkUdfhzI5QDWy+kw5Wgg2pGpeEVeCCA7b85BO3F9DzxB3cdqvBzWcmzbyMiqhzuYqtHRVG2y4x+KOlnyqla8AoWWpuBoYRxzXrfKuILl6SfiWCbjxoZJUaCBj1CjH7GIaDbc9kqBY3W/Rgjda1iqQcOJu2WW+76pZC9QG7M00dffe9hNnseupFL53r8F7YHSwJWUKP2q+k7RdsxyOB11n0xtOvnW4irMMFNV4H0uqwS5ExsmP9AxbDTc9JwgneAT5vTiUSm1E7BSflSt3bfa1tv8Di3R8n3Af7MNWzs49hmauE2wP+ttrq+AsWpFG2awvsuOqbipWHgtuvuaAE+A1Z/7gC9hesnr+7wqCwG8c5yAg3AL1fm8T9AZtp/bbJGwl1pNrE7RuOX7PeMRUERVaPpEs+yqeoSmuOlokqw49pgomjLeh7icHNlG19yjs6XXOMedYm5xH2YxpV2tc0Ro2jJfxC50ApuxGob7lMsxfTbeUv07TyYxpeLucEH1gNd4IKH2LAg5TdVhlCafZvpskfncCfx8pOhJzd76bJWeYFnFciwcYfubRc12Ip/ppIhA1/mSZ/RxjFDrJC5xifFjJpY2Xl5zXdguFqYyTR1zSp1Y9p+tktDYYSNflcxI0iyO4TPBdlRcpeqjK/piF5bklq77VSEaA+z8qmJTFzIWiitbnzR794USKBUaT0NTEsVjZqLaFVqJoPN9ODG70IPbfBHKK+/q/AWR0tJzYHRULOa4MP+W/HfGadZUbfw177G7j/OGbIs8TahLyynl4X4RinF793Oz+BU0saXtUHrVBFT/DnA3ctNPoGbs4hRIjTok8i+algT1lTHi4SxFvONKNrgQFAq2/gFnWMXgwffgYMJpiKYkmW3tTg3ZQ9Jq+f8XN+A5eeUKHWvJWJ2sgJ1Sop+wwhqFVijqWaJhwtD8MNlSBeWNNWTa5Z5kPZw5+LbVT99wqTdx29lMUH4OIG/D86ruKEauBjvH5xy6um/Sfj7ei6UUVk4AIl3MyD4MSSTOFgSwsH/QJWaQ5as7ZcmgBZkzjjU1UrQ74ci1gWBCSGHtuV1H2mhSnO3Wp/3fEV5a+4wz//6qy8JxjZsmxxy5+4w9CDNJY09T072iKG0EnOS0arEYgXqYnXcYHwjTtUNAcMelOd4xpkoqiTYICWFq0JSiPfPDQdnt+4/wuqcXY47QILbgAAAABJRU5ErkJggg==); 37 | } 38 | -------------------------------------------------------------------------------- /app/src/polyfills.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * This file includes polyfills needed by Angular and is loaded before the app. 3 | * You can add your own extra polyfills to this file. 4 | * 5 | * This file is divided into 2 sections: 6 | * 1. Browser polyfills. These are applied before loading ZoneJS and are sorted by browsers. 7 | * 2. Application imports. Files imported after ZoneJS that should be loaded before your main 8 | * file. 9 | * 10 | * The current setup is for so-called "evergreen" browsers; the last versions of browsers that 11 | * automatically update themselves. This includes Safari >= 10, Chrome >= 55 (including Opera), 12 | * Edge >= 13 on the desktop, and iOS 10 and Chrome on mobile. 13 | * 14 | * Learn more in https://angular.io/guide/browser-support 15 | */ 16 | 17 | /*************************************************************************************************** 18 | * BROWSER POLYFILLS 19 | */ 20 | 21 | /** IE10 and IE11 requires the following for NgClass support on SVG elements */ 22 | // import 'classlist.js'; // Run `npm install --save classlist.js`. 23 | 24 | /** 25 | * Web Animations `@angular/platform-browser/animations` 26 | * Only required if AnimationBuilder is used within the application and using IE/Edge or Safari. 27 | * Standard animation support in Angular DOES NOT require any polyfills (as of Angular 6.0). 28 | */ 29 | // import 'web-animations-js'; // Run `npm install --save web-animations-js`. 30 | 31 | /** 32 | * By default, zone.js will patch all possible macroTask and DomEvents 33 | * user can disable parts of macroTask/DomEvents patch by setting following flags 34 | * because those flags need to be set before `zone.js` being loaded, and webpack 35 | * will put import in the top of bundle, so user need to create a separate file 36 | * in this directory (for example: zone-flags.ts), and put the following flags 37 | * into that file, and then add the following code before importing zone.js. 38 | * import './zone-flags'; 39 | * 40 | * The flags allowed in zone-flags.ts are listed here. 41 | * 42 | * The following flags will work for all browsers. 43 | * 44 | * (window as any).__Zone_disable_requestAnimationFrame = true; // disable patch requestAnimationFrame 45 | * (window as any).__Zone_disable_on_property = true; // disable patch onProperty such as onclick 46 | * (window as any).__zone_symbol__UNPATCHED_EVENTS = ['scroll', 'mousemove']; // disable patch specified eventNames 47 | * 48 | * in IE/Edge developer tools, the addEventListener will also be wrapped by zone.js 49 | * with the following flag, it will bypass `zone.js` patch for IE/Edge 50 | * 51 | * (window as any).__Zone_enable_cross_context_check = true; 52 | * 53 | */ 54 | 55 | /*************************************************************************************************** 56 | * Zone JS is required by default for Angular itself. 57 | */ 58 | import 'zone.js/dist/zone'; // Included with Angular CLI. 59 | 60 | 61 | /*************************************************************************************************** 62 | * APPLICATION IMPORTS 63 | */ 64 | -------------------------------------------------------------------------------- /api/WORKSPACE: -------------------------------------------------------------------------------- 1 | # Bazel workspace created by @bazel/create 1.6.1 2 | 3 | # Declares that this directory is the root of a Bazel workspace. 4 | # See https://docs.bazel.build/versions/master/build-ref.html#workspace 5 | workspace( 6 | # How this workspace would be referenced with absolute labels from another workspace 7 | name = "catsify", 8 | # Map the @npm bazel workspace to the node_modules directory. 9 | # This lets Bazel use the same node_modules as other local tooling. 10 | managed_directories = {"@npm": ["node_modules"]}, 11 | ) 12 | 13 | # Install the nodejs "bootstrap" package 14 | # This provides the basic tools for running and packaging nodejs programs in Bazel 15 | load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") 16 | http_archive( 17 | name = "build_bazel_rules_nodejs", 18 | sha256 = "d14076339deb08e5460c221fae5c5e9605d2ef4848eee1f0c81c9ffdc1ab31c1", 19 | urls = ["https://github.com/bazelbuild/rules_nodejs/releases/download/1.6.1/rules_nodejs-1.6.1.tar.gz"], 20 | ) 21 | 22 | 23 | http_archive( 24 | name = "io_bazel_rules_rust", 25 | sha256 = "c80c470ddbbed036f376d56eec4fe0585d7354cccc1f9c8d761498a07997c020", 26 | strip_prefix = "rules_rust-e0dcca40f303e76c4347b9cf541d757edb029441", 27 | urls = [ 28 | "https://github.com/bazelbuild/rules_rust/archive/e0dcca40f303e76c4347b9cf541d757edb029441.tar.gz", 29 | ], 30 | ) 31 | # local_repository( 32 | # name = "io_bazel_rules_rust", 33 | # path = "/Users/wassimchegham/oss/rules_rust" 34 | # ) 35 | 36 | http_archive( 37 | name = "bazel_skylib", 38 | urls = [ 39 | "https://mirror.bazel.build/github.com/bazelbuild/bazel-skylib/releases/download/1.0.2/bazel-skylib-1.0.2.tar.gz", 40 | "https://github.com/bazelbuild/bazel-skylib/releases/download/1.0.2/bazel-skylib-1.0.2.tar.gz", 41 | ], 42 | sha256 = "97e70364e9249702246c0e9444bccdc4b847bed1eb03c5a3ece4f83dfe6abc44", 43 | ) 44 | load("@bazel_skylib//:workspace.bzl", "bazel_skylib_workspace") 45 | bazel_skylib_workspace() 46 | 47 | load("@io_bazel_rules_rust//rust:repositories.bzl", "rust_repositories") 48 | rust_repositories() 49 | 50 | load("@io_bazel_rules_rust//wasm_bindgen:repositories.bzl", "rust_wasm_bindgen_repositories") 51 | rust_wasm_bindgen_repositories() 52 | 53 | load("@io_bazel_rules_rust//:workspace.bzl", "bazel_version") 54 | bazel_version(name = "bazel_version") 55 | 56 | # The npm_install rule runs yarn anytime the package.json or package-lock.json file changes. 57 | # It also extracts any Bazel rules distributed in an npm package. 58 | load("@build_bazel_rules_nodejs//:index.bzl", "npm_install") 59 | npm_install( 60 | # Name this npm so that Bazel Label references look like @npm//package 61 | name = "npm", 62 | package_json = "//:package.json", 63 | package_lock_json = "//:package-lock.json", 64 | ) 65 | 66 | # Install any Bazel rules which were extracted earlier by the npm_install rule. 67 | load("@npm//:install_bazel_dependencies.bzl", "install_bazel_dependencies") 68 | install_bazel_dependencies() 69 | 70 | # Setup TypeScript toolchain 71 | load("@npm_bazel_typescript//:index.bzl", "ts_setup_workspace") 72 | ts_setup_workspace() 73 | -------------------------------------------------------------------------------- /app/src/app/app.component.ts: -------------------------------------------------------------------------------- 1 | import { Component } from "@angular/core"; 2 | import { environment } from "src/environments/environment"; 3 | import { GeneratorService } from "./generator.service"; 4 | 5 | @Component({ 6 | selector: "app-root", 7 | template: ` 8 |
9 |

CATSIFY

10 | 11 | 12 | Tweet! 20 |
21 | `, 22 | styles: [ 23 | ` 24 | app-flip-board { 25 | margin: 6em 1em; 26 | display: block; 27 | } 28 | h1 { 29 | font-size: 6em; 30 | color: transparent; 31 | text-shadow: 2px 2px 3px rgba(255, 255, 255, 0.5); 32 | background-clip: text; 33 | margin-top: 0; 34 | } 35 | button { 36 | opacity: 0; 37 | transition: 1s opacity; 38 | } 39 | button.show { 40 | opacity: 1; 41 | } 42 | .button { 43 | display: inline-block; 44 | padding: 15px; 45 | margin-right: 5px; 46 | background: #965e74; 47 | text-decoration: none; 48 | cursor: pointer; 49 | border: none; 50 | outline: none; 51 | color: white; 52 | font-weight: 400; 53 | font-size: 20px; 54 | border-radius: 3px; 55 | box-shadow: 0 5px 0px #674050; 56 | border-bottom: 2px solid #412933; 57 | text-transform: uppercase; 58 | font-family: arial, sans-serif; 59 | } 60 | .button:hover { 61 | background: #2e7a94; 62 | box-shadow: 0 4px 1px #2e7a94; 63 | border-bottom: 2px solid #2a7088; 64 | transition: all 0.1s ease-in; 65 | } 66 | .button:active { 67 | transform: translateY(4px); 68 | border-bottom-width: 2px; 69 | box-shadow: none; 70 | } 71 | `, 72 | ], 73 | }) 74 | export class AppComponent { 75 | generator: { name: string; ready: boolean }; 76 | showButton: boolean; 77 | 78 | constructor(private readonly generatorService: GeneratorService) {} 79 | 80 | ngOnInit() { 81 | this.showButton = false; 82 | setTimeout((_) => { 83 | // wait till the component is loaded and then show the message 84 | this.generator = { name: "Cat Names Generator!", ready: false }; 85 | }, 100); 86 | 87 | setTimeout((_) => { 88 | this.showButton = true; 89 | }, 4000); 90 | } 91 | async generate() { 92 | // let { noun, adjective } = await (await fetch(environment.api)).json(); 93 | let { noun, adjective } = this.generatorService.generate(); 94 | this.generator = { 95 | name: `${this.camelCase(adjective)} ${this.camelCase(noun)}`, 96 | ready: true, 97 | }; 98 | } 99 | 100 | private camelCase(value: string) { 101 | // value is already in lower case 102 | return value[0].toUpperCase() + value.slice(1); 103 | } 104 | } 105 | -------------------------------------------------------------------------------- /app/angular.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "./node_modules/@angular/cli/lib/config/schema.json", 3 | "version": 1, 4 | "newProjectRoot": "projects", 5 | "projects": { 6 | "ui": { 7 | "projectType": "application", 8 | "schematics": { 9 | "@schematics/angular:component": { 10 | "inlineTemplate": true, 11 | "inlineStyle": true, 12 | "skipTests": true 13 | }, 14 | "@schematics/angular:class": { 15 | "skipTests": true 16 | }, 17 | "@schematics/angular:directive": { 18 | "skipTests": true 19 | }, 20 | "@schematics/angular:guard": { 21 | "skipTests": true 22 | }, 23 | "@schematics/angular:interceptor": { 24 | "skipTests": true 25 | }, 26 | "@schematics/angular:module": { 27 | "skipTests": true 28 | }, 29 | "@schematics/angular:pipe": { 30 | "skipTests": true 31 | }, 32 | "@schematics/angular:service": { 33 | "skipTests": true 34 | } 35 | }, 36 | "root": "", 37 | "sourceRoot": "src", 38 | "prefix": "app", 39 | "architect": { 40 | "build": { 41 | "builder": "@angular-devkit/build-angular:browser", 42 | "options": { 43 | "outputPath": "dist/ui", 44 | "index": "src/index.html", 45 | "main": "src/main.ts", 46 | "polyfills": "src/polyfills.ts", 47 | "tsConfig": "tsconfig.app.json", 48 | "aot": true, 49 | "assets": [ 50 | "src/favicon.ico", 51 | "src/assets" 52 | ], 53 | "styles": [ 54 | "src/styles.css", 55 | "./node_modules/@pqina/flip/dist/flip.min.css" 56 | ], 57 | "scripts": [] 58 | }, 59 | "configurations": { 60 | "production": { 61 | "fileReplacements": [ 62 | { 63 | "replace": "src/environments/environment.ts", 64 | "with": "src/environments/environment.prod.ts" 65 | } 66 | ], 67 | "optimization": true, 68 | "outputHashing": "all", 69 | "sourceMap": false, 70 | "extractCss": true, 71 | "namedChunks": false, 72 | "extractLicenses": true, 73 | "vendorChunk": false, 74 | "buildOptimizer": true, 75 | "budgets": [ 76 | { 77 | "type": "initial", 78 | "maximumWarning": "2mb", 79 | "maximumError": "5mb" 80 | }, 81 | { 82 | "type": "anyComponentStyle", 83 | "maximumWarning": "6kb", 84 | "maximumError": "10kb" 85 | } 86 | ] 87 | } 88 | } 89 | }, 90 | "serve": { 91 | "builder": "@angular-devkit/build-angular:dev-server", 92 | "options": { 93 | "browserTarget": "ui:build" 94 | }, 95 | "configurations": { 96 | "production": { 97 | "browserTarget": "ui:build:production" 98 | } 99 | } 100 | }, 101 | "extract-i18n": { 102 | "builder": "@angular-devkit/build-angular:extract-i18n", 103 | "options": { 104 | "browserTarget": "ui:build" 105 | } 106 | } 107 | } 108 | } 109 | }, 110 | "defaultProject": "ui", 111 | "cli": { 112 | "analytics": false 113 | } 114 | } -------------------------------------------------------------------------------- /api/Cargo.lock: -------------------------------------------------------------------------------- 1 | # This file is automatically @generated by Cargo. 2 | # It is not intended for manual editing. 3 | [[package]] 4 | name = "bumpalo" 5 | version = "3.2.0" 6 | source = "registry+https://github.com/rust-lang/crates.io-index" 7 | checksum = "1f359dc14ff8911330a51ef78022d376f25ed00248912803b58f00cb1c27f742" 8 | 9 | [[package]] 10 | name = "catsify" 11 | version = "1.0.0" 12 | dependencies = [ 13 | "wasm-bindgen", 14 | ] 15 | 16 | [[package]] 17 | name = "cfg-if" 18 | version = "0.1.10" 19 | source = "registry+https://github.com/rust-lang/crates.io-index" 20 | checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" 21 | 22 | [[package]] 23 | name = "lazy_static" 24 | version = "1.4.0" 25 | source = "registry+https://github.com/rust-lang/crates.io-index" 26 | checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" 27 | 28 | [[package]] 29 | name = "log" 30 | version = "0.4.8" 31 | source = "registry+https://github.com/rust-lang/crates.io-index" 32 | checksum = "14b6052be84e6b71ab17edffc2eeabf5c2c3ae1fdb464aae35ac50c67a44e1f7" 33 | dependencies = [ 34 | "cfg-if", 35 | ] 36 | 37 | [[package]] 38 | name = "proc-macro2" 39 | version = "1.0.8" 40 | source = "registry+https://github.com/rust-lang/crates.io-index" 41 | checksum = "3acb317c6ff86a4e579dfa00fc5e6cca91ecbb4e7eb2df0468805b674eb88548" 42 | dependencies = [ 43 | "unicode-xid", 44 | ] 45 | 46 | [[package]] 47 | name = "quote" 48 | version = "1.0.2" 49 | source = "registry+https://github.com/rust-lang/crates.io-index" 50 | checksum = "053a8c8bcc71fcce321828dc897a98ab9760bef03a4fc36693c231e5b3216cfe" 51 | dependencies = [ 52 | "proc-macro2", 53 | ] 54 | 55 | [[package]] 56 | name = "syn" 57 | version = "1.0.14" 58 | source = "registry+https://github.com/rust-lang/crates.io-index" 59 | checksum = "af6f3550d8dff9ef7dc34d384ac6f107e5d31c8f57d9f28e0081503f547ac8f5" 60 | dependencies = [ 61 | "proc-macro2", 62 | "quote", 63 | "unicode-xid", 64 | ] 65 | 66 | [[package]] 67 | name = "unicode-xid" 68 | version = "0.2.0" 69 | source = "registry+https://github.com/rust-lang/crates.io-index" 70 | checksum = "826e7639553986605ec5979c7dd957c7895e93eabed50ab2ffa7f6128a75097c" 71 | 72 | [[package]] 73 | name = "wasm-bindgen" 74 | version = "0.2.58" 75 | source = "registry+https://github.com/rust-lang/crates.io-index" 76 | checksum = "5205e9afdf42282b192e2310a5b463a6d1c1d774e30dc3c791ac37ab42d2616c" 77 | dependencies = [ 78 | "cfg-if", 79 | "wasm-bindgen-macro", 80 | ] 81 | 82 | [[package]] 83 | name = "wasm-bindgen-backend" 84 | version = "0.2.58" 85 | source = "registry+https://github.com/rust-lang/crates.io-index" 86 | checksum = "11cdb95816290b525b32587d76419facd99662a07e59d3cdb560488a819d9a45" 87 | dependencies = [ 88 | "bumpalo", 89 | "lazy_static", 90 | "log", 91 | "proc-macro2", 92 | "quote", 93 | "syn", 94 | "wasm-bindgen-shared", 95 | ] 96 | 97 | [[package]] 98 | name = "wasm-bindgen-macro" 99 | version = "0.2.58" 100 | source = "registry+https://github.com/rust-lang/crates.io-index" 101 | checksum = "574094772ce6921576fb6f2e3f7497b8a76273b6db092be18fc48a082de09dc3" 102 | dependencies = [ 103 | "quote", 104 | "wasm-bindgen-macro-support", 105 | ] 106 | 107 | [[package]] 108 | name = "wasm-bindgen-macro-support" 109 | version = "0.2.58" 110 | source = "registry+https://github.com/rust-lang/crates.io-index" 111 | checksum = "e85031354f25eaebe78bb7db1c3d86140312a911a106b2e29f9cc440ce3e7668" 112 | dependencies = [ 113 | "proc-macro2", 114 | "quote", 115 | "syn", 116 | "wasm-bindgen-backend", 117 | "wasm-bindgen-shared", 118 | ] 119 | 120 | [[package]] 121 | name = "wasm-bindgen-shared" 122 | version = "0.2.58" 123 | source = "registry+https://github.com/rust-lang/crates.io-index" 124 | checksum = "f5e7e61fc929f4c0dddb748b102ebf9f632e2b8d739f2016542b4de2965a9601" 125 | -------------------------------------------------------------------------------- /app/src/app/flip-board.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, Input, ViewChild, ElementRef, SimpleChanges } from "@angular/core"; 2 | import Tick from "@pqina/flip"; 3 | 4 | @Component({ 5 | selector: "app-flip-board", 6 | template: ` 7 |
8 |
9 | 10 |
11 |
12 | `, 13 | styles: [ 14 | ` 15 | :host { 16 | display: block; 17 | position: relative; 18 | } 19 | 20 | .tick { 21 | font-size: 1rem; 22 | white-space: nowrap; 23 | font-family: arial, sans-serif; 24 | } 25 | 26 | .tick-wrapper { 27 | flex-wrap: wrap; 28 | } 29 | 30 | .tick-flip, 31 | .tick-text-inline { 32 | font-size: 2.5em; 33 | } 34 | 35 | .tick-label { 36 | margin-top: 1em; 37 | font-size: 1em; 38 | } 39 | 40 | .tick-char { 41 | width: 1.1em; 42 | } 43 | 44 | .tick-text-inline { 45 | display: inline-block; 46 | text-align: center; 47 | min-width: 1em; 48 | } 49 | 50 | .tick-text-inline + .tick-text-inline { 51 | margin-left: -0.325em; 52 | } 53 | 54 | .tick-group { 55 | margin: 0 0.5em; 56 | text-align: center; 57 | } 58 | 59 | .tick-text-inline { 60 | color: #595d63 !important; 61 | } 62 | 63 | .tick-label { 64 | color: #595d63 !important; 65 | } 66 | 67 | .tick-flip-panel { 68 | color: #fff !important; 69 | } 70 | 71 | .tick-flip { 72 | font-family: !important; 73 | } 74 | 75 | .tick-flip-panel-text-wrapper { 76 | line-height: 1.45 !important; 77 | } 78 | 79 | .tick-flip-panel { 80 | background-color: #3c3e3c !important; 81 | } 82 | 83 | .tick-flip { 84 | border-radius: 0.12em !important; 85 | } 86 | `, 87 | ], 88 | }) 89 | export class FlipBoardComponent { 90 | @Input("value") value = ""; 91 | @Input("max") maxChars = 20; 92 | @ViewChild("tick", { 93 | static: true, 94 | }) 95 | tickRef: ElementRef; 96 | @ViewChild("audio", { 97 | static: true, 98 | }) 99 | audioRef: ElementRef; 100 | 101 | tick: Tick; 102 | 103 | audio: any; 104 | 105 | constructor() { 106 | this.audio = new Audio("assets/flip.wav"); 107 | 108 | // We need to mute the audio first in order to avoid the following exception. 109 | // We will unmute it just before playing the effect (see below). 110 | // DOMException: play() failed because the user didn't interact with the document first. 111 | this.audio.muted = true; 112 | } 113 | 114 | ngOnInit() { 115 | this.tick = Tick.DOM.create(this.tickRef.nativeElement, { 116 | value: this.padBetween(this.value || ""), 117 | didUpdate: () => { 118 | this.effect(this.tickRef.nativeElement); 119 | }, 120 | }); 121 | } 122 | 123 | ngOnChanges(changes: SimpleChanges) { 124 | if (this.tick && changes?.value?.currentValue) { 125 | let value: string = changes.value.currentValue; 126 | this.tick.value = this.padBetween(value); 127 | } 128 | } 129 | 130 | private effect(targetNode: HTMLElement) { 131 | this.audio.muted = false; 132 | const config = { childList: true, subtree: true }; 133 | const tick = () => setTimeout((_) => this.audio.play(), 0); 134 | const callback = (mutationsList: any, observer: any) => { 135 | for (let mutation of mutationsList) { 136 | if (mutation.type === "childList" && mutation.target.dataset['view'] && mutation.removedNodes.length === 0) { 137 | tick(); 138 | } 139 | } 140 | }; 141 | const observer = new MutationObserver(callback); 142 | observer.observe(targetNode, config); 143 | } 144 | 145 | private padBetween(str: string) { 146 | let spaces = this.maxChars - str.length; 147 | let padLeft = spaces / 2 + str.length; 148 | return str.padStart(padLeft).padEnd(this.maxChars); 149 | } 150 | } 151 | -------------------------------------------------------------------------------- /api/.bazelrc: -------------------------------------------------------------------------------- 1 | # Common Bazel settings for JavaScript/NodeJS workspaces 2 | # This rc file is automatically discovered when Bazel is run in this workspace, 3 | # see https://docs.bazel.build/versions/master/guide.html#bazelrc 4 | # 5 | # The full list of Bazel options: https://docs.bazel.build/versions/master/command-line-reference.html 6 | 7 | # Cache action outputs on disk so they persist across output_base and bazel shutdown (eg. changing branches) 8 | #build --disk_cache=~/.cache/bazel-disk-cache 9 | build --remote_cache=http://40.121.41.231/cache/ 10 | 11 | # Bazel will create symlinks from the workspace directory to output artifacts. 12 | # Build results will be placed in a directory called "dist/bin" 13 | # Other directories will be created like "dist/testlogs" 14 | # Be aware that this will still create a bazel-out symlink in 15 | # your project directory, which you must exclude from version control and your 16 | # editor's search path. 17 | build --symlink_prefix=bazel-dist/ 18 | 19 | # To disable the symlinks altogether (including bazel-out) you can use 20 | # build --symlink_prefix=/ 21 | # however this makes it harder to find outputs. 22 | 23 | # Specifies desired output mode for running tests. 24 | # Valid values are 25 | # 'summary' to output only test status summary 26 | # 'errors' to also print test logs for failed tests 27 | # 'all' to print logs for all tests 28 | # 'streamed' to output logs for all tests in real time 29 | # (this will force tests to be executed locally one at a time regardless of --test_strategy value). 30 | test --test_output=errors 31 | 32 | # Support for debugging NodeJS tests 33 | # Add the Bazel option `--config=debug` to enable this 34 | # --test_output=streamed 35 | # Stream stdout/stderr output from each test in real-time. 36 | # See https://docs.bazel.build/versions/master/user-manual.html#flag--test_output for more details. 37 | # --test_strategy=exclusive 38 | # Run one test at a time. 39 | # --test_timeout=9999 40 | # Prevent long running tests from timing out 41 | # See https://docs.bazel.build/versions/master/user-manual.html#flag--test_timeout for more details. 42 | # --nocache_test_results 43 | # Always run tests 44 | # --node_options=--inspect-brk 45 | # Pass the --inspect-brk option to all tests which enables the node inspector agent. 46 | # See https://nodejs.org/de/docs/guides/debugging-getting-started/#command-line-options for more details. 47 | # --define=VERBOSE_LOGS=1 48 | # Rules will output verbose logs if the VERBOSE_LOGS environment variable is set. `VERBOSE_LOGS` will be passed to 49 | # `nodejs_binary` and `nodejs_test` via the default value of the `default_env_vars` attribute of those rules. 50 | # --compilation_mode=dbg 51 | # Rules may change their build outputs if the compilation mode is set to dbg. For example, 52 | # mininfiers such as terser may make their output more human readable when this is set. Rules will pass `COMPILATION_MODE` 53 | # to `nodejs_binary` executables via the actions.run env attribute. 54 | # See https://docs.bazel.build/versions/master/user-manual.html#flag--compilation_mode for more details. 55 | test:debug --test_output=streamed --test_strategy=exclusive --test_timeout=9999 --nocache_test_results --define=VERBOSE_LOGS=1 56 | # Use bazel run with `--config=debug` to turn on the NodeJS inspector agent. 57 | # The node process will break before user code starts and wait for the debugger to connect. 58 | run:debug --define=VERBOSE_LOGS=1 -- --node_options=--inspect-brk 59 | # The following option will change the build output of certain rules such as terser and may not be desirable in all cases 60 | build:debug --compilation_mode=dbg 61 | 62 | # Turn off legacy external runfiles 63 | # This prevents accidentally depending on this feature, which Bazel will remove. 64 | build --nolegacy_external_runfiles 65 | 66 | # Turn on the "Managed Directories" feature. 67 | # This allows Bazel to share the same node_modules directory with other tools 68 | # NB: this option was introduced in Bazel 0.26 69 | # See https://docs.bazel.build/versions/master/command-line-reference.html#flag--experimental_allow_incremental_repository_updates 70 | common --experimental_allow_incremental_repository_updates 71 | 72 | # Turn on --incompatible_strict_action_env which was on by default 73 | # in Bazel 0.21.0 but turned off again in 0.22.0. Follow 74 | # https://github.com/bazelbuild/bazel/issues/7026 for more details. 75 | # This flag is needed to so that the bazel cache is not invalidated 76 | # when running bazel via `yarn bazel`. 77 | # See https://github.com/angular/angular/issues/27514. 78 | build --incompatible_strict_action_env 79 | run --incompatible_strict_action_env 80 | 81 | # Load any settings specific to the current user. 82 | # .bazelrc.user should appear in .gitignore so that settings are not shared with team members 83 | # This needs to be last statement in this 84 | # config, as the user configuration should be able to overwrite flags from this file. 85 | # See https://docs.bazel.build/versions/master/best-practices.html#bazelrc 86 | # (Note that we use .bazelrc.user so the file appears next to .bazelrc in directory listing, 87 | # rather than user.bazelrc as suggested in the Bazel docs) 88 | try-import %workspace%/.bazelrc.user 89 | 90 | -------------------------------------------------------------------------------- /api/rust/lib.rs: -------------------------------------------------------------------------------- 1 | use wasm_bindgen::prelude::*; 2 | //////////////////////////////////////////////////////////////////////////////////////////////// 3 | #[wasm_bindgen] 4 | pub fn generate_name_str(seed: i32) -> String { 5 | // the seed is coming from the JS side 6 | let a = seed % (ADJECTIVES.len() as i32); 7 | let b = seed % (NOUNS.len() as i32); 8 | [ADJECTIVES[a as usize].to_string(), " ".to_string(), NOUNS[b as usize].to_string()].join("") 9 | } 10 | //////////////////////////////////////////////////////////////////////////////////////////////// 11 | 12 | // #region 13 | // NOTE: when adding/removing words from this array, 14 | // please update the size of the array 15 | const ADJECTIVES: [&str; 1114] = [ 16 | "aback", 17 | "abashed", 18 | "aberrant", 19 | "abhorrent", 20 | "abiding", 21 | "abject", 22 | "ablaze", 23 | "able", 24 | "abnormal", 25 | "aboard", 26 | "aboriginal", 27 | "abortive", 28 | "abounding", 29 | "abrasive", 30 | "abrupt", 31 | "absent", 32 | "absorbed", 33 | "absorbing", 34 | "abstracted", 35 | "absurd", 36 | "abundant", 37 | "abusive", 38 | "acceptable", 39 | "accessible", 40 | "accidental", 41 | "accurate", 42 | "acid", 43 | "acidic", 44 | "acoustic", 45 | "acrid", 46 | "actually", 47 | "ad", 48 | "adamant", 49 | "adaptable", 50 | "addicted", 51 | "adhesive", 52 | "adjoining", 53 | "adorable", 54 | "adventurous", 55 | "afraid", 56 | "aggressive", 57 | "agonizing", 58 | "agreeable", 59 | "ahead", 60 | "ajar", 61 | "alcoholic", 62 | "alert", 63 | "alike", 64 | "alive", 65 | "alleged", 66 | "alluring", 67 | "aloof", 68 | "amazing", 69 | "ambiguous", 70 | "ambitious", 71 | "amuck", 72 | "amused", 73 | "amusing", 74 | "ancient", 75 | "angry", 76 | "animated", 77 | "annoyed", 78 | "annoying", 79 | "anxious", 80 | "apathetic", 81 | "aquatic", 82 | "aromatic", 83 | "arrogant", 84 | "ashamed", 85 | "aspiring", 86 | "assorted", 87 | "astonishing", 88 | "attractive", 89 | "auspicious", 90 | "automatic", 91 | "available", 92 | "average", 93 | "awake", 94 | "aware", 95 | "awesome", 96 | "awful", 97 | "axiomatic", 98 | "bad", 99 | "barbarous", 100 | "bashful", 101 | "bawdy", 102 | "beautiful", 103 | "befitting", 104 | "belligerent", 105 | "beneficial", 106 | "bent", 107 | "berserk", 108 | "best", 109 | "better", 110 | "bewildered", 111 | "big", 112 | "billowy", 113 | "bite-sized", 114 | "bitter", 115 | "bizarre", 116 | "black", 117 | "black-and-white", 118 | "bloody", 119 | "blue", 120 | "blue-eyed", 121 | "blushing", 122 | "boiling", 123 | "boorish", 124 | "bored", 125 | "boring", 126 | "bouncy", 127 | "boundless", 128 | "brainy", 129 | "brash", 130 | "brave", 131 | "brawny", 132 | "breakable", 133 | "breezy", 134 | "brief", 135 | "bright", 136 | "broad", 137 | "broken", 138 | "brown", 139 | "bumpy", 140 | "burly", 141 | "bustling", 142 | "busy", 143 | "cagey", 144 | "calculating", 145 | "callous", 146 | "calm", 147 | "capable", 148 | "capricious", 149 | "careful", 150 | "careless", 151 | "caring", 152 | "cautious", 153 | "ceaseless", 154 | "certain", 155 | "changeable", 156 | "charming", 157 | "cheap", 158 | "cheerful", 159 | "chemical", 160 | "chief", 161 | "childlike", 162 | "chilly", 163 | "chivalrous", 164 | "chubby", 165 | "chunky", 166 | "clammy", 167 | "classy", 168 | "clean", 169 | "clear", 170 | "clever", 171 | "cloistered", 172 | "closed", 173 | "cloudy", 174 | "clumsy", 175 | "cluttered", 176 | "coherent", 177 | "cold", 178 | "colorful", 179 | "colossal", 180 | "combative", 181 | "comfortable", 182 | "common", 183 | "complete", 184 | "complex", 185 | "concerned", 186 | "condemned", 187 | "confused", 188 | "conscious", 189 | "cooing", 190 | "cool", 191 | "cooperative", 192 | "coordinated", 193 | "courageous", 194 | "cowardly", 195 | "crabby", 196 | "craven", 197 | "crazy", 198 | "creepy", 199 | "crooked", 200 | "crowded", 201 | "cruel", 202 | "cuddly", 203 | "cultured", 204 | "cumbersome", 205 | "curious", 206 | "curly", 207 | "curved", 208 | "curvy", 209 | "cut", 210 | "cute", 211 | "cynical", 212 | "daffy", 213 | "daily", 214 | "damaged", 215 | "damaging", 216 | "damp", 217 | "dangerous", 218 | "dapper", 219 | "dark", 220 | "dashing", 221 | "dazzling", 222 | "dead", 223 | "deadpan", 224 | "deafening", 225 | "dear", 226 | "debonair", 227 | "decisive", 228 | "decorous", 229 | "deep", 230 | "deeply", 231 | "defeated", 232 | "defective", 233 | "defiant", 234 | "delicate", 235 | "delicious", 236 | "delightful", 237 | "delirious", 238 | "demonic", 239 | "dependent", 240 | "depressed", 241 | "deranged", 242 | "descriptive", 243 | "deserted", 244 | "detailed", 245 | "determined", 246 | "devilish", 247 | "didactic", 248 | "different", 249 | "difficult", 250 | "diligent", 251 | "direful", 252 | "disagreeable", 253 | "discreet", 254 | "distinct", 255 | "disturbed", 256 | "divergent", 257 | "dizzy", 258 | "domineering", 259 | "doubtful", 260 | "drab", 261 | "draconian", 262 | "dramatic", 263 | "dreary", 264 | "drunk", 265 | "dry", 266 | "dull", 267 | "dusty", 268 | "dynamic", 269 | "dysfunctional", 270 | "eager", 271 | "early", 272 | "earsplitting", 273 | "earthy", 274 | "easy", 275 | "eatable", 276 | "economic", 277 | "educated", 278 | "efficacious", 279 | "efficient", 280 | "eight", 281 | "elastic", 282 | "elated", 283 | "elderly", 284 | "electric", 285 | "elegant", 286 | "elfin", 287 | "elite", 288 | "embarrassed", 289 | "eminent", 290 | "empty", 291 | "enchanted", 292 | "enchanting", 293 | "encouraging", 294 | "endurable", 295 | "energetic", 296 | "enormous", 297 | "entertaining", 298 | "enthusiastic", 299 | "envious", 300 | "equable", 301 | "equal", 302 | "erratic", 303 | "ethereal", 304 | "evanescent", 305 | "evasive", 306 | "even", 307 | "excellent", 308 | "excited", 309 | "exciting", 310 | "exclusive", 311 | "exotic", 312 | "expensive", 313 | "extra-large", 314 | "extra-small", 315 | "exuberant", 316 | "exultant", 317 | "fabulous", 318 | "faded", 319 | "faint", 320 | "fair", 321 | "faithful", 322 | "fallacious", 323 | "false", 324 | "familiar", 325 | "famous", 326 | "fanatical", 327 | "fancy", 328 | "fantastic", 329 | "far", 330 | "far-flung", 331 | "fascinated", 332 | "fast", 333 | "fat", 334 | "faulty", 335 | "fearful", 336 | "fearless", 337 | "feeble", 338 | "feigned", 339 | "female", 340 | "festive", 341 | "few", 342 | "fierce", 343 | "filthy", 344 | "fine", 345 | "finicky", 346 | "first", 347 | "five", 348 | "fixed", 349 | "flagrant", 350 | "flaky", 351 | "flashy", 352 | "flat", 353 | "flawless", 354 | "flimsy", 355 | "flippant", 356 | "flowery", 357 | "fluffy", 358 | "fluttering", 359 | "foamy", 360 | "foolish", 361 | "foregoing", 362 | "forgetful", 363 | "fortunate", 364 | "four", 365 | "fragile", 366 | "frail", 367 | "frantic", 368 | "free", 369 | "freezing", 370 | "frequent", 371 | "fresh", 372 | "fretful", 373 | "friendly", 374 | "frightened", 375 | "frightening", 376 | "full", 377 | "fumbling", 378 | "functional", 379 | "funny", 380 | "furry", 381 | "furtive", 382 | "future", 383 | "futuristic", 384 | "fuzzy", 385 | "gabby", 386 | "gainful", 387 | "gamy", 388 | "gaping", 389 | "garrulous", 390 | "gaudy", 391 | "general", 392 | "gentle", 393 | "giant", 394 | "giddy", 395 | "gifted", 396 | "gigantic", 397 | "glamorous", 398 | "gleaming", 399 | "glib", 400 | "glistening", 401 | "glorious", 402 | "glossy", 403 | "godly", 404 | "good", 405 | "goofy", 406 | "gorgeous", 407 | "graceful", 408 | "grandiose", 409 | "grateful", 410 | "gratis", 411 | "gray", 412 | "greasy", 413 | "great", 414 | "greedy", 415 | "green", 416 | "grey", 417 | "grieving", 418 | "groovy", 419 | "grotesque", 420 | "grouchy", 421 | "grubby", 422 | "gruesome", 423 | "grumpy", 424 | "guarded", 425 | "guiltless", 426 | "gullible", 427 | "gusty", 428 | "guttural", 429 | "habitual", 430 | "half", 431 | "hallowed", 432 | "halting", 433 | "handsome", 434 | "handsomely", 435 | "handy", 436 | "hanging", 437 | "hapless", 438 | "happy", 439 | "hard", 440 | "hard-to-find", 441 | "harmonious", 442 | "harsh", 443 | "hateful", 444 | "heady", 445 | "healthy", 446 | "heartbreaking", 447 | "heavenly", 448 | "heavy", 449 | "hellish", 450 | "helpful", 451 | "helpless", 452 | "hesitant", 453 | "hideous", 454 | "high", 455 | "high-pitched", 456 | "highfalutin", 457 | "hilarious", 458 | "hissing", 459 | "historical", 460 | "holistic", 461 | "hollow", 462 | "homeless", 463 | "homely", 464 | "honorable", 465 | "horrible", 466 | "hospitable", 467 | "hot", 468 | "huge", 469 | "hulking", 470 | "humdrum", 471 | "humorous", 472 | "hungry", 473 | "hurried", 474 | "hurt", 475 | "hushed", 476 | "husky", 477 | "hypnotic", 478 | "hysterical", 479 | "icky", 480 | "icy", 481 | "idiotic", 482 | "ignorant", 483 | "ill", 484 | "ill-fated", 485 | "ill-informed", 486 | "illegal", 487 | "illustrious", 488 | "imaginary", 489 | "immense", 490 | "imminent", 491 | "impartial", 492 | "imperfect", 493 | "impolite", 494 | "important", 495 | "imported", 496 | "impossible", 497 | "incandescent", 498 | "incompetent", 499 | "inconclusive", 500 | "incredible", 501 | "industrious", 502 | "inexpensive", 503 | "infamous", 504 | "innate", 505 | "innocent", 506 | "inquisitive", 507 | "insidious", 508 | "instinctive", 509 | "intelligent", 510 | "interesting", 511 | "internal", 512 | "invincible", 513 | "irate", 514 | "irritating", 515 | "itchy", 516 | "jaded", 517 | "jagged", 518 | "jazzy", 519 | "jealous", 520 | "jittery", 521 | "jobless", 522 | "jolly", 523 | "joyous", 524 | "judicious", 525 | "juicy", 526 | "jumbled", 527 | "jumpy", 528 | "juvenile", 529 | "kaput", 530 | "keen", 531 | "kind", 532 | "kindhearted", 533 | "kindly", 534 | "knotty", 535 | "knowing", 536 | "knowledgeable", 537 | "known", 538 | "labored", 539 | "lackadaisical", 540 | "lacking", 541 | "lame", 542 | "lamentable", 543 | "languid", 544 | "large", 545 | "last", 546 | "late", 547 | "laughable", 548 | "lavish", 549 | "lazy", 550 | "lean", 551 | "learned", 552 | "left", 553 | "legal", 554 | "lethal", 555 | "level", 556 | "lewd", 557 | "light", 558 | "like", 559 | "likeable", 560 | "limping", 561 | "literate", 562 | "little", 563 | "lively", 564 | "living", 565 | "lonely", 566 | "long", 567 | "long-term", 568 | "longing", 569 | "loose", 570 | "lopsided", 571 | "loud", 572 | "loutish", 573 | "lovely", 574 | "loving", 575 | "low", 576 | "lowly", 577 | "lucky", 578 | "ludicrous", 579 | "lumpy", 580 | "lush", 581 | "luxuriant", 582 | "lying", 583 | "lyrical", 584 | "macabre", 585 | "macho", 586 | "maddening", 587 | "madly", 588 | "magenta", 589 | "magical", 590 | "magnificent", 591 | "majestic", 592 | "makeshift", 593 | "male", 594 | "malicious", 595 | "mammoth", 596 | "maniacal", 597 | "many", 598 | "marked", 599 | "married", 600 | "marvelous", 601 | "massive", 602 | "material", 603 | "materialistic", 604 | "mature", 605 | "mean", 606 | "measly", 607 | "meaty", 608 | "medical", 609 | "meek", 610 | "mellow", 611 | "melodic", 612 | "melted", 613 | "merciful", 614 | "mere", 615 | "messy", 616 | "mighty", 617 | "military", 618 | "milky", 619 | "mindless", 620 | "miniature", 621 | "minor", 622 | "miscreant", 623 | "misty", 624 | "mixed", 625 | "moaning", 626 | "modern", 627 | "moldy", 628 | "momentous", 629 | "motionless", 630 | "mountainous", 631 | "muddled", 632 | "mundane", 633 | "murky", 634 | "mushy", 635 | "mute", 636 | "mysterious", 637 | "naive", 638 | "nappy", 639 | "narrow", 640 | "nasty", 641 | "natural", 642 | "naughty", 643 | "nauseating", 644 | "near", 645 | "neat", 646 | "nebulous", 647 | "necessary", 648 | "needless", 649 | "needy", 650 | "neighborly", 651 | "nervous", 652 | "new", 653 | "next", 654 | "nice", 655 | "nifty", 656 | "nimble", 657 | "nine", 658 | "nippy", 659 | "noiseless", 660 | "noisy", 661 | "nonchalant", 662 | "nondescript", 663 | "nonstop", 664 | "normal", 665 | "nostalgic", 666 | "nosy", 667 | "noxious", 668 | "null", 669 | "numberless", 670 | "numerous", 671 | "nutritious", 672 | "nutty", 673 | "oafish", 674 | "obedient", 675 | "obeisant", 676 | "obese", 677 | "obnoxious", 678 | "obscene", 679 | "obsequious", 680 | "observant", 681 | "obsolete", 682 | "obtainable", 683 | "oceanic", 684 | "odd", 685 | "offbeat", 686 | "old", 687 | "old-fashioned", 688 | "omniscient", 689 | "one", 690 | "onerous", 691 | "open", 692 | "opposite", 693 | "optimal", 694 | "orange", 695 | "ordinary", 696 | "organic", 697 | "ossified", 698 | "outgoing", 699 | "outrageous", 700 | "outstanding", 701 | "oval", 702 | "overconfident", 703 | "overjoyed", 704 | "overrated", 705 | "overt", 706 | "overwrought", 707 | "painful", 708 | "painstaking", 709 | "pale", 710 | "paltry", 711 | "panicky", 712 | "panoramic", 713 | "parallel", 714 | "parched", 715 | "parsimonious", 716 | "past", 717 | "pastoral", 718 | "pathetic", 719 | "peaceful", 720 | "penitent", 721 | "perfect", 722 | "periodic", 723 | "permissible", 724 | "perpetual", 725 | "petite", 726 | "phobic", 727 | "physical", 728 | "picayune", 729 | "pink", 730 | "piquant", 731 | "placid", 732 | "plain", 733 | "plant", 734 | "plastic", 735 | "plausible", 736 | "pleasant", 737 | "plucky", 738 | "pointless", 739 | "poised", 740 | "polite", 741 | "political", 742 | "poor", 743 | "possessive", 744 | "possible", 745 | "powerful", 746 | "precious", 747 | "premium", 748 | "present", 749 | "pretty", 750 | "previous", 751 | "pricey", 752 | "prickly", 753 | "private", 754 | "probable", 755 | "productive", 756 | "profuse", 757 | "protective", 758 | "proud", 759 | "psychedelic", 760 | "psychotic", 761 | "public", 762 | "puffy", 763 | "pumped", 764 | "puny", 765 | "purple", 766 | "purring", 767 | "pushy", 768 | "puzzled", 769 | "puzzling", 770 | "quack", 771 | "quaint", 772 | "quarrelsome", 773 | "questionable", 774 | "quick", 775 | "quickest", 776 | "quiet", 777 | "quirky", 778 | "quixotic", 779 | "quizzical", 780 | "rabid", 781 | "racial", 782 | "ragged", 783 | "rainy", 784 | "rambunctious", 785 | "rampant", 786 | "rapid", 787 | "rare", 788 | "raspy", 789 | "ratty", 790 | "ready", 791 | "real", 792 | "rebel", 793 | "receptive", 794 | "recondite", 795 | "red", 796 | "redundant", 797 | "reflective", 798 | "regular", 799 | "relieved", 800 | "remarkable", 801 | "reminiscent", 802 | "repulsive", 803 | "resolute", 804 | "resonant", 805 | "responsible", 806 | "rhetorical", 807 | "rich", 808 | "right", 809 | "righteous", 810 | "rightful", 811 | "rigid", 812 | "ripe", 813 | "ritzy", 814 | "roasted", 815 | "robust", 816 | "romantic", 817 | "roomy", 818 | "rotten", 819 | "rough", 820 | "round", 821 | "royal", 822 | "ruddy", 823 | "rude", 824 | "rural", 825 | "rustic", 826 | "ruthless", 827 | "sable", 828 | "sad", 829 | "safe", 830 | "salty", 831 | "same", 832 | "sassy", 833 | "satisfying", 834 | "savory", 835 | "scandalous", 836 | "scarce", 837 | "scared", 838 | "scary", 839 | "scattered", 840 | "scientific", 841 | "scintillating", 842 | "scrawny", 843 | "screeching", 844 | "second", 845 | "second-hand", 846 | "secret", 847 | "secretive", 848 | "sedate", 849 | "seemly", 850 | "selective", 851 | "selfish", 852 | "separate", 853 | "serious", 854 | "shaggy", 855 | "shaky", 856 | "shallow", 857 | "sharp", 858 | "shiny", 859 | "shivering", 860 | "shocking", 861 | "short", 862 | "shrill", 863 | "shut", 864 | "shy", 865 | "sick", 866 | "silent", 867 | "silky", 868 | "silly", 869 | "simple", 870 | "simplistic", 871 | "sincere", 872 | "six", 873 | "skillful", 874 | "skinny", 875 | "sleepy", 876 | "slim", 877 | "slimy", 878 | "slippery", 879 | "sloppy", 880 | "slow", 881 | "small", 882 | "smart", 883 | "smelly", 884 | "smiling", 885 | "smoggy", 886 | "smooth", 887 | "sneaky", 888 | "snobbish", 889 | "snotty", 890 | "soft", 891 | "soggy", 892 | "solid", 893 | "somber", 894 | "sophisticated", 895 | "sordid", 896 | "sore", 897 | "sour", 898 | "sparkling", 899 | "special", 900 | "spectacular", 901 | "spicy", 902 | "spiffy", 903 | "spiky", 904 | "spiritual", 905 | "spiteful", 906 | "splendid", 907 | "spooky", 908 | "spotless", 909 | "spotted", 910 | "spotty", 911 | "spurious", 912 | "squalid", 913 | "square", 914 | "squealing", 915 | "squeamish", 916 | "staking", 917 | "stale", 918 | "standing", 919 | "statuesque", 920 | "steadfast", 921 | "steady", 922 | "steep", 923 | "stereotyped", 924 | "sticky", 925 | "stiff", 926 | "stimulating", 927 | "stingy", 928 | "stormy", 929 | "straight", 930 | "strange", 931 | "striped", 932 | "strong", 933 | "stupendous", 934 | "stupid", 935 | "sturdy", 936 | "subdued", 937 | "subsequent", 938 | "substantial", 939 | "successful", 940 | "succinct", 941 | "sudden", 942 | "sulky", 943 | "super", 944 | "superb", 945 | "superficial", 946 | "supreme", 947 | "swanky", 948 | "sweet", 949 | "sweltering", 950 | "swift", 951 | "symptomatic", 952 | "synonymous", 953 | "taboo", 954 | "tacit", 955 | "tacky", 956 | "talented", 957 | "tall", 958 | "tame", 959 | "tan", 960 | "tangible", 961 | "tangy", 962 | "tart", 963 | "tasteful", 964 | "tasteless", 965 | "tasty", 966 | "tawdry", 967 | "tearful", 968 | "tedious", 969 | "teeny", 970 | "teeny-tiny", 971 | "telling", 972 | "temporary", 973 | "ten", 974 | "tender", 975 | "tense", 976 | "tenuous", 977 | "terrible", 978 | "terrific", 979 | "tested", 980 | "testy", 981 | "thankful", 982 | "therapeutic", 983 | "thick", 984 | "thin", 985 | "thinkable", 986 | "third", 987 | "thirsty", 988 | "thoughtful", 989 | "thoughtless", 990 | "threatening", 991 | "three", 992 | "thundering", 993 | "tidy", 994 | "tight", 995 | "tightfisted", 996 | "tiny", 997 | "tired", 998 | "tiresome", 999 | "toothsome", 1000 | "torpid", 1001 | "tough", 1002 | "towering", 1003 | "tranquil", 1004 | "trashy", 1005 | "tremendous", 1006 | "tricky", 1007 | "trite", 1008 | "troubled", 1009 | "truculent", 1010 | "true", 1011 | "truthful", 1012 | "two", 1013 | "typical", 1014 | "ubiquitous", 1015 | "ugliest", 1016 | "ugly", 1017 | "ultra", 1018 | "unable", 1019 | "unaccountable", 1020 | "unadvised", 1021 | "unarmed", 1022 | "unbecoming", 1023 | "unbiased", 1024 | "uncovered", 1025 | "understood", 1026 | "undesirable", 1027 | "unequal", 1028 | "unequaled", 1029 | "uneven", 1030 | "unhealthy", 1031 | "uninterested", 1032 | "unique", 1033 | "unkempt", 1034 | "unknown", 1035 | "unnatural", 1036 | "unruly", 1037 | "unsightly", 1038 | "unsuitable", 1039 | "untidy", 1040 | "unused", 1041 | "unusual", 1042 | "unwieldy", 1043 | "unwritten", 1044 | "upbeat", 1045 | "uppity", 1046 | "upset", 1047 | "uptight", 1048 | "used", 1049 | "useful", 1050 | "useless", 1051 | "utopian", 1052 | "utter", 1053 | "uttermost", 1054 | "vacuous", 1055 | "vagabond", 1056 | "vague", 1057 | "valuable", 1058 | "various", 1059 | "vast", 1060 | "vengeful", 1061 | "venomous", 1062 | "verdant", 1063 | "versed", 1064 | "victorious", 1065 | "vigorous", 1066 | "violent", 1067 | "violet", 1068 | "vivacious", 1069 | "voiceless", 1070 | "volatile", 1071 | "voracious", 1072 | "vulgar", 1073 | "wacky", 1074 | "waggish", 1075 | "waiting", 1076 | "wakeful", 1077 | "wandering", 1078 | "wanting", 1079 | "warlike", 1080 | "warm", 1081 | "wary", 1082 | "wasteful", 1083 | "watery", 1084 | "weak", 1085 | "wealthy", 1086 | "weary", 1087 | "well-groomed", 1088 | "well-made", 1089 | "well-off", 1090 | "well-to-do", 1091 | "wet", 1092 | "whimsical", 1093 | "whispering", 1094 | "white", 1095 | "whole", 1096 | "wholesale", 1097 | "wicked", 1098 | "wide", 1099 | "wide-eyed", 1100 | "wiggly", 1101 | "wild", 1102 | "willing", 1103 | "windy", 1104 | "wiry", 1105 | "wise", 1106 | "wistful", 1107 | "witty", 1108 | "woebegone", 1109 | "womanly", 1110 | "wonderful", 1111 | "wooden", 1112 | "woozy", 1113 | "workable", 1114 | "worried", 1115 | "worthless", 1116 | "wrathful", 1117 | "wretched", 1118 | "wrong", 1119 | "wry", 1120 | "yellow", 1121 | "yielding", 1122 | "young", 1123 | "youthful", 1124 | "yummy", 1125 | "zany", 1126 | "zealous", 1127 | "zesty", 1128 | "zippy", 1129 | "zonked" 1130 | ]; 1131 | // #endregion 1132 | // #region 1133 | // NOTE: when adding/removing words from this array, 1134 | // please update the size of the array 1135 | const NOUNS: [&str; 1201] = [ 1136 | "abbey", 1137 | "abbie", 1138 | "abby", 1139 | "abel", 1140 | "abigail", 1141 | "ace", 1142 | "adam", 1143 | "addie", 1144 | "admiral", 1145 | "aggie", 1146 | "aires", 1147 | "aj", 1148 | "ajax", 1149 | "aldo", 1150 | "alex", 1151 | "alexus", 1152 | "alf", 1153 | "alfie", 1154 | "allie", 1155 | "ally", 1156 | "amber", 1157 | "amie", 1158 | "amigo", 1159 | "amos", 1160 | "amy", 1161 | "andy", 1162 | "angel", 1163 | "angus", 1164 | "annie", 1165 | "apollo", 1166 | "april", 1167 | "archie", 1168 | "argus", 1169 | "aries", 1170 | "armanti", 1171 | "arnie", 1172 | "arrow", 1173 | "ashes", 1174 | "ashley", 1175 | "astro", 1176 | "athena", 1177 | "atlas", 1178 | "audi", 1179 | "augie", 1180 | "aussie", 1181 | "austin", 1182 | "autumn", 1183 | "axel", 1184 | "axle", 1185 | "babbles", 1186 | "babe", 1187 | "baby", 1188 | "baby-doll", 1189 | "babykins", 1190 | "bacchus", 1191 | "bailey", 1192 | "bam-bam", 1193 | "bambi", 1194 | "bandit", 1195 | "banjo", 1196 | "barbie", 1197 | "barclay", 1198 | "barker", 1199 | "barkley", 1200 | "barley", 1201 | "barnaby", 1202 | "barney", 1203 | "baron", 1204 | "bart", 1205 | "basil", 1206 | "baxter", 1207 | "bb", 1208 | "beamer", 1209 | "beanie", 1210 | "beans", 1211 | "bear", 1212 | "beau", 1213 | "beauty", 1214 | "beaux", 1215 | "bebe", 1216 | "beetle", 1217 | "bella", 1218 | "belle", 1219 | "ben", 1220 | "benji", 1221 | "benny", 1222 | "benson", 1223 | "bentley", 1224 | "bernie", 1225 | "bessie", 1226 | "biablo", 1227 | "bibbles", 1228 | "bigboy", 1229 | "bigfoot", 1230 | "biggie", 1231 | "billie", 1232 | "billy", 1233 | "bingo", 1234 | "binky", 1235 | "birdie", 1236 | "birdy", 1237 | "biscuit", 1238 | "bishop", 1239 | "bits", 1240 | "bitsy", 1241 | "bizzy", 1242 | "bj", 1243 | "blackie", 1244 | "black-jack", 1245 | "blanche", 1246 | "blast", 1247 | "blaze", 1248 | "blondie", 1249 | "blossom", 1250 | "blue", 1251 | "bo", 1252 | "bo", 1253 | "bob", 1254 | "bobbie", 1255 | "bobby", 1256 | "bobo", 1257 | "bodie", 1258 | "bogey", 1259 | "bones", 1260 | "bongo", 1261 | "bonnie", 1262 | "boo", 1263 | "boo-boo", 1264 | "booker", 1265 | "boomer", 1266 | "boone", 1267 | "booster", 1268 | "bootie", 1269 | "boots", 1270 | "boozer", 1271 | "boris", 1272 | "bosco", 1273 | "bosley", 1274 | "boss", 1275 | "boy", 1276 | "bozley", 1277 | "bradley", 1278 | "brady", 1279 | "braggs", 1280 | "brandi", 1281 | "brando", 1282 | "brandy", 1283 | "bridgett", 1284 | "bridgette", 1285 | "brie", 1286 | "brindle", 1287 | "brit", 1288 | "brittany", 1289 | "brodie", 1290 | "brook", 1291 | "brooke", 1292 | "brownie", 1293 | "bruiser", 1294 | "bruno", 1295 | "brutus", 1296 | "bubba", 1297 | "bubbles", 1298 | "buck", 1299 | "buckeye", 1300 | "bucko", 1301 | "bucky", 1302 | "bud", 1303 | "budda", 1304 | "buddie", 1305 | "buddy", 1306 | "buddyboy", 1307 | "buffie", 1308 | "buffy", 1309 | "bug", 1310 | "bugsey", 1311 | "bugsy", 1312 | "bullet", 1313 | "bullwinkle", 1314 | "bully", 1315 | "bumper", 1316 | "bunky", 1317 | "buster", 1318 | "buster-brown", 1319 | "butch", 1320 | "butchy", 1321 | "butter", 1322 | "butterball", 1323 | "buttercup", 1324 | "butterscotch", 1325 | "buttons", 1326 | "buzzy", 1327 | "caesar", 1328 | "cali", 1329 | "callie", 1330 | "calvin", 1331 | "cameo", 1332 | "camille", 1333 | "candy", 1334 | "capone", 1335 | "captain", 1336 | "carley", 1337 | "casey", 1338 | "casper", 1339 | "cassie", 1340 | "cassis", 1341 | "chacha", 1342 | "chad", 1343 | "chamberlain", 1344 | "champ", 1345 | "chance", 1346 | "chanel", 1347 | "chaos", 1348 | "charisma", 1349 | "charles", 1350 | "charlie", 1351 | "charliebrown", 1352 | "charmer", 1353 | "chase", 1354 | "chauncey", 1355 | "chaz", 1356 | "checkers", 1357 | "chelsea", 1358 | "cherokee", 1359 | "chessie", 1360 | "chester", 1361 | "chevy", 1362 | "chewie", 1363 | "chewy", 1364 | "cheyenne", 1365 | "chichi", 1366 | "chic", 1367 | "chico", 1368 | "chief", 1369 | "chili", 1370 | "china", 1371 | "chip", 1372 | "chipper", 1373 | "chippy", 1374 | "chips", 1375 | "chiquita", 1376 | "chivas", 1377 | "chloe", 1378 | "chocolate", 1379 | "chrissy", 1380 | "chubbs", 1381 | "chucky", 1382 | "chyna", 1383 | "cinder", 1384 | "cindy", 1385 | "cinnamon", 1386 | "cisco", 1387 | "claire", 1388 | "clancy", 1389 | "cleo", 1390 | "cleopatra", 1391 | "clicker", 1392 | "clifford", 1393 | "clover", 1394 | "clyde", 1395 | "coal", 1396 | "cobweb", 1397 | "coco", 1398 | "cocoa", 1399 | "coconut", 1400 | "codi", 1401 | "cody", 1402 | "cole", 1403 | "comet", 1404 | "commando", 1405 | "conan", 1406 | "connor", 1407 | "cookie", 1408 | "cooper", 1409 | "copper", 1410 | "corky", 1411 | "cosmo", 1412 | "cotton", 1413 | "cozmo", 1414 | "crackers", 1415 | "cricket", 1416 | "crystal", 1417 | "cubby", 1418 | "cubs", 1419 | "cujo", 1420 | "cupcake", 1421 | "curly", 1422 | "curry", 1423 | "cutie", 1424 | "cutie-pie", 1425 | "cyrus", 1426 | "daffy", 1427 | "daisey-mae", 1428 | "daisy", 1429 | "dakota", 1430 | "dallas", 1431 | "dandy", 1432 | "dante", 1433 | "daphne", 1434 | "darby", 1435 | "darcy", 1436 | "darwin", 1437 | "dash", 1438 | "dave", 1439 | "deacon", 1440 | "dee", 1441 | "deedee", 1442 | "dempsey", 1443 | "destini", 1444 | "dewey", 1445 | "dexter", 1446 | "dharma", 1447 | "diamond", 1448 | "dickens", 1449 | "diego", 1450 | "diesel", 1451 | "digger", 1452 | "dillon", 1453 | "dinky", 1454 | "dino", 1455 | "diva", 1456 | "dixie", 1457 | "dobie", 1458 | "doc", 1459 | "dodger", 1460 | "doggon", 1461 | "dolly", 1462 | "domino", 1463 | "doodles", 1464 | "doogie", 1465 | "dots", 1466 | "dottie", 1467 | "dozer", 1468 | "dragster", 1469 | "dreamer", 1470 | "duchess", 1471 | "dude", 1472 | "dudley", 1473 | "duffy", 1474 | "duke", 1475 | "duncan", 1476 | "dunn", 1477 | "dusty", 1478 | "dutches", 1479 | "dutchess", 1480 | "dylan", 1481 | "earl", 1482 | "ebony", 1483 | "echo", 1484 | "eddie", 1485 | "eddy", 1486 | "edgar", 1487 | "edsel", 1488 | "eifel", 1489 | "einstein", 1490 | "ellie", 1491 | "elliot", 1492 | "elmo", 1493 | "elvis", 1494 | "elwood", 1495 | "ember", 1496 | "emily", 1497 | "emma", 1498 | "emmy", 1499 | "erin", 1500 | "ernie", 1501 | "eva", 1502 | "faith", 1503 | "fancy", 1504 | "felix", 1505 | "fergie", 1506 | "ferris", 1507 | "fido", 1508 | "fifi", 1509 | "figaro", 1510 | "finnegan", 1511 | "fiona", 1512 | "flake", 1513 | "flakey", 1514 | "flash", 1515 | "flint", 1516 | "flopsy", 1517 | "flower", 1518 | "floyd", 1519 | "fluffy", 1520 | "fonzie", 1521 | "foxy", 1522 | "francais", 1523 | "frankie", 1524 | "franky", 1525 | "freckles", 1526 | "fred", 1527 | "freddie", 1528 | "freddy", 1529 | "freedom", 1530 | "freeway", 1531 | "fresier", 1532 | "friday", 1533 | "frisco", 1534 | "frisky", 1535 | "fritz", 1536 | "frodo", 1537 | "frosty", 1538 | "furball", 1539 | "fuzzy", 1540 | "gabby", 1541 | "gabriella", 1542 | "garfield", 1543 | "gasby", 1544 | "gator", 1545 | "gavin", 1546 | "genie", 1547 | "george", 1548 | "georgia", 1549 | "georgie", 1550 | "giant", 1551 | "gibson", 1552 | "gidget", 1553 | "gigi", 1554 | "gilbert", 1555 | "gilda", 1556 | "ginger", 1557 | "ginny", 1558 | "girl", 1559 | "gizmo", 1560 | "godiva", 1561 | "goldie", 1562 | "goober", 1563 | "goose", 1564 | "gordon", 1565 | "grace", 1566 | "grace", 1567 | "gracie", 1568 | "gracie", 1569 | "grady", 1570 | "greenie", 1571 | "greta", 1572 | "gretchen", 1573 | "gretel", 1574 | "gretta", 1575 | "griffen", 1576 | "gringo", 1577 | "grizzly", 1578 | "gromit", 1579 | "grover", 1580 | "gucci", 1581 | "guido", 1582 | "guinness", 1583 | "gunner", 1584 | "gunther", 1585 | "gus", 1586 | "guy", 1587 | "gypsy", 1588 | "hailey", 1589 | "haley", 1590 | "hallie", 1591 | "hamlet", 1592 | "hammer", 1593 | "hank", 1594 | "hanna", 1595 | "hannah", 1596 | "hans", 1597 | "happyt", 1598 | "hardy", 1599 | "harley", 1600 | "harpo", 1601 | "harrison", 1602 | "harry", 1603 | "harvey", 1604 | "heather", 1605 | "heidi", 1606 | "henry", 1607 | "hercules", 1608 | "hershey", 1609 | "higgins", 1610 | "hobbes", 1611 | "holly", 1612 | "homer", 1613 | "honey", 1614 | "honey-bear", 1615 | "hooch", 1616 | "hoover", 1617 | "hope", 1618 | "houdini", 1619 | "howie", 1620 | "hudson", 1621 | "huey", 1622 | "hugh", 1623 | "hugo", 1624 | "humphrey", 1625 | "hunter", 1626 | "india", 1627 | "indy", 1628 | "iris", 1629 | "isabella", 1630 | "isabelle", 1631 | "itsy", 1632 | "itsy-bitsy", 1633 | "ivory", 1634 | "ivy", 1635 | "izzy", 1636 | "jack", 1637 | "jackie", 1638 | "jackpot", 1639 | "jackson", 1640 | "jade", 1641 | "jagger", 1642 | "jags", 1643 | "jaguar", 1644 | "jake", 1645 | "jamie", 1646 | "jasmine", 1647 | "jasper", 1648 | "jaxson", 1649 | "jazmie", 1650 | "jazz", 1651 | "jelly", 1652 | "jelly-bean", 1653 | "jenna", 1654 | "jenny", 1655 | "jerry", 1656 | "jersey", 1657 | "jess", 1658 | "jesse", 1659 | "jessejames", 1660 | "jessie", 1661 | "jester", 1662 | "jet", 1663 | "jethro", 1664 | "jett", 1665 | "jetta", 1666 | "jewel", 1667 | "jewels", 1668 | "jimmuy", 1669 | "jingles", 1670 | "jj", 1671 | "joe", 1672 | "joey", 1673 | "johnny", 1674 | "jojo", 1675 | "joker", 1676 | "jolie", 1677 | "jolly", 1678 | "jordan", 1679 | "josie", 1680 | "joy", 1681 | "jr", 1682 | "judy", 1683 | "julius", 1684 | "june", 1685 | "junior", 1686 | "justice", 1687 | "kali", 1688 | "kallie", 1689 | "kane", 1690 | "karma", 1691 | "kasey", 1692 | "katie", 1693 | "kato", 1694 | "katz", 1695 | "kayla", 1696 | "kc", 1697 | "keesha", 1698 | "kellie", 1699 | "kelly", 1700 | "kelsey", 1701 | "kenya", 1702 | "kerry", 1703 | "kibbles", 1704 | "kid", 1705 | "kiki", 1706 | "killian", 1707 | "king", 1708 | "kipper", 1709 | "kira", 1710 | "kirby", 1711 | "kismet", 1712 | "kissy", 1713 | "kitty", 1714 | "kiwi", 1715 | "klaus", 1716 | "koba", 1717 | "kobe", 1718 | "koda", 1719 | "koko", 1720 | "kona", 1721 | "kosmo", 1722 | "koty", 1723 | "kramer", 1724 | "kujo", 1725 | "kurly", 1726 | "kyra", 1727 | "lacey", 1728 | "laddie", 1729 | "lady", 1730 | "ladybug", 1731 | "laney", 1732 | "lassie", 1733 | "latte", 1734 | "layla", 1735 | "lazarus", 1736 | "lefty", 1737 | "leo", 1738 | "levi", 1739 | "lexi", 1740 | "lexie", 1741 | "lexus", 1742 | "libby", 1743 | "lightning", 1744 | "lili", 1745 | "lilly", 1746 | "lily", 1747 | "lincoln", 1748 | "linus", 1749 | "littlebit", 1750 | "little-guy", 1751 | "little-one", 1752 | "little-rascal", 1753 | "lizzy", 1754 | "logan", 1755 | "loki", 1756 | "lola", 1757 | "lou", 1758 | "louie", 1759 | "louis", 1760 | "lovey", 1761 | "lucas", 1762 | "luci", 1763 | "lucifer", 1764 | "lucky", 1765 | "lucy", 1766 | "luke", 1767 | "lulu", 1768 | "luna", 1769 | "lynx", 1770 | "mac", 1771 | "macho", 1772 | "macintosh", 1773 | "mack", 1774 | "mackenzie", 1775 | "macy", 1776 | "maddie", 1777 | "maddy", 1778 | "madison", 1779 | "maggie", 1780 | "maggie-mae", 1781 | "maggie-moo", 1782 | "maggy", 1783 | "magic", 1784 | "magnolia", 1785 | "major", 1786 | "mandi", 1787 | "mandy", 1788 | "mango", 1789 | "marble", 1790 | "mariah", 1791 | "marley", 1792 | "mary", 1793 | "maryjane", 1794 | "mason", 1795 | "mattie", 1796 | "maverick", 1797 | "max", 1798 | "maximus", 1799 | "maxine", 1800 | "maxwell", 1801 | "may", 1802 | "maya", 1803 | "mcduff", 1804 | "mckenzie", 1805 | "meadow", 1806 | "megan", 1807 | "meggie", 1808 | "mercedes", 1809 | "mercle", 1810 | "merlin", 1811 | "mia", 1812 | "miasy", 1813 | "michael", 1814 | "mickey", 1815 | "midnight", 1816 | "mikey", 1817 | "miko", 1818 | "miles", 1819 | "miller", 1820 | "millie", 1821 | "milo", 1822 | "mimi", 1823 | "mindy", 1824 | "ming", 1825 | "mini", 1826 | "minnie", 1827 | "mischief", 1828 | "misha", 1829 | "misskitty", 1830 | "misspriss", 1831 | "missie", 1832 | "missy", 1833 | "mister", 1834 | "misty", 1835 | "mitch", 1836 | "mittens", 1837 | "mitzi", 1838 | "mitzy", 1839 | "mo", 1840 | "mocha", 1841 | "mojo", 1842 | "mollie", 1843 | "molly", 1844 | "mona", 1845 | "monkey", 1846 | "monster", 1847 | "montana", 1848 | "montgomery", 1849 | "monty", 1850 | "moocher", 1851 | "moochie", 1852 | "mookie", 1853 | "moonshine", 1854 | "moose", 1855 | "morgan", 1856 | "moses", 1857 | "mouse", 1858 | "mrkitty", 1859 | "muffin", 1860 | "muffy", 1861 | "mugsy", 1862 | "mulligan", 1863 | "munchkin", 1864 | "murphy", 1865 | "nakita", 1866 | "nala", 1867 | "nana", 1868 | "napoleon", 1869 | "natasha", 1870 | "nathan", 1871 | "nellie", 1872 | "nemo", 1873 | "nena", 1874 | "nero", 1875 | "nestle", 1876 | "newt", 1877 | "newton", 1878 | "nibbles", 1879 | "nibby", 1880 | "nibby-nose", 1881 | "nick", 1882 | "nickers", 1883 | "nickie", 1884 | "nicky", 1885 | "nico", 1886 | "nike", 1887 | "niki", 1888 | "nikita", 1889 | "nikki", 1890 | "niko", 1891 | "nina", 1892 | "nitro", 1893 | "nobel", 1894 | "noel", 1895 | "nona", 1896 | "noodles", 1897 | "norton", 1898 | "nosey", 1899 | "nugget", 1900 | "nutmeg", 1901 | "oakley", 1902 | "obie", 1903 | "odie", 1904 | "oldglory", 1905 | "olive", 1906 | "oliver", 1907 | "olivia", 1908 | "ollie", 1909 | "onie", 1910 | "onyx", 1911 | "opie", 1912 | "oreo", 1913 | "oscar", 1914 | "otis", 1915 | "otto", 1916 | "oz", 1917 | "ozzie", 1918 | "ozzy", 1919 | "pablo", 1920 | "paco", 1921 | "paddington", 1922 | "paddy", 1923 | "panda", 1924 | "pandora", 1925 | "panther", 1926 | "papa", 1927 | "paris", 1928 | "parker", 1929 | "pasha", 1930 | "patch", 1931 | "patches", 1932 | "patricky", 1933 | "patsy", 1934 | "patty", 1935 | "peaches", 1936 | "peanut", 1937 | "peanuts", 1938 | "pearl", 1939 | "pebbles", 1940 | "pedro", 1941 | "penny", 1942 | "pepe", 1943 | "pepper", 1944 | "peppy", 1945 | "pepsi", 1946 | "persy", 1947 | "pete", 1948 | "peter", 1949 | "petey", 1950 | "petie", 1951 | "phantom", 1952 | "phoebe", 1953 | "phoenix", 1954 | "picasso", 1955 | "pickles", 1956 | "pierre", 1957 | "piggy", 1958 | "piglet", 1959 | "pinkpanther", 1960 | "pinky", 1961 | "pinto", 1962 | "piper", 1963 | "pippin", 1964 | "pippy", 1965 | "pip-squeek", 1966 | "pirate", 1967 | "pixie", 1968 | "plato", 1969 | "pluto", 1970 | "pockets", 1971 | "pogo", 1972 | "pokey", 1973 | "polly", 1974 | "poncho", 1975 | "pongo", 1976 | "pooch", 1977 | "poochie", 1978 | "pooh", 1979 | "pooh-bear", 1980 | "pookie", 1981 | "pooky", 1982 | "popcorn", 1983 | "poppy", 1984 | "porche", 1985 | "porkchop", 1986 | "porky", 1987 | "porter", 1988 | "powder", 1989 | "prancer", 1990 | "precious", 1991 | "presley", 1992 | "pretty", 1993 | "pretty-girl", 1994 | "prince", 1995 | "princess", 1996 | "prissy", 1997 | "puck", 1998 | "puddles", 1999 | "pudge", 2000 | "puffy", 2001 | "pugsley", 2002 | "pumpkin", 2003 | "punkin", 2004 | "puppy", 2005 | "purdy", 2006 | "queen", 2007 | "queenie", 2008 | "quincy", 2009 | "quinn", 2010 | "rags", 2011 | "raison", 2012 | "ralph", 2013 | "ralphie", 2014 | "rambler", 2015 | "rambo", 2016 | "ranger", 2017 | "rascal", 2018 | "raven", 2019 | "rebel", 2020 | "red", 2021 | "reggie", 2022 | "reilly", 2023 | "remy", 2024 | "rex", 2025 | "rexy", 2026 | "rhett", 2027 | "ricky", 2028 | "rico", 2029 | "riggs", 2030 | "riley", 2031 | "rintintin", 2032 | "ringo", 2033 | "ripley", 2034 | "rocco", 2035 | "rock", 2036 | "rocket", 2037 | "rocko", 2038 | "rocky", 2039 | "roland", 2040 | "rolex", 2041 | "rollie", 2042 | "roman", 2043 | "romeo", 2044 | "rosa", 2045 | "roscoe", 2046 | "rosebud", 2047 | "rosie", 2048 | "rosy", 2049 | "rover", 2050 | "rowdy", 2051 | "roxanne", 2052 | "roxie", 2053 | "roxy", 2054 | "ruby", 2055 | "ruchus", 2056 | "rudy", 2057 | "ruffe", 2058 | "ruffer", 2059 | "ruffles", 2060 | "rufus", 2061 | "ruger", 2062 | "rusty", 2063 | "ruthie", 2064 | "ryder", 2065 | "sabine", 2066 | "sable", 2067 | "sabrina", 2068 | "sadie", 2069 | "sage", 2070 | "sailor", 2071 | "salem", 2072 | "sally", 2073 | "salty", 2074 | "sam", 2075 | "samantha", 2076 | "sammy", 2077 | "sampson", 2078 | "samson", 2079 | "sandy", 2080 | "sara", 2081 | "sarah", 2082 | "sarge", 2083 | "sasha", 2084 | "sassie", 2085 | "sassy", 2086 | "savannah", 2087 | "sawyer", 2088 | "scarlett", 2089 | "schotzie", 2090 | "schultz", 2091 | "scoobie", 2092 | "scooby", 2093 | "scooby-doo", 2094 | "scooter", 2095 | "scottie", 2096 | "scout", 2097 | "scrappy", 2098 | "scruffy", 2099 | "sebastian", 2100 | "shadow", 2101 | "shady", 2102 | "shaggy", 2103 | "shasta", 2104 | "sheba", 2105 | "sheena", 2106 | "shelby", 2107 | "shelly", 2108 | "sherman", 2109 | "shiloh", 2110 | "shiner", 2111 | "shorty", 2112 | "sienna", 2113 | "sierra", 2114 | "silky", 2115 | "silver", 2116 | "silvester", 2117 | "simba", 2118 | "simon", 2119 | "simone", 2120 | "sissy", 2121 | "skeeter", 2122 | "skinny", 2123 | "skip", 2124 | "skipper", 2125 | "skippy", 2126 | "skittles", 2127 | "sky", 2128 | "skye", 2129 | "skyler", 2130 | "slick", 2131 | "slinky", 2132 | "sly", 2133 | "smarty", 2134 | "smoke", 2135 | "smokey", 2136 | "smudge", 2137 | "sneakers", 2138 | "snickers", 2139 | "snoop", 2140 | "snoopy", 2141 | "snowball", 2142 | "snowflake", 2143 | "snowy", 2144 | "snuffles", 2145 | "snuggles", 2146 | "solomon", 2147 | "sonny", 2148 | "sophia", 2149 | "sophie", 2150 | "sox", 2151 | "spanky", 2152 | "sparkle", 2153 | "sparky", 2154 | "speed", 2155 | "speedo", 2156 | "speedy", 2157 | "spencer", 2158 | "spike", 2159 | "spirit", 2160 | "spookey", 2161 | "spot", 2162 | "spotty", 2163 | "spud", 2164 | "spunky", 2165 | "squeeky", 2166 | "squirt", 2167 | "stanley", 2168 | "star", 2169 | "starr", 2170 | "stella", 2171 | "sterling", 2172 | "stich", 2173 | "stinky", 2174 | "stormy", 2175 | "stuart", 2176 | "sugar", 2177 | "sugar-baby", 2178 | "summer", 2179 | "sumo", 2180 | "sundance", 2181 | "sunday", 2182 | "sunny", 2183 | "sunshine", 2184 | "susie", 2185 | "susie-q", 2186 | "suzy", 2187 | "sweetie", 2188 | "sweetie-pie", 2189 | "sweet-pea", 2190 | "sydney", 2191 | "tabby", 2192 | "tabetha", 2193 | "taco", 2194 | "taffy", 2195 | "tally", 2196 | "tammy", 2197 | "tangles", 2198 | "tango", 2199 | "tank", 2200 | "tanner", 2201 | "tara", 2202 | "tasha", 2203 | "taylor", 2204 | "taz", 2205 | "t-bird", 2206 | "t-bone", 2207 | "teddy", 2208 | "teddy-bear", 2209 | "tequila", 2210 | "tess", 2211 | "tessa", 2212 | "tessie", 2213 | "tex", 2214 | "thelma", 2215 | "thor", 2216 | "thumper", 2217 | "thunder", 2218 | "thyme", 2219 | "tiffany", 2220 | "tiger", 2221 | "tigger", 2222 | "tiggy", 2223 | "tiki", 2224 | "tilly", 2225 | "timber", 2226 | "timmy", 2227 | "tinker", 2228 | "tinker-bell", 2229 | "tinky", 2230 | "tiny", 2231 | "tippy", 2232 | "tipr", 2233 | "titan", 2234 | "tito", 2235 | "titus", 2236 | "tobie", 2237 | "toby", 2238 | "toffee", 2239 | "tom", 2240 | "tommy", 2241 | "tommy-boy", 2242 | "toni", 2243 | "tony", 2244 | "toots", 2245 | "tootsie", 2246 | "topaz", 2247 | "tori", 2248 | "toto", 2249 | "tracker", 2250 | "tramp", 2251 | "trapper", 2252 | "travis", 2253 | "trigger", 2254 | "trinity", 2255 | "tripod", 2256 | "tristan", 2257 | "trixie", 2258 | "trooper", 2259 | "trouble", 2260 | "troy", 2261 | "truffles", 2262 | "tuck", 2263 | "tucker", 2264 | "tuesday", 2265 | "tuffy", 2266 | "turbo", 2267 | "turner", 2268 | "tux", 2269 | "twiggy", 2270 | "twinkle", 2271 | "ty", 2272 | "tyler", 2273 | "tyson", 2274 | "valinto", 2275 | "vava", 2276 | "vegas", 2277 | "velvet", 2278 | "vinnie", 2279 | "vinny", 2280 | "violet", 2281 | "vito", 2282 | "volvo", 2283 | "waddles", 2284 | "wags", 2285 | "waldo", 2286 | "wallace", 2287 | "wally", 2288 | "walter", 2289 | "wayne", 2290 | "weaver", 2291 | "webster", 2292 | "wesley", 2293 | "westie", 2294 | "whiskers", 2295 | "whiskey", 2296 | "whispy", 2297 | "whitie", 2298 | "whiz", 2299 | "wiggles", 2300 | "wilber", 2301 | "willie", 2302 | "willow", 2303 | "willy", 2304 | "wilson", 2305 | "winnie", 2306 | "winston", 2307 | "winter", 2308 | "wiz", 2309 | "wizard", 2310 | "wolfgang", 2311 | "wolfie", 2312 | "woody", 2313 | "woofie", 2314 | "wrigley", 2315 | "wrinkles", 2316 | "wyatt", 2317 | "xena", 2318 | "yaka", 2319 | "yang", 2320 | "yeller", 2321 | "yellow", 2322 | "yin", 2323 | "yoda", 2324 | "yogi", 2325 | "yogi-bear", 2326 | "yukon", 2327 | "zack", 2328 | "zeke", 2329 | "zena", 2330 | "zeus", 2331 | "ziggy", 2332 | "zippy", 2333 | "zoe", 2334 | "zoey", 2335 | "zoie", 2336 | "zorro" 2337 | ]; 2338 | // #endregion 2339 | 2340 | //////////////////////////////////////////////////////////////////////////////////////////////// 2341 | 2342 | pub fn main() { 2343 | println!("{:?}", generate_name_str(1)); 2344 | } 2345 | -------------------------------------------------------------------------------- /app/src/app/generator.service.ts: -------------------------------------------------------------------------------- 1 | import { Injectable } from "@angular/core"; 2 | 3 | @Injectable({ 4 | providedIn: "root", 5 | }) 6 | export class GeneratorService { 7 | ADJECTIVES = [ 8 | "aback", 9 | "abashed", 10 | "aberrant", 11 | "abhorrent", 12 | "abiding", 13 | "abject", 14 | "ablaze", 15 | "able", 16 | "abnormal", 17 | "aboard", 18 | "aboriginal", 19 | "abortive", 20 | "abounding", 21 | "abrasive", 22 | "abrupt", 23 | "absent", 24 | "absorbed", 25 | "absorbing", 26 | "abstracted", 27 | "absurd", 28 | "abundant", 29 | "abusive", 30 | "acceptable", 31 | "accessible", 32 | "accidental", 33 | "accurate", 34 | "acid", 35 | "acidic", 36 | "acoustic", 37 | "acrid", 38 | "actually", 39 | "ad", 40 | "adamant", 41 | "adaptable", 42 | "addicted", 43 | "adhesive", 44 | "adjoining", 45 | "adorable", 46 | "adventurous", 47 | "afraid", 48 | "aggressive", 49 | "agonizing", 50 | "agreeable", 51 | "ahead", 52 | "ajar", 53 | "alcoholic", 54 | "alert", 55 | "alike", 56 | "alive", 57 | "alleged", 58 | "alluring", 59 | "aloof", 60 | "amazing", 61 | "ambiguous", 62 | "ambitious", 63 | "amuck", 64 | "amused", 65 | "amusing", 66 | "ancient", 67 | "angry", 68 | "animated", 69 | "annoyed", 70 | "annoying", 71 | "anxious", 72 | "apathetic", 73 | "aquatic", 74 | "aromatic", 75 | "arrogant", 76 | "ashamed", 77 | "aspiring", 78 | "assorted", 79 | "astonishing", 80 | "attractive", 81 | "auspicious", 82 | "automatic", 83 | "available", 84 | "average", 85 | "awake", 86 | "aware", 87 | "awesome", 88 | "awful", 89 | "axiomatic", 90 | "bad", 91 | "barbarous", 92 | "bashful", 93 | "bawdy", 94 | "beautiful", 95 | "befitting", 96 | "belligerent", 97 | "beneficial", 98 | "bent", 99 | "berserk", 100 | "best", 101 | "better", 102 | "bewildered", 103 | "big", 104 | "billowy", 105 | "bite-sized", 106 | "bitter", 107 | "bizarre", 108 | "black", 109 | "black-and-white", 110 | "bloody", 111 | "blue", 112 | "blue-eyed", 113 | "blushing", 114 | "boiling", 115 | "boorish", 116 | "bored", 117 | "boring", 118 | "bouncy", 119 | "boundless", 120 | "brainy", 121 | "brash", 122 | "brave", 123 | "brawny", 124 | "breakable", 125 | "breezy", 126 | "brief", 127 | "bright", 128 | "broad", 129 | "broken", 130 | "brown", 131 | "bumpy", 132 | "burly", 133 | "bustling", 134 | "busy", 135 | "cagey", 136 | "calculating", 137 | "callous", 138 | "calm", 139 | "capable", 140 | "capricious", 141 | "careful", 142 | "careless", 143 | "caring", 144 | "cautious", 145 | "ceaseless", 146 | "certain", 147 | "changeable", 148 | "charming", 149 | "cheap", 150 | "cheerful", 151 | "chemical", 152 | "chief", 153 | "childlike", 154 | "chilly", 155 | "chivalrous", 156 | "chubby", 157 | "chunky", 158 | "clammy", 159 | "classy", 160 | "clean", 161 | "clear", 162 | "clever", 163 | "cloistered", 164 | "closed", 165 | "cloudy", 166 | "clumsy", 167 | "cluttered", 168 | "coherent", 169 | "cold", 170 | "colorful", 171 | "colossal", 172 | "combative", 173 | "comfortable", 174 | "common", 175 | "complete", 176 | "complex", 177 | "concerned", 178 | "condemned", 179 | "confused", 180 | "conscious", 181 | "cooing", 182 | "cool", 183 | "cooperative", 184 | "coordinated", 185 | "courageous", 186 | "cowardly", 187 | "crabby", 188 | "craven", 189 | "crazy", 190 | "creepy", 191 | "crooked", 192 | "crowded", 193 | "cruel", 194 | "cuddly", 195 | "cultured", 196 | "cumbersome", 197 | "curious", 198 | "curly", 199 | "curved", 200 | "curvy", 201 | "cut", 202 | "cute", 203 | "cynical", 204 | "daffy", 205 | "daily", 206 | "damaged", 207 | "damaging", 208 | "damp", 209 | "dangerous", 210 | "dapper", 211 | "dark", 212 | "dashing", 213 | "dazzling", 214 | "dead", 215 | "deadpan", 216 | "deafening", 217 | "dear", 218 | "debonair", 219 | "decisive", 220 | "decorous", 221 | "deep", 222 | "deeply", 223 | "defeated", 224 | "defective", 225 | "defiant", 226 | "delicate", 227 | "delicious", 228 | "delightful", 229 | "delirious", 230 | "demonic", 231 | "dependent", 232 | "depressed", 233 | "deranged", 234 | "descriptive", 235 | "deserted", 236 | "detailed", 237 | "determined", 238 | "devilish", 239 | "didactic", 240 | "different", 241 | "difficult", 242 | "diligent", 243 | "direful", 244 | "disagreeable", 245 | "discreet", 246 | "distinct", 247 | "disturbed", 248 | "divergent", 249 | "dizzy", 250 | "domineering", 251 | "doubtful", 252 | "drab", 253 | "draconian", 254 | "dramatic", 255 | "dreary", 256 | "drunk", 257 | "dry", 258 | "dull", 259 | "dusty", 260 | "dynamic", 261 | "dysfunctional", 262 | "eager", 263 | "early", 264 | "earsplitting", 265 | "earthy", 266 | "easy", 267 | "eatable", 268 | "economic", 269 | "educated", 270 | "efficacious", 271 | "efficient", 272 | "eight", 273 | "elastic", 274 | "elated", 275 | "elderly", 276 | "electric", 277 | "elegant", 278 | "elfin", 279 | "elite", 280 | "embarrassed", 281 | "eminent", 282 | "empty", 283 | "enchanted", 284 | "enchanting", 285 | "encouraging", 286 | "endurable", 287 | "energetic", 288 | "enormous", 289 | "entertaining", 290 | "enthusiastic", 291 | "envious", 292 | "equable", 293 | "equal", 294 | "erratic", 295 | "ethereal", 296 | "evanescent", 297 | "evasive", 298 | "even", 299 | "excellent", 300 | "excited", 301 | "exciting", 302 | "exclusive", 303 | "exotic", 304 | "expensive", 305 | "extra-large", 306 | "extra-small", 307 | "exuberant", 308 | "exultant", 309 | "fabulous", 310 | "faded", 311 | "faint", 312 | "fair", 313 | "faithful", 314 | "fallacious", 315 | "false", 316 | "familiar", 317 | "famous", 318 | "fanatical", 319 | "fancy", 320 | "fantastic", 321 | "far", 322 | "far-flung", 323 | "fascinated", 324 | "fast", 325 | "fat", 326 | "faulty", 327 | "fearful", 328 | "fearless", 329 | "feeble", 330 | "feigned", 331 | "female", 332 | "festive", 333 | "few", 334 | "fierce", 335 | "filthy", 336 | "fine", 337 | "finicky", 338 | "first", 339 | "five", 340 | "fixed", 341 | "flagrant", 342 | "flaky", 343 | "flashy", 344 | "flat", 345 | "flawless", 346 | "flimsy", 347 | "flippant", 348 | "flowery", 349 | "fluffy", 350 | "fluttering", 351 | "foamy", 352 | "foolish", 353 | "foregoing", 354 | "forgetful", 355 | "fortunate", 356 | "four", 357 | "fragile", 358 | "frail", 359 | "frantic", 360 | "free", 361 | "freezing", 362 | "frequent", 363 | "fresh", 364 | "fretful", 365 | "friendly", 366 | "frightened", 367 | "frightening", 368 | "full", 369 | "fumbling", 370 | "functional", 371 | "funny", 372 | "furry", 373 | "furtive", 374 | "future", 375 | "futuristic", 376 | "fuzzy", 377 | "gabby", 378 | "gainful", 379 | "gamy", 380 | "gaping", 381 | "garrulous", 382 | "gaudy", 383 | "general", 384 | "gentle", 385 | "giant", 386 | "giddy", 387 | "gifted", 388 | "gigantic", 389 | "glamorous", 390 | "gleaming", 391 | "glib", 392 | "glistening", 393 | "glorious", 394 | "glossy", 395 | "godly", 396 | "good", 397 | "goofy", 398 | "gorgeous", 399 | "graceful", 400 | "grandiose", 401 | "grateful", 402 | "gratis", 403 | "gray", 404 | "greasy", 405 | "great", 406 | "greedy", 407 | "green", 408 | "grey", 409 | "grieving", 410 | "groovy", 411 | "grotesque", 412 | "grouchy", 413 | "grubby", 414 | "gruesome", 415 | "grumpy", 416 | "guarded", 417 | "guiltless", 418 | "gullible", 419 | "gusty", 420 | "guttural", 421 | "habitual", 422 | "half", 423 | "hallowed", 424 | "halting", 425 | "handsome", 426 | "handsomely", 427 | "handy", 428 | "hanging", 429 | "hapless", 430 | "happy", 431 | "hard", 432 | "hard-to-find", 433 | "harmonious", 434 | "harsh", 435 | "hateful", 436 | "heady", 437 | "healthy", 438 | "heartbreaking", 439 | "heavenly", 440 | "heavy", 441 | "hellish", 442 | "helpful", 443 | "helpless", 444 | "hesitant", 445 | "hideous", 446 | "high", 447 | "high-pitched", 448 | "highfalutin", 449 | "hilarious", 450 | "hissing", 451 | "historical", 452 | "holistic", 453 | "hollow", 454 | "homeless", 455 | "homely", 456 | "honorable", 457 | "horrible", 458 | "hospitable", 459 | "hot", 460 | "huge", 461 | "hulking", 462 | "humdrum", 463 | "humorous", 464 | "hungry", 465 | "hurried", 466 | "hurt", 467 | "hushed", 468 | "husky", 469 | "hypnotic", 470 | "hysterical", 471 | "icky", 472 | "icy", 473 | "idiotic", 474 | "ignorant", 475 | "ill", 476 | "ill-fated", 477 | "ill-informed", 478 | "illegal", 479 | "illustrious", 480 | "imaginary", 481 | "immense", 482 | "imminent", 483 | "impartial", 484 | "imperfect", 485 | "impolite", 486 | "important", 487 | "imported", 488 | "impossible", 489 | "incandescent", 490 | "incompetent", 491 | "inconclusive", 492 | "incredible", 493 | "industrious", 494 | "inexpensive", 495 | "infamous", 496 | "innate", 497 | "innocent", 498 | "inquisitive", 499 | "insidious", 500 | "instinctive", 501 | "intelligent", 502 | "interesting", 503 | "internal", 504 | "invincible", 505 | "irate", 506 | "irritating", 507 | "itchy", 508 | "jaded", 509 | "jagged", 510 | "jazzy", 511 | "jealous", 512 | "jittery", 513 | "jobless", 514 | "jolly", 515 | "joyous", 516 | "judicious", 517 | "juicy", 518 | "jumbled", 519 | "jumpy", 520 | "juvenile", 521 | "kaput", 522 | "keen", 523 | "kind", 524 | "kindhearted", 525 | "kindly", 526 | "knotty", 527 | "knowing", 528 | "knowledgeable", 529 | "known", 530 | "labored", 531 | "lackadaisical", 532 | "lacking", 533 | "lame", 534 | "lamentable", 535 | "languid", 536 | "large", 537 | "last", 538 | "late", 539 | "laughable", 540 | "lavish", 541 | "lazy", 542 | "lean", 543 | "learned", 544 | "left", 545 | "legal", 546 | "lethal", 547 | "level", 548 | "lewd", 549 | "light", 550 | "like", 551 | "likeable", 552 | "limping", 553 | "literate", 554 | "little", 555 | "lively", 556 | "living", 557 | "lonely", 558 | "long", 559 | "long-term", 560 | "longing", 561 | "loose", 562 | "lopsided", 563 | "loud", 564 | "loutish", 565 | "lovely", 566 | "loving", 567 | "low", 568 | "lowly", 569 | "lucky", 570 | "ludicrous", 571 | "lumpy", 572 | "lush", 573 | "luxuriant", 574 | "lying", 575 | "lyrical", 576 | "macabre", 577 | "macho", 578 | "maddening", 579 | "madly", 580 | "magenta", 581 | "magical", 582 | "magnificent", 583 | "majestic", 584 | "makeshift", 585 | "male", 586 | "malicious", 587 | "mammoth", 588 | "maniacal", 589 | "many", 590 | "marked", 591 | "married", 592 | "marvelous", 593 | "massive", 594 | "material", 595 | "materialistic", 596 | "mature", 597 | "mean", 598 | "measly", 599 | "meaty", 600 | "medical", 601 | "meek", 602 | "mellow", 603 | "melodic", 604 | "melted", 605 | "merciful", 606 | "mere", 607 | "messy", 608 | "mighty", 609 | "military", 610 | "milky", 611 | "mindless", 612 | "miniature", 613 | "minor", 614 | "miscreant", 615 | "misty", 616 | "mixed", 617 | "moaning", 618 | "modern", 619 | "moldy", 620 | "momentous", 621 | "motionless", 622 | "mountainous", 623 | "muddled", 624 | "mundane", 625 | "murky", 626 | "mushy", 627 | "mute", 628 | "mysterious", 629 | "naive", 630 | "nappy", 631 | "narrow", 632 | "nasty", 633 | "natural", 634 | "naughty", 635 | "nauseating", 636 | "near", 637 | "neat", 638 | "nebulous", 639 | "necessary", 640 | "needless", 641 | "needy", 642 | "neighborly", 643 | "nervous", 644 | "new", 645 | "next", 646 | "nice", 647 | "nifty", 648 | "nimble", 649 | "nine", 650 | "nippy", 651 | "noiseless", 652 | "noisy", 653 | "nonchalant", 654 | "nondescript", 655 | "nonstop", 656 | "normal", 657 | "nostalgic", 658 | "nosy", 659 | "noxious", 660 | "null", 661 | "numberless", 662 | "numerous", 663 | "nutritious", 664 | "nutty", 665 | "oafish", 666 | "obedient", 667 | "obeisant", 668 | "obese", 669 | "obnoxious", 670 | "obscene", 671 | "obsequious", 672 | "observant", 673 | "obsolete", 674 | "obtainable", 675 | "oceanic", 676 | "odd", 677 | "offbeat", 678 | "old", 679 | "old-fashioned", 680 | "omniscient", 681 | "one", 682 | "onerous", 683 | "open", 684 | "opposite", 685 | "optimal", 686 | "orange", 687 | "ordinary", 688 | "organic", 689 | "ossified", 690 | "outgoing", 691 | "outrageous", 692 | "outstanding", 693 | "oval", 694 | "overconfident", 695 | "overjoyed", 696 | "overrated", 697 | "overt", 698 | "overwrought", 699 | "painful", 700 | "painstaking", 701 | "pale", 702 | "paltry", 703 | "panicky", 704 | "panoramic", 705 | "parallel", 706 | "parched", 707 | "parsimonious", 708 | "past", 709 | "pastoral", 710 | "pathetic", 711 | "peaceful", 712 | "penitent", 713 | "perfect", 714 | "periodic", 715 | "permissible", 716 | "perpetual", 717 | "petite", 718 | "phobic", 719 | "physical", 720 | "picayune", 721 | "pink", 722 | "piquant", 723 | "placid", 724 | "plain", 725 | "plant", 726 | "plastic", 727 | "plausible", 728 | "pleasant", 729 | "plucky", 730 | "pointless", 731 | "poised", 732 | "polite", 733 | "political", 734 | "poor", 735 | "possessive", 736 | "possible", 737 | "powerful", 738 | "precious", 739 | "premium", 740 | "present", 741 | "pretty", 742 | "previous", 743 | "pricey", 744 | "prickly", 745 | "private", 746 | "probable", 747 | "productive", 748 | "profuse", 749 | "protective", 750 | "proud", 751 | "psychedelic", 752 | "psychotic", 753 | "public", 754 | "puffy", 755 | "pumped", 756 | "puny", 757 | "purple", 758 | "purring", 759 | "pushy", 760 | "puzzled", 761 | "puzzling", 762 | "quack", 763 | "quaint", 764 | "quarrelsome", 765 | "questionable", 766 | "quick", 767 | "quickest", 768 | "quiet", 769 | "quirky", 770 | "quixotic", 771 | "quizzical", 772 | "rabid", 773 | "racial", 774 | "ragged", 775 | "rainy", 776 | "rambunctious", 777 | "rampant", 778 | "rapid", 779 | "rare", 780 | "raspy", 781 | "ratty", 782 | "ready", 783 | "real", 784 | "rebel", 785 | "receptive", 786 | "recondite", 787 | "red", 788 | "redundant", 789 | "reflective", 790 | "regular", 791 | "relieved", 792 | "remarkable", 793 | "reminiscent", 794 | "repulsive", 795 | "resolute", 796 | "resonant", 797 | "responsible", 798 | "rhetorical", 799 | "rich", 800 | "right", 801 | "righteous", 802 | "rightful", 803 | "rigid", 804 | "ripe", 805 | "ritzy", 806 | "roasted", 807 | "robust", 808 | "romantic", 809 | "roomy", 810 | "rotten", 811 | "rough", 812 | "round", 813 | "royal", 814 | "ruddy", 815 | "rude", 816 | "rural", 817 | "rustic", 818 | "ruthless", 819 | "sable", 820 | "sad", 821 | "safe", 822 | "salty", 823 | "same", 824 | "sassy", 825 | "satisfying", 826 | "savory", 827 | "scandalous", 828 | "scarce", 829 | "scared", 830 | "scary", 831 | "scattered", 832 | "scientific", 833 | "scintillating", 834 | "scrawny", 835 | "screeching", 836 | "second", 837 | "second-hand", 838 | "secret", 839 | "secretive", 840 | "sedate", 841 | "seemly", 842 | "selective", 843 | "selfish", 844 | "separate", 845 | "serious", 846 | "shaggy", 847 | "shaky", 848 | "shallow", 849 | "sharp", 850 | "shiny", 851 | "shivering", 852 | "shocking", 853 | "short", 854 | "shrill", 855 | "shut", 856 | "shy", 857 | "sick", 858 | "silent", 859 | "silky", 860 | "silly", 861 | "simple", 862 | "simplistic", 863 | "sincere", 864 | "six", 865 | "skillful", 866 | "skinny", 867 | "sleepy", 868 | "slim", 869 | "slimy", 870 | "slippery", 871 | "sloppy", 872 | "slow", 873 | "small", 874 | "smart", 875 | "smelly", 876 | "smiling", 877 | "smoggy", 878 | "smooth", 879 | "sneaky", 880 | "snobbish", 881 | "snotty", 882 | "soft", 883 | "soggy", 884 | "solid", 885 | "somber", 886 | "sophisticated", 887 | "sordid", 888 | "sore", 889 | "sour", 890 | "sparkling", 891 | "special", 892 | "spectacular", 893 | "spicy", 894 | "spiffy", 895 | "spiky", 896 | "spiritual", 897 | "spiteful", 898 | "splendid", 899 | "spooky", 900 | "spotless", 901 | "spotted", 902 | "spotty", 903 | "spurious", 904 | "squalid", 905 | "square", 906 | "squealing", 907 | "squeamish", 908 | "staking", 909 | "stale", 910 | "standing", 911 | "statuesque", 912 | "steadfast", 913 | "steady", 914 | "steep", 915 | "stereotyped", 916 | "sticky", 917 | "stiff", 918 | "stimulating", 919 | "stingy", 920 | "stormy", 921 | "straight", 922 | "strange", 923 | "striped", 924 | "strong", 925 | "stupendous", 926 | "stupid", 927 | "sturdy", 928 | "subdued", 929 | "subsequent", 930 | "substantial", 931 | "successful", 932 | "succinct", 933 | "sudden", 934 | "sulky", 935 | "super", 936 | "superb", 937 | "superficial", 938 | "supreme", 939 | "swanky", 940 | "sweet", 941 | "sweltering", 942 | "swift", 943 | "symptomatic", 944 | "synonymous", 945 | "taboo", 946 | "tacit", 947 | "tacky", 948 | "talented", 949 | "tall", 950 | "tame", 951 | "tan", 952 | "tangible", 953 | "tangy", 954 | "tart", 955 | "tasteful", 956 | "tasteless", 957 | "tasty", 958 | "tawdry", 959 | "tearful", 960 | "tedious", 961 | "teeny", 962 | "teeny-tiny", 963 | "telling", 964 | "temporary", 965 | "ten", 966 | "tender", 967 | "tense", 968 | "tenuous", 969 | "terrible", 970 | "terrific", 971 | "tested", 972 | "testy", 973 | "thankful", 974 | "therapeutic", 975 | "thick", 976 | "thin", 977 | "thinkable", 978 | "third", 979 | "thirsty", 980 | "thoughtful", 981 | "thoughtless", 982 | "threatening", 983 | "three", 984 | "thundering", 985 | "tidy", 986 | "tight", 987 | "tightfisted", 988 | "tiny", 989 | "tired", 990 | "tiresome", 991 | "toothsome", 992 | "torpid", 993 | "tough", 994 | "towering", 995 | "tranquil", 996 | "trashy", 997 | "tremendous", 998 | "tricky", 999 | "trite", 1000 | "troubled", 1001 | "truculent", 1002 | "true", 1003 | "truthful", 1004 | "two", 1005 | "typical", 1006 | "ubiquitous", 1007 | "ugliest", 1008 | "ugly", 1009 | "ultra", 1010 | "unable", 1011 | "unaccountable", 1012 | "unadvised", 1013 | "unarmed", 1014 | "unbecoming", 1015 | "unbiased", 1016 | "uncovered", 1017 | "understood", 1018 | "undesirable", 1019 | "unequal", 1020 | "unequaled", 1021 | "uneven", 1022 | "unhealthy", 1023 | "uninterested", 1024 | "unique", 1025 | "unkempt", 1026 | "unknown", 1027 | "unnatural", 1028 | "unruly", 1029 | "unsightly", 1030 | "unsuitable", 1031 | "untidy", 1032 | "unused", 1033 | "unusual", 1034 | "unwieldy", 1035 | "unwritten", 1036 | "upbeat", 1037 | "uppity", 1038 | "upset", 1039 | "uptight", 1040 | "used", 1041 | "useful", 1042 | "useless", 1043 | "utopian", 1044 | "utter", 1045 | "uttermost", 1046 | "vacuous", 1047 | "vagabond", 1048 | "vague", 1049 | "valuable", 1050 | "various", 1051 | "vast", 1052 | "vengeful", 1053 | "venomous", 1054 | "verdant", 1055 | "versed", 1056 | "victorious", 1057 | "vigorous", 1058 | "violent", 1059 | "violet", 1060 | "vivacious", 1061 | "voiceless", 1062 | "volatile", 1063 | "voracious", 1064 | "vulgar", 1065 | "wacky", 1066 | "waggish", 1067 | "waiting", 1068 | "wakeful", 1069 | "wandering", 1070 | "wanting", 1071 | "warlike", 1072 | "warm", 1073 | "wary", 1074 | "wasteful", 1075 | "watery", 1076 | "weak", 1077 | "wealthy", 1078 | "weary", 1079 | "well-groomed", 1080 | "well-made", 1081 | "well-off", 1082 | "well-to-do", 1083 | "wet", 1084 | "whimsical", 1085 | "whispering", 1086 | "white", 1087 | "whole", 1088 | "wholesale", 1089 | "wicked", 1090 | "wide", 1091 | "wide-eyed", 1092 | "wiggly", 1093 | "wild", 1094 | "willing", 1095 | "windy", 1096 | "wiry", 1097 | "wise", 1098 | "wistful", 1099 | "witty", 1100 | "woebegone", 1101 | "womanly", 1102 | "wonderful", 1103 | "wooden", 1104 | "woozy", 1105 | "workable", 1106 | "worried", 1107 | "worthless", 1108 | "wrathful", 1109 | "wretched", 1110 | "wrong", 1111 | "wry", 1112 | "yellow", 1113 | "yielding", 1114 | "young", 1115 | "youthful", 1116 | "yummy", 1117 | "zany", 1118 | "zealous", 1119 | "zesty", 1120 | "zippy", 1121 | "zonked", 1122 | ]; 1123 | 1124 | NOUNS = [ 1125 | "abbey", 1126 | "abbie", 1127 | "abby", 1128 | "abel", 1129 | "abigail", 1130 | "ace", 1131 | "adam", 1132 | "addie", 1133 | "admiral", 1134 | "aggie", 1135 | "aires", 1136 | "aj", 1137 | "ajax", 1138 | "aldo", 1139 | "alex", 1140 | "alexus", 1141 | "alf", 1142 | "alfie", 1143 | "allie", 1144 | "ally", 1145 | "amber", 1146 | "amie", 1147 | "amigo", 1148 | "amos", 1149 | "amy", 1150 | "andy", 1151 | "angel", 1152 | "angus", 1153 | "annie", 1154 | "apollo", 1155 | "april", 1156 | "archie", 1157 | "argus", 1158 | "aries", 1159 | "armanti", 1160 | "arnie", 1161 | "arrow", 1162 | "ashes", 1163 | "ashley", 1164 | "astro", 1165 | "athena", 1166 | "atlas", 1167 | "audi", 1168 | "augie", 1169 | "aussie", 1170 | "austin", 1171 | "autumn", 1172 | "axel", 1173 | "axle", 1174 | "babbles", 1175 | "babe", 1176 | "baby", 1177 | "baby-doll", 1178 | "babykins", 1179 | "bacchus", 1180 | "bailey", 1181 | "bam-bam", 1182 | "bambi", 1183 | "bandit", 1184 | "banjo", 1185 | "barbie", 1186 | "barclay", 1187 | "barker", 1188 | "barkley", 1189 | "barley", 1190 | "barnaby", 1191 | "barney", 1192 | "baron", 1193 | "bart", 1194 | "basil", 1195 | "baxter", 1196 | "bb", 1197 | "beamer", 1198 | "beanie", 1199 | "beans", 1200 | "bear", 1201 | "beau", 1202 | "beauty", 1203 | "beaux", 1204 | "bebe", 1205 | "beetle", 1206 | "bella", 1207 | "belle", 1208 | "ben", 1209 | "benji", 1210 | "benny", 1211 | "benson", 1212 | "bentley", 1213 | "bernie", 1214 | "bessie", 1215 | "biablo", 1216 | "bibbles", 1217 | "bigboy", 1218 | "bigfoot", 1219 | "biggie", 1220 | "billie", 1221 | "billy", 1222 | "bingo", 1223 | "binky", 1224 | "birdie", 1225 | "birdy", 1226 | "biscuit", 1227 | "bishop", 1228 | "bits", 1229 | "bitsy", 1230 | "bizzy", 1231 | "bj", 1232 | "blackie", 1233 | "black-jack", 1234 | "blanche", 1235 | "blast", 1236 | "blaze", 1237 | "blondie", 1238 | "blossom", 1239 | "blue", 1240 | "bo", 1241 | "bo", 1242 | "bob", 1243 | "bobbie", 1244 | "bobby", 1245 | "bobo", 1246 | "bodie", 1247 | "bogey", 1248 | "bones", 1249 | "bongo", 1250 | "bonnie", 1251 | "boo", 1252 | "boo-boo", 1253 | "booker", 1254 | "boomer", 1255 | "boone", 1256 | "booster", 1257 | "bootie", 1258 | "boots", 1259 | "boozer", 1260 | "boris", 1261 | "bosco", 1262 | "bosley", 1263 | "boss", 1264 | "boy", 1265 | "bozley", 1266 | "bradley", 1267 | "brady", 1268 | "braggs", 1269 | "brandi", 1270 | "brando", 1271 | "brandy", 1272 | "bridgett", 1273 | "bridgette", 1274 | "brie", 1275 | "brindle", 1276 | "brit", 1277 | "brittany", 1278 | "brodie", 1279 | "brook", 1280 | "brooke", 1281 | "brownie", 1282 | "bruiser", 1283 | "bruno", 1284 | "brutus", 1285 | "bubba", 1286 | "bubbles", 1287 | "buck", 1288 | "buckeye", 1289 | "bucko", 1290 | "bucky", 1291 | "bud", 1292 | "budda", 1293 | "buddie", 1294 | "buddy", 1295 | "buddyboy", 1296 | "buffie", 1297 | "buffy", 1298 | "bug", 1299 | "bugsey", 1300 | "bugsy", 1301 | "bullet", 1302 | "bullwinkle", 1303 | "bully", 1304 | "bumper", 1305 | "bunky", 1306 | "buster", 1307 | "buster-brown", 1308 | "butch", 1309 | "butchy", 1310 | "butter", 1311 | "butterball", 1312 | "buttercup", 1313 | "butterscotch", 1314 | "buttons", 1315 | "buzzy", 1316 | "caesar", 1317 | "cali", 1318 | "callie", 1319 | "calvin", 1320 | "cameo", 1321 | "camille", 1322 | "candy", 1323 | "capone", 1324 | "captain", 1325 | "carley", 1326 | "casey", 1327 | "casper", 1328 | "cassie", 1329 | "cassis", 1330 | "chacha", 1331 | "chad", 1332 | "chamberlain", 1333 | "champ", 1334 | "chance", 1335 | "chanel", 1336 | "chaos", 1337 | "charisma", 1338 | "charles", 1339 | "charlie", 1340 | "charliebrown", 1341 | "charmer", 1342 | "chase", 1343 | "chauncey", 1344 | "chaz", 1345 | "checkers", 1346 | "chelsea", 1347 | "cherokee", 1348 | "chessie", 1349 | "chester", 1350 | "chevy", 1351 | "chewie", 1352 | "chewy", 1353 | "cheyenne", 1354 | "chichi", 1355 | "chic", 1356 | "chico", 1357 | "chief", 1358 | "chili", 1359 | "china", 1360 | "chip", 1361 | "chipper", 1362 | "chippy", 1363 | "chips", 1364 | "chiquita", 1365 | "chivas", 1366 | "chloe", 1367 | "chocolate", 1368 | "chrissy", 1369 | "chubbs", 1370 | "chucky", 1371 | "chyna", 1372 | "cinder", 1373 | "cindy", 1374 | "cinnamon", 1375 | "cisco", 1376 | "claire", 1377 | "clancy", 1378 | "cleo", 1379 | "cleopatra", 1380 | "clicker", 1381 | "clifford", 1382 | "clover", 1383 | "clyde", 1384 | "coal", 1385 | "cobweb", 1386 | "coco", 1387 | "cocoa", 1388 | "coconut", 1389 | "codi", 1390 | "cody", 1391 | "cole", 1392 | "comet", 1393 | "commando", 1394 | "conan", 1395 | "connor", 1396 | "cookie", 1397 | "cooper", 1398 | "copper", 1399 | "corky", 1400 | "cosmo", 1401 | "cotton", 1402 | "cozmo", 1403 | "crackers", 1404 | "cricket", 1405 | "crystal", 1406 | "cubby", 1407 | "cubs", 1408 | "cujo", 1409 | "cupcake", 1410 | "curly", 1411 | "curry", 1412 | "cutie", 1413 | "cutie-pie", 1414 | "cyrus", 1415 | "daffy", 1416 | "daisey-mae", 1417 | "daisy", 1418 | "dakota", 1419 | "dallas", 1420 | "dandy", 1421 | "dante", 1422 | "daphne", 1423 | "darby", 1424 | "darcy", 1425 | "darwin", 1426 | "dash", 1427 | "dave", 1428 | "deacon", 1429 | "dee", 1430 | "deedee", 1431 | "dempsey", 1432 | "destini", 1433 | "dewey", 1434 | "dexter", 1435 | "dharma", 1436 | "diamond", 1437 | "dickens", 1438 | "diego", 1439 | "diesel", 1440 | "digger", 1441 | "dillon", 1442 | "dinky", 1443 | "dino", 1444 | "diva", 1445 | "dixie", 1446 | "dobie", 1447 | "doc", 1448 | "dodger", 1449 | "doggon", 1450 | "dolly", 1451 | "domino", 1452 | "doodles", 1453 | "doogie", 1454 | "dots", 1455 | "dottie", 1456 | "dozer", 1457 | "dragster", 1458 | "dreamer", 1459 | "duchess", 1460 | "dude", 1461 | "dudley", 1462 | "duffy", 1463 | "duke", 1464 | "duncan", 1465 | "dunn", 1466 | "dusty", 1467 | "dutches", 1468 | "dutchess", 1469 | "dylan", 1470 | "earl", 1471 | "ebony", 1472 | "echo", 1473 | "eddie", 1474 | "eddy", 1475 | "edgar", 1476 | "edsel", 1477 | "eifel", 1478 | "einstein", 1479 | "ellie", 1480 | "elliot", 1481 | "elmo", 1482 | "elvis", 1483 | "elwood", 1484 | "ember", 1485 | "emily", 1486 | "emma", 1487 | "emmy", 1488 | "erin", 1489 | "ernie", 1490 | "eva", 1491 | "faith", 1492 | "fancy", 1493 | "felix", 1494 | "fergie", 1495 | "ferris", 1496 | "fido", 1497 | "fifi", 1498 | "figaro", 1499 | "finnegan", 1500 | "fiona", 1501 | "flake", 1502 | "flakey", 1503 | "flash", 1504 | "flint", 1505 | "flopsy", 1506 | "flower", 1507 | "floyd", 1508 | "fluffy", 1509 | "fonzie", 1510 | "foxy", 1511 | "francais", 1512 | "frankie", 1513 | "franky", 1514 | "freckles", 1515 | "fred", 1516 | "freddie", 1517 | "freddy", 1518 | "freedom", 1519 | "freeway", 1520 | "fresier", 1521 | "friday", 1522 | "frisco", 1523 | "frisky", 1524 | "fritz", 1525 | "frodo", 1526 | "frosty", 1527 | "furball", 1528 | "fuzzy", 1529 | "gabby", 1530 | "gabriella", 1531 | "garfield", 1532 | "gasby", 1533 | "gator", 1534 | "gavin", 1535 | "genie", 1536 | "george", 1537 | "georgia", 1538 | "georgie", 1539 | "giant", 1540 | "gibson", 1541 | "gidget", 1542 | "gigi", 1543 | "gilbert", 1544 | "gilda", 1545 | "ginger", 1546 | "ginny", 1547 | "girl", 1548 | "gizmo", 1549 | "godiva", 1550 | "goldie", 1551 | "goober", 1552 | "goose", 1553 | "gordon", 1554 | "grace", 1555 | "grace", 1556 | "gracie", 1557 | "gracie", 1558 | "grady", 1559 | "greenie", 1560 | "greta", 1561 | "gretchen", 1562 | "gretel", 1563 | "gretta", 1564 | "griffen", 1565 | "gringo", 1566 | "grizzly", 1567 | "gromit", 1568 | "grover", 1569 | "gucci", 1570 | "guido", 1571 | "guinness", 1572 | "gunner", 1573 | "gunther", 1574 | "gus", 1575 | "guy", 1576 | "gypsy", 1577 | "hailey", 1578 | "haley", 1579 | "hallie", 1580 | "hamlet", 1581 | "hammer", 1582 | "hank", 1583 | "hanna", 1584 | "hannah", 1585 | "hans", 1586 | "happyt", 1587 | "hardy", 1588 | "harley", 1589 | "harpo", 1590 | "harrison", 1591 | "harry", 1592 | "harvey", 1593 | "heather", 1594 | "heidi", 1595 | "henry", 1596 | "hercules", 1597 | "hershey", 1598 | "higgins", 1599 | "hobbes", 1600 | "holly", 1601 | "homer", 1602 | "honey", 1603 | "honey-bear", 1604 | "hooch", 1605 | "hoover", 1606 | "hope", 1607 | "houdini", 1608 | "howie", 1609 | "hudson", 1610 | "huey", 1611 | "hugh", 1612 | "hugo", 1613 | "humphrey", 1614 | "hunter", 1615 | "india", 1616 | "indy", 1617 | "iris", 1618 | "isabella", 1619 | "isabelle", 1620 | "itsy", 1621 | "itsy-bitsy", 1622 | "ivory", 1623 | "ivy", 1624 | "izzy", 1625 | "jack", 1626 | "jackie", 1627 | "jackpot", 1628 | "jackson", 1629 | "jade", 1630 | "jagger", 1631 | "jags", 1632 | "jaguar", 1633 | "jake", 1634 | "jamie", 1635 | "jasmine", 1636 | "jasper", 1637 | "jaxson", 1638 | "jazmie", 1639 | "jazz", 1640 | "jelly", 1641 | "jelly-bean", 1642 | "jenna", 1643 | "jenny", 1644 | "jerry", 1645 | "jersey", 1646 | "jess", 1647 | "jesse", 1648 | "jessejames", 1649 | "jessie", 1650 | "jester", 1651 | "jet", 1652 | "jethro", 1653 | "jett", 1654 | "jetta", 1655 | "jewel", 1656 | "jewels", 1657 | "jimmuy", 1658 | "jingles", 1659 | "jj", 1660 | "joe", 1661 | "joey", 1662 | "johnny", 1663 | "jojo", 1664 | "joker", 1665 | "jolie", 1666 | "jolly", 1667 | "jordan", 1668 | "josie", 1669 | "joy", 1670 | "jr", 1671 | "judy", 1672 | "julius", 1673 | "june", 1674 | "junior", 1675 | "justice", 1676 | "kali", 1677 | "kallie", 1678 | "kane", 1679 | "karma", 1680 | "kasey", 1681 | "katie", 1682 | "kato", 1683 | "katz", 1684 | "kayla", 1685 | "kc", 1686 | "keesha", 1687 | "kellie", 1688 | "kelly", 1689 | "kelsey", 1690 | "kenya", 1691 | "kerry", 1692 | "kibbles", 1693 | "kid", 1694 | "kiki", 1695 | "killian", 1696 | "king", 1697 | "kipper", 1698 | "kira", 1699 | "kirby", 1700 | "kismet", 1701 | "kissy", 1702 | "kitty", 1703 | "kiwi", 1704 | "klaus", 1705 | "koba", 1706 | "kobe", 1707 | "koda", 1708 | "koko", 1709 | "kona", 1710 | "kosmo", 1711 | "koty", 1712 | "kramer", 1713 | "kujo", 1714 | "kurly", 1715 | "kyra", 1716 | "lacey", 1717 | "laddie", 1718 | "lady", 1719 | "ladybug", 1720 | "laney", 1721 | "lassie", 1722 | "latte", 1723 | "layla", 1724 | "lazarus", 1725 | "lefty", 1726 | "leo", 1727 | "levi", 1728 | "lexi", 1729 | "lexie", 1730 | "lexus", 1731 | "libby", 1732 | "lightning", 1733 | "lili", 1734 | "lilly", 1735 | "lily", 1736 | "lincoln", 1737 | "linus", 1738 | "littlebit", 1739 | "little-guy", 1740 | "little-one", 1741 | "little-rascal", 1742 | "lizzy", 1743 | "logan", 1744 | "loki", 1745 | "lola", 1746 | "lou", 1747 | "louie", 1748 | "louis", 1749 | "lovey", 1750 | "lucas", 1751 | "luci", 1752 | "lucifer", 1753 | "lucky", 1754 | "lucy", 1755 | "luke", 1756 | "lulu", 1757 | "luna", 1758 | "lynx", 1759 | "mac", 1760 | "macho", 1761 | "macintosh", 1762 | "mack", 1763 | "mackenzie", 1764 | "macy", 1765 | "maddie", 1766 | "maddy", 1767 | "madison", 1768 | "maggie", 1769 | "maggie-mae", 1770 | "maggie-moo", 1771 | "maggy", 1772 | "magic", 1773 | "magnolia", 1774 | "major", 1775 | "mandi", 1776 | "mandy", 1777 | "mango", 1778 | "marble", 1779 | "mariah", 1780 | "marley", 1781 | "mary", 1782 | "maryjane", 1783 | "mason", 1784 | "mattie", 1785 | "maverick", 1786 | "max", 1787 | "maximus", 1788 | "maxine", 1789 | "maxwell", 1790 | "may", 1791 | "maya", 1792 | "mcduff", 1793 | "mckenzie", 1794 | "meadow", 1795 | "megan", 1796 | "meggie", 1797 | "mercedes", 1798 | "mercle", 1799 | "merlin", 1800 | "mia", 1801 | "miasy", 1802 | "michael", 1803 | "mickey", 1804 | "midnight", 1805 | "mikey", 1806 | "miko", 1807 | "miles", 1808 | "miller", 1809 | "millie", 1810 | "milo", 1811 | "mimi", 1812 | "mindy", 1813 | "ming", 1814 | "mini", 1815 | "minnie", 1816 | "mischief", 1817 | "misha", 1818 | "misskitty", 1819 | "misspriss", 1820 | "missie", 1821 | "missy", 1822 | "mister", 1823 | "misty", 1824 | "mitch", 1825 | "mittens", 1826 | "mitzi", 1827 | "mitzy", 1828 | "mo", 1829 | "mocha", 1830 | "mojo", 1831 | "mollie", 1832 | "molly", 1833 | "mona", 1834 | "monkey", 1835 | "monster", 1836 | "montana", 1837 | "montgomery", 1838 | "monty", 1839 | "moocher", 1840 | "moochie", 1841 | "mookie", 1842 | "moonshine", 1843 | "moose", 1844 | "morgan", 1845 | "moses", 1846 | "mouse", 1847 | "mrkitty", 1848 | "muffin", 1849 | "muffy", 1850 | "mugsy", 1851 | "mulligan", 1852 | "munchkin", 1853 | "murphy", 1854 | "nakita", 1855 | "nala", 1856 | "nana", 1857 | "napoleon", 1858 | "natasha", 1859 | "nathan", 1860 | "nellie", 1861 | "nemo", 1862 | "nena", 1863 | "nero", 1864 | "nestle", 1865 | "newt", 1866 | "newton", 1867 | "nibbles", 1868 | "nibby", 1869 | "nibby-nose", 1870 | "nick", 1871 | "nickers", 1872 | "nickie", 1873 | "nicky", 1874 | "nico", 1875 | "nike", 1876 | "niki", 1877 | "nikita", 1878 | "nikki", 1879 | "niko", 1880 | "nina", 1881 | "nitro", 1882 | "nobel", 1883 | "noel", 1884 | "nona", 1885 | "noodles", 1886 | "norton", 1887 | "nosey", 1888 | "nugget", 1889 | "nutmeg", 1890 | "oakley", 1891 | "obie", 1892 | "odie", 1893 | "oldglory", 1894 | "olive", 1895 | "oliver", 1896 | "olivia", 1897 | "ollie", 1898 | "onie", 1899 | "onyx", 1900 | "opie", 1901 | "oreo", 1902 | "oscar", 1903 | "otis", 1904 | "otto", 1905 | "oz", 1906 | "ozzie", 1907 | "ozzy", 1908 | "pablo", 1909 | "paco", 1910 | "paddington", 1911 | "paddy", 1912 | "panda", 1913 | "pandora", 1914 | "panther", 1915 | "papa", 1916 | "paris", 1917 | "parker", 1918 | "pasha", 1919 | "patch", 1920 | "patches", 1921 | "patricky", 1922 | "patsy", 1923 | "patty", 1924 | "peaches", 1925 | "peanut", 1926 | "peanuts", 1927 | "pearl", 1928 | "pebbles", 1929 | "pedro", 1930 | "penny", 1931 | "pepe", 1932 | "pepper", 1933 | "peppy", 1934 | "pepsi", 1935 | "persy", 1936 | "pete", 1937 | "peter", 1938 | "petey", 1939 | "petie", 1940 | "phantom", 1941 | "phoebe", 1942 | "phoenix", 1943 | "picasso", 1944 | "pickles", 1945 | "pierre", 1946 | "piggy", 1947 | "piglet", 1948 | "pinkpanther", 1949 | "pinky", 1950 | "pinto", 1951 | "piper", 1952 | "pippin", 1953 | "pippy", 1954 | "pip-squeek", 1955 | "pirate", 1956 | "pixie", 1957 | "plato", 1958 | "pluto", 1959 | "pockets", 1960 | "pogo", 1961 | "pokey", 1962 | "polly", 1963 | "poncho", 1964 | "pongo", 1965 | "pooch", 1966 | "poochie", 1967 | "pooh", 1968 | "pooh-bear", 1969 | "pookie", 1970 | "pooky", 1971 | "popcorn", 1972 | "poppy", 1973 | "porche", 1974 | "porkchop", 1975 | "porky", 1976 | "porter", 1977 | "powder", 1978 | "prancer", 1979 | "precious", 1980 | "presley", 1981 | "pretty", 1982 | "pretty-girl", 1983 | "prince", 1984 | "princess", 1985 | "prissy", 1986 | "puck", 1987 | "puddles", 1988 | "pudge", 1989 | "puffy", 1990 | "pugsley", 1991 | "pumpkin", 1992 | "punkin", 1993 | "puppy", 1994 | "purdy", 1995 | "queen", 1996 | "queenie", 1997 | "quincy", 1998 | "quinn", 1999 | "rags", 2000 | "raison", 2001 | "ralph", 2002 | "ralphie", 2003 | "rambler", 2004 | "rambo", 2005 | "ranger", 2006 | "rascal", 2007 | "raven", 2008 | "rebel", 2009 | "red", 2010 | "reggie", 2011 | "reilly", 2012 | "remy", 2013 | "rex", 2014 | "rexy", 2015 | "rhett", 2016 | "ricky", 2017 | "rico", 2018 | "riggs", 2019 | "riley", 2020 | "rintintin", 2021 | "ringo", 2022 | "ripley", 2023 | "rocco", 2024 | "rock", 2025 | "rocket", 2026 | "rocko", 2027 | "rocky", 2028 | "roland", 2029 | "rolex", 2030 | "rollie", 2031 | "roman", 2032 | "romeo", 2033 | "rosa", 2034 | "roscoe", 2035 | "rosebud", 2036 | "rosie", 2037 | "rosy", 2038 | "rover", 2039 | "rowdy", 2040 | "roxanne", 2041 | "roxie", 2042 | "roxy", 2043 | "ruby", 2044 | "ruchus", 2045 | "rudy", 2046 | "ruffe", 2047 | "ruffer", 2048 | "ruffles", 2049 | "rufus", 2050 | "ruger", 2051 | "rusty", 2052 | "ruthie", 2053 | "ryder", 2054 | "sabine", 2055 | "sable", 2056 | "sabrina", 2057 | "sadie", 2058 | "sage", 2059 | "sailor", 2060 | "salem", 2061 | "sally", 2062 | "salty", 2063 | "sam", 2064 | "samantha", 2065 | "sammy", 2066 | "sampson", 2067 | "samson", 2068 | "sandy", 2069 | "sara", 2070 | "sarah", 2071 | "sarge", 2072 | "sasha", 2073 | "sassie", 2074 | "sassy", 2075 | "savannah", 2076 | "sawyer", 2077 | "scarlett", 2078 | "schotzie", 2079 | "schultz", 2080 | "scoobie", 2081 | "scooby", 2082 | "scooby-doo", 2083 | "scooter", 2084 | "scottie", 2085 | "scout", 2086 | "scrappy", 2087 | "scruffy", 2088 | "sebastian", 2089 | "shadow", 2090 | "shady", 2091 | "shaggy", 2092 | "shasta", 2093 | "sheba", 2094 | "sheena", 2095 | "shelby", 2096 | "shelly", 2097 | "sherman", 2098 | "shiloh", 2099 | "shiner", 2100 | "shorty", 2101 | "sienna", 2102 | "sierra", 2103 | "silky", 2104 | "silver", 2105 | "silvester", 2106 | "simba", 2107 | "simon", 2108 | "simone", 2109 | "sissy", 2110 | "skeeter", 2111 | "skinny", 2112 | "skip", 2113 | "skipper", 2114 | "skippy", 2115 | "skittles", 2116 | "sky", 2117 | "skye", 2118 | "skyler", 2119 | "slick", 2120 | "slinky", 2121 | "sly", 2122 | "smarty", 2123 | "smoke", 2124 | "smokey", 2125 | "smudge", 2126 | "sneakers", 2127 | "snickers", 2128 | "snoop", 2129 | "snoopy", 2130 | "snowball", 2131 | "snowflake", 2132 | "snowy", 2133 | "snuffles", 2134 | "snuggles", 2135 | "solomon", 2136 | "sonny", 2137 | "sophia", 2138 | "sophie", 2139 | "sox", 2140 | "spanky", 2141 | "sparkle", 2142 | "sparky", 2143 | "speed", 2144 | "speedo", 2145 | "speedy", 2146 | "spencer", 2147 | "spike", 2148 | "spirit", 2149 | "spookey", 2150 | "spot", 2151 | "spotty", 2152 | "spud", 2153 | "spunky", 2154 | "squeeky", 2155 | "squirt", 2156 | "stanley", 2157 | "star", 2158 | "starr", 2159 | "stella", 2160 | "sterling", 2161 | "stich", 2162 | "stinky", 2163 | "stormy", 2164 | "stuart", 2165 | "sugar", 2166 | "sugar-baby", 2167 | "summer", 2168 | "sumo", 2169 | "sundance", 2170 | "sunday", 2171 | "sunny", 2172 | "sunshine", 2173 | "susie", 2174 | "susie-q", 2175 | "suzy", 2176 | "sweetie", 2177 | "sweetie-pie", 2178 | "sweet-pea", 2179 | "sydney", 2180 | "tabby", 2181 | "tabetha", 2182 | "taco", 2183 | "taffy", 2184 | "tally", 2185 | "tammy", 2186 | "tangles", 2187 | "tango", 2188 | "tank", 2189 | "tanner", 2190 | "tara", 2191 | "tasha", 2192 | "taylor", 2193 | "taz", 2194 | "t-bird", 2195 | "t-bone", 2196 | "teddy", 2197 | "teddy-bear", 2198 | "tequila", 2199 | "tess", 2200 | "tessa", 2201 | "tessie", 2202 | "tex", 2203 | "thelma", 2204 | "thor", 2205 | "thumper", 2206 | "thunder", 2207 | "thyme", 2208 | "tiffany", 2209 | "tiger", 2210 | "tigger", 2211 | "tiggy", 2212 | "tiki", 2213 | "tilly", 2214 | "timber", 2215 | "timmy", 2216 | "tinker", 2217 | "tinker-bell", 2218 | "tinky", 2219 | "tiny", 2220 | "tippy", 2221 | "tipr", 2222 | "titan", 2223 | "tito", 2224 | "titus", 2225 | "tobie", 2226 | "toby", 2227 | "toffee", 2228 | "tom", 2229 | "tommy", 2230 | "tommy-boy", 2231 | "toni", 2232 | "tony", 2233 | "toots", 2234 | "tootsie", 2235 | "topaz", 2236 | "tori", 2237 | "toto", 2238 | "tracker", 2239 | "tramp", 2240 | "trapper", 2241 | "travis", 2242 | "trigger", 2243 | "trinity", 2244 | "tripod", 2245 | "tristan", 2246 | "trixie", 2247 | "trooper", 2248 | "trouble", 2249 | "troy", 2250 | "truffles", 2251 | "tuck", 2252 | "tucker", 2253 | "tuesday", 2254 | "tuffy", 2255 | "turbo", 2256 | "turner", 2257 | "tux", 2258 | "twiggy", 2259 | "twinkle", 2260 | "ty", 2261 | "tyler", 2262 | "tyson", 2263 | "valinto", 2264 | "vava", 2265 | "vegas", 2266 | "velvet", 2267 | "vinnie", 2268 | "vinny", 2269 | "violet", 2270 | "vito", 2271 | "volvo", 2272 | "waddles", 2273 | "wags", 2274 | "waldo", 2275 | "wallace", 2276 | "wally", 2277 | "walter", 2278 | "wayne", 2279 | "weaver", 2280 | "webster", 2281 | "wesley", 2282 | "westie", 2283 | "whiskers", 2284 | "whiskey", 2285 | "whispy", 2286 | "whitie", 2287 | "whiz", 2288 | "wiggles", 2289 | "wilber", 2290 | "willie", 2291 | "willow", 2292 | "willy", 2293 | "wilson", 2294 | "winnie", 2295 | "winston", 2296 | "winter", 2297 | "wiz", 2298 | "wizard", 2299 | "wolfgang", 2300 | "wolfie", 2301 | "woody", 2302 | "woofie", 2303 | "wrigley", 2304 | "wrinkles", 2305 | "wyatt", 2306 | "xena", 2307 | "yaka", 2308 | "yang", 2309 | "yeller", 2310 | "yellow", 2311 | "yin", 2312 | "yoda", 2313 | "yogi", 2314 | "yogi-bear", 2315 | "yukon", 2316 | "zack", 2317 | "zeke", 2318 | "zena", 2319 | "zeus", 2320 | "ziggy", 2321 | "zippy", 2322 | "zoe", 2323 | "zoey", 2324 | "zoie", 2325 | "zorro", 2326 | ]; 2327 | constructor() {} 2328 | 2329 | generate() { 2330 | return { 2331 | noun: this.NOUNS[(Math.random() * this.NOUNS.length) | 0], 2332 | adjective: this.ADJECTIVES[(Math.random() * this.ADJECTIVES.length) | 0], 2333 | }; 2334 | } 2335 | } 2336 | -------------------------------------------------------------------------------- /api/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "catsify", 3 | "version": "1.0.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "@azure/functions": { 8 | "version": "1.2.0", 9 | "resolved": "https://registry.npmjs.org/@azure/functions/-/functions-1.2.0.tgz", 10 | "integrity": "sha512-qkaQqTnr56xUnYNkKBM/2wsnf6imAJ3NF6Nbpk691Y6JYliA1YdZngsZsrpHS9tQ9/71MqARl8m50+EmEfLG3g==", 11 | "dev": true 12 | }, 13 | "@bazel/bazelisk": { 14 | "version": "1.4.0", 15 | "resolved": "https://registry.npmjs.org/@bazel/bazelisk/-/bazelisk-1.4.0.tgz", 16 | "integrity": "sha512-VNI/jF7baQiBy4x+u8gmSDsFehqaAuzMyLuCj0j6/aZCZSw2OssytJVj73m8sFYbXgj67D8iYEQ0gbuoafDk6w==", 17 | "dev": true 18 | }, 19 | "@bazel/ibazel": { 20 | "version": "0.13.1", 21 | "resolved": "https://registry.npmjs.org/@bazel/ibazel/-/ibazel-0.13.1.tgz", 22 | "integrity": "sha512-FO1hBKpzpeBL0adnFYF2Dwl/7gox6ccKM6bb+x26AXrQpLbinXPuTi4zeXRL/MW4383mF6i4RovLCmwUU/YW0w==", 23 | "dev": true 24 | }, 25 | "@bazel/typescript": { 26 | "version": "1.6.1", 27 | "resolved": "https://registry.npmjs.org/@bazel/typescript/-/typescript-1.6.1.tgz", 28 | "integrity": "sha512-wQ9AASRcG1jLQOpJfNOMjZzPpwIV/9qTOxCFvp55ga6A5a2qveQr8JJ7jHHbBM0LtK+slEPixXmVmtEOwfKsIg==", 29 | "dev": true, 30 | "requires": { 31 | "protobufjs": "6.8.8", 32 | "semver": "5.6.0", 33 | "source-map-support": "0.5.9", 34 | "tsutils": "2.27.2" 35 | } 36 | }, 37 | "@protobufjs/aspromise": { 38 | "version": "1.1.2", 39 | "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", 40 | "integrity": "sha1-m4sMxmPWaafY9vXQiToU00jzD78=", 41 | "dev": true 42 | }, 43 | "@protobufjs/base64": { 44 | "version": "1.1.2", 45 | "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", 46 | "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==", 47 | "dev": true 48 | }, 49 | "@protobufjs/codegen": { 50 | "version": "2.0.4", 51 | "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", 52 | "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==", 53 | "dev": true 54 | }, 55 | "@protobufjs/eventemitter": { 56 | "version": "1.1.0", 57 | "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", 58 | "integrity": "sha1-NVy8mLr61ZePntCV85diHx0Ga3A=", 59 | "dev": true 60 | }, 61 | "@protobufjs/fetch": { 62 | "version": "1.1.0", 63 | "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", 64 | "integrity": "sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU=", 65 | "dev": true, 66 | "requires": { 67 | "@protobufjs/aspromise": "^1.1.1", 68 | "@protobufjs/inquire": "^1.1.0" 69 | } 70 | }, 71 | "@protobufjs/float": { 72 | "version": "1.0.2", 73 | "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", 74 | "integrity": "sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E=", 75 | "dev": true 76 | }, 77 | "@protobufjs/inquire": { 78 | "version": "1.1.0", 79 | "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", 80 | "integrity": "sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik=", 81 | "dev": true 82 | }, 83 | "@protobufjs/path": { 84 | "version": "1.1.2", 85 | "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", 86 | "integrity": "sha1-bMKyDFya1q0NzP0hynZz2Nf79o0=", 87 | "dev": true 88 | }, 89 | "@protobufjs/pool": { 90 | "version": "1.1.0", 91 | "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", 92 | "integrity": "sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q=", 93 | "dev": true 94 | }, 95 | "@protobufjs/utf8": { 96 | "version": "1.1.0", 97 | "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", 98 | "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=", 99 | "dev": true 100 | }, 101 | "@types/long": { 102 | "version": "4.0.1", 103 | "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.1.tgz", 104 | "integrity": "sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w==", 105 | "dev": true 106 | }, 107 | "@types/node": { 108 | "version": "13.13.9", 109 | "resolved": "https://registry.npmjs.org/@types/node/-/node-13.13.9.tgz", 110 | "integrity": "sha512-EPZBIGed5gNnfWCiwEIwTE2Jdg4813odnG8iNPMQGrqVxrI+wL68SPtPeCX+ZxGBaA6pKAVc6jaKgP/Q0QzfdQ==", 111 | "dev": true 112 | }, 113 | "ansi-styles": { 114 | "version": "3.2.1", 115 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 116 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 117 | "dev": true, 118 | "requires": { 119 | "color-convert": "^1.9.0" 120 | } 121 | }, 122 | "azure-functions-core-tools": { 123 | "version": "2.7.2508", 124 | "resolved": "https://registry.npmjs.org/azure-functions-core-tools/-/azure-functions-core-tools-2.7.2508.tgz", 125 | "integrity": "sha512-J9Yj7DSZOeqDAQ05HFwOgu0796tYW3gJCkLwUCTWuLQ5Qghth114pRDSCN+wP9cprVAr9DyISLMH3VV5Nt1Wmg==", 126 | "dev": true, 127 | "requires": { 128 | "chalk": "3.0.0", 129 | "command-exists": "1.2.8", 130 | "glob": "7.1.6", 131 | "https-proxy-agent": "5.0.0", 132 | "progress": "2.0.3", 133 | "rimraf": "3.0.2", 134 | "tmp": "0.1.0", 135 | "unzipper": "0.10.10" 136 | }, 137 | "dependencies": { 138 | "@types/color-name": { 139 | "version": "1.1.1", 140 | "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", 141 | "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==", 142 | "dev": true 143 | }, 144 | "agent-base": { 145 | "version": "6.0.0", 146 | "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.0.tgz", 147 | "integrity": "sha512-j1Q7cSCqN+AwrmDd+pzgqc0/NpC655x2bUf5ZjRIO77DcNBFmh+OgRNzF6OKdCC9RSCb19fGd99+bhXFdkRNqw==", 148 | "dev": true, 149 | "requires": { 150 | "debug": "4" 151 | } 152 | }, 153 | "ansi-styles": { 154 | "version": "4.2.0", 155 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.0.tgz", 156 | "integrity": "sha512-7kFQgnEaMdRtwf6uSfUnVr9gSGC7faurn+J/Mv90/W+iTtN0405/nLdopfMWwchyxhbGYl6TC4Sccn9TUkGAgg==", 157 | "dev": true, 158 | "requires": { 159 | "@types/color-name": "^1.1.1", 160 | "color-convert": "^2.0.1" 161 | } 162 | }, 163 | "balanced-match": { 164 | "version": "1.0.0", 165 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 166 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", 167 | "dev": true 168 | }, 169 | "big-integer": { 170 | "version": "1.6.48", 171 | "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.48.tgz", 172 | "integrity": "sha512-j51egjPa7/i+RdiRuJbPdJ2FIUYYPhvYLjzoYbcMMm62ooO6F94fETG4MTs46zPAF9Brs04OajboA/qTGuz78w==", 173 | "dev": true 174 | }, 175 | "binary": { 176 | "version": "0.3.0", 177 | "resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz", 178 | "integrity": "sha1-n2BVO8XOjDOG87VTz/R0Yq3sqnk=", 179 | "dev": true, 180 | "requires": { 181 | "buffers": "~0.1.1", 182 | "chainsaw": "~0.1.0" 183 | } 184 | }, 185 | "bluebird": { 186 | "version": "3.4.7", 187 | "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz", 188 | "integrity": "sha1-9y12C+Cbf3bQjtj66Ysomo0F+rM=", 189 | "dev": true 190 | }, 191 | "brace-expansion": { 192 | "version": "1.1.11", 193 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 194 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 195 | "dev": true, 196 | "requires": { 197 | "balanced-match": "^1.0.0", 198 | "concat-map": "0.0.1" 199 | } 200 | }, 201 | "buffer-indexof-polyfill": { 202 | "version": "1.0.1", 203 | "resolved": "https://registry.npmjs.org/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.1.tgz", 204 | "integrity": "sha1-qfuAbOgUXVQoUQznLyeLs2OmOL8=", 205 | "dev": true 206 | }, 207 | "buffers": { 208 | "version": "0.1.1", 209 | "resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz", 210 | "integrity": "sha1-skV5w77U1tOWru5tmorn9Ugqt7s=", 211 | "dev": true 212 | }, 213 | "chainsaw": { 214 | "version": "0.1.0", 215 | "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz", 216 | "integrity": "sha1-XqtQsor+WAdNDVgpE4iCi15fvJg=", 217 | "dev": true, 218 | "requires": { 219 | "traverse": ">=0.3.0 <0.4" 220 | } 221 | }, 222 | "chalk": { 223 | "version": "3.0.0", 224 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", 225 | "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", 226 | "dev": true, 227 | "requires": { 228 | "ansi-styles": "^4.1.0", 229 | "supports-color": "^7.1.0" 230 | } 231 | }, 232 | "color-convert": { 233 | "version": "2.0.1", 234 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 235 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 236 | "dev": true, 237 | "requires": { 238 | "color-name": "~1.1.4" 239 | } 240 | }, 241 | "color-name": { 242 | "version": "1.1.4", 243 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 244 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 245 | "dev": true 246 | }, 247 | "command-exists": { 248 | "version": "1.2.8", 249 | "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.8.tgz", 250 | "integrity": "sha512-PM54PkseWbiiD/mMsbvW351/u+dafwTJ0ye2qB60G1aGQP9j3xK2gmMDc+R34L3nDtx4qMCitXT75mkbkGJDLw==", 251 | "dev": true 252 | }, 253 | "concat-map": { 254 | "version": "0.0.1", 255 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 256 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 257 | "dev": true 258 | }, 259 | "core-util-is": { 260 | "version": "1.0.2", 261 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 262 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", 263 | "dev": true 264 | }, 265 | "debug": { 266 | "version": "4.1.1", 267 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", 268 | "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", 269 | "dev": true, 270 | "requires": { 271 | "ms": "^2.1.1" 272 | } 273 | }, 274 | "duplexer2": { 275 | "version": "0.1.4", 276 | "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", 277 | "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", 278 | "dev": true, 279 | "requires": { 280 | "readable-stream": "^2.0.2" 281 | } 282 | }, 283 | "fs.realpath": { 284 | "version": "1.0.0", 285 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 286 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", 287 | "dev": true 288 | }, 289 | "fstream": { 290 | "version": "1.0.12", 291 | "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", 292 | "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", 293 | "dev": true, 294 | "requires": { 295 | "graceful-fs": "^4.1.2", 296 | "inherits": "~2.0.0", 297 | "mkdirp": ">=0.5 0", 298 | "rimraf": "2" 299 | }, 300 | "dependencies": { 301 | "rimraf": { 302 | "version": "2.7.1", 303 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", 304 | "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", 305 | "dev": true, 306 | "requires": { 307 | "glob": "^7.1.3" 308 | } 309 | } 310 | } 311 | }, 312 | "glob": { 313 | "version": "7.1.6", 314 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", 315 | "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", 316 | "dev": true, 317 | "requires": { 318 | "fs.realpath": "^1.0.0", 319 | "inflight": "^1.0.4", 320 | "inherits": "2", 321 | "minimatch": "^3.0.4", 322 | "once": "^1.3.0", 323 | "path-is-absolute": "^1.0.0" 324 | } 325 | }, 326 | "graceful-fs": { 327 | "version": "4.2.3", 328 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz", 329 | "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==", 330 | "dev": true 331 | }, 332 | "has-flag": { 333 | "version": "4.0.0", 334 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 335 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 336 | "dev": true 337 | }, 338 | "https-proxy-agent": { 339 | "version": "5.0.0", 340 | "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", 341 | "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", 342 | "dev": true, 343 | "requires": { 344 | "agent-base": "6", 345 | "debug": "4" 346 | } 347 | }, 348 | "inflight": { 349 | "version": "1.0.6", 350 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 351 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 352 | "dev": true, 353 | "requires": { 354 | "once": "^1.3.0", 355 | "wrappy": "1" 356 | } 357 | }, 358 | "inherits": { 359 | "version": "2.0.4", 360 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 361 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 362 | "dev": true 363 | }, 364 | "isarray": { 365 | "version": "1.0.0", 366 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 367 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", 368 | "dev": true 369 | }, 370 | "listenercount": { 371 | "version": "1.0.1", 372 | "resolved": "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz", 373 | "integrity": "sha1-hMinKrWcRyUyFIDJdeZQg0LnCTc=", 374 | "dev": true 375 | }, 376 | "minimatch": { 377 | "version": "3.0.4", 378 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 379 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 380 | "dev": true, 381 | "requires": { 382 | "brace-expansion": "^1.1.7" 383 | } 384 | }, 385 | "minimist": { 386 | "version": "1.2.5", 387 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", 388 | "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", 389 | "dev": true 390 | }, 391 | "mkdirp": { 392 | "version": "0.5.4", 393 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.4.tgz", 394 | "integrity": "sha512-iG9AK/dJLtJ0XNgTuDbSyNS3zECqDlAhnQW4CsNxBG3LQJBbHmRX1egw39DmtOdCAqY+dKXV+sgPgilNWUKMVw==", 395 | "dev": true, 396 | "requires": { 397 | "minimist": "^1.2.5" 398 | } 399 | }, 400 | "ms": { 401 | "version": "2.1.2", 402 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 403 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 404 | "dev": true 405 | }, 406 | "once": { 407 | "version": "1.4.0", 408 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 409 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 410 | "dev": true, 411 | "requires": { 412 | "wrappy": "1" 413 | } 414 | }, 415 | "path-is-absolute": { 416 | "version": "1.0.1", 417 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 418 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 419 | "dev": true 420 | }, 421 | "process-nextick-args": { 422 | "version": "2.0.1", 423 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", 424 | "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", 425 | "dev": true 426 | }, 427 | "progress": { 428 | "version": "2.0.3", 429 | "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", 430 | "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", 431 | "dev": true 432 | }, 433 | "readable-stream": { 434 | "version": "2.3.7", 435 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", 436 | "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", 437 | "dev": true, 438 | "requires": { 439 | "core-util-is": "~1.0.0", 440 | "inherits": "~2.0.3", 441 | "isarray": "~1.0.0", 442 | "process-nextick-args": "~2.0.0", 443 | "safe-buffer": "~5.1.1", 444 | "string_decoder": "~1.1.1", 445 | "util-deprecate": "~1.0.1" 446 | } 447 | }, 448 | "rimraf": { 449 | "version": "3.0.2", 450 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", 451 | "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", 452 | "dev": true, 453 | "requires": { 454 | "glob": "^7.1.3" 455 | } 456 | }, 457 | "safe-buffer": { 458 | "version": "5.1.2", 459 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 460 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", 461 | "dev": true 462 | }, 463 | "setimmediate": { 464 | "version": "1.0.5", 465 | "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", 466 | "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", 467 | "dev": true 468 | }, 469 | "string_decoder": { 470 | "version": "1.1.1", 471 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", 472 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", 473 | "dev": true, 474 | "requires": { 475 | "safe-buffer": "~5.1.0" 476 | } 477 | }, 478 | "supports-color": { 479 | "version": "7.1.0", 480 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", 481 | "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", 482 | "dev": true, 483 | "requires": { 484 | "has-flag": "^4.0.0" 485 | } 486 | }, 487 | "tmp": { 488 | "version": "0.1.0", 489 | "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.1.0.tgz", 490 | "integrity": "sha512-J7Z2K08jbGcdA1kkQpJSqLF6T0tdQqpR2pnSUXsIchbPdTI9v3e85cLW0d6WDhwuAleOV71j2xWs8qMPfK7nKw==", 491 | "dev": true, 492 | "requires": { 493 | "rimraf": "^2.6.3" 494 | }, 495 | "dependencies": { 496 | "rimraf": { 497 | "version": "2.7.1", 498 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", 499 | "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", 500 | "dev": true, 501 | "requires": { 502 | "glob": "^7.1.3" 503 | } 504 | } 505 | } 506 | }, 507 | "traverse": { 508 | "version": "0.3.9", 509 | "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz", 510 | "integrity": "sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk=", 511 | "dev": true 512 | }, 513 | "unzipper": { 514 | "version": "0.10.10", 515 | "resolved": "https://registry.npmjs.org/unzipper/-/unzipper-0.10.10.tgz", 516 | "integrity": "sha512-wEgtqtrnJ/9zIBsQb8UIxOhAH1eTHfi7D/xvmrUoMEePeI6u24nq1wigazbIFtHt6ANYXdEVTvc8XYNlTurs7A==", 517 | "dev": true, 518 | "requires": { 519 | "big-integer": "^1.6.17", 520 | "binary": "~0.3.0", 521 | "bluebird": "~3.4.1", 522 | "buffer-indexof-polyfill": "~1.0.0", 523 | "duplexer2": "~0.1.4", 524 | "fstream": "^1.0.12", 525 | "graceful-fs": "^4.2.2", 526 | "listenercount": "~1.0.1", 527 | "readable-stream": "~2.3.6", 528 | "setimmediate": "~1.0.4" 529 | } 530 | }, 531 | "util-deprecate": { 532 | "version": "1.0.2", 533 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 534 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", 535 | "dev": true 536 | }, 537 | "wrappy": { 538 | "version": "1.0.2", 539 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 540 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", 541 | "dev": true 542 | } 543 | } 544 | }, 545 | "balanced-match": { 546 | "version": "1.0.2", 547 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 548 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 549 | "dev": true 550 | }, 551 | "brace-expansion": { 552 | "version": "1.1.11", 553 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 554 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 555 | "dev": true, 556 | "requires": { 557 | "balanced-match": "^1.0.0", 558 | "concat-map": "0.0.1" 559 | } 560 | }, 561 | "buffer-from": { 562 | "version": "1.1.1", 563 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", 564 | "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", 565 | "dev": true 566 | }, 567 | "call-bind": { 568 | "version": "1.0.2", 569 | "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", 570 | "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", 571 | "dev": true, 572 | "requires": { 573 | "function-bind": "^1.1.1", 574 | "get-intrinsic": "^1.0.2" 575 | } 576 | }, 577 | "chalk": { 578 | "version": "2.4.2", 579 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 580 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 581 | "dev": true, 582 | "requires": { 583 | "ansi-styles": "^3.2.1", 584 | "escape-string-regexp": "^1.0.5", 585 | "supports-color": "^5.3.0" 586 | } 587 | }, 588 | "color-convert": { 589 | "version": "1.9.3", 590 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 591 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 592 | "dev": true, 593 | "requires": { 594 | "color-name": "1.1.3" 595 | } 596 | }, 597 | "color-name": { 598 | "version": "1.1.3", 599 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 600 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", 601 | "dev": true 602 | }, 603 | "concat-map": { 604 | "version": "0.0.1", 605 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 606 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 607 | "dev": true 608 | }, 609 | "cross-spawn": { 610 | "version": "6.0.5", 611 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", 612 | "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", 613 | "dev": true, 614 | "requires": { 615 | "nice-try": "^1.0.4", 616 | "path-key": "^2.0.1", 617 | "semver": "^5.5.0", 618 | "shebang-command": "^1.2.0", 619 | "which": "^1.2.9" 620 | } 621 | }, 622 | "define-properties": { 623 | "version": "1.1.3", 624 | "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", 625 | "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", 626 | "dev": true, 627 | "requires": { 628 | "object-keys": "^1.0.12" 629 | } 630 | }, 631 | "error-ex": { 632 | "version": "1.3.2", 633 | "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", 634 | "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", 635 | "dev": true, 636 | "requires": { 637 | "is-arrayish": "^0.2.1" 638 | } 639 | }, 640 | "es-abstract": { 641 | "version": "1.18.0", 642 | "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0.tgz", 643 | "integrity": "sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw==", 644 | "dev": true, 645 | "requires": { 646 | "call-bind": "^1.0.2", 647 | "es-to-primitive": "^1.2.1", 648 | "function-bind": "^1.1.1", 649 | "get-intrinsic": "^1.1.1", 650 | "has": "^1.0.3", 651 | "has-symbols": "^1.0.2", 652 | "is-callable": "^1.2.3", 653 | "is-negative-zero": "^2.0.1", 654 | "is-regex": "^1.1.2", 655 | "is-string": "^1.0.5", 656 | "object-inspect": "^1.9.0", 657 | "object-keys": "^1.1.1", 658 | "object.assign": "^4.1.2", 659 | "string.prototype.trimend": "^1.0.4", 660 | "string.prototype.trimstart": "^1.0.4", 661 | "unbox-primitive": "^1.0.0" 662 | } 663 | }, 664 | "es-to-primitive": { 665 | "version": "1.2.1", 666 | "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", 667 | "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", 668 | "dev": true, 669 | "requires": { 670 | "is-callable": "^1.1.4", 671 | "is-date-object": "^1.0.1", 672 | "is-symbol": "^1.0.2" 673 | } 674 | }, 675 | "escape-string-regexp": { 676 | "version": "1.0.5", 677 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 678 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", 679 | "dev": true 680 | }, 681 | "fs.realpath": { 682 | "version": "1.0.0", 683 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 684 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", 685 | "dev": true 686 | }, 687 | "function-bind": { 688 | "version": "1.1.1", 689 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 690 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 691 | "dev": true 692 | }, 693 | "get-intrinsic": { 694 | "version": "1.1.1", 695 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", 696 | "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", 697 | "dev": true, 698 | "requires": { 699 | "function-bind": "^1.1.1", 700 | "has": "^1.0.3", 701 | "has-symbols": "^1.0.1" 702 | } 703 | }, 704 | "glob": { 705 | "version": "7.1.7", 706 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", 707 | "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", 708 | "dev": true, 709 | "requires": { 710 | "fs.realpath": "^1.0.0", 711 | "inflight": "^1.0.4", 712 | "inherits": "2", 713 | "minimatch": "^3.0.4", 714 | "once": "^1.3.0", 715 | "path-is-absolute": "^1.0.0" 716 | } 717 | }, 718 | "graceful-fs": { 719 | "version": "4.2.6", 720 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", 721 | "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", 722 | "dev": true 723 | }, 724 | "has": { 725 | "version": "1.0.3", 726 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 727 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 728 | "dev": true, 729 | "requires": { 730 | "function-bind": "^1.1.1" 731 | } 732 | }, 733 | "has-bigints": { 734 | "version": "1.0.1", 735 | "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", 736 | "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", 737 | "dev": true 738 | }, 739 | "has-flag": { 740 | "version": "3.0.0", 741 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 742 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", 743 | "dev": true 744 | }, 745 | "has-symbols": { 746 | "version": "1.0.2", 747 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", 748 | "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", 749 | "dev": true 750 | }, 751 | "hosted-git-info": { 752 | "version": "2.8.9", 753 | "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", 754 | "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", 755 | "dev": true 756 | }, 757 | "inflight": { 758 | "version": "1.0.6", 759 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 760 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 761 | "dev": true, 762 | "requires": { 763 | "once": "^1.3.0", 764 | "wrappy": "1" 765 | } 766 | }, 767 | "inherits": { 768 | "version": "2.0.4", 769 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 770 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 771 | "dev": true 772 | }, 773 | "is-arrayish": { 774 | "version": "0.2.1", 775 | "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", 776 | "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", 777 | "dev": true 778 | }, 779 | "is-bigint": { 780 | "version": "1.0.2", 781 | "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.2.tgz", 782 | "integrity": "sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA==", 783 | "dev": true 784 | }, 785 | "is-boolean-object": { 786 | "version": "1.1.0", 787 | "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.0.tgz", 788 | "integrity": "sha512-a7Uprx8UtD+HWdyYwnD1+ExtTgqQtD2k/1yJgtXP6wnMm8byhkoTZRl+95LLThpzNZJ5aEvi46cdH+ayMFRwmA==", 789 | "dev": true, 790 | "requires": { 791 | "call-bind": "^1.0.0" 792 | } 793 | }, 794 | "is-callable": { 795 | "version": "1.2.3", 796 | "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", 797 | "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", 798 | "dev": true 799 | }, 800 | "is-core-module": { 801 | "version": "2.3.0", 802 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.3.0.tgz", 803 | "integrity": "sha512-xSphU2KG9867tsYdLD4RWQ1VqdFl4HTO9Thf3I/3dLEfr0dbPTWKsuCKrgqMljg4nPE+Gq0VCnzT3gr0CyBmsw==", 804 | "dev": true, 805 | "requires": { 806 | "has": "^1.0.3" 807 | } 808 | }, 809 | "is-date-object": { 810 | "version": "1.0.3", 811 | "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.3.tgz", 812 | "integrity": "sha512-tDpEUInNcy2Yw3lNSepK3Wdw1RnXLcIVienz6Ou631Acl15cJyRWK4dgA1vCmOEgIbtOV0W7MHg+AR2Gdg1NXQ==", 813 | "dev": true 814 | }, 815 | "is-negative-zero": { 816 | "version": "2.0.1", 817 | "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", 818 | "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", 819 | "dev": true 820 | }, 821 | "is-number-object": { 822 | "version": "1.0.4", 823 | "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.4.tgz", 824 | "integrity": "sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw==", 825 | "dev": true 826 | }, 827 | "is-regex": { 828 | "version": "1.1.2", 829 | "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.2.tgz", 830 | "integrity": "sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg==", 831 | "dev": true, 832 | "requires": { 833 | "call-bind": "^1.0.2", 834 | "has-symbols": "^1.0.1" 835 | } 836 | }, 837 | "is-string": { 838 | "version": "1.0.5", 839 | "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", 840 | "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==", 841 | "dev": true 842 | }, 843 | "is-symbol": { 844 | "version": "1.0.3", 845 | "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", 846 | "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", 847 | "dev": true, 848 | "requires": { 849 | "has-symbols": "^1.0.1" 850 | } 851 | }, 852 | "isexe": { 853 | "version": "2.0.0", 854 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 855 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", 856 | "dev": true 857 | }, 858 | "json-parse-better-errors": { 859 | "version": "1.0.2", 860 | "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", 861 | "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", 862 | "dev": true 863 | }, 864 | "load-json-file": { 865 | "version": "4.0.0", 866 | "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", 867 | "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", 868 | "dev": true, 869 | "requires": { 870 | "graceful-fs": "^4.1.2", 871 | "parse-json": "^4.0.0", 872 | "pify": "^3.0.0", 873 | "strip-bom": "^3.0.0" 874 | } 875 | }, 876 | "long": { 877 | "version": "4.0.0", 878 | "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", 879 | "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==", 880 | "dev": true 881 | }, 882 | "memorystream": { 883 | "version": "0.3.1", 884 | "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", 885 | "integrity": "sha1-htcJCzDORV1j+64S3aUaR93K+bI=", 886 | "dev": true 887 | }, 888 | "minimatch": { 889 | "version": "3.0.4", 890 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 891 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 892 | "dev": true, 893 | "requires": { 894 | "brace-expansion": "^1.1.7" 895 | } 896 | }, 897 | "nice-try": { 898 | "version": "1.0.5", 899 | "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", 900 | "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", 901 | "dev": true 902 | }, 903 | "normalize-package-data": { 904 | "version": "2.5.0", 905 | "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", 906 | "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", 907 | "dev": true, 908 | "requires": { 909 | "hosted-git-info": "^2.1.4", 910 | "resolve": "^1.10.0", 911 | "semver": "2 || 3 || 4 || 5", 912 | "validate-npm-package-license": "^3.0.1" 913 | } 914 | }, 915 | "npm-run-all": { 916 | "version": "4.1.5", 917 | "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz", 918 | "integrity": "sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==", 919 | "dev": true, 920 | "requires": { 921 | "ansi-styles": "^3.2.1", 922 | "chalk": "^2.4.1", 923 | "cross-spawn": "^6.0.5", 924 | "memorystream": "^0.3.1", 925 | "minimatch": "^3.0.4", 926 | "pidtree": "^0.3.0", 927 | "read-pkg": "^3.0.0", 928 | "shell-quote": "^1.6.1", 929 | "string.prototype.padend": "^3.0.0" 930 | } 931 | }, 932 | "object-inspect": { 933 | "version": "1.10.2", 934 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.2.tgz", 935 | "integrity": "sha512-gz58rdPpadwztRrPjZE9DZLOABUpTGdcANUgOwBFO1C+HZZhePoP83M65WGDmbpwFYJSWqavbl4SgDn4k8RYTA==", 936 | "dev": true 937 | }, 938 | "object-keys": { 939 | "version": "1.1.1", 940 | "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", 941 | "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", 942 | "dev": true 943 | }, 944 | "object.assign": { 945 | "version": "4.1.2", 946 | "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", 947 | "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", 948 | "dev": true, 949 | "requires": { 950 | "call-bind": "^1.0.0", 951 | "define-properties": "^1.1.3", 952 | "has-symbols": "^1.0.1", 953 | "object-keys": "^1.1.1" 954 | } 955 | }, 956 | "once": { 957 | "version": "1.4.0", 958 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 959 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 960 | "dev": true, 961 | "requires": { 962 | "wrappy": "1" 963 | } 964 | }, 965 | "parse-json": { 966 | "version": "4.0.0", 967 | "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", 968 | "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", 969 | "dev": true, 970 | "requires": { 971 | "error-ex": "^1.3.1", 972 | "json-parse-better-errors": "^1.0.1" 973 | } 974 | }, 975 | "path-is-absolute": { 976 | "version": "1.0.1", 977 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 978 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 979 | "dev": true 980 | }, 981 | "path-key": { 982 | "version": "2.0.1", 983 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", 984 | "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", 985 | "dev": true 986 | }, 987 | "path-parse": { 988 | "version": "1.0.6", 989 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", 990 | "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", 991 | "dev": true 992 | }, 993 | "path-type": { 994 | "version": "3.0.0", 995 | "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", 996 | "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", 997 | "dev": true, 998 | "requires": { 999 | "pify": "^3.0.0" 1000 | } 1001 | }, 1002 | "pidtree": { 1003 | "version": "0.3.1", 1004 | "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.3.1.tgz", 1005 | "integrity": "sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==", 1006 | "dev": true 1007 | }, 1008 | "pify": { 1009 | "version": "3.0.0", 1010 | "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", 1011 | "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", 1012 | "dev": true 1013 | }, 1014 | "protobufjs": { 1015 | "version": "6.8.8", 1016 | "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.8.8.tgz", 1017 | "integrity": "sha512-AAmHtD5pXgZfi7GMpllpO3q1Xw1OYldr+dMUlAnffGTAhqkg72WdmSY71uKBF/JuyiKs8psYbtKrhi0ASCD8qw==", 1018 | "dev": true, 1019 | "requires": { 1020 | "@protobufjs/aspromise": "^1.1.2", 1021 | "@protobufjs/base64": "^1.1.2", 1022 | "@protobufjs/codegen": "^2.0.4", 1023 | "@protobufjs/eventemitter": "^1.1.0", 1024 | "@protobufjs/fetch": "^1.1.0", 1025 | "@protobufjs/float": "^1.0.2", 1026 | "@protobufjs/inquire": "^1.1.0", 1027 | "@protobufjs/path": "^1.1.2", 1028 | "@protobufjs/pool": "^1.1.0", 1029 | "@protobufjs/utf8": "^1.1.0", 1030 | "@types/long": "^4.0.0", 1031 | "@types/node": "^10.1.0", 1032 | "long": "^4.0.0" 1033 | }, 1034 | "dependencies": { 1035 | "@types/node": { 1036 | "version": "10.17.59", 1037 | "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.59.tgz", 1038 | "integrity": "sha512-7Uc8IRrL8yZz5ti45RaFxpbU8TxlzdC3HvxV+hOWo1EyLsuKv/w7y0n+TwZzwL3vdx3oZ2k3ubxPq131hNtXyg==", 1039 | "dev": true 1040 | } 1041 | } 1042 | }, 1043 | "read-pkg": { 1044 | "version": "3.0.0", 1045 | "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", 1046 | "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", 1047 | "dev": true, 1048 | "requires": { 1049 | "load-json-file": "^4.0.0", 1050 | "normalize-package-data": "^2.3.2", 1051 | "path-type": "^3.0.0" 1052 | } 1053 | }, 1054 | "resolve": { 1055 | "version": "1.20.0", 1056 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", 1057 | "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", 1058 | "dev": true, 1059 | "requires": { 1060 | "is-core-module": "^2.2.0", 1061 | "path-parse": "^1.0.6" 1062 | } 1063 | }, 1064 | "rimraf": { 1065 | "version": "3.0.2", 1066 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", 1067 | "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", 1068 | "dev": true, 1069 | "requires": { 1070 | "glob": "^7.1.3" 1071 | } 1072 | }, 1073 | "semver": { 1074 | "version": "5.6.0", 1075 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", 1076 | "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", 1077 | "dev": true 1078 | }, 1079 | "shebang-command": { 1080 | "version": "1.2.0", 1081 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", 1082 | "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", 1083 | "dev": true, 1084 | "requires": { 1085 | "shebang-regex": "^1.0.0" 1086 | } 1087 | }, 1088 | "shebang-regex": { 1089 | "version": "1.0.0", 1090 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", 1091 | "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", 1092 | "dev": true 1093 | }, 1094 | "shell-quote": { 1095 | "version": "1.7.2", 1096 | "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz", 1097 | "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==", 1098 | "dev": true 1099 | }, 1100 | "source-map": { 1101 | "version": "0.6.1", 1102 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 1103 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 1104 | "dev": true 1105 | }, 1106 | "source-map-support": { 1107 | "version": "0.5.9", 1108 | "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.9.tgz", 1109 | "integrity": "sha512-gR6Rw4MvUlYy83vP0vxoVNzM6t8MUXqNuRsuBmBHQDu1Fh6X015FrLdgoDKcNdkwGubozq0P4N0Q37UyFVr1EA==", 1110 | "dev": true, 1111 | "requires": { 1112 | "buffer-from": "^1.0.0", 1113 | "source-map": "^0.6.0" 1114 | } 1115 | }, 1116 | "spdx-correct": { 1117 | "version": "3.1.1", 1118 | "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", 1119 | "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", 1120 | "dev": true, 1121 | "requires": { 1122 | "spdx-expression-parse": "^3.0.0", 1123 | "spdx-license-ids": "^3.0.0" 1124 | } 1125 | }, 1126 | "spdx-exceptions": { 1127 | "version": "2.3.0", 1128 | "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", 1129 | "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", 1130 | "dev": true 1131 | }, 1132 | "spdx-expression-parse": { 1133 | "version": "3.0.1", 1134 | "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", 1135 | "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", 1136 | "dev": true, 1137 | "requires": { 1138 | "spdx-exceptions": "^2.1.0", 1139 | "spdx-license-ids": "^3.0.0" 1140 | } 1141 | }, 1142 | "spdx-license-ids": { 1143 | "version": "3.0.7", 1144 | "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz", 1145 | "integrity": "sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ==", 1146 | "dev": true 1147 | }, 1148 | "string.prototype.padend": { 1149 | "version": "3.1.2", 1150 | "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.2.tgz", 1151 | "integrity": "sha512-/AQFLdYvePENU3W5rgurfWSMU6n+Ww8n/3cUt7E+vPBB/D7YDG8x+qjoFs4M/alR2bW7Qg6xMjVwWUOvuQ0XpQ==", 1152 | "dev": true, 1153 | "requires": { 1154 | "call-bind": "^1.0.2", 1155 | "define-properties": "^1.1.3", 1156 | "es-abstract": "^1.18.0-next.2" 1157 | } 1158 | }, 1159 | "string.prototype.trimend": { 1160 | "version": "1.0.4", 1161 | "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", 1162 | "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", 1163 | "dev": true, 1164 | "requires": { 1165 | "call-bind": "^1.0.2", 1166 | "define-properties": "^1.1.3" 1167 | } 1168 | }, 1169 | "string.prototype.trimstart": { 1170 | "version": "1.0.4", 1171 | "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", 1172 | "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", 1173 | "dev": true, 1174 | "requires": { 1175 | "call-bind": "^1.0.2", 1176 | "define-properties": "^1.1.3" 1177 | } 1178 | }, 1179 | "strip-bom": { 1180 | "version": "3.0.0", 1181 | "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", 1182 | "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", 1183 | "dev": true 1184 | }, 1185 | "supports-color": { 1186 | "version": "5.5.0", 1187 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 1188 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 1189 | "dev": true, 1190 | "requires": { 1191 | "has-flag": "^3.0.0" 1192 | } 1193 | }, 1194 | "tslib": { 1195 | "version": "1.14.1", 1196 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", 1197 | "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", 1198 | "dev": true 1199 | }, 1200 | "tsutils": { 1201 | "version": "2.27.2", 1202 | "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.27.2.tgz", 1203 | "integrity": "sha512-qf6rmT84TFMuxAKez2pIfR8UCai49iQsfB7YWVjV1bKpy/d0PWT5rEOSM6La9PiHZ0k1RRZQiwVdVJfQ3BPHgg==", 1204 | "dev": true, 1205 | "requires": { 1206 | "tslib": "^1.8.1" 1207 | } 1208 | }, 1209 | "typescript": { 1210 | "version": "3.7.5", 1211 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.7.5.tgz", 1212 | "integrity": "sha512-/P5lkRXkWHNAbcJIiHPfRoKqyd7bsyCma1hZNUGfn20qm64T6ZBlrzprymeu918H+mB/0rIg2gGK/BXkhhYgBw==", 1213 | "dev": true 1214 | }, 1215 | "unbox-primitive": { 1216 | "version": "1.0.1", 1217 | "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", 1218 | "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", 1219 | "dev": true, 1220 | "requires": { 1221 | "function-bind": "^1.1.1", 1222 | "has-bigints": "^1.0.1", 1223 | "has-symbols": "^1.0.2", 1224 | "which-boxed-primitive": "^1.0.2" 1225 | } 1226 | }, 1227 | "validate-npm-package-license": { 1228 | "version": "3.0.4", 1229 | "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", 1230 | "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", 1231 | "dev": true, 1232 | "requires": { 1233 | "spdx-correct": "^3.0.0", 1234 | "spdx-expression-parse": "^3.0.0" 1235 | } 1236 | }, 1237 | "which": { 1238 | "version": "1.3.1", 1239 | "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", 1240 | "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", 1241 | "dev": true, 1242 | "requires": { 1243 | "isexe": "^2.0.0" 1244 | } 1245 | }, 1246 | "which-boxed-primitive": { 1247 | "version": "1.0.2", 1248 | "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", 1249 | "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", 1250 | "dev": true, 1251 | "requires": { 1252 | "is-bigint": "^1.0.1", 1253 | "is-boolean-object": "^1.1.0", 1254 | "is-number-object": "^1.0.4", 1255 | "is-string": "^1.0.5", 1256 | "is-symbol": "^1.0.3" 1257 | } 1258 | }, 1259 | "wrappy": { 1260 | "version": "1.0.2", 1261 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 1262 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", 1263 | "dev": true 1264 | } 1265 | } 1266 | } 1267 | --------------------------------------------------------------------------------