Add 'body_FormData' generator to template func maps

This commit is contained in:
Aykhan Shahsuvarov 2025-06-01 23:22:55 +04:00
parent a8cd253c63
commit 9152eefdc5
4 changed files with 476 additions and 359 deletions

162
README.md
View File

@ -12,8 +12,8 @@
- [Usage](#usage)
- [1. CLI Usage](#1-cli-usage)
- [2. Config File Usage](#2-config-file-usage)
- [2.1 JSON Example](#21-json-example)
- [2.2 YAML/YML Example](#22-yamlyml-example)
- [2.1 YAML/YML Example](#21-yamlyml-example)
- [2.2 JSON Example](#22-json-example)
- [3. CLI & Config File Combination](#3-cli--config-file-combination)
- [Config Parameters Reference](#config-parameters-reference)
- [Template Functions](#template-functions)
@ -74,7 +74,84 @@ docker run --rm -i aykhans/dodo -u https://example.com -m GET -d 10 -r 1000 -o 1
Send 1000 GET requests to https://example.com with 10 parallel dodos (threads), each with a timeout of 800 milliseconds, within a maximum duration of 250 seconds:
#### 2.1 JSON Example
#### 2.1 YAML/YML Example
```yaml
method: "GET"
url: "https://example.com"
yes: false
timeout: "800ms"
dodos: 10
requests: 1000
duration: "250s"
skip_verify: false
params:
# A random value will be selected from the list for first "key1" param on each request
# And always "value" for second "key1" param on each request
# e.g. "?key1=value2&key1=value"
- key1: ["value1", "value2", "value3", "value4"]
- key1: "value"
# A random value will be selected from the list for param "key2" on each request
# e.g. "?key2=value2"
- key2: ["value1", "value2"]
headers:
# A random value will be selected from the list for first "key1" header on each request
# And always "value" for second "key1" header on each request
# e.g. "key1: value3", "key1: value"
- key1: ["value1", "value2", "value3", "value4"]
- key1: "value"
# A random value will be selected from the list for header "key2" on each request
# e.g. "key2: value2"
- key2: ["value1", "value2"]
cookies:
# A random value will be selected from the list for first "key1" cookie on each request
# And always "value" for second "key1" cookie on each request
# e.g. "key1=value4; key1=value"
- key1: ["value1", "value2", "value3", "value4"]
- key1: "value"
# A random value will be selected from the list for cookie "key2" on each request
# e.g. "key2=value1"
- key2: ["value1", "value2"]
body: "body-text"
# OR
# A random body value will be selected from the list for each request
body:
- "body-text1"
- "body-text2"
- "body-text3"
proxy: "http://example.com:8080"
# OR
# A random proxy will be selected from the list for each request
proxy:
- "http://example.com:8080"
- "http://username:password@example.com:8080"
- "socks5://example.com:8080"
- "socks5h://example.com:8080"
```
```sh
dodo -f /path/config.yaml
# OR
dodo -f https://example.com/config.yaml
```
With Docker:
```sh
docker run --rm -i -v /path/to/config.yaml:/config.yaml aykhans/dodo -f /config.yaml
# OR
docker run --rm -i aykhans/dodo -f https://example.com/config.yaml
```
#### 2.2 JSON Example
```jsonc
{
@ -154,83 +231,6 @@ docker run --rm -i -v /path/to/config.json:/config.json aykhans/dodo
docker run --rm -i aykhans/dodo -f https://example.com/config.json
```
#### 2.2 YAML/YML Example
```yaml
method: "GET"
url: "https://example.com"
yes: false
timeout: "800ms"
dodos: 10
requests: 1000
duration: "250s"
skip_verify: false
params:
# A random value will be selected from the list for first "key1" param on each request
# And always "value" for second "key1" param on each request
# e.g. "?key1=value2&key1=value"
- key1: ["value1", "value2", "value3", "value4"]
- key1: "value"
# A random value will be selected from the list for param "key2" on each request
# e.g. "?key2=value2"
- key2: ["value1", "value2"]
headers:
# A random value will be selected from the list for first "key1" header on each request
# And always "value" for second "key1" header on each request
# e.g. "key1: value3", "key1: value"
- key1: ["value1", "value2", "value3", "value4"]
- key1: "value"
# A random value will be selected from the list for header "key2" on each request
# e.g. "key2: value2"
- key2: ["value1", "value2"]
cookies:
# A random value will be selected from the list for first "key1" cookie on each request
# And always "value" for second "key1" cookie on each request
# e.g. "key1=value4; key1=value"
- key1: ["value1", "value2", "value3", "value4"]
- key1: "value"
# A random value will be selected from the list for cookie "key2" on each request
# e.g. "key2=value1"
- key2: ["value1", "value2"]
body: "body-text"
# OR
# A random body value will be selected from the list for each request
body:
- "body-text1"
- "body-text2"
- "body-text3"
proxy: "http://example.com:8080"
# OR
# A random proxy will be selected from the list for each request
proxy:
- "http://example.com:8080"
- "http://username:password@example.com:8080"
- "socks5://example.com:8080"
- "socks5h://example.com:8080"
```
```sh
dodo -f /path/config.yaml
# OR
dodo -f https://example.com/config.yaml
```
With Docker:
```sh
docker run --rm -i -v /path/to/config.yaml:/config.yaml aykhans/dodo -f /config.yaml
# OR
docker run --rm -i aykhans/dodo -f https://example.com/config.yaml
```
### 3. CLI & Config File Combination
CLI arguments override config file values:
@ -299,6 +299,7 @@ params:
body:
- '{ "username": "{{ fakeit_Username }}", "password": "{{ fakeit_Password }}" }' # e.g. { "username": "john.doe", "password": "password123" }
- '{ "email": "{{ fakeit_Email }}", "phone": "{{ fakeit_Phone }}" }' # e.g. { "email": "john.doe@example.com", "phone": "1234567890" }
- '{{ body_FormData (dict_Str "username" fakeit_Username "password" "secret123") }}' # Creates multipart form data for form submissions, automatically sets the appropriate Content-Type header.
```
In JSON config:
@ -310,6 +311,7 @@ In JSON config:
],
"body": [
"{ \"username\": \"{{ strings_RemoveSpaces fakeit_Username }}\", \"password\": \"{{ fakeit_Password }}\" }", // e.g. { "username": "johndoe", "password": "password123" }
"{{ body_FormData (dict_Str \"username\" fakeit_Username \"password\" \"12345\") }}", // Creates multipart form data for form submissions, automatically sets the appropriate Content-Type header.
],
}
```

View File

@ -204,7 +204,13 @@ func (config *Config) Validate() []error {
}
}
funcMap := utils.NewFuncMap(rand.New(rand.NewSource(time.Now().UnixNano())))
funcMap := *utils.NewFuncMapGenerator(
rand.New(
rand.NewSource(
time.Now().UnixNano(),
),
),
).GetFuncMap()
for _, header := range config.Headers {
t, err := template.New("default").Funcs(funcMap).Parse(header.Key)

View File

@ -111,16 +111,25 @@ func getRequestGeneratorFunc(
getParams := getKeyValueGeneratorFunc(params, localRand)
getHeaders := getKeyValueGeneratorFunc(headers, localRand)
getCookies := getKeyValueGeneratorFunc(cookies, localRand)
getBody := getValueFunc(bodies, utils.NewFuncMap(localRand), localRand)
getBody := getBodyValueFunc(bodies, utils.NewFuncMapGenerator(localRand), localRand)
return func() *fasthttp.Request {
body, contentType := getBody()
headers := getHeaders()
if contentType != "" {
headers = append(headers, types.KeyValue[string, string]{
Key: "Content-Type",
Value: contentType,
})
}
return newFasthttpRequest(
URL,
getParams(),
getHeaders(),
headers,
getCookies(),
method,
getBody(),
body,
)
}
}
@ -201,7 +210,7 @@ func getKeyValueGeneratorFunc[
) func() T {
keyValueGenerators := make([]keyValueGenerator, len(keyValueSlice))
funcMap := utils.NewFuncMap(localRand)
funcMap := *utils.NewFuncMapGenerator(localRand).GetFuncMap()
for i, kv := range keyValueSlice {
keyValueGenerators[i] = keyValueGenerator{
@ -285,3 +294,48 @@ func getValueFunc(
}
}
}
// getBodyValueFunc creates a function that randomly selects and processes a request body from a slice of templates.
// It returns a closure that generates both the body content and the appropriate Content-Type header value.
//
// Parameters:
// - values: A slice of string templates that can contain template directives for request bodies
// - funcMapGenerator: Provides template functions and content type information
// - localRand: A random number generator for consistent randomization
//
// The returned function, when called, will:
// 1. Select a random body template from the values slice
// 2. Execute the selected template with available template functions
// 3. Return both the processed body string and the appropriate Content-Type header value
//
// If the selected template is nil (due to earlier parsing failure), the function will return
// empty strings for both the body and Content-Type.
//
// This enables dynamic generation of request bodies with proper content type headers.
func getBodyValueFunc(
values []string,
funcMapGenerator *utils.FuncMapGenerator,
localRand *rand.Rand,
) func() (string, string) {
templates := make([]*template.Template, len(values))
for i, value := range values {
t, err := template.New("default").Funcs(*funcMapGenerator.GetFuncMap()).Parse(value)
if err != nil {
templates[i] = nil
}
templates[i] = t
}
randomTemplateFunc := utils.RandomValueCycle(templates, localRand)
return func() (string, string) {
if tmpl := randomTemplateFunc(); tmpl == nil {
return "", ""
} else {
var buf bytes.Buffer
_ = tmpl.Execute(&buf, nil)
return buf.String(), funcMapGenerator.GetBodyDataHeader()
}
}
}

View File

@ -1,7 +1,9 @@
package utils
import (
"bytes"
"math/rand"
"mime/multipart"
"strings"
"text/template"
"time"
@ -9,6 +11,31 @@ import (
"github.com/brianvoe/gofakeit/v7"
)
type FuncMapGenerator struct {
bodyDataHeader string
localFaker *gofakeit.Faker
funcMap *template.FuncMap
}
func NewFuncMapGenerator(localRand *rand.Rand) *FuncMapGenerator {
f := &FuncMapGenerator{
localFaker: gofakeit.NewFaker(localRand, false),
}
f.funcMap = f.newFuncMap()
return f
}
func (g *FuncMapGenerator) GetBodyDataHeader() string {
tempHeader := g.bodyDataHeader
g.bodyDataHeader = ""
return tempHeader
}
func (g *FuncMapGenerator) GetFuncMap() *template.FuncMap {
return g.funcMap
}
// NewFuncMap creates a template.FuncMap populated with string manipulation functions
// and data generation functions from gofakeit.
//
@ -17,11 +44,11 @@ import (
//
// All functions are prefixed to avoid naming conflicts:
// - String functions: "strings_*"
// - Dict functions: "dict_*"
// - Body functions: "body_*"
// - Data generation functions: "fakeit_*"
func NewFuncMap(localRand *rand.Rand) template.FuncMap {
localFaker := gofakeit.NewFaker(localRand, false)
return template.FuncMap{
func (g *FuncMapGenerator) newFuncMap() *template.FuncMap {
return &template.FuncMap{
// Strings
"strings_ToUpper": strings.ToUpper,
"strings_ToLower": strings.ToLower,
@ -55,61 +82,89 @@ func NewFuncMap(localRand *rand.Rand) template.FuncMap {
"strings_TrimPrefix": strings.TrimPrefix,
"strings_TrimSuffix": strings.TrimSuffix,
// Dict
"dict_Str": func(values ...any) map[string]string {
dict := make(map[string]string)
for i := 0; i < len(values); i += 2 {
if i+1 < len(values) {
key := values[i].(string)
value := values[i+1].(string)
dict[key] = value
}
}
return dict
},
// Body
"body_FormData": func(kv map[string]string) string {
var data bytes.Buffer
writer := multipart.NewWriter(&data)
for k, v := range kv {
_ = writer.WriteField(k, v)
}
_ = writer.Close()
g.bodyDataHeader = writer.FormDataContentType()
return data.String()
},
// FakeIt / Product
"fakeit_ProductName": localFaker.ProductName,
"fakeit_ProductDescription": localFaker.ProductDescription,
"fakeit_ProductCategory": localFaker.ProductCategory,
"fakeit_ProductFeature": localFaker.ProductFeature,
"fakeit_ProductMaterial": localFaker.ProductMaterial,
"fakeit_ProductUPC": localFaker.ProductUPC,
"fakeit_ProductAudience": localFaker.ProductAudience,
"fakeit_ProductDimension": localFaker.ProductDimension,
"fakeit_ProductUseCase": localFaker.ProductUseCase,
"fakeit_ProductBenefit": localFaker.ProductBenefit,
"fakeit_ProductSuffix": localFaker.ProductSuffix,
"fakeit_ProductName": g.localFaker.ProductName,
"fakeit_ProductDescription": g.localFaker.ProductDescription,
"fakeit_ProductCategory": g.localFaker.ProductCategory,
"fakeit_ProductFeature": g.localFaker.ProductFeature,
"fakeit_ProductMaterial": g.localFaker.ProductMaterial,
"fakeit_ProductUPC": g.localFaker.ProductUPC,
"fakeit_ProductAudience": g.localFaker.ProductAudience,
"fakeit_ProductDimension": g.localFaker.ProductDimension,
"fakeit_ProductUseCase": g.localFaker.ProductUseCase,
"fakeit_ProductBenefit": g.localFaker.ProductBenefit,
"fakeit_ProductSuffix": g.localFaker.ProductSuffix,
// FakeIt / Person
"fakeit_Name": localFaker.Name,
"fakeit_NamePrefix": localFaker.NamePrefix,
"fakeit_NameSuffix": localFaker.NameSuffix,
"fakeit_FirstName": localFaker.FirstName,
"fakeit_MiddleName": localFaker.MiddleName,
"fakeit_LastName": localFaker.LastName,
"fakeit_Gender": localFaker.Gender,
"fakeit_SSN": localFaker.SSN,
"fakeit_Hobby": localFaker.Hobby,
"fakeit_Email": localFaker.Email,
"fakeit_Phone": localFaker.Phone,
"fakeit_PhoneFormatted": localFaker.PhoneFormatted,
"fakeit_Name": g.localFaker.Name,
"fakeit_NamePrefix": g.localFaker.NamePrefix,
"fakeit_NameSuffix": g.localFaker.NameSuffix,
"fakeit_FirstName": g.localFaker.FirstName,
"fakeit_MiddleName": g.localFaker.MiddleName,
"fakeit_LastName": g.localFaker.LastName,
"fakeit_Gender": g.localFaker.Gender,
"fakeit_SSN": g.localFaker.SSN,
"fakeit_Hobby": g.localFaker.Hobby,
"fakeit_Email": g.localFaker.Email,
"fakeit_Phone": g.localFaker.Phone,
"fakeit_PhoneFormatted": g.localFaker.PhoneFormatted,
// FakeIt / Auth
"fakeit_Username": localFaker.Username,
"fakeit_Password": localFaker.Password,
"fakeit_Username": g.localFaker.Username,
"fakeit_Password": g.localFaker.Password,
// FakeIt / Address
"fakeit_City": localFaker.City,
"fakeit_Country": localFaker.Country,
"fakeit_CountryAbr": localFaker.CountryAbr,
"fakeit_State": localFaker.State,
"fakeit_StateAbr": localFaker.StateAbr,
"fakeit_Street": localFaker.Street,
"fakeit_StreetName": localFaker.StreetName,
"fakeit_StreetNumber": localFaker.StreetNumber,
"fakeit_StreetPrefix": localFaker.StreetPrefix,
"fakeit_StreetSuffix": localFaker.StreetSuffix,
"fakeit_Zip": localFaker.Zip,
"fakeit_Latitude": localFaker.Latitude,
"fakeit_City": g.localFaker.City,
"fakeit_Country": g.localFaker.Country,
"fakeit_CountryAbr": g.localFaker.CountryAbr,
"fakeit_State": g.localFaker.State,
"fakeit_StateAbr": g.localFaker.StateAbr,
"fakeit_Street": g.localFaker.Street,
"fakeit_StreetName": g.localFaker.StreetName,
"fakeit_StreetNumber": g.localFaker.StreetNumber,
"fakeit_StreetPrefix": g.localFaker.StreetPrefix,
"fakeit_StreetSuffix": g.localFaker.StreetSuffix,
"fakeit_Zip": g.localFaker.Zip,
"fakeit_Latitude": g.localFaker.Latitude,
"fakeit_LatitudeInRange": func(min, max float64) float64 {
value, err := localFaker.LatitudeInRange(min, max)
value, err := g.localFaker.LatitudeInRange(min, max)
if err != nil {
var zero float64
return zero
}
return value
},
"fakeit_Longitude": localFaker.Longitude,
"fakeit_Longitude": g.localFaker.Longitude,
"fakeit_LongitudeInRange": func(min, max float64) float64 {
value, err := localFaker.LongitudeInRange(min, max)
value, err := g.localFaker.LongitudeInRange(min, max)
if err != nil {
var zero float64
return zero
@ -118,289 +173,289 @@ func NewFuncMap(localRand *rand.Rand) template.FuncMap {
},
// FakeIt / Game
"fakeit_Gamertag": localFaker.Gamertag,
"fakeit_Gamertag": g.localFaker.Gamertag,
// FakeIt / Beer
"fakeit_BeerAlcohol": localFaker.BeerAlcohol,
"fakeit_BeerBlg": localFaker.BeerBlg,
"fakeit_BeerHop": localFaker.BeerHop,
"fakeit_BeerIbu": localFaker.BeerIbu,
"fakeit_BeerMalt": localFaker.BeerMalt,
"fakeit_BeerName": localFaker.BeerName,
"fakeit_BeerStyle": localFaker.BeerStyle,
"fakeit_BeerYeast": localFaker.BeerYeast,
"fakeit_BeerAlcohol": g.localFaker.BeerAlcohol,
"fakeit_BeerBlg": g.localFaker.BeerBlg,
"fakeit_BeerHop": g.localFaker.BeerHop,
"fakeit_BeerIbu": g.localFaker.BeerIbu,
"fakeit_BeerMalt": g.localFaker.BeerMalt,
"fakeit_BeerName": g.localFaker.BeerName,
"fakeit_BeerStyle": g.localFaker.BeerStyle,
"fakeit_BeerYeast": g.localFaker.BeerYeast,
// FakeIt / Car
"fakeit_CarMaker": localFaker.CarMaker,
"fakeit_CarModel": localFaker.CarModel,
"fakeit_CarType": localFaker.CarType,
"fakeit_CarFuelType": localFaker.CarFuelType,
"fakeit_CarTransmissionType": localFaker.CarTransmissionType,
"fakeit_CarMaker": g.localFaker.CarMaker,
"fakeit_CarModel": g.localFaker.CarModel,
"fakeit_CarType": g.localFaker.CarType,
"fakeit_CarFuelType": g.localFaker.CarFuelType,
"fakeit_CarTransmissionType": g.localFaker.CarTransmissionType,
// FakeIt / Words
"fakeit_Noun": localFaker.Noun,
"fakeit_NounCommon": localFaker.NounCommon,
"fakeit_NounConcrete": localFaker.NounConcrete,
"fakeit_NounAbstract": localFaker.NounAbstract,
"fakeit_NounCollectivePeople": localFaker.NounCollectivePeople,
"fakeit_NounCollectiveAnimal": localFaker.NounCollectiveAnimal,
"fakeit_NounCollectiveThing": localFaker.NounCollectiveThing,
"fakeit_NounCountable": localFaker.NounCountable,
"fakeit_NounUncountable": localFaker.NounUncountable,
"fakeit_Verb": localFaker.Verb,
"fakeit_VerbAction": localFaker.VerbAction,
"fakeit_VerbLinking": localFaker.VerbLinking,
"fakeit_VerbHelping": localFaker.VerbHelping,
"fakeit_Adverb": localFaker.Adverb,
"fakeit_AdverbManner": localFaker.AdverbManner,
"fakeit_AdverbDegree": localFaker.AdverbDegree,
"fakeit_AdverbPlace": localFaker.AdverbPlace,
"fakeit_AdverbTimeDefinite": localFaker.AdverbTimeDefinite,
"fakeit_AdverbTimeIndefinite": localFaker.AdverbTimeIndefinite,
"fakeit_AdverbFrequencyDefinite": localFaker.AdverbFrequencyDefinite,
"fakeit_AdverbFrequencyIndefinite": localFaker.AdverbFrequencyIndefinite,
"fakeit_Preposition": localFaker.Preposition,
"fakeit_PrepositionSimple": localFaker.PrepositionSimple,
"fakeit_PrepositionDouble": localFaker.PrepositionDouble,
"fakeit_PrepositionCompound": localFaker.PrepositionCompound,
"fakeit_Adjective": localFaker.Adjective,
"fakeit_AdjectiveDescriptive": localFaker.AdjectiveDescriptive,
"fakeit_AdjectiveQuantitative": localFaker.AdjectiveQuantitative,
"fakeit_AdjectiveProper": localFaker.AdjectiveProper,
"fakeit_AdjectiveDemonstrative": localFaker.AdjectiveDemonstrative,
"fakeit_AdjectivePossessive": localFaker.AdjectivePossessive,
"fakeit_AdjectiveInterrogative": localFaker.AdjectiveInterrogative,
"fakeit_AdjectiveIndefinite": localFaker.AdjectiveIndefinite,
"fakeit_Pronoun": localFaker.Pronoun,
"fakeit_PronounPersonal": localFaker.PronounPersonal,
"fakeit_PronounObject": localFaker.PronounObject,
"fakeit_PronounPossessive": localFaker.PronounPossessive,
"fakeit_PronounReflective": localFaker.PronounReflective,
"fakeit_PronounDemonstrative": localFaker.PronounDemonstrative,
"fakeit_PronounInterrogative": localFaker.PronounInterrogative,
"fakeit_PronounRelative": localFaker.PronounRelative,
"fakeit_Connective": localFaker.Connective,
"fakeit_ConnectiveTime": localFaker.ConnectiveTime,
"fakeit_ConnectiveComparative": localFaker.ConnectiveComparative,
"fakeit_ConnectiveComplaint": localFaker.ConnectiveComplaint,
"fakeit_ConnectiveListing": localFaker.ConnectiveListing,
"fakeit_ConnectiveCasual": localFaker.ConnectiveCasual,
"fakeit_ConnectiveExamplify": localFaker.ConnectiveExamplify,
"fakeit_Word": localFaker.Word,
"fakeit_Sentence": localFaker.Sentence,
"fakeit_Paragraph": localFaker.Paragraph,
"fakeit_LoremIpsumWord": localFaker.LoremIpsumWord,
"fakeit_LoremIpsumSentence": localFaker.LoremIpsumSentence,
"fakeit_LoremIpsumParagraph": localFaker.LoremIpsumParagraph,
"fakeit_Question": localFaker.Question,
"fakeit_Quote": localFaker.Quote,
"fakeit_Phrase": localFaker.Phrase,
"fakeit_Noun": g.localFaker.Noun,
"fakeit_NounCommon": g.localFaker.NounCommon,
"fakeit_NounConcrete": g.localFaker.NounConcrete,
"fakeit_NounAbstract": g.localFaker.NounAbstract,
"fakeit_NounCollectivePeople": g.localFaker.NounCollectivePeople,
"fakeit_NounCollectiveAnimal": g.localFaker.NounCollectiveAnimal,
"fakeit_NounCollectiveThing": g.localFaker.NounCollectiveThing,
"fakeit_NounCountable": g.localFaker.NounCountable,
"fakeit_NounUncountable": g.localFaker.NounUncountable,
"fakeit_Verb": g.localFaker.Verb,
"fakeit_VerbAction": g.localFaker.VerbAction,
"fakeit_VerbLinking": g.localFaker.VerbLinking,
"fakeit_VerbHelping": g.localFaker.VerbHelping,
"fakeit_Adverb": g.localFaker.Adverb,
"fakeit_AdverbManner": g.localFaker.AdverbManner,
"fakeit_AdverbDegree": g.localFaker.AdverbDegree,
"fakeit_AdverbPlace": g.localFaker.AdverbPlace,
"fakeit_AdverbTimeDefinite": g.localFaker.AdverbTimeDefinite,
"fakeit_AdverbTimeIndefinite": g.localFaker.AdverbTimeIndefinite,
"fakeit_AdverbFrequencyDefinite": g.localFaker.AdverbFrequencyDefinite,
"fakeit_AdverbFrequencyIndefinite": g.localFaker.AdverbFrequencyIndefinite,
"fakeit_Preposition": g.localFaker.Preposition,
"fakeit_PrepositionSimple": g.localFaker.PrepositionSimple,
"fakeit_PrepositionDouble": g.localFaker.PrepositionDouble,
"fakeit_PrepositionCompound": g.localFaker.PrepositionCompound,
"fakeit_Adjective": g.localFaker.Adjective,
"fakeit_AdjectiveDescriptive": g.localFaker.AdjectiveDescriptive,
"fakeit_AdjectiveQuantitative": g.localFaker.AdjectiveQuantitative,
"fakeit_AdjectiveProper": g.localFaker.AdjectiveProper,
"fakeit_AdjectiveDemonstrative": g.localFaker.AdjectiveDemonstrative,
"fakeit_AdjectivePossessive": g.localFaker.AdjectivePossessive,
"fakeit_AdjectiveInterrogative": g.localFaker.AdjectiveInterrogative,
"fakeit_AdjectiveIndefinite": g.localFaker.AdjectiveIndefinite,
"fakeit_Pronoun": g.localFaker.Pronoun,
"fakeit_PronounPersonal": g.localFaker.PronounPersonal,
"fakeit_PronounObject": g.localFaker.PronounObject,
"fakeit_PronounPossessive": g.localFaker.PronounPossessive,
"fakeit_PronounReflective": g.localFaker.PronounReflective,
"fakeit_PronounDemonstrative": g.localFaker.PronounDemonstrative,
"fakeit_PronounInterrogative": g.localFaker.PronounInterrogative,
"fakeit_PronounRelative": g.localFaker.PronounRelative,
"fakeit_Connective": g.localFaker.Connective,
"fakeit_ConnectiveTime": g.localFaker.ConnectiveTime,
"fakeit_ConnectiveComparative": g.localFaker.ConnectiveComparative,
"fakeit_ConnectiveComplaint": g.localFaker.ConnectiveComplaint,
"fakeit_ConnectiveListing": g.localFaker.ConnectiveListing,
"fakeit_ConnectiveCasual": g.localFaker.ConnectiveCasual,
"fakeit_ConnectiveExamplify": g.localFaker.ConnectiveExamplify,
"fakeit_Word": g.localFaker.Word,
"fakeit_Sentence": g.localFaker.Sentence,
"fakeit_Paragraph": g.localFaker.Paragraph,
"fakeit_LoremIpsumWord": g.localFaker.LoremIpsumWord,
"fakeit_LoremIpsumSentence": g.localFaker.LoremIpsumSentence,
"fakeit_LoremIpsumParagraph": g.localFaker.LoremIpsumParagraph,
"fakeit_Question": g.localFaker.Question,
"fakeit_Quote": g.localFaker.Quote,
"fakeit_Phrase": g.localFaker.Phrase,
// FakeIt / Foods
"fakeit_Fruit": localFaker.Fruit,
"fakeit_Vegetable": localFaker.Vegetable,
"fakeit_Breakfast": localFaker.Breakfast,
"fakeit_Lunch": localFaker.Lunch,
"fakeit_Dinner": localFaker.Dinner,
"fakeit_Snack": localFaker.Snack,
"fakeit_Dessert": localFaker.Dessert,
"fakeit_Fruit": g.localFaker.Fruit,
"fakeit_Vegetable": g.localFaker.Vegetable,
"fakeit_Breakfast": g.localFaker.Breakfast,
"fakeit_Lunch": g.localFaker.Lunch,
"fakeit_Dinner": g.localFaker.Dinner,
"fakeit_Snack": g.localFaker.Snack,
"fakeit_Dessert": g.localFaker.Dessert,
// FakeIt / Misc
"fakeit_Bool": localFaker.Bool,
"fakeit_UUID": localFaker.UUID,
"fakeit_FlipACoin": localFaker.FlipACoin,
"fakeit_Bool": g.localFaker.Bool,
"fakeit_UUID": g.localFaker.UUID,
"fakeit_FlipACoin": g.localFaker.FlipACoin,
// FakeIt / Colors
"fakeit_Color": localFaker.Color,
"fakeit_HexColor": localFaker.HexColor,
"fakeit_RGBColor": localFaker.RGBColor,
"fakeit_SafeColor": localFaker.SafeColor,
"fakeit_NiceColors": localFaker.NiceColors,
"fakeit_Color": g.localFaker.Color,
"fakeit_HexColor": g.localFaker.HexColor,
"fakeit_RGBColor": g.localFaker.RGBColor,
"fakeit_SafeColor": g.localFaker.SafeColor,
"fakeit_NiceColors": g.localFaker.NiceColors,
// FakeIt / Internet
"fakeit_URL": localFaker.URL,
"fakeit_DomainName": localFaker.DomainName,
"fakeit_DomainSuffix": localFaker.DomainSuffix,
"fakeit_IPv4Address": localFaker.IPv4Address,
"fakeit_IPv6Address": localFaker.IPv6Address,
"fakeit_MacAddress": localFaker.MacAddress,
"fakeit_HTTPStatusCode": localFaker.HTTPStatusCode,
"fakeit_HTTPStatusCodeSimple": localFaker.HTTPStatusCodeSimple,
"fakeit_LogLevel": localFaker.LogLevel,
"fakeit_HTTPMethod": localFaker.HTTPMethod,
"fakeit_HTTPVersion": localFaker.HTTPVersion,
"fakeit_UserAgent": localFaker.UserAgent,
"fakeit_ChromeUserAgent": localFaker.ChromeUserAgent,
"fakeit_FirefoxUserAgent": localFaker.FirefoxUserAgent,
"fakeit_OperaUserAgent": localFaker.OperaUserAgent,
"fakeit_SafariUserAgent": localFaker.SafariUserAgent,
"fakeit_URL": g.localFaker.URL,
"fakeit_DomainName": g.localFaker.DomainName,
"fakeit_DomainSuffix": g.localFaker.DomainSuffix,
"fakeit_IPv4Address": g.localFaker.IPv4Address,
"fakeit_IPv6Address": g.localFaker.IPv6Address,
"fakeit_MacAddress": g.localFaker.MacAddress,
"fakeit_HTTPStatusCode": g.localFaker.HTTPStatusCode,
"fakeit_HTTPStatusCodeSimple": g.localFaker.HTTPStatusCodeSimple,
"fakeit_LogLevel": g.localFaker.LogLevel,
"fakeit_HTTPMethod": g.localFaker.HTTPMethod,
"fakeit_HTTPVersion": g.localFaker.HTTPVersion,
"fakeit_UserAgent": g.localFaker.UserAgent,
"fakeit_ChromeUserAgent": g.localFaker.ChromeUserAgent,
"fakeit_FirefoxUserAgent": g.localFaker.FirefoxUserAgent,
"fakeit_OperaUserAgent": g.localFaker.OperaUserAgent,
"fakeit_SafariUserAgent": g.localFaker.SafariUserAgent,
// FakeIt / HTML
"fakeit_InputName": localFaker.InputName,
"fakeit_InputName": g.localFaker.InputName,
// FakeIt / Date/Time
"fakeit_Date": localFaker.Date,
"fakeit_PastDate": localFaker.PastDate,
"fakeit_FutureDate": localFaker.FutureDate,
"fakeit_DateRange": localFaker.DateRange,
"fakeit_NanoSecond": localFaker.NanoSecond,
"fakeit_Second": localFaker.Second,
"fakeit_Minute": localFaker.Minute,
"fakeit_Hour": localFaker.Hour,
"fakeit_Month": localFaker.Month,
"fakeit_MonthString": localFaker.MonthString,
"fakeit_Day": localFaker.Day,
"fakeit_WeekDay": localFaker.WeekDay,
"fakeit_Year": localFaker.Year,
"fakeit_TimeZone": localFaker.TimeZone,
"fakeit_TimeZoneAbv": localFaker.TimeZoneAbv,
"fakeit_TimeZoneFull": localFaker.TimeZoneFull,
"fakeit_TimeZoneOffset": localFaker.TimeZoneOffset,
"fakeit_TimeZoneRegion": localFaker.TimeZoneRegion,
"fakeit_Date": g.localFaker.Date,
"fakeit_PastDate": g.localFaker.PastDate,
"fakeit_FutureDate": g.localFaker.FutureDate,
"fakeit_DateRange": g.localFaker.DateRange,
"fakeit_NanoSecond": g.localFaker.NanoSecond,
"fakeit_Second": g.localFaker.Second,
"fakeit_Minute": g.localFaker.Minute,
"fakeit_Hour": g.localFaker.Hour,
"fakeit_Month": g.localFaker.Month,
"fakeit_MonthString": g.localFaker.MonthString,
"fakeit_Day": g.localFaker.Day,
"fakeit_WeekDay": g.localFaker.WeekDay,
"fakeit_Year": g.localFaker.Year,
"fakeit_TimeZone": g.localFaker.TimeZone,
"fakeit_TimeZoneAbv": g.localFaker.TimeZoneAbv,
"fakeit_TimeZoneFull": g.localFaker.TimeZoneFull,
"fakeit_TimeZoneOffset": g.localFaker.TimeZoneOffset,
"fakeit_TimeZoneRegion": g.localFaker.TimeZoneRegion,
// FakeIt / Payment
"fakeit_Price": localFaker.Price,
"fakeit_CreditCardCvv": localFaker.CreditCardCvv,
"fakeit_CreditCardExp": localFaker.CreditCardExp,
"fakeit_CreditCardNumber": localFaker.CreditCardNumber,
"fakeit_CreditCardType": localFaker.CreditCardType,
"fakeit_CurrencyLong": localFaker.CurrencyLong,
"fakeit_CurrencyShort": localFaker.CurrencyShort,
"fakeit_AchRouting": localFaker.AchRouting,
"fakeit_AchAccount": localFaker.AchAccount,
"fakeit_BitcoinAddress": localFaker.BitcoinAddress,
"fakeit_BitcoinPrivateKey": localFaker.BitcoinPrivateKey,
"fakeit_Price": g.localFaker.Price,
"fakeit_CreditCardCvv": g.localFaker.CreditCardCvv,
"fakeit_CreditCardExp": g.localFaker.CreditCardExp,
"fakeit_CreditCardNumber": g.localFaker.CreditCardNumber,
"fakeit_CreditCardType": g.localFaker.CreditCardType,
"fakeit_CurrencyLong": g.localFaker.CurrencyLong,
"fakeit_CurrencyShort": g.localFaker.CurrencyShort,
"fakeit_AchRouting": g.localFaker.AchRouting,
"fakeit_AchAccount": g.localFaker.AchAccount,
"fakeit_BitcoinAddress": g.localFaker.BitcoinAddress,
"fakeit_BitcoinPrivateKey": g.localFaker.BitcoinPrivateKey,
// FakeIt / Finance
"fakeit_Cusip": localFaker.Cusip,
"fakeit_Isin": localFaker.Isin,
"fakeit_Cusip": g.localFaker.Cusip,
"fakeit_Isin": g.localFaker.Isin,
// FakeIt / Company
"fakeit_BS": localFaker.BS,
"fakeit_Blurb": localFaker.Blurb,
"fakeit_BuzzWord": localFaker.BuzzWord,
"fakeit_Company": localFaker.Company,
"fakeit_CompanySuffix": localFaker.CompanySuffix,
"fakeit_JobDescriptor": localFaker.JobDescriptor,
"fakeit_JobLevel": localFaker.JobLevel,
"fakeit_JobTitle": localFaker.JobTitle,
"fakeit_Slogan": localFaker.Slogan,
"fakeit_BS": g.localFaker.BS,
"fakeit_Blurb": g.localFaker.Blurb,
"fakeit_BuzzWord": g.localFaker.BuzzWord,
"fakeit_Company": g.localFaker.Company,
"fakeit_CompanySuffix": g.localFaker.CompanySuffix,
"fakeit_JobDescriptor": g.localFaker.JobDescriptor,
"fakeit_JobLevel": g.localFaker.JobLevel,
"fakeit_JobTitle": g.localFaker.JobTitle,
"fakeit_Slogan": g.localFaker.Slogan,
// FakeIt / Hacker
"fakeit_HackerAbbreviation": localFaker.HackerAbbreviation,
"fakeit_HackerAdjective": localFaker.HackerAdjective,
"fakeit_HackerNoun": localFaker.HackerNoun,
"fakeit_HackerPhrase": localFaker.HackerPhrase,
"fakeit_HackerVerb": localFaker.HackerVerb,
"fakeit_HackerAbbreviation": g.localFaker.HackerAbbreviation,
"fakeit_HackerAdjective": g.localFaker.HackerAdjective,
"fakeit_HackerNoun": g.localFaker.HackerNoun,
"fakeit_HackerPhrase": g.localFaker.HackerPhrase,
"fakeit_HackerVerb": g.localFaker.HackerVerb,
// FakeIt / Hipster
"fakeit_HipsterWord": localFaker.HipsterWord,
"fakeit_HipsterSentence": localFaker.HipsterSentence,
"fakeit_HipsterParagraph": localFaker.HipsterParagraph,
"fakeit_HipsterWord": g.localFaker.HipsterWord,
"fakeit_HipsterSentence": g.localFaker.HipsterSentence,
"fakeit_HipsterParagraph": g.localFaker.HipsterParagraph,
// FakeIt / App
"fakeit_AppName": localFaker.AppName,
"fakeit_AppVersion": localFaker.AppVersion,
"fakeit_AppAuthor": localFaker.AppAuthor,
"fakeit_AppName": g.localFaker.AppName,
"fakeit_AppVersion": g.localFaker.AppVersion,
"fakeit_AppAuthor": g.localFaker.AppAuthor,
// FakeIt / Animal
"fakeit_PetName": localFaker.PetName,
"fakeit_Animal": localFaker.Animal,
"fakeit_AnimalType": localFaker.AnimalType,
"fakeit_FarmAnimal": localFaker.FarmAnimal,
"fakeit_Cat": localFaker.Cat,
"fakeit_Dog": localFaker.Dog,
"fakeit_Bird": localFaker.Bird,
"fakeit_PetName": g.localFaker.PetName,
"fakeit_Animal": g.localFaker.Animal,
"fakeit_AnimalType": g.localFaker.AnimalType,
"fakeit_FarmAnimal": g.localFaker.FarmAnimal,
"fakeit_Cat": g.localFaker.Cat,
"fakeit_Dog": g.localFaker.Dog,
"fakeit_Bird": g.localFaker.Bird,
// FakeIt / Emoji
"fakeit_Emoji": localFaker.Emoji,
"fakeit_EmojiDescription": localFaker.EmojiDescription,
"fakeit_EmojiCategory": localFaker.EmojiCategory,
"fakeit_EmojiAlias": localFaker.EmojiAlias,
"fakeit_EmojiTag": localFaker.EmojiTag,
"fakeit_Emoji": g.localFaker.Emoji,
"fakeit_EmojiDescription": g.localFaker.EmojiDescription,
"fakeit_EmojiCategory": g.localFaker.EmojiCategory,
"fakeit_EmojiAlias": g.localFaker.EmojiAlias,
"fakeit_EmojiTag": g.localFaker.EmojiTag,
// FakeIt / Language
"fakeit_Language": localFaker.Language,
"fakeit_LanguageAbbreviation": localFaker.LanguageAbbreviation,
"fakeit_ProgrammingLanguage": localFaker.ProgrammingLanguage,
"fakeit_Language": g.localFaker.Language,
"fakeit_LanguageAbbreviation": g.localFaker.LanguageAbbreviation,
"fakeit_ProgrammingLanguage": g.localFaker.ProgrammingLanguage,
// FakeIt / Number
"fakeit_Number": localFaker.Number,
"fakeit_Int": localFaker.Int,
"fakeit_IntN": localFaker.IntN,
"fakeit_Int8": localFaker.Int8,
"fakeit_Int16": localFaker.Int16,
"fakeit_Int32": localFaker.Int32,
"fakeit_Int64": localFaker.Int64,
"fakeit_Uint": localFaker.Uint,
"fakeit_UintN": localFaker.UintN,
"fakeit_Uint8": localFaker.Uint8,
"fakeit_Uint16": localFaker.Uint16,
"fakeit_Uint32": localFaker.Uint32,
"fakeit_Uint64": localFaker.Uint64,
"fakeit_Float32": localFaker.Float32,
"fakeit_Float32Range": localFaker.Float32Range,
"fakeit_Float64": localFaker.Float64,
"fakeit_Float64Range": localFaker.Float64Range,
"fakeit_HexUint": localFaker.HexUint,
"fakeit_Number": g.localFaker.Number,
"fakeit_Int": g.localFaker.Int,
"fakeit_IntN": g.localFaker.IntN,
"fakeit_Int8": g.localFaker.Int8,
"fakeit_Int16": g.localFaker.Int16,
"fakeit_Int32": g.localFaker.Int32,
"fakeit_Int64": g.localFaker.Int64,
"fakeit_Uint": g.localFaker.Uint,
"fakeit_UintN": g.localFaker.UintN,
"fakeit_Uint8": g.localFaker.Uint8,
"fakeit_Uint16": g.localFaker.Uint16,
"fakeit_Uint32": g.localFaker.Uint32,
"fakeit_Uint64": g.localFaker.Uint64,
"fakeit_Float32": g.localFaker.Float32,
"fakeit_Float32Range": g.localFaker.Float32Range,
"fakeit_Float64": g.localFaker.Float64,
"fakeit_Float64Range": g.localFaker.Float64Range,
"fakeit_HexUint": g.localFaker.HexUint,
// FakeIt / String
"fakeit_Digit": localFaker.Digit,
"fakeit_DigitN": localFaker.DigitN,
"fakeit_Letter": localFaker.Letter,
"fakeit_LetterN": localFaker.LetterN,
"fakeit_Lexify": localFaker.Lexify,
"fakeit_Numerify": localFaker.Numerify,
"fakeit_Digit": g.localFaker.Digit,
"fakeit_DigitN": g.localFaker.DigitN,
"fakeit_Letter": g.localFaker.Letter,
"fakeit_LetterN": g.localFaker.LetterN,
"fakeit_Lexify": g.localFaker.Lexify,
"fakeit_Numerify": g.localFaker.Numerify,
// FakeIt / Celebrity
"fakeit_CelebrityActor": localFaker.CelebrityActor,
"fakeit_CelebrityBusiness": localFaker.CelebrityBusiness,
"fakeit_CelebritySport": localFaker.CelebritySport,
"fakeit_CelebrityActor": g.localFaker.CelebrityActor,
"fakeit_CelebrityBusiness": g.localFaker.CelebrityBusiness,
"fakeit_CelebritySport": g.localFaker.CelebritySport,
// FakeIt / Minecraft
"fakeit_MinecraftOre": localFaker.MinecraftOre,
"fakeit_MinecraftWood": localFaker.MinecraftWood,
"fakeit_MinecraftArmorTier": localFaker.MinecraftArmorTier,
"fakeit_MinecraftArmorPart": localFaker.MinecraftArmorPart,
"fakeit_MinecraftWeapon": localFaker.MinecraftWeapon,
"fakeit_MinecraftTool": localFaker.MinecraftTool,
"fakeit_MinecraftDye": localFaker.MinecraftDye,
"fakeit_MinecraftFood": localFaker.MinecraftFood,
"fakeit_MinecraftAnimal": localFaker.MinecraftAnimal,
"fakeit_MinecraftVillagerJob": localFaker.MinecraftVillagerJob,
"fakeit_MinecraftVillagerStation": localFaker.MinecraftVillagerStation,
"fakeit_MinecraftVillagerLevel": localFaker.MinecraftVillagerLevel,
"fakeit_MinecraftMobPassive": localFaker.MinecraftMobPassive,
"fakeit_MinecraftMobNeutral": localFaker.MinecraftMobNeutral,
"fakeit_MinecraftMobHostile": localFaker.MinecraftMobHostile,
"fakeit_MinecraftMobBoss": localFaker.MinecraftMobBoss,
"fakeit_MinecraftBiome": localFaker.MinecraftBiome,
"fakeit_MinecraftWeather": localFaker.MinecraftWeather,
"fakeit_MinecraftOre": g.localFaker.MinecraftOre,
"fakeit_MinecraftWood": g.localFaker.MinecraftWood,
"fakeit_MinecraftArmorTier": g.localFaker.MinecraftArmorTier,
"fakeit_MinecraftArmorPart": g.localFaker.MinecraftArmorPart,
"fakeit_MinecraftWeapon": g.localFaker.MinecraftWeapon,
"fakeit_MinecraftTool": g.localFaker.MinecraftTool,
"fakeit_MinecraftDye": g.localFaker.MinecraftDye,
"fakeit_MinecraftFood": g.localFaker.MinecraftFood,
"fakeit_MinecraftAnimal": g.localFaker.MinecraftAnimal,
"fakeit_MinecraftVillagerJob": g.localFaker.MinecraftVillagerJob,
"fakeit_MinecraftVillagerStation": g.localFaker.MinecraftVillagerStation,
"fakeit_MinecraftVillagerLevel": g.localFaker.MinecraftVillagerLevel,
"fakeit_MinecraftMobPassive": g.localFaker.MinecraftMobPassive,
"fakeit_MinecraftMobNeutral": g.localFaker.MinecraftMobNeutral,
"fakeit_MinecraftMobHostile": g.localFaker.MinecraftMobHostile,
"fakeit_MinecraftMobBoss": g.localFaker.MinecraftMobBoss,
"fakeit_MinecraftBiome": g.localFaker.MinecraftBiome,
"fakeit_MinecraftWeather": g.localFaker.MinecraftWeather,
// FakeIt / Book
"fakeit_BookTitle": localFaker.BookTitle,
"fakeit_BookAuthor": localFaker.BookAuthor,
"fakeit_BookGenre": localFaker.BookGenre,
"fakeit_BookTitle": g.localFaker.BookTitle,
"fakeit_BookAuthor": g.localFaker.BookAuthor,
"fakeit_BookGenre": g.localFaker.BookGenre,
// FakeIt / Movie
"fakeit_MovieName": localFaker.MovieName,
"fakeit_MovieGenre": localFaker.MovieGenre,
"fakeit_MovieName": g.localFaker.MovieName,
"fakeit_MovieGenre": g.localFaker.MovieGenre,
// FakeIt / Error
"fakeit_Error": localFaker.Error,
"fakeit_ErrorDatabase": localFaker.ErrorDatabase,
"fakeit_ErrorGRPC": localFaker.ErrorGRPC,
"fakeit_ErrorHTTP": localFaker.ErrorHTTP,
"fakeit_ErrorHTTPClient": localFaker.ErrorHTTPClient,
"fakeit_ErrorHTTPServer": localFaker.ErrorHTTPServer,
"fakeit_ErrorRuntime": localFaker.ErrorRuntime,
"fakeit_Error": g.localFaker.Error,
"fakeit_ErrorDatabase": g.localFaker.ErrorDatabase,
"fakeit_ErrorGRPC": g.localFaker.ErrorGRPC,
"fakeit_ErrorHTTP": g.localFaker.ErrorHTTP,
"fakeit_ErrorHTTPClient": g.localFaker.ErrorHTTPClient,
"fakeit_ErrorHTTPServer": g.localFaker.ErrorHTTPServer,
"fakeit_ErrorRuntime": g.localFaker.ErrorRuntime,
// FakeIt / School
"fakeit_School": localFaker.School,
"fakeit_School": g.localFaker.School,
// FakeIt / Song
"fakeit_SongName": localFaker.SongName,
"fakeit_SongArtist": localFaker.SongArtist,
"fakeit_SongGenre": localFaker.SongGenre,
"fakeit_SongName": g.localFaker.SongName,
"fakeit_SongArtist": g.localFaker.SongArtist,
"fakeit_SongGenre": g.localFaker.SongGenre,
}
}