Skip to content

Commit

Permalink
refactor(json-schema-2020-12-samples): design formatAPI consistent wi…
Browse files Browse the repository at this point in the history
…th mediatypeAPI and encoderAPI (#9799)

Refs #9739
  • Loading branch information
twankamp committed Apr 11, 2024
1 parent 0f395c2 commit 6160b10
Show file tree
Hide file tree
Showing 4 changed files with 79 additions and 98 deletions.
Expand Up @@ -2,9 +2,9 @@
* @prettier
*/

import Registry from "../class/Registry"
import FormatRegistry from "../class/FormatRegistry"

const registry = new Registry()
const registry = new FormatRegistry()

const formatAPI = (format, generator) => {
if (typeof generator === "function") {
Expand All @@ -15,5 +15,6 @@ const formatAPI = (format, generator) => {

return registry.get(format)
}
formatAPI.getDefaults = () => registry.defaults

export default formatAPI
@@ -0,0 +1,65 @@
/**
* @prettier
*/
import Registry from "./Registry"
import int32Generator from "../generators/int32"
import int64Generator from "../generators/int64"
import floatGenerator from "../generators/float"
import doubleGenerator from "../generators/double"
import emailGenerator from "../generators/email"
import idnEmailGenerator from "../generators/idn-email"
import hostnameGenerator from "../generators/hostname"
import idnHostnameGenerator from "../generators/idn-hostname"
import ipv4Generator from "../generators/ipv4"
import ipv6Generator from "../generators/ipv6"
import uriGenerator from "../generators/uri"
import uriReferenceGenerator from "../generators/uri-reference"
import iriGenerator from "../generators/iri"
import iriReferenceGenerator from "../generators/iri-reference"
import uuidGenerator from "../generators/uuid"
import uriTemplateGenerator from "../generators/uri-template"
import jsonPointerGenerator from "../generators/json-pointer"
import relativeJsonPointerGenerator from "../generators/relative-json-pointer"
import dateTimeGenerator from "../generators/date-time"
import dateGenerator from "../generators/date"
import timeGenerator from "../generators/time"
import durationGenerator from "../generators/duration"
import passwordGenerator from "../generators/password"
import regexGenerator from "../generators/regex"

class FormatRegistry extends Registry {
#defaults = {
int32: int32Generator,
int64: int64Generator,
float: floatGenerator,
double: doubleGenerator,
email: emailGenerator,
"idn-email": idnEmailGenerator,
hostname: hostnameGenerator,
"idn-hostname": idnHostnameGenerator,
ipv4: ipv4Generator,
ipv6: ipv6Generator,
uri: uriGenerator,
"uri-reference": uriReferenceGenerator,
iri: iriGenerator,
"iri-reference": iriReferenceGenerator,
uuid: uuidGenerator,
"uri-template": uriTemplateGenerator,
"json-pointer": jsonPointerGenerator,
"relative-json-pointer": relativeJsonPointerGenerator,
"date-time": dateTimeGenerator,
date: dateGenerator,
time: timeGenerator,
duration: durationGenerator,
password: passwordGenerator,
regex: regexGenerator,
}

data = { ...this.#defaults }

get defaults() {
return { ...this.#defaults }
}
}

export default FormatRegistry
11 changes: 0 additions & 11 deletions src/core/plugins/json-schema-2020-12-samples/fn/types/number.js
Expand Up @@ -3,8 +3,6 @@
*/
import { number as randomNumber } from "../core/random"
import formatAPI from "../api/formatAPI"
import floatGenerator from "../generators/float"
import doubleGenerator from "../generators/double"

const generateFormat = (schema) => {
const { format } = schema
Expand All @@ -14,15 +12,6 @@ const generateFormat = (schema) => {
return formatGenerator(schema)
}

switch (format) {
case "float": {
return floatGenerator()
}
case "double": {
return doubleGenerator()
}
}

return randomNumber()
}

Expand Down
96 changes: 11 additions & 85 deletions src/core/plugins/json-schema-2020-12-samples/fn/types/string.js
Expand Up @@ -5,26 +5,6 @@ import identity from "lodash/identity"

import { string as randomString, randexp } from "../core/random"
import { isJSONSchema } from "../core/predicates"
import emailGenerator from "../generators/email"
import idnEmailGenerator from "../generators/idn-email"
import hostnameGenerator from "../generators/hostname"
import idnHostnameGenerator from "../generators/idn-hostname"
import ipv4Generator from "../generators/ipv4"
import ipv6Generator from "../generators/ipv6"
import uriGenerator from "../generators/uri"
import uriReferenceGenerator from "../generators/uri-reference"
import iriGenerator from "../generators/iri"
import iriReferenceGenerator from "../generators/iri-reference"
import uuidGenerator from "../generators/uuid"
import uriTemplateGenerator from "../generators/uri-template"
import jsonPointerGenerator from "../generators/json-pointer"
import relativeJsonPointerGenerator from "../generators/relative-json-pointer"
import dateTimeGenerator from "../generators/date-time"
import dateGenerator from "../generators/date"
import timeGenerator from "../generators/time"
import durationGenerator from "../generators/duration"
import passwordGenerator from "../generators/password"
import regexGenerator from "../generators/regex"
import formatAPI from "../api/formatAPI"
import encoderAPI from "../api/encoderAPI"
import mediaTypeAPI from "../api/mediaTypeAPI"
Expand All @@ -37,67 +17,15 @@ const generateFormat = (schema) => {
return formatGenerator(schema)
}

switch (format) {
case "email": {
return emailGenerator()
}
case "idn-email": {
return idnEmailGenerator()
}
case "hostname": {
return hostnameGenerator()
}
case "idn-hostname": {
return idnHostnameGenerator()
}
case "ipv4": {
return ipv4Generator()
}
case "ipv6": {
return ipv6Generator()
}
case "uri": {
return uriGenerator()
}
case "uri-reference": {
return uriReferenceGenerator()
}
case "iri": {
return iriGenerator()
}
case "iri-reference": {
return iriReferenceGenerator()
}
case "uuid": {
return uuidGenerator()
}
case "uri-template": {
return uriTemplateGenerator()
}
case "json-pointer": {
return jsonPointerGenerator()
}
case "relative-json-pointer": {
return relativeJsonPointerGenerator()
}
case "date-time": {
return dateTimeGenerator()
}
case "date": {
return dateGenerator()
}
case "time": {
return timeGenerator()
}
case "duration": {
return durationGenerator()
}
case "password": {
return passwordGenerator()
}
case "regex": {
return regexGenerator()
}
return randomString()
}

const generateMediaType = (schema) => {
const { contentMediaType } = schema

const mediaTypeGenerator = mediaTypeAPI(contentMediaType)
if (typeof mediaTypeGenerator === "function") {
return mediaTypeGenerator(schema)
}

return randomString()
Expand All @@ -119,6 +47,7 @@ const applyStringConstraints = (string, constraints = {}) => {

return constrainedString
}

const stringType = (schema, { sample } = {}) => {
const { contentEncoding, contentMediaType, contentSchema } = schema
const { pattern, format } = schema
Expand All @@ -140,10 +69,7 @@ const stringType = (schema, { sample } = {}) => {
generatedString = applyStringConstraints(String(sample), schema)
}
} else if (typeof contentMediaType === "string") {
const mediaTypeGenerator = mediaTypeAPI(contentMediaType)
if (typeof mediaTypeGenerator === "function") {
generatedString = mediaTypeGenerator(schema)
}
generatedString = generateMediaType(schema)
} else {
generatedString = applyStringConstraints(randomString(), schema)
}
Expand Down

0 comments on commit 6160b10

Please sign in to comment.