├── 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 | 
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 |
Give me a name
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 |
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 |
--------------------------------------------------------------------------------