diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index a48b384170..03e29508fe 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -57,17 +57,9 @@ jobs: - "3.11" steps: - uses: actions/checkout@v3 - # @melasmar - # TODO: Revert back to use 3.7 to all operating systems after the regression issue in Python - # https://github.com/actions/setup-python/issues/682 in github action got resolved - uses: actions/setup-python@v4 - if: matrix.os != 'macos-latest' || ( matrix.os == 'macos-latest' && matrix.python != '3.7' ) with: python-version: ${{ matrix.python }} - - uses: actions/setup-python@v4 - if: matrix.os == 'macos-latest' && matrix.python == '3.7' - with: - python-version: "3.7.16" - run: test -f "./.github/ISSUE_TEMPLATE/Bug_report.md" # prevent Bug_report.md from being renamed or deleted - run: make init - run: make pr diff --git a/.github/workflows/validate_pyinstaller.yml b/.github/workflows/validate_pyinstaller.yml index 04b5c828ca..b611420310 100644 --- a/.github/workflows/validate_pyinstaller.yml +++ b/.github/workflows/validate_pyinstaller.yml @@ -19,7 +19,7 @@ jobs: steps: - uses: actions/checkout@v3 - name: Set up Go - uses: actions/setup-go@v3 + uses: actions/setup-go@v4 with: go-version: "1.20" - name: Build PyInstaller @@ -50,7 +50,7 @@ jobs: with: python-version: "3.7" - name: Set up Go - uses: actions/setup-go@v3 + uses: actions/setup-go@v4 with: go-version: "1.20" - name: Build PyInstaller diff --git a/appveyor-iac-integration-ubuntu.yml b/appveyor-iac-integration-ubuntu.yml deleted file mode 100644 index ea2e4f54fc..0000000000 --- a/appveyor-iac-integration-ubuntu.yml +++ /dev/null @@ -1,105 +0,0 @@ -version: 1.0.{build} -image: - - Ubuntu2004 - -environment: - AWS_DEFAULT_REGION: us-east-1 - SAM_CLI_DEV: 1 - NOSE_PARAMETERIZED_NO_WARN: 1 - APPVEYOR_CONSOLE_DISABLE_PTY: false - APPVEYOR_DETAILED_SHELL_LOGGING: true - - matrix: - - PYTHON_HOME: "$HOME/venv3.7/bin" - PYTHON_VERSION: '3.7' - - - PYTHON_HOME: "$HOME/venv3.8/bin" - PYTHON_VERSION: '3.8' - - - PYTHON_HOME: "$HOME/venv3.9/bin" - PYTHON_VERSION: '3.9' - -install: - # AppVeyor's apt-get cache might be outdated, and the package could potentially be 404. - - sh: "sudo apt-get update" - - - sh: "gvm use go1.19" - - sh: "echo $PATH" - - sh: "ls /usr/" - - sh: "JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64" - - sh: "PATH=$JAVA_HOME/bin:$PATH" - - sh: "source ${HOME}/venv${PYTHON_VERSION}/bin/activate" - - sh: "rvm use 2.7.2" - - sh: "docker --version" - # install nodejs - - sh: "nvm install --lts=Fermium" - - sh: "node --version" - - sh: "npx --version" - - # Install AWS CLI - - sh: "virtualenv aws_cli" - - sh: "./aws_cli/bin/python -m pip install awscli" - - sh: "PATH=$(echo $PWD'/aws_cli/bin'):$PATH" - - # Install latest maven - - sh: "sudo apt update" - - sh: "sudo apt install maven" - - sh: "mvn --version" - - - sh: "PATH=$PATH:$HOME/venv3.7/bin:$HOME/venv3.8/bin:$HOME/venv3.9/bin:$HOME/venv3.10/bin" - - # get testing env vars - - sh: "sudo apt install -y jq" - - sh: "python3.9 -m venv .venv_env_vars" - - sh: ".venv_env_vars/bin/pip install boto3" - - sh: "test_env_var=$(.venv_env_vars/bin/python tests/get_testing_resources.py)" - - sh: ' - if [ $? -ne 0 ]; then - echo "get_testing_resources failed. Failed to acquire credentials or test resources."; - false; - fi - ' - - - sh: 'export CI_ACCESS_ROLE_AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID' - - sh: 'export CI_ACCESS_ROLE_AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY' - - sh: 'export CI_ACCESS_ROLE_AWS_SESSION_TOKEN=$AWS_SESSION_TOKEN' - - - sh: 'export AWS_ACCESS_KEY_ID=$(echo "$test_env_var" | jq -j ".accessKeyID")' - - sh: 'export AWS_SECRET_ACCESS_KEY=$(echo "$test_env_var" | jq -j ".secretAccessKey")' - - sh: 'export AWS_SESSION_TOKEN=$(echo "$test_env_var" | jq -j ".sessionToken")' - - sh: 'export TASK_TOKEN=$(echo "$test_env_var" | jq -j ".taskToken")' - - sh: 'export AWS_S3_TESTING=$(echo "$test_env_var" | jq -j ".TestBucketName")' - - sh: 'export AWS_ECR_TESTING=$(echo "$test_env_var" | jq -j ".TestECRURI")' - - sh: 'export AWS_KMS_KEY=$(echo "$test_env_var" | jq -j ".TestKMSKeyArn")' - - sh: 'export AWS_SIGNING_PROFILE_NAME=$(echo "$test_env_var" | jq -j ".TestSigningProfileName")' - - sh: 'export AWS_SIGNING_PROFILE_VERSION_ARN=$(echo "$test_env_var" | jq -j ".TestSigningProfileARN")' - - # required for RIE with arm64 in linux - - sh: "docker run --rm --privileged multiarch/qemu-user-static --reset -p yes" - - # update ca-certificates which causes failures with newest golang library - - sh: "sudo apt-get install --reinstall ca-certificates" - -build_script: - - "python -c \"import sys; print(sys.executable)\"" - -test_script: - # Pre-dev Tests - - "pip install -e \".[pre-dev]\"" - - # Runs only in Linux, logging Public ECR when running canary and cred is available - - sh: " - if [[ -n $BY_CANARY ]]; - then echo Logging in Public ECR; aws ecr-public get-login-password --region us-east-1 | docker login --username AWS --password-stdin public.ecr.aws; - fi" - - - "pip install -e \".[dev]\"" - - sh: "pytest -vv tests/iac_integration" - -# Final clean up no matter success or failure -on_finish: - - sh: 'export AWS_ACCESS_KEY_ID=$CI_ACCESS_ROLE_AWS_ACCESS_KEY_ID' - - sh: 'export AWS_SECRET_ACCESS_KEY=$CI_ACCESS_ROLE_AWS_SECRET_ACCESS_KEY' - - sh: 'export AWS_SESSION_TOKEN=$CI_ACCESS_ROLE_AWS_SESSION_TOKEN' - - - sh: 'aws stepfunctions send-task-success --task-token "$TASK_TOKEN" --task-output "{}" --region us-west-2' diff --git a/appveyor-windows.yml b/appveyor-windows.yml index 886e65e0c4..28567c956f 100644 --- a/appveyor-windows.yml +++ b/appveyor-windows.yml @@ -134,7 +134,14 @@ install: # Echo final Path - "echo %PATH%" - - "IF DEFINED BY_CANARY ECHO Logging in Public ECR && aws ecr-public get-login-password --region us-east-1 | docker login --username AWS --password-stdin public.ecr.aws" + # use amazon-ecr-credential-helper + - choco install amazon-ecr-credential-helper + - ps: " + $docker_config = Get-Content $env:HOME/.docker/config.json -raw | ConvertFrom-Json; + $docker_config.credsStore = 'ecr-login'; + $docker_config | ConvertTo-Json | set-content $env:HOME/.docker/config.json; + " + - ps: "get-content $env:HOME/.docker/config.json" # claim some disk space before starting the tests - "docker system prune -a -f" diff --git a/requirements/base.txt b/requirements/base.txt index 34edac3fd0..f0626e7145 100644 --- a/requirements/base.txt +++ b/requirements/base.txt @@ -4,7 +4,7 @@ Flask<2.3 #Need to add latest lambda changes which will return invoke mode details boto3>=1.26.109,==1.* jmespath~=1.0.1 -ruamel_yaml~=0.17.21 +ruamel_yaml~=0.17.32 PyYAML>=5.4.1,==5.* cookiecutter~=2.1.1 aws-sam-translator==1.70.0 diff --git a/requirements/dev.txt b/requirements/dev.txt index 4ef0736e47..2421d05095 100644 --- a/requirements/dev.txt +++ b/requirements/dev.txt @@ -9,7 +9,7 @@ pytest-cov==4.1.0 # here we fix its version and upgrade it manually in the future mypy==1.3.0 boto3-stubs[apigateway,cloudformation,ecr,iam,lambda,s3,schemas,secretsmanager,signer,stepfunctions,sts,xray]==1.26.131 -types-pywin32==306.0.0.0 +types-pywin32==306.0.0.2 types-PyYAML==6.0.12 types-chevron==0.14.2.4 types-psutil==5.9.5.12 @@ -33,7 +33,7 @@ pytest-rerunfailures==11.1.2 # NOTE (hawflau): DO NOT upgrade pytest-metadata and pytest-json-report unless pytest-json-report addresses https://github.com/numirias/pytest-json-report/issues/89 pytest-metadata==2.0.4 pytest-json-report==1.5.0 -filelock==3.12.0 +filelock==3.12.2 # formatter black==22.6.0 diff --git a/requirements/reproducible-linux.txt b/requirements/reproducible-linux.txt index 6ad1ef3c90..f946536226 100644 --- a/requirements/reproducible-linux.txt +++ b/requirements/reproducible-linux.txt @@ -610,10 +610,49 @@ rich==13.3.3 \ --hash=sha256:540c7d6d26a1178e8e8b37e9ba44573a3cd1464ff6348b99ee7061b95d1c6333 \ --hash=sha256:dc84400a9d842b3a9c5ff74addd8eb798d155f36c1c91303888e0a66850d2a15 # via aws-sam-cli (setup.py) -ruamel-yaml==0.17.21 \ - --hash=sha256:742b35d3d665023981bd6d16b3d24248ce5df75fdb4e2924e93a05c1f8b61ca7 \ - --hash=sha256:8b7ce697a2f212752a35c1ac414471dc16c424c9573be4926b56ff3f5d23b7af +ruamel-yaml==0.17.32 \ + --hash=sha256:23cd2ed620231677564646b0c6a89d138b6822a0d78656df7abda5879ec4f447 \ + --hash=sha256:ec939063761914e14542972a5cba6d33c23b0859ab6342f61cf070cfc600efc2 # via aws-sam-cli (setup.py) +ruamel-yaml-clib==0.2.7 \ + --hash=sha256:045e0626baf1c52e5527bd5db361bc83180faaba2ff586e763d3d5982a876a9e \ + --hash=sha256:15910ef4f3e537eea7fe45f8a5d19997479940d9196f357152a09031c5be59f3 \ + --hash=sha256:184faeaec61dbaa3cace407cffc5819f7b977e75360e8d5ca19461cd851a5fc5 \ + --hash=sha256:1a6391a7cabb7641c32517539ca42cf84b87b667bad38b78d4d42dd23e957c81 \ + --hash=sha256:1f08fd5a2bea9c4180db71678e850b995d2a5f4537be0e94557668cf0f5f9497 \ + --hash=sha256:2aa261c29a5545adfef9296b7e33941f46aa5bbd21164228e833412af4c9c75f \ + --hash=sha256:3110a99e0f94a4a3470ff67fc20d3f96c25b13d24c6980ff841e82bafe827cac \ + --hash=sha256:3243f48ecd450eddadc2d11b5feb08aca941b5cd98c9b1db14b2fd128be8c697 \ + --hash=sha256:370445fd795706fd291ab00c9df38a0caed0f17a6fb46b0f607668ecb16ce763 \ + --hash=sha256:40d030e2329ce5286d6b231b8726959ebbe0404c92f0a578c0e2482182e38282 \ + --hash=sha256:41d0f1fa4c6830176eef5b276af04c89320ea616655d01327d5ce65e50575c94 \ + --hash=sha256:4a4d8d417868d68b979076a9be6a38c676eca060785abaa6709c7b31593c35d1 \ + --hash=sha256:4b3a93bb9bc662fc1f99c5c3ea8e623d8b23ad22f861eb6fce9377ac07ad6072 \ + --hash=sha256:5bc0667c1eb8f83a3752b71b9c4ba55ef7c7058ae57022dd9b29065186a113d9 \ + --hash=sha256:763d65baa3b952479c4e972669f679fe490eee058d5aa85da483ebae2009d231 \ + --hash=sha256:7bdb4c06b063f6fd55e472e201317a3bb6cdeeee5d5a38512ea5c01e1acbdd93 \ + --hash=sha256:8831a2cedcd0f0927f788c5bdf6567d9dc9cc235646a434986a852af1cb54b4b \ + --hash=sha256:91a789b4aa0097b78c93e3dc4b40040ba55bef518f84a40d4442f713b4094acb \ + --hash=sha256:92460ce908546ab69770b2e576e4f99fbb4ce6ab4b245345a3869a0a0410488f \ + --hash=sha256:99e77daab5d13a48a4054803d052ff40780278240a902b880dd37a51ba01a307 \ + --hash=sha256:9c7617df90c1365638916b98cdd9be833d31d337dbcd722485597b43c4a215bf \ + --hash=sha256:a234a20ae07e8469da311e182e70ef6b199d0fbeb6c6cc2901204dd87fb867e8 \ + --hash=sha256:a7b301ff08055d73223058b5c46c55638917f04d21577c95e00e0c4d79201a6b \ + --hash=sha256:be2a7ad8fd8f7442b24323d24ba0b56c51219513cfa45b9ada3b87b76c374d4b \ + --hash=sha256:bf9a6bc4a0221538b1a7de3ed7bca4c93c02346853f44e1cd764be0023cd3640 \ + --hash=sha256:c3ca1fbba4ae962521e5eb66d72998b51f0f4d0f608d3c0347a48e1af262efa7 \ + --hash=sha256:d000f258cf42fec2b1bbf2863c61d7b8918d31ffee905da62dede869254d3b8a \ + --hash=sha256:d5859983f26d8cd7bb5c287ef452e8aacc86501487634573d260968f753e1d71 \ + --hash=sha256:d5e51e2901ec2366b79f16c2299a03e74ba4531ddcfacc1416639c557aef0ad8 \ + --hash=sha256:da538167284de58a52109a9b89b8f6a53ff8437dd6dc26d33b57bf6699153122 \ + --hash=sha256:debc87a9516b237d0466a711b18b6ebeb17ba9f391eb7f91c649c5c4ec5006c7 \ + --hash=sha256:df5828871e6648db72d1c19b4bd24819b80a755c4541d3409f0f7acd0f335c80 \ + --hash=sha256:ecdf1a604009bd35c674b9225a8fa609e0282d9b896c03dd441a91e5f53b534e \ + --hash=sha256:efa08d63ef03d079dcae1dfe334f6c8847ba8b645d08df286358b1f5293d24ab \ + --hash=sha256:f01da5790e95815eb5a8a138508c01c758e5f5bc0ce4286c4f7028b8dd7ac3d0 \ + --hash=sha256:f34019dced51047d6f70cb9383b2ae2853b7fc4dce65129a5acd49f4f9256646 \ + --hash=sha256:f6d3d39611ac2e4f62c3128a9eed45f19a6608670c5a2f4f07f24e8de3441d38 + # via ruamel-yaml s3transfer==0.6.0 \ --hash=sha256:06176b74f3a15f61f1b4f25a1fc29a4429040b7647133a463da8fa5bd28d5ecd \ --hash=sha256:2ed07d3866f523cc561bf4a00fc5535827981b117dd7876f036b0c1aca42c947 @@ -684,9 +723,9 @@ watchdog==2.1.2 \ --hash=sha256:d34ce2261f118ecd57eedeef95fc2a495fc4a40b3ed7b3bf0bd7a8ccc1ab4f8f \ --hash=sha256:edcd9ef3fd460bb8a98eb1fcf99941e9fd9f275f45f1a82cb1359ec92975d647 # via aws-sam-cli (setup.py) -websocket-client==1.5.1 \ - --hash=sha256:3f09e6d8230892547132177f575a4e3e73cfdf06526e20cc02aa1c3b47184d40 \ - --hash=sha256:cdf5877568b7e83aa7cf2244ab56a3213de587bbe0ce9d8b9600fc77b455d89e +websocket-client==1.6.1 \ + --hash=sha256:c951af98631d24f8df89ab1019fc365f2227c0892f12fd150e935607c79dd0dd \ + --hash=sha256:f1f9f2ad5291f0225a49efad77abf9e700b6fef553900623060dad6e26503b9d # via docker werkzeug==2.2.3 \ --hash=sha256:2e1ccc9417d4da358b9de6f174e3ac094391ea1d4fbef2d667865d819dfd0afe \ diff --git a/requirements/reproducible-mac.txt b/requirements/reproducible-mac.txt index c69964a4c7..a1db7a41cf 100644 --- a/requirements/reproducible-mac.txt +++ b/requirements/reproducible-mac.txt @@ -267,9 +267,9 @@ idna==3.4 \ --hash=sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4 \ --hash=sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2 # via requests -importlib-metadata==6.1.0 \ - --hash=sha256:43ce9281e097583d758c2c708c4376371261a02c34682491a8e98352365aad20 \ - --hash=sha256:ff80f3b5394912eb1b108fcfd444dc78b7f1f3e16b16188054bd01cb9cb86f09 +importlib-metadata==6.7.0 \ + --hash=sha256:1aaf550d4f73e5d6783e7acb77aec43d49da8017410afae93822cc9cca98c4d4 \ + --hash=sha256:cb52082e659e97afc5dac71e79de97d8681de3aa07ff18578330904a9d18e5b5 # via # attrs # click @@ -645,9 +645,9 @@ rich==13.3.3 \ --hash=sha256:540c7d6d26a1178e8e8b37e9ba44573a3cd1464ff6348b99ee7061b95d1c6333 \ --hash=sha256:dc84400a9d842b3a9c5ff74addd8eb798d155f36c1c91303888e0a66850d2a15 # via aws-sam-cli (setup.py) -ruamel-yaml==0.17.21 \ - --hash=sha256:742b35d3d665023981bd6d16b3d24248ce5df75fdb4e2924e93a05c1f8b61ca7 \ - --hash=sha256:8b7ce697a2f212752a35c1ac414471dc16c424c9573be4926b56ff3f5d23b7af +ruamel-yaml==0.17.32 \ + --hash=sha256:23cd2ed620231677564646b0c6a89d138b6822a0d78656df7abda5879ec4f447 \ + --hash=sha256:ec939063761914e14542972a5cba6d33c23b0859ab6342f61cf070cfc600efc2 # via aws-sam-cli (setup.py) ruamel-yaml-clib==0.2.7 \ --hash=sha256:045e0626baf1c52e5527bd5db361bc83180faaba2ff586e763d3d5982a876a9e \ @@ -706,9 +706,9 @@ six==1.16.0 \ # junit-xml # python-dateutil # serverlessrepo -sympy==1.10.1 \ - --hash=sha256:5939eeffdf9e152172601463626c022a2c27e75cf6278de8d401d50c9d58787b \ - --hash=sha256:df75d738930f6fe9ebe7034e59d56698f29e85f443f743e51e47df0caccc2130 +sympy==1.12 \ + --hash=sha256:c3588cd4295d0c0f603d0f2ae780587e64e2efeedb3521e46b9bb1d08d184fa5 \ + --hash=sha256:ebf595c8dac3e0fdc4152c51878b498396ec7f30e7a914d6071e674d49420fb8 # via cfn-lint text-unidecode==1.3 \ --hash=sha256:1311f10e8b895935241623731c2ba64f4c455287888b18189350b67134a822e8 \ @@ -762,9 +762,9 @@ watchdog==2.1.2 \ --hash=sha256:d34ce2261f118ecd57eedeef95fc2a495fc4a40b3ed7b3bf0bd7a8ccc1ab4f8f \ --hash=sha256:edcd9ef3fd460bb8a98eb1fcf99941e9fd9f275f45f1a82cb1359ec92975d647 # via aws-sam-cli (setup.py) -websocket-client==1.5.1 \ - --hash=sha256:3f09e6d8230892547132177f575a4e3e73cfdf06526e20cc02aa1c3b47184d40 \ - --hash=sha256:cdf5877568b7e83aa7cf2244ab56a3213de587bbe0ce9d8b9600fc77b455d89e +websocket-client==1.6.1 \ + --hash=sha256:c951af98631d24f8df89ab1019fc365f2227c0892f12fd150e935607c79dd0dd \ + --hash=sha256:f1f9f2ad5291f0225a49efad77abf9e700b6fef553900623060dad6e26503b9d # via docker werkzeug==2.2.3 \ --hash=sha256:2e1ccc9417d4da358b9de6f174e3ac094391ea1d4fbef2d667865d819dfd0afe \ diff --git a/samcli/__init__.py b/samcli/__init__.py index 48bdee91f7..1fea4bd55f 100644 --- a/samcli/__init__.py +++ b/samcli/__init__.py @@ -2,4 +2,4 @@ SAM CLI version """ -__version__ = "1.89.0" +__version__ = "1.90.0" diff --git a/samcli/cli/context.py b/samcli/cli/context.py index 404fd36661..49c5e44c78 100644 --- a/samcli/cli/context.py +++ b/samcli/cli/context.py @@ -7,6 +7,7 @@ from typing import List, Optional, cast import click +from rich.console import Console from samcli.cli.formatters import RootCommandHelpTextFormatter from samcli.commands.exceptions import AWSServiceClientError @@ -44,6 +45,11 @@ def __init__(self): self._session_id = str(uuid.uuid4()) self._experimental = False self._exception = None + self._console = Console() + + @property + def console(self): + return self._console @property def exception(self): diff --git a/samcli/cli/root/command_list.py b/samcli/cli/root/command_list.py index 0be843fbe2..cfa7000739 100644 --- a/samcli/cli/root/command_list.py +++ b/samcli/cli/root/command_list.py @@ -6,11 +6,11 @@ "validate": "Validate an AWS SAM template.", "build": "Build your AWS serverless function code.", "local": "Run your AWS serverless function locally.", - "remote": "Invoke or send an event to cloud resources in your CFN stack", + "remote": "Invoke or send an event to cloud resources in your AWS Cloudformation stack.", "package": "Package an AWS SAM application.", "deploy": "Deploy an AWS SAM application.", "delete": "Delete an AWS SAM application and the artifacts created by sam deploy.", - "logs": "Fetch AWS Cloudwatch logs for a function.", + "logs": "Fetch AWS Cloudwatch logs for AWS Lambda Functions or Cloudwatch Log groups.", "publish": "Publish a packaged AWS SAM template to AWS Serverless Application Repository for easy sharing.", "traces": "Fetch AWS X-Ray traces.", "sync": "Sync an AWS SAM project to AWS.", diff --git a/samcli/commands/_utils/experimental.py b/samcli/commands/_utils/experimental.py index 240c5b80da..b8b75570c1 100644 --- a/samcli/commands/_utils/experimental.py +++ b/samcli/commands/_utils/experimental.py @@ -10,7 +10,7 @@ from samcli.cli.context import Context from samcli.cli.global_config import ConfigEntry, GlobalConfig from samcli.commands._utils.parameterized_option import parameterized_option -from samcli.lib.utils.colors import Colored +from samcli.lib.utils.colors import Colored, Colors LOG = logging.getLogger(__name__) @@ -162,7 +162,7 @@ def update_experimental_context(show_warning=True): if not Context.get_current_context().experimental: Context.get_current_context().experimental = True if show_warning: - LOG.warning(Colored().yellow(EXPERIMENTAL_WARNING)) + LOG.warning(Colored().color_log(EXPERIMENTAL_WARNING, color=Colors.WARNING), extra=dict(markup=True)) def _experimental_option_callback(ctx, param, enabled: Optional[bool]): diff --git a/samcli/commands/_utils/options.py b/samcli/commands/_utils/options.py index 188b1705b4..5b1b55cc32 100644 --- a/samcli/commands/_utils/options.py +++ b/samcli/commands/_utils/options.py @@ -326,7 +326,7 @@ def no_progressbar_click_option(): default=False, required=False, is_flag=True, - help="Does not showcase a progress bar when uploading artifacts to s3 and pushing docker images to ECR", + help="Does not showcase a progress bar when uploading artifacts to S3 and pushing docker images to ECR", ) @@ -679,9 +679,9 @@ def resolve_s3_click_option(guided): required=False, is_flag=True, callback=callback, - help="Automatically resolve s3 bucket for non-guided deployments. " - "Enabling this option will also create a managed default s3 bucket for you. " - "If you do not provide a --s3-bucket value, the managed bucket will be used. " + help="Automatically resolve AWS S3 bucket for non-guided deployments. " + "Enabling this option will also create a managed default AWS S3 bucket for you. " + "If one does not provide a --s3-bucket value, the managed bucket will be used. " "Do not use --guided with this option.", ) diff --git a/samcli/commands/local/start_api/cli.py b/samcli/commands/local/start_api/cli.py index 145b0a58a2..9de4d7982c 100644 --- a/samcli/commands/local/start_api/cli.py +++ b/samcli/commands/local/start_api/cli.py @@ -9,8 +9,13 @@ from samcli.cli.cli_config_file import TomlProvider, configuration_option from samcli.cli.main import aws_creds_options, pass_context, print_cmdline_args from samcli.cli.main import common_options as cli_framework_options +from samcli.commands._utils.experimental import ExperimentalFlag, is_experimental_enabled from samcli.commands._utils.option_value_processor import process_image_options -from samcli.commands._utils.options import generate_next_command_recommendation +from samcli.commands._utils.options import ( + generate_next_command_recommendation, + hook_name_click_option, + skip_prepare_infra_option, +) from samcli.commands.local.cli_common.options import ( invoke_common_options, local_common_options, @@ -54,6 +59,10 @@ context_settings={"max_content_width": 120}, ) @configuration_option(provider=TomlProvider(section="parameters")) +@hook_name_click_option( + force_prepare=False, invalid_coexist_options=["t", "template-file", "template", "parameter-overrides"] +) +@skip_prepare_infra_option @service_common_options(3000) @click.option( "--static-dir", @@ -98,6 +107,8 @@ def cli( container_host, container_host_interface, invoke_image, + hook_name, + skip_prepare_infra, ): """ `sam local start-api` command entry point @@ -128,6 +139,7 @@ def cli( container_host, container_host_interface, invoke_image, + hook_name, ) # pragma: no cover @@ -155,6 +167,7 @@ def do_cli( # pylint: disable=R0914 container_host, container_host_interface, invoke_image, + hook_name, ): """ Implementation of the ``cli`` method, just separated out for unit testing purposes @@ -170,6 +183,14 @@ def do_cli( # pylint: disable=R0914 LOG.debug("local start-api command is called") + if ( + hook_name + and ExperimentalFlag.IaCsSupport.get(hook_name) is not None + and not is_experimental_enabled(ExperimentalFlag.IaCsSupport.get(hook_name)) + ): + LOG.info("Terraform Support beta feature is not enabled.") + return + processed_invoke_images = process_image_options(invoke_image) # Pass all inputs to setup necessary context to invoke function locally. @@ -202,14 +223,15 @@ def do_cli( # pylint: disable=R0914 ) as invoke_context: service = LocalApiService(lambda_invoke_context=invoke_context, port=port, host=host, static_dir=static_dir) service.start() - command_suggestions = generate_next_command_recommendation( - [ - ("Validate SAM template", "sam validate"), - ("Test Function in the Cloud", "sam sync --stack-name {{stack-name}} --watch"), - ("Deploy", "sam deploy --guided"), - ] - ) - click.secho(command_suggestions, fg="yellow") + if not hook_name: + command_suggestions = generate_next_command_recommendation( + [ + ("Validate SAM template", "sam validate"), + ("Test Function in the Cloud", "sam sync --stack-name {{stack-name}} --watch"), + ("Deploy", "sam deploy --guided"), + ] + ) + click.secho(command_suggestions, fg="yellow") except NoApisDefined as ex: raise UserException( diff --git a/samcli/commands/local/start_api/core/options.py b/samcli/commands/local/start_api/core/options.py index d9b89145e0..21bb1bf822 100644 --- a/samcli/commands/local/start_api/core/options.py +++ b/samcli/commands/local/start_api/core/options.py @@ -17,6 +17,8 @@ "parameter_overrides", ] +EXTENSION_OPTIONS: List[str] = ["hook_name", "skip_prepare_infra"] + CONTAINER_OPTION_NAMES: List[str] = [ "host", "port", @@ -53,6 +55,7 @@ + ARTIFACT_LOCATION_OPTIONS + CONFIGURATION_OPTION_NAMES + ALL_COMMON_OPTIONS + + EXTENSION_OPTIONS ) OPTIONS_INFO: Dict[str, Dict] = { @@ -65,6 +68,7 @@ "Artifact Location Options": { "option_names": {opt: {"rank": idx} for idx, opt in enumerate(ARTIFACT_LOCATION_OPTIONS)} }, + "Extension Options": {"option_names": {opt: {"rank": idx} for idx, opt in enumerate(EXTENSION_OPTIONS)}}, "Configuration Options": { "option_names": {opt: {"rank": idx} for idx, opt in enumerate(CONFIGURATION_OPTION_NAMES)}, "extras": [ diff --git a/samcli/commands/logs/command.py b/samcli/commands/logs/command.py index 7a3b1d8c6a..1146767a60 100644 --- a/samcli/commands/logs/command.py +++ b/samcli/commands/logs/command.py @@ -11,6 +11,7 @@ from samcli.cli.main import common_options as cli_framework_options from samcli.commands._utils.command_exception_handler import command_exception_handler from samcli.commands._utils.options import common_observability_options, generate_next_command_recommendation +from samcli.commands.logs.core.command import LogsCommand from samcli.commands.logs.validation_and_exception_handlers import ( SAM_LOGS_ADDITIONAL_EXCEPTION_HANDLERS, stack_name_cw_log_group_validation, @@ -20,37 +21,34 @@ LOG = logging.getLogger(__name__) +SHORT_HELP = ( + "Fetch logs for your AWS SAM Application or AWS Cloudformation stack - Lambda Functions/CloudWatch Log groups" +) + HELP_TEXT = """ -Use this command to fetch logs generated by your Lambda function.\n -\b -When your functions are a part of a CloudFormation stack, you can fetch logs using the function's -LogicalID when you specify the stack name. -$ sam logs -n HelloWorldFunction --stack-name mystack \n -\b -Or, you can fetch logs using the function's name. -$ sam logs -n mystack-HelloWorldFunction-1FJ8PD36GML2Q \n -\b -You can view logs for a specific time range using the -s (--start-time) and -e (--end-time) options -$ sam logs -n HelloWorldFunction --stack-name mystack -s '10min ago' -e '2min ago' \n -\b -You can also add the --tail option to wait for new logs and see them as they arrive. -$ sam logs -n HelloWorldFunction --stack-name mystack --tail \n -\b -Use the --filter option to quickly find logs that match terms, phrases or values in your log events. -$ sam logs -n HelloWorldFunction --stack-name mystack --filter 'error' \n -\b -Fetch logs for all supported resources in your application, and additionally from the specified log groups. -$ sam logs --cw-log-group /aws/lambda/myfunction-123 --cw-log-group /aws/lambda/myfunction-456 -\b -You can now fetch logs from supported resources, by only providing --stack-name parameter -$ sam logs --stack-name mystack \n -\b -You can also fetch logs from a resource which is defined in a nested stack. -$ sam logs --stack-name mystack -n MyNestedStack/HelloWorldFunction +The sam logs commands fetches logs of Lambda Functions/CloudWatch log groups +with additional filtering by options. """ +DESCRIPTION = """ + Fetch logs generated by Lambda functions or other Cloudwatch log groups with additional filtering. +""" -@click.command("logs", help=HELP_TEXT, short_help="Fetch logs for a function") + +@click.command( + "logs", + short_help=SHORT_HELP, + context_settings={ + "ignore_unknown_options": False, + "allow_interspersed_args": True, + "allow_extra_args": True, + "max_content_width": 120, + }, + cls=LogsCommand, + help=HELP_TEXT, + description=DESCRIPTION, + requires_credentials=True, +) @configuration_option(provider=TomlProvider(section="parameters")) @click.option( "--name", diff --git a/tests/iac_integration/__init__.py b/samcli/commands/logs/core/__init__.py similarity index 100% rename from tests/iac_integration/__init__.py rename to samcli/commands/logs/core/__init__.py diff --git a/samcli/commands/logs/core/command.py b/samcli/commands/logs/core/command.py new file mode 100644 index 0000000000..60b1734e50 --- /dev/null +++ b/samcli/commands/logs/core/command.py @@ -0,0 +1,119 @@ +from click import Context, style + +from samcli.cli.core.command import CoreCommand +from samcli.cli.row_modifiers import RowDefinition, ShowcaseRowModifier +from samcli.commands.logs.core.formatters import LogsCommandHelpTextFormatter +from samcli.commands.logs.core.options import OPTIONS_INFO + +COL_SIZE_MODIFIER = 38 + + +class LogsCommand(CoreCommand): + class CustomFormatterContext(Context): + formatter_class = LogsCommandHelpTextFormatter + + context_class = CustomFormatterContext + + @staticmethod + def format_examples(ctx: Context, formatter: LogsCommandHelpTextFormatter): + with formatter.indented_section(name="Examples", extra_indents=1): + with formatter.indented_section( + name="Fetch logs with Lambda Function Logical ID and Cloudformation Stack Name" + ): + formatter.write_rd( + [ + RowDefinition( + text="\n", + ), + RowDefinition( + name=style(f"$ {ctx.command_path} -n HelloWorldFunction --stack-name mystack"), + extra_row_modifiers=[ShowcaseRowModifier()], + ), + ] + ) + with formatter.indented_section(name="View logs for specific time range"): + formatter.write_rd( + [ + RowDefinition( + text="\n", + ), + RowDefinition( + name=style( + f"$ {ctx.command_path} -n HelloWorldFunction --stack-name mystack -s " + f"'10min ago' -e '2min ago'" + ), + extra_row_modifiers=[ShowcaseRowModifier()], + ), + ] + ) + with formatter.indented_section(name="Tail new logs"): + formatter.write_rd( + [ + RowDefinition( + text="\n", + ), + RowDefinition( + name=style(f"$ {ctx.command_path} -n HelloWorldFunction --stack-name " f"mystack --tail"), + extra_row_modifiers=[ShowcaseRowModifier()], + ), + ] + ) + with formatter.indented_section(name="Fetch from Cloudwatch log groups"): + formatter.write_rd( + [ + RowDefinition( + text="\n", + ), + RowDefinition( + name=style( + f"$ {ctx.command_path} --cw-log-group /aws/lambda/myfunction-123 " + f"--cw-log-group /aws/lambda/myfunction-456" + ), + extra_row_modifiers=[ShowcaseRowModifier()], + ), + ] + ) + + with formatter.indented_section(name="Fetch logs from supported resources in Cloudformation stack"): + formatter.write_rd( + [ + RowDefinition( + text="\n", + ), + RowDefinition( + name=style(f"$ {ctx.command_path} ---stack-name mystack"), + extra_row_modifiers=[ShowcaseRowModifier()], + ), + ] + ) + + with formatter.indented_section(name="Fetch logs from resource defined in nested Cloudformation stack"): + formatter.write_rd( + [ + RowDefinition( + text="\n", + ), + RowDefinition( + name=style( + f"$ {ctx.command_path} ---stack-name mystack -n MyNestedStack/HelloWorldFunction" + ), + extra_row_modifiers=[ShowcaseRowModifier()], + ), + ] + ) + + def format_options(self, ctx: Context, formatter: LogsCommandHelpTextFormatter) -> None: # type:ignore + # `ignore` is put in place here for mypy even though it is the correct behavior, + # as the `formatter_class` can be set in subclass of Command. If ignore is not set, + # mypy raises argument needs to be HelpFormatter as super class defines it. + + self.format_description(formatter) + LogsCommand.format_examples(ctx, formatter) + + CoreCommand._format_options( + ctx=ctx, + params=self.get_params(ctx), + formatter=formatter, + formatting_options=OPTIONS_INFO, + write_rd_overrides={"col_max": COL_SIZE_MODIFIER}, + ) diff --git a/samcli/commands/logs/core/formatters.py b/samcli/commands/logs/core/formatters.py new file mode 100644 index 0000000000..6a35facce0 --- /dev/null +++ b/samcli/commands/logs/core/formatters.py @@ -0,0 +1,19 @@ +from samcli.cli.formatters import RootCommandHelpTextFormatter +from samcli.cli.row_modifiers import BaseLineRowModifier +from samcli.commands.logs.core.options import ALL_OPTIONS + + +class LogsCommandHelpTextFormatter(RootCommandHelpTextFormatter): + # Picked an additive constant that gives an aesthetically pleasing look. + ADDITIVE_JUSTIFICATION = 22 + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + # Add Additional space after determining the longest option. + # However, do not justify with padding for more than half the width of + # the terminal to retain aesthetics. + self.left_justification_length = min( + max([len(option) for option in ALL_OPTIONS]) + self.ADDITIVE_JUSTIFICATION, + self.width // 2 - self.indent_increment, + ) + self.modifiers = [BaseLineRowModifier()] diff --git a/samcli/commands/logs/core/options.py b/samcli/commands/logs/core/options.py new file mode 100644 index 0000000000..c537c857e6 --- /dev/null +++ b/samcli/commands/logs/core/options.py @@ -0,0 +1,45 @@ +""" +Logs Command Options related Datastructures for formatting. +""" +from typing import Dict, List + +from samcli.cli.core.options import ALL_COMMON_OPTIONS, add_common_options_info +from samcli.cli.row_modifiers import RowDefinition + +# The ordering of the option lists matter, they are the order in which options will be displayed. + +LOG_IDENTIFIER_OPTIONS: List[str] = ["stack_name", "cw_log_group", "name"] + +# Can be used instead of the options in the first list +ADDITIONAL_OPTIONS: List[str] = ["include_traces", "filter", "output", "tail", "start_time", "end_time"] + +AWS_CREDENTIAL_OPTION_NAMES: List[str] = ["region", "profile"] + +CONFIGURATION_OPTION_NAMES: List[str] = ["config_env", "config_file"] + +ALL_OPTIONS: List[str] = ( + LOG_IDENTIFIER_OPTIONS + + AWS_CREDENTIAL_OPTION_NAMES + + ADDITIONAL_OPTIONS + + CONFIGURATION_OPTION_NAMES + + ALL_COMMON_OPTIONS +) + +OPTIONS_INFO: Dict[str, Dict] = { + "Log Identifier Options": {"option_names": {opt: {"rank": idx} for idx, opt in enumerate(LOG_IDENTIFIER_OPTIONS)}}, + "AWS Credential Options": { + "option_names": {opt: {"rank": idx} for idx, opt in enumerate(AWS_CREDENTIAL_OPTION_NAMES)} + }, + "Additional Options": {"option_names": {opt: {"rank": idx} for idx, opt in enumerate(ADDITIONAL_OPTIONS)}}, + "Configuration Options": { + "option_names": {opt: {"rank": idx} for idx, opt in enumerate(CONFIGURATION_OPTION_NAMES)}, + "extras": [ + RowDefinition(name="Learn more about configuration files at:"), + RowDefinition( + name="https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-cli" + "-config.html. " + ), + ], + }, +} +add_common_options_info(OPTIONS_INFO) diff --git a/samcli/commands/package/command.py b/samcli/commands/package/command.py index ee74b67c37..41fb10b133 100644 --- a/samcli/commands/package/command.py +++ b/samcli/commands/package/command.py @@ -21,6 +21,7 @@ template_click_option, use_json_option, ) +from samcli.commands.package.core.command import PackageCommand from samcli.lib.bootstrap.bootstrap import manage_stack from samcli.lib.cli_validation.image_repository_validation import image_repository_validation from samcli.lib.telemetry.metric import track_command, track_template_warnings @@ -42,20 +43,30 @@ def resources_and_properties_help_string(): ) -HELP_TEXT = ( - """The SAM package command creates and uploads artifacts based on the package type of a given resource. -It uploads local images to ECR for `Image` package types. -It creates zip of your code and dependencies and uploads it to S3 for other package types. -The command returns a copy of your template, replacing references to local artifacts -with the AWS location where the command uploaded the artifacts. - -The following resources and their property locations are supported. -""" - + resources_and_properties_help_string() -) +DESCRIPTION = """ + Creates and uploads artifacts based on the package type of a given resource. + It uploads local images to ECR for `Image` package types. + It creates a zip of code and dependencies and uploads it to S3 for `Zip` package types. + + A new template is returned which replaces references to local artifacts + with the AWS location where the command uploaded the artifacts. + """ -@click.command("package", short_help=SHORT_HELP, help=HELP_TEXT, context_settings=dict(max_content_width=120)) +@click.command( + "package", + short_help=SHORT_HELP, + context_settings={ + "ignore_unknown_options": False, + "allow_interspersed_args": True, + "allow_extra_args": True, + "max_content_width": 120, + }, + cls=PackageCommand, + help=SHORT_HELP, + description=DESCRIPTION, + requires_credentials=True, +) @configuration_option(provider=TomlProvider(section="parameters")) @template_click_option(include_build=True) @click.option( diff --git a/tests/iac_integration/cdk/__init__.py b/samcli/commands/package/core/__init__.py similarity index 100% rename from tests/iac_integration/cdk/__init__.py rename to samcli/commands/package/core/__init__.py diff --git a/samcli/commands/package/core/command.py b/samcli/commands/package/core/command.py new file mode 100644 index 0000000000..16a9ee3d2a --- /dev/null +++ b/samcli/commands/package/core/command.py @@ -0,0 +1,138 @@ +""" +`sam package` command class for help text visual layer. +""" +import click +from click import Context, style +from rich.table import Table + +from samcli.cli.core.command import CoreCommand +from samcli.cli.row_modifiers import RowDefinition, ShowcaseRowModifier +from samcli.commands.package.core.formatters import PackageCommandHelpTextFormatter +from samcli.commands.package.core.options import OPTIONS_INFO +from samcli.lib.utils.resources import resources_generator + +COL_SIZE_MODIFIER = 38 + + +class PackageCommand(CoreCommand): + """ + `sam` package specific command class that specializes in the visual appearance + of `sam package` help text. + It hosts a custom formatter, examples, table for supported resources, acronyms + and how options are to be used in the CLI for `sam package`. + """ + + class CustomFormatterContext(Context): + formatter_class = PackageCommandHelpTextFormatter + + context_class = CustomFormatterContext + + @staticmethod + def format_examples(ctx: Context, formatter: PackageCommandHelpTextFormatter): + with formatter.indented_section(name="Examples", extra_indents=1): + with formatter.indented_section(name="Automatic resolution of S3 buckets", extra_indents=1): + formatter.write_rd( + [ + RowDefinition( + text="\n", + ), + RowDefinition( + name=style(f"$ {ctx.command_path} --resolve-s3"), + extra_row_modifiers=[ShowcaseRowModifier()], + ), + ], + col_max=COL_SIZE_MODIFIER, + ) + with formatter.indented_section(name="Get packaged template", extra_indents=1): + formatter.write_rd( + [ + RowDefinition( + text="\n", + ), + RowDefinition( + name=style(f"$ {ctx.command_path} --resolve-s3 --output-template-file packaged.yaml"), + extra_row_modifiers=[ShowcaseRowModifier()], + ), + ], + col_max=COL_SIZE_MODIFIER, + ) + with formatter.indented_section(name="Customized location for uploading artifacts", extra_indents=1): + formatter.write_rd( + [ + RowDefinition( + text="\n", + ), + RowDefinition( + name=style( + f"$ {ctx.command_path} --s3-bucket S3_BUCKET --output-template-file packaged.yaml" + ), + extra_row_modifiers=[ShowcaseRowModifier()], + ), + ], + col_max=COL_SIZE_MODIFIER, + ) + + @staticmethod + def format_table(formatter: PackageCommandHelpTextFormatter): + with formatter.section(name="Supported Resources"): + pass + ctx = click.get_current_context() + table = Table(width=ctx.max_content_width) + table.add_column("Resource") + table.add_column("Location") + for resource, location in resources_generator(): + table.add_row(resource, location) + with ctx.obj.console.capture() as capture: + ctx.obj.console.print(table) + formatter.write_rd( + [ + RowDefinition(name="\n"), + RowDefinition(name=capture.get()), + ], + col_max=COL_SIZE_MODIFIER, + ) + + @staticmethod + def format_acronyms(formatter: PackageCommandHelpTextFormatter): + with formatter.indented_section(name="Acronyms", extra_indents=1): + formatter.write_rd( + [ + RowDefinition( + text="\n", + ), + RowDefinition( + name="S3", + text="Simple Storage Service", + extra_row_modifiers=[ShowcaseRowModifier()], + ), + RowDefinition( + name="ECR", + text="Elastic Container Registry", + extra_row_modifiers=[ShowcaseRowModifier()], + ), + RowDefinition( + name="KMS", + text="Key Management Service", + extra_row_modifiers=[ShowcaseRowModifier()], + ), + ], + col_max=COL_SIZE_MODIFIER, + ) + + def format_options(self, ctx: Context, formatter: PackageCommandHelpTextFormatter) -> None: # type:ignore + # `ignore` is put in place here for mypy even though it is the correct behavior, + # as the `formatter_class` can be set in subclass of Command. If ignore is not set, + # mypy raises argument needs to be HelpFormatter as super class defines it. + + self.format_description(formatter) + PackageCommand.format_examples(ctx, formatter) + PackageCommand.format_table(formatter) + PackageCommand.format_acronyms(formatter) + + CoreCommand._format_options( + ctx=ctx, + params=self.get_params(ctx), + formatter=formatter, + formatting_options=OPTIONS_INFO, + write_rd_overrides={"col_max": COL_SIZE_MODIFIER}, + ) diff --git a/samcli/commands/package/core/formatters.py b/samcli/commands/package/core/formatters.py new file mode 100644 index 0000000000..5c05ddcbfd --- /dev/null +++ b/samcli/commands/package/core/formatters.py @@ -0,0 +1,19 @@ +from samcli.cli.formatters import RootCommandHelpTextFormatter +from samcli.cli.row_modifiers import BaseLineRowModifier +from samcli.commands.package.core.options import ALL_OPTIONS + + +class PackageCommandHelpTextFormatter(RootCommandHelpTextFormatter): + # Picked an additive constant that gives an aesthetically pleasing look. + ADDITIVE_JUSTIFICATION = 15 + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + # Add Additional space after determining the longest option. + # However, do not justify with padding for more than half the width of + # the terminal to retain aesthetics. + self.left_justification_length = min( + max([len(option) for option in ALL_OPTIONS]) + self.ADDITIVE_JUSTIFICATION, + self.width // 2 - self.indent_increment, + ) + self.modifiers = [BaseLineRowModifier()] diff --git a/samcli/commands/package/core/options.py b/samcli/commands/package/core/options.py new file mode 100644 index 0000000000..5a10f943f9 --- /dev/null +++ b/samcli/commands/package/core/options.py @@ -0,0 +1,68 @@ +""" +Package Command Options related Datastructures for formatting. +""" +from typing import Dict, List + +from samcli.cli.core.options import ALL_COMMON_OPTIONS, add_common_options_info +from samcli.cli.row_modifiers import RowDefinition + +# The ordering of the option lists matter, they are the order in which options will be displayed. + +REQUIRED_OPTIONS: List[str] = ["s3_bucket", "resolve_s3"] + +AWS_CREDENTIAL_OPTION_NAMES: List[str] = ["region", "profile"] + +INFRASTRUCTURE_OPTION_NAMES: List[str] = [ + "s3_prefix", + "image_repository", + "image_repositories", + "kms_key_id", + "metadata", +] + +DEPLOYMENT_OPTIONS: List[str] = [ + "force_upload", +] + +CONFIGURATION_OPTION_NAMES: List[str] = ["config_env", "config_file"] + +ADDITIONAL_OPTIONS: List[str] = [ + "no_progressbar", + "signing_profiles", + "template_file", + "output_template_file", + "use_json", +] + +ALL_OPTIONS: List[str] = ( + REQUIRED_OPTIONS + + AWS_CREDENTIAL_OPTION_NAMES + + INFRASTRUCTURE_OPTION_NAMES + + DEPLOYMENT_OPTIONS + + CONFIGURATION_OPTION_NAMES + + ADDITIONAL_OPTIONS + + ALL_COMMON_OPTIONS +) + +OPTIONS_INFO: Dict[str, Dict] = { + "Required Options": {"option_names": {opt: {"rank": idx} for idx, opt in enumerate(REQUIRED_OPTIONS)}}, + "AWS Credential Options": { + "option_names": {opt: {"rank": idx} for idx, opt in enumerate(AWS_CREDENTIAL_OPTION_NAMES)} + }, + "Infrastructure Options": { + "option_names": {opt: {"rank": idx} for idx, opt in enumerate(INFRASTRUCTURE_OPTION_NAMES)} + }, + "Package Management Options": {"option_names": {opt: {"rank": idx} for idx, opt in enumerate(DEPLOYMENT_OPTIONS)}}, + "Configuration Options": { + "option_names": {opt: {"rank": idx} for idx, opt in enumerate(CONFIGURATION_OPTION_NAMES)}, + "extras": [ + RowDefinition(name="Learn more about configuration files at:"), + RowDefinition( + name="https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-cli" + "-config.html. " + ), + ], + }, + "Additional Options": {"option_names": {opt: {"rank": idx} for idx, opt in enumerate(ADDITIONAL_OPTIONS)}}, +} +add_common_options_info(OPTIONS_INFO) diff --git a/samcli/hook_packages/terraform/hooks/prepare/property_builder.py b/samcli/hook_packages/terraform/hooks/prepare/property_builder.py index add29c68b2..a8910f112a 100644 --- a/samcli/hook_packages/terraform/hooks/prepare/property_builder.py +++ b/samcli/hook_packages/terraform/hooks/prepare/property_builder.py @@ -1,6 +1,9 @@ """ Terraform prepare property builder """ +import logging +from json import loads +from json.decoder import JSONDecodeError from typing import Any, Dict, Optional from samcli.hook_packages.terraform.hooks.prepare.resource_linking import _resolve_resource_attribute @@ -24,6 +27,8 @@ from samcli.lib.utils.resources import AWS_LAMBDA_FUNCTION as CFN_AWS_LAMBDA_FUNCTION from samcli.lib.utils.resources import AWS_LAMBDA_LAYERVERSION as CFN_AWS_LAMBDA_LAYER_VERSION +LOG = logging.getLogger(__name__) + REMOTE_DUMMY_VALUE = "<>" TF_AWS_LAMBDA_FUNCTION = "aws_lambda_function" TF_AWS_LAMBDA_LAYER_VERSION = "aws_lambda_layer_version" @@ -211,6 +216,35 @@ def _check_image_config_value(image_config: Any) -> bool: return True +def _get_json_body(tf_properties: dict, resource: TFResource) -> Any: + """ + Gets the JSON formatted body value from the API Gateway if there is one + + Parameters + ---------- + tf_properties: dict + Properties of the terraform AWS Lambda function resource + resource: TFResource + Configuration terraform resource + + Returns + ------- + Any + Returns a dictonary if there is a valid body to parse, otherwise return original value + """ + body = tf_properties.get("body") + + if isinstance(body, str): + try: + return loads(body) + except JSONDecodeError: + pass + + LOG.debug(f"Failed to load JSON body for API Gateway body, returning original value: '{body}'") + + return body + + AWS_LAMBDA_FUNCTION_PROPERTY_BUILDER_MAPPING: PropertyBuilderMapping = { "FunctionName": _get_property_extractor("function_name"), "Architectures": _get_property_extractor("architectures"), @@ -234,7 +268,7 @@ def _check_image_config_value(image_config: Any) -> bool: AWS_API_GATEWAY_REST_API_PROPERTY_BUILDER_MAPPING: PropertyBuilderMapping = { "Name": _get_property_extractor("name"), - "Body": _get_property_extractor("body"), + "Body": _get_json_body, "Parameters": _get_property_extractor("parameters"), "BinaryMediaTypes": _get_property_extractor("binary_media_types"), } diff --git a/samcli/hook_packages/terraform/hooks/prepare/resources/apigw.py b/samcli/hook_packages/terraform/hooks/prepare/resources/apigw.py index 05f1676624..356c744e12 100644 --- a/samcli/hook_packages/terraform/hooks/prepare/resources/apigw.py +++ b/samcli/hook_packages/terraform/hooks/prepare/resources/apigw.py @@ -66,7 +66,7 @@ def _unsupported_reference_field(field: str, resource: Dict, config_resource: TF False otherwise """ return bool( - not resource.get(field) + not (resource.get(field) or resource.get("values", {}).get(field)) and config_resource.attributes.get(field) and isinstance(config_resource.attributes.get(field), References) ) diff --git a/samcli/hook_packages/terraform/hooks/prepare/translate.py b/samcli/hook_packages/terraform/hooks/prepare/translate.py index 62f8d4da12..14f9e73733 100644 --- a/samcli/hook_packages/terraform/hooks/prepare/translate.py +++ b/samcli/hook_packages/terraform/hooks/prepare/translate.py @@ -52,7 +52,7 @@ get_sam_metadata_planned_resource_value_attribute, ) from samcli.lib.hook.exceptions import PrepareHookException -from samcli.lib.utils.colors import Colored +from samcli.lib.utils.colors import Colored, Colors from samcli.lib.utils.resources import AWS_LAMBDA_FUNCTION as CFN_AWS_LAMBDA_FUNCTION SAM_METADATA_RESOURCE_TYPE = "null_resource" @@ -134,9 +134,12 @@ def _check_unresolvable_values(root_module: dict, root_tf_module: TFModule) -> N if config_values and not planned_values: LOG.warning( - Colored().yellow( - "\nUnresolvable attributes discovered in project, run terraform apply to resolve them.\n" - ) + Colored().color_log( + msg="\nUnresolvable attributes discovered in project, " + "run terraform apply to resolve them.\n", + color=Colors.WARNING, + ), + extra=dict(markup=True), ) return diff --git a/samcli/lib/bootstrap/companion_stack/companion_stack_manager.py b/samcli/lib/bootstrap/companion_stack/companion_stack_manager.py index 612341988d..f15d3e52bf 100644 --- a/samcli/lib/bootstrap/companion_stack/companion_stack_manager.py +++ b/samcli/lib/bootstrap/companion_stack/companion_stack_manager.py @@ -17,6 +17,7 @@ from samcli.lib.providers.sam_function_provider import SamFunctionProvider from samcli.lib.providers.sam_stack_provider import SamLocalStackProvider from samcli.lib.utils.packagetype import IMAGE +from samcli.lib.utils.s3 import parse_s3_url # pylint: disable=E0401 if typing.TYPE_CHECKING: # pragma: no cover @@ -112,7 +113,7 @@ def update_companion_stack(self) -> None: self._s3_client, bucket_name=self._s3_bucket, prefix=self._s3_prefix, no_progressbar=True ) # TemplateUrl property requires S3 URL to be in path-style format - parts = S3Uploader.parse_s3_url( + parts = parse_s3_url( s3_uploader.upload_with_dedup(temporary_file.name, "template"), version_property="Version" ) diff --git a/samcli/lib/deploy/deployer.py b/samcli/lib/deploy/deployer.py index 16e860c54c..58a2582403 100644 --- a/samcli/lib/deploy/deployer.py +++ b/samcli/lib/deploy/deployer.py @@ -38,6 +38,7 @@ from samcli.lib.package.local_files_utils import get_uploaded_s3_object_name, mktempfile from samcli.lib.package.s3_uploader import S3Uploader from samcli.lib.utils.colors import Colored, Colors +from samcli.lib.utils.s3 import parse_s3_url from samcli.lib.utils.time import utc_to_timestamp LOG = logging.getLogger(__name__) @@ -203,9 +204,7 @@ def _process_kwargs( temporary_file.flush() remote_path = get_uploaded_s3_object_name(file_path=temporary_file.name, extension="template") # TemplateUrl property requires S3 URL to be in path-style format - parts = S3Uploader.parse_s3_url( - s3_uploader.upload(temporary_file.name, remote_path), version_property="Version" - ) + parts = parse_s3_url(s3_uploader.upload(temporary_file.name, remote_path), version_property="Version") kwargs["TemplateURL"] = s3_uploader.to_path_style_s3_url(parts["Key"], parts.get("Version", None)) # don't set these arguments if not specified to use existing values diff --git a/samcli/lib/package/artifact_exporter.py b/samcli/lib/package/artifact_exporter.py index 9e60dc5c1c..b2bbce7328 100644 --- a/samcli/lib/package/artifact_exporter.py +++ b/samcli/lib/package/artifact_exporter.py @@ -29,7 +29,6 @@ ECRResource, ResourceZip, ) -from samcli.lib.package.s3_uploader import S3Uploader from samcli.lib.package.uploaders import Destination, Uploaders from samcli.lib.package.utils import ( is_local_file, @@ -47,6 +46,7 @@ AWS_SERVERLESS_FUNCTION, RESOURCES_WITH_LOCAL_PATHS, ) +from samcli.lib.utils.s3 import parse_s3_url from samcli.yamlhelper import yaml_dump, yaml_parse # NOTE: sriram-mv, A cyclic dependency on `Template` needs to be broken. @@ -99,7 +99,7 @@ def do_export(self, resource_id, resource_dict, parent_dir): url = self.uploader.upload(temporary_file.name, remote_path) # TemplateUrl property requires S3 URL to be in path-style format - parts = S3Uploader.parse_s3_url(url, version_property="Version") + parts = parse_s3_url(url, version_property="Version") s3_path_url = self.uploader.to_path_style_s3_url(parts["Key"], parts.get("Version", None)) set_value_from_jmespath(resource_dict, self.PROPERTY_NAME, s3_path_url) @@ -146,7 +146,7 @@ def do_export(self, resource_id, resource_dict, parent_dir): url = self.uploader.upload(abs_template_path, remote_path) # TemplateUrl property requires S3 URL to be in path-style format - parts = S3Uploader.parse_s3_url(url, version_property="Version") + parts = parse_s3_url(url, version_property="Version") s3_path_url = self.uploader.to_path_style_s3_url(parts["Key"], parts.get("Version", None)) set_value_from_jmespath(resource_dict, self.PROPERTY_NAME, s3_path_url) diff --git a/samcli/lib/package/code_signer.py b/samcli/lib/package/code_signer.py index 92f0a78273..02434d8fb5 100644 --- a/samcli/lib/package/code_signer.py +++ b/samcli/lib/package/code_signer.py @@ -5,7 +5,7 @@ import logging from samcli.commands.exceptions import UserException -from samcli.lib.package.s3_uploader import S3Uploader +from samcli.lib.utils.s3 import parse_s3_url LOG = logging.getLogger(__name__) @@ -60,7 +60,7 @@ def sign_package(self, resource_id, s3_url, s3_version): profile_owner = signing_profile_for_resource["profile_owner"] # parse given s3 url, and extract bucket and object key - parsed_s3_url = S3Uploader.parse_s3_url(s3_url) + parsed_s3_url = parse_s3_url(s3_url) s3_bucket = parsed_s3_url["Bucket"] s3_key = parsed_s3_url["Key"] s3_target_prefix = s3_key.rsplit("/", 1)[0] + "/signed_" diff --git a/samcli/lib/package/packageable_resources.py b/samcli/lib/package/packageable_resources.py index 79458dc5bc..ca245715b5 100644 --- a/samcli/lib/package/packageable_resources.py +++ b/samcli/lib/package/packageable_resources.py @@ -51,6 +51,7 @@ RESOURCES_WITH_IMAGE_COMPONENT, RESOURCES_WITH_LOCAL_PATHS, ) +from samcli.lib.utils.s3 import parse_s3_url LOG = logging.getLogger(__name__) @@ -196,7 +197,7 @@ def get_property_value(self, resource_dict): # artifact, as deletion of intrinsic ref function artifacts is not supported yet. # TODO: Allow deletion of S3 artifacts with intrinsic ref functions. if resource_path and isinstance(resource_path, str): - return self.uploader.parse_s3_url(resource_path) + return parse_s3_url(resource_path) return {"Bucket": None, "Key": None} @@ -340,7 +341,7 @@ def do_export(self, resource_id, resource_dict, parent_dir): self.RESOURCE_TYPE, resource_id, resource_dict, self.PROPERTY_NAME, parent_dir, self.uploader ) - parsed_url = S3Uploader.parse_s3_url( + parsed_url = parse_s3_url( artifact_s3_url, bucket_name_property=self.BUCKET_NAME_PROPERTY, object_key_property=self.OBJECT_KEY_PROPERTY, diff --git a/samcli/lib/package/s3_uploader.py b/samcli/lib/package/s3_uploader.py index 5dab8c0d9a..fe141ada51 100644 --- a/samcli/lib/package/s3_uploader.py +++ b/samcli/lib/package/s3_uploader.py @@ -20,8 +20,7 @@ import sys import threading from collections import abc -from typing import Any, Dict, Optional, cast -from urllib.parse import parse_qs, urlparse +from typing import Any, Optional, cast import botocore import botocore.exceptions @@ -30,6 +29,7 @@ from samcli.commands.package.exceptions import BucketNotSpecifiedError, NoSuchBucketError from samcli.lib.package.local_files_utils import get_uploaded_s3_object_name +from samcli.lib.utils.s3 import parse_s3_url LOG = logging.getLogger(__name__) @@ -234,7 +234,7 @@ def get_version_of_artifact(self, s3_url: str) -> str: """ Returns version information of the S3 object that is given as S3 URL """ - parsed_s3_url = self.parse_s3_url(s3_url) + parsed_s3_url = parse_s3_url(s3_url) s3_bucket = parsed_s3_url["Bucket"] s3_key = parsed_s3_url["Key"] s3_object_tagging = self.s3.get_object_tagging(Bucket=s3_bucket, Key=s3_key) @@ -242,77 +242,6 @@ def get_version_of_artifact(self, s3_url: str) -> str: s3_object_version_id = s3_object_tagging["VersionId"] return cast(str, s3_object_version_id) - @staticmethod - def parse_s3_url( - url: Any, - bucket_name_property: str = "Bucket", - object_key_property: str = "Key", - version_property: Optional[str] = None, - ) -> Dict: - if isinstance(url, str) and url.startswith("s3://"): - return S3Uploader._parse_s3_format_url( - url=url, - bucket_name_property=bucket_name_property, - object_key_property=object_key_property, - version_property=version_property, - ) - - if isinstance(url, str) and url.startswith("https://s3"): - return S3Uploader._parse_path_style_s3_url( - url=url, bucket_name_property=bucket_name_property, object_key_property=object_key_property - ) - - raise ValueError("URL given to the parse method is not a valid S3 url {0}".format(url)) - - @staticmethod - def _parse_s3_format_url( - url: Any, - bucket_name_property: str = "Bucket", - object_key_property: str = "Key", - version_property: Optional[str] = None, - ) -> Dict: - """ - Method for parsing s3 urls that begin with s3:// - e.g. s3://bucket/key - """ - parsed = urlparse(url) - query = parse_qs(parsed.query) - if parsed.netloc and parsed.path: - result = dict() - result[bucket_name_property] = parsed.netloc - result[object_key_property] = parsed.path.lstrip("/") - - # If there is a query string that has a single versionId field, - # set the object version and return - if version_property is not None and "versionId" in query and len(query["versionId"]) == 1: - result[version_property] = query["versionId"][0] - - return result - - raise ValueError("URL given to the parse method is not a valid S3 url {0}".format(url)) - - @staticmethod - def _parse_path_style_s3_url( - url: Any, - bucket_name_property: str = "Bucket", - object_key_property: str = "Key", - ) -> Dict: - """ - Static method for parsing path style s3 urls. - e.g. https://s3.us-east-1.amazonaws.com/bucket/key - """ - parsed = urlparse(url) - result = dict() - # parsed.path would point to /bucket/key - if parsed.path: - s3_bucket_key = parsed.path.split("/", 2)[1:] - - result[bucket_name_property] = s3_bucket_key[0] - result[object_key_property] = s3_bucket_key[1] - - return result - raise ValueError("URL given to the parse method is not a valid S3 url {0}".format(url)) - class ProgressPercentage: # This class was copied directly from S3Transfer docs diff --git a/samcli/lib/package/utils.py b/samcli/lib/package/utils.py index 8650d3efa8..d0a1ae9787 100644 --- a/samcli/lib/package/utils.py +++ b/samcli/lib/package/utils.py @@ -26,6 +26,7 @@ from samcli.lib.package.s3_uploader import S3Uploader from samcli.lib.utils.hash import dir_checksum from samcli.lib.utils.resources import LAMBDA_LOCAL_RESOURCES +from samcli.lib.utils.s3 import parse_s3_url LOG = logging.getLogger(__name__) @@ -68,7 +69,7 @@ def is_s3_protocol_url(url): Check whether url is a valid path in the form of "s3://..." """ try: - S3Uploader.parse_s3_url(url) + parse_s3_url(url) return True except ValueError: return False diff --git a/samcli/lib/providers/api_collector.py b/samcli/lib/providers/api_collector.py index d0c0f5b2a8..7cb5d0c1d1 100644 --- a/samcli/lib/providers/api_collector.py +++ b/samcli/lib/providers/api_collector.py @@ -9,7 +9,7 @@ from typing import Dict, Iterator, List, Optional, Set, Tuple, Union from samcli.lib.providers.provider import Api, Cors -from samcli.lib.utils.colors import Colored +from samcli.lib.utils.colors import Colored, Colors from samcli.local.apigw.authorizers.authorizer import Authorizer from samcli.local.apigw.route import Route @@ -197,7 +197,7 @@ def get_api(self) -> Api: be validated thoroughly before deploying to production. Testing application behaviour against authorizers deployed on AWS can be done using the sam sync command.{os.linesep}""" - LOG.warning(Colored().yellow(message)) + LOG.warning(Colored().color_log(message, color=Colors.WARNING), extra=dict(markup=True)) break diff --git a/samcli/lib/utils/file_observer.py b/samcli/lib/utils/file_observer.py index 8ccf25cd9a..282aedb97b 100644 --- a/samcli/lib/utils/file_observer.py +++ b/samcli/lib/utils/file_observer.py @@ -2,6 +2,7 @@ Wraps watchdog to observe file system for any change. """ import logging +import platform import threading import uuid from abc import ABC, abstractmethod @@ -24,6 +25,8 @@ from samcli.local.lambdafn.config import FunctionConfig LOG = logging.getLogger(__name__) +# Windows API error returned when attempting to perform I/O on closed pipe +BROKEN_PIPE_ERROR = 109 class ResourceObserver(ABC): @@ -243,6 +246,44 @@ class ImageObserverException(ObserverException): """ +def broken_pipe_handler(func: Callable) -> Callable: + """ + Decorator to handle the Windows API BROKEN_PIPE_ERROR error. + + Parameters + ---------- + func: Callable + The method to wrap around + """ + + # NOTE: As of right now, this checks for the Windows API error 109 + # specifically. This could be abstracted to potentially utilize a + # callback method to further customize this. + + def wrapper(*args, **kwargs): + try: + return func(*args, **kwargs) + except Exception as exception: + # handle a pywintypes exception that gets thrown when trying to exit + # from a command that utilizes ImageObserver(s) in + # EAGER container mode (start-api, start-lambda) + + # all containers would have been stopped, and deleted, however + # the pipes to those containers are still loaded somewhere + + if not platform.system() == "Windows": + raise + + win_error = getattr(exception, "winerror", None) + + if not win_error == BROKEN_PIPE_ERROR: + raise + + LOG.debug("Handling BROKEN_PIPE_ERROR pywintypes, exception ignored gracefully") + + return wrapper + + class ImageObserver(ResourceObserver): """ A class that will observe some docker images for any change. @@ -263,6 +304,7 @@ def __init__(self, on_change: Callable) -> None: self._images_observer_thread: Optional[Thread] = None self._lock: Lock = threading.Lock() + @broken_pipe_handler def _watch_images_events(self): for event in self.events: if event.get("Action", None) != "tag": diff --git a/samcli/lib/utils/s3.py b/samcli/lib/utils/s3.py new file mode 100644 index 0000000000..e841fb236c --- /dev/null +++ b/samcli/lib/utils/s3.py @@ -0,0 +1,74 @@ +"""Contains utility functions related to AWS S3 service""" +from typing import Any, Dict, Optional +from urllib.parse import parse_qs, urlparse + + +def parse_s3_url( + url: Any, + bucket_name_property: str = "Bucket", + object_key_property: str = "Key", + version_property: Optional[str] = None, +) -> Dict: + if isinstance(url, str) and url.startswith("s3://"): + return _parse_s3_format_url( + url=url, + bucket_name_property=bucket_name_property, + object_key_property=object_key_property, + version_property=version_property, + ) + + if isinstance(url, str) and url.startswith("https://s3"): + return _parse_path_style_s3_url( + url=url, bucket_name_property=bucket_name_property, object_key_property=object_key_property + ) + + raise ValueError("URL given to the parse method is not a valid S3 url {0}".format(url)) + + +def _parse_s3_format_url( + url: Any, + bucket_name_property: str = "Bucket", + object_key_property: str = "Key", + version_property: Optional[str] = None, +) -> Dict: + """ + Method for parsing s3 urls that begin with s3:// + e.g. s3://bucket/key + """ + parsed = urlparse(url) + query = parse_qs(parsed.query) + if parsed.netloc and parsed.path: + result = dict() + result[bucket_name_property] = parsed.netloc + result[object_key_property] = parsed.path.lstrip("/") + + # If there is a query string that has a single versionId field, + # set the object version and return + if version_property is not None and "versionId" in query and len(query["versionId"]) == 1: + result[version_property] = query["versionId"][0] + + return result + + raise ValueError("URL given to the parse method is not a valid S3 url {0}".format(url)) + + +def _parse_path_style_s3_url( + url: Any, + bucket_name_property: str = "Bucket", + object_key_property: str = "Key", +) -> Dict: + """ + Static method for parsing path style s3 urls. + e.g. https://s3.us-east-1.amazonaws.com/bucket/key + """ + parsed = urlparse(url) + result = dict() + # parsed.path would point to /bucket/key + if parsed.path: + s3_bucket_key = parsed.path.split("/", 2)[1:] + + result[bucket_name_property] = s3_bucket_key[0] + result[object_key_property] = s3_bucket_key[1] + + return result + raise ValueError("URL given to the parse method is not a valid S3 url {0}".format(url)) diff --git a/samcli/local/apigw/local_apigw_service.py b/samcli/local/apigw/local_apigw_service.py index e63a8775e7..f979b2e9a3 100644 --- a/samcli/local/apigw/local_apigw_service.py +++ b/samcli/local/apigw/local_apigw_service.py @@ -686,7 +686,7 @@ def _request_handler(self, **kwargs): LOG.warning( "Failed to find a Function to invoke a Lambda authorizer, verify that " - "this Function exists locally if it is not a remote resource." + "this Function is defined and exists locally in the template." ) except Exception as ex: # re-raise the catch all exception after we track it in our telemetry diff --git a/samcli/runtime_config.json b/samcli/runtime_config.json index b648be6cc3..3609a8eea6 100644 --- a/samcli/runtime_config.json +++ b/samcli/runtime_config.json @@ -1,3 +1,3 @@ { - "app_template_repo_commit": "67f28fd83477e0e15b394f995afb33b2053b4074" + "app_template_repo_commit": "bb905c379830c3d8edbc196bda731076549028e3" } diff --git a/tests/end_to_end/test_stages.py b/tests/end_to_end/test_stages.py index 8e60211924..f405606331 100644 --- a/tests/end_to_end/test_stages.py +++ b/tests/end_to_end/test_stages.py @@ -12,6 +12,7 @@ from samcli.cli.global_config import GlobalConfig from filelock import FileLock +from samcli.lib.utils.s3 import parse_s3_url from tests.end_to_end.end_to_end_context import EndToEndTestContext from tests.testing_utils import CommandResult, run_command, run_command_with_input @@ -102,7 +103,7 @@ def _download_packaged_file(self): ) if zipped_fn_s3_loc: - s3_info = S3Uploader.parse_s3_url(zipped_fn_s3_loc) + s3_info = parse_s3_url(zipped_fn_s3_loc) self.s3_client.download_file(s3_info["Bucket"], s3_info["Key"], str(zip_file_path)) with zipfile.ZipFile(zip_file_path, "r") as zip_refzip: diff --git a/tests/iac_integration/cdk/test_sam_cdk_integration.py b/tests/iac_integration/cdk/test_sam_cdk_integration.py deleted file mode 100644 index f6257f0da5..0000000000 --- a/tests/iac_integration/cdk/test_sam_cdk_integration.py +++ /dev/null @@ -1,132 +0,0 @@ -from unittest import TestCase -from subprocess import Popen, PIPE -import os -import random -from pathlib import Path -import threading - -import pytest -import requests -from parameterized import parameterized_class, parameterized - -from tests.testing_utils import run_command, start_persistent_process, read_until_string, kill_process - - -@parameterized_class( - ("cdk_project_path", "cdk_version", "cdk_stack_template"), - [ - ("/testdata/cdk_v1/typescript", "1.x", "TestStack.template.json"), - ("/testdata/cdk_v2/typescript", "2.x", "TestStack.template.json"), - ("/testdata/cdk_v1/python", "1.x", "TestStack.template.json"), - ("/testdata/cdk_v2/python", "2.x", "TestStack.template.json"), - ("/testdata/cdk_v1/java", "1.x", "TestStack.template.json"), - ("/testdata/cdk_v2/java", "2.x", "TestStack.template.json"), - ], -) -class TestSamCdkIntegration(TestCase): - integration_dir = str(Path(__file__).resolve().parents[0]) - cdk_project_path = "" - cdk_version = "" - cdk_stack_template = "" - - @classmethod - def setUpClass(cls): - cls.cdk_project = cls.integration_dir + cls.cdk_project_path - cls.api_port = str(TestSamCdkIntegration.random_port()) - cls.build_cdk_project() - cls.build() - - cls.start_api() - cls.url = "http://127.0.0.1:{}".format(cls.api_port) - - @classmethod - def build_cdk_project(cls): - command_list = ["npx", f"aws-cdk@{cls.cdk_version}", "synth", "--no-staging"] - working_dir = cls.cdk_project - result = run_command(command_list, cwd=working_dir) - if result.process.returncode != 0: - raise Exception("cdk synth command failed") - - @classmethod - def build(cls): - command = "sam" - if os.getenv("SAM_CLI_DEV"): - command = "samdev" - command_list = [command, "build", "-t", cls.cdk_stack_template] - working_dir = cls.cdk_project + "/cdk.out" - result = run_command(command_list, cwd=working_dir) - if result.process.returncode != 0: - raise Exception("sam build command failed") - - @classmethod - def start_api(cls): - command = "sam" - if os.getenv("SAM_CLI_DEV"): - command = "samdev" - - command_list = [command, "local", "start-api", "-p", cls.api_port] - - working_dir = cls.cdk_project + "/cdk.out" - cls.start_api_process = Popen(command_list, cwd=working_dir, stderr=PIPE) - - while True: - line = cls.start_api_process.stderr.readline() - if "Press CTRL+C to quit" in str(line): - break - - cls.stop_api_reading_thread = False - - def read_sub_process_stderr(): - while not cls.stop_api_reading_thread: - cls.start_api_process.stderr.readline() - - cls.api_read_threading = threading.Thread(target=read_sub_process_stderr, daemon=True) - cls.api_read_threading.start() - - @classmethod - def tearDownClass(cls): - # After all the tests run, we need to kill the start_lambda process. - cls.stop_api_reading_thread = True - kill_process(cls.start_api_process) - - @staticmethod - def random_port(): - return random.randint(30000, 40000) - - @parameterized.expand( - [ - ("/httpapis/nestedPythonFunction", "Hello World from Nested Python Function Construct 7"), - ("/restapis/spec/pythonFunction", "Hello World from python function construct 7"), - ("/restapis/normal/pythonFunction", "Hello World from python function construct 7"), - ("/restapis/normal/functionPythonRuntime", "Hello World from function construct with python runtime 7"), - ("/restapis/normal/preBuiltFunctionPythonRuntime", "Hello World from python pre built function 7"), - ( - "/restapis/normal/bundledFunctionPythonRuntime", - "Hello World from bundled function construct with python runtime 7", - ), - ("/restapis/normal/nodejsFunction", "Hello World from nodejs function construct 7"), - ("/restapis/normal/functionNodeJsRuntime", "Hello World from function construct with nodejs runtime 7"), - ("/restapis/normal/preBuiltFunctionNodeJsRuntime", "Hello World from nodejs pre built function 7"), - ("/restapis/normal/goFunction", "Hello World from go function construct"), - ("/restapis/normal/functionGoRuntime", "Hello World from function construct with go runtime"), - ("/restapis/normal/dockerImageFunction", "Hello World from docker image function construct"), - ("/restapis/normal/functionImageAsset", "Hello World from function construct with image asset"), - ( - "/restapis/normal/dockerImageFunctionWithSharedCode", - "Hello World from docker image function construct " - "with a Dockerfile that shares code with another Dockerfile", - ), - ( - "/restapis/normal/functionImageAssetWithSharedCode", - "Hello World from function construct with image asset " - "with a Dockerfile that shares code with another Dockerfile", - ), - ] - ) - @pytest.mark.flaky(reruns=3) - @pytest.mark.timeout(timeout=1000, method="thread") - def test_invoke_api(self, url_suffix, expected_message): - response = requests.get(self.url + url_suffix, timeout=800) - - self.assertEqual(response.status_code, 200) - self.assertEqual(response.json().get("message"), expected_message) diff --git a/tests/iac_integration/cdk/testdata/cdk_v1/java/cdk.json b/tests/iac_integration/cdk/testdata/cdk_v1/java/cdk.json deleted file mode 100644 index d981a1fd3c..0000000000 --- a/tests/iac_integration/cdk/testdata/cdk_v1/java/cdk.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "app": "mvn versions:use-latest-versions -DallowMajorUpdates=false && mvn -e -q compile exec:java", - "context": { - - } -} diff --git a/tests/iac_integration/cdk/testdata/cdk_v1/java/pom.xml b/tests/iac_integration/cdk/testdata/cdk_v1/java/pom.xml deleted file mode 100644 index 4a6d29e2d1..0000000000 --- a/tests/iac_integration/cdk/testdata/cdk_v1/java/pom.xml +++ /dev/null @@ -1,90 +0,0 @@ - - - 4.0.0 - - com.myorg - java - 0.1 - - - UTF-8 - - - - - - org.codehaus.mojo - versions-maven-plugin - 2.7 - - - software.amazon.awscdk:* - - - - - org.apache.maven.plugins - maven-compiler-plugin - 3.8.1 - - 1.8 - 1.8 - - - - - org.codehaus.mojo - exec-maven-plugin - 3.0.0 - - com.myorg.JavaApp - - - - - - - - - software.amazon.awscdk - core - 1.120.0 - - - software.amazon.awscdk - apigateway - 1.120.0 - - - software.amazon.awscdk - apigatewayv2 - 1.120.0 - - - software.amazon.awscdk - apigatewayv2-integrations - 1.120.0 - - - software.amazon.awscdk - lambda - 1.120.0 - - - software.amazon.awscdk - lambda-go - 1.120.0 - - - software.amazon.awscdk - lambda-nodejs - 1.120.0 - - - software.amazon.awscdk - lambda-python - 1.120.0 - - - diff --git a/tests/iac_integration/cdk/testdata/cdk_v1/java/src/main/java/com/myorg/JavaApp.java b/tests/iac_integration/cdk/testdata/cdk_v1/java/src/main/java/com/myorg/JavaApp.java deleted file mode 100644 index ff8cf94126..0000000000 --- a/tests/iac_integration/cdk/testdata/cdk_v1/java/src/main/java/com/myorg/JavaApp.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.myorg; - -import software.amazon.awscdk.core.App; -import software.amazon.awscdk.core.StackProps; - -import java.util.Arrays; - -public class JavaApp { - public static void main(final String[] args) { - App app = new App(); - - new JavaStack(app, "TestStack", StackProps.builder() - .build()); - - app.synth(); - } -} diff --git a/tests/iac_integration/cdk/testdata/cdk_v1/java/src/main/java/com/myorg/JavaStack.java b/tests/iac_integration/cdk/testdata/cdk_v1/java/src/main/java/com/myorg/JavaStack.java deleted file mode 100644 index 90a0f516a4..0000000000 --- a/tests/iac_integration/cdk/testdata/cdk_v1/java/src/main/java/com/myorg/JavaStack.java +++ /dev/null @@ -1,269 +0,0 @@ -package com.myorg; - -import software.amazon.awscdk.core.*; -import software.amazon.awscdk.services.apigateway.Resource; -import software.amazon.awscdk.services.apigateway.*; -import software.amazon.awscdk.services.iam.PolicyStatement; -import software.amazon.awscdk.services.iam.Role; -import software.amazon.awscdk.services.iam.ServicePrincipal; -import software.amazon.awscdk.services.lambda.Runtime; -import software.amazon.awscdk.services.lambda.*; -import software.amazon.awscdk.services.lambda.go.GoFunction; -import software.amazon.awscdk.services.lambda.nodejs.NodejsFunction; -import software.amazon.awscdk.services.lambda.python.PythonFunction; -import software.amazon.awscdk.services.lambda.python.PythonLayerVersion; -import software.amazon.awscdk.services.logs.RetentionDays; -import software.amazon.awscdk.services.s3.assets.AssetOptions; -import com.myorg.NestedStack1; - -import java.util.Arrays; - -public class JavaStack extends Stack { - public JavaStack(final Construct scope, final String id) { - this(scope, id, null); - } - - public JavaStack(final Construct scope, final String id, final StackProps props) { - super(scope, id, props); - - // Python Runtime - // Layers - PythonLayerVersion pythonLayerVersion = PythonLayerVersion.Builder - .create(this, "PythonLayerVersion") - .compatibleRuntimes(Arrays.asList(Runtime.PYTHON_3_7, Runtime.PYTHON_3_8, - Runtime.PYTHON_3_9)) - .entry("../../src/python/layers/PythonLayerVersion") - .build(); - - LayerVersion layerVersion = LayerVersion.Builder - .create(this, "LayerVersion") - .compatibleRuntimes(Arrays.asList(Runtime.PYTHON_3_7, Runtime.PYTHON_3_8, - Runtime.PYTHON_3_9)) - .code(Code.fromAsset("../../src/python/layers/LayerVersion")) - .build(); - // add SAM metadata to build layer - CfnLayerVersion cfnLayerVersion = (CfnLayerVersion) layerVersion.getNode().getDefaultChild(); - cfnLayerVersion.addMetadata("BuildMethod", "python3.7"); - - // Lambda LayerVersion with bundled Asset that will be built by CDK - LayerVersion bundledLayerVersionPythonRuntime = LayerVersion.Builder - .create(this, "BundledLayerVersionPythonRuntime") - .compatibleRuntimes(Arrays.asList(Runtime.PYTHON_3_7, Runtime.PYTHON_3_8, - Runtime.PYTHON_3_9)) - .code(Code.fromAsset("../../src/python/layers/BundledLayerVersion", - AssetOptions.builder().bundling( - BundlingOptions.builder() - .image(Runtime.PYTHON_3_7.getBundlingImage()) - .command(Arrays.asList( - "/bin/sh", - "-c", - "rm -rf /tmp/asset-input && mkdir /tmp/asset-input && cp * /tmp/asset-input && cd /tmp/asset-input" + - " && pip install -r requirements.txt -t . && mkdir /asset-output/python && " + - "cp -R /tmp/asset-input/* /asset-output/python" - )).build() - ).build() - )).build(); - - // ZIP package type Functions - // Functions Built by CDK - Runtime Functions Constructs - PythonFunction pythonFunction = PythonFunction.Builder - .create(this, "PythonFunction") - .entry("../../src/python/PythonFunctionConstruct") - .index("app.py") - .handler("lambda_handler") - .runtime(Runtime.PYTHON_3_9) - .functionName("pythonFunc") // we need the name to use it in the API definition file - .logRetention(RetentionDays.THREE_MONTHS) - .layers(Arrays.asList(pythonLayerVersion, layerVersion)) - .tracing(Tracing.ACTIVE) - .build(); - - // Normal Lambda Function Construct - Python Runtime - Function functionPythonRuntime = Function.Builder.create(this, "FunctionPythonRuntime") - .runtime(Runtime.PYTHON_3_7) - .code(Code.fromAsset("../../src/python/FunctionConstruct")) - .handler("app.lambda_handler") - .layers(Arrays.asList(pythonLayerVersion, layerVersion)) - .tracing(Tracing.ACTIVE) - .build(); - - // Normal Lambda Function Construct - Python Runtime - with skip build metadata - Function preBuiltFunctionPythonRuntime = Function.Builder.create(this, "PreBuiltFunctionPythonRuntime") - .runtime(Runtime.PYTHON_3_7) - .code(Code.fromAsset("../../src/python/BuiltFunctionConstruct")) - .handler("app.lambda_handler") - .layers(Arrays.asList(pythonLayerVersion, layerVersion)) - .tracing(Tracing.ACTIVE) - .build(); - // add SkipBuild Metadata, so SAM will skip building this function - CfnFunction cfnPreBuiltFunctionPythonRuntime = (CfnFunction) preBuiltFunctionPythonRuntime.getNode() - .getDefaultChild(); - cfnPreBuiltFunctionPythonRuntime.addMetadata("SkipBuild", true); - - // Normal Lambda Function with bundled Asset will be built by CDK - Function bundledFunctionPythonRuntime = Function.Builder.create(this, "BundledFunctionPythonRuntime") - .runtime(Runtime.PYTHON_3_7) - .code(Code.fromAsset("../../src/python/BundledFunctionConstruct/", - AssetOptions.builder().bundling( - BundlingOptions.builder() - .command(Arrays.asList("/bin/sh", "-c", "rm -rf /tmp/asset-input && mkdir /tmp/asset-input && cp * /tmp/asset-input && cd /tmp/asset-input && pip install -r requirements.txt -t . && cp -R /tmp/asset-input/* /asset-output")) - .image(Runtime.PYTHON_3_7.getBundlingImage()) - .build() - ).build() - )) - .handler("app.lambda_handler") - .layers(Arrays.asList(bundledLayerVersionPythonRuntime, pythonLayerVersion)) - .timeout(Duration.seconds(120)) - .tracing(Tracing.ACTIVE) - .build(); - - // NodeJs Runtime - //Layers - LayerVersion layerVersionNodeJsRuntime = LayerVersion.Builder.create(this, "LayerVersionNodeJsRuntime") - .compatibleRuntimes(Arrays.asList(Runtime.NODEJS_14_X)) - .code(Code.fromAsset("../../src/nodejs/layers/LayerVersion")) - .build(); - // add SAM metadata to build layer - CfnLayerVersion cfnLayerVersionNodeJsRuntime = (CfnLayerVersion) layerVersionNodeJsRuntime.getNode().getDefaultChild(); - cfnLayerVersionNodeJsRuntime.addMetadata("BuildMethod", "nodejs14.x"); - - NodejsFunction nodejsFunction = NodejsFunction.Builder.create(this, "NodejsFunction") - .runtime(Runtime.NODEJS_14_X) - .entry("../../src/nodejs/NodeJsFunctionConstruct/app.ts") - .depsLockFilePath("../../src/nodejs/NodeJsFunctionConstruct/package-lock.json") - .handler("lambdaHandler") - .layers(Arrays.asList(layerVersionNodeJsRuntime)) - .tracing(Tracing.ACTIVE) - .bundling(software.amazon.awscdk.services.lambda.nodejs.BundlingOptions.builder() - .externalModules( - Arrays.asList("/opt/nodejs/layer_version_dependency") - ).build() - ).build(); - - // Normal Lambda Function Construct - NodeJs Runtime - Function functionNodeJsRuntime = Function.Builder.create(this, "FunctionNodeJsRuntime") - .runtime(Runtime.NODEJS_14_X) - .code(Code.fromAsset("../../src/nodejs/FunctionConstruct")) - .handler("app.lambdaHandler") - .layers(Arrays.asList(layerVersionNodeJsRuntime)) - .tracing(Tracing.ACTIVE) - .build(); - - // Normal Lambda Function Construct - NodeJs Runtime - with skip build metadata - Function preBuiltFunctionNodeJsRuntime = Function.Builder.create(this, "PreBuiltFunctionNodeJsRuntime") - .runtime(Runtime.NODEJS_14_X) - .code(Code.fromAsset("../../src/nodejs/BuiltFunctionConstruct")) - .handler("app.lambdaHandler") - .layers(Arrays.asList(layerVersionNodeJsRuntime)) - .tracing(Tracing.ACTIVE) - .build(); - // add SkipBuild Metadata, so SAM will skip building this function - CfnFunction cfnPreBuiltFunctionNodeJsRuntime = (CfnFunction) preBuiltFunctionNodeJsRuntime.getNode().getDefaultChild(); - cfnPreBuiltFunctionNodeJsRuntime.addMetadata("SkipBuild", true); - - // Go Runtime - GoFunction goFunction = GoFunction.Builder.create(this, "GoFunction") - .entry("../../src/go/GoFunctionConstruct") - .bundling(software.amazon.awscdk.services.lambda.go.BundlingOptions.builder() - .forcedDockerBundling(true).build()) - .build(); - - // Normal Lambda Function Construct - Go Runtime - Function functionGoRuntime = Function.Builder.create(this, "FunctionGoRuntime") - .runtime(Runtime.GO_1_X) - .code(Code.fromAsset("../../src/go/FunctionConstruct")) - .handler("FunctionConstruct") - .build(); - - // Image Package Type Functions - // One way to define an Image Package Type Function - DockerImageFunction dockerImageFunction = DockerImageFunction.Builder.create(this, "DockerImageFunction") - .code(DockerImageCode.fromImageAsset("../../src/docker/DockerImageFunctionConstruct", - AssetImageCodeProps.builder().file("Dockerfile").build() - ) - ).tracing(Tracing.ACTIVE) - .build(); - - // another way - Function functionImageAsset = Function.Builder.create(this, "FunctionImageAsset") - .code(Code.fromAssetImage("../../src/docker/FunctionConstructWithImageAssetCode", - AssetImageCodeProps.builder().file("Dockerfile").build())) - .handler(Handler.FROM_IMAGE) - .runtime(Runtime.FROM_IMAGE) - .tracing(Tracing.ACTIVE) - .build(); - - // both ways work when 'file' is a path via subfolders to the Dockerfile - // this is useful when multiple docker images share some common code - DockerImageFunction dockerImageFunctionWithSharedCode = DockerImageFunction.Builder.create(this, "DockerImageFunctionWithSharedCode") - .code(DockerImageCode.fromImageAsset("../../src/docker/ImagesWithSharedCode", - AssetImageCodeProps.builder().file("DockerImageFunctionWithSharedCode/Dockerfile").build() - ) - ).tracing(Tracing.ACTIVE) - .build(); - - Function functionImageAssetWithSharedCode = Function.Builder.create(this, "FunctionImageAssetWithSharedCode") - .code(Code.fromAssetImage("../../src/docker/ImagesWithSharedCode", - AssetImageCodeProps.builder().file("FunctionImageAssetWithSharedCode/Dockerfile").build())) - .handler(Handler.FROM_IMAGE) - .runtime(Runtime.FROM_IMAGE) - .tracing(Tracing.ACTIVE) - .build(); - - //Rest APIs - - // Spec Rest Api - SpecRestApi.Builder.create(this, "SpecRestAPI") - .apiDefinition(ApiDefinition.fromAsset("../../src/rest-api-definition.yaml")) - .build(); - - // Role to be used as credentials for the Spec rest APi - // it is used inside the spec rest api definition file - Role.Builder.create(this, "SpecRestApiRole") - .assumedBy(new ServicePrincipal("apigateway.amazonaws.com")) - .roleName("SpecRestApiRole") - .build() - .addToPolicy( - PolicyStatement.Builder.create() - .actions(Arrays.asList("lambda:InvokeFunction")) - .resources(Arrays.asList("*")) - .build() - ); - - // Rest Api - RestApi restApi = new RestApi(this, "RestAPI"); - Resource normalRootResource = restApi.getRoot().addResource("restapis") - .addResource("normal"); - - normalRootResource.addResource("pythonFunction") - .addMethod("GET", new LambdaIntegration(pythonFunction)); - normalRootResource.addResource("functionPythonRuntime") - .addMethod("GET", new LambdaIntegration(functionPythonRuntime)); - normalRootResource.addResource("preBuiltFunctionPythonRuntime") - .addMethod("GET", new LambdaIntegration(preBuiltFunctionPythonRuntime)); - normalRootResource.addResource("bundledFunctionPythonRuntime") - .addMethod("GET", new LambdaIntegration(bundledFunctionPythonRuntime)); - normalRootResource.addResource("nodejsFunction") - .addMethod("GET", new LambdaIntegration(nodejsFunction)); - normalRootResource.addResource("functionNodeJsRuntime") - .addMethod("GET", new LambdaIntegration(functionNodeJsRuntime)); - normalRootResource.addResource("preBuiltFunctionNodeJsRuntime") - .addMethod("GET", new LambdaIntegration(preBuiltFunctionNodeJsRuntime)); - normalRootResource.addResource("goFunction") - .addMethod("GET", new LambdaIntegration(goFunction)); - normalRootResource.addResource("functionGoRuntime") - .addMethod("GET", new LambdaIntegration(functionGoRuntime)); - normalRootResource.addResource("dockerImageFunction") - .addMethod("GET", new LambdaIntegration(dockerImageFunction)); - normalRootResource.addResource("functionImageAsset") - .addMethod("GET", new LambdaIntegration(functionImageAsset)); - normalRootResource.addResource("dockerImageFunctionWithSharedCode") - .addMethod("GET", new LambdaIntegration(dockerImageFunctionWithSharedCode)); - normalRootResource.addResource("functionImageAssetWithSharedCode") - .addMethod("GET", new LambdaIntegration(functionImageAssetWithSharedCode)); - - // Nested Stack - new NestedStack1(this, "NestedStack"); - - } -} diff --git a/tests/iac_integration/cdk/testdata/cdk_v1/java/src/main/java/com/myorg/NestedStack1.java b/tests/iac_integration/cdk/testdata/cdk_v1/java/src/main/java/com/myorg/NestedStack1.java deleted file mode 100644 index cea2e65260..0000000000 --- a/tests/iac_integration/cdk/testdata/cdk_v1/java/src/main/java/com/myorg/NestedStack1.java +++ /dev/null @@ -1,64 +0,0 @@ -package com.myorg; - -import org.jetbrains.annotations.NotNull; -import software.amazon.awscdk.core.Construct; -import software.amazon.awscdk.core.NestedStack; -import software.amazon.awscdk.services.apigatewayv2.AddRoutesOptions; -import software.amazon.awscdk.services.apigatewayv2.HttpApi; -import software.amazon.awscdk.services.apigatewayv2.HttpMethod; -import software.amazon.awscdk.services.apigatewayv2.integrations.HttpLambdaIntegration; -import software.amazon.awscdk.services.lambda.Runtime; -import software.amazon.awscdk.services.lambda.*; -import software.amazon.awscdk.services.lambda.python.PythonFunction; -import software.amazon.awscdk.services.lambda.python.PythonLayerVersion; -import software.amazon.awscdk.services.logs.RetentionDays; - -import java.util.Arrays; - -public class NestedStack1 extends NestedStack { - - public NestedStack1(@NotNull Construct scope, @NotNull String id) { - super(scope, id); - - // Python Runtime - // Layers - PythonLayerVersion pythonLayerVersion = PythonLayerVersion.Builder - .create(this, "PythonLayerVersion") - .compatibleRuntimes(Arrays.asList(Runtime.PYTHON_3_7, Runtime.PYTHON_3_8, - Runtime.PYTHON_3_9)) - .entry("../../src/python/layers/PythonLayerVersion") - .build(); - - LayerVersion layerVersion = LayerVersion.Builder - .create(this, "LayerVersion") - .compatibleRuntimes(Arrays.asList(Runtime.PYTHON_3_7, Runtime.PYTHON_3_8, - Runtime.PYTHON_3_9)) - .code(Code.fromAsset("../../src/python/layers/LayerVersion")) - .build(); - // add SAM metadata to build layer - CfnLayerVersion cfnLayerVersion = (CfnLayerVersion) layerVersion.getNode().getDefaultChild(); - cfnLayerVersion.addMetadata("BuildMethod", "python3.7"); - - // ZIP package type Functions - // Functions Built by CDK - Runtime Functions Constructs - PythonFunction nestedPythonFunction = PythonFunction.Builder - .create(this, "NestedPythonFunction") - .entry("../../src/python/NestedPythonFunctionConstruct") - .index("app.py") - .handler("lambda_handler") - .runtime(Runtime.PYTHON_3_9) - .logRetention(RetentionDays.THREE_MONTHS) - .layers(Arrays.asList(pythonLayerVersion, layerVersion)) - .tracing(Tracing.ACTIVE) - .build(); - - HttpApi httpApi = new HttpApi(this, "httpAPi"); - - httpApi.addRoutes(AddRoutesOptions.builder() - .path("/httpapis/nestedPythonFunction") - .methods(Arrays.asList(HttpMethod.GET)) - .integration(new HttpLambdaIntegration("httpApiRandomNameIntegration", nestedPythonFunction)) - .build() - ); - } -} diff --git a/tests/iac_integration/cdk/testdata/cdk_v1/python/app.py b/tests/iac_integration/cdk/testdata/cdk_v1/python/app.py deleted file mode 100644 index be87c07f11..0000000000 --- a/tests/iac_integration/cdk/testdata/cdk_v1/python/app.py +++ /dev/null @@ -1,10 +0,0 @@ -#!/usr/bin/env python3 -from aws_cdk import core - -from python.python_stack import PythonStack - - -app = core.App() -PythonStack(app, "TestStack") - -app.synth() diff --git a/tests/iac_integration/cdk/testdata/cdk_v1/python/cdk.json b/tests/iac_integration/cdk/testdata/cdk_v1/python/cdk.json deleted file mode 100644 index 05b65aa6c3..0000000000 --- a/tests/iac_integration/cdk/testdata/cdk_v1/python/cdk.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "app": "python3 -m venv .env && ./.env/bin/python -m pip install -r requirements.txt && ./.env/bin/python app.py", - "context": { - - } -} diff --git a/tests/iac_integration/cdk/testdata/cdk_v1/python/python/nested_stack.py b/tests/iac_integration/cdk/testdata/cdk_v1/python/python/nested_stack.py deleted file mode 100644 index eb697579c1..0000000000 --- a/tests/iac_integration/cdk/testdata/cdk_v1/python/python/nested_stack.py +++ /dev/null @@ -1,61 +0,0 @@ -from typing import cast - -from aws_cdk import ( - core as cdk, - aws_lambda as lambda1, -) -from aws_cdk.aws_apigatewayv2 import HttpApi, HttpMethod -from aws_cdk.aws_apigatewayv2_integrations import HttpLambdaIntegration -from aws_cdk.aws_lambda import CfnLayerVersion -from aws_cdk.aws_lambda_python import PythonLayerVersion, PythonFunction - - -class NestedStack1(cdk.NestedStack): - def __init__(self, scope: cdk.Construct, construct_id: str, **kwargs) -> None: - super().__init__(scope, construct_id, **kwargs) - - # Python Runtime - # Layers - python_layer_version = PythonLayerVersion( - self, - "PythonLayerVersion", - compatible_runtimes=[ - lambda1.Runtime.PYTHON_3_7, - lambda1.Runtime.PYTHON_3_8, - lambda1.Runtime.PYTHON_3_9, - ], - entry="../../src/python/layers/PythonLayerVersion", - ) - layer_version = lambda1.LayerVersion( - self, - "LayerVersion", - compatible_runtimes=[ - lambda1.Runtime.PYTHON_3_7, - lambda1.Runtime.PYTHON_3_8, - lambda1.Runtime.PYTHON_3_9, - ], - code=lambda1.Code.from_asset("../../src/python/layers/LayerVersion"), - ) - # add SAM metadata to build layer - cfn_layer_version = cast(CfnLayerVersion, layer_version.node.default_child) - cfn_layer_version.add_metadata("BuildMethod", "python3.7") - - # ZIP package type Functions - # Functions Built by CDK - Runtime Functions Constructs - nested_python_function = PythonFunction( - self, - "NestedPythonFunction", - entry="../../src/python/NestedPythonFunctionConstruct", - index="app.py", - handler="lambda_handler", - runtime=lambda1.Runtime.PYTHON_3_9, - layers=[python_layer_version, layer_version], - tracing=lambda1.Tracing.ACTIVE, - ) - http_api = HttpApi(self, "httpAPi") - - http_api.add_routes( - path="/httpapis/nestedPythonFunction", - methods=[HttpMethod.GET], - integration=HttpLambdaIntegration("httpApiRandomNameIntegration", nested_python_function), - ) diff --git a/tests/iac_integration/cdk/testdata/cdk_v1/python/python/python_stack.py b/tests/iac_integration/cdk/testdata/cdk_v1/python/python/python_stack.py deleted file mode 100644 index 78b884883f..0000000000 --- a/tests/iac_integration/cdk/testdata/cdk_v1/python/python/python_stack.py +++ /dev/null @@ -1,323 +0,0 @@ -import os -from pathlib import Path -from typing import cast - -from aws_cdk import core as cdk, aws_lambda as lambda1, aws_apigateway as apigw, aws_logs as logs -from aws_cdk.aws_apigateway import LambdaIntegration -from aws_cdk.aws_lambda_nodejs import NodejsFunction, BundlingOptions as NodeJsBundlingOptions -from aws_cdk.aws_lambda_go import GoFunction, BundlingOptions as GoBundlingOptions -from aws_cdk.aws_lambda_python import PythonFunction, PythonLayerVersion -from aws_cdk.aws_iam import Role, ServicePrincipal, PolicyStatement -from aws_cdk.aws_lambda import CfnFunction, CfnLayerVersion -from aws_cdk.core import BundlingOptions - -from .nested_stack import NestedStack1 - - -class PythonStack(cdk.Stack): - def __init__(self, scope: cdk.Construct, construct_id: str, **kwargs) -> None: - super().__init__(scope, construct_id, **kwargs) - - # Python Runtime - # Layers - python_layer_version = PythonLayerVersion( - self, - "PythonLayerVersion", - compatible_runtimes=[ - lambda1.Runtime.PYTHON_3_7, - lambda1.Runtime.PYTHON_3_8, - lambda1.Runtime.PYTHON_3_9, - ], - entry="../../src/python/layers/PythonLayerVersion", - ) - layer_version = lambda1.LayerVersion( - self, - "LayerVersion", - compatible_runtimes=[ - lambda1.Runtime.PYTHON_3_7, - lambda1.Runtime.PYTHON_3_8, - lambda1.Runtime.PYTHON_3_9, - ], - code=lambda1.Code.from_asset("../../src/python/layers/LayerVersion"), - ) - # add SAM metadata to build layer - cfn_layer_version = cast(CfnLayerVersion, layer_version.node.default_child) - cfn_layer_version.add_metadata("BuildMethod", "python3.7") - - # Lambda LayerVersion with bundled Asset that will be built by CDK - bundled_layer_version_python_runtime = lambda1.LayerVersion( - self, - "BundledLayerVersionPythonRuntime", - compatible_runtimes=[ - lambda1.Runtime.PYTHON_3_7, - lambda1.Runtime.PYTHON_3_8, - lambda1.Runtime.PYTHON_3_9, - ], - code=lambda1.Code.from_asset( - "../../src/python/layers/BundledLayerVersion", - bundling=BundlingOptions( - command=[ - "/bin/sh", - "-c", - "rm -rf /tmp/asset-input && mkdir /tmp/asset-input && cp * /tmp/asset-input && cd /tmp/asset-input && pip install -r requirements.txt -t . && mkdir /asset-output/python && cp -R /tmp/asset-input/* /asset-output/python", - ], - image=lambda1.Runtime.PYTHON_3_7.bundling_image, - user="root", - ), - ), - ) - - # ZIP package type Functions - # Functions Built by CDK - Runtime Functions Constructs - python_function = PythonFunction( - self, - "PythonFunction", - entry="../../src/python/PythonFunctionConstruct", - index="app.py", - handler="lambda_handler", - runtime=lambda1.Runtime.PYTHON_3_9, - function_name="pythonFunc", # we need the name to use it in the API definition file - log_retention=logs.RetentionDays.THREE_MONTHS, - layers=[python_layer_version, layer_version], - tracing=lambda1.Tracing.ACTIVE, - ) - - # Normal Lambda Function Construct - Python Runtime - function_python_runtime = lambda1.Function( - self, - "FunctionPythonRuntime", - runtime=lambda1.Runtime.PYTHON_3_7, - code=lambda1.Code.from_asset("../../src/python/FunctionConstruct"), - handler="app.lambda_handler", - layers=[python_layer_version, layer_version], - tracing=lambda1.Tracing.ACTIVE, - ) - - # Normal Lambda Function Construct - Python Runtime - with skip build metadata - pre_built_function_python_runtime = lambda1.Function( - self, - "PreBuiltFunctionPythonRuntime", - runtime=lambda1.Runtime.PYTHON_3_7, - code=lambda1.Code.from_asset("../../src/python/BuiltFunctionConstruct"), - handler="app.lambda_handler", - layers=[python_layer_version, layer_version], - tracing=lambda1.Tracing.ACTIVE, - ) - # add SkipBuild Metadata, so SAM will skip building self function - cfn_pre_built_function_python_runtime = cast(CfnFunction, pre_built_function_python_runtime.node.default_child) - cfn_pre_built_function_python_runtime.add_metadata("SkipBuild", True) - - # Normal Lambda Function with bundled Asset will be built by CDK - bundled_function_python_runtime = lambda1.Function( - self, - "BundledFunctionPythonRuntime", - runtime=lambda1.Runtime.PYTHON_3_7, - code=lambda1.Code.from_asset( - "../../src/python/BundledFunctionConstruct/", - bundling=BundlingOptions( - command=[ - "/bin/sh", - "-c", - "rm -rf /tmp/asset-input && mkdir /tmp/asset-input && cp * /tmp/asset-input && cd /tmp/asset-input && pip install -r requirements.txt -t . && cp -R /tmp/asset-input/* /asset-output", - ], - image=lambda1.Runtime.PYTHON_3_7.bundling_image, - user="root", - ), - ), - handler="app.lambda_handler", - layers=[ - bundled_layer_version_python_runtime, - python_layer_version, - ], - timeout=cdk.Duration.seconds(120), - tracing=lambda1.Tracing.ACTIVE, - ) - - # NodeJs Runtime - # Layers - layer_version_node_js_runtime = lambda1.LayerVersion( - self, - "LayerVersionNodeJsRuntime", - compatible_runtimes=[ - lambda1.Runtime.NODEJS_14_X, - ], - code=lambda1.Code.from_asset("../../src/nodejs/layers/LayerVersion"), - ) - # add SAM metadata to build layer - cfn_layer_version_node_js_runtime = cast(CfnLayerVersion, layer_version_node_js_runtime.node.default_child) - cfn_layer_version_node_js_runtime.add_metadata("BuildMethod", "nodejs14.x") - - nodejs_function = NodejsFunction( - self, - "NodejsFunction", - runtime=lambda1.Runtime.NODEJS_14_X, - entry=os.path.join( - Path(__file__).resolve().parents[0], "../../../src/nodejs/NodeJsFunctionConstruct/app.ts" - ), - deps_lock_file_path=os.path.join( - Path(__file__).resolve().parents[0], "../../../src/nodejs/NodeJsFunctionConstruct/package-lock.json" - ), - bundling=NodeJsBundlingOptions( - external_modules=["/opt/nodejs/layer_version_dependency"], - ), - handler="lambdaHandler", - layers=[layer_version_node_js_runtime], - tracing=lambda1.Tracing.ACTIVE, - ) - - # Normal Lambda Function Construct - NodeJs Runtime - function_node_js_runtime = lambda1.Function( - self, - "FunctionNodeJsRuntime", - runtime=lambda1.Runtime.NODEJS_14_X, - code=lambda1.Code.from_asset("../../src/nodejs/FunctionConstruct"), - handler="app.lambdaHandler", - layers=[layer_version_node_js_runtime], - tracing=lambda1.Tracing.ACTIVE, - ) - - # Normal Lambda Function Construct - NodeJs Runtime - with skip build metadata - pre_built_function_node_js_runtime = lambda1.Function( - self, - "PreBuiltFunctionNodeJsRuntime", - runtime=lambda1.Runtime.NODEJS_14_X, - code=lambda1.Code.from_asset("../../src/nodejs/BuiltFunctionConstruct"), - handler="app.lambdaHandler", - layers=[layer_version_node_js_runtime], - tracing=lambda1.Tracing.ACTIVE, - ) - # add SkipBuild Metadata, so SAM will skip building self function - cfn_pre_built_function_node_js_runtime = cast( - CfnFunction, pre_built_function_node_js_runtime.node.default_child - ) - cfn_pre_built_function_node_js_runtime.add_metadata("SkipBuild", True) - - # Go Runtime - go_function = GoFunction( - self, - "GoFunction", - entry="../../src/go/GoFunctionConstruct", - bundling=GoBundlingOptions( - forced_docker_bundling=True, - ), - ) - - # Normal Lambda Function Construct - Go Runtime - function_go_runtime = lambda1.Function( - self, - "FunctionGoRuntime", - runtime=lambda1.Runtime.GO_1_X, - code=lambda1.Code.from_asset("../../src/go/FunctionConstruct"), - handler="FunctionConstruct", - ) - - # Image Package Type Functions - - # One way to define an Image Package Type Function - docker_image_function = lambda1.DockerImageFunction( - self, - "DockerImageFunction", - code=lambda1.DockerImageCode.from_image_asset( - directory="../../src/docker/DockerImageFunctionConstruct", - file="Dockerfile", - ), - tracing=lambda1.Tracing.ACTIVE, - ) - - # another way - function_image_asset = lambda1.Function( - self, - "FunctionImageAsset", - code=lambda1.Code.from_asset_image( - directory="../../src/docker/FunctionConstructWithImageAssetCode", - file="Dockerfile", - ), - handler=lambda1.Handler.FROM_IMAGE, - runtime=lambda1.Runtime.FROM_IMAGE, - tracing=lambda1.Tracing.ACTIVE, - ) - - # both ways work when 'file' is a path via subfolders to the Dockerfile - # this is useful when multiple docker images share some common code - docker_image_function_with_shared_code = lambda1.DockerImageFunction( - self, - "DockerImageFunctionWithSharedCode", - code=lambda1.DockerImageCode.from_image_asset( - directory="../../src/docker/ImagesWithSharedCode", - file="DockerImageFunctionWithSharedCode/Dockerfile", - ), - tracing=lambda1.Tracing.ACTIVE, - ) - - function_image_asset_with_shared_code = lambda1.Function( - self, - "FunctionImageAssetWithSharedCode", - code=lambda1.Code.from_asset_image( - directory="../../src/docker/ImagesWithSharedCode", - file="FunctionImageAssetWithSharedCode/Dockerfile", - ), - handler=lambda1.Handler.FROM_IMAGE, - runtime=lambda1.Runtime.FROM_IMAGE, - tracing=lambda1.Tracing.ACTIVE, - ) - - # Rest APIs - - # Spec Rest Api - apigw.SpecRestApi( - self, - "SpecRestAPI", - api_definition=apigw.ApiDefinition.from_asset("../../src/rest-api-definition.yaml"), - ) - - # Role to be used as credentials for the Spec rest APi - # it is used inside the spec rest api definition file - Role( - self, - "SpecRestApiRole", - assumed_by=ServicePrincipal("apigateway.amazonaws.com"), - role_name="SpecRestApiRole", - ).add_to_policy( - PolicyStatement( - actions=["lambda:InvokeFunction"], - resources=["*"], - ) - ) - - # Rest Api - rest_api = apigw.RestApi(self, "RestAPI") - normal_root_resource = rest_api.root.add_resource("restapis").add_resource("normal") - normal_root_resource.add_resource("pythonFunction").add_method("GET", LambdaIntegration(python_function)) - normal_root_resource.add_resource("functionPythonRuntime").add_method( - "GET", LambdaIntegration(function_python_runtime) - ) - normal_root_resource.add_resource("preBuiltFunctionPythonRuntime").add_method( - "GET", LambdaIntegration(pre_built_function_python_runtime) - ) - normal_root_resource.add_resource("bundledFunctionPythonRuntime").add_method( - "GET", LambdaIntegration(bundled_function_python_runtime) - ) - normal_root_resource.add_resource("nodejsFunction").add_method("GET", LambdaIntegration(nodejs_function)) - normal_root_resource.add_resource("functionNodeJsRuntime").add_method( - "GET", LambdaIntegration(function_node_js_runtime) - ) - normal_root_resource.add_resource("preBuiltFunctionNodeJsRuntime").add_method( - "GET", LambdaIntegration(pre_built_function_node_js_runtime) - ) - normal_root_resource.add_resource("goFunction").add_method("GET", LambdaIntegration(go_function)) - normal_root_resource.add_resource("functionGoRuntime").add_method("GET", LambdaIntegration(function_go_runtime)) - normal_root_resource.add_resource("dockerImageFunction").add_method( - "GET", LambdaIntegration(docker_image_function) - ) - normal_root_resource.add_resource("functionImageAsset").add_method( - "GET", LambdaIntegration(function_image_asset) - ) - normal_root_resource.add_resource("dockerImageFunctionWithSharedCode").add_method( - "GET", LambdaIntegration(docker_image_function_with_shared_code) - ) - normal_root_resource.add_resource("functionImageAssetWithSharedCode").add_method( - "GET", LambdaIntegration(function_image_asset_with_shared_code) - ) - - # Nested Stack - NestedStack1(self, "NestedStack") diff --git a/tests/iac_integration/cdk/testdata/cdk_v1/python/requirements.txt b/tests/iac_integration/cdk/testdata/cdk_v1/python/requirements.txt deleted file mode 100644 index dcde485867..0000000000 --- a/tests/iac_integration/cdk/testdata/cdk_v1/python/requirements.txt +++ /dev/null @@ -1,8 +0,0 @@ -aws-cdk.aws-apigateway<2.0.0 -aws-cdk.aws-apigatewayv2<2.0.0 -aws-cdk.aws-apigatewayv2-integrations<2.0.0 -aws-cdk.aws-lambda<2.0.0 -aws-cdk.aws-lambda-go<2.0.0 -aws-cdk.aws-lambda-nodejs<2.0.0 -aws-cdk.aws-lambda-python<2.0.0 -aws-cdk.core<2.0.0 \ No newline at end of file diff --git a/tests/iac_integration/cdk/testdata/cdk_v1/typescript/bin/test-app.ts b/tests/iac_integration/cdk/testdata/cdk_v1/typescript/bin/test-app.ts deleted file mode 100644 index 277298f8bb..0000000000 --- a/tests/iac_integration/cdk/testdata/cdk_v1/typescript/bin/test-app.ts +++ /dev/null @@ -1,7 +0,0 @@ -#!/usr/bin/env node -import * as cdk from '@aws-cdk/core'; -import { CDKSupportDemoRootStack } from '../lib/test-stack'; - -const app = new cdk.App(); -new CDKSupportDemoRootStack(app, 'TestStack'); -app.synth(); \ No newline at end of file diff --git a/tests/iac_integration/cdk/testdata/cdk_v1/typescript/cdk.json b/tests/iac_integration/cdk/testdata/cdk_v1/typescript/cdk.json deleted file mode 100644 index 608fbbc197..0000000000 --- a/tests/iac_integration/cdk/testdata/cdk_v1/typescript/cdk.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "app": "npm install && npx ts-node --prefer-ts-exts bin/test-app.ts", - "context": { - - } -} diff --git a/tests/iac_integration/cdk/testdata/cdk_v1/typescript/lib/nested-stack.ts b/tests/iac_integration/cdk/testdata/cdk_v1/typescript/lib/nested-stack.ts deleted file mode 100644 index fc3416e2c8..0000000000 --- a/tests/iac_integration/cdk/testdata/cdk_v1/typescript/lib/nested-stack.ts +++ /dev/null @@ -1,58 +0,0 @@ -import * as cdk from '@aws-cdk/core'; -import * as lambda from '@aws-cdk/aws-lambda'; -import { HttpApi, HttpMethod } from '@aws-cdk/aws-apigatewayv2'; -import { HttpLambdaIntegration } from '@aws-cdk/aws-apigatewayv2-integrations'; -import { PythonFunction, PythonLayerVersion } from '@aws-cdk/aws-lambda-python'; -import {CfnLayerVersion} from "@aws-cdk/aws-lambda"; - -export class NestedStack1 extends cdk.NestedStack { - - constructor(scope: cdk.Construct, id: string, props?: cdk.NestedStackProps) { - super(scope, id, props); - - // Python Runtime - // Layers - const pythonLayerVersion = new PythonLayerVersion(this, 'PythonLayerVersion', { - compatibleRuntimes: [ - lambda.Runtime.PYTHON_3_7, - lambda.Runtime.PYTHON_3_8, - lambda.Runtime.PYTHON_3_9, - ], - entry: '../../src/python/layers/PythonLayerVersion', - }); - const layerVersion = new lambda.LayerVersion(this, 'LayerVersion', { - compatibleRuntimes: [ - lambda.Runtime.PYTHON_3_7, - lambda.Runtime.PYTHON_3_8, - lambda.Runtime.PYTHON_3_9, - ], - code: lambda.Code.fromAsset('../../src/python/layers/LayerVersion'), - }); - // add SAM metadata to build layer - const cfnLayerVersion = layerVersion.node.defaultChild as CfnLayerVersion; - cfnLayerVersion.addMetadata('BuildMethod', 'python3.7'); - - // ZIP package type Functions - // Functions Built by CDK - Runtime Functions Constructs - const nestedPythonFunction = new PythonFunction(this, 'NestedPythonFunction', { - entry: '../../src/python/NestedPythonFunctionConstruct', - index: 'app.py', - handler: 'lambda_handler', - runtime: lambda.Runtime.PYTHON_3_9, - layers: [pythonLayerVersion, layerVersion], - tracing: lambda.Tracing.ACTIVE, - }); - - const httpApi = new HttpApi(this, 'httpAPi', { - }); - - httpApi.addRoutes({ - path: '/httpapis/nestedPythonFunction', - methods: [HttpMethod.GET], - integration: new HttpLambdaIntegration('httpApiRandomNameIntegration', - nestedPythonFunction, {} - ), - }); - - } -} \ No newline at end of file diff --git a/tests/iac_integration/cdk/testdata/cdk_v1/typescript/lib/test-stack.ts b/tests/iac_integration/cdk/testdata/cdk_v1/typescript/lib/test-stack.ts deleted file mode 100644 index 9396cdb663..0000000000 --- a/tests/iac_integration/cdk/testdata/cdk_v1/typescript/lib/test-stack.ts +++ /dev/null @@ -1,279 +0,0 @@ -import * as path from 'path'; -import * as cdk from '@aws-cdk/core'; -import * as lambda from '@aws-cdk/aws-lambda'; -import * as apigw from '@aws-cdk/aws-apigateway'; -import { LambdaIntegration} from '@aws-cdk/aws-apigateway'; -import { NodejsFunction } from '@aws-cdk/aws-lambda-nodejs'; -import { GoFunction } from '@aws-cdk/aws-lambda-go'; -import { PythonFunction, PythonLayerVersion } from '@aws-cdk/aws-lambda-python'; -import {Role, ServicePrincipal, PolicyStatement} from '@aws-cdk/aws-iam'; -import { CfnFunction, CfnLayerVersion } from '@aws-cdk/aws-lambda'; -import {NestedStack1} from './nested-stack'; -import * as logs from '@aws-cdk/aws-logs'; - -export class CDKSupportDemoRootStack extends cdk.Stack { - constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) { - super(scope, id, props); - - // Python Runtime - // Layers - const pythonLayerVersion = new PythonLayerVersion(this, 'PythonLayerVersion', { - compatibleRuntimes: [ - lambda.Runtime.PYTHON_3_7, - lambda.Runtime.PYTHON_3_8, - lambda.Runtime.PYTHON_3_9, - ], - entry: '../../src/python/layers/PythonLayerVersion', - }); - const layerVersion = new lambda.LayerVersion(this, 'LayerVersion', { - compatibleRuntimes: [ - lambda.Runtime.PYTHON_3_7, - lambda.Runtime.PYTHON_3_8, - lambda.Runtime.PYTHON_3_9, - ], - code: lambda.Code.fromAsset('../../src/python/layers/LayerVersion'), - }); - // add SAM metadata to build layer - const cfnLayerVersion = layerVersion.node.defaultChild as CfnLayerVersion; - cfnLayerVersion.addMetadata('BuildMethod', 'python3.7'); - - // Lambda LayerVersion with bundled Asset that will be built by CDK - const bundledLayerVersionPythonRuntime = new lambda.LayerVersion(this, 'BundledLayerVersionPythonRuntime', { - compatibleRuntimes: [ - lambda.Runtime.PYTHON_3_7, - lambda.Runtime.PYTHON_3_8, - lambda.Runtime.PYTHON_3_9, - ], - code: lambda.Code.fromAsset('../../src/python/layers/BundledLayerVersion', { - bundling: { - command: [ - '/bin/sh', - '-c', - 'rm -rf /tmp/asset-input && mkdir /tmp/asset-input && cp * /tmp/asset-input && cd /tmp/asset-input && pip install -r requirements.txt -t . && mkdir /asset-output/python && cp -R /tmp/asset-input/* /asset-output/python', - ], - image: lambda.Runtime.PYTHON_3_7.bundlingImage, - user: 'root', - } - }), - }); - - // ZIP package type Functions - // Functions Built by CDK - Runtime Functions Constructs - const pythonFunction = new PythonFunction(this, 'PythonFunction', { - entry: '../../src/python/PythonFunctionConstruct', - index: 'app.py', - handler: 'lambda_handler', - runtime: lambda.Runtime.PYTHON_3_9, - functionName: 'pythonFunc', // we need the name to use it in the API definition file - logRetention: logs.RetentionDays.THREE_MONTHS, - layers: [pythonLayerVersion, layerVersion], - tracing: lambda.Tracing.ACTIVE, - }); - - // Normal Lambda Function Construct - Python Runtime - const functionPythonRuntime = new lambda.Function(this, 'FunctionPythonRuntime', { - runtime: lambda.Runtime.PYTHON_3_7, - code: lambda.Code.fromAsset('../../src/python/FunctionConstruct'), - handler: 'app.lambda_handler', - layers: [pythonLayerVersion, layerVersion], - tracing: lambda.Tracing.ACTIVE, - }); - - // Normal Lambda Function Construct - Python Runtime - with skip build metadata - const preBuiltFunctionPythonRuntime = new lambda.Function(this, 'PreBuiltFunctionPythonRuntime', { - runtime: lambda.Runtime.PYTHON_3_7, - code: lambda.Code.fromAsset('../../src/python/BuiltFunctionConstruct'), - handler: 'app.lambda_handler', - layers: [pythonLayerVersion, layerVersion], - tracing: lambda.Tracing.ACTIVE, - }); - // add SkipBuild Metadata, so SAM will skip building this function - const cfnPreBuiltFunctionPythonRuntime = preBuiltFunctionPythonRuntime.node.defaultChild as CfnFunction; - cfnPreBuiltFunctionPythonRuntime.addMetadata('SkipBuild', true); - - // Normal Lambda Function with bundled Asset will be built by CDK - const bundledFunctionPythonRuntime = new lambda.Function(this, 'BundledFunctionPythonRuntime', { - runtime: lambda.Runtime.PYTHON_3_7, - code: lambda.Code.fromAsset('../../src/python/BundledFunctionConstruct/', { - bundling: { - command: [ - '/bin/sh', - '-c', - 'rm -rf /tmp/asset-input && mkdir /tmp/asset-input && cp * /tmp/asset-input && cd /tmp/asset-input && pip install -r requirements.txt -t . && cp -R /tmp/asset-input/* /asset-output', - ], - image: lambda.Runtime.PYTHON_3_7.bundlingImage, - user: 'root', - } - }), - handler: "app.lambda_handler", - layers: [bundledLayerVersionPythonRuntime, pythonLayerVersion], - timeout: cdk.Duration.seconds(120), - tracing: lambda.Tracing.ACTIVE, - }); - - // NodeJs Runtime - //Layers - const layerVersionNodeJsRuntime = new lambda.LayerVersion(this, 'LayerVersionNodeJsRuntime', { - compatibleRuntimes: [ - lambda.Runtime.NODEJS_14_X, - ], - code: lambda.Code.fromAsset('../../src/nodejs/layers/LayerVersion'), - }); - // add SAM metadata to build layer - const cfnLayerVersionNodeJsRuntime = layerVersionNodeJsRuntime.node.defaultChild as CfnLayerVersion; - cfnLayerVersionNodeJsRuntime.addMetadata('BuildMethod', 'nodejs14.x'); - - const nodejsFunction = new NodejsFunction(this, 'NodejsFunction', { - runtime: lambda.Runtime.NODEJS_14_X, - entry: path.join(__dirname, '../../../src/nodejs/NodeJsFunctionConstruct/app.ts'), - depsLockFilePath: path.join(__dirname, '../../../src/nodejs/NodeJsFunctionConstruct/package-lock.json'), - bundling: { - externalModules: ['/opt/nodejs/layer_version_dependency'], - }, - handler: 'lambdaHandler', - layers: [layerVersionNodeJsRuntime], - tracing: lambda.Tracing.ACTIVE, - }); - - // Normal Lambda Function Construct - NodeJs Runtime - const functionNodeJsRuntime = new lambda.Function(this, 'FunctionNodeJsRuntime', { - runtime: lambda.Runtime.NODEJS_14_X, - code: lambda.Code.fromAsset('../../src/nodejs/FunctionConstruct'), - handler: 'app.lambdaHandler', - layers: [layerVersionNodeJsRuntime], - tracing: lambda.Tracing.ACTIVE, - }); - - // Normal Lambda Function Construct - NodeJs Runtime - with skip build metadata - const preBuiltFunctionNodeJsRuntime = new lambda.Function(this, 'PreBuiltFunctionNodeJsRuntime', { - runtime: lambda.Runtime.NODEJS_14_X, - code: lambda.Code.fromAsset('../../src/nodejs/BuiltFunctionConstruct'), - handler: 'app.lambdaHandler', - layers: [layerVersionNodeJsRuntime], - tracing: lambda.Tracing.ACTIVE, - }); - // add SkipBuild Metadata, so SAM will skip building this function - const cfnPreBuiltFunctionNodeJsRuntime = preBuiltFunctionNodeJsRuntime.node.defaultChild as CfnFunction; - cfnPreBuiltFunctionNodeJsRuntime.addMetadata('SkipBuild', true); - - // Go Runtime - - const goFunction = new GoFunction(this, 'GoFunction', { - entry: '../../src/go/GoFunctionConstruct', - bundling: { - forcedDockerBundling: true, - }, - }); - - // Normal Lambda Function Construct - Go Runtime - const functionGoRuntime = new lambda.Function(this, 'FunctionGoRuntime', { - runtime: lambda.Runtime.GO_1_X, - code: lambda.Code.fromAsset('../../src/go/FunctionConstruct'), - handler: 'FunctionConstruct', - }); - - // Image Package Type Functions - - // One way to define an Image Package Type Function - const dockerImageFunction = new lambda.DockerImageFunction(this, "DockerImageFunction", { - code: lambda.DockerImageCode.fromImageAsset('../../src/docker/DockerImageFunctionConstruct', { - file: 'Dockerfile', - }), - tracing: lambda.Tracing.ACTIVE, - }); - - // another way - const functionImageAsset = new lambda.Function(this, "FunctionImageAsset", { - code: lambda.Code.fromAssetImage('../../src/docker/FunctionConstructWithImageAssetCode', { - file: 'Dockerfile', - }), - handler: lambda.Handler.FROM_IMAGE, - runtime: lambda.Runtime.FROM_IMAGE, - tracing: lambda.Tracing.ACTIVE, - }); - - // both ways work when 'file' is a path via subfolders to the Dockerfile - // this is useful when multiple docker images share some common code - const dockerImageFunctionWithSharedCode = new lambda.DockerImageFunction(this, "DockerImageFunctionWithSharedCode", { - code: lambda.DockerImageCode.fromImageAsset("../../src/docker/ImagesWithSharedCode", { - file: "DockerImageFunctionWithSharedCode/Dockerfile", - }), - tracing: lambda.Tracing.ACTIVE, - }); - - // another way - const functionImageAssetWithSharedCode = new lambda.Function(this, "FunctionImageAssetWithSharedCode", { - code: lambda.Code.fromAssetImage("../../src/docker/ImagesWithSharedCode", { - file: "FunctionImageAssetWithSharedCode/Dockerfile", - }), - handler: lambda.Handler.FROM_IMAGE, - runtime: lambda.Runtime.FROM_IMAGE, - tracing: lambda.Tracing.ACTIVE, - }); - - - //Rest APIs - - // Spec Rest Api - new apigw.SpecRestApi(this, 'SpecRestAPI', { - apiDefinition: apigw.ApiDefinition.fromAsset('../../src/rest-api-definition.yaml'), - }); - - // Role to be used as credentials for the Spec rest APi - // it is used inside the spec rest api definition file - new Role(this, 'SpecRestApiRole', { - assumedBy: new ServicePrincipal('apigateway.amazonaws.com'), - roleName: 'SpecRestApiRole', - }).addToPolicy(new PolicyStatement({ - actions: ['lambda:InvokeFunction'], - resources: ['*'], - })); - - // Rest Api - const restApi = new apigw.RestApi(this, 'RestAPI', {}); - const normalRootResource = restApi.root.addResource('restapis') - .addResource('normal'); - - normalRootResource.addResource('pythonFunction') - .addMethod('GET', new LambdaIntegration(pythonFunction)); - - normalRootResource.addResource('functionPythonRuntime') - .addMethod('GET', new LambdaIntegration(functionPythonRuntime)); - - normalRootResource.addResource('preBuiltFunctionPythonRuntime') - .addMethod('GET', new LambdaIntegration(preBuiltFunctionPythonRuntime)); - - normalRootResource.addResource('bundledFunctionPythonRuntime') - .addMethod('GET', new LambdaIntegration(bundledFunctionPythonRuntime)); - - normalRootResource.addResource('nodejsFunction') - .addMethod('GET', new LambdaIntegration(nodejsFunction)); - - normalRootResource.addResource('functionNodeJsRuntime') - .addMethod('GET', new LambdaIntegration(functionNodeJsRuntime)); - - normalRootResource.addResource('preBuiltFunctionNodeJsRuntime') - .addMethod('GET', new LambdaIntegration(preBuiltFunctionNodeJsRuntime)); - - normalRootResource.addResource('goFunction') - .addMethod('GET', new LambdaIntegration(goFunction)); - - normalRootResource.addResource('functionGoRuntime') - .addMethod('GET', new LambdaIntegration(functionGoRuntime)); - - normalRootResource.addResource('dockerImageFunction') - .addMethod('GET', new LambdaIntegration(dockerImageFunction)); - - normalRootResource.addResource('functionImageAsset') - .addMethod('GET', new LambdaIntegration(functionImageAsset)); - - normalRootResource.addResource('dockerImageFunctionWithSharedCode') - .addMethod('GET', new LambdaIntegration(dockerImageFunctionWithSharedCode)); - - normalRootResource.addResource('functionImageAssetWithSharedCode') - .addMethod('GET', new LambdaIntegration(functionImageAssetWithSharedCode)); - - // Nested Stack - new NestedStack1(this, 'NestedStack' ,{}); - } -} diff --git a/tests/iac_integration/cdk/testdata/cdk_v1/typescript/package.json b/tests/iac_integration/cdk/testdata/cdk_v1/typescript/package.json deleted file mode 100644 index 5f405323e1..0000000000 --- a/tests/iac_integration/cdk/testdata/cdk_v1/typescript/package.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "name": "api-cors-issue", - "version": "0.1.0", - "bin": { - "api-cors-issue": "bin/api-cors-issue.js" - }, - "scripts": { - "build": "tsc", - "cdk": "cdk" - }, - "devDependencies": { - "@aws-cdk/assert": "<2.0.0", - "@types/node": "10.17.27", - "aws-cdk": "<2.0.0", - "ts-node": "^9.0.0", - "typescript": "~3.9.7" - }, - "dependencies": { - "@aws-cdk/aws-apigateway": "<2.0.0", - "@aws-cdk/aws-apigatewayv2": "<2.0.0", - "@aws-cdk/aws-apigatewayv2-integrations": "<2.0.0", - "@aws-cdk/aws-lambda": "<2.0.0", - "@aws-cdk/aws-lambda-go": "<2.0.0", - "@aws-cdk/aws-lambda-nodejs": "<2.0.0", - "@aws-cdk/aws-lambda-python": "<2.0.0", - "@aws-cdk/core": "<2.0.0" - } -} diff --git a/tests/iac_integration/cdk/testdata/cdk_v1/typescript/tsconfig.json b/tests/iac_integration/cdk/testdata/cdk_v1/typescript/tsconfig.json deleted file mode 100644 index 9f8e8beabd..0000000000 --- a/tests/iac_integration/cdk/testdata/cdk_v1/typescript/tsconfig.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "compilerOptions": { - "target": "ES2018", - "module": "commonjs", - "lib": [ - "es2018" - ], - "declaration": true, - "strict": true, - "noImplicitAny": true, - "strictNullChecks": true, - "noImplicitThis": true, - "alwaysStrict": true, - "noUnusedLocals": false, - "noUnusedParameters": false, - "noImplicitReturns": true, - "noFallthroughCasesInSwitch": false, - "inlineSourceMap": true, - "inlineSources": true, - "experimentalDecorators": true, - "strictPropertyInitialization": false, - "typeRoots": [ - "./node_modules/@types" - ] - }, - "exclude": [ - "node_modules", - "cdk.out" - ] -} diff --git a/tests/iac_integration/cdk/testdata/cdk_v2/java/cdk.json b/tests/iac_integration/cdk/testdata/cdk_v2/java/cdk.json deleted file mode 100644 index d981a1fd3c..0000000000 --- a/tests/iac_integration/cdk/testdata/cdk_v2/java/cdk.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "app": "mvn versions:use-latest-versions -DallowMajorUpdates=false && mvn -e -q compile exec:java", - "context": { - - } -} diff --git a/tests/iac_integration/cdk/testdata/cdk_v2/java/pom.xml b/tests/iac_integration/cdk/testdata/cdk_v2/java/pom.xml deleted file mode 100644 index 8c55e74136..0000000000 --- a/tests/iac_integration/cdk/testdata/cdk_v2/java/pom.xml +++ /dev/null @@ -1,80 +0,0 @@ - - - 4.0.0 - - com.myorg - java - 0.1 - - - UTF-8 - - - - - - org.codehaus.mojo - versions-maven-plugin - 2.7 - - - software.amazon.awscdk:* - - - - - org.apache.maven.plugins - maven-compiler-plugin - 3.8.1 - - 1.8 - 1.8 - - - - - org.codehaus.mojo - exec-maven-plugin - 3.0.0 - - com.myorg.JavaApp - - - - - - - - - software.amazon.awscdk - aws-cdk-lib - 2.0.0 - - - software.amazon.awscdk - apigatewayv2-alpha - 2.0.0-alpha.0 - - - software.amazon.awscdk - apigatewayv2-integrations-alpha - 2.0.0-alpha.0 - - - software.amazon.awscdk - lambda-go-alpha - 2.0.0-alpha.0 - - - software.amazon.awscdk - lambda-python-alpha - 2.0.0-alpha.0 - - - software.constructs - constructs - 10.0.0 - - - diff --git a/tests/iac_integration/cdk/testdata/cdk_v2/java/src/main/java/com/myorg/JavaApp.java b/tests/iac_integration/cdk/testdata/cdk_v2/java/src/main/java/com/myorg/JavaApp.java deleted file mode 100644 index dee8a0e85a..0000000000 --- a/tests/iac_integration/cdk/testdata/cdk_v2/java/src/main/java/com/myorg/JavaApp.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.myorg; - -import software.amazon.awscdk.App; -import software.amazon.awscdk.StackProps; - -import java.util.Arrays; - -public class JavaApp { - public static void main(final String[] args) { - App app = new App(); - - new JavaStack(app, "TestStack", StackProps.builder() - .build()); - - app.synth(); - } -} diff --git a/tests/iac_integration/cdk/testdata/cdk_v2/java/src/main/java/com/myorg/JavaStack.java b/tests/iac_integration/cdk/testdata/cdk_v2/java/src/main/java/com/myorg/JavaStack.java deleted file mode 100644 index dbf9232001..0000000000 --- a/tests/iac_integration/cdk/testdata/cdk_v2/java/src/main/java/com/myorg/JavaStack.java +++ /dev/null @@ -1,270 +0,0 @@ -package com.myorg; - -import software.amazon.awscdk.*; -import software.amazon.awscdk.services.apigateway.Resource; -import software.amazon.awscdk.services.apigateway.*; -import software.amazon.awscdk.services.iam.PolicyStatement; -import software.amazon.awscdk.services.iam.Role; -import software.amazon.awscdk.services.iam.ServicePrincipal; -import software.amazon.awscdk.services.lambda.Runtime; -import software.amazon.awscdk.services.lambda.*; -import software.amazon.awscdk.services.lambda.go.alpha.GoFunction; -import software.amazon.awscdk.services.lambda.nodejs.NodejsFunction; -import software.amazon.awscdk.services.lambda.python.alpha.PythonFunction; -import software.amazon.awscdk.services.lambda.python.alpha.PythonLayerVersion; -import software.amazon.awscdk.services.logs.RetentionDays; -import software.amazon.awscdk.services.s3.assets.AssetOptions; -import software.constructs.Construct; -import com.myorg.NestedStack1; - -import java.util.Arrays; - -public class JavaStack extends Stack { - public JavaStack(final Construct scope, final String id) { - this(scope, id, null); - } - - public JavaStack(final Construct scope, final String id, final StackProps props) { - super(scope, id, props); - - // Python Runtime - // Layers - PythonLayerVersion pythonLayerVersion = PythonLayerVersion.Builder - .create(this, "PythonLayerVersion") - .compatibleRuntimes(Arrays.asList(Runtime.PYTHON_3_7, Runtime.PYTHON_3_8, - Runtime.PYTHON_3_9)) - .entry("../../src/python/layers/PythonLayerVersion") - .build(); - - LayerVersion layerVersion = LayerVersion.Builder - .create(this, "LayerVersion") - .compatibleRuntimes(Arrays.asList(Runtime.PYTHON_3_7, Runtime.PYTHON_3_8, - Runtime.PYTHON_3_9)) - .code(Code.fromAsset("../../src/python/layers/LayerVersion")) - .build(); - // add SAM metadata to build layer - CfnLayerVersion cfnLayerVersion = (CfnLayerVersion) layerVersion.getNode().getDefaultChild(); - cfnLayerVersion.addMetadata("BuildMethod", "python3.7"); - - // Lambda LayerVersion with bundled Asset that will be built by CDK - LayerVersion bundledLayerVersionPythonRuntime = LayerVersion.Builder - .create(this, "BundledLayerVersionPythonRuntime") - .compatibleRuntimes(Arrays.asList(Runtime.PYTHON_3_7, Runtime.PYTHON_3_8, - Runtime.PYTHON_3_9)) - .code(Code.fromAsset("../../src/python/layers/BundledLayerVersion", - AssetOptions.builder().bundling( - BundlingOptions.builder() - .image(Runtime.PYTHON_3_7.getBundlingImage()) - .command(Arrays.asList( - "/bin/sh", - "-c", - "rm -rf /tmp/asset-input && mkdir /tmp/asset-input && cp * /tmp/asset-input && cd /tmp/asset-input" + - " && pip install -r requirements.txt -t . && mkdir /asset-output/python && " + - "cp -R /tmp/asset-input/* /asset-output/python" - )).build() - ).build() - )).build(); - - // ZIP package type Functions - // Functions Built by CDK - Runtime Functions Constructs - PythonFunction pythonFunction = PythonFunction.Builder - .create(this, "PythonFunction") - .entry("../../src/python/PythonFunctionConstruct") - .index("app.py") - .handler("lambda_handler") - .runtime(Runtime.PYTHON_3_9) - .functionName("pythonFunc") // we need the name to use it in the API definition file - .logRetention(RetentionDays.THREE_MONTHS) - .layers(Arrays.asList(pythonLayerVersion, layerVersion)) - .tracing(Tracing.ACTIVE) - .build(); - - // Normal Lambda Function Construct - Python Runtime - Function functionPythonRuntime = Function.Builder.create(this, "FunctionPythonRuntime") - .runtime(Runtime.PYTHON_3_7) - .code(Code.fromAsset("../../src/python/FunctionConstruct")) - .handler("app.lambda_handler") - .layers(Arrays.asList(pythonLayerVersion, layerVersion)) - .tracing(Tracing.ACTIVE) - .build(); - - // Normal Lambda Function Construct - Python Runtime - with skip build metadata - Function preBuiltFunctionPythonRuntime = Function.Builder.create(this, "PreBuiltFunctionPythonRuntime") - .runtime(Runtime.PYTHON_3_7) - .code(Code.fromAsset("../../src/python/BuiltFunctionConstruct")) - .handler("app.lambda_handler") - .layers(Arrays.asList(pythonLayerVersion, layerVersion)) - .tracing(Tracing.ACTIVE) - .build(); - // add SkipBuild Metadata, so SAM will skip building this function - CfnFunction cfnPreBuiltFunctionPythonRuntime = (CfnFunction) preBuiltFunctionPythonRuntime.getNode() - .getDefaultChild(); - cfnPreBuiltFunctionPythonRuntime.addMetadata("SkipBuild", true); - - // Normal Lambda Function with bundled Asset will be built by CDK - Function bundledFunctionPythonRuntime = Function.Builder.create(this, "BundledFunctionPythonRuntime") - .runtime(Runtime.PYTHON_3_7) - .code(Code.fromAsset("../../src/python/BundledFunctionConstruct/", - AssetOptions.builder().bundling( - BundlingOptions.builder() - .command(Arrays.asList("/bin/sh", "-c", "rm -rf /tmp/asset-input && mkdir /tmp/asset-input && cp * /tmp/asset-input && cd /tmp/asset-input && pip install -r requirements.txt -t . && cp -R /tmp/asset-input/* /asset-output")) - .image(Runtime.PYTHON_3_7.getBundlingImage()) - .build() - ).build() - )) - .handler("app.lambda_handler") - .layers(Arrays.asList(bundledLayerVersionPythonRuntime, pythonLayerVersion)) - .timeout(Duration.seconds(120)) - .tracing(Tracing.ACTIVE) - .build(); - - // NodeJs Runtime - //Layers - LayerVersion layerVersionNodeJsRuntime = LayerVersion.Builder.create(this, "LayerVersionNodeJsRuntime") - .compatibleRuntimes(Arrays.asList(Runtime.NODEJS_14_X)) - .code(Code.fromAsset("../../src/nodejs/layers/LayerVersion")) - .build(); - // add SAM metadata to build layer - CfnLayerVersion cfnLayerVersionNodeJsRuntime = (CfnLayerVersion) layerVersionNodeJsRuntime.getNode().getDefaultChild(); - cfnLayerVersionNodeJsRuntime.addMetadata("BuildMethod", "nodejs14.x"); - - NodejsFunction nodejsFunction = NodejsFunction.Builder.create(this, "NodejsFunction") - .runtime(Runtime.NODEJS_14_X) - .entry("../../src/nodejs/NodeJsFunctionConstruct/app.ts") - .depsLockFilePath("../../src/nodejs/NodeJsFunctionConstruct/package-lock.json") - .handler("lambdaHandler") - .layers(Arrays.asList(layerVersionNodeJsRuntime)) - .tracing(Tracing.ACTIVE) - .bundling(software.amazon.awscdk.services.lambda.nodejs.BundlingOptions.builder() - .externalModules( - Arrays.asList("/opt/nodejs/layer_version_dependency") - ).build() - ).build(); - - // Normal Lambda Function Construct - NodeJs Runtime - Function functionNodeJsRuntime = Function.Builder.create(this, "FunctionNodeJsRuntime") - .runtime(Runtime.NODEJS_14_X) - .code(Code.fromAsset("../../src/nodejs/FunctionConstruct")) - .handler("app.lambdaHandler") - .layers(Arrays.asList(layerVersionNodeJsRuntime)) - .tracing(Tracing.ACTIVE) - .build(); - - // Normal Lambda Function Construct - NodeJs Runtime - with skip build metadata - Function preBuiltFunctionNodeJsRuntime = Function.Builder.create(this, "PreBuiltFunctionNodeJsRuntime") - .runtime(Runtime.NODEJS_14_X) - .code(Code.fromAsset("../../src/nodejs/BuiltFunctionConstruct")) - .handler("app.lambdaHandler") - .layers(Arrays.asList(layerVersionNodeJsRuntime)) - .tracing(Tracing.ACTIVE) - .build(); - // add SkipBuild Metadata, so SAM will skip building this function - CfnFunction cfnPreBuiltFunctionNodeJsRuntime = (CfnFunction) preBuiltFunctionNodeJsRuntime.getNode().getDefaultChild(); - cfnPreBuiltFunctionNodeJsRuntime.addMetadata("SkipBuild", true); - - // Go Runtime - GoFunction goFunction = GoFunction.Builder.create(this, "GoFunction") - .entry("../../src/go/GoFunctionConstruct") - .bundling(software.amazon.awscdk.services.lambda.go.alpha.BundlingOptions.builder() - .forcedDockerBundling(true).build()) - .build(); - - // Normal Lambda Function Construct - Go Runtime - Function functionGoRuntime = Function.Builder.create(this, "FunctionGoRuntime") - .runtime(Runtime.GO_1_X) - .code(Code.fromAsset("../../src/go/FunctionConstruct")) - .handler("FunctionConstruct") - .build(); - - // Image Package Type Functions - // One way to define an Image Package Type Function - DockerImageFunction dockerImageFunction = DockerImageFunction.Builder.create(this, "DockerImageFunction") - .code(DockerImageCode.fromImageAsset("../../src/docker/DockerImageFunctionConstruct", - AssetImageCodeProps.builder().file("Dockerfile").build() - ) - ).tracing(Tracing.ACTIVE) - .build(); - - // another way - Function functionImageAsset = Function.Builder.create(this, "FunctionImageAsset") - .code(Code.fromAssetImage("../../src/docker/FunctionConstructWithImageAssetCode", - AssetImageCodeProps.builder().file("Dockerfile").build())) - .handler(Handler.FROM_IMAGE) - .runtime(Runtime.FROM_IMAGE) - .tracing(Tracing.ACTIVE) - .build(); - - // both ways work when 'file' is a path via subfolders to the Dockerfile - // this is useful when multiple docker images share some common code - DockerImageFunction dockerImageFunctionWithSharedCode = DockerImageFunction.Builder.create(this, "DockerImageFunctionWithSharedCode") - .code(DockerImageCode.fromImageAsset("../../src/docker/ImagesWithSharedCode", - AssetImageCodeProps.builder().file("DockerImageFunctionWithSharedCode/Dockerfile").build() - ) - ).tracing(Tracing.ACTIVE) - .build(); - - Function functionImageAssetWithSharedCode = Function.Builder.create(this, "FunctionImageAssetWithSharedCode") - .code(Code.fromAssetImage("../../src/docker/ImagesWithSharedCode", - AssetImageCodeProps.builder().file("FunctionImageAssetWithSharedCode/Dockerfile").build())) - .handler(Handler.FROM_IMAGE) - .runtime(Runtime.FROM_IMAGE) - .tracing(Tracing.ACTIVE) - .build(); - - //Rest APIs - - // Spec Rest Api - SpecRestApi.Builder.create(this, "SpecRestAPI") - .apiDefinition(ApiDefinition.fromAsset("../../src/rest-api-definition.yaml")) - .build(); - - // Role to be used as credentials for the Spec rest APi - // it is used inside the spec rest api definition file - Role.Builder.create(this, "SpecRestApiRole") - .assumedBy(new ServicePrincipal("apigateway.amazonaws.com")) - .roleName("SpecRestApiRole") - .build() - .addToPolicy( - PolicyStatement.Builder.create() - .actions(Arrays.asList("lambda:InvokeFunction")) - .resources(Arrays.asList("*")) - .build() - ); - - // Rest Api - RestApi restApi = new RestApi(this, "RestAPI"); - Resource normalRootResource = restApi.getRoot().addResource("restapis") - .addResource("normal"); - - normalRootResource.addResource("pythonFunction") - .addMethod("GET", new LambdaIntegration(pythonFunction)); - normalRootResource.addResource("functionPythonRuntime") - .addMethod("GET", new LambdaIntegration(functionPythonRuntime)); - normalRootResource.addResource("preBuiltFunctionPythonRuntime") - .addMethod("GET", new LambdaIntegration(preBuiltFunctionPythonRuntime)); - normalRootResource.addResource("bundledFunctionPythonRuntime") - .addMethod("GET", new LambdaIntegration(bundledFunctionPythonRuntime)); - normalRootResource.addResource("nodejsFunction") - .addMethod("GET", new LambdaIntegration(nodejsFunction)); - normalRootResource.addResource("functionNodeJsRuntime") - .addMethod("GET", new LambdaIntegration(functionNodeJsRuntime)); - normalRootResource.addResource("preBuiltFunctionNodeJsRuntime") - .addMethod("GET", new LambdaIntegration(preBuiltFunctionNodeJsRuntime)); - normalRootResource.addResource("goFunction") - .addMethod("GET", new LambdaIntegration(goFunction)); - normalRootResource.addResource("functionGoRuntime") - .addMethod("GET", new LambdaIntegration(functionGoRuntime)); - normalRootResource.addResource("dockerImageFunction") - .addMethod("GET", new LambdaIntegration(dockerImageFunction)); - normalRootResource.addResource("functionImageAsset") - .addMethod("GET", new LambdaIntegration(functionImageAsset)); - normalRootResource.addResource("dockerImageFunctionWithSharedCode") - .addMethod("GET", new LambdaIntegration(dockerImageFunctionWithSharedCode)); - normalRootResource.addResource("functionImageAssetWithSharedCode") - .addMethod("GET", new LambdaIntegration(functionImageAssetWithSharedCode)); - - // Nested Stack - new NestedStack1(this, "NestedStack"); - - } -} diff --git a/tests/iac_integration/cdk/testdata/cdk_v2/java/src/main/java/com/myorg/NestedStack1.java b/tests/iac_integration/cdk/testdata/cdk_v2/java/src/main/java/com/myorg/NestedStack1.java deleted file mode 100644 index 505179e22f..0000000000 --- a/tests/iac_integration/cdk/testdata/cdk_v2/java/src/main/java/com/myorg/NestedStack1.java +++ /dev/null @@ -1,64 +0,0 @@ -package com.myorg; - -import org.jetbrains.annotations.NotNull; -import software.amazon.awscdk.NestedStack; -import software.amazon.awscdk.services.apigatewayv2.alpha.AddRoutesOptions; -import software.amazon.awscdk.services.apigatewayv2.alpha.HttpApi; -import software.amazon.awscdk.services.apigatewayv2.alpha.HttpMethod; -import software.amazon.awscdk.services.apigatewayv2.integrations.alpha.HttpLambdaIntegration; -import software.amazon.awscdk.services.lambda.Runtime; -import software.amazon.awscdk.services.lambda.*; -import software.amazon.awscdk.services.lambda.python.alpha.PythonFunction; -import software.amazon.awscdk.services.lambda.python.alpha.PythonLayerVersion; -import software.amazon.awscdk.services.logs.RetentionDays; -import software.constructs.Construct; - -import java.util.Arrays; - -public class NestedStack1 extends NestedStack { - - public NestedStack1(@NotNull Construct scope, @NotNull String id) { - super(scope, id); - - // Python Runtime - // Layers - PythonLayerVersion pythonLayerVersion = PythonLayerVersion.Builder - .create(this, "PythonLayerVersion") - .compatibleRuntimes(Arrays.asList(Runtime.PYTHON_3_7, Runtime.PYTHON_3_8, - Runtime.PYTHON_3_9)) - .entry("../../src/python/layers/PythonLayerVersion") - .build(); - - LayerVersion layerVersion = LayerVersion.Builder - .create(this, "LayerVersion") - .compatibleRuntimes(Arrays.asList(Runtime.PYTHON_3_7, Runtime.PYTHON_3_8, - Runtime.PYTHON_3_9)) - .code(Code.fromAsset("../../src/python/layers/LayerVersion")) - .build(); - // add SAM metadata to build layer - CfnLayerVersion cfnLayerVersion = (CfnLayerVersion) layerVersion.getNode().getDefaultChild(); - cfnLayerVersion.addMetadata("BuildMethod", "python3.7"); - - // ZIP package type Functions - // Functions Built by CDK - Runtime Functions Constructs - PythonFunction nestedPythonFunction = PythonFunction.Builder - .create(this, "NestedPythonFunction") - .entry("../../src/python/NestedPythonFunctionConstruct") - .index("app.py") - .handler("lambda_handler") - .runtime(Runtime.PYTHON_3_9) - .logRetention(RetentionDays.THREE_MONTHS) - .layers(Arrays.asList(pythonLayerVersion, layerVersion)) - .tracing(Tracing.ACTIVE) - .build(); - - HttpApi httpApi = new HttpApi(this, "httpAPi"); - - httpApi.addRoutes(AddRoutesOptions.builder() - .path("/httpapis/nestedPythonFunction") - .methods(Arrays.asList(HttpMethod.GET)) - .integration(new HttpLambdaIntegration("httpApiRandomNameIntegration", nestedPythonFunction)) - .build() - ); - } -} diff --git a/tests/iac_integration/cdk/testdata/cdk_v2/python/app.py b/tests/iac_integration/cdk/testdata/cdk_v2/python/app.py deleted file mode 100644 index c16cdfe67a..0000000000 --- a/tests/iac_integration/cdk/testdata/cdk_v2/python/app.py +++ /dev/null @@ -1,10 +0,0 @@ -#!/usr/bin/env python3 -from aws_cdk import App - -from python.python_stack import PythonStack - - -app = App() -PythonStack(app, "TestStack") - -app.synth() diff --git a/tests/iac_integration/cdk/testdata/cdk_v2/python/cdk.json b/tests/iac_integration/cdk/testdata/cdk_v2/python/cdk.json deleted file mode 100644 index 05b65aa6c3..0000000000 --- a/tests/iac_integration/cdk/testdata/cdk_v2/python/cdk.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "app": "python3 -m venv .env && ./.env/bin/python -m pip install -r requirements.txt && ./.env/bin/python app.py", - "context": { - - } -} diff --git a/tests/iac_integration/cdk/testdata/cdk_v2/python/python/__init__.py b/tests/iac_integration/cdk/testdata/cdk_v2/python/python/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/tests/iac_integration/cdk/testdata/cdk_v2/python/python/nested_stack.py b/tests/iac_integration/cdk/testdata/cdk_v2/python/python/nested_stack.py deleted file mode 100644 index 576aa882ef..0000000000 --- a/tests/iac_integration/cdk/testdata/cdk_v2/python/python/nested_stack.py +++ /dev/null @@ -1,59 +0,0 @@ -from typing import cast - -from aws_cdk import NestedStack, aws_lambda as lambda1 -from aws_cdk.aws_apigatewayv2_alpha import HttpApi, HttpMethod -from aws_cdk.aws_apigatewayv2_integrations_alpha import HttpLambdaIntegration -from aws_cdk.aws_lambda import CfnLayerVersion -from aws_cdk.aws_lambda_python_alpha import PythonLayerVersion, PythonFunction -from constructs import Construct - - -class NestedStack1(NestedStack): - def __init__(self, scope: Construct, construct_id: str, **kwargs) -> None: - super().__init__(scope, construct_id, **kwargs) - - # Python Runtime - # Layers - python_layer_version = PythonLayerVersion( - self, - "PythonLayerVersion", - compatible_runtimes=[ - lambda1.Runtime.PYTHON_3_7, - lambda1.Runtime.PYTHON_3_8, - lambda1.Runtime.PYTHON_3_9, - ], - entry="../../src/python/layers/PythonLayerVersion", - ) - layer_version = lambda1.LayerVersion( - self, - "LayerVersion", - compatible_runtimes=[ - lambda1.Runtime.PYTHON_3_7, - lambda1.Runtime.PYTHON_3_8, - lambda1.Runtime.PYTHON_3_9, - ], - code=lambda1.Code.from_asset("../../src/python/layers/LayerVersion"), - ) - # add SAM metadata to build layer - cfn_layer_version = cast(CfnLayerVersion, layer_version.node.default_child) - cfn_layer_version.add_metadata("BuildMethod", "python3.7") - - # ZIP package type Functions - # Functions Built by CDK - Runtime Functions Constructs - nested_python_function = PythonFunction( - self, - "NestedPythonFunction", - entry="../../src/python/NestedPythonFunctionConstruct", - index="app.py", - handler="lambda_handler", - runtime=lambda1.Runtime.PYTHON_3_9, - layers=[python_layer_version, layer_version], - tracing=lambda1.Tracing.ACTIVE, - ) - http_api = HttpApi(self, "httpAPi") - - http_api.add_routes( - path="/httpapis/nestedPythonFunction", - methods=[HttpMethod.GET], - integration=HttpLambdaIntegration("httpApiRandomNameIntegration", nested_python_function), - ) diff --git a/tests/iac_integration/cdk/testdata/cdk_v2/python/python/python_stack.py b/tests/iac_integration/cdk/testdata/cdk_v2/python/python/python_stack.py deleted file mode 100644 index b38a23e4af..0000000000 --- a/tests/iac_integration/cdk/testdata/cdk_v2/python/python/python_stack.py +++ /dev/null @@ -1,323 +0,0 @@ -import os -from pathlib import Path -from typing import cast - -from aws_cdk import Stack, Duration, BundlingOptions, aws_lambda as lambda1, aws_apigateway as apigw, aws_logs as logs -from aws_cdk.aws_apigateway import LambdaIntegration -from aws_cdk.aws_lambda_nodejs import NodejsFunction, BundlingOptions as NodeJsBundlingOptions -from aws_cdk.aws_lambda_go_alpha import GoFunction, BundlingOptions as GoBundlingOptions -from aws_cdk.aws_lambda_python_alpha import PythonFunction, PythonLayerVersion -from aws_cdk.aws_iam import Role, ServicePrincipal, PolicyStatement -from aws_cdk.aws_lambda import CfnFunction, CfnLayerVersion -from constructs import Construct - -from .nested_stack import NestedStack1 - - -class PythonStack(Stack): - def __init__(self, scope: Construct, construct_id: str, **kwargs) -> None: - super().__init__(scope, construct_id, **kwargs) - - # Python Runtime - # Layers - python_layer_version = PythonLayerVersion( - self, - "PythonLayerVersion", - compatible_runtimes=[ - lambda1.Runtime.PYTHON_3_7, - lambda1.Runtime.PYTHON_3_8, - lambda1.Runtime.PYTHON_3_9, - ], - entry="../../src/python/layers/PythonLayerVersion", - ) - layer_version = lambda1.LayerVersion( - self, - "LayerVersion", - compatible_runtimes=[ - lambda1.Runtime.PYTHON_3_7, - lambda1.Runtime.PYTHON_3_8, - lambda1.Runtime.PYTHON_3_9, - ], - code=lambda1.Code.from_asset("../../src/python/layers/LayerVersion"), - ) - # add SAM metadata to build layer - cfn_layer_version = cast(CfnLayerVersion, layer_version.node.default_child) - cfn_layer_version.add_metadata("BuildMethod", "python3.7") - - # Lambda LayerVersion with bundled Asset that will be built by CDK - bundled_layer_version_python_runtime = lambda1.LayerVersion( - self, - "BundledLayerVersionPythonRuntime", - compatible_runtimes=[ - lambda1.Runtime.PYTHON_3_7, - lambda1.Runtime.PYTHON_3_8, - lambda1.Runtime.PYTHON_3_9, - ], - code=lambda1.Code.from_asset( - "../../src/python/layers/BundledLayerVersion", - bundling=BundlingOptions( - command=[ - "/bin/sh", - "-c", - "rm -rf /tmp/asset-input && mkdir /tmp/asset-input && cp * /tmp/asset-input && cd /tmp/asset-input && pip install -r requirements.txt -t . && mkdir /asset-output/python && cp -R /tmp/asset-input/* /asset-output/python", - ], - image=lambda1.Runtime.PYTHON_3_7.bundling_image, - user="root", - ), - ), - ) - - # ZIP package type Functions - # Functions Built by CDK - Runtime Functions Constructs - python_function = PythonFunction( - self, - "PythonFunction", - entry="../../src/python/PythonFunctionConstruct", - index="app.py", - handler="lambda_handler", - runtime=lambda1.Runtime.PYTHON_3_9, - function_name="pythonFunc", # we need the name to use it in the API definition file - log_retention=logs.RetentionDays.THREE_MONTHS, - layers=[python_layer_version, layer_version], - tracing=lambda1.Tracing.ACTIVE, - ) - - # Normal Lambda Function Construct - Python Runtime - function_python_runtime = lambda1.Function( - self, - "FunctionPythonRuntime", - runtime=lambda1.Runtime.PYTHON_3_7, - code=lambda1.Code.from_asset("../../src/python/FunctionConstruct"), - handler="app.lambda_handler", - layers=[python_layer_version, layer_version], - tracing=lambda1.Tracing.ACTIVE, - ) - - # Normal Lambda Function Construct - Python Runtime - with skip build metadata - pre_built_function_python_runtime = lambda1.Function( - self, - "PreBuiltFunctionPythonRuntime", - runtime=lambda1.Runtime.PYTHON_3_7, - code=lambda1.Code.from_asset("../../src/python/BuiltFunctionConstruct"), - handler="app.lambda_handler", - layers=[python_layer_version, layer_version], - tracing=lambda1.Tracing.ACTIVE, - ) - # add SkipBuild Metadata, so SAM will skip building self function - cfn_pre_built_function_python_runtime = cast(CfnFunction, pre_built_function_python_runtime.node.default_child) - cfn_pre_built_function_python_runtime.add_metadata("SkipBuild", True) - - # Normal Lambda Function with bundled Asset will be built by CDK - bundled_function_python_runtime = lambda1.Function( - self, - "BundledFunctionPythonRuntime", - runtime=lambda1.Runtime.PYTHON_3_7, - code=lambda1.Code.from_asset( - "../../src/python/BundledFunctionConstruct/", - bundling=BundlingOptions( - command=[ - "/bin/sh", - "-c", - "rm -rf /tmp/asset-input && mkdir /tmp/asset-input && cp * /tmp/asset-input && cd /tmp/asset-input && pip install -r requirements.txt -t . && cp -R /tmp/asset-input/* /asset-output", - ], - image=lambda1.Runtime.PYTHON_3_7.bundling_image, - user="root", - ), - ), - handler="app.lambda_handler", - layers=[ - bundled_layer_version_python_runtime, - python_layer_version, - ], - timeout=Duration.seconds(120), - tracing=lambda1.Tracing.ACTIVE, - ) - - # NodeJs Runtime - # Layers - layer_version_node_js_runtime = lambda1.LayerVersion( - self, - "LayerVersionNodeJsRuntime", - compatible_runtimes=[ - lambda1.Runtime.NODEJS_14_X, - ], - code=lambda1.Code.from_asset("../../src/nodejs/layers/LayerVersion"), - ) - # add SAM metadata to build layer - cfn_layer_version_node_js_runtime = cast(CfnLayerVersion, layer_version_node_js_runtime.node.default_child) - cfn_layer_version_node_js_runtime.add_metadata("BuildMethod", "nodejs14.x") - - nodejs_function = NodejsFunction( - self, - "NodejsFunction", - runtime=lambda1.Runtime.NODEJS_14_X, - entry=os.path.join( - Path(__file__).resolve().parents[0], "../../../src/nodejs/NodeJsFunctionConstruct/app.ts" - ), - deps_lock_file_path=os.path.join( - Path(__file__).resolve().parents[0], "../../../src/nodejs/NodeJsFunctionConstruct/package-lock.json" - ), - bundling=NodeJsBundlingOptions( - external_modules=["/opt/nodejs/layer_version_dependency"], - ), - handler="lambdaHandler", - layers=[layer_version_node_js_runtime], - tracing=lambda1.Tracing.ACTIVE, - ) - - # Normal Lambda Function Construct - NodeJs Runtime - function_node_js_runtime = lambda1.Function( - self, - "FunctionNodeJsRuntime", - runtime=lambda1.Runtime.NODEJS_14_X, - code=lambda1.Code.from_asset("../../src/nodejs/FunctionConstruct"), - handler="app.lambdaHandler", - layers=[layer_version_node_js_runtime], - tracing=lambda1.Tracing.ACTIVE, - ) - - # Normal Lambda Function Construct - NodeJs Runtime - with skip build metadata - pre_built_function_node_js_runtime = lambda1.Function( - self, - "PreBuiltFunctionNodeJsRuntime", - runtime=lambda1.Runtime.NODEJS_14_X, - code=lambda1.Code.from_asset("../../src/nodejs/BuiltFunctionConstruct"), - handler="app.lambdaHandler", - layers=[layer_version_node_js_runtime], - tracing=lambda1.Tracing.ACTIVE, - ) - # add SkipBuild Metadata, so SAM will skip building self function - cfn_pre_built_function_node_js_runtime = cast( - CfnFunction, pre_built_function_node_js_runtime.node.default_child - ) - cfn_pre_built_function_node_js_runtime.add_metadata("SkipBuild", True) - - # Go Runtime - go_function = GoFunction( - self, - "GoFunction", - entry="../../src/go/GoFunctionConstruct", - bundling=GoBundlingOptions( - forced_docker_bundling=True, - ), - ) - - # Normal Lambda Function Construct - Go Runtime - function_go_runtime = lambda1.Function( - self, - "FunctionGoRuntime", - runtime=lambda1.Runtime.GO_1_X, - code=lambda1.Code.from_asset("../../src/go/FunctionConstruct"), - handler="FunctionConstruct", - ) - - # Image Package Type Functions - - # One way to define an Image Package Type Function - docker_image_function = lambda1.DockerImageFunction( - self, - "DockerImageFunction", - code=lambda1.DockerImageCode.from_image_asset( - directory="../../src/docker/DockerImageFunctionConstruct", - file="Dockerfile", - ), - tracing=lambda1.Tracing.ACTIVE, - ) - - # another way - function_image_asset = lambda1.Function( - self, - "FunctionImageAsset", - code=lambda1.Code.from_asset_image( - directory="../../src/docker/FunctionConstructWithImageAssetCode", - file="Dockerfile", - ), - handler=lambda1.Handler.FROM_IMAGE, - runtime=lambda1.Runtime.FROM_IMAGE, - tracing=lambda1.Tracing.ACTIVE, - ) - - # both ways work when 'file' is a path via subfolders to the Dockerfile - # this is useful when multiple docker images share some common code - docker_image_function_with_shared_code = lambda1.DockerImageFunction( - self, - "DockerImageFunctionWithSharedCode", - code=lambda1.DockerImageCode.from_image_asset( - directory="../../src/docker/ImagesWithSharedCode", - file="DockerImageFunctionWithSharedCode/Dockerfile", - ), - tracing=lambda1.Tracing.ACTIVE, - ) - - function_image_asset_with_shared_code = lambda1.Function( - self, - "FunctionImageAssetWithSharedCode", - code=lambda1.Code.from_asset_image( - directory="../../src/docker/ImagesWithSharedCode", - file="FunctionImageAssetWithSharedCode/Dockerfile", - ), - handler=lambda1.Handler.FROM_IMAGE, - runtime=lambda1.Runtime.FROM_IMAGE, - tracing=lambda1.Tracing.ACTIVE, - ) - - # Rest APIs - - # Spec Rest Api - apigw.SpecRestApi( - self, - "SpecRestAPI", - api_definition=apigw.ApiDefinition.from_asset("../../src/rest-api-definition.yaml"), - ) - - # Role to be used as credentials for the Spec rest APi - # it is used inside the spec rest api definition file - Role( - self, - "SpecRestApiRole", - assumed_by=ServicePrincipal("apigateway.amazonaws.com"), - role_name="SpecRestApiRole", - ).add_to_policy( - PolicyStatement( - actions=["lambda:InvokeFunction"], - resources=["*"], - ) - ) - - # Rest Api - rest_api = apigw.RestApi(self, "RestAPI") - normal_root_resource = rest_api.root.add_resource("restapis").add_resource("normal") - normal_root_resource.add_resource("pythonFunction").add_method("GET", LambdaIntegration(python_function)) - normal_root_resource.add_resource("functionPythonRuntime").add_method( - "GET", LambdaIntegration(function_python_runtime) - ) - normal_root_resource.add_resource("preBuiltFunctionPythonRuntime").add_method( - "GET", LambdaIntegration(pre_built_function_python_runtime) - ) - normal_root_resource.add_resource("bundledFunctionPythonRuntime").add_method( - "GET", LambdaIntegration(bundled_function_python_runtime) - ) - normal_root_resource.add_resource("nodejsFunction").add_method("GET", LambdaIntegration(nodejs_function)) - normal_root_resource.add_resource("functionNodeJsRuntime").add_method( - "GET", LambdaIntegration(function_node_js_runtime) - ) - normal_root_resource.add_resource("preBuiltFunctionNodeJsRuntime").add_method( - "GET", LambdaIntegration(pre_built_function_node_js_runtime) - ) - normal_root_resource.add_resource("goFunction").add_method("GET", LambdaIntegration(go_function)) - normal_root_resource.add_resource("functionGoRuntime").add_method("GET", LambdaIntegration(function_go_runtime)) - normal_root_resource.add_resource("dockerImageFunction").add_method( - "GET", LambdaIntegration(docker_image_function) - ) - normal_root_resource.add_resource("functionImageAsset").add_method( - "GET", LambdaIntegration(function_image_asset) - ) - normal_root_resource.add_resource("dockerImageFunctionWithSharedCode").add_method( - "GET", LambdaIntegration(docker_image_function_with_shared_code) - ) - normal_root_resource.add_resource("functionImageAssetWithSharedCode").add_method( - "GET", LambdaIntegration(function_image_asset_with_shared_code) - ) - - # Nested Stack - NestedStack1(self, "NestedStack") diff --git a/tests/iac_integration/cdk/testdata/cdk_v2/python/requirements.txt b/tests/iac_integration/cdk/testdata/cdk_v2/python/requirements.txt deleted file mode 100644 index 5c81fd6f2d..0000000000 --- a/tests/iac_integration/cdk/testdata/cdk_v2/python/requirements.txt +++ /dev/null @@ -1,6 +0,0 @@ -aws-cdk-lib -constructs>=10.0.0 -aws-cdk.aws-apigatewayv2-alpha -aws-cdk.aws-apigatewayv2-integrations-alpha -aws-cdk.aws-lambda-go-alpha -aws-cdk.aws-lambda-python-alpha \ No newline at end of file diff --git a/tests/iac_integration/cdk/testdata/cdk_v2/typescript/bin/test-app.ts b/tests/iac_integration/cdk/testdata/cdk_v2/typescript/bin/test-app.ts deleted file mode 100644 index d16b2299c9..0000000000 --- a/tests/iac_integration/cdk/testdata/cdk_v2/typescript/bin/test-app.ts +++ /dev/null @@ -1,7 +0,0 @@ -#!/usr/bin/env node -import * as cdk from 'aws-cdk-lib'; -import { CDKSupportDemoRootStack } from '../lib/test-stack'; - -const app = new cdk.App(); -new CDKSupportDemoRootStack(app, 'TestStack'); -app.synth(); \ No newline at end of file diff --git a/tests/iac_integration/cdk/testdata/cdk_v2/typescript/cdk.json b/tests/iac_integration/cdk/testdata/cdk_v2/typescript/cdk.json deleted file mode 100644 index 608fbbc197..0000000000 --- a/tests/iac_integration/cdk/testdata/cdk_v2/typescript/cdk.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "app": "npm install && npx ts-node --prefer-ts-exts bin/test-app.ts", - "context": { - - } -} diff --git a/tests/iac_integration/cdk/testdata/cdk_v2/typescript/lib/nested-stack.ts b/tests/iac_integration/cdk/testdata/cdk_v2/typescript/lib/nested-stack.ts deleted file mode 100644 index f877e8a3db..0000000000 --- a/tests/iac_integration/cdk/testdata/cdk_v2/typescript/lib/nested-stack.ts +++ /dev/null @@ -1,59 +0,0 @@ -import * as cdk from 'aws-cdk-lib'; -import * as lambda from 'aws-cdk-lib/aws-lambda'; -import { HttpApi, HttpMethod } from '@aws-cdk/aws-apigatewayv2-alpha'; -import { HttpLambdaIntegration } from '@aws-cdk/aws-apigatewayv2-integrations-alpha'; -import { PythonFunction, PythonLayerVersion } from '@aws-cdk/aws-lambda-python-alpha'; -import { Construct } from 'constructs'; -import {CfnLayerVersion} from 'aws-cdk-lib/aws-lambda'; - -export class NestedStack1 extends cdk.NestedStack { - - constructor(scope: Construct, id: string, props?: cdk.NestedStackProps) { - super(scope, id, props); - - // Python Runtime - // Layers - const pythonLayerVersion = new PythonLayerVersion(this, 'PythonLayerVersion', { - compatibleRuntimes: [ - lambda.Runtime.PYTHON_3_7, - lambda.Runtime.PYTHON_3_8, - lambda.Runtime.PYTHON_3_9, - ], - entry: '../../src/python/layers/PythonLayerVersion', - }); - const layerVersion = new lambda.LayerVersion(this, 'LayerVersion', { - compatibleRuntimes: [ - lambda.Runtime.PYTHON_3_7, - lambda.Runtime.PYTHON_3_8, - lambda.Runtime.PYTHON_3_9, - ], - code: lambda.Code.fromAsset('../../src/python/layers/LayerVersion'), - }); - // add SAM metadata to build layer - const cfnLayerVersion = layerVersion.node.defaultChild as CfnLayerVersion; - cfnLayerVersion.addMetadata('BuildMethod', 'python3.7'); - - // ZIP package type Functions - // Functions Built by CDK - Runtime Functions Constructs - const nestedPythonFunction = new PythonFunction(this, 'NestedPythonFunction', { - entry: '../../src/python/NestedPythonFunctionConstruct', - index: 'app.py', - handler: 'lambda_handler', - runtime: lambda.Runtime.PYTHON_3_9, - layers: [pythonLayerVersion, layerVersion], - tracing: lambda.Tracing.ACTIVE, - }); - - const httpApi = new HttpApi(this, 'httpAPi', { - }); - - httpApi.addRoutes({ - path: '/httpapis/nestedPythonFunction', - methods: [HttpMethod.GET], - integration: new HttpLambdaIntegration('httpApiRandomNameIntegration', - nestedPythonFunction, {} - ), - }); - - } -} \ No newline at end of file diff --git a/tests/iac_integration/cdk/testdata/cdk_v2/typescript/lib/test-stack.ts b/tests/iac_integration/cdk/testdata/cdk_v2/typescript/lib/test-stack.ts deleted file mode 100644 index 7c4ff3e67d..0000000000 --- a/tests/iac_integration/cdk/testdata/cdk_v2/typescript/lib/test-stack.ts +++ /dev/null @@ -1,278 +0,0 @@ -import * as path from 'path'; -import * as cdk from 'aws-cdk-lib'; -import * as lambda from 'aws-cdk-lib/aws-lambda'; -import * as apigw from 'aws-cdk-lib/aws-apigateway'; -import { LambdaIntegration} from 'aws-cdk-lib/aws-apigateway'; -import { NodejsFunction } from 'aws-cdk-lib/aws-lambda-nodejs'; -import { GoFunction } from '@aws-cdk/aws-lambda-go-alpha'; -import { PythonFunction, PythonLayerVersion } from '@aws-cdk/aws-lambda-python-alpha'; -import {Role, ServicePrincipal, PolicyStatement} from 'aws-cdk-lib/aws-iam'; -import { CfnFunction, CfnLayerVersion } from 'aws-cdk-lib/aws-lambda'; -import {NestedStack1} from './nested-stack'; -import { Construct } from 'constructs'; -import * as logs from 'aws-cdk-lib/aws-logs'; - -export class CDKSupportDemoRootStack extends cdk.Stack { - constructor(scope: Construct, id: string, props?: cdk.StackProps) { - super(scope, id, props); - - // Python Runtime - // Layers - const pythonLayerVersion = new PythonLayerVersion(this, 'PythonLayerVersion', { - compatibleRuntimes: [ - lambda.Runtime.PYTHON_3_7, - lambda.Runtime.PYTHON_3_8, - lambda.Runtime.PYTHON_3_9, - ], - entry: '../../src/python/layers/PythonLayerVersion', - }); - const layerVersion = new lambda.LayerVersion(this, 'LayerVersion', { - compatibleRuntimes: [ - lambda.Runtime.PYTHON_3_7, - lambda.Runtime.PYTHON_3_8, - lambda.Runtime.PYTHON_3_9, - ], - code: lambda.Code.fromAsset('../../src/python/layers/LayerVersion'), - }); - // add SAM metadata to build layer - const cfnLayerVersion = layerVersion.node.defaultChild as CfnLayerVersion; - cfnLayerVersion.addMetadata('BuildMethod', 'python3.7'); - - const bundledLayerVersionPythonRuntime = new lambda.LayerVersion(this, 'BundledLayerVersionPythonRuntime', { - compatibleRuntimes: [ - lambda.Runtime.PYTHON_3_7, - lambda.Runtime.PYTHON_3_8, - lambda.Runtime.PYTHON_3_9, - ], - code: lambda.Code.fromAsset('../../src/python/layers/BundledLayerVersion', { - bundling: { - command: [ - '/bin/sh', - '-c', - 'rm -rf /tmp/asset-input && mkdir /tmp/asset-input && cp * /tmp/asset-input && cd /tmp/asset-input && pip install -r requirements.txt -t . && mkdir /asset-output/python && cp -R /tmp/asset-input/* /asset-output/python', - ], - image: lambda.Runtime.PYTHON_3_7.bundlingImage, - user: 'root', - } - }), - }); - - // ZIP package type Functions - // Functions Built by CDK - Runtime Functions Constructs - const pythonFunction = new PythonFunction(this, 'PythonFunction', { - entry: '../../src/python/PythonFunctionConstruct', - index: 'app.py', - handler: 'lambda_handler', - runtime: lambda.Runtime.PYTHON_3_9, - functionName: 'pythonFunc', // we need the name to use it in the API definition file - logRetention: logs.RetentionDays.THREE_MONTHS, - layers: [pythonLayerVersion, layerVersion], - tracing: lambda.Tracing.ACTIVE, - }); - - // Normal Lambda Function Construct - Python Runtime - const functionPythonRuntime = new lambda.Function(this, 'FunctionPythonRuntime', { - runtime: lambda.Runtime.PYTHON_3_7, - code: lambda.Code.fromAsset('../../src/python/FunctionConstruct'), - handler: 'app.lambda_handler', - layers: [pythonLayerVersion, layerVersion], - tracing: lambda.Tracing.ACTIVE, - }); - - // Normal Lambda Function Construct - Python Runtime - with skip build metadata - const preBuiltFunctionPythonRuntime = new lambda.Function(this, 'PreBuiltFunctionPythonRuntime', { - runtime: lambda.Runtime.PYTHON_3_7, - code: lambda.Code.fromAsset('../../src/python/BuiltFunctionConstruct'), - handler: 'app.lambda_handler', - layers: [pythonLayerVersion, layerVersion], - tracing: lambda.Tracing.ACTIVE, - }); - // add SkipBuild Metadata, so SAM will skip building this function - const cfnPreBuiltFunctionPythonRuntime = preBuiltFunctionPythonRuntime.node.defaultChild as CfnFunction; - cfnPreBuiltFunctionPythonRuntime.addMetadata('SkipBuild', true); - - const bundledFunctionPythonRuntime = new lambda.Function(this, 'BundledFunctionPythonRuntime', { - runtime: lambda.Runtime.PYTHON_3_7, - code: lambda.Code.fromAsset('../../src/python/BundledFunctionConstruct/', { - bundling: { - command: [ - '/bin/sh', - '-c', - 'rm -rf /tmp/asset-input && mkdir /tmp/asset-input && cp * /tmp/asset-input && cd /tmp/asset-input && pip install -r requirements.txt -t . && cp -R /tmp/asset-input/* /asset-output', - ], - image: lambda.Runtime.PYTHON_3_7.bundlingImage, - user: 'root', - } - }), - handler: "app.lambda_handler", - layers: [bundledLayerVersionPythonRuntime, pythonLayerVersion], - timeout: cdk.Duration.seconds(120), - tracing: lambda.Tracing.ACTIVE, - }); - - // NodeJs Runtime - //Layers - const layerVersionNodeJsRuntime = new lambda.LayerVersion(this, 'LayerVersionNodeJsRuntime', { - compatibleRuntimes: [ - lambda.Runtime.NODEJS_14_X, - ], - code: lambda.Code.fromAsset('../../src/nodejs/layers/LayerVersion'), - }); - // add SAM metadata to build layer - const cfnLayerVersionNodeJsRuntime = layerVersionNodeJsRuntime.node.defaultChild as CfnLayerVersion; - cfnLayerVersionNodeJsRuntime.addMetadata('BuildMethod', 'nodejs14.x'); - - const nodejsFunction = new NodejsFunction(this, 'NodejsFunction', { - runtime: lambda.Runtime.NODEJS_14_X, - entry: path.join(__dirname, '../../../src/nodejs/NodeJsFunctionConstruct/app.ts'), - depsLockFilePath: path.join(__dirname, '../../../src/nodejs/NodeJsFunctionConstruct/package-lock.json'), - bundling: { - externalModules: ['/opt/nodejs/layer_version_dependency'], - }, - handler: 'lambdaHandler', - layers: [layerVersionNodeJsRuntime], - tracing: lambda.Tracing.ACTIVE, - }); - - // Normal Lambda Function Construct - NodeJs Runtime - const functionNodeJsRuntime = new lambda.Function(this, 'FunctionNodeJsRuntime', { - runtime: lambda.Runtime.NODEJS_14_X, - code: lambda.Code.fromAsset('../../src/nodejs/FunctionConstruct'), - handler: 'app.lambdaHandler', - layers: [layerVersionNodeJsRuntime], - tracing: lambda.Tracing.ACTIVE, - }); - - // Normal Lambda Function Construct - NodeJs Runtime - with skip build metadata - const preBuiltFunctionNodeJsRuntime = new lambda.Function(this, 'PreBuiltFunctionNodeJsRuntime', { - runtime: lambda.Runtime.NODEJS_14_X, - code: lambda.Code.fromAsset('../../src/nodejs/BuiltFunctionConstruct'), - handler: 'app.lambdaHandler', - layers: [layerVersionNodeJsRuntime], - tracing: lambda.Tracing.ACTIVE, - }); - // add SkipBuild Metadata, so SAM will skip building this function - const cfnPreBuiltFunctionNodeJsRuntime = preBuiltFunctionNodeJsRuntime.node.defaultChild as CfnFunction; - cfnPreBuiltFunctionNodeJsRuntime.addMetadata('SkipBuild', true); - - // Go Runtime - - const goFunction = new GoFunction(this, 'GoFunction', { - entry: '../../src/go/GoFunctionConstruct', - bundling: { - forcedDockerBundling: true, - }, - }); - - // Normal Lambda Function Construct - Go Runtime - const functionGoRuntime = new lambda.Function(this, 'FunctionGoRuntime', { - runtime: lambda.Runtime.GO_1_X, - code: lambda.Code.fromAsset('../../src/go/FunctionConstruct'), - handler: 'FunctionConstruct', - }); - - // Image Package Type Functions - - // One way to define an Image Package Type Function - const dockerImageFunction = new lambda.DockerImageFunction(this, "DockerImageFunction", { - code: lambda.DockerImageCode.fromImageAsset('../../src/docker/DockerImageFunctionConstruct', { - file: 'Dockerfile', - }), - tracing: lambda.Tracing.ACTIVE, - }); - - // another way - const functionImageAsset = new lambda.Function(this, "FunctionImageAsset", { - code: lambda.Code.fromAssetImage('../../src/docker/FunctionConstructWithImageAssetCode', { - file: 'Dockerfile', - }), - handler: lambda.Handler.FROM_IMAGE, - runtime: lambda.Runtime.FROM_IMAGE, - tracing: lambda.Tracing.ACTIVE, - }); - - // both ways work when 'file' is a path via subfolders to the Dockerfile - // this is useful when multiple docker images share some common code - const dockerImageFunctionWithSharedCode = new lambda.DockerImageFunction(this, "DockerImageFunctionWithSharedCode", { - code: lambda.DockerImageCode.fromImageAsset("../../src/docker/ImagesWithSharedCode", { - file: "DockerImageFunctionWithSharedCode/Dockerfile", - }), - tracing: lambda.Tracing.ACTIVE, - }); - - // another way - const functionImageAssetWithSharedCode = new lambda.Function(this, "FunctionImageAssetWithSharedCode", { - code: lambda.Code.fromAssetImage("../../src/docker/ImagesWithSharedCode", { - file: "FunctionImageAssetWithSharedCode/Dockerfile", - }), - handler: lambda.Handler.FROM_IMAGE, - runtime: lambda.Runtime.FROM_IMAGE, - tracing: lambda.Tracing.ACTIVE, - }); - - - //Rest APIs - - // Spec Rest Api - new apigw.SpecRestApi(this, 'SpecRestAPI', { - apiDefinition: apigw.ApiDefinition.fromAsset('../../src/rest-api-definition.yaml'), - }); - - // Role to be used as credentials for the Spec rest APi - // it is used inside the spec rest api definition file - new Role(this, 'SpecRestApiRole', { - assumedBy: new ServicePrincipal('apigateway.amazonaws.com'), - roleName: 'SpecRestApiRole', - }).addToPolicy(new PolicyStatement({ - actions: ['lambda:InvokeFunction'], - resources: ['*'], - })); - - // Rest Api - const restApi = new apigw.RestApi(this, 'RestAPI', {}); - const normalRootResource = restApi.root.addResource('restapis') - .addResource('normal'); - - normalRootResource.addResource('pythonFunction') - .addMethod('GET', new LambdaIntegration(pythonFunction)); - - normalRootResource.addResource('functionPythonRuntime') - .addMethod('GET', new LambdaIntegration(functionPythonRuntime)); - - normalRootResource.addResource('preBuiltFunctionPythonRuntime') - .addMethod('GET', new LambdaIntegration(preBuiltFunctionPythonRuntime)); - - normalRootResource.addResource('bundledFunctionPythonRuntime') - .addMethod('GET', new LambdaIntegration(bundledFunctionPythonRuntime)); - - normalRootResource.addResource('nodejsFunction') - .addMethod('GET', new LambdaIntegration(nodejsFunction)); - - normalRootResource.addResource('functionNodeJsRuntime') - .addMethod('GET', new LambdaIntegration(functionNodeJsRuntime)); - - normalRootResource.addResource('preBuiltFunctionNodeJsRuntime') - .addMethod('GET', new LambdaIntegration(preBuiltFunctionNodeJsRuntime)); - - normalRootResource.addResource('goFunction') - .addMethod('GET', new LambdaIntegration(goFunction)); - - normalRootResource.addResource('functionGoRuntime') - .addMethod('GET', new LambdaIntegration(functionGoRuntime)); - - normalRootResource.addResource('dockerImageFunction') - .addMethod('GET', new LambdaIntegration(dockerImageFunction)); - - normalRootResource.addResource('functionImageAsset') - .addMethod('GET', new LambdaIntegration(functionImageAsset)); - - normalRootResource.addResource('dockerImageFunctionWithSharedCode') - .addMethod('GET', new LambdaIntegration(dockerImageFunctionWithSharedCode)); - - normalRootResource.addResource('functionImageAssetWithSharedCode') - .addMethod('GET', new LambdaIntegration(functionImageAssetWithSharedCode)); - - // Nested Stack - new NestedStack1(this, 'NestedStack' ,{}); - } -} diff --git a/tests/iac_integration/cdk/testdata/cdk_v2/typescript/package.json b/tests/iac_integration/cdk/testdata/cdk_v2/typescript/package.json deleted file mode 100644 index baa0873358..0000000000 --- a/tests/iac_integration/cdk/testdata/cdk_v2/typescript/package.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "name": "api-cors-issue", - "version": "0.1.0", - "bin": { - "api-cors-issue": "bin/api-cors-issue.js" - }, - "scripts": { - "build": "tsc", - "cdk": "cdk" - }, - "devDependencies": { - "@aws-cdk/assert": "", - "@types/node": "10.17.27", - "aws-cdk": "", - "ts-node": "^9.0.0", - "typescript": "~3.9.7" - }, - "dependencies": { - "@aws-cdk/aws-apigatewayv2-alpha": "", - "@aws-cdk/aws-apigatewayv2-integrations-alpha": "", - "@aws-cdk/aws-lambda-go-alpha": "", - "@aws-cdk/aws-lambda-python-alpha": "", - "aws-cdk-lib": "", - "constructs": "^10.0.0" - } -} diff --git a/tests/iac_integration/cdk/testdata/cdk_v2/typescript/tsconfig.json b/tests/iac_integration/cdk/testdata/cdk_v2/typescript/tsconfig.json deleted file mode 100644 index 9f8e8beabd..0000000000 --- a/tests/iac_integration/cdk/testdata/cdk_v2/typescript/tsconfig.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "compilerOptions": { - "target": "ES2018", - "module": "commonjs", - "lib": [ - "es2018" - ], - "declaration": true, - "strict": true, - "noImplicitAny": true, - "strictNullChecks": true, - "noImplicitThis": true, - "alwaysStrict": true, - "noUnusedLocals": false, - "noUnusedParameters": false, - "noImplicitReturns": true, - "noFallthroughCasesInSwitch": false, - "inlineSourceMap": true, - "inlineSources": true, - "experimentalDecorators": true, - "strictPropertyInitialization": false, - "typeRoots": [ - "./node_modules/@types" - ] - }, - "exclude": [ - "node_modules", - "cdk.out" - ] -} diff --git a/tests/iac_integration/cdk/testdata/src/docker/DockerImageFunctionConstruct/Dockerfile b/tests/iac_integration/cdk/testdata/src/docker/DockerImageFunctionConstruct/Dockerfile deleted file mode 100644 index d26e4d5ea0..0000000000 --- a/tests/iac_integration/cdk/testdata/src/docker/DockerImageFunctionConstruct/Dockerfile +++ /dev/null @@ -1,9 +0,0 @@ -FROM public.ecr.aws/lambda/nodejs:14 - -# Assumes your function is named "app.js", and there is a package.json file in the app directory -COPY app.js package.json ./ - -RUN npm install - -# Set the CMD to your handler (could also be done as a parameter override outside of the Dockerfile) -CMD [ "app.lambdaHandler" ] \ No newline at end of file diff --git a/tests/iac_integration/cdk/testdata/src/docker/DockerImageFunctionConstruct/app.js b/tests/iac_integration/cdk/testdata/src/docker/DockerImageFunctionConstruct/app.js deleted file mode 100644 index 2489020d66..0000000000 --- a/tests/iac_integration/cdk/testdata/src/docker/DockerImageFunctionConstruct/app.js +++ /dev/null @@ -1,22 +0,0 @@ -var gen = require('unique-names-generator'); - -const colorName = gen.uniqueNamesGenerator({ - dictionaries: [gen.colors] -}); - -exports.lambdaHandler = async(event, context) => { - let response; - - try { - response = { - 'statusCode': 200, - 'body': JSON.stringify({ - message: "Hello World from docker image function construct", - }) - }; - } catch (err) { - console.log(err); - return err; - } - return response; -}; diff --git a/tests/iac_integration/cdk/testdata/src/docker/DockerImageFunctionConstruct/package.json b/tests/iac_integration/cdk/testdata/src/docker/DockerImageFunctionConstruct/package.json deleted file mode 100644 index 7b15f7c978..0000000000 --- a/tests/iac_integration/cdk/testdata/src/docker/DockerImageFunctionConstruct/package.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "name": "randomColors", - "version": "0.1.0", - "bin": { - "randomColors": "bin/app.js" - }, - "scripts": { - "build": "tsc", - "watch": "tsc -w", - "test": "jest", - "cdk": "cdk" - }, - "dependencies": { - "unique-names-generator": "^4.6.0" - } -} diff --git a/tests/iac_integration/cdk/testdata/src/docker/FunctionConstructWithImageAssetCode/Dockerfile b/tests/iac_integration/cdk/testdata/src/docker/FunctionConstructWithImageAssetCode/Dockerfile deleted file mode 100644 index d26e4d5ea0..0000000000 --- a/tests/iac_integration/cdk/testdata/src/docker/FunctionConstructWithImageAssetCode/Dockerfile +++ /dev/null @@ -1,9 +0,0 @@ -FROM public.ecr.aws/lambda/nodejs:14 - -# Assumes your function is named "app.js", and there is a package.json file in the app directory -COPY app.js package.json ./ - -RUN npm install - -# Set the CMD to your handler (could also be done as a parameter override outside of the Dockerfile) -CMD [ "app.lambdaHandler" ] \ No newline at end of file diff --git a/tests/iac_integration/cdk/testdata/src/docker/FunctionConstructWithImageAssetCode/app.js b/tests/iac_integration/cdk/testdata/src/docker/FunctionConstructWithImageAssetCode/app.js deleted file mode 100644 index ad398aff72..0000000000 --- a/tests/iac_integration/cdk/testdata/src/docker/FunctionConstructWithImageAssetCode/app.js +++ /dev/null @@ -1,22 +0,0 @@ -var gen = require('unique-names-generator'); - -const colorName = gen.uniqueNamesGenerator({ - dictionaries: [gen.colors] -}); - -exports.lambdaHandler = async(event, context) => { - let response; - - try { - response = { - 'statusCode': 200, - 'body': JSON.stringify({ - message: "Hello World from function construct with image asset", - }), - }; - } catch (err) { - console.log(err); - return err; - } - return response; -}; diff --git a/tests/iac_integration/cdk/testdata/src/docker/FunctionConstructWithImageAssetCode/package.json b/tests/iac_integration/cdk/testdata/src/docker/FunctionConstructWithImageAssetCode/package.json deleted file mode 100644 index 7b15f7c978..0000000000 --- a/tests/iac_integration/cdk/testdata/src/docker/FunctionConstructWithImageAssetCode/package.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "name": "randomColors", - "version": "0.1.0", - "bin": { - "randomColors": "bin/app.js" - }, - "scripts": { - "build": "tsc", - "watch": "tsc -w", - "test": "jest", - "cdk": "cdk" - }, - "dependencies": { - "unique-names-generator": "^4.6.0" - } -} diff --git a/tests/iac_integration/cdk/testdata/src/docker/ImagesWithSharedCode/DockerImageFunctionWithSharedCode/Dockerfile b/tests/iac_integration/cdk/testdata/src/docker/ImagesWithSharedCode/DockerImageFunctionWithSharedCode/Dockerfile deleted file mode 100644 index a2c99c17fd..0000000000 --- a/tests/iac_integration/cdk/testdata/src/docker/ImagesWithSharedCode/DockerImageFunctionWithSharedCode/Dockerfile +++ /dev/null @@ -1,16 +0,0 @@ -FROM public.ecr.aws/lambda/nodejs:14 - -# Add the lambda handler for this feature -COPY DockerImageFunctionWithSharedCode/app.js ./ - -# Add the shared code -COPY SharedCode/ ./SharedCode - -# Add the shared dependencies -COPY package.json ./ - -# Install the dependencies -RUN npm install - -# Set the CMD to your handler (could also be done as a parameter override outside of the Dockerfile) -CMD [ "app.lambdaHandler" ] \ No newline at end of file diff --git a/tests/iac_integration/cdk/testdata/src/docker/ImagesWithSharedCode/DockerImageFunctionWithSharedCode/app.js b/tests/iac_integration/cdk/testdata/src/docker/ImagesWithSharedCode/DockerImageFunctionWithSharedCode/app.js deleted file mode 100644 index 239c7bafad..0000000000 --- a/tests/iac_integration/cdk/testdata/src/docker/ImagesWithSharedCode/DockerImageFunctionWithSharedCode/app.js +++ /dev/null @@ -1,24 +0,0 @@ -var gen = require('unique-names-generator'); -const {sayHelloWorld} = require("./SharedCode/shared"); - -const colorName = gen.uniqueNamesGenerator({ - dictionaries: [gen.colors] -}); - - -exports.lambdaHandler = async(event, context) => { - let response; - - try { - response = { - 'statusCode': 200, - 'body': JSON.stringify({ - message: sayHelloWorld("docker image function construct"), - }), - }; - } catch (err) { - console.log(err); - return err; - } - return response; -}; diff --git a/tests/iac_integration/cdk/testdata/src/docker/ImagesWithSharedCode/FunctionImageAssetWithSharedCode/Dockerfile b/tests/iac_integration/cdk/testdata/src/docker/ImagesWithSharedCode/FunctionImageAssetWithSharedCode/Dockerfile deleted file mode 100644 index a68a4f5978..0000000000 --- a/tests/iac_integration/cdk/testdata/src/docker/ImagesWithSharedCode/FunctionImageAssetWithSharedCode/Dockerfile +++ /dev/null @@ -1,16 +0,0 @@ -FROM public.ecr.aws/lambda/nodejs:14 - -# Add the lambda handler for this feature -COPY FunctionImageAssetWithSharedCode/app.js ./ - -# Add the shared code -COPY SharedCode/ ./SharedCode - -# Add the shared dependencies -COPY package.json ./ - -# Install the dependencies -RUN npm install - -# Set the CMD to your handler (could also be done as a parameter override outside of the Dockerfile) -CMD [ "app.lambdaHandler" ] \ No newline at end of file diff --git a/tests/iac_integration/cdk/testdata/src/docker/ImagesWithSharedCode/FunctionImageAssetWithSharedCode/app.js b/tests/iac_integration/cdk/testdata/src/docker/ImagesWithSharedCode/FunctionImageAssetWithSharedCode/app.js deleted file mode 100644 index f1dca39268..0000000000 --- a/tests/iac_integration/cdk/testdata/src/docker/ImagesWithSharedCode/FunctionImageAssetWithSharedCode/app.js +++ /dev/null @@ -1,24 +0,0 @@ -var gen = require('unique-names-generator'); -const {sayHelloWorld} = require("./SharedCode/shared"); - -const colorName = gen.uniqueNamesGenerator({ - dictionaries: [gen.colors] -}); - - -exports.lambdaHandler = async(event, context) => { - let response; - - try { - response = { - 'statusCode': 200, - 'body': JSON.stringify({ - message: sayHelloWorld("function construct with image asset"), - }), - }; - } catch (err) { - console.log(err); - return err; - } - return response; -}; diff --git a/tests/iac_integration/cdk/testdata/src/docker/ImagesWithSharedCode/SharedCode/shared.js b/tests/iac_integration/cdk/testdata/src/docker/ImagesWithSharedCode/SharedCode/shared.js deleted file mode 100644 index 334a8051fe..0000000000 --- a/tests/iac_integration/cdk/testdata/src/docker/ImagesWithSharedCode/SharedCode/shared.js +++ /dev/null @@ -1,4 +0,0 @@ - -exports.sayHelloWorld = (from) => { - return `Hello World from ${from} with a Dockerfile that shares code with another Dockerfile`; -} diff --git a/tests/iac_integration/cdk/testdata/src/docker/ImagesWithSharedCode/package.json b/tests/iac_integration/cdk/testdata/src/docker/ImagesWithSharedCode/package.json deleted file mode 100644 index 7b15f7c978..0000000000 --- a/tests/iac_integration/cdk/testdata/src/docker/ImagesWithSharedCode/package.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "name": "randomColors", - "version": "0.1.0", - "bin": { - "randomColors": "bin/app.js" - }, - "scripts": { - "build": "tsc", - "watch": "tsc -w", - "test": "jest", - "cdk": "cdk" - }, - "dependencies": { - "unique-names-generator": "^4.6.0" - } -} diff --git a/tests/iac_integration/cdk/testdata/src/go/FunctionConstruct/go.mod b/tests/iac_integration/cdk/testdata/src/go/FunctionConstruct/go.mod deleted file mode 100644 index ac54bd0c32..0000000000 --- a/tests/iac_integration/cdk/testdata/src/go/FunctionConstruct/go.mod +++ /dev/null @@ -1,5 +0,0 @@ -require github.com/aws/aws-lambda-go v1.28.0 - -module hello-world - -go 1.15 diff --git a/tests/iac_integration/cdk/testdata/src/go/FunctionConstruct/go.sum b/tests/iac_integration/cdk/testdata/src/go/FunctionConstruct/go.sum deleted file mode 100644 index 4c65c61e81..0000000000 --- a/tests/iac_integration/cdk/testdata/src/go/FunctionConstruct/go.sum +++ /dev/null @@ -1,17 +0,0 @@ -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/aws/aws-lambda-go v1.28.0 h1:fZiik1PZqW2IyAN4rj+Y0UBaO1IDFlsNo9Zz/XnArK4= -github.com/aws/aws-lambda-go v1.28.0/go.mod h1:jJmlefzPfGnckuHdXX7/80O3BvUUi12XOkbv4w9SGLU= -github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= -github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/urfave/cli/v2 v2.2.0/go.mod h1:SE9GqnLQmjVa0iPEY0f1w3ygNIYcIJ0OKPMoW2caLfQ= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/tests/iac_integration/cdk/testdata/src/go/FunctionConstruct/main.go b/tests/iac_integration/cdk/testdata/src/go/FunctionConstruct/main.go deleted file mode 100644 index cc08daa959..0000000000 --- a/tests/iac_integration/cdk/testdata/src/go/FunctionConstruct/main.go +++ /dev/null @@ -1,17 +0,0 @@ -package main - -import ( - "github.com/aws/aws-lambda-go/events" - "github.com/aws/aws-lambda-go/lambda" -) - -func handler(request events.APIGatewayProxyRequest) (events.APIGatewayProxyResponse, error) { - return events.APIGatewayProxyResponse{ - Body: "{\"message\": \"Hello World from function construct with go runtime\"}", - StatusCode: 200, - }, nil -} - -func main() { - lambda.Start(handler) -} diff --git a/tests/iac_integration/cdk/testdata/src/go/GoFunctionConstruct/go.mod b/tests/iac_integration/cdk/testdata/src/go/GoFunctionConstruct/go.mod deleted file mode 100644 index ac54bd0c32..0000000000 --- a/tests/iac_integration/cdk/testdata/src/go/GoFunctionConstruct/go.mod +++ /dev/null @@ -1,5 +0,0 @@ -require github.com/aws/aws-lambda-go v1.28.0 - -module hello-world - -go 1.15 diff --git a/tests/iac_integration/cdk/testdata/src/go/GoFunctionConstruct/go.sum b/tests/iac_integration/cdk/testdata/src/go/GoFunctionConstruct/go.sum deleted file mode 100644 index 4c65c61e81..0000000000 --- a/tests/iac_integration/cdk/testdata/src/go/GoFunctionConstruct/go.sum +++ /dev/null @@ -1,17 +0,0 @@ -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/aws/aws-lambda-go v1.28.0 h1:fZiik1PZqW2IyAN4rj+Y0UBaO1IDFlsNo9Zz/XnArK4= -github.com/aws/aws-lambda-go v1.28.0/go.mod h1:jJmlefzPfGnckuHdXX7/80O3BvUUi12XOkbv4w9SGLU= -github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= -github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/urfave/cli/v2 v2.2.0/go.mod h1:SE9GqnLQmjVa0iPEY0f1w3ygNIYcIJ0OKPMoW2caLfQ= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/tests/iac_integration/cdk/testdata/src/go/GoFunctionConstruct/main.go b/tests/iac_integration/cdk/testdata/src/go/GoFunctionConstruct/main.go deleted file mode 100644 index d1d3ac1b21..0000000000 --- a/tests/iac_integration/cdk/testdata/src/go/GoFunctionConstruct/main.go +++ /dev/null @@ -1,17 +0,0 @@ -package main - -import ( - "github.com/aws/aws-lambda-go/events" - "github.com/aws/aws-lambda-go/lambda" -) - -func handler(request events.APIGatewayProxyRequest) (events.APIGatewayProxyResponse, error) { - return events.APIGatewayProxyResponse{ - Body: "{\"message\": \"Hello World from go function construct\"}", - StatusCode: 200, - }, nil -} - -func main() { - lambda.Start(handler) -} diff --git a/tests/iac_integration/cdk/testdata/src/nodejs/BuiltFunctionConstruct/app.js b/tests/iac_integration/cdk/testdata/src/nodejs/BuiltFunctionConstruct/app.js deleted file mode 100644 index 99f7ed6837..0000000000 --- a/tests/iac_integration/cdk/testdata/src/nodejs/BuiltFunctionConstruct/app.js +++ /dev/null @@ -1,17 +0,0 @@ -const layer_version_dependency = require('/opt/nodejs/layer_version_dependency'); -let response; - -exports.lambdaHandler = async (event, context) => { - try { - response = { - 'statusCode': 200, - 'body': JSON.stringify({ - message: `Hello World from nodejs pre built function ${layer_version_dependency.get_dependency()}`, - }) - }; - } catch (err) { - console.log(err); - return err; - } - return response; -}; \ No newline at end of file diff --git a/tests/iac_integration/cdk/testdata/src/nodejs/FunctionConstruct/app.js b/tests/iac_integration/cdk/testdata/src/nodejs/FunctionConstruct/app.js deleted file mode 100644 index 27991e939d..0000000000 --- a/tests/iac_integration/cdk/testdata/src/nodejs/FunctionConstruct/app.js +++ /dev/null @@ -1,23 +0,0 @@ -const unique_names_generator = require('unique-names-generator'); -const layer_version_dependency = require('/opt/nodejs/layer_version_dependency'); - -const characterName = unique_names_generator.uniqueNamesGenerator({ - dictionaries: [unique_names_generator.animals] -}); - -let response; - -exports.lambdaHandler = async (event, context) => { - try { - response = { - 'statusCode': 200, - 'body': JSON.stringify({ - message: `Hello World from function construct with nodejs runtime ${layer_version_dependency.get_dependency()}`, - }) - }; - } catch (err) { - console.log(err); - return err; - } - return response; -}; \ No newline at end of file diff --git a/tests/iac_integration/cdk/testdata/src/nodejs/FunctionConstruct/package.json b/tests/iac_integration/cdk/testdata/src/nodejs/FunctionConstruct/package.json deleted file mode 100644 index 1dc652ae81..0000000000 --- a/tests/iac_integration/cdk/testdata/src/nodejs/FunctionConstruct/package.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "name": "hello_world", - "version": "1.0.0", - "main": "app.js", - "dependencies": { - "unique-names-generator": "^4.6.0" - } -} diff --git a/tests/iac_integration/cdk/testdata/src/nodejs/NodeJsFunctionConstruct/app.ts b/tests/iac_integration/cdk/testdata/src/nodejs/NodeJsFunctionConstruct/app.ts deleted file mode 100644 index 5f629a9dff..0000000000 --- a/tests/iac_integration/cdk/testdata/src/nodejs/NodeJsFunctionConstruct/app.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { uniqueNamesGenerator, animals} from 'unique-names-generator'; -import {get_dependency} from '/opt/nodejs/layer_version_dependency'; - -const characterName = uniqueNamesGenerator({ - dictionaries: [animals] -}); -let response; - -exports.lambdaHandler = async(event, context) => { - try { - response = { - 'statusCode': 200, - 'body': JSON.stringify({ - message: `Hello World from nodejs function construct ${get_dependency()}`, - }) - }; - } catch (err) { - console.log(err); - return err; - } - return response; -}; diff --git a/tests/iac_integration/cdk/testdata/src/nodejs/NodeJsFunctionConstruct/node_modules/.package-lock.json b/tests/iac_integration/cdk/testdata/src/nodejs/NodeJsFunctionConstruct/node_modules/.package-lock.json deleted file mode 100644 index ffbc1ed91a..0000000000 --- a/tests/iac_integration/cdk/testdata/src/nodejs/NodeJsFunctionConstruct/node_modules/.package-lock.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "name": "hello_world", - "version": "1.0.0", - "lockfileVersion": 2, - "requires": true, - "packages": { - "node_modules/unique-names-generator": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/unique-names-generator/-/unique-names-generator-4.6.0.tgz", - "integrity": "sha512-m0fke1emBeT96UYn2psPQYwljooDWRTKt9oUZ5vlt88ZFMBGxqwPyLHXwCfkbgdm8jzioCp7oIpo6KdM+fnUlQ==", - "engines": { - "node": ">=8" - } - } - } -} diff --git a/tests/iac_integration/cdk/testdata/src/nodejs/NodeJsFunctionConstruct/node_modules/unique-names-generator/LICENSE b/tests/iac_integration/cdk/testdata/src/nodejs/NodeJsFunctionConstruct/node_modules/unique-names-generator/LICENSE deleted file mode 100644 index a413d1ffc3..0000000000 --- a/tests/iac_integration/cdk/testdata/src/nodejs/NodeJsFunctionConstruct/node_modules/unique-names-generator/LICENSE +++ /dev/null @@ -1,9 +0,0 @@ -MIT License - -Copyright (c) 2018-2021 AndreaSonny (https://github.com/andreasonny83) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/tests/iac_integration/cdk/testdata/src/nodejs/NodeJsFunctionConstruct/node_modules/unique-names-generator/README.md b/tests/iac_integration/cdk/testdata/src/nodejs/NodeJsFunctionConstruct/node_modules/unique-names-generator/README.md deleted file mode 100644 index 88fc351741..0000000000 --- a/tests/iac_integration/cdk/testdata/src/nodejs/NodeJsFunctionConstruct/node_modules/unique-names-generator/README.md +++ /dev/null @@ -1,643 +0,0 @@ -# Unique Names Generator - -[![All Contributors](https://img.shields.io/badge/all_contributors-10-orange.svg?style=flat-square)](#contributors-) - - -[![Build Status](https://travis-ci.com/andreasonny83/unique-names-generator.svg?branch=main)](https://travis-ci.com/andreasonny83/unique-names-generator) -[![](https://img.shields.io/npm/v/unique-names-generator.svg)](https://npmjs.org/package/unique-names-generator) -[![](https://img.shields.io/npm/l/unique-names-generator.svg)](https://github.com/andreasonny83/unique-names-generator/blob/main/LICENSE) -[![Known Vulnerabilities](https://snyk.io/test/github/andreasonny83/unique-names-generator/badge.svg?targetFile=package.json)](https://snyk.io/test/github/andreasonny83/unique-names-generator?targetFile=package.json) -[![](https://img.shields.io/npm/dt/unique-names-generator.svg)](https://npmjs.org/package/unique-names-generator) -[![devDependencies Status](https://david-dm.org/andreasonny83/unique-names-generator/dev-status.svg)](https://david-dm.org/andreasonny83/unique-names-generator?type=dev) - -[![NPM](https://nodei.co/npm/unique-names-generator.png)](https://npmjs.org/package/unique-names-generator) - -> More than 50,000,000 name combinations out of the box - -## What is Unique name generator? - -Unique name generator is a tree-shakeable Node package for generating random and unique names. - -It comes with a list of dictionaries out of the box, but you can also provide your custom ones. - -## Docs - -This documentation is for the `unique-names-generator` v4. - -If you are using a version 3.x of the library, please refer to the -[v3 Docs](https://github.com/andreasonny83/unique-names-generator/blob/v3.1.1/README.md) - -For the version 1 & 2, please refer to the -[v2 Docs](https://github.com/andreasonny83/unique-names-generator/blob/v2.0.2/README.md) - -### Migrating to v4 - -If you want to migrate, from an older version of the library to v4, please read the [Migration guide](#migration-guide) - -## Table of contents - -- [Unique Names Generator](#unique-names-generator) - - [What is Unique name generator?](#what-is-unique-name-generator) - - [Docs](#docs) - - [Migrating to v4](#migrating-to-v4) - - [Table of contents](#table-of-contents) - - [Prerequisites](#prerequisites) - - [Installation](#installation) - - [Usage](#usage) - - [Typescript support](#typescript-support) - - [API](#api) - - [uniqueNamesGenerator (options)](#uniquenamesgenerator-options) - - [options](#options) - - [dictionaries](#dictionaries) - - [separator](#separator) - - [length](#length) - - [style](#style) - - [seed](#seed) - - [Dictionaries available](#dictionaries-available) - - [Numbers](#numbers) - - [Adjectives](#adjectives) - - [Animals](#animals) - - [Colors](#colors) - - [Countries](#countries) - - [Names](#names) - - [Languages](#languages) - - [Star Wars](#star-wars) - - [Default dictionaries](#default-dictionaries) - - [Custom dictionaries](#custom-dictionaries) - - [Numbers Dictionary](#numbers-dictionary) - - [Numbers Dictionary API](#numbers-dictionary-api) - - [generate (options)](#generate-options) - - [options](#options-1) - - [min](#min) - - [max](#max) - - [length](#length-1) - - [Combining custom and provided dictionaries](#combining-custom-and-provided-dictionaries) - - [Migration guide](#migration-guide) - - [Migration guide from version 3 to version 4](#migration-guide-from-version-3-to-version-4) - - [Mandatory `dictionaries` config](#mandatory-dictionaries-config) - - [Migration guide from version 1 or 2](#migration-guide-from-version-1-or-2) - - [uniqueNamesGenerator](#uniquenamesgenerator) - - [Separator](#separator-1) - - [Short](#short) - - [Contributing](#contributing) - - [License](#license) - - [Contributors ✨](#contributors-) - -## Prerequisites - -This project requires NodeJS (at least version 6) and NPM. -[Node](http://nodejs.org/) and [NPM](https://npmjs.org/) are really easy to install. -To make sure you have them available on your machine, -try running the following command. - -```sh -$ node --version -v7.10.1 - -$ npm --version -4.2.0 -``` - -## Installation - -**BEFORE YOU INSTALL:** please read the [prerequisites](#prerequisites) - -Install the package using npm or Yarn - -```sh -$ npm i -S unique-names-generator -``` - -Or using Yarn - -```sh -$ yarn add unique-names-generator -``` - -## Usage - -```js -const { uniqueNamesGenerator, adjectives, colors, animals } = require('unique-names-generator'); - -const randomName = uniqueNamesGenerator({ dictionaries: [adjectives, colors, animals] }); // big_red_donkey - -const shortName = uniqueNamesGenerator({ - dictionaries: [adjectives, animals, colors], // colors can be omitted here as not used - length: 2 -}); // big-donkey -``` - -### Typescript support - -This package export a type definition file so you can use it, out of the box, -inside your Typescript project. - -```typescript -import { uniqueNamesGenerator, Config, adjectives, colors, animals } from 'unique-names-generator'; - -const customConfig: Config = { - dictionaries: [adjectives, colors], - separator: '-', - length: 2, -}; - -const randomName: string = uniqueNamesGenerator({ - dictionaries: [adjectives, colors, animals] -}); // big_red_donkey - -const shortName: string = uniqueNamesGenerator(customConfig); // big-donkey -``` - -## API - -### uniqueNamesGenerator (options) - -Returns a `string` with a random generated name - -### options - -Type: `Config` - -#### dictionaries - -Type: `array` - -required: `true` - -This is an array of dictionaries. Each dictionary is an array of strings containing the words to use for generating the string. - -The [provided dictionaries](#dictionaries-available) can be imported from the library as a separate modules and provided in the desired order. - -```typescript -import { uniqueNamesGenerator, adjectives, colors, animals } from 'unique-names-generator'; - -const shortName: string = uniqueNamesGenerator({ - dictionaries: [colors, adjectives, animals] -}); // red_big_donkey -``` - -Read more about the dictionaries and how to use them, in the [Dictionaries](#dictionaries-available) section. - -#### separator - -Type: `string` - -required: `false` - -Default: `_` - -A string separator to be used for separate the words generated. -The default separator is set to `_`. - -#### length - -Type: `number` - -required: `false` - -Default: `3` - -The default value is set to `3` and it will return a name composed of 3 words. -This values must be equal or minor to the number of [dictionaries](#dictionaries-available) defined (3 by default). -Setting the `length` to a value of `4` will throw an error when only 3 dictionaries are provided. - -#### style - -Type: `lowerCase | upperCase | capital` - -required: `false` - -Default: `lowerCase` - -The default value is set to `lowerCase` and it will return a lower case name. -By setting the value to `upperCase`, the words, will be returned with all the letters in upper case format. -The `capital` option will capitalize each word of the unique name generated - -```typescript -import { uniqueNamesGenerator, adjectives, colors, animals } from 'unique-names-generator'; - -const capitalizedName: string = uniqueNamesGenerator({ - dictionaries: [colors, adjectives, animals], - style: 'capital' -}); // Red_Big_Donkey - -const upperCaseName: string = uniqueNamesGenerator({ - dictionaries: [colors, adjectives, animals], - style: 'upperCase' -}); // RED_BIG_DONKEY - -const lowerCaseName: string = uniqueNamesGenerator({ - dictionaries: [colors, adjectives, animals], - style: 'lowerCase' -}); // red_big_donkey -``` - -#### seed - -Type: `number` - -required: `false` - -A seed is used when wanting to deterministically generate a name. As long as the provided seed is the same the generated name will also always be the same. - -## Dictionaries available - -#### Numbers - -This is a dynamic dictionary. Read more in the [Numbers Dictionary](#numbers-dictionary) section - -#### Adjectives - -A list of more than 1,400 adjectives ready for you to use - -```typescript -import { uniqueNamesGenerator, Config, adjectives } from 'unique-names-generator'; - -const config: Config = { - dictionaries: [adjectives] -} - -const characterName: string = uniqueNamesGenerator(config); // big -``` - -#### Animals - -A list of more than 350 animals ready to use - -```typescript -import { uniqueNamesGenerator, Config, animals } from 'unique-names-generator'; - -const config: Config = { - dictionaries: [animals] -} - -const characterName: string = uniqueNamesGenerator(config); // donkey -``` - -#### Colors - -A list of more than 50 different colors - -```typescript -import { uniqueNamesGenerator, Config, colors } from 'unique-names-generator'; - -const config: Config = { - dictionaries: [colors] -} - -const characterName: string = uniqueNamesGenerator(config); // red -``` - -#### Countries - -A list of more than 250 different countries - -```typescript -import { uniqueNamesGenerator, Config, countries } from 'unique-names-generator'; - -const config: Config = { - dictionaries: [countries] -} - -const characterName: string = uniqueNamesGenerator(config); // United Arab Emirates -``` - -#### Names - -A list of more than 4,900 unique names - -```typescript -import { uniqueNamesGenerator, Config, names } from 'unique-names-generator'; - -const config: Config = { - dictionaries: [names] -} - -const characterName: string = uniqueNamesGenerator(config); // Winona -``` - -#### Languages - -A list of languages - -```typescript -import { uniqueNamesGenerator, Config, languages } from 'unique-names-generator'; - -const config: Config = { - dictionaries: [languages] -} - -const characterName: string = uniqueNamesGenerator(config); // polish -``` - -#### Star Wars - -A list of more than 80 unique character names from Star Wars - -```typescript -import { uniqueNamesGenerator, Config, starWars } from 'unique-names-generator'; - -const config: Config = { - dictionaries: [starWars] -} - -const characterName: string = uniqueNamesGenerator(config); // Han Solo -``` - -### Default dictionaries - -By default, the Unique name generator library comes with 3 dictionaries out of the box, so that you can use them -straight away. -Starting from the version 4 of the library, however, you must explicitly provide the dictionaries within the -configuration object. -This is for reducing the bundle size and allowing tree shaking to remove the extra dictionaries from your bundle when -using custom ones. - -The new syntax for using the default dictionaries is the following: - -```typescript -import { uniqueNamesGenerator, Config, adjectives, colors, animals } from 'unique-names-generator'; - -const config: Config = { - dictionaries: [adjectives, colors, animals] -} - -const characterName: string = uniqueNamesGenerator(config); // red_big_donkey -``` - -### Custom dictionaries - -You might want to provide your custom dictionaries to use for generating your unique names, -in order to meet your business requirements. - -You can easily do that using the [dictionaries](#dictionaries-available) option. - -```typescript -import { uniqueNamesGenerator } from 'unique-names-generator'; - -const starWarsCharacters = [ - 'Han Solo', - 'Jabba The Hutt', - 'R2-D2', - 'Luke Skywalker', - 'Princess Leia Organa' -]; -const colors = [ - 'Green', 'Red', 'Yellow', 'Black' -] - -const characterName: string = uniqueNamesGenerator({ - dictionaries: [colors, starWarsCharacters], - length: 2, - separator: ' ' -}); // Green Luke Skywalker -``` - -### Numbers Dictionary - -You can easily generate random numbers inside your unique name using the Numbers dictionary helper. - -```typescript -import { uniqueNamesGenerator, NumberDictionary } from 'unique-names-generator'; - -const numberDictionary = NumberDictionary.generate({ min: 100, max: 999 }); -const characterName: string = uniqueNamesGenerator({ -dictionaries: [['Dangerous'], ['Snake'], numberDictionary], - length: 3, - separator: '', - style: 'capital' -}); // DangerousSnake123 -``` - -## Numbers Dictionary API - -### generate (options) - -Returns a `string` with a random generated number between 1 and 999 - -### options - -Type: `Config` - -#### min - -Type: `number` - -required: `false` - -default: `1` - -The minimum value to be returned as a random number - -#### max - -Type: `number` - -required: `false` - -default: `999` - -The maximum value to be returned as a random number - -#### length - -Type: `number` - -required: `false` - -The length of the random generated number to be returned. - -Setting a length of 3 will always return a random number between `100` and `999`. This is the same as setting `100` and `999` as `min` and `max` option. - -**Note** If set, this will ignore any `min` and `max` options provided. - - -### Combining custom and provided dictionaries - -You can reuse the dictionaries provided by the library. -Just import the ones that you need and use them directly in your app. - -```typescript -import { uniqueNamesGenerator, adjectives, colors } from 'unique-names-generator'; - -const improvedAdjectives = [ - ...adjectives, - 'abrasive', - 'brash', - 'callous', - 'daft', - 'eccentric', -]; -const xMen = [ -'professorX', -'beast', -'colossus', -'cyclops', -'iceman', -'wolverine', -]; - -const characterName: string = uniqueNamesGenerator({ - dictionaries: [improvedAdjectives, color, xMen], - length: 2, - separator: '-' -}); // eccentric-blue-iceman -``` - -## Migration guide - -### Migration guide from version 3 to version 4 - -Unique names generator v4 implement a new breaking change. - -#### Mandatory `dictionaries` config - -You must now explicitly provide the library with the dictionaries to use. -This is for improving flexibility and allowing tree-shaking to remove the unused dictionaries from -your bundle size. - -Read more about the dictionaries in the [Dictionaries](dictionaries-available) section. - -**v3** - -```typescript -import { uniqueNamesGenerator } from 'unique-names-generator'; - -const randomName = uniqueNamesGenerator(); // big_red_donkey -``` - -**v4** - -```typescript -import { uniqueNamesGenerator, Config, adjectives, colors, animals } from 'unique-names-generator'; - -const config: Config = { - dictionaries: [adjectives, colors, animals] -} - -const randomName = uniqueNamesGenerator(config); // big_red_donkey -``` - -### Migration guide from version 1 or 2 - -Unique names generator v3 implements a couple of breaking changes. -If are upgrading your library from a version 1 or 2, you might be interested in knowing the following: - -#### uniqueNamesGenerator - -This will now work only when a `dictionaries` array is provided according to the -[v4 breaking change](#mandatory-dictionaries-config). - -**v2** - -```typescript -import { uniqueNamesGenerator } from 'unique-names-generator'; - -const randomName = uniqueNamesGenerator(); -``` - -**v4** - -```typescript -import { uniqueNamesGenerator, Config, adjectives, colors, animals } from 'unique-names-generator'; - -const config: Config = { - dictionaries: [adjectives, colors, animals] -} - -const randomName = uniqueNamesGenerator(config); // big_red_donkey -``` - -#### Separator - -**v2** - -```typescript -import { uniqueNamesGenerator } from 'unique-names-generator'; - -const shortName = uniqueNamesGenerator('-'); // big-red-donkey -``` - -**v4** - -```typescript -import { uniqueNamesGenerator, Config, adjectives, colors, animals } from 'unique-names-generator'; - -const config: Config = { - dictionaries: [adjectives, colors, animals], - separator: '-' -} - -const shortName = uniqueNamesGenerator(config); // big-red-donkey -``` - -#### Short - -The `short` property has been replaced by `length` so you can specify as many word as you want - -**v2** - -```typescript -import { uniqueNamesGenerator } from 'unique-names-generator'; - -const shortName = uniqueNamesGenerator(true); // big-donkey -``` - -**v4** - -```typescript -import { uniqueNamesGenerator, Config, adjectives, colors, animals } from 'unique-names-generator'; - -const config: Config = { - dictionaries: [adjectives, colors, animals], - length: 2 -} - -const shortName = uniqueNamesGenerator(config); // big-donkey -``` - -## Contributing - -Please read [CONTRIBUTING.md](CONTRIBUTING.md) for details on our code of conduct, and the process for submitting pull requests to us. - -1. Fork it! -2. Create your feature branch: `git checkout -b my-new-feature` -3. Add your changes: `git add .` -4. Commit your changes: `git commit -am 'Add some feature'` -5. Push to the branch: `git push origin my-new-feature` -6. Submit a pull request :sunglasses: - -## License - -[MIT License](https://andreasonny.mit-license.org/2018) © Andrea SonnY - -## Contributors ✨ - -Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)): - - - - - - - - - - - - - - - - - - - -

Andrea Sonny

💻 📖 💬 📆 🤔 🖋

Abhijit Mehta

🤔

Grant Blakeman

💻 🐛

Deepak

📖 🤔

Anurag Jain

🤔

Digibake

🐛

Chase Moskal

🤔

tholst

📖

Johan Gustafsson

💻 🤔

Alex Wild

🐛 💻
- - - - - - -This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome! diff --git a/tests/iac_integration/cdk/testdata/src/nodejs/NodeJsFunctionConstruct/node_modules/unique-names-generator/dist/dictionaries/adjectives.d.ts b/tests/iac_integration/cdk/testdata/src/nodejs/NodeJsFunctionConstruct/node_modules/unique-names-generator/dist/dictionaries/adjectives.d.ts deleted file mode 100644 index d451d2bc57..0000000000 --- a/tests/iac_integration/cdk/testdata/src/nodejs/NodeJsFunctionConstruct/node_modules/unique-names-generator/dist/dictionaries/adjectives.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -declare const _default: string[]; -export default _default; diff --git a/tests/iac_integration/cdk/testdata/src/nodejs/NodeJsFunctionConstruct/node_modules/unique-names-generator/dist/dictionaries/animals.d.ts b/tests/iac_integration/cdk/testdata/src/nodejs/NodeJsFunctionConstruct/node_modules/unique-names-generator/dist/dictionaries/animals.d.ts deleted file mode 100644 index d451d2bc57..0000000000 --- a/tests/iac_integration/cdk/testdata/src/nodejs/NodeJsFunctionConstruct/node_modules/unique-names-generator/dist/dictionaries/animals.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -declare const _default: string[]; -export default _default; diff --git a/tests/iac_integration/cdk/testdata/src/nodejs/NodeJsFunctionConstruct/node_modules/unique-names-generator/dist/dictionaries/colors.d.ts b/tests/iac_integration/cdk/testdata/src/nodejs/NodeJsFunctionConstruct/node_modules/unique-names-generator/dist/dictionaries/colors.d.ts deleted file mode 100644 index d451d2bc57..0000000000 --- a/tests/iac_integration/cdk/testdata/src/nodejs/NodeJsFunctionConstruct/node_modules/unique-names-generator/dist/dictionaries/colors.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -declare const _default: string[]; -export default _default; diff --git a/tests/iac_integration/cdk/testdata/src/nodejs/NodeJsFunctionConstruct/node_modules/unique-names-generator/dist/dictionaries/countries.d.ts b/tests/iac_integration/cdk/testdata/src/nodejs/NodeJsFunctionConstruct/node_modules/unique-names-generator/dist/dictionaries/countries.d.ts deleted file mode 100644 index d451d2bc57..0000000000 --- a/tests/iac_integration/cdk/testdata/src/nodejs/NodeJsFunctionConstruct/node_modules/unique-names-generator/dist/dictionaries/countries.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -declare const _default: string[]; -export default _default; diff --git a/tests/iac_integration/cdk/testdata/src/nodejs/NodeJsFunctionConstruct/node_modules/unique-names-generator/dist/dictionaries/index.d.ts b/tests/iac_integration/cdk/testdata/src/nodejs/NodeJsFunctionConstruct/node_modules/unique-names-generator/dist/dictionaries/index.d.ts deleted file mode 100644 index 815d810674..0000000000 --- a/tests/iac_integration/cdk/testdata/src/nodejs/NodeJsFunctionConstruct/node_modules/unique-names-generator/dist/dictionaries/index.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -import adjectives from './adjectives'; -import animals from './animals'; -import colors from './colors'; -import countries from './countries'; -import languages from './languages'; -import names from './names'; -import starWars from './star-wars'; -import { NumberDictionary } from './numbers'; -export { adjectives, animals, colors, countries, languages, names, starWars, NumberDictionary }; diff --git a/tests/iac_integration/cdk/testdata/src/nodejs/NodeJsFunctionConstruct/node_modules/unique-names-generator/dist/dictionaries/languages.d.ts b/tests/iac_integration/cdk/testdata/src/nodejs/NodeJsFunctionConstruct/node_modules/unique-names-generator/dist/dictionaries/languages.d.ts deleted file mode 100644 index d451d2bc57..0000000000 --- a/tests/iac_integration/cdk/testdata/src/nodejs/NodeJsFunctionConstruct/node_modules/unique-names-generator/dist/dictionaries/languages.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -declare const _default: string[]; -export default _default; diff --git a/tests/iac_integration/cdk/testdata/src/nodejs/NodeJsFunctionConstruct/node_modules/unique-names-generator/dist/dictionaries/names.d.ts b/tests/iac_integration/cdk/testdata/src/nodejs/NodeJsFunctionConstruct/node_modules/unique-names-generator/dist/dictionaries/names.d.ts deleted file mode 100644 index d451d2bc57..0000000000 --- a/tests/iac_integration/cdk/testdata/src/nodejs/NodeJsFunctionConstruct/node_modules/unique-names-generator/dist/dictionaries/names.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -declare const _default: string[]; -export default _default; diff --git a/tests/iac_integration/cdk/testdata/src/nodejs/NodeJsFunctionConstruct/node_modules/unique-names-generator/dist/dictionaries/numbers.d.ts b/tests/iac_integration/cdk/testdata/src/nodejs/NodeJsFunctionConstruct/node_modules/unique-names-generator/dist/dictionaries/numbers.d.ts deleted file mode 100644 index 067dcd2b0f..0000000000 --- a/tests/iac_integration/cdk/testdata/src/nodejs/NodeJsFunctionConstruct/node_modules/unique-names-generator/dist/dictionaries/numbers.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -interface Config { - min: number; - max: number; - length?: number; -} -export declare class NumberDictionary { - static generate(config?: Partial): string[]; -} -export {}; diff --git a/tests/iac_integration/cdk/testdata/src/nodejs/NodeJsFunctionConstruct/node_modules/unique-names-generator/dist/dictionaries/star-wars.d.ts b/tests/iac_integration/cdk/testdata/src/nodejs/NodeJsFunctionConstruct/node_modules/unique-names-generator/dist/dictionaries/star-wars.d.ts deleted file mode 100644 index d451d2bc57..0000000000 --- a/tests/iac_integration/cdk/testdata/src/nodejs/NodeJsFunctionConstruct/node_modules/unique-names-generator/dist/dictionaries/star-wars.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -declare const _default: string[]; -export default _default; diff --git a/tests/iac_integration/cdk/testdata/src/nodejs/NodeJsFunctionConstruct/node_modules/unique-names-generator/dist/index.d.ts b/tests/iac_integration/cdk/testdata/src/nodejs/NodeJsFunctionConstruct/node_modules/unique-names-generator/dist/index.d.ts deleted file mode 100644 index ccbcfb4719..0000000000 --- a/tests/iac_integration/cdk/testdata/src/nodejs/NodeJsFunctionConstruct/node_modules/unique-names-generator/dist/index.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -export { uniqueNamesGenerator } from './unique-names-generator'; -export { Config } from './unique-names-generator.constructor'; -export { adjectives, animals, colors, countries, languages, names, starWars, NumberDictionary, } from './dictionaries/index'; diff --git a/tests/iac_integration/cdk/testdata/src/nodejs/NodeJsFunctionConstruct/node_modules/unique-names-generator/dist/index.js b/tests/iac_integration/cdk/testdata/src/nodejs/NodeJsFunctionConstruct/node_modules/unique-names-generator/dist/index.js deleted file mode 100644 index 5c32582261..0000000000 --- a/tests/iac_integration/cdk/testdata/src/nodejs/NodeJsFunctionConstruct/node_modules/unique-names-generator/dist/index.js +++ /dev/null @@ -1,2 +0,0 @@ -class a{constructor(a){this.dictionaries=void 0,this.length=void 0,this.separator=void 0,this.style=void 0,this.seed=void 0;const{length:e,separator:i,dictionaries:n,style:l,seed:r}=a;this.dictionaries=n,this.separator=i,this.length=e,this.style=l,this.seed=r}generate(){if(!this.dictionaries)throw new Error('Cannot find any dictionary. Please provide at least one, or leave the "dictionary" field empty in the config object');if(this.length<=0)throw new Error("Invalid length provided");if(this.length>this.dictionaries.length)throw new Error(`The length cannot be bigger than the number of dictionaries.\nLength provided: ${this.length}. Number of dictionaries provided: ${this.dictionaries.length}`);return this.dictionaries.slice(0,this.length).reduce((a,e)=>{let i=e[Math.floor((this.seed?(n=this.seed,(a=>{a=1831565813+(a|=0)|0;let e=Math.imul(a^a>>>15,1|a);return e=e+Math.imul(e^e>>>7,61|e)^e,((e^e>>>14)>>>0)/4294967296})(n)):Math.random())*e.length)]||"";var n;if("lowerCase"===this.style)i=i.toLowerCase();else if("capital"===this.style){const[a,...e]=i.split("");i=a.toUpperCase()+e.join("")}else"upperCase"===this.style&&(i=i.toUpperCase());return a?`${a}${this.separator}${i}`:`${i}`},"")}}const e={separator:"_",dictionaries:[]};exports.NumberDictionary=class{static generate(a={}){let e=a.min||1,i=a.max||999;if(a.length){const n=Math.pow(10,a.length);return e=n/10,i=n-1,[`${Math.floor(Math.random()*(i-e))+e}`]}return[`${Math.floor(Math.random()*(i-e))+e}`]}},exports.adjectives=["able","above","absent","absolute","abstract","abundant","academic","acceptable","accepted","accessible","accurate","accused","active","actual","acute","added","additional","adequate","adjacent","administrative","adorable","advanced","adverse","advisory","aesthetic","afraid","aggregate","aggressive","agreeable","agreed","agricultural","alert","alive","alleged","allied","alone","alright","alternative","amateur","amazing","ambitious","amused","ancient","angry","annoyed","annual","anonymous","anxious","appalling","apparent","applicable","appropriate","arbitrary","architectural","armed","arrogant","artificial","artistic","ashamed","asleep","assistant","associated","atomic","attractive","automatic","autonomous","available","average","awake","aware","awful","awkward","back","bad","balanced","bare","basic","beautiful","beneficial","better","bewildered","big","binding","biological","bitter","bizarre","blank","blind","blonde","bloody","blushing","boiling","bold","bored","boring","bottom","brainy","brave","breakable","breezy","brief","bright","brilliant","broad","broken","bumpy","burning","busy","calm","capable","capitalist","careful","casual","causal","cautious","central","certain","changing","characteristic","charming","cheap","cheerful","chemical","chief","chilly","chosen","christian","chronic","chubby","circular","civic","civil","civilian","classic","classical","clean","clear","clever","clinical","close","closed","cloudy","clumsy","coastal","cognitive","coherent","cold","collective","colonial","colorful","colossal","coloured","colourful","combative","combined","comfortable","coming","commercial","common","communist","compact","comparable","comparative","compatible","competent","competitive","complete","complex","complicated","comprehensive","compulsory","conceptual","concerned","concrete","condemned","confident","confidential","confused","conscious","conservation","conservative","considerable","consistent","constant","constitutional","contemporary","content","continental","continued","continuing","continuous","controlled","controversial","convenient","conventional","convinced","convincing","cooing","cool","cooperative","corporate","correct","corresponding","costly","courageous","crazy","creative","creepy","criminal","critical","crooked","crowded","crucial","crude","cruel","cuddly","cultural","curious","curly","current","curved","cute","daily","damaged","damp","dangerous","dark","dead","deaf","deafening","dear","decent","decisive","deep","defeated","defensive","defiant","definite","deliberate","delicate","delicious","delighted","delightful","democratic","dependent","depressed","desirable","desperate","detailed","determined","developed","developing","devoted","different","difficult","digital","diplomatic","direct","dirty","disabled","disappointed","disastrous","disciplinary","disgusted","distant","distinct","distinctive","distinguished","disturbed","disturbing","diverse","divine","dizzy","domestic","dominant","double","doubtful","drab","dramatic","dreadful","driving","drunk","dry","dual","due","dull","dusty","dutch","dying","dynamic","eager","early","eastern","easy","economic","educational","eerie","effective","efficient","elaborate","elated","elderly","eldest","electoral","electric","electrical","electronic","elegant","eligible","embarrassed","embarrassing","emotional","empirical","empty","enchanting","encouraging","endless","energetic","enormous","enthusiastic","entire","entitled","envious","environmental","equal","equivalent","essential","established","estimated","ethical","ethnic","eventual","everyday","evident","evil","evolutionary","exact","excellent","exceptional","excess","excessive","excited","exciting","exclusive","existing","exotic","expected","expensive","experienced","experimental","explicit","extended","extensive","external","extra","extraordinary","extreme","exuberant","faint","fair","faithful","familiar","famous","fancy","fantastic","far","fascinating","fashionable","fast","fat","fatal","favourable","favourite","federal","fellow","female","feminist","few","fierce","filthy","final","financial","fine","firm","fiscal","fit","fixed","flaky","flat","flexible","fluffy","fluttering","flying","following","fond","foolish","foreign","formal","formidable","forthcoming","fortunate","forward","fragile","frail","frantic","free","frequent","fresh","friendly","frightened","front","frozen","full","fun","functional","fundamental","funny","furious","future","fuzzy","gastric","gay","general","generous","genetic","gentle","genuine","geographical","giant","gigantic","given","glad","glamorous","gleaming","global","glorious","golden","good","gorgeous","gothic","governing","graceful","gradual","grand","grateful","greasy","great","grieving","grim","gross","grotesque","growing","grubby","grumpy","guilty","handicapped","handsome","happy","hard","harsh","head","healthy","heavy","helpful","helpless","hidden","high","hilarious","hissing","historic","historical","hollow","holy","homeless","homely","hon","honest","horizontal","horrible","hostile","hot","huge","human","hungry","hurt","hushed","husky","icy","ideal","identical","ideological","ill","illegal","imaginative","immediate","immense","imperial","implicit","important","impossible","impressed","impressive","improved","inadequate","inappropriate","inc","inclined","increased","increasing","incredible","independent","indirect","individual","industrial","inevitable","influential","informal","inherent","initial","injured","inland","inner","innocent","innovative","inquisitive","instant","institutional","insufficient","intact","integral","integrated","intellectual","intelligent","intense","intensive","interested","interesting","interim","interior","intermediate","internal","international","intimate","invisible","involved","irrelevant","isolated","itchy","jealous","jittery","joint","jolly","joyous","judicial","juicy","junior","just","keen","key","kind","known","labour","large","late","latin","lazy","leading","left","legal","legislative","legitimate","lengthy","lesser","level","lexical","liable","liberal","light","like","likely","limited","linear","linguistic","liquid","literary","little","live","lively","living","local","logical","lonely","long","loose","lost","loud","lovely","low","loyal","ltd","lucky","mad","magic","magnetic","magnificent","main","major","male","mammoth","managerial","managing","manual","many","marginal","marine","marked","married","marvellous","marxist","mass","massive","mathematical","mature","maximum","mean","meaningful","mechanical","medical","medieval","melodic","melted","mental","mere","metropolitan","mid","middle","mighty","mild","military","miniature","minimal","minimum","ministerial","minor","miserable","misleading","missing","misty","mixed","moaning","mobile","moderate","modern","modest","molecular","monetary","monthly","moral","motionless","muddy","multiple","mushy","musical","mute","mutual","mysterious","naked","narrow","nasty","national","native","natural","naughty","naval","near","nearby","neat","necessary","negative","neighbouring","nervous","net","neutral","new","nice","noble","noisy","normal","northern","nosy","notable","novel","nuclear","numerous","nursing","nutritious","nutty","obedient","objective","obliged","obnoxious","obvious","occasional","occupational","odd","official","ok","okay","old","olympic","only","open","operational","opposite","optimistic","oral","ordinary","organic","organisational","original","orthodox","other","outdoor","outer","outrageous","outside","outstanding","overall","overseas","overwhelming","painful","pale","panicky","parallel","parental","parliamentary","partial","particular","passing","passive","past","patient","payable","peaceful","peculiar","perfect","permanent","persistent","personal","petite","philosophical","physical","plain","planned","plastic","pleasant","pleased","poised","polite","political","poor","popular","positive","possible","potential","powerful","practical","precious","precise","preferred","pregnant","preliminary","premier","prepared","present","presidential","pretty","previous","prickly","primary","prime","primitive","principal","printed","prior","private","probable","productive","professional","profitable","profound","progressive","prominent","promising","proper","proposed","prospective","protective","protestant","proud","provincial","psychiatric","psychological","public","puny","pure","purring","puzzled","quaint","qualified","quarrelsome","querulous","quick","quickest","quiet","quintessential","quixotic","racial","radical","rainy","random","rapid","rare","raspy","rational","ratty","raw","ready","real","realistic","rear","reasonable","recent","reduced","redundant","regional","registered","regular","regulatory","related","relative","relaxed","relevant","reliable","relieved","religious","reluctant","remaining","remarkable","remote","renewed","representative","repulsive","required","resident","residential","resonant","respectable","respective","responsible","resulting","retail","retired","revolutionary","rich","ridiculous","right","rigid","ripe","rising","rival","roasted","robust","rolling","romantic","rotten","rough","round","royal","rubber","rude","ruling","running","rural","sacred","sad","safe","salty","satisfactory","satisfied","scared","scary","scattered","scientific","scornful","scrawny","screeching","secondary","secret","secure","select","selected","selective","selfish","semantic","senior","sensible","sensitive","separate","serious","severe","sexual","shaggy","shaky","shallow","shared","sharp","sheer","shiny","shivering","shocked","short","shrill","shy","sick","significant","silent","silky","silly","similar","simple","single","skilled","skinny","sleepy","slight","slim","slimy","slippery","slow","small","smart","smiling","smoggy","smooth","social","socialist","soft","solar","sole","solid","sophisticated","sore","sorry","sound","sour","southern","soviet","spare","sparkling","spatial","special","specific","specified","spectacular","spicy","spiritual","splendid","spontaneous","sporting","spotless","spotty","square","squealing","stable","stale","standard","static","statistical","statutory","steady","steep","sticky","stiff","still","stingy","stormy","straight","straightforward","strange","strategic","strict","striking","striped","strong","structural","stuck","stupid","subjective","subsequent","substantial","subtle","successful","successive","sudden","sufficient","suitable","sunny","super","superb","superior","supporting","supposed","supreme","sure","surprised","surprising","surrounding","surviving","suspicious","sweet","swift","symbolic","sympathetic","systematic","tall","tame","tart","tasteless","tasty","technical","technological","teenage","temporary","tender","tense","terrible","territorial","testy","then","theoretical","thick","thin","thirsty","thorough","thoughtful","thoughtless","thundering","tight","tiny","tired","top","tory","total","tough","toxic","traditional","tragic","tremendous","tricky","tropical","troubled","typical","ugliest","ugly","ultimate","unable","unacceptable","unaware","uncertain","unchanged","uncomfortable","unconscious","underground","underlying","unemployed","uneven","unexpected","unfair","unfortunate","unhappy","uniform","uninterested","unique","united","universal","unknown","unlikely","unnecessary","unpleasant","unsightly","unusual","unwilling","upper","upset","uptight","urban","urgent","used","useful","useless","usual","vague","valid","valuable","variable","varied","various","varying","vast","verbal","vertical","very","vicarious","vicious","victorious","violent","visible","visiting","visual","vital","vitreous","vivacious","vivid","vocal","vocational","voiceless","voluminous","voluntary","vulnerable","wandering","warm","wasteful","watery","weak","wealthy","weary","wee","weekly","weird","welcome","well","western","wet","whispering","whole","wicked","wide","widespread","wild","wilful","willing","willowy","wily","wise","wispy","wittering","witty","wonderful","wooden","working","worldwide","worried","worrying","worthwhile","worthy","written","wrong","xenacious","xenial","xenogeneic","xenophobic","xeric","xerothermic","yabbering","yammering","yappiest","yappy","yawning","yearling","yearning","yeasty","yelling","yelping","yielding","yodelling","young","youngest","youthful","ytterbic","yucky","yummy","zany","zealous","zeroth","zestful","zesty","zippy","zonal","zoophagous","zygomorphic","zygotic"],exports.animals=["aardvark","aardwolf","albatross","alligator","alpaca","amphibian","anaconda","angelfish","anglerfish","ant","anteater","antelope","antlion","ape","aphid","armadillo","asp","baboon","badger","bandicoot","barnacle","barracuda","basilisk","bass","bat","bear","beaver","bedbug","bee","beetle","bird","bison","blackbird","boa","boar","bobcat","bobolink","bonobo","booby","bovid","bug","butterfly","buzzard","camel","canid","canidae","capybara","cardinal","caribou","carp","cat","caterpillar","catfish","catshark","cattle","centipede","cephalopod","chameleon","cheetah","chickadee","chicken","chimpanzee","chinchilla","chipmunk","cicada","clam","clownfish","cobra","cockroach","cod","condor","constrictor","coral","cougar","cow","coyote","crab","crane","crawdad","crayfish","cricket","crocodile","crow","cuckoo","damselfly","deer","dingo","dinosaur","dog","dolphin","donkey","dormouse","dove","dragon","dragonfly","duck","eagle","earthworm","earwig","echidna","eel","egret","elephant","elk","emu","ermine","falcon","felidae","ferret","finch","firefly","fish","flamingo","flea","fly","flyingfish","fowl","fox","frog","galliform","gamefowl","gayal","gazelle","gecko","gerbil","gibbon","giraffe","goat","goldfish","goose","gopher","gorilla","grasshopper","grouse","guan","guanaco","guineafowl","gull","guppy","haddock","halibut","hamster","hare","harrier","hawk","hedgehog","heron","herring","hippopotamus","hookworm","hornet","horse","hoverfly","hummingbird","hyena","iguana","impala","jackal","jaguar","jay","jellyfish","junglefowl","kangaroo","kingfisher","kite","kiwi","koala","koi","krill","ladybug","lamprey","landfowl","lark","leech","lemming","lemur","leopard","leopon","limpet","lion","lizard","llama","lobster","locust","loon","louse","lungfish","lynx","macaw","mackerel","magpie","mammal","manatee","mandrill","marlin","marmoset","marmot","marsupial","marten","mastodon","meadowlark","meerkat","mink","minnow","mite","mockingbird","mole","mollusk","mongoose","monkey","moose","mosquito","moth","mouse","mule","muskox","narwhal","newt","nightingale","ocelot","octopus","opossum","orangutan","orca","ostrich","otter","owl","ox","panda","panther","parakeet","parrot","parrotfish","partridge","peacock","peafowl","pelican","penguin","perch","pheasant","pig","pigeon","pike","pinniped","piranha","planarian","platypus","pony","porcupine","porpoise","possum","prawn","primate","ptarmigan","puffin","puma","python","quail","quelea","quokka","rabbit","raccoon","rat","rattlesnake","raven","reindeer","reptile","rhinoceros","roadrunner","rodent","rook","rooster","roundworm","sailfish","salamander","salmon","sawfish","scallop","scorpion","seahorse","shark","sheep","shrew","shrimp","silkworm","silverfish","skink","skunk","sloth","slug","smelt","snail","snake","snipe","sole","sparrow","spider","spoonbill","squid","squirrel","starfish","stingray","stoat","stork","sturgeon","swallow","swan","swift","swordfish","swordtail","tahr","takin","tapir","tarantula","tarsier","termite","tern","thrush","tick","tiger","tiglon","toad","tortoise","toucan","trout","tuna","turkey","turtle","tyrannosaurus","unicorn","urial","vicuna","viper","vole","vulture","wallaby","walrus","warbler","wasp","weasel","whale","whippet","whitefish","wildcat","wildebeest","wildfowl","wolf","wolverine","wombat","woodpecker","worm","wren","xerinae","yak","zebra"],exports.colors=["amaranth","amber","amethyst","apricot","aqua","aquamarine","azure","beige","black","blue","blush","bronze","brown","chocolate","coffee","copper","coral","crimson","cyan","emerald","fuchsia","gold","gray","green","harlequin","indigo","ivory","jade","lavender","lime","magenta","maroon","moccasin","olive","orange","peach","pink","plum","purple","red","rose","salmon","sapphire","scarlet","silver","tan","teal","tomato","turquoise","violet","white","yellow"],exports.countries=["Afghanistan","Åland Islands","Albania","Algeria","American Samoa","Andorra","Angola","Anguilla","Antarctica","Antigua & Barbuda","Argentina","Armenia","Aruba","Ascension Island","Australia","Austria","Azerbaijan","Bahamas","Bahrain","Bangladesh","Barbados","Belarus","Belgium","Belize","Benin","Bermuda","Bhutan","Bolivia","Bosnia & Herzegovina","Botswana","Brazil","British Indian Ocean Territory","British Virgin Islands","Brunei","Bulgaria","Burkina Faso","Burundi","Cambodia","Cameroon","Canada","Canary Islands","Cape Verde","Caribbean Netherlands","Cayman Islands","Central African Republic","Ceuta & Melilla","Chad","Chile","China","Christmas Island","Cocos Islands","Colombia","Comoros","Congo","Cook Islands","Costa Rica","Côte d'Ivoire","Croatia","Cuba","Curaçao","Cyprus","Czechia","Denmark","Diego Garcia","Djibouti","Dominica","Dominican Republic","Ecuador","Egypt","El Salvador","Equatorial Guinea","Eritrea","Estonia","Ethiopia","Eurozone","Falkland Islands","Faroe Islands","Fiji","Finland","France","French Guiana","French Polynesia","French Southern Territories","Gabon","Gambia","Georgia","Germany","Ghana","Gibraltar","Greece","Greenland","Grenada","Guadeloupe","Guam","Guatemala","Guernsey","Guinea","Guinea-Bissau","Guyana","Haiti","Honduras","Hong Kong SAR China","Hungary","Iceland","India","Indonesia","Iran","Iraq","Ireland","Isle of Man","Israel","Italy","Jamaica","Japan","Jersey","Jordan","Kazakhstan","Kenya","Kiribati","Kosovo","Kuwait","Kyrgyzstan","Laos","Latvia","Lebanon","Lesotho","Liberia","Libya","Liechtenstein","Lithuania","Luxembourg","Macau SAR China","Macedonia","Madagascar","Malawi","Malaysia","Maldives","Mali","Malta","Marshall Islands","Martinique","Mauritania","Mauritius","Mayotte","Mexico","Micronesia","Moldova","Monaco","Mongolia","Montenegro","Montserrat","Morocco","Mozambique","Myanmar","Namibia","Nauru","Nepal","Netherlands","New Caledonia","New Zealand","Nicaragua","Niger","Nigeria","Niue","Norfolk Island","North Korea","Northern Mariana Islands","Norway","Oman","Pakistan","Palau","Palestinian Territories","Panama","Papua New Guinea","Paraguay","Peru","Philippines","Pitcairn Islands","Poland","Portugal","Puerto Rico","Qatar","Réunion","Romania","Russia","Rwanda","Samoa","San Marino","São Tomé & Príncipe","Saudi Arabia","Senegal","Serbia","Seychelles","Sierra Leone","Singapore","Sint Maarten","Slovakia","Slovenia","Solomon Islands","Somalia","South Africa","South Georgia & South Sandwich Islands","South Korea","South Sudan","Spain","Sri Lanka","St. Barthélemy","St. Helena","St. Kitts & Nevis","St. Lucia","St. Martin","St. Pierre & Miquelon","St. Vincent & Grenadines","Sudan","Suriname","Svalbard & Jan Mayen","Swaziland","Sweden","Switzerland","Syria","Taiwan","Tajikistan","Tanzania","Thailand","Timor-Leste","Togo","Tokelau","Tonga","Trinidad & Tobago","Tristan da Cunha","Tunisia","Turkey","Turkmenistan","Turks & Caicos Islands","Tuvalu","U.S. Outlying Islands","U.S. Virgin Islands","Uganda","Ukraine","United Arab Emirates","United Kingdom","United Nations","United States","Uruguay","Uzbekistan","Vanuatu","Vatican City","Venezuela","Vietnam","Wallis & Futuna","Western Sahara","Yemen","Zambia","Zimbabwe"],exports.languages=["Akan","Amharic","Arabic","Assamese","Awadhi","Azerbaijani","Balochi","Belarusian","Bengali","Bhojpuri","Burmese","Cebuano","Chewa","Chhattisgarhi","Chittagonian","Czech","Deccan","Dhundhari","Dutch","English","French","Fula","Gan","German","Greek","Gujarati","Hakka","Haryanvi","Hausa","Hiligaynon","Hindi","Hmong","Hungarian","Igbo","Ilocano","Italian","Japanese","Javanese","Jin","Kannada","Kazakh","Khmer","Kinyarwanda","Kirundi","Konkani","Korean","Kurdish","Madurese","Magahi","Maithili","Malagasy","Malay","Malayalam","Mandarin","Marathi","Marwari","Min","Mossi","Nepali","Odia","Oromo","Pashto","Persian","Polish","Portuguese","Punjabi","Quechua","Romanian","Russian","Saraiki","Shona","Sindhi","Sinhala","Somali","Spanish","Sundanese","Swedish","Sylheti","Tagalog","Tamil","Telugu","Thai","Turkish","Turkmen","Ukrainian","Urdu","Uyghur","Uzbek","Vietnamese","Wu","Xhosa","Xiang","Yoruba","Yue","Zhuang","Zulu"],exports.names=["Aaren","Aarika","Abagael","Abagail","Abbe","Abbey","Abbi","Abbie","Abby","Abbye","Abigael","Abigail","Abigale","Abra","Ada","Adah","Adaline","Adan","Adara","Adda","Addi","Addia","Addie","Addy","Adel","Adela","Adelaida","Adelaide","Adele","Adelheid","Adelice","Adelina","Adelind","Adeline","Adella","Adelle","Adena","Adey","Adi","Adiana","Adina","Adora","Adore","Adoree","Adorne","Adrea","Adria","Adriaens","Adrian","Adriana","Adriane","Adrianna","Adrianne","Adriena","Adrienne","Aeriel","Aeriela","Aeriell","Afton","Ag","Agace","Agata","Agatha","Agathe","Aggi","Aggie","Aggy","Agna","Agnella","Agnes","Agnese","Agnesse","Agneta","Agnola","Agretha","Aida","Aidan","Aigneis","Aila","Aile","Ailee","Aileen","Ailene","Ailey","Aili","Ailina","Ailis","Ailsun","Ailyn","Aime","Aimee","Aimil","Aindrea","Ainslee","Ainsley","Ainslie","Ajay","Alaine","Alameda","Alana","Alanah","Alane","Alanna","Alayne","Alberta","Albertina","Albertine","Albina","Alecia","Aleda","Aleece","Aleen","Alejandra","Alejandrina","Alena","Alene","Alessandra","Aleta","Alethea","Alex","Alexa","Alexandra","Alexandrina","Alexi","Alexia","Alexina","Alexine","Alexis","Alfi","Alfie","Alfreda","Alfy","Ali","Alia","Alica","Alice","Alicea","Alicia","Alida","Alidia","Alie","Alika","Alikee","Alina","Aline","Alis","Alisa","Alisha","Alison","Alissa","Alisun","Alix","Aliza","Alla","Alleen","Allegra","Allene","Alli","Allianora","Allie","Allina","Allis","Allison","Allissa","Allix","Allsun","Allx","Ally","Allyce","Allyn","Allys","Allyson","Alma","Almeda","Almeria","Almeta","Almira","Almire","Aloise","Aloisia","Aloysia","Alta","Althea","Alvera","Alverta","Alvina","Alvinia","Alvira","Alyce","Alyda","Alys","Alysa","Alyse","Alysia","Alyson","Alyss","Alyssa","Amabel","Amabelle","Amalea","Amalee","Amaleta","Amalia","Amalie","Amalita","Amalle","Amanda","Amandi","Amandie","Amandy","Amara","Amargo","Amata","Amber","Amberly","Ambur","Ame","Amelia","Amelie","Amelina","Ameline","Amelita","Ami","Amie","Amii","Amil","Amitie","Amity","Ammamaria","Amy","Amye","Ana","Anabal","Anabel","Anabella","Anabelle","Analiese","Analise","Anallese","Anallise","Anastasia","Anastasie","Anastassia","Anatola","Andee","Andeee","Anderea","Andi","Andie","Andra","Andrea","Andreana","Andree","Andrei","Andria","Andriana","Andriette","Andromache","Andy","Anestassia","Anet","Anett","Anetta","Anette","Ange","Angel","Angela","Angele","Angelia","Angelica","Angelika","Angelina","Angeline","Angelique","Angelita","Angelle","Angie","Angil","Angy","Ania","Anica","Anissa","Anita","Anitra","Anjanette","Anjela","Ann","Ann-marie","Anna","Anna-diana","Anna-diane","Anna-maria","Annabal","Annabel","Annabela","Annabell","Annabella","Annabelle","Annadiana","Annadiane","Annalee","Annaliese","Annalise","Annamaria","Annamarie","Anne","Anne-corinne","Anne-marie","Annecorinne","Anneliese","Annelise","Annemarie","Annetta","Annette","Anni","Annice","Annie","Annis","Annissa","Annmaria","Annmarie","Annnora","Annora","Anny","Anselma","Ansley","Anstice","Anthe","Anthea","Anthia","Anthiathia","Antoinette","Antonella","Antonetta","Antonia","Antonie","Antonietta","Antonina","Anya","Appolonia","April","Aprilette","Ara","Arabel","Arabela","Arabele","Arabella","Arabelle","Arda","Ardath","Ardeen","Ardelia","Ardelis","Ardella","Ardelle","Arden","Ardene","Ardenia","Ardine","Ardis","Ardisj","Ardith","Ardra","Ardyce","Ardys","Ardyth","Aretha","Ariadne","Ariana","Aridatha","Ariel","Ariela","Ariella","Arielle","Arlana","Arlee","Arleen","Arlen","Arlena","Arlene","Arleta","Arlette","Arleyne","Arlie","Arliene","Arlina","Arlinda","Arline","Arluene","Arly","Arlyn","Arlyne","Aryn","Ashely","Ashia","Ashien","Ashil","Ashla","Ashlan","Ashlee","Ashleigh","Ashlen","Ashley","Ashli","Ashlie","Ashly","Asia","Astra","Astrid","Astrix","Atalanta","Athena","Athene","Atlanta","Atlante","Auberta","Aubine","Aubree","Aubrette","Aubrey","Aubrie","Aubry","Audi","Audie","Audra","Audre","Audrey","Audrie","Audry","Audrye","Audy","Augusta","Auguste","Augustina","Augustine","Aundrea","Aura","Aurea","Aurel","Aurelea","Aurelia","Aurelie","Auria","Aurie","Aurilia","Aurlie","Auroora","Aurora","Aurore","Austin","Austina","Austine","Ava","Aveline","Averil","Averyl","Avie","Avis","Aviva","Avivah","Avril","Avrit","Ayn","Bab","Babara","Babb","Babbette","Babbie","Babette","Babita","Babs","Bambi","Bambie","Bamby","Barb","Barbabra","Barbara","Barbara-anne","Barbaraanne","Barbe","Barbee","Barbette","Barbey","Barbi","Barbie","Barbra","Barby","Bari","Barrie","Barry","Basia","Bathsheba","Batsheva","Bea","Beatrice","Beatrisa","Beatrix","Beatriz","Bebe","Becca","Becka","Becki","Beckie","Becky","Bee","Beilul","Beitris","Bekki","Bel","Belia","Belicia","Belinda","Belita","Bell","Bella","Bellanca","Belle","Bellina","Belva","Belvia","Bendite","Benedetta","Benedicta","Benedikta","Benetta","Benita","Benni","Bennie","Benny","Benoite","Berenice","Beret","Berget","Berna","Bernadene","Bernadette","Bernadina","Bernadine","Bernardina","Bernardine","Bernelle","Bernete","Bernetta","Bernette","Berni","Bernice","Bernie","Bernita","Berny","Berri","Berrie","Berry","Bert","Berta","Berte","Bertha","Berthe","Berti","Bertie","Bertina","Bertine","Berty","Beryl","Beryle","Bess","Bessie","Bessy","Beth","Bethanne","Bethany","Bethena","Bethina","Betsey","Betsy","Betta","Bette","Bette-ann","Betteann","Betteanne","Betti","Bettina","Bettine","Betty","Bettye","Beulah","Bev","Beverie","Beverlee","Beverley","Beverlie","Beverly","Bevvy","Bianca","Bianka","Bibbie","Bibby","Bibbye","Bibi","Biddie","Biddy","Bidget","Bili","Bill","Billi","Billie","Billy","Billye","Binni","Binnie","Binny","Bird","Birdie","Birgit","Birgitta","Blair","Blaire","Blake","Blakelee","Blakeley","Blanca","Blanch","Blancha","Blanche","Blinni","Blinnie","Blinny","Bliss","Blisse","Blithe","Blondell","Blondelle","Blondie","Blondy","Blythe","Bobbe","Bobbee","Bobbette","Bobbi","Bobbie","Bobby","Bobbye","Bobette","Bobina","Bobine","Bobinette","Bonita","Bonnee","Bonni","Bonnibelle","Bonnie","Bonny","Brana","Brandais","Brande","Brandea","Brandi","Brandice","Brandie","Brandise","Brandy","Breanne","Brear","Bree","Breena","Bren","Brena","Brenda","Brenn","Brenna","Brett","Bria","Briana","Brianna","Brianne","Bride","Bridget","Bridgette","Bridie","Brier","Brietta","Brigid","Brigida","Brigit","Brigitta","Brigitte","Brina","Briney","Brinn","Brinna","Briny","Brit","Brita","Britney","Britni","Britt","Britta","Brittan","Brittaney","Brittani","Brittany","Britte","Britteny","Brittne","Brittney","Brittni","Brook","Brooke","Brooks","Brunhilda","Brunhilde","Bryana","Bryn","Bryna","Brynn","Brynna","Brynne","Buffy","Bunni","Bunnie","Bunny","Cacilia","Cacilie","Cahra","Cairistiona","Caitlin","Caitrin","Cal","Calida","Calla","Calley","Calli","Callida","Callie","Cally","Calypso","Cam","Camala","Camel","Camella","Camellia","Cami","Camila","Camile","Camilla","Camille","Cammi","Cammie","Cammy","Candace","Candi","Candice","Candida","Candide","Candie","Candis","Candra","Candy","Caprice","Cara","Caralie","Caren","Carena","Caresa","Caressa","Caresse","Carey","Cari","Caria","Carie","Caril","Carilyn","Carin","Carina","Carine","Cariotta","Carissa","Carita","Caritta","Carla","Carlee","Carleen","Carlen","Carlene","Carley","Carlie","Carlin","Carlina","Carline","Carlita","Carlota","Carlotta","Carly","Carlye","Carlyn","Carlynn","Carlynne","Carma","Carmel","Carmela","Carmelia","Carmelina","Carmelita","Carmella","Carmelle","Carmen","Carmencita","Carmina","Carmine","Carmita","Carmon","Caro","Carol","Carol-jean","Carola","Carolan","Carolann","Carole","Carolee","Carolin","Carolina","Caroline","Caroljean","Carolyn","Carolyne","Carolynn","Caron","Carree","Carri","Carrie","Carrissa","Carroll","Carry","Cary","Caryl","Caryn","Casandra","Casey","Casi","Casie","Cass","Cassandra","Cassandre","Cassandry","Cassaundra","Cassey","Cassi","Cassie","Cassondra","Cassy","Catarina","Cate","Caterina","Catha","Catharina","Catharine","Cathe","Cathee","Catherin","Catherina","Catherine","Cathi","Cathie","Cathleen","Cathlene","Cathrin","Cathrine","Cathryn","Cathy","Cathyleen","Cati","Catie","Catina","Catlaina","Catlee","Catlin","Catrina","Catriona","Caty","Caye","Cayla","Cecelia","Cecil","Cecile","Ceciley","Cecilia","Cecilla","Cecily","Ceil","Cele","Celene","Celesta","Celeste","Celestia","Celestina","Celestine","Celestyn","Celestyna","Celia","Celie","Celina","Celinda","Celine","Celinka","Celisse","Celka","Celle","Cesya","Chad","Chanda","Chandal","Chandra","Channa","Chantal","Chantalle","Charil","Charin","Charis","Charissa","Charisse","Charita","Charity","Charla","Charlean","Charleen","Charlena","Charlene","Charline","Charlot","Charlotta","Charlotte","Charmain","Charmaine","Charmane","Charmian","Charmine","Charmion","Charo","Charyl","Chastity","Chelsae","Chelsea","Chelsey","Chelsie","Chelsy","Cher","Chere","Cherey","Cheri","Cherianne","Cherice","Cherida","Cherie","Cherilyn","Cherilynn","Cherin","Cherise","Cherish","Cherlyn","Cherri","Cherrita","Cherry","Chery","Cherye","Cheryl","Cheslie","Chiarra","Chickie","Chicky","Chiquia","Chiquita","Chlo","Chloe","Chloette","Chloris","Chris","Chrissie","Chrissy","Christa","Christabel","Christabella","Christal","Christalle","Christan","Christean","Christel","Christen","Christi","Christian","Christiana","Christiane","Christie","Christin","Christina","Christine","Christy","Christye","Christyna","Chrysa","Chrysler","Chrystal","Chryste","Chrystel","Cicely","Cicily","Ciel","Cilka","Cinda","Cindee","Cindelyn","Cinderella","Cindi","Cindie","Cindra","Cindy","Cinnamon","Cissiee","Cissy","Clair","Claire","Clara","Clarabelle","Clare","Claresta","Clareta","Claretta","Clarette","Clarey","Clari","Claribel","Clarice","Clarie","Clarinda","Clarine","Clarissa","Clarisse","Clarita","Clary","Claude","Claudelle","Claudetta","Claudette","Claudia","Claudie","Claudina","Claudine","Clea","Clem","Clemence","Clementia","Clementina","Clementine","Clemmie","Clemmy","Cleo","Cleopatra","Clerissa","Clio","Clo","Cloe","Cloris","Clotilda","Clovis","Codee","Codi","Codie","Cody","Coleen","Colene","Coletta","Colette","Colleen","Collen","Collete","Collette","Collie","Colline","Colly","Con","Concettina","Conchita","Concordia","Conni","Connie","Conny","Consolata","Constance","Constancia","Constancy","Constanta","Constantia","Constantina","Constantine","Consuela","Consuelo","Cookie","Cora","Corabel","Corabella","Corabelle","Coral","Coralie","Coraline","Coralyn","Cordelia","Cordelie","Cordey","Cordi","Cordie","Cordula","Cordy","Coreen","Corella","Corenda","Corene","Coretta","Corette","Corey","Cori","Corie","Corilla","Corina","Corine","Corinna","Corinne","Coriss","Corissa","Corliss","Corly","Cornela","Cornelia","Cornelle","Cornie","Corny","Correna","Correy","Corri","Corrianne","Corrie","Corrina","Corrine","Corrinne","Corry","Cortney","Cory","Cosetta","Cosette","Costanza","Courtenay","Courtnay","Courtney","Crin","Cris","Crissie","Crissy","Crista","Cristabel","Cristal","Cristen","Cristi","Cristie","Cristin","Cristina","Cristine","Cristionna","Cristy","Crysta","Crystal","Crystie","Cthrine","Cyb","Cybil","Cybill","Cymbre","Cynde","Cyndi","Cyndia","Cyndie","Cyndy","Cynthea","Cynthia","Cynthie","Cynthy","Dacey","Dacia","Dacie","Dacy","Dael","Daffi","Daffie","Daffy","Dagmar","Dahlia","Daile","Daisey","Daisi","Daisie","Daisy","Dale","Dalenna","Dalia","Dalila","Dallas","Daloris","Damara","Damaris","Damita","Dana","Danell","Danella","Danette","Dani","Dania","Danica","Danice","Daniela","Daniele","Daniella","Danielle","Danika","Danila","Danit","Danita","Danna","Danni","Dannie","Danny","Dannye","Danya","Danyelle","Danyette","Daphene","Daphna","Daphne","Dara","Darb","Darbie","Darby","Darcee","Darcey","Darci","Darcie","Darcy","Darda","Dareen","Darell","Darelle","Dari","Daria","Darice","Darla","Darleen","Darlene","Darline","Darlleen","Daron","Darrelle","Darryl","Darsey","Darsie","Darya","Daryl","Daryn","Dasha","Dasi","Dasie","Dasya","Datha","Daune","Daveen","Daveta","Davida","Davina","Davine","Davita","Dawn","Dawna","Dayle","Dayna","Ddene","De","Deana","Deane","Deanna","Deanne","Deb","Debbi","Debbie","Debby","Debee","Debera","Debi","Debor","Debora","Deborah","Debra","Dede","Dedie","Dedra","Dee","Deeann","Deeanne","Deedee","Deena","Deerdre","Deeyn","Dehlia","Deidre","Deina","Deirdre","Del","Dela","Delcina","Delcine","Delia","Delila","Delilah","Delinda","Dell","Della","Delly","Delora","Delores","Deloria","Deloris","Delphine","Delphinia","Demeter","Demetra","Demetria","Demetris","Dena","Deni","Denice","Denise","Denna","Denni","Dennie","Denny","Deny","Denys","Denyse","Deonne","Desdemona","Desirae","Desiree","Desiri","Deva","Devan","Devi","Devin","Devina","Devinne","Devon","Devondra","Devonna","Devonne","Devora","Di","Diahann","Dian","Diana","Diandra","Diane","Diane-marie","Dianemarie","Diann","Dianna","Dianne","Diannne","Didi","Dido","Diena","Dierdre","Dina","Dinah","Dinnie","Dinny","Dion","Dione","Dionis","Dionne","Dita","Dix","Dixie","Dniren","Dode","Dodi","Dodie","Dody","Doe","Doll","Dolley","Dolli","Dollie","Dolly","Dolores","Dolorita","Doloritas","Domeniga","Dominga","Domini","Dominica","Dominique","Dona","Donella","Donelle","Donetta","Donia","Donica","Donielle","Donna","Donnamarie","Donni","Donnie","Donny","Dora","Doralia","Doralin","Doralyn","Doralynn","Doralynne","Dore","Doreen","Dorelia","Dorella","Dorelle","Dorena","Dorene","Doretta","Dorette","Dorey","Dori","Doria","Dorian","Dorice","Dorie","Dorine","Doris","Dorisa","Dorise","Dorita","Doro","Dorolice","Dorolisa","Dorotea","Doroteya","Dorothea","Dorothee","Dorothy","Dorree","Dorri","Dorrie","Dorris","Dorry","Dorthea","Dorthy","Dory","Dosi","Dot","Doti","Dotti","Dottie","Dotty","Dre","Dreddy","Dredi","Drona","Dru","Druci","Drucie","Drucill","Drucy","Drusi","Drusie","Drusilla","Drusy","Dulce","Dulcea","Dulci","Dulcia","Dulciana","Dulcie","Dulcine","Dulcinea","Dulcy","Dulsea","Dusty","Dyan","Dyana","Dyane","Dyann","Dyanna","Dyanne","Dyna","Dynah","Eachelle","Eada","Eadie","Eadith","Ealasaid","Eartha","Easter","Eba","Ebba","Ebonee","Ebony","Eda","Eddi","Eddie","Eddy","Ede","Edee","Edeline","Eden","Edi","Edie","Edin","Edita","Edith","Editha","Edithe","Ediva","Edna","Edwina","Edy","Edyth","Edythe","Effie","Eileen","Eilis","Eimile","Eirena","Ekaterina","Elaina","Elaine","Elana","Elane","Elayne","Elberta","Elbertina","Elbertine","Eleanor","Eleanora","Eleanore","Electra","Eleen","Elena","Elene","Eleni","Elenore","Eleonora","Eleonore","Elfie","Elfreda","Elfrida","Elfrieda","Elga","Elianora","Elianore","Elicia","Elie","Elinor","Elinore","Elisa","Elisabet","Elisabeth","Elisabetta","Elise","Elisha","Elissa","Elita","Eliza","Elizabet","Elizabeth","Elka","Elke","Ella","Elladine","Elle","Ellen","Ellene","Ellette","Elli","Ellie","Ellissa","Elly","Ellyn","Ellynn","Elmira","Elna","Elnora","Elnore","Eloisa","Eloise","Elonore","Elora","Elsa","Elsbeth","Else","Elset","Elsey","Elsi","Elsie","Elsinore","Elspeth","Elsy","Elva","Elvera","Elvina","Elvira","Elwira","Elyn","Elyse","Elysee","Elysha","Elysia","Elyssa","Em","Ema","Emalee","Emalia","Emelda","Emelia","Emelina","Emeline","Emelita","Emelyne","Emera","Emilee","Emili","Emilia","Emilie","Emiline","Emily","Emlyn","Emlynn","Emlynne","Emma","Emmalee","Emmaline","Emmalyn","Emmalynn","Emmalynne","Emmeline","Emmey","Emmi","Emmie","Emmy","Emmye","Emogene","Emyle","Emylee","Engracia","Enid","Enrica","Enrichetta","Enrika","Enriqueta","Eolanda","Eolande","Eran","Erda","Erena","Erica","Ericha","Ericka","Erika","Erin","Erina","Erinn","Erinna","Erma","Ermengarde","Ermentrude","Ermina","Erminia","Erminie","Erna","Ernaline","Ernesta","Ernestine","Ertha","Eryn","Esma","Esmaria","Esme","Esmeralda","Essa","Essie","Essy","Esta","Estel","Estele","Estell","Estella","Estelle","Ester","Esther","Estrella","Estrellita","Ethel","Ethelda","Ethelin","Ethelind","Etheline","Ethelyn","Ethyl","Etta","Etti","Ettie","Etty","Eudora","Eugenia","Eugenie","Eugine","Eula","Eulalie","Eunice","Euphemia","Eustacia","Eva","Evaleen","Evangelia","Evangelin","Evangelina","Evangeline","Evania","Evanne","Eve","Eveleen","Evelina","Eveline","Evelyn","Evey","Evie","Evita","Evonne","Evvie","Evvy","Evy","Eyde","Eydie","Ezmeralda","Fae","Faina","Faith","Fallon","Fan","Fanchette","Fanchon","Fancie","Fancy","Fanechka","Fania","Fanni","Fannie","Fanny","Fanya","Fara","Farah","Farand","Farica","Farra","Farrah","Farrand","Faun","Faunie","Faustina","Faustine","Fawn","Fawne","Fawnia","Fay","Faydra","Faye","Fayette","Fayina","Fayre","Fayth","Faythe","Federica","Fedora","Felecia","Felicdad","Felice","Felicia","Felicity","Felicle","Felipa","Felisha","Felita","Feliza","Fenelia","Feodora","Ferdinanda","Ferdinande","Fern","Fernanda","Fernande","Fernandina","Ferne","Fey","Fiann","Fianna","Fidela","Fidelia","Fidelity","Fifi","Fifine","Filia","Filide","Filippa","Fina","Fiona","Fionna","Fionnula","Fiorenze","Fleur","Fleurette","Flo","Flor","Flora","Florance","Flore","Florella","Florence","Florencia","Florentia","Florenza","Florette","Flori","Floria","Florida","Florie","Florina","Florinda","Floris","Florri","Florrie","Florry","Flory","Flossi","Flossie","Flossy","Flss","Fran","Francene","Frances","Francesca","Francine","Francisca","Franciska","Francoise","Francyne","Frank","Frankie","Franky","Franni","Frannie","Franny","Frayda","Fred","Freda","Freddi","Freddie","Freddy","Fredelia","Frederica","Fredericka","Frederique","Fredi","Fredia","Fredra","Fredrika","Freida","Frieda","Friederike","Fulvia","Gabbey","Gabbi","Gabbie","Gabey","Gabi","Gabie","Gabriel","Gabriela","Gabriell","Gabriella","Gabrielle","Gabriellia","Gabrila","Gaby","Gae","Gael","Gail","Gale","Galina","Garland","Garnet","Garnette","Gates","Gavra","Gavrielle","Gay","Gaye","Gayel","Gayla","Gayle","Gayleen","Gaylene","Gaynor","Gelya","Gena","Gene","Geneva","Genevieve","Genevra","Genia","Genna","Genni","Gennie","Gennifer","Genny","Genovera","Genvieve","George","Georgeanna","Georgeanne","Georgena","Georgeta","Georgetta","Georgette","Georgia","Georgiana","Georgianna","Georgianne","Georgie","Georgina","Georgine","Geralda","Geraldine","Gerda","Gerhardine","Geri","Gerianna","Gerianne","Gerladina","Germain","Germaine","Germana","Gerri","Gerrie","Gerrilee","Gerry","Gert","Gerta","Gerti","Gertie","Gertrud","Gertruda","Gertrude","Gertrudis","Gerty","Giacinta","Giana","Gianina","Gianna","Gigi","Gilberta","Gilberte","Gilbertina","Gilbertine","Gilda","Gilemette","Gill","Gillan","Gilli","Gillian","Gillie","Gilligan","Gilly","Gina","Ginelle","Ginevra","Ginger","Ginni","Ginnie","Ginnifer","Ginny","Giorgia","Giovanna","Gipsy","Giralda","Gisela","Gisele","Gisella","Giselle","Giuditta","Giulia","Giulietta","Giustina","Gizela","Glad","Gladi","Gladys","Gleda","Glen","Glenda","Glenine","Glenn","Glenna","Glennie","Glennis","Glori","Gloria","Gloriana","Gloriane","Glory","Glyn","Glynda","Glynis","Glynnis","Gnni","Godiva","Golda","Goldarina","Goldi","Goldia","Goldie","Goldina","Goldy","Grace","Gracia","Gracie","Grata","Gratia","Gratiana","Gray","Grayce","Grazia","Greer","Greta","Gretal","Gretchen","Grete","Gretel","Grethel","Gretna","Gretta","Grier","Griselda","Grissel","Guendolen","Guenevere","Guenna","Guglielma","Gui","Guillema","Guillemette","Guinevere","Guinna","Gunilla","Gus","Gusella","Gussi","Gussie","Gussy","Gusta","Gusti","Gustie","Gusty","Gwen","Gwendolen","Gwendolin","Gwendolyn","Gweneth","Gwenette","Gwenneth","Gwenni","Gwennie","Gwenny","Gwenora","Gwenore","Gwyn","Gwyneth","Gwynne","Gypsy","Hadria","Hailee","Haily","Haleigh","Halette","Haley","Hali","Halie","Halimeda","Halley","Halli","Hallie","Hally","Hana","Hanna","Hannah","Hanni","Hannie","Hannis","Hanny","Happy","Harlene","Harley","Harli","Harlie","Harmonia","Harmonie","Harmony","Harri","Harrie","Harriet","Harriett","Harrietta","Harriette","Harriot","Harriott","Hatti","Hattie","Hatty","Hayley","Hazel","Heath","Heather","Heda","Hedda","Heddi","Heddie","Hedi","Hedvig","Hedvige","Hedwig","Hedwiga","Hedy","Heida","Heidi","Heidie","Helaina","Helaine","Helen","Helen-elizabeth","Helena","Helene","Helenka","Helga","Helge","Helli","Heloise","Helsa","Helyn","Hendrika","Henka","Henrie","Henrieta","Henrietta","Henriette","Henryetta","Hephzibah","Hermia","Hermina","Hermine","Herminia","Hermione","Herta","Hertha","Hester","Hesther","Hestia","Hetti","Hettie","Hetty","Hilary","Hilda","Hildagard","Hildagarde","Hilde","Hildegaard","Hildegarde","Hildy","Hillary","Hilliary","Hinda","Holli","Hollie","Holly","Holly-anne","Hollyanne","Honey","Honor","Honoria","Hope","Horatia","Hortense","Hortensia","Hulda","Hyacinth","Hyacintha","Hyacinthe","Hyacinthia","Hyacinthie","Hynda","Ianthe","Ibbie","Ibby","Ida","Idalia","Idalina","Idaline","Idell","Idelle","Idette","Ileana","Ileane","Ilene","Ilise","Ilka","Illa","Ilsa","Ilse","Ilysa","Ilyse","Ilyssa","Imelda","Imogen","Imogene","Imojean","Ina","Indira","Ines","Inesita","Inessa","Inez","Inga","Ingaberg","Ingaborg","Inge","Ingeberg","Ingeborg","Inger","Ingrid","Ingunna","Inna","Iolande","Iolanthe","Iona","Iormina","Ira","Irena","Irene","Irina","Iris","Irita","Irma","Isa","Isabel","Isabelita","Isabella","Isabelle","Isadora","Isahella","Iseabal","Isidora","Isis","Isobel","Issi","Issie","Issy","Ivett","Ivette","Ivie","Ivonne","Ivory","Ivy","Izabel","Jacenta","Jacinda","Jacinta","Jacintha","Jacinthe","Jackelyn","Jacki","Jackie","Jacklin","Jacklyn","Jackquelin","Jackqueline","Jacky","Jaclin","Jaclyn","Jacquelin","Jacqueline","Jacquelyn","Jacquelynn","Jacquenetta","Jacquenette","Jacquetta","Jacquette","Jacqui","Jacquie","Jacynth","Jada","Jade","Jaime","Jaimie","Jaine","Jami","Jamie","Jamima","Jammie","Jan","Jana","Janaya","Janaye","Jandy","Jane","Janean","Janeczka","Janeen","Janel","Janela","Janella","Janelle","Janene","Janenna","Janessa","Janet","Janeta","Janetta","Janette","Janeva","Janey","Jania","Janice","Janie","Janifer","Janina","Janine","Janis","Janith","Janka","Janna","Jannel","Jannelle","Janot","Jany","Jaquelin","Jaquelyn","Jaquenetta","Jaquenette","Jaquith","Jasmin","Jasmina","Jasmine","Jayme","Jaymee","Jayne","Jaynell","Jazmin","Jean","Jeana","Jeane","Jeanelle","Jeanette","Jeanie","Jeanine","Jeanna","Jeanne","Jeannette","Jeannie","Jeannine","Jehanna","Jelene","Jemie","Jemima","Jemimah","Jemmie","Jemmy","Jen","Jena","Jenda","Jenelle","Jeni","Jenica","Jeniece","Jenifer","Jeniffer","Jenilee","Jenine","Jenn","Jenna","Jennee","Jennette","Jenni","Jennica","Jennie","Jennifer","Jennilee","Jennine","Jenny","Jeralee","Jere","Jeri","Jermaine","Jerrie","Jerrilee","Jerrilyn","Jerrine","Jerry","Jerrylee","Jess","Jessa","Jessalin","Jessalyn","Jessamine","Jessamyn","Jesse","Jesselyn","Jessi","Jessica","Jessie","Jessika","Jessy","Jewel","Jewell","Jewelle","Jill","Jillana","Jillane","Jillayne","Jilleen","Jillene","Jilli","Jillian","Jillie","Jilly","Jinny","Jo","Jo-ann","Jo-anne","Joan","Joana","Joane","Joanie","Joann","Joanna","Joanne","Joannes","Jobey","Jobi","Jobie","Jobina","Joby","Jobye","Jobyna","Jocelin","Joceline","Jocelyn","Jocelyne","Jodee","Jodi","Jodie","Jody","Joeann","Joela","Joelie","Joell","Joella","Joelle","Joellen","Joelly","Joellyn","Joelynn","Joete","Joey","Johanna","Johannah","Johna","Johnath","Johnette","Johnna","Joice","Jojo","Jolee","Joleen","Jolene","Joletta","Joli","Jolie","Joline","Joly","Jolyn","Jolynn","Jonell","Joni","Jonie","Jonis","Jordain","Jordan","Jordana","Jordanna","Jorey","Jori","Jorie","Jorrie","Jorry","Joscelin","Josee","Josefa","Josefina","Josepha","Josephina","Josephine","Josey","Josi","Josie","Josselyn","Josy","Jourdan","Joy","Joya","Joyan","Joyann","Joyce","Joycelin","Joye","Jsandye","Juana","Juanita","Judi","Judie","Judith","Juditha","Judy","Judye","Juieta","Julee","Juli","Julia","Juliana","Juliane","Juliann","Julianna","Julianne","Julie","Julienne","Juliet","Julieta","Julietta","Juliette","Julina","Juline","Julissa","Julita","June","Junette","Junia","Junie","Junina","Justina","Justine","Justinn","Jyoti","Kacey","Kacie","Kacy","Kaela","Kai","Kaia","Kaila","Kaile","Kailey","Kaitlin","Kaitlyn","Kaitlynn","Kaja","Kakalina","Kala","Kaleena","Kali","Kalie","Kalila","Kalina","Kalinda","Kalindi","Kalli","Kally","Kameko","Kamila","Kamilah","Kamillah","Kandace","Kandy","Kania","Kanya","Kara","Kara-lynn","Karalee","Karalynn","Kare","Karee","Karel","Karen","Karena","Kari","Karia","Karie","Karil","Karilynn","Karin","Karina","Karine","Kariotta","Karisa","Karissa","Karita","Karla","Karlee","Karleen","Karlen","Karlene","Karlie","Karlotta","Karlotte","Karly","Karlyn","Karmen","Karna","Karol","Karola","Karole","Karolina","Karoline","Karoly","Karon","Karrah","Karrie","Karry","Kary","Karyl","Karylin","Karyn","Kasey","Kass","Kassandra","Kassey","Kassi","Kassia","Kassie","Kat","Kata","Katalin","Kate","Katee","Katerina","Katerine","Katey","Kath","Katha","Katharina","Katharine","Katharyn","Kathe","Katherina","Katherine","Katheryn","Kathi","Kathie","Kathleen","Kathlin","Kathrine","Kathryn","Kathryne","Kathy","Kathye","Kati","Katie","Katina","Katine","Katinka","Katleen","Katlin","Katrina","Katrine","Katrinka","Katti","Kattie","Katuscha","Katusha","Katy","Katya","Kay","Kaycee","Kaye","Kayla","Kayle","Kaylee","Kayley","Kaylil","Kaylyn","Keeley","Keelia","Keely","Kelcey","Kelci","Kelcie","Kelcy","Kelila","Kellen","Kelley","Kelli","Kellia","Kellie","Kellina","Kellsie","Kelly","Kellyann","Kelsey","Kelsi","Kelsy","Kendra","Kendre","Kenna","Keri","Keriann","Kerianne","Kerri","Kerrie","Kerrill","Kerrin","Kerry","Kerstin","Kesley","Keslie","Kessia","Kessiah","Ketti","Kettie","Ketty","Kevina","Kevyn","Ki","Kiah","Kial","Kiele","Kiersten","Kikelia","Kiley","Kim","Kimberlee","Kimberley","Kimberli","Kimberly","Kimberlyn","Kimbra","Kimmi","Kimmie","Kimmy","Kinna","Kip","Kipp","Kippie","Kippy","Kira","Kirbee","Kirbie","Kirby","Kiri","Kirsten","Kirsteni","Kirsti","Kirstin","Kirstyn","Kissee","Kissiah","Kissie","Kit","Kitti","Kittie","Kitty","Kizzee","Kizzie","Klara","Klarika","Klarrisa","Konstance","Konstanze","Koo","Kora","Koral","Koralle","Kordula","Kore","Korella","Koren","Koressa","Kori","Korie","Korney","Korrie","Korry","Kris","Krissie","Krissy","Krista","Kristal","Kristan","Kriste","Kristel","Kristen","Kristi","Kristien","Kristin","Kristina","Kristine","Kristy","Kristyn","Krysta","Krystal","Krystalle","Krystle","Krystyna","Kyla","Kyle","Kylen","Kylie","Kylila","Kylynn","Kym","Kynthia","Kyrstin","Lacee","Lacey","Lacie","Lacy","Ladonna","Laetitia","Laina","Lainey","Lana","Lanae","Lane","Lanette","Laney","Lani","Lanie","Lanita","Lanna","Lanni","Lanny","Lara","Laraine","Lari","Larina","Larine","Larisa","Larissa","Lark","Laryssa","Latashia","Latia","Latisha","Latrena","Latrina","Laura","Lauraine","Laural","Lauralee","Laure","Lauree","Laureen","Laurel","Laurella","Lauren","Laurena","Laurene","Lauretta","Laurette","Lauri","Laurianne","Laurice","Laurie","Lauryn","Lavena","Laverna","Laverne","Lavina","Lavinia","Lavinie","Layla","Layne","Layney","Lea","Leah","Leandra","Leann","Leanna","Leanor","Leanora","Lebbie","Leda","Lee","Leeann","Leeanne","Leela","Leelah","Leena","Leesa","Leese","Legra","Leia","Leigh","Leigha","Leila","Leilah","Leisha","Lela","Lelah","Leland","Lelia","Lena","Lenee","Lenette","Lenka","Lenna","Lenora","Lenore","Leodora","Leoine","Leola","Leoline","Leona","Leonanie","Leone","Leonelle","Leonie","Leonora","Leonore","Leontine","Leontyne","Leora","Leshia","Lesley","Lesli","Leslie","Lesly","Lesya","Leta","Lethia","Leticia","Letisha","Letitia","Letizia","Letta","Letti","Lettie","Letty","Lexi","Lexie","Lexine","Lexis","Lexy","Leyla","Lezlie","Lia","Lian","Liana","Liane","Lianna","Lianne","Lib","Libbey","Libbi","Libbie","Libby","Licha","Lida","Lidia","Liesa","Lil","Lila","Lilah","Lilas","Lilia","Lilian","Liliane","Lilias","Lilith","Lilla","Lilli","Lillian","Lillis","Lilllie","Lilly","Lily","Lilyan","Lin","Lina","Lind","Linda","Lindi","Lindie","Lindsay","Lindsey","Lindsy","Lindy","Linea","Linell","Linet","Linette","Linn","Linnea","Linnell","Linnet","Linnie","Linzy","Lira","Lisa","Lisabeth","Lisbeth","Lise","Lisetta","Lisette","Lisha","Lishe","Lissa","Lissi","Lissie","Lissy","Lita","Liuka","Liv","Liva","Livia","Livvie","Livvy","Livvyy","Livy","Liz","Liza","Lizabeth","Lizbeth","Lizette","Lizzie","Lizzy","Loella","Lois","Loise","Lola","Loleta","Lolita","Lolly","Lona","Lonee","Loni","Lonna","Lonni","Lonnie","Lora","Lorain","Loraine","Loralee","Loralie","Loralyn","Loree","Loreen","Lorelei","Lorelle","Loren","Lorena","Lorene","Lorenza","Loretta","Lorette","Lori","Loria","Lorianna","Lorianne","Lorie","Lorilee","Lorilyn","Lorinda","Lorine","Lorita","Lorna","Lorne","Lorraine","Lorrayne","Lorri","Lorrie","Lorrin","Lorry","Lory","Lotta","Lotte","Lotti","Lottie","Lotty","Lou","Louella","Louisa","Louise","Louisette","Loutitia","Lu","Luce","Luci","Lucia","Luciana","Lucie","Lucienne","Lucila","Lucilia","Lucille","Lucina","Lucinda","Lucine","Lucita","Lucky","Lucretia","Lucy","Ludovika","Luella","Luelle","Luisa","Luise","Lula","Lulita","Lulu","Lura","Lurette","Lurleen","Lurlene","Lurline","Lusa","Luz","Lyda","Lydia","Lydie","Lyn","Lynda","Lynde","Lyndel","Lyndell","Lyndsay","Lyndsey","Lyndsie","Lyndy","Lynea","Lynelle","Lynett","Lynette","Lynn","Lynna","Lynne","Lynnea","Lynnell","Lynnelle","Lynnet","Lynnett","Lynnette","Lynsey","Lyssa","Mab","Mabel","Mabelle","Mable","Mada","Madalena","Madalyn","Maddalena","Maddi","Maddie","Maddy","Madel","Madelaine","Madeleine","Madelena","Madelene","Madelin","Madelina","Madeline","Madella","Madelle","Madelon","Madelyn","Madge","Madlen","Madlin","Madonna","Mady","Mae","Maegan","Mag","Magda","Magdaia","Magdalen","Magdalena","Magdalene","Maggee","Maggi","Maggie","Maggy","Mahala","Mahalia","Maia","Maible","Maiga","Maighdiln","Mair","Maire","Maisey","Maisie","Maitilde","Mala","Malanie","Malena","Malia","Malina","Malinda","Malinde","Malissa","Malissia","Mallissa","Mallorie","Mallory","Malorie","Malory","Malva","Malvina","Malynda","Mame","Mamie","Manda","Mandi","Mandie","Mandy","Manon","Manya","Mara","Marabel","Marcela","Marcelia","Marcella","Marcelle","Marcellina","Marcelline","Marchelle","Marci","Marcia","Marcie","Marcile","Marcille","Marcy","Mareah","Maren","Marena","Maressa","Marga","Margalit","Margalo","Margaret","Margareta","Margarete","Margaretha","Margarethe","Margaretta","Margarette","Margarita","Margaux","Marge","Margeaux","Margery","Marget","Margette","Margi","Margie","Margit","Margo","Margot","Margret","Marguerite","Margy","Mari","Maria","Mariam","Marian","Mariana","Mariann","Marianna","Marianne","Maribel","Maribelle","Maribeth","Marice","Maridel","Marie","Marie-ann","Marie-jeanne","Marieann","Mariejeanne","Mariel","Mariele","Marielle","Mariellen","Marietta","Mariette","Marigold","Marijo","Marika","Marilee","Marilin","Marillin","Marilyn","Marin","Marina","Marinna","Marion","Mariquilla","Maris","Marisa","Mariska","Marissa","Marita","Maritsa","Mariya","Marj","Marja","Marje","Marji","Marjie","Marjorie","Marjory","Marjy","Marketa","Marla","Marlane","Marleah","Marlee","Marleen","Marlena","Marlene","Marley","Marlie","Marline","Marlo","Marlyn","Marna","Marne","Marney","Marni","Marnia","Marnie","Marquita","Marrilee","Marris","Marrissa","Marsha","Marsiella","Marta","Martelle","Martguerita","Martha","Marthe","Marthena","Marti","Martica","Martie","Martina","Martita","Marty","Martynne","Mary","Marya","Maryann","Maryanna","Maryanne","Marybelle","Marybeth","Maryellen","Maryjane","Maryjo","Maryl","Marylee","Marylin","Marylinda","Marylou","Marylynne","Maryrose","Marys","Marysa","Masha","Matelda","Mathilda","Mathilde","Matilda","Matilde","Matti","Mattie","Matty","Maud","Maude","Maudie","Maura","Maure","Maureen","Maureene","Maurene","Maurine","Maurise","Maurita","Maurizia","Mavis","Mavra","Max","Maxi","Maxie","Maxine","Maxy","May","Maybelle","Maye","Mead","Meade","Meagan","Meaghan","Meara","Mechelle","Meg","Megan","Megen","Meggi","Meggie","Meggy","Meghan","Meghann","Mehetabel","Mei","Mel","Mela","Melamie","Melania","Melanie","Melantha","Melany","Melba","Melesa","Melessa","Melicent","Melina","Melinda","Melinde","Melisa","Melisande","Melisandra","Melisenda","Melisent","Melissa","Melisse","Melita","Melitta","Mella","Melli","Mellicent","Mellie","Mellisa","Mellisent","Melloney","Melly","Melodee","Melodie","Melody","Melonie","Melony","Melosa","Melva","Mercedes","Merci","Mercie","Mercy","Meredith","Meredithe","Meridel","Meridith","Meriel","Merilee","Merilyn","Meris","Merissa","Merl","Merla","Merle","Merlina","Merline","Merna","Merola","Merralee","Merridie","Merrie","Merrielle","Merrile","Merrilee","Merrili","Merrill","Merrily","Merry","Mersey","Meryl","Meta","Mia","Micaela","Michaela","Michaelina","Michaeline","Michaella","Michal","Michel","Michele","Michelina","Micheline","Michell","Michelle","Micki","Mickie","Micky","Midge","Mignon","Mignonne","Miguela","Miguelita","Mikaela","Mil","Mildred","Mildrid","Milena","Milicent","Milissent","Milka","Milli","Millicent","Millie","Millisent","Milly","Milzie","Mimi","Min","Mina","Minda","Mindy","Minerva","Minetta","Minette","Minna","Minnaminnie","Minne","Minni","Minnie","Minnnie","Minny","Minta","Miquela","Mira","Mirabel","Mirabella","Mirabelle","Miran","Miranda","Mireielle","Mireille","Mirella","Mirelle","Miriam","Mirilla","Mirna","Misha","Missie","Missy","Misti","Misty","Mitzi","Modesta","Modestia","Modestine","Modesty","Moina","Moira","Moll","Mollee","Molli","Mollie","Molly","Mommy","Mona","Monah","Monica","Monika","Monique","Mora","Moreen","Morena","Morgan","Morgana","Morganica","Morganne","Morgen","Moria","Morissa","Morna","Moselle","Moyna","Moyra","Mozelle","Muffin","Mufi","Mufinella","Muire","Mureil","Murial","Muriel","Murielle","Myra","Myrah","Myranda","Myriam","Myrilla","Myrle","Myrlene","Myrna","Myrta","Myrtia","Myrtice","Myrtie","Myrtle","Nada","Nadean","Nadeen","Nadia","Nadine","Nadiya","Nady","Nadya","Nalani","Nan","Nana","Nananne","Nance","Nancee","Nancey","Nanci","Nancie","Nancy","Nanete","Nanette","Nani","Nanice","Nanine","Nannette","Nanni","Nannie","Nanny","Nanon","Naoma","Naomi","Nara","Nari","Nariko","Nat","Nata","Natala","Natalee","Natalie","Natalina","Nataline","Natalya","Natasha","Natassia","Nathalia","Nathalie","Natividad","Natka","Natty","Neala","Neda","Nedda","Nedi","Neely","Neila","Neile","Neilla","Neille","Nelia","Nelie","Nell","Nelle","Nelli","Nellie","Nelly","Nerissa","Nerita","Nert","Nerta","Nerte","Nerti","Nertie","Nerty","Nessa","Nessi","Nessie","Nessy","Nesta","Netta","Netti","Nettie","Nettle","Netty","Nevsa","Neysa","Nichol","Nichole","Nicholle","Nicki","Nickie","Nicky","Nicol","Nicola","Nicole","Nicolea","Nicolette","Nicoli","Nicolina","Nicoline","Nicolle","Nikaniki","Nike","Niki","Nikki","Nikkie","Nikoletta","Nikolia","Nina","Ninetta","Ninette","Ninnetta","Ninnette","Ninon","Nissa","Nisse","Nissie","Nissy","Nita","Nixie","Noami","Noel","Noelani","Noell","Noella","Noelle","Noellyn","Noelyn","Noemi","Nola","Nolana","Nolie","Nollie","Nomi","Nona","Nonah","Noni","Nonie","Nonna","Nonnah","Nora","Norah","Norean","Noreen","Norene","Norina","Norine","Norma","Norri","Norrie","Norry","Novelia","Nydia","Nyssa","Octavia","Odele","Odelia","Odelinda","Odella","Odelle","Odessa","Odetta","Odette","Odilia","Odille","Ofelia","Ofella","Ofilia","Ola","Olenka","Olga","Olia","Olimpia","Olive","Olivette","Olivia","Olivie","Oliy","Ollie","Olly","Olva","Olwen","Olympe","Olympia","Olympie","Ondrea","Oneida","Onida","Oona","Opal","Opalina","Opaline","Ophelia","Ophelie","Ora","Oralee","Oralia","Oralie","Oralla","Oralle","Orel","Orelee","Orelia","Orelie","Orella","Orelle","Oriana","Orly","Orsa","Orsola","Ortensia","Otha","Othelia","Othella","Othilia","Othilie","Ottilie","Page","Paige","Paloma","Pam","Pamela","Pamelina","Pamella","Pammi","Pammie","Pammy","Pandora","Pansie","Pansy","Paola","Paolina","Papagena","Pat","Patience","Patrica","Patrice","Patricia","Patrizia","Patsy","Patti","Pattie","Patty","Paula","Paule","Pauletta","Paulette","Pauli","Paulie","Paulina","Pauline","Paulita","Pauly","Pavia","Pavla","Pearl","Pearla","Pearle","Pearline","Peg","Pegeen","Peggi","Peggie","Peggy","Pen","Penelopa","Penelope","Penni","Pennie","Penny","Pepi","Pepita","Peri","Peria","Perl","Perla","Perle","Perri","Perrine","Perry","Persis","Pet","Peta","Petra","Petrina","Petronella","Petronia","Petronilla","Petronille","Petunia","Phaedra","Phaidra","Phebe","Phedra","Phelia","Phil","Philipa","Philippa","Philippe","Philippine","Philis","Phillida","Phillie","Phillis","Philly","Philomena","Phoebe","Phylis","Phyllida","Phyllis","Phyllys","Phylys","Pia","Pier","Pierette","Pierrette","Pietra","Piper","Pippa","Pippy","Polly","Pollyanna","Pooh","Poppy","Portia","Pris","Prisca","Priscella","Priscilla","Prissie","Pru","Prudence","Prudi","Prudy","Prue","Queenie","Quentin","Querida","Quinn","Quinta","Quintana","Quintilla","Quintina","Rachael","Rachel","Rachele","Rachelle","Rae","Raeann","Raf","Rafa","Rafaela","Rafaelia","Rafaelita","Rahal","Rahel","Raina","Raine","Rakel","Ralina","Ramona","Ramonda","Rana","Randa","Randee","Randene","Randi","Randie","Randy","Ranee","Rani","Rania","Ranice","Ranique","Ranna","Raphaela","Raquel","Raquela","Rasia","Rasla","Raven","Ray","Raychel","Raye","Rayna","Raynell","Rayshell","Rea","Reba","Rebbecca","Rebe","Rebeca","Rebecca","Rebecka","Rebeka","Rebekah","Rebekkah","Ree","Reeba","Reena","Reeta","Reeva","Regan","Reggi","Reggie","Regina","Regine","Reiko","Reina","Reine","Remy","Rena","Renae","Renata","Renate","Rene","Renee","Renell","Renelle","Renie","Rennie","Reta","Retha","Revkah","Rey","Reyna","Rhea","Rheba","Rheta","Rhetta","Rhiamon","Rhianna","Rhianon","Rhoda","Rhodia","Rhodie","Rhody","Rhona","Rhonda","Riane","Riannon","Rianon","Rica","Ricca","Rici","Ricki","Rickie","Ricky","Riki","Rikki","Rina","Risa","Rita","Riva","Rivalee","Rivi","Rivkah","Rivy","Roana","Roanna","Roanne","Robbi","Robbie","Robbin","Robby","Robbyn","Robena","Robenia","Roberta","Robin","Robina","Robinet","Robinett","Robinetta","Robinette","Robinia","Roby","Robyn","Roch","Rochell","Rochella","Rochelle","Rochette","Roda","Rodi","Rodie","Rodina","Rois","Romola","Romona","Romonda","Romy","Rona","Ronalda","Ronda","Ronica","Ronna","Ronni","Ronnica","Ronnie","Ronny","Roobbie","Rora","Rori","Rorie","Rory","Ros","Rosa","Rosabel","Rosabella","Rosabelle","Rosaleen","Rosalia","Rosalie","Rosalind","Rosalinda","Rosalinde","Rosaline","Rosalyn","Rosalynd","Rosamond","Rosamund","Rosana","Rosanna","Rosanne","Rose","Roseann","Roseanna","Roseanne","Roselia","Roselin","Roseline","Rosella","Roselle","Rosemaria","Rosemarie","Rosemary","Rosemonde","Rosene","Rosetta","Rosette","Roshelle","Rosie","Rosina","Rosita","Roslyn","Rosmunda","Rosy","Row","Rowe","Rowena","Roxana","Roxane","Roxanna","Roxanne","Roxi","Roxie","Roxine","Roxy","Roz","Rozalie","Rozalin","Rozamond","Rozanna","Rozanne","Roze","Rozele","Rozella","Rozelle","Rozina","Rubetta","Rubi","Rubia","Rubie","Rubina","Ruby","Ruperta","Ruth","Ruthann","Ruthanne","Ruthe","Ruthi","Ruthie","Ruthy","Ryann","Rycca","Saba","Sabina","Sabine","Sabra","Sabrina","Sacha","Sada","Sadella","Sadie","Sadye","Saidee","Sal","Salaidh","Sallee","Salli","Sallie","Sally","Sallyann","Sallyanne","Saloma","Salome","Salomi","Sam","Samantha","Samara","Samaria","Sammy","Sande","Sandi","Sandie","Sandra","Sandy","Sandye","Sapphira","Sapphire","Sara","Sara-ann","Saraann","Sarah","Sarajane","Saree","Sarena","Sarene","Sarette","Sari","Sarina","Sarine","Sarita","Sascha","Sasha","Sashenka","Saudra","Saundra","Savina","Sayre","Scarlet","Scarlett","Sean","Seana","Seka","Sela","Selena","Selene","Selestina","Selia","Selie","Selina","Selinda","Seline","Sella","Selle","Selma","Sena","Sephira","Serena","Serene","Shae","Shaina","Shaine","Shalna","Shalne","Shana","Shanda","Shandee","Shandeigh","Shandie","Shandra","Shandy","Shane","Shani","Shanie","Shanna","Shannah","Shannen","Shannon","Shanon","Shanta","Shantee","Shara","Sharai","Shari","Sharia","Sharity","Sharl","Sharla","Sharleen","Sharlene","Sharline","Sharon","Sharona","Sharron","Sharyl","Shaun","Shauna","Shawn","Shawna","Shawnee","Shay","Shayla","Shaylah","Shaylyn","Shaylynn","Shayna","Shayne","Shea","Sheba","Sheela","Sheelagh","Sheelah","Sheena","Sheeree","Sheila","Sheila-kathryn","Sheilah","Shel","Shela","Shelagh","Shelba","Shelbi","Shelby","Shelia","Shell","Shelley","Shelli","Shellie","Shelly","Shena","Sher","Sheree","Sheri","Sherie","Sherill","Sherilyn","Sherline","Sherri","Sherrie","Sherry","Sherye","Sheryl","Shina","Shir","Shirl","Shirlee","Shirleen","Shirlene","Shirley","Shirline","Shoshana","Shoshanna","Siana","Sianna","Sib","Sibbie","Sibby","Sibeal","Sibel","Sibella","Sibelle","Sibilla","Sibley","Sibyl","Sibylla","Sibylle","Sidoney","Sidonia","Sidonnie","Sigrid","Sile","Sileas","Silva","Silvana","Silvia","Silvie","Simona","Simone","Simonette","Simonne","Sindee","Siobhan","Sioux","Siouxie","Sisely","Sisile","Sissie","Sissy","Siusan","Sofia","Sofie","Sondra","Sonia","Sonja","Sonni","Sonnie","Sonnnie","Sonny","Sonya","Sophey","Sophi","Sophia","Sophie","Sophronia","Sorcha","Sosanna","Stace","Stacee","Stacey","Staci","Stacia","Stacie","Stacy","Stafani","Star","Starla","Starlene","Starlin","Starr","Stefa","Stefania","Stefanie","Steffane","Steffi","Steffie","Stella","Stepha","Stephana","Stephani","Stephanie","Stephannie","Stephenie","Stephi","Stephie","Stephine","Stesha","Stevana","Stevena","Stoddard","Storm","Stormi","Stormie","Stormy","Sue","Suellen","Sukey","Suki","Sula","Sunny","Sunshine","Susan","Susana","Susanetta","Susann","Susanna","Susannah","Susanne","Susette","Susi","Susie","Susy","Suzann","Suzanna","Suzanne","Suzette","Suzi","Suzie","Suzy","Sybil","Sybila","Sybilla","Sybille","Sybyl","Sydel","Sydelle","Sydney","Sylvia","Tabatha","Tabbatha","Tabbi","Tabbie","Tabbitha","Tabby","Tabina","Tabitha","Taffy","Talia","Tallia","Tallie","Tallou","Tallulah","Tally","Talya","Talyah","Tamar","Tamara","Tamarah","Tamarra","Tamera","Tami","Tamiko","Tamma","Tammara","Tammi","Tammie","Tammy","Tamqrah","Tamra","Tana","Tandi","Tandie","Tandy","Tanhya","Tani","Tania","Tanitansy","Tansy","Tanya","Tara","Tarah","Tarra","Tarrah","Taryn","Tasha","Tasia","Tate","Tatiana","Tatiania","Tatum","Tawnya","Tawsha","Ted","Tedda","Teddi","Teddie","Teddy","Tedi","Tedra","Teena","Teirtza","Teodora","Tera","Teresa","Terese","Teresina","Teresita","Teressa","Teri","Teriann","Terra","Terri","Terrie","Terrijo","Terry","Terrye","Tersina","Terza","Tess","Tessa","Tessi","Tessie","Tessy","Thalia","Thea","Theadora","Theda","Thekla","Thelma","Theo","Theodora","Theodosia","Theresa","Therese","Theresina","Theresita","Theressa","Therine","Thia","Thomasa","Thomasin","Thomasina","Thomasine","Tiena","Tierney","Tiertza","Tiff","Tiffani","Tiffanie","Tiffany","Tiffi","Tiffie","Tiffy","Tilda","Tildi","Tildie","Tildy","Tillie","Tilly","Tim","Timi","Timmi","Timmie","Timmy","Timothea","Tina","Tine","Tiphani","Tiphanie","Tiphany","Tish","Tisha","Tobe","Tobey","Tobi","Toby","Tobye","Toinette","Toma","Tomasina","Tomasine","Tomi","Tommi","Tommie","Tommy","Toni","Tonia","Tonie","Tony","Tonya","Tonye","Tootsie","Torey","Tori","Torie","Torrie","Tory","Tova","Tove","Tracee","Tracey","Traci","Tracie","Tracy","Trenna","Tresa","Trescha","Tressa","Tricia","Trina","Trish","Trisha","Trista","Trix","Trixi","Trixie","Trixy","Truda","Trude","Trudey","Trudi","Trudie","Trudy","Trula","Tuesday","Twila","Twyla","Tybi","Tybie","Tyne","Ula","Ulla","Ulrica","Ulrika","Ulrikaumeko","Ulrike","Umeko","Una","Ursa","Ursala","Ursola","Ursula","Ursulina","Ursuline","Uta","Val","Valaree","Valaria","Vale","Valeda","Valencia","Valene","Valenka","Valentia","Valentina","Valentine","Valera","Valeria","Valerie","Valery","Valerye","Valida","Valina","Valli","Vallie","Vally","Valma","Valry","Van","Vanda","Vanessa","Vania","Vanna","Vanni","Vannie","Vanny","Vanya","Veda","Velma","Velvet","Venita","Venus","Vera","Veradis","Vere","Verena","Verene","Veriee","Verile","Verina","Verine","Verla","Verna","Vernice","Veronica","Veronika","Veronike","Veronique","Vevay","Vi","Vicki","Vickie","Vicky","Victoria","Vida","Viki","Vikki","Vikky","Vilhelmina","Vilma","Vin","Vina","Vinita","Vinni","Vinnie","Vinny","Viola","Violante","Viole","Violet","Violetta","Violette","Virgie","Virgina","Virginia","Virginie","Vita","Vitia","Vitoria","Vittoria","Viv","Viva","Vivi","Vivia","Vivian","Viviana","Vivianna","Vivianne","Vivie","Vivien","Viviene","Vivienne","Viviyan","Vivyan","Vivyanne","Vonni","Vonnie","Vonny","Vyky","Wallie","Wallis","Walliw","Wally","Waly","Wanda","Wandie","Wandis","Waneta","Wanids","Wenda","Wendeline","Wendi","Wendie","Wendy","Wendye","Wenona","Wenonah","Whitney","Wileen","Wilhelmina","Wilhelmine","Wilie","Willa","Willabella","Willamina","Willetta","Willette","Willi","Willie","Willow","Willy","Willyt","Wilma","Wilmette","Wilona","Wilone","Wilow","Windy","Wini","Winifred","Winna","Winnah","Winne","Winni","Winnie","Winnifred","Winny","Winona","Winonah","Wren","Wrennie","Wylma","Wynn","Wynne","Wynnie","Wynny","Xaviera","Xena","Xenia","Xylia","Xylina","Yalonda","Yasmeen","Yasmin","Yelena","Yetta","Yettie","Yetty","Yevette","Ynes","Ynez","Yoko","Yolanda","Yolande","Yolane","Yolanthe","Yoshi","Yoshiko","Yovonnda","Ysabel","Yvette","Yvonne","Zabrina","Zahara","Zandra","Zaneta","Zara","Zarah","Zaria","Zarla","Zea","Zelda","Zelma","Zena","Zenia","Zia","Zilvia","Zita","Zitella","Zoe","Zola","Zonda","Zondra","Zonnya","Zora","Zorah","Zorana","Zorina","Zorine","Zsazsa","Zulema","Zuzana"],exports.starWars=["Ackbar","Adi Gallia","Anakin Skywalker","Arvel Crynyd","Ayla Secura","Bail Prestor Organa","Barriss Offee","Ben Quadinaros","Beru Whitesun lars","Bib Fortuna","Biggs Darklighter","Boba Fett","Bossk","C-3PO","Chewbacca","Cliegg Lars","Cordé","Darth Maul","Darth Vader","Dexter Jettster","Dooku","Dormé","Dud Bolt","Eeth Koth","Finis Valorum","Gasgano","Greedo","Gregar Typho","Grievous","Han Solo","IG-88","Jabba Desilijic Tiure","Jango Fett","Jar Jar Binks","Jek Tono Porkins","Jocasta Nu","Ki-Adi-Mundi","Kit Fisto","Lama Su","Lando Calrissian","Leia Organa","Lobot","Luke Skywalker","Luminara Unduli","Mace Windu","Mas Amedda","Mon Mothma","Nien Nunb","Nute Gunray","Obi-Wan Kenobi","Owen Lars","Padmé Amidala","Palpatine","Plo Koon","Poggle the Lesser","Quarsh Panaka","Qui-Gon Jinn","R2-D2","R4-P17","R5-D4","Ratts Tyerel","Raymus Antilles","Ric Olié","Roos Tarpals","Rugor Nass","Saesee Tiin","San Hill","Sebulba","Shaak Ti","Shmi Skywalker","Sly Moore","Tarfful","Taun We","Tion Medon","Wat Tambor","Watto","Wedge Antilles","Wicket Systri Warrick","Wilhuff Tarkin","Yarael Poof","Yoda","Zam Wesell"],exports.uniqueNamesGenerator=i=>{const n=[...i&&i.dictionaries||e.dictionaries],l={...e,...i,length:i&&i.length||n.length,dictionaries:n};if(!i||!i.dictionaries||!i.dictionaries.length)throw new Error('A "dictionaries" array must be provided. This is a breaking change introduced starting from Unique Name Generator v4. Read more about the breaking change here: https://github.com/andreasonny83/unique-names-generator#migration-guide');return new a(l).generate()}; -//# sourceMappingURL=index.js.map diff --git a/tests/iac_integration/cdk/testdata/src/nodejs/NodeJsFunctionConstruct/node_modules/unique-names-generator/dist/index.m.js b/tests/iac_integration/cdk/testdata/src/nodejs/NodeJsFunctionConstruct/node_modules/unique-names-generator/dist/index.m.js deleted file mode 100644 index 542b7942ea..0000000000 --- a/tests/iac_integration/cdk/testdata/src/nodejs/NodeJsFunctionConstruct/node_modules/unique-names-generator/dist/index.m.js +++ /dev/null @@ -1,2 +0,0 @@ -class a{constructor(a){this.dictionaries=void 0,this.length=void 0,this.separator=void 0,this.style=void 0,this.seed=void 0;const{length:e,separator:i,dictionaries:n,style:l,seed:r}=a;this.dictionaries=n,this.separator=i,this.length=e,this.style=l,this.seed=r}generate(){if(!this.dictionaries)throw new Error('Cannot find any dictionary. Please provide at least one, or leave the "dictionary" field empty in the config object');if(this.length<=0)throw new Error("Invalid length provided");if(this.length>this.dictionaries.length)throw new Error(`The length cannot be bigger than the number of dictionaries.\nLength provided: ${this.length}. Number of dictionaries provided: ${this.dictionaries.length}`);return this.dictionaries.slice(0,this.length).reduce((a,e)=>{let i=e[Math.floor((this.seed?(n=this.seed,(a=>{a=1831565813+(a|=0)|0;let e=Math.imul(a^a>>>15,1|a);return e=e+Math.imul(e^e>>>7,61|e)^e,((e^e>>>14)>>>0)/4294967296})(n)):Math.random())*e.length)]||"";var n;if("lowerCase"===this.style)i=i.toLowerCase();else if("capital"===this.style){const[a,...e]=i.split("");i=a.toUpperCase()+e.join("")}else"upperCase"===this.style&&(i=i.toUpperCase());return a?`${a}${this.separator}${i}`:`${i}`},"")}}const e={separator:"_",dictionaries:[]},i=i=>{const n=[...i&&i.dictionaries||e.dictionaries],l={...e,...i,length:i&&i.length||n.length,dictionaries:n};if(!i||!i.dictionaries||!i.dictionaries.length)throw new Error('A "dictionaries" array must be provided. This is a breaking change introduced starting from Unique Name Generator v4. Read more about the breaking change here: https://github.com/andreasonny83/unique-names-generator#migration-guide');return new a(l).generate()};var n=["able","above","absent","absolute","abstract","abundant","academic","acceptable","accepted","accessible","accurate","accused","active","actual","acute","added","additional","adequate","adjacent","administrative","adorable","advanced","adverse","advisory","aesthetic","afraid","aggregate","aggressive","agreeable","agreed","agricultural","alert","alive","alleged","allied","alone","alright","alternative","amateur","amazing","ambitious","amused","ancient","angry","annoyed","annual","anonymous","anxious","appalling","apparent","applicable","appropriate","arbitrary","architectural","armed","arrogant","artificial","artistic","ashamed","asleep","assistant","associated","atomic","attractive","automatic","autonomous","available","average","awake","aware","awful","awkward","back","bad","balanced","bare","basic","beautiful","beneficial","better","bewildered","big","binding","biological","bitter","bizarre","blank","blind","blonde","bloody","blushing","boiling","bold","bored","boring","bottom","brainy","brave","breakable","breezy","brief","bright","brilliant","broad","broken","bumpy","burning","busy","calm","capable","capitalist","careful","casual","causal","cautious","central","certain","changing","characteristic","charming","cheap","cheerful","chemical","chief","chilly","chosen","christian","chronic","chubby","circular","civic","civil","civilian","classic","classical","clean","clear","clever","clinical","close","closed","cloudy","clumsy","coastal","cognitive","coherent","cold","collective","colonial","colorful","colossal","coloured","colourful","combative","combined","comfortable","coming","commercial","common","communist","compact","comparable","comparative","compatible","competent","competitive","complete","complex","complicated","comprehensive","compulsory","conceptual","concerned","concrete","condemned","confident","confidential","confused","conscious","conservation","conservative","considerable","consistent","constant","constitutional","contemporary","content","continental","continued","continuing","continuous","controlled","controversial","convenient","conventional","convinced","convincing","cooing","cool","cooperative","corporate","correct","corresponding","costly","courageous","crazy","creative","creepy","criminal","critical","crooked","crowded","crucial","crude","cruel","cuddly","cultural","curious","curly","current","curved","cute","daily","damaged","damp","dangerous","dark","dead","deaf","deafening","dear","decent","decisive","deep","defeated","defensive","defiant","definite","deliberate","delicate","delicious","delighted","delightful","democratic","dependent","depressed","desirable","desperate","detailed","determined","developed","developing","devoted","different","difficult","digital","diplomatic","direct","dirty","disabled","disappointed","disastrous","disciplinary","disgusted","distant","distinct","distinctive","distinguished","disturbed","disturbing","diverse","divine","dizzy","domestic","dominant","double","doubtful","drab","dramatic","dreadful","driving","drunk","dry","dual","due","dull","dusty","dutch","dying","dynamic","eager","early","eastern","easy","economic","educational","eerie","effective","efficient","elaborate","elated","elderly","eldest","electoral","electric","electrical","electronic","elegant","eligible","embarrassed","embarrassing","emotional","empirical","empty","enchanting","encouraging","endless","energetic","enormous","enthusiastic","entire","entitled","envious","environmental","equal","equivalent","essential","established","estimated","ethical","ethnic","eventual","everyday","evident","evil","evolutionary","exact","excellent","exceptional","excess","excessive","excited","exciting","exclusive","existing","exotic","expected","expensive","experienced","experimental","explicit","extended","extensive","external","extra","extraordinary","extreme","exuberant","faint","fair","faithful","familiar","famous","fancy","fantastic","far","fascinating","fashionable","fast","fat","fatal","favourable","favourite","federal","fellow","female","feminist","few","fierce","filthy","final","financial","fine","firm","fiscal","fit","fixed","flaky","flat","flexible","fluffy","fluttering","flying","following","fond","foolish","foreign","formal","formidable","forthcoming","fortunate","forward","fragile","frail","frantic","free","frequent","fresh","friendly","frightened","front","frozen","full","fun","functional","fundamental","funny","furious","future","fuzzy","gastric","gay","general","generous","genetic","gentle","genuine","geographical","giant","gigantic","given","glad","glamorous","gleaming","global","glorious","golden","good","gorgeous","gothic","governing","graceful","gradual","grand","grateful","greasy","great","grieving","grim","gross","grotesque","growing","grubby","grumpy","guilty","handicapped","handsome","happy","hard","harsh","head","healthy","heavy","helpful","helpless","hidden","high","hilarious","hissing","historic","historical","hollow","holy","homeless","homely","hon","honest","horizontal","horrible","hostile","hot","huge","human","hungry","hurt","hushed","husky","icy","ideal","identical","ideological","ill","illegal","imaginative","immediate","immense","imperial","implicit","important","impossible","impressed","impressive","improved","inadequate","inappropriate","inc","inclined","increased","increasing","incredible","independent","indirect","individual","industrial","inevitable","influential","informal","inherent","initial","injured","inland","inner","innocent","innovative","inquisitive","instant","institutional","insufficient","intact","integral","integrated","intellectual","intelligent","intense","intensive","interested","interesting","interim","interior","intermediate","internal","international","intimate","invisible","involved","irrelevant","isolated","itchy","jealous","jittery","joint","jolly","joyous","judicial","juicy","junior","just","keen","key","kind","known","labour","large","late","latin","lazy","leading","left","legal","legislative","legitimate","lengthy","lesser","level","lexical","liable","liberal","light","like","likely","limited","linear","linguistic","liquid","literary","little","live","lively","living","local","logical","lonely","long","loose","lost","loud","lovely","low","loyal","ltd","lucky","mad","magic","magnetic","magnificent","main","major","male","mammoth","managerial","managing","manual","many","marginal","marine","marked","married","marvellous","marxist","mass","massive","mathematical","mature","maximum","mean","meaningful","mechanical","medical","medieval","melodic","melted","mental","mere","metropolitan","mid","middle","mighty","mild","military","miniature","minimal","minimum","ministerial","minor","miserable","misleading","missing","misty","mixed","moaning","mobile","moderate","modern","modest","molecular","monetary","monthly","moral","motionless","muddy","multiple","mushy","musical","mute","mutual","mysterious","naked","narrow","nasty","national","native","natural","naughty","naval","near","nearby","neat","necessary","negative","neighbouring","nervous","net","neutral","new","nice","noble","noisy","normal","northern","nosy","notable","novel","nuclear","numerous","nursing","nutritious","nutty","obedient","objective","obliged","obnoxious","obvious","occasional","occupational","odd","official","ok","okay","old","olympic","only","open","operational","opposite","optimistic","oral","ordinary","organic","organisational","original","orthodox","other","outdoor","outer","outrageous","outside","outstanding","overall","overseas","overwhelming","painful","pale","panicky","parallel","parental","parliamentary","partial","particular","passing","passive","past","patient","payable","peaceful","peculiar","perfect","permanent","persistent","personal","petite","philosophical","physical","plain","planned","plastic","pleasant","pleased","poised","polite","political","poor","popular","positive","possible","potential","powerful","practical","precious","precise","preferred","pregnant","preliminary","premier","prepared","present","presidential","pretty","previous","prickly","primary","prime","primitive","principal","printed","prior","private","probable","productive","professional","profitable","profound","progressive","prominent","promising","proper","proposed","prospective","protective","protestant","proud","provincial","psychiatric","psychological","public","puny","pure","purring","puzzled","quaint","qualified","quarrelsome","querulous","quick","quickest","quiet","quintessential","quixotic","racial","radical","rainy","random","rapid","rare","raspy","rational","ratty","raw","ready","real","realistic","rear","reasonable","recent","reduced","redundant","regional","registered","regular","regulatory","related","relative","relaxed","relevant","reliable","relieved","religious","reluctant","remaining","remarkable","remote","renewed","representative","repulsive","required","resident","residential","resonant","respectable","respective","responsible","resulting","retail","retired","revolutionary","rich","ridiculous","right","rigid","ripe","rising","rival","roasted","robust","rolling","romantic","rotten","rough","round","royal","rubber","rude","ruling","running","rural","sacred","sad","safe","salty","satisfactory","satisfied","scared","scary","scattered","scientific","scornful","scrawny","screeching","secondary","secret","secure","select","selected","selective","selfish","semantic","senior","sensible","sensitive","separate","serious","severe","sexual","shaggy","shaky","shallow","shared","sharp","sheer","shiny","shivering","shocked","short","shrill","shy","sick","significant","silent","silky","silly","similar","simple","single","skilled","skinny","sleepy","slight","slim","slimy","slippery","slow","small","smart","smiling","smoggy","smooth","social","socialist","soft","solar","sole","solid","sophisticated","sore","sorry","sound","sour","southern","soviet","spare","sparkling","spatial","special","specific","specified","spectacular","spicy","spiritual","splendid","spontaneous","sporting","spotless","spotty","square","squealing","stable","stale","standard","static","statistical","statutory","steady","steep","sticky","stiff","still","stingy","stormy","straight","straightforward","strange","strategic","strict","striking","striped","strong","structural","stuck","stupid","subjective","subsequent","substantial","subtle","successful","successive","sudden","sufficient","suitable","sunny","super","superb","superior","supporting","supposed","supreme","sure","surprised","surprising","surrounding","surviving","suspicious","sweet","swift","symbolic","sympathetic","systematic","tall","tame","tart","tasteless","tasty","technical","technological","teenage","temporary","tender","tense","terrible","territorial","testy","then","theoretical","thick","thin","thirsty","thorough","thoughtful","thoughtless","thundering","tight","tiny","tired","top","tory","total","tough","toxic","traditional","tragic","tremendous","tricky","tropical","troubled","typical","ugliest","ugly","ultimate","unable","unacceptable","unaware","uncertain","unchanged","uncomfortable","unconscious","underground","underlying","unemployed","uneven","unexpected","unfair","unfortunate","unhappy","uniform","uninterested","unique","united","universal","unknown","unlikely","unnecessary","unpleasant","unsightly","unusual","unwilling","upper","upset","uptight","urban","urgent","used","useful","useless","usual","vague","valid","valuable","variable","varied","various","varying","vast","verbal","vertical","very","vicarious","vicious","victorious","violent","visible","visiting","visual","vital","vitreous","vivacious","vivid","vocal","vocational","voiceless","voluminous","voluntary","vulnerable","wandering","warm","wasteful","watery","weak","wealthy","weary","wee","weekly","weird","welcome","well","western","wet","whispering","whole","wicked","wide","widespread","wild","wilful","willing","willowy","wily","wise","wispy","wittering","witty","wonderful","wooden","working","worldwide","worried","worrying","worthwhile","worthy","written","wrong","xenacious","xenial","xenogeneic","xenophobic","xeric","xerothermic","yabbering","yammering","yappiest","yappy","yawning","yearling","yearning","yeasty","yelling","yelping","yielding","yodelling","young","youngest","youthful","ytterbic","yucky","yummy","zany","zealous","zeroth","zestful","zesty","zippy","zonal","zoophagous","zygomorphic","zygotic"],l=["aardvark","aardwolf","albatross","alligator","alpaca","amphibian","anaconda","angelfish","anglerfish","ant","anteater","antelope","antlion","ape","aphid","armadillo","asp","baboon","badger","bandicoot","barnacle","barracuda","basilisk","bass","bat","bear","beaver","bedbug","bee","beetle","bird","bison","blackbird","boa","boar","bobcat","bobolink","bonobo","booby","bovid","bug","butterfly","buzzard","camel","canid","canidae","capybara","cardinal","caribou","carp","cat","caterpillar","catfish","catshark","cattle","centipede","cephalopod","chameleon","cheetah","chickadee","chicken","chimpanzee","chinchilla","chipmunk","cicada","clam","clownfish","cobra","cockroach","cod","condor","constrictor","coral","cougar","cow","coyote","crab","crane","crawdad","crayfish","cricket","crocodile","crow","cuckoo","damselfly","deer","dingo","dinosaur","dog","dolphin","donkey","dormouse","dove","dragon","dragonfly","duck","eagle","earthworm","earwig","echidna","eel","egret","elephant","elk","emu","ermine","falcon","felidae","ferret","finch","firefly","fish","flamingo","flea","fly","flyingfish","fowl","fox","frog","galliform","gamefowl","gayal","gazelle","gecko","gerbil","gibbon","giraffe","goat","goldfish","goose","gopher","gorilla","grasshopper","grouse","guan","guanaco","guineafowl","gull","guppy","haddock","halibut","hamster","hare","harrier","hawk","hedgehog","heron","herring","hippopotamus","hookworm","hornet","horse","hoverfly","hummingbird","hyena","iguana","impala","jackal","jaguar","jay","jellyfish","junglefowl","kangaroo","kingfisher","kite","kiwi","koala","koi","krill","ladybug","lamprey","landfowl","lark","leech","lemming","lemur","leopard","leopon","limpet","lion","lizard","llama","lobster","locust","loon","louse","lungfish","lynx","macaw","mackerel","magpie","mammal","manatee","mandrill","marlin","marmoset","marmot","marsupial","marten","mastodon","meadowlark","meerkat","mink","minnow","mite","mockingbird","mole","mollusk","mongoose","monkey","moose","mosquito","moth","mouse","mule","muskox","narwhal","newt","nightingale","ocelot","octopus","opossum","orangutan","orca","ostrich","otter","owl","ox","panda","panther","parakeet","parrot","parrotfish","partridge","peacock","peafowl","pelican","penguin","perch","pheasant","pig","pigeon","pike","pinniped","piranha","planarian","platypus","pony","porcupine","porpoise","possum","prawn","primate","ptarmigan","puffin","puma","python","quail","quelea","quokka","rabbit","raccoon","rat","rattlesnake","raven","reindeer","reptile","rhinoceros","roadrunner","rodent","rook","rooster","roundworm","sailfish","salamander","salmon","sawfish","scallop","scorpion","seahorse","shark","sheep","shrew","shrimp","silkworm","silverfish","skink","skunk","sloth","slug","smelt","snail","snake","snipe","sole","sparrow","spider","spoonbill","squid","squirrel","starfish","stingray","stoat","stork","sturgeon","swallow","swan","swift","swordfish","swordtail","tahr","takin","tapir","tarantula","tarsier","termite","tern","thrush","tick","tiger","tiglon","toad","tortoise","toucan","trout","tuna","turkey","turtle","tyrannosaurus","unicorn","urial","vicuna","viper","vole","vulture","wallaby","walrus","warbler","wasp","weasel","whale","whippet","whitefish","wildcat","wildebeest","wildfowl","wolf","wolverine","wombat","woodpecker","worm","wren","xerinae","yak","zebra"],r=["amaranth","amber","amethyst","apricot","aqua","aquamarine","azure","beige","black","blue","blush","bronze","brown","chocolate","coffee","copper","coral","crimson","cyan","emerald","fuchsia","gold","gray","green","harlequin","indigo","ivory","jade","lavender","lime","magenta","maroon","moccasin","olive","orange","peach","pink","plum","purple","red","rose","salmon","sapphire","scarlet","silver","tan","teal","tomato","turquoise","violet","white","yellow"],t=["Afghanistan","Åland Islands","Albania","Algeria","American Samoa","Andorra","Angola","Anguilla","Antarctica","Antigua & Barbuda","Argentina","Armenia","Aruba","Ascension Island","Australia","Austria","Azerbaijan","Bahamas","Bahrain","Bangladesh","Barbados","Belarus","Belgium","Belize","Benin","Bermuda","Bhutan","Bolivia","Bosnia & Herzegovina","Botswana","Brazil","British Indian Ocean Territory","British Virgin Islands","Brunei","Bulgaria","Burkina Faso","Burundi","Cambodia","Cameroon","Canada","Canary Islands","Cape Verde","Caribbean Netherlands","Cayman Islands","Central African Republic","Ceuta & Melilla","Chad","Chile","China","Christmas Island","Cocos Islands","Colombia","Comoros","Congo","Cook Islands","Costa Rica","Côte d'Ivoire","Croatia","Cuba","Curaçao","Cyprus","Czechia","Denmark","Diego Garcia","Djibouti","Dominica","Dominican Republic","Ecuador","Egypt","El Salvador","Equatorial Guinea","Eritrea","Estonia","Ethiopia","Eurozone","Falkland Islands","Faroe Islands","Fiji","Finland","France","French Guiana","French Polynesia","French Southern Territories","Gabon","Gambia","Georgia","Germany","Ghana","Gibraltar","Greece","Greenland","Grenada","Guadeloupe","Guam","Guatemala","Guernsey","Guinea","Guinea-Bissau","Guyana","Haiti","Honduras","Hong Kong SAR China","Hungary","Iceland","India","Indonesia","Iran","Iraq","Ireland","Isle of Man","Israel","Italy","Jamaica","Japan","Jersey","Jordan","Kazakhstan","Kenya","Kiribati","Kosovo","Kuwait","Kyrgyzstan","Laos","Latvia","Lebanon","Lesotho","Liberia","Libya","Liechtenstein","Lithuania","Luxembourg","Macau SAR China","Macedonia","Madagascar","Malawi","Malaysia","Maldives","Mali","Malta","Marshall Islands","Martinique","Mauritania","Mauritius","Mayotte","Mexico","Micronesia","Moldova","Monaco","Mongolia","Montenegro","Montserrat","Morocco","Mozambique","Myanmar","Namibia","Nauru","Nepal","Netherlands","New Caledonia","New Zealand","Nicaragua","Niger","Nigeria","Niue","Norfolk Island","North Korea","Northern Mariana Islands","Norway","Oman","Pakistan","Palau","Palestinian Territories","Panama","Papua New Guinea","Paraguay","Peru","Philippines","Pitcairn Islands","Poland","Portugal","Puerto Rico","Qatar","Réunion","Romania","Russia","Rwanda","Samoa","San Marino","São Tomé & Príncipe","Saudi Arabia","Senegal","Serbia","Seychelles","Sierra Leone","Singapore","Sint Maarten","Slovakia","Slovenia","Solomon Islands","Somalia","South Africa","South Georgia & South Sandwich Islands","South Korea","South Sudan","Spain","Sri Lanka","St. Barthélemy","St. Helena","St. Kitts & Nevis","St. Lucia","St. Martin","St. Pierre & Miquelon","St. Vincent & Grenadines","Sudan","Suriname","Svalbard & Jan Mayen","Swaziland","Sweden","Switzerland","Syria","Taiwan","Tajikistan","Tanzania","Thailand","Timor-Leste","Togo","Tokelau","Tonga","Trinidad & Tobago","Tristan da Cunha","Tunisia","Turkey","Turkmenistan","Turks & Caicos Islands","Tuvalu","U.S. Outlying Islands","U.S. Virgin Islands","Uganda","Ukraine","United Arab Emirates","United Kingdom","United Nations","United States","Uruguay","Uzbekistan","Vanuatu","Vatican City","Venezuela","Vietnam","Wallis & Futuna","Western Sahara","Yemen","Zambia","Zimbabwe"],o=["Akan","Amharic","Arabic","Assamese","Awadhi","Azerbaijani","Balochi","Belarusian","Bengali","Bhojpuri","Burmese","Cebuano","Chewa","Chhattisgarhi","Chittagonian","Czech","Deccan","Dhundhari","Dutch","English","French","Fula","Gan","German","Greek","Gujarati","Hakka","Haryanvi","Hausa","Hiligaynon","Hindi","Hmong","Hungarian","Igbo","Ilocano","Italian","Japanese","Javanese","Jin","Kannada","Kazakh","Khmer","Kinyarwanda","Kirundi","Konkani","Korean","Kurdish","Madurese","Magahi","Maithili","Malagasy","Malay","Malayalam","Mandarin","Marathi","Marwari","Min","Mossi","Nepali","Odia","Oromo","Pashto","Persian","Polish","Portuguese","Punjabi","Quechua","Romanian","Russian","Saraiki","Shona","Sindhi","Sinhala","Somali","Spanish","Sundanese","Swedish","Sylheti","Tagalog","Tamil","Telugu","Thai","Turkish","Turkmen","Ukrainian","Urdu","Uyghur","Uzbek","Vietnamese","Wu","Xhosa","Xiang","Yoruba","Yue","Zhuang","Zulu"],s=["Aaren","Aarika","Abagael","Abagail","Abbe","Abbey","Abbi","Abbie","Abby","Abbye","Abigael","Abigail","Abigale","Abra","Ada","Adah","Adaline","Adan","Adara","Adda","Addi","Addia","Addie","Addy","Adel","Adela","Adelaida","Adelaide","Adele","Adelheid","Adelice","Adelina","Adelind","Adeline","Adella","Adelle","Adena","Adey","Adi","Adiana","Adina","Adora","Adore","Adoree","Adorne","Adrea","Adria","Adriaens","Adrian","Adriana","Adriane","Adrianna","Adrianne","Adriena","Adrienne","Aeriel","Aeriela","Aeriell","Afton","Ag","Agace","Agata","Agatha","Agathe","Aggi","Aggie","Aggy","Agna","Agnella","Agnes","Agnese","Agnesse","Agneta","Agnola","Agretha","Aida","Aidan","Aigneis","Aila","Aile","Ailee","Aileen","Ailene","Ailey","Aili","Ailina","Ailis","Ailsun","Ailyn","Aime","Aimee","Aimil","Aindrea","Ainslee","Ainsley","Ainslie","Ajay","Alaine","Alameda","Alana","Alanah","Alane","Alanna","Alayne","Alberta","Albertina","Albertine","Albina","Alecia","Aleda","Aleece","Aleen","Alejandra","Alejandrina","Alena","Alene","Alessandra","Aleta","Alethea","Alex","Alexa","Alexandra","Alexandrina","Alexi","Alexia","Alexina","Alexine","Alexis","Alfi","Alfie","Alfreda","Alfy","Ali","Alia","Alica","Alice","Alicea","Alicia","Alida","Alidia","Alie","Alika","Alikee","Alina","Aline","Alis","Alisa","Alisha","Alison","Alissa","Alisun","Alix","Aliza","Alla","Alleen","Allegra","Allene","Alli","Allianora","Allie","Allina","Allis","Allison","Allissa","Allix","Allsun","Allx","Ally","Allyce","Allyn","Allys","Allyson","Alma","Almeda","Almeria","Almeta","Almira","Almire","Aloise","Aloisia","Aloysia","Alta","Althea","Alvera","Alverta","Alvina","Alvinia","Alvira","Alyce","Alyda","Alys","Alysa","Alyse","Alysia","Alyson","Alyss","Alyssa","Amabel","Amabelle","Amalea","Amalee","Amaleta","Amalia","Amalie","Amalita","Amalle","Amanda","Amandi","Amandie","Amandy","Amara","Amargo","Amata","Amber","Amberly","Ambur","Ame","Amelia","Amelie","Amelina","Ameline","Amelita","Ami","Amie","Amii","Amil","Amitie","Amity","Ammamaria","Amy","Amye","Ana","Anabal","Anabel","Anabella","Anabelle","Analiese","Analise","Anallese","Anallise","Anastasia","Anastasie","Anastassia","Anatola","Andee","Andeee","Anderea","Andi","Andie","Andra","Andrea","Andreana","Andree","Andrei","Andria","Andriana","Andriette","Andromache","Andy","Anestassia","Anet","Anett","Anetta","Anette","Ange","Angel","Angela","Angele","Angelia","Angelica","Angelika","Angelina","Angeline","Angelique","Angelita","Angelle","Angie","Angil","Angy","Ania","Anica","Anissa","Anita","Anitra","Anjanette","Anjela","Ann","Ann-marie","Anna","Anna-diana","Anna-diane","Anna-maria","Annabal","Annabel","Annabela","Annabell","Annabella","Annabelle","Annadiana","Annadiane","Annalee","Annaliese","Annalise","Annamaria","Annamarie","Anne","Anne-corinne","Anne-marie","Annecorinne","Anneliese","Annelise","Annemarie","Annetta","Annette","Anni","Annice","Annie","Annis","Annissa","Annmaria","Annmarie","Annnora","Annora","Anny","Anselma","Ansley","Anstice","Anthe","Anthea","Anthia","Anthiathia","Antoinette","Antonella","Antonetta","Antonia","Antonie","Antonietta","Antonina","Anya","Appolonia","April","Aprilette","Ara","Arabel","Arabela","Arabele","Arabella","Arabelle","Arda","Ardath","Ardeen","Ardelia","Ardelis","Ardella","Ardelle","Arden","Ardene","Ardenia","Ardine","Ardis","Ardisj","Ardith","Ardra","Ardyce","Ardys","Ardyth","Aretha","Ariadne","Ariana","Aridatha","Ariel","Ariela","Ariella","Arielle","Arlana","Arlee","Arleen","Arlen","Arlena","Arlene","Arleta","Arlette","Arleyne","Arlie","Arliene","Arlina","Arlinda","Arline","Arluene","Arly","Arlyn","Arlyne","Aryn","Ashely","Ashia","Ashien","Ashil","Ashla","Ashlan","Ashlee","Ashleigh","Ashlen","Ashley","Ashli","Ashlie","Ashly","Asia","Astra","Astrid","Astrix","Atalanta","Athena","Athene","Atlanta","Atlante","Auberta","Aubine","Aubree","Aubrette","Aubrey","Aubrie","Aubry","Audi","Audie","Audra","Audre","Audrey","Audrie","Audry","Audrye","Audy","Augusta","Auguste","Augustina","Augustine","Aundrea","Aura","Aurea","Aurel","Aurelea","Aurelia","Aurelie","Auria","Aurie","Aurilia","Aurlie","Auroora","Aurora","Aurore","Austin","Austina","Austine","Ava","Aveline","Averil","Averyl","Avie","Avis","Aviva","Avivah","Avril","Avrit","Ayn","Bab","Babara","Babb","Babbette","Babbie","Babette","Babita","Babs","Bambi","Bambie","Bamby","Barb","Barbabra","Barbara","Barbara-anne","Barbaraanne","Barbe","Barbee","Barbette","Barbey","Barbi","Barbie","Barbra","Barby","Bari","Barrie","Barry","Basia","Bathsheba","Batsheva","Bea","Beatrice","Beatrisa","Beatrix","Beatriz","Bebe","Becca","Becka","Becki","Beckie","Becky","Bee","Beilul","Beitris","Bekki","Bel","Belia","Belicia","Belinda","Belita","Bell","Bella","Bellanca","Belle","Bellina","Belva","Belvia","Bendite","Benedetta","Benedicta","Benedikta","Benetta","Benita","Benni","Bennie","Benny","Benoite","Berenice","Beret","Berget","Berna","Bernadene","Bernadette","Bernadina","Bernadine","Bernardina","Bernardine","Bernelle","Bernete","Bernetta","Bernette","Berni","Bernice","Bernie","Bernita","Berny","Berri","Berrie","Berry","Bert","Berta","Berte","Bertha","Berthe","Berti","Bertie","Bertina","Bertine","Berty","Beryl","Beryle","Bess","Bessie","Bessy","Beth","Bethanne","Bethany","Bethena","Bethina","Betsey","Betsy","Betta","Bette","Bette-ann","Betteann","Betteanne","Betti","Bettina","Bettine","Betty","Bettye","Beulah","Bev","Beverie","Beverlee","Beverley","Beverlie","Beverly","Bevvy","Bianca","Bianka","Bibbie","Bibby","Bibbye","Bibi","Biddie","Biddy","Bidget","Bili","Bill","Billi","Billie","Billy","Billye","Binni","Binnie","Binny","Bird","Birdie","Birgit","Birgitta","Blair","Blaire","Blake","Blakelee","Blakeley","Blanca","Blanch","Blancha","Blanche","Blinni","Blinnie","Blinny","Bliss","Blisse","Blithe","Blondell","Blondelle","Blondie","Blondy","Blythe","Bobbe","Bobbee","Bobbette","Bobbi","Bobbie","Bobby","Bobbye","Bobette","Bobina","Bobine","Bobinette","Bonita","Bonnee","Bonni","Bonnibelle","Bonnie","Bonny","Brana","Brandais","Brande","Brandea","Brandi","Brandice","Brandie","Brandise","Brandy","Breanne","Brear","Bree","Breena","Bren","Brena","Brenda","Brenn","Brenna","Brett","Bria","Briana","Brianna","Brianne","Bride","Bridget","Bridgette","Bridie","Brier","Brietta","Brigid","Brigida","Brigit","Brigitta","Brigitte","Brina","Briney","Brinn","Brinna","Briny","Brit","Brita","Britney","Britni","Britt","Britta","Brittan","Brittaney","Brittani","Brittany","Britte","Britteny","Brittne","Brittney","Brittni","Brook","Brooke","Brooks","Brunhilda","Brunhilde","Bryana","Bryn","Bryna","Brynn","Brynna","Brynne","Buffy","Bunni","Bunnie","Bunny","Cacilia","Cacilie","Cahra","Cairistiona","Caitlin","Caitrin","Cal","Calida","Calla","Calley","Calli","Callida","Callie","Cally","Calypso","Cam","Camala","Camel","Camella","Camellia","Cami","Camila","Camile","Camilla","Camille","Cammi","Cammie","Cammy","Candace","Candi","Candice","Candida","Candide","Candie","Candis","Candra","Candy","Caprice","Cara","Caralie","Caren","Carena","Caresa","Caressa","Caresse","Carey","Cari","Caria","Carie","Caril","Carilyn","Carin","Carina","Carine","Cariotta","Carissa","Carita","Caritta","Carla","Carlee","Carleen","Carlen","Carlene","Carley","Carlie","Carlin","Carlina","Carline","Carlita","Carlota","Carlotta","Carly","Carlye","Carlyn","Carlynn","Carlynne","Carma","Carmel","Carmela","Carmelia","Carmelina","Carmelita","Carmella","Carmelle","Carmen","Carmencita","Carmina","Carmine","Carmita","Carmon","Caro","Carol","Carol-jean","Carola","Carolan","Carolann","Carole","Carolee","Carolin","Carolina","Caroline","Caroljean","Carolyn","Carolyne","Carolynn","Caron","Carree","Carri","Carrie","Carrissa","Carroll","Carry","Cary","Caryl","Caryn","Casandra","Casey","Casi","Casie","Cass","Cassandra","Cassandre","Cassandry","Cassaundra","Cassey","Cassi","Cassie","Cassondra","Cassy","Catarina","Cate","Caterina","Catha","Catharina","Catharine","Cathe","Cathee","Catherin","Catherina","Catherine","Cathi","Cathie","Cathleen","Cathlene","Cathrin","Cathrine","Cathryn","Cathy","Cathyleen","Cati","Catie","Catina","Catlaina","Catlee","Catlin","Catrina","Catriona","Caty","Caye","Cayla","Cecelia","Cecil","Cecile","Ceciley","Cecilia","Cecilla","Cecily","Ceil","Cele","Celene","Celesta","Celeste","Celestia","Celestina","Celestine","Celestyn","Celestyna","Celia","Celie","Celina","Celinda","Celine","Celinka","Celisse","Celka","Celle","Cesya","Chad","Chanda","Chandal","Chandra","Channa","Chantal","Chantalle","Charil","Charin","Charis","Charissa","Charisse","Charita","Charity","Charla","Charlean","Charleen","Charlena","Charlene","Charline","Charlot","Charlotta","Charlotte","Charmain","Charmaine","Charmane","Charmian","Charmine","Charmion","Charo","Charyl","Chastity","Chelsae","Chelsea","Chelsey","Chelsie","Chelsy","Cher","Chere","Cherey","Cheri","Cherianne","Cherice","Cherida","Cherie","Cherilyn","Cherilynn","Cherin","Cherise","Cherish","Cherlyn","Cherri","Cherrita","Cherry","Chery","Cherye","Cheryl","Cheslie","Chiarra","Chickie","Chicky","Chiquia","Chiquita","Chlo","Chloe","Chloette","Chloris","Chris","Chrissie","Chrissy","Christa","Christabel","Christabella","Christal","Christalle","Christan","Christean","Christel","Christen","Christi","Christian","Christiana","Christiane","Christie","Christin","Christina","Christine","Christy","Christye","Christyna","Chrysa","Chrysler","Chrystal","Chryste","Chrystel","Cicely","Cicily","Ciel","Cilka","Cinda","Cindee","Cindelyn","Cinderella","Cindi","Cindie","Cindra","Cindy","Cinnamon","Cissiee","Cissy","Clair","Claire","Clara","Clarabelle","Clare","Claresta","Clareta","Claretta","Clarette","Clarey","Clari","Claribel","Clarice","Clarie","Clarinda","Clarine","Clarissa","Clarisse","Clarita","Clary","Claude","Claudelle","Claudetta","Claudette","Claudia","Claudie","Claudina","Claudine","Clea","Clem","Clemence","Clementia","Clementina","Clementine","Clemmie","Clemmy","Cleo","Cleopatra","Clerissa","Clio","Clo","Cloe","Cloris","Clotilda","Clovis","Codee","Codi","Codie","Cody","Coleen","Colene","Coletta","Colette","Colleen","Collen","Collete","Collette","Collie","Colline","Colly","Con","Concettina","Conchita","Concordia","Conni","Connie","Conny","Consolata","Constance","Constancia","Constancy","Constanta","Constantia","Constantina","Constantine","Consuela","Consuelo","Cookie","Cora","Corabel","Corabella","Corabelle","Coral","Coralie","Coraline","Coralyn","Cordelia","Cordelie","Cordey","Cordi","Cordie","Cordula","Cordy","Coreen","Corella","Corenda","Corene","Coretta","Corette","Corey","Cori","Corie","Corilla","Corina","Corine","Corinna","Corinne","Coriss","Corissa","Corliss","Corly","Cornela","Cornelia","Cornelle","Cornie","Corny","Correna","Correy","Corri","Corrianne","Corrie","Corrina","Corrine","Corrinne","Corry","Cortney","Cory","Cosetta","Cosette","Costanza","Courtenay","Courtnay","Courtney","Crin","Cris","Crissie","Crissy","Crista","Cristabel","Cristal","Cristen","Cristi","Cristie","Cristin","Cristina","Cristine","Cristionna","Cristy","Crysta","Crystal","Crystie","Cthrine","Cyb","Cybil","Cybill","Cymbre","Cynde","Cyndi","Cyndia","Cyndie","Cyndy","Cynthea","Cynthia","Cynthie","Cynthy","Dacey","Dacia","Dacie","Dacy","Dael","Daffi","Daffie","Daffy","Dagmar","Dahlia","Daile","Daisey","Daisi","Daisie","Daisy","Dale","Dalenna","Dalia","Dalila","Dallas","Daloris","Damara","Damaris","Damita","Dana","Danell","Danella","Danette","Dani","Dania","Danica","Danice","Daniela","Daniele","Daniella","Danielle","Danika","Danila","Danit","Danita","Danna","Danni","Dannie","Danny","Dannye","Danya","Danyelle","Danyette","Daphene","Daphna","Daphne","Dara","Darb","Darbie","Darby","Darcee","Darcey","Darci","Darcie","Darcy","Darda","Dareen","Darell","Darelle","Dari","Daria","Darice","Darla","Darleen","Darlene","Darline","Darlleen","Daron","Darrelle","Darryl","Darsey","Darsie","Darya","Daryl","Daryn","Dasha","Dasi","Dasie","Dasya","Datha","Daune","Daveen","Daveta","Davida","Davina","Davine","Davita","Dawn","Dawna","Dayle","Dayna","Ddene","De","Deana","Deane","Deanna","Deanne","Deb","Debbi","Debbie","Debby","Debee","Debera","Debi","Debor","Debora","Deborah","Debra","Dede","Dedie","Dedra","Dee","Deeann","Deeanne","Deedee","Deena","Deerdre","Deeyn","Dehlia","Deidre","Deina","Deirdre","Del","Dela","Delcina","Delcine","Delia","Delila","Delilah","Delinda","Dell","Della","Delly","Delora","Delores","Deloria","Deloris","Delphine","Delphinia","Demeter","Demetra","Demetria","Demetris","Dena","Deni","Denice","Denise","Denna","Denni","Dennie","Denny","Deny","Denys","Denyse","Deonne","Desdemona","Desirae","Desiree","Desiri","Deva","Devan","Devi","Devin","Devina","Devinne","Devon","Devondra","Devonna","Devonne","Devora","Di","Diahann","Dian","Diana","Diandra","Diane","Diane-marie","Dianemarie","Diann","Dianna","Dianne","Diannne","Didi","Dido","Diena","Dierdre","Dina","Dinah","Dinnie","Dinny","Dion","Dione","Dionis","Dionne","Dita","Dix","Dixie","Dniren","Dode","Dodi","Dodie","Dody","Doe","Doll","Dolley","Dolli","Dollie","Dolly","Dolores","Dolorita","Doloritas","Domeniga","Dominga","Domini","Dominica","Dominique","Dona","Donella","Donelle","Donetta","Donia","Donica","Donielle","Donna","Donnamarie","Donni","Donnie","Donny","Dora","Doralia","Doralin","Doralyn","Doralynn","Doralynne","Dore","Doreen","Dorelia","Dorella","Dorelle","Dorena","Dorene","Doretta","Dorette","Dorey","Dori","Doria","Dorian","Dorice","Dorie","Dorine","Doris","Dorisa","Dorise","Dorita","Doro","Dorolice","Dorolisa","Dorotea","Doroteya","Dorothea","Dorothee","Dorothy","Dorree","Dorri","Dorrie","Dorris","Dorry","Dorthea","Dorthy","Dory","Dosi","Dot","Doti","Dotti","Dottie","Dotty","Dre","Dreddy","Dredi","Drona","Dru","Druci","Drucie","Drucill","Drucy","Drusi","Drusie","Drusilla","Drusy","Dulce","Dulcea","Dulci","Dulcia","Dulciana","Dulcie","Dulcine","Dulcinea","Dulcy","Dulsea","Dusty","Dyan","Dyana","Dyane","Dyann","Dyanna","Dyanne","Dyna","Dynah","Eachelle","Eada","Eadie","Eadith","Ealasaid","Eartha","Easter","Eba","Ebba","Ebonee","Ebony","Eda","Eddi","Eddie","Eddy","Ede","Edee","Edeline","Eden","Edi","Edie","Edin","Edita","Edith","Editha","Edithe","Ediva","Edna","Edwina","Edy","Edyth","Edythe","Effie","Eileen","Eilis","Eimile","Eirena","Ekaterina","Elaina","Elaine","Elana","Elane","Elayne","Elberta","Elbertina","Elbertine","Eleanor","Eleanora","Eleanore","Electra","Eleen","Elena","Elene","Eleni","Elenore","Eleonora","Eleonore","Elfie","Elfreda","Elfrida","Elfrieda","Elga","Elianora","Elianore","Elicia","Elie","Elinor","Elinore","Elisa","Elisabet","Elisabeth","Elisabetta","Elise","Elisha","Elissa","Elita","Eliza","Elizabet","Elizabeth","Elka","Elke","Ella","Elladine","Elle","Ellen","Ellene","Ellette","Elli","Ellie","Ellissa","Elly","Ellyn","Ellynn","Elmira","Elna","Elnora","Elnore","Eloisa","Eloise","Elonore","Elora","Elsa","Elsbeth","Else","Elset","Elsey","Elsi","Elsie","Elsinore","Elspeth","Elsy","Elva","Elvera","Elvina","Elvira","Elwira","Elyn","Elyse","Elysee","Elysha","Elysia","Elyssa","Em","Ema","Emalee","Emalia","Emelda","Emelia","Emelina","Emeline","Emelita","Emelyne","Emera","Emilee","Emili","Emilia","Emilie","Emiline","Emily","Emlyn","Emlynn","Emlynne","Emma","Emmalee","Emmaline","Emmalyn","Emmalynn","Emmalynne","Emmeline","Emmey","Emmi","Emmie","Emmy","Emmye","Emogene","Emyle","Emylee","Engracia","Enid","Enrica","Enrichetta","Enrika","Enriqueta","Eolanda","Eolande","Eran","Erda","Erena","Erica","Ericha","Ericka","Erika","Erin","Erina","Erinn","Erinna","Erma","Ermengarde","Ermentrude","Ermina","Erminia","Erminie","Erna","Ernaline","Ernesta","Ernestine","Ertha","Eryn","Esma","Esmaria","Esme","Esmeralda","Essa","Essie","Essy","Esta","Estel","Estele","Estell","Estella","Estelle","Ester","Esther","Estrella","Estrellita","Ethel","Ethelda","Ethelin","Ethelind","Etheline","Ethelyn","Ethyl","Etta","Etti","Ettie","Etty","Eudora","Eugenia","Eugenie","Eugine","Eula","Eulalie","Eunice","Euphemia","Eustacia","Eva","Evaleen","Evangelia","Evangelin","Evangelina","Evangeline","Evania","Evanne","Eve","Eveleen","Evelina","Eveline","Evelyn","Evey","Evie","Evita","Evonne","Evvie","Evvy","Evy","Eyde","Eydie","Ezmeralda","Fae","Faina","Faith","Fallon","Fan","Fanchette","Fanchon","Fancie","Fancy","Fanechka","Fania","Fanni","Fannie","Fanny","Fanya","Fara","Farah","Farand","Farica","Farra","Farrah","Farrand","Faun","Faunie","Faustina","Faustine","Fawn","Fawne","Fawnia","Fay","Faydra","Faye","Fayette","Fayina","Fayre","Fayth","Faythe","Federica","Fedora","Felecia","Felicdad","Felice","Felicia","Felicity","Felicle","Felipa","Felisha","Felita","Feliza","Fenelia","Feodora","Ferdinanda","Ferdinande","Fern","Fernanda","Fernande","Fernandina","Ferne","Fey","Fiann","Fianna","Fidela","Fidelia","Fidelity","Fifi","Fifine","Filia","Filide","Filippa","Fina","Fiona","Fionna","Fionnula","Fiorenze","Fleur","Fleurette","Flo","Flor","Flora","Florance","Flore","Florella","Florence","Florencia","Florentia","Florenza","Florette","Flori","Floria","Florida","Florie","Florina","Florinda","Floris","Florri","Florrie","Florry","Flory","Flossi","Flossie","Flossy","Flss","Fran","Francene","Frances","Francesca","Francine","Francisca","Franciska","Francoise","Francyne","Frank","Frankie","Franky","Franni","Frannie","Franny","Frayda","Fred","Freda","Freddi","Freddie","Freddy","Fredelia","Frederica","Fredericka","Frederique","Fredi","Fredia","Fredra","Fredrika","Freida","Frieda","Friederike","Fulvia","Gabbey","Gabbi","Gabbie","Gabey","Gabi","Gabie","Gabriel","Gabriela","Gabriell","Gabriella","Gabrielle","Gabriellia","Gabrila","Gaby","Gae","Gael","Gail","Gale","Galina","Garland","Garnet","Garnette","Gates","Gavra","Gavrielle","Gay","Gaye","Gayel","Gayla","Gayle","Gayleen","Gaylene","Gaynor","Gelya","Gena","Gene","Geneva","Genevieve","Genevra","Genia","Genna","Genni","Gennie","Gennifer","Genny","Genovera","Genvieve","George","Georgeanna","Georgeanne","Georgena","Georgeta","Georgetta","Georgette","Georgia","Georgiana","Georgianna","Georgianne","Georgie","Georgina","Georgine","Geralda","Geraldine","Gerda","Gerhardine","Geri","Gerianna","Gerianne","Gerladina","Germain","Germaine","Germana","Gerri","Gerrie","Gerrilee","Gerry","Gert","Gerta","Gerti","Gertie","Gertrud","Gertruda","Gertrude","Gertrudis","Gerty","Giacinta","Giana","Gianina","Gianna","Gigi","Gilberta","Gilberte","Gilbertina","Gilbertine","Gilda","Gilemette","Gill","Gillan","Gilli","Gillian","Gillie","Gilligan","Gilly","Gina","Ginelle","Ginevra","Ginger","Ginni","Ginnie","Ginnifer","Ginny","Giorgia","Giovanna","Gipsy","Giralda","Gisela","Gisele","Gisella","Giselle","Giuditta","Giulia","Giulietta","Giustina","Gizela","Glad","Gladi","Gladys","Gleda","Glen","Glenda","Glenine","Glenn","Glenna","Glennie","Glennis","Glori","Gloria","Gloriana","Gloriane","Glory","Glyn","Glynda","Glynis","Glynnis","Gnni","Godiva","Golda","Goldarina","Goldi","Goldia","Goldie","Goldina","Goldy","Grace","Gracia","Gracie","Grata","Gratia","Gratiana","Gray","Grayce","Grazia","Greer","Greta","Gretal","Gretchen","Grete","Gretel","Grethel","Gretna","Gretta","Grier","Griselda","Grissel","Guendolen","Guenevere","Guenna","Guglielma","Gui","Guillema","Guillemette","Guinevere","Guinna","Gunilla","Gus","Gusella","Gussi","Gussie","Gussy","Gusta","Gusti","Gustie","Gusty","Gwen","Gwendolen","Gwendolin","Gwendolyn","Gweneth","Gwenette","Gwenneth","Gwenni","Gwennie","Gwenny","Gwenora","Gwenore","Gwyn","Gwyneth","Gwynne","Gypsy","Hadria","Hailee","Haily","Haleigh","Halette","Haley","Hali","Halie","Halimeda","Halley","Halli","Hallie","Hally","Hana","Hanna","Hannah","Hanni","Hannie","Hannis","Hanny","Happy","Harlene","Harley","Harli","Harlie","Harmonia","Harmonie","Harmony","Harri","Harrie","Harriet","Harriett","Harrietta","Harriette","Harriot","Harriott","Hatti","Hattie","Hatty","Hayley","Hazel","Heath","Heather","Heda","Hedda","Heddi","Heddie","Hedi","Hedvig","Hedvige","Hedwig","Hedwiga","Hedy","Heida","Heidi","Heidie","Helaina","Helaine","Helen","Helen-elizabeth","Helena","Helene","Helenka","Helga","Helge","Helli","Heloise","Helsa","Helyn","Hendrika","Henka","Henrie","Henrieta","Henrietta","Henriette","Henryetta","Hephzibah","Hermia","Hermina","Hermine","Herminia","Hermione","Herta","Hertha","Hester","Hesther","Hestia","Hetti","Hettie","Hetty","Hilary","Hilda","Hildagard","Hildagarde","Hilde","Hildegaard","Hildegarde","Hildy","Hillary","Hilliary","Hinda","Holli","Hollie","Holly","Holly-anne","Hollyanne","Honey","Honor","Honoria","Hope","Horatia","Hortense","Hortensia","Hulda","Hyacinth","Hyacintha","Hyacinthe","Hyacinthia","Hyacinthie","Hynda","Ianthe","Ibbie","Ibby","Ida","Idalia","Idalina","Idaline","Idell","Idelle","Idette","Ileana","Ileane","Ilene","Ilise","Ilka","Illa","Ilsa","Ilse","Ilysa","Ilyse","Ilyssa","Imelda","Imogen","Imogene","Imojean","Ina","Indira","Ines","Inesita","Inessa","Inez","Inga","Ingaberg","Ingaborg","Inge","Ingeberg","Ingeborg","Inger","Ingrid","Ingunna","Inna","Iolande","Iolanthe","Iona","Iormina","Ira","Irena","Irene","Irina","Iris","Irita","Irma","Isa","Isabel","Isabelita","Isabella","Isabelle","Isadora","Isahella","Iseabal","Isidora","Isis","Isobel","Issi","Issie","Issy","Ivett","Ivette","Ivie","Ivonne","Ivory","Ivy","Izabel","Jacenta","Jacinda","Jacinta","Jacintha","Jacinthe","Jackelyn","Jacki","Jackie","Jacklin","Jacklyn","Jackquelin","Jackqueline","Jacky","Jaclin","Jaclyn","Jacquelin","Jacqueline","Jacquelyn","Jacquelynn","Jacquenetta","Jacquenette","Jacquetta","Jacquette","Jacqui","Jacquie","Jacynth","Jada","Jade","Jaime","Jaimie","Jaine","Jami","Jamie","Jamima","Jammie","Jan","Jana","Janaya","Janaye","Jandy","Jane","Janean","Janeczka","Janeen","Janel","Janela","Janella","Janelle","Janene","Janenna","Janessa","Janet","Janeta","Janetta","Janette","Janeva","Janey","Jania","Janice","Janie","Janifer","Janina","Janine","Janis","Janith","Janka","Janna","Jannel","Jannelle","Janot","Jany","Jaquelin","Jaquelyn","Jaquenetta","Jaquenette","Jaquith","Jasmin","Jasmina","Jasmine","Jayme","Jaymee","Jayne","Jaynell","Jazmin","Jean","Jeana","Jeane","Jeanelle","Jeanette","Jeanie","Jeanine","Jeanna","Jeanne","Jeannette","Jeannie","Jeannine","Jehanna","Jelene","Jemie","Jemima","Jemimah","Jemmie","Jemmy","Jen","Jena","Jenda","Jenelle","Jeni","Jenica","Jeniece","Jenifer","Jeniffer","Jenilee","Jenine","Jenn","Jenna","Jennee","Jennette","Jenni","Jennica","Jennie","Jennifer","Jennilee","Jennine","Jenny","Jeralee","Jere","Jeri","Jermaine","Jerrie","Jerrilee","Jerrilyn","Jerrine","Jerry","Jerrylee","Jess","Jessa","Jessalin","Jessalyn","Jessamine","Jessamyn","Jesse","Jesselyn","Jessi","Jessica","Jessie","Jessika","Jessy","Jewel","Jewell","Jewelle","Jill","Jillana","Jillane","Jillayne","Jilleen","Jillene","Jilli","Jillian","Jillie","Jilly","Jinny","Jo","Jo-ann","Jo-anne","Joan","Joana","Joane","Joanie","Joann","Joanna","Joanne","Joannes","Jobey","Jobi","Jobie","Jobina","Joby","Jobye","Jobyna","Jocelin","Joceline","Jocelyn","Jocelyne","Jodee","Jodi","Jodie","Jody","Joeann","Joela","Joelie","Joell","Joella","Joelle","Joellen","Joelly","Joellyn","Joelynn","Joete","Joey","Johanna","Johannah","Johna","Johnath","Johnette","Johnna","Joice","Jojo","Jolee","Joleen","Jolene","Joletta","Joli","Jolie","Joline","Joly","Jolyn","Jolynn","Jonell","Joni","Jonie","Jonis","Jordain","Jordan","Jordana","Jordanna","Jorey","Jori","Jorie","Jorrie","Jorry","Joscelin","Josee","Josefa","Josefina","Josepha","Josephina","Josephine","Josey","Josi","Josie","Josselyn","Josy","Jourdan","Joy","Joya","Joyan","Joyann","Joyce","Joycelin","Joye","Jsandye","Juana","Juanita","Judi","Judie","Judith","Juditha","Judy","Judye","Juieta","Julee","Juli","Julia","Juliana","Juliane","Juliann","Julianna","Julianne","Julie","Julienne","Juliet","Julieta","Julietta","Juliette","Julina","Juline","Julissa","Julita","June","Junette","Junia","Junie","Junina","Justina","Justine","Justinn","Jyoti","Kacey","Kacie","Kacy","Kaela","Kai","Kaia","Kaila","Kaile","Kailey","Kaitlin","Kaitlyn","Kaitlynn","Kaja","Kakalina","Kala","Kaleena","Kali","Kalie","Kalila","Kalina","Kalinda","Kalindi","Kalli","Kally","Kameko","Kamila","Kamilah","Kamillah","Kandace","Kandy","Kania","Kanya","Kara","Kara-lynn","Karalee","Karalynn","Kare","Karee","Karel","Karen","Karena","Kari","Karia","Karie","Karil","Karilynn","Karin","Karina","Karine","Kariotta","Karisa","Karissa","Karita","Karla","Karlee","Karleen","Karlen","Karlene","Karlie","Karlotta","Karlotte","Karly","Karlyn","Karmen","Karna","Karol","Karola","Karole","Karolina","Karoline","Karoly","Karon","Karrah","Karrie","Karry","Kary","Karyl","Karylin","Karyn","Kasey","Kass","Kassandra","Kassey","Kassi","Kassia","Kassie","Kat","Kata","Katalin","Kate","Katee","Katerina","Katerine","Katey","Kath","Katha","Katharina","Katharine","Katharyn","Kathe","Katherina","Katherine","Katheryn","Kathi","Kathie","Kathleen","Kathlin","Kathrine","Kathryn","Kathryne","Kathy","Kathye","Kati","Katie","Katina","Katine","Katinka","Katleen","Katlin","Katrina","Katrine","Katrinka","Katti","Kattie","Katuscha","Katusha","Katy","Katya","Kay","Kaycee","Kaye","Kayla","Kayle","Kaylee","Kayley","Kaylil","Kaylyn","Keeley","Keelia","Keely","Kelcey","Kelci","Kelcie","Kelcy","Kelila","Kellen","Kelley","Kelli","Kellia","Kellie","Kellina","Kellsie","Kelly","Kellyann","Kelsey","Kelsi","Kelsy","Kendra","Kendre","Kenna","Keri","Keriann","Kerianne","Kerri","Kerrie","Kerrill","Kerrin","Kerry","Kerstin","Kesley","Keslie","Kessia","Kessiah","Ketti","Kettie","Ketty","Kevina","Kevyn","Ki","Kiah","Kial","Kiele","Kiersten","Kikelia","Kiley","Kim","Kimberlee","Kimberley","Kimberli","Kimberly","Kimberlyn","Kimbra","Kimmi","Kimmie","Kimmy","Kinna","Kip","Kipp","Kippie","Kippy","Kira","Kirbee","Kirbie","Kirby","Kiri","Kirsten","Kirsteni","Kirsti","Kirstin","Kirstyn","Kissee","Kissiah","Kissie","Kit","Kitti","Kittie","Kitty","Kizzee","Kizzie","Klara","Klarika","Klarrisa","Konstance","Konstanze","Koo","Kora","Koral","Koralle","Kordula","Kore","Korella","Koren","Koressa","Kori","Korie","Korney","Korrie","Korry","Kris","Krissie","Krissy","Krista","Kristal","Kristan","Kriste","Kristel","Kristen","Kristi","Kristien","Kristin","Kristina","Kristine","Kristy","Kristyn","Krysta","Krystal","Krystalle","Krystle","Krystyna","Kyla","Kyle","Kylen","Kylie","Kylila","Kylynn","Kym","Kynthia","Kyrstin","Lacee","Lacey","Lacie","Lacy","Ladonna","Laetitia","Laina","Lainey","Lana","Lanae","Lane","Lanette","Laney","Lani","Lanie","Lanita","Lanna","Lanni","Lanny","Lara","Laraine","Lari","Larina","Larine","Larisa","Larissa","Lark","Laryssa","Latashia","Latia","Latisha","Latrena","Latrina","Laura","Lauraine","Laural","Lauralee","Laure","Lauree","Laureen","Laurel","Laurella","Lauren","Laurena","Laurene","Lauretta","Laurette","Lauri","Laurianne","Laurice","Laurie","Lauryn","Lavena","Laverna","Laverne","Lavina","Lavinia","Lavinie","Layla","Layne","Layney","Lea","Leah","Leandra","Leann","Leanna","Leanor","Leanora","Lebbie","Leda","Lee","Leeann","Leeanne","Leela","Leelah","Leena","Leesa","Leese","Legra","Leia","Leigh","Leigha","Leila","Leilah","Leisha","Lela","Lelah","Leland","Lelia","Lena","Lenee","Lenette","Lenka","Lenna","Lenora","Lenore","Leodora","Leoine","Leola","Leoline","Leona","Leonanie","Leone","Leonelle","Leonie","Leonora","Leonore","Leontine","Leontyne","Leora","Leshia","Lesley","Lesli","Leslie","Lesly","Lesya","Leta","Lethia","Leticia","Letisha","Letitia","Letizia","Letta","Letti","Lettie","Letty","Lexi","Lexie","Lexine","Lexis","Lexy","Leyla","Lezlie","Lia","Lian","Liana","Liane","Lianna","Lianne","Lib","Libbey","Libbi","Libbie","Libby","Licha","Lida","Lidia","Liesa","Lil","Lila","Lilah","Lilas","Lilia","Lilian","Liliane","Lilias","Lilith","Lilla","Lilli","Lillian","Lillis","Lilllie","Lilly","Lily","Lilyan","Lin","Lina","Lind","Linda","Lindi","Lindie","Lindsay","Lindsey","Lindsy","Lindy","Linea","Linell","Linet","Linette","Linn","Linnea","Linnell","Linnet","Linnie","Linzy","Lira","Lisa","Lisabeth","Lisbeth","Lise","Lisetta","Lisette","Lisha","Lishe","Lissa","Lissi","Lissie","Lissy","Lita","Liuka","Liv","Liva","Livia","Livvie","Livvy","Livvyy","Livy","Liz","Liza","Lizabeth","Lizbeth","Lizette","Lizzie","Lizzy","Loella","Lois","Loise","Lola","Loleta","Lolita","Lolly","Lona","Lonee","Loni","Lonna","Lonni","Lonnie","Lora","Lorain","Loraine","Loralee","Loralie","Loralyn","Loree","Loreen","Lorelei","Lorelle","Loren","Lorena","Lorene","Lorenza","Loretta","Lorette","Lori","Loria","Lorianna","Lorianne","Lorie","Lorilee","Lorilyn","Lorinda","Lorine","Lorita","Lorna","Lorne","Lorraine","Lorrayne","Lorri","Lorrie","Lorrin","Lorry","Lory","Lotta","Lotte","Lotti","Lottie","Lotty","Lou","Louella","Louisa","Louise","Louisette","Loutitia","Lu","Luce","Luci","Lucia","Luciana","Lucie","Lucienne","Lucila","Lucilia","Lucille","Lucina","Lucinda","Lucine","Lucita","Lucky","Lucretia","Lucy","Ludovika","Luella","Luelle","Luisa","Luise","Lula","Lulita","Lulu","Lura","Lurette","Lurleen","Lurlene","Lurline","Lusa","Luz","Lyda","Lydia","Lydie","Lyn","Lynda","Lynde","Lyndel","Lyndell","Lyndsay","Lyndsey","Lyndsie","Lyndy","Lynea","Lynelle","Lynett","Lynette","Lynn","Lynna","Lynne","Lynnea","Lynnell","Lynnelle","Lynnet","Lynnett","Lynnette","Lynsey","Lyssa","Mab","Mabel","Mabelle","Mable","Mada","Madalena","Madalyn","Maddalena","Maddi","Maddie","Maddy","Madel","Madelaine","Madeleine","Madelena","Madelene","Madelin","Madelina","Madeline","Madella","Madelle","Madelon","Madelyn","Madge","Madlen","Madlin","Madonna","Mady","Mae","Maegan","Mag","Magda","Magdaia","Magdalen","Magdalena","Magdalene","Maggee","Maggi","Maggie","Maggy","Mahala","Mahalia","Maia","Maible","Maiga","Maighdiln","Mair","Maire","Maisey","Maisie","Maitilde","Mala","Malanie","Malena","Malia","Malina","Malinda","Malinde","Malissa","Malissia","Mallissa","Mallorie","Mallory","Malorie","Malory","Malva","Malvina","Malynda","Mame","Mamie","Manda","Mandi","Mandie","Mandy","Manon","Manya","Mara","Marabel","Marcela","Marcelia","Marcella","Marcelle","Marcellina","Marcelline","Marchelle","Marci","Marcia","Marcie","Marcile","Marcille","Marcy","Mareah","Maren","Marena","Maressa","Marga","Margalit","Margalo","Margaret","Margareta","Margarete","Margaretha","Margarethe","Margaretta","Margarette","Margarita","Margaux","Marge","Margeaux","Margery","Marget","Margette","Margi","Margie","Margit","Margo","Margot","Margret","Marguerite","Margy","Mari","Maria","Mariam","Marian","Mariana","Mariann","Marianna","Marianne","Maribel","Maribelle","Maribeth","Marice","Maridel","Marie","Marie-ann","Marie-jeanne","Marieann","Mariejeanne","Mariel","Mariele","Marielle","Mariellen","Marietta","Mariette","Marigold","Marijo","Marika","Marilee","Marilin","Marillin","Marilyn","Marin","Marina","Marinna","Marion","Mariquilla","Maris","Marisa","Mariska","Marissa","Marita","Maritsa","Mariya","Marj","Marja","Marje","Marji","Marjie","Marjorie","Marjory","Marjy","Marketa","Marla","Marlane","Marleah","Marlee","Marleen","Marlena","Marlene","Marley","Marlie","Marline","Marlo","Marlyn","Marna","Marne","Marney","Marni","Marnia","Marnie","Marquita","Marrilee","Marris","Marrissa","Marsha","Marsiella","Marta","Martelle","Martguerita","Martha","Marthe","Marthena","Marti","Martica","Martie","Martina","Martita","Marty","Martynne","Mary","Marya","Maryann","Maryanna","Maryanne","Marybelle","Marybeth","Maryellen","Maryjane","Maryjo","Maryl","Marylee","Marylin","Marylinda","Marylou","Marylynne","Maryrose","Marys","Marysa","Masha","Matelda","Mathilda","Mathilde","Matilda","Matilde","Matti","Mattie","Matty","Maud","Maude","Maudie","Maura","Maure","Maureen","Maureene","Maurene","Maurine","Maurise","Maurita","Maurizia","Mavis","Mavra","Max","Maxi","Maxie","Maxine","Maxy","May","Maybelle","Maye","Mead","Meade","Meagan","Meaghan","Meara","Mechelle","Meg","Megan","Megen","Meggi","Meggie","Meggy","Meghan","Meghann","Mehetabel","Mei","Mel","Mela","Melamie","Melania","Melanie","Melantha","Melany","Melba","Melesa","Melessa","Melicent","Melina","Melinda","Melinde","Melisa","Melisande","Melisandra","Melisenda","Melisent","Melissa","Melisse","Melita","Melitta","Mella","Melli","Mellicent","Mellie","Mellisa","Mellisent","Melloney","Melly","Melodee","Melodie","Melody","Melonie","Melony","Melosa","Melva","Mercedes","Merci","Mercie","Mercy","Meredith","Meredithe","Meridel","Meridith","Meriel","Merilee","Merilyn","Meris","Merissa","Merl","Merla","Merle","Merlina","Merline","Merna","Merola","Merralee","Merridie","Merrie","Merrielle","Merrile","Merrilee","Merrili","Merrill","Merrily","Merry","Mersey","Meryl","Meta","Mia","Micaela","Michaela","Michaelina","Michaeline","Michaella","Michal","Michel","Michele","Michelina","Micheline","Michell","Michelle","Micki","Mickie","Micky","Midge","Mignon","Mignonne","Miguela","Miguelita","Mikaela","Mil","Mildred","Mildrid","Milena","Milicent","Milissent","Milka","Milli","Millicent","Millie","Millisent","Milly","Milzie","Mimi","Min","Mina","Minda","Mindy","Minerva","Minetta","Minette","Minna","Minnaminnie","Minne","Minni","Minnie","Minnnie","Minny","Minta","Miquela","Mira","Mirabel","Mirabella","Mirabelle","Miran","Miranda","Mireielle","Mireille","Mirella","Mirelle","Miriam","Mirilla","Mirna","Misha","Missie","Missy","Misti","Misty","Mitzi","Modesta","Modestia","Modestine","Modesty","Moina","Moira","Moll","Mollee","Molli","Mollie","Molly","Mommy","Mona","Monah","Monica","Monika","Monique","Mora","Moreen","Morena","Morgan","Morgana","Morganica","Morganne","Morgen","Moria","Morissa","Morna","Moselle","Moyna","Moyra","Mozelle","Muffin","Mufi","Mufinella","Muire","Mureil","Murial","Muriel","Murielle","Myra","Myrah","Myranda","Myriam","Myrilla","Myrle","Myrlene","Myrna","Myrta","Myrtia","Myrtice","Myrtie","Myrtle","Nada","Nadean","Nadeen","Nadia","Nadine","Nadiya","Nady","Nadya","Nalani","Nan","Nana","Nananne","Nance","Nancee","Nancey","Nanci","Nancie","Nancy","Nanete","Nanette","Nani","Nanice","Nanine","Nannette","Nanni","Nannie","Nanny","Nanon","Naoma","Naomi","Nara","Nari","Nariko","Nat","Nata","Natala","Natalee","Natalie","Natalina","Nataline","Natalya","Natasha","Natassia","Nathalia","Nathalie","Natividad","Natka","Natty","Neala","Neda","Nedda","Nedi","Neely","Neila","Neile","Neilla","Neille","Nelia","Nelie","Nell","Nelle","Nelli","Nellie","Nelly","Nerissa","Nerita","Nert","Nerta","Nerte","Nerti","Nertie","Nerty","Nessa","Nessi","Nessie","Nessy","Nesta","Netta","Netti","Nettie","Nettle","Netty","Nevsa","Neysa","Nichol","Nichole","Nicholle","Nicki","Nickie","Nicky","Nicol","Nicola","Nicole","Nicolea","Nicolette","Nicoli","Nicolina","Nicoline","Nicolle","Nikaniki","Nike","Niki","Nikki","Nikkie","Nikoletta","Nikolia","Nina","Ninetta","Ninette","Ninnetta","Ninnette","Ninon","Nissa","Nisse","Nissie","Nissy","Nita","Nixie","Noami","Noel","Noelani","Noell","Noella","Noelle","Noellyn","Noelyn","Noemi","Nola","Nolana","Nolie","Nollie","Nomi","Nona","Nonah","Noni","Nonie","Nonna","Nonnah","Nora","Norah","Norean","Noreen","Norene","Norina","Norine","Norma","Norri","Norrie","Norry","Novelia","Nydia","Nyssa","Octavia","Odele","Odelia","Odelinda","Odella","Odelle","Odessa","Odetta","Odette","Odilia","Odille","Ofelia","Ofella","Ofilia","Ola","Olenka","Olga","Olia","Olimpia","Olive","Olivette","Olivia","Olivie","Oliy","Ollie","Olly","Olva","Olwen","Olympe","Olympia","Olympie","Ondrea","Oneida","Onida","Oona","Opal","Opalina","Opaline","Ophelia","Ophelie","Ora","Oralee","Oralia","Oralie","Oralla","Oralle","Orel","Orelee","Orelia","Orelie","Orella","Orelle","Oriana","Orly","Orsa","Orsola","Ortensia","Otha","Othelia","Othella","Othilia","Othilie","Ottilie","Page","Paige","Paloma","Pam","Pamela","Pamelina","Pamella","Pammi","Pammie","Pammy","Pandora","Pansie","Pansy","Paola","Paolina","Papagena","Pat","Patience","Patrica","Patrice","Patricia","Patrizia","Patsy","Patti","Pattie","Patty","Paula","Paule","Pauletta","Paulette","Pauli","Paulie","Paulina","Pauline","Paulita","Pauly","Pavia","Pavla","Pearl","Pearla","Pearle","Pearline","Peg","Pegeen","Peggi","Peggie","Peggy","Pen","Penelopa","Penelope","Penni","Pennie","Penny","Pepi","Pepita","Peri","Peria","Perl","Perla","Perle","Perri","Perrine","Perry","Persis","Pet","Peta","Petra","Petrina","Petronella","Petronia","Petronilla","Petronille","Petunia","Phaedra","Phaidra","Phebe","Phedra","Phelia","Phil","Philipa","Philippa","Philippe","Philippine","Philis","Phillida","Phillie","Phillis","Philly","Philomena","Phoebe","Phylis","Phyllida","Phyllis","Phyllys","Phylys","Pia","Pier","Pierette","Pierrette","Pietra","Piper","Pippa","Pippy","Polly","Pollyanna","Pooh","Poppy","Portia","Pris","Prisca","Priscella","Priscilla","Prissie","Pru","Prudence","Prudi","Prudy","Prue","Queenie","Quentin","Querida","Quinn","Quinta","Quintana","Quintilla","Quintina","Rachael","Rachel","Rachele","Rachelle","Rae","Raeann","Raf","Rafa","Rafaela","Rafaelia","Rafaelita","Rahal","Rahel","Raina","Raine","Rakel","Ralina","Ramona","Ramonda","Rana","Randa","Randee","Randene","Randi","Randie","Randy","Ranee","Rani","Rania","Ranice","Ranique","Ranna","Raphaela","Raquel","Raquela","Rasia","Rasla","Raven","Ray","Raychel","Raye","Rayna","Raynell","Rayshell","Rea","Reba","Rebbecca","Rebe","Rebeca","Rebecca","Rebecka","Rebeka","Rebekah","Rebekkah","Ree","Reeba","Reena","Reeta","Reeva","Regan","Reggi","Reggie","Regina","Regine","Reiko","Reina","Reine","Remy","Rena","Renae","Renata","Renate","Rene","Renee","Renell","Renelle","Renie","Rennie","Reta","Retha","Revkah","Rey","Reyna","Rhea","Rheba","Rheta","Rhetta","Rhiamon","Rhianna","Rhianon","Rhoda","Rhodia","Rhodie","Rhody","Rhona","Rhonda","Riane","Riannon","Rianon","Rica","Ricca","Rici","Ricki","Rickie","Ricky","Riki","Rikki","Rina","Risa","Rita","Riva","Rivalee","Rivi","Rivkah","Rivy","Roana","Roanna","Roanne","Robbi","Robbie","Robbin","Robby","Robbyn","Robena","Robenia","Roberta","Robin","Robina","Robinet","Robinett","Robinetta","Robinette","Robinia","Roby","Robyn","Roch","Rochell","Rochella","Rochelle","Rochette","Roda","Rodi","Rodie","Rodina","Rois","Romola","Romona","Romonda","Romy","Rona","Ronalda","Ronda","Ronica","Ronna","Ronni","Ronnica","Ronnie","Ronny","Roobbie","Rora","Rori","Rorie","Rory","Ros","Rosa","Rosabel","Rosabella","Rosabelle","Rosaleen","Rosalia","Rosalie","Rosalind","Rosalinda","Rosalinde","Rosaline","Rosalyn","Rosalynd","Rosamond","Rosamund","Rosana","Rosanna","Rosanne","Rose","Roseann","Roseanna","Roseanne","Roselia","Roselin","Roseline","Rosella","Roselle","Rosemaria","Rosemarie","Rosemary","Rosemonde","Rosene","Rosetta","Rosette","Roshelle","Rosie","Rosina","Rosita","Roslyn","Rosmunda","Rosy","Row","Rowe","Rowena","Roxana","Roxane","Roxanna","Roxanne","Roxi","Roxie","Roxine","Roxy","Roz","Rozalie","Rozalin","Rozamond","Rozanna","Rozanne","Roze","Rozele","Rozella","Rozelle","Rozina","Rubetta","Rubi","Rubia","Rubie","Rubina","Ruby","Ruperta","Ruth","Ruthann","Ruthanne","Ruthe","Ruthi","Ruthie","Ruthy","Ryann","Rycca","Saba","Sabina","Sabine","Sabra","Sabrina","Sacha","Sada","Sadella","Sadie","Sadye","Saidee","Sal","Salaidh","Sallee","Salli","Sallie","Sally","Sallyann","Sallyanne","Saloma","Salome","Salomi","Sam","Samantha","Samara","Samaria","Sammy","Sande","Sandi","Sandie","Sandra","Sandy","Sandye","Sapphira","Sapphire","Sara","Sara-ann","Saraann","Sarah","Sarajane","Saree","Sarena","Sarene","Sarette","Sari","Sarina","Sarine","Sarita","Sascha","Sasha","Sashenka","Saudra","Saundra","Savina","Sayre","Scarlet","Scarlett","Sean","Seana","Seka","Sela","Selena","Selene","Selestina","Selia","Selie","Selina","Selinda","Seline","Sella","Selle","Selma","Sena","Sephira","Serena","Serene","Shae","Shaina","Shaine","Shalna","Shalne","Shana","Shanda","Shandee","Shandeigh","Shandie","Shandra","Shandy","Shane","Shani","Shanie","Shanna","Shannah","Shannen","Shannon","Shanon","Shanta","Shantee","Shara","Sharai","Shari","Sharia","Sharity","Sharl","Sharla","Sharleen","Sharlene","Sharline","Sharon","Sharona","Sharron","Sharyl","Shaun","Shauna","Shawn","Shawna","Shawnee","Shay","Shayla","Shaylah","Shaylyn","Shaylynn","Shayna","Shayne","Shea","Sheba","Sheela","Sheelagh","Sheelah","Sheena","Sheeree","Sheila","Sheila-kathryn","Sheilah","Shel","Shela","Shelagh","Shelba","Shelbi","Shelby","Shelia","Shell","Shelley","Shelli","Shellie","Shelly","Shena","Sher","Sheree","Sheri","Sherie","Sherill","Sherilyn","Sherline","Sherri","Sherrie","Sherry","Sherye","Sheryl","Shina","Shir","Shirl","Shirlee","Shirleen","Shirlene","Shirley","Shirline","Shoshana","Shoshanna","Siana","Sianna","Sib","Sibbie","Sibby","Sibeal","Sibel","Sibella","Sibelle","Sibilla","Sibley","Sibyl","Sibylla","Sibylle","Sidoney","Sidonia","Sidonnie","Sigrid","Sile","Sileas","Silva","Silvana","Silvia","Silvie","Simona","Simone","Simonette","Simonne","Sindee","Siobhan","Sioux","Siouxie","Sisely","Sisile","Sissie","Sissy","Siusan","Sofia","Sofie","Sondra","Sonia","Sonja","Sonni","Sonnie","Sonnnie","Sonny","Sonya","Sophey","Sophi","Sophia","Sophie","Sophronia","Sorcha","Sosanna","Stace","Stacee","Stacey","Staci","Stacia","Stacie","Stacy","Stafani","Star","Starla","Starlene","Starlin","Starr","Stefa","Stefania","Stefanie","Steffane","Steffi","Steffie","Stella","Stepha","Stephana","Stephani","Stephanie","Stephannie","Stephenie","Stephi","Stephie","Stephine","Stesha","Stevana","Stevena","Stoddard","Storm","Stormi","Stormie","Stormy","Sue","Suellen","Sukey","Suki","Sula","Sunny","Sunshine","Susan","Susana","Susanetta","Susann","Susanna","Susannah","Susanne","Susette","Susi","Susie","Susy","Suzann","Suzanna","Suzanne","Suzette","Suzi","Suzie","Suzy","Sybil","Sybila","Sybilla","Sybille","Sybyl","Sydel","Sydelle","Sydney","Sylvia","Tabatha","Tabbatha","Tabbi","Tabbie","Tabbitha","Tabby","Tabina","Tabitha","Taffy","Talia","Tallia","Tallie","Tallou","Tallulah","Tally","Talya","Talyah","Tamar","Tamara","Tamarah","Tamarra","Tamera","Tami","Tamiko","Tamma","Tammara","Tammi","Tammie","Tammy","Tamqrah","Tamra","Tana","Tandi","Tandie","Tandy","Tanhya","Tani","Tania","Tanitansy","Tansy","Tanya","Tara","Tarah","Tarra","Tarrah","Taryn","Tasha","Tasia","Tate","Tatiana","Tatiania","Tatum","Tawnya","Tawsha","Ted","Tedda","Teddi","Teddie","Teddy","Tedi","Tedra","Teena","Teirtza","Teodora","Tera","Teresa","Terese","Teresina","Teresita","Teressa","Teri","Teriann","Terra","Terri","Terrie","Terrijo","Terry","Terrye","Tersina","Terza","Tess","Tessa","Tessi","Tessie","Tessy","Thalia","Thea","Theadora","Theda","Thekla","Thelma","Theo","Theodora","Theodosia","Theresa","Therese","Theresina","Theresita","Theressa","Therine","Thia","Thomasa","Thomasin","Thomasina","Thomasine","Tiena","Tierney","Tiertza","Tiff","Tiffani","Tiffanie","Tiffany","Tiffi","Tiffie","Tiffy","Tilda","Tildi","Tildie","Tildy","Tillie","Tilly","Tim","Timi","Timmi","Timmie","Timmy","Timothea","Tina","Tine","Tiphani","Tiphanie","Tiphany","Tish","Tisha","Tobe","Tobey","Tobi","Toby","Tobye","Toinette","Toma","Tomasina","Tomasine","Tomi","Tommi","Tommie","Tommy","Toni","Tonia","Tonie","Tony","Tonya","Tonye","Tootsie","Torey","Tori","Torie","Torrie","Tory","Tova","Tove","Tracee","Tracey","Traci","Tracie","Tracy","Trenna","Tresa","Trescha","Tressa","Tricia","Trina","Trish","Trisha","Trista","Trix","Trixi","Trixie","Trixy","Truda","Trude","Trudey","Trudi","Trudie","Trudy","Trula","Tuesday","Twila","Twyla","Tybi","Tybie","Tyne","Ula","Ulla","Ulrica","Ulrika","Ulrikaumeko","Ulrike","Umeko","Una","Ursa","Ursala","Ursola","Ursula","Ursulina","Ursuline","Uta","Val","Valaree","Valaria","Vale","Valeda","Valencia","Valene","Valenka","Valentia","Valentina","Valentine","Valera","Valeria","Valerie","Valery","Valerye","Valida","Valina","Valli","Vallie","Vally","Valma","Valry","Van","Vanda","Vanessa","Vania","Vanna","Vanni","Vannie","Vanny","Vanya","Veda","Velma","Velvet","Venita","Venus","Vera","Veradis","Vere","Verena","Verene","Veriee","Verile","Verina","Verine","Verla","Verna","Vernice","Veronica","Veronika","Veronike","Veronique","Vevay","Vi","Vicki","Vickie","Vicky","Victoria","Vida","Viki","Vikki","Vikky","Vilhelmina","Vilma","Vin","Vina","Vinita","Vinni","Vinnie","Vinny","Viola","Violante","Viole","Violet","Violetta","Violette","Virgie","Virgina","Virginia","Virginie","Vita","Vitia","Vitoria","Vittoria","Viv","Viva","Vivi","Vivia","Vivian","Viviana","Vivianna","Vivianne","Vivie","Vivien","Viviene","Vivienne","Viviyan","Vivyan","Vivyanne","Vonni","Vonnie","Vonny","Vyky","Wallie","Wallis","Walliw","Wally","Waly","Wanda","Wandie","Wandis","Waneta","Wanids","Wenda","Wendeline","Wendi","Wendie","Wendy","Wendye","Wenona","Wenonah","Whitney","Wileen","Wilhelmina","Wilhelmine","Wilie","Willa","Willabella","Willamina","Willetta","Willette","Willi","Willie","Willow","Willy","Willyt","Wilma","Wilmette","Wilona","Wilone","Wilow","Windy","Wini","Winifred","Winna","Winnah","Winne","Winni","Winnie","Winnifred","Winny","Winona","Winonah","Wren","Wrennie","Wylma","Wynn","Wynne","Wynnie","Wynny","Xaviera","Xena","Xenia","Xylia","Xylina","Yalonda","Yasmeen","Yasmin","Yelena","Yetta","Yettie","Yetty","Yevette","Ynes","Ynez","Yoko","Yolanda","Yolande","Yolane","Yolanthe","Yoshi","Yoshiko","Yovonnda","Ysabel","Yvette","Yvonne","Zabrina","Zahara","Zandra","Zaneta","Zara","Zarah","Zaria","Zarla","Zea","Zelda","Zelma","Zena","Zenia","Zia","Zilvia","Zita","Zitella","Zoe","Zola","Zonda","Zondra","Zonnya","Zora","Zorah","Zorana","Zorina","Zorine","Zsazsa","Zulema","Zuzana"],d=["Ackbar","Adi Gallia","Anakin Skywalker","Arvel Crynyd","Ayla Secura","Bail Prestor Organa","Barriss Offee","Ben Quadinaros","Beru Whitesun lars","Bib Fortuna","Biggs Darklighter","Boba Fett","Bossk","C-3PO","Chewbacca","Cliegg Lars","Cordé","Darth Maul","Darth Vader","Dexter Jettster","Dooku","Dormé","Dud Bolt","Eeth Koth","Finis Valorum","Gasgano","Greedo","Gregar Typho","Grievous","Han Solo","IG-88","Jabba Desilijic Tiure","Jango Fett","Jar Jar Binks","Jek Tono Porkins","Jocasta Nu","Ki-Adi-Mundi","Kit Fisto","Lama Su","Lando Calrissian","Leia Organa","Lobot","Luke Skywalker","Luminara Unduli","Mace Windu","Mas Amedda","Mon Mothma","Nien Nunb","Nute Gunray","Obi-Wan Kenobi","Owen Lars","Padmé Amidala","Palpatine","Plo Koon","Poggle the Lesser","Quarsh Panaka","Qui-Gon Jinn","R2-D2","R4-P17","R5-D4","Ratts Tyerel","Raymus Antilles","Ric Olié","Roos Tarpals","Rugor Nass","Saesee Tiin","San Hill","Sebulba","Shaak Ti","Shmi Skywalker","Sly Moore","Tarfful","Taun We","Tion Medon","Wat Tambor","Watto","Wedge Antilles","Wicket Systri Warrick","Wilhuff Tarkin","Yarael Poof","Yoda","Zam Wesell"];class y{static generate(a={}){let e=a.min||1,i=a.max||999;if(a.length){const n=Math.pow(10,a.length);return e=n/10,i=n-1,[`${Math.floor(Math.random()*(i-e))+e}`]}return[`${Math.floor(Math.random()*(i-e))+e}`]}}export{y as NumberDictionary,n as adjectives,l as animals,r as colors,t as countries,o as languages,s as names,d as starWars,i as uniqueNamesGenerator}; -//# sourceMappingURL=index.m.js.map diff --git a/tests/iac_integration/cdk/testdata/src/nodejs/NodeJsFunctionConstruct/node_modules/unique-names-generator/dist/index.modern.js b/tests/iac_integration/cdk/testdata/src/nodejs/NodeJsFunctionConstruct/node_modules/unique-names-generator/dist/index.modern.js deleted file mode 100644 index f10585b0c8..0000000000 --- a/tests/iac_integration/cdk/testdata/src/nodejs/NodeJsFunctionConstruct/node_modules/unique-names-generator/dist/index.modern.js +++ /dev/null @@ -1,2 +0,0 @@ -function a(){return(a=Object.assign||function(a){for(var e=1;ethis.dictionaries.length)throw new Error(`The length cannot be bigger than the number of dictionaries.\nLength provided: ${this.length}. Number of dictionaries provided: ${this.dictionaries.length}`);return this.dictionaries.slice(0,this.length).reduce((a,e)=>{let i=e[Math.floor((this.seed?(n=this.seed,(a=>{a=1831565813+(a|=0)|0;let e=Math.imul(a^a>>>15,1|a);return e=e+Math.imul(e^e>>>7,61|e)^e,((e^e>>>14)>>>0)/4294967296})(n)):Math.random())*e.length)]||"";var n;if("lowerCase"===this.style)i=i.toLowerCase();else if("capital"===this.style){const[a,...e]=i.split("");i=a.toUpperCase()+e.join("")}else"upperCase"===this.style&&(i=i.toUpperCase());return a?`${a}${this.separator}${i}`:`${i}`},"")}}const i={separator:"_",dictionaries:[]},n=n=>{const l=[...n&&n.dictionaries||i.dictionaries],r=a({},i,n,{length:n&&n.length||l.length,dictionaries:l});if(!n||!n.dictionaries||!n.dictionaries.length)throw new Error('A "dictionaries" array must be provided. This is a breaking change introduced starting from Unique Name Generator v4. Read more about the breaking change here: https://github.com/andreasonny83/unique-names-generator#migration-guide');return new e(r).generate()};var l=["able","above","absent","absolute","abstract","abundant","academic","acceptable","accepted","accessible","accurate","accused","active","actual","acute","added","additional","adequate","adjacent","administrative","adorable","advanced","adverse","advisory","aesthetic","afraid","aggregate","aggressive","agreeable","agreed","agricultural","alert","alive","alleged","allied","alone","alright","alternative","amateur","amazing","ambitious","amused","ancient","angry","annoyed","annual","anonymous","anxious","appalling","apparent","applicable","appropriate","arbitrary","architectural","armed","arrogant","artificial","artistic","ashamed","asleep","assistant","associated","atomic","attractive","automatic","autonomous","available","average","awake","aware","awful","awkward","back","bad","balanced","bare","basic","beautiful","beneficial","better","bewildered","big","binding","biological","bitter","bizarre","blank","blind","blonde","bloody","blushing","boiling","bold","bored","boring","bottom","brainy","brave","breakable","breezy","brief","bright","brilliant","broad","broken","bumpy","burning","busy","calm","capable","capitalist","careful","casual","causal","cautious","central","certain","changing","characteristic","charming","cheap","cheerful","chemical","chief","chilly","chosen","christian","chronic","chubby","circular","civic","civil","civilian","classic","classical","clean","clear","clever","clinical","close","closed","cloudy","clumsy","coastal","cognitive","coherent","cold","collective","colonial","colorful","colossal","coloured","colourful","combative","combined","comfortable","coming","commercial","common","communist","compact","comparable","comparative","compatible","competent","competitive","complete","complex","complicated","comprehensive","compulsory","conceptual","concerned","concrete","condemned","confident","confidential","confused","conscious","conservation","conservative","considerable","consistent","constant","constitutional","contemporary","content","continental","continued","continuing","continuous","controlled","controversial","convenient","conventional","convinced","convincing","cooing","cool","cooperative","corporate","correct","corresponding","costly","courageous","crazy","creative","creepy","criminal","critical","crooked","crowded","crucial","crude","cruel","cuddly","cultural","curious","curly","current","curved","cute","daily","damaged","damp","dangerous","dark","dead","deaf","deafening","dear","decent","decisive","deep","defeated","defensive","defiant","definite","deliberate","delicate","delicious","delighted","delightful","democratic","dependent","depressed","desirable","desperate","detailed","determined","developed","developing","devoted","different","difficult","digital","diplomatic","direct","dirty","disabled","disappointed","disastrous","disciplinary","disgusted","distant","distinct","distinctive","distinguished","disturbed","disturbing","diverse","divine","dizzy","domestic","dominant","double","doubtful","drab","dramatic","dreadful","driving","drunk","dry","dual","due","dull","dusty","dutch","dying","dynamic","eager","early","eastern","easy","economic","educational","eerie","effective","efficient","elaborate","elated","elderly","eldest","electoral","electric","electrical","electronic","elegant","eligible","embarrassed","embarrassing","emotional","empirical","empty","enchanting","encouraging","endless","energetic","enormous","enthusiastic","entire","entitled","envious","environmental","equal","equivalent","essential","established","estimated","ethical","ethnic","eventual","everyday","evident","evil","evolutionary","exact","excellent","exceptional","excess","excessive","excited","exciting","exclusive","existing","exotic","expected","expensive","experienced","experimental","explicit","extended","extensive","external","extra","extraordinary","extreme","exuberant","faint","fair","faithful","familiar","famous","fancy","fantastic","far","fascinating","fashionable","fast","fat","fatal","favourable","favourite","federal","fellow","female","feminist","few","fierce","filthy","final","financial","fine","firm","fiscal","fit","fixed","flaky","flat","flexible","fluffy","fluttering","flying","following","fond","foolish","foreign","formal","formidable","forthcoming","fortunate","forward","fragile","frail","frantic","free","frequent","fresh","friendly","frightened","front","frozen","full","fun","functional","fundamental","funny","furious","future","fuzzy","gastric","gay","general","generous","genetic","gentle","genuine","geographical","giant","gigantic","given","glad","glamorous","gleaming","global","glorious","golden","good","gorgeous","gothic","governing","graceful","gradual","grand","grateful","greasy","great","grieving","grim","gross","grotesque","growing","grubby","grumpy","guilty","handicapped","handsome","happy","hard","harsh","head","healthy","heavy","helpful","helpless","hidden","high","hilarious","hissing","historic","historical","hollow","holy","homeless","homely","hon","honest","horizontal","horrible","hostile","hot","huge","human","hungry","hurt","hushed","husky","icy","ideal","identical","ideological","ill","illegal","imaginative","immediate","immense","imperial","implicit","important","impossible","impressed","impressive","improved","inadequate","inappropriate","inc","inclined","increased","increasing","incredible","independent","indirect","individual","industrial","inevitable","influential","informal","inherent","initial","injured","inland","inner","innocent","innovative","inquisitive","instant","institutional","insufficient","intact","integral","integrated","intellectual","intelligent","intense","intensive","interested","interesting","interim","interior","intermediate","internal","international","intimate","invisible","involved","irrelevant","isolated","itchy","jealous","jittery","joint","jolly","joyous","judicial","juicy","junior","just","keen","key","kind","known","labour","large","late","latin","lazy","leading","left","legal","legislative","legitimate","lengthy","lesser","level","lexical","liable","liberal","light","like","likely","limited","linear","linguistic","liquid","literary","little","live","lively","living","local","logical","lonely","long","loose","lost","loud","lovely","low","loyal","ltd","lucky","mad","magic","magnetic","magnificent","main","major","male","mammoth","managerial","managing","manual","many","marginal","marine","marked","married","marvellous","marxist","mass","massive","mathematical","mature","maximum","mean","meaningful","mechanical","medical","medieval","melodic","melted","mental","mere","metropolitan","mid","middle","mighty","mild","military","miniature","minimal","minimum","ministerial","minor","miserable","misleading","missing","misty","mixed","moaning","mobile","moderate","modern","modest","molecular","monetary","monthly","moral","motionless","muddy","multiple","mushy","musical","mute","mutual","mysterious","naked","narrow","nasty","national","native","natural","naughty","naval","near","nearby","neat","necessary","negative","neighbouring","nervous","net","neutral","new","nice","noble","noisy","normal","northern","nosy","notable","novel","nuclear","numerous","nursing","nutritious","nutty","obedient","objective","obliged","obnoxious","obvious","occasional","occupational","odd","official","ok","okay","old","olympic","only","open","operational","opposite","optimistic","oral","ordinary","organic","organisational","original","orthodox","other","outdoor","outer","outrageous","outside","outstanding","overall","overseas","overwhelming","painful","pale","panicky","parallel","parental","parliamentary","partial","particular","passing","passive","past","patient","payable","peaceful","peculiar","perfect","permanent","persistent","personal","petite","philosophical","physical","plain","planned","plastic","pleasant","pleased","poised","polite","political","poor","popular","positive","possible","potential","powerful","practical","precious","precise","preferred","pregnant","preliminary","premier","prepared","present","presidential","pretty","previous","prickly","primary","prime","primitive","principal","printed","prior","private","probable","productive","professional","profitable","profound","progressive","prominent","promising","proper","proposed","prospective","protective","protestant","proud","provincial","psychiatric","psychological","public","puny","pure","purring","puzzled","quaint","qualified","quarrelsome","querulous","quick","quickest","quiet","quintessential","quixotic","racial","radical","rainy","random","rapid","rare","raspy","rational","ratty","raw","ready","real","realistic","rear","reasonable","recent","reduced","redundant","regional","registered","regular","regulatory","related","relative","relaxed","relevant","reliable","relieved","religious","reluctant","remaining","remarkable","remote","renewed","representative","repulsive","required","resident","residential","resonant","respectable","respective","responsible","resulting","retail","retired","revolutionary","rich","ridiculous","right","rigid","ripe","rising","rival","roasted","robust","rolling","romantic","rotten","rough","round","royal","rubber","rude","ruling","running","rural","sacred","sad","safe","salty","satisfactory","satisfied","scared","scary","scattered","scientific","scornful","scrawny","screeching","secondary","secret","secure","select","selected","selective","selfish","semantic","senior","sensible","sensitive","separate","serious","severe","sexual","shaggy","shaky","shallow","shared","sharp","sheer","shiny","shivering","shocked","short","shrill","shy","sick","significant","silent","silky","silly","similar","simple","single","skilled","skinny","sleepy","slight","slim","slimy","slippery","slow","small","smart","smiling","smoggy","smooth","social","socialist","soft","solar","sole","solid","sophisticated","sore","sorry","sound","sour","southern","soviet","spare","sparkling","spatial","special","specific","specified","spectacular","spicy","spiritual","splendid","spontaneous","sporting","spotless","spotty","square","squealing","stable","stale","standard","static","statistical","statutory","steady","steep","sticky","stiff","still","stingy","stormy","straight","straightforward","strange","strategic","strict","striking","striped","strong","structural","stuck","stupid","subjective","subsequent","substantial","subtle","successful","successive","sudden","sufficient","suitable","sunny","super","superb","superior","supporting","supposed","supreme","sure","surprised","surprising","surrounding","surviving","suspicious","sweet","swift","symbolic","sympathetic","systematic","tall","tame","tart","tasteless","tasty","technical","technological","teenage","temporary","tender","tense","terrible","territorial","testy","then","theoretical","thick","thin","thirsty","thorough","thoughtful","thoughtless","thundering","tight","tiny","tired","top","tory","total","tough","toxic","traditional","tragic","tremendous","tricky","tropical","troubled","typical","ugliest","ugly","ultimate","unable","unacceptable","unaware","uncertain","unchanged","uncomfortable","unconscious","underground","underlying","unemployed","uneven","unexpected","unfair","unfortunate","unhappy","uniform","uninterested","unique","united","universal","unknown","unlikely","unnecessary","unpleasant","unsightly","unusual","unwilling","upper","upset","uptight","urban","urgent","used","useful","useless","usual","vague","valid","valuable","variable","varied","various","varying","vast","verbal","vertical","very","vicarious","vicious","victorious","violent","visible","visiting","visual","vital","vitreous","vivacious","vivid","vocal","vocational","voiceless","voluminous","voluntary","vulnerable","wandering","warm","wasteful","watery","weak","wealthy","weary","wee","weekly","weird","welcome","well","western","wet","whispering","whole","wicked","wide","widespread","wild","wilful","willing","willowy","wily","wise","wispy","wittering","witty","wonderful","wooden","working","worldwide","worried","worrying","worthwhile","worthy","written","wrong","xenacious","xenial","xenogeneic","xenophobic","xeric","xerothermic","yabbering","yammering","yappiest","yappy","yawning","yearling","yearning","yeasty","yelling","yelping","yielding","yodelling","young","youngest","youthful","ytterbic","yucky","yummy","zany","zealous","zeroth","zestful","zesty","zippy","zonal","zoophagous","zygomorphic","zygotic"],r=["aardvark","aardwolf","albatross","alligator","alpaca","amphibian","anaconda","angelfish","anglerfish","ant","anteater","antelope","antlion","ape","aphid","armadillo","asp","baboon","badger","bandicoot","barnacle","barracuda","basilisk","bass","bat","bear","beaver","bedbug","bee","beetle","bird","bison","blackbird","boa","boar","bobcat","bobolink","bonobo","booby","bovid","bug","butterfly","buzzard","camel","canid","canidae","capybara","cardinal","caribou","carp","cat","caterpillar","catfish","catshark","cattle","centipede","cephalopod","chameleon","cheetah","chickadee","chicken","chimpanzee","chinchilla","chipmunk","cicada","clam","clownfish","cobra","cockroach","cod","condor","constrictor","coral","cougar","cow","coyote","crab","crane","crawdad","crayfish","cricket","crocodile","crow","cuckoo","damselfly","deer","dingo","dinosaur","dog","dolphin","donkey","dormouse","dove","dragon","dragonfly","duck","eagle","earthworm","earwig","echidna","eel","egret","elephant","elk","emu","ermine","falcon","felidae","ferret","finch","firefly","fish","flamingo","flea","fly","flyingfish","fowl","fox","frog","galliform","gamefowl","gayal","gazelle","gecko","gerbil","gibbon","giraffe","goat","goldfish","goose","gopher","gorilla","grasshopper","grouse","guan","guanaco","guineafowl","gull","guppy","haddock","halibut","hamster","hare","harrier","hawk","hedgehog","heron","herring","hippopotamus","hookworm","hornet","horse","hoverfly","hummingbird","hyena","iguana","impala","jackal","jaguar","jay","jellyfish","junglefowl","kangaroo","kingfisher","kite","kiwi","koala","koi","krill","ladybug","lamprey","landfowl","lark","leech","lemming","lemur","leopard","leopon","limpet","lion","lizard","llama","lobster","locust","loon","louse","lungfish","lynx","macaw","mackerel","magpie","mammal","manatee","mandrill","marlin","marmoset","marmot","marsupial","marten","mastodon","meadowlark","meerkat","mink","minnow","mite","mockingbird","mole","mollusk","mongoose","monkey","moose","mosquito","moth","mouse","mule","muskox","narwhal","newt","nightingale","ocelot","octopus","opossum","orangutan","orca","ostrich","otter","owl","ox","panda","panther","parakeet","parrot","parrotfish","partridge","peacock","peafowl","pelican","penguin","perch","pheasant","pig","pigeon","pike","pinniped","piranha","planarian","platypus","pony","porcupine","porpoise","possum","prawn","primate","ptarmigan","puffin","puma","python","quail","quelea","quokka","rabbit","raccoon","rat","rattlesnake","raven","reindeer","reptile","rhinoceros","roadrunner","rodent","rook","rooster","roundworm","sailfish","salamander","salmon","sawfish","scallop","scorpion","seahorse","shark","sheep","shrew","shrimp","silkworm","silverfish","skink","skunk","sloth","slug","smelt","snail","snake","snipe","sole","sparrow","spider","spoonbill","squid","squirrel","starfish","stingray","stoat","stork","sturgeon","swallow","swan","swift","swordfish","swordtail","tahr","takin","tapir","tarantula","tarsier","termite","tern","thrush","tick","tiger","tiglon","toad","tortoise","toucan","trout","tuna","turkey","turtle","tyrannosaurus","unicorn","urial","vicuna","viper","vole","vulture","wallaby","walrus","warbler","wasp","weasel","whale","whippet","whitefish","wildcat","wildebeest","wildfowl","wolf","wolverine","wombat","woodpecker","worm","wren","xerinae","yak","zebra"],t=["amaranth","amber","amethyst","apricot","aqua","aquamarine","azure","beige","black","blue","blush","bronze","brown","chocolate","coffee","copper","coral","crimson","cyan","emerald","fuchsia","gold","gray","green","harlequin","indigo","ivory","jade","lavender","lime","magenta","maroon","moccasin","olive","orange","peach","pink","plum","purple","red","rose","salmon","sapphire","scarlet","silver","tan","teal","tomato","turquoise","violet","white","yellow"],o=["Afghanistan","Åland Islands","Albania","Algeria","American Samoa","Andorra","Angola","Anguilla","Antarctica","Antigua & Barbuda","Argentina","Armenia","Aruba","Ascension Island","Australia","Austria","Azerbaijan","Bahamas","Bahrain","Bangladesh","Barbados","Belarus","Belgium","Belize","Benin","Bermuda","Bhutan","Bolivia","Bosnia & Herzegovina","Botswana","Brazil","British Indian Ocean Territory","British Virgin Islands","Brunei","Bulgaria","Burkina Faso","Burundi","Cambodia","Cameroon","Canada","Canary Islands","Cape Verde","Caribbean Netherlands","Cayman Islands","Central African Republic","Ceuta & Melilla","Chad","Chile","China","Christmas Island","Cocos Islands","Colombia","Comoros","Congo","Cook Islands","Costa Rica","Côte d'Ivoire","Croatia","Cuba","Curaçao","Cyprus","Czechia","Denmark","Diego Garcia","Djibouti","Dominica","Dominican Republic","Ecuador","Egypt","El Salvador","Equatorial Guinea","Eritrea","Estonia","Ethiopia","Eurozone","Falkland Islands","Faroe Islands","Fiji","Finland","France","French Guiana","French Polynesia","French Southern Territories","Gabon","Gambia","Georgia","Germany","Ghana","Gibraltar","Greece","Greenland","Grenada","Guadeloupe","Guam","Guatemala","Guernsey","Guinea","Guinea-Bissau","Guyana","Haiti","Honduras","Hong Kong SAR China","Hungary","Iceland","India","Indonesia","Iran","Iraq","Ireland","Isle of Man","Israel","Italy","Jamaica","Japan","Jersey","Jordan","Kazakhstan","Kenya","Kiribati","Kosovo","Kuwait","Kyrgyzstan","Laos","Latvia","Lebanon","Lesotho","Liberia","Libya","Liechtenstein","Lithuania","Luxembourg","Macau SAR China","Macedonia","Madagascar","Malawi","Malaysia","Maldives","Mali","Malta","Marshall Islands","Martinique","Mauritania","Mauritius","Mayotte","Mexico","Micronesia","Moldova","Monaco","Mongolia","Montenegro","Montserrat","Morocco","Mozambique","Myanmar","Namibia","Nauru","Nepal","Netherlands","New Caledonia","New Zealand","Nicaragua","Niger","Nigeria","Niue","Norfolk Island","North Korea","Northern Mariana Islands","Norway","Oman","Pakistan","Palau","Palestinian Territories","Panama","Papua New Guinea","Paraguay","Peru","Philippines","Pitcairn Islands","Poland","Portugal","Puerto Rico","Qatar","Réunion","Romania","Russia","Rwanda","Samoa","San Marino","São Tomé & Príncipe","Saudi Arabia","Senegal","Serbia","Seychelles","Sierra Leone","Singapore","Sint Maarten","Slovakia","Slovenia","Solomon Islands","Somalia","South Africa","South Georgia & South Sandwich Islands","South Korea","South Sudan","Spain","Sri Lanka","St. Barthélemy","St. Helena","St. Kitts & Nevis","St. Lucia","St. Martin","St. Pierre & Miquelon","St. Vincent & Grenadines","Sudan","Suriname","Svalbard & Jan Mayen","Swaziland","Sweden","Switzerland","Syria","Taiwan","Tajikistan","Tanzania","Thailand","Timor-Leste","Togo","Tokelau","Tonga","Trinidad & Tobago","Tristan da Cunha","Tunisia","Turkey","Turkmenistan","Turks & Caicos Islands","Tuvalu","U.S. Outlying Islands","U.S. Virgin Islands","Uganda","Ukraine","United Arab Emirates","United Kingdom","United Nations","United States","Uruguay","Uzbekistan","Vanuatu","Vatican City","Venezuela","Vietnam","Wallis & Futuna","Western Sahara","Yemen","Zambia","Zimbabwe"],s=["Akan","Amharic","Arabic","Assamese","Awadhi","Azerbaijani","Balochi","Belarusian","Bengali","Bhojpuri","Burmese","Cebuano","Chewa","Chhattisgarhi","Chittagonian","Czech","Deccan","Dhundhari","Dutch","English","French","Fula","Gan","German","Greek","Gujarati","Hakka","Haryanvi","Hausa","Hiligaynon","Hindi","Hmong","Hungarian","Igbo","Ilocano","Italian","Japanese","Javanese","Jin","Kannada","Kazakh","Khmer","Kinyarwanda","Kirundi","Konkani","Korean","Kurdish","Madurese","Magahi","Maithili","Malagasy","Malay","Malayalam","Mandarin","Marathi","Marwari","Min","Mossi","Nepali","Odia","Oromo","Pashto","Persian","Polish","Portuguese","Punjabi","Quechua","Romanian","Russian","Saraiki","Shona","Sindhi","Sinhala","Somali","Spanish","Sundanese","Swedish","Sylheti","Tagalog","Tamil","Telugu","Thai","Turkish","Turkmen","Ukrainian","Urdu","Uyghur","Uzbek","Vietnamese","Wu","Xhosa","Xiang","Yoruba","Yue","Zhuang","Zulu"],d=["Aaren","Aarika","Abagael","Abagail","Abbe","Abbey","Abbi","Abbie","Abby","Abbye","Abigael","Abigail","Abigale","Abra","Ada","Adah","Adaline","Adan","Adara","Adda","Addi","Addia","Addie","Addy","Adel","Adela","Adelaida","Adelaide","Adele","Adelheid","Adelice","Adelina","Adelind","Adeline","Adella","Adelle","Adena","Adey","Adi","Adiana","Adina","Adora","Adore","Adoree","Adorne","Adrea","Adria","Adriaens","Adrian","Adriana","Adriane","Adrianna","Adrianne","Adriena","Adrienne","Aeriel","Aeriela","Aeriell","Afton","Ag","Agace","Agata","Agatha","Agathe","Aggi","Aggie","Aggy","Agna","Agnella","Agnes","Agnese","Agnesse","Agneta","Agnola","Agretha","Aida","Aidan","Aigneis","Aila","Aile","Ailee","Aileen","Ailene","Ailey","Aili","Ailina","Ailis","Ailsun","Ailyn","Aime","Aimee","Aimil","Aindrea","Ainslee","Ainsley","Ainslie","Ajay","Alaine","Alameda","Alana","Alanah","Alane","Alanna","Alayne","Alberta","Albertina","Albertine","Albina","Alecia","Aleda","Aleece","Aleen","Alejandra","Alejandrina","Alena","Alene","Alessandra","Aleta","Alethea","Alex","Alexa","Alexandra","Alexandrina","Alexi","Alexia","Alexina","Alexine","Alexis","Alfi","Alfie","Alfreda","Alfy","Ali","Alia","Alica","Alice","Alicea","Alicia","Alida","Alidia","Alie","Alika","Alikee","Alina","Aline","Alis","Alisa","Alisha","Alison","Alissa","Alisun","Alix","Aliza","Alla","Alleen","Allegra","Allene","Alli","Allianora","Allie","Allina","Allis","Allison","Allissa","Allix","Allsun","Allx","Ally","Allyce","Allyn","Allys","Allyson","Alma","Almeda","Almeria","Almeta","Almira","Almire","Aloise","Aloisia","Aloysia","Alta","Althea","Alvera","Alverta","Alvina","Alvinia","Alvira","Alyce","Alyda","Alys","Alysa","Alyse","Alysia","Alyson","Alyss","Alyssa","Amabel","Amabelle","Amalea","Amalee","Amaleta","Amalia","Amalie","Amalita","Amalle","Amanda","Amandi","Amandie","Amandy","Amara","Amargo","Amata","Amber","Amberly","Ambur","Ame","Amelia","Amelie","Amelina","Ameline","Amelita","Ami","Amie","Amii","Amil","Amitie","Amity","Ammamaria","Amy","Amye","Ana","Anabal","Anabel","Anabella","Anabelle","Analiese","Analise","Anallese","Anallise","Anastasia","Anastasie","Anastassia","Anatola","Andee","Andeee","Anderea","Andi","Andie","Andra","Andrea","Andreana","Andree","Andrei","Andria","Andriana","Andriette","Andromache","Andy","Anestassia","Anet","Anett","Anetta","Anette","Ange","Angel","Angela","Angele","Angelia","Angelica","Angelika","Angelina","Angeline","Angelique","Angelita","Angelle","Angie","Angil","Angy","Ania","Anica","Anissa","Anita","Anitra","Anjanette","Anjela","Ann","Ann-marie","Anna","Anna-diana","Anna-diane","Anna-maria","Annabal","Annabel","Annabela","Annabell","Annabella","Annabelle","Annadiana","Annadiane","Annalee","Annaliese","Annalise","Annamaria","Annamarie","Anne","Anne-corinne","Anne-marie","Annecorinne","Anneliese","Annelise","Annemarie","Annetta","Annette","Anni","Annice","Annie","Annis","Annissa","Annmaria","Annmarie","Annnora","Annora","Anny","Anselma","Ansley","Anstice","Anthe","Anthea","Anthia","Anthiathia","Antoinette","Antonella","Antonetta","Antonia","Antonie","Antonietta","Antonina","Anya","Appolonia","April","Aprilette","Ara","Arabel","Arabela","Arabele","Arabella","Arabelle","Arda","Ardath","Ardeen","Ardelia","Ardelis","Ardella","Ardelle","Arden","Ardene","Ardenia","Ardine","Ardis","Ardisj","Ardith","Ardra","Ardyce","Ardys","Ardyth","Aretha","Ariadne","Ariana","Aridatha","Ariel","Ariela","Ariella","Arielle","Arlana","Arlee","Arleen","Arlen","Arlena","Arlene","Arleta","Arlette","Arleyne","Arlie","Arliene","Arlina","Arlinda","Arline","Arluene","Arly","Arlyn","Arlyne","Aryn","Ashely","Ashia","Ashien","Ashil","Ashla","Ashlan","Ashlee","Ashleigh","Ashlen","Ashley","Ashli","Ashlie","Ashly","Asia","Astra","Astrid","Astrix","Atalanta","Athena","Athene","Atlanta","Atlante","Auberta","Aubine","Aubree","Aubrette","Aubrey","Aubrie","Aubry","Audi","Audie","Audra","Audre","Audrey","Audrie","Audry","Audrye","Audy","Augusta","Auguste","Augustina","Augustine","Aundrea","Aura","Aurea","Aurel","Aurelea","Aurelia","Aurelie","Auria","Aurie","Aurilia","Aurlie","Auroora","Aurora","Aurore","Austin","Austina","Austine","Ava","Aveline","Averil","Averyl","Avie","Avis","Aviva","Avivah","Avril","Avrit","Ayn","Bab","Babara","Babb","Babbette","Babbie","Babette","Babita","Babs","Bambi","Bambie","Bamby","Barb","Barbabra","Barbara","Barbara-anne","Barbaraanne","Barbe","Barbee","Barbette","Barbey","Barbi","Barbie","Barbra","Barby","Bari","Barrie","Barry","Basia","Bathsheba","Batsheva","Bea","Beatrice","Beatrisa","Beatrix","Beatriz","Bebe","Becca","Becka","Becki","Beckie","Becky","Bee","Beilul","Beitris","Bekki","Bel","Belia","Belicia","Belinda","Belita","Bell","Bella","Bellanca","Belle","Bellina","Belva","Belvia","Bendite","Benedetta","Benedicta","Benedikta","Benetta","Benita","Benni","Bennie","Benny","Benoite","Berenice","Beret","Berget","Berna","Bernadene","Bernadette","Bernadina","Bernadine","Bernardina","Bernardine","Bernelle","Bernete","Bernetta","Bernette","Berni","Bernice","Bernie","Bernita","Berny","Berri","Berrie","Berry","Bert","Berta","Berte","Bertha","Berthe","Berti","Bertie","Bertina","Bertine","Berty","Beryl","Beryle","Bess","Bessie","Bessy","Beth","Bethanne","Bethany","Bethena","Bethina","Betsey","Betsy","Betta","Bette","Bette-ann","Betteann","Betteanne","Betti","Bettina","Bettine","Betty","Bettye","Beulah","Bev","Beverie","Beverlee","Beverley","Beverlie","Beverly","Bevvy","Bianca","Bianka","Bibbie","Bibby","Bibbye","Bibi","Biddie","Biddy","Bidget","Bili","Bill","Billi","Billie","Billy","Billye","Binni","Binnie","Binny","Bird","Birdie","Birgit","Birgitta","Blair","Blaire","Blake","Blakelee","Blakeley","Blanca","Blanch","Blancha","Blanche","Blinni","Blinnie","Blinny","Bliss","Blisse","Blithe","Blondell","Blondelle","Blondie","Blondy","Blythe","Bobbe","Bobbee","Bobbette","Bobbi","Bobbie","Bobby","Bobbye","Bobette","Bobina","Bobine","Bobinette","Bonita","Bonnee","Bonni","Bonnibelle","Bonnie","Bonny","Brana","Brandais","Brande","Brandea","Brandi","Brandice","Brandie","Brandise","Brandy","Breanne","Brear","Bree","Breena","Bren","Brena","Brenda","Brenn","Brenna","Brett","Bria","Briana","Brianna","Brianne","Bride","Bridget","Bridgette","Bridie","Brier","Brietta","Brigid","Brigida","Brigit","Brigitta","Brigitte","Brina","Briney","Brinn","Brinna","Briny","Brit","Brita","Britney","Britni","Britt","Britta","Brittan","Brittaney","Brittani","Brittany","Britte","Britteny","Brittne","Brittney","Brittni","Brook","Brooke","Brooks","Brunhilda","Brunhilde","Bryana","Bryn","Bryna","Brynn","Brynna","Brynne","Buffy","Bunni","Bunnie","Bunny","Cacilia","Cacilie","Cahra","Cairistiona","Caitlin","Caitrin","Cal","Calida","Calla","Calley","Calli","Callida","Callie","Cally","Calypso","Cam","Camala","Camel","Camella","Camellia","Cami","Camila","Camile","Camilla","Camille","Cammi","Cammie","Cammy","Candace","Candi","Candice","Candida","Candide","Candie","Candis","Candra","Candy","Caprice","Cara","Caralie","Caren","Carena","Caresa","Caressa","Caresse","Carey","Cari","Caria","Carie","Caril","Carilyn","Carin","Carina","Carine","Cariotta","Carissa","Carita","Caritta","Carla","Carlee","Carleen","Carlen","Carlene","Carley","Carlie","Carlin","Carlina","Carline","Carlita","Carlota","Carlotta","Carly","Carlye","Carlyn","Carlynn","Carlynne","Carma","Carmel","Carmela","Carmelia","Carmelina","Carmelita","Carmella","Carmelle","Carmen","Carmencita","Carmina","Carmine","Carmita","Carmon","Caro","Carol","Carol-jean","Carola","Carolan","Carolann","Carole","Carolee","Carolin","Carolina","Caroline","Caroljean","Carolyn","Carolyne","Carolynn","Caron","Carree","Carri","Carrie","Carrissa","Carroll","Carry","Cary","Caryl","Caryn","Casandra","Casey","Casi","Casie","Cass","Cassandra","Cassandre","Cassandry","Cassaundra","Cassey","Cassi","Cassie","Cassondra","Cassy","Catarina","Cate","Caterina","Catha","Catharina","Catharine","Cathe","Cathee","Catherin","Catherina","Catherine","Cathi","Cathie","Cathleen","Cathlene","Cathrin","Cathrine","Cathryn","Cathy","Cathyleen","Cati","Catie","Catina","Catlaina","Catlee","Catlin","Catrina","Catriona","Caty","Caye","Cayla","Cecelia","Cecil","Cecile","Ceciley","Cecilia","Cecilla","Cecily","Ceil","Cele","Celene","Celesta","Celeste","Celestia","Celestina","Celestine","Celestyn","Celestyna","Celia","Celie","Celina","Celinda","Celine","Celinka","Celisse","Celka","Celle","Cesya","Chad","Chanda","Chandal","Chandra","Channa","Chantal","Chantalle","Charil","Charin","Charis","Charissa","Charisse","Charita","Charity","Charla","Charlean","Charleen","Charlena","Charlene","Charline","Charlot","Charlotta","Charlotte","Charmain","Charmaine","Charmane","Charmian","Charmine","Charmion","Charo","Charyl","Chastity","Chelsae","Chelsea","Chelsey","Chelsie","Chelsy","Cher","Chere","Cherey","Cheri","Cherianne","Cherice","Cherida","Cherie","Cherilyn","Cherilynn","Cherin","Cherise","Cherish","Cherlyn","Cherri","Cherrita","Cherry","Chery","Cherye","Cheryl","Cheslie","Chiarra","Chickie","Chicky","Chiquia","Chiquita","Chlo","Chloe","Chloette","Chloris","Chris","Chrissie","Chrissy","Christa","Christabel","Christabella","Christal","Christalle","Christan","Christean","Christel","Christen","Christi","Christian","Christiana","Christiane","Christie","Christin","Christina","Christine","Christy","Christye","Christyna","Chrysa","Chrysler","Chrystal","Chryste","Chrystel","Cicely","Cicily","Ciel","Cilka","Cinda","Cindee","Cindelyn","Cinderella","Cindi","Cindie","Cindra","Cindy","Cinnamon","Cissiee","Cissy","Clair","Claire","Clara","Clarabelle","Clare","Claresta","Clareta","Claretta","Clarette","Clarey","Clari","Claribel","Clarice","Clarie","Clarinda","Clarine","Clarissa","Clarisse","Clarita","Clary","Claude","Claudelle","Claudetta","Claudette","Claudia","Claudie","Claudina","Claudine","Clea","Clem","Clemence","Clementia","Clementina","Clementine","Clemmie","Clemmy","Cleo","Cleopatra","Clerissa","Clio","Clo","Cloe","Cloris","Clotilda","Clovis","Codee","Codi","Codie","Cody","Coleen","Colene","Coletta","Colette","Colleen","Collen","Collete","Collette","Collie","Colline","Colly","Con","Concettina","Conchita","Concordia","Conni","Connie","Conny","Consolata","Constance","Constancia","Constancy","Constanta","Constantia","Constantina","Constantine","Consuela","Consuelo","Cookie","Cora","Corabel","Corabella","Corabelle","Coral","Coralie","Coraline","Coralyn","Cordelia","Cordelie","Cordey","Cordi","Cordie","Cordula","Cordy","Coreen","Corella","Corenda","Corene","Coretta","Corette","Corey","Cori","Corie","Corilla","Corina","Corine","Corinna","Corinne","Coriss","Corissa","Corliss","Corly","Cornela","Cornelia","Cornelle","Cornie","Corny","Correna","Correy","Corri","Corrianne","Corrie","Corrina","Corrine","Corrinne","Corry","Cortney","Cory","Cosetta","Cosette","Costanza","Courtenay","Courtnay","Courtney","Crin","Cris","Crissie","Crissy","Crista","Cristabel","Cristal","Cristen","Cristi","Cristie","Cristin","Cristina","Cristine","Cristionna","Cristy","Crysta","Crystal","Crystie","Cthrine","Cyb","Cybil","Cybill","Cymbre","Cynde","Cyndi","Cyndia","Cyndie","Cyndy","Cynthea","Cynthia","Cynthie","Cynthy","Dacey","Dacia","Dacie","Dacy","Dael","Daffi","Daffie","Daffy","Dagmar","Dahlia","Daile","Daisey","Daisi","Daisie","Daisy","Dale","Dalenna","Dalia","Dalila","Dallas","Daloris","Damara","Damaris","Damita","Dana","Danell","Danella","Danette","Dani","Dania","Danica","Danice","Daniela","Daniele","Daniella","Danielle","Danika","Danila","Danit","Danita","Danna","Danni","Dannie","Danny","Dannye","Danya","Danyelle","Danyette","Daphene","Daphna","Daphne","Dara","Darb","Darbie","Darby","Darcee","Darcey","Darci","Darcie","Darcy","Darda","Dareen","Darell","Darelle","Dari","Daria","Darice","Darla","Darleen","Darlene","Darline","Darlleen","Daron","Darrelle","Darryl","Darsey","Darsie","Darya","Daryl","Daryn","Dasha","Dasi","Dasie","Dasya","Datha","Daune","Daveen","Daveta","Davida","Davina","Davine","Davita","Dawn","Dawna","Dayle","Dayna","Ddene","De","Deana","Deane","Deanna","Deanne","Deb","Debbi","Debbie","Debby","Debee","Debera","Debi","Debor","Debora","Deborah","Debra","Dede","Dedie","Dedra","Dee","Deeann","Deeanne","Deedee","Deena","Deerdre","Deeyn","Dehlia","Deidre","Deina","Deirdre","Del","Dela","Delcina","Delcine","Delia","Delila","Delilah","Delinda","Dell","Della","Delly","Delora","Delores","Deloria","Deloris","Delphine","Delphinia","Demeter","Demetra","Demetria","Demetris","Dena","Deni","Denice","Denise","Denna","Denni","Dennie","Denny","Deny","Denys","Denyse","Deonne","Desdemona","Desirae","Desiree","Desiri","Deva","Devan","Devi","Devin","Devina","Devinne","Devon","Devondra","Devonna","Devonne","Devora","Di","Diahann","Dian","Diana","Diandra","Diane","Diane-marie","Dianemarie","Diann","Dianna","Dianne","Diannne","Didi","Dido","Diena","Dierdre","Dina","Dinah","Dinnie","Dinny","Dion","Dione","Dionis","Dionne","Dita","Dix","Dixie","Dniren","Dode","Dodi","Dodie","Dody","Doe","Doll","Dolley","Dolli","Dollie","Dolly","Dolores","Dolorita","Doloritas","Domeniga","Dominga","Domini","Dominica","Dominique","Dona","Donella","Donelle","Donetta","Donia","Donica","Donielle","Donna","Donnamarie","Donni","Donnie","Donny","Dora","Doralia","Doralin","Doralyn","Doralynn","Doralynne","Dore","Doreen","Dorelia","Dorella","Dorelle","Dorena","Dorene","Doretta","Dorette","Dorey","Dori","Doria","Dorian","Dorice","Dorie","Dorine","Doris","Dorisa","Dorise","Dorita","Doro","Dorolice","Dorolisa","Dorotea","Doroteya","Dorothea","Dorothee","Dorothy","Dorree","Dorri","Dorrie","Dorris","Dorry","Dorthea","Dorthy","Dory","Dosi","Dot","Doti","Dotti","Dottie","Dotty","Dre","Dreddy","Dredi","Drona","Dru","Druci","Drucie","Drucill","Drucy","Drusi","Drusie","Drusilla","Drusy","Dulce","Dulcea","Dulci","Dulcia","Dulciana","Dulcie","Dulcine","Dulcinea","Dulcy","Dulsea","Dusty","Dyan","Dyana","Dyane","Dyann","Dyanna","Dyanne","Dyna","Dynah","Eachelle","Eada","Eadie","Eadith","Ealasaid","Eartha","Easter","Eba","Ebba","Ebonee","Ebony","Eda","Eddi","Eddie","Eddy","Ede","Edee","Edeline","Eden","Edi","Edie","Edin","Edita","Edith","Editha","Edithe","Ediva","Edna","Edwina","Edy","Edyth","Edythe","Effie","Eileen","Eilis","Eimile","Eirena","Ekaterina","Elaina","Elaine","Elana","Elane","Elayne","Elberta","Elbertina","Elbertine","Eleanor","Eleanora","Eleanore","Electra","Eleen","Elena","Elene","Eleni","Elenore","Eleonora","Eleonore","Elfie","Elfreda","Elfrida","Elfrieda","Elga","Elianora","Elianore","Elicia","Elie","Elinor","Elinore","Elisa","Elisabet","Elisabeth","Elisabetta","Elise","Elisha","Elissa","Elita","Eliza","Elizabet","Elizabeth","Elka","Elke","Ella","Elladine","Elle","Ellen","Ellene","Ellette","Elli","Ellie","Ellissa","Elly","Ellyn","Ellynn","Elmira","Elna","Elnora","Elnore","Eloisa","Eloise","Elonore","Elora","Elsa","Elsbeth","Else","Elset","Elsey","Elsi","Elsie","Elsinore","Elspeth","Elsy","Elva","Elvera","Elvina","Elvira","Elwira","Elyn","Elyse","Elysee","Elysha","Elysia","Elyssa","Em","Ema","Emalee","Emalia","Emelda","Emelia","Emelina","Emeline","Emelita","Emelyne","Emera","Emilee","Emili","Emilia","Emilie","Emiline","Emily","Emlyn","Emlynn","Emlynne","Emma","Emmalee","Emmaline","Emmalyn","Emmalynn","Emmalynne","Emmeline","Emmey","Emmi","Emmie","Emmy","Emmye","Emogene","Emyle","Emylee","Engracia","Enid","Enrica","Enrichetta","Enrika","Enriqueta","Eolanda","Eolande","Eran","Erda","Erena","Erica","Ericha","Ericka","Erika","Erin","Erina","Erinn","Erinna","Erma","Ermengarde","Ermentrude","Ermina","Erminia","Erminie","Erna","Ernaline","Ernesta","Ernestine","Ertha","Eryn","Esma","Esmaria","Esme","Esmeralda","Essa","Essie","Essy","Esta","Estel","Estele","Estell","Estella","Estelle","Ester","Esther","Estrella","Estrellita","Ethel","Ethelda","Ethelin","Ethelind","Etheline","Ethelyn","Ethyl","Etta","Etti","Ettie","Etty","Eudora","Eugenia","Eugenie","Eugine","Eula","Eulalie","Eunice","Euphemia","Eustacia","Eva","Evaleen","Evangelia","Evangelin","Evangelina","Evangeline","Evania","Evanne","Eve","Eveleen","Evelina","Eveline","Evelyn","Evey","Evie","Evita","Evonne","Evvie","Evvy","Evy","Eyde","Eydie","Ezmeralda","Fae","Faina","Faith","Fallon","Fan","Fanchette","Fanchon","Fancie","Fancy","Fanechka","Fania","Fanni","Fannie","Fanny","Fanya","Fara","Farah","Farand","Farica","Farra","Farrah","Farrand","Faun","Faunie","Faustina","Faustine","Fawn","Fawne","Fawnia","Fay","Faydra","Faye","Fayette","Fayina","Fayre","Fayth","Faythe","Federica","Fedora","Felecia","Felicdad","Felice","Felicia","Felicity","Felicle","Felipa","Felisha","Felita","Feliza","Fenelia","Feodora","Ferdinanda","Ferdinande","Fern","Fernanda","Fernande","Fernandina","Ferne","Fey","Fiann","Fianna","Fidela","Fidelia","Fidelity","Fifi","Fifine","Filia","Filide","Filippa","Fina","Fiona","Fionna","Fionnula","Fiorenze","Fleur","Fleurette","Flo","Flor","Flora","Florance","Flore","Florella","Florence","Florencia","Florentia","Florenza","Florette","Flori","Floria","Florida","Florie","Florina","Florinda","Floris","Florri","Florrie","Florry","Flory","Flossi","Flossie","Flossy","Flss","Fran","Francene","Frances","Francesca","Francine","Francisca","Franciska","Francoise","Francyne","Frank","Frankie","Franky","Franni","Frannie","Franny","Frayda","Fred","Freda","Freddi","Freddie","Freddy","Fredelia","Frederica","Fredericka","Frederique","Fredi","Fredia","Fredra","Fredrika","Freida","Frieda","Friederike","Fulvia","Gabbey","Gabbi","Gabbie","Gabey","Gabi","Gabie","Gabriel","Gabriela","Gabriell","Gabriella","Gabrielle","Gabriellia","Gabrila","Gaby","Gae","Gael","Gail","Gale","Galina","Garland","Garnet","Garnette","Gates","Gavra","Gavrielle","Gay","Gaye","Gayel","Gayla","Gayle","Gayleen","Gaylene","Gaynor","Gelya","Gena","Gene","Geneva","Genevieve","Genevra","Genia","Genna","Genni","Gennie","Gennifer","Genny","Genovera","Genvieve","George","Georgeanna","Georgeanne","Georgena","Georgeta","Georgetta","Georgette","Georgia","Georgiana","Georgianna","Georgianne","Georgie","Georgina","Georgine","Geralda","Geraldine","Gerda","Gerhardine","Geri","Gerianna","Gerianne","Gerladina","Germain","Germaine","Germana","Gerri","Gerrie","Gerrilee","Gerry","Gert","Gerta","Gerti","Gertie","Gertrud","Gertruda","Gertrude","Gertrudis","Gerty","Giacinta","Giana","Gianina","Gianna","Gigi","Gilberta","Gilberte","Gilbertina","Gilbertine","Gilda","Gilemette","Gill","Gillan","Gilli","Gillian","Gillie","Gilligan","Gilly","Gina","Ginelle","Ginevra","Ginger","Ginni","Ginnie","Ginnifer","Ginny","Giorgia","Giovanna","Gipsy","Giralda","Gisela","Gisele","Gisella","Giselle","Giuditta","Giulia","Giulietta","Giustina","Gizela","Glad","Gladi","Gladys","Gleda","Glen","Glenda","Glenine","Glenn","Glenna","Glennie","Glennis","Glori","Gloria","Gloriana","Gloriane","Glory","Glyn","Glynda","Glynis","Glynnis","Gnni","Godiva","Golda","Goldarina","Goldi","Goldia","Goldie","Goldina","Goldy","Grace","Gracia","Gracie","Grata","Gratia","Gratiana","Gray","Grayce","Grazia","Greer","Greta","Gretal","Gretchen","Grete","Gretel","Grethel","Gretna","Gretta","Grier","Griselda","Grissel","Guendolen","Guenevere","Guenna","Guglielma","Gui","Guillema","Guillemette","Guinevere","Guinna","Gunilla","Gus","Gusella","Gussi","Gussie","Gussy","Gusta","Gusti","Gustie","Gusty","Gwen","Gwendolen","Gwendolin","Gwendolyn","Gweneth","Gwenette","Gwenneth","Gwenni","Gwennie","Gwenny","Gwenora","Gwenore","Gwyn","Gwyneth","Gwynne","Gypsy","Hadria","Hailee","Haily","Haleigh","Halette","Haley","Hali","Halie","Halimeda","Halley","Halli","Hallie","Hally","Hana","Hanna","Hannah","Hanni","Hannie","Hannis","Hanny","Happy","Harlene","Harley","Harli","Harlie","Harmonia","Harmonie","Harmony","Harri","Harrie","Harriet","Harriett","Harrietta","Harriette","Harriot","Harriott","Hatti","Hattie","Hatty","Hayley","Hazel","Heath","Heather","Heda","Hedda","Heddi","Heddie","Hedi","Hedvig","Hedvige","Hedwig","Hedwiga","Hedy","Heida","Heidi","Heidie","Helaina","Helaine","Helen","Helen-elizabeth","Helena","Helene","Helenka","Helga","Helge","Helli","Heloise","Helsa","Helyn","Hendrika","Henka","Henrie","Henrieta","Henrietta","Henriette","Henryetta","Hephzibah","Hermia","Hermina","Hermine","Herminia","Hermione","Herta","Hertha","Hester","Hesther","Hestia","Hetti","Hettie","Hetty","Hilary","Hilda","Hildagard","Hildagarde","Hilde","Hildegaard","Hildegarde","Hildy","Hillary","Hilliary","Hinda","Holli","Hollie","Holly","Holly-anne","Hollyanne","Honey","Honor","Honoria","Hope","Horatia","Hortense","Hortensia","Hulda","Hyacinth","Hyacintha","Hyacinthe","Hyacinthia","Hyacinthie","Hynda","Ianthe","Ibbie","Ibby","Ida","Idalia","Idalina","Idaline","Idell","Idelle","Idette","Ileana","Ileane","Ilene","Ilise","Ilka","Illa","Ilsa","Ilse","Ilysa","Ilyse","Ilyssa","Imelda","Imogen","Imogene","Imojean","Ina","Indira","Ines","Inesita","Inessa","Inez","Inga","Ingaberg","Ingaborg","Inge","Ingeberg","Ingeborg","Inger","Ingrid","Ingunna","Inna","Iolande","Iolanthe","Iona","Iormina","Ira","Irena","Irene","Irina","Iris","Irita","Irma","Isa","Isabel","Isabelita","Isabella","Isabelle","Isadora","Isahella","Iseabal","Isidora","Isis","Isobel","Issi","Issie","Issy","Ivett","Ivette","Ivie","Ivonne","Ivory","Ivy","Izabel","Jacenta","Jacinda","Jacinta","Jacintha","Jacinthe","Jackelyn","Jacki","Jackie","Jacklin","Jacklyn","Jackquelin","Jackqueline","Jacky","Jaclin","Jaclyn","Jacquelin","Jacqueline","Jacquelyn","Jacquelynn","Jacquenetta","Jacquenette","Jacquetta","Jacquette","Jacqui","Jacquie","Jacynth","Jada","Jade","Jaime","Jaimie","Jaine","Jami","Jamie","Jamima","Jammie","Jan","Jana","Janaya","Janaye","Jandy","Jane","Janean","Janeczka","Janeen","Janel","Janela","Janella","Janelle","Janene","Janenna","Janessa","Janet","Janeta","Janetta","Janette","Janeva","Janey","Jania","Janice","Janie","Janifer","Janina","Janine","Janis","Janith","Janka","Janna","Jannel","Jannelle","Janot","Jany","Jaquelin","Jaquelyn","Jaquenetta","Jaquenette","Jaquith","Jasmin","Jasmina","Jasmine","Jayme","Jaymee","Jayne","Jaynell","Jazmin","Jean","Jeana","Jeane","Jeanelle","Jeanette","Jeanie","Jeanine","Jeanna","Jeanne","Jeannette","Jeannie","Jeannine","Jehanna","Jelene","Jemie","Jemima","Jemimah","Jemmie","Jemmy","Jen","Jena","Jenda","Jenelle","Jeni","Jenica","Jeniece","Jenifer","Jeniffer","Jenilee","Jenine","Jenn","Jenna","Jennee","Jennette","Jenni","Jennica","Jennie","Jennifer","Jennilee","Jennine","Jenny","Jeralee","Jere","Jeri","Jermaine","Jerrie","Jerrilee","Jerrilyn","Jerrine","Jerry","Jerrylee","Jess","Jessa","Jessalin","Jessalyn","Jessamine","Jessamyn","Jesse","Jesselyn","Jessi","Jessica","Jessie","Jessika","Jessy","Jewel","Jewell","Jewelle","Jill","Jillana","Jillane","Jillayne","Jilleen","Jillene","Jilli","Jillian","Jillie","Jilly","Jinny","Jo","Jo-ann","Jo-anne","Joan","Joana","Joane","Joanie","Joann","Joanna","Joanne","Joannes","Jobey","Jobi","Jobie","Jobina","Joby","Jobye","Jobyna","Jocelin","Joceline","Jocelyn","Jocelyne","Jodee","Jodi","Jodie","Jody","Joeann","Joela","Joelie","Joell","Joella","Joelle","Joellen","Joelly","Joellyn","Joelynn","Joete","Joey","Johanna","Johannah","Johna","Johnath","Johnette","Johnna","Joice","Jojo","Jolee","Joleen","Jolene","Joletta","Joli","Jolie","Joline","Joly","Jolyn","Jolynn","Jonell","Joni","Jonie","Jonis","Jordain","Jordan","Jordana","Jordanna","Jorey","Jori","Jorie","Jorrie","Jorry","Joscelin","Josee","Josefa","Josefina","Josepha","Josephina","Josephine","Josey","Josi","Josie","Josselyn","Josy","Jourdan","Joy","Joya","Joyan","Joyann","Joyce","Joycelin","Joye","Jsandye","Juana","Juanita","Judi","Judie","Judith","Juditha","Judy","Judye","Juieta","Julee","Juli","Julia","Juliana","Juliane","Juliann","Julianna","Julianne","Julie","Julienne","Juliet","Julieta","Julietta","Juliette","Julina","Juline","Julissa","Julita","June","Junette","Junia","Junie","Junina","Justina","Justine","Justinn","Jyoti","Kacey","Kacie","Kacy","Kaela","Kai","Kaia","Kaila","Kaile","Kailey","Kaitlin","Kaitlyn","Kaitlynn","Kaja","Kakalina","Kala","Kaleena","Kali","Kalie","Kalila","Kalina","Kalinda","Kalindi","Kalli","Kally","Kameko","Kamila","Kamilah","Kamillah","Kandace","Kandy","Kania","Kanya","Kara","Kara-lynn","Karalee","Karalynn","Kare","Karee","Karel","Karen","Karena","Kari","Karia","Karie","Karil","Karilynn","Karin","Karina","Karine","Kariotta","Karisa","Karissa","Karita","Karla","Karlee","Karleen","Karlen","Karlene","Karlie","Karlotta","Karlotte","Karly","Karlyn","Karmen","Karna","Karol","Karola","Karole","Karolina","Karoline","Karoly","Karon","Karrah","Karrie","Karry","Kary","Karyl","Karylin","Karyn","Kasey","Kass","Kassandra","Kassey","Kassi","Kassia","Kassie","Kat","Kata","Katalin","Kate","Katee","Katerina","Katerine","Katey","Kath","Katha","Katharina","Katharine","Katharyn","Kathe","Katherina","Katherine","Katheryn","Kathi","Kathie","Kathleen","Kathlin","Kathrine","Kathryn","Kathryne","Kathy","Kathye","Kati","Katie","Katina","Katine","Katinka","Katleen","Katlin","Katrina","Katrine","Katrinka","Katti","Kattie","Katuscha","Katusha","Katy","Katya","Kay","Kaycee","Kaye","Kayla","Kayle","Kaylee","Kayley","Kaylil","Kaylyn","Keeley","Keelia","Keely","Kelcey","Kelci","Kelcie","Kelcy","Kelila","Kellen","Kelley","Kelli","Kellia","Kellie","Kellina","Kellsie","Kelly","Kellyann","Kelsey","Kelsi","Kelsy","Kendra","Kendre","Kenna","Keri","Keriann","Kerianne","Kerri","Kerrie","Kerrill","Kerrin","Kerry","Kerstin","Kesley","Keslie","Kessia","Kessiah","Ketti","Kettie","Ketty","Kevina","Kevyn","Ki","Kiah","Kial","Kiele","Kiersten","Kikelia","Kiley","Kim","Kimberlee","Kimberley","Kimberli","Kimberly","Kimberlyn","Kimbra","Kimmi","Kimmie","Kimmy","Kinna","Kip","Kipp","Kippie","Kippy","Kira","Kirbee","Kirbie","Kirby","Kiri","Kirsten","Kirsteni","Kirsti","Kirstin","Kirstyn","Kissee","Kissiah","Kissie","Kit","Kitti","Kittie","Kitty","Kizzee","Kizzie","Klara","Klarika","Klarrisa","Konstance","Konstanze","Koo","Kora","Koral","Koralle","Kordula","Kore","Korella","Koren","Koressa","Kori","Korie","Korney","Korrie","Korry","Kris","Krissie","Krissy","Krista","Kristal","Kristan","Kriste","Kristel","Kristen","Kristi","Kristien","Kristin","Kristina","Kristine","Kristy","Kristyn","Krysta","Krystal","Krystalle","Krystle","Krystyna","Kyla","Kyle","Kylen","Kylie","Kylila","Kylynn","Kym","Kynthia","Kyrstin","Lacee","Lacey","Lacie","Lacy","Ladonna","Laetitia","Laina","Lainey","Lana","Lanae","Lane","Lanette","Laney","Lani","Lanie","Lanita","Lanna","Lanni","Lanny","Lara","Laraine","Lari","Larina","Larine","Larisa","Larissa","Lark","Laryssa","Latashia","Latia","Latisha","Latrena","Latrina","Laura","Lauraine","Laural","Lauralee","Laure","Lauree","Laureen","Laurel","Laurella","Lauren","Laurena","Laurene","Lauretta","Laurette","Lauri","Laurianne","Laurice","Laurie","Lauryn","Lavena","Laverna","Laverne","Lavina","Lavinia","Lavinie","Layla","Layne","Layney","Lea","Leah","Leandra","Leann","Leanna","Leanor","Leanora","Lebbie","Leda","Lee","Leeann","Leeanne","Leela","Leelah","Leena","Leesa","Leese","Legra","Leia","Leigh","Leigha","Leila","Leilah","Leisha","Lela","Lelah","Leland","Lelia","Lena","Lenee","Lenette","Lenka","Lenna","Lenora","Lenore","Leodora","Leoine","Leola","Leoline","Leona","Leonanie","Leone","Leonelle","Leonie","Leonora","Leonore","Leontine","Leontyne","Leora","Leshia","Lesley","Lesli","Leslie","Lesly","Lesya","Leta","Lethia","Leticia","Letisha","Letitia","Letizia","Letta","Letti","Lettie","Letty","Lexi","Lexie","Lexine","Lexis","Lexy","Leyla","Lezlie","Lia","Lian","Liana","Liane","Lianna","Lianne","Lib","Libbey","Libbi","Libbie","Libby","Licha","Lida","Lidia","Liesa","Lil","Lila","Lilah","Lilas","Lilia","Lilian","Liliane","Lilias","Lilith","Lilla","Lilli","Lillian","Lillis","Lilllie","Lilly","Lily","Lilyan","Lin","Lina","Lind","Linda","Lindi","Lindie","Lindsay","Lindsey","Lindsy","Lindy","Linea","Linell","Linet","Linette","Linn","Linnea","Linnell","Linnet","Linnie","Linzy","Lira","Lisa","Lisabeth","Lisbeth","Lise","Lisetta","Lisette","Lisha","Lishe","Lissa","Lissi","Lissie","Lissy","Lita","Liuka","Liv","Liva","Livia","Livvie","Livvy","Livvyy","Livy","Liz","Liza","Lizabeth","Lizbeth","Lizette","Lizzie","Lizzy","Loella","Lois","Loise","Lola","Loleta","Lolita","Lolly","Lona","Lonee","Loni","Lonna","Lonni","Lonnie","Lora","Lorain","Loraine","Loralee","Loralie","Loralyn","Loree","Loreen","Lorelei","Lorelle","Loren","Lorena","Lorene","Lorenza","Loretta","Lorette","Lori","Loria","Lorianna","Lorianne","Lorie","Lorilee","Lorilyn","Lorinda","Lorine","Lorita","Lorna","Lorne","Lorraine","Lorrayne","Lorri","Lorrie","Lorrin","Lorry","Lory","Lotta","Lotte","Lotti","Lottie","Lotty","Lou","Louella","Louisa","Louise","Louisette","Loutitia","Lu","Luce","Luci","Lucia","Luciana","Lucie","Lucienne","Lucila","Lucilia","Lucille","Lucina","Lucinda","Lucine","Lucita","Lucky","Lucretia","Lucy","Ludovika","Luella","Luelle","Luisa","Luise","Lula","Lulita","Lulu","Lura","Lurette","Lurleen","Lurlene","Lurline","Lusa","Luz","Lyda","Lydia","Lydie","Lyn","Lynda","Lynde","Lyndel","Lyndell","Lyndsay","Lyndsey","Lyndsie","Lyndy","Lynea","Lynelle","Lynett","Lynette","Lynn","Lynna","Lynne","Lynnea","Lynnell","Lynnelle","Lynnet","Lynnett","Lynnette","Lynsey","Lyssa","Mab","Mabel","Mabelle","Mable","Mada","Madalena","Madalyn","Maddalena","Maddi","Maddie","Maddy","Madel","Madelaine","Madeleine","Madelena","Madelene","Madelin","Madelina","Madeline","Madella","Madelle","Madelon","Madelyn","Madge","Madlen","Madlin","Madonna","Mady","Mae","Maegan","Mag","Magda","Magdaia","Magdalen","Magdalena","Magdalene","Maggee","Maggi","Maggie","Maggy","Mahala","Mahalia","Maia","Maible","Maiga","Maighdiln","Mair","Maire","Maisey","Maisie","Maitilde","Mala","Malanie","Malena","Malia","Malina","Malinda","Malinde","Malissa","Malissia","Mallissa","Mallorie","Mallory","Malorie","Malory","Malva","Malvina","Malynda","Mame","Mamie","Manda","Mandi","Mandie","Mandy","Manon","Manya","Mara","Marabel","Marcela","Marcelia","Marcella","Marcelle","Marcellina","Marcelline","Marchelle","Marci","Marcia","Marcie","Marcile","Marcille","Marcy","Mareah","Maren","Marena","Maressa","Marga","Margalit","Margalo","Margaret","Margareta","Margarete","Margaretha","Margarethe","Margaretta","Margarette","Margarita","Margaux","Marge","Margeaux","Margery","Marget","Margette","Margi","Margie","Margit","Margo","Margot","Margret","Marguerite","Margy","Mari","Maria","Mariam","Marian","Mariana","Mariann","Marianna","Marianne","Maribel","Maribelle","Maribeth","Marice","Maridel","Marie","Marie-ann","Marie-jeanne","Marieann","Mariejeanne","Mariel","Mariele","Marielle","Mariellen","Marietta","Mariette","Marigold","Marijo","Marika","Marilee","Marilin","Marillin","Marilyn","Marin","Marina","Marinna","Marion","Mariquilla","Maris","Marisa","Mariska","Marissa","Marita","Maritsa","Mariya","Marj","Marja","Marje","Marji","Marjie","Marjorie","Marjory","Marjy","Marketa","Marla","Marlane","Marleah","Marlee","Marleen","Marlena","Marlene","Marley","Marlie","Marline","Marlo","Marlyn","Marna","Marne","Marney","Marni","Marnia","Marnie","Marquita","Marrilee","Marris","Marrissa","Marsha","Marsiella","Marta","Martelle","Martguerita","Martha","Marthe","Marthena","Marti","Martica","Martie","Martina","Martita","Marty","Martynne","Mary","Marya","Maryann","Maryanna","Maryanne","Marybelle","Marybeth","Maryellen","Maryjane","Maryjo","Maryl","Marylee","Marylin","Marylinda","Marylou","Marylynne","Maryrose","Marys","Marysa","Masha","Matelda","Mathilda","Mathilde","Matilda","Matilde","Matti","Mattie","Matty","Maud","Maude","Maudie","Maura","Maure","Maureen","Maureene","Maurene","Maurine","Maurise","Maurita","Maurizia","Mavis","Mavra","Max","Maxi","Maxie","Maxine","Maxy","May","Maybelle","Maye","Mead","Meade","Meagan","Meaghan","Meara","Mechelle","Meg","Megan","Megen","Meggi","Meggie","Meggy","Meghan","Meghann","Mehetabel","Mei","Mel","Mela","Melamie","Melania","Melanie","Melantha","Melany","Melba","Melesa","Melessa","Melicent","Melina","Melinda","Melinde","Melisa","Melisande","Melisandra","Melisenda","Melisent","Melissa","Melisse","Melita","Melitta","Mella","Melli","Mellicent","Mellie","Mellisa","Mellisent","Melloney","Melly","Melodee","Melodie","Melody","Melonie","Melony","Melosa","Melva","Mercedes","Merci","Mercie","Mercy","Meredith","Meredithe","Meridel","Meridith","Meriel","Merilee","Merilyn","Meris","Merissa","Merl","Merla","Merle","Merlina","Merline","Merna","Merola","Merralee","Merridie","Merrie","Merrielle","Merrile","Merrilee","Merrili","Merrill","Merrily","Merry","Mersey","Meryl","Meta","Mia","Micaela","Michaela","Michaelina","Michaeline","Michaella","Michal","Michel","Michele","Michelina","Micheline","Michell","Michelle","Micki","Mickie","Micky","Midge","Mignon","Mignonne","Miguela","Miguelita","Mikaela","Mil","Mildred","Mildrid","Milena","Milicent","Milissent","Milka","Milli","Millicent","Millie","Millisent","Milly","Milzie","Mimi","Min","Mina","Minda","Mindy","Minerva","Minetta","Minette","Minna","Minnaminnie","Minne","Minni","Minnie","Minnnie","Minny","Minta","Miquela","Mira","Mirabel","Mirabella","Mirabelle","Miran","Miranda","Mireielle","Mireille","Mirella","Mirelle","Miriam","Mirilla","Mirna","Misha","Missie","Missy","Misti","Misty","Mitzi","Modesta","Modestia","Modestine","Modesty","Moina","Moira","Moll","Mollee","Molli","Mollie","Molly","Mommy","Mona","Monah","Monica","Monika","Monique","Mora","Moreen","Morena","Morgan","Morgana","Morganica","Morganne","Morgen","Moria","Morissa","Morna","Moselle","Moyna","Moyra","Mozelle","Muffin","Mufi","Mufinella","Muire","Mureil","Murial","Muriel","Murielle","Myra","Myrah","Myranda","Myriam","Myrilla","Myrle","Myrlene","Myrna","Myrta","Myrtia","Myrtice","Myrtie","Myrtle","Nada","Nadean","Nadeen","Nadia","Nadine","Nadiya","Nady","Nadya","Nalani","Nan","Nana","Nananne","Nance","Nancee","Nancey","Nanci","Nancie","Nancy","Nanete","Nanette","Nani","Nanice","Nanine","Nannette","Nanni","Nannie","Nanny","Nanon","Naoma","Naomi","Nara","Nari","Nariko","Nat","Nata","Natala","Natalee","Natalie","Natalina","Nataline","Natalya","Natasha","Natassia","Nathalia","Nathalie","Natividad","Natka","Natty","Neala","Neda","Nedda","Nedi","Neely","Neila","Neile","Neilla","Neille","Nelia","Nelie","Nell","Nelle","Nelli","Nellie","Nelly","Nerissa","Nerita","Nert","Nerta","Nerte","Nerti","Nertie","Nerty","Nessa","Nessi","Nessie","Nessy","Nesta","Netta","Netti","Nettie","Nettle","Netty","Nevsa","Neysa","Nichol","Nichole","Nicholle","Nicki","Nickie","Nicky","Nicol","Nicola","Nicole","Nicolea","Nicolette","Nicoli","Nicolina","Nicoline","Nicolle","Nikaniki","Nike","Niki","Nikki","Nikkie","Nikoletta","Nikolia","Nina","Ninetta","Ninette","Ninnetta","Ninnette","Ninon","Nissa","Nisse","Nissie","Nissy","Nita","Nixie","Noami","Noel","Noelani","Noell","Noella","Noelle","Noellyn","Noelyn","Noemi","Nola","Nolana","Nolie","Nollie","Nomi","Nona","Nonah","Noni","Nonie","Nonna","Nonnah","Nora","Norah","Norean","Noreen","Norene","Norina","Norine","Norma","Norri","Norrie","Norry","Novelia","Nydia","Nyssa","Octavia","Odele","Odelia","Odelinda","Odella","Odelle","Odessa","Odetta","Odette","Odilia","Odille","Ofelia","Ofella","Ofilia","Ola","Olenka","Olga","Olia","Olimpia","Olive","Olivette","Olivia","Olivie","Oliy","Ollie","Olly","Olva","Olwen","Olympe","Olympia","Olympie","Ondrea","Oneida","Onida","Oona","Opal","Opalina","Opaline","Ophelia","Ophelie","Ora","Oralee","Oralia","Oralie","Oralla","Oralle","Orel","Orelee","Orelia","Orelie","Orella","Orelle","Oriana","Orly","Orsa","Orsola","Ortensia","Otha","Othelia","Othella","Othilia","Othilie","Ottilie","Page","Paige","Paloma","Pam","Pamela","Pamelina","Pamella","Pammi","Pammie","Pammy","Pandora","Pansie","Pansy","Paola","Paolina","Papagena","Pat","Patience","Patrica","Patrice","Patricia","Patrizia","Patsy","Patti","Pattie","Patty","Paula","Paule","Pauletta","Paulette","Pauli","Paulie","Paulina","Pauline","Paulita","Pauly","Pavia","Pavla","Pearl","Pearla","Pearle","Pearline","Peg","Pegeen","Peggi","Peggie","Peggy","Pen","Penelopa","Penelope","Penni","Pennie","Penny","Pepi","Pepita","Peri","Peria","Perl","Perla","Perle","Perri","Perrine","Perry","Persis","Pet","Peta","Petra","Petrina","Petronella","Petronia","Petronilla","Petronille","Petunia","Phaedra","Phaidra","Phebe","Phedra","Phelia","Phil","Philipa","Philippa","Philippe","Philippine","Philis","Phillida","Phillie","Phillis","Philly","Philomena","Phoebe","Phylis","Phyllida","Phyllis","Phyllys","Phylys","Pia","Pier","Pierette","Pierrette","Pietra","Piper","Pippa","Pippy","Polly","Pollyanna","Pooh","Poppy","Portia","Pris","Prisca","Priscella","Priscilla","Prissie","Pru","Prudence","Prudi","Prudy","Prue","Queenie","Quentin","Querida","Quinn","Quinta","Quintana","Quintilla","Quintina","Rachael","Rachel","Rachele","Rachelle","Rae","Raeann","Raf","Rafa","Rafaela","Rafaelia","Rafaelita","Rahal","Rahel","Raina","Raine","Rakel","Ralina","Ramona","Ramonda","Rana","Randa","Randee","Randene","Randi","Randie","Randy","Ranee","Rani","Rania","Ranice","Ranique","Ranna","Raphaela","Raquel","Raquela","Rasia","Rasla","Raven","Ray","Raychel","Raye","Rayna","Raynell","Rayshell","Rea","Reba","Rebbecca","Rebe","Rebeca","Rebecca","Rebecka","Rebeka","Rebekah","Rebekkah","Ree","Reeba","Reena","Reeta","Reeva","Regan","Reggi","Reggie","Regina","Regine","Reiko","Reina","Reine","Remy","Rena","Renae","Renata","Renate","Rene","Renee","Renell","Renelle","Renie","Rennie","Reta","Retha","Revkah","Rey","Reyna","Rhea","Rheba","Rheta","Rhetta","Rhiamon","Rhianna","Rhianon","Rhoda","Rhodia","Rhodie","Rhody","Rhona","Rhonda","Riane","Riannon","Rianon","Rica","Ricca","Rici","Ricki","Rickie","Ricky","Riki","Rikki","Rina","Risa","Rita","Riva","Rivalee","Rivi","Rivkah","Rivy","Roana","Roanna","Roanne","Robbi","Robbie","Robbin","Robby","Robbyn","Robena","Robenia","Roberta","Robin","Robina","Robinet","Robinett","Robinetta","Robinette","Robinia","Roby","Robyn","Roch","Rochell","Rochella","Rochelle","Rochette","Roda","Rodi","Rodie","Rodina","Rois","Romola","Romona","Romonda","Romy","Rona","Ronalda","Ronda","Ronica","Ronna","Ronni","Ronnica","Ronnie","Ronny","Roobbie","Rora","Rori","Rorie","Rory","Ros","Rosa","Rosabel","Rosabella","Rosabelle","Rosaleen","Rosalia","Rosalie","Rosalind","Rosalinda","Rosalinde","Rosaline","Rosalyn","Rosalynd","Rosamond","Rosamund","Rosana","Rosanna","Rosanne","Rose","Roseann","Roseanna","Roseanne","Roselia","Roselin","Roseline","Rosella","Roselle","Rosemaria","Rosemarie","Rosemary","Rosemonde","Rosene","Rosetta","Rosette","Roshelle","Rosie","Rosina","Rosita","Roslyn","Rosmunda","Rosy","Row","Rowe","Rowena","Roxana","Roxane","Roxanna","Roxanne","Roxi","Roxie","Roxine","Roxy","Roz","Rozalie","Rozalin","Rozamond","Rozanna","Rozanne","Roze","Rozele","Rozella","Rozelle","Rozina","Rubetta","Rubi","Rubia","Rubie","Rubina","Ruby","Ruperta","Ruth","Ruthann","Ruthanne","Ruthe","Ruthi","Ruthie","Ruthy","Ryann","Rycca","Saba","Sabina","Sabine","Sabra","Sabrina","Sacha","Sada","Sadella","Sadie","Sadye","Saidee","Sal","Salaidh","Sallee","Salli","Sallie","Sally","Sallyann","Sallyanne","Saloma","Salome","Salomi","Sam","Samantha","Samara","Samaria","Sammy","Sande","Sandi","Sandie","Sandra","Sandy","Sandye","Sapphira","Sapphire","Sara","Sara-ann","Saraann","Sarah","Sarajane","Saree","Sarena","Sarene","Sarette","Sari","Sarina","Sarine","Sarita","Sascha","Sasha","Sashenka","Saudra","Saundra","Savina","Sayre","Scarlet","Scarlett","Sean","Seana","Seka","Sela","Selena","Selene","Selestina","Selia","Selie","Selina","Selinda","Seline","Sella","Selle","Selma","Sena","Sephira","Serena","Serene","Shae","Shaina","Shaine","Shalna","Shalne","Shana","Shanda","Shandee","Shandeigh","Shandie","Shandra","Shandy","Shane","Shani","Shanie","Shanna","Shannah","Shannen","Shannon","Shanon","Shanta","Shantee","Shara","Sharai","Shari","Sharia","Sharity","Sharl","Sharla","Sharleen","Sharlene","Sharline","Sharon","Sharona","Sharron","Sharyl","Shaun","Shauna","Shawn","Shawna","Shawnee","Shay","Shayla","Shaylah","Shaylyn","Shaylynn","Shayna","Shayne","Shea","Sheba","Sheela","Sheelagh","Sheelah","Sheena","Sheeree","Sheila","Sheila-kathryn","Sheilah","Shel","Shela","Shelagh","Shelba","Shelbi","Shelby","Shelia","Shell","Shelley","Shelli","Shellie","Shelly","Shena","Sher","Sheree","Sheri","Sherie","Sherill","Sherilyn","Sherline","Sherri","Sherrie","Sherry","Sherye","Sheryl","Shina","Shir","Shirl","Shirlee","Shirleen","Shirlene","Shirley","Shirline","Shoshana","Shoshanna","Siana","Sianna","Sib","Sibbie","Sibby","Sibeal","Sibel","Sibella","Sibelle","Sibilla","Sibley","Sibyl","Sibylla","Sibylle","Sidoney","Sidonia","Sidonnie","Sigrid","Sile","Sileas","Silva","Silvana","Silvia","Silvie","Simona","Simone","Simonette","Simonne","Sindee","Siobhan","Sioux","Siouxie","Sisely","Sisile","Sissie","Sissy","Siusan","Sofia","Sofie","Sondra","Sonia","Sonja","Sonni","Sonnie","Sonnnie","Sonny","Sonya","Sophey","Sophi","Sophia","Sophie","Sophronia","Sorcha","Sosanna","Stace","Stacee","Stacey","Staci","Stacia","Stacie","Stacy","Stafani","Star","Starla","Starlene","Starlin","Starr","Stefa","Stefania","Stefanie","Steffane","Steffi","Steffie","Stella","Stepha","Stephana","Stephani","Stephanie","Stephannie","Stephenie","Stephi","Stephie","Stephine","Stesha","Stevana","Stevena","Stoddard","Storm","Stormi","Stormie","Stormy","Sue","Suellen","Sukey","Suki","Sula","Sunny","Sunshine","Susan","Susana","Susanetta","Susann","Susanna","Susannah","Susanne","Susette","Susi","Susie","Susy","Suzann","Suzanna","Suzanne","Suzette","Suzi","Suzie","Suzy","Sybil","Sybila","Sybilla","Sybille","Sybyl","Sydel","Sydelle","Sydney","Sylvia","Tabatha","Tabbatha","Tabbi","Tabbie","Tabbitha","Tabby","Tabina","Tabitha","Taffy","Talia","Tallia","Tallie","Tallou","Tallulah","Tally","Talya","Talyah","Tamar","Tamara","Tamarah","Tamarra","Tamera","Tami","Tamiko","Tamma","Tammara","Tammi","Tammie","Tammy","Tamqrah","Tamra","Tana","Tandi","Tandie","Tandy","Tanhya","Tani","Tania","Tanitansy","Tansy","Tanya","Tara","Tarah","Tarra","Tarrah","Taryn","Tasha","Tasia","Tate","Tatiana","Tatiania","Tatum","Tawnya","Tawsha","Ted","Tedda","Teddi","Teddie","Teddy","Tedi","Tedra","Teena","Teirtza","Teodora","Tera","Teresa","Terese","Teresina","Teresita","Teressa","Teri","Teriann","Terra","Terri","Terrie","Terrijo","Terry","Terrye","Tersina","Terza","Tess","Tessa","Tessi","Tessie","Tessy","Thalia","Thea","Theadora","Theda","Thekla","Thelma","Theo","Theodora","Theodosia","Theresa","Therese","Theresina","Theresita","Theressa","Therine","Thia","Thomasa","Thomasin","Thomasina","Thomasine","Tiena","Tierney","Tiertza","Tiff","Tiffani","Tiffanie","Tiffany","Tiffi","Tiffie","Tiffy","Tilda","Tildi","Tildie","Tildy","Tillie","Tilly","Tim","Timi","Timmi","Timmie","Timmy","Timothea","Tina","Tine","Tiphani","Tiphanie","Tiphany","Tish","Tisha","Tobe","Tobey","Tobi","Toby","Tobye","Toinette","Toma","Tomasina","Tomasine","Tomi","Tommi","Tommie","Tommy","Toni","Tonia","Tonie","Tony","Tonya","Tonye","Tootsie","Torey","Tori","Torie","Torrie","Tory","Tova","Tove","Tracee","Tracey","Traci","Tracie","Tracy","Trenna","Tresa","Trescha","Tressa","Tricia","Trina","Trish","Trisha","Trista","Trix","Trixi","Trixie","Trixy","Truda","Trude","Trudey","Trudi","Trudie","Trudy","Trula","Tuesday","Twila","Twyla","Tybi","Tybie","Tyne","Ula","Ulla","Ulrica","Ulrika","Ulrikaumeko","Ulrike","Umeko","Una","Ursa","Ursala","Ursola","Ursula","Ursulina","Ursuline","Uta","Val","Valaree","Valaria","Vale","Valeda","Valencia","Valene","Valenka","Valentia","Valentina","Valentine","Valera","Valeria","Valerie","Valery","Valerye","Valida","Valina","Valli","Vallie","Vally","Valma","Valry","Van","Vanda","Vanessa","Vania","Vanna","Vanni","Vannie","Vanny","Vanya","Veda","Velma","Velvet","Venita","Venus","Vera","Veradis","Vere","Verena","Verene","Veriee","Verile","Verina","Verine","Verla","Verna","Vernice","Veronica","Veronika","Veronike","Veronique","Vevay","Vi","Vicki","Vickie","Vicky","Victoria","Vida","Viki","Vikki","Vikky","Vilhelmina","Vilma","Vin","Vina","Vinita","Vinni","Vinnie","Vinny","Viola","Violante","Viole","Violet","Violetta","Violette","Virgie","Virgina","Virginia","Virginie","Vita","Vitia","Vitoria","Vittoria","Viv","Viva","Vivi","Vivia","Vivian","Viviana","Vivianna","Vivianne","Vivie","Vivien","Viviene","Vivienne","Viviyan","Vivyan","Vivyanne","Vonni","Vonnie","Vonny","Vyky","Wallie","Wallis","Walliw","Wally","Waly","Wanda","Wandie","Wandis","Waneta","Wanids","Wenda","Wendeline","Wendi","Wendie","Wendy","Wendye","Wenona","Wenonah","Whitney","Wileen","Wilhelmina","Wilhelmine","Wilie","Willa","Willabella","Willamina","Willetta","Willette","Willi","Willie","Willow","Willy","Willyt","Wilma","Wilmette","Wilona","Wilone","Wilow","Windy","Wini","Winifred","Winna","Winnah","Winne","Winni","Winnie","Winnifred","Winny","Winona","Winonah","Wren","Wrennie","Wylma","Wynn","Wynne","Wynnie","Wynny","Xaviera","Xena","Xenia","Xylia","Xylina","Yalonda","Yasmeen","Yasmin","Yelena","Yetta","Yettie","Yetty","Yevette","Ynes","Ynez","Yoko","Yolanda","Yolande","Yolane","Yolanthe","Yoshi","Yoshiko","Yovonnda","Ysabel","Yvette","Yvonne","Zabrina","Zahara","Zandra","Zaneta","Zara","Zarah","Zaria","Zarla","Zea","Zelda","Zelma","Zena","Zenia","Zia","Zilvia","Zita","Zitella","Zoe","Zola","Zonda","Zondra","Zonnya","Zora","Zorah","Zorana","Zorina","Zorine","Zsazsa","Zulema","Zuzana"],y=["Ackbar","Adi Gallia","Anakin Skywalker","Arvel Crynyd","Ayla Secura","Bail Prestor Organa","Barriss Offee","Ben Quadinaros","Beru Whitesun lars","Bib Fortuna","Biggs Darklighter","Boba Fett","Bossk","C-3PO","Chewbacca","Cliegg Lars","Cordé","Darth Maul","Darth Vader","Dexter Jettster","Dooku","Dormé","Dud Bolt","Eeth Koth","Finis Valorum","Gasgano","Greedo","Gregar Typho","Grievous","Han Solo","IG-88","Jabba Desilijic Tiure","Jango Fett","Jar Jar Binks","Jek Tono Porkins","Jocasta Nu","Ki-Adi-Mundi","Kit Fisto","Lama Su","Lando Calrissian","Leia Organa","Lobot","Luke Skywalker","Luminara Unduli","Mace Windu","Mas Amedda","Mon Mothma","Nien Nunb","Nute Gunray","Obi-Wan Kenobi","Owen Lars","Padmé Amidala","Palpatine","Plo Koon","Poggle the Lesser","Quarsh Panaka","Qui-Gon Jinn","R2-D2","R4-P17","R5-D4","Ratts Tyerel","Raymus Antilles","Ric Olié","Roos Tarpals","Rugor Nass","Saesee Tiin","San Hill","Sebulba","Shaak Ti","Shmi Skywalker","Sly Moore","Tarfful","Taun We","Tion Medon","Wat Tambor","Watto","Wedge Antilles","Wicket Systri Warrick","Wilhuff Tarkin","Yarael Poof","Yoda","Zam Wesell"];class h{static generate(a={}){let e=a.min||1,i=a.max||999;if(a.length){const n=Math.pow(10,a.length);return e=n/10,i=n-1,[`${Math.floor(Math.random()*(i-e))+e}`]}return[`${Math.floor(Math.random()*(i-e))+e}`]}}export{h as NumberDictionary,l as adjectives,r as animals,t as colors,o as countries,s as languages,d as names,y as starWars,n as uniqueNamesGenerator}; -//# sourceMappingURL=index.modern.js.map diff --git a/tests/iac_integration/cdk/testdata/src/nodejs/NodeJsFunctionConstruct/node_modules/unique-names-generator/dist/index.umd.js b/tests/iac_integration/cdk/testdata/src/nodejs/NodeJsFunctionConstruct/node_modules/unique-names-generator/dist/index.umd.js deleted file mode 100644 index eeb90c449e..0000000000 --- a/tests/iac_integration/cdk/testdata/src/nodejs/NodeJsFunctionConstruct/node_modules/unique-names-generator/dist/index.umd.js +++ /dev/null @@ -1,2 +0,0 @@ -!function(a,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((a||self).uniqueNamesGenerator={})}(this,function(a){class e{constructor(a){this.dictionaries=void 0,this.length=void 0,this.separator=void 0,this.style=void 0,this.seed=void 0;const{length:e,separator:i,dictionaries:n,style:l,seed:r}=a;this.dictionaries=n,this.separator=i,this.length=e,this.style=l,this.seed=r}generate(){if(!this.dictionaries)throw new Error('Cannot find any dictionary. Please provide at least one, or leave the "dictionary" field empty in the config object');if(this.length<=0)throw new Error("Invalid length provided");if(this.length>this.dictionaries.length)throw new Error(`The length cannot be bigger than the number of dictionaries.\nLength provided: ${this.length}. Number of dictionaries provided: ${this.dictionaries.length}`);return this.dictionaries.slice(0,this.length).reduce((a,e)=>{let i=e[Math.floor((this.seed?(n=this.seed,(a=>{a=1831565813+(a|=0)|0;let e=Math.imul(a^a>>>15,1|a);return e=e+Math.imul(e^e>>>7,61|e)^e,((e^e>>>14)>>>0)/4294967296})(n)):Math.random())*e.length)]||"";var n;if("lowerCase"===this.style)i=i.toLowerCase();else if("capital"===this.style){const[a,...e]=i.split("");i=a.toUpperCase()+e.join("")}else"upperCase"===this.style&&(i=i.toUpperCase());return a?`${a}${this.separator}${i}`:`${i}`},"")}}const i={separator:"_",dictionaries:[]};a.NumberDictionary=class{static generate(a={}){let e=a.min||1,i=a.max||999;if(a.length){const n=Math.pow(10,a.length);return e=n/10,i=n-1,[`${Math.floor(Math.random()*(i-e))+e}`]}return[`${Math.floor(Math.random()*(i-e))+e}`]}},a.adjectives=["able","above","absent","absolute","abstract","abundant","academic","acceptable","accepted","accessible","accurate","accused","active","actual","acute","added","additional","adequate","adjacent","administrative","adorable","advanced","adverse","advisory","aesthetic","afraid","aggregate","aggressive","agreeable","agreed","agricultural","alert","alive","alleged","allied","alone","alright","alternative","amateur","amazing","ambitious","amused","ancient","angry","annoyed","annual","anonymous","anxious","appalling","apparent","applicable","appropriate","arbitrary","architectural","armed","arrogant","artificial","artistic","ashamed","asleep","assistant","associated","atomic","attractive","automatic","autonomous","available","average","awake","aware","awful","awkward","back","bad","balanced","bare","basic","beautiful","beneficial","better","bewildered","big","binding","biological","bitter","bizarre","blank","blind","blonde","bloody","blushing","boiling","bold","bored","boring","bottom","brainy","brave","breakable","breezy","brief","bright","brilliant","broad","broken","bumpy","burning","busy","calm","capable","capitalist","careful","casual","causal","cautious","central","certain","changing","characteristic","charming","cheap","cheerful","chemical","chief","chilly","chosen","christian","chronic","chubby","circular","civic","civil","civilian","classic","classical","clean","clear","clever","clinical","close","closed","cloudy","clumsy","coastal","cognitive","coherent","cold","collective","colonial","colorful","colossal","coloured","colourful","combative","combined","comfortable","coming","commercial","common","communist","compact","comparable","comparative","compatible","competent","competitive","complete","complex","complicated","comprehensive","compulsory","conceptual","concerned","concrete","condemned","confident","confidential","confused","conscious","conservation","conservative","considerable","consistent","constant","constitutional","contemporary","content","continental","continued","continuing","continuous","controlled","controversial","convenient","conventional","convinced","convincing","cooing","cool","cooperative","corporate","correct","corresponding","costly","courageous","crazy","creative","creepy","criminal","critical","crooked","crowded","crucial","crude","cruel","cuddly","cultural","curious","curly","current","curved","cute","daily","damaged","damp","dangerous","dark","dead","deaf","deafening","dear","decent","decisive","deep","defeated","defensive","defiant","definite","deliberate","delicate","delicious","delighted","delightful","democratic","dependent","depressed","desirable","desperate","detailed","determined","developed","developing","devoted","different","difficult","digital","diplomatic","direct","dirty","disabled","disappointed","disastrous","disciplinary","disgusted","distant","distinct","distinctive","distinguished","disturbed","disturbing","diverse","divine","dizzy","domestic","dominant","double","doubtful","drab","dramatic","dreadful","driving","drunk","dry","dual","due","dull","dusty","dutch","dying","dynamic","eager","early","eastern","easy","economic","educational","eerie","effective","efficient","elaborate","elated","elderly","eldest","electoral","electric","electrical","electronic","elegant","eligible","embarrassed","embarrassing","emotional","empirical","empty","enchanting","encouraging","endless","energetic","enormous","enthusiastic","entire","entitled","envious","environmental","equal","equivalent","essential","established","estimated","ethical","ethnic","eventual","everyday","evident","evil","evolutionary","exact","excellent","exceptional","excess","excessive","excited","exciting","exclusive","existing","exotic","expected","expensive","experienced","experimental","explicit","extended","extensive","external","extra","extraordinary","extreme","exuberant","faint","fair","faithful","familiar","famous","fancy","fantastic","far","fascinating","fashionable","fast","fat","fatal","favourable","favourite","federal","fellow","female","feminist","few","fierce","filthy","final","financial","fine","firm","fiscal","fit","fixed","flaky","flat","flexible","fluffy","fluttering","flying","following","fond","foolish","foreign","formal","formidable","forthcoming","fortunate","forward","fragile","frail","frantic","free","frequent","fresh","friendly","frightened","front","frozen","full","fun","functional","fundamental","funny","furious","future","fuzzy","gastric","gay","general","generous","genetic","gentle","genuine","geographical","giant","gigantic","given","glad","glamorous","gleaming","global","glorious","golden","good","gorgeous","gothic","governing","graceful","gradual","grand","grateful","greasy","great","grieving","grim","gross","grotesque","growing","grubby","grumpy","guilty","handicapped","handsome","happy","hard","harsh","head","healthy","heavy","helpful","helpless","hidden","high","hilarious","hissing","historic","historical","hollow","holy","homeless","homely","hon","honest","horizontal","horrible","hostile","hot","huge","human","hungry","hurt","hushed","husky","icy","ideal","identical","ideological","ill","illegal","imaginative","immediate","immense","imperial","implicit","important","impossible","impressed","impressive","improved","inadequate","inappropriate","inc","inclined","increased","increasing","incredible","independent","indirect","individual","industrial","inevitable","influential","informal","inherent","initial","injured","inland","inner","innocent","innovative","inquisitive","instant","institutional","insufficient","intact","integral","integrated","intellectual","intelligent","intense","intensive","interested","interesting","interim","interior","intermediate","internal","international","intimate","invisible","involved","irrelevant","isolated","itchy","jealous","jittery","joint","jolly","joyous","judicial","juicy","junior","just","keen","key","kind","known","labour","large","late","latin","lazy","leading","left","legal","legislative","legitimate","lengthy","lesser","level","lexical","liable","liberal","light","like","likely","limited","linear","linguistic","liquid","literary","little","live","lively","living","local","logical","lonely","long","loose","lost","loud","lovely","low","loyal","ltd","lucky","mad","magic","magnetic","magnificent","main","major","male","mammoth","managerial","managing","manual","many","marginal","marine","marked","married","marvellous","marxist","mass","massive","mathematical","mature","maximum","mean","meaningful","mechanical","medical","medieval","melodic","melted","mental","mere","metropolitan","mid","middle","mighty","mild","military","miniature","minimal","minimum","ministerial","minor","miserable","misleading","missing","misty","mixed","moaning","mobile","moderate","modern","modest","molecular","monetary","monthly","moral","motionless","muddy","multiple","mushy","musical","mute","mutual","mysterious","naked","narrow","nasty","national","native","natural","naughty","naval","near","nearby","neat","necessary","negative","neighbouring","nervous","net","neutral","new","nice","noble","noisy","normal","northern","nosy","notable","novel","nuclear","numerous","nursing","nutritious","nutty","obedient","objective","obliged","obnoxious","obvious","occasional","occupational","odd","official","ok","okay","old","olympic","only","open","operational","opposite","optimistic","oral","ordinary","organic","organisational","original","orthodox","other","outdoor","outer","outrageous","outside","outstanding","overall","overseas","overwhelming","painful","pale","panicky","parallel","parental","parliamentary","partial","particular","passing","passive","past","patient","payable","peaceful","peculiar","perfect","permanent","persistent","personal","petite","philosophical","physical","plain","planned","plastic","pleasant","pleased","poised","polite","political","poor","popular","positive","possible","potential","powerful","practical","precious","precise","preferred","pregnant","preliminary","premier","prepared","present","presidential","pretty","previous","prickly","primary","prime","primitive","principal","printed","prior","private","probable","productive","professional","profitable","profound","progressive","prominent","promising","proper","proposed","prospective","protective","protestant","proud","provincial","psychiatric","psychological","public","puny","pure","purring","puzzled","quaint","qualified","quarrelsome","querulous","quick","quickest","quiet","quintessential","quixotic","racial","radical","rainy","random","rapid","rare","raspy","rational","ratty","raw","ready","real","realistic","rear","reasonable","recent","reduced","redundant","regional","registered","regular","regulatory","related","relative","relaxed","relevant","reliable","relieved","religious","reluctant","remaining","remarkable","remote","renewed","representative","repulsive","required","resident","residential","resonant","respectable","respective","responsible","resulting","retail","retired","revolutionary","rich","ridiculous","right","rigid","ripe","rising","rival","roasted","robust","rolling","romantic","rotten","rough","round","royal","rubber","rude","ruling","running","rural","sacred","sad","safe","salty","satisfactory","satisfied","scared","scary","scattered","scientific","scornful","scrawny","screeching","secondary","secret","secure","select","selected","selective","selfish","semantic","senior","sensible","sensitive","separate","serious","severe","sexual","shaggy","shaky","shallow","shared","sharp","sheer","shiny","shivering","shocked","short","shrill","shy","sick","significant","silent","silky","silly","similar","simple","single","skilled","skinny","sleepy","slight","slim","slimy","slippery","slow","small","smart","smiling","smoggy","smooth","social","socialist","soft","solar","sole","solid","sophisticated","sore","sorry","sound","sour","southern","soviet","spare","sparkling","spatial","special","specific","specified","spectacular","spicy","spiritual","splendid","spontaneous","sporting","spotless","spotty","square","squealing","stable","stale","standard","static","statistical","statutory","steady","steep","sticky","stiff","still","stingy","stormy","straight","straightforward","strange","strategic","strict","striking","striped","strong","structural","stuck","stupid","subjective","subsequent","substantial","subtle","successful","successive","sudden","sufficient","suitable","sunny","super","superb","superior","supporting","supposed","supreme","sure","surprised","surprising","surrounding","surviving","suspicious","sweet","swift","symbolic","sympathetic","systematic","tall","tame","tart","tasteless","tasty","technical","technological","teenage","temporary","tender","tense","terrible","territorial","testy","then","theoretical","thick","thin","thirsty","thorough","thoughtful","thoughtless","thundering","tight","tiny","tired","top","tory","total","tough","toxic","traditional","tragic","tremendous","tricky","tropical","troubled","typical","ugliest","ugly","ultimate","unable","unacceptable","unaware","uncertain","unchanged","uncomfortable","unconscious","underground","underlying","unemployed","uneven","unexpected","unfair","unfortunate","unhappy","uniform","uninterested","unique","united","universal","unknown","unlikely","unnecessary","unpleasant","unsightly","unusual","unwilling","upper","upset","uptight","urban","urgent","used","useful","useless","usual","vague","valid","valuable","variable","varied","various","varying","vast","verbal","vertical","very","vicarious","vicious","victorious","violent","visible","visiting","visual","vital","vitreous","vivacious","vivid","vocal","vocational","voiceless","voluminous","voluntary","vulnerable","wandering","warm","wasteful","watery","weak","wealthy","weary","wee","weekly","weird","welcome","well","western","wet","whispering","whole","wicked","wide","widespread","wild","wilful","willing","willowy","wily","wise","wispy","wittering","witty","wonderful","wooden","working","worldwide","worried","worrying","worthwhile","worthy","written","wrong","xenacious","xenial","xenogeneic","xenophobic","xeric","xerothermic","yabbering","yammering","yappiest","yappy","yawning","yearling","yearning","yeasty","yelling","yelping","yielding","yodelling","young","youngest","youthful","ytterbic","yucky","yummy","zany","zealous","zeroth","zestful","zesty","zippy","zonal","zoophagous","zygomorphic","zygotic"],a.animals=["aardvark","aardwolf","albatross","alligator","alpaca","amphibian","anaconda","angelfish","anglerfish","ant","anteater","antelope","antlion","ape","aphid","armadillo","asp","baboon","badger","bandicoot","barnacle","barracuda","basilisk","bass","bat","bear","beaver","bedbug","bee","beetle","bird","bison","blackbird","boa","boar","bobcat","bobolink","bonobo","booby","bovid","bug","butterfly","buzzard","camel","canid","canidae","capybara","cardinal","caribou","carp","cat","caterpillar","catfish","catshark","cattle","centipede","cephalopod","chameleon","cheetah","chickadee","chicken","chimpanzee","chinchilla","chipmunk","cicada","clam","clownfish","cobra","cockroach","cod","condor","constrictor","coral","cougar","cow","coyote","crab","crane","crawdad","crayfish","cricket","crocodile","crow","cuckoo","damselfly","deer","dingo","dinosaur","dog","dolphin","donkey","dormouse","dove","dragon","dragonfly","duck","eagle","earthworm","earwig","echidna","eel","egret","elephant","elk","emu","ermine","falcon","felidae","ferret","finch","firefly","fish","flamingo","flea","fly","flyingfish","fowl","fox","frog","galliform","gamefowl","gayal","gazelle","gecko","gerbil","gibbon","giraffe","goat","goldfish","goose","gopher","gorilla","grasshopper","grouse","guan","guanaco","guineafowl","gull","guppy","haddock","halibut","hamster","hare","harrier","hawk","hedgehog","heron","herring","hippopotamus","hookworm","hornet","horse","hoverfly","hummingbird","hyena","iguana","impala","jackal","jaguar","jay","jellyfish","junglefowl","kangaroo","kingfisher","kite","kiwi","koala","koi","krill","ladybug","lamprey","landfowl","lark","leech","lemming","lemur","leopard","leopon","limpet","lion","lizard","llama","lobster","locust","loon","louse","lungfish","lynx","macaw","mackerel","magpie","mammal","manatee","mandrill","marlin","marmoset","marmot","marsupial","marten","mastodon","meadowlark","meerkat","mink","minnow","mite","mockingbird","mole","mollusk","mongoose","monkey","moose","mosquito","moth","mouse","mule","muskox","narwhal","newt","nightingale","ocelot","octopus","opossum","orangutan","orca","ostrich","otter","owl","ox","panda","panther","parakeet","parrot","parrotfish","partridge","peacock","peafowl","pelican","penguin","perch","pheasant","pig","pigeon","pike","pinniped","piranha","planarian","platypus","pony","porcupine","porpoise","possum","prawn","primate","ptarmigan","puffin","puma","python","quail","quelea","quokka","rabbit","raccoon","rat","rattlesnake","raven","reindeer","reptile","rhinoceros","roadrunner","rodent","rook","rooster","roundworm","sailfish","salamander","salmon","sawfish","scallop","scorpion","seahorse","shark","sheep","shrew","shrimp","silkworm","silverfish","skink","skunk","sloth","slug","smelt","snail","snake","snipe","sole","sparrow","spider","spoonbill","squid","squirrel","starfish","stingray","stoat","stork","sturgeon","swallow","swan","swift","swordfish","swordtail","tahr","takin","tapir","tarantula","tarsier","termite","tern","thrush","tick","tiger","tiglon","toad","tortoise","toucan","trout","tuna","turkey","turtle","tyrannosaurus","unicorn","urial","vicuna","viper","vole","vulture","wallaby","walrus","warbler","wasp","weasel","whale","whippet","whitefish","wildcat","wildebeest","wildfowl","wolf","wolverine","wombat","woodpecker","worm","wren","xerinae","yak","zebra"],a.colors=["amaranth","amber","amethyst","apricot","aqua","aquamarine","azure","beige","black","blue","blush","bronze","brown","chocolate","coffee","copper","coral","crimson","cyan","emerald","fuchsia","gold","gray","green","harlequin","indigo","ivory","jade","lavender","lime","magenta","maroon","moccasin","olive","orange","peach","pink","plum","purple","red","rose","salmon","sapphire","scarlet","silver","tan","teal","tomato","turquoise","violet","white","yellow"],a.countries=["Afghanistan","Åland Islands","Albania","Algeria","American Samoa","Andorra","Angola","Anguilla","Antarctica","Antigua & Barbuda","Argentina","Armenia","Aruba","Ascension Island","Australia","Austria","Azerbaijan","Bahamas","Bahrain","Bangladesh","Barbados","Belarus","Belgium","Belize","Benin","Bermuda","Bhutan","Bolivia","Bosnia & Herzegovina","Botswana","Brazil","British Indian Ocean Territory","British Virgin Islands","Brunei","Bulgaria","Burkina Faso","Burundi","Cambodia","Cameroon","Canada","Canary Islands","Cape Verde","Caribbean Netherlands","Cayman Islands","Central African Republic","Ceuta & Melilla","Chad","Chile","China","Christmas Island","Cocos Islands","Colombia","Comoros","Congo","Cook Islands","Costa Rica","Côte d'Ivoire","Croatia","Cuba","Curaçao","Cyprus","Czechia","Denmark","Diego Garcia","Djibouti","Dominica","Dominican Republic","Ecuador","Egypt","El Salvador","Equatorial Guinea","Eritrea","Estonia","Ethiopia","Eurozone","Falkland Islands","Faroe Islands","Fiji","Finland","France","French Guiana","French Polynesia","French Southern Territories","Gabon","Gambia","Georgia","Germany","Ghana","Gibraltar","Greece","Greenland","Grenada","Guadeloupe","Guam","Guatemala","Guernsey","Guinea","Guinea-Bissau","Guyana","Haiti","Honduras","Hong Kong SAR China","Hungary","Iceland","India","Indonesia","Iran","Iraq","Ireland","Isle of Man","Israel","Italy","Jamaica","Japan","Jersey","Jordan","Kazakhstan","Kenya","Kiribati","Kosovo","Kuwait","Kyrgyzstan","Laos","Latvia","Lebanon","Lesotho","Liberia","Libya","Liechtenstein","Lithuania","Luxembourg","Macau SAR China","Macedonia","Madagascar","Malawi","Malaysia","Maldives","Mali","Malta","Marshall Islands","Martinique","Mauritania","Mauritius","Mayotte","Mexico","Micronesia","Moldova","Monaco","Mongolia","Montenegro","Montserrat","Morocco","Mozambique","Myanmar","Namibia","Nauru","Nepal","Netherlands","New Caledonia","New Zealand","Nicaragua","Niger","Nigeria","Niue","Norfolk Island","North Korea","Northern Mariana Islands","Norway","Oman","Pakistan","Palau","Palestinian Territories","Panama","Papua New Guinea","Paraguay","Peru","Philippines","Pitcairn Islands","Poland","Portugal","Puerto Rico","Qatar","Réunion","Romania","Russia","Rwanda","Samoa","San Marino","São Tomé & Príncipe","Saudi Arabia","Senegal","Serbia","Seychelles","Sierra Leone","Singapore","Sint Maarten","Slovakia","Slovenia","Solomon Islands","Somalia","South Africa","South Georgia & South Sandwich Islands","South Korea","South Sudan","Spain","Sri Lanka","St. Barthélemy","St. Helena","St. Kitts & Nevis","St. Lucia","St. Martin","St. Pierre & Miquelon","St. Vincent & Grenadines","Sudan","Suriname","Svalbard & Jan Mayen","Swaziland","Sweden","Switzerland","Syria","Taiwan","Tajikistan","Tanzania","Thailand","Timor-Leste","Togo","Tokelau","Tonga","Trinidad & Tobago","Tristan da Cunha","Tunisia","Turkey","Turkmenistan","Turks & Caicos Islands","Tuvalu","U.S. Outlying Islands","U.S. Virgin Islands","Uganda","Ukraine","United Arab Emirates","United Kingdom","United Nations","United States","Uruguay","Uzbekistan","Vanuatu","Vatican City","Venezuela","Vietnam","Wallis & Futuna","Western Sahara","Yemen","Zambia","Zimbabwe"],a.languages=["Akan","Amharic","Arabic","Assamese","Awadhi","Azerbaijani","Balochi","Belarusian","Bengali","Bhojpuri","Burmese","Cebuano","Chewa","Chhattisgarhi","Chittagonian","Czech","Deccan","Dhundhari","Dutch","English","French","Fula","Gan","German","Greek","Gujarati","Hakka","Haryanvi","Hausa","Hiligaynon","Hindi","Hmong","Hungarian","Igbo","Ilocano","Italian","Japanese","Javanese","Jin","Kannada","Kazakh","Khmer","Kinyarwanda","Kirundi","Konkani","Korean","Kurdish","Madurese","Magahi","Maithili","Malagasy","Malay","Malayalam","Mandarin","Marathi","Marwari","Min","Mossi","Nepali","Odia","Oromo","Pashto","Persian","Polish","Portuguese","Punjabi","Quechua","Romanian","Russian","Saraiki","Shona","Sindhi","Sinhala","Somali","Spanish","Sundanese","Swedish","Sylheti","Tagalog","Tamil","Telugu","Thai","Turkish","Turkmen","Ukrainian","Urdu","Uyghur","Uzbek","Vietnamese","Wu","Xhosa","Xiang","Yoruba","Yue","Zhuang","Zulu"],a.names=["Aaren","Aarika","Abagael","Abagail","Abbe","Abbey","Abbi","Abbie","Abby","Abbye","Abigael","Abigail","Abigale","Abra","Ada","Adah","Adaline","Adan","Adara","Adda","Addi","Addia","Addie","Addy","Adel","Adela","Adelaida","Adelaide","Adele","Adelheid","Adelice","Adelina","Adelind","Adeline","Adella","Adelle","Adena","Adey","Adi","Adiana","Adina","Adora","Adore","Adoree","Adorne","Adrea","Adria","Adriaens","Adrian","Adriana","Adriane","Adrianna","Adrianne","Adriena","Adrienne","Aeriel","Aeriela","Aeriell","Afton","Ag","Agace","Agata","Agatha","Agathe","Aggi","Aggie","Aggy","Agna","Agnella","Agnes","Agnese","Agnesse","Agneta","Agnola","Agretha","Aida","Aidan","Aigneis","Aila","Aile","Ailee","Aileen","Ailene","Ailey","Aili","Ailina","Ailis","Ailsun","Ailyn","Aime","Aimee","Aimil","Aindrea","Ainslee","Ainsley","Ainslie","Ajay","Alaine","Alameda","Alana","Alanah","Alane","Alanna","Alayne","Alberta","Albertina","Albertine","Albina","Alecia","Aleda","Aleece","Aleen","Alejandra","Alejandrina","Alena","Alene","Alessandra","Aleta","Alethea","Alex","Alexa","Alexandra","Alexandrina","Alexi","Alexia","Alexina","Alexine","Alexis","Alfi","Alfie","Alfreda","Alfy","Ali","Alia","Alica","Alice","Alicea","Alicia","Alida","Alidia","Alie","Alika","Alikee","Alina","Aline","Alis","Alisa","Alisha","Alison","Alissa","Alisun","Alix","Aliza","Alla","Alleen","Allegra","Allene","Alli","Allianora","Allie","Allina","Allis","Allison","Allissa","Allix","Allsun","Allx","Ally","Allyce","Allyn","Allys","Allyson","Alma","Almeda","Almeria","Almeta","Almira","Almire","Aloise","Aloisia","Aloysia","Alta","Althea","Alvera","Alverta","Alvina","Alvinia","Alvira","Alyce","Alyda","Alys","Alysa","Alyse","Alysia","Alyson","Alyss","Alyssa","Amabel","Amabelle","Amalea","Amalee","Amaleta","Amalia","Amalie","Amalita","Amalle","Amanda","Amandi","Amandie","Amandy","Amara","Amargo","Amata","Amber","Amberly","Ambur","Ame","Amelia","Amelie","Amelina","Ameline","Amelita","Ami","Amie","Amii","Amil","Amitie","Amity","Ammamaria","Amy","Amye","Ana","Anabal","Anabel","Anabella","Anabelle","Analiese","Analise","Anallese","Anallise","Anastasia","Anastasie","Anastassia","Anatola","Andee","Andeee","Anderea","Andi","Andie","Andra","Andrea","Andreana","Andree","Andrei","Andria","Andriana","Andriette","Andromache","Andy","Anestassia","Anet","Anett","Anetta","Anette","Ange","Angel","Angela","Angele","Angelia","Angelica","Angelika","Angelina","Angeline","Angelique","Angelita","Angelle","Angie","Angil","Angy","Ania","Anica","Anissa","Anita","Anitra","Anjanette","Anjela","Ann","Ann-marie","Anna","Anna-diana","Anna-diane","Anna-maria","Annabal","Annabel","Annabela","Annabell","Annabella","Annabelle","Annadiana","Annadiane","Annalee","Annaliese","Annalise","Annamaria","Annamarie","Anne","Anne-corinne","Anne-marie","Annecorinne","Anneliese","Annelise","Annemarie","Annetta","Annette","Anni","Annice","Annie","Annis","Annissa","Annmaria","Annmarie","Annnora","Annora","Anny","Anselma","Ansley","Anstice","Anthe","Anthea","Anthia","Anthiathia","Antoinette","Antonella","Antonetta","Antonia","Antonie","Antonietta","Antonina","Anya","Appolonia","April","Aprilette","Ara","Arabel","Arabela","Arabele","Arabella","Arabelle","Arda","Ardath","Ardeen","Ardelia","Ardelis","Ardella","Ardelle","Arden","Ardene","Ardenia","Ardine","Ardis","Ardisj","Ardith","Ardra","Ardyce","Ardys","Ardyth","Aretha","Ariadne","Ariana","Aridatha","Ariel","Ariela","Ariella","Arielle","Arlana","Arlee","Arleen","Arlen","Arlena","Arlene","Arleta","Arlette","Arleyne","Arlie","Arliene","Arlina","Arlinda","Arline","Arluene","Arly","Arlyn","Arlyne","Aryn","Ashely","Ashia","Ashien","Ashil","Ashla","Ashlan","Ashlee","Ashleigh","Ashlen","Ashley","Ashli","Ashlie","Ashly","Asia","Astra","Astrid","Astrix","Atalanta","Athena","Athene","Atlanta","Atlante","Auberta","Aubine","Aubree","Aubrette","Aubrey","Aubrie","Aubry","Audi","Audie","Audra","Audre","Audrey","Audrie","Audry","Audrye","Audy","Augusta","Auguste","Augustina","Augustine","Aundrea","Aura","Aurea","Aurel","Aurelea","Aurelia","Aurelie","Auria","Aurie","Aurilia","Aurlie","Auroora","Aurora","Aurore","Austin","Austina","Austine","Ava","Aveline","Averil","Averyl","Avie","Avis","Aviva","Avivah","Avril","Avrit","Ayn","Bab","Babara","Babb","Babbette","Babbie","Babette","Babita","Babs","Bambi","Bambie","Bamby","Barb","Barbabra","Barbara","Barbara-anne","Barbaraanne","Barbe","Barbee","Barbette","Barbey","Barbi","Barbie","Barbra","Barby","Bari","Barrie","Barry","Basia","Bathsheba","Batsheva","Bea","Beatrice","Beatrisa","Beatrix","Beatriz","Bebe","Becca","Becka","Becki","Beckie","Becky","Bee","Beilul","Beitris","Bekki","Bel","Belia","Belicia","Belinda","Belita","Bell","Bella","Bellanca","Belle","Bellina","Belva","Belvia","Bendite","Benedetta","Benedicta","Benedikta","Benetta","Benita","Benni","Bennie","Benny","Benoite","Berenice","Beret","Berget","Berna","Bernadene","Bernadette","Bernadina","Bernadine","Bernardina","Bernardine","Bernelle","Bernete","Bernetta","Bernette","Berni","Bernice","Bernie","Bernita","Berny","Berri","Berrie","Berry","Bert","Berta","Berte","Bertha","Berthe","Berti","Bertie","Bertina","Bertine","Berty","Beryl","Beryle","Bess","Bessie","Bessy","Beth","Bethanne","Bethany","Bethena","Bethina","Betsey","Betsy","Betta","Bette","Bette-ann","Betteann","Betteanne","Betti","Bettina","Bettine","Betty","Bettye","Beulah","Bev","Beverie","Beverlee","Beverley","Beverlie","Beverly","Bevvy","Bianca","Bianka","Bibbie","Bibby","Bibbye","Bibi","Biddie","Biddy","Bidget","Bili","Bill","Billi","Billie","Billy","Billye","Binni","Binnie","Binny","Bird","Birdie","Birgit","Birgitta","Blair","Blaire","Blake","Blakelee","Blakeley","Blanca","Blanch","Blancha","Blanche","Blinni","Blinnie","Blinny","Bliss","Blisse","Blithe","Blondell","Blondelle","Blondie","Blondy","Blythe","Bobbe","Bobbee","Bobbette","Bobbi","Bobbie","Bobby","Bobbye","Bobette","Bobina","Bobine","Bobinette","Bonita","Bonnee","Bonni","Bonnibelle","Bonnie","Bonny","Brana","Brandais","Brande","Brandea","Brandi","Brandice","Brandie","Brandise","Brandy","Breanne","Brear","Bree","Breena","Bren","Brena","Brenda","Brenn","Brenna","Brett","Bria","Briana","Brianna","Brianne","Bride","Bridget","Bridgette","Bridie","Brier","Brietta","Brigid","Brigida","Brigit","Brigitta","Brigitte","Brina","Briney","Brinn","Brinna","Briny","Brit","Brita","Britney","Britni","Britt","Britta","Brittan","Brittaney","Brittani","Brittany","Britte","Britteny","Brittne","Brittney","Brittni","Brook","Brooke","Brooks","Brunhilda","Brunhilde","Bryana","Bryn","Bryna","Brynn","Brynna","Brynne","Buffy","Bunni","Bunnie","Bunny","Cacilia","Cacilie","Cahra","Cairistiona","Caitlin","Caitrin","Cal","Calida","Calla","Calley","Calli","Callida","Callie","Cally","Calypso","Cam","Camala","Camel","Camella","Camellia","Cami","Camila","Camile","Camilla","Camille","Cammi","Cammie","Cammy","Candace","Candi","Candice","Candida","Candide","Candie","Candis","Candra","Candy","Caprice","Cara","Caralie","Caren","Carena","Caresa","Caressa","Caresse","Carey","Cari","Caria","Carie","Caril","Carilyn","Carin","Carina","Carine","Cariotta","Carissa","Carita","Caritta","Carla","Carlee","Carleen","Carlen","Carlene","Carley","Carlie","Carlin","Carlina","Carline","Carlita","Carlota","Carlotta","Carly","Carlye","Carlyn","Carlynn","Carlynne","Carma","Carmel","Carmela","Carmelia","Carmelina","Carmelita","Carmella","Carmelle","Carmen","Carmencita","Carmina","Carmine","Carmita","Carmon","Caro","Carol","Carol-jean","Carola","Carolan","Carolann","Carole","Carolee","Carolin","Carolina","Caroline","Caroljean","Carolyn","Carolyne","Carolynn","Caron","Carree","Carri","Carrie","Carrissa","Carroll","Carry","Cary","Caryl","Caryn","Casandra","Casey","Casi","Casie","Cass","Cassandra","Cassandre","Cassandry","Cassaundra","Cassey","Cassi","Cassie","Cassondra","Cassy","Catarina","Cate","Caterina","Catha","Catharina","Catharine","Cathe","Cathee","Catherin","Catherina","Catherine","Cathi","Cathie","Cathleen","Cathlene","Cathrin","Cathrine","Cathryn","Cathy","Cathyleen","Cati","Catie","Catina","Catlaina","Catlee","Catlin","Catrina","Catriona","Caty","Caye","Cayla","Cecelia","Cecil","Cecile","Ceciley","Cecilia","Cecilla","Cecily","Ceil","Cele","Celene","Celesta","Celeste","Celestia","Celestina","Celestine","Celestyn","Celestyna","Celia","Celie","Celina","Celinda","Celine","Celinka","Celisse","Celka","Celle","Cesya","Chad","Chanda","Chandal","Chandra","Channa","Chantal","Chantalle","Charil","Charin","Charis","Charissa","Charisse","Charita","Charity","Charla","Charlean","Charleen","Charlena","Charlene","Charline","Charlot","Charlotta","Charlotte","Charmain","Charmaine","Charmane","Charmian","Charmine","Charmion","Charo","Charyl","Chastity","Chelsae","Chelsea","Chelsey","Chelsie","Chelsy","Cher","Chere","Cherey","Cheri","Cherianne","Cherice","Cherida","Cherie","Cherilyn","Cherilynn","Cherin","Cherise","Cherish","Cherlyn","Cherri","Cherrita","Cherry","Chery","Cherye","Cheryl","Cheslie","Chiarra","Chickie","Chicky","Chiquia","Chiquita","Chlo","Chloe","Chloette","Chloris","Chris","Chrissie","Chrissy","Christa","Christabel","Christabella","Christal","Christalle","Christan","Christean","Christel","Christen","Christi","Christian","Christiana","Christiane","Christie","Christin","Christina","Christine","Christy","Christye","Christyna","Chrysa","Chrysler","Chrystal","Chryste","Chrystel","Cicely","Cicily","Ciel","Cilka","Cinda","Cindee","Cindelyn","Cinderella","Cindi","Cindie","Cindra","Cindy","Cinnamon","Cissiee","Cissy","Clair","Claire","Clara","Clarabelle","Clare","Claresta","Clareta","Claretta","Clarette","Clarey","Clari","Claribel","Clarice","Clarie","Clarinda","Clarine","Clarissa","Clarisse","Clarita","Clary","Claude","Claudelle","Claudetta","Claudette","Claudia","Claudie","Claudina","Claudine","Clea","Clem","Clemence","Clementia","Clementina","Clementine","Clemmie","Clemmy","Cleo","Cleopatra","Clerissa","Clio","Clo","Cloe","Cloris","Clotilda","Clovis","Codee","Codi","Codie","Cody","Coleen","Colene","Coletta","Colette","Colleen","Collen","Collete","Collette","Collie","Colline","Colly","Con","Concettina","Conchita","Concordia","Conni","Connie","Conny","Consolata","Constance","Constancia","Constancy","Constanta","Constantia","Constantina","Constantine","Consuela","Consuelo","Cookie","Cora","Corabel","Corabella","Corabelle","Coral","Coralie","Coraline","Coralyn","Cordelia","Cordelie","Cordey","Cordi","Cordie","Cordula","Cordy","Coreen","Corella","Corenda","Corene","Coretta","Corette","Corey","Cori","Corie","Corilla","Corina","Corine","Corinna","Corinne","Coriss","Corissa","Corliss","Corly","Cornela","Cornelia","Cornelle","Cornie","Corny","Correna","Correy","Corri","Corrianne","Corrie","Corrina","Corrine","Corrinne","Corry","Cortney","Cory","Cosetta","Cosette","Costanza","Courtenay","Courtnay","Courtney","Crin","Cris","Crissie","Crissy","Crista","Cristabel","Cristal","Cristen","Cristi","Cristie","Cristin","Cristina","Cristine","Cristionna","Cristy","Crysta","Crystal","Crystie","Cthrine","Cyb","Cybil","Cybill","Cymbre","Cynde","Cyndi","Cyndia","Cyndie","Cyndy","Cynthea","Cynthia","Cynthie","Cynthy","Dacey","Dacia","Dacie","Dacy","Dael","Daffi","Daffie","Daffy","Dagmar","Dahlia","Daile","Daisey","Daisi","Daisie","Daisy","Dale","Dalenna","Dalia","Dalila","Dallas","Daloris","Damara","Damaris","Damita","Dana","Danell","Danella","Danette","Dani","Dania","Danica","Danice","Daniela","Daniele","Daniella","Danielle","Danika","Danila","Danit","Danita","Danna","Danni","Dannie","Danny","Dannye","Danya","Danyelle","Danyette","Daphene","Daphna","Daphne","Dara","Darb","Darbie","Darby","Darcee","Darcey","Darci","Darcie","Darcy","Darda","Dareen","Darell","Darelle","Dari","Daria","Darice","Darla","Darleen","Darlene","Darline","Darlleen","Daron","Darrelle","Darryl","Darsey","Darsie","Darya","Daryl","Daryn","Dasha","Dasi","Dasie","Dasya","Datha","Daune","Daveen","Daveta","Davida","Davina","Davine","Davita","Dawn","Dawna","Dayle","Dayna","Ddene","De","Deana","Deane","Deanna","Deanne","Deb","Debbi","Debbie","Debby","Debee","Debera","Debi","Debor","Debora","Deborah","Debra","Dede","Dedie","Dedra","Dee","Deeann","Deeanne","Deedee","Deena","Deerdre","Deeyn","Dehlia","Deidre","Deina","Deirdre","Del","Dela","Delcina","Delcine","Delia","Delila","Delilah","Delinda","Dell","Della","Delly","Delora","Delores","Deloria","Deloris","Delphine","Delphinia","Demeter","Demetra","Demetria","Demetris","Dena","Deni","Denice","Denise","Denna","Denni","Dennie","Denny","Deny","Denys","Denyse","Deonne","Desdemona","Desirae","Desiree","Desiri","Deva","Devan","Devi","Devin","Devina","Devinne","Devon","Devondra","Devonna","Devonne","Devora","Di","Diahann","Dian","Diana","Diandra","Diane","Diane-marie","Dianemarie","Diann","Dianna","Dianne","Diannne","Didi","Dido","Diena","Dierdre","Dina","Dinah","Dinnie","Dinny","Dion","Dione","Dionis","Dionne","Dita","Dix","Dixie","Dniren","Dode","Dodi","Dodie","Dody","Doe","Doll","Dolley","Dolli","Dollie","Dolly","Dolores","Dolorita","Doloritas","Domeniga","Dominga","Domini","Dominica","Dominique","Dona","Donella","Donelle","Donetta","Donia","Donica","Donielle","Donna","Donnamarie","Donni","Donnie","Donny","Dora","Doralia","Doralin","Doralyn","Doralynn","Doralynne","Dore","Doreen","Dorelia","Dorella","Dorelle","Dorena","Dorene","Doretta","Dorette","Dorey","Dori","Doria","Dorian","Dorice","Dorie","Dorine","Doris","Dorisa","Dorise","Dorita","Doro","Dorolice","Dorolisa","Dorotea","Doroteya","Dorothea","Dorothee","Dorothy","Dorree","Dorri","Dorrie","Dorris","Dorry","Dorthea","Dorthy","Dory","Dosi","Dot","Doti","Dotti","Dottie","Dotty","Dre","Dreddy","Dredi","Drona","Dru","Druci","Drucie","Drucill","Drucy","Drusi","Drusie","Drusilla","Drusy","Dulce","Dulcea","Dulci","Dulcia","Dulciana","Dulcie","Dulcine","Dulcinea","Dulcy","Dulsea","Dusty","Dyan","Dyana","Dyane","Dyann","Dyanna","Dyanne","Dyna","Dynah","Eachelle","Eada","Eadie","Eadith","Ealasaid","Eartha","Easter","Eba","Ebba","Ebonee","Ebony","Eda","Eddi","Eddie","Eddy","Ede","Edee","Edeline","Eden","Edi","Edie","Edin","Edita","Edith","Editha","Edithe","Ediva","Edna","Edwina","Edy","Edyth","Edythe","Effie","Eileen","Eilis","Eimile","Eirena","Ekaterina","Elaina","Elaine","Elana","Elane","Elayne","Elberta","Elbertina","Elbertine","Eleanor","Eleanora","Eleanore","Electra","Eleen","Elena","Elene","Eleni","Elenore","Eleonora","Eleonore","Elfie","Elfreda","Elfrida","Elfrieda","Elga","Elianora","Elianore","Elicia","Elie","Elinor","Elinore","Elisa","Elisabet","Elisabeth","Elisabetta","Elise","Elisha","Elissa","Elita","Eliza","Elizabet","Elizabeth","Elka","Elke","Ella","Elladine","Elle","Ellen","Ellene","Ellette","Elli","Ellie","Ellissa","Elly","Ellyn","Ellynn","Elmira","Elna","Elnora","Elnore","Eloisa","Eloise","Elonore","Elora","Elsa","Elsbeth","Else","Elset","Elsey","Elsi","Elsie","Elsinore","Elspeth","Elsy","Elva","Elvera","Elvina","Elvira","Elwira","Elyn","Elyse","Elysee","Elysha","Elysia","Elyssa","Em","Ema","Emalee","Emalia","Emelda","Emelia","Emelina","Emeline","Emelita","Emelyne","Emera","Emilee","Emili","Emilia","Emilie","Emiline","Emily","Emlyn","Emlynn","Emlynne","Emma","Emmalee","Emmaline","Emmalyn","Emmalynn","Emmalynne","Emmeline","Emmey","Emmi","Emmie","Emmy","Emmye","Emogene","Emyle","Emylee","Engracia","Enid","Enrica","Enrichetta","Enrika","Enriqueta","Eolanda","Eolande","Eran","Erda","Erena","Erica","Ericha","Ericka","Erika","Erin","Erina","Erinn","Erinna","Erma","Ermengarde","Ermentrude","Ermina","Erminia","Erminie","Erna","Ernaline","Ernesta","Ernestine","Ertha","Eryn","Esma","Esmaria","Esme","Esmeralda","Essa","Essie","Essy","Esta","Estel","Estele","Estell","Estella","Estelle","Ester","Esther","Estrella","Estrellita","Ethel","Ethelda","Ethelin","Ethelind","Etheline","Ethelyn","Ethyl","Etta","Etti","Ettie","Etty","Eudora","Eugenia","Eugenie","Eugine","Eula","Eulalie","Eunice","Euphemia","Eustacia","Eva","Evaleen","Evangelia","Evangelin","Evangelina","Evangeline","Evania","Evanne","Eve","Eveleen","Evelina","Eveline","Evelyn","Evey","Evie","Evita","Evonne","Evvie","Evvy","Evy","Eyde","Eydie","Ezmeralda","Fae","Faina","Faith","Fallon","Fan","Fanchette","Fanchon","Fancie","Fancy","Fanechka","Fania","Fanni","Fannie","Fanny","Fanya","Fara","Farah","Farand","Farica","Farra","Farrah","Farrand","Faun","Faunie","Faustina","Faustine","Fawn","Fawne","Fawnia","Fay","Faydra","Faye","Fayette","Fayina","Fayre","Fayth","Faythe","Federica","Fedora","Felecia","Felicdad","Felice","Felicia","Felicity","Felicle","Felipa","Felisha","Felita","Feliza","Fenelia","Feodora","Ferdinanda","Ferdinande","Fern","Fernanda","Fernande","Fernandina","Ferne","Fey","Fiann","Fianna","Fidela","Fidelia","Fidelity","Fifi","Fifine","Filia","Filide","Filippa","Fina","Fiona","Fionna","Fionnula","Fiorenze","Fleur","Fleurette","Flo","Flor","Flora","Florance","Flore","Florella","Florence","Florencia","Florentia","Florenza","Florette","Flori","Floria","Florida","Florie","Florina","Florinda","Floris","Florri","Florrie","Florry","Flory","Flossi","Flossie","Flossy","Flss","Fran","Francene","Frances","Francesca","Francine","Francisca","Franciska","Francoise","Francyne","Frank","Frankie","Franky","Franni","Frannie","Franny","Frayda","Fred","Freda","Freddi","Freddie","Freddy","Fredelia","Frederica","Fredericka","Frederique","Fredi","Fredia","Fredra","Fredrika","Freida","Frieda","Friederike","Fulvia","Gabbey","Gabbi","Gabbie","Gabey","Gabi","Gabie","Gabriel","Gabriela","Gabriell","Gabriella","Gabrielle","Gabriellia","Gabrila","Gaby","Gae","Gael","Gail","Gale","Galina","Garland","Garnet","Garnette","Gates","Gavra","Gavrielle","Gay","Gaye","Gayel","Gayla","Gayle","Gayleen","Gaylene","Gaynor","Gelya","Gena","Gene","Geneva","Genevieve","Genevra","Genia","Genna","Genni","Gennie","Gennifer","Genny","Genovera","Genvieve","George","Georgeanna","Georgeanne","Georgena","Georgeta","Georgetta","Georgette","Georgia","Georgiana","Georgianna","Georgianne","Georgie","Georgina","Georgine","Geralda","Geraldine","Gerda","Gerhardine","Geri","Gerianna","Gerianne","Gerladina","Germain","Germaine","Germana","Gerri","Gerrie","Gerrilee","Gerry","Gert","Gerta","Gerti","Gertie","Gertrud","Gertruda","Gertrude","Gertrudis","Gerty","Giacinta","Giana","Gianina","Gianna","Gigi","Gilberta","Gilberte","Gilbertina","Gilbertine","Gilda","Gilemette","Gill","Gillan","Gilli","Gillian","Gillie","Gilligan","Gilly","Gina","Ginelle","Ginevra","Ginger","Ginni","Ginnie","Ginnifer","Ginny","Giorgia","Giovanna","Gipsy","Giralda","Gisela","Gisele","Gisella","Giselle","Giuditta","Giulia","Giulietta","Giustina","Gizela","Glad","Gladi","Gladys","Gleda","Glen","Glenda","Glenine","Glenn","Glenna","Glennie","Glennis","Glori","Gloria","Gloriana","Gloriane","Glory","Glyn","Glynda","Glynis","Glynnis","Gnni","Godiva","Golda","Goldarina","Goldi","Goldia","Goldie","Goldina","Goldy","Grace","Gracia","Gracie","Grata","Gratia","Gratiana","Gray","Grayce","Grazia","Greer","Greta","Gretal","Gretchen","Grete","Gretel","Grethel","Gretna","Gretta","Grier","Griselda","Grissel","Guendolen","Guenevere","Guenna","Guglielma","Gui","Guillema","Guillemette","Guinevere","Guinna","Gunilla","Gus","Gusella","Gussi","Gussie","Gussy","Gusta","Gusti","Gustie","Gusty","Gwen","Gwendolen","Gwendolin","Gwendolyn","Gweneth","Gwenette","Gwenneth","Gwenni","Gwennie","Gwenny","Gwenora","Gwenore","Gwyn","Gwyneth","Gwynne","Gypsy","Hadria","Hailee","Haily","Haleigh","Halette","Haley","Hali","Halie","Halimeda","Halley","Halli","Hallie","Hally","Hana","Hanna","Hannah","Hanni","Hannie","Hannis","Hanny","Happy","Harlene","Harley","Harli","Harlie","Harmonia","Harmonie","Harmony","Harri","Harrie","Harriet","Harriett","Harrietta","Harriette","Harriot","Harriott","Hatti","Hattie","Hatty","Hayley","Hazel","Heath","Heather","Heda","Hedda","Heddi","Heddie","Hedi","Hedvig","Hedvige","Hedwig","Hedwiga","Hedy","Heida","Heidi","Heidie","Helaina","Helaine","Helen","Helen-elizabeth","Helena","Helene","Helenka","Helga","Helge","Helli","Heloise","Helsa","Helyn","Hendrika","Henka","Henrie","Henrieta","Henrietta","Henriette","Henryetta","Hephzibah","Hermia","Hermina","Hermine","Herminia","Hermione","Herta","Hertha","Hester","Hesther","Hestia","Hetti","Hettie","Hetty","Hilary","Hilda","Hildagard","Hildagarde","Hilde","Hildegaard","Hildegarde","Hildy","Hillary","Hilliary","Hinda","Holli","Hollie","Holly","Holly-anne","Hollyanne","Honey","Honor","Honoria","Hope","Horatia","Hortense","Hortensia","Hulda","Hyacinth","Hyacintha","Hyacinthe","Hyacinthia","Hyacinthie","Hynda","Ianthe","Ibbie","Ibby","Ida","Idalia","Idalina","Idaline","Idell","Idelle","Idette","Ileana","Ileane","Ilene","Ilise","Ilka","Illa","Ilsa","Ilse","Ilysa","Ilyse","Ilyssa","Imelda","Imogen","Imogene","Imojean","Ina","Indira","Ines","Inesita","Inessa","Inez","Inga","Ingaberg","Ingaborg","Inge","Ingeberg","Ingeborg","Inger","Ingrid","Ingunna","Inna","Iolande","Iolanthe","Iona","Iormina","Ira","Irena","Irene","Irina","Iris","Irita","Irma","Isa","Isabel","Isabelita","Isabella","Isabelle","Isadora","Isahella","Iseabal","Isidora","Isis","Isobel","Issi","Issie","Issy","Ivett","Ivette","Ivie","Ivonne","Ivory","Ivy","Izabel","Jacenta","Jacinda","Jacinta","Jacintha","Jacinthe","Jackelyn","Jacki","Jackie","Jacklin","Jacklyn","Jackquelin","Jackqueline","Jacky","Jaclin","Jaclyn","Jacquelin","Jacqueline","Jacquelyn","Jacquelynn","Jacquenetta","Jacquenette","Jacquetta","Jacquette","Jacqui","Jacquie","Jacynth","Jada","Jade","Jaime","Jaimie","Jaine","Jami","Jamie","Jamima","Jammie","Jan","Jana","Janaya","Janaye","Jandy","Jane","Janean","Janeczka","Janeen","Janel","Janela","Janella","Janelle","Janene","Janenna","Janessa","Janet","Janeta","Janetta","Janette","Janeva","Janey","Jania","Janice","Janie","Janifer","Janina","Janine","Janis","Janith","Janka","Janna","Jannel","Jannelle","Janot","Jany","Jaquelin","Jaquelyn","Jaquenetta","Jaquenette","Jaquith","Jasmin","Jasmina","Jasmine","Jayme","Jaymee","Jayne","Jaynell","Jazmin","Jean","Jeana","Jeane","Jeanelle","Jeanette","Jeanie","Jeanine","Jeanna","Jeanne","Jeannette","Jeannie","Jeannine","Jehanna","Jelene","Jemie","Jemima","Jemimah","Jemmie","Jemmy","Jen","Jena","Jenda","Jenelle","Jeni","Jenica","Jeniece","Jenifer","Jeniffer","Jenilee","Jenine","Jenn","Jenna","Jennee","Jennette","Jenni","Jennica","Jennie","Jennifer","Jennilee","Jennine","Jenny","Jeralee","Jere","Jeri","Jermaine","Jerrie","Jerrilee","Jerrilyn","Jerrine","Jerry","Jerrylee","Jess","Jessa","Jessalin","Jessalyn","Jessamine","Jessamyn","Jesse","Jesselyn","Jessi","Jessica","Jessie","Jessika","Jessy","Jewel","Jewell","Jewelle","Jill","Jillana","Jillane","Jillayne","Jilleen","Jillene","Jilli","Jillian","Jillie","Jilly","Jinny","Jo","Jo-ann","Jo-anne","Joan","Joana","Joane","Joanie","Joann","Joanna","Joanne","Joannes","Jobey","Jobi","Jobie","Jobina","Joby","Jobye","Jobyna","Jocelin","Joceline","Jocelyn","Jocelyne","Jodee","Jodi","Jodie","Jody","Joeann","Joela","Joelie","Joell","Joella","Joelle","Joellen","Joelly","Joellyn","Joelynn","Joete","Joey","Johanna","Johannah","Johna","Johnath","Johnette","Johnna","Joice","Jojo","Jolee","Joleen","Jolene","Joletta","Joli","Jolie","Joline","Joly","Jolyn","Jolynn","Jonell","Joni","Jonie","Jonis","Jordain","Jordan","Jordana","Jordanna","Jorey","Jori","Jorie","Jorrie","Jorry","Joscelin","Josee","Josefa","Josefina","Josepha","Josephina","Josephine","Josey","Josi","Josie","Josselyn","Josy","Jourdan","Joy","Joya","Joyan","Joyann","Joyce","Joycelin","Joye","Jsandye","Juana","Juanita","Judi","Judie","Judith","Juditha","Judy","Judye","Juieta","Julee","Juli","Julia","Juliana","Juliane","Juliann","Julianna","Julianne","Julie","Julienne","Juliet","Julieta","Julietta","Juliette","Julina","Juline","Julissa","Julita","June","Junette","Junia","Junie","Junina","Justina","Justine","Justinn","Jyoti","Kacey","Kacie","Kacy","Kaela","Kai","Kaia","Kaila","Kaile","Kailey","Kaitlin","Kaitlyn","Kaitlynn","Kaja","Kakalina","Kala","Kaleena","Kali","Kalie","Kalila","Kalina","Kalinda","Kalindi","Kalli","Kally","Kameko","Kamila","Kamilah","Kamillah","Kandace","Kandy","Kania","Kanya","Kara","Kara-lynn","Karalee","Karalynn","Kare","Karee","Karel","Karen","Karena","Kari","Karia","Karie","Karil","Karilynn","Karin","Karina","Karine","Kariotta","Karisa","Karissa","Karita","Karla","Karlee","Karleen","Karlen","Karlene","Karlie","Karlotta","Karlotte","Karly","Karlyn","Karmen","Karna","Karol","Karola","Karole","Karolina","Karoline","Karoly","Karon","Karrah","Karrie","Karry","Kary","Karyl","Karylin","Karyn","Kasey","Kass","Kassandra","Kassey","Kassi","Kassia","Kassie","Kat","Kata","Katalin","Kate","Katee","Katerina","Katerine","Katey","Kath","Katha","Katharina","Katharine","Katharyn","Kathe","Katherina","Katherine","Katheryn","Kathi","Kathie","Kathleen","Kathlin","Kathrine","Kathryn","Kathryne","Kathy","Kathye","Kati","Katie","Katina","Katine","Katinka","Katleen","Katlin","Katrina","Katrine","Katrinka","Katti","Kattie","Katuscha","Katusha","Katy","Katya","Kay","Kaycee","Kaye","Kayla","Kayle","Kaylee","Kayley","Kaylil","Kaylyn","Keeley","Keelia","Keely","Kelcey","Kelci","Kelcie","Kelcy","Kelila","Kellen","Kelley","Kelli","Kellia","Kellie","Kellina","Kellsie","Kelly","Kellyann","Kelsey","Kelsi","Kelsy","Kendra","Kendre","Kenna","Keri","Keriann","Kerianne","Kerri","Kerrie","Kerrill","Kerrin","Kerry","Kerstin","Kesley","Keslie","Kessia","Kessiah","Ketti","Kettie","Ketty","Kevina","Kevyn","Ki","Kiah","Kial","Kiele","Kiersten","Kikelia","Kiley","Kim","Kimberlee","Kimberley","Kimberli","Kimberly","Kimberlyn","Kimbra","Kimmi","Kimmie","Kimmy","Kinna","Kip","Kipp","Kippie","Kippy","Kira","Kirbee","Kirbie","Kirby","Kiri","Kirsten","Kirsteni","Kirsti","Kirstin","Kirstyn","Kissee","Kissiah","Kissie","Kit","Kitti","Kittie","Kitty","Kizzee","Kizzie","Klara","Klarika","Klarrisa","Konstance","Konstanze","Koo","Kora","Koral","Koralle","Kordula","Kore","Korella","Koren","Koressa","Kori","Korie","Korney","Korrie","Korry","Kris","Krissie","Krissy","Krista","Kristal","Kristan","Kriste","Kristel","Kristen","Kristi","Kristien","Kristin","Kristina","Kristine","Kristy","Kristyn","Krysta","Krystal","Krystalle","Krystle","Krystyna","Kyla","Kyle","Kylen","Kylie","Kylila","Kylynn","Kym","Kynthia","Kyrstin","Lacee","Lacey","Lacie","Lacy","Ladonna","Laetitia","Laina","Lainey","Lana","Lanae","Lane","Lanette","Laney","Lani","Lanie","Lanita","Lanna","Lanni","Lanny","Lara","Laraine","Lari","Larina","Larine","Larisa","Larissa","Lark","Laryssa","Latashia","Latia","Latisha","Latrena","Latrina","Laura","Lauraine","Laural","Lauralee","Laure","Lauree","Laureen","Laurel","Laurella","Lauren","Laurena","Laurene","Lauretta","Laurette","Lauri","Laurianne","Laurice","Laurie","Lauryn","Lavena","Laverna","Laverne","Lavina","Lavinia","Lavinie","Layla","Layne","Layney","Lea","Leah","Leandra","Leann","Leanna","Leanor","Leanora","Lebbie","Leda","Lee","Leeann","Leeanne","Leela","Leelah","Leena","Leesa","Leese","Legra","Leia","Leigh","Leigha","Leila","Leilah","Leisha","Lela","Lelah","Leland","Lelia","Lena","Lenee","Lenette","Lenka","Lenna","Lenora","Lenore","Leodora","Leoine","Leola","Leoline","Leona","Leonanie","Leone","Leonelle","Leonie","Leonora","Leonore","Leontine","Leontyne","Leora","Leshia","Lesley","Lesli","Leslie","Lesly","Lesya","Leta","Lethia","Leticia","Letisha","Letitia","Letizia","Letta","Letti","Lettie","Letty","Lexi","Lexie","Lexine","Lexis","Lexy","Leyla","Lezlie","Lia","Lian","Liana","Liane","Lianna","Lianne","Lib","Libbey","Libbi","Libbie","Libby","Licha","Lida","Lidia","Liesa","Lil","Lila","Lilah","Lilas","Lilia","Lilian","Liliane","Lilias","Lilith","Lilla","Lilli","Lillian","Lillis","Lilllie","Lilly","Lily","Lilyan","Lin","Lina","Lind","Linda","Lindi","Lindie","Lindsay","Lindsey","Lindsy","Lindy","Linea","Linell","Linet","Linette","Linn","Linnea","Linnell","Linnet","Linnie","Linzy","Lira","Lisa","Lisabeth","Lisbeth","Lise","Lisetta","Lisette","Lisha","Lishe","Lissa","Lissi","Lissie","Lissy","Lita","Liuka","Liv","Liva","Livia","Livvie","Livvy","Livvyy","Livy","Liz","Liza","Lizabeth","Lizbeth","Lizette","Lizzie","Lizzy","Loella","Lois","Loise","Lola","Loleta","Lolita","Lolly","Lona","Lonee","Loni","Lonna","Lonni","Lonnie","Lora","Lorain","Loraine","Loralee","Loralie","Loralyn","Loree","Loreen","Lorelei","Lorelle","Loren","Lorena","Lorene","Lorenza","Loretta","Lorette","Lori","Loria","Lorianna","Lorianne","Lorie","Lorilee","Lorilyn","Lorinda","Lorine","Lorita","Lorna","Lorne","Lorraine","Lorrayne","Lorri","Lorrie","Lorrin","Lorry","Lory","Lotta","Lotte","Lotti","Lottie","Lotty","Lou","Louella","Louisa","Louise","Louisette","Loutitia","Lu","Luce","Luci","Lucia","Luciana","Lucie","Lucienne","Lucila","Lucilia","Lucille","Lucina","Lucinda","Lucine","Lucita","Lucky","Lucretia","Lucy","Ludovika","Luella","Luelle","Luisa","Luise","Lula","Lulita","Lulu","Lura","Lurette","Lurleen","Lurlene","Lurline","Lusa","Luz","Lyda","Lydia","Lydie","Lyn","Lynda","Lynde","Lyndel","Lyndell","Lyndsay","Lyndsey","Lyndsie","Lyndy","Lynea","Lynelle","Lynett","Lynette","Lynn","Lynna","Lynne","Lynnea","Lynnell","Lynnelle","Lynnet","Lynnett","Lynnette","Lynsey","Lyssa","Mab","Mabel","Mabelle","Mable","Mada","Madalena","Madalyn","Maddalena","Maddi","Maddie","Maddy","Madel","Madelaine","Madeleine","Madelena","Madelene","Madelin","Madelina","Madeline","Madella","Madelle","Madelon","Madelyn","Madge","Madlen","Madlin","Madonna","Mady","Mae","Maegan","Mag","Magda","Magdaia","Magdalen","Magdalena","Magdalene","Maggee","Maggi","Maggie","Maggy","Mahala","Mahalia","Maia","Maible","Maiga","Maighdiln","Mair","Maire","Maisey","Maisie","Maitilde","Mala","Malanie","Malena","Malia","Malina","Malinda","Malinde","Malissa","Malissia","Mallissa","Mallorie","Mallory","Malorie","Malory","Malva","Malvina","Malynda","Mame","Mamie","Manda","Mandi","Mandie","Mandy","Manon","Manya","Mara","Marabel","Marcela","Marcelia","Marcella","Marcelle","Marcellina","Marcelline","Marchelle","Marci","Marcia","Marcie","Marcile","Marcille","Marcy","Mareah","Maren","Marena","Maressa","Marga","Margalit","Margalo","Margaret","Margareta","Margarete","Margaretha","Margarethe","Margaretta","Margarette","Margarita","Margaux","Marge","Margeaux","Margery","Marget","Margette","Margi","Margie","Margit","Margo","Margot","Margret","Marguerite","Margy","Mari","Maria","Mariam","Marian","Mariana","Mariann","Marianna","Marianne","Maribel","Maribelle","Maribeth","Marice","Maridel","Marie","Marie-ann","Marie-jeanne","Marieann","Mariejeanne","Mariel","Mariele","Marielle","Mariellen","Marietta","Mariette","Marigold","Marijo","Marika","Marilee","Marilin","Marillin","Marilyn","Marin","Marina","Marinna","Marion","Mariquilla","Maris","Marisa","Mariska","Marissa","Marita","Maritsa","Mariya","Marj","Marja","Marje","Marji","Marjie","Marjorie","Marjory","Marjy","Marketa","Marla","Marlane","Marleah","Marlee","Marleen","Marlena","Marlene","Marley","Marlie","Marline","Marlo","Marlyn","Marna","Marne","Marney","Marni","Marnia","Marnie","Marquita","Marrilee","Marris","Marrissa","Marsha","Marsiella","Marta","Martelle","Martguerita","Martha","Marthe","Marthena","Marti","Martica","Martie","Martina","Martita","Marty","Martynne","Mary","Marya","Maryann","Maryanna","Maryanne","Marybelle","Marybeth","Maryellen","Maryjane","Maryjo","Maryl","Marylee","Marylin","Marylinda","Marylou","Marylynne","Maryrose","Marys","Marysa","Masha","Matelda","Mathilda","Mathilde","Matilda","Matilde","Matti","Mattie","Matty","Maud","Maude","Maudie","Maura","Maure","Maureen","Maureene","Maurene","Maurine","Maurise","Maurita","Maurizia","Mavis","Mavra","Max","Maxi","Maxie","Maxine","Maxy","May","Maybelle","Maye","Mead","Meade","Meagan","Meaghan","Meara","Mechelle","Meg","Megan","Megen","Meggi","Meggie","Meggy","Meghan","Meghann","Mehetabel","Mei","Mel","Mela","Melamie","Melania","Melanie","Melantha","Melany","Melba","Melesa","Melessa","Melicent","Melina","Melinda","Melinde","Melisa","Melisande","Melisandra","Melisenda","Melisent","Melissa","Melisse","Melita","Melitta","Mella","Melli","Mellicent","Mellie","Mellisa","Mellisent","Melloney","Melly","Melodee","Melodie","Melody","Melonie","Melony","Melosa","Melva","Mercedes","Merci","Mercie","Mercy","Meredith","Meredithe","Meridel","Meridith","Meriel","Merilee","Merilyn","Meris","Merissa","Merl","Merla","Merle","Merlina","Merline","Merna","Merola","Merralee","Merridie","Merrie","Merrielle","Merrile","Merrilee","Merrili","Merrill","Merrily","Merry","Mersey","Meryl","Meta","Mia","Micaela","Michaela","Michaelina","Michaeline","Michaella","Michal","Michel","Michele","Michelina","Micheline","Michell","Michelle","Micki","Mickie","Micky","Midge","Mignon","Mignonne","Miguela","Miguelita","Mikaela","Mil","Mildred","Mildrid","Milena","Milicent","Milissent","Milka","Milli","Millicent","Millie","Millisent","Milly","Milzie","Mimi","Min","Mina","Minda","Mindy","Minerva","Minetta","Minette","Minna","Minnaminnie","Minne","Minni","Minnie","Minnnie","Minny","Minta","Miquela","Mira","Mirabel","Mirabella","Mirabelle","Miran","Miranda","Mireielle","Mireille","Mirella","Mirelle","Miriam","Mirilla","Mirna","Misha","Missie","Missy","Misti","Misty","Mitzi","Modesta","Modestia","Modestine","Modesty","Moina","Moira","Moll","Mollee","Molli","Mollie","Molly","Mommy","Mona","Monah","Monica","Monika","Monique","Mora","Moreen","Morena","Morgan","Morgana","Morganica","Morganne","Morgen","Moria","Morissa","Morna","Moselle","Moyna","Moyra","Mozelle","Muffin","Mufi","Mufinella","Muire","Mureil","Murial","Muriel","Murielle","Myra","Myrah","Myranda","Myriam","Myrilla","Myrle","Myrlene","Myrna","Myrta","Myrtia","Myrtice","Myrtie","Myrtle","Nada","Nadean","Nadeen","Nadia","Nadine","Nadiya","Nady","Nadya","Nalani","Nan","Nana","Nananne","Nance","Nancee","Nancey","Nanci","Nancie","Nancy","Nanete","Nanette","Nani","Nanice","Nanine","Nannette","Nanni","Nannie","Nanny","Nanon","Naoma","Naomi","Nara","Nari","Nariko","Nat","Nata","Natala","Natalee","Natalie","Natalina","Nataline","Natalya","Natasha","Natassia","Nathalia","Nathalie","Natividad","Natka","Natty","Neala","Neda","Nedda","Nedi","Neely","Neila","Neile","Neilla","Neille","Nelia","Nelie","Nell","Nelle","Nelli","Nellie","Nelly","Nerissa","Nerita","Nert","Nerta","Nerte","Nerti","Nertie","Nerty","Nessa","Nessi","Nessie","Nessy","Nesta","Netta","Netti","Nettie","Nettle","Netty","Nevsa","Neysa","Nichol","Nichole","Nicholle","Nicki","Nickie","Nicky","Nicol","Nicola","Nicole","Nicolea","Nicolette","Nicoli","Nicolina","Nicoline","Nicolle","Nikaniki","Nike","Niki","Nikki","Nikkie","Nikoletta","Nikolia","Nina","Ninetta","Ninette","Ninnetta","Ninnette","Ninon","Nissa","Nisse","Nissie","Nissy","Nita","Nixie","Noami","Noel","Noelani","Noell","Noella","Noelle","Noellyn","Noelyn","Noemi","Nola","Nolana","Nolie","Nollie","Nomi","Nona","Nonah","Noni","Nonie","Nonna","Nonnah","Nora","Norah","Norean","Noreen","Norene","Norina","Norine","Norma","Norri","Norrie","Norry","Novelia","Nydia","Nyssa","Octavia","Odele","Odelia","Odelinda","Odella","Odelle","Odessa","Odetta","Odette","Odilia","Odille","Ofelia","Ofella","Ofilia","Ola","Olenka","Olga","Olia","Olimpia","Olive","Olivette","Olivia","Olivie","Oliy","Ollie","Olly","Olva","Olwen","Olympe","Olympia","Olympie","Ondrea","Oneida","Onida","Oona","Opal","Opalina","Opaline","Ophelia","Ophelie","Ora","Oralee","Oralia","Oralie","Oralla","Oralle","Orel","Orelee","Orelia","Orelie","Orella","Orelle","Oriana","Orly","Orsa","Orsola","Ortensia","Otha","Othelia","Othella","Othilia","Othilie","Ottilie","Page","Paige","Paloma","Pam","Pamela","Pamelina","Pamella","Pammi","Pammie","Pammy","Pandora","Pansie","Pansy","Paola","Paolina","Papagena","Pat","Patience","Patrica","Patrice","Patricia","Patrizia","Patsy","Patti","Pattie","Patty","Paula","Paule","Pauletta","Paulette","Pauli","Paulie","Paulina","Pauline","Paulita","Pauly","Pavia","Pavla","Pearl","Pearla","Pearle","Pearline","Peg","Pegeen","Peggi","Peggie","Peggy","Pen","Penelopa","Penelope","Penni","Pennie","Penny","Pepi","Pepita","Peri","Peria","Perl","Perla","Perle","Perri","Perrine","Perry","Persis","Pet","Peta","Petra","Petrina","Petronella","Petronia","Petronilla","Petronille","Petunia","Phaedra","Phaidra","Phebe","Phedra","Phelia","Phil","Philipa","Philippa","Philippe","Philippine","Philis","Phillida","Phillie","Phillis","Philly","Philomena","Phoebe","Phylis","Phyllida","Phyllis","Phyllys","Phylys","Pia","Pier","Pierette","Pierrette","Pietra","Piper","Pippa","Pippy","Polly","Pollyanna","Pooh","Poppy","Portia","Pris","Prisca","Priscella","Priscilla","Prissie","Pru","Prudence","Prudi","Prudy","Prue","Queenie","Quentin","Querida","Quinn","Quinta","Quintana","Quintilla","Quintina","Rachael","Rachel","Rachele","Rachelle","Rae","Raeann","Raf","Rafa","Rafaela","Rafaelia","Rafaelita","Rahal","Rahel","Raina","Raine","Rakel","Ralina","Ramona","Ramonda","Rana","Randa","Randee","Randene","Randi","Randie","Randy","Ranee","Rani","Rania","Ranice","Ranique","Ranna","Raphaela","Raquel","Raquela","Rasia","Rasla","Raven","Ray","Raychel","Raye","Rayna","Raynell","Rayshell","Rea","Reba","Rebbecca","Rebe","Rebeca","Rebecca","Rebecka","Rebeka","Rebekah","Rebekkah","Ree","Reeba","Reena","Reeta","Reeva","Regan","Reggi","Reggie","Regina","Regine","Reiko","Reina","Reine","Remy","Rena","Renae","Renata","Renate","Rene","Renee","Renell","Renelle","Renie","Rennie","Reta","Retha","Revkah","Rey","Reyna","Rhea","Rheba","Rheta","Rhetta","Rhiamon","Rhianna","Rhianon","Rhoda","Rhodia","Rhodie","Rhody","Rhona","Rhonda","Riane","Riannon","Rianon","Rica","Ricca","Rici","Ricki","Rickie","Ricky","Riki","Rikki","Rina","Risa","Rita","Riva","Rivalee","Rivi","Rivkah","Rivy","Roana","Roanna","Roanne","Robbi","Robbie","Robbin","Robby","Robbyn","Robena","Robenia","Roberta","Robin","Robina","Robinet","Robinett","Robinetta","Robinette","Robinia","Roby","Robyn","Roch","Rochell","Rochella","Rochelle","Rochette","Roda","Rodi","Rodie","Rodina","Rois","Romola","Romona","Romonda","Romy","Rona","Ronalda","Ronda","Ronica","Ronna","Ronni","Ronnica","Ronnie","Ronny","Roobbie","Rora","Rori","Rorie","Rory","Ros","Rosa","Rosabel","Rosabella","Rosabelle","Rosaleen","Rosalia","Rosalie","Rosalind","Rosalinda","Rosalinde","Rosaline","Rosalyn","Rosalynd","Rosamond","Rosamund","Rosana","Rosanna","Rosanne","Rose","Roseann","Roseanna","Roseanne","Roselia","Roselin","Roseline","Rosella","Roselle","Rosemaria","Rosemarie","Rosemary","Rosemonde","Rosene","Rosetta","Rosette","Roshelle","Rosie","Rosina","Rosita","Roslyn","Rosmunda","Rosy","Row","Rowe","Rowena","Roxana","Roxane","Roxanna","Roxanne","Roxi","Roxie","Roxine","Roxy","Roz","Rozalie","Rozalin","Rozamond","Rozanna","Rozanne","Roze","Rozele","Rozella","Rozelle","Rozina","Rubetta","Rubi","Rubia","Rubie","Rubina","Ruby","Ruperta","Ruth","Ruthann","Ruthanne","Ruthe","Ruthi","Ruthie","Ruthy","Ryann","Rycca","Saba","Sabina","Sabine","Sabra","Sabrina","Sacha","Sada","Sadella","Sadie","Sadye","Saidee","Sal","Salaidh","Sallee","Salli","Sallie","Sally","Sallyann","Sallyanne","Saloma","Salome","Salomi","Sam","Samantha","Samara","Samaria","Sammy","Sande","Sandi","Sandie","Sandra","Sandy","Sandye","Sapphira","Sapphire","Sara","Sara-ann","Saraann","Sarah","Sarajane","Saree","Sarena","Sarene","Sarette","Sari","Sarina","Sarine","Sarita","Sascha","Sasha","Sashenka","Saudra","Saundra","Savina","Sayre","Scarlet","Scarlett","Sean","Seana","Seka","Sela","Selena","Selene","Selestina","Selia","Selie","Selina","Selinda","Seline","Sella","Selle","Selma","Sena","Sephira","Serena","Serene","Shae","Shaina","Shaine","Shalna","Shalne","Shana","Shanda","Shandee","Shandeigh","Shandie","Shandra","Shandy","Shane","Shani","Shanie","Shanna","Shannah","Shannen","Shannon","Shanon","Shanta","Shantee","Shara","Sharai","Shari","Sharia","Sharity","Sharl","Sharla","Sharleen","Sharlene","Sharline","Sharon","Sharona","Sharron","Sharyl","Shaun","Shauna","Shawn","Shawna","Shawnee","Shay","Shayla","Shaylah","Shaylyn","Shaylynn","Shayna","Shayne","Shea","Sheba","Sheela","Sheelagh","Sheelah","Sheena","Sheeree","Sheila","Sheila-kathryn","Sheilah","Shel","Shela","Shelagh","Shelba","Shelbi","Shelby","Shelia","Shell","Shelley","Shelli","Shellie","Shelly","Shena","Sher","Sheree","Sheri","Sherie","Sherill","Sherilyn","Sherline","Sherri","Sherrie","Sherry","Sherye","Sheryl","Shina","Shir","Shirl","Shirlee","Shirleen","Shirlene","Shirley","Shirline","Shoshana","Shoshanna","Siana","Sianna","Sib","Sibbie","Sibby","Sibeal","Sibel","Sibella","Sibelle","Sibilla","Sibley","Sibyl","Sibylla","Sibylle","Sidoney","Sidonia","Sidonnie","Sigrid","Sile","Sileas","Silva","Silvana","Silvia","Silvie","Simona","Simone","Simonette","Simonne","Sindee","Siobhan","Sioux","Siouxie","Sisely","Sisile","Sissie","Sissy","Siusan","Sofia","Sofie","Sondra","Sonia","Sonja","Sonni","Sonnie","Sonnnie","Sonny","Sonya","Sophey","Sophi","Sophia","Sophie","Sophronia","Sorcha","Sosanna","Stace","Stacee","Stacey","Staci","Stacia","Stacie","Stacy","Stafani","Star","Starla","Starlene","Starlin","Starr","Stefa","Stefania","Stefanie","Steffane","Steffi","Steffie","Stella","Stepha","Stephana","Stephani","Stephanie","Stephannie","Stephenie","Stephi","Stephie","Stephine","Stesha","Stevana","Stevena","Stoddard","Storm","Stormi","Stormie","Stormy","Sue","Suellen","Sukey","Suki","Sula","Sunny","Sunshine","Susan","Susana","Susanetta","Susann","Susanna","Susannah","Susanne","Susette","Susi","Susie","Susy","Suzann","Suzanna","Suzanne","Suzette","Suzi","Suzie","Suzy","Sybil","Sybila","Sybilla","Sybille","Sybyl","Sydel","Sydelle","Sydney","Sylvia","Tabatha","Tabbatha","Tabbi","Tabbie","Tabbitha","Tabby","Tabina","Tabitha","Taffy","Talia","Tallia","Tallie","Tallou","Tallulah","Tally","Talya","Talyah","Tamar","Tamara","Tamarah","Tamarra","Tamera","Tami","Tamiko","Tamma","Tammara","Tammi","Tammie","Tammy","Tamqrah","Tamra","Tana","Tandi","Tandie","Tandy","Tanhya","Tani","Tania","Tanitansy","Tansy","Tanya","Tara","Tarah","Tarra","Tarrah","Taryn","Tasha","Tasia","Tate","Tatiana","Tatiania","Tatum","Tawnya","Tawsha","Ted","Tedda","Teddi","Teddie","Teddy","Tedi","Tedra","Teena","Teirtza","Teodora","Tera","Teresa","Terese","Teresina","Teresita","Teressa","Teri","Teriann","Terra","Terri","Terrie","Terrijo","Terry","Terrye","Tersina","Terza","Tess","Tessa","Tessi","Tessie","Tessy","Thalia","Thea","Theadora","Theda","Thekla","Thelma","Theo","Theodora","Theodosia","Theresa","Therese","Theresina","Theresita","Theressa","Therine","Thia","Thomasa","Thomasin","Thomasina","Thomasine","Tiena","Tierney","Tiertza","Tiff","Tiffani","Tiffanie","Tiffany","Tiffi","Tiffie","Tiffy","Tilda","Tildi","Tildie","Tildy","Tillie","Tilly","Tim","Timi","Timmi","Timmie","Timmy","Timothea","Tina","Tine","Tiphani","Tiphanie","Tiphany","Tish","Tisha","Tobe","Tobey","Tobi","Toby","Tobye","Toinette","Toma","Tomasina","Tomasine","Tomi","Tommi","Tommie","Tommy","Toni","Tonia","Tonie","Tony","Tonya","Tonye","Tootsie","Torey","Tori","Torie","Torrie","Tory","Tova","Tove","Tracee","Tracey","Traci","Tracie","Tracy","Trenna","Tresa","Trescha","Tressa","Tricia","Trina","Trish","Trisha","Trista","Trix","Trixi","Trixie","Trixy","Truda","Trude","Trudey","Trudi","Trudie","Trudy","Trula","Tuesday","Twila","Twyla","Tybi","Tybie","Tyne","Ula","Ulla","Ulrica","Ulrika","Ulrikaumeko","Ulrike","Umeko","Una","Ursa","Ursala","Ursola","Ursula","Ursulina","Ursuline","Uta","Val","Valaree","Valaria","Vale","Valeda","Valencia","Valene","Valenka","Valentia","Valentina","Valentine","Valera","Valeria","Valerie","Valery","Valerye","Valida","Valina","Valli","Vallie","Vally","Valma","Valry","Van","Vanda","Vanessa","Vania","Vanna","Vanni","Vannie","Vanny","Vanya","Veda","Velma","Velvet","Venita","Venus","Vera","Veradis","Vere","Verena","Verene","Veriee","Verile","Verina","Verine","Verla","Verna","Vernice","Veronica","Veronika","Veronike","Veronique","Vevay","Vi","Vicki","Vickie","Vicky","Victoria","Vida","Viki","Vikki","Vikky","Vilhelmina","Vilma","Vin","Vina","Vinita","Vinni","Vinnie","Vinny","Viola","Violante","Viole","Violet","Violetta","Violette","Virgie","Virgina","Virginia","Virginie","Vita","Vitia","Vitoria","Vittoria","Viv","Viva","Vivi","Vivia","Vivian","Viviana","Vivianna","Vivianne","Vivie","Vivien","Viviene","Vivienne","Viviyan","Vivyan","Vivyanne","Vonni","Vonnie","Vonny","Vyky","Wallie","Wallis","Walliw","Wally","Waly","Wanda","Wandie","Wandis","Waneta","Wanids","Wenda","Wendeline","Wendi","Wendie","Wendy","Wendye","Wenona","Wenonah","Whitney","Wileen","Wilhelmina","Wilhelmine","Wilie","Willa","Willabella","Willamina","Willetta","Willette","Willi","Willie","Willow","Willy","Willyt","Wilma","Wilmette","Wilona","Wilone","Wilow","Windy","Wini","Winifred","Winna","Winnah","Winne","Winni","Winnie","Winnifred","Winny","Winona","Winonah","Wren","Wrennie","Wylma","Wynn","Wynne","Wynnie","Wynny","Xaviera","Xena","Xenia","Xylia","Xylina","Yalonda","Yasmeen","Yasmin","Yelena","Yetta","Yettie","Yetty","Yevette","Ynes","Ynez","Yoko","Yolanda","Yolande","Yolane","Yolanthe","Yoshi","Yoshiko","Yovonnda","Ysabel","Yvette","Yvonne","Zabrina","Zahara","Zandra","Zaneta","Zara","Zarah","Zaria","Zarla","Zea","Zelda","Zelma","Zena","Zenia","Zia","Zilvia","Zita","Zitella","Zoe","Zola","Zonda","Zondra","Zonnya","Zora","Zorah","Zorana","Zorina","Zorine","Zsazsa","Zulema","Zuzana"],a.starWars=["Ackbar","Adi Gallia","Anakin Skywalker","Arvel Crynyd","Ayla Secura","Bail Prestor Organa","Barriss Offee","Ben Quadinaros","Beru Whitesun lars","Bib Fortuna","Biggs Darklighter","Boba Fett","Bossk","C-3PO","Chewbacca","Cliegg Lars","Cordé","Darth Maul","Darth Vader","Dexter Jettster","Dooku","Dormé","Dud Bolt","Eeth Koth","Finis Valorum","Gasgano","Greedo","Gregar Typho","Grievous","Han Solo","IG-88","Jabba Desilijic Tiure","Jango Fett","Jar Jar Binks","Jek Tono Porkins","Jocasta Nu","Ki-Adi-Mundi","Kit Fisto","Lama Su","Lando Calrissian","Leia Organa","Lobot","Luke Skywalker","Luminara Unduli","Mace Windu","Mas Amedda","Mon Mothma","Nien Nunb","Nute Gunray","Obi-Wan Kenobi","Owen Lars","Padmé Amidala","Palpatine","Plo Koon","Poggle the Lesser","Quarsh Panaka","Qui-Gon Jinn","R2-D2","R4-P17","R5-D4","Ratts Tyerel","Raymus Antilles","Ric Olié","Roos Tarpals","Rugor Nass","Saesee Tiin","San Hill","Sebulba","Shaak Ti","Shmi Skywalker","Sly Moore","Tarfful","Taun We","Tion Medon","Wat Tambor","Watto","Wedge Antilles","Wicket Systri Warrick","Wilhuff Tarkin","Yarael Poof","Yoda","Zam Wesell"],a.uniqueNamesGenerator=a=>{const n=[...a&&a.dictionaries||i.dictionaries],l={...i,...a,length:a&&a.length||n.length,dictionaries:n};if(!a||!a.dictionaries||!a.dictionaries.length)throw new Error('A "dictionaries" array must be provided. This is a breaking change introduced starting from Unique Name Generator v4. Read more about the breaking change here: https://github.com/andreasonny83/unique-names-generator#migration-guide');return new e(l).generate()}}); -//# sourceMappingURL=index.umd.js.map diff --git a/tests/iac_integration/cdk/testdata/src/nodejs/NodeJsFunctionConstruct/node_modules/unique-names-generator/dist/seed.d.ts b/tests/iac_integration/cdk/testdata/src/nodejs/NodeJsFunctionConstruct/node_modules/unique-names-generator/dist/seed.d.ts deleted file mode 100644 index a4423da905..0000000000 --- a/tests/iac_integration/cdk/testdata/src/nodejs/NodeJsFunctionConstruct/node_modules/unique-names-generator/dist/seed.d.ts +++ /dev/null @@ -1 +0,0 @@ -export declare const getFromSeed: (seed: number) => number; diff --git a/tests/iac_integration/cdk/testdata/src/nodejs/NodeJsFunctionConstruct/node_modules/unique-names-generator/dist/unique-names-generator.constructor.d.ts b/tests/iac_integration/cdk/testdata/src/nodejs/NodeJsFunctionConstruct/node_modules/unique-names-generator/dist/unique-names-generator.constructor.d.ts deleted file mode 100644 index a93b786381..0000000000 --- a/tests/iac_integration/cdk/testdata/src/nodejs/NodeJsFunctionConstruct/node_modules/unique-names-generator/dist/unique-names-generator.constructor.d.ts +++ /dev/null @@ -1,18 +0,0 @@ -declare type Style = 'lowerCase' | 'upperCase' | 'capital'; -export interface Config { - dictionaries: string[][]; - separator?: string; - length?: number; - style?: Style; - seed?: number; -} -export declare class UniqueNamesGenerator { - private dictionaries; - private length; - private separator; - private style; - private seed; - constructor(config: Config); - generate(): string; -} -export {}; diff --git a/tests/iac_integration/cdk/testdata/src/nodejs/NodeJsFunctionConstruct/node_modules/unique-names-generator/dist/unique-names-generator.d.ts b/tests/iac_integration/cdk/testdata/src/nodejs/NodeJsFunctionConstruct/node_modules/unique-names-generator/dist/unique-names-generator.d.ts deleted file mode 100644 index b406bfb375..0000000000 --- a/tests/iac_integration/cdk/testdata/src/nodejs/NodeJsFunctionConstruct/node_modules/unique-names-generator/dist/unique-names-generator.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -import { Config } from './unique-names-generator.constructor'; -export declare const uniqueNamesGenerator: (customConfig: Config) => string; diff --git a/tests/iac_integration/cdk/testdata/src/nodejs/NodeJsFunctionConstruct/node_modules/unique-names-generator/package.json b/tests/iac_integration/cdk/testdata/src/nodejs/NodeJsFunctionConstruct/node_modules/unique-names-generator/package.json deleted file mode 100644 index 7011c0ae5c..0000000000 --- a/tests/iac_integration/cdk/testdata/src/nodejs/NodeJsFunctionConstruct/node_modules/unique-names-generator/package.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "name": "unique-names-generator", - "version": "4.6.0", - "description": "Generate unique and memorable names", - "engines": { - "node": ">=8" - }, - "scripts": { - "lint": "eslint --ext .ts ./src", - "test": "npm run format && npm run lint && jest --coverage", - "test:watch": "jest --coverage --watchAll", - "format": "prettier --write src/**/*.ts", - "prebuild": "rimraf dist && npm run format", - "build": "microbundle", - "prepublishOnly": "npm run build", - "prerelease": "npm run build", - "release": "np" - }, - "sideEffects": false, - "main": "dist/index.js", - "umd:main": "dist/index.umd.js", - "module": "dist/index.m.js", - "source": "src/index.ts", - "types": "dist/index.d.ts", - "tags": [ - "name-generator", - "unique-names", - "typescript" - ], - "files": [ - "dist" - ], - "author": "AndreaSonny ", - "license": "MIT", - "private": false, - "repository": { - "type": "git", - "url": "git@github.com:andreasonny83/unique-names-generator.git" - }, - "devDependencies": { - "@babel/core": "^7.13.15", - "@babel/preset-env": "^7.13.15", - "@babel/preset-typescript": "^7.13.0", - "@types/jest": "^26.0.22", - "@typescript-eslint/eslint-plugin": "^4.21.0", - "@typescript-eslint/parser": "^4.21.0", - "all-contributors-cli": "^6.20.0", - "babel-jest": "^26.6.3", - "eslint": "^7.23.0", - "eslint-config-prettier": "^8.1.0", - "eslint-plugin-prettier": "^3.3.1", - "jest": "^26.6.3", - "microbundle": "^0.13.0", - "np": "^7.4.0", - "prettier": "^2.2.1", - "prettier-eslint": "^12.0.0", - "rimraf": "^3.0.2", - "typescript": "^4.2.4" - } -} diff --git a/tests/iac_integration/cdk/testdata/src/nodejs/NodeJsFunctionConstruct/package-lock.json b/tests/iac_integration/cdk/testdata/src/nodejs/NodeJsFunctionConstruct/package-lock.json deleted file mode 100644 index 0cc1b77c43..0000000000 --- a/tests/iac_integration/cdk/testdata/src/nodejs/NodeJsFunctionConstruct/package-lock.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "name": "hello_world", - "version": "1.0.0", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "hello_world", - "version": "1.0.0", - "dependencies": { - "unique-names-generator": "^4.6.0" - } - }, - "node_modules/unique-names-generator": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/unique-names-generator/-/unique-names-generator-4.6.0.tgz", - "integrity": "sha512-m0fke1emBeT96UYn2psPQYwljooDWRTKt9oUZ5vlt88ZFMBGxqwPyLHXwCfkbgdm8jzioCp7oIpo6KdM+fnUlQ==", - "engines": { - "node": ">=8" - } - } - }, - "dependencies": { - "unique-names-generator": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/unique-names-generator/-/unique-names-generator-4.6.0.tgz", - "integrity": "sha512-m0fke1emBeT96UYn2psPQYwljooDWRTKt9oUZ5vlt88ZFMBGxqwPyLHXwCfkbgdm8jzioCp7oIpo6KdM+fnUlQ==" - } - } -} diff --git a/tests/iac_integration/cdk/testdata/src/nodejs/NodeJsFunctionConstruct/package.json b/tests/iac_integration/cdk/testdata/src/nodejs/NodeJsFunctionConstruct/package.json deleted file mode 100644 index 1dc652ae81..0000000000 --- a/tests/iac_integration/cdk/testdata/src/nodejs/NodeJsFunctionConstruct/package.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "name": "hello_world", - "version": "1.0.0", - "main": "app.js", - "dependencies": { - "unique-names-generator": "^4.6.0" - } -} diff --git a/tests/iac_integration/cdk/testdata/src/nodejs/layers/LayerVersion/layer_version_dependency.js b/tests/iac_integration/cdk/testdata/src/nodejs/layers/LayerVersion/layer_version_dependency.js deleted file mode 100644 index dcb5e89bc4..0000000000 --- a/tests/iac_integration/cdk/testdata/src/nodejs/layers/LayerVersion/layer_version_dependency.js +++ /dev/null @@ -1,9 +0,0 @@ -const unique_names_generator = require('unique-names-generator'); - -const characterName = unique_names_generator.uniqueNamesGenerator({ - dictionaries: [unique_names_generator.animals] -}); - -exports.get_dependency = () => { - return 7 -}; \ No newline at end of file diff --git a/tests/iac_integration/cdk/testdata/src/nodejs/layers/LayerVersion/package.json b/tests/iac_integration/cdk/testdata/src/nodejs/layers/LayerVersion/package.json deleted file mode 100644 index c4afa6360b..0000000000 --- a/tests/iac_integration/cdk/testdata/src/nodejs/layers/LayerVersion/package.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "name": "dependencies", - "version": "1.0.0", - "main": "layer_version_dependency.js", - "dependencies": { - "unique-names-generator": "^4.6.0" - } -} diff --git a/tests/iac_integration/cdk/testdata/src/python/BuiltFunctionConstruct/app.py b/tests/iac_integration/cdk/testdata/src/python/BuiltFunctionConstruct/app.py deleted file mode 100644 index f9d25fe615..0000000000 --- a/tests/iac_integration/cdk/testdata/src/python/BuiltFunctionConstruct/app.py +++ /dev/null @@ -1,18 +0,0 @@ -import layer_version_dependency -import python_layer_version_dependency -import json - - -def lambda_handler(event, context): - depend1 = layer_version_dependency.get_dependency() - depend2 = python_layer_version_dependency.get_dependency() - - response = { - "statusCode": 200, - "body": json.dumps( - { - "message": f"Hello World from python pre built function {depend1+depend2}", - } - ), - } - return response diff --git a/tests/iac_integration/cdk/testdata/src/python/BundledFunctionConstruct/app.py b/tests/iac_integration/cdk/testdata/src/python/BundledFunctionConstruct/app.py deleted file mode 100644 index d377bfffea..0000000000 --- a/tests/iac_integration/cdk/testdata/src/python/BundledFunctionConstruct/app.py +++ /dev/null @@ -1,19 +0,0 @@ -import layer_version_dependency -import python_layer_version_dependency -from geonamescache import GeonamesCache -import json - - -def lambda_handler(event, context): - depend1 = layer_version_dependency.get_dependency() - depend2 = python_layer_version_dependency.get_dependency() - - response = { - "statusCode": 200, - "body": json.dumps( - { - "message": f"Hello World from bundled function construct with python runtime {depend1+depend2}", - } - ), - } - return response diff --git a/tests/iac_integration/cdk/testdata/src/python/BundledFunctionConstruct/requirements.txt b/tests/iac_integration/cdk/testdata/src/python/BundledFunctionConstruct/requirements.txt deleted file mode 100644 index 63ce47ab44..0000000000 --- a/tests/iac_integration/cdk/testdata/src/python/BundledFunctionConstruct/requirements.txt +++ /dev/null @@ -1 +0,0 @@ -geonamescache \ No newline at end of file diff --git a/tests/iac_integration/cdk/testdata/src/python/FunctionConstruct/app.py b/tests/iac_integration/cdk/testdata/src/python/FunctionConstruct/app.py deleted file mode 100644 index dc1f0d02c0..0000000000 --- a/tests/iac_integration/cdk/testdata/src/python/FunctionConstruct/app.py +++ /dev/null @@ -1,19 +0,0 @@ -import layer_version_dependency -import python_layer_version_dependency -from geonamescache import GeonamesCache -import json - - -def lambda_handler(event, context): - depend1 = layer_version_dependency.get_dependency() - depend2 = python_layer_version_dependency.get_dependency() - - response = { - "statusCode": 200, - "body": json.dumps( - { - "message": f"Hello World from function construct with python runtime {depend1+depend2}", - } - ), - } - return response diff --git a/tests/iac_integration/cdk/testdata/src/python/FunctionConstruct/requirements.txt b/tests/iac_integration/cdk/testdata/src/python/FunctionConstruct/requirements.txt deleted file mode 100644 index 63ce47ab44..0000000000 --- a/tests/iac_integration/cdk/testdata/src/python/FunctionConstruct/requirements.txt +++ /dev/null @@ -1 +0,0 @@ -geonamescache \ No newline at end of file diff --git a/tests/iac_integration/cdk/testdata/src/python/NestedPythonFunctionConstruct/app.py b/tests/iac_integration/cdk/testdata/src/python/NestedPythonFunctionConstruct/app.py deleted file mode 100644 index ffa1cde4a9..0000000000 --- a/tests/iac_integration/cdk/testdata/src/python/NestedPythonFunctionConstruct/app.py +++ /dev/null @@ -1,19 +0,0 @@ -import layer_version_dependency -import python_layer_version_dependency -from geonamescache import GeonamesCache -import json - - -def lambda_handler(event, context): - depend1 = layer_version_dependency.get_dependency() - depend2 = python_layer_version_dependency.get_dependency() - - response = { - "statusCode": 200, - "body": json.dumps( - { - "message": f"Hello World from Nested Python Function Construct {depend1+depend2}", - } - ), - } - return response diff --git a/tests/iac_integration/cdk/testdata/src/python/NestedPythonFunctionConstruct/requirements.txt b/tests/iac_integration/cdk/testdata/src/python/NestedPythonFunctionConstruct/requirements.txt deleted file mode 100644 index 63ce47ab44..0000000000 --- a/tests/iac_integration/cdk/testdata/src/python/NestedPythonFunctionConstruct/requirements.txt +++ /dev/null @@ -1 +0,0 @@ -geonamescache \ No newline at end of file diff --git a/tests/iac_integration/cdk/testdata/src/python/PythonFunctionConstruct/app.py b/tests/iac_integration/cdk/testdata/src/python/PythonFunctionConstruct/app.py deleted file mode 100644 index cb4d8f11e7..0000000000 --- a/tests/iac_integration/cdk/testdata/src/python/PythonFunctionConstruct/app.py +++ /dev/null @@ -1,19 +0,0 @@ -import layer_version_dependency -import python_layer_version_dependency -from geonamescache import GeonamesCache -import json - - -def lambda_handler(event, context): - depend1 = layer_version_dependency.get_dependency() - depend2 = python_layer_version_dependency.get_dependency() - - response = { - "statusCode": 200, - "body": json.dumps( - { - "message": f"Hello World from python function construct {depend1+depend2}", - } - ), - } - return response diff --git a/tests/iac_integration/cdk/testdata/src/python/PythonFunctionConstruct/requirements.txt b/tests/iac_integration/cdk/testdata/src/python/PythonFunctionConstruct/requirements.txt deleted file mode 100644 index 63ce47ab44..0000000000 --- a/tests/iac_integration/cdk/testdata/src/python/PythonFunctionConstruct/requirements.txt +++ /dev/null @@ -1 +0,0 @@ -geonamescache \ No newline at end of file diff --git a/tests/iac_integration/cdk/testdata/src/python/layers/BundledLayerVersion/layer_version_dependency.py b/tests/iac_integration/cdk/testdata/src/python/layers/BundledLayerVersion/layer_version_dependency.py deleted file mode 100644 index e0d6427f81..0000000000 --- a/tests/iac_integration/cdk/testdata/src/python/layers/BundledLayerVersion/layer_version_dependency.py +++ /dev/null @@ -1,5 +0,0 @@ -from geonamescache import GeonamesCache - - -def get_dependency(): - return 5 diff --git a/tests/iac_integration/cdk/testdata/src/python/layers/BundledLayerVersion/requirements.txt b/tests/iac_integration/cdk/testdata/src/python/layers/BundledLayerVersion/requirements.txt deleted file mode 100644 index 63ce47ab44..0000000000 --- a/tests/iac_integration/cdk/testdata/src/python/layers/BundledLayerVersion/requirements.txt +++ /dev/null @@ -1 +0,0 @@ -geonamescache \ No newline at end of file diff --git a/tests/iac_integration/cdk/testdata/src/python/layers/LayerVersion/layer_version_dependency.py b/tests/iac_integration/cdk/testdata/src/python/layers/LayerVersion/layer_version_dependency.py deleted file mode 100644 index e0d6427f81..0000000000 --- a/tests/iac_integration/cdk/testdata/src/python/layers/LayerVersion/layer_version_dependency.py +++ /dev/null @@ -1,5 +0,0 @@ -from geonamescache import GeonamesCache - - -def get_dependency(): - return 5 diff --git a/tests/iac_integration/cdk/testdata/src/python/layers/LayerVersion/requirements.txt b/tests/iac_integration/cdk/testdata/src/python/layers/LayerVersion/requirements.txt deleted file mode 100644 index 63ce47ab44..0000000000 --- a/tests/iac_integration/cdk/testdata/src/python/layers/LayerVersion/requirements.txt +++ /dev/null @@ -1 +0,0 @@ -geonamescache \ No newline at end of file diff --git a/tests/iac_integration/cdk/testdata/src/python/layers/PythonLayerVersion/python_layer_version_dependency.py b/tests/iac_integration/cdk/testdata/src/python/layers/PythonLayerVersion/python_layer_version_dependency.py deleted file mode 100644 index 78a427ccd1..0000000000 --- a/tests/iac_integration/cdk/testdata/src/python/layers/PythonLayerVersion/python_layer_version_dependency.py +++ /dev/null @@ -1,7 +0,0 @@ -from art import * - -ART = art("random") - - -def get_dependency(): - return 2 diff --git a/tests/iac_integration/cdk/testdata/src/python/layers/PythonLayerVersion/requirements.txt b/tests/iac_integration/cdk/testdata/src/python/layers/PythonLayerVersion/requirements.txt deleted file mode 100644 index e36ff697c4..0000000000 --- a/tests/iac_integration/cdk/testdata/src/python/layers/PythonLayerVersion/requirements.txt +++ /dev/null @@ -1 +0,0 @@ -art \ No newline at end of file diff --git a/tests/iac_integration/cdk/testdata/src/rest-api-definition.yaml b/tests/iac_integration/cdk/testdata/src/rest-api-definition.yaml deleted file mode 100644 index 517eaaaea9..0000000000 --- a/tests/iac_integration/cdk/testdata/src/rest-api-definition.yaml +++ /dev/null @@ -1,12 +0,0 @@ -openapi: '3.0.2' -info: - title: API Gateway IP Filtering Example API - -paths: - "/restapis/spec/pythonFunction": - get: - x-amazon-apigateway-integration: - httpMethod: POST - type: AWS_PROXY - uri: arn:${AWS::Partition}:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/arn:${AWS::Partition}:lambda:${AWS::Region}:${AWS::AccountId}:function:pythonFunc:$LATEST/invocations - credentials: arn:${AWS::Partition}:iam::${AWS::AccountId}:role/SpecRestApiRole \ No newline at end of file diff --git a/tests/integration/local/start_api/start_api_integ_base.py b/tests/integration/local/start_api/start_api_integ_base.py index b1f9a6a785..77f755aec8 100644 --- a/tests/integration/local/start_api/start_api_integ_base.py +++ b/tests/integration/local/start_api/start_api_integ_base.py @@ -33,6 +33,9 @@ class StartApiIntegBaseClass(TestCase): do_collect_cmd_init_output: bool = False + command_list = None + project_directory = None + @classmethod def setUpClass(cls): # This is the directory for tests/integration which will be used to file the testdata @@ -84,7 +87,8 @@ def start_api_with_retry(cls, retries=3): def start_api(cls): command = get_sam_command() - command_list = [command, "local", "start-api", "-t", cls.template, "-p", cls.port] + command_list = cls.command_list or [command, "local", "start-api", "-t", cls.template] + command_list.extend(["-p", cls.port]) if cls.container_mode: command_list += ["--warm-containers", cls.container_mode] @@ -99,7 +103,11 @@ def start_api(cls): for image in cls.invoke_image: command_list += ["--invoke-image", image] - cls.start_api_process = Popen(command_list, stderr=PIPE, stdout=PIPE) + cls.start_api_process = ( + Popen(command_list, stderr=PIPE, stdout=PIPE) + if not cls.project_directory + else Popen(command_list, stderr=PIPE, stdout=PIPE, cwd=cls.project_directory) + ) cls.start_api_process_output = wait_for_local_process( cls.start_api_process, cls.port, collect_output=cls.do_collect_cmd_init_output ) diff --git a/tests/integration/local/start_api/test_start_api_with_terraform_application.py b/tests/integration/local/start_api/test_start_api_with_terraform_application.py new file mode 100644 index 0000000000..e8ab21d01d --- /dev/null +++ b/tests/integration/local/start_api/test_start_api_with_terraform_application.py @@ -0,0 +1,268 @@ +import logging +import shutil +import os +from pathlib import Path +from subprocess import CalledProcessError, CompletedProcess, run +from typing import Optional +from unittest import skipIf +from parameterized import parameterized, parameterized_class + +import pytest +import requests + +from tests.integration.local.common_utils import random_port +from tests.integration.local.start_api.start_api_integ_base import StartApiIntegBaseClass +from tests.testing_utils import get_sam_command, CI_OVERRIDE + +LOG = logging.getLogger(__name__) + + +class TerraformStartApiIntegrationBase(StartApiIntegBaseClass): + run_command_timeout = 300 + terraform_application: Optional[str] = None + + @classmethod + def setUpClass(cls): + command = get_sam_command() + cls.template_path = "" + cls.build_before_invoke = False + cls.command_list = [command, "local", "start-api", "--hook-name", "terraform", "--beta-features"] + cls.test_data_path = Path(cls.get_integ_dir()) / "testdata" / "start_api" + cls.project_directory = cls.test_data_path / "terraform" / cls.terraform_application + super(TerraformStartApiIntegrationBase, cls).setUpClass() + + @staticmethod + def get_integ_dir(): + return Path(__file__).resolve().parents[2] + + @classmethod + def tearDownClass(cls) -> None: + super(TerraformStartApiIntegrationBase, cls).tearDownClass() + cls._remove_generated_directories() + + @classmethod + def _remove_generated_directories(cls): + shutil.rmtree(str(Path(cls.project_directory / ".aws-sam-iacs")), ignore_errors=True) + shutil.rmtree(str(Path(cls.project_directory / ".terraform")), ignore_errors=True) + try: + os.remove(str(Path(cls.project_directory / ".terraform.lock.hcl"))) + except (FileNotFoundError, PermissionError): + pass + + @classmethod + def _run_command(cls, command, check) -> CompletedProcess: + test_data_folder = ( + Path(cls.get_integ_dir()) / "testdata" / "start_api" / "terraform" / cls.terraform_application # type: ignore + ) + return run(command, cwd=test_data_folder, check=check, capture_output=True, timeout=cls.run_command_timeout) + + +class TerraformStartApiIntegrationApplyBase(TerraformStartApiIntegrationBase): + terraform_application: str + + @classmethod + def setUpClass(cls): + # init terraform project to populate deploy-only values + cls._run_command(["terraform", "init", "-input=false"], check=True) + cls._run_command(["terraform", "apply", "-auto-approve", "-input=false"], check=True) + + super(TerraformStartApiIntegrationApplyBase, cls).setUpClass() + + @staticmethod + def get_integ_dir(): + return Path(__file__).resolve().parents[2] + + @classmethod + def tearDownClass(cls) -> None: + try: + cls._run_command(["terraform", "apply", "-destroy", "-auto-approve", "-input=false"], check=True) + except CalledProcessError: + # skip, command can fail here if there isn't an applied project to destroy + # (eg. failed to apply in setup) + pass + + try: + os.remove(str(Path(cls.project_directory / "terraform.tfstate"))) # type: ignore + os.remove(str(Path(cls.project_directory / "terraform.tfstate.backup"))) # type: ignore + except (FileNotFoundError, PermissionError): + pass + + super(TerraformStartApiIntegrationApplyBase, cls).tearDownClass() + + +@skipIf( + not CI_OVERRIDE, + "Skip Terraform test cases unless running in CI", +) +@pytest.mark.flaky(reruns=3) +class TestStartApiTerraformApplication(TerraformStartApiIntegrationBase): + terraform_application = "terraform-v1-api-simple" + + def setUp(self): + self.url = "http://127.0.0.1:{}".format(self.port) + + def test_successful_request(self): + response = requests.get(self.url + "/hello", timeout=300) + + self.assertEqual(response.status_code, 200) + self.assertEqual(response.json(), {"message": "hello world"}) + + +@skipIf( + not CI_OVERRIDE, + "Skip Terraform test cases unless running in CI", +) +@pytest.mark.flaky(reruns=3) +@parameterized_class( + [ + { + "terraform_application": "lambda-auth-openapi", + "expected_error_message": "Error: AWS SAM CLI is unable to process a Terraform project that uses an OpenAPI" + " specification to define the API Gateway resource.", + }, + { + "terraform_application": "terraform-api-simple-multiple-resources-limitation", + "expected_error_message": "Error: AWS SAM CLI could not process a Terraform project that contains a source " + "resource that is linked to more than one destination resource.", + }, + { + "terraform_application": "terraform-api-simple-local-variables-limitation", + "expected_error_message": "Error: AWS SAM CLI could not process a Terraform project that uses local " + "variables to define linked resources.", + }, + ] +) +class TestStartApiTerraformApplicationLimitations(TerraformStartApiIntegrationBase): + @classmethod + def setUpClass(cls): + command = get_sam_command() + cls.command_list = [ + command, + "local", + "start-api", + "--hook-name", + "terraform", + "--beta-features", + "-p", + str(random_port()), + ] + cls.test_data_path = Path(cls.get_integ_dir()) / "testdata" / "start_api" + cls.project_directory = cls.test_data_path / "terraform" / cls.terraform_application + + @classmethod + def tearDownClass(cls) -> None: + cls._remove_generated_directories() + + def test_unsupported_limitations(self): + apply_disclaimer_message = "Unresolvable attributes discovered in project, run terraform apply to resolve them." + + process = self._run_command(self.command_list, check=False) + + LOG.info(process.stderr) + output = process.stderr.decode("utf-8") + self.assertEqual(process.returncode, 1) + self.assertRegex(output, self.expected_error_message) + self.assertRegex(output, apply_disclaimer_message) + + +@skipIf( + not CI_OVERRIDE, + "Skip Terraform test cases unless running in CI", +) +@pytest.mark.flaky(reruns=3) +@parameterized_class( + [ + { + "terraform_application": "terraform-api-simple-multiple-resources-limitation", + }, + { + "terraform_application": "terraform-api-simple-local-variables-limitation", + }, + ] +) +class TestStartApiTerraformApplicationLimitationsAfterApply(TerraformStartApiIntegrationApplyBase): + def setUp(self): + self.url = "http://127.0.0.1:{}".format(self.port) + + def test_successful_request(self): + response = requests.get(self.url + "/hello", timeout=300) + + self.assertEqual(response.status_code, 200) + self.assertEqual(response.json(), {"message": "hello world"}) + + +@skipIf( + not CI_OVERRIDE, + "Skip Terraform test cases unless running in CI", +) +@pytest.mark.flaky(reruns=3) +class TestStartApiTerraformApplicationV1LambdaAuthorizers(TerraformStartApiIntegrationBase): + terraform_application = "v1-lambda-authorizer" + + def setUp(self): + self.url = "http://127.0.0.1:{}".format(self.port) + + @parameterized.expand( + [ + ("/hello", {"headers": {"myheader": "123"}}), + ("/hello-request", {"headers": {"myheader": "123"}, "params": {"mystring": "456"}}), + ("/hello-request-empty", {}), + ("/hello-request-empty", {"headers": {"foo": "bar"}}), + ] + ) + def test_invoke_authorizer(self, endpoint, parameters): + response = requests.get(self.url + endpoint, timeout=300, **parameters) + + self.assertEqual(response.status_code, 200) + self.assertEqual(response.json(), {"message": "from authorizer"}) + + @parameterized.expand( + [ + ("/hello", {"headers": {"blank": "invalid"}}), + ("/hello-request", {"headers": {"blank": "invalid"}, "params": {"blank": "invalid"}}), + ] + ) + def test_missing_authorizer_identity_source(self, endpoint, parameters): + response = requests.get(self.url + endpoint, timeout=300, **parameters) + + self.assertEqual(response.status_code, 401) + + def test_fails_token_header_validation_authorizer(self): + response = requests.get(self.url + "/hello", timeout=300, headers={"myheader": "not valid"}) + + self.assertEqual(response.status_code, 401) + + +@skipIf( + not CI_OVERRIDE, + "Skip Terraform test cases unless running in CI", +) +@pytest.mark.flaky(reruns=3) +class TestStartApiTerraformApplicationOpenApiAuthorizer(TerraformStartApiIntegrationApplyBase): + terraform_application = "lambda-auth-openapi" + + def setUp(self): + self.url = "http://127.0.0.1:{}".format(self.port) + + @parameterized.expand( + [ + ("/hello", {"headers": {"myheader": "123"}}), + ("/hello-request", {"headers": {"myheader": "123"}, "params": {"mystring": "456"}}), + ] + ) + def test_successful_request(self, endpoint, params): + response = requests.get(self.url + endpoint, timeout=300, **params) + + self.assertEqual(response.status_code, 200) + self.assertEqual(response.json(), {"message": "from authorizer"}) + + @parameterized.expand( + [ + ("/hello", {"headers": {"missin": "123"}}), + ("/hello-request", {"headers": {"notcorrect": "123"}, "params": {"abcde": "456"}}), + ] + ) + def test_missing_identity_sources(self, endpoint, params): + response = requests.get(self.url + endpoint, timeout=300, **params) + + self.assertEqual(response.status_code, 401) diff --git a/tests/integration/testdata/start_api/terraform/lambda-auth-openapi/lambda-functions.zip b/tests/integration/testdata/start_api/terraform/lambda-auth-openapi/lambda-functions.zip new file mode 100644 index 0000000000..36c2644634 Binary files /dev/null and b/tests/integration/testdata/start_api/terraform/lambda-auth-openapi/lambda-functions.zip differ diff --git a/tests/integration/testdata/start_api/terraform/lambda-auth-openapi/main.tf b/tests/integration/testdata/start_api/terraform/lambda-auth-openapi/main.tf new file mode 100644 index 0000000000..8005fb4e95 --- /dev/null +++ b/tests/integration/testdata/start_api/terraform/lambda-auth-openapi/main.tf @@ -0,0 +1,112 @@ +provider "aws" {} + +data "aws_region" "current" {} + +resource "aws_api_gateway_authorizer" "header_authorizer" { + name = "header-authorizer-open-api" + rest_api_id = aws_api_gateway_rest_api.api.id + authorizer_uri = aws_lambda_function.authorizer.invoke_arn + authorizer_credentials = aws_iam_role.invocation_role.arn + identity_source = "method.request.header.myheader" + identity_validation_expression = "^123$" +} + +resource "aws_lambda_function" "authorizer" { + filename = "lambda-functions.zip" + function_name = "authorizer-open-api" + role = aws_iam_role.invocation_role.arn + handler = "handlers.auth_handler" + runtime = "python3.8" + source_code_hash = filebase64sha256("lambda-functions.zip") +} + +resource "aws_lambda_function" "hello_endpoint" { + filename = "lambda-functions.zip" + function_name = "hello-lambda-open-api" + role = aws_iam_role.invocation_role.arn + handler = "handlers.hello_handler" + runtime = "python3.8" + source_code_hash = filebase64sha256("lambda-functions.zip") +} + +resource "aws_api_gateway_rest_api" "api" { + name = "api-open-api" + body = jsonencode({ + swagger = "2.0" + info = { + title = "api-body" + version = "1.0" + } + securityDefinitions = { + TokenAuthorizer = { + type = "apiKey" + in = "header" + name = "myheader" + x-amazon-apigateway-authtype = "custom" + x-amazon-apigateway-authorizer = { + type = "TOKEN" + authorizerUri = "arn:aws:apigateway:${data.aws_region.current.name}:lambda:path/2015-03-31/functions/${aws_lambda_function.authorizer.arn}/invocations" + } + } + RequestAuthorizer = { + type = "apiKey" + in = "unused" + name = "unused" + x-amazon-apigateway-authtype = "custom" + x-amazon-apigateway-authorizer = { + type = "REQUEST" + identitySource = "method.request.header.myheader, method.request.querystring.mystring" + authorizerUri = "arn:aws:apigateway:${data.aws_region.current.name}:lambda:path/2015-03-31/functions/${aws_lambda_function.authorizer.arn}/invocations" + } + } + } + paths = { + "/hello" = { + get = { + security = [ + {TokenAuthorizer = []} + ] + x-amazon-apigateway-integration = { + httpMethod = "GET" + payloadFormatVersion = "1.0" + type = "AWS_PROXY" + uri = "arn:aws:apigateway:${data.aws_region.current.name}:lambda:path/2015-03-31/functions/${aws_lambda_function.hello_endpoint.arn}/invocations" + } + } + } + "/hello-request" = { + get = { + security = [ + {RequestAuthorizer = []} + ] + x-amazon-apigateway-integration = { + httpMethod = "GET" + payloadFormatVersion = "1.0" + type = "AWS_PROXY" + uri = "arn:aws:apigateway:${data.aws_region.current.name}:lambda:path/2015-03-31/functions/${aws_lambda_function.hello_endpoint.arn}/invocations" + } + } + } + } + }) +} + +resource "aws_iam_role" "invocation_role" { + name = "iam-lambda-open-api" + path = "/" + assume_role_policy = <